use algebra::{Field, PrimeField}; use crate::commitment::{ injective_map::{InjectiveMap, PedersenCommCompressor}, pedersen::{ constraints::{ PedersenCommitmentGadget, PedersenCommitmentGadgetParameters, PedersenRandomnessGadget, }, PedersenWindow, }, CommitmentGadget, }; pub use crate::crh::injective_map::constraints::InjectiveMapGadget; use algebra::groups::Group; use r1cs_core::{ConstraintSystem, SynthesisError}; use r1cs_std::{groups::GroupGadget, uint8::UInt8}; use core::marker::PhantomData; pub struct PedersenCommitmentCompressorGadget where G: Group, I: InjectiveMap, ConstraintF: Field, GG: GroupGadget, IG: InjectiveMapGadget, { _compressor: PhantomData, _compressor_gadget: PhantomData, _crh: PedersenCommitmentGadget, } impl CommitmentGadget, ConstraintF> for PedersenCommitmentCompressorGadget where G: Group, I: InjectiveMap, ConstraintF: PrimeField, GG: GroupGadget, IG: InjectiveMapGadget, W: PedersenWindow, { type OutputGadget = IG::OutputGadget; type ParametersGadget = PedersenCommitmentGadgetParameters; type RandomnessGadget = PedersenRandomnessGadget; fn check_commitment_gadget>( mut cs: CS, parameters: &Self::ParametersGadget, input: &[UInt8], r: &Self::RandomnessGadget, ) -> Result { let result = PedersenCommitmentGadget::::check_commitment_gadget( cs.ns(|| "PedersenComm"), parameters, input, r, )?; IG::evaluate_map(cs.ns(|| "InjectiveMap"), &result) } }