mmr_crypto_primitives/commitment/blake2s/
mod.rs

1use super::CommitmentScheme;
2use crate::Error;
3use ark_std::rand::Rng;
4use blake2::Blake2s as b2s;
5use digest::Digest;
6
7pub struct Commitment;
8
9#[cfg(feature = "r1cs")]
10pub mod constraints;
11
12impl CommitmentScheme for Commitment {
13    type Parameters = ();
14    type Randomness = [u8; 32];
15    type Output = [u8; 32];
16
17    fn setup<R: Rng>(_: &mut R) -> Result<Self::Parameters, Error> {
18        Ok(())
19    }
20
21    fn commit(
22        _: &Self::Parameters,
23        input: &[u8],
24        r: &Self::Randomness,
25    ) -> Result<Self::Output, Error> {
26        let mut h = b2s::new();
27        h.update(input);
28        h.update(r.as_ref());
29        let mut result = [0u8; 32];
30        result.copy_from_slice(&h.finalize());
31        Ok(result)
32    }
33}