diff options
Diffstat (limited to 'client/cmixclient.cpp')
| -rw-r--r-- | client/cmixclient.cpp | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/client/cmixclient.cpp b/client/cmixclient.cpp index ba1a187..ba2f1da 100644 --- a/client/cmixclient.cpp +++ b/client/cmixclient.cpp @@ -17,25 +17,12 @@ using namespace boost::asio; void CMixClient::key_exchange(size_t node_id) { BOOST_LOG_TRIVIAL(trace) << "Sending KeyExchange for node: " << node_id; - - unsigned char* buffer; - size_t len; - - api.element_to_array(&buffer, &len, keypair.pub); cmix_proto::KeyExchange ke; - ke.set_public_key(buffer, len); - api.free_buffer(buffer); - - data.at(node_id).secret_value = api.get_group_element(true); - - GroupElement shared_value = api.get_key_exchange_value(data.at(node_id).secret_value); + ke.mutable_public_key()->resize(get_group_element_array_size(&cmix_ctx)); + ke.mutable_value()->resize(get_group_element_array_size(&cmix_ctx)); - api.element_to_array(&buffer, &len, shared_value); - ke.set_value(buffer, len); - api.free_buffer(buffer); - - api.free_group_element(shared_value); + key_exchange_init(&cmix_ctx, &(*ke.mutable_public_key())[0], &(*ke.mutable_value())[0], &data.at(node_id).secret_value); network_connections.at(node_id).async_send(ke); network_connections.at(node_id).async_receive([node_id, this](cmix_proto::CMixMessage message) { @@ -59,14 +46,26 @@ void CMixClient::initialize_connections() { }); }; - network_connections.emplace_back(std::unique_ptr<ssl::stream<tcp::socket>>(new ssl::stream<tcp::socket>(io_service, *ctx))); + network_connections.emplace_back(std::unique_ptr<ssl::stream<tcp::socket>>(new ssl::stream<tcp::socket>(io_service, *ssl_ctx))); network_connections.back().async_connect(network_details.node_details[i].host, network_details.node_details[i].port, handler); } } void CMixClient::handle_key_exchange(size_t node_id, cmix_proto::KeyExchange const& ke) { - data.at(node_id).shared_value.shared = api.derive_shared_key(keypair, reinterpret_cast<uint8_t const*>(ke.public_key().c_str()), ke.public_key().size(), reinterpret_cast<uint8_t const*>(ke.value().c_str()), ke.value().size(), data.at(node_id).secret_value, false); + key_exchange_initiator( + &cmix_ctx, + &data.at(node_id).shared_value, + ke.public_key().data(), + ke.value().data(), + data.at(node_id).secret_value + ); + + size_t len = get_group_element_array_size(&cmix_ctx); + std::string s = "abcdefghijklmnopqrstuvwxyz"; + s.resize(len, '0'); + + cmix_proto::Bye bye; network_connections.at(node_id).async_send(bye); @@ -104,14 +103,16 @@ void CMixClient::handle_message(size_t node_id, cmix_proto::CMixMessage message) CMixClient::CMixClient(NetworkDetails details) : io_service() -, ctx(std::make_shared<boost::asio::ssl::context>(boost::asio::ssl::context::sslv23)) +, ssl_ctx(std::make_shared<boost::asio::ssl::context>(boost::asio::ssl::context::sslv23)) +, cmix_ctx(initialize_cmix_context(get_implementation())) , network_details(details) , network_connections() -, api(get_implementation()) -, keypair(api.create_keypair()) +, data() { + initialize_keypair(&cmix_ctx); + if(!details.certdir.empty()) { - ctx->add_verify_path(details.certdir); + ssl_ctx->add_verify_path(details.certdir); } initialize_connections(); @@ -119,12 +120,7 @@ CMixClient::CMixClient(NetworkDetails details) CMixClient::~CMixClient() { - api.free_keypair(&keypair); - for(auto&& d : data) { - api.free_shared_key(&d.shared_value); - api.free_group_element(d.secret_value); - } - api.deinitialize(); + deinitialize(&cmix_ctx); } void CMixClient::run() { |
