Browse Source

Merge pull request #29 from 0xPolygonMiden/itzmeanjan-blake3-improv

Optimize BLAKE3 Sequential Hashing
al-gkr-basic-workflow
Anjan Roy 2 years ago
committed by GitHub
parent
commit
1332299a82
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 5 deletions
  1. +11
    -5
      src/hash/blake/mod.rs

+ 11
- 5
src/hash/blake/mod.rs

@ -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,11 +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 {
let mut hasher = blake3::Hasher::new();
for element in E::as_base_elements(elements) {
hasher.update(&element.as_int().to_le_bytes());
let base_elements = E::as_base_elements(elements);
let blen = base_elements.len() << 3;
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());
} }
hasher.finalize()
blake3::hash(&bytes)
}; };
*shrink_bytes(&digest.into()) *shrink_bytes(&digest.into())
} }

Loading…
Cancel
Save