diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index b2504b308f5ca1cb4366866980f5e31278335f15..7dd41df3e236ba91cc11d69605d17d510c9cecf8 100644 --- a/modules/common/dap_chain_datum_token.c +++ b/modules/common/dap_chain_datum_token.c @@ -428,21 +428,15 @@ byte_t *dap_chain_emission_get_tsd(dap_chain_datum_token_emission_t *a_emission, if (!a_emission || a_emission->hdr.type != DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH || a_emission->data.type_auth.tsd_total_size == 0) return NULL; - dap_tsd_t *l_tsd = (dap_tsd_t *)a_emission->tsd_n_signs; - do { - if (a_emission->data.type_auth.tsd_total_size < l_tsd->size) { - log_it(L_ERROR, "Corrupt data in emission: invalid TSD size %lu < %u", - a_emission->data.type_auth.tsd_total_size, l_tsd->size); - return NULL; - } - if (l_tsd->type == a_type) { - if (a_size) - *a_size = l_tsd->size; - return l_tsd->data; - } - l_tsd = (dap_tsd_t *)((byte_t *)l_tsd + dap_tsd_size(l_tsd)); - } while ((byte_t *)l_tsd < a_emission->tsd_n_signs + a_emission->data.type_auth.tsd_total_size); - return NULL; + dap_tsd_t *l_tsd = NULL; + if (!(l_tsd = dap_tsd_find(a_emission->tsd_n_signs, a_emission->data.type_auth.tsd_total_size, a_type))) { + log_it(L_ERROR, "TSD section of type %d not found", a_type); + return NULL; + } else { + if (a_size) + *a_size = l_tsd->size; + } + return l_tsd->data; } dap_chain_datum_token_emission_t *dap_chain_datum_emission_add_sign(dap_enc_key_t *a_sign_key, dap_chain_datum_token_emission_t *a_emission)