Merge pull request #28 from 0xPolygonMiden/bobbin-blake3-improv
Improve BLAKE3 sequential hashing performance
This commit is contained in:
commit
4ed0611463
1 changed files with 12 additions and 8 deletions
|
@ -1,5 +1,7 @@
|
||||||
use super::{Digest, ElementHasher, Felt, FieldElement, Hasher, StarkField};
|
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::{
|
use core::{
|
||||||
mem::{size_of, transmute, transmute_copy},
|
mem::{size_of, transmute, transmute_copy},
|
||||||
ops::Deref,
|
ops::Deref,
|
||||||
|
@ -276,13 +278,15 @@ where
|
||||||
let digest = if Felt::IS_CANONICAL {
|
let digest = if Felt::IS_CANONICAL {
|
||||||
blake3::hash(E::elements_as_bytes(elements))
|
blake3::hash(E::elements_as_bytes(elements))
|
||||||
} else {
|
} else {
|
||||||
E::as_base_elements(elements)
|
let base_elements = E::as_base_elements(elements);
|
||||||
.iter()
|
let blen = base_elements.len() << 3;
|
||||||
.fold(blake3::Hasher::new(), |mut hasher, felt| {
|
|
||||||
hasher.update(&felt.as_int().to_le_bytes());
|
let mut bytes = unsafe { uninit_vector(blen) };
|
||||||
hasher
|
for (idx, element) in base_elements.iter().enumerate() {
|
||||||
})
|
bytes[idx * 8..(idx + 1) * 8].copy_from_slice(&element.as_int().to_le_bytes());
|
||||||
.finalize()
|
}
|
||||||
|
|
||||||
|
blake3::hash(&bytes)
|
||||||
};
|
};
|
||||||
*shrink_bytes(&digest.into())
|
*shrink_bytes(&digest.into())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue