diff options
Diffstat (limited to 'client/cmixclient.cpp')
| -rw-r--r-- | client/cmixclient.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/client/cmixclient.cpp b/client/cmixclient.cpp index ba2f1da..f8ecf7d 100644 --- a/client/cmixclient.cpp +++ b/client/cmixclient.cpp @@ -22,7 +22,7 @@ void CMixClient::key_exchange(size_t node_id) { ke.mutable_public_key()->resize(get_group_element_array_size(&cmix_ctx)); ke.mutable_value()->resize(get_group_element_array_size(&cmix_ctx)); - key_exchange_init(&cmix_ctx, &(*ke.mutable_public_key())[0], &(*ke.mutable_value())[0], &data.at(node_id).secret_value); + key_exchange_init(&cmix_ctx, &(*ke.mutable_public_key())[0], &(*ke.mutable_value())[0], &secret_values.at(node_id)); network_connections.at(node_id).async_send(ke); network_connections.at(node_id).async_receive([node_id, this](cmix_proto::CMixMessage message) { @@ -33,7 +33,9 @@ void CMixClient::key_exchange(size_t node_id) { void CMixClient::initialize_connections() { size_t nr_nodes = network_details.node_details.size(); network_connections.reserve(nr_nodes); - data.resize(nr_nodes); + + secret_values.resize(nr_nodes, nullptr); + shared_values.resize(nr_nodes, nullptr); for(size_t i = 0; i < nr_nodes; ++i) { auto handler = [this, i]() { @@ -55,20 +57,28 @@ void CMixClient::handle_key_exchange(size_t node_id, cmix_proto::KeyExchange con { key_exchange_initiator( &cmix_ctx, - &data.at(node_id).shared_value, + &shared_values.at(node_id), ke.public_key().data(), ke.value().data(), - data.at(node_id).secret_value + &secret_values.at(node_id) ); size_t len = get_group_element_array_size(&cmix_ctx); + std::vector<char> vec(len, '\0'); std::string s = "abcdefghijklmnopqrstuvwxyz"; - s.resize(len, '0'); - + std::copy_n(s.begin(), s.size(), vec.begin() + 1); + if(std::all_of(shared_values.begin(), shared_values.end(), [](auto const& value){return value != nullptr;})) { + cmix_proto::UserMessage message; + message.mutable_m()->resize(len); - cmix_proto::Bye bye; - network_connections.at(node_id).async_send(bye); + blind_message(&cmix_ctx, &(*message.mutable_m())[0], vec.data(), shared_values.data(), shared_values.size()); + + network_connections.at(0).async_send(message); + + cmix_proto::Bye bye; + network_connections.at(node_id).async_send(bye); + } } void CMixClient::handle_message(size_t node_id, cmix_proto::CMixMessage message) @@ -107,7 +117,8 @@ CMixClient::CMixClient(NetworkDetails details) , cmix_ctx(initialize_cmix_context(get_implementation())) , network_details(details) , network_connections() -, data() +, secret_values() +, shared_values() { initialize_keypair(&cmix_ctx); |
