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;