diff options
Diffstat (limited to 'node/node.cpp')
| -rw-r--r-- | node/node.cpp | 16 |
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); } |
