diff --git a/crypto/dap_enc_aes.c b/crypto/dap_enc_aes.c index 4131396238c04ac6ff22ffef2f296315187b2acc..5b839d327d181642460fa4294232f5f67594ae26 100755 --- a/crypto/dap_enc_aes.c +++ b/crypto/dap_enc_aes.c @@ -5,10 +5,12 @@ #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 +uint8_t tail_block[] = {21,27,20,36,16,20,27,31,22,41,27,33,30,21,32,28}; + #define DAP_ENC_AES_KEY(a) ((dap_enc_aes_key_t *)((a)->_inheritor) ) static void print_bytes(uint8_t *bytes, size_t num_bytes) { @@ -91,6 +93,28 @@ void dap_enc_aes_key_new_from_data(struct dap_enc_key * a_key, const void * a_in a_key->delete_callback=dap_enc_aes_key_delete; } +/** + * @brief dap_enc_aes_key_new_from_str + * @param a_key + * @param a_in + * @param a_in_size + */ +void dap_enc_aes_key_new_from_str(struct dap_enc_key * a_key, const char * a_in) +{ + if(strlen(a_in) < AES_KEYSIZE) + return; + + a_key->last_used_timestamp = time(NULL); + a_key->data = (unsigned char*)malloc(AES_KEYSIZE); + memcpy(a_key->data,a_in,AES_KEYSIZE); + //a_key->data[16]='\0'; + a_key->data_size = AES_KEYSIZE; + a_key->type=DAP_ENC_KEY_TYPE_AES; + a_key->enc=dap_enc_aes_encode; + a_key->dec=dap_enc_aes_decode; + a_key->delete_callback=dap_enc_aes_key_delete; +} + /** * @brief dap_enc_aes_decode diff --git a/crypto/dap_enc_aes.h b/crypto/dap_enc_aes.h index 611b4cc89595d2d7232be1dd43417231a3929cb5..cf7e38f4899d79b6f416843fa7cd4fd82af3013d 100755 --- a/crypto/dap_enc_aes.h +++ b/crypto/dap_enc_aes.h @@ -6,14 +6,23 @@ #define AES_BLOCK_SIZE 16 +#ifdef __cplusplus +extern "C" { +#endif + struct dap_enc_key; void dap_enc_aes_key_new_generate(struct dap_enc_key * a_key,size_t a_size); void dap_enc_aes_key_new_from_data(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size); +void dap_enc_aes_key_new_from_str(struct dap_enc_key * a_key, const char * a_in); void dap_enc_aes_key_delete(struct dap_enc_key *a_key); int test_key_aes(); size_t dap_enc_aes_decode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out); size_t dap_enc_aes_encode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out); +#ifdef __cplusplus +} +#endif + #endif diff --git a/crypto/dap_enc_key.c b/crypto/dap_enc_key.c index f771b923f3157c4ec3f39a0b4c44feed18e6efc7..f63290eb0531c77a18f96128a190bb9e8a36a2f7 100644 --- a/crypto/dap_enc_key.c +++ b/crypto/dap_enc_key.c @@ -43,6 +43,7 @@ struct dap_enc_key_callbacks{ dap_enc_callback_data_t new_from_data_callback; dap_enc_callback_data_t new_from_data_public_callback; dap_enc_callback_size_t new_generate_callback; + dap_enc_callback_str_t new_from_str_callback; dap_enc_callback_t delete_callback; } s_callbacks[]={ @@ -55,7 +56,8 @@ struct dap_enc_key_callbacks{ .new_callback = NULL, .delete_callback = NULL, .new_generate_callback = dap_enc_aes_key_new_generate, - .new_from_data_callback = dap_enc_aes_key_new_from_data + .new_from_data_callback = dap_enc_aes_key_new_from_data, + .new_from_str_callback = dap_enc_aes_key_new_from_str }, // NEW HOPE [DAP_ENC_KEY_TYPE_RLWE_NEWHOPE]={ @@ -163,6 +165,9 @@ dap_enc_key_t *dap_enc_key_new_from_str(dap_enc_key_type_t a_key_type, const cha if(a_key_type< c_callbacks_size ){ ret = DAP_NEW_Z(dap_enc_key_t); + if(s_callbacks[a_key_type].new_from_str_callback){ + s_callbacks[a_key_type].new_from_str_callback(ret,a_key_str); + } } return ret; } diff --git a/crypto/dap_enc_key.h b/crypto/dap_enc_key.h index 2266fb49e3291f8a0c9a0528408078fd153e6879..20bd576e6d5719fdd60f64667017a7c47aa51d77 100644 --- a/crypto/dap_enc_key.h +++ b/crypto/dap_enc_key.h @@ -23,6 +23,11 @@ #include <stddef.h> #include <time.h> + +#ifdef __cplusplus +extern "C" { +#endif + typedef enum dap_enc_data_type{DAP_ENC_DATA_TYPE_RAW, DAP_ENC_DATA_TYPE_B64, @@ -126,4 +131,8 @@ dap_enc_key_t *dap_enc_key_new_from_data(dap_enc_key_type_t a_key_type, void * a dap_enc_key_t *dap_enc_key_new_from_str(dap_enc_key_type_t a_key_type, const char *a_key_str); void dap_enc_key_delete(dap_enc_key_t * a_key); +#ifdef __cplusplus +} +#endif + #endif diff --git a/crypto/dap_enc_sidh16.c b/crypto/dap_enc_sidh16.c index 7a02729fbaa15470c1423fe3e28a37bd3eea0770..4c7b475ad751f6303187fc8a768491126f724b25 100644 --- a/crypto/dap_enc_sidh16.c +++ b/crypto/dap_enc_sidh16.c @@ -280,65 +280,4 @@ size_t dap_enc_sidh16_decode(struct dap_enc_key *a_key, const void *a_in, size_t } -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; - DAP_DELETE(*key); - *key = NULL; - -cleanup: - DAP_DELETE(A); - DAP_DELETE(R); - - return ret; -} - diff --git a/crypto/liboqs/crypto/aes/aes.c b/crypto/liboqs/crypto/aes/aes.c index c77a799ddc178c944eb79e060a5f175c31fec774..78854711441fececa3ad630c88e7da6501504618 100644 --- a/crypto/liboqs/crypto/aes/aes.c +++ b/crypto/liboqs/crypto/aes/aes.c @@ -3,6 +3,10 @@ #include "aes.h" #include "aes_local.h" +#ifdef __cplusplus +extern "C" { +#endif + void OQS_AES128_load_schedule(const uint8_t *key, void **schedule, int for_encryption) { #ifdef USE_OPENSSL oqs_aes128_load_schedule_ossl(key, schedule, for_encryption); @@ -191,4 +195,10 @@ inline void oqs_aes128_ecb_dec_sch_ossl(const uint8_t *ciphertext, const size_t assert(1 == EVP_DecryptFinal_ex((EVP_CIPHER_CTX *) schedule, plaintext, &outlen)); } + + +#endif + +#ifdef __cplusplus +} #endif diff --git a/http/dap_http_client.c b/http/dap_http_client.c index 77396057fec4f7a57dcd606d4e91fe061c5f8213..329ad07e99020001b9c7fc1ef7c53823ebd483f8 100644 --- a/http/dap_http_client.c +++ b/http/dap_http_client.c @@ -25,11 +25,12 @@ #include <libgen.h> #include "dap_common.h" #include "dap_client_remote.h" -#include "dap_http.h" #ifdef DAP_SERVER -#include "../../libdap-server/core_server/dap_server.h" +#include "dap_server.h" +#include "dap_http.h" #endif + #include "dap_http_header.h" #include "dap_http_client.h" diff --git a/http/dap_http_client.h b/http/dap_http_client.h index 4402ea73ea3523682dec3a78c91f0ac1c1b97cd8..01c48c0534cb7405ded6db1d738e5e9f299f77b7 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;