diff options
Diffstat (limited to 'libcmix/cmix.c')
| -rw-r--r-- | libcmix/cmix.c | 19 |
1 files changed, 19 insertions, 0 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); |
