snark_verifier/system/halo2/
transcript.rs
1use crate::halo2_proofs;
4use crate::{
5 loader::native::{self, NativeLoader},
6 util::{
7 arithmetic::CurveAffine,
8 transcript::{Transcript, TranscriptRead, TranscriptWrite},
9 },
10 Error,
11};
12use halo2_proofs::transcript::{Blake2bRead, Blake2bWrite, Challenge255};
13use pairing::group::ff::FromUniformBytes;
14use std::io::{Read, Write};
15
16#[cfg(feature = "loader_evm")]
17pub mod evm;
18
19#[cfg(feature = "loader_halo2")]
20pub mod halo2;
21
22impl<C: CurveAffine, R: Read> Transcript<C, NativeLoader> for Blake2bRead<R, C, Challenge255<C>>
23where
24 C::Scalar: FromUniformBytes<64>,
25{
26 fn loader(&self) -> &NativeLoader {
27 &native::LOADER
28 }
29
30 fn squeeze_challenge(&mut self) -> C::Scalar {
31 *halo2_proofs::transcript::Transcript::squeeze_challenge_scalar::<C::Scalar>(self)
32 }
33
34 fn common_ec_point(&mut self, ec_point: &C) -> Result<(), Error> {
35 halo2_proofs::transcript::Transcript::common_point(self, *ec_point)
36 .map_err(|err| Error::Transcript(err.kind(), err.to_string()))
37 }
38
39 fn common_scalar(&mut self, scalar: &C::Scalar) -> Result<(), Error> {
40 halo2_proofs::transcript::Transcript::common_scalar(self, *scalar)
41 .map_err(|err| Error::Transcript(err.kind(), err.to_string()))
42 }
43}
44
45impl<C: CurveAffine, R: Read> TranscriptRead<C, NativeLoader> for Blake2bRead<R, C, Challenge255<C>>
46where
47 C::Scalar: FromUniformBytes<64>,
48{
49 fn read_scalar(&mut self) -> Result<C::Scalar, Error> {
50 halo2_proofs::transcript::TranscriptRead::read_scalar(self)
51 .map_err(|err| Error::Transcript(err.kind(), err.to_string()))
52 }
53
54 fn read_ec_point(&mut self) -> Result<C, Error> {
55 halo2_proofs::transcript::TranscriptRead::read_point(self)
56 .map_err(|err| Error::Transcript(err.kind(), err.to_string()))
57 }
58}
59
60impl<C: CurveAffine, W: Write> Transcript<C, NativeLoader> for Blake2bWrite<W, C, Challenge255<C>>
61where
62 C::Scalar: FromUniformBytes<64>,
63{
64 fn loader(&self) -> &NativeLoader {
65 &native::LOADER
66 }
67
68 fn squeeze_challenge(&mut self) -> C::Scalar {
69 *halo2_proofs::transcript::Transcript::squeeze_challenge_scalar::<C::Scalar>(self)
70 }
71
72 fn common_ec_point(&mut self, ec_point: &C) -> Result<(), Error> {
73 halo2_proofs::transcript::Transcript::common_point(self, *ec_point)
74 .map_err(|err| Error::Transcript(err.kind(), err.to_string()))
75 }
76
77 fn common_scalar(&mut self, scalar: &C::Scalar) -> Result<(), Error> {
78 halo2_proofs::transcript::Transcript::common_scalar(self, *scalar)
79 .map_err(|err| Error::Transcript(err.kind(), err.to_string()))
80 }
81}
82
83impl<C: CurveAffine> TranscriptWrite<C> for Blake2bWrite<Vec<u8>, C, Challenge255<C>>
84where
85 C::Scalar: FromUniformBytes<64>,
86{
87 fn write_scalar(&mut self, scalar: C::Scalar) -> Result<(), Error> {
88 halo2_proofs::transcript::TranscriptWrite::write_scalar(self, scalar)
89 .map_err(|err| Error::Transcript(err.kind(), err.to_string()))
90 }
91
92 fn write_ec_point(&mut self, ec_point: C) -> Result<(), Error> {
93 halo2_proofs::transcript::TranscriptWrite::write_point(self, ec_point)
94 .map_err(|err| Error::Transcript(err.kind(), err.to_string()))
95 }
96}