diff options
Diffstat (limited to 'node/node.cpp')
| -rw-r--r-- | node/node.cpp | 76 |
1 files changed, 52 insertions, 24 deletions
diff --git a/node/node.cpp b/node/node.cpp index 98b5873..a781755 100644 --- a/node/node.cpp +++ b/node/node.cpp @@ -115,28 +115,6 @@ void Node::handle_node_secretkey(cmix_proto::SecretKey const& secret) } template <typename T> -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 <typename T> 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); @@ -148,7 +126,7 @@ cmix_proto::PrePre fill_precomputation_pre_message(CMixContext& ctx, T const& rs cmix_proto::PrePre prepre; - for(int i = 0; i < rs.size(); ++i) { + 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); @@ -168,6 +146,41 @@ cmix_proto::PrePre fill_precomputation_pre_message(CMixContext& ctx, T const& rs return prepre; } +template <typename T> +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 <typename T> +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()); @@ -180,13 +193,23 @@ void Node::handle_node_prepre(cmix_proto::PrePre const& pre) { 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()) { @@ -215,6 +238,11 @@ void Node::handle_node_message(cmix_proto::CMixMessage message) 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."; } |
