aboutsummaryrefslogtreecommitdiff
path: root/libcmix
diff options
context:
space:
mode:
Diffstat (limited to 'libcmix')
-rw-r--r--libcmix/cmix.c16
-rw-r--r--libcmix/cmix.h2
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