int main(int argc, char** argv) { /* test private keys */ TestPrivateKeys(); /* test a local connection */ TestLocalServer(); /* test a connection */ const char* hostname = argc==2?argv[1]:"koala.bok.net"; TestRemoteServer(hostname, 443, true, NPT_SUCCESS); }
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"); }