aboutsummaryrefslogtreecommitdiff
path: root/libcmix
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-11-18 13:01:34 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2016-11-18 13:01:34 +0100
commit39fa834e6f88ca68015eb5f91915ba681a7ce7ed (patch)
tree27bae91b6d7d21b36fa97f125c0d2b96071b8719 /libcmix
parent127b6d6d55456eb49104d380157a63ef1d1ac546 (diff)
downloadcmix-39fa834e6f88ca68015eb5f91915ba681a7ce7ed.tar.gz
cmix-39fa834e6f88ca68015eb5f91915ba681a7ce7ed.tar.bz2
cmix-39fa834e6f88ca68015eb5f91915ba681a7ce7ed.zip
Made permutation a responsibility of cmix in the realtime phase.
Diffstat (limited to 'libcmix')
-rw-r--r--libcmix/cmix.c19
-rw-r--r--libcmix/cmix.h2
2 files changed, 20 insertions, 1 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);