aboutsummaryrefslogtreecommitdiff
path: root/client/cmixclient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/cmixclient.cpp')
-rw-r--r--client/cmixclient.cpp29
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);