diff options
Diffstat (limited to 'libcmix')
| -rw-r--r-- | libcmix/cmix.c | 16 | ||||
| -rw-r--r-- | libcmix/cmix.h | 2 |
2 files changed, 18 insertions, 0 deletions
diff --git a/libcmix/cmix.c b/libcmix/cmix.c index 4893c6c..28f56db 100644 --- a/libcmix/cmix.c +++ b/libcmix/cmix.c @@ -216,3 +216,19 @@ enum cmix_error key_exchange(struct CMixContext const* ctx, GroupElement* shared return no_error; } + +enum cmix_error post_process(struct CMixContext* ctx, char const* r_epirs, char const* m_epirs, size_t index) { + GroupElement x = ctx->api.array_to_element(r_epirs, get_group_element_array_size(ctx), true); + + GroupElement D = ctx->api.get_decryption_share(x, ctx->keypair.sec); + + GroupElement msg = ctx->api.array_to_element(m_epirs, get_group_element_array_size(ctx), true); + GroupElement pirs = ctx->api.multiply(D, msg, true); + + ctx->pirs[index] = pirs; + ctx->api.free_group_element(x); + ctx->api.free_group_element(D); + ctx->api.free_group_element(msg); + + return no_error; +} diff --git a/libcmix/cmix.h b/libcmix/cmix.h index 3877382..433c3bc 100644 --- a/libcmix/cmix.h +++ b/libcmix/cmix.h @@ -106,6 +106,8 @@ enum cmix_error multiply_s(struct CMixContext const* ctx, char* r_out_buffer, ch enum cmix_error key_exchange(struct CMixContext const* ctx, GroupElement* shared_key, char* public_key_buffer, char* exhange_value_buffer, char const* pubkey, char const* value); +enum cmix_error post_process(struct CMixContext* ctx, char const* r_epirs, char const* m_epirs, size_t index); + #ifdef __cplusplus } // extern "C" #endif |
