mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-11 15:48:20 -05:00
Compare commits
7 Commits
backup/sum
...
jb/experim
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
066b4ed993 | ||
|
|
3d74cb9980 | ||
|
|
59394a46b5 | ||
|
|
77801db6fe | ||
|
|
580f4f6c6d | ||
|
|
05ec1eaed6 | ||
|
|
649c2c1ccd |
@@ -9,6 +9,7 @@ def main(args):
|
||||
|
||||
data = []
|
||||
for json_file in sorted(criterion_dir.glob("**/*.json")):
|
||||
# print(json_file)
|
||||
if json_file.parent.name == "base" or json_file.name != "benchmark.json":
|
||||
continue
|
||||
|
||||
@@ -16,23 +17,24 @@ def main(args):
|
||||
bench_data = json.loads(json_file.read_text())
|
||||
estimate_file = json_file.with_name("estimates.json")
|
||||
estimate_data = json.loads(estimate_file.read_text())
|
||||
parameter_set = json_file.parent.parent.name
|
||||
|
||||
bench_function_id = bench_data["function_id"]
|
||||
# bench_function_id = bench_data["function_id"]
|
||||
|
||||
split = bench_function_id.split("::")
|
||||
if split.len() == 5: # Signed integers
|
||||
(_, _, function_name, parameter_set, bits) = split
|
||||
else: # Unsigned integers
|
||||
(_, function_name, parameter_set, bits) = split
|
||||
# split = bench_function_id.split("::")
|
||||
# if split.len() == 5: # Signed integers
|
||||
# (_, _, function_name, parameter_set, bits) = split
|
||||
# else: # Unsigned integers
|
||||
# (_, function_name, parameter_set, bits) = split
|
||||
|
||||
if "_scalar_" in bits:
|
||||
(bits, scalar) = bits.split("_bits_scalar_")
|
||||
bits = int(bits)
|
||||
scalar = int(scalar)
|
||||
else:
|
||||
(bits, _) = bits.split("_")
|
||||
bits = int(bits)
|
||||
scalar = None
|
||||
# if "_scalar_" in bits:
|
||||
# (bits, scalar) = bits.split("_bits_scalar_")
|
||||
# bits = int(bits)
|
||||
# scalar = int(scalar)
|
||||
# else:
|
||||
# (bits, _) = bits.split("_")
|
||||
# bits = int(bits)
|
||||
# scalar = None
|
||||
|
||||
estimate_mean_ms = estimate_data["mean"]["point_estimate"] / 1000000
|
||||
estimate_lower_bound_ms = (
|
||||
@@ -44,10 +46,10 @@ def main(args):
|
||||
|
||||
data.append(
|
||||
(
|
||||
function_name,
|
||||
# bench_function_id,
|
||||
parameter_set,
|
||||
bits,
|
||||
scalar,
|
||||
# bits,
|
||||
# scalar,
|
||||
estimate_mean_ms,
|
||||
estimate_lower_bound_ms,
|
||||
estimate_upper_bound_ms,
|
||||
@@ -62,7 +64,7 @@ def main(args):
|
||||
|
||||
with open(output_file, "w", encoding="utf-8") as output:
|
||||
output.write(
|
||||
"function_name,parameter_set,bits,scalar,mean_ms,"
|
||||
"parameter_set,mean_ms,"
|
||||
"confidence_interval_lower_bound_ms,confidence_interval_upper_bound_ms\n"
|
||||
)
|
||||
# Sort by func_name, bit width and then parameters
|
||||
@@ -70,16 +72,15 @@ def main(args):
|
||||
|
||||
for dat in data:
|
||||
(
|
||||
function_name,
|
||||
parameter_set,
|
||||
bits,
|
||||
scalar,
|
||||
# bits,
|
||||
# scalar,
|
||||
estimate_mean_ms,
|
||||
estimate_lower_bound_ms,
|
||||
estimate_upper_bound_ms,
|
||||
) = dat
|
||||
output.write(
|
||||
f"{function_name},{parameter_set},{bits},{scalar},{estimate_mean_ms},"
|
||||
f"{parameter_set},{estimate_mean_ms},"
|
||||
f"{estimate_lower_bound_ms},{estimate_upper_bound_ms}\n"
|
||||
)
|
||||
|
||||
|
||||
18
params_bc.py
Normal file
18
params_bc.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import itertools
|
||||
|
||||
def main():
|
||||
msg_carry_bits = [1, 2, 3, 4]
|
||||
security = list(range(128, 139))
|
||||
p_fails = [40, 64, 80, 128]
|
||||
|
||||
for (msg_carry_bit, sec, p_fail) in itertools.product(msg_carry_bits, security, p_fails):
|
||||
print(f"PARAM_PKE_MESSAGE_{msg_carry_bit}_CARRY_{msg_carry_bit}_{sec}_{p_fail}")
|
||||
print(f"PARAM_FHE_MESSAGE_{msg_carry_bit}_CARRY_{msg_carry_bit}_{sec}_{p_fail}")
|
||||
|
||||
for (msg_carry_bit, sec, p_fail) in itertools.product(msg_carry_bits, security, p_fails):
|
||||
print(f"(PARAM_PKE_MESSAGE_{msg_carry_bit}_CARRY_{msg_carry_bit}_{sec}_{p_fail},"
|
||||
f"PARAM_FHE_MESSAGE_{msg_carry_bit}_CARRY_{msg_carry_bit}_{sec}_{p_fail},"
|
||||
f"PARAM_KEYSWITCH_MESSAGE_{msg_carry_bit}_CARRY_{msg_carry_bit}_{sec}_{p_fail})")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -50,26 +50,38 @@ struct GroupElements<G: Curve> {
|
||||
}
|
||||
|
||||
impl<G: Curve> GroupElements<G> {
|
||||
pub fn new(message_len: usize, alpha: G::Zp) -> Self {
|
||||
let mut g_list = Vec::new();
|
||||
let mut g_hat_list = Vec::new();
|
||||
pub fn new(message_len: usize, _alpha: G::Zp) -> Self {
|
||||
let (g_list, g_hat_list) = rayon::join(
|
||||
|| {
|
||||
let mut g_list = Vec::new();
|
||||
|
||||
let mut g_cur = G::G1::GENERATOR.mul_scalar(alpha);
|
||||
// let mut g_cur = G::G1::GENERATOR.mul_scalar(alpha);
|
||||
let mut g_cur = G::G1::GENERATOR + G::G1::GENERATOR;
|
||||
|
||||
for i in 0..2 * message_len {
|
||||
if i == message_len {
|
||||
g_list.push(G::G1::ZERO);
|
||||
} else {
|
||||
g_list.push(g_cur);
|
||||
}
|
||||
g_cur = g_cur.mul_scalar(alpha);
|
||||
}
|
||||
for i in 0..2 * message_len {
|
||||
if i == message_len {
|
||||
g_list.push(G::G1::ZERO);
|
||||
} else {
|
||||
g_list.push(g_cur);
|
||||
}
|
||||
// g_cur = g_cur.mul_scalar(alpha);
|
||||
g_cur = g_cur + g_cur;
|
||||
}
|
||||
|
||||
let mut g_hat_cur = G::G2::GENERATOR.mul_scalar(alpha);
|
||||
for _ in 0..message_len {
|
||||
g_hat_list.push(g_hat_cur);
|
||||
g_hat_cur = (g_hat_cur).mul_scalar(alpha);
|
||||
}
|
||||
g_list
|
||||
},
|
||||
|| {
|
||||
let mut g_hat_list = Vec::new();
|
||||
// let mut g_hat_cur = G::G2::GENERATOR.mul_scalar(alpha);
|
||||
let mut g_hat_cur = G::G2::GENERATOR + G::G2::GENERATOR;
|
||||
for _ in 0..message_len {
|
||||
g_hat_list.push(g_hat_cur);
|
||||
// g_hat_cur = (g_hat_cur).mul_scalar(alpha);
|
||||
g_hat_cur = g_hat_cur + g_hat_cur;
|
||||
}
|
||||
g_hat_list
|
||||
},
|
||||
);
|
||||
|
||||
Self {
|
||||
g_list: OneBased::new(g_list),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -65,8 +65,8 @@ where
|
||||
lwe_dimension: Some(params.lwe_dimension()),
|
||||
glwe_dimension: Some(params.glwe_dimension()),
|
||||
polynomial_size: Some(params.polynomial_size()),
|
||||
lwe_std_dev: Some(params.lwe_noise_distribution().gaussian_std_dev()),
|
||||
glwe_std_dev: Some(params.glwe_noise_distribution().gaussian_std_dev()),
|
||||
lwe_std_dev: None,
|
||||
glwe_std_dev: None,
|
||||
pbs_base_log: Some(params.pbs_base_log()),
|
||||
pbs_level: Some(params.pbs_level()),
|
||||
ks_base_log: Some(params.ks_base_log()),
|
||||
|
||||
@@ -1,3 +1,16 @@
|
||||
use crate::integer::key_switching_key::KeySwitchingKey;
|
||||
use crate::integer::keycache::KEY_CACHE;
|
||||
use crate::integer::{
|
||||
gen_keys, ClientKey, CompactPublicKey, CompressedPublicKey, IntegerCiphertext, IntegerKeyKind,
|
||||
PublicKey, RadixCiphertext, RadixClientKey, ServerKey,
|
||||
};
|
||||
use crate::shortint::engine::ShortintEngine;
|
||||
use crate::shortint::parameters::bc::*;
|
||||
use crate::shortint::parameters::ShortintKeySwitchingParameters;
|
||||
use crate::shortint::prelude::PARAM_MESSAGE_2_CARRY_2_KS_PBS;
|
||||
use crate::shortint::server_key::apply_programmable_bootstrap;
|
||||
use crate::shortint::ClassicPBSParameters;
|
||||
|
||||
macro_rules! create_parametrized_test {
|
||||
(
|
||||
$name:ident {
|
||||
@@ -74,3 +87,291 @@ macro_rules! create_parametrized_test_classical_params {
|
||||
};
|
||||
}
|
||||
pub(crate) use {create_parametrized_test, create_parametrized_test_classical_params};
|
||||
|
||||
fn pke_ap(
|
||||
param_pke: ClassicPBSParameters,
|
||||
param_fhe: ClassicPBSParameters,
|
||||
param_ksk: ShortintKeySwitchingParameters,
|
||||
) {
|
||||
let num_block = 4usize;
|
||||
|
||||
// let param_pke = PARAM_MESSAGE_2_CARRY_2_KS_PBS;
|
||||
// let param_fhe = PARAM_MESSAGE_2_CARRY_2_KS_PBS;
|
||||
// let param_ksk = ShortintKeySwitchingParameters::new(param_fhe.ks_base_log,
|
||||
// param_fhe.ks_level);
|
||||
|
||||
// let (cks_pke, sks_pke) = gen_keys(param_pke, IntegerKeyKind::Radix);
|
||||
// let pk = crate::integer::public_key::CompactPublicKey::new(&cks_pke);
|
||||
|
||||
// let (cks_fhe, sks_fhe) = gen_keys(param_fhe, IntegerKeyKind::Radix);
|
||||
|
||||
assert_eq!(param_pke.message_modulus, param_fhe.message_modulus);
|
||||
assert_eq!(param_pke.carry_modulus, param_fhe.carry_modulus);
|
||||
|
||||
let modulus = dbg!(param_fhe.message_modulus.0.pow(num_block as u32) as u64);
|
||||
|
||||
let cks_pke = ClientKey::new(param_pke);
|
||||
let sks_pke = ServerKey::new_radix_server_key(&cks_pke);
|
||||
let pk = CompactPublicKey::new(&cks_pke);
|
||||
|
||||
let cks_fhe = ClientKey::new(param_fhe);
|
||||
let sks_fhe = ServerKey::new_radix_server_key(&cks_fhe);
|
||||
|
||||
let ksk = KeySwitchingKey::new((&cks_pke, &sks_pke), (&cks_fhe, &sks_fhe), param_ksk);
|
||||
|
||||
use rand::Rng;
|
||||
let mut rng = rand::thread_rng();
|
||||
|
||||
let input_msg: u64 = dbg!(rng.gen_range(0..modulus));
|
||||
|
||||
// Encrypt a value and cast
|
||||
let ct1 = pk.encrypt_radix_compact(input_msg, num_block);
|
||||
let ct1_extracted: &RadixCiphertext = &ct1.expand()[0];
|
||||
|
||||
let sanity_extracted: u64 = cks_pke.decrypt_radix(&ct1_extracted);
|
||||
assert_eq!(sanity_extracted, input_msg);
|
||||
|
||||
// KSK Cast
|
||||
let ct_cast = ksk.cast(ct1_extracted);
|
||||
let mut ct2: RadixCiphertext = sks_fhe.create_trivial_radix(0u64, ct_cast.blocks().len());
|
||||
|
||||
// PBS to clean
|
||||
let acc = sks_fhe.key.generate_lookup_table(|x| x);
|
||||
for (input, output) in ct_cast.blocks().iter().zip(ct2.blocks_mut()) {
|
||||
ShortintEngine::with_thread_local_mut(|engine| {
|
||||
let (_, buffers) = engine.get_buffers(&sks_fhe.key);
|
||||
apply_programmable_bootstrap(
|
||||
&sks_fhe.key.bootstrapping_key,
|
||||
&input.ct,
|
||||
&mut output.ct,
|
||||
&acc,
|
||||
buffers,
|
||||
);
|
||||
});
|
||||
output.degree = input.degree;
|
||||
|
||||
// sks_fhe.key.apply_lookup_table_assign(blocks, &acc)
|
||||
}
|
||||
|
||||
let sanity_pbs: u64 = cks_fhe.decrypt_radix(&ct2);
|
||||
assert_eq!(sanity_pbs, input_msg);
|
||||
|
||||
let multiplier = dbg!(rng.gen_range(0..modulus));
|
||||
|
||||
// Classical AP: DP, KS, PBS
|
||||
sks_fhe.scalar_mul_assign_parallelized(&mut ct2, multiplier);
|
||||
|
||||
{
|
||||
let mut input_fresh = cks_fhe.encrypt_radix(input_msg, num_block);
|
||||
for ct in input_fresh.blocks_mut() {
|
||||
sks_fhe.key.apply_lookup_table_assign(ct, &acc);
|
||||
}
|
||||
sks_fhe.scalar_mul_assign_parallelized(&mut input_fresh, multiplier);
|
||||
// High level decryption and test
|
||||
let clear_fresh = cks_fhe.decrypt_radix::<u64>(&input_fresh) % modulus;
|
||||
//let clear: u64 = cks_fhe.decrypt_radix(&ct1_extracted[0]);
|
||||
assert_eq!(clear_fresh, (input_msg * multiplier) % modulus);
|
||||
}
|
||||
|
||||
// High level decryption and test
|
||||
let clear = cks_fhe.decrypt_radix::<u64>(&ct2) % modulus;
|
||||
//let clear: u64 = cks_fhe.decrypt_radix(&ct1_extracted[0]);
|
||||
assert_eq!(clear, (input_msg * multiplier) % modulus);
|
||||
}
|
||||
|
||||
macro_rules! create_parametrized_test_pke {
|
||||
(
|
||||
$name:ident {
|
||||
$(($param_pke:ident, $param_fhe:ident, $param_ksk:ident)),*
|
||||
$(,)?
|
||||
}
|
||||
) => {
|
||||
::paste::paste! {
|
||||
$(
|
||||
#[test]
|
||||
fn [<test_ $name _ $param_pke:lower _ $param_fhe:lower _ $param_ksk:lower>]() {
|
||||
$name($param_pke, $param_fhe, $param_ksk)
|
||||
}
|
||||
)*
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
create_parametrized_test_pke!(pke_ap {
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_128_40,PARAM_FHE_MESSAGE_1_CARRY_1_128_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_128_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_128_64,PARAM_FHE_MESSAGE_1_CARRY_1_128_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_128_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_128_80,PARAM_FHE_MESSAGE_1_CARRY_1_128_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_128_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_128_128,PARAM_FHE_MESSAGE_1_CARRY_1_128_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_128_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_129_40,PARAM_FHE_MESSAGE_1_CARRY_1_129_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_129_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_129_64,PARAM_FHE_MESSAGE_1_CARRY_1_129_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_129_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_129_80,PARAM_FHE_MESSAGE_1_CARRY_1_129_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_129_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_129_128,PARAM_FHE_MESSAGE_1_CARRY_1_129_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_129_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_130_40,PARAM_FHE_MESSAGE_1_CARRY_1_130_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_130_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_130_64,PARAM_FHE_MESSAGE_1_CARRY_1_130_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_130_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_130_80,PARAM_FHE_MESSAGE_1_CARRY_1_130_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_130_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_130_128,PARAM_FHE_MESSAGE_1_CARRY_1_130_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_130_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_131_40,PARAM_FHE_MESSAGE_1_CARRY_1_131_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_131_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_131_64,PARAM_FHE_MESSAGE_1_CARRY_1_131_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_131_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_131_80,PARAM_FHE_MESSAGE_1_CARRY_1_131_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_131_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_131_128,PARAM_FHE_MESSAGE_1_CARRY_1_131_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_131_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_132_40,PARAM_FHE_MESSAGE_1_CARRY_1_132_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_132_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_132_64,PARAM_FHE_MESSAGE_1_CARRY_1_132_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_132_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_132_80,PARAM_FHE_MESSAGE_1_CARRY_1_132_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_132_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_132_128,PARAM_FHE_MESSAGE_1_CARRY_1_132_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_132_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_133_40,PARAM_FHE_MESSAGE_1_CARRY_1_133_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_133_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_133_64,PARAM_FHE_MESSAGE_1_CARRY_1_133_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_133_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_133_80,PARAM_FHE_MESSAGE_1_CARRY_1_133_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_133_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_133_128,PARAM_FHE_MESSAGE_1_CARRY_1_133_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_133_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_134_40,PARAM_FHE_MESSAGE_1_CARRY_1_134_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_134_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_134_64,PARAM_FHE_MESSAGE_1_CARRY_1_134_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_134_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_134_80,PARAM_FHE_MESSAGE_1_CARRY_1_134_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_134_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_134_128,PARAM_FHE_MESSAGE_1_CARRY_1_134_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_134_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_135_40,PARAM_FHE_MESSAGE_1_CARRY_1_135_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_135_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_135_64,PARAM_FHE_MESSAGE_1_CARRY_1_135_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_135_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_135_80,PARAM_FHE_MESSAGE_1_CARRY_1_135_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_135_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_135_128,PARAM_FHE_MESSAGE_1_CARRY_1_135_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_135_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_136_40,PARAM_FHE_MESSAGE_1_CARRY_1_136_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_136_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_136_64,PARAM_FHE_MESSAGE_1_CARRY_1_136_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_136_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_136_80,PARAM_FHE_MESSAGE_1_CARRY_1_136_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_136_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_136_128,PARAM_FHE_MESSAGE_1_CARRY_1_136_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_136_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_137_40,PARAM_FHE_MESSAGE_1_CARRY_1_137_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_137_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_137_64,PARAM_FHE_MESSAGE_1_CARRY_1_137_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_137_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_137_80,PARAM_FHE_MESSAGE_1_CARRY_1_137_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_137_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_137_128,PARAM_FHE_MESSAGE_1_CARRY_1_137_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_137_128),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_138_40,PARAM_FHE_MESSAGE_1_CARRY_1_138_40,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_138_40),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_138_64,PARAM_FHE_MESSAGE_1_CARRY_1_138_64,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_138_64),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_138_80,PARAM_FHE_MESSAGE_1_CARRY_1_138_80,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_138_80),
|
||||
(PARAM_PKE_MESSAGE_1_CARRY_1_138_128,PARAM_FHE_MESSAGE_1_CARRY_1_138_128,PARAM_KEYSWITCH_MESSAGE_1_CARRY_1_138_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_128_40,PARAM_FHE_MESSAGE_2_CARRY_2_128_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_128_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_128_64,PARAM_FHE_MESSAGE_2_CARRY_2_128_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_128_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_128_80,PARAM_FHE_MESSAGE_2_CARRY_2_128_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_128_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_128_128,PARAM_FHE_MESSAGE_2_CARRY_2_128_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_128_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_129_40,PARAM_FHE_MESSAGE_2_CARRY_2_129_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_129_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_129_64,PARAM_FHE_MESSAGE_2_CARRY_2_129_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_129_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_129_80,PARAM_FHE_MESSAGE_2_CARRY_2_129_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_129_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_129_128,PARAM_FHE_MESSAGE_2_CARRY_2_129_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_129_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_130_40,PARAM_FHE_MESSAGE_2_CARRY_2_130_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_130_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_130_64,PARAM_FHE_MESSAGE_2_CARRY_2_130_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_130_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_130_80,PARAM_FHE_MESSAGE_2_CARRY_2_130_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_130_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_130_128,PARAM_FHE_MESSAGE_2_CARRY_2_130_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_130_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_131_40,PARAM_FHE_MESSAGE_2_CARRY_2_131_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_131_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_131_64,PARAM_FHE_MESSAGE_2_CARRY_2_131_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_131_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_131_80,PARAM_FHE_MESSAGE_2_CARRY_2_131_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_131_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_131_128,PARAM_FHE_MESSAGE_2_CARRY_2_131_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_131_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_132_40,PARAM_FHE_MESSAGE_2_CARRY_2_132_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_132_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_132_64,PARAM_FHE_MESSAGE_2_CARRY_2_132_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_132_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_132_80,PARAM_FHE_MESSAGE_2_CARRY_2_132_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_132_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_132_128,PARAM_FHE_MESSAGE_2_CARRY_2_132_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_132_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_133_40,PARAM_FHE_MESSAGE_2_CARRY_2_133_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_133_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_133_64,PARAM_FHE_MESSAGE_2_CARRY_2_133_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_133_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_133_80,PARAM_FHE_MESSAGE_2_CARRY_2_133_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_133_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_133_128,PARAM_FHE_MESSAGE_2_CARRY_2_133_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_133_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_134_40,PARAM_FHE_MESSAGE_2_CARRY_2_134_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_134_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_134_64,PARAM_FHE_MESSAGE_2_CARRY_2_134_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_134_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_134_80,PARAM_FHE_MESSAGE_2_CARRY_2_134_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_134_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_134_128,PARAM_FHE_MESSAGE_2_CARRY_2_134_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_134_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_135_40,PARAM_FHE_MESSAGE_2_CARRY_2_135_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_135_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_135_64,PARAM_FHE_MESSAGE_2_CARRY_2_135_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_135_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_135_80,PARAM_FHE_MESSAGE_2_CARRY_2_135_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_135_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_135_128,PARAM_FHE_MESSAGE_2_CARRY_2_135_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_135_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_136_40,PARAM_FHE_MESSAGE_2_CARRY_2_136_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_136_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_136_64,PARAM_FHE_MESSAGE_2_CARRY_2_136_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_136_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_136_80,PARAM_FHE_MESSAGE_2_CARRY_2_136_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_136_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_136_128,PARAM_FHE_MESSAGE_2_CARRY_2_136_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_136_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_137_40,PARAM_FHE_MESSAGE_2_CARRY_2_137_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_137_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_137_64,PARAM_FHE_MESSAGE_2_CARRY_2_137_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_137_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_137_80,PARAM_FHE_MESSAGE_2_CARRY_2_137_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_137_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_137_128,PARAM_FHE_MESSAGE_2_CARRY_2_137_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_137_128),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_138_40,PARAM_FHE_MESSAGE_2_CARRY_2_138_40,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_138_40),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_138_64,PARAM_FHE_MESSAGE_2_CARRY_2_138_64,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_138_64),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_138_80,PARAM_FHE_MESSAGE_2_CARRY_2_138_80,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_138_80),
|
||||
(PARAM_PKE_MESSAGE_2_CARRY_2_138_128,PARAM_FHE_MESSAGE_2_CARRY_2_138_128,PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_138_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_128_40,PARAM_FHE_MESSAGE_3_CARRY_3_128_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_128_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_128_64,PARAM_FHE_MESSAGE_3_CARRY_3_128_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_128_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_128_80,PARAM_FHE_MESSAGE_3_CARRY_3_128_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_128_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_128_128,PARAM_FHE_MESSAGE_3_CARRY_3_128_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_128_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_129_40,PARAM_FHE_MESSAGE_3_CARRY_3_129_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_129_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_129_64,PARAM_FHE_MESSAGE_3_CARRY_3_129_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_129_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_129_80,PARAM_FHE_MESSAGE_3_CARRY_3_129_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_129_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_129_128,PARAM_FHE_MESSAGE_3_CARRY_3_129_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_129_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_130_40,PARAM_FHE_MESSAGE_3_CARRY_3_130_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_130_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_130_64,PARAM_FHE_MESSAGE_3_CARRY_3_130_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_130_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_130_80,PARAM_FHE_MESSAGE_3_CARRY_3_130_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_130_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_130_128,PARAM_FHE_MESSAGE_3_CARRY_3_130_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_130_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_131_40,PARAM_FHE_MESSAGE_3_CARRY_3_131_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_131_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_131_64,PARAM_FHE_MESSAGE_3_CARRY_3_131_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_131_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_131_80,PARAM_FHE_MESSAGE_3_CARRY_3_131_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_131_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_131_128,PARAM_FHE_MESSAGE_3_CARRY_3_131_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_131_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_132_40,PARAM_FHE_MESSAGE_3_CARRY_3_132_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_132_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_132_64,PARAM_FHE_MESSAGE_3_CARRY_3_132_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_132_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_132_80,PARAM_FHE_MESSAGE_3_CARRY_3_132_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_132_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_132_128,PARAM_FHE_MESSAGE_3_CARRY_3_132_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_132_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_133_40,PARAM_FHE_MESSAGE_3_CARRY_3_133_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_133_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_133_64,PARAM_FHE_MESSAGE_3_CARRY_3_133_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_133_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_133_80,PARAM_FHE_MESSAGE_3_CARRY_3_133_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_133_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_133_128,PARAM_FHE_MESSAGE_3_CARRY_3_133_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_133_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_134_40,PARAM_FHE_MESSAGE_3_CARRY_3_134_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_134_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_134_64,PARAM_FHE_MESSAGE_3_CARRY_3_134_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_134_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_134_80,PARAM_FHE_MESSAGE_3_CARRY_3_134_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_134_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_134_128,PARAM_FHE_MESSAGE_3_CARRY_3_134_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_134_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_135_40,PARAM_FHE_MESSAGE_3_CARRY_3_135_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_135_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_135_64,PARAM_FHE_MESSAGE_3_CARRY_3_135_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_135_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_135_80,PARAM_FHE_MESSAGE_3_CARRY_3_135_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_135_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_135_128,PARAM_FHE_MESSAGE_3_CARRY_3_135_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_135_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_136_40,PARAM_FHE_MESSAGE_3_CARRY_3_136_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_136_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_136_64,PARAM_FHE_MESSAGE_3_CARRY_3_136_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_136_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_136_80,PARAM_FHE_MESSAGE_3_CARRY_3_136_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_136_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_136_128,PARAM_FHE_MESSAGE_3_CARRY_3_136_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_136_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_137_40,PARAM_FHE_MESSAGE_3_CARRY_3_137_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_137_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_137_64,PARAM_FHE_MESSAGE_3_CARRY_3_137_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_137_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_137_80,PARAM_FHE_MESSAGE_3_CARRY_3_137_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_137_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_137_128,PARAM_FHE_MESSAGE_3_CARRY_3_137_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_137_128),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_138_40,PARAM_FHE_MESSAGE_3_CARRY_3_138_40,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_138_40),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_138_64,PARAM_FHE_MESSAGE_3_CARRY_3_138_64,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_138_64),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_138_80,PARAM_FHE_MESSAGE_3_CARRY_3_138_80,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_138_80),
|
||||
(PARAM_PKE_MESSAGE_3_CARRY_3_138_128,PARAM_FHE_MESSAGE_3_CARRY_3_138_128,PARAM_KEYSWITCH_MESSAGE_3_CARRY_3_138_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_128_40,PARAM_FHE_MESSAGE_4_CARRY_4_128_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_128_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_128_64,PARAM_FHE_MESSAGE_4_CARRY_4_128_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_128_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_128_80,PARAM_FHE_MESSAGE_4_CARRY_4_128_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_128_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_128_128,PARAM_FHE_MESSAGE_4_CARRY_4_128_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_128_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_129_40,PARAM_FHE_MESSAGE_4_CARRY_4_129_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_129_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_129_64,PARAM_FHE_MESSAGE_4_CARRY_4_129_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_129_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_129_80,PARAM_FHE_MESSAGE_4_CARRY_4_129_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_129_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_129_128,PARAM_FHE_MESSAGE_4_CARRY_4_129_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_129_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_130_40,PARAM_FHE_MESSAGE_4_CARRY_4_130_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_130_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_130_64,PARAM_FHE_MESSAGE_4_CARRY_4_130_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_130_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_130_80,PARAM_FHE_MESSAGE_4_CARRY_4_130_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_130_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_130_128,PARAM_FHE_MESSAGE_4_CARRY_4_130_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_130_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_131_40,PARAM_FHE_MESSAGE_4_CARRY_4_131_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_131_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_131_64,PARAM_FHE_MESSAGE_4_CARRY_4_131_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_131_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_131_80,PARAM_FHE_MESSAGE_4_CARRY_4_131_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_131_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_131_128,PARAM_FHE_MESSAGE_4_CARRY_4_131_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_131_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_132_40,PARAM_FHE_MESSAGE_4_CARRY_4_132_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_132_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_132_64,PARAM_FHE_MESSAGE_4_CARRY_4_132_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_132_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_132_80,PARAM_FHE_MESSAGE_4_CARRY_4_132_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_132_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_132_128,PARAM_FHE_MESSAGE_4_CARRY_4_132_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_132_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_133_40,PARAM_FHE_MESSAGE_4_CARRY_4_133_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_133_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_133_64,PARAM_FHE_MESSAGE_4_CARRY_4_133_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_133_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_133_80,PARAM_FHE_MESSAGE_4_CARRY_4_133_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_133_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_133_128,PARAM_FHE_MESSAGE_4_CARRY_4_133_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_133_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_134_40,PARAM_FHE_MESSAGE_4_CARRY_4_134_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_134_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_134_64,PARAM_FHE_MESSAGE_4_CARRY_4_134_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_134_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_134_80,PARAM_FHE_MESSAGE_4_CARRY_4_134_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_134_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_134_128,PARAM_FHE_MESSAGE_4_CARRY_4_134_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_134_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_135_40,PARAM_FHE_MESSAGE_4_CARRY_4_135_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_135_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_135_64,PARAM_FHE_MESSAGE_4_CARRY_4_135_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_135_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_135_80,PARAM_FHE_MESSAGE_4_CARRY_4_135_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_135_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_135_128,PARAM_FHE_MESSAGE_4_CARRY_4_135_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_135_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_136_40,PARAM_FHE_MESSAGE_4_CARRY_4_136_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_136_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_136_64,PARAM_FHE_MESSAGE_4_CARRY_4_136_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_136_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_136_80,PARAM_FHE_MESSAGE_4_CARRY_4_136_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_136_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_136_128,PARAM_FHE_MESSAGE_4_CARRY_4_136_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_136_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_137_40,PARAM_FHE_MESSAGE_4_CARRY_4_137_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_137_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_137_64,PARAM_FHE_MESSAGE_4_CARRY_4_137_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_137_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_137_80,PARAM_FHE_MESSAGE_4_CARRY_4_137_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_137_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_137_128,PARAM_FHE_MESSAGE_4_CARRY_4_137_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_137_128),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_138_40,PARAM_FHE_MESSAGE_4_CARRY_4_138_40,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_138_40),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_138_64,PARAM_FHE_MESSAGE_4_CARRY_4_138_64,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_138_64),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_138_80,PARAM_FHE_MESSAGE_4_CARRY_4_138_80,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_138_80),
|
||||
(PARAM_PKE_MESSAGE_4_CARRY_4_138_128,PARAM_FHE_MESSAGE_4_CARRY_4_138_128,PARAM_KEYSWITCH_MESSAGE_4_CARRY_4_138_128),
|
||||
});
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::core_crypto::commons::generators::DeterministicSeeder;
|
||||
use crate::core_crypto::commons::math::random::Seed;
|
||||
use crate::core_crypto::prelude::ActivatedRandomGenerator;
|
||||
use crate::shortint::parameters::bc::*;
|
||||
use crate::shortint::parameters::classic::compact_pk::*;
|
||||
use crate::shortint::parameters::*;
|
||||
use std::panic::set_hook;
|
||||
@@ -358,6 +359,19 @@ expose_predefined_parameters! {
|
||||
PARAM_SMALL_MESSAGE_2_CARRY_2,
|
||||
PARAM_SMALL_MESSAGE_3_CARRY_3,
|
||||
PARAM_SMALL_MESSAGE_4_CARRY_4,
|
||||
// ZK_TESTS
|
||||
PARAM_PKE_1_1_2048,
|
||||
PARAM_PKE_2_2_2048,
|
||||
PARAM_PKE_3_3_2048,
|
||||
PARAM_PKE_4_4_2048,
|
||||
PARAM_PKE_1_1_4096,
|
||||
PARAM_PKE_2_2_4096,
|
||||
PARAM_PKE_3_3_4096,
|
||||
PARAM_PKE_4_4_4096,
|
||||
PARAM_PKE_1_1_1024,
|
||||
PARAM_PKE_2_2_1024,
|
||||
PARAM_PKE_3_3_1024,
|
||||
PARAM_PKE_4_4_1024,
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
|
||||
@@ -6,7 +6,7 @@ use crate::core_crypto::commons::parameters::{
|
||||
};
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::shortint::ciphertext::MaxDegree;
|
||||
use crate::shortint::parameters::ShortintKeySwitchingParameters;
|
||||
use crate::shortint::parameters::{EncryptionKeyChoice, ShortintKeySwitchingParameters};
|
||||
use crate::shortint::server_key::{ShortintBootstrappingKey, ShortintCompressedBootstrappingKey};
|
||||
use crate::shortint::{ClientKey, CompressedServerKey, ServerKey};
|
||||
|
||||
@@ -159,13 +159,35 @@ impl ShortintEngine {
|
||||
cks2: &ClientKey,
|
||||
params: ShortintKeySwitchingParameters,
|
||||
) -> LweKeyswitchKeyOwned<u64> {
|
||||
let input_key = match cks1.parameters.encryption_key_choice() {
|
||||
EncryptionKeyChoice::Big => cks1.large_lwe_secret_key(),
|
||||
EncryptionKeyChoice::Small => cks1.small_lwe_secret_key(),
|
||||
};
|
||||
|
||||
// // TODO: manage more cases ?
|
||||
// let (output_key, encryption_noise) = match cks2.parameters.encryption_key_choice() {
|
||||
// EncryptionKeyChoice::Big => (
|
||||
// cks2.large_lwe_secret_key(),
|
||||
// cks2.parameters.glwe_noise_distribution(),
|
||||
// ),
|
||||
// EncryptionKeyChoice::Small => (
|
||||
// cks2.small_lwe_secret_key(),
|
||||
// cks2.parameters.lwe_noise_distribution(),
|
||||
// ),
|
||||
// };
|
||||
|
||||
let (output_key, encryption_noise) = (
|
||||
cks2.small_lwe_secret_key(),
|
||||
cks2.parameters.lwe_noise_distribution(),
|
||||
);
|
||||
|
||||
// Creation of the key switching key
|
||||
allocate_and_generate_new_lwe_keyswitch_key(
|
||||
&cks1.large_lwe_secret_key(),
|
||||
&cks2.large_lwe_secret_key(),
|
||||
&input_key,
|
||||
&output_key,
|
||||
params.ks_base_log,
|
||||
params.ks_level,
|
||||
cks2.parameters.lwe_noise_distribution(),
|
||||
encryption_noise,
|
||||
cks2.parameters.ciphertext_modulus(),
|
||||
&mut self.encryption_generator,
|
||||
)
|
||||
|
||||
@@ -251,8 +251,13 @@ impl KeySwitchingKey {
|
||||
/// assert_eq!(ck2.decrypt(&cipher_2), cleartext);
|
||||
/// ```
|
||||
pub fn cast(&self, ct: &Ciphertext) -> Ciphertext {
|
||||
let mut ret = self.dest_server_key.create_trivial(0);
|
||||
// let mut ret = self.dest_server_key.create_trivial(0);
|
||||
let out_small_lwe_size = self.dest_server_key.key_switching_key.output_lwe_size();
|
||||
let mut ret = self
|
||||
.dest_server_key
|
||||
.unchecked_create_trivial_with_lwe_size(0, out_small_lwe_size);
|
||||
self.cast_into(ct, &mut ret);
|
||||
ret.degree = ct.degree;
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use crate::keycache::utils::named_params_impl;
|
||||
use crate::keycache::*;
|
||||
use crate::shortint::parameters::bc::*;
|
||||
use crate::shortint::parameters::classic::compact_pk::*;
|
||||
#[cfg(tarpaulin)]
|
||||
use crate::shortint::parameters::coverage_parameters::*;
|
||||
@@ -178,6 +179,359 @@ named_params_impl!( ShortintParameterSet =>
|
||||
WOPBS_ONLY_2_BLOCKS_PARAM_MESSAGE_7_CARRY_0_KS_PBS,
|
||||
WOPBS_ONLY_2_BLOCKS_PARAM_MESSAGE_7_CARRY_1_KS_PBS,
|
||||
WOPBS_ONLY_2_BLOCKS_PARAM_MESSAGE_8_CARRY_0_KS_PBS,
|
||||
// PKE BC
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_128_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_128_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_128_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_128_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_128_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_128_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_128_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_128_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_129_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_129_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_129_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_129_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_129_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_129_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_129_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_129_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_130_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_130_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_130_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_130_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_130_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_130_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_130_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_130_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_131_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_131_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_131_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_131_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_131_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_131_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_131_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_131_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_132_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_132_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_132_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_132_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_132_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_132_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_132_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_132_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_133_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_133_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_133_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_133_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_133_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_133_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_133_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_133_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_134_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_134_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_134_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_134_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_134_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_134_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_134_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_134_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_135_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_135_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_135_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_135_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_135_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_135_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_135_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_135_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_136_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_136_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_136_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_136_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_136_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_136_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_136_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_136_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_137_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_137_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_137_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_137_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_137_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_137_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_137_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_137_128,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_138_40,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_138_40,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_138_64,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_138_64,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_138_80,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_138_80,
|
||||
PARAM_PKE_MESSAGE_1_CARRY_1_138_128,
|
||||
PARAM_FHE_MESSAGE_1_CARRY_1_138_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_128_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_128_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_128_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_128_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_128_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_128_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_128_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_128_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_129_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_129_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_129_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_129_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_129_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_129_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_129_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_129_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_130_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_130_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_130_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_130_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_130_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_130_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_130_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_130_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_131_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_131_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_131_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_131_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_131_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_131_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_131_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_131_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_132_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_132_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_132_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_132_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_132_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_132_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_132_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_132_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_133_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_133_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_133_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_133_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_133_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_133_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_133_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_133_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_134_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_134_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_134_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_134_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_134_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_134_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_134_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_134_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_135_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_135_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_135_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_135_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_135_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_135_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_135_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_135_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_136_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_136_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_136_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_136_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_136_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_136_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_136_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_136_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_137_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_137_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_137_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_137_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_137_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_137_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_137_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_137_128,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_138_40,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_138_40,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_138_64,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_138_64,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_138_80,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_138_80,
|
||||
PARAM_PKE_MESSAGE_2_CARRY_2_138_128,
|
||||
PARAM_FHE_MESSAGE_2_CARRY_2_138_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_128_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_128_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_128_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_128_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_128_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_128_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_128_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_128_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_129_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_129_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_129_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_129_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_129_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_129_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_129_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_129_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_130_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_130_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_130_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_130_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_130_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_130_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_130_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_130_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_131_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_131_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_131_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_131_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_131_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_131_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_131_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_131_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_132_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_132_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_132_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_132_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_132_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_132_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_132_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_132_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_133_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_133_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_133_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_133_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_133_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_133_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_133_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_133_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_134_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_134_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_134_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_134_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_134_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_134_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_134_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_134_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_135_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_135_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_135_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_135_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_135_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_135_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_135_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_135_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_136_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_136_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_136_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_136_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_136_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_136_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_136_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_136_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_137_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_137_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_137_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_137_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_137_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_137_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_137_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_137_128,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_138_40,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_138_40,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_138_64,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_138_64,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_138_80,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_138_80,
|
||||
PARAM_PKE_MESSAGE_3_CARRY_3_138_128,
|
||||
PARAM_FHE_MESSAGE_3_CARRY_3_138_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_128_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_128_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_128_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_128_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_128_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_128_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_128_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_128_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_129_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_129_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_129_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_129_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_129_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_129_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_129_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_129_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_130_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_130_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_130_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_130_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_130_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_130_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_130_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_130_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_131_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_131_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_131_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_131_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_131_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_131_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_131_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_131_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_132_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_132_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_132_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_132_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_132_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_132_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_132_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_132_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_133_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_133_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_133_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_133_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_133_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_133_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_133_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_133_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_134_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_134_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_134_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_134_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_134_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_134_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_134_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_134_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_135_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_135_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_135_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_135_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_135_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_135_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_135_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_135_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_136_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_136_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_136_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_136_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_136_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_136_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_136_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_136_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_137_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_137_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_137_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_137_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_137_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_137_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_137_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_137_128,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_138_40,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_138_40,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_138_64,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_138_64,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_138_80,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_138_80,
|
||||
PARAM_PKE_MESSAGE_4_CARRY_4_138_128,
|
||||
PARAM_FHE_MESSAGE_4_CARRY_4_138_128,
|
||||
// Coverage
|
||||
#[cfg(tarpaulin)]
|
||||
COVERAGE_PARAM_MESSAGE_2_CARRY_2_KS_PBS,
|
||||
|
||||
7980
tfhe/src/shortint/parameters/bc.rs
Normal file
7980
tfhe/src/shortint/parameters/bc.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,7 @@ pub use crate::core_crypto::commons::parameters::{
|
||||
use crate::core_crypto::prelude::{LweCiphertextListParameters, LweCiphertextParameters};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
pub mod bc;
|
||||
pub mod classic;
|
||||
#[cfg(tarpaulin)]
|
||||
pub mod coverage_parameters;
|
||||
|
||||
@@ -28,7 +28,7 @@ pub(crate) mod tests;
|
||||
|
||||
use crate::core_crypto::algorithms::*;
|
||||
use crate::core_crypto::commons::parameters::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, GlweSize, LweDimension, MonomialDegree,
|
||||
DecompositionBaseLog, DecompositionLevelCount, GlweSize, LweDimension, LweSize, MonomialDegree,
|
||||
PolynomialSize, ThreadCount,
|
||||
};
|
||||
use crate::core_crypto::commons::traits::*;
|
||||
@@ -1078,16 +1078,11 @@ impl ServerKey {
|
||||
self.unchecked_create_trivial(modular_value as u64)
|
||||
}
|
||||
|
||||
pub fn unchecked_create_trivial(&self, value: u64) -> Ciphertext {
|
||||
let lwe_size = match self.pbs_order {
|
||||
PBSOrder::KeyswitchBootstrap => {
|
||||
self.bootstrapping_key.output_lwe_dimension().to_lwe_size()
|
||||
}
|
||||
PBSOrder::BootstrapKeyswitch => {
|
||||
self.bootstrapping_key.input_lwe_dimension().to_lwe_size()
|
||||
}
|
||||
};
|
||||
|
||||
pub fn unchecked_create_trivial_with_lwe_size(
|
||||
&self,
|
||||
value: u64,
|
||||
lwe_size: LweSize,
|
||||
) -> Ciphertext {
|
||||
let delta = (1_u64 << 63) / (self.message_modulus.0 * self.carry_modulus.0) as u64;
|
||||
|
||||
let shifted_value = value * delta;
|
||||
@@ -1112,6 +1107,19 @@ impl ServerKey {
|
||||
)
|
||||
}
|
||||
|
||||
pub fn unchecked_create_trivial(&self, value: u64) -> Ciphertext {
|
||||
let lwe_size = match self.pbs_order {
|
||||
PBSOrder::KeyswitchBootstrap => {
|
||||
self.bootstrapping_key.output_lwe_dimension().to_lwe_size()
|
||||
}
|
||||
PBSOrder::BootstrapKeyswitch => {
|
||||
self.bootstrapping_key.input_lwe_dimension().to_lwe_size()
|
||||
}
|
||||
};
|
||||
|
||||
self.unchecked_create_trivial_with_lwe_size(value, lwe_size)
|
||||
}
|
||||
|
||||
pub fn create_trivial_assign(&self, ct: &mut Ciphertext, value: u64) {
|
||||
let modular_value = value as usize % self.message_modulus.0;
|
||||
|
||||
@@ -1462,7 +1470,7 @@ pub(crate) fn apply_blind_rotate<Scalar, InputCont, OutputCont>(
|
||||
};
|
||||
}
|
||||
|
||||
pub(crate) fn apply_programmable_bootstrap<InputCont, OutputCont>(
|
||||
pub fn apply_programmable_bootstrap<InputCont, OutputCont>(
|
||||
bootstrapping_key: &ShortintBootstrappingKey,
|
||||
in_buffer: &LweCiphertext<InputCont>,
|
||||
out_buffer: &mut LweCiphertext<OutputCont>,
|
||||
|
||||
@@ -23,21 +23,21 @@ async function setup() {
|
||||
const demos = await Comlink.wrap(worker).demos;
|
||||
|
||||
const demoNames = [
|
||||
"publicKeyTest",
|
||||
"compressedPublicKeyTest",
|
||||
"compactPublicKeyTest32BitBig",
|
||||
"compactPublicKeyTest32BitSmall",
|
||||
"compactPublicKeyTest256BitBig",
|
||||
"compactPublicKeyTest256BitSmall",
|
||||
"compressedCompactPublicKeyTest256BitBig",
|
||||
"compressedCompactPublicKeyTest256BitSmall",
|
||||
"compactPublicKeyZeroKnowledge",
|
||||
"compactPublicKeyBench32BitBig",
|
||||
"compactPublicKeyBench32BitSmall",
|
||||
"compactPublicKeyBench256BitBig",
|
||||
"compactPublicKeyBench256BitSmall",
|
||||
"compressedServerKeyBenchMessage1Carry1",
|
||||
"compressedServerKeyBenchMessage2Carry2",
|
||||
// "publicKeyTest",
|
||||
// "compressedPublicKeyTest",
|
||||
// "compactPublicKeyTest32BitBig",
|
||||
// "compactPublicKeyTest32BitSmall",
|
||||
// "compactPublicKeyTest256BitBig",
|
||||
// "compactPublicKeyTest256BitSmall",
|
||||
// "compressedCompactPublicKeyTest256BitBig",
|
||||
// "compressedCompactPublicKeyTest256BitSmall",
|
||||
// "compactPublicKeyZeroKnowledge",
|
||||
// "compactPublicKeyBench32BitBig",
|
||||
// "compactPublicKeyBench32BitSmall",
|
||||
// "compactPublicKeyBench256BitBig",
|
||||
// "compactPublicKeyBench256BitSmall",
|
||||
// "compressedServerKeyBenchMessage1Carry1",
|
||||
// "compressedServerKeyBenchMessage2Carry2",
|
||||
"compactPublicKeyZeroKnowledgeBench",
|
||||
];
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const secs = 1200; // 20 Minutes
|
||||
const secs = 1_000_000; // 20 Minutes
|
||||
|
||||
const config = {
|
||||
verbose: true,
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"build": "cp -r ../../tfhe/pkg ./ && webpack build ./index.js --mode production -o dist --output-filename index.js && cp index.html dist/ && cp favicon.ico dist/",
|
||||
"server": "serve --config ../serve.json dist/",
|
||||
"test-separate-processes": "jest --listTests | xargs -L 1 jest --runInBand --testNamePattern=Test",
|
||||
"bench-separate-processes": "jest --listTests | xargs -L 1 jest --runInBand --testNamePattern=Bench",
|
||||
"bench-separate-processes": "jest --listTests | xargs -L 1 jest --runInBand --testNamePattern=ZeroKnowledgeBench",
|
||||
"test2": "mocha",
|
||||
"format": "prettier . --write",
|
||||
"check-format": "prettier . --check"
|
||||
|
||||
@@ -50,7 +50,7 @@ async function runActualTest(page, buttonId) {
|
||||
}
|
||||
}
|
||||
|
||||
const TWENTY_MINUTES = 1200 * 1000;
|
||||
const TWENTY_MINUTES = 1_000_000 * 1000;
|
||||
|
||||
async function runTestAttachedToButton(buttonId) {
|
||||
let browser;
|
||||
@@ -63,6 +63,7 @@ async function runTestAttachedToButton(buttonId) {
|
||||
} else {
|
||||
browser = await puppeteer.launch({
|
||||
headless: "new",
|
||||
args: ["--no-sandbox"],
|
||||
protocolTimeout: TWENTY_MINUTES,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
import { runTestAttachedToButton } from "./common.mjs";
|
||||
|
||||
it("Compact Public Key Test Big 32 Bit", async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyTest32BitBig");
|
||||
});
|
||||
// it("Compact Public Key Test Big 32 Bit", async () => {
|
||||
// await runTestAttachedToButton("compactPublicKeyTest32BitBig");
|
||||
// });
|
||||
|
||||
it("Compact Public Key Test Small 32 Bit", async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyTest32BitSmall");
|
||||
});
|
||||
// it("Compact Public Key Test Small 32 Bit", async () => {
|
||||
// await runTestAttachedToButton("compactPublicKeyTest32BitSmall");
|
||||
// });
|
||||
|
||||
it("Compact Public Key Test Small 256 Bit", async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyTest256BitSmall");
|
||||
});
|
||||
// it("Compact Public Key Test Small 256 Bit", async () => {
|
||||
// await runTestAttachedToButton("compactPublicKeyTest256BitSmall");
|
||||
// });
|
||||
|
||||
it("Compact Public Key Test Big 256 Bit", async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyTest256BitBig");
|
||||
});
|
||||
// it("Compact Public Key Test Big 256 Bit", async () => {
|
||||
// await runTestAttachedToButton("compactPublicKeyTest256BitBig");
|
||||
// });
|
||||
|
||||
it("Compressed Compact Public Key Test Small 256 Bit", async () => {
|
||||
await runTestAttachedToButton("compressedCompactPublicKeyTest256BitSmall");
|
||||
});
|
||||
// it("Compressed Compact Public Key Test Small 256 Bit", async () => {
|
||||
// await runTestAttachedToButton("compressedCompactPublicKeyTest256BitSmall");
|
||||
// });
|
||||
|
||||
it("Compressed Compact Public Key Test Big 256 Bit", async () => {
|
||||
await runTestAttachedToButton("compressedCompactPublicKeyTest256BitBig");
|
||||
});
|
||||
// it("Compressed Compact Public Key Test Big 256 Bit", async () => {
|
||||
// await runTestAttachedToButton("compressedCompactPublicKeyTest256BitBig");
|
||||
// });
|
||||
|
||||
it(
|
||||
"Compact Public Key Test Big 64 Bit With Zero Knowledge",
|
||||
"Compact Public Key Bench Big 64 Bit With ZeroKnowledgeBench",
|
||||
async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyZeroKnowledge");
|
||||
await runTestAttachedToButton("compactPublicKeyZeroKnowledgeBench");
|
||||
},
|
||||
1200 * 1000,
|
||||
1_000_000 * 1000,
|
||||
); // 20 minutes timeout
|
||||
|
||||
@@ -648,53 +648,95 @@ async function compressedServerKeyBenchMessage2Carry2() {
|
||||
}
|
||||
|
||||
async function compactPublicKeyZeroKnowledgeBench() {
|
||||
let block_params = new ShortintParameters(
|
||||
ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_TUNIFORM_2M40,
|
||||
);
|
||||
let params_to_bench = [
|
||||
ShortintParametersName.PARAM_PKE_1_1_2048,
|
||||
ShortintParametersName.PARAM_PKE_2_2_2048,
|
||||
// ShortintParametersName.PARAM_PKE_3_3_2048,
|
||||
// ShortintParametersName.PARAM_PKE_4_4_2048,
|
||||
ShortintParametersName.PARAM_PKE_1_1_4096,
|
||||
ShortintParametersName.PARAM_PKE_2_2_4096,
|
||||
// ShortintParametersName.PARAM_PKE_3_3_4096,
|
||||
// ShortintParametersName.PARAM_PKE_4_4_4096,
|
||||
ShortintParametersName.PARAM_PKE_1_1_1024,
|
||||
ShortintParametersName.PARAM_PKE_2_2_1024,
|
||||
// ShortintParametersName.PARAM_PKE_3_3_1024,
|
||||
// ShortintParametersName.PARAM_PKE_4_4_1024,
|
||||
];
|
||||
|
||||
let config = TfheConfigBuilder.default()
|
||||
.use_custom_parameters(block_params)
|
||||
.build();
|
||||
// let block_params = new ShortintParameters(
|
||||
// ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_TUNIFORM_2M40,
|
||||
// );
|
||||
|
||||
let clientKey = TfheClientKey.generate(config);
|
||||
let publicKey = TfheCompactPublicKey.new(clientKey);
|
||||
|
||||
console.log("Start CRS generation");
|
||||
console.time("CRS generation");
|
||||
let crs = CompactPkeCrs.from_config(config, 4 * 64);
|
||||
console.timeEnd("CRS generation");
|
||||
let public_params = crs.public_params();
|
||||
|
||||
const bench_loops = 4; // The computation is expensive
|
||||
let bench_results = {};
|
||||
let load_choices = [ZkComputeLoad.Proof, ZkComputeLoad.Verify];
|
||||
const load_to_str = {
|
||||
[ZkComputeLoad.Proof]: "compute_load_proof",
|
||||
[ZkComputeLoad.Verify]: "compute_load_verify",
|
||||
};
|
||||
for (const loadChoice of load_choices) {
|
||||
let timing = 0;
|
||||
for (let i = 0; i < bench_loops; i++) {
|
||||
let input = generateRandomBigInt(64);
|
||||
|
||||
const start = performance.now();
|
||||
let _ = ProvenCompactFheUint64.encrypt_with_compact_public_key(
|
||||
input,
|
||||
public_params,
|
||||
publicKey,
|
||||
loadChoice,
|
||||
);
|
||||
const end = performance.now();
|
||||
timing += end - start;
|
||||
for (const block_params_name of params_to_bench) {
|
||||
let block_params = new ShortintParameters(block_params_name);
|
||||
|
||||
let config = TfheConfigBuilder.default()
|
||||
.use_custom_parameters(block_params)
|
||||
.build();
|
||||
|
||||
let clientKey = TfheClientKey.generate(config);
|
||||
let publicKey = TfheCompactPublicKey.new(clientKey);
|
||||
|
||||
const bench_loops = 5; // The computation is expensive
|
||||
let load_choices = [ZkComputeLoad.Proof, ZkComputeLoad.Verify];
|
||||
const load_to_str = {
|
||||
[ZkComputeLoad.Proof]: "costly_proof",
|
||||
[ZkComputeLoad.Verify]: "cheap_proof",
|
||||
};
|
||||
|
||||
const param_to_name = {
|
||||
[ShortintParametersName.PARAM_PKE_1_1_2048]: "PARAM_PKE_1_1_2048",
|
||||
[ShortintParametersName.PARAM_PKE_2_2_2048]: "PARAM_PKE_2_2_2048",
|
||||
[ShortintParametersName.PARAM_PKE_3_3_2048]: "PARAM_PKE_3_3_2048",
|
||||
[ShortintParametersName.PARAM_PKE_4_4_2048]: "PARAM_PKE_4_4_2048",
|
||||
[ShortintParametersName.PARAM_PKE_1_1_4096]: "PARAM_PKE_1_1_4096",
|
||||
[ShortintParametersName.PARAM_PKE_2_2_4096]: "PARAM_PKE_2_2_4096",
|
||||
[ShortintParametersName.PARAM_PKE_3_3_4096]: "PARAM_PKE_3_3_4096",
|
||||
[ShortintParametersName.PARAM_PKE_4_4_4096]: "PARAM_PKE_4_4_4096",
|
||||
[ShortintParametersName.PARAM_PKE_1_1_1024]: "PARAM_PKE_1_1_1024",
|
||||
[ShortintParametersName.PARAM_PKE_2_2_1024]: "PARAM_PKE_2_2_1024",
|
||||
[ShortintParametersName.PARAM_PKE_3_3_1024]: "PARAM_PKE_3_3_1024",
|
||||
[ShortintParametersName.PARAM_PKE_4_4_1024]: "PARAM_PKE_4_4_1024",
|
||||
};
|
||||
|
||||
let encrypt_counts = [5, 10];
|
||||
|
||||
for (const encrypt_count of encrypt_counts) {
|
||||
console.log("Start CRS generation");
|
||||
console.time("CRS generation");
|
||||
let crs = CompactPkeCrs.from_config(config, encrypt_count * 64);
|
||||
console.timeEnd("CRS generation");
|
||||
|
||||
let public_params = crs.public_params();
|
||||
let inputs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((e) => BigInt(e));
|
||||
let input = inputs.slice(0, encrypt_count);
|
||||
for (const loadChoice of load_choices) {
|
||||
let timing = 0;
|
||||
for (let i = 0; i < bench_loops; i++) {
|
||||
console.time("Loop " + i);
|
||||
const start = performance.now();
|
||||
let _ = ProvenCompactFheUint64List.encrypt_with_compact_public_key(
|
||||
input,
|
||||
public_params,
|
||||
publicKey,
|
||||
loadChoice,
|
||||
);
|
||||
const end = performance.now();
|
||||
console.timeEnd("Loop " + i);
|
||||
timing += end - start;
|
||||
}
|
||||
const mean = timing / bench_loops;
|
||||
// pke_zk__PARAM_PKE_1_1_1024_10_cheap_proof
|
||||
const bench_str =
|
||||
"pke_zk__" +
|
||||
param_to_name[block_params_name] +
|
||||
"_" + encrypt_count + "_" + load_to_str[loadChoice];
|
||||
console.log(bench_str, ": ", mean, " ms");
|
||||
bench_results[bench_str] = mean;
|
||||
}
|
||||
}
|
||||
const mean = timing / bench_loops;
|
||||
|
||||
const bench_str =
|
||||
"compact_fhe_uint64_proven_encryption_" +
|
||||
load_to_str[loadChoice] +
|
||||
"_mean";
|
||||
console.log(bench_str, ": ", mean, " ms");
|
||||
bench_results["compact_fhe_uint64_proven_encryption_"] = mean;
|
||||
}
|
||||
|
||||
return bench_results;
|
||||
|
||||
Reference in New Issue
Block a user