From 982b758607838f85a8404b9cfe2a87d7458beb74 Mon Sep 17 00:00:00 2001
From: Dmitry Gerasimov <dmitriy.gerasimov@demlabs.net>
Date: Wed, 31 Aug 2022 16:05:48 +0700
Subject: [PATCH] [!] Fixed dap_sign_verify_size()

---
 dap-sdk/crypto/include/dap_sign.h                 |  2 +-
 dap-sdk/crypto/src/dap_sign.c                     | 13 ++++++++-----
 modules/chain/CMakeLists.txt                      |  2 +-
 modules/service/stake_pos_delegate/CMakeLists.txt |  2 +-
 modules/service/xchange/CMakeLists.txt            |  2 +-
 5 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/dap-sdk/crypto/include/dap_sign.h b/dap-sdk/crypto/include/dap_sign.h
index 958722d2db..4152f63e66 100755
--- a/dap-sdk/crypto/include/dap_sign.h
+++ b/dap-sdk/crypto/include/dap_sign.h
@@ -137,7 +137,7 @@ uint8_t* dap_sign_get_pkey(dap_sign_t *a_sign, size_t *a_pub_key_out);
 bool dap_sign_get_pkey_hash(dap_sign_t *a_sign, dap_chain_hash_fast_t * a_sign_hash);
 bool dap_sign_match_pkey_signs(dap_sign_t *l_sign1, dap_sign_t *l_sign2);
 
-bool dap_sign_verify_size(dap_sign_t *a_sign, size_t a_max_key_size);
+bool dap_sign_verify_size(dap_sign_t *a_sign, size_t a_max_sign_size);
 dap_enc_key_t *dap_sign_to_enc_key(dap_sign_t * a_chain_sign);
 const char * dap_sign_type_to_str(dap_sign_type_t a_chain_sign_type);
 dap_sign_type_t dap_sign_type_from_str(const char * a_type_str);
diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c
index dcf7bdbebd..5a28e83eb5 100755
--- a/dap-sdk/crypto/src/dap_sign.c
+++ b/dap-sdk/crypto/src/dap_sign.c
@@ -390,18 +390,21 @@ bool dap_sign_match_pkey_signs(dap_sign_t *l_sign1, dap_sign_t *l_sign2)
  * @brief verify, if a_sign->header.sign_pkey_size and a_sign->header.sign_size bigger, then a_max_key_size
  * 
  * @param a_sign signed data object 
- * @param a_max_key_size max size of key
+ * @param a_max_sign_size max size of signature
  * @return true 
  * @return false 
  */
-bool dap_sign_verify_size(dap_sign_t *a_sign, size_t a_max_key_size)
+bool dap_sign_verify_size(dap_sign_t *a_sign, size_t a_max_sign_size)
 {
-    if (a_sign->header.type.type == SIG_TYPE_NULL)
+    if (a_sign->header.sign_size == 0 || a_sign->header.sign_pkey_size == 0 || a_sign->header.type.type == SIG_TYPE_NULL )
         return false;
-    if (a_sign->header.sign_pkey_size > a_max_key_size)
+
+    if (a_sign->header.sign_pkey_size > a_max_sign_size || a_sign->header.sign_size > a_max_sign_size)
         return false;
-    if (a_sign->header.sign_size == 0 || a_sign->header.sign_size > a_max_key_size)
+
+    if (a_sign->header.sign_pkey_size + a_sign->header.sign_size + sizeof(*a_sign) > a_max_sign_size )
         return false;
+
     return true;
 }
 
diff --git a/modules/chain/CMakeLists.txt b/modules/chain/CMakeLists.txt
index 14bde14c8e..edf0123b07 100644
--- a/modules/chain/CMakeLists.txt
+++ b/modules/chain/CMakeLists.txt
@@ -10,7 +10,7 @@ add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_SRCS} ${DAP_CHAIN_HEADERS})
 #find_package(PkgConfig REQUIRED)
 #pkg_search_module(GLIB REQUIRED glib-2.0)
 
-target_link_libraries(${PROJECT_NAME} dap_chain_net_srv_xchange dap_chain_net_srv_stake_pos_delegate dap_chain_net_srv_stake_lock ${GLIB_LDFLAGS})
+target_link_libraries(${PROJECT_NAME} dap_chain_net_srv dap_chain_net_srv_xchange dap_chain_net_srv_stake_pos_delegate dap_chain_net_srv_stake_lock ${GLIB_LDFLAGS})
 target_include_directories(${PROJECT_NAME} INTERFACE . include/ ${GLIB_INCLUDE_DIRS})
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty/uthash/src)
diff --git a/modules/service/stake_pos_delegate/CMakeLists.txt b/modules/service/stake_pos_delegate/CMakeLists.txt
index 8413e50cde..6cf03e2d8c 100644
--- a/modules/service/stake_pos_delegate/CMakeLists.txt
+++ b/modules/service/stake_pos_delegate/CMakeLists.txt
@@ -9,4 +9,4 @@ add_library(${PROJECT_NAME} STATIC ${DAP_SRV_STAKE_POS_DELEGATE_SRCS} ${DAP_SRV_
 
 target_include_directories(${PROJECT_NAME} INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_crypto dap_chain_net dap_chain_net_srv dap_chain_cs_dag_poa dap_chain_cs_block_ton dap_chain_cs_block_poa)
+target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_net dap_chain_net_srv dap_chain_cs_dag_poa dap_chain_cs_block_ton dap_chain_cs_block_poa)
diff --git a/modules/service/xchange/CMakeLists.txt b/modules/service/xchange/CMakeLists.txt
index b3ee5a1c98..e8184d32bb 100644
--- a/modules/service/xchange/CMakeLists.txt
+++ b/modules/service/xchange/CMakeLists.txt
@@ -9,4 +9,4 @@ add_library(${PROJECT_NAME} STATIC ${DAP_SRV_XCHANGE_SRCS} ${DAP_SRV_XCHANGE_HEA
 
 target_include_directories(${PROJECT_NAME} INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_crypto dap_chain_net dap_chain_net_srv)
+target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_net dap_chain_net_srv)
-- 
GitLab