From f9b2305777d9943ca71a1e00a2be66a0b41cbaca Mon Sep 17 00:00:00 2001
From: Dmitriy Gerasimov <dm@cifercom.com>
Date: Wed, 27 Dec 2017 18:57:04 +0700
Subject: [PATCH] [*] Changes in CMake for monero_crypt import files [*]
 Cleaned up some old garbage [+] Declarations of all alghorythms from liboqs

---
 crypt/CMakeLists.txt               |  10 ++-
 crypt/dap_enc.c                    |  28 ++++---
 crypt/dap_enc.h                    |  11 ++-
 crypt/dap_enc_aes.c                | 114 +++++++++++------------------
 crypt/dap_enc_aes.h                |  16 ++--
 crypt/dap_enc_base64.c             |  21 +++++-
 crypt/dap_enc_base64.h             |   8 +-
 crypt/dap_enc_key.c                | 110 +++++++++++++++-------------
 crypt/dap_enc_key.h                |  55 ++++++++------
 crypt/monero_crypto/CMakeLists.txt |  27 ++++---
 10 files changed, 213 insertions(+), 187 deletions(-)

diff --git a/crypt/CMakeLists.txt b/crypt/CMakeLists.txt
index 32287691a0..e944c08149 100644
--- a/crypt/CMakeLists.txt
+++ b/crypt/CMakeLists.txt
@@ -1,11 +1,15 @@
 cmake_minimum_required(VERSION 2.8)
 project (dapcrypt)
   
-set(CRYPT_SRCS dap_enc.c dap_enc_key.c  )
- 
+set(CRYPT_SRCS dap_enc.c dap_enc_aes.c dap_enc_key.c  )
+
+add_subdirectory(monero_crypto)
+
 include_directories("${dapcore_INCLUDE_DIRS}")
+include_directories("${monero_crypto_INCLUDE_DIRS}")
 add_definitions ("${dapcore_DEFINITIONS}")
-add_library(${PROJECT_NAME} STATIC ${CRYPT_SRCS})
+add_definitions ("${monero_crypto_DEFINITIONS}")
+add_library(${PROJECT_NAME} STATIC ${CRYPT_SRCS} ${crypto_sources} )
 
 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/crypt/dap_enc.c b/crypt/dap_enc.c
index 5260cbbbb6..eba2bfd7a6 100644
--- a/crypt/dap_enc.c
+++ b/crypt/dap_enc.c
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <time.h>
 #include "dap_enc.h"
+#include "dap_enc_base64.h"
 #include "dap_enc_key.h"
 #include "dap_common.h"
 
@@ -41,6 +42,13 @@ int dap_enc_init()
     return 0;
 }
 
+/**
+ * @brief dap_enc_deinit
+ */
+void dap_enc_deinit()
+{
+
+}
 
 /**
  * @brief dap_enc_code Encode data with key
@@ -57,16 +65,16 @@ size_t dap_enc_code(struct dap_enc_key * key,const void * buf,const size_t buf_s
         void *proc_buf;
         switch(data_type_out)
         {
-            case ENC_DATA_TYPE_B64:{
+            case DAP_ENC_DATA_TYPE_B64:{
                 proc_buf=calloc(1,buf_size*2);
             }break;
-            case ENC_DATA_TYPE_RAW:{
+            case DAP_ENC_DATA_TYPE_RAW:{
                 proc_buf=buf_out;
             }break;
         }
         size_t ret=key->enc(key,buf,buf_size,proc_buf);
-        if(data_type_out==ENC_DATA_TYPE_B64){
-            ret=enc_base64_encode(proc_buf,ret,buf_out);
+        if(data_type_out==DAP_ENC_DATA_TYPE_B64){
+            ret=dap_enc_base64_encode(proc_buf,ret,buf_out);
             free(proc_buf);
             return ret;
         }
@@ -77,7 +85,7 @@ size_t dap_enc_code(struct dap_enc_key * key,const void * buf,const size_t buf_s
 }
 
 /**
- * @brief enc_decode Decode data with key
+ * @brief dap_enc_decode Decode data with key
  * @param key_public Public key
  * @param buf  Input buffer
  * @param buf_size Input buffer size
@@ -85,18 +93,18 @@ size_t dap_enc_code(struct dap_enc_key * key,const void * buf,const size_t buf_s
  * @param buf_out_max Maximum size of output buffer
  * @return bytes actualy written in the output buffer
  */
-size_t enc_decode(struct enc_key * key,const void * buf, const size_t buf_size, void * buf_out, enc_data_type_t data_type_in)
+size_t dap_enc_decode(struct dap_enc_key * key,const void * buf, const size_t buf_size, void * buf_out, dap_enc_data_type_t data_type_in)
 {
     void *proc_buf;
     const void *proc_buf_const;
     size_t proc_buf_size;
     switch(data_type_in){
-        case ENC_DATA_TYPE_B64:{
+        case DAP_ENC_DATA_TYPE_B64:{
             proc_buf=calloc(1,buf_size);
-            proc_buf_size= enc_base64_decode((const char*) buf,buf_size,proc_buf);
+            proc_buf_size= dap_enc_base64_decode((const char*) buf,buf_size,proc_buf);
             proc_buf_const=proc_buf;
         }break;
-        case ENC_DATA_TYPE_RAW:{
+        case DAP_ENC_DATA_TYPE_RAW:{
             proc_buf_const=buf;
             proc_buf_size=buf_size;
         }break;
@@ -104,7 +112,7 @@ size_t enc_decode(struct enc_key * key,const void * buf, const size_t buf_size,
 
     if(key->dec){
         size_t ret=key->dec(key,proc_buf_const,proc_buf_size,buf_out);
-        if(data_type_in==ENC_DATA_TYPE_B64)
+        if(data_type_in==DAP_ENC_DATA_TYPE_B64)
             free(proc_buf);
         return ret;
     }else{
diff --git a/crypt/dap_enc.h b/crypt/dap_enc.h
index 9d83ce423f..f6efe8db36 100644
--- a/crypt/dap_enc.h
+++ b/crypt/dap_enc.h
@@ -25,12 +25,21 @@
 
 #include "dap_enc_key.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 int dap_enc_init();
+void dap_enc_deinit();
 
 size_t dap_enc_code(struct dap_enc_key * key, const void * buf, const size_t buf_size, void * buf_out,
                     dap_enc_data_type_t data_type_out);
 size_t dap_enc_decode(struct dap_enc_key * key, const void * buf, const size_t buf_size, void * buf_out,
-                      dap_enc_data_type_t data_type_in);
+                     dap_enc_data_type_t data_type_in);
+
+#ifdef __cplusplus
+}
+#endif
 
 
 #endif
diff --git a/crypt/dap_enc_aes.c b/crypt/dap_enc_aes.c
index b2ba81a5b8..1c1d70c9dc 100755
--- a/crypt/dap_enc_aes.c
+++ b/crypt/dap_enc_aes.c
@@ -1,103 +1,77 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include "enc_aes.h"
-#include "enc_key.h"
-#include "sap_aes.h"
+#include "dap_enc_aes.h"
+#include "dap_enc_key.h"
 
-typedef struct enc_aes_key{
-    KeySchedule ks;
-    byte salt[SALT_LEN*2];
-} enc_aes_key_t;
+#define AES_BLOCKSIZE 16
+
+typedef struct dap_enc_aes_key{
+} dap_enc_aes_key_t;
+
+#define DAP_ENC_AES_KEY(a) ((dap_enc_aes_key_t *)((a)->_inheritor) )
 
-#define ENC_AES_KEY(a) ((enc_aes_key_t *)((a)->internal) )
 
 /**
- * @brief enc_aes_key_new
- * @param key
+ * @brief dap_enc_aes_key_delete
+ * @param a_key
  */
-void enc_aes_key_new(struct enc_key * key)
+void dap_enc_aes_key_delete(struct dap_enc_key *a_key)
 {
-    char str[64];
-    size_t i;
-    for(i=0;i<sizeof(str);i++)
-        str[i]=64+rand()%30;
-    str[sizeof(str)-1]=0;
-    enc_aes_key_create(key,str);
+    (void) a_key;
 }
 
 /**
- * @brief enc_aes_key_new
- * @param key
+ * @brief dap_enc_aes_key_new_generate
+ * @param a_key
  */
-void enc_aes_key_create(struct enc_key * key, const char *password_string)
+void dap_enc_aes_key_new_generate(struct dap_enc_key * a_key)
 {
-    char *p1;
-    char *p2;
-    key->data= (unsigned char*) calloc(1,33);
-    key->data_size=32;
-    key->internal = calloc(1,sizeof(enc_aes_key_t) );
-    key->enc=enc_aes_encode;
-    key->dec=enc_aes_decode;
 
-    size_t p_len=strlen(password_string)/2;
-    p1= calloc(1,p_len+1);
-    p2= calloc(1,p_len+1);
-    memcpy(p1,password_string,p_len);
-    memcpy(p2,password_string+p_len,p_len);
-
-    Aes_KeyFromPassword(256,p1,key->data);
-    Aes_KeyFromPassword(256,p2,ENC_AES_KEY(key)->salt);
-    Aes_KeyExpansion( key->data , ENC_AES_KEY(key)->ks );
-    if (p1)
-    	free(p1);
-    if (p2)
-    	free(p2);
-    //Aes_GenSalt(ENC_AES_KEY(key)->salt);
 }
 
-void enc_aes_key_delete(struct enc_key *key)
+/**
+ * @brief dap_enc_aes_key_new_from
+ * @param a_key
+ * @param a_in
+ * @param a_in_size
+ */
+void dap_enc_aes_key_new_from(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size)
 {
-    (void) key;
+
 }
 
+
 /**
- * @brief enc_aes_public_decode
- * @param key
- * @param key_size
- * @param in
- * @param in_size
- * @param out
+ * @brief dap_enc_aes_decode
+ * @param a_key
+ * @param a_in
+ * @param a_in_size
+ * @param a_out
  * @return
  */
-size_t enc_aes_decode(struct enc_key* key, const void * in, size_t in_size,void * out)
+size_t dap_enc_aes_decode(struct dap_enc_key* a_key, const void * a_in, size_t a_in_size,void * a_out)
 {
-    memcpy(out,in,in_size);
-    Aes_DecryptBlks( out,in_size,ENC_AES_KEY(key)->salt,ENC_AES_KEY(key)->ks );
-    return in_size;
+    memcpy(a_out,a_in,a_in_size);
 
+
+    return a_in_size;
 }
 
 /**
- * @brief enc_aes_public_encode
- * @param key
- * @param key_size
- * @param in
- * @param in_size
- * @param out
+ * @brief dap_enc_aes_encode
+ * @param a_key
+ * @param a_in
+ * @param a_in_size
+ * @param a_out
  * @return
  */
-size_t enc_aes_encode(struct enc_key* key, const void * in, size_t in_size,void * 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)
 {
-    size_t ret=(in_size%AES_BLOCKSIZE) ? ( in_size+ (AES_BLOCKSIZE- (in_size%AES_BLOCKSIZE) ) ): in_size ;
-    memcpy(out,in,in_size);
-    if(ret-in_size)
-        memset((unsigned char*)out+in_size,0,ret-in_size);
-    Aes_EncryptBlks(out,ret,ENC_AES_KEY(key)->salt,ENC_AES_KEY(key)->ks );
+    size_t ret=(a_in_size%AES_BLOCKSIZE) ? ( a_in_size+ (AES_BLOCKSIZE- (a_in_size%AES_BLOCKSIZE) ) ): a_in_size ;
+    memcpy(a_out,a_in,a_in_size);
+    if(ret-a_in_size)
+        memset((unsigned char*)a_out+a_in_size,0,ret-a_in_size);
+
     return ret;
 }
-
-
-
-
-
diff --git a/crypt/dap_enc_aes.h b/crypt/dap_enc_aes.h
index 698bfdf7ac..7c5fb93909 100755
--- a/crypt/dap_enc_aes.h
+++ b/crypt/dap_enc_aes.h
@@ -1,15 +1,15 @@
-#ifndef _ENC_AES_H_
-#define _ENC_AES_H_
+#ifndef _DAP_ENC_AES_H_
+#define _DAP_ENC_AES_H_
 
 #include <stddef.h>
 
-struct enc_key;
+struct dap_enc_key;
 
-void enc_aes_key_new(struct enc_key * key);
-void enc_aes_key_create(struct enc_key * key, const char *password_string);
-void enc_aes_key_delete(struct enc_key *key);
+void dap_enc_aes_key_new_generate(struct dap_enc_key * a_key);
+void dap_enc_aes_key_new_from(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size);
+void dap_enc_aes_key_delete(struct dap_enc_key *a_key);
 
-size_t enc_aes_decode(struct enc_key* key, const void * in, size_t in_size,void * out);
-size_t enc_aes_encode(struct enc_key* key, const void * in, size_t in_size,void * out);
+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);
 
 #endif
diff --git a/crypt/dap_enc_base64.c b/crypt/dap_enc_base64.c
index 2b399c4b28..5c51a1577f 100755
--- a/crypt/dap_enc_base64.c
+++ b/crypt/dap_enc_base64.c
@@ -3,6 +3,7 @@
 #include <stdint.h>
 #include <ctype.h>
 #include <stdlib.h>
+
 #include "enc_base64.h"
 
 #define B64_TRUE	1
@@ -77,9 +78,14 @@ b64_decode (const char *, size_t);
 unsigned char *
 b64_decode_ex (const char *, size_t, size_t *);
 
-
-
-size_t enc_base64_decode(const char * in, size_t in_size,void * out)
+/**
+ * @brief dap_enc_base64_decode
+ * @param in
+ * @param in_size
+ * @param out
+ * @return
+ */
+size_t dap_enc_base64_decode(const char * in, size_t in_size,void * out)
 {
     //B64_Decode( in, in_size, (byte*) out );
     //return B64_GetSize( in_size,0 );
@@ -168,7 +174,14 @@ size_t enc_base64_decode(const char * in, size_t in_size,void * out)
     return l_size;
 }
 
-size_t enc_base64_encode(const void * a_in, size_t a_in_size, char * a_out)
+/**
+ * @brief dap_enc_base64_encode
+ * @param a_in
+ * @param a_in_size
+ * @param a_out
+ * @return
+ */
+size_t dap_enc_base64_encode(const void * a_in, size_t a_in_size, char * a_out)
 {
   int i = 0;
   int j = 0;
diff --git a/crypt/dap_enc_base64.h b/crypt/dap_enc_base64.h
index bd3658e974..c0e7eb0c53 100755
--- a/crypt/dap_enc_base64.h
+++ b/crypt/dap_enc_base64.h
@@ -1,13 +1,13 @@
-#ifndef _ENC_BASE64_H_
-#define _ENC_BASE64_H_
+#ifndef _DAP_ENC_BASE64_H_
+#define _DAP_ENC_BASE64_H_
 #include <stddef.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-size_t enc_base64_decode(const char * in, size_t in_size,void * out);
-size_t enc_base64_encode(const void * in, size_t in_size,char * out);
+size_t dap_enc_base64_decode(const char * in, size_t in_size,void * out);
+size_t dap_enc_base64_encode(const void * in, size_t in_size,char * out);
 
 #ifdef __cplusplus
 }
diff --git a/crypt/dap_enc_key.c b/crypt/dap_enc_key.c
index 5e15ecf980..27a17b8b85 100644
--- a/crypt/dap_enc_key.c
+++ b/crypt/dap_enc_key.c
@@ -22,52 +22,53 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "enc_key.h"
-#include "enc_fnam2.h"
-
-#define LOG_TAG "enc_key"
-
+#include "dap_enc_aes.h"
+
+#include "dap_enc_key.h"
+
+#define LOG_TAG "dap_enc_key"
+
+struct dap_enc_key_callbacks{
+    dap_enc_callback_dataop_t enc;
+    dap_enc_callback_dataop_t dec;
+    dap_enc_callback_data_t new_from_callback;
+    dap_enc_callback_t new_generate_callback;
+    dap_enc_callback_t delete_callback;
+} s_callbacks[]={
+    [DAP_ENC_KEY_TYPE_AES]={
+                            .enc = dap_enc_aes_encode,
+                            .dec = dap_enc_aes_decode,
+                            .new_generate_callback = dap_enc_aes_key_new_generate,
+                            .new_from_callback = dap_enc_aes_key_new_from
+                           }
+};
 
 /**
- * @brief enc_key_session_pair_create
- * @param client_pub_key
- * @param key_len
+ * @brief dap_enc_key_init
  * @return
  */
-rsa_key_t* enc_key_session_pair_create(const char* client_pub_key, u_int16_t key_len)
+int dap_enc_key_init()
 {
-    rsa_key_t* key_session_pair = (rsa_key_t*)calloc(1, sizeof(rsa_key_t));
-
-    BIO *bio = BIO_new(BIO_s_mem());
-    BIO_write(bio, client_pub_key,key_len);
-    PEM_read_bio_RSAPublicKey(bio, &key_session_pair->client_public_key, NULL, NULL);
-    BIO_free_all(bio);
-
-    if ( key_session_pair->client_public_key == NULL)
-    {
-        free(key_session_pair);
-        log_it(WARNING, "key session pair not create");
-        return NULL;
-    }
-
-    key_session_pair->server_key = RSA_generate_key(RSA_KEY_LENGTH, PUB_EXP, NULL, NULL);
-
-    if ( key_session_pair->server_key == NULL )
-        log_it(ERROR, "Error generate rsa key");
-
-    return key_session_pair;
+    return 0;
 }
 
+/**
+ * @brief dap_enc_key_deinit
+ */
+void dap_enc_key_deinit()
+{
 
+}
 
 /**
- * @brief enc_key_generate
- * @param v_type
- * @param key_session_pair
+ * @brief dap_enc_key_new_generate
+ * @param key_type
+ * @param key_size
  * @return
  */
-enc_key_t* enc_key_generate(enc_data_type_t v_type, rsa_key_t* key_session_pair)
+dap_enc_key_t *dap_enc_key_new_generate(dap_enc_key_type_t key_type, size_t key_size)
 {
+    if(s_callbacks[key_type] )
     switch (v_type) {
     case ENC_KEY_TYPE_RSA: {
             if(key_session_pair == NULL)
@@ -89,13 +90,7 @@ enc_key_t* enc_key_generate(enc_data_type_t v_type, rsa_key_t* key_session_pair)
     return NULL;
 }
 
-/**
- * @brief enc_key_create
- * @param key_input_b64
- * @param v_type
- * @return
- */
-enc_key_t *enc_key_create(const char * key_input,enc_key_type_t v_type)
+dap_enc_key_t *dap_enc_key_new_from_str(dap_enc_key_type_t a_type, const char *a_key_str)
 {
    enc_key_t * ret= (enc_key_t *) calloc(1,sizeof(enc_key_t) );
    size_t input_size=strlen(key_input);
@@ -113,16 +108,33 @@ enc_key_t *enc_key_create(const char * key_input,enc_key_type_t v_type)
 }
 
 /**
- * @brief enc_key_delete
- * @param key
+ * @brief dap_enc_key_new_from_data
+ * @param a_type
+ * @param a_key_input
+ * @param a_key_input_size
+ * @return
+ */
+dap_enc_key_t *dap_enc_key_new_from_data(dap_enc_key_type_t a_type, void * a_key_input, size_t a_key_input_size)
+{
+
+}
+
+
+/**
+ * @brief dap_enc_key_delete
+ * @param a_key
  */
-void enc_key_delete(enc_key_t * key)
+void dap_enc_key_delete(dap_enc_key_t * a_key)
 {
-    free(key->data);
-    if(key->type == ENC_KEY_TYPE_AES)
-        enc_aes_key_delete(key);
-    if(key->internal)
-        free(key->internal);
-    free(key);
+    if( a_key->delete_callback )
+        a_key->delete_callback( a_key );
+
+    if( a_key->data )
+        free( a_key->data );
+
+    if( a_key->_inheritor )
+        free( a_key->_inheritor );
+
+    free(a_key);
 }
 
diff --git a/crypt/dap_enc_key.h b/crypt/dap_enc_key.h
index 768b2c9e5a..2317701c48 100644
--- a/crypt/dap_enc_key.h
+++ b/crypt/dap_enc_key.h
@@ -29,77 +29,84 @@ typedef enum dap_enc_data_type{DAP_ENC_DATA_TYPE_RAW,
 
 typedef enum dap_enc_key_type{ DAP_ENC_KEY_TYPE_AES, // Symmetric AES
 
-                           DAP_ENC_KEY_rlwe_bcns15, // key exchange from the ring learning with errors problem
+                           DAP_ENC_KEY_RLWE_BCNS15, // key exchange from the ring learning with errors problem
                                                 // (Bos, Costello, Naehrig, Stebila,
                                                 // IEEE Symposium on Security & Privacy 2015,
                                                 // https://eprint.iacr.org/2014/599)
 
-                           DAP_ENC_KEY_rlwe_newhope, // "NewHope": key exchange from the ring learning with errors problem
+                           DAP_ENC_KEY_RLWE_NEWHOPE, // "NewHope": key exchange from the ring learning with errors problem
                                                 //  (Alkim, Ducas, Pöppelmann, Schwabe, USENIX Security 2016 )
                                                 //  Using the reference C implementation of NewHope
                                                 // from https://github.com/tpoeppelmann/newhop
                                                 // https://eprint.iacr.org/2015/1092
 
-                           DAP_ENC_KEY_rlwe_msrln16, // Microsoft Research implementation of Peikert's ring-LWE key exchange
+                           DAP_ENC_KEY_RLWE_MSRLN16, // Microsoft Research implementation of Peikert's ring-LWE key exchange
                                                // (Longa, Naehrig, CANS 2016, https://eprint.iacr.org/2016/504)
                                                // based on the implementation of Alkim, Ducas, Pöppelmann, and Schwabe,
                                                // with improvements from Longa and Naehrig,
                                                //  https://www.microsoft.com/en-us/research/project/lattice-cryptography-library/
 
-                           DAP_ENC_KEY_lwe_frodo,  // "Frodo": key exchange from the learning with errors problem
+                           DAP_ENC_KEY_LWE_FRODO ,  // "Frodo": key exchange from the learning with errors problem
                                                // Bos, Costello, Ducas, Mironov, Naehrig, Nikolaenko, Raghunathan, Stebila
                                                // ACM Conference on Computer and Communications Security 2016
                                                // https://eprint.iacr.org/2016/659
 
-                           DAP_ENC_KEY_sidh_cln16, // Key exchange from the supersingular isogeny Diffie-Hellman problem
+                           DAP_ENC_KEY_SIDH_CLN16 , // Key exchange from the supersingular isogeny Diffie-Hellman problem
                                                // (Costello, Naehrig, Longa, CRYPTO 2016, https://eprint.iacr.org/2016/413)
                                                // using the implementation of Microsoft Research
                                                // https://www.microsoft.com/en-us/research/project/sidh-library/
 
-                           DAP_ENC_KEY_sidh_iqc_ref, // key exchange from the supersingular isogeny Diffie-Hellman problem
+                           DAP_ENC_KEY_SIDH_IQC_REF, // key exchange from the supersingular isogeny Diffie-Hellman problem
                                                  // (De Feo, Jao, Plût, J. Math. Cryptol. 8(3):209, 2014
                                                  // https://eprint.iacr.org/2011/506
                                                  //
-                           DAP_ENC_KEY_code_mcbits, // "McBits": key exchange from the error correcting codes,
+                           DAP_ENC_KEY_CODE_MCBITS, // "McBits": key exchange from the error correcting codes,
                                                 // specifically Niederreiter's form of McEliece public key encryption
                                                 //  using hidden Goppa codes (Bernstein, Chou, Schwabe, CHES 2013, https://eprint.iacr.org/2015/610)
                                                 // using the implementation of McBits from https://www.win.tue.nl/~tchou/mcbits/
 
-                           DAP_ENC_KEY_ntru,       // NTRU: key transport using NTRU public key encryption
+                           DAP_ENC_KEY_NTRU,   // NTRU: key transport using NTRU public key encryption
                                                // (Hoffstein, Pipher, Silverman, ANTS 1998) with the EES743EP1 parameter set
                                                //  wrapper around the implementation from the NTRU Open Source project
                                                // https://github.com/NTRUOpenSourceProject/NTRUEncrypt)
 
-                           DAP_ENC_KEY_mlwe_kyber, // Kyber: a CCA-secure module-lattice-based key exchange mechanism
+                           DAP_ENC_KEY_MLWE_KYBER, // Kyber: a CCA-secure module-lattice-based key exchange mechanism
                                                // (Bos, Ducas, Kiltz, Lepoint, Lyubashevsky, Schwabe, Shanck, Stehlé)
                                                // Real World Crypto 2017, https://eprint.iacr.org/2017/634)
                                                // using the reference C implementation of Kyber from pq-crystals/kyber
-                           DAP_ENC_KEY_sig_picnic, // signature based on zero-knowledge proof as specified in
+                           DAP_ENC_KEY_SIG_PICNIC , // signature based on zero-knowledge proof as specified in
                                                // Post-Quantum Zero-Knowledge and Signatures from Symmetric-Key Primitives
                                                // (Melissa Chase and David Derler and Steven Goldfeder and Claudio Orlandi
                                                // and Sebastian Ramacher and Christian Rechberger and Daniel Slamanig and Greg Zaverucha
                                                // https://eprint.iacr.org/2017/279.pdf), using the optimized implemenation
                                                //  from https://github.com/IAIK/Picnic
-                         } enc_key_type_t;
+                         } dap_enc_key_type_t;
 
-struct enc_key;
-typedef size_t (*enc_callback_t)(struct enc_key *, const void * , const size_t ,void *);
+struct dap_enc_key;
 
-typedef struct enc_key{
+typedef void (*dap_enc_callback_t)(struct dap_enc_key *);
+typedef void (*dap_enc_callback_arg_t)(struct dap_enc_key *, void *);
+typedef void (*dap_enc_callback_data_t)(struct dap_enc_key *, const void * , size_t);
+typedef size_t (*dap_enc_callback_dataop_t)(struct dap_enc_key *, const void * , const size_t ,void *);
+
+typedef struct dap_enc_key{
     unsigned char * data;
     size_t data_size;
-    enc_key_type_t type;
+    dap_enc_key_type_t type;
+
+    dap_enc_callback_dataop_t enc;
+    dap_enc_callback_dataop_t dec;
+    dap_enc_callback_t delete_callback;
 
-    enc_callback_t enc;
-    enc_callback_t dec;
+    void * _inheritor;
+} dap_enc_key_t;
 
-    void * internal;
-} enc_key_t;
+int dap_enc_key_init();
+void dap_enc_key_deinit();
 
-extern enc_key_t *enc_key_new(size_t key_size,enc_key_type_t key_type);
-extern enc_key_t *enc_key_generate(enc_data_type_t v_type, rsa_key_t* key_session_pair);
-extern enc_key_t *enc_key_create(const char * key_input,enc_key_type_t v_type);
-extern void enc_key_delete(enc_key_t * key);
-extern rsa_key_t* enc_key_session_pair_create(const char* client_pub_key, u_int16_t key_len);
+dap_enc_key_t *dap_enc_key_new_generate(dap_enc_key_type_t key_type, size_t key_size);
+dap_enc_key_t *dap_enc_key_new_from_data(dap_enc_key_type_t a_type, void * a_key_input, size_t a_key_input_size);
+dap_enc_key_t *dap_enc_key_new_from_str(dap_enc_key_type_t a_type, const char *a_key_str);
+void dap_enc_key_delete(dap_enc_key_t * key);
 
 #endif
diff --git a/crypt/monero_crypto/CMakeLists.txt b/crypt/monero_crypto/CMakeLists.txt
index 1e06a0dfd0..c2f19dd0e6 100644
--- a/crypt/monero_crypto/CMakeLists.txt
+++ b/crypt/monero_crypto/CMakeLists.txt
@@ -26,7 +26,9 @@
 # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
 # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-set(crypto_sources
+project (monero_crypto)
+
+set(monero_crypto_sources
   aesb.c
   blake256.c
   chacha8.c
@@ -47,9 +49,9 @@ set(crypto_sources
   slow-hash.c
   tree-hash.c)
 
-set(crypto_headers)
+set(monero_crypto_headers)
 
-set(crypto_private_headers
+set(monero_crypto_private_headers
   blake256.h
   chacha8.h
   crypto-ops.h
@@ -68,17 +70,7 @@ set(crypto_private_headers
   skein.h
   skein_port.h)
 
-monero_private_headers(cncrypto
-  ${crypto_private_headers})
-monero_add_library(cncrypto
-  ${crypto_sources}
-  ${crypto_headers}
-  ${crypto_private_headers})
-target_link_libraries(cncrypto
-  PUBLIC
-    ${Boost_SYSTEM_LIBRARY}
-  PRIVATE
-    ${EXTRA_LIBRARIES})
+
 
 if (ARM)
   option(NO_OPTIMIZED_MULTIPLY_ON_ARM
@@ -100,3 +92,10 @@ if (ANDROID OR IOS)
 endif()
 
 
+
+add_library(${PROJECT_NAME} STATIC ${monero_crypto_sources})
+
+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)
+
-- 
GitLab