libzeropool_rs/
utils.rs

1use libzeropool::{
2    constants,
3    fawkes_crypto::{
4        ff_uint::{Num, PrimeField},
5        native::poseidon::MerkleProof,
6    },
7    native::{boundednum::BoundedNum, note::Note},
8};
9
10pub fn keccak256(data: &[u8]) -> [u8; 32] {
11    use sha3::Digest;
12
13    let mut hasher = sha3::Keccak256::new();
14    hasher.update(data);
15    let mut res = [0u8; 32];
16    res.iter_mut()
17        .zip(hasher.finalize().into_iter())
18        .for_each(|(l, r)| *l = r);
19    res
20}
21
22pub fn zero_note<Fr: PrimeField>() -> Note<Fr> {
23    Note {
24        d: BoundedNum::new(Num::ZERO),
25        p_d: Num::ZERO,
26        b: BoundedNum::new(Num::ZERO),
27        t: BoundedNum::new(Num::ZERO),
28    }
29}
30
31pub fn zero_proof<Fr: PrimeField>() -> MerkleProof<Fr, { constants::HEIGHT }> {
32    MerkleProof {
33        sibling: (0..constants::HEIGHT).map(|_| Num::ZERO).collect(),
34        path: (0..constants::HEIGHT).map(|_| false).collect(),
35    }
36}