arcium-primitives 0.4.5

Arcium primitives
Documentation
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},
};
// --------------------
// |   Verification   |
// --------------------

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)
    }
}