arnaucube
arnaucube/phantom-zonePublic Self-hosted repository
phantom-zone/src/bool/mod.rs
src/bool/mod.rsRaw
 1pub(crate) mod evaluator;
 2mod keys;
 3mod mp_api;
 4mod ni_mp_api;
 5mod noise;
 6pub(crate) mod parameters;
 7
 8pub(crate) use keys::PublicKey;
 9
10#[cfg(feature = "non_interactive_mp")]
11pub use ni_mp_api::*;
12
13#[cfg(feature = "interactive_mp")]
14pub use mp_api::*;
15
16pub type ClientKey = keys::ClientKey<[u8; 32], u64>;
17
18pub enum ParameterSelector {
19    MultiPartyLessThanOrEqualTo16,
20    NonInteractiveMultiPartyLessThanOrEqualTo16,
21}
22
23mod common_mp_enc_dec {
24    use super::BoolEvaluator;
25    use crate::{utils::WithLocal, Matrix, MultiPartyDecryptor};
26
27    type Mat = Vec<Vec<u64>>;
28
29    impl<E> MultiPartyDecryptor<bool, <Mat as Matrix>::R> for super::keys::ClientKey<[u8; 32], E> {
30        type DecryptionShare = <Mat as Matrix>::MatElement;
31
32        fn gen_decryption_share(&self, c: &<Mat as Matrix>::R) -> Self::DecryptionShare {
33            BoolEvaluator::with_local(|e| e.multi_party_decryption_share(c, self))
34        }
35
36        fn aggregate_decryption_shares(
37            &self,
38            c: &<Mat as Matrix>::R,
39            shares: &[Self::DecryptionShare],
40        ) -> bool {
41            BoolEvaluator::with_local(|e| e.multi_party_decrypt(shares, c))
42        }
43    }
44}