arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
chg: first convert all elements to little endian bytes and then consume them in a single call to blake3 hasher

Signed-off-by: Anjan Roy <hello@itzmeanjan.in>
Anjan Roy hello@itzmeanjan.in
Sat, 10 Dec 2022 11:48:19 +0400
commit

aa4e31369017c6093b171f4302c6908751b43575

parent

9782992662c1c01e89d0c55de220a1235877abdc

1 files changed, 8 insertions(+), 3 deletions(-)

jump to
M src/hash/blake/mod.rs → src/hash/blake/mod.rs

@@ -276,10 +276,15 @@ // this is a compile-time branch so it is for free

let digest = if Felt::IS_CANONICAL { blake3::hash(E::elements_as_bytes(elements)) } else { + let blen = elements.len() << 3; + let mut bytes = vec![0u8; blen]; + + for (idx, element) in E::as_base_elements(elements).iter().enumerate() { + bytes[idx * 8..(idx + 1) * 8].copy_from_slice(&element.as_int().to_le_bytes()); + } + let mut hasher = blake3::Hasher::new(); - for element in E::as_base_elements(elements) { - hasher.update(&element.as_int().to_le_bytes()); - } + hasher.update(&bytes); hasher.finalize() }; *shrink_bytes(&digest.into())