reverie/transcript/verifier/
preprocess.rs

1use 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(), // any junk
52        }
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() // any junk
65    }
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        // NOP: the online phase will be foobar
74    }
75
76    fn new_mask(&mut self) -> D::Share {
77        self.share_gen.next()
78    }
79}