static void PrintCertificateInfo(NPT_TlsCertificateInfo& cert_info) { printf("[6] Fingerprints:\n"); printf("MD5: %s\n", NPT_HexString(cert_info.fingerprint.md5, sizeof(cert_info.fingerprint.md5), ":").GetChars()); printf("SHA1: %s\n", NPT_HexString(cert_info.fingerprint.sha1, sizeof(cert_info.fingerprint.sha1), ":").GetChars()); printf("Subject Certificate:\n"); printf(" Common Name = %s\n", cert_info.subject.common_name.GetChars()); printf(" Organization = %s\n", cert_info.subject.organization.GetChars()); printf(" Organizational Name = %s\n", cert_info.subject.organizational_name.GetChars()); printf("Issuer Certificate:\n"); printf(" Common Name = %s\n", cert_info.issuer.common_name.GetChars()); printf(" Organization = %s\n", cert_info.issuer.organization.GetChars()); printf(" Organizational Name = %s\n", cert_info.issuer.organizational_name.GetChars()); printf("Issue Date: %d/%d/%d %02d:%02d:%02d\n", cert_info.issue_date.m_Year, cert_info.issue_date.m_Month, cert_info.issue_date.m_Day, cert_info.issue_date.m_Hours, cert_info.issue_date.m_Minutes, cert_info.issue_date.m_Seconds); printf("Expiration Date: %d/%d/%d %02d:%02d:%02d\n", cert_info.expiration_date.m_Year, cert_info.expiration_date.m_Month, cert_info.expiration_date.m_Day, cert_info.expiration_date.m_Hours, cert_info.expiration_date.m_Minutes, cert_info.expiration_date.m_Seconds); printf("\n"); }
static void PrintSessionInfo(NPT_TlsSession& session) { NPT_Result result; NPT_DataBuffer session_id; result = session.GetSessionId(session_id); CHECK(result == NPT_SUCCESS); CHECK(session_id.GetDataSize() > 0); printf("[5] Session ID: "); printf("%s", NPT_HexString(session_id.GetData(), session_id.GetDataSize()).GetChars()); printf("\n"); NPT_TlsCertificateInfo cert_info; result = session.GetPeerCertificateInfo(cert_info); CHECK(result == NPT_SUCCESS); PrintCertificateInfo(cert_info); printf("[7] Cipher Type = %d (%s)\n", session.GetCipherSuiteId(), GetCipherSuiteName(session.GetCipherSuiteId())); for (NPT_List<NPT_String>::Iterator i=cert_info.alternate_names.GetFirstItem(); i; ++i) { NPT_String& name = *i; printf("[8] Alternate Name = %s\n", name.GetChars()); } }
int main(int /*argc*/, char** /*argv*/) { TestPrivateKeys(); /* test a connection */ const char* hostname = "koala.bok.net"; printf("[1] Connecting to %s...\n", hostname); NPT_Socket* client_socket = new NPT_TcpClientSocket(); NPT_IpAddress server_ip; server_ip.ResolveName(hostname); NPT_SocketAddress server_addr(server_ip, 443); NPT_Result result = client_socket->Connect(server_addr); printf("[2] Connection result = %d (%s)\n", result, NPT_ResultText(result)); if (NPT_FAILED(result)) { printf("!ERROR\n"); return 1; } NPT_InputStreamReference input; NPT_OutputStreamReference output; client_socket->GetInputStream(input); client_socket->GetOutputStream(output); NPT_TlsContextReference context(new NPT_TlsContext()); NPT_TlsClientSession session(context, input, output); printf("[3] Performing Handshake\n"); result = session.Handshake(); printf("[4] Handshake Result = %d (%s)\n", result, NPT_ResultText(result)); if (NPT_FAILED(result)) { printf("!ERROR\n"); return 1; } NPT_DataBuffer session_id; result = session.GetSessionId(session_id); CHECK(result == NPT_SUCCESS); CHECK(session_id.GetDataSize() > 0); printf("[5] Session ID: "); printf(NPT_HexString(session_id.GetData(), session_id.GetDataSize()).GetChars()); printf("\n"); NPT_TlsCertificateInfo cert_info; result = session.GetPeerCertificateInfo(cert_info); CHECK(result == NPT_SUCCESS); printf("[6] Fingerprints:\n"); printf("MD5: %s\n", NPT_HexString(cert_info.fingerprint.md5, sizeof(cert_info.fingerprint.md5), ":").GetChars()); printf("SHA1: %s\n", NPT_HexString(cert_info.fingerprint.sha1, sizeof(cert_info.fingerprint.sha1), ":").GetChars()); printf("Subject Certificate:\n"); printf(" Common Name = %s\n", cert_info.subject.common_name.GetChars()); printf(" Organization = %s\n", cert_info.subject.organization.GetChars()); printf(" Organizational Name = %s\n", cert_info.subject.organizational_name.GetChars()); printf("Issuer Certificate:\n"); printf(" Common Name = %s\n", cert_info.issuer.common_name.GetChars()); printf(" Organization = %s\n", cert_info.issuer.organization.GetChars()); printf(" Organizational Name = %s\n", cert_info.issuer.organizational_name.GetChars()); printf("\n"); printf("[7] Cipher Type = %d (%s)\n", session.GetCipherSuiteId(), GetCipherSuiteName(session.GetCipherSuiteId())); NPT_InputStreamReference ssl_input; NPT_OutputStreamReference ssl_output; session.GetInputStream(ssl_input); session.GetOutputStream(ssl_output); printf("[8] Getting / Document\n"); ssl_output->WriteString("GET / HTTP/1.0\n\n"); for (;;) { unsigned char buffer[1]; NPT_Size bytes_read = 0; result = ssl_input->Read(&buffer[0], 1, &bytes_read); if (NPT_SUCCEEDED(result)) { CHECK(bytes_read == 1); printf("%c", buffer[0]); } else { if (result != NPT_ERROR_EOS) { printf("!ERROR: Read() returned %d (%s)\n", result, NPT_ResultText(result)); } break; } } printf("[9] SUCCESS\n"); }