diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-27 13:14:28 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-27 13:14:28 +0200 |
| commit | 158bf81343054982800d44d507e8e50f2eeb6dd4 (patch) | |
| tree | 6c09867def3377854b08656a4d5d6df7553fc80b /node/node.cpp | |
| parent | 25db9ff8a4cfb4b98aeeaae360e8c718b9c5e20c (diff) | |
| download | cmix-158bf81343054982800d44d507e8e50f2eeb6dd4.tar.gz cmix-158bf81343054982800d44d507e8e50f2eeb6dd4.tar.bz2 cmix-158bf81343054982800d44d507e8e50f2eeb6dd4.zip | |
Added proper keyexchange for elgamal-gcrypt.
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); } |
