primitives/correlated_randomness/singlets/
sharing.rs1use 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};
8impl<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}