From 255e29079eeb3ea31ff34a1b05ea112c057647d7 Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Fri, 14 Jul 2023 10:54:09 +0300
Subject: [PATCH] [*] Decree signing little fix

---
 modules/net/dap_chain_net_decree.c | 34 ++++++++++--------------------
 1 file changed, 11 insertions(+), 23 deletions(-)

diff --git a/modules/net/dap_chain_net_decree.c b/modules/net/dap_chain_net_decree.c
index 5ffef5faec..0774f586de 100644
--- a/modules/net/dap_chain_net_decree.c
+++ b/modules/net/dap_chain_net_decree.c
@@ -194,20 +194,18 @@ int dap_chain_net_decree_verify(dap_chain_datum_decree_t *a_decree, dap_chain_ne
     l_decree->header.signs_size = 0;
     size_t l_verify_data_size = l_decree->header.data_size + sizeof(dap_chain_datum_decree_t);
 
-    for(size_t i = 0; i < l_num_of_unique_signs; i++)
-    {
+    for (size_t i = 0; i < l_num_of_unique_signs; i++) {
         size_t l_sign_max_size = dap_sign_get_size(l_unique_signs[i]);
-        if (s_verify_pkey(l_unique_signs[i], a_net))
-        {
+        if (s_verify_pkey(l_unique_signs[i], a_net)) {
             // 3. verify sign
             if(!dap_sign_verify_all(l_unique_signs[i], l_sign_max_size, l_decree, l_verify_data_size))
-            {
                 l_signs_verify_counter++;
-            }
         } else {
-            dap_hash_fast_t l_sign_hash = {0};
-            dap_hash_fast(l_unique_signs[i], l_sign_max_size, &l_sign_hash);
-            char *l_sign_hash_str = dap_hash_fast_to_str_new(&l_sign_hash);
+            dap_hash_fast_t l_sign_pkey_hash = {0};
+            size_t l_pkey_size = 0;
+            uint8_t *l_pkey = dap_sign_get_pkey(l_unique_signs[i], &l_pkey_size);
+            dap_hash_fast(l_pkey, l_pkey_size, &l_sign_pkey_hash);
+            char *l_sign_hash_str = dap_hash_fast_to_str_new(&l_sign_pkey_hash);
             log_it(L_WARNING, "Signature [%zu] %s failed public key verification.", i, l_sign_hash_str);
             DAP_DELETE(l_sign_hash_str);
         }
@@ -345,20 +343,10 @@ dap_chain_datum_decree_t *dap_chain_net_decree_get_by_hash(dap_hash_fast_t *a_ha
 // Private functions
 static bool s_verify_pkey (dap_sign_t *a_sign, dap_chain_net_t *a_net)
 {
-    bool ret_val = false;
-    dap_list_t *b_item = a_net->pub.decree->pkeys;
-    while (b_item && !ret_val)
-    {
-        dap_pkey_t *l_pkey = (dap_pkey_t*)(b_item->data);
-
-        if (!memcmp(a_sign->pkey_n_sign, l_pkey->pkey, a_sign->header.sign_pkey_size))
-        {
-            ret_val = true;
-        }
-
-        b_item = b_item->next;
-    }
-    return ret_val;
+    for (dap_list_t *it = a_net->pub.decree->pkeys; it; it = it->next)
+        if (dap_pkey_compare_with_sign(it->data, a_sign))
+            return true;
+    return false;
 }
 
 static int s_common_decree_handler(dap_chain_datum_decree_t * a_decree, dap_chain_net_t *a_net, dap_chain_t *a_chain, bool a_apply)
-- 
GitLab