diff --git a/crypto/dap_enc_key.h b/crypto/dap_enc_key.h
index bb208aa29718fc9d392e51bd1ed81038d4f3fc58..99f8fb41c117b898c19d8fb7061e82177a9d8f6f 100644
--- a/crypto/dap_enc_key.h
+++ b/crypto/dap_enc_key.h
@@ -30,7 +30,7 @@ typedef enum dap_enc_data_type{DAP_ENC_DATA_TYPE_RAW,
                                } dap_enc_data_type_t;
 
                               
-} dap_enc_data_type_t;
+//} dap_enc_data_type_t;
 
 
 typedef enum dap_enc_key_type{ DAP_ENC_KEY_TYPE_AES, // Symmetric AES
@@ -46,7 +46,8 @@ typedef enum dap_enc_key_type{ DAP_ENC_KEY_TYPE_AES, // Symmetric AES
                                                 // from https://github.com/tpoeppelmann/newhop
                                                 // https://eprint.iacr.org/2015/1092
 
-                           DAP_ENC_KEY_TYPE_RLWE_MSRLN16, // Microsoft Research implementation of Peikert's ring-LWE key exchange
+                              DAP_ENC_KEY_TYPE_RLWE_MSRLN16,
+                           //DAP_ENC_KEY_TYPE_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,
@@ -87,7 +88,7 @@ typedef enum dap_enc_key_type{ DAP_ENC_KEY_TYPE_AES, // Symmetric AES
                                                // https://eprint.iacr.org/2017/279.pdf), using the optimized implemenation
                                                //  from https://github.com/IAIK/Picnic
                                DAP_ENC_KEY_TYPE_FNAM2 //ХЗ ЧТО, ДОБАВИЛ ЧТОБЫ БЫЛО И НА МЕНЯ КОМПИЛЯТОР НЕ РУГАЛСЯ:(
-                         } dap_enc_key_type_t;
+                         }  dap_enc_key_type_t;
 
 struct dap_enc_key;
 
diff --git a/crypto/dap_enc_msrln16.c b/crypto/dap_enc_msrln16.c
index f9f83424654bc8855b5391b019b01f4242868eff..c3850af31f47bf9d5177640c65a904594df052b0 100644
--- a/crypto/dap_enc_msrln16.c
+++ b/crypto/dap_enc_msrln16.c
@@ -1,28 +1,137 @@
 #include "dap_common.h"
 #include "dap_enc_msrln16.h"
 
+#include "liboqs/crypto/rand/rand.h"
 #include "liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h"
+#include "liboqs/kex/kex.h"
 
 #define LOG_TAG "dap_enc_msrln16"
 
+OQS_KEX *kex = NULL;
+
+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");                                            \
+    }
+
+
 /**
  * @brief dap_enc_msrln16_key_new_generate
- * @param a_key
- * @param a_size
+ * @param rand
+ * @return
  */
-void dap_enc_msrln16_key_new_generate(dap_enc_key_t * a_key, size_t a_size)
+
+dap_enc_key_t* dap_enc_msrln16_key_new_generate(struct dap_enc_key* a_key, size_t a_size)//(OQS_RAND* rand)
+//void dap_enc_msrln16_key_new_generate(OQS_RAND *rand)
 {
+    dap_enc_key_t *k = DAP_NEW(dap_enc_key_t);
+    dap_enc_msrln16_key_t *msrln16_a_key = DAP_ENC_KEY_TYPE_RLWE_MSRLN16(a_key); //DAP_ENC_SIDH16_KEY(a_key);
+   // OQS_KEX *k = malloc(sizeof(OQS_KEX));
+    if (k == NULL) {
+        return NULL;
+    }
+
+    k->data;
+    k->data_size;
+    k->type = DAP_ENC_KEY_TYPE_RLWE_MSRLN16;
+    k->last_used_timestamp;
+    k->enc = &dap_enc_msrln16_encode;
+    k->dec = &dap_enc_msrln16_decode;
+    k->delete_callback = &dap_enc_msrln16_key_delete;
+
+    msrln16_a_key->rand;
+
+  /*  k->ctx = NULL;
+    k->method_name = strdup("RLWE MSR LN16");
+    k->estimated_classical_security = 128;
+    k->estimated_quantum_security = 128;
+    k->seed = NULL;
+    k->seed_len = 0;
+    k->named_parameters = NULL;
+    k->rand = rand;
+    k->params = NULL;
+    k->alice_0 = &OQS_KEX_rlwe_msrln16_alice_0;
+    k->bob = &OQS_KEX_rlwe_msrln16_bob;
+    k->alice_1 = &OQS_KEX_rlwe_msrln16_alice_1;
+    k->alice_priv_free = &OQS_KEX_rlwe_msrln16_alice_priv_free;
+    k->free = &OQS_KEX_rlwe_msrln16_free;*/
+
+    dap_enc_key_t* key;
+
+
+    return k;
+//dap_enc_key_t *k = DAP_NEW(dap_enc_key_t);
+    //rand = OQS_RAND_new(OQS_RAND_alg_default);
+  /*  kex = OQS_KEX_rlwe_msrln16_new(rand);
+    if(kex == NULL) {
+           printf("новая пара не сгенерирована \n");
+           //gen = 0;
+       }
+           printf("расчёт для обмена ключами методом  %s\n", kex->method_name);*/
 
 }
 
 /**
  * @brief dap_enc_msrln16_key_new_from_data
- * @param a_key
- * @param a_in
- * @param a_in_size
+ * @param k
+ * @param alice_priv
+ * @param bob_msg
+ * @param bob_msg_len
+ * @param key
+ * @param key_len
  */
-void dap_enc_msrln16_key_new_from_data(dap_enc_key_t * a_key, const void * a_in, size_t a_in_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;*/
 
 }
 
@@ -41,9 +150,34 @@ void dap_enc_msrln16_key_new_from_data_public(dap_enc_key_t * a_key, const void
  * @brief dap_enc_msrln16_key_delete
  * @param a_key
  */
-void dap_enc_msrln16_key_delete(dap_enc_key_t *a_key)
+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);*/
 }
 
 /**
@@ -69,26 +203,45 @@ size_t dap_enc_msrln16_key_public_raw(dap_enc_key_t *a_key, void ** a_key_public
 
 /**
  * @brief dap_enc_msrln16_decode
- * @param a_key
- * @param a_in
- * @param a_in_size
- * @param a_out
+ * @param k
+ * @param alice_msg
+ * @param alice_msg_len
+ * @param bob_msg
+ * @param bob_msg_len
+ * @param key
+ * @param key_len
  * @return
  */
-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)
 {
+    /*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);*/
 
 }
 
 /**
  * @brief dap_enc_msrln16_encode
- * @param a_key
- * @param a_in
- * @param a_in_size
- * @param a_out
+ * @param k
+ * @param alice_priv
+ * @param alice_msg
+ * @param alice_msg_len
  * @return
  */
-size_t dap_enc_msrln16_encode(dap_enc_key_t* a_key, const void * a_in, size_t a_in_size,void * a_out)
-{
 
+
+//Алиса приветствует
+size_t dap_enc_msrln16_encode(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len)
+{
+    /*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);*/
 }
diff --git a/crypto/dap_enc_msrln16.h b/crypto/dap_enc_msrln16.h
index a694505eb28311411ed92e8ec1bba9572e3356ec..94a9adaca80d2f752a2920e40e548793052b7f41 100644
--- a/crypto/dap_enc_msrln16.h
+++ b/crypto/dap_enc_msrln16.h
@@ -2,18 +2,45 @@
 #define _DAP_ENC_MSRLN16_H_
 
 #include <stddef.h>
+#include "liboqs/crypto/rand/rand.h"
+#include "liboqs/kex/kex.h"
+#include "dap_enc_key.h"
 
-typedef struct dap_enc_key dap_enc_key_t;
+//typedef struct dap_enc_key dap_enc_key_t;
 
-void dap_enc_msrln16_key_new_generate(dap_enc_key_t * a_key, size_t a_size);
-void dap_enc_msrln16_key_new_from_data(dap_enc_key_t * a_key, const void * a_in, size_t a_in_size);
+typedef struct dap_enc_msrln16_key{
+    OQS_RAND* rand;
+
+    unsigned int alice_msg_len;
+    unsigned int bob_msg_len;
+    unsigned int key_len;
+    uint16_t estimated_classical_security;
+    uint16_t estimated_quantum_security;
+    OQS_KEX* k;
+} dap_enc_msrln16_key_t;
+
+#define DAP_ENC_KEY_TYPE_RLWE_MSRLN16(a) ((dap_enc_msrln16_key_t *)((a)->_inheritor))
+
+
+//void dap_enc_msrln16_key_new_generate(OQS_RAND *rand);
+//dap_enc_key_t* dap_enc_msrln16_key_new_generate(struct dap_enc_key* a_key, size_t a_size);
+dap_enc_key_t* dap_enc_msrln16_key_new_generate(struct dap_enc_key* a_key, size_t a_size);//(OQS_RAND* rand);
+// OQS_KEX_rlwe_msrln16_alice_1
+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);
+//void dap_enc_msrln16_key_new_from_data(dap_enc_key_t * a_key, const void * a_in, size_t a_in_size);
 void dap_enc_msrln16_key_new_from_data_public(dap_enc_key_t* a_key, const void * a_in, size_t a_in_size);
 
-void dap_enc_msrln16_key_delete(dap_enc_key_t *a_key);
 
-size_t dap_enc_msrln16_key_public_raw(dap_enc_key_t *a_key, void ** a_key_public);
+// OQS_KEX_rlwe_msrln16_alice_priv_free
+// OQS_KEX_rlwe_msrln16_free
+void dap_enc_msrln16_key_delete(struct dap_enc_key* a_key);
+//void dap_enc_msrln16_key_delete();
+
+/*?*/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_encode(dap_enc_key_t* a_key, const void * a_in, size_t a_in_size,void * a_out);
+//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_encode(dap_enc_key_t* a_key, const void * a_in, size_t a_in_size,void * a_out);
 
 #endif
diff --git a/crypto/dap_enc_sidh16.c b/crypto/dap_enc_sidh16.c
index e9f56af21cff59372e40c291a161ae747e15391a..efa298b9eaffec71013aa015358519f01e05d68a 100644
--- a/crypto/dap_enc_sidh16.c
+++ b/crypto/dap_enc_sidh16.c
@@ -22,6 +22,7 @@ static int isCompressed(void *_inheritor) {
     return 0;
 }
 
+
 extern bool dap_sidh16_CurveIsogenyStruct_isnull(PCurveIsogenyStruct pCurveIsogeny);
 
 dap_enc_key_t *dap_enc_sidh16_key_new_generate(struct dap_enc_key *a_key, size_t a_size) {
@@ -37,7 +38,7 @@ dap_enc_key_t *dap_enc_sidh16_key_new_generate(struct dap_enc_key *a_key, size_t
         oqs_sidh_cln16_curve_free(curveIsogeny);
         return NULL;
     }
-    // Инициализировать изогенную структуру кривой pCurveIsogeny со статическими данными, извлеченными из pCurveIsogenyData. 
+    // Инициализировать изогенную структуру кривой pCurveIsogeny со статическими данными, извлеченными из pCurveIsogenyData.
     // Это нужно вызвать после выделения памяти для pCurveIsogeny с помощью SIDH_curve_allocate()
     if(oqs_sidh_cln16_curve_initialize(curveIsogeny, &CurveIsogeny_SIDHp751) != SIDH_CRYPTO_SUCCESS) {
         DAP_DELETE(k);
@@ -60,7 +61,8 @@ dap_enc_key_t *dap_enc_sidh16_key_new_generate(struct dap_enc_key *a_key, size_t
 
 
 void dap_enc_sidh16_key_new_from_data(struct dap_enc_key *a_key, const void *a_in, size_t a_in_size) {
-    
+
+
 }
 
 void dap_enc_sidh16_key_delete(struct dap_enc_key *a_key) {
@@ -334,38 +336,3 @@ cleanup:
 }
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-