From e64af2e45f70b3c27f06f095b5331ea56db02902 Mon Sep 17 00:00:00 2001
From: "aleksei.voronin" <aleksei.voronin@demlabs.net>
Date: Sun, 10 May 2020 10:52:59 +0300
Subject: [PATCH] [*] token declaration certs dump

---
 modules/common/dap_chain_datum_token.c        | 38 +++++++++++++++++++
 .../common/include/dap_chain_datum_token.h    |  1 +
 modules/net/dap_chain_net.c                   |  3 ++
 3 files changed, 42 insertions(+)

diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index c2797b984a..9ef1ea8418 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -143,3 +143,41 @@ void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags
             dap_string_append_printf(a_str_out, "\n");
     }
 }
+
+
+/**
+ * @brief dap_chain_datum_token_certs_dump
+ * @param a_str_out
+ * @param a_data_n_tsd
+ * @param a_certs_size
+ */
+void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_n_tsd, size_t a_certs_size) {
+    dap_string_append_printf(a_str_out, "signatures: ");
+    if (!a_certs_size) {
+        dap_string_append_printf(a_str_out, "<NONE>\n");
+        return;
+    }
+
+    dap_string_append_printf(a_str_out, "\n");
+
+    size_t l_offset = 0;
+    for (int i = 1; l_offset < (a_certs_size); i++) {
+        dap_sign_t *l_sign = (dap_sign_t *) (a_data_n_tsd + l_offset);
+        l_offset += dap_sign_get_size(l_sign);
+        if (l_sign->header.sign_size == 0) {
+            dap_string_append_printf(a_str_out, "<CORRUPTED - 0 size signature>\n");
+            continue;
+        }
+
+        dap_chain_hash_fast_t l_pkey_hash = {0};
+        if (dap_sign_get_pkey_hash(l_sign, &l_pkey_hash) == false) {
+            dap_string_append_printf(a_str_out, "<CORRUPTED - can't calc hash>\n");
+            continue;
+        }
+
+        char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_pkey_hash);
+
+        dap_string_append_printf(a_str_out, "%d) %s, %s, %lu bytes\n", i, l_hash_str,
+                                 dap_sign_type_to_str(l_sign->header.type), l_sign->header.sign_size);
+    }
+}
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index 32e2f42eb5..d130cec690 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -237,6 +237,7 @@ extern const char *c_dap_chain_datum_token_emission_type_str[];
 dap_chain_datum_token_tsd_t * dap_chain_datum_token_tsd_create(uint16_t a_type, const void * a_data, size_t a_data_size);
 dap_chain_datum_token_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token,  size_t a_token_size);
 void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags);
+void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_n_tsd, size_t a_certs_size);
 
 #define dap_chain_datum_token_tsd_create_scalar(type,value) dap_chain_datum_token_tsd_create (type, &value, sizeof(value) )
 #define dap_chain_datum_token_tsd_get_scalar(a,typeconv)  *((typeconv*) a->data)
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 30e9e292fa..28e2cdd0bf 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2332,6 +2332,9 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
 
                         }
                     }
+
+                    int l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_private_decl.tsd_total_size;
+                    dap_chain_datum_token_certs_dump(a_str_out, l_token->data_n_tsd, l_certs_field_size);
                 }break;
                 case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC:{
                     dap_string_append_printf(a_str_out,"type: PUBLIC\n");
-- 
GitLab