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