diff --git a/src/bool/evaluator.rs b/src/bool/evaluator.rs index 01831fe..8bae269 100644 --- a/src/bool/evaluator.rs +++ b/src/bool/evaluator.rs @@ -1384,75 +1384,8 @@ mod tests { let m_out = !(m0 && m1); - // Trace and measure PBS noise - { - let noise0 = { - let ideal = if m0 { - bool_evaluator.pbs_info.parameters.rlwe_q().true_el() - } else { - bool_evaluator.pbs_info.parameters.rlwe_q().false_el() - }; - let n = measure_noise_lwe( - &ct0, - client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - &ideal, - ); - let v = decrypt_lwe( - &ct0, - client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - ); - (n, v) - }; - let noise1 = { - let ideal = if m1 { - bool_evaluator.pbs_info.parameters.rlwe_q().true_el() - } else { - bool_evaluator.pbs_info.parameters.rlwe_q().false_el() - }; - let n = measure_noise_lwe( - &ct1, - client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - &ideal, - ); - let v = decrypt_lwe( - &ct1, - client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - ); - (n, v) - }; - - // Calculate noise in ciphertext post PBS - let noise_out = { - let ideal = if m_out { - bool_evaluator.pbs_info.parameters.rlwe_q().true_el() - } else { - bool_evaluator.pbs_info.parameters.rlwe_q().false_el() - }; - let n = measure_noise_lwe( - &ct_back, - client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - &ideal, - ); - let v = decrypt_lwe( - &ct_back, - client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - ); - (n, v) - }; - dbg!(m0, m1, m_out); - println!( - "ct0 (noise, message): {:?} \n ct1 (noise, message): {:?} \n PBS (noise, message): {:?}", noise0, noise1, noise_out - ); - } let m_back = bool_evaluator.sk_decrypt(&ct_back, &client_key); assert!(m_out == m_back, "Expected {m_out}, got {m_back}"); - println!("----------"); m1 = m0; m0 = m_out; @@ -1521,8 +1454,6 @@ mod tests { }); }); - println!("{:?}", &ideal_rlwe_sk); - let mut m = true; for i in 0..100 { let pk_cr_seed = [0u8; 32]; @@ -1709,81 +1640,6 @@ mod tests { let m_expected = !(m0 & m1); - // measure noise - { - let noise0 = { - let ideal = if m0 { - bool_evaluator.pbs_info.rlwe_q().true_el() - } else { - bool_evaluator.pbs_info.rlwe_q().false_el() - }; - let n = measure_noise_lwe( - &lwe0, - ideal_client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - &ideal, - ); - let v = decrypt_lwe( - &lwe0, - ideal_client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - ); - (n, v) - }; - let noise1 = { - let ideal = if m1 { - bool_evaluator.pbs_info.rlwe_q().true_el() - } else { - bool_evaluator.pbs_info.rlwe_q().false_el() - }; - let n = measure_noise_lwe( - &lwe1, - ideal_client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - &ideal, - ); - let v = decrypt_lwe( - &lwe1, - ideal_client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - ); - (n, v) - }; - - // // Trace PBS - // PBSTracer::with_local(|t| { - // t.trace( - // &MP_BOOL_PARAMS, - // &ideal_client_key.sk_lwe.values(), - // &ideal_client_key.sk_rlwe.values(), - // ) - // }); - - let noise_out = { - let ideal_m = if m_expected { - bool_evaluator.pbs_info.rlwe_q().true_el() - } else { - bool_evaluator.pbs_info.rlwe_q().false_el() - }; - let n = measure_noise_lwe( - &lwe_out, - ideal_client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - &ideal_m, - ); - let v = decrypt_lwe( - &lwe_out, - ideal_client_key.sk_rlwe().values(), - &bool_evaluator.pbs_info.rlwe_modop, - ); - (n, v) - }; - dbg!(m0, m1, m_expected); - println!( - "ct0 (noise, message): {:?} \n ct1 (noise, message): {:?} \n PBS (noise, message): {:?}", noise0, noise1, noise_out - ); - } - // multi-party decrypt let decryption_shares = parties .iter() diff --git a/src/bool/noise.rs b/src/bool/noise.rs index c422a73..f73fc8a 100644 --- a/src/bool/noise.rs +++ b/src/bool/noise.rs @@ -92,28 +92,15 @@ mod test { let mut c_m0 = evaluator.pk_encrypt(pk.key(), m0); let mut c_m1 = evaluator.pk_encrypt(pk.key(), m1); - // println!( - // "Evaluator ciphertext modulus: {:?}", - // evaluator.parameters().rlwe_q() - // ); - - // { - // // let v = LWE_VEC.take(); - // let added = decrypt_lwe( - // &c_m1, - // ideal_client_key.sk_rlwe().values(), - // evaluator.pbs_info().modop_rlweq(), - // ); - // println!("Of interest {added}"); - // } - let true_el_encoded = evaluator.parameters().rlwe_q().true_el(); let false_el_encoded = evaluator.parameters().rlwe_q().false_el(); let mut stats = Stats::new(); for _ in 0..1000 { + // let now = std::time::Instant::now(); let c_out = evaluator.xor(&c_m0, &c_m1, &server_key_eval_domain); + // println!("Gate time: {:?}", now.elapsed()); // mp decrypt let decryption_shares = cks diff --git a/src/decomposer.rs b/src/decomposer.rs index e851efc..5146628 100644 --- a/src/decomposer.rs +++ b/src/decomposer.rs @@ -169,7 +169,7 @@ fn round_value(value: T, ignore_bits: usize) -> T { #[cfg(test)] mod tests { - use num_traits::Float; + use rand::{thread_rng, Rng}; use crate::{