arnaucube
arnaucube/ark-r1cs-stdPublic Self-hosted repository
ark-r1cs-std/crypto-primitives/src/commitment/injective_map/mod.rs
crypto-primitives/src/commitment/injective_map/mod.rsRaw
 1use crate::Error;
 2use core::marker::PhantomData;
 3use rand::Rng;
 4
 5use super::{
 6    pedersen::{PedersenCommitment, PedersenParameters, PedersenRandomness, PedersenWindow},
 7    CommitmentScheme,
 8};
 9pub use crate::crh::injective_map::InjectiveMap;
10use algebra_core::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}