diff --git a/hash/jolt/bench/guest/src/lib.rs b/hash/jolt/bench/guest/src/lib.rs index 3398b90..f3f979a 100644 --- a/hash/jolt/bench/guest/src/lib.rs +++ b/hash/jolt/bench/guest/src/lib.rs @@ -4,7 +4,7 @@ use sha2::{Sha256, Digest}; use sha3::Keccak256; use blake3::hash; -use blake2::Blake2s256; +use blake2::Blake2b512; use risc0_zkp::core::hash::poseidon2::Poseidon2HashSuite; use risc0_zkp::field::baby_bear::BabyBearElem; @@ -39,25 +39,27 @@ fn blake3(input: &[u8]) -> [u8; 32] { // blake2 #[jolt::provable] -fn blake2(input: &[u8]) -> [u8; 32] { - let mut hasher = Blake2s256::new(); +fn blake2(input: &[u8]) -> Vec { + let mut hasher = Blake2b512::new(); hasher.update(input); let result = hasher.finalize(); - Into::<[u8; 32]>::into(result) + + result.to_vec() } // poseidon2 over babybear #[jolt::provable(stack_size = 10000, memory_size = 100000000)] -//TODO: input should be made u32 -fn poseidon2_babybear(input: &[u8]) -> String { +fn poseidon2_babybear(input: Vec) -> Vec { let mut hash_data: Vec = Vec::new(); for i in 0..input.len() { let a_uncompressed = BabyBearElem::from(input[i] as u32); hash_data.push(a_uncompressed); } - let result = Poseidon2HashSuite::new_suite().hashfn.hash_elem_slice(hash_data.as_slice()); - result.to_string() + let mut binding = Poseidon2HashSuite::new_suite().hashfn.hash_elem_slice(hash_data.as_slice()); + let result = binding.as_mut_words().to_vec(); + + result } \ No newline at end of file diff --git a/hash/jolt/bench/src/benches/poseidon2_babybear.rs b/hash/jolt/bench/src/benches/poseidon2_babybear.rs index bc5ece9..29eb992 100644 --- a/hash/jolt/bench/src/benches/poseidon2_babybear.rs +++ b/hash/jolt/bench/src/benches/poseidon2_babybear.rs @@ -8,12 +8,12 @@ use alloc::vec::Vec; pub fn poseidon2_babybear_bench(mt_depth: usize) { let t = (1 << mt_depth) * 8; - let mut input: Vec = Vec::new(); + let mut input: Vec = Vec::new(); for _ in 0..t { let mut rng = rand::thread_rng(); - let random_u32: u8 = rng.gen(); + let random_u32: u32 = rng.gen(); input.push(random_u32); } @@ -29,7 +29,7 @@ pub fn poseidon2_babybear_bench(mt_depth: usize) { let (output, proof, proving_time) = { let start = Instant::now(); - let (output, proof) = prove_poseidon2_babybear(input.as_slice()); + let (output, proof) = prove_poseidon2_babybear(input); let elapsed = start.elapsed(); (output, proof, elapsed) @@ -47,8 +47,13 @@ pub fn poseidon2_babybear_bench(mt_depth: usize) { (is_valid, elapsed) }; + let mut output_bytes: Vec = Vec::new(); + for i in 0..8 { + output_bytes.extend_from_slice(output[i].to_be_bytes().as_slice()); + } + assert!(is_valid); - println!("output: {:?}", hex::encode(output)); + println!("output: {:?}", hex::encode(&output_bytes)); println!("guest build time: {:?}", guest_build_time); println!("proving time: {:?}", proving_time); println!("verification time: {:?}", verification_time);