From 30b5edc5360fe15a7be233726a5f6b328c26a637 Mon Sep 17 00:00:00 2001 From: Janmajaya Mall Date: Fri, 4 Jul 2025 17:32:19 +0530 Subject: [PATCH] Fix `glwe/test_fft64/encrypt_sk` for case `k_pt < basek` --- core/src/glwe/test_fft64/encryption.rs | 29 ++++++++++++++++++-------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/core/src/glwe/test_fft64/encryption.rs b/core/src/glwe/test_fft64/encryption.rs index 2d82575..bba9e4d 100644 --- a/core/src/glwe/test_fft64/encryption.rs +++ b/core/src/glwe/test_fft64/encryption.rs @@ -8,8 +8,10 @@ use crate::{FourierGLWECiphertext, FourierGLWESecret, GLWECiphertext, GLWEPlaint fn encrypt_sk() { let log_n: usize = 8; (1..4).for_each(|rank| { - println!("test encrypt_sk rank: {}", rank); - test_encrypt_sk(log_n, 8, 54, 30, 3.2, rank); + [2, 10, 30].iter().for_each(|k_pt| { + println!("test encrypt_sk rank: {}, k_pt: {k_pt}", rank); + test_encrypt_sk(log_n, 8, 54, *k_pt, 3.2, rank); + }); }); } @@ -51,12 +53,21 @@ fn test_encrypt_sk(log_n: usize, basek: usize, k_ct: usize, k_pt: usize, sigma: let sk_dft: FourierGLWESecret, FFT64> = FourierGLWESecret::from(&module, &sk); let mut data_want: Vec = vec![0i64; module.n()]; - - data_want - .iter_mut() - .for_each(|x| *x = source_xa.next_i64() & 0xFF); - - pt.data.encode_vec_i64(0, basek, k_pt, &data_want, 10); + if k_pt < 64 { + let pt_max = 1 << k_pt; + data_want.iter_mut().for_each(|x| { + let v = source_xa.next_u64n(pt_max, pt_max - 1); + *x = if v >= pt_max / 2 { + -((pt_max - v) as i64) + } else { + v as i64 + }; + }); + } else { + data_want.iter_mut().for_each(|x| *x = source_xa.next_i64()); + } + pt.data + .encode_vec_i64(0, basek, k_pt, &data_want, std::cmp::min(k_pt, 64)); ct.encrypt_sk( &module, @@ -83,7 +94,7 @@ fn test_encrypt_sk(log_n: usize, basek: usize, k_ct: usize, k_pt: usize, sigma: let b_scaled = (*b as f64) / scale; assert!( (*a as f64 - b_scaled).abs() < 0.1, - "{} {}", + "a={} b={}", *a as f64, b_scaled )