diff --git a/crypto/dap_enc_sidh16.c b/crypto/dap_enc_sidh16.c new file mode 100644 index 0000000000000000000000000000000000000000..77a3dde30da695380e947edbaa0ac47100a68675 --- /dev/null +++ b/crypto/dap_enc_sidh16.c @@ -0,0 +1,152 @@ +#include <stdlib.h> +#include <stdio.h> +#include <stddef.h> +#include <stdint.h> +#include <string.h> +#include <stdbool.h> + +#include "dap_common.h" +#include "dap_enc_sidh16.h" +#include "dap_enc_key.h" + +#include "liboqs/kex/kex.h" +#include "liboqs/crypto/rand/rand.h" +#include "liboqs/kex_sidh_cln16/kex_sidh_cln16.h" + +OQS_KEX *k = NULL; +int gen; + +void *alignce_priv = NULL; +uint8_t *alice_msg = NULL; +size_t alice_msg_len; +uint8_t *alice_key = NULL; +size_t alice_key_len; + +uint8_t *bob_msg = NULL; +size_t bob_msg_len; +uint8_t *bob_key = NULL; +size_t bob_key_len; + + +struct dap_enc_param{ + enum OQS_KEX_alg_name alg_name; + char *named_parameters; + char *id; +}; + +typedef struct dap_enc_sidh16_key{ +} dap_enc_sidh16_key_t; + + +#define PRINT_HEX_STRING(label, str, len) \ + { size_t i; \ + printf("%-20s (%4zu bytes): ", (label), (size_t)(len)); \ + for (i = 0; i < (len); i++) { \ + printf("%02X", ((unsigned char *) (str))[i]); \ + } \ + printf("\n"); \ + } + +int dap_enc_sidh16_key_new_generate(OQS_RAND *rand, const char *named_parameters) { + + k = OQS_KEX_sidh_cln16_new(rand, named_parameters); + if(k == NULL) { + printf("Ð½Ð¾Ð²Ð°Ñ Ð¿Ð°Ñ€Ð° не Ñгенерирована \n"); + gen = 0; + } + printf("раÑчёт Ð´Ð»Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° ключами методом %s\n", k->method_name); +} + /* Alice's initial message */ +size_t dap_enc_sidh16_encode(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { + gen = OQS_KEX_sidh_cln16_alice_0(k, &alice_priv, &alice_msg, &alice_msg_len); + if(gen != 1) { + printf("OQS_KEX_sidh_cln16_alice_0 lose..\n"); + gen = 0; + } + PRINT_HEX_STRING("Alice message", alice_msg, alice_msg_len); +} + + /* Bob's response */ +size_t dap_enc_sidh16_decode(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **bob_key, size_t *bob_key_len) { + gen = OQS_KEX_sidh_cln16_bob(k, alice_msg, alice_msg_len, &bob_msg, &bob_msg_len, &bob_key, &bob_key_len); + if(gen != 1){ + printf("OQS_KEX_sidh_cln16_bob lose..\n"); + gen = 0; + } + PRINT_HEX_STRING("Bob message", bob_msg, bob_msg_len); + PRINT_HEX_STRING("Bob session key", bob_key, bob_key_len); +} + + /* Alice processes Bob's response */ +void dap_enc_sidh16_key_new_from_data(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { + gen = OQS_KEX_sidh_cln16_alice_1(k, alice_priv, bob_msg, bob_msg_len, &alice_key, &alice_key_len); + if(gen != 1) { + printf("OQS_KEX_sidh_cln16_alice_1 lose..\n"); + gen = 0; + } + PRINT_HEX_STRING("Alice session key", alice_key, alice_key_len) + + + /*compare session key lengths and values*/ + if(alice_key_len != bob_key_len) { + printf("ERROR: Alice's session key and Bob's session key are different lengths (%zu vs %zu)\n", alice_key_len, bob_key_len); + gen = 0; + } + gen = memcmp(alice_key, bob_key, alice_key_len); + if(gen != 0){ + printf("ERROR: Alice's session key and Bob's session key are not equal\n"); + PRINT_HEX_STRING("Alice session key", alice_key, alice_key_len); + PRINT_HEX_STRING("Bob session key", bob_key, bob_key_len); + + // здеÑÑŒ Ñделать запиÑÑŒ ключа в файл + + gen = 0; + } + printf("Alice and Bob's session keys match.\n"); + printf("\n\n"); + + gen = 1; +} + +void dap_enc_sidh16_key_delete() { + free(alice_msg); + free(alice_key); + free(bob_msg); + free(bob_key); + OQS_KEX_sidh_cln16_alice_priv_free(k, alignce_priv); + OQS_KEX_sidh_cln16_free(k); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/crypto/dap_enc_sidh16.h b/crypto/dap_enc_sidh16.h new file mode 100644 index 0000000000000000000000000000000000000000..a3ee502a18d346b23ea954614aac80f18df8f490 --- /dev/null +++ b/crypto/dap_enc_sidh16.h @@ -0,0 +1,27 @@ +#ifndef _DAP_ENC_SIDH16_H_ +#define _DAP_ENC_SIDH16_H_ + +#include <stddef.h> +#include "liboqs/kex/kex.h" +#include "liboqs/crypto/rand/rand.h" + +struct dap_enc_key; + +// OQS_KEX_sidh_cln16_new +int dap_enc_sidh16_key_new_generate(OQS_RAND *rand, const char *named_parameters); + +// OQS_KEX_sidh_cln16_alice_1 +void dap_enc_sidh16_key_new_from_data(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); + +// OQS_KEX_sidh_cln16_alice_priv_free +// OQS_KEX_sidh_cln16_free +void dap_enc_sidh16_key_delete(); + +// OQS_KEX_sidh_cln16_alice_0 +size_t dap_enc_sidh16_encode(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); + +// OQS_KEX_sidh_cln16_bob +size_t dap_enc_sidh16_decode(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); + + +#endif