diff --git a/modules/common/dap_chain_datum.c b/modules/common/dap_chain_datum.c index 16132d7a8aac340c8ae8a3cfcf1a76a08703f857..91c45378011eb204ad35bc1eb109638cdabdbd1d 100644 --- a/modules/common/dap_chain_datum.c +++ b/modules/common/dap_chain_datum.c @@ -677,10 +677,8 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c dap_string_append_printf(a_str_out, " Skip incorrect or illformed DATUM"); break; } - - - //dap_chain_datum_token_certs_dump(a_str_out, l_emission->tsd_n_signs + l_emission->data.type_auth.tsd_total_size, - // l_emission->data.type_auth.size - l_emission->data.type_auth.tsd_total_size, a_hash_out_type); + dap_chain_datum_token_certs_dump(a_str_out, l_emission->tsd_n_signs + l_emission->data.type_auth.tsd_total_size, + l_emission->data.type_auth.size - l_emission->data.type_auth.tsd_total_size, a_hash_out_type); break; case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_ALGO: dap_string_append_printf(a_str_out, " codename: %s\n", l_emission->data.type_algo.codename); diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index f41d9ee01c7284bfa3be820d195de7fd5dd64491..8ec5775a36427002c70546ae00496239a9140e65 100644 --- a/modules/common/dap_chain_datum_token.c +++ b/modules/common/dap_chain_datum_token.c @@ -50,6 +50,12 @@ const char *c_dap_chain_datum_token_flag_str[] = { [DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_ALLOWED] = "ALL_RECEIVER_ALLOWED", [DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_FROZEN] = "ALL_RECEIVER_FROZEN", [DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_UNFROZEN] = "ALL_RECEIVER_UNFROZEN", + [DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_ALL] = "STATIC_ALL", + [DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_FLAGS] = "STATIC_FLAGS", + [DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_ALL] = "STATIC_PERMISSIONS_ALL", + [DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_DATUM_TYPE] = "STATIC_PERMISSIONS_DATUM_TYPE", + [DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_TX_SENDER] = "TATIC_PERMISSIONS_TX_SENDER", + [DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_TX_RECEIVER] = "STATIC_PERMISSIONS_TX_RECEIVER", }; /** @@ -176,13 +182,13 @@ void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags return; } bool is_first = true; - for ( uint16_t i = 0; i <= DAP_CHAIN_DATUM_TOKEN_FLAG_MAX; i++){ + for ( uint16_t i = 0; BIT(i) <= DAP_CHAIN_DATUM_TOKEN_FLAG_MAX; i++){ if( a_flags & (1 << i) ){ if(is_first) is_first = false; else dap_string_append_printf(a_str_out,", "); - dap_string_append_printf(a_str_out,"%s", c_dap_chain_datum_token_flag_str[i]); + dap_string_append_printf(a_str_out,"%s", c_dap_chain_datum_token_flag_str[BIT(i)]); } if(i == DAP_CHAIN_DATUM_TOKEN_FLAG_MAX) dap_string_append_printf(a_str_out, "\n"); @@ -215,6 +221,12 @@ void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_ continue; } + if (l_sign->header.sign_size > a_certs_size) + { + dap_string_append_printf(a_str_out, "<CORRUPTED - signature size is greater than a_certs_size>\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"); @@ -429,9 +441,9 @@ dap_chain_datum_token_emission_t *dap_chain_datum_emission_add_sign(dap_enc_key_ if (!l_new_sign) return NULL; size_t l_emission_size = dap_chain_datum_emission_get_size((uint8_t *)a_emission); - dap_chain_datum_token_emission_t *l_ret = DAP_REALLOC(a_emission, l_emission_size + dap_sign_get_size(l_new_sign)); + dap_chain_datum_token_emission_t *l_ret = DAP_REALLOC(a_emission, l_emission_size + l_old_signs_size + dap_sign_get_size(l_new_sign)); size_t l_sign_size = dap_sign_get_size(l_new_sign); - memcpy(l_ret->tsd_n_signs + l_ret->data.type_auth.size, l_new_sign, l_sign_size); + memcpy(l_ret->tsd_n_signs + (size_t)l_ret->data.type_auth.tsd_total_size, l_new_sign, l_sign_size); DAP_DELETE(l_new_sign); l_old_signs_size += l_sign_size; l_signs_count++;