Browse Source

chg: don't assume we're only working with base field elements, consider extension field elements too

See https://github.com/0xPolygonMiden/crypto/pull/29#discussion_r1045108928 where it was suggested.

Signed-off-by: Anjan Roy <hello@itzmeanjan.in>
al-gkr-basic-workflow
Anjan Roy 2 years ago
parent
commit
b4f9d60981
No known key found for this signature in database GPG Key ID: 10EB1439BE2E1142
1 changed files with 8 additions and 13 deletions
  1. +8
    -13
      src/hash/blake/mod.rs

+ 8
- 13
src/hash/blake/mod.rs

@ -1,11 +1,12 @@
use super::{Digest, ElementHasher, Felt, FieldElement, Hasher, StarkField};
use crate::utils::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable};
use crate::utils::{
uninit_vector, ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable,
};
use core::{
mem::{size_of, transmute, transmute_copy},
ops::Deref,
slice::from_raw_parts,
};
use winter_utils::collections::Vec;
#[cfg(test)]
mod tests;
@ -277,21 +278,15 @@ where
let digest = if Felt::IS_CANONICAL {
blake3::hash(E::elements_as_bytes(elements))
} else {
let blen = elements.len() << 3;
let mut bytes = Vec::with_capacity(blen);
#[allow(clippy::uninit_vec)]
unsafe {
bytes.set_len(blen)
}
let base_elements = E::as_base_elements(elements);
let blen = base_elements.len() << 3;
for (idx, element) in E::as_base_elements(elements).iter().enumerate() {
let mut bytes = unsafe { uninit_vector(blen) };
for (idx, element) in base_elements.iter().enumerate() {
bytes[idx * 8..(idx + 1) * 8].copy_from_slice(&element.as_int().to_le_bytes());
}
let mut hasher = blake3::Hasher::new();
hasher.update(&bytes);
hasher.finalize()
blake3::hash(&bytes)
};
*shrink_bytes(&digest.into())
}

Loading…
Cancel
Save