diff --git a/src/near_core/enc/asl1_core_codec.c b/src/near_core/enc/asl1_core_codec.c index 82fd7e5..8aac83a 100644 --- a/src/near_core/enc/asl1_core_codec.c +++ b/src/near_core/enc/asl1_core_codec.c @@ -179,6 +179,7 @@ bool amduat_enc_asl1_core_encode_reference_v1( amduat_reference_t reference, amduat_octets_t *out_bytes) { const amduat_hash_asl1_desc_t *hash_desc; + size_t digest_len; size_t total_len; uint8_t *buffer; @@ -192,18 +193,17 @@ bool amduat_enc_asl1_core_encode_reference_v1( return false; } + digest_len = reference.digest.len; hash_desc = amduat_hash_asl1_desc_lookup(reference.hash_id); - if (hash_desc == NULL || hash_desc->digest_len == 0) { + if (hash_desc != NULL && hash_desc->digest_len != 0 && + digest_len != hash_desc->digest_len) { return false; } - if (reference.digest.len != hash_desc->digest_len) { - return false; - } - if (hash_desc->digest_len > SIZE_MAX - AMDUAT_ENC_ASL1_CORE_REF_HASH_LEN) { + if (digest_len > SIZE_MAX - AMDUAT_ENC_ASL1_CORE_REF_HASH_LEN) { return false; } - total_len = AMDUAT_ENC_ASL1_CORE_REF_HASH_LEN + hash_desc->digest_len; + total_len = AMDUAT_ENC_ASL1_CORE_REF_HASH_LEN + digest_len; buffer = (uint8_t *)malloc(total_len); if (buffer == NULL) { return false; @@ -212,7 +212,7 @@ bool amduat_enc_asl1_core_encode_reference_v1( amduat_enc_asl1_core_store_u16_be(buffer, reference.hash_id); memcpy(buffer + AMDUAT_ENC_ASL1_CORE_REF_HASH_LEN, reference.digest.data, - hash_desc->digest_len); + digest_len); out_bytes->data = buffer; out_bytes->len = total_len; @@ -238,12 +238,10 @@ bool amduat_enc_asl1_core_decode_reference_v1( } hash_id = (amduat_hash_id_t)amduat_enc_asl1_core_load_u16_be(bytes.data); + digest_len = bytes.len - AMDUAT_ENC_ASL1_CORE_REF_HASH_LEN; hash_desc = amduat_hash_asl1_desc_lookup(hash_id); - if (hash_desc == NULL || hash_desc->digest_len == 0) { - return false; - } - digest_len = hash_desc->digest_len; - if (bytes.len - AMDUAT_ENC_ASL1_CORE_REF_HASH_LEN != digest_len) { + if (hash_desc != NULL && hash_desc->digest_len != 0 && + digest_len != hash_desc->digest_len) { return false; }