diff options
Diffstat (limited to 'libcmix/cmix.c')
| -rw-r--r-- | libcmix/cmix.c | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/libcmix/cmix.c b/libcmix/cmix.c index 149bc7d..9c983f0 100644 --- a/libcmix/cmix.c +++ b/libcmix/cmix.c @@ -138,41 +138,50 @@ enum cmix_error set_network_key(struct CMixContext* ctx, char const* buffer, siz return no_error; } -enum cmix_error encrypt_r(struct CMixContext const* ctx, char* random_buffer, char* message_buffer, size_t index) { - GroupElement random_element; - GroupElement message_element; +enum cmix_error encrypt_r(struct CMixContext const* ctx, char** random_buffer, char** message_buffer, size_t nr_elements) { - ctx->api.encrypt(&random_element, &message_element, ctx->r[index], ctx->network_key); + for(size_t i = 0; i < nr_elements; ++i) { + GroupElement random_element; + GroupElement message_element; + + ctx->api.encrypt(&random_element, &message_element, ctx->r[i], ctx->network_key); - element_to_buffer(ctx, random_buffer, random_element); - element_to_buffer(ctx, message_buffer, message_element); + element_to_buffer(ctx, random_buffer[i], random_element); + element_to_buffer(ctx, message_buffer[i], message_element); + + ctx->api.free_group_element(random_element); + ctx->api.free_group_element(message_element); + } return no_error; } -enum cmix_error encrypt_r_and_multiply(struct CMixContext const* ctx, char* random_buffer, char* message_buffer, const char* random_element, const char* message_element, size_t index) { - GroupElement enc_random_element; - GroupElement enc_message_element; - - ctx->api.encrypt(&enc_random_element, &enc_message_element, ctx->r[index], ctx->network_key); - - size_t el_size = get_group_element_array_size(ctx); - - GroupElement other_random_element = ctx->api.array_to_element(random_element, el_size, true); - GroupElement other_message_element = ctx->api.array_to_element(message_element, el_size, true); +enum cmix_error encrypt_r_and_multiply(struct CMixContext const* ctx, char** random_buffer, char** message_buffer, const char** random_element, const char** message_element, size_t nr_elements) { - GroupElement new_random_element = ctx->api.multiply(enc_random_element, other_random_element, true); - GroupElement new_message_element = ctx->api.multiply(enc_message_element, other_message_element, true); - - element_to_buffer(ctx, random_buffer, new_random_element); - element_to_buffer(ctx, message_buffer, new_message_element); + for(size_t i = 0; i < nr_elements; ++i) { + GroupElement enc_random_element; + GroupElement enc_message_element; + + ctx->api.encrypt(&enc_random_element, &enc_message_element, ctx->r[i], ctx->network_key); + + size_t el_size = get_group_element_array_size(ctx); - ctx->api.free_group_element(enc_random_element); - ctx->api.free_group_element(enc_message_element); - ctx->api.free_group_element(other_random_element); - ctx->api.free_group_element(other_message_element); - ctx->api.free_group_element(new_random_element); - ctx->api.free_group_element(new_message_element); + GroupElement other_random_element = ctx->api.array_to_element(random_element[i], el_size, true); + GroupElement other_message_element = ctx->api.array_to_element(message_element[i], el_size, true); + + GroupElement new_random_element = ctx->api.multiply(enc_random_element, other_random_element, true); + GroupElement new_message_element = ctx->api.multiply(enc_message_element, other_message_element, true); + + element_to_buffer(ctx, random_buffer[i], new_random_element); + element_to_buffer(ctx, message_buffer[i], new_message_element); + + ctx->api.free_group_element(enc_random_element); + ctx->api.free_group_element(enc_message_element); + ctx->api.free_group_element(other_random_element); + ctx->api.free_group_element(other_message_element); + ctx->api.free_group_element(new_random_element); + ctx->api.free_group_element(new_message_element); + } return no_error; } |
