aboutsummaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-11-04 13:11:11 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2016-11-04 13:11:11 +0100
commit58ead6a9a4a2a81f067ad698366bd32841346058 (patch)
tree72398158aa8a077b48a9116dbbff629d340208af /node
parent837d8336fb5323ff797cbcbce17a05a3838e051f (diff)
downloadcmix-58ead6a9a4a2a81f067ad698366bd32841346058.tar.gz
cmix-58ead6a9a4a2a81f067ad698366bd32841346058.tar.bz2
cmix-58ead6a9a4a2a81f067ad698366bd32841346058.zip
Consolidated all the crypto apis and implemented the Precomputation Postprocessing step
Diffstat (limited to 'node')
-rw-r--r--node/node.cpp76
-rw-r--r--node/node.hpp1
2 files changed, 53 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.";
}
diff --git a/node/node.hpp b/node/node.hpp
index 6587556..a143359 100644
--- a/node/node.hpp
+++ b/node/node.hpp
@@ -83,6 +83,7 @@ class Node
void handle_node_secretkey(cmix_proto::SecretKey const& secret);
void handle_node_prepre(cmix_proto::PrePre const& prepre);
void handle_node_premix(cmix_proto::PreMix const& premix);
+ void handle_node_prepost(cmix_proto::PrePost const& prepost);
void handle_node_message(cmix_proto::CMixMessage message);
void handle_client_keyexchange(ClientConnections::key_type handle, cmix_proto::KeyExchange ke);