diff --git a/crypto/dap_enc.c b/crypto/dap_enc.c
index 12cd24001b238e38679252a03e422de8f6c92884..1c101ff0474eabd809e37ab6644ed571267eaf27 100644
--- a/crypto/dap_enc.c
+++ b/crypto/dap_enc.c
@@ -27,6 +27,7 @@
 #include <stdint.h>
 #include <string.h>
 #include <time.h>
+#include <assert.h>
 #include "dap_enc.h"
 #include "dap_enc_base64.h"
 #include "dap_enc_key.h"
@@ -52,36 +53,84 @@ void dap_enc_deinit()
 
 }
 
+/**
+ * @brief dap_enc_code_out_size
+ * @param a_key
+ * @param a_buf_in_size
+ * @return min buffer size for input in encode function
+ */
+size_t dap_enc_code_out_size(dap_enc_key_t* a_key, const size_t a_buf_in_size, dap_enc_data_type_t type)
+{
+    size_t raw_encode_data_size = dap_enc_key_get_enc_size(a_key, a_buf_in_size);
+    if(raw_encode_data_size == 0) {
+        log_it(L_ERROR, "dap_enc_key_get_enc_size return 0");
+        return 0;
+    }
+    if(type != DAP_ENC_DATA_TYPE_RAW) {
+        return (size_t)DAP_ENC_BASE64_ENCODE_SIZE(raw_encode_data_size);
+    }
+    return raw_encode_data_size;
+}
+
+/**
+ * @brief dap_enc_decode_out_size
+ * @param a_key
+ * @param a_buf_in_size
+ * @return min buffer size for input in decode function
+ */
+size_t dap_enc_decode_out_size(dap_enc_key_t* a_key, const size_t a_buf_in_size, dap_enc_data_type_t type)
+{
+    size_t raw_decode_data_size = dap_enc_key_get_dec_size(a_key, a_buf_in_size);
+    if(raw_decode_data_size == 0) {
+        log_it(L_ERROR, "dap_enc_key_get_enc_size return 0");
+        return 0;
+    }
+
+    if(type != DAP_ENC_DATA_TYPE_RAW) {
+        return (size_t)DAP_ENC_BASE64_ENCODE_SIZE(raw_decode_data_size);
+    }
+    return dap_enc_decode_out_size;
+}
+
+
 
 /**
  * @brief dap_enc_code Encode data with key
- * @param key_private Private key
- * @param buf  Input buffer
- * @param buf_size Input buffer size
- * @param buf_out Output buffer
+ * @param a_key Private key
+ * @param a_buf  Input buffer
+ * @param a_buf_size Input buffer size
+ * @param a_buf_out Output buffer
+ * @param a_buf_out_size_max
  * @return bytes actualy written in the output buffer
  */
-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_code(struct dap_enc_key * a_key,const void * a_buf_in,const size_t a_buf_size,
+                    void * a_buf_out, const size_t a_buf_out_size_max, dap_enc_data_type_t a_data_type_out)
 {
-    if(key->enc) {
-        if(data_type_out == DAP_ENC_DATA_TYPE_RAW) {
-            return key->enc(key, buf, buf_size, buf_out);
-        }
-
-        void *proc_buf;
-        size_t ret = key->enc(key, buf, buf_size, &proc_buf);
-        if(data_type_out == DAP_ENC_DATA_TYPE_B64 || data_type_out == DAP_ENC_DATA_TYPE_B64_URLSAFE) {
-            *buf_out = malloc(DAP_ENC_BASE64_ENCODE_SIZE(ret));
-            ret=dap_enc_base64_encode(proc_buf, ret, *buf_out, data_type_out);
-            free(proc_buf);
-        } else {
-            log_it(L_ERROR, "Unknown dap_enc_data_type");
-            return 0;
+    if(a_key->enc_na) {
+        if(a_data_type_out == DAP_ENC_DATA_TYPE_RAW) {
+            return a_key->enc_na(a_key, a_buf_in, a_buf_size, a_buf_out, a_buf_out_size_max);
+        }else{
+            void *l_proc_buf;
+            l_proc_buf  = DAP_NEW_SIZE (void, a_buf_out_size_max );
+            size_t l_proc_buf_size = a_key->enc_na(a_key, a_buf_in, a_buf_size, l_proc_buf,a_buf_out_size_max);
+            if(a_data_type_out == DAP_ENC_DATA_TYPE_B64 || a_data_type_out == DAP_ENC_DATA_TYPE_B64_URLSAFE) {
+                if(DAP_ENC_BASE64_ENCODE_SIZE(l_proc_buf_size) <= a_buf_out_size_max) {
+                    size_t l_buf_out_size=dap_enc_base64_encode(l_proc_buf, l_proc_buf_size, a_buf_out, a_data_type_out);
+                    DAP_DELETE(l_proc_buf);
+                    return l_buf_out_size;
+                } else {
+                    DAP_DELETE(l_proc_buf);
+                    log_it(L_ERROR, "a_buf_out_size_max less than result size");
+                    return 0;
+                }
+            } else {
+                log_it(L_ERROR, "Unknown dap_enc_data_type");
+                DAP_DELETE(l_proc_buf);
+                return 0;
+            }
         }
-        return ret;
     } else {
-        log_it(L_ERROR, "key->enc is NULL");
+        log_it(L_ERROR, "key->enc_na is NULL");
         return 0;
     }
 }
@@ -95,39 +144,39 @@ 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 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)
+size_t dap_enc_decode(struct dap_enc_key * a_key,const void * a_buf_in, const size_t a_buf_in_size,
+                      void * a_buf_out, const size_t a_buf_out_size_max, dap_enc_data_type_t a_data_type_in)
 {
-    void *proc_buf = NULL;
-    const void *proc_buf_const = NULL;
-    size_t proc_buf_size = 0;
-    switch(data_type_in){
+    void *l_proc_buf = NULL;
+    const void *l_proc_buf_const = NULL;
+    size_t l_proc_buf_size = 0;
+    switch(a_data_type_in){
         case DAP_ENC_DATA_TYPE_B64:
         case DAP_ENC_DATA_TYPE_B64_URLSAFE:
-            proc_buf=calloc(1,DAP_ENC_BASE64_ENCODE_SIZE(buf_size));
-            proc_buf_size= dap_enc_base64_decode((const char*) buf,buf_size,proc_buf,data_type_in);
-            proc_buf_const=proc_buf;
+            l_proc_buf=DAP_NEW_SIZE(void,DAP_ENC_BASE64_ENCODE_SIZE(a_buf_in_size));
+            l_proc_buf_size= dap_enc_base64_decode((const char*) a_buf_in,a_buf_in_size,l_proc_buf,a_data_type_in);
+            l_proc_buf_const=l_proc_buf;
         break;
         case DAP_ENC_DATA_TYPE_RAW:{
-            proc_buf_const=buf;
-            proc_buf_size=buf_size;
+            l_proc_buf_const=a_buf_in;
+            l_proc_buf_size=a_buf_in_size;
         }break;
     }
 
-    if(key->dec) {
-        if(proc_buf_size == 0) {
+    if(a_key->dec_na) {
+        if(l_proc_buf_size == 0) {
             log_it(L_ERROR, "Buf is null. dap_enc_base64_decode is failed");
             return 0;
         }
-        size_t ret = key->dec(key,proc_buf_const,proc_buf_size, buf_out);
+        size_t ret = a_key->dec_na(a_key,l_proc_buf_const,l_proc_buf_size, a_buf_out,a_buf_out_size_max);
 
-        if(data_type_in==DAP_ENC_DATA_TYPE_B64 || data_type_in == DAP_ENC_DATA_TYPE_B64_URLSAFE)
-            free(proc_buf);
+        if(a_data_type_in==DAP_ENC_DATA_TYPE_B64 || a_data_type_in == DAP_ENC_DATA_TYPE_B64_URLSAFE)
+            free(l_proc_buf);
         return ret;
     } else {
-        log_it(L_WARNING, "key->dec is NULL");
-        if(proc_buf_size)
-            free(proc_buf);
+        log_it(L_WARNING, "key->dec_na is NULL");
+        if(l_proc_buf_size)
+            free(l_proc_buf);
         return 0;
     }
 }
diff --git a/crypto/dap_enc.h b/crypto/dap_enc.h
index 6449fac62698f75f98d0de5f7c4bb73dcdf21628..2e996330b9acd500f5bce18ce6a1892a851da49d 100644
--- a/crypto/dap_enc.h
+++ b/crypto/dap_enc.h
@@ -32,10 +32,15 @@ extern "C" {
 int dap_enc_init(void);
 void dap_enc_deinit(void);
 
-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);
+// if include_base64 == true. Calc out size with base64 encoding
+size_t dap_enc_code_out_size(dap_enc_key_t* a_key, const size_t a_buf_in_size, dap_enc_data_type_t type);
+size_t dap_enc_decode_out_size(dap_enc_key_t* a_key, const size_t a_buf_in_size, dap_enc_data_type_t type);
+
+size_t dap_enc_code(struct dap_enc_key * a_key, const void * a_buf_in, const size_t a_buf_in_size, void * a_buf_out, const size_t a_buf_out_size_max,
+                    dap_enc_data_type_t a_data_type_out);
+
+size_t dap_enc_decode(struct dap_enc_key * a_key, const void * a_buf_in, const size_t a_buf_in_size, void * a_buf_out, const size_t a_buf_out_size_max,
+                     dap_enc_data_type_t a_data_type_in);
 
 #ifdef __cplusplus
 }
diff --git a/crypto/dap_enc_base64.c b/crypto/dap_enc_base64.c
index f9c878d69954b656e1f7e729808f10a4606e9c95..90fad177c813ecf62f919800cdb89a325a430828 100755
--- a/crypto/dap_enc_base64.c
+++ b/crypto/dap_enc_base64.c
@@ -266,7 +266,6 @@ size_t dap_enc_base64_encode(const void * a_in, size_t a_in_size, char * a_out,
             a_out[size++] = '=';
         }
     }
-
     return size;
 }
 
diff --git a/crypto/dap_enc_iaes.c b/crypto/dap_enc_iaes.c
index 637a8859c026dda4de5d7dd0902a4bc90bd86e26..df5332fd6c2e10006c93c4c4abcc1a77b867114c 100644
--- a/crypto/dap_enc_iaes.c
+++ b/crypto/dap_enc_iaes.c
@@ -33,6 +33,8 @@ void dap_enc_aes_key_new(struct dap_enc_key * a_key)
     a_key->type = DAP_ENC_KEY_TYPE_IAES;
     a_key->enc = dap_enc_iaes256_cbc_encrypt;
     a_key->dec = dap_enc_iaes256_cbc_decrypt;
+    a_key->enc_na = dap_enc_iaes256_cbc_encrypt_fast;
+    a_key->dec_na = dap_enc_iaes256_cbc_decrypt_fast;
     //a_key->delete_callback = dap_enc_aes_key_delete;
 
     a_key->priv_key_data = (uint8_t *)malloc(IAES_KEYSIZE);
@@ -107,6 +109,15 @@ size_t dap_enc_iaes256_cbc_encrypt(struct dap_enc_key * a_key, const void * a_in
     return length_data_new;
 }
 
+size_t dap_enc_iaes256_calc_encode_size(const size_t size_in)
+{
+    return iaes_calc_block128_size(size_in);
+}
+
+size_t dap_enc_iaes256_calc_decode_size(const size_t size_in)
+{
+    return size_in;
+}
 
 size_t dap_enc_iaes256_cbc_encrypt_fast(struct dap_enc_key * a_key, const void * a_in,
                                         size_t a_in_size, void * buf_out, size_t buf_out_size)
diff --git a/crypto/dap_enc_iaes.h b/crypto/dap_enc_iaes.h
index 25d48fbe2c3ffa60f2b99ef9f48e4d392d8cb49e..8472dede0cf3699dee5e1b5b2a17aac1c9293afc 100644
--- a/crypto/dap_enc_iaes.h
+++ b/crypto/dap_enc_iaes.h
@@ -17,6 +17,9 @@ void dap_enc_aes_key_delete(struct dap_enc_key *a_key);
 void dap_enc_aes_key_generate(struct dap_enc_key * a_key, const void *kex_buf, size_t kex_size,
                               const void * seed, size_t seed_size, size_t key_size);
 
+size_t dap_enc_iaes256_calc_decode_size(const size_t size_in);
+size_t dap_enc_iaes256_calc_encode_size(const size_t size_in);
+
 size_t dap_enc_iaes256_cbc_decrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
 size_t dap_enc_iaes256_cbc_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
 
diff --git a/crypto/dap_enc_key.c b/crypto/dap_enc_key.c
index b4abaaa1e9acfc4554d0f5c29f5f5bf9531bcf95..6ea65ef1c1339de9810f28fc4ec2c6813dc49fc0 100644
--- a/crypto/dap_enc_key.c
+++ b/crypto/dap_enc_key.c
@@ -40,6 +40,8 @@ struct dap_enc_key_callbacks{
     dap_enc_callback_dataop_t dec;
     dap_enc_callback_dataop_na_t enc_na;
     dap_enc_callback_dataop_na_t dec_na;
+    dap_enc_callback_calc_out_size enc_out_size;
+    dap_enc_callback_calc_out_size dec_out_size;
 
     dap_enc_gen_bob_shared_key gen_bob_shared_key;
     dap_enc_gen_alice_shared_key gen_alice_shared_key;
@@ -54,10 +56,14 @@ struct dap_enc_key_callbacks{
     [DAP_ENC_KEY_TYPE_IAES]={
         .name = "IAES",
         .enc = dap_enc_iaes256_cbc_encrypt,
+        .enc_na = dap_enc_iaes256_cbc_encrypt_fast ,
         .dec = dap_enc_iaes256_cbc_decrypt,
+        .dec_na = dap_enc_iaes256_cbc_decrypt_fast ,
         .new_callback = dap_enc_aes_key_new,
         .delete_callback = dap_enc_aes_key_delete,
         .new_generate_callback = dap_enc_aes_key_generate,
+        .enc_out_size = dap_enc_iaes256_calc_encode_size,
+        .dec_out_size = dap_enc_iaes256_calc_decode_size,
     },
     [DAP_ENC_KEY_TYPE_MSRLN] = {
         .name = "MSRLN",
@@ -68,7 +74,9 @@ struct dap_enc_key_callbacks{
         .new_generate_callback = dap_enc_msrln_key_generate,
         .gen_bob_shared_key = dap_enc_msrln_gen_bob_shared_key,
         .gen_alice_shared_key = dap_enc_msrln_gen_alice_shared_key,
-        .new_from_data_public_callback = dap_enc_msrln_key_new_from_data_public
+        .new_from_data_public_callback = dap_enc_msrln_key_new_from_data_public,
+        .enc_out_size = NULL,
+        .dec_out_size = NULL
     },
     [DAP_ENC_KEY_TYPE_DEFEO]={
         .name = "DEFEO",
@@ -79,6 +87,8 @@ struct dap_enc_key_callbacks{
         .new_callback = dap_enc_defeo_key_new,
         .delete_callback = dap_enc_defeo_key_delete,
         .new_generate_callback = dap_enc_defeo_key_new_generate,
+        .enc_out_size = NULL,
+        .dec_out_size = NULL
     },
     [DAP_ENC_KEY_TYPE_SIG_PICNIC]={
         .name = "PICNIC",
@@ -89,6 +99,8 @@ struct dap_enc_key_callbacks{
         .new_callback = dap_enc_defeo_key_new,
         .delete_callback = dap_enc_defeo_key_delete,
         .new_generate_callback = dap_enc_defeo_key_new_generate,
+        .enc_out_size = NULL,
+        .dec_out_size = NULL
 
     },
     [DAP_ENC_KEY_TYPE_SIG_BLISS]={
@@ -102,6 +114,8 @@ struct dap_enc_key_callbacks{
         .new_callback = dap_enc_sig_bliss_key_new,
         .delete_callback = dap_enc_sig_bliss_key_delete,
         .new_generate_callback = dap_enc_sig_bliss_key_new_generate,
+        .enc_out_size = NULL,
+        .dec_out_size = NULL
     }
 };
 
@@ -232,3 +246,21 @@ void dap_enc_key_delete(dap_enc_key_t * a_key)
     free(a_key->priv_key_data);
     free(a_key);
 }
+
+size_t dap_enc_key_get_enc_size(dap_enc_key_t * a_key, const size_t buf_in_size)
+{
+    if(s_callbacks[a_key->type].enc_out_size) {
+        return s_callbacks[a_key->type].enc_out_size(buf_in_size);
+    }
+    log_it(L_ERROR, "enc_out_size not realize for current key type");
+    return 0;
+}
+
+size_t dap_enc_key_get_dec_size(dap_enc_key_t * a_key, const size_t buf_in_size)
+{
+    if(s_callbacks[a_key->type].dec_out_size) {
+        return s_callbacks[a_key->type].dec_out_size(buf_in_size);
+    }
+    log_it(L_ERROR, "dec_out_size not realize for current key type");
+    return 0;
+}
diff --git a/crypto/dap_enc_key.h b/crypto/dap_enc_key.h
index a24d5a3dfba2e6e5859f38a64b63f06944554030..47db5f3fb4d1394a013586bb1af712904c2bdfb1 100644
--- a/crypto/dap_enc_key.h
+++ b/crypto/dap_enc_key.h
@@ -152,6 +152,7 @@ typedef void (*dap_enc_callback_data_t)(struct dap_enc_key *, const void * , siz
 typedef void (*dap_enc_callback_size_t)(struct dap_enc_key *, size_t);
 typedef void (*dap_enc_callback_str_t)(struct dap_enc_key *, const char*);
 typedef char* (*dap_enc_callback_r_str_t)(struct dap_enc_key *);
+typedef size_t (*dap_enc_callback_calc_out_size)(const size_t);
 
 typedef struct dap_enc_key {
     size_t priv_key_data_size;
@@ -166,8 +167,8 @@ typedef struct dap_enc_key {
     dap_enc_key_type_t type;
     dap_enc_callback_dataop_t enc;
     dap_enc_callback_dataop_t dec;
-    dap_enc_callback_dataop_t enc_na;
-    dap_enc_callback_dataop_t dec_na;
+    dap_enc_callback_dataop_na_t enc_na;
+    dap_enc_callback_dataop_na_t dec_na;
 
     dap_enc_gen_alice_shared_key gen_alice_shared_key;
     dap_enc_gen_bob_shared_key gen_bob_shared_key;
@@ -196,6 +197,9 @@ int dap_enc_key_init(void);
 void dap_enc_key_deinit(void);
 
 
+size_t dap_enc_key_get_enc_size(dap_enc_key_t * a_key, const size_t buf_in_size);
+size_t dap_enc_key_get_dec_size(dap_enc_key_t * a_key, const size_t buf_in_size);
+
 dap_enc_key_serealize_t* dap_enc_key_serealize(dap_enc_key_t * key);
 dap_enc_key_t* dap_enc_key_deserealize(void *buf, size_t buf_size);
 
diff --git a/test/crypto/dap_enc_base64_test.c b/test/crypto/dap_enc_base64_test.c
index 274e21530a36e5358de8aa2b2ab5c35957d2b6c2..8a172361f3c4b5c1af3b341319c358d688822e3b 100644
--- a/test/crypto/dap_enc_base64_test.c
+++ b/test/crypto/dap_enc_base64_test.c
@@ -1,4 +1,5 @@
 #include "dap_enc_base64_test.h"
+#include "dap_common.h"
 
 void test_encode_decode_base64(int count_steps, dap_enc_data_type_t standard)
 {
diff --git a/test/crypto/dap_enc_msrln_test.c b/test/crypto/dap_enc_msrln_test.c
index 0020d50540883c2bc92518b1c47d4dad139ab10f..1bf814f7cbd2fedde84f95fd0e2f00611c769dc1 100644
--- a/test/crypto/dap_enc_msrln_test.c
+++ b/test/crypto/dap_enc_msrln_test.c
@@ -15,7 +15,7 @@ static void key_transfer_simulation_test()
     alice_msg = alice_key->pub_key_data;
     alice_msg_len = alice_key->pub_key_data_size;
 
-//    /* generate Bob's response */
+    /* generate Bob's response */
     dap_enc_key_t* bob_key = dap_enc_key_new(DAP_ENC_KEY_TYPE_MSRLN);
     bob_key->gen_bob_shared_key(bob_key, alice_msg, alice_msg_len, (void**)&bob_key->pub_key_data);
     bob_msg = bob_key->pub_key_data;
@@ -38,6 +38,4 @@ void dap_enc_msrln_tests_run(void)
     dap_print_module_name("dap_enc_msrln_test");
 
     key_transfer_simulation_test();
-  //  return rc;
-
 }
diff --git a/test/crypto/dap_enc_test.c b/test/crypto/dap_enc_test.c
index 2c47dc6a234b1a7de458fd3acf8aaa8c8b02f28a..dbc57c44e2e84e6b2ebf18f32803fc7823eba9a1 100644
--- a/test/crypto/dap_enc_test.c
+++ b/test/crypto/dap_enc_test.c
@@ -26,29 +26,32 @@ static void _encrypt_decrypt(enum dap_enc_key_type key_type,
 
         dap_enc_key_t* key = dap_enc_key_new_generate(key_type, kex_data, kex_size, seed, seed_size, 0);
 
+
         uint8_t source[source_size];
-        uint8_t *decode_result;
-        uint8_t *encrypt_result;
+        size_t encrypt_buff_size = dap_enc_code_out_size(key, source_size, data_type);
+        uint8_t encrypt_result[encrypt_buff_size];
 
         generate_random_byte_array(source, source_size);
 
         size_t encrypted_size = dap_enc_code(key, source,
                                              source_size,
-                                             (void**)&encrypt_result,
+                                             encrypt_result,
+                                             encrypt_buff_size,
                                              data_type);
 
+        size_t min_decode_buff_size = dap_enc_decode_out_size(key, encrypt_buff_size, data_type);
+        uint8_t decode_result[min_decode_buff_size];
         size_t out_size = dap_enc_decode(key,
                                          encrypt_result,
                                          encrypted_size,
-                                         (void**)&decode_result,
+                                         decode_result,
+                                         min_decode_buff_size,
                                          data_type);
 
         dap_assert_PIF(source_size == out_size, "Check result decode size");
 
         dap_assert_PIF(memcmp(source, decode_result, source_size) == 0, "Check source and encode->decode data");
 
-        free(encrypt_result);
-        free(decode_result);
         dap_enc_key_delete(key);
     }
 }
@@ -88,7 +91,7 @@ void test_key_transfer_msrln()
     /* generate Bob's response */
     dap_enc_key_t* bob_key = dap_enc_key_new(DAP_ENC_KEY_TYPE_MSRLN);
     bob_key->gen_bob_shared_key(bob_key, (unsigned char *) alice_msg, alice_msg_len,
-                 (void **) &bob_key->pub_key_data);
+                                (void **) &bob_key->pub_key_data);
     bob_msg = bob_key->pub_key_data;
     bob_msg_len = bob_key->pub_key_data_size;
 
@@ -170,27 +173,31 @@ static void test_serealize_deserealize()
     const char* source = "simple test";
     size_t source_size = strlen(source);
 
-    uint8_t * encrypt_result = NULL;
-    uint8_t * decode_result = NULL;
+    size_t encrypt_size = dap_enc_code_out_size(key, source_size, DAP_ENC_DATA_TYPE_RAW);
+    uint8_t encrypt_result[encrypt_size];
+
 
     size_t encrypted_size = dap_enc_code(key2, source,
                                          source_size,
-                                         (void**)&encrypt_result,
+                                         encrypt_result,
+                                         encrypt_size,
                                          DAP_ENC_DATA_TYPE_RAW);
 
+    size_t min_decode_size = dap_enc_decode_out_size(key, encrypt_size, DAP_ENC_DATA_TYPE_RAW);
+
+    uint8_t decode_result[min_decode_size];
     size_t decode_size = dap_enc_decode(key,
-                                     encrypt_result,
-                                     encrypted_size,
-                                     (void**)&decode_result,
-                                     DAP_ENC_DATA_TYPE_RAW);
+                                        encrypt_result,
+                                        encrypted_size,
+                                        decode_result,
+                                        min_decode_size,
+                                        DAP_ENC_DATA_TYPE_RAW);
 
     dap_assert_PIF(source_size == decode_size, "Check result decode size");
 
     dap_assert_PIF(memcmp(source, decode_result, source_size) == 0,
                    "Check source and encode->decode data");
 
-    free(encrypt_result);
-    free(decode_result);
     free(serealize_key);
     free(deserealize_key);
     dap_enc_key_delete(key);
diff --git a/test/libdap-test b/test/libdap-test
index 982e8d9e7726918ce622b42b5335f324e738c6dc..269a48d990a010dc778067fa88a7c2b793eec647 160000
--- a/test/libdap-test
+++ b/test/libdap-test
@@ -1 +1 @@
-Subproject commit 982e8d9e7726918ce622b42b5335f324e738c6dc
+Subproject commit 269a48d990a010dc778067fa88a7c2b793eec647