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