From 69f92c2e1bcad28f443409cba233f32f4a5a8391 Mon Sep 17 00:00:00 2001 From: Sam Hadow Date: Wed, 30 Apr 2025 18:10:01 +0200 Subject: [PATCH] encryption working independently of theta --- Cargo.toml | 3 +++ src/dghv_asym.rs | 13 +++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index cd4ebd7..6f35c36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,6 @@ edition = "2021" [dependencies] rand = "0.9.1" rug = "1.27.0" + +[dev-dependencies] +rayon = "1.10.0" diff --git a/src/dghv_asym.rs b/src/dghv_asym.rs index 22b6e50..f3355e3 100644 --- a/src/dghv_asym.rs +++ b/src/dghv_asym.rs @@ -40,10 +40,13 @@ pub fn encrypt_bit_asym(m: u8, pk: &PublicKey, rho: u32) -> Integer { let mut rng = StdRng::from_os_rng(); let x0 = &pk.xs[0]; + let num_keys = &pk.xs.len(); + let proba: f64 = 2f64 / (*num_keys as f64); + // random x_i let mut sum = Integer::from(0); for x in pk.xs.iter().skip(1) { - if rng.random_bool(0.1) { + if rng.random_bool(proba) { sum += x; } } @@ -84,18 +87,20 @@ mod tests { #[test] fn test_encrypt_decrypt_bit() { + use rayon::prelude::*; + let eta: u32 = 10000; let gamma: u32 = 11000; - let theta: usize = 20; + let theta: usize = 50; let rho: u32 = 128; - for _ in 0..=255 { + (0..=127).into_par_iter().for_each(|_| { let (sk, pk) = generate_keys(gamma, eta, rho, theta); for &m in &[0u8, 1u8] { let c = encrypt_bit_asym(m, &pk, rho); let m2 = decrypt_bit(&c, &sk.p); assert_eq!(m, m2); } - } + }); } }