pub type PoseidonTranscript<L, S> = PoseidonTranscript<G1Affine, L, S, T, RATE, R_F, R_P>;
Aliased Type§
struct PoseidonTranscript<L, S> {
pub loaded_stream: Vec<TranscriptObject<G1Affine, L>>,
/* private fields */
}
Fields§
§loaded_stream: Vec<TranscriptObject<G1Affine, L>>
Only relevant for Halo2 loader: as elements from stream
are read, they are assigned as witnesses.
The loaded witnesses are pushed to loaded_stream
. This way at the end we have the entire proof transcript
as loaded witnesses.
Implementations
Source§impl<C, S, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>where
C: CurveAffine,
impl<C, S, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>where
C: CurveAffine,
Sourcepub fn new<const SECURE_MDS: usize>(
stream: S,
) -> PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>
pub fn new<const SECURE_MDS: usize>( stream: S, ) -> PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>
Initialize PoseidonTranscript
given readable or writeable stream for
verifying or proving with NativeLoader
.
Sourcepub fn from_spec(
stream: S,
spec: OptimizedPoseidonSpec<<C as PrimeCurveAffine>::Scalar, T, RATE>,
) -> PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>
pub fn from_spec( stream: S, spec: OptimizedPoseidonSpec<<C as PrimeCurveAffine>::Scalar, T, RATE>, ) -> PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>
Initialize PoseidonTranscript
from a precomputed spec of round constants and MDS matrix because computing the constants is expensive.
Sourcepub fn new_stream(&mut self, stream: S)
pub fn new_stream(&mut self, stream: S)
Clear the buffer and set the stream to a new one. Effectively the same as starting from a new transcript.
Source§impl<C, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> PoseidonTranscript<C, NativeLoader, Vec<u8>, T, RATE, R_F, R_P>where
C: CurveAffine,
impl<C, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> PoseidonTranscript<C, NativeLoader, Vec<u8>, T, RATE, R_F, R_P>where
C: CurveAffine,
Source§impl<C, W, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> PoseidonTranscript<C, NativeLoader, W, T, RATE, R_F, R_P>where
C: CurveAffine,
W: Write,
impl<C, W, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> PoseidonTranscript<C, NativeLoader, W, T, RATE, R_F, R_P>where
C: CurveAffine,
W: Write,
Sourcepub fn stream_mut(&mut self) -> &mut W
pub fn stream_mut(&mut self) -> &mut W
Returns mutable stream
.
Source§impl<C, R, EccChip, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
impl<C, R, EccChip, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
Sourcepub fn new<const SECURE_MDS: usize>(
loader: &Rc<Halo2Loader<C, EccChip>>,
stream: R,
) -> PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
pub fn new<const SECURE_MDS: usize>( loader: &Rc<Halo2Loader<C, EccChip>>, stream: R, ) -> PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
Initialize PoseidonTranscript
given readable or writeable stream for
verifying or proving with NativeLoader
.
Sourcepub fn from_spec(
loader: &Rc<Halo2Loader<C, EccChip>>,
stream: R,
spec: OptimizedPoseidonSpec<<C as PrimeCurveAffine>::Scalar, T, RATE>,
) -> PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
pub fn from_spec( loader: &Rc<Halo2Loader<C, EccChip>>, stream: R, spec: OptimizedPoseidonSpec<<C as PrimeCurveAffine>::Scalar, T, RATE>, ) -> PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
Initialize PoseidonTranscript
from a precomputed spec of round constants and MDS matrix because computing the constants is expensive.
Sourcepub fn new_stream(&mut self, stream: R)
pub fn new_stream(&mut self, stream: R)
Clear the buffer and set the stream to a new one. Effectively the same as starting from a new transcript.
Trait Implementations
Source§impl<C, L, S, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> Debug for PoseidonTranscript<C, L, S, T, RATE, R_F, R_P>where
C: Debug + CurveAffine,
L: Debug + Loader<C>,
S: Debug,
<C as PrimeCurveAffine>::Scalar: Debug,
impl<C, L, S, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> Debug for PoseidonTranscript<C, L, S, T, RATE, R_F, R_P>where
C: Debug + CurveAffine,
L: Debug + Loader<C>,
S: Debug,
<C as PrimeCurveAffine>::Scalar: Debug,
Source§impl<C, S, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> Transcript<C, ChallengeScalar<C>> for PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>where
C: CurveAffine,
impl<C, S, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> Transcript<C, ChallengeScalar<C>> for PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>where
C: CurveAffine,
Source§fn squeeze_challenge(&mut self) -> ChallengeScalar<C>
fn squeeze_challenge(&mut self) -> ChallengeScalar<C>
Source§fn common_point(&mut self, ec_point: C) -> Result<(), Error>
fn common_point(&mut self, ec_point: C) -> Result<(), Error>
Source§fn common_scalar(
&mut self,
scalar: <C as PrimeCurveAffine>::Scalar,
) -> Result<(), Error>
fn common_scalar( &mut self, scalar: <C as PrimeCurveAffine>::Scalar, ) -> Result<(), Error>
Source§fn squeeze_challenge_scalar<T>(&mut self) -> ChallengeScalar<C, T>
fn squeeze_challenge_scalar<T>(&mut self) -> ChallengeScalar<C, T>
Source§impl<C, S, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> Transcript<C, NativeLoader> for PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>where
C: CurveAffine,
impl<C, S, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> Transcript<C, NativeLoader> for PoseidonTranscript<C, NativeLoader, S, T, RATE, R_F, R_P>where
C: CurveAffine,
Source§fn loader(&self) -> &NativeLoader
fn loader(&self) -> &NativeLoader
Loader
.Source§fn squeeze_challenge(&mut self) -> <C as PrimeCurveAffine>::Scalar
fn squeeze_challenge(&mut self) -> <C as PrimeCurveAffine>::Scalar
Source§fn common_scalar(
&mut self,
scalar: &<C as PrimeCurveAffine>::Scalar,
) -> Result<(), Error>
fn common_scalar( &mut self, scalar: &<C as PrimeCurveAffine>::Scalar, ) -> Result<(), Error>
Source§fn common_ec_point(&mut self, ec_point: &C) -> Result<(), Error>
fn common_ec_point(&mut self, ec_point: &C) -> Result<(), Error>
Source§fn squeeze_n_challenges(
&mut self,
n: usize,
) -> Vec<<L as ScalarLoader<<C as CurveAffine>::ScalarExt>>::LoadedScalar>
fn squeeze_n_challenges( &mut self, n: usize, ) -> Vec<<L as ScalarLoader<<C as CurveAffine>::ScalarExt>>::LoadedScalar>
n
challenges.Source§impl<C, R, EccChip, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> Transcript<C, Rc<Halo2Loader<C, EccChip>>> for PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
impl<C, R, EccChip, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> Transcript<C, Rc<Halo2Loader<C, EccChip>>> for PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
Source§fn squeeze_challenge(&mut self) -> Scalar<C, EccChip>
fn squeeze_challenge(&mut self) -> Scalar<C, EccChip>
Source§fn common_scalar(&mut self, scalar: &Scalar<C, EccChip>) -> Result<(), Error>
fn common_scalar(&mut self, scalar: &Scalar<C, EccChip>) -> Result<(), Error>
Source§fn common_ec_point(
&mut self,
ec_point: &EcPoint<C, EccChip>,
) -> Result<(), Error>
fn common_ec_point( &mut self, ec_point: &EcPoint<C, EccChip>, ) -> Result<(), Error>
Source§fn squeeze_n_challenges(
&mut self,
n: usize,
) -> Vec<<L as ScalarLoader<<C as CurveAffine>::ScalarExt>>::LoadedScalar>
fn squeeze_n_challenges( &mut self, n: usize, ) -> Vec<<L as ScalarLoader<<C as CurveAffine>::ScalarExt>>::LoadedScalar>
n
challenges.Source§impl<C, R, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> TranscriptRead<C, ChallengeScalar<C>> for PoseidonTranscript<C, NativeLoader, R, T, RATE, R_F, R_P>where
C: CurveAffine,
R: Read,
impl<C, R, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> TranscriptRead<C, ChallengeScalar<C>> for PoseidonTranscript<C, NativeLoader, R, T, RATE, R_F, R_P>where
C: CurveAffine,
R: Read,
Source§fn read_point(&mut self) -> Result<C, Error>
fn read_point(&mut self) -> Result<C, Error>
Source§fn read_scalar(&mut self) -> Result<<C as PrimeCurveAffine>::Scalar, Error>
fn read_scalar(&mut self) -> Result<<C as PrimeCurveAffine>::Scalar, Error>
Source§impl<C, R, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> TranscriptRead<C, NativeLoader> for PoseidonTranscript<C, NativeLoader, R, T, RATE, R_F, R_P>where
C: CurveAffine,
R: Read,
impl<C, R, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> TranscriptRead<C, NativeLoader> for PoseidonTranscript<C, NativeLoader, R, T, RATE, R_F, R_P>where
C: CurveAffine,
R: Read,
Source§fn read_scalar(&mut self) -> Result<<C as PrimeCurveAffine>::Scalar, Error>
fn read_scalar(&mut self) -> Result<<C as PrimeCurveAffine>::Scalar, Error>
Source§fn read_ec_point(&mut self) -> Result<C, Error>
fn read_ec_point(&mut self) -> Result<C, Error>
Source§fn read_n_scalars(
&mut self,
n: usize,
) -> Result<Vec<<L as ScalarLoader<<C as CurveAffine>::ScalarExt>>::LoadedScalar>, Error>
fn read_n_scalars( &mut self, n: usize, ) -> Result<Vec<<L as ScalarLoader<<C as CurveAffine>::ScalarExt>>::LoadedScalar>, Error>
n
scalar.Source§fn read_n_ec_points(
&mut self,
n: usize,
) -> Result<Vec<<L as EcPointLoader<C>>::LoadedEcPoint>, Error>
fn read_n_ec_points( &mut self, n: usize, ) -> Result<Vec<<L as EcPointLoader<C>>::LoadedEcPoint>, Error>
n
elliptic curve point.Source§impl<C, R, EccChip, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> TranscriptRead<C, Rc<Halo2Loader<C, EccChip>>> for PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
impl<C, R, EccChip, const T: usize, const RATE: usize, const R_F: usize, const R_P: usize> TranscriptRead<C, Rc<Halo2Loader<C, EccChip>>> for PoseidonTranscript<C, Rc<Halo2Loader<C, EccChip>>, R, T, RATE, R_F, R_P>
Source§fn read_ec_point(&mut self) -> Result<EcPoint<C, EccChip>, Error>
fn read_ec_point(&mut self) -> Result<EcPoint<C, EccChip>, Error>
Source§fn read_n_scalars(
&mut self,
n: usize,
) -> Result<Vec<<L as ScalarLoader<<C as CurveAffine>::ScalarExt>>::LoadedScalar>, Error>
fn read_n_scalars( &mut self, n: usize, ) -> Result<Vec<<L as ScalarLoader<<C as CurveAffine>::ScalarExt>>::LoadedScalar>, Error>
n
scalar.Source§fn read_n_ec_points(
&mut self,
n: usize,
) -> Result<Vec<<L as EcPointLoader<C>>::LoadedEcPoint>, Error>
fn read_n_ec_points( &mut self, n: usize, ) -> Result<Vec<<L as EcPointLoader<C>>::LoadedEcPoint>, Error>
n
elliptic curve point.