diff --git a/CMakeLists.txt b/CMakeLists.txt
index 14dbd3d25f75521c3e45612c8fa8e52cefdf3599..d3c8366257fe9a78025b1b7858499bbed3b09ab8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project(cellframe-sdk C)
 cmake_minimum_required(VERSION 2.8)
 
 set(CMAKE_C_STANDARD 11)
-set(CELLFRAME_SDK_NATIVE_VERSION "2.6-104")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.6-105")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 set(DAPSDK_MODULES "")
 
diff --git a/dap-sdk/crypto/include/dap_enc_dilithium.h b/dap-sdk/crypto/include/dap_enc_dilithium.h
index e9352f3c9f026c0ed0b78626ffd886c3b297c23c..96ade00a959575bccac4339ab73553f2e131d81b 100755
--- a/dap-sdk/crypto/include/dap_enc_dilithium.h
+++ b/dap-sdk/crypto/include/dap_enc_dilithium.h
@@ -34,6 +34,8 @@ static inline size_t dap_enc_dilithium_calc_signagture_size(dilithium_signature_
 
 uint8_t* dap_enc_dilithium_write_signature(dilithium_signature_t* a_sign, size_t *a_sign_out);
 dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a_buflen);
+dilithium_signature_t* dap_enc_dilithium_read_signature_old(uint8_t *a_buf, size_t a_buflen);
+
 uint8_t* dap_enc_dilithium_write_private_key(const dilithium_private_key_t* a_private_key, size_t *a_buflen_out);
 uint8_t* dap_enc_dilithium_write_public_key(const dilithium_public_key_t* a_public_key, size_t *a_buflen_out);
 dilithium_private_key_t* dap_enc_dilithium_read_private_key(const uint8_t *a_buf, size_t a_buflen);
diff --git a/dap-sdk/crypto/src/dap_enc_dilithium.c b/dap-sdk/crypto/src/dap_enc_dilithium.c
index 076b2b8cac4a6d83c0bbc8be6bb2029ab65d44ea..b8d9371bb8c3da326f937558326c83b3f2bcf2f6 100755
--- a/dap-sdk/crypto/src/dap_enc_dilithium.c
+++ b/dap-sdk/crypto/src/dap_enc_dilithium.c
@@ -157,10 +157,13 @@ dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a
         return NULL;
     }
 
+    uint64_t l_shift_mem = 0;
     dilithium_kind_t kind;
     uint64_t l_buflen_internal = 0;
     memcpy(&l_buflen_internal, a_buf, sizeof(uint64_t));
-    memcpy(&kind, a_buf + sizeof(uint64_t), sizeof(dilithium_kind_t));
+    l_shift_mem += sizeof(uint64_t);
+    memcpy(&kind, a_buf + l_shift_mem, sizeof(dilithium_kind_t));
+    l_shift_mem += sizeof (dilithium_kind_t);
     if(l_buflen_internal != a_buflen)
         return NULL ;
     dilithium_param_t p;
@@ -169,22 +172,30 @@ dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a
 
     dilithium_signature_t* l_sign = DAP_NEW(dilithium_signature_t);
     l_sign->kind = kind;
-    uint64_t l_shift_mem = sizeof(uint64_t) + sizeof(dilithium_kind_t);
     memcpy(&l_sign->sig_len, a_buf + l_shift_mem, sizeof(uint64_t));
+    l_shift_mem += sizeof(uint64_t);
+
+    if( l_sign->sig_len> (UINT64_MAX - l_shift_mem ) ){
+            log_it(L_ERROR,"::read_signature() Buflen inside signature %zd is too big ", l_sign->sig_len);
+            return NULL;
+    }
+
+    // Dirty hack for old 32 bit version serializations
+    if( l_sign->sig_len + l_shift_mem + 8 == a_buflen  ){
+            return dap_enc_dilithium_read_signature_old(a_buf,a_buflen);
+    }
 
-    if(   ( l_sign->sig_len> (UINT64_MAX - sizeof(uint64_t) + sizeof(dilithium_kind_t) +sizeof (uint64_t))) ||
-          ( a_buflen < (sizeof(uint64_t) + sizeof(dilithium_kind_t) +sizeof (uint64_t) + l_sign->sig_len ))
-       ){
+    if(  a_buflen < (l_shift_mem + l_sign->sig_len) ){
         log_it(L_ERROR,"::read_signature() Buflen %zd is smaller than all fields together(%zd)", a_buflen,
-               sizeof(uint64_t) + sizeof(dilithium_kind_t) + l_sign->sig_len  );
+               l_shift_mem + l_sign->sig_len  );
         return NULL;
     }
+    l_shift_mem+= l_sign->sig_len;
 
-
-    l_shift_mem += sizeof(uint64_t);
     l_sign->sig_data = DAP_NEW_SIZE(unsigned char, l_sign->sig_len);
     if (!l_sign->sig_data)
         log_it(L_ERROR,"::read_signature() Can't allocate sig_data %zd size", l_sign->sig_len);
+
     memcpy(l_sign->sig_data, a_buf + l_shift_mem, l_sign->sig_len);
     l_shift_mem += l_sign->sig_len;
     return l_sign;
@@ -263,6 +274,11 @@ dilithium_private_key_t* dap_enc_dilithium_read_private_key(const uint8_t *a_buf
         return NULL;
     }
 
+    // Dirty hack to recognize old variant
+    if (a_buflen +8 == (sizeof(uint64_t) + sizeof(dilithium_kind_t))){
+        return dap_enc_dilithium_read_private_key_old(a_buf,a_buflen);
+    }
+
     if(a_buflen < (sizeof(uint64_t) + sizeof(dilithium_kind_t))){
         log_it(L_ERROR,"::read_private_key() Buflen %zd is smaller than first two fields(%zd)", a_buflen,sizeof(uint64_t) + sizeof(dilithium_kind_t)  );
         return NULL;
@@ -331,6 +347,7 @@ dilithium_public_key_t* dap_enc_dilithium_read_public_key(const uint8_t *a_buf,
         log_it(L_ERROR,"::read_public_key() Buflen %zd is smaller than first two fields(%zd)", a_buflen,sizeof(uint64_t) + sizeof(dilithium_kind_t)  );
         return NULL;
     }
+
     dilithium_kind_t kind = 0;
     uint64_t l_buflen = 0;
     memcpy(&l_buflen, a_buf, sizeof(uint64_t));
@@ -345,6 +362,11 @@ dilithium_public_key_t* dap_enc_dilithium_read_public_key(const uint8_t *a_buf,
         return NULL;
     }
 
+    // Dirty hack to recognize old variant
+    if (a_buflen +8 == (sizeof(uint64_t) + sizeof(dilithium_kind_t) + p.CRYPTO_PUBLICKEYBYTES )){
+        return dap_enc_dilithium_read_public_key_old(a_buf,a_buflen);
+    }
+
     if(a_buflen < (sizeof(uint64_t) + sizeof(dilithium_kind_t) + p.CRYPTO_PUBLICKEYBYTES ) ){
         log_it(L_ERROR,"::read_public_key() Buflen %zd is smaller than all fields together(%zd)", a_buflen,
                sizeof(uint64_t) + sizeof(dilithium_kind_t) + p.CRYPTO_PUBLICKEYBYTES  );