ark-r1cs-std/crypto-primitives/src/commitment/injective_map/mod.rs
crypto-primitives/src/commitment/injective_map/mod.rsRaw
1use crate::Error;
2use rand::Rng;
3use std::marker::PhantomData;
4
5use super::{
6 pedersen::{PedersenCommitment, PedersenParameters, PedersenRandomness, PedersenWindow},
7 CommitmentScheme,
8};
9pub use crate::crh::injective_map::InjectiveMap;
10use algebra::groups::Group;
11
12#[cfg(feature = "r1cs")]
13pub mod constraints;
14
15pub struct PedersenCommCompressor<G: Group, I: InjectiveMap<G>, W: PedersenWindow> {
16 _group: PhantomData<G>,
17 _compressor: PhantomData<I>,
18 _comm: PedersenCommitment<G, W>,
19}
20
21impl<G: Group, I: InjectiveMap<G>, W: PedersenWindow> CommitmentScheme
22 for PedersenCommCompressor<G, I, W>
23{
24 type Output = I::Output;
25 type Parameters = PedersenParameters<G>;
26 type Randomness = PedersenRandomness<G>;
27
28 fn setup<R: Rng>(rng: &mut R) -> Result<Self::Parameters, Error> {
29 let time = start_timer!(|| format!("PedersenCompressor::Setup"));
30 let params = PedersenCommitment::<G, W>::setup(rng);
31 end_timer!(time);
32 params
33 }
34
35 fn commit(
36 parameters: &Self::Parameters,
37 input: &[u8],
38 randomness: &Self::Randomness,
39 ) -> Result<Self::Output, Error> {
40 let eval_time = start_timer!(|| "PedersenCompressor::Eval");
41 let result = I::injective_map(&PedersenCommitment::<G, W>::commit(
42 parameters, input, randomness,
43 )?)?;
44 end_timer!(eval_time);
45 Ok(result)
46 }
47}