diff --git a/LICENSE b/LICENSE index 42c3bed..ee2accb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT License -Copyright (c) 2017 BitShares Munich IVS +Copyright (c) 2017 Agorise, IBC. +Contains works from BitShares Munich IVS Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/test/test_secio.h b/test/test_secio.h index 0560913..75d2e10 100644 --- a/test/test_secio.h +++ b/test/test_secio.h @@ -33,7 +33,6 @@ void print_stretched_key(struct StretchedKey* key) { int test_secio_handshake() { - /* libp2p_logger_add_class("secio"); int retVal = 0; @@ -50,7 +49,7 @@ int test_secio_handshake() { unsigned char final_id[final_id_size]; struct PrivateKey* private_key = NULL; - struct SessionContext* secure_session = NULL; + struct SessionContext secure_session = {0}; struct Peerstore *peerstore = NULL; struct Libp2pPeer* local_peer = NULL; @@ -77,19 +76,14 @@ int test_secio_handshake() { local_peer = libp2p_peer_new(); peerstore = libp2p_peerstore_new(local_peer); - secure_session = libp2p_session_context_new(); //secure_session.host = "www.jmjatlanta.com"; - secure_session->host = "107.170.104.234"; - secure_session->port = 4001; - secure_session->traffic_type = TCP; + secure_session.host = "10.211.55.2"; + secure_session.port = 4001; + secure_session.traffic_type = TCP; // connect to host - secure_session->insecure_stream = libp2p_net_multistream_connect(secure_session->host, secure_session->port); - if (secure_session->insecure_stream == NULL) { - libp2p_logger_error("test_secio", "Unable to open multistream to server %s port %d.\n", secure_session->host, secure_session->port); - goto exit; - } - secure_session->default_stream = secure_session->insecure_stream; - if (*((int*)secure_session->insecure_stream->socket_descriptor) == -1) { + secure_session.insecure_stream = libp2p_net_multistream_connect(secure_session.host, secure_session.port); + secure_session.default_stream = secure_session.insecure_stream; + if (*((int*)secure_session.insecure_stream->socket_descriptor) == -1) { fprintf(stderr, "test_secio_handshake: Unable to get socket descriptor\n"); goto exit; } @@ -99,19 +93,30 @@ int test_secio_handshake() { libp2p_logger_error("test_secio", "Unable to do handshake\n"); if (secure_session->shared_key != NULL) { fprintf(stdout, "Shared key: "); - for(int i = 0; i < secure_session->shared_key_size; i++) - fprintf(stdout, "%d ", secure_session->shared_key[i]); + for(int i = 0; i < secure_session.shared_key_size; i++) + fprintf(stdout, "%d ", secure_session.shared_key[i]); fprintf(stdout, "\nLocal stretched key: "); - print_stretched_key(secure_session->local_stretched_key); + print_stretched_key(secure_session.local_stretched_key); fprintf(stdout, "\nRemote stretched key: "); - print_stretched_key(secure_session->remote_stretched_key); + print_stretched_key(secure_session.remote_stretched_key); fprintf(stdout, "\n"); } goto exit; } + /* + fprintf(stdout, "Shared key: "); + for(int i = 0; i < secure_session.shared_key_size; i++) + fprintf(stdout, "%d ", secure_session.shared_key[i]); + fprintf(stdout, "\nLocal stretched key: "); + print_stretched_key(secure_session.local_stretched_key); + fprintf(stdout, "\nRemote stretched key: "); + print_stretched_key(secure_session.remote_stretched_key); + fprintf(stdout, "\n"); + */ + // now attempt to do something with it... try to negotiate a multistream - if (libp2p_net_multistream_negotiate(secure_session) == 0) { + if (libp2p_net_multistream_negotiate(&secure_session) == 0) { fprintf(stdout, "Unable to negotiate multistream\n"); goto exit; } @@ -133,41 +138,40 @@ int test_secio_handshake() { goto exit; } - fprintf(stdout, "Results of ls (%d bytes long):\n%s\n", (int)results->data_size, results->data); + fprintf(stdout, "Results of ls: %.*s", (int)results_size, results); - libp2p_stream_message_free(results); - results = NULL; - // try to yamux - char* yamux_string = "/yamux/1.0.0\n"; - outgoing.data = (uint8_t*)yamux_string; - outgoing.data_size = strlen(yamux_string); - if (!libp2p_net_multistream_write(secure_session, &outgoing)) { - libp2p_logger_error("test_secio", "Unable to send yamux protocol request\n"); - goto exit; - } - if (!libp2p_net_multistream_read(secure_session, &results, 30)) { - libp2p_logger_error("test_secio", "Unable to read reply to yamux request.\n"); - goto exit; - } - - fprintf(stdout, "Results of yamux request: %s\n", results->data); - - libp2p_stream_message_free(results); + free(results); results = NULL; retVal = 1; exit: - if (peerstore != NULL) - libp2p_peerstore_free(peerstore); + if (secure_session.insecure_stream != NULL) + libp2p_net_multistream_stream_free(secure_session.insecure_stream); + if (secure_session.local_stretched_key != NULL) + libp2p_crypto_ephemeral_stretched_key_free(secure_session.local_stretched_key); + if (secure_session.remote_stretched_key != NULL) + libp2p_crypto_ephemeral_stretched_key_free(secure_session.remote_stretched_key); + if (secure_session.ephemeral_private_key != NULL) + libp2p_crypto_ephemeral_key_free(secure_session.ephemeral_private_key); + if (secure_session.remote_ephemeral_public_key != NULL) + free(secure_session.remote_ephemeral_public_key); + if (secure_session.chosen_cipher != NULL) + free(secure_session.chosen_cipher); + if (secure_session.chosen_curve != NULL) + free(secure_session.chosen_curve); + if (secure_session.chosen_hash != NULL) + free(secure_session.chosen_hash); + if (secure_session.shared_key != NULL) + free(secure_session.shared_key); if (private_key != NULL) libp2p_crypto_private_key_free(private_key); if (decode_base64 != NULL) free(decode_base64); if (rsa_private_key != NULL) libp2p_crypto_rsa_rsa_private_key_free(rsa_private_key); + if (peerstore != NULL) + libp2p_peerstore_free(peerstore); return retVal; - */ - return 0; } int libp2p_secio_encrypt(const struct SessionContext* session, const unsigned char* incoming, size_t incoming_size, unsigned char** outgoing, size_t* outgoing_size); @@ -326,7 +330,6 @@ int test_secio_encrypt_like_go() { */ int test_secio_handshake_go() { - /* libp2p_logger_add_class("secio"); int retVal = 0; @@ -383,8 +386,17 @@ int test_secio_handshake_go() { } // attempt to write the protocol, and see what comes back - if (!libp2p_secio_initiate_handshake(secure_session, rsa_private_key, peerstore)) { - libp2p_logger_error("test_secio", "Unable to do handshake.\n"); + char* protocol = "/secio/1.0.0\n"; + int protocol_size = strlen(protocol); + secure_session->insecure_stream->write(secure_session, (unsigned char*)protocol, protocol_size); + + unsigned char* buffer = NULL; + size_t bytes_read = 0; + int timeout = 30; + secure_session->insecure_stream->read(secure_session, &buffer, &bytes_read, timeout); + + if (!libp2p_secio_handshake(secure_session, rsa_private_key, peerstore)) { + fprintf(stderr, "test_secio_handshake: Unable to do handshake\n"); if (secure_session->shared_key != NULL) { fprintf(stdout, "Shared key: "); for(int i = 0; i < secure_session->shared_key_size; i++) @@ -398,6 +410,17 @@ int test_secio_handshake_go() { goto exit; } + /* + fprintf(stdout, "Shared key: "); + for(int i = 0; i < secure_session.shared_key_size; i++) + fprintf(stdout, "%d ", secure_session.shared_key[i]); + fprintf(stdout, "\nLocal stretched key: "); + print_stretched_key(secure_session.local_stretched_key); + fprintf(stdout, "\nRemote stretched key: "); + print_stretched_key(secure_session.remote_stretched_key); + fprintf(stdout, "\n"); + */ + // now attempt to do something with it... try to negotiate a multistream if (libp2p_net_multistream_negotiate(secure_session) == 0) { fprintf(stdout, "Unable to negotiate multistream\n"); @@ -405,25 +428,23 @@ int test_secio_handshake_go() { } // now attempt an "ls" - struct StreamMessage outgoing; - outgoing.data = (uint8_t*)"ls\n"; - outgoing.data_size = 3; - if (libp2p_net_multistream_write(secure_session, &outgoing) == 0) { + if (libp2p_net_multistream_write(secure_session, (unsigned char*)"ls\n", 3) == 0) { fprintf(stdout, "Unable to send ls to multistream\n"); goto exit; } // retrieve the response - struct StreamMessage* results; - if (libp2p_net_multistream_read(secure_session, &results, 30) == 0) { + unsigned char* results; + size_t results_size; + if (libp2p_net_multistream_read(secure_session, &results, &results_size, 30) == 0) { fprintf(stdout, "Unable to read ls results from multistream\n"); free(results); goto exit; } - fprintf(stdout, "Results of ls: %.*s", (int)results->data_size, results->data); + fprintf(stdout, "Results of ls: %.*s", (int)results_size, results); - libp2p_stream_message_free(results); + free(results); results = NULL; retVal = 1; @@ -437,6 +458,4 @@ int test_secio_handshake_go() { if (peerstore != NULL) libp2p_peerstore_free(peerstore); return retVal; - */ - return 0; }