aboutsummaryrefslogtreecommitdiff
path: root/node/node.cpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-10-27 13:14:28 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2016-10-27 13:14:28 +0200
commit158bf81343054982800d44d507e8e50f2eeb6dd4 (patch)
tree6c09867def3377854b08656a4d5d6df7553fc80b /node/node.cpp
parent25db9ff8a4cfb4b98aeeaae360e8c718b9c5e20c (diff)
downloadcmix-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.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);
}