aboutsummaryrefslogtreecommitdiff
path: root/libcmix/cmix.h
diff options
context:
space:
mode:
Diffstat (limited to 'libcmix/cmix.h')
-rw-r--r--libcmix/cmix.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/libcmix/cmix.h b/libcmix/cmix.h
index e0d9961..3877382 100644
--- a/libcmix/cmix.h
+++ b/libcmix/cmix.h
@@ -1,7 +1,12 @@
+#pragma once
+
#ifdef __cplusplus
extern "C" {
#endif
+#include "api.h"
+#include "keypair.h"
+#include "groupelement.h"
#include "bignum.h"
/*!
@@ -26,6 +31,7 @@ enum cmix_error {
no_error = 0,
index_out_of_range = 1000,
cmix_bignum_error = 2000,
+ out_of_memory = 4000,
};
/*!
@@ -63,6 +69,43 @@ enum cmix_error set_message(char const* message, struct CMixBuffer b, unsigned i
*/
enum cmix_error calculate_shared_key_part(struct Bignum* result, struct Bignum partial_shared, struct Bignum my_share, struct Bignum mod);
+struct CMixContext {
+ struct Api api;
+ struct KeyPair keypair;
+ GroupElement network_key;
+ size_t nr_participants;
+ GroupElement* r;
+ GroupElement* s;
+ unsigned int* permutation;
+ GroupElement* pirs;
+};
+
+struct CMixContext initialize_cmix_context(struct Api api);
+
+void deinitialize(struct CMixContext* ctx);
+
+enum cmix_error initialize_keypair(struct CMixContext* ctx);
+
+enum cmix_error get_public_key(struct CMixContext const* ctx, char* buffer);
+
+enum cmix_error add_public_share(struct CMixContext const* ctx, char* buffer, char const* share);
+
+enum cmix_error start_mix(struct CMixContext* ctx, size_t nr_participants);
+
+enum cmix_error initialize_mix_randomness(struct CMixContext* ctx);
+
+size_t get_group_element_array_size(struct CMixContext const* ctx);
+
+enum cmix_error set_network_key(struct CMixContext* ctx, char const* buffer, size_t len);
+
+enum cmix_error encrypt_r(struct CMixContext const* ctx, char* random_buffer, char* message_buffer, size_t index);
+
+enum cmix_error encrypt_r_and_multiply(struct CMixContext const* ctx, char* random_buffer, char* message_buffer, char const* random_element, char const* message_element, size_t index);
+
+enum cmix_error multiply_s(struct CMixContext const* ctx, char* r_out_buffer, char* m_out_buffer, char const* r_in_buffer, char const* m_in_buffer, size_t index);
+
+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);
+
#ifdef __cplusplus
} // extern "C"
#endif