arnaucube
arnaucube/ark-r1cs-stdPublic Self-hosted repository
ark-r1cs-std/crypto-primitives/src/commitment/blake2s/mod.rs
crypto-primitives/src/commitment/blake2s/mod.rsRaw
 1use super::CommitmentScheme;
 2use crate::Error;
 3use blake2::Blake2s as b2s;
 4use digest::Digest;
 5use rand::Rng;
 6
 7pub struct Blake2sCommitment;
 8
 9#[cfg(feature = "r1cs")]
10pub mod constraints;
11
12impl CommitmentScheme for Blake2sCommitment {
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        randomness: &Self::Randomness,
25    ) -> Result<Self::Output, Error> {
26        let mut h = b2s::new();
27        h.input(input);
28        h.input(randomness.as_ref());
29        let mut result = [0u8; 32];
30        result.copy_from_slice(&h.result());
31        Ok(result)
32    }
33}