Skip to main content

primitives/correlated_randomness/singlets/
sharing.rs

1use crate::{
2    algebra::field::{FieldExtension, SubfieldElement},
3    correlated_randomness::singlets::types::{Singlet, Singlets},
4    errors::PrimitiveError,
5    sharing::{OpenFieldShare, OpenFieldShares, Reconstructible, Verifiable, VerifiableWith},
6    types::{heap_array::SubfieldElements, PeerIndex, Positive},
7};
8// --------------------
9// |   Verification   |
10// --------------------
11
12impl<F: FieldExtension, M: Positive> Reconstructible for Singlets<F, M> {
13    type Opening = OpenFieldShares<F, M>;
14    type Value = SubfieldElements<F, M>;
15
16    fn open_to(&self, peer_index: PeerIndex) -> Result<OpenFieldShares<F, M>, PrimitiveError> {
17        self.0.open_to(peer_index)
18    }
19
20    fn open_to_all_others(&self) -> impl ExactSizeIterator<Item = OpenFieldShares<F, M>> {
21        self.0.open_to_all_others()
22    }
23
24    fn reconstruct(
25        &self,
26        openings: Vec<OpenFieldShares<F, M>>,
27    ) -> Result<Self::Value, PrimitiveError> {
28        self.0.reconstruct(openings)
29    }
30}
31
32impl<F: FieldExtension, M: Positive> VerifiableWith for Singlets<F, M> {
33    type VerificationData = ();
34    fn verify_with(
35        &self,
36        openings: Vec<OpenFieldShares<F, M>>,
37        _verification_data: (),
38    ) -> Result<(), PrimitiveError> {
39        self.0.verify(openings)
40    }
41}
42
43impl<F: FieldExtension> Reconstructible for Singlet<F> {
44    type Opening = OpenFieldShare<F>;
45    type Value = SubfieldElement<F>;
46
47    fn open_to(&self, peer_index: PeerIndex) -> Result<OpenFieldShare<F>, PrimitiveError> {
48        self.0.open_to(peer_index)
49    }
50
51    fn open_to_all_others(&self) -> impl ExactSizeIterator<Item = OpenFieldShare<F>> {
52        self.0.open_to_all_others()
53    }
54
55    fn reconstruct(&self, openings: Vec<OpenFieldShare<F>>) -> Result<Self::Value, PrimitiveError> {
56        self.0.reconstruct(openings)
57    }
58}
59
60impl<F: FieldExtension> VerifiableWith for Singlet<F> {
61    type VerificationData = ();
62    fn verify_with(
63        &self,
64        openings: Vec<OpenFieldShare<F>>,
65        _verification_data: (),
66    ) -> Result<(), PrimitiveError> {
67        self.0.verify(openings)
68    }
69}