pub(crate) mod evaluator;
							 | 
						|
								mod keys;
							 | 
						|
								mod noise;
							 | 
						|
								pub(crate) mod parameters;
							 | 
						|
								
							 | 
						|
								pub(crate) use keys::PublicKey;
							 | 
						|
								
							 | 
						|
								#[cfg(feature = "interactive_mp")]
							 | 
						|
								#[cfg(not(feature = "non_interactive_mp"))]
							 | 
						|
								mod mp_api;
							 | 
						|
								#[cfg(feature = "non_interactive_mp")]
							 | 
						|
								mod ni_mp_api;
							 | 
						|
								
							 | 
						|
								#[cfg(feature = "non_interactive_mp")]
							 | 
						|
								pub use ni_mp_api::*;
							 | 
						|
								
							 | 
						|
								#[cfg(feature = "interactive_mp")]
							 | 
						|
								#[cfg(not(feature = "non_interactive_mp"))]
							 | 
						|
								pub use mp_api::*;
							 | 
						|
								
							 | 
						|
								pub type ClientKey = keys::ClientKey<[u8; 32], u64>;
							 | 
						|
								
							 | 
						|
								pub enum ParameterSelector {
							 | 
						|
								    MultiPartyLessThanOrEqualTo16,
							 | 
						|
								    NonInteractiveMultiPartyLessThanOrEqualTo16,
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								mod common_mp_enc_dec {
							 | 
						|
								    use super::BoolEvaluator;
							 | 
						|
								    use crate::{
							 | 
						|
								        pbs::{sample_extract, PbsInfo},
							 | 
						|
								        utils::WithLocal,
							 | 
						|
								        Matrix, MultiPartyDecryptor, RowEntity, SampleExtractor,
							 | 
						|
								    };
							 | 
						|
								
							 | 
						|
								    type Mat = Vec<Vec<u64>>;
							 | 
						|
								
							 | 
						|
								    impl<E> MultiPartyDecryptor<bool, <Mat as Matrix>::R> for super::keys::ClientKey<[u8; 32], E> {
							 | 
						|
								        type DecryptionShare = <Mat as Matrix>::MatElement;
							 | 
						|
								
							 | 
						|
								        fn gen_decryption_share(&self, c: &<Mat as Matrix>::R) -> Self::DecryptionShare {
							 | 
						|
								            BoolEvaluator::with_local(|e| e.multi_party_decryption_share(c, self))
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        fn aggregate_decryption_shares(
							 | 
						|
								            &self,
							 | 
						|
								            c: &<Mat as Matrix>::R,
							 | 
						|
								            shares: &[Self::DecryptionShare],
							 | 
						|
								        ) -> bool {
							 | 
						|
								            BoolEvaluator::with_local(|e| e.multi_party_decrypt(shares, c))
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    impl SampleExtractor<<Mat as Matrix>::R> for Mat {
							 | 
						|
								        fn extract(&self, index: usize) -> <Mat as Matrix>::R {
							 | 
						|
								            // input is RLWE ciphertext
							 | 
						|
								            assert!(self.dimension().0 == 2);
							 | 
						|
								
							 | 
						|
								            let ring_size = self.dimension().1;
							 | 
						|
								            assert!(index < ring_size);
							 | 
						|
								
							 | 
						|
								            BoolEvaluator::with_local(|e| {
							 | 
						|
								                let mut lwe_out = <Mat as Matrix>::R::zeros(ring_size + 1);
							 | 
						|
								                sample_extract(&mut lwe_out, self, e.pbs_info().modop_rlweq(), index);
							 | 
						|
								                lwe_out
							 | 
						|
								            })
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								}
							 |