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 self.u.to_sponge_field_elements(dest);
26 self.x.to_sponge_field_elements(dest);
27 }
28}
29
30// Implements the trait for absorbing ProtoGalaxy's CommittedInstanceVar in-circuit.
31impl<C: CurveGroup> AbsorbGadget<C::ScalarField> for CommittedInstanceVar<C> {
32 fn to_sponge_bytes(&self) -> Result<Vec<UInt8<C::ScalarField>>, SynthesisError> {
33 unimplemented!()
34 }
35
36 fn to_sponge_field_elements(&self) -> Result<Vec<FpVar<C::ScalarField>>, SynthesisError> {
37 Ok([
38 self.phi.to_constraint_field()?,
39 self.betas.to_sponge_field_elements()?,
40 self.e.to_sponge_field_elements()?,
41 self.u.to_sponge_field_elements()?,
42 self.x.to_sponge_field_elements()?,
43 ]
44 .concat())
45 }
46}