From 5dfff67963b5d076a605c51b70cfb0adbe8206e8 Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Tue, 12 Jan 2021 18:04:06 +0700
Subject: [PATCH] [*] One more crypto fix

---
 CMakeLists.txt                         |  2 +-
 dap-sdk/crypto/src/dap_enc_dilithium.c | 12 ++++++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 00389be856..50ff36c0cd 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-106")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.6-107")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 set(DAPSDK_MODULES "")
 
diff --git a/dap-sdk/crypto/src/dap_enc_dilithium.c b/dap-sdk/crypto/src/dap_enc_dilithium.c
index cf8ce98887..43e39cba29 100755
--- a/dap-sdk/crypto/src/dap_enc_dilithium.c
+++ b/dap-sdk/crypto/src/dap_enc_dilithium.c
@@ -274,6 +274,7 @@ uint8_t* dap_enc_dilithium_write_public_key(const dilithium_public_key_t* a_publ
     uint64_t l_buflen = sizeof(uint64_t) + sizeof(dilithium_kind_t) + p.CRYPTO_PUBLICKEYBYTES;
     uint8_t *l_buf = DAP_NEW_Z_SIZE(byte_t, l_buflen);
     memcpy(l_buf, &l_buflen, sizeof(uint64_t));
+
     memcpy(l_buf + sizeof(uint64_t), &a_public_key->kind, sizeof(dilithium_kind_t));
     memcpy(l_buf + sizeof(uint64_t) + sizeof(dilithium_kind_t), a_public_key->data, p.CRYPTO_PUBLICKEYBYTES);
     if(a_buflen_out)
@@ -368,9 +369,12 @@ dilithium_public_key_t* dap_enc_dilithium_read_public_key(const uint8_t *a_buf,
     memcpy(&kind, a_buf + sizeof(uint64_t), sizeof(dilithium_kind_t));
 
     if(l_buflen !=  (uint64_t) a_buflen){
-        log_it(L_ERROR,"::read_public_key() Buflen field inside buffer is %"DAP_UINT64_FORMAT_u" when expected to be %" DAP_UINT64_FORMAT_u,
-               l_buflen,(uint64_t) a_buflen);
-        return NULL;
+        if (l_buflen <<32 >>32 != (uint64_t) a_buflen  ){
+            log_it(L_ERROR,"::read_public_key() Buflen field inside buffer is %"DAP_UINT64_FORMAT_u" when expected to be %" DAP_UINT64_FORMAT_u,
+                   l_buflen,(uint64_t) a_buflen);
+            return NULL;
+        }else
+            l_buflen = l_buflen<<32 >>32;
     }
     dilithium_param_t p;
     if(!dilithium_params_init(&p, kind)){
@@ -443,7 +447,7 @@ dilithium_public_key_t* dap_enc_dilithium_read_public_key_old(const uint8_t *a_b
     }
 
     dilithium_public_key_t* l_public_key = DAP_NEW_Z(dilithium_public_key_t);
-    l_public_key->kind = kind;
+    l_public_key->kind = kind ;
 
     l_public_key->data = DAP_NEW_Z_SIZE(unsigned char, p.CRYPTO_PUBLICKEYBYTES);
     memcpy(l_public_key->data, a_buf + sizeof(uint32_t) + sizeof(dilithium_kind_t), p.CRYPTO_PUBLICKEYBYTES);
-- 
GitLab