From 808349b5cc0add50f4538e7a00581fa422af4719 Mon Sep 17 00:00:00 2001 From: armatusmiles <akurotych@gmail.com> Date: Wed, 7 Nov 2018 09:44:16 +0200 Subject: [PATCH] [+] gen_bob/alice_shared_key callback --- crypto/dap_enc_defeo.c | 17 ++++++++--------- crypto/dap_enc_defeo.h | 4 ++-- crypto/dap_enc_key.c | 15 +++++++++++---- crypto/dap_enc_key.h | 27 +++++++++++++++++++++++++++ crypto/dap_enc_msrln.c | 10 ++++++---- crypto/dap_enc_msrln.h | 4 ++-- test/crypto/dap_enc_defeo_test.c | 4 ++-- test/crypto/dap_enc_msrln_test.c | 6 ++---- test/crypto/dap_enc_test.c | 4 ++-- 9 files changed, 62 insertions(+), 29 deletions(-) diff --git a/crypto/dap_enc_defeo.c b/crypto/dap_enc_defeo.c index c33b047..b02f121 100644 --- a/crypto/dap_enc_defeo.c +++ b/crypto/dap_enc_defeo.c @@ -15,13 +15,11 @@ void dap_enc_defeo_key_new(struct dap_enc_key *a_key) { - a_key = DAP_NEW(dap_enc_key_t); - if(a_key == NULL) - return; a_key->type = DAP_ENC_KEY_TYPE_DEFEO; - a_key->enc = dap_enc_defeo_encode; - a_key->dec = dap_enc_defeo_decode; + a_key->enc = NULL; + a_key->gen_bob_shared_key = dap_enc_defeo_gen_bob_shared_key; + a_key->gen_alice_shared_key = dap_enc_defeo_gen_alice_shared_key; } // key pair generation of Alice @@ -57,7 +55,8 @@ void dap_enc_defeo_key_new_generate(struct dap_enc_key * a_key, const void *kex_ } -void dap_enc_defeo_key_delete(struct dap_enc_key *a_key) { +void dap_enc_defeo_key_delete(struct dap_enc_key *a_key) +{ (void)a_key; } @@ -70,7 +69,7 @@ void dap_enc_defeo_key_delete(struct dap_enc_key *a_key) { // b_pub --- Bob's public key // b_key->data --- shared key // a_pub_size --- shared key length -size_t dap_enc_defeo_encode(struct dap_enc_key *b_key, const void *a_pub, +size_t dap_enc_defeo_gen_bob_shared_key(struct dap_enc_key *b_key, const void *a_pub, size_t a_pub_size, void **b_pub) { @@ -123,9 +122,9 @@ size_t dap_enc_defeo_encode(struct dap_enc_key *b_key, const void *a_pub, // a_priv --- Alice's private key // b_pub --- Bob's public key // OUTPUT: -// a_key->data --- shared key +// a_key->priv_key_data --- shared key // a_key_len --- shared key length -size_t dap_enc_defeo_decode(struct dap_enc_key *a_key, const void *a_priv, size_t b_pub_size, unsigned char *b_pub) +size_t dap_enc_defeo_gen_alice_shared_key(struct dap_enc_key *a_key, const void *a_priv, size_t b_pub_size, unsigned char *b_pub) { if(b_pub_size != DEFEO_PUBLICK_KEY_LEN) { log_it(L_ERROR, "public key size not equal DEFEO_PUBLICKEYBYTES"); diff --git a/crypto/dap_enc_defeo.h b/crypto/dap_enc_defeo.h index da3f031..94cdba2 100644 --- a/crypto/dap_enc_defeo.h +++ b/crypto/dap_enc_defeo.h @@ -32,7 +32,7 @@ void dap_enc_defeo_key_new_generate(struct dap_enc_key * a_key, const void *kex_ void dap_enc_defeo_key_new_from_data(struct dap_enc_key* a_key, void **a_priv, size_t a_in_size); void dap_enc_defeo_key_delete(struct dap_enc_key* a_key); -size_t dap_enc_defeo_encode(struct dap_enc_key* b_key, const void* a_pub, size_t a_pub_size, void **b_pub); -size_t dap_enc_defeo_decode(struct dap_enc_key* a_key, const void* a_priv, size_t b_pub_size, unsigned char * b_pub); +size_t dap_enc_defeo_gen_bob_shared_key(struct dap_enc_key* b_key, const void* a_pub, size_t a_pub_size, void **b_pub); +size_t dap_enc_defeo_gen_alice_shared_key(struct dap_enc_key* a_key, const void* a_priv, size_t b_pub_size, unsigned char * b_pub); #endif diff --git a/crypto/dap_enc_key.c b/crypto/dap_enc_key.c index 5849352..7fac63b 100644 --- a/crypto/dap_enc_key.c +++ b/crypto/dap_enc_key.c @@ -36,6 +36,9 @@ struct dap_enc_key_callbacks{ dap_enc_callback_dataop_t enc; dap_enc_callback_dataop_t dec; + dap_enc_gen_bob_shared_key gen_bob_shared_key; + dap_enc_gen_alice_shared_key gen_alice_shared_key; + dap_enc_callback_new new_callback; dap_enc_callback_data_t new_from_data_public_callback; dap_enc_callback_new_generate new_generate_callback; @@ -53,17 +56,21 @@ struct dap_enc_key_callbacks{ }, [DAP_ENC_KEY_TYPE_MSRLN] = { .name = "MSRLN", - .enc = dap_enc_msrln_encode, - .dec = dap_enc_msrln_decode, + .enc = NULL, + .dec = NULL, .new_callback = dap_enc_msrln_key_new, .delete_callback = dap_enc_msrln_key_delete, .new_generate_callback = dap_enc_msrln_key_generate, + .gen_bob_shared_key = dap_enc_msrln_gen_bob_shared_key, + .gen_alice_shared_key = dap_enc_msrln_gen_alice_shared_key, .new_from_data_public_callback = dap_enc_msrln_key_new_from_data_public }, [DAP_ENC_KEY_TYPE_DEFEO]={ .name = "DEFEO", - .enc = dap_enc_defeo_encode, - .dec = dap_enc_defeo_decode, + .enc = NULL, + .dec = NULL, + .gen_bob_shared_key = dap_enc_defeo_gen_bob_shared_key, + .gen_alice_shared_key = dap_enc_defeo_gen_alice_shared_key, .new_callback = dap_enc_defeo_key_new, .delete_callback = dap_enc_defeo_key_delete, .new_generate_callback = dap_enc_defeo_key_new_generate, diff --git a/crypto/dap_enc_key.h b/crypto/dap_enc_key.h index 187ea58..384b83e 100644 --- a/crypto/dap_enc_key.h +++ b/crypto/dap_enc_key.h @@ -116,6 +116,31 @@ typedef void (*dap_enc_callback_delete)(struct dap_enc_key*); typedef size_t (*dap_enc_callback_dataop_t)(struct dap_enc_key *key, const void *in, const size_t in_size,void ** out); +// key pair generation and generation of shared key at Bob's side +// INPUT: +// dap_enc_key *b_key +// a_pub --- Alice's public key +// a_pub_size --- Alice's public key length +// OUTPUT: +// b_pub --- Bob's public key +// b_key->priv_key_data --- shared key +// b_key->priv_key_data_size --- shared key length +typedef int (*dap_enc_gen_bob_shared_key) (struct dap_enc_key *b_key, const void *a_pub, + size_t a_pub_size, void ** b_pub); + +// generation of shared key at Alice's side +// INPUT: +// dap_enc_key *b_key +// a_priv --- Alice's private key +// b_pub --- Bob's public key +// b_pub_size --- Bob public key size +// OUTPUT: +// a_key->priv_key_data --- shared key +// a_key->priv_key_data_size --- shared key length +typedef int (*dap_enc_gen_alice_shared_key) (struct dap_enc_key *a_key, const void *a_priv, + size_t b_pub_size, unsigned char *b_pub); + + typedef void (*dap_enc_callback_ptr_t)(struct dap_enc_key *, void *); typedef size_t (*dap_enc_callback_pptr_r_size_t)(struct dap_enc_key *, void **); typedef void (*dap_enc_callback_data_t)(struct dap_enc_key *, const void * , size_t); @@ -134,6 +159,8 @@ typedef struct dap_enc_key { dap_enc_key_type_t type; dap_enc_callback_dataop_t enc; dap_enc_callback_dataop_t dec; + dap_enc_gen_alice_shared_key gen_alice_shared_key; + dap_enc_gen_bob_shared_key gen_bob_shared_key; void * _inheritor; // WARNING! Inheritor must have only serealizeble/deserializeble data (copy) size_t _inheritor_size; diff --git a/crypto/dap_enc_msrln.c b/crypto/dap_enc_msrln.c index 6114e13..9c09cd5 100644 --- a/crypto/dap_enc_msrln.c +++ b/crypto/dap_enc_msrln.c @@ -9,8 +9,10 @@ void dap_enc_msrln_key_new(struct dap_enc_key* a_key) { a_key->type = DAP_ENC_KEY_TYPE_MSRLN; - a_key->dec = dap_enc_msrln_decode; - a_key->enc = dap_enc_msrln_encode; + a_key->dec = NULL; + a_key->enc = NULL; + a_key->gen_bob_shared_key = dap_enc_msrln_gen_bob_shared_key; + a_key->gen_alice_shared_key = dap_enc_msrln_gen_alice_shared_key; a_key->priv_key_data_size = 0; a_key->pub_key_data_size = 0; } @@ -85,7 +87,7 @@ void dap_enc_msrln_key_generate(struct dap_enc_key * a_key, const void *kex_buf, * @param alice_msg_len * @return */ -size_t dap_enc_msrln_encode(struct dap_enc_key* b_key, const void* a_pub, const size_t a_pub_size, void ** b_pub) +size_t dap_enc_msrln_gen_bob_shared_key(struct dap_enc_key* b_key, const void* a_pub, size_t a_pub_size, void ** b_pub) { size_t ret; @@ -159,7 +161,7 @@ size_t dap_enc_msrln_encode(struct dap_enc_key* b_key, const void* a_pub, const * @param key_len * @return */ -size_t dap_enc_msrln_decode(struct dap_enc_key* a_key, const void* a_priv, const size_t b_key_len, unsigned char * b_pub) +size_t dap_enc_msrln_gen_alice_shared_key(struct dap_enc_key* a_key, const void* a_priv, const size_t b_key_len, unsigned char * b_pub) { size_t ret = 1; diff --git a/crypto/dap_enc_msrln.h b/crypto/dap_enc_msrln.h index 4bb3751..0b24723 100644 --- a/crypto/dap_enc_msrln.h +++ b/crypto/dap_enc_msrln.h @@ -28,7 +28,7 @@ void dap_enc_msrln_key_delete(struct dap_enc_key* a_key); size_t dap_enc_msrln_key_public_raw(dap_enc_key_t *a_key, void ** a_key_public); -size_t dap_enc_msrln_encode(struct dap_enc_key* b_key, const void *a_pub, const size_t a_pub_size, void **b_pub); -size_t dap_enc_msrln_decode(struct dap_enc_key* a_key, const void* a_priv, const size_t b_key_len, unsigned char * b_pub); +size_t dap_enc_msrln_gen_bob_shared_key(struct dap_enc_key* b_key, const void *a_pub, size_t a_pub_size, void **b_pub); +size_t dap_enc_msrln_gen_alice_shared_key(struct dap_enc_key* a_key, const void* a_priv, const size_t b_key_len, unsigned char * b_pub); #endif diff --git a/test/crypto/dap_enc_defeo_test.c b/test/crypto/dap_enc_defeo_test.c index 73108e4..4a97f5a 100644 --- a/test/crypto/dap_enc_defeo_test.c +++ b/test/crypto/dap_enc_defeo_test.c @@ -16,13 +16,13 @@ static void key_transfer_simulation_test() /* generate Bob's response */ dap_enc_key_t* bob_key = dap_enc_key_new(DAP_ENC_KEY_TYPE_DEFEO); - dap_enc_defeo_encode(bob_key, (unsigned char *) alice_msg, alice_msg_len, + bob_key->gen_bob_shared_key(bob_key, (unsigned char *) alice_msg, alice_msg_len, (unsigned char **) &bob_key->pub_key_data); bob_msg = bob_key->pub_key_data; bob_msg_len = bob_key->pub_key_data_size; /* Alice processes Bob's response */ - dap_enc_defeo_decode(alice_key, alice_key->priv_key_data, bob_msg_len, bob_msg); + alice_key->gen_alice_shared_key(alice_key, alice_key->priv_key_data, bob_msg_len, bob_msg); /* compare session key values */ dap_assert(memcmp(alice_key->priv_key_data, bob_key->priv_key_data, alice_key->priv_key_data_size) == 0, "Session keys equals"); diff --git a/test/crypto/dap_enc_msrln_test.c b/test/crypto/dap_enc_msrln_test.c index 6b0a8f5..0020d50 100644 --- a/test/crypto/dap_enc_msrln_test.c +++ b/test/crypto/dap_enc_msrln_test.c @@ -16,15 +16,13 @@ static void key_transfer_simulation_test() alice_msg_len = alice_key->pub_key_data_size; // /* generate Bob's response */ - // dap_enc_key_t* bob_key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_MSRLN, NULL, 0, NULL, 0, 0); dap_enc_key_t* bob_key = dap_enc_key_new(DAP_ENC_KEY_TYPE_MSRLN); - dap_enc_msrln_encode(bob_key, (unsigned char *) alice_msg, alice_msg_len, - (unsigned char **) &bob_key->pub_key_data); + bob_key->gen_bob_shared_key(bob_key, alice_msg, alice_msg_len, (void**)&bob_key->pub_key_data); bob_msg = bob_key->pub_key_data; bob_msg_len = bob_key->pub_key_data_size; /* Alice processes Bob's response */ - dap_enc_msrln_decode(alice_key, alice_key->priv_key_data, bob_msg_len, bob_msg); + alice_key->gen_alice_shared_key(alice_key, alice_key->priv_key_data, bob_msg_len, bob_msg); /* compare session key values */ dap_assert(memcmp(alice_key->priv_key_data, bob_key->priv_key_data, alice_key->priv_key_data_size) == 0, "Session keys equals"); diff --git a/test/crypto/dap_enc_test.c b/test/crypto/dap_enc_test.c index 4cba6d5..337b2cd 100644 --- a/test/crypto/dap_enc_test.c +++ b/test/crypto/dap_enc_test.c @@ -87,13 +87,13 @@ void test_key_transfer_msrln() /* generate Bob's response */ dap_enc_key_t* bob_key = dap_enc_key_new(DAP_ENC_KEY_TYPE_MSRLN); - bob_key->enc(bob_key, (unsigned char *) alice_msg, alice_msg_len, + bob_key->gen_bob_shared_key(bob_key, (unsigned char *) alice_msg, alice_msg_len, (void **) &bob_key->pub_key_data); bob_msg = bob_key->pub_key_data; bob_msg_len = bob_key->pub_key_data_size; /* Alice processes Bob's response */ - bob_key->dec(alice_key, alice_key->priv_key_data, bob_msg_len, (void**)bob_msg); + bob_key->gen_alice_shared_key(alice_key, alice_key->priv_key_data, bob_msg_len, (void**)bob_msg); /* compare session key values */ dap_assert(memcmp(alice_key->priv_key_data, bob_key->priv_key_data, alice_key->priv_key_data_size) == 0, "Session keys equals"); -- GitLab