mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-07 22:04:10 -05:00
chore(backward): add data for ks32 client key, server key and ct
This commit is contained in:
committed by
tmontaigu
parent
bc1b87a60c
commit
69b8cc28e2
@@ -12,7 +12,7 @@ use tfhe::shortint::parameters::{
|
||||
};
|
||||
#[cfg(feature = "zk-pok")]
|
||||
use tfhe::shortint::prelude::LweDimension;
|
||||
use tfhe::shortint::{AtomicPatternParameters, CarryModulus, CiphertextModulus, MessageModulus};
|
||||
use tfhe::shortint::{CarryModulus, CiphertextModulus, MessageModulus};
|
||||
#[cfg(feature = "zk-pok")]
|
||||
use tfhe::zk::{CompactPkeCrs, CompactPkeCrsConformanceParams};
|
||||
use tfhe::{
|
||||
@@ -33,16 +33,10 @@ use tfhe_backward_compat_data::{
|
||||
HlCompressedSquashedNoiseCiphertextListTest, HlHeterogeneousCiphertextListTest,
|
||||
HlPublicKeyTest, HlServerKeyTest, HlSignedCiphertextTest, HlSquashedNoiseBoolCiphertextTest,
|
||||
HlSquashedNoiseSignedCiphertextTest, HlSquashedNoiseUnsignedCiphertextTest, TestMetadata,
|
||||
TestParameterSet, TestType, Testcase, ZkPkePublicParamsTest,
|
||||
TestType, Testcase, ZkPkePublicParamsTest,
|
||||
};
|
||||
use tfhe_versionable::Unversionize;
|
||||
|
||||
fn load_hl_params(test_params: &TestParameterSet) -> AtomicPatternParameters {
|
||||
let pbs_params = load_params(test_params);
|
||||
|
||||
pbs_params.into()
|
||||
}
|
||||
|
||||
/// Test HL ciphertext: loads the ciphertext and compare the decrypted value to the one in the
|
||||
/// metadata.
|
||||
pub fn test_hl_ciphertext(
|
||||
@@ -299,7 +293,7 @@ pub fn test_hl_clientkey(
|
||||
test: &HlClientKeyTest,
|
||||
format: DataFormat,
|
||||
) -> Result<TestSuccess, TestFailure> {
|
||||
let test_params = load_hl_params(&test.parameters);
|
||||
let test_params = load_params(&test.parameters);
|
||||
|
||||
let key: ClientKey = load_and_unversionize(dir, test, format)?;
|
||||
let key_params = key.computation_parameters();
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
use std::path::Path;
|
||||
use tfhe::core_crypto::prelude::{
|
||||
LweCiphertextCount, NoiseEstimationMeasureBound, RSigmaFactor, TUniform, Variance,
|
||||
LweCiphertextCount, NoiseEstimationMeasureBound, RSigmaFactor, TUniform, UnsignedInteger,
|
||||
Variance,
|
||||
};
|
||||
use tfhe::shortint::parameters::{
|
||||
LweBskGroupingFactor, ModulusSwitchNoiseReductionParams, ModulusSwitchType,
|
||||
CiphertextModulus32, KeySwitch32PBSParameters, LweBskGroupingFactor,
|
||||
ModulusSwitchNoiseReductionParams, ModulusSwitchType,
|
||||
};
|
||||
use tfhe_backward_compat_data::load::{
|
||||
load_versioned_auxiliary, DataFormat, TestFailure, TestResult, TestSuccess,
|
||||
};
|
||||
use tfhe_backward_compat_data::{
|
||||
ShortintCiphertextTest, ShortintClientKeyTest, TestClassicParameterSet, TestDistribution,
|
||||
TestMetadata, TestModulusSwitchNoiseReductionParams, TestModulusSwitchType,
|
||||
TestMultiBitParameterSet, TestParameterSet, TestType, Testcase,
|
||||
TestKS32ParameterSet, TestMetadata, TestModulusSwitchNoiseReductionParams,
|
||||
TestModulusSwitchType, TestMultiBitParameterSet, TestParameterSet, TestType, Testcase,
|
||||
};
|
||||
|
||||
use tfhe::shortint::parameters::{
|
||||
@@ -19,8 +21,8 @@ use tfhe::shortint::parameters::{
|
||||
LweDimension, PolynomialSize, StandardDev,
|
||||
};
|
||||
use tfhe::shortint::{
|
||||
CarryModulus, Ciphertext, CiphertextModulus, ClassicPBSParameters, ClientKey,
|
||||
EncryptionKeyChoice, MaxNoiseLevel, MessageModulus, MultiBitPBSParameters, PBSParameters,
|
||||
AtomicPatternParameters, CarryModulus, Ciphertext, CiphertextModulus, ClassicPBSParameters,
|
||||
ClientKey, EncryptionKeyChoice, MaxNoiseLevel, MessageModulus, MultiBitPBSParameters,
|
||||
ShortintParameterSet,
|
||||
};
|
||||
use tfhe_versionable::Unversionize;
|
||||
@@ -29,7 +31,7 @@ use crate::{load_and_unversionize, TestedModule};
|
||||
|
||||
/// Converts test parameters metadata that are independent of any tfhe-rs version and use only
|
||||
/// built-in types into parameters suitable for the currently tested version.
|
||||
pub fn load_params(test_params: &TestParameterSet) -> PBSParameters {
|
||||
pub fn load_params(test_params: &TestParameterSet) -> AtomicPatternParameters {
|
||||
match test_params {
|
||||
TestParameterSet::TestClassicParameterSet(TestClassicParameterSet {
|
||||
lwe_dimension,
|
||||
@@ -48,56 +50,33 @@ pub fn load_params(test_params: &TestParameterSet) -> PBSParameters {
|
||||
log2_p_fail,
|
||||
encryption_key_choice,
|
||||
modulus_switch_noise_reduction_params,
|
||||
}) => {
|
||||
let modulus_switch_noise_reduction_params = match modulus_switch_noise_reduction_params
|
||||
{
|
||||
TestModulusSwitchType::Standard => ModulusSwitchType::Standard,
|
||||
TestModulusSwitchType::DriftTechniqueNoiseReduction(
|
||||
TestModulusSwitchNoiseReductionParams {
|
||||
modulus_switch_zeros_count,
|
||||
ms_bound,
|
||||
ms_r_sigma_factor,
|
||||
ms_input_variance,
|
||||
},
|
||||
) => ModulusSwitchType::DriftTechniqueNoiseReduction(
|
||||
ModulusSwitchNoiseReductionParams {
|
||||
modulus_switch_zeros_count: LweCiphertextCount(*modulus_switch_zeros_count),
|
||||
ms_bound: NoiseEstimationMeasureBound(*ms_bound),
|
||||
ms_r_sigma_factor: RSigmaFactor(*ms_r_sigma_factor),
|
||||
ms_input_variance: Variance(*ms_input_variance),
|
||||
},
|
||||
),
|
||||
TestModulusSwitchType::CenteredMeanNoiseReduction => {
|
||||
ModulusSwitchType::CenteredMeanNoiseReduction
|
||||
}) => ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(*lwe_dimension),
|
||||
glwe_dimension: GlweDimension(*glwe_dimension),
|
||||
polynomial_size: PolynomialSize(*polynomial_size),
|
||||
lwe_noise_distribution: convert_distribution(lwe_noise_distribution),
|
||||
glwe_noise_distribution: convert_distribution(glwe_noise_distribution),
|
||||
pbs_base_log: DecompositionBaseLog(*pbs_base_log),
|
||||
pbs_level: DecompositionLevelCount(*pbs_level),
|
||||
ks_base_log: DecompositionBaseLog(*ks_base_log),
|
||||
ks_level: DecompositionLevelCount(*ks_level),
|
||||
message_modulus: MessageModulus(*message_modulus as u64),
|
||||
carry_modulus: CarryModulus(*carry_modulus as u64),
|
||||
max_noise_level: MaxNoiseLevel::new(*max_noise_level as u64),
|
||||
log2_p_fail: *log2_p_fail,
|
||||
ciphertext_modulus: CiphertextModulus::try_new(*ciphertext_modulus).unwrap(),
|
||||
encryption_key_choice: {
|
||||
match encryption_key_choice.as_ref() {
|
||||
"big" => EncryptionKeyChoice::Big,
|
||||
"small" => EncryptionKeyChoice::Small,
|
||||
_ => panic!("Invalid encryption key choice"),
|
||||
}
|
||||
};
|
||||
|
||||
ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(*lwe_dimension),
|
||||
glwe_dimension: GlweDimension(*glwe_dimension),
|
||||
polynomial_size: PolynomialSize(*polynomial_size),
|
||||
lwe_noise_distribution: convert_distribution(lwe_noise_distribution),
|
||||
glwe_noise_distribution: convert_distribution(glwe_noise_distribution),
|
||||
pbs_base_log: DecompositionBaseLog(*pbs_base_log),
|
||||
pbs_level: DecompositionLevelCount(*pbs_level),
|
||||
ks_base_log: DecompositionBaseLog(*ks_base_log),
|
||||
ks_level: DecompositionLevelCount(*ks_level),
|
||||
message_modulus: MessageModulus(*message_modulus as u64),
|
||||
carry_modulus: CarryModulus(*carry_modulus as u64),
|
||||
max_noise_level: MaxNoiseLevel::new(*max_noise_level as u64),
|
||||
log2_p_fail: *log2_p_fail,
|
||||
ciphertext_modulus: CiphertextModulus::try_new(*ciphertext_modulus).unwrap(),
|
||||
encryption_key_choice: {
|
||||
match encryption_key_choice.as_ref() {
|
||||
"big" => EncryptionKeyChoice::Big,
|
||||
"small" => EncryptionKeyChoice::Small,
|
||||
_ => panic!("Invalid encryption key choice"),
|
||||
}
|
||||
},
|
||||
modulus_switch_noise_reduction_params,
|
||||
}
|
||||
.into()
|
||||
},
|
||||
modulus_switch_noise_reduction_params: convert_modulus_switch_type(
|
||||
modulus_switch_noise_reduction_params.clone(),
|
||||
),
|
||||
}
|
||||
.into(),
|
||||
TestParameterSet::TestMultiBitParameterSet(TestMultiBitParameterSet {
|
||||
lwe_dimension,
|
||||
glwe_dimension,
|
||||
@@ -141,10 +120,83 @@ pub fn load_params(test_params: &TestParameterSet) -> PBSParameters {
|
||||
deterministic_execution: false,
|
||||
}
|
||||
.into(),
|
||||
TestParameterSet::TestKS32ParameterSet(TestKS32ParameterSet {
|
||||
lwe_dimension,
|
||||
glwe_dimension,
|
||||
polynomial_size,
|
||||
lwe_noise_distribution,
|
||||
glwe_noise_distribution,
|
||||
pbs_base_log,
|
||||
pbs_level,
|
||||
ks_base_log,
|
||||
ks_level,
|
||||
message_modulus,
|
||||
ciphertext_modulus,
|
||||
carry_modulus,
|
||||
max_noise_level,
|
||||
log2_p_fail,
|
||||
modulus_switch_noise_reduction_params,
|
||||
post_keyswitch_ciphertext_modulus,
|
||||
}) => KeySwitch32PBSParameters {
|
||||
lwe_dimension: LweDimension(*lwe_dimension),
|
||||
glwe_dimension: GlweDimension(*glwe_dimension),
|
||||
polynomial_size: PolynomialSize(*polynomial_size),
|
||||
lwe_noise_distribution: convert_distribution(lwe_noise_distribution),
|
||||
glwe_noise_distribution: convert_distribution(glwe_noise_distribution),
|
||||
pbs_base_log: DecompositionBaseLog(*pbs_base_log),
|
||||
pbs_level: DecompositionLevelCount(*pbs_level),
|
||||
ks_base_log: DecompositionBaseLog(*ks_base_log),
|
||||
ks_level: DecompositionLevelCount(*ks_level),
|
||||
message_modulus: MessageModulus(*message_modulus as u64),
|
||||
carry_modulus: CarryModulus(*carry_modulus as u64),
|
||||
max_noise_level: MaxNoiseLevel::new(*max_noise_level as u64),
|
||||
log2_p_fail: *log2_p_fail,
|
||||
ciphertext_modulus: CiphertextModulus::try_new(*ciphertext_modulus).unwrap(),
|
||||
modulus_switch_noise_reduction_params: convert_modulus_switch_type(
|
||||
modulus_switch_noise_reduction_params.clone(),
|
||||
),
|
||||
post_keyswitch_ciphertext_modulus: CiphertextModulus32::try_new(
|
||||
*post_keyswitch_ciphertext_modulus,
|
||||
)
|
||||
.unwrap(),
|
||||
}
|
||||
.into(),
|
||||
}
|
||||
}
|
||||
|
||||
fn convert_distribution(value: &TestDistribution) -> DynamicDistribution<u64> {
|
||||
fn convert_ms_noise_reduction_params(
|
||||
value: TestModulusSwitchNoiseReductionParams,
|
||||
) -> ModulusSwitchNoiseReductionParams {
|
||||
let TestModulusSwitchNoiseReductionParams {
|
||||
modulus_switch_zeros_count,
|
||||
ms_bound,
|
||||
ms_r_sigma_factor,
|
||||
ms_input_variance,
|
||||
} = value;
|
||||
|
||||
ModulusSwitchNoiseReductionParams {
|
||||
modulus_switch_zeros_count: LweCiphertextCount(modulus_switch_zeros_count),
|
||||
ms_bound: NoiseEstimationMeasureBound(ms_bound),
|
||||
ms_r_sigma_factor: RSigmaFactor(ms_r_sigma_factor),
|
||||
ms_input_variance: Variance(ms_input_variance),
|
||||
}
|
||||
}
|
||||
|
||||
fn convert_modulus_switch_type(value: TestModulusSwitchType) -> ModulusSwitchType {
|
||||
match value {
|
||||
TestModulusSwitchType::Standard => ModulusSwitchType::Standard,
|
||||
TestModulusSwitchType::DriftTechniqueNoiseReduction(
|
||||
test_modulus_switch_noise_reduction_params,
|
||||
) => ModulusSwitchType::DriftTechniqueNoiseReduction(convert_ms_noise_reduction_params(
|
||||
test_modulus_switch_noise_reduction_params,
|
||||
)),
|
||||
TestModulusSwitchType::CenteredMeanNoiseReduction => {
|
||||
ModulusSwitchType::CenteredMeanNoiseReduction
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn convert_distribution<T: UnsignedInteger>(value: &TestDistribution) -> DynamicDistribution<T> {
|
||||
match value {
|
||||
TestDistribution::Gaussian { stddev } => {
|
||||
DynamicDistribution::new_gaussian_from_std_dev(StandardDev(*stddev))
|
||||
@@ -156,7 +208,7 @@ fn convert_distribution(value: &TestDistribution) -> DynamicDistribution<u64> {
|
||||
}
|
||||
|
||||
fn load_shortint_params(test_params: &TestParameterSet) -> ShortintParameterSet {
|
||||
ShortintParameterSet::new_pbs_param_set(load_params(test_params))
|
||||
load_params(test_params).into()
|
||||
}
|
||||
|
||||
pub fn test_shortint_ciphertext(
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:352e24179fce9825d2307aa22eba04720fc7b843cc6d1da9323e69cb5fb25fe5
|
||||
size 20416
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7e30f9546fcc51e73ef6ca22eded0a4aec1dcb652aad4243c7829929e27d316c
|
||||
size 3911
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1de50df828dd9ee6437166fb6834bcc78c0a612105d0d19f2f368037c2b2f1de
|
||||
size 30120017
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:575be122c83ea5e28ed94ad68f872ab4f08de5d02c8e2546835e0e1eb4dfb2a6
|
||||
size 33890392
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ea7d1047ad327fb5becaf8caf1d8abafef0dc0bc1b3787e1a3d5930b8a48ec03
|
||||
size 66000
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:92be19b5d81e37787d9388640330f7246f6c76807592e6f0c00edd86275deb3b
|
||||
size 74489
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:50649cb65a53f9122380c678a5ec0ff3fae684eb7a986bbc414dd71ceaba69ab
|
||||
size 95632153
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2cdc9c1cac3f76c5bb7fdc73321d7dc1b4aa1a9a60938a9ebd8cf5000ed7e456
|
||||
size 115754494
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1d1f9127b621084669da234edfb15d6ec0a9811b4a11920f214f6a70710bcefd
|
||||
size 856624
|
||||
oid sha256:88a1a47bc58e2aec2b7e5faba7cbdc600e7385593a33d7161f52313083a91e87
|
||||
size 856640
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:827caa582a73af08043012732444f4ea89eaa445095b4cfc0b8dfb2a193f504d
|
||||
size 972494
|
||||
oid sha256:8cd2da944ad6db78d97aa57654b7af06909a533351bd6ee2a549a403706b0c96
|
||||
size 972576
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:523fb601cb28251fce9fbf4a784b890336bda2cfd1b3db64c996cb89fc38f212
|
||||
size 15614960
|
||||
oid sha256:deca2b114a824f87ff300f8944b3728adfebe7c2e1565fb6b734edf6c585d3d6
|
||||
size 15614972
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:147dd3b499ce1385aeba3d54e60b12eff302ddbd98d3b218cb9972a0321251f2
|
||||
size 17632589
|
||||
oid sha256:a0ece66b9389488cb17d8bd69159883df958d4fa8abc63390d12e95f72e53673
|
||||
size 17632623
|
||||
|
||||
@@ -644,6 +644,70 @@
|
||||
],
|
||||
)),
|
||||
),
|
||||
(
|
||||
tfhe_version_min: "1.3",
|
||||
tfhe_module: "high_level_api",
|
||||
metadata: HlClientKey((
|
||||
test_filename: "client_key_ks32",
|
||||
parameters: TestKS32ParameterSet((
|
||||
lwe_dimension: 918,
|
||||
glwe_dimension: 1,
|
||||
polynomial_size: 2048,
|
||||
lwe_noise_distribution: TUniform(
|
||||
bound_log2: 13,
|
||||
),
|
||||
glwe_noise_distribution: TUniform(
|
||||
bound_log2: 17,
|
||||
),
|
||||
pbs_base_log: 23,
|
||||
pbs_level: 1,
|
||||
ks_base_log: 4,
|
||||
ks_level: 4,
|
||||
message_modulus: 4,
|
||||
ciphertext_modulus: 18446744073709551616,
|
||||
carry_modulus: 4,
|
||||
max_noise_level: 5,
|
||||
log2_p_fail: -129.358380844,
|
||||
modulus_switch_noise_reduction_params: DriftTechniqueNoiseReduction((
|
||||
modulus_switch_zeros_count: 1449,
|
||||
ms_bound: 67108864.0,
|
||||
ms_r_sigma_factor: 13.179851302864899,
|
||||
ms_input_variance: 0.000000263039392929833,
|
||||
)),
|
||||
post_keyswitch_ciphertext_modulus: 4294967296,
|
||||
)),
|
||||
)),
|
||||
),
|
||||
(
|
||||
tfhe_version_min: "1.3",
|
||||
tfhe_module: "high_level_api",
|
||||
metadata: HlServerKey((
|
||||
test_filename: "server_key_ks32",
|
||||
client_key_filename: "client_key_ks32",
|
||||
rerand_cpk_filename: None,
|
||||
compressed: false,
|
||||
)),
|
||||
),
|
||||
(
|
||||
tfhe_version_min: "1.3",
|
||||
tfhe_module: "high_level_api",
|
||||
metadata: HlServerKey((
|
||||
test_filename: "compressed_server_key_ks32",
|
||||
client_key_filename: "client_key_ks32",
|
||||
rerand_cpk_filename: None,
|
||||
compressed: true,
|
||||
)),
|
||||
),
|
||||
(
|
||||
tfhe_version_min: "1.3",
|
||||
tfhe_module: "high_level_api",
|
||||
metadata: HlCiphertext((
|
||||
test_filename: "ct_ks32",
|
||||
key_filename: "client_key_ks32",
|
||||
compressed: false,
|
||||
clear_value: 25,
|
||||
)),
|
||||
),
|
||||
(
|
||||
tfhe_version_min: "1.4",
|
||||
tfhe_module: "high_level_api",
|
||||
|
||||
@@ -126,6 +126,9 @@ impl From<TestParameterSet> for PBSParameters {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_parameter_set_multi_bit) => {
|
||||
PBSParameters::MultiBitPBS(test_parameter_set_multi_bit.into())
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(_) => {
|
||||
panic!("unsupported ks32 parameters for version")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,6 +136,9 @@ impl From<TestParameterSet> for PBSParameters {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_parameter_set_multi_bit) => {
|
||||
PBSParameters::MultiBitPBS(test_parameter_set_multi_bit.into())
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(_) => {
|
||||
panic!("unsupported ks32 parameters for version")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,6 +152,9 @@ impl From<TestParameterSet> for PBSParameters {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_parameter_set_multi_bit) => {
|
||||
PBSParameters::MultiBitPBS(test_parameter_set_multi_bit.into())
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(_) => {
|
||||
panic!("unsupported ks32 parameters for this version")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,6 +159,9 @@ impl From<TestParameterSet> for PBSParameters {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_parameter_set_multi_bit) => {
|
||||
PBSParameters::MultiBitPBS(test_parameter_set_multi_bit.into())
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(_) => {
|
||||
panic!("unsupported ks32 parameters for version")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,6 +162,9 @@ impl From<TestParameterSet> for PBSParameters {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_parameter_set_multi_bit) => {
|
||||
PBSParameters::MultiBitPBS(test_parameter_set_multi_bit.into())
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(_) => {
|
||||
panic!("unsupported ks32 parameters for version")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
use crate::generate::{
|
||||
store_versioned_auxiliary_tfhe_1_3, store_versioned_test_tfhe_1_3, TfhersVersion,
|
||||
INSECURE_SMALL_TEST_PARAMS_MS_MEAN_COMPENSATION, PRNG_SEED, VALID_TEST_PARAMS_TUNIFORM,
|
||||
INSECURE_SMALL_TEST_PARAMS_MS_MEAN_COMPENSATION, PRNG_SEED, VALID_TEST_PARAMS_KS32_TUNIFORM,
|
||||
VALID_TEST_PARAMS_TUNIFORM,
|
||||
};
|
||||
use crate::{
|
||||
DataKind, HlClientKeyTest, HlCompressedSquashedNoiseCiphertextListTest,
|
||||
DataKind, HlCiphertextTest, HlClientKeyTest, HlCompressedSquashedNoiseCiphertextListTest,
|
||||
HlHeterogeneousCiphertextListTest, HlServerKeyTest, PkeZkProofAuxiliaryInfo,
|
||||
TestClassicParameterSet, TestDistribution, TestMetadata, TestModulusSwitchNoiseReductionParams,
|
||||
TestModulusSwitchType, TestMultiBitParameterSet, TestNoiseSquashingCompressionParameters,
|
||||
TestNoiseSquashingParams, TestParameterSet, ZkPkePublicParamsTest, HL_MODULE_NAME,
|
||||
TestClassicParameterSet, TestDistribution, TestKS32ParameterSet, TestMetadata,
|
||||
TestModulusSwitchNoiseReductionParams, TestModulusSwitchType, TestMultiBitParameterSet,
|
||||
TestNoiseSquashingCompressionParameters, TestNoiseSquashingParams, TestParameterSet,
|
||||
ZkPkePublicParamsTest, HL_MODULE_NAME,
|
||||
};
|
||||
use std::borrow::Cow;
|
||||
use std::fs::create_dir_all;
|
||||
@@ -20,23 +22,25 @@ use crate::generate::{
|
||||
use tfhe_1_3::boolean::engine::BooleanEngine;
|
||||
use tfhe_1_3::core_crypto::commons::generators::DeterministicSeeder;
|
||||
use tfhe_1_3::core_crypto::commons::math::random::RandomGenerator;
|
||||
use tfhe_1_3::core_crypto::prelude::{DefaultRandomGenerator, TUniform};
|
||||
use tfhe_1_3::core_crypto::prelude::{DefaultRandomGenerator, TUniform, UnsignedInteger};
|
||||
use tfhe_1_3::prelude::*;
|
||||
use tfhe_1_3::shortint::engine::ShortintEngine;
|
||||
use tfhe_1_3::shortint::parameters::{
|
||||
CarryModulus, CiphertextModulus, ClassicPBSParameters, CoreCiphertextModulus,
|
||||
DecompositionBaseLog, DecompositionLevelCount, DynamicDistribution, EncryptionKeyChoice,
|
||||
GlweDimension, LweBskGroupingFactor, LweCiphertextCount, LweDimension, MaxNoiseLevel,
|
||||
MessageModulus, ModulusSwitchNoiseReductionParams, MultiBitPBSParameters,
|
||||
NoiseEstimationMeasureBound, NoiseSquashingCompressionParameters, NoiseSquashingParameters,
|
||||
PolynomialSize, RSigmaFactor, StandardDev, Variance,
|
||||
CarryModulus, CiphertextModulus, CiphertextModulus32, ClassicPBSParameters,
|
||||
CoreCiphertextModulus, DecompositionBaseLog, DecompositionLevelCount, DynamicDistribution,
|
||||
EncryptionKeyChoice, GlweDimension, KeySwitch32PBSParameters, LweBskGroupingFactor,
|
||||
LweCiphertextCount, LweDimension, MaxNoiseLevel, MessageModulus,
|
||||
ModulusSwitchNoiseReductionParams, MultiBitPBSParameters, NoiseEstimationMeasureBound,
|
||||
NoiseSquashingCompressionParameters, NoiseSquashingParameters, PolynomialSize, RSigmaFactor,
|
||||
StandardDev, Variance,
|
||||
};
|
||||
use tfhe_1_3::shortint::prelude::ModulusSwitchType;
|
||||
use tfhe_1_3::shortint::AtomicPatternParameters;
|
||||
use tfhe_1_3::zk::{CompactPkeCrs, ZkComputeLoad, ZkMSBZeroPaddingBitCount};
|
||||
use tfhe_1_3::{
|
||||
set_server_key, ClientKey, CompactPublicKey, CompressedSquashedNoiseCiphertextList, FheBool,
|
||||
FheInt32, FheUint32, ProvenCompactCiphertextList, Seed, ServerKey,
|
||||
set_server_key, ClientKey, CompactPublicKey, CompressedServerKey,
|
||||
CompressedSquashedNoiseCiphertextList, FheBool, FheInt32, FheUint32, FheUint8,
|
||||
ProvenCompactCiphertextList, Seed, ServerKey,
|
||||
};
|
||||
|
||||
macro_rules! store_versioned_test {
|
||||
@@ -51,20 +55,10 @@ macro_rules! store_versioned_auxiliary {
|
||||
};
|
||||
}
|
||||
|
||||
impl From<TestDistribution> for DynamicDistribution<u64> {
|
||||
fn from(value: TestDistribution) -> Self {
|
||||
match value {
|
||||
TestDistribution::Gaussian { stddev } => {
|
||||
DynamicDistribution::new_gaussian_from_std_dev(StandardDev(stddev))
|
||||
}
|
||||
TestDistribution::TUniform { bound_log2 } => {
|
||||
DynamicDistribution::new_t_uniform(bound_log2)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestDistribution> for DynamicDistribution<u128> {
|
||||
impl<T> From<TestDistribution> for DynamicDistribution<T>
|
||||
where
|
||||
T: UnsignedInteger,
|
||||
{
|
||||
fn from(value: TestDistribution) -> Self {
|
||||
match value {
|
||||
TestDistribution::Gaussian { stddev } => {
|
||||
@@ -191,6 +185,51 @@ impl From<TestMultiBitParameterSet> for MultiBitPBSParameters {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestKS32ParameterSet> for KeySwitch32PBSParameters {
|
||||
fn from(value: TestKS32ParameterSet) -> Self {
|
||||
let TestKS32ParameterSet {
|
||||
lwe_dimension,
|
||||
glwe_dimension,
|
||||
polynomial_size,
|
||||
lwe_noise_distribution,
|
||||
glwe_noise_distribution,
|
||||
pbs_base_log,
|
||||
pbs_level,
|
||||
ks_base_log,
|
||||
ks_level,
|
||||
message_modulus,
|
||||
ciphertext_modulus,
|
||||
carry_modulus,
|
||||
max_noise_level,
|
||||
log2_p_fail,
|
||||
modulus_switch_noise_reduction_params,
|
||||
post_keyswitch_ciphertext_modulus,
|
||||
} = value;
|
||||
|
||||
Self {
|
||||
lwe_dimension: LweDimension(lwe_dimension),
|
||||
glwe_dimension: GlweDimension(glwe_dimension),
|
||||
polynomial_size: PolynomialSize(polynomial_size),
|
||||
lwe_noise_distribution: lwe_noise_distribution.into(),
|
||||
glwe_noise_distribution: glwe_noise_distribution.into(),
|
||||
pbs_base_log: DecompositionBaseLog(pbs_base_log),
|
||||
pbs_level: DecompositionLevelCount(pbs_level),
|
||||
ks_base_log: DecompositionBaseLog(ks_base_log),
|
||||
ks_level: DecompositionLevelCount(ks_level),
|
||||
message_modulus: MessageModulus(message_modulus as u64),
|
||||
carry_modulus: CarryModulus(carry_modulus as u64),
|
||||
max_noise_level: MaxNoiseLevel::new(max_noise_level as u64),
|
||||
log2_p_fail,
|
||||
post_keyswitch_ciphertext_modulus: CiphertextModulus32::try_new(
|
||||
post_keyswitch_ciphertext_modulus,
|
||||
)
|
||||
.unwrap(),
|
||||
ciphertext_modulus: CiphertextModulus::try_new(ciphertext_modulus).unwrap(),
|
||||
modulus_switch_noise_reduction_params: modulus_switch_noise_reduction_params.into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestParameterSet> for AtomicPatternParameters {
|
||||
fn from(value: TestParameterSet) -> Self {
|
||||
match value {
|
||||
@@ -204,6 +243,11 @@ impl From<TestParameterSet> for AtomicPatternParameters {
|
||||
|
||||
multibit.into()
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(test_ks32_parameter_set) => {
|
||||
let ks32 = KeySwitch32PBSParameters::from(test_ks32_parameter_set);
|
||||
|
||||
ks32.into()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -334,6 +378,34 @@ const HL_COMPRESSED_SQUASHED_NOISE_CIPHERTEXT_LIST: HlCompressedSquashedNoiseCip
|
||||
]),
|
||||
};
|
||||
|
||||
const CLIENT_KEY_KS32_FILENAME: &str = "client_key_ks32";
|
||||
|
||||
const CLIENT_KEY_KS32_TEST: HlClientKeyTest = HlClientKeyTest {
|
||||
test_filename: Cow::Borrowed(CLIENT_KEY_KS32_FILENAME),
|
||||
parameters: VALID_TEST_PARAMS_KS32_TUNIFORM,
|
||||
};
|
||||
|
||||
const SERVER_KEY_KS32_TEST: HlServerKeyTest = HlServerKeyTest {
|
||||
test_filename: Cow::Borrowed("server_key_ks32"),
|
||||
client_key_filename: Cow::Borrowed(CLIENT_KEY_KS32_FILENAME),
|
||||
rerand_cpk_filename: None,
|
||||
compressed: false,
|
||||
};
|
||||
|
||||
const COMPRESSED_SERVER_KEY_KS32_TEST: HlServerKeyTest = HlServerKeyTest {
|
||||
test_filename: Cow::Borrowed("compressed_server_key_ks32"),
|
||||
client_key_filename: Cow::Borrowed(CLIENT_KEY_KS32_FILENAME),
|
||||
rerand_cpk_filename: None,
|
||||
compressed: true,
|
||||
};
|
||||
|
||||
const CT_KS32_TEST: HlCiphertextTest = HlCiphertextTest {
|
||||
test_filename: Cow::Borrowed("ct_ks32"),
|
||||
key_filename: Cow::Borrowed(CLIENT_KEY_KS32_FILENAME),
|
||||
compressed: false,
|
||||
clear_value: 25,
|
||||
};
|
||||
|
||||
pub struct V1_3;
|
||||
|
||||
impl TfhersVersion for V1_3 {
|
||||
@@ -505,6 +577,28 @@ impl TfhersVersion for V1_3 {
|
||||
);
|
||||
};
|
||||
|
||||
// Generate data for the KS32 AP
|
||||
{
|
||||
let config = tfhe_1_3::ConfigBuilder::default()
|
||||
.use_custom_parameters(CLIENT_KEY_KS32_TEST.parameters)
|
||||
.build();
|
||||
|
||||
let hl_client_key = ClientKey::generate(config);
|
||||
let compressed_server_key = CompressedServerKey::new(&hl_client_key);
|
||||
let hl_server_key = compressed_server_key.decompress();
|
||||
|
||||
let ct = FheUint8::encrypt(CT_KS32_TEST.clear_value, &hl_client_key);
|
||||
|
||||
store_versioned_test!(&hl_client_key, &dir, &CLIENT_KEY_KS32_TEST.test_filename);
|
||||
store_versioned_test!(&hl_server_key, &dir, &SERVER_KEY_KS32_TEST.test_filename);
|
||||
store_versioned_test!(
|
||||
&compressed_server_key,
|
||||
&dir,
|
||||
&COMPRESSED_SERVER_KEY_KS32_TEST.test_filename
|
||||
);
|
||||
store_versioned_test!(&ct, &dir, &CT_KS32_TEST.test_filename);
|
||||
}
|
||||
|
||||
vec![
|
||||
TestMetadata::HlHeterogeneousCiphertextList(HL_PROVEN_COMPACTLIST_TEST_ZKV2_FASTHASH),
|
||||
TestMetadata::HlClientKey(HL_CLIENTKEY_MS_MEAN_COMPENSATION),
|
||||
@@ -512,6 +606,10 @@ impl TfhersVersion for V1_3 {
|
||||
TestMetadata::HlCompressedSquashedNoiseCiphertextList(
|
||||
HL_COMPRESSED_SQUASHED_NOISE_CIPHERTEXT_LIST,
|
||||
),
|
||||
TestMetadata::HlClientKey(CLIENT_KEY_KS32_TEST),
|
||||
TestMetadata::HlServerKey(SERVER_KEY_KS32_TEST),
|
||||
TestMetadata::HlServerKey(COMPRESSED_SERVER_KEY_KS32_TEST),
|
||||
TestMetadata::HlCiphertext(CT_KS32_TEST),
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@ use crate::{
|
||||
HlClientKeyTest, HlCompressedKVStoreTest, HlServerKeyTest,
|
||||
HlSquashedNoiseUnsignedCiphertextTest, TestClassicParameterSet,
|
||||
TestCompactPublicKeyEncryptionParameters, TestCompressionParameterSet, TestDistribution,
|
||||
TestKeySwitchingParams, TestMetadata, TestModulusSwitchNoiseReductionParams,
|
||||
TestModulusSwitchType, TestMultiBitParameterSet, TestNoiseSquashingParamsMultiBit,
|
||||
TestParameterSet, HL_MODULE_NAME,
|
||||
TestKS32ParameterSet, TestKeySwitchingParams, TestMetadata,
|
||||
TestModulusSwitchNoiseReductionParams, TestModulusSwitchType, TestMultiBitParameterSet,
|
||||
TestNoiseSquashingParamsMultiBit, TestParameterSet, HL_MODULE_NAME,
|
||||
};
|
||||
use std::borrow::Cow;
|
||||
use std::collections::HashMap;
|
||||
@@ -20,18 +20,19 @@ use std::fs::create_dir_all;
|
||||
use tfhe_1_4::boolean::engine::BooleanEngine;
|
||||
use tfhe_1_4::core_crypto::commons::generators::DeterministicSeeder;
|
||||
|
||||
use tfhe_1_4::core_crypto::prelude::DefaultRandomGenerator;
|
||||
use tfhe_1_4::core_crypto::prelude::{DefaultRandomGenerator, UnsignedInteger};
|
||||
use tfhe_1_4::prelude::*;
|
||||
use tfhe_1_4::shortint::engine::ShortintEngine;
|
||||
use tfhe_1_4::shortint::parameters::noise_squashing::NoiseSquashingMultiBitParameters;
|
||||
use tfhe_1_4::shortint::parameters::{
|
||||
CarryModulus, CiphertextModulus, CiphertextModulusLog, CompactCiphertextListExpansionKind,
|
||||
CompactPublicKeyEncryptionParameters, CompressionParameters, CoreCiphertextModulus,
|
||||
DecompositionBaseLog, DecompositionLevelCount, DynamicDistribution, EncryptionKeyChoice,
|
||||
GlweDimension, LweBskGroupingFactor, LweCiphertextCount, LweDimension, MaxNoiseLevel,
|
||||
MessageModulus, ModulusSwitchNoiseReductionParams, ModulusSwitchType,
|
||||
NoiseEstimationMeasureBound, NoiseSquashingParameters, PolynomialSize, RSigmaFactor,
|
||||
ShortintKeySwitchingParameters, StandardDev, SupportedCompactPkeZkScheme, Variance,
|
||||
CarryModulus, CiphertextModulus, CiphertextModulus32, CiphertextModulusLog,
|
||||
CompactCiphertextListExpansionKind, CompactPublicKeyEncryptionParameters,
|
||||
CompressionParameters, CoreCiphertextModulus, DecompositionBaseLog, DecompositionLevelCount,
|
||||
DynamicDistribution, EncryptionKeyChoice, GlweDimension, KeySwitch32PBSParameters,
|
||||
LweBskGroupingFactor, LweCiphertextCount, LweDimension, MaxNoiseLevel, MessageModulus,
|
||||
ModulusSwitchNoiseReductionParams, ModulusSwitchType, NoiseEstimationMeasureBound,
|
||||
NoiseSquashingParameters, PolynomialSize, RSigmaFactor, ShortintKeySwitchingParameters,
|
||||
StandardDev, SupportedCompactPkeZkScheme, Variance,
|
||||
};
|
||||
use tfhe_1_4::shortint::{AtomicPatternParameters, ClassicPBSParameters, MultiBitPBSParameters};
|
||||
use tfhe_1_4::{
|
||||
@@ -51,20 +52,10 @@ macro_rules! store_versioned_auxiliary {
|
||||
};
|
||||
}
|
||||
|
||||
impl From<TestDistribution> for DynamicDistribution<u64> {
|
||||
fn from(value: TestDistribution) -> Self {
|
||||
match value {
|
||||
TestDistribution::Gaussian { stddev } => {
|
||||
DynamicDistribution::new_gaussian_from_std_dev(StandardDev(stddev))
|
||||
}
|
||||
TestDistribution::TUniform { bound_log2 } => {
|
||||
DynamicDistribution::new_t_uniform(bound_log2)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestDistribution> for DynamicDistribution<u128> {
|
||||
impl<T> From<TestDistribution> for DynamicDistribution<T>
|
||||
where
|
||||
T: UnsignedInteger,
|
||||
{
|
||||
fn from(value: TestDistribution) -> Self {
|
||||
match value {
|
||||
TestDistribution::Gaussian { stddev } => {
|
||||
@@ -191,6 +182,51 @@ impl From<TestMultiBitParameterSet> for MultiBitPBSParameters {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestKS32ParameterSet> for KeySwitch32PBSParameters {
|
||||
fn from(value: TestKS32ParameterSet) -> Self {
|
||||
let TestKS32ParameterSet {
|
||||
lwe_dimension,
|
||||
glwe_dimension,
|
||||
polynomial_size,
|
||||
lwe_noise_distribution,
|
||||
glwe_noise_distribution,
|
||||
pbs_base_log,
|
||||
pbs_level,
|
||||
ks_base_log,
|
||||
ks_level,
|
||||
message_modulus,
|
||||
ciphertext_modulus,
|
||||
carry_modulus,
|
||||
max_noise_level,
|
||||
log2_p_fail,
|
||||
modulus_switch_noise_reduction_params,
|
||||
post_keyswitch_ciphertext_modulus,
|
||||
} = value;
|
||||
|
||||
Self {
|
||||
lwe_dimension: LweDimension(lwe_dimension),
|
||||
glwe_dimension: GlweDimension(glwe_dimension),
|
||||
polynomial_size: PolynomialSize(polynomial_size),
|
||||
lwe_noise_distribution: lwe_noise_distribution.into(),
|
||||
glwe_noise_distribution: glwe_noise_distribution.into(),
|
||||
pbs_base_log: DecompositionBaseLog(pbs_base_log),
|
||||
pbs_level: DecompositionLevelCount(pbs_level),
|
||||
ks_base_log: DecompositionBaseLog(ks_base_log),
|
||||
ks_level: DecompositionLevelCount(ks_level),
|
||||
message_modulus: MessageModulus(message_modulus as u64),
|
||||
carry_modulus: CarryModulus(carry_modulus as u64),
|
||||
max_noise_level: MaxNoiseLevel::new(max_noise_level as u64),
|
||||
log2_p_fail,
|
||||
post_keyswitch_ciphertext_modulus: CiphertextModulus32::try_new(
|
||||
post_keyswitch_ciphertext_modulus,
|
||||
)
|
||||
.unwrap(),
|
||||
ciphertext_modulus: CiphertextModulus::try_new(ciphertext_modulus).unwrap(),
|
||||
modulus_switch_noise_reduction_params: modulus_switch_noise_reduction_params.into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestParameterSet> for AtomicPatternParameters {
|
||||
fn from(value: TestParameterSet) -> Self {
|
||||
match value {
|
||||
@@ -204,6 +240,11 @@ impl From<TestParameterSet> for AtomicPatternParameters {
|
||||
|
||||
classic.into()
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(test_ks32_parameter_set) => {
|
||||
let ks32 = KeySwitch32PBSParameters::from(test_ks32_parameter_set);
|
||||
|
||||
ks32.into()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ use tfhe_versionable::{Versionize as VersionizeTfhe_0_10, Versionize as Versioni
|
||||
|
||||
use crate::{
|
||||
data_dir, dir_for_version, TestClassicParameterSet, TestCompactPublicKeyEncryptionParameters,
|
||||
TestCompressionParameterSet, TestDistribution, TestKeySwitchingParams, TestMetadata,
|
||||
TestModulusSwitchNoiseReductionParams, TestModulusSwitchType, TestMultiBitParameterSet,
|
||||
TestNoiseSquashingCompressionParameters, TestNoiseSquashingParams,
|
||||
TestCompressionParameterSet, TestDistribution, TestKS32ParameterSet, TestKeySwitchingParams,
|
||||
TestMetadata, TestModulusSwitchNoiseReductionParams, TestModulusSwitchType,
|
||||
TestMultiBitParameterSet, TestNoiseSquashingCompressionParameters, TestNoiseSquashingParams,
|
||||
TestNoiseSquashingParamsMultiBit, TestParameterSet,
|
||||
};
|
||||
|
||||
@@ -66,6 +66,33 @@ pub const VALID_TEST_PARAMS_TUNIFORM: TestParameterSet =
|
||||
modulus_switch_noise_reduction_params: TestModulusSwitchType::Standard,
|
||||
});
|
||||
|
||||
pub const VALID_TEST_PARAMS_KS32_TUNIFORM: TestParameterSet =
|
||||
TestParameterSet::TestKS32ParameterSet(TestKS32ParameterSet {
|
||||
lwe_dimension: 918,
|
||||
glwe_dimension: 1,
|
||||
polynomial_size: 2048,
|
||||
lwe_noise_distribution: TestDistribution::TUniform { bound_log2: 13 },
|
||||
glwe_noise_distribution: TestDistribution::TUniform { bound_log2: 17 },
|
||||
pbs_base_log: 23,
|
||||
pbs_level: 1,
|
||||
ks_base_log: 4,
|
||||
ks_level: 4,
|
||||
message_modulus: 4,
|
||||
carry_modulus: 4,
|
||||
max_noise_level: 5,
|
||||
log2_p_fail: -129.358380844,
|
||||
ciphertext_modulus: 1 << 64,
|
||||
modulus_switch_noise_reduction_params: TestModulusSwitchType::DriftTechniqueNoiseReduction(
|
||||
TestModulusSwitchNoiseReductionParams {
|
||||
modulus_switch_zeros_count: 1449,
|
||||
ms_bound: 67108864f64,
|
||||
ms_r_sigma_factor: 13.179851302864899f64,
|
||||
ms_input_variance: 2.63039392929833E-7f64,
|
||||
},
|
||||
),
|
||||
post_keyswitch_ciphertext_modulus: 1 << 32,
|
||||
});
|
||||
|
||||
/// Those parameters are insecure and are used to generate small legacy public keys
|
||||
pub const INSECURE_SMALL_PK_TEST_PARAMS: TestParameterSet =
|
||||
TestParameterSet::TestClassicParameterSet(TestClassicParameterSet {
|
||||
|
||||
@@ -80,6 +80,26 @@ pub struct TestMultiBitParameterSet {
|
||||
pub grouping_factor: usize,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||
pub struct TestKS32ParameterSet {
|
||||
pub lwe_dimension: usize,
|
||||
pub glwe_dimension: usize,
|
||||
pub polynomial_size: usize,
|
||||
pub lwe_noise_distribution: TestDistribution,
|
||||
pub glwe_noise_distribution: TestDistribution,
|
||||
pub pbs_base_log: usize,
|
||||
pub pbs_level: usize,
|
||||
pub ks_base_log: usize,
|
||||
pub ks_level: usize,
|
||||
pub message_modulus: usize,
|
||||
pub ciphertext_modulus: u128,
|
||||
pub carry_modulus: usize,
|
||||
pub max_noise_level: usize,
|
||||
pub log2_p_fail: f64,
|
||||
pub modulus_switch_noise_reduction_params: TestModulusSwitchType,
|
||||
pub post_keyswitch_ciphertext_modulus: u128,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||
pub struct TestModulusSwitchNoiseReductionParams {
|
||||
pub modulus_switch_zeros_count: usize,
|
||||
@@ -277,6 +297,7 @@ pub struct HlClientKeyTest {
|
||||
pub enum TestParameterSet {
|
||||
TestClassicParameterSet(TestClassicParameterSet),
|
||||
TestMultiBitParameterSet(TestMultiBitParameterSet),
|
||||
TestKS32ParameterSet(TestKS32ParameterSet),
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
@@ -296,6 +317,9 @@ impl TestParameterSet {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_multi_bit_parameter_set) => {
|
||||
test_multi_bit_parameter_set.polynomial_size
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(test_ks32_parameter_set) => {
|
||||
test_ks32_parameter_set.polynomial_size
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -307,6 +331,9 @@ impl TestParameterSet {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_multi_bit_parameter_set) => {
|
||||
test_multi_bit_parameter_set.glwe_dimension
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(test_ks32_parameter_set) => {
|
||||
test_ks32_parameter_set.glwe_dimension
|
||||
}
|
||||
}
|
||||
}
|
||||
const fn lwe_noise_distribution(&self) -> TestDistribution {
|
||||
@@ -317,6 +344,9 @@ impl TestParameterSet {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_multi_bit_parameter_set) => {
|
||||
test_multi_bit_parameter_set.lwe_noise_distribution
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(test_ks32_parameter_set) => {
|
||||
test_ks32_parameter_set.lwe_noise_distribution
|
||||
}
|
||||
}
|
||||
}
|
||||
const fn ciphertext_modulus(&self) -> u128 {
|
||||
@@ -327,6 +357,9 @@ impl TestParameterSet {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_multi_bit_parameter_set) => {
|
||||
test_multi_bit_parameter_set.ciphertext_modulus
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(test_ks32_parameter_set) => {
|
||||
test_ks32_parameter_set.ciphertext_modulus
|
||||
}
|
||||
}
|
||||
}
|
||||
const fn message_modulus(&self) -> usize {
|
||||
@@ -337,6 +370,9 @@ impl TestParameterSet {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_multi_bit_parameter_set) => {
|
||||
test_multi_bit_parameter_set.message_modulus
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(test_ks32_parameter_set) => {
|
||||
test_ks32_parameter_set.message_modulus
|
||||
}
|
||||
}
|
||||
}
|
||||
const fn carry_modulus(&self) -> usize {
|
||||
@@ -347,6 +383,9 @@ impl TestParameterSet {
|
||||
TestParameterSet::TestMultiBitParameterSet(test_multi_bit_parameter_set) => {
|
||||
test_multi_bit_parameter_set.carry_modulus
|
||||
}
|
||||
TestParameterSet::TestKS32ParameterSet(test_ks32_parameter_set) => {
|
||||
test_ks32_parameter_set.carry_modulus
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user