use crate::{
algebra::field::{FieldExtension, SubfieldElement},
correlated_randomness::singlets::types::{Singlet, Singlets},
errors::PrimitiveError,
sharing::{OpenFieldShare, OpenFieldShares, Reconstructible, Verifiable, VerifiableWith},
types::{heap_array::SubfieldElements, PeerIndex, Positive},
};
impl<F: FieldExtension, M: Positive> Reconstructible for Singlets<F, M> {
type Opening = OpenFieldShares<F, M>;
type Value = SubfieldElements<F, M>;
fn open_to(&self, peer_index: PeerIndex) -> Result<OpenFieldShares<F, M>, PrimitiveError> {
self.0.open_to(peer_index)
}
fn open_to_all_others(&self) -> impl ExactSizeIterator<Item = OpenFieldShares<F, M>> {
self.0.open_to_all_others()
}
fn reconstruct(
&self,
openings: Vec<OpenFieldShares<F, M>>,
) -> Result<Self::Value, PrimitiveError> {
self.0.reconstruct(openings)
}
}
impl<F: FieldExtension, M: Positive> VerifiableWith for Singlets<F, M> {
type VerificationData = ();
fn verify_with(
&self,
openings: Vec<OpenFieldShares<F, M>>,
_verification_data: (),
) -> Result<(), PrimitiveError> {
self.0.verify(openings)
}
}
impl<F: FieldExtension> Reconstructible for Singlet<F> {
type Opening = OpenFieldShare<F>;
type Value = SubfieldElement<F>;
fn open_to(&self, peer_index: PeerIndex) -> Result<OpenFieldShare<F>, PrimitiveError> {
self.0.open_to(peer_index)
}
fn open_to_all_others(&self) -> impl ExactSizeIterator<Item = OpenFieldShare<F>> {
self.0.open_to_all_others()
}
fn reconstruct(&self, openings: Vec<OpenFieldShare<F>>) -> Result<Self::Value, PrimitiveError> {
self.0.reconstruct(openings)
}
}
impl<F: FieldExtension> VerifiableWith for Singlet<F> {
type VerificationData = ();
fn verify_with(
&self,
openings: Vec<OpenFieldShare<F>>,
_verification_data: (),
) -> Result<(), PrimitiveError> {
self.0.verify(openings)
}
}