diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index c2797b984a057de4330f51bb52b46ba8d0138e93..9ef1ea84184059fa8fba77862257c22559faa404 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 32e2f42eb5787b38fb40bb1ebb78bbbdd80ee4c5..d130cec690b5597b0cd196cf8b8974d980de3709 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 30e9e292fa1acf50b62c867a96d97b9275ef2a7a..28e2cdd0bfde7d8ccd5112349a27bf72c1c213f9 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");