From 74cea534fd189a2db423ae60997447e66265922b Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Sun, 27 Nov 2016 10:08:19 +0100 Subject: Implements message delivery. Adds a minimum number of messages per mix. Embeds the destination in the message. Clients now send messages to themselves. --- libcmix/cmix.c | 41 ++++++++++++++++++++++++++++++----------- libcmix/cmix.h | 8 +++++++- 2 files changed, 37 insertions(+), 12 deletions(-) (limited to 'libcmix') diff --git a/libcmix/cmix.c b/libcmix/cmix.c index 00b080f..2adca78 100644 --- a/libcmix/cmix.c +++ b/libcmix/cmix.c @@ -4,6 +4,7 @@ #include #include #include +#include enum cmix_error calculate_shared_key_part(struct Bignum* result, struct Bignum partial_shared, struct Bignum my_share, struct Bignum mod) { @@ -380,20 +381,38 @@ enum cmix_error remove_r_and_s(struct CMixContext const* ctx, char* out_buffer, ctx->api.free_group_element(mult); } -enum cmix_error get_pub_key_hash(struct CMixContext const* ctx, char** buffer) +enum cmix_error get_pub_key_hash(struct CMixContext const* ctx, char** buffer, size_t* len) { + ctx->api.get_pub_key_hash(buffer, len, ctx->keypair.pub); + + return no_error; +} + +size_t get_pub_key_hash_length(struct CMixContext const* ctx) { - char* buffer2; - size_t len; - ctx->api.get_pub_key_hash(&buffer2, &len, ctx->keypair.pub); + return ctx->api.get_pub_key_hash_length(); +} + +enum cmix_error create_message(struct CMixContext const* ctx, char* out_buffer, const char* dest, size_t dest_len, const char* payload, size_t payload_len) +{ + size_t el_arr_len = get_group_element_array_size(ctx); - size_t hex_len = len*2+1; - *buffer = (char*) calloc(hex_len, sizeof(char)); + memcpy(&out_buffer[1], dest, dest_len); - for(size_t i = 0; i < len; i++) { - sprintf(&(*buffer)[i*2],"%hhX",buffer2[i]); - } + size_t message_limit = el_arr_len - 1 -dest_len; - ctx->api.free_buffer(buffer2); + memcpy(&out_buffer[1] + dest_len, payload, (message_limit < payload_len ? message_limit : payload_len)); +} + +enum cmix_error split_message(struct CMixContext const* ctx, char** dest_buffer, size_t* dest_len, char** payload_buffer, size_t* payload_len, char const* message) +{ + size_t el_arr_len = get_group_element_array_size(ctx); + *dest_len = get_pub_key_hash_length(ctx); - return no_error; + *dest_buffer = (char*) calloc(*dest_len, sizeof(char)); + memcpy(*dest_buffer, &message[1], *dest_len); + + *payload_len = el_arr_len - 1 - *dest_len; + *payload_buffer = (char*) calloc(*payload_len, sizeof(char)); + memcpy(*payload_buffer, &message[1 + *dest_len], *payload_len); } + diff --git a/libcmix/cmix.h b/libcmix/cmix.h index 8e6f598..c3eeb3a 100644 --- a/libcmix/cmix.h +++ b/libcmix/cmix.h @@ -69,7 +69,9 @@ 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 get_pub_key_hash(struct CMixContext const* ctx, char** buffer); +enum cmix_error get_pub_key_hash(struct CMixContext const* ctx, char** buffer, size_t* len); + +size_t get_pub_key_hash_length(struct CMixContext const* ctx); enum cmix_error start_mix(struct CMixContext* ctx, size_t nr_participants); @@ -111,6 +113,10 @@ enum cmix_error swap_k_for_r(struct CMixContext const* ctx, char** out_buffer, c enum cmix_error remove_r_and_s(struct CMixContext const* ctx, char* out_buffer, char const* message, size_t index); +enum cmix_error create_message(struct CMixContext const* ctx, char* out_buffer, char const* dest, size_t dest_len, char const* payload, size_t payload_len); + +enum cmix_error split_message(struct CMixContext const* ctx, char** dest_buffer, size_t* dest_len, char** payload_buffer, size_t* payload_len, char const* message); + #ifdef __cplusplus } // extern "C" #endif -- cgit v1.2.3-70-g09d2