sonobe/folding-schemes/src/folding/protogalaxy/traits.rs
folding-schemes/src/folding/protogalaxy/traits.rsRaw
1use ark_crypto_primitives::sponge::{constraints::AbsorbGadget, Absorb};
2use ark_ec::CurveGroup;
3use ark_ff::PrimeField;
4use ark_r1cs_std::{fields::fp::FpVar, uint8::UInt8, ToConstraintFieldGadget};
5use ark_relations::r1cs::SynthesisError;
6
7use super::{CommittedInstance, CommittedInstanceVar};
8use crate::transcript::AbsorbNonNative;
9
10// Implements the trait for absorbing ProtoGalaxy's CommittedInstance.
11impl<C: CurveGroup> Absorb for CommittedInstance<C>
12where
13 C::ScalarField: Absorb,
14{
15 fn to_sponge_bytes(&self, _dest: &mut Vec<u8>) {
16 unimplemented!()
17 }
18
19 fn to_sponge_field_elements<F: PrimeField>(&self, dest: &mut Vec<F>) {
20 self.phi
21 .to_native_sponge_field_elements_as_vec()
22 .to_sponge_field_elements(dest);
23 self.betas.to_sponge_field_elements(dest);
24 self.e.to_sponge_field_elements(dest);
25 }
26}
27
28// Implements the trait for absorbing ProtoGalaxy's CommittedInstanceVar in-circuit.
29impl<C: CurveGroup> AbsorbGadget<C::ScalarField> for CommittedInstanceVar<C> {
30 fn to_sponge_bytes(&self) -> Result<Vec<UInt8<C::ScalarField>>, SynthesisError> {
31 unimplemented!()
32 }
33
34 fn to_sponge_field_elements(&self) -> Result<Vec<FpVar<C::ScalarField>>, SynthesisError> {
35 Ok([
36 self.phi.to_constraint_field()?,
37 self.betas.to_sponge_field_elements()?,
38 self.e.to_sponge_field_elements()?,
39 ]
40 .concat())
41 }
42}