From 7e21069bea9e8e6276591eee98f22cb07d67392d Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Fri, 4 Nov 2016 14:12:57 +0100 Subject: Splits up the Node.cpp class in 3 parts. --- node/node.cpp | 223 +--------------------------------------------------------- 1 file changed, 3 insertions(+), 220 deletions(-) (limited to 'node/node.cpp') diff --git a/node/node.cpp b/node/node.cpp index b2bd290..fa9a721 100644 --- a/node/node.cpp +++ b/node/node.cpp @@ -79,224 +79,7 @@ void Node::start_initialisation() { next_node.async_send(init); } - -void Node::handle_node_initialization(const cmix_proto::Initialization& init) -{ - if(network_settings.is_first) { - set_network_key(&cmix_ctx, init.public_share().data(), init.public_share().size()); - - cmix_proto::SecretKey sec; - sec.set_secret_key(init.public_share().data(), init.public_share().size()); - - next_node.async_send(sec); - } else { - size_t len = get_group_element_array_size(&cmix_ctx); - - cmix_proto::Initialization n_init; - n_init.mutable_public_share()->resize(len); - add_public_share(&cmix_ctx, &(*n_init.mutable_public_share())[0], init.public_share().data()); - - BOOST_LOG_TRIVIAL(trace) << "Sending intialization"; - next_node.async_send(n_init); - } -} - -void Node::handle_node_secretkey(cmix_proto::SecretKey const& secret) -{ - std::string share = secret.secret_key(); - - set_network_key(&cmix_ctx, secret.secret_key().data(), secret.secret_key().size()); - - if(network_settings.is_first) { - start_precomputation(); - } else { - next_node.async_send(secret); - } -} - -template -cmix_proto::PrePre fill_precomputation_pre_message(CMixContext& ctx, T const& rs, T const& ms) { - if(start_mix(&ctx, rs.size()) != no_error) { - exit(-1); - } - - if(initialize_mix_randomness(&ctx) != no_error) { - exit(-1); - } - - cmix_proto::PrePre prepre; - - for(size_t i = 0; i < ctx.nr_participants; ++i) { - size_t len = get_group_element_array_size(&ctx); - - prepre.mutable_m_er(i)->resize(len); - prepre.mutable_r_er(i)->resize(len); - - if(encrypt_r_and_multiply( - &ctx, - &(*prepre.mutable_r_er(i))[0], - &(*prepre.mutable_m_er(i))[0], - rs.Get(i).data(), - ms.Get(i).data(), - i - ) != no_error) { - exit(-1); - } - } - return prepre; -} - -template -cmix_proto::PreMix fill_precomputation_mix_message(CMixContext const& ctx, T const& rs, T const& ms) { - cmix_proto::PreMix premix; - for(size_t i = 0; i < ctx.nr_participants; ++i) { - auto new_pos = ctx.permutation[i]; - size_t el_len = get_group_element_array_size(&ctx); - - premix.mutable_r_epirs(new_pos)->resize(el_len); - premix.mutable_m_epirs(new_pos)->resize(el_len); - - multiply_s( - &ctx, - &(*premix.mutable_r_epirs(new_pos))[0], - &(*premix.mutable_m_epirs(new_pos))[0], - rs.Get(i).data(), - ms.Get(i).data(), - i - ); - } - return premix; -} - -template -cmix_proto::PrePost fill_precomputation_post_message(CMixContext& ctx, T const& rs, T const& ms) { - cmix_proto::PrePost prepost; - - for(size_t i = 0; i < ctx.nr_participants; ++i) { - post_process(&ctx, rs.Get(i).data(), ms.Get(i).data(), i); - *prepost.mutable_r_epirs(i) = rs.Get(i); - *prepost.mutable_m_epirs(i) = ms.Get(i); - } - - return prepost; -} - -void Node::handle_node_prepre(cmix_proto::PrePre const& pre) { - if(network_settings.is_first) { - cmix_proto::PreMix premix = fill_precomputation_mix_message(cmix_ctx, pre.r_er(), pre.m_er()); - next_node.async_send(premix); - } else { - cmix_proto::PrePre prepre = fill_precomputation_pre_message(cmix_ctx, pre.r_er(), pre.m_er()); - next_node.async_send(prepre); - } -} - -void Node::handle_node_premix(cmix_proto::PreMix const& premix) { - if(network_settings.is_first) { - cmix_proto::PrePost prepost = fill_precomputation_post_message(cmix_ctx, premix.r_epirs(), premix.m_epirs()); - next_node.async_send(prepost); - } else { - cmix_proto::PreMix n_premix = fill_precomputation_mix_message(cmix_ctx, premix.r_epirs(), premix.m_epirs()); - next_node.async_send(n_premix); - } -} - -void Node::handle_node_prepost(cmix_proto::PrePost const& prepost) { - if(network_settings.is_first) { - - } else { - cmix_proto::PrePost n_prepost = fill_precomputation_post_message(cmix_ctx, prepost.r_epirs(), prepost.m_epirs()); - next_node.async_send(n_prepost); - } -} - -void Node::handle_node_message(cmix_proto::CMixMessage message) -{ - switch(message.contents_case()) { - case cmix_proto::CMixMessage::ContentsCase::kInitialization: { - BOOST_LOG_TRIVIAL(trace) << "Handling initialization"; - handle_node_initialization(message.initialization()); - break; - } - case cmix_proto::CMixMessage::ContentsCase::kBye: { - BOOST_LOG_TRIVIAL(trace) << "Handling bye"; - //Todo: find a nice way to handle network shutdown. - break; - } - case cmix_proto::CMixMessage::ContentsCase::kSecretkey: { - BOOST_LOG_TRIVIAL(trace) << "Handling SecretKey"; - handle_node_secretkey(message.secretkey()); - break; - } - case cmix_proto::CMixMessage::ContentsCase::kPrepre: { - BOOST_LOG_TRIVIAL(trace) << "Handling PrePre"; - handle_node_prepre(message.prepre()); - break; - } - case cmix_proto::CMixMessage::ContentsCase::kPremix: { - BOOST_LOG_TRIVIAL(trace) << "Handling PreMix"; - handle_node_premix(message.premix()); - break; - } - case cmix_proto::CMixMessage::ContentsCase::kPrepost: { - BOOST_LOG_TRIVIAL(trace) << "Handling PrePost"; - handle_node_prepost(message.prepost()); - break; - } - default: { - BOOST_LOG_TRIVIAL(error) << "handle_node_message: CMixMessage contains unknown contents."; - } - } - prev_node.async_receive([this](cmix_proto::CMixMessage message) { - handle_node_message(message); - }); -} - -void Node::handle_client_keyexchange(ClientConnections::key_type handle, cmix_proto::KeyExchange ke) { - CMixClientData d; - - size_t len = get_group_element_array_size(&cmix_ctx); - - cmix_proto::KeyExchange nke; - nke.mutable_public_key()->resize(len); - nke.mutable_value()->resize(len); - - key_exchange(&cmix_ctx, &d.shared_value.shared, &(*nke.mutable_public_key())[0], &(*nke.mutable_value())[0], ke.public_key().data(), ke.value().data()); - - data[handle] = d; - - clients.at(handle).async_send(nke); -} - -void Node::handle_client_bye(ClientConnections::key_type handle, cmix_proto::Bye) -{ - clients.at(handle).close(); - clients.erase(handle); -} - -void Node::handle_client_message(ClientConnections::key_type handle, cmix_proto::CMixMessage message) -{ - switch(message.contents_case()) { - case cmix_proto::CMixMessage::ContentsCase::kKeyexchange: { - BOOST_LOG_TRIVIAL(trace) << "Handling keyexchange"; - handle_client_keyexchange(handle, message.keyexchange()); - break; - } - case cmix_proto::CMixMessage::ContentsCase::kBye: { - BOOST_LOG_TRIVIAL(trace) << "Handling bye"; - handle_client_bye(handle, message.bye()); - return; - } - default: { - BOOST_LOG_TRIVIAL(error) << "handle_client_message: CMixMessage contains unknown contents."; - } - } - clients.at(handle).async_receive([this, handle](cmix_proto::CMixMessage message){ - handle_client_message(handle, message); - }); -} - -void Node::handle_imanode(Purgatory::iterator handle) { +void Node::handle_imanode(Purgatory::iterator handle, cmix_proto::ImANode const&) { handle->on_done([]{}); prev_node = std::move(*handle); purgatory.erase(handle); @@ -312,7 +95,7 @@ void Node::handle_imanode(Purgatory::iterator handle) { }); } -void Node::handle_imaclient(Purgatory::iterator handle, cmix_proto::ImAClient c) { +void Node::handle_imaclient(Purgatory::iterator handle, cmix_proto::ImAClient const& c) { std::string client_id = c.id(); clients.emplace(c.id(), decltype(clients)::mapped_type(std::move(*handle))); clients.at(c.id()).on_done([this, client_id]{ @@ -330,7 +113,7 @@ void Node::handle_message(Purgatory::iterator handle, cmix_proto::CMixMessage me switch(message.contents_case()) { case cmix_proto::CMixMessage::ContentsCase::kImanode: { BOOST_LOG_TRIVIAL(trace) << "Handling imanode"; - handle_imanode(handle); + handle_imanode(handle, message.imanode()); return; } case cmix_proto::CMixMessage::ContentsCase::kImaclient: { -- cgit v1.2.3-70-g09d2