put gadget_vector inside decomposer

This commit is contained in:
Janmajaya Mall
2024-05-16 13:48:30 +05:30
parent c1018f80d4
commit ad5d00241c
5 changed files with 30 additions and 43 deletions

View File

@@ -10,7 +10,7 @@ use num_traits::{FromPrimitive, Num, One, PrimInt, ToPrimitive, WrappingSub, Zer
use crate::{
backend::{ArithmeticOps, ModInit, ModularOpsU64, VectorOps},
decomposer::{gadget_vector, Decomposer, DefaultDecomposer, NumInfo},
decomposer::{Decomposer, DefaultDecomposer, NumInfo},
lwe::{decrypt_lwe, encrypt_lwe, lwe_key_switch, lwe_ksk_keygen, measure_noise_lwe, LweSecret},
multi_party::public_key_share,
ntt::{self, Ntt, NttBackendU64, NttInit},
@@ -715,11 +715,7 @@ where
let sk_rlwe = &client_key.sk_rlwe;
let sk_lwe = &client_key.sk_lwe;
let d_rgsw_gadget_vec = gadget_vector(
self.parameters.rlwe_logq,
self.parameters.logb_rgsw,
self.parameters.d_rgsw,
);
let d_rgsw_gadget_vec = self.decomposer_rlwe.gadget_vector();
// generate auto keys -g, g
let mut auto_keys = HashMap::new();
@@ -775,11 +771,7 @@ where
.collect_vec();
// LWE KSK from RLWE secret s -> LWE secret z
let d_lwe_gadget = gadget_vector(
self.parameters.lwe_logq,
self.parameters.logb_lwe,
self.parameters.d_lwe,
);
let d_lwe_gadget = self.decomposer_lwe.gadget_vector();
let mut lwe_ksk = M::R::zeros(self.parameters.d_lwe * ring_size);
lwe_ksk_keygen(
@@ -822,8 +814,7 @@ where
let rlwe_q = self.parameters.rlwe_q;
let lwe_q = self.parameters.lwe_q;
let d_rgsw_gadget_vec =
gadget_vector(self.parameters.rlwe_logq, self.parameters.logb_rgsw, d_rgsw);
let d_rgsw_gadget_vec = self.decomposer_rlwe.gadget_vector();
let rlweq_modop = ModOp::new(rlwe_q);
let rlweq_nttop = NttOp::new(rlwe_q, ring_size);
@@ -887,8 +878,7 @@ where
// LWE ksk
let mut lwe_ksk = M::R::zeros(d_lwe * ring_size);
let lwe_modop = ModOp::new(lwe_q);
let d_lwe_gadget_vec =
gadget_vector(self.parameters.lwe_logq, self.parameters.logb_lwe, d_lwe);
let d_lwe_gadget_vec = self.decomposer_lwe.gadget_vector();
lwe_ksk_keygen(
sk_rlwe.values(),
sk_lwe.values(),
@@ -1944,8 +1934,10 @@ mod tests {
let lwe_q = 1 << lwe_logq;
let d_lwe = 1;
let logb_lwe = 6;
let lwe_gadgect_vec = gadget_vector(lwe_logq, logb_lwe, d_lwe);
let lweq_modop = ModularOpsU64::new(lwe_q);
let decomposer = DefaultDecomposer::new(lwe_q, logb_lwe, d_lwe);
let lwe_gadgect_vec = decomposer.gadget_vector();
let logp = 2;
let from_lwe_n = 2048;
@@ -2020,7 +2012,6 @@ mod tests {
// Key switch
let lwe_ct_key_switched = {
let mut lwe_ct_key_switched = vec![0u64; to_lwe_n + 1];
let decomposer = DefaultDecomposer::new(lwe_q, logb_lwe, d_lwe);
lwe_key_switch(
&mut lwe_ct_key_switched,
&lwe_ct,
@@ -2214,12 +2205,7 @@ mod tests {
// Measure noise in RGSW ciphertexts of ideal LWE secrets
if true {
let gadget_vec = gadget_vector(
bool_evaluator.parameters.rlwe_logq,
bool_evaluator.parameters.logb_rgsw,
bool_evaluator.parameters.d_rgsw,
);
let gadget_vec = rlwe_decomposer.gadget_vector();
for i in 0..20 {
// measure noise in RGSW(s[i])
let si =
@@ -2548,11 +2534,7 @@ mod tests {
let rlwe_nttop = &bool_evaluator.rlwe_nttop;
let rlwe_modop = &bool_evaluator.rlwe_modop;
let rlwe_decomposer = &bool_evaluator.decomposer_rlwe;
let rlwe_gadget_vector = gadget_vector(
bool_evaluator.parameters.rlwe_logq,
bool_evaluator.parameters.logb_rgsw,
d_rgsw,
);
let rlwe_gadget_vector = rlwe_decomposer.gadget_vector();
let parties = (0..no_of_parties)
.map(|_| bool_evaluator.client_key())