add modulus operator for power of 2 modulus

This commit is contained in:
Janmajaya Mall
2024-06-11 16:39:16 +05:30
parent 691d662aa8
commit 1a2fc7a6b4
7 changed files with 135 additions and 18 deletions

View File

@@ -12,14 +12,14 @@ use keys::*;
use parameters::*;
use crate::{
backend::ModularOpsU64,
backend::{ModularOpsU64, ModulusPowerOf2},
ntt::NttBackendU64,
random::{DefaultSecureRng, NewWithSeed},
utils::{Global, WithLocal},
};
thread_local! {
static BOOL_EVALUATOR: RefCell<Option<BoolEvaluator<Vec<Vec<u64>>, NttBackendU64, ModularOpsU64<CiphertextModulus<u64>>, ModularOpsU64<CiphertextModulus<u64>>, ShoupServerKeyEvaluationDomain<Vec<Vec<u64>>>>>> = RefCell::new(None);
static BOOL_EVALUATOR: RefCell<Option<BoolEvaluator<Vec<Vec<u64>>, NttBackendU64, ModularOpsU64<CiphertextModulus<u64>>, ModulusPowerOf2<CiphertextModulus<u64>>, ShoupServerKeyEvaluationDomain<Vec<Vec<u64>>>>>> = RefCell::new(None);
}
static BOOL_SERVER_KEY: OnceLock<ShoupServerKeyEvaluationDomain<Vec<Vec<u64>>>> = OnceLock::new();
@@ -138,7 +138,7 @@ impl WithLocal
Vec<Vec<u64>>,
NttBackendU64,
ModularOpsU64<CiphertextModulus<u64>>,
ModularOpsU64<CiphertextModulus<u64>>,
ModulusPowerOf2<CiphertextModulus<u64>>,
ShoupServerKeyEvaluationDomain<Vec<Vec<u64>>>,
>
{

View File

@@ -2,7 +2,7 @@ mod test {
use itertools::{izip, Itertools};
use crate::{
backend::{ArithmeticOps, ModularOpsU64, Modulus},
backend::{ArithmeticOps, ModularOpsU64, Modulus, ModulusPowerOf2},
bool::{
set_parameter_set, BoolEncoding, BoolEvaluator, BooleanGates, CiphertextModulus,
ClientKey, PublicKey, ServerKeyEvaluationDomain, ShoupServerKeyEvaluationDomain,
@@ -24,7 +24,7 @@ mod test {
Vec<Vec<u64>>,
NttBackendU64,
ModularOpsU64<CiphertextModulus<u64>>,
ModularOpsU64<CiphertextModulus<u64>>,
ModulusPowerOf2<CiphertextModulus<u64>>,
ShoupServerKeyEvaluationDomain<Vec<Vec<u64>>>,
>::new(SMALL_MP_BOOL_PARAMS);
@@ -103,9 +103,9 @@ mod test {
// let mut stats = Stats::new();
for _ in 0..1000 {
// let now = std::time::Instant::now();
let now = std::time::Instant::now();
let c_out = evaluator.xor(&c_m0, &c_m1, &runtime_server_key);
// println!("Gate time: {:?}", now.elapsed());
println!("Gate time: {:?}", now.elapsed());
// mp decrypt
let decryption_shares = cks