arnaucube
arnaucube/ark-r1cs-stdPublic Self-hosted repository
ark-r1cs-std/crypto-primitives/src/prf/blake2s/mod.rs
crypto-primitives/src/prf/blake2s/mod.rsRaw
 1use blake2::Blake2s as b2s;
 2use digest::Digest;
 3
 4use super::PRF;
 5use crate::CryptoError;
 6
 7#[cfg(feature = "r1cs")]
 8pub mod constraints;
 9
10#[derive(Clone)]
11pub struct Blake2s;
12
13impl PRF for Blake2s {
14    type Input = [u8; 32];
15    type Output = [u8; 32];
16    type Seed = [u8; 32];
17
18    fn evaluate(seed: &Self::Seed, input: &Self::Input) -> Result<Self::Output, CryptoError> {
19        let eval_time = start_timer!(|| "Blake2s::Eval");
20        let mut h = b2s::new();
21        h.input(seed.as_ref());
22        h.input(input.as_ref());
23        let mut result = [0u8; 32];
24        result.copy_from_slice(&h.result());
25        end_timer!(eval_time);
26        Ok(result)
27    }
28}