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}