reverie/transcript/verifier/
preprocess.rs1use num_traits::Zero;
2
3use super::*;
4use crate::algebra::{Domain, Hashable};
5use crate::crypto::hash::PackedHasher;
6use crate::generator::ShareGen;
7use crate::proof::OpenPreprocessing;
8use crate::PACKED;
9
10pub struct VerifierTranscriptPreprocess<D: Domain> {
11 share_gen: Box<ShareGen<D>>,
12 comms_online: [Hash; PACKED],
13 hash_preprocess: PackedHasher,
14}
15
16impl<D: Domain> VerifierTranscriptPreprocess<D> {
17 pub(crate) fn new(proofs: &[OpenPreprocessing; PACKED]) -> Self {
18 let comms_online = [
19 proofs[0].comm_online.into(),
20 proofs[1].comm_online.into(),
21 proofs[2].comm_online.into(),
22 proofs[3].comm_online.into(),
23 proofs[4].comm_online.into(),
24 proofs[5].comm_online.into(),
25 proofs[6].comm_online.into(),
26 proofs[7].comm_online.into(),
27 ];
28 let seeds = [
29 proofs[0].seed,
30 proofs[1].seed,
31 proofs[2].seed,
32 proofs[3].seed,
33 proofs[4].seed,
34 proofs[5].seed,
35 proofs[6].seed,
36 proofs[7].seed,
37 ];
38 Self {
39 comms_online,
40 share_gen: share_gen_from_rep_seeds(&seeds),
41 hash_preprocess: PackedHasher::new(),
42 }
43 }
44}
45
46impl<D: Domain> Transcript<D> for VerifierTranscriptPreprocess<D> {
47 fn input(&mut self) -> Wire<D> {
48 let mask = self.share_gen.next();
49 Wire {
50 mask,
51 corr: D::Recon::zero(), }
53 }
54
55 fn online_hash(&self) -> [Hash; PACKED] {
56 self.comms_online
57 }
58
59 fn preprocess_hash(&self) -> [Hash; PACKED] {
60 self.hash_preprocess.finalize()
61 }
62
63 fn reconstruct(&mut self, _mask: D::Share) -> D::Recon {
64 D::Recon::zero() }
66
67 fn correction(&mut self, corr: D::Recon) -> D::Recon {
68 corr.hash(&mut self.hash_preprocess);
69 corr
70 }
71
72 fn zero_check(&mut self, _recon: D::Recon) {
73 }
75
76 fn new_mask(&mut self) -> D::Share {
77 self.share_gen.next()
78 }
79}