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