aboutsummaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-11-18 12:47:35 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2016-11-18 12:47:35 +0100
commit6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3 (patch)
tree264bcf206535d41cdfec7c0a659c861ea0bd5f31 /node
parentd9e011488b9d7af4683e6640216e78871a06a5ec (diff)
downloadcmix-6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3.tar.gz
cmix-6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3.tar.bz2
cmix-6d55dcba54ceaccc9d90ea7c2f1746524a6e81e3.zip
Made permutation a responsibility of cmix in the precomputation phase.
Diffstat (limited to 'node')
-rw-r--r--node/node.cpp7
-rw-r--r--node/node_node.cpp56
2 files changed, 36 insertions, 27 deletions
diff --git a/node/node.cpp b/node/node.cpp
index 0f2bae5..a6ad1e1 100644
--- a/node/node.cpp
+++ b/node/node.cpp
@@ -167,6 +167,13 @@ void Node::start_precomputation() {
exit(-1);
}
+ std::stringstream ss;
+ ss << "permutation:";
+ for(auto i = 0; i < cmix_ctx.nr_participants; ++i) {
+ ss << " " << cmix_ctx.permutation[i];
+ }
+ BOOST_LOG_TRIVIAL(trace) << ss.str();
+
cmix_proto::PrePre prepre;
for(size_t i = 0; i < cmix_ctx.nr_participants; ++i) {
diff --git a/node/node_node.cpp b/node/node_node.cpp
index 7b745ed..1742035 100644
--- a/node/node_node.cpp
+++ b/node/node_node.cpp
@@ -11,6 +11,13 @@ cmix_proto::PrePre fill_precomputation_pre_message(CMixContext& ctx, T const& rs
exit(-1);
}
+ std::stringstream ss;
+ ss << "permutation:";
+ for(auto i = 0; i < ctx.nr_participants; ++i) {
+ ss << " " << ctx.permutation[i];
+ }
+ BOOST_LOG_TRIVIAL(trace) << ss.str();
+
cmix_proto::PrePre prepre;
for(size_t i = 0; i < ms.size(); ++i) {
@@ -50,36 +57,32 @@ template <typename T>
cmix_proto::PreMix fill_precomputation_mix_message(CMixContext const& ctx, T const& rs, T const& ms) {
cmix_proto::PreMix premix;
+ size_t el_len = get_group_element_array_size(&ctx);
+ std::vector<char*> r_epirs(ms.size(), nullptr);
+ std::vector<char*> m_epirs(ms.size(), nullptr);
+ std::vector<char const*> rsv(ms.size(), nullptr);
+ std::vector<char const*> msv(ms.size(), nullptr);
for(size_t i = 0; i < ms.size(); ++i) {
- premix.add_r_epirs();
- premix.add_m_epirs();
- }
- for(size_t i = 0; i < ms.size(); ++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);
+ std::string* r = premix.add_r_epirs();
+ r->resize(el_len);
+ r_epirs[i] = &(*r)[0];
- {
- std::stringstream ss;
- ss << "s: ";
- std::string s = to_string(ctx.s[i], ctx);
- for(auto&& c : s) {
- ss << "\\" << std::setw(3) << std::setfill('0') << std::oct << (unsigned int) c;
- }
- BOOST_LOG_TRIVIAL(trace) << ss.str();
- }
+ std::string* m = premix.add_m_epirs();
+ m->resize(el_len);
+ m_epirs[i] = &(*m)[0];
- multiply_encrypted_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
- );
+ rsv[i] = rs.Get(i).data();
+ msv[i] = ms.Get(i).data();
}
+
+ permute_and_multiply_encrypted_s(
+ &ctx,
+ r_epirs.data(),
+ m_epirs.data(),
+ rsv.data(),
+ msv.data(),
+ ms.size()
+ );
return premix;
}
@@ -114,7 +117,6 @@ cmix_proto::PrePost fill_precomputation_post_message(CMixContext& ctx, T const&
}
BOOST_LOG_TRIVIAL(trace) << ss.str();
}
-
}
return prepost;