aboutsummaryrefslogtreecommitdiff
path: root/libcmix
diff options
context:
space:
mode:
Diffstat (limited to 'libcmix')
-rw-r--r--libcmix/cmix.c41
-rw-r--r--libcmix/cmix.h8
2 files changed, 37 insertions, 12 deletions
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 <string.h>
#include <stdlib.h>
#include <stdio.h>
+#include <math.h>
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