diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-11-18 13:01:34 +0100 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-11-18 13:01:34 +0100 |
| commit | 39fa834e6f88ca68015eb5f91915ba681a7ce7ed (patch) | |
| tree | 27bae91b6d7d21b36fa97f125c0d2b96071b8719 | |
| parent | 127b6d6d55456eb49104d380157a63ef1d1ac546 (diff) | |
| download | cmix-39fa834e6f88ca68015eb5f91915ba681a7ce7ed.tar.gz cmix-39fa834e6f88ca68015eb5f91915ba681a7ce7ed.tar.bz2 cmix-39fa834e6f88ca68015eb5f91915ba681a7ce7ed.zip | |
Made permutation a responsibility of cmix in the realtime phase.
| -rw-r--r-- | libcmix/cmix.c | 19 | ||||
| -rw-r--r-- | libcmix/cmix.h | 2 | ||||
| -rw-r--r-- | node/node_node.cpp | 28 |
3 files changed, 33 insertions, 16 deletions
diff --git a/libcmix/cmix.c b/libcmix/cmix.c index 2ba5fd9..149bc7d 100644 --- a/libcmix/cmix.c +++ b/libcmix/cmix.c @@ -205,6 +205,25 @@ enum cmix_error permute_and_multiply_encrypted_s(struct CMixContext const* ctx, return no_error; } +enum cmix_error permute_and_multiply_s(struct CMixContext const* ctx, char** out_buffer, char const** message, size_t nr_elements) { + size_t el_size = get_group_element_array_size(ctx); + + for(size_t i = 0; i < nr_elements; ++i) { + unsigned int new_pos = ctx->permutation[i]; + + GroupElement message_el = ctx->api.array_to_element(message[i], el_size, false); + GroupElement mult = ctx->api.multiply(message_el, ctx->s[new_pos], false); + + element_to_buffer(ctx, out_buffer[new_pos], mult); + + ctx->api.free_group_element(message_el); + ctx->api.free_group_element(mult); + } + + return no_error; +} + + enum cmix_error multiply_s(struct CMixContext const* ctx, char* out_buffer, char const* message, size_t index) { size_t el_size = get_group_element_array_size(ctx); diff --git a/libcmix/cmix.h b/libcmix/cmix.h index f3d071d..689906c 100644 --- a/libcmix/cmix.h +++ b/libcmix/cmix.h @@ -87,7 +87,7 @@ enum cmix_error encrypt_r_and_multiply(struct CMixContext const* ctx, char* rand enum cmix_error permute_and_multiply_encrypted_s(struct CMixContext const* ctx, char** random_buffer, char** message_buffer, char const** random_element, char const** message_element, size_t nr_elements); -enum cmix_error multiply_s(struct CMixContext const* ctx, char* out_buffer, char const* message, size_t index); +enum cmix_error permute_and_multiply_s(struct CMixContext const* ctx, char** out_buffer, char const** message, size_t nr_elements); enum cmix_error get_key_exchange_value(struct CMixContext const* ctx, char* buffer, GroupElement priv_element); diff --git a/node/node_node.cpp b/node/node_node.cpp index 1742035..8faa4cf 100644 --- a/node/node_node.cpp +++ b/node/node_node.cpp @@ -160,25 +160,23 @@ cmix_proto::RealMix fill_realtime_mix_message(CMixContext& ctx, T const& ms) { cmix_proto::RealMix realmix; size_t len = get_group_element_array_size(&ctx); - - for(int i = 0; i < ms.size(); ++i) { - realmix.add_m(); - } - + std::vector<char*> mv(ms.size(), nullptr); + std::vector<char const*> msv(ms.size(), nullptr); for(int i = 0; i < ms.size(); ++i) { - auto new_pos = ctx.permutation[i]; - - realmix.mutable_m(new_pos)->resize(len); - - multiply_s( - &ctx, - &(*realmix.mutable_m(new_pos))[0], - ms.Get(i).data(), - i - ); + std::string* m = realmix.add_m(); + m->resize(len); + mv[i] = &(*m)[0]; + msv[i] = ms.Get(i).data(); } + permute_and_multiply_s( + &ctx, + mv.data(), + msv.data(), + ms.size() + ); + return realmix; } |
