use crate::Error; use ark_ec::CurveGroup; use ark_ff::PrimeField; use ark_r1cs_std::{boolean::Boolean, fields::fp::FpVar}; use ark_relations::r1cs::{ConstraintSystemRef, SynthesisError}; use ark_std::fmt::Debug; pub mod poseidon; pub trait Transcript { type TranscriptConfig: Debug; fn new(config: &Self::TranscriptConfig) -> Self; fn absorb(&mut self, v: &C::ScalarField); fn absorb_vec(&mut self, v: &[C::ScalarField]); fn absorb_point(&mut self, v: &C) -> Result<(), Error>; fn get_challenge(&mut self) -> C::ScalarField; /// get_challenge_nbits returns a field element of size nbits fn get_challenge_nbits(&mut self, nbits: usize) -> Vec; fn get_challenges(&mut self, n: usize) -> Vec; } pub trait TranscriptVar { type TranscriptVarConfig: Debug; fn new(cs: ConstraintSystemRef, poseidon_config: &Self::TranscriptVarConfig) -> Self; fn absorb(&mut self, v: FpVar) -> Result<(), SynthesisError>; fn absorb_vec(&mut self, v: &[FpVar]) -> Result<(), SynthesisError>; fn get_challenge(&mut self) -> Result, SynthesisError>; /// returns the bit representation of the challenge, we use its output in-circuit for the /// `GC.scalar_mul_le` method. fn get_challenge_nbits(&mut self, nbits: usize) -> Result>, SynthesisError>; fn get_challenges(&mut self, n: usize) -> Result>, SynthesisError>; }