arnaucube
arnaucube/sonobePublic Self-hosted repository
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}