From 0a7e2dda9a14744fdf76489808ac660935a47cf5 Mon Sep 17 00:00:00 2001 From: Ivan Deniskin <ivanmordwin@yandex.ru> Date: Mon, 18 Jun 2018 14:46:34 +0300 Subject: [PATCH] Aes and Msrln updated, little changes in dap-client --- client/.vscode/tasks.json | 34 +++++ client/CMakeLists.txt | 15 ++- client/dap_client.c | 2 +- client/dap_client.h | 18 +-- client/dap_client_internal.c | 30 ++++- core/dap_common.c | 2 +- crypto/dap_enc_aes.c | 25 +++- crypto/dap_enc_aes.h | 2 + crypto/dap_enc_msrln16.c | 123 ++++++------------ crypto/dap_enc_msrln16.h | 4 +- crypto/liboqs/crypto/rand/rand.h | 9 -- .../kex_rlwe_msrln16/kex_rlwe_msrln16.h | 8 -- crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c | 59 +++++++++ http/CMakeLists.txt | 2 + http/dap_http_client.c | 6 +- http/dap_http_client.h | 1 + 16 files changed, 213 insertions(+), 127 deletions(-) create mode 100644 client/.vscode/tasks.json diff --git a/client/.vscode/tasks.json b/client/.vscode/tasks.json new file mode 100644 index 0000000..b9ffc5d --- /dev/null +++ b/client/.vscode/tasks.json @@ -0,0 +1,34 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "options": { + "cwd": "${workspaceRoot}/build" + }, + "tasks": [ + { + "label": "cmake", + "type": "shell", + "command": "cmake", + "args": [ + "../", + "-G", + "'Unix Makefiles'", + "-DCMAKE_BUILD_TYPE=Debug" + ], + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "make", + "command": "make", + "args": [ + "-j", + "8" + ], + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index cf25b42..b349940 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -1,17 +1,26 @@ cmake_minimum_required(VERSION 2.8) project (dap_client) - -set(CLIENT_SRCS dap_client.c dap_client_internal.c dap_client_remote.c) + +set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_COLOR_MAKEFILE ON) +set (CMAKE_CXX_STANDARD 11) + +set(CLIENT_SRCS dap_client.c dap_client_internal.c dap_client_remote.c sxmlc/sxmlc.c sxmlc/sxmlsearch.c) add_library(${PROJECT_NAME} STATIC ${CLIENT_SRCS}) include_directories("${dap_core_INCLUDE_DIRS}") include_directories("${dap_crypto_INCLUDE_DIRS}") -#include_directories("${dap_http_INCLUDE_DIRS}") +include_directories("${dap_http_INCLUDE_DIRS}") +include_directories("${dap_core_server_INCLUDE_DIRS}") add_definitions ("${dap_core_DEFINITIONS}") add_definitions ("${dap_crypto_DEFINITIONS}") add_definitions ("${dap_http_DEFINITIONS}") +add_definitions ("${dap_core_server_DEFINITIONS}") set(${PROJECT_NAME}_DEFINITIONS CACHE INTERNAL "${PROJECT_NAME}: Definitions" FORCE) set(${PROJECT_NAME}_INCLUDE_DIRS ${PROJECT_SOURCE_DIR} CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE) + + + diff --git a/client/dap_client.c b/client/dap_client.c index ff0c0c8..ae2ed40 100644 --- a/client/dap_client.c +++ b/client/dap_client.c @@ -2,7 +2,7 @@ #include "dap_common.h" -#include "../http/dap_http_client.h" +#include "dap_http_client.h" #include "dap_client.h" #include "dap_client_internal.h" diff --git a/client/dap_client.h b/client/dap_client.h index dfcc158..d83a887 100644 --- a/client/dap_client.h +++ b/client/dap_client.h @@ -12,11 +12,11 @@ typedef struct dap_enc_key dap_enc_key_t; typedef enum dap_client_stage { DAP_CLIENT_STAGE_BEGIN=0, DAP_CLIENT_STAGE_ENC=1, - DAP_CLIENT_STAGE_AUTH=2, - DAP_CLIENT_STAGE_STREAM_CTL=3, - DAP_CLIENT_STAGE_STREAM=4, - DAP_CLIENT_STAGE_NETCONF=5, - DAP_CLIENT_STAGE_TUNNEL=6, + DAP_CLIENT_STAGE_STREAM_CTL=2, + DAP_CLIENT_STAGE_STREAM=3, + DAP_CLIENT_STAGE_NETCONF=4, + DAP_CLIENT_STAGE_TUNNEL=5, + DAP_CLIENT_STAGE_AUTH=6 } dap_client_stage_t; typedef enum dap_client_stage_status { @@ -60,10 +60,10 @@ typedef void (*dap_client_callback_t) (dap_client_t *, void*); typedef void (*dap_client_callback_int_t) (dap_client_t *, int); typedef void (*dap_client_callback_data_size_t) (dap_client_t *, void *, size_t); -#define DAP_UPLINK_PATH_ENC_INIT "handshake" -#define DAP_UPLINK_PATH_DB "db" -#define DAP_UPLINK_PATH_STREAM_CTL "stream_ctl" -#define DAP_UPLINK_PATH_STREAM "stream" +#define DAP_UPLINK_PATH_ENC_INIT "1901248124123459" +#define DAP_UPLINK_PATH_DB "01094787531354" +#define DAP_UPLINK_PATH_STREAM_CTL "091348758013553" +#define DAP_UPLINK_PATH_STREAM "874751843144" #define DAP_UPLINK_PATH_LICENSE "license" #ifdef __cplusplus diff --git a/client/dap_client_internal.c b/client/dap_client_internal.c index ea59028..a4edd1a 100644 --- a/client/dap_client_internal.c +++ b/client/dap_client_internal.c @@ -13,7 +13,7 @@ #include "liboqs/kex/kex.h" #include "dap_enc_msrln16.h" -#include "../http/dap_http_client_simple.h" +#include "dap_http_client_simple.h" #include "dap_client_internal.h" #define LOG_TAG "dap_client_internal" @@ -176,11 +176,29 @@ static void s_stage_status_after(dap_client_internal_t * a_client_internal) a_client_internal->uplink_password, DAP_CLIENT_PROTOCOL_VERSION); log_it(L_DEBUG,"STREAM_CTL request size %u",strlen(l_request)); + a_client_internal->uplink_protocol_version = DAP_PROTOCOL_VERSION; + dap_client_internal_request_enc(a_client_internal, DAP_UPLINK_PATH_STREAM_CTL, "socket_forward","sf=1",l_request,l_request_size, m_stream_ctl_response, m_stream_ctl_error); }break; + case DAP_CLIENT_STAGE_STREAM:{ + log_it(L_INFO,"Go to stage STREAM: prepare the request"); + + size_t l_request_size = strlen( a_client_internal->uplink_user) + + strlen( a_client_internal->uplink_password)+2+10; + char *l_request = DAP_NEW_Z_SIZE (char,l_request_size) ; + + snprintf(l_request, l_request_size,"%s %s %d",a_client_internal->uplink_user, + a_client_internal->uplink_password, DAP_CLIENT_PROTOCOL_VERSION); + log_it(L_DEBUG,"STREAM request size %u",strlen(l_request)); + + dap_client_internal_request_enc(a_client_internal, + DAP_UPLINK_PATH_STREAM, + "socket_forward","sf=1",l_request,l_request_size, + m_stream_ctl_response, m_stream_ctl_error); + }break; default:{ log_it(L_ERROR,"Undefined proccessing actions for stage status %s", dap_client_stage_status_str(a_client_internal->stage_status)); @@ -296,10 +314,10 @@ void dap_client_internal_request_enc(dap_client_internal_t * a_client_internal, snprintf(l_url,1024,"http://%s:%u",a_client_internal->uplink_addr, a_client_internal->uplink_port ); l_url_size = strlen(l_url); - char *l_sub_url_enc = l_sub_url_size ? (char*) calloc(1,2*l_sub_url_size+16 ): NULL; - char *l_query_enc = l_query_size ? (char*) calloc(1,l_query_size*2+16 ):NULL; + char *l_sub_url_enc = l_sub_url_size ? (char*) calloc(1,2*(l_sub_url_size+16) ): NULL; + char *l_query_enc = l_query_size ? (char*) calloc(1,(l_query_size+16)*2):NULL; - size_t l_url_full_size_max = 2*l_sub_url_size + 2*l_query_size + 5 + l_url_size; + size_t l_url_full_size_max = 2*l_sub_url_size + 2*(l_query_size+16) + 5 + l_url_size; char * l_url_full = (char*) calloc(1, l_url_full_size_max); size_t l_request_enc_size_max = a_request_size ?a_request_size*2+16 : 0; @@ -430,6 +448,10 @@ void m_enc_init_response(dap_client_t * a_client, void * a_response,size_t a_res dap_enc_msrln16_key_t* msrln16_key = DAP_ENC_KEY_TYPE_RLWE_MSRLN16(s_key_domain); OQS_KEX_rlwe_msrln16_alice_1(msrln16_key->kex, msrln16_key->private_key, encoded_msg, 2048,&msrln16_key->public_key,&msrln16_key->public_length); aes_key_from_msrln_pub(s_key_domain); + l_client_internal->session_key_id = (char*)malloc(33); + memcpy(l_client_internal->session_key_id,encoded_key,33); + l_client_internal->session_key_id[32] = 0; + l_client_internal->session_key = s_key_domain; free(encoded_key); free(encoded_msg); l_client_internal->stage_status = DAP_CLIENT_STAGE_STATUS_DONE; diff --git a/core/dap_common.c b/core/dap_common.c index 21e3bb9..bab79df 100644 --- a/core/dap_common.c +++ b/core/dap_common.c @@ -74,7 +74,7 @@ int dap_common_init( const char * a_log_file ) return 0; } -void common_deinit() +void dap_common_deinit() { if(s_log_file) fclose(s_log_file); } diff --git a/crypto/dap_enc_aes.c b/crypto/dap_enc_aes.c index 5ca1f87..4131396 100755 --- a/crypto/dap_enc_aes.c +++ b/crypto/dap_enc_aes.c @@ -5,8 +5,8 @@ #include "dap_enc_aes.h" #include "dap_enc_key.h" +uint8_t tail_block[] = {21,27,20,36,16,20,27,31,22,41,27,33,30,21,32,28}; -#define AES_BLOCKSIZE 16 #define AES_KEYSIZE 16 #define DAP_ENC_AES_KEY(a) ((dap_enc_aes_key_t *)((a)->_inheritor) ) @@ -102,8 +102,14 @@ void dap_enc_aes_key_new_from_data(struct dap_enc_key * a_key, const void * a_in */ size_t dap_enc_aes_decode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out) { - OQS_AES128_ECB_dec(a_in,a_in_size,a_key->data,a_out); - return sizeof(a_in); + if(a_in_size % 16 != 0) + return 0; + OQS_AES128_ECB_dec(a_in,a_in_size,a_key->data,a_out); + int tail = 0; + for(int i =a_in_size-1; i > a_in_size-15; i--) + if(*(char*)(a_out + i) == (char)tail_block[i%16]) + tail++; + return a_in_size - tail; } /** @@ -116,6 +122,15 @@ size_t dap_enc_aes_decode(struct dap_enc_key* a_key, const void * a_in, size_t a */ size_t dap_enc_aes_encode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out) { - OQS_AES128_ECB_enc(a_in,a_in_size,a_key->data,a_out); - return sizeof(a_in); + int tail = 0; + if(a_in_size < 16) + tail = 16 - a_in_size; + else + tail = 16 - a_in_size % 16; + void * a_in_new = (void*)malloc(a_in_size + tail); + memcpy(a_in_new,a_in,a_in_size); + uint8_t* pointer = &tail_block; + memcpy(a_in_new+a_in_size,pointer+(16-tail),tail); + OQS_AES128_ECB_enc(a_in_new,a_in_size+tail,a_key->data,a_out); + return a_in_size + tail; } diff --git a/crypto/dap_enc_aes.h b/crypto/dap_enc_aes.h index cd41434..611b4cc 100755 --- a/crypto/dap_enc_aes.h +++ b/crypto/dap_enc_aes.h @@ -4,6 +4,8 @@ #include <stddef.h> #include <stdint.h> +#define AES_BLOCK_SIZE 16 + struct dap_enc_key; void dap_enc_aes_key_new_generate(struct dap_enc_key * a_key,size_t a_size); diff --git a/crypto/dap_enc_msrln16.c b/crypto/dap_enc_msrln16.c index 61bc3eb..afbb586 100644 --- a/crypto/dap_enc_msrln16.c +++ b/crypto/dap_enc_msrln16.c @@ -1,5 +1,6 @@ #include "dap_common.h" #include "dap_enc_msrln16.h" +#include "dap_enc_aes.h" #include "liboqs/crypto/rand/rand.h" #include "liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h" @@ -7,6 +8,7 @@ #define LOG_TAG "dap_enc_msrln16" + OQS_KEX *kex = NULL; void *alignce_priv = NULL; @@ -20,14 +22,6 @@ 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; \ @@ -41,8 +35,9 @@ typedef struct dap_enc_sidh16_key{ /** * @brief dap_enc_msrln16_key_new_generate - * @param rand - * @return + * @param a_key Struct for new key + * @param a_size Not used + * @return Size of a new key */ size_t dap_enc_msrln16_key_new_generate(struct dap_enc_key* a_key, size_t a_size)//(OQS_RAND* rand) @@ -55,6 +50,8 @@ size_t dap_enc_msrln16_key_new_generate(struct dap_enc_key* a_key, size_t a_size a_key->type = DAP_ENC_KEY_TYPE_RLWE_MSRLN16; a_key->last_used_timestamp; + a_key->dec=dap_enc_aes_decode; + a_key->enc=dap_enc_aes_encode; dap_enc_msrln16_key_t *msrln16_a_key = DAP_ENC_KEY_TYPE_RLWE_MSRLN16(a_key); msrln16_a_key->private_key = NULL; @@ -73,31 +70,7 @@ size_t dap_enc_msrln16_key_new_generate(struct dap_enc_key* a_key, size_t a_size void dap_enc_msrln16_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_rlwe_msrln16_alice_1(k, alice_priv, bob_msg, bob_msg_len, &alice_key, &alice_key_len); - if(gen != 1) { - printf("OQS_KEX_rlwe_msrln16_alice_1 lose..\n"); - gen = 0; - } - PRINT_HEX_STRING("Alice session key", alice_key, alice_key_len); - - 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;*/ } @@ -112,17 +85,34 @@ void dap_enc_msrln16_key_new_from_data_public(dap_enc_key_t * a_key, const void } +/** + * @brief dap_kex_rlwe_msrln16_new + * @param a_key + * @param a_in + * @param a_in_size + */ OQS_KEX *dap_kex_rlwe_msrln16_new(OQS_RAND *rand){ return OQS_KEX_rlwe_msrln16_new(rand); } +/** + * @brief dap_rlwe_msrln16_alice_0 + * @param a_key + * @param a_in + * @param a_in_size + */ int dap_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len){ return OQS_KEX_rlwe_msrln16_alice_0(k, alice_priv, alice_msg, alice_msg_len); } +/** + * @brief dap_rlwe_msrln16_alice_1 + * @param a_key + * @param a_in + * @param a_in_size + */ int dap_rlwe_msrln16_alice_1(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){ return OQS_KEX_rlwe_msrln16_alice_1(k,alice_priv,bob_msg,bob_msg_len,key,key_len); - } /** @@ -131,32 +121,12 @@ int dap_rlwe_msrln16_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t * */ void dap_enc_msrln16_key_delete(struct dap_enc_key* a_key) { - //dap_enc_sidh16_key_t *sidh_a_key = DAP_ENC_SIDH16_KEY(a_key); dap_enc_msrln16_key_t* msrln_a_key = DAP_ENC_KEY_TYPE_RLWE_MSRLN16(a_key); - (void) a_key; - if(!a_key){ - return; - } - /* oqs_sidh_cln16_curve_free((PCurveIsogenyStruct)sidh_a_key->user_curveIsogeny); - sidh_a_key->user_curveIsogeny = NULL;*/ - DAP_DELETE(a_key); - // free(); - /*free(alice_msg); - free(alice_key); - free(bob_msg); - free(bob_key);*/ - /*if (alice_priv) {*/ - //free(alice_priv); - /*}*/ - //OQS_KEX k = a_key-> -// if (!k) { -// return; -// } -// free(k->method_name); -// k->method_name = NULL; -// free(k); -// /*OQS_KEX_rlwe_msrln16_alice_priv_free(kex, alignce_priv); - /* OQS_KEX_rlwe_msrln16_free(kex);*/ + (void) a_key; + if(!a_key){ + return; + } + DAP_DELETE(a_key); } /** @@ -191,18 +161,9 @@ size_t dap_enc_msrln16_key_public_raw(dap_enc_key_t *a_key, void ** a_key_public * @param key_len * @return */ -//Боб отвечает на приветÑтвие -size_t dap_enc_msrln16_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) +size_t dap_enc_msrln16_decode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out) { - /*gen=OQS_KEX_rlwe_msrln16_bob(k, alice_msg, alice_msg_len, &bob_msg, &bob_msg_len, &bob_key, &bob_key_len); - if (gen!=1){ - //потерÑли от боба - } - - - PRINT_HEX_STRING("Bob message", bob_msg, bob_msg_len); - PRINT_HEX_STRING("Bob session key", bob_key, bob_key_len);*/ - + return dap_enc_aes_decode(a_key,a_in,a_in_size,a_out); } /** @@ -213,22 +174,20 @@ size_t dap_enc_msrln16_decode(OQS_KEX *k, const uint8_t *alice_msg, const size_t * @param alice_msg_len * @return */ - - -//ÐлиÑа приветÑтвует -size_t dap_enc_msrln16_encode(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) +size_t dap_enc_msrln16_encode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out) { - /*gen=OQS_KEX_rlwe_msrln16_alice_0(k ,alice_priv, alice_msg, alice_msg_len); - if (gen!=1){ - //потерÑли от алиÑÑ‹ - } - PRINT_HEX_STRING("Alice message", alice_msg, alice_msg_len);*/ + return dap_enc_aes_encode(a_key,a_in,a_in_size,a_out); } - +/** + * @brief aes_key_from_msrln_pub + * @param key Key for conversion + */ void aes_key_from_msrln_pub(dap_enc_key_t* key){ - //TODO: More difflicult aes generation dap_enc_msrln16_key_t* msrln_key = DAP_ENC_KEY_TYPE_RLWE_MSRLN16(key); key->data = (unsigned char *)malloc(16); memcpy(key->data,msrln_key->public_key,16); + key->data_size = 16; } + + diff --git a/crypto/dap_enc_msrln16.h b/crypto/dap_enc_msrln16.h index 583ef4e..11b39d2 100644 --- a/crypto/dap_enc_msrln16.h +++ b/crypto/dap_enc_msrln16.h @@ -43,8 +43,8 @@ void dap_enc_msrln16_key_delete(struct dap_enc_key* a_key); /*?*/size_t dap_enc_msrln16_key_public_raw(dap_enc_key_t *a_key, void ** a_key_public); //size_t dap_enc_msrln16_decode(dap_enc_key_t* a_key, const void * a_in, size_t a_in_size,void * a_out); -size_t dap_enc_msrln16_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); -size_t dap_enc_msrln16_encode(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +size_t dap_enc_msrln16_decode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out); +size_t dap_enc_msrln16_encode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out); //size_t dap_enc_msrln16_encode(dap_enc_key_t* a_key, const void * a_in, size_t a_in_size,void * a_out); void aes_key_from_msrln_pub(dap_enc_key_t* key); diff --git a/crypto/liboqs/crypto/rand/rand.h b/crypto/liboqs/crypto/rand/rand.h index bf5af4e..710e449 100644 --- a/crypto/liboqs/crypto/rand/rand.h +++ b/crypto/liboqs/crypto/rand/rand.h @@ -9,10 +9,6 @@ #include <stddef.h> #include <stdint.h> -#ifdef __cplusplus -extern "C" { -#endif - enum OQS_RAND_alg_name { OQS_RAND_alg_default, OQS_RAND_alg_urandom_chacha20, @@ -99,9 +95,4 @@ double OQS_RAND_zscore_deviation_from_uniform(const unsigned long occurrences[25 void OQS_RAND_report_statistics(const unsigned long occurrences[256], const char *indent); int OQS_RAND_get_system_entropy(uint8_t *buf, size_t n); - -#ifdef __cplusplus -} -#endif - #endif diff --git a/crypto/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h b/crypto/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h index 08cd3ff..77613a4 100644 --- a/crypto/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h +++ b/crypto/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h @@ -16,10 +16,6 @@ /*#include <oqs/kex.h> #include <oqs/rand.h>*/ -#ifdef __cplusplus -extern "C" { -#endif - OQS_KEX *OQS_KEX_rlwe_msrln16_new(OQS_RAND *rand); int OQS_KEX_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); @@ -29,8 +25,4 @@ int OQS_KEX_rlwe_msrln16_alice_1(OQS_KEX *k, const void *alice_priv, const uint8 void OQS_KEX_rlwe_msrln16_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_rlwe_msrln16_free(OQS_KEX *k); -#ifdef __cplusplus -} -#endif - #endif diff --git a/crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c b/crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c index 178f983..5151901 100644 --- a/crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c +++ b/crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c @@ -241,7 +241,66 @@ cleanup: return ret; } +int OQS_KEX_sidh_cln16_alice_1(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) { + int ret; + // decompression values + unsigned char *R = NULL, *A = NULL; + + if (!k || !alice_priv || !bob_msg || !key || !key_len) { + return 0; + } + + *key = NULL; + + int compressed = isCompressed(k->named_parameters); + + *key = malloc(SIDH_SHAREDKEY_LEN); + if (*key == NULL) { + goto err; + } + *key_len = SIDH_SHAREDKEY_LEN; + + if (compressed) { + if (bob_msg_len != SIDH_COMPRESSED_PUBKEY_LEN) { + goto err; + } + A = malloc(SIDH_COMPRESSED_A_LEN); + if (A == NULL) { + goto err; + } + R = malloc(SIDH_COMPRESSED_R_LEN); + if (R == NULL) { + goto err; + } + // compute Alice's shared secret + oqs_sidh_cln16_PublicKeyBDecompression_A((unsigned char *) alice_priv, (unsigned char *) bob_msg, R, A, k->ctx); + if (oqs_sidh_cln16_EphemeralSecretAgreement_Compression_A((unsigned char *) alice_priv, R, A, (unsigned char *) *key, k->ctx) != SIDH_CRYPTO_SUCCESS) { + goto err; + } + } else { + if (bob_msg_len != SIDH_PUBKEY_LEN) { + goto err; + } + if (oqs_sidh_cln16_EphemeralSecretAgreement_A((unsigned char *) alice_priv, (unsigned char *) bob_msg, (unsigned char *) *key, k->ctx) != SIDH_CRYPTO_SUCCESS) { + goto err; + } + } + + ret = 1; + goto cleanup; + +err: + ret = 0; + free(*key); + *key = NULL; + +cleanup: + free(A); + free(R); + + return ret; +} void OQS_KEX_sidh_cln16_alice_priv_free(UNUSED OQS_KEX *k, void *alice_priv) { if (alice_priv) { diff --git a/http/CMakeLists.txt b/http/CMakeLists.txt index 247ce38..7a3ac86 100644 --- a/http/CMakeLists.txt +++ b/http/CMakeLists.txt @@ -8,8 +8,10 @@ target_link_libraries(${PROJECT_NAME} curl) include_directories("${dap_core_INCLUDE_DIRS}") include_directories("${dap_client_INCLUDE_DIRS}") +include_directories("${dap_http_server_INCLUDE_DIRS}") add_definitions ("${dap_core_DEFINITIONS}") add_definitions ("${dap_client_DEFINITIONS}") +add_definitions ("${dap_http_server_DEFINITIONS}") set(${PROJECT_NAME}_DEFINITIONS CACHE INTERNAL "${PROJECT_NAME}: Definitions" FORCE) diff --git a/http/dap_http_client.c b/http/dap_http_client.c index 96da5a6..7739605 100644 --- a/http/dap_http_client.c +++ b/http/dap_http_client.c @@ -25,10 +25,10 @@ #include <libgen.h> #include "dap_common.h" #include "dap_client_remote.h" +#include "dap_http.h" #ifdef DAP_SERVER -#include "dap_server.h" -#include "dap_http.h" +#include "../../libdap-server/core_server/dap_server.h" #endif #include "dap_http_header.h" #include "dap_http_client.h" @@ -223,7 +223,7 @@ cnt:switch(cl_ht->state_read){ cl_ht->state_read=DAP_HTTP_CLIENT_STATE_HEADERS; } else{ - log_it(L_WARNINGNG, "Input: unprocessed URL request %s is rejected", d_name); + log_it(L_WARNING, "Input: unprocessed URL request %s is rejected", d_name); cl_ht->state_read=DAP_HTTP_CLIENT_STATE_NONE; dap_client_ready_to_read(cl_ht->client,true); dap_client_ready_to_write(cl_ht->client,true); diff --git a/http/dap_http_client.h b/http/dap_http_client.h index 4402ea7..01c48c0 100644 --- a/http/dap_http_client.h +++ b/http/dap_http_client.h @@ -74,6 +74,7 @@ typedef struct dap_http_client struct dap_http_url_proc * proc; void * _inheritor; + void * _internal; } dap_http_client_t; -- GitLab