diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user
index 19852f589e3c12356ab326ad73dd3a21d7178a31..d1ad6664b6cc9507c4e397109eb62f1646ea7811 100644
--- a/CMakeLists.txt.user
+++ b/CMakeLists.txt.user
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.2, 2020-04-26T20:38:51. -->
+<!-- Written by QtCreator 4.11.2, 2020-04-26T22:56:12. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
diff --git a/src/iaes/iaes256_cbc_cernal.c b/src/iaes/iaes256_cbc_cernal.c
index a61de19b7b267133d7f69ad71bee7f95655f0589..82abb79440f0f40b916bf9aeb985ce9a2651f17a 100755
--- a/src/iaes/iaes256_cbc_cernal.c
+++ b/src/iaes/iaes256_cbc_cernal.c
@@ -7,14 +7,10 @@
 
 size_t iaes_calc_block128_size(size_t length_data)
 {
-    if(length_data < IAES_BLOCK_SIZE) {
-        return IAES_BLOCK_SIZE;
-    } else if((length_data % IAES_BLOCK_SIZE) == 0) {
-        return length_data;
-    }
-
-    size_t padding = 16 - length_data % 16;
-    return length_data + padding;
+    size_t new_length_data = length_data + 1;
+    size_t padding = IAES_BLOCK_SIZE - new_length_data % IAES_BLOCK_SIZE;
+    new_length_data += padding;
+    return new_length_data;
 }
 
 size_t iaes_block128_padding(const void *data, uint8_t **data_new, size_t length_data)
diff --git a/test/crypto/dap_enc_base58_test.c b/test/crypto/dap_enc_base58_test.c
index a11ae9de3d6fbb9b83d7a40877b5dae01099eb78..33dd6e7f1fd72fb6e574444e38b2ecdb4b5ea108 100755
--- a/test/crypto/dap_enc_base58_test.c
+++ b/test/crypto/dap_enc_base58_test.c
@@ -3,18 +3,18 @@
 #include <string.h>
 #include "dap_common.h"
 #include "dap_test.h"
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 #include "dap_enc_base58.h"
 #include "dap_enc_base58_test.h"
 
 static void test_encode_decode_base58(void)
 {
     static size_t source_size = 0;
-    int step = 1 + (rand() % 20);
+    int step = 1 + random_uint32_t( 20);
     source_size += (size_t) step;
 
     uint8_t source[source_size];
-    generate_random_byte_array(source, source_size);
+    randombytes(source, source_size);
     //source[0] = 0;
     //source[1] = 0;
     size_t encode_result_size = DAP_ENC_BASE58_ENCODE_SIZE(source_size);
diff --git a/test/crypto/dap_enc_base64_test.c b/test/crypto/dap_enc_base64_test.c
index 8a172361f3c4b5c1af3b341319c358d688822e3b..0c4d2789e01ff8e856c8bab6c21779354670150e 100755
--- a/test/crypto/dap_enc_base64_test.c
+++ b/test/crypto/dap_enc_base64_test.c
@@ -6,12 +6,12 @@ void test_encode_decode_base64(int count_steps, dap_enc_data_type_t standard)
     size_t source_size = 0;
 
     for (int i = 1; i <= count_steps; i++) {
-        int step = 1 + (rand() % 20 );
+        int step = 1 + random_uint32_t( 20 );
         source_size += (size_t)step;
         uint8_t source[source_size];
         char encode_result[DAP_ENC_BASE64_ENCODE_SIZE(source_size)];
         uint8_t decode_result[source_size];
-        generate_random_byte_array(source, source_size);
+        randombytes(source, source_size);
 
         size_t encrypted_size = dap_enc_base64_encode(source, source_size, encode_result, standard);
         size_t out_size = dap_enc_base64_decode(encode_result, encrypted_size, decode_result, standard);
diff --git a/test/crypto/dap_enc_base64_test.h b/test/crypto/dap_enc_base64_test.h
index 9d1361d2c3474b4d2dfc24446a4ec0898dc7d38c..587bd94d2e72ec3d32a19350dfde0e547835dd8e 100755
--- a/test/crypto/dap_enc_base64_test.h
+++ b/test/crypto/dap_enc_base64_test.h
@@ -3,7 +3,7 @@
 #include "dap_enc_key.h"
 #include "dap_test.h"
 #include "stdint.h"
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 
 extern void dap_enc_base64_tests_run(void);
 
diff --git a/test/crypto/dap_enc_defeo_test.h b/test/crypto/dap_enc_defeo_test.h
index afed963762fbbce7f42de320c82ab6e622deb4ce..67cb35e576f07b9b41a4ce8a2200cb5f20a41a40 100755
--- a/test/crypto/dap_enc_defeo_test.h
+++ b/test/crypto/dap_enc_defeo_test.h
@@ -2,6 +2,6 @@
 #include "dap_enc_defeo.h"
 #include "dap_enc_key.h"
 #include "dap_test.h"
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 
 void dap_enc_defeo_tests_run(void);
diff --git a/test/crypto/dap_enc_dilithium_test.c b/test/crypto/dap_enc_dilithium_test.c
index 50436f7ac5961b8427de268a55390a2e4b2b38a6..1e39e1ece3d8aa7746ad43145448c58e015091b8 100755
--- a/test/crypto/dap_enc_dilithium_test.c
+++ b/test/crypto/dap_enc_dilithium_test.c
@@ -1,4 +1,4 @@
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 #include "dap_enc_dilithium_test.h"
 #include "dap_enc_dilithium.h"
 #include "../sig_dilithium/dilithium_params.h"
@@ -9,18 +9,18 @@ static void test_signing_verifying(void)
     size_t seed_size = sizeof(uint8_t);
     uint8_t seed[seed_size];
 
-    generate_random_byte_array(seed, seed_size);
+    randombytes(seed, seed_size);
 
     dap_enc_key_t* key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_SIG_DILITHIUM, NULL, 0, seed, seed_size, 0);
 
     size_t max_signature_size = dap_enc_dilithium_calc_signature_unserialized_size();
     uint8_t* sig = calloc(max_signature_size, 1);
 
-    int step = 1 + (rand() % 20);
+    int step = 1 + random_uint32_t( 20);
     source_size += (size_t) step;
 
     uint8_t source[source_size];
-    generate_random_byte_array(source, source_size);
+    randombytes(source, source_size);
 
     size_t siglen = key->enc_na(key, source, source_size, sig, max_signature_size);
     dap_assert_PIF(siglen > 0, "Signing message");
diff --git a/test/crypto/dap_enc_picnic_test.c b/test/crypto/dap_enc_picnic_test.c
index 146372471cdb94f92f5fbb35bec281f99013c267..909b4da58e2dde0040e72d9741253b7359cde26a 100755
--- a/test/crypto/dap_enc_picnic_test.c
+++ b/test/crypto/dap_enc_picnic_test.c
@@ -1,4 +1,4 @@
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 #include "dap_enc_picnic_test.h"
 #include "../sig_picnic/picnic.h"
 
@@ -8,18 +8,18 @@ static void test_signing_verifying(void)
     size_t seed_size = sizeof(int);
     uint8_t seed[seed_size];
 
-    generate_random_byte_array(seed, seed_size);
+    randombytes(seed, seed_size);
 
     dap_enc_key_t* key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_SIG_PICNIC, NULL, 0, seed, seed_size, 0);
 
     size_t max_signature_size = dap_enc_picnic_calc_signature_size(key);
     uint8_t* sig = calloc(max_signature_size, 1);
 
-    int step = 1 + (rand() % 20);
+    int step = 1 + random_uint32_t( 20);
     source_size += (size_t) step;
 
     uint8_t source[source_size];
-    generate_random_byte_array(source, source_size);
+    randombytes(source, source_size);
 
     size_t siglen = key->enc_na(key, source, source_size, sig, max_signature_size);
     dap_assert_PIF(siglen > 0, "Signing message");
diff --git a/test/crypto/dap_enc_picnic_test.h b/test/crypto/dap_enc_picnic_test.h
index fa4cff2aab167864969e7f76353dd6dc116fba78..0e69eb1d0ace0aafa43463dac7890e0dc0b4c5b7 100755
--- a/test/crypto/dap_enc_picnic_test.h
+++ b/test/crypto/dap_enc_picnic_test.h
@@ -2,6 +2,6 @@
 #include "dap_enc_picnic.h"
 #include "dap_enc_key.h"
 #include "dap_test.h"
-//#include "dap_test_generator.h"
+//#include "rand/dap_rand.h"
 
 void dap_enc_picnic_tests_run(void);
diff --git a/test/crypto/dap_enc_ringct20_test.c b/test/crypto/dap_enc_ringct20_test.c
index 60e13fe859287b4fb9b210873ef5c1618c06d27d..ba0fdaa5ff80ae8001afcc0626f90b3e8f65ad33 100644
--- a/test/crypto/dap_enc_ringct20_test.c
+++ b/test/crypto/dap_enc_ringct20_test.c
@@ -1,26 +1,24 @@
-#include "dap_test_generator.h"
 #include "dap_enc_ringct20_test.h"
 #include "dap_enc_ringct20.h"
 #include "ringct20/ringct20_params.h"
+#include "rand/dap_rand.h"
 
 static void test_signing_verifying(void)
 {
-    static size_t source_size = 0;
+    size_t source_size = 1 + random_uint32_t(20);
+    uint8_t * source = DAP_NEW_SIZE(uint8_t, source_size);
+    randombytes(source, source_size);
     size_t seed_size = sizeof(uint8_t);
     uint8_t seed[seed_size];
 
-    generate_random_byte_array(seed, seed_size);
+    randombytes(seed, seed_size);
 
     dap_enc_key_t* key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_SIG_RINGCT20, NULL, 0, seed, seed_size, 0);
 
     size_t max_signature_size = dap_enc_ringct20_calc_signature_size();
     uint8_t* sig = calloc(max_signature_size, 1);
 
-    int step = 1 + (rand() % 20);
-    source_size += (size_t) step;
 
-    uint8_t source[source_size];
-    generate_random_byte_array(source, source_size);
 
     size_t siglen = key->enc_na(key, source, source_size, sig, max_signature_size);
     dap_assert_PIF(siglen > 0, "Signing message");
@@ -30,6 +28,7 @@ static void test_signing_verifying(void)
     dap_assert_PIF(!verify, "Verifying signature");
 
     ringct20_signature_delete((ringct20_signature_t*)sig);
+    DAP_DELETE(source);
     free(sig);
     dap_enc_key_delete(key);
 }
diff --git a/test/crypto/dap_enc_sig_bliss_test.h b/test/crypto/dap_enc_sig_bliss_test.h
index 09841df83a2c0dddd0cd8b9684c4233e1cd772d8..85223f46f9cb601fe950ed4cc1c0114802fe1941 100755
--- a/test/crypto/dap_enc_sig_bliss_test.h
+++ b/test/crypto/dap_enc_sig_bliss_test.h
@@ -2,6 +2,6 @@
 #include "dap_enc_bliss.h"
 #include "dap_enc_key.h"
 #include "dap_test.h"
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 
 void dap_enc_sig_bliss_tests_run(void);
diff --git a/test/crypto/dap_enc_sign_multi_test.c b/test/crypto/dap_enc_sign_multi_test.c
index 706c52629aec0bf65f014f7da7cc896690b0f879..9d1f238a0ae993640842fcc6600976d58a2eae85 100755
--- a/test/crypto/dap_enc_sign_multi_test.c
+++ b/test/crypto/dap_enc_sign_multi_test.c
@@ -1,6 +1,6 @@
 #include "dap_enc_sign_multi_test.h"
 #include "dap_test.h"
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 #include "dap_sign.h"
 
 #define SIGNATURE_TYPE_COUNT 4
@@ -11,7 +11,7 @@ static void test_signing_verifying(void)
     size_t seed_size = sizeof(uint8_t);
     uint8_t seed[seed_size];
 
-    generate_random_byte_array(seed, seed_size);
+    randombytes(seed, seed_size);
 
     dap_enc_key_type_t key_type_arr[SIGNATURE_TYPE_COUNT] = {\
              DAP_ENC_KEY_TYPE_SIG_TESLA,\
@@ -21,14 +21,14 @@ static void test_signing_verifying(void)
     int step;
     dap_enc_key_t* key[KEYS_TOTAL_COUNT];
     for (int i = 0; i < KEYS_TOTAL_COUNT; i++) {
-        step = (rand() % SIGNATURE_TYPE_COUNT);
+        step = random_uint32_t( SIGNATURE_TYPE_COUNT);
         key[i] = dap_enc_key_new_generate(key_type_arr[step], NULL, 0, seed, seed_size, 0);
     }
-    step = 1 + (rand() % 2000);
+    step = 1 + random_uint32_t( 2000);
     size_t source_size = (size_t) step;
 
     uint8_t *source = DAP_NEW_SIZE(uint8_t, source_size);
-    generate_random_byte_array(source, source_size);
+    randombytes(source, source_size);
 
     dap_multi_sign_params_t *params = dap_multi_sign_params_make(SIG_TYPE_MULTI_CHAINED, KEYS_TOTAL_COUNT, 5,\
                                                                  key[0], key[1], key[2], key[3], key[4], key[5],\
diff --git a/test/crypto/dap_enc_tesla_test.c b/test/crypto/dap_enc_tesla_test.c
index 60c7c33483d605bfc9f5f02d0acc44b8d5eda37c..fd43039663ffe42347eb13e147a117728e1e2305 100755
--- a/test/crypto/dap_enc_tesla_test.c
+++ b/test/crypto/dap_enc_tesla_test.c
@@ -1,4 +1,4 @@
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 #include "dap_enc_tesla_test.h"
 //#include "../sig_tesla/tesla_params.h"
 
@@ -8,18 +8,18 @@ static void test_signing_verifying(void)
     size_t seed_size = sizeof(uint8_t);
     uint8_t seed[seed_size];
 
-    generate_random_byte_array(seed, seed_size);
+    randombytes(seed, seed_size);
 
     dap_enc_key_t* key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_SIG_TESLA, NULL, 0, seed, seed_size, 0);
 
     size_t max_signature_size = dap_enc_tesla_calc_signature_size();
     uint8_t* sig = calloc(max_signature_size, 1);
 
-    int step = 1 + (rand() % 20);
+    int step = 1 + random_uint32_t( 20);
     source_size += (size_t) step;
 
     uint8_t source[source_size];
-    generate_random_byte_array(source, source_size);
+    randombytes(source, source_size);
 
     size_t siglen = key->enc_na(key, source, source_size, sig, max_signature_size);
     dap_assert_PIF(siglen > 0, "Signing message");
diff --git a/test/crypto/dap_enc_test.c b/test/crypto/dap_enc_test.c
index 408dd57a4f072c10e699227c029045ae27564bde..6cb74b1622871bb0fdc6c8aad8695dc0552cd6d8 100755
--- a/test/crypto/dap_enc_test.c
+++ b/test/crypto/dap_enc_test.c
@@ -2,7 +2,7 @@
 #include "dap_common.h"
 #include "dap_enc_test.h"
 #include "dap_test.h"
-#include "dap_test_generator.h"
+#include "rand/dap_rand.h"
 #include "dap_enc_key.h"
 #include "dap_enc_base64.h"
 #include "dap_enc_bliss.h"
@@ -125,47 +125,65 @@ static void _encrypt_decrypt(enum dap_enc_key_type key_type,
                              size_t count_steps)
 {
     size_t source_size = 1;
-
+    const int MAX_SEED_SIZE = 14;
+    uint8_t seed[MAX_SEED_SIZE];
     for (size_t i = 0; i < count_steps; i++) {
-        int step = 1 + (rand() % 20);
-        source_size += (size_t)step;
+        int step = 2;// + random_uint32_t( 20);
+        source_size = (size_t)step;
 
         const char *kex_data = "123";
         size_t kex_size = strlen(kex_data);
-        const size_t seed_size = 1 + (rand() % 1000);
-        uint8_t seed[seed_size];
-
-        generate_random_byte_array(seed, seed_size);
+        const size_t seed_size = 2;// + random_uint32_t(MAX_SEED_SIZE-1);
 
+        randombytes(seed, seed_size);
+        printf("i = %d ss = %d, ss=%d\n",i, source_size,seed_size );fflush(stdout);
+        uint8_t *source = DAP_NEW_SIZE(uint8_t, source_size);
+        printf(".");fflush(stdout);
+        randombytes(source, source_size);
+        printf(".");fflush(stdout);
         dap_enc_key_t* key = dap_enc_key_new_generate(key_type, kex_data, kex_size, seed, seed_size, 0);
+        printf(".");fflush(stdout);
 
-
-        uint8_t source[source_size];
         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);
-
+        uint8_t *encrypt_result = DAP_NEW_SIZE(uint8_t, encrypt_buff_size);
+        printf(".");fflush(stdout);
         size_t encrypted_size = dap_enc_code(key, source,
                                              source_size,
                                              encrypt_result,
                                              encrypt_buff_size,
                                              data_type);
-
+        printf(".");fflush(stdout);
         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];
+        printf(".");fflush(stdout);
+        uint8_t *decode_result = DAP_NEW_SIZE(uint8_t, min_decode_buff_size);
+        printf(".");fflush(stdout);
         size_t out_size = dap_enc_decode(key,
                                          encrypt_result,
                                          encrypted_size,
                                          decode_result,
                                          min_decode_buff_size,
                                          data_type);
+        printf("source_size = %d, out_size = %d, min_decode_buff_size = %d, encrypt_buff_size = %d, encrypted_size = %d\n",
+               source_size, out_size,min_decode_buff_size, encrypt_buff_size, encrypted_size);
+        printf("%.2x%.2x\n", source[0], source[1]);
+        printf(".");fflush(stdout);
 
         dap_assert_PIF(source_size == out_size, "Check result decode size");
 
+        printf(".");fflush(stdout);
         dap_assert_PIF(memcmp(source, decode_result, source_size) == 0, "Check source and encode->decode data");
+        printf(".");fflush(stdout);
+#ifdef xxxxx
+
+
 
+#endif
+        DAP_DELETE(decode_result);
+        DAP_DELETE(encrypt_result);
+        DAP_DELETE(source);
+        printf(".");fflush(stdout);
         dap_enc_key_delete(key);
+        printf(".\n");fflush(stdout);
     }
 }
 
@@ -256,10 +274,10 @@ static void test_serealize_deserealize(dap_enc_key_type_t key_type)
 {
     const char *kex_data = "1234567890123456789012345678901234567890";//"123";
     size_t kex_size = strlen(kex_data);
-    const size_t seed_size = 1 + (rand() % 1000);
+    const size_t seed_size = 1 + random_uint32_t( 1000);
     uint8_t seed[seed_size];
 
-    generate_random_byte_array(seed, seed_size);
+    randombytes(seed, seed_size);
 
 //  for key_type==DAP_ENC_KEY_TYPE_OAES must be: key_size=[16|24|32] and kex_size>=key_size
     dap_enc_key_t* key = dap_enc_key_new_generate(key_type, kex_data, kex_size, seed, seed_size, 32);
@@ -331,9 +349,9 @@ static void test_serealize_deserealize_pub_priv(dap_enc_key_type_t key_type)
 {
     const char *kex_data = "1234567890123456789012345678901234567890"; //"123";
     size_t kex_size = strlen(kex_data);
-    const size_t seed_size = 1 + (rand() % 1000);
+    const size_t seed_size = 1 + random_uint32_t( 1000);
     uint8_t seed[seed_size];
-    generate_random_byte_array(seed, seed_size);
+    randombytes(seed, seed_size);
 
     // Generate key
     dap_enc_key_t* key = dap_enc_key_new_generate(key_type, kex_data, kex_size, seed, seed_size, 32);
@@ -364,11 +382,11 @@ static void test_serealize_deserealize_pub_priv(dap_enc_key_type_t key_type)
     dap_assert(key->pub_key_data_size == key2->pub_key_data_size, "Pub key data size");
     dap_pass_msg("Key serealize->deserealize");
 
-    size_t source_size = 10 + (rand() % 20);
+    size_t source_size = 10 + random_uint32_t( 20);
     uint8_t source_buf[source_size];
     size_t sig_buf_size = 0;
     uint8_t *sig_buf = NULL;
-    generate_random_byte_array(source_buf, source_size);
+    randombytes(source_buf, source_size);
 
     // encode by key
     int is_sig = 0, is_vefify = 0;
@@ -448,7 +466,7 @@ static void test_serealize_deserealize_pub_priv(dap_enc_key_type_t key_type)
 void dap_enc_tests_run() {
     dap_print_module_name("dap_enc");
     init_test_case();
-    test_encode_decode_raw(50);
+    test_encode_decode_raw(500);return;
     test_encode_decode_raw_b64(50);
     test_encode_decode_raw_b64_url_safe(50);
     test_key_transfer_msrln();
diff --git a/test/crypto/main.c b/test/crypto/main.c
index 3618e074142fe39d9a2d9b68aadc97c3a706bef0..6d833774cf5943dfae30e7434441d9f56e3ed04e 100755
--- a/test/crypto/main.c
+++ b/test/crypto/main.c
@@ -19,6 +19,9 @@ int main(void)
  // switch off debug info from library
     dap_log_level_set(L_CRITICAL);
 
+    dap_enc_tests_run();return 0;
+
+    dap_enc_ringct20_tests_run(100);
     test_encode_decode      (100, DAP_ENC_KEY_TYPE_BF_CBC,0);
     test_encode_decode_fast (100, DAP_ENC_KEY_TYPE_BF_CBC,0);
     test_encode_decode      (100, DAP_ENC_KEY_TYPE_BF_OFB,0);
@@ -30,7 +33,6 @@ int main(void)
     test_encode_decode      (100, DAP_ENC_KEY_TYPE_OAES,32);
     test_encode_decode_fast (100, DAP_ENC_KEY_TYPE_OAES,32);
 
-    dap_enc_ringct20_tests_run(100);
     dap_enc_picnic_tests_run();
     dap_enc_sig_bliss_tests_run();
     dap_enc_dilithium_tests_run();
@@ -38,7 +40,6 @@ int main(void)
     dap_enc_base64_tests_run();
     dap_enc_base58_tests_run();
     dap_enc_msrln_tests_run();
-    dap_enc_tests_run();
     dap_enc_defeo_tests_run();
     dap_enc_tesla_tests_run();
     dap_enc_multi_sign_tests_run();