aboutsummaryrefslogtreecommitdiff
path: root/node/node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/node.cpp')
-rw-r--r--node/node.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/node/node.cpp b/node/node.cpp
index 857d5af..e8303eb 100644
--- a/node/node.cpp
+++ b/node/node.cpp
@@ -140,17 +140,29 @@ void Node::handle_node_message(cmix_proto::CMixMessage message)
}
void Node::handle_client_keyexchange(ClientConnections::key_type handle, cmix_proto::KeyExchange ke) {
- data[handle].shared_value = api.derive_shared_key(keypair, reinterpret_cast<uint8_t const*>(ke.public_key().c_str()), true);
+ void* priv_el = api.get_group_element(true);
+
+ data[handle].shared_value = 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(), priv_el, true);
+
+ void* ex_val = api.get_key_exchange_value(priv_el);
+
+ api.free_group_element(priv_el);
cmix_proto::KeyExchange exchange;
char* buffer;
size_t len;
- api.get_key_array(&buffer, &len, keypair.pub);
+ api.get_key_array(&buffer, &len, keypair.pub);
exchange.set_public_key(buffer, len);
free(buffer);
+ api.get_key_array(&buffer, &len, ex_val);
+ exchange.set_value(buffer, len);
+ free(buffer);
+
+ api.free_group_element(ex_val);
+
clients.at(handle).async_send(exchange);
}