ark-r1cs-std/crypto-primitives/src/commitment/injective_map/constraints.rs
crypto-primitives/src/commitment/injective_map/constraints.rsRaw
1use algebra::{Field, PrimeField};
2
3use crate::commitment::{
4 injective_map::{InjectiveMap, PedersenCommCompressor},
5 pedersen::PedersenWindow,
6 pedersen::constraints::{
7 PedersenCommitmentGadget, PedersenCommitmentGadgetParameters, PedersenRandomnessGadget,
8 },
9 CommitmentGadget,
10};
11
12pub use crate::crh::injective_map::constraints::InjectiveMapGadget;
13use algebra::groups::Group;
14use r1cs_core::{ConstraintSystem, SynthesisError};
15use r1cs_std::{groups::GroupGadget, uint8::UInt8};
16
17use std::marker::PhantomData;
18
19pub struct PedersenCommitmentCompressorGadget<
20 G: Group,
21 I: InjectiveMap<G>,
22 ConstraintF: Field,
23 GG: GroupGadget<G, ConstraintF>,
24 IG: InjectiveMapGadget<G, I, ConstraintF, GG>,
25> {
26 _compressor: PhantomData<I>,
27 _compressor_gadget: PhantomData<IG>,
28 _crh: PedersenCommitmentGadget<G, ConstraintF, GG>,
29}
30
31impl<G, I, ConstraintF, GG, IG, W> CommitmentGadget<PedersenCommCompressor<G, I, W>, ConstraintF>
32 for PedersenCommitmentCompressorGadget<G, I, ConstraintF, GG, IG>
33where
34 G: Group,
35 I: InjectiveMap<G>,
36 ConstraintF: PrimeField,
37 GG: GroupGadget<G, ConstraintF>,
38 IG: InjectiveMapGadget<G, I, ConstraintF, GG>,
39 W: PedersenWindow,
40{
41 type OutputGadget = IG::OutputGadget;
42 type ParametersGadget = PedersenCommitmentGadgetParameters<G, W, ConstraintF>;
43 type RandomnessGadget = PedersenRandomnessGadget;
44
45 fn check_commitment_gadget<CS: ConstraintSystem<ConstraintF>>(
46 mut cs: CS,
47 parameters: &Self::ParametersGadget,
48 input: &[UInt8],
49 r: &Self::RandomnessGadget,
50 ) -> Result<Self::OutputGadget, SynthesisError> {
51 let result = PedersenCommitmentGadget::<G, ConstraintF, GG>::check_commitment_gadget(
52 cs.ns(|| "PedersenComm"),
53 parameters,
54 input,
55 r,
56 )?;
57 IG::evaluate_map(cs.ns(|| "InjectiveMap"), &result)
58 }
59}