Updated the ReferenceBytes codec to be spec‑true: it now treats the digest as “remaining bytes” and only enforces digest length when the registry provides a non‑zero expected length. This keeps strictness where hashing/verification happens while allowing unknown hash IDs for pure transport/framing. Changes are in asl1_core_codec.c.
This commit is contained in:
parent
9754582ae7
commit
ab36856833
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue