snark_verifier/util/
transcript.rs
1use crate::{
4 loader::{native::NativeLoader, Loader},
5 {util::arithmetic::CurveAffine, Error},
6};
7
8pub trait Transcript<C, L>
10where
11 C: CurveAffine,
12 L: Loader<C>,
13{
14 fn loader(&self) -> &L;
16
17 fn squeeze_challenge(&mut self) -> L::LoadedScalar;
19
20 fn squeeze_n_challenges(&mut self, n: usize) -> Vec<L::LoadedScalar> {
22 (0..n).map(|_| self.squeeze_challenge()).collect()
23 }
24
25 fn common_ec_point(&mut self, ec_point: &L::LoadedEcPoint) -> Result<(), Error>;
27
28 fn common_scalar(&mut self, scalar: &L::LoadedScalar) -> Result<(), Error>;
30}
31
32pub trait TranscriptRead<C, L>: Transcript<C, L>
34where
35 C: CurveAffine,
36 L: Loader<C>,
37{
38 fn read_scalar(&mut self) -> Result<L::LoadedScalar, Error>;
40
41 fn read_n_scalars(&mut self, n: usize) -> Result<Vec<L::LoadedScalar>, Error> {
43 (0..n).map(|_| self.read_scalar()).collect()
44 }
45
46 fn read_ec_point(&mut self) -> Result<L::LoadedEcPoint, Error>;
48
49 fn read_n_ec_points(&mut self, n: usize) -> Result<Vec<L::LoadedEcPoint>, Error> {
51 (0..n).map(|_| self.read_ec_point()).collect()
52 }
53}
54
55pub trait TranscriptWrite<C: CurveAffine>: Transcript<C, NativeLoader> {
57 fn write_scalar(&mut self, scalar: C::Scalar) -> Result<(), Error>;
59
60 fn write_ec_point(&mut self, ec_point: C) -> Result<(), Error>;
62}