libzeropool-rs 0.9.1

A higher level zeropool API
Documentation
use libzeropool::{
    constants,
    fawkes_crypto::{
        ff_uint::{Num, PrimeField},
        native::poseidon::MerkleProof,
    },
    native::{boundednum::BoundedNum, note::Note},
};

pub fn keccak256(data: &[u8]) -> [u8; 32] {
    use sha3::Digest;

    let mut hasher = sha3::Keccak256::new();
    hasher.update(data);
    let mut res = [0u8; 32];
    res.iter_mut()
        .zip(hasher.finalize().into_iter())
        .for_each(|(l, r)| *l = r);
    res
}

pub fn zero_note<Fr: PrimeField>() -> Note<Fr> {
    Note {
        d: BoundedNum::new(Num::ZERO),
        p_d: Num::ZERO,
        b: BoundedNum::new(Num::ZERO),
        t: BoundedNum::new(Num::ZERO),
    }
}

pub fn zero_proof<Fr: PrimeField>() -> MerkleProof<Fr, { constants::HEIGHT }> {
    MerkleProof {
        sibling: (0..constants::HEIGHT).map(|_| Num::ZERO).collect(),
        path: (0..constants::HEIGHT).map(|_| false).collect(),
    }
}