aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-11-07 12:53:59 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2016-11-07 12:53:59 +0100
commit46f22621759d388f7cef4bf0d2ac03667a5d611e (patch)
treeb26cd49fe2552680eb16d9008695c8f56e757ded /client
parent7e21069bea9e8e6276591eee98f22cb07d67392d (diff)
downloadcmix-46f22621759d388f7cef4bf0d2ac03667a5d611e.tar.gz
cmix-46f22621759d388f7cef4bf0d2ac03667a5d611e.tar.bz2
cmix-46f22621759d388f7cef4bf0d2ac03667a5d611e.zip
prepares the api for sending and mixing messages in the realtime phase.
Diffstat (limited to 'client')
-rw-r--r--client/cmixclient.cpp52
-rw-r--r--client/cmixclient.hpp9
2 files changed, 28 insertions, 33 deletions
diff --git a/client/cmixclient.cpp b/client/cmixclient.cpp
index ba1a187..ba2f1da 100644
--- a/client/cmixclient.cpp
+++ b/client/cmixclient.cpp
@@ -17,25 +17,12 @@ using namespace boost::asio;
void CMixClient::key_exchange(size_t node_id) {
BOOST_LOG_TRIVIAL(trace) << "Sending KeyExchange for node: " << node_id;
-
- unsigned char* buffer;
- size_t len;
-
- api.element_to_array(&buffer, &len, keypair.pub);
cmix_proto::KeyExchange ke;
- ke.set_public_key(buffer, len);
- api.free_buffer(buffer);
-
- data.at(node_id).secret_value = api.get_group_element(true);
-
- GroupElement shared_value = api.get_key_exchange_value(data.at(node_id).secret_value);
+ ke.mutable_public_key()->resize(get_group_element_array_size(&cmix_ctx));
+ ke.mutable_value()->resize(get_group_element_array_size(&cmix_ctx));
- api.element_to_array(&buffer, &len, shared_value);
- ke.set_value(buffer, len);
- api.free_buffer(buffer);
-
- api.free_group_element(shared_value);
+ key_exchange_init(&cmix_ctx, &(*ke.mutable_public_key())[0], &(*ke.mutable_value())[0], &data.at(node_id).secret_value);
network_connections.at(node_id).async_send(ke);
network_connections.at(node_id).async_receive([node_id, this](cmix_proto::CMixMessage message) {
@@ -59,14 +46,26 @@ void CMixClient::initialize_connections() {
});
};
- network_connections.emplace_back(std::unique_ptr<ssl::stream<tcp::socket>>(new ssl::stream<tcp::socket>(io_service, *ctx)));
+ network_connections.emplace_back(std::unique_ptr<ssl::stream<tcp::socket>>(new ssl::stream<tcp::socket>(io_service, *ssl_ctx)));
network_connections.back().async_connect(network_details.node_details[i].host, network_details.node_details[i].port, handler);
}
}
void CMixClient::handle_key_exchange(size_t node_id, cmix_proto::KeyExchange const& ke)
{
- data.at(node_id).shared_value.shared = 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(), data.at(node_id).secret_value, false);
+ key_exchange_initiator(
+ &cmix_ctx,
+ &data.at(node_id).shared_value,
+ ke.public_key().data(),
+ ke.value().data(),
+ data.at(node_id).secret_value
+ );
+
+ size_t len = get_group_element_array_size(&cmix_ctx);
+ std::string s = "abcdefghijklmnopqrstuvwxyz";
+ s.resize(len, '0');
+
+
cmix_proto::Bye bye;
network_connections.at(node_id).async_send(bye);
@@ -104,14 +103,16 @@ void CMixClient::handle_message(size_t node_id, cmix_proto::CMixMessage message)
CMixClient::CMixClient(NetworkDetails details)
: io_service()
-, ctx(std::make_shared<boost::asio::ssl::context>(boost::asio::ssl::context::sslv23))
+, ssl_ctx(std::make_shared<boost::asio::ssl::context>(boost::asio::ssl::context::sslv23))
+, cmix_ctx(initialize_cmix_context(get_implementation()))
, network_details(details)
, network_connections()
-, api(get_implementation())
-, keypair(api.create_keypair())
+, data()
{
+ initialize_keypair(&cmix_ctx);
+
if(!details.certdir.empty()) {
- ctx->add_verify_path(details.certdir);
+ ssl_ctx->add_verify_path(details.certdir);
}
initialize_connections();
@@ -119,12 +120,7 @@ CMixClient::CMixClient(NetworkDetails details)
CMixClient::~CMixClient()
{
- api.free_keypair(&keypair);
- for(auto&& d : data) {
- api.free_shared_key(&d.shared_value);
- api.free_group_element(d.secret_value);
- }
- api.deinitialize();
+ deinitialize(&cmix_ctx);
}
void CMixClient::run() {
diff --git a/client/cmixclient.hpp b/client/cmixclient.hpp
index ee99d38..59aeba6 100644
--- a/client/cmixclient.hpp
+++ b/client/cmixclient.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "senderreceiver.hpp"
+#include "cmix.h"
#include "api.h"
#include "groupelement.h"
#include "keypair.h"
@@ -44,19 +45,17 @@ class CMixClient {
struct NodeData {
GroupElement secret_value;
- SharedKey shared_value;
+ GroupElement shared_value;
};
boost::asio::io_service io_service;
- std::shared_ptr<boost::asio::ssl::context> ctx;
+ std::shared_ptr<boost::asio::ssl::context> ssl_ctx;
+ CMixContext cmix_ctx;
NetworkDetails network_details;
std::vector<SSLSenderReceiver> network_connections;
std::vector<NodeData> data;
- Api api;
- KeyPair keypair;
-
void key_exchange(size_t node_id);
void initialize_connections();