From 46f22621759d388f7cef4bf0d2ac03667a5d611e Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Mon, 7 Nov 2016 12:53:59 +0100 Subject: prepares the api for sending and mixing messages in the realtime phase. --- client/cmixclient.cpp | 52 ++++++++++++++++++++++++--------------------------- client/cmixclient.hpp | 9 ++++----- 2 files changed, 28 insertions(+), 33 deletions(-) (limited to 'client') 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>(new ssl::stream(io_service, *ctx))); + network_connections.emplace_back(std::unique_ptr>(new ssl::stream(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(ke.public_key().c_str()), ke.public_key().size(), reinterpret_cast(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::sslv23)) +, ssl_ctx(std::make_shared(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() { diff --git a/client/cmixclient.hpp b/client/cmixclient.hpp index ee99d38..59aeba6 100644 --- a/client/cmixclient.hpp +++ b/client/cmixclient.hpp @@ -1,6 +1,7 @@ #pragma once #include "senderreceiver.hpp" +#include "cmix.h" #include "api.h" #include "groupelement.h" #include "keypair.h" @@ -44,19 +45,17 @@ class CMixClient { struct NodeData { GroupElement secret_value; - SharedKey shared_value; + GroupElement shared_value; }; boost::asio::io_service io_service; - std::shared_ptr ctx; + std::shared_ptr ssl_ctx; + CMixContext cmix_ctx; NetworkDetails network_details; std::vector network_connections; std::vector data; - Api api; - KeyPair keypair; - void key_exchange(size_t node_id); void initialize_connections(); -- cgit v1.2.3-70-g09d2