diff --git a/src/bool/evaluator.rs b/src/bool/evaluator.rs index 0b221dd..afd7b5d 100644 --- a/src/bool/evaluator.rs +++ b/src/bool/evaluator.rs @@ -112,7 +112,7 @@ impl NonInteractiveMultiPartyCrs { // puncture user_i times let mut out = S::default(); - for _ in 0..user_i { + for _ in 0..user_i + 1 { RandomFill::::random_fill(&mut p_rng, &mut out); } @@ -892,7 +892,7 @@ where key_shares: &[NonInteractiveMultiPartyServerKeyShare], ) -> Vec where - M: Clone, + M: Clone + Debug, { let rlwe_modop = &self.pbs_info().rlwe_modop; let nttop = &self.pbs_info().rlwe_nttop; @@ -907,6 +907,9 @@ where .iter() .map(|share| { let mut useri_ui_to_s_ksk = share.ui_to_s_ksk.clone(); + assert!( + useri_ui_to_s_ksk.dimension() == (ui_to_s_ksk_decomposition_count.0, ring_size) + ); key_shares .iter() .filter(|x| x.user_index != share.user_index) @@ -946,14 +949,18 @@ where cr_seed.ui_to_s_ks_seed_for_user_i::(share.user_index), ); let mut ais = M::zeros(ui_to_s_ksk_decomposition_count.0, ring_size); + + println!("START {}...", share.user_index); ais.iter_rows_mut().for_each(|r_ai| { RandomFillUniformInModulus::random_fill( &mut ksk_prng, rlwe_q, r_ai.as_mut(), ); + println!("{:?}", r_ai.as_ref()); nttop.forward(r_ai.as_mut()) }); + println!("...END {}", share.user_index); ais }) .collect_vec(); @@ -988,6 +995,9 @@ where ring_size, ); + // set temp_space to all zeros + tmp_space.as_mut().fill(M::MatElement::zero()); + // a_i*s + E key_shares.iter().for_each(|s| { rlwe_modop.elwise_add_mut( @@ -1343,6 +1353,7 @@ where let mut p_rng = DefaultSecureRng::new_seeded( cr_seed.ui_to_s_ks_seed_for_user_i::(self_index), ); + non_interactive_ksk_gen::( client_key.sk_rlwe().values(), client_key.sk_u_rlwe().values(), @@ -3108,6 +3119,7 @@ mod tests { let mut neg_s_poly_eval = s_poly.clone(); rlwe_modop.elwise_neg_mut(&mut neg_s_poly_eval); nttop.forward(neg_s_poly_eval.as_mut()); + rgsw_cts.iter().enumerate().for_each(|(s_index, ct)| { // X^{lwe_s[i]} let mut m = vec![0u64; ring_size]; @@ -3125,7 +3137,7 @@ mod tests { // RLWE'(-sm) gadget_vec_a.iter().enumerate().for_each(|(index, beta)| { // RLWE(\beta -sm) - + dbg!(beta); // \beta * -sX^[lwe_s[i]] let mut beta_neg_sm = neg_sm.clone(); rlwe_modop.elwise_scalar_mul_mut(&mut beta_neg_sm, beta); @@ -3138,6 +3150,7 @@ mod tests { // decrypt let mut m_out = vec![0u64; ring_size]; decrypt_rlwe(&rlwe, &ideal_rlwe, &mut m_out, nttop, rlwe_modop); + // println!("{:?}", &beta_neg_sm); let mut diff = m_out; rlwe_modop.elwise_sub_mut(&mut diff, &beta_neg_sm); diff --git a/src/bool/parameters.rs b/src/bool/parameters.rs index 4e603ab..c251f47 100644 --- a/src/bool/parameters.rs +++ b/src/bool/parameters.rs @@ -504,7 +504,7 @@ pub(crate) const SMALL_MP_BOOL_PARAMS: BoolParameters = BoolParameters:: = BoolParameters:: { rlwe_q: CiphertextModulus::new_non_native(36028797018820609), lwe_q: CiphertextModulus::new_non_native(1 << 20), - br_q: 1 << 11, + br_q: 1 << 12, rlwe_n: PolynomialSize(1 << 11), lwe_n: LweDimension(10), lwe_decomposer_params: (DecompostionLogBase(4), DecompositionCount(5)), diff --git a/src/multi_party.rs b/src/multi_party.rs index 48c4798..206d410 100644 --- a/src/multi_party.rs +++ b/src/multi_party.rs @@ -1,3 +1,5 @@ +use std::fmt::Debug; + use itertools::izip; use crate::{ @@ -143,7 +145,7 @@ pub(crate) fn non_interactive_ksk_gen< ) -> M where ::R: RowMut + TryConvertFrom1<[S], ModOp::M> + RowEntity, - M::MatElement: Copy, + M::MatElement: Copy + Debug, { assert_eq!(s.len(), u.len()); @@ -159,10 +161,13 @@ where let mut scratch_space = M::R::zeros(ring_size); + println!("START KSK..."); izip!(ksk.iter_rows_mut(), gadget_vec.iter()).for_each(|(e_ksk, beta)| { // sample a_i RandomFillUniformInModulus::random_fill(p_rng, q, e_ksk.as_mut()); + println!("{:?}", e_ksk.as_ref()); + // a_i * s + e + beta u nttop.forward(e_ksk.as_mut()); modop.elwise_mul_mut(e_ksk.as_mut(), s_poly_eval.as_ref()); @@ -176,6 +181,7 @@ where // a_i * s + e + \beta * u modop.elwise_add_mut(e_ksk.as_mut(), scratch_space.as_ref()); }); + println!("...END"); ksk } @@ -197,7 +203,7 @@ pub(crate) fn non_interactive_ksk_zero_encryptions_for_other_party_i< ) -> M where ::R: RowMut + TryConvertFrom1<[S], ModOp::M> + RowEntity, - M::MatElement: Copy, + M::MatElement: Copy + Debug, { let q = modop.modulus(); let d = gadget_vec.len(); @@ -211,9 +217,11 @@ where let mut scratch_space = M::R::zeros(ring_size); + println!("START KSK 0 ENC..."); izip!(zero_encs.iter_rows_mut()).for_each(|(e_zero)| { // sample a_i RandomFillUniformInModulus::random_fill(p_rng, q, e_zero.as_mut()); + println!("{:?}", e_zero.as_ref()); // a_i * s + e nttop.forward(e_zero.as_mut()); @@ -223,5 +231,7 @@ where RandomFillGaussianInModulus::random_fill(rng, q, scratch_space.as_mut()); modop.elwise_add_mut(e_zero.as_mut(), scratch_space.as_ref()); }); + println!("...END"); + zero_encs }