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 noise squashing server key
This commit is contained in:
committed by
Nicolas Sarlin
parent
027792d659
commit
516789bd5d
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c801d8dbf641360ea1c8f330d69ecbcb75a48d9b8957d030bc7bec4b3e050df3
|
||||
size 7539
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:968306272872b940c7057dbbe140faced3d8f480162e2cc1b0acbce5deee7991
|
||||
size 688766
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8c823baddc0d71952e3a016ee179e9254017e44173315aa891faf993cf2ac4b9
|
||||
size 779630
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:15c0efb585a3e714403b541825544cbf7eb593efe0de35311df812009d1fe05b
|
||||
size 1999534
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cccce20a35dc8e6290b66b7a491638082f0f39cdbbdc47a901fb8c1412940acd
|
||||
size 2270645
|
||||
@@ -776,4 +776,24 @@
|
||||
num_elements: 512,
|
||||
)),
|
||||
),
|
||||
(
|
||||
tfhe_version_min: "1.4",
|
||||
tfhe_module: "high_level_api",
|
||||
metadata: HlServerKey((
|
||||
test_filename: "compressed_server_key_ks32_noise_squashing",
|
||||
client_key_filename: "client_key_ks32_noise_squashing",
|
||||
rerand_cpk_filename: None,
|
||||
compressed: true,
|
||||
)),
|
||||
),
|
||||
(
|
||||
tfhe_version_min: "1.4",
|
||||
tfhe_module: "high_level_api",
|
||||
metadata: HlServerKey((
|
||||
test_filename: "server_key_ks32_noise_squashing",
|
||||
client_key_filename: "client_key_ks32_noise_squashing",
|
||||
rerand_cpk_filename: None,
|
||||
compressed: false,
|
||||
)),
|
||||
),
|
||||
]
|
||||
@@ -48,35 +48,34 @@ impl<Scalar: UnsignedInteger> From<TestDistribution> for DynamicDistribution<Sca
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestModulusSwitchNoiseReductionParams> for ModulusSwitchNoiseReductionParams {
|
||||
fn from(value: TestModulusSwitchNoiseReductionParams) -> Self {
|
||||
impl From<TestModulusSwitchType> for Option<ModulusSwitchNoiseReductionParams> {
|
||||
fn from(value: TestModulusSwitchType) -> Self {
|
||||
let modulus_switch_noise_reduction_params = match value {
|
||||
TestModulusSwitchType::Standard => return None,
|
||||
TestModulusSwitchType::DriftTechniqueNoiseReduction(
|
||||
test_modulus_switch_noise_reduction_params,
|
||||
) => test_modulus_switch_noise_reduction_params,
|
||||
TestModulusSwitchType::CenteredMeanNoiseReduction => panic!("Not supported"),
|
||||
};
|
||||
|
||||
let TestModulusSwitchNoiseReductionParams {
|
||||
modulus_switch_zeros_count,
|
||||
ms_bound,
|
||||
ms_r_sigma_factor,
|
||||
ms_input_variance,
|
||||
} = value;
|
||||
} = modulus_switch_noise_reduction_params;
|
||||
|
||||
ModulusSwitchNoiseReductionParams {
|
||||
Some(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),
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestClassicParameterSet> for ClassicPBSParameters {
|
||||
fn from(value: TestClassicParameterSet) -> Self {
|
||||
let modulus_switch_noise_reduction_params =
|
||||
match value.modulus_switch_noise_reduction_params {
|
||||
TestModulusSwitchType::Standard => None,
|
||||
TestModulusSwitchType::DriftTechniqueNoiseReduction(
|
||||
test_modulus_switch_noise_reduction_params,
|
||||
) => Some(test_modulus_switch_noise_reduction_params.into()),
|
||||
TestModulusSwitchType::CenteredMeanNoiseReduction => panic!("Not supported"),
|
||||
};
|
||||
|
||||
ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(value.lwe_dimension),
|
||||
glwe_dimension: GlweDimension(value.glwe_dimension),
|
||||
@@ -99,7 +98,9 @@ impl From<TestClassicParameterSet> for ClassicPBSParameters {
|
||||
_ => panic!("Invalid encryption key choice"),
|
||||
}
|
||||
},
|
||||
modulus_switch_noise_reduction_params,
|
||||
modulus_switch_noise_reduction_params: value
|
||||
.modulus_switch_noise_reduction_params
|
||||
.into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -189,8 +190,7 @@ impl From<TestNoiseSquashingParams> for NoiseSquashingParameters {
|
||||
glwe_noise_distribution: glwe_noise_distribution.into(),
|
||||
decomp_base_log: DecompositionBaseLog(decomp_base_log),
|
||||
decomp_level_count: DecompositionLevelCount(decomp_level_count),
|
||||
modulus_switch_noise_reduction_params: modulus_switch_noise_reduction_params
|
||||
.map(|p| p.into()),
|
||||
modulus_switch_noise_reduction_params: modulus_switch_noise_reduction_params.into(),
|
||||
message_modulus: MessageModulus(message_modulus.try_into().unwrap()),
|
||||
carry_modulus: CarryModulus(carry_modulus.try_into().unwrap()),
|
||||
ciphertext_modulus: if ciphertext_modulus == 0 {
|
||||
|
||||
@@ -272,10 +272,7 @@ impl From<TestNoiseSquashingParams> for NoiseSquashingParameters {
|
||||
glwe_noise_distribution: glwe_noise_distribution.into(),
|
||||
decomp_base_log: DecompositionBaseLog(decomp_base_log),
|
||||
decomp_level_count: DecompositionLevelCount(decomp_level_count),
|
||||
modulus_switch_noise_reduction_params: match modulus_switch_noise_reduction_params {
|
||||
Some(p) => ModulusSwitchType::DriftTechniqueNoiseReduction(p.into()),
|
||||
None => ModulusSwitchType::Standard,
|
||||
},
|
||||
modulus_switch_noise_reduction_params: modulus_switch_noise_reduction_params.into(),
|
||||
message_modulus: MessageModulus(message_modulus as u64),
|
||||
carry_modulus: CarryModulus(carry_modulus as u64),
|
||||
ciphertext_modulus: CoreCiphertextModulus::try_new(ciphertext_modulus).unwrap(),
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
use crate::generate::{
|
||||
store_versioned_auxiliary_tfhe_1_4, store_versioned_test_tfhe_1_4, TfhersVersion,
|
||||
INSECURE_DEDICATED_CPK_TEST_PARAMS, INSECURE_SMALL_TEST_NOISE_SQUASHING_PARAMS_MULTI_BIT,
|
||||
INSECURE_DEDICATED_CPK_TEST_PARAMS,
|
||||
INSECURE_SMALL_TEST_NOISE_SQUASHING_PARAMS_MS_NOISE_REDUCTION,
|
||||
INSECURE_SMALL_TEST_NOISE_SQUASHING_PARAMS_MULTI_BIT, INSECURE_SMALL_TEST_PARAMS_KS32,
|
||||
INSECURE_SMALL_TEST_PARAMS_MS_MEAN_COMPENSATION, INSECURE_SMALL_TEST_PARAMS_MULTI_BIT,
|
||||
KS_TO_BIG_TEST_PARAMS, KS_TO_SMALL_TEST_PARAMS, VALID_TEST_PARAMS_TUNIFORM,
|
||||
VALID_TEST_PARAMS_TUNIFORM_COMPRESSION,
|
||||
@@ -11,7 +13,7 @@ use crate::{
|
||||
TestCompactPublicKeyEncryptionParameters, TestCompressionParameterSet, TestDistribution,
|
||||
TestKS32ParameterSet, TestKeySwitchingParams, TestMetadata,
|
||||
TestModulusSwitchNoiseReductionParams, TestModulusSwitchType, TestMultiBitParameterSet,
|
||||
TestNoiseSquashingParamsMultiBit, TestParameterSet, HL_MODULE_NAME,
|
||||
TestNoiseSquashingParams, TestNoiseSquashingParamsMultiBit, TestParameterSet, HL_MODULE_NAME,
|
||||
};
|
||||
use std::borrow::Cow;
|
||||
use std::collections::HashMap;
|
||||
@@ -31,13 +33,13 @@ use tfhe_1_4::shortint::parameters::{
|
||||
DynamicDistribution, EncryptionKeyChoice, GlweDimension, KeySwitch32PBSParameters,
|
||||
LweBskGroupingFactor, LweCiphertextCount, LweDimension, MaxNoiseLevel, MessageModulus,
|
||||
ModulusSwitchNoiseReductionParams, ModulusSwitchType, NoiseEstimationMeasureBound,
|
||||
NoiseSquashingParameters, PolynomialSize, RSigmaFactor, ShortintKeySwitchingParameters,
|
||||
StandardDev, SupportedCompactPkeZkScheme, Variance,
|
||||
NoiseSquashingClassicParameters, NoiseSquashingParameters, PolynomialSize, RSigmaFactor,
|
||||
ShortintKeySwitchingParameters, StandardDev, SupportedCompactPkeZkScheme, Variance,
|
||||
};
|
||||
use tfhe_1_4::shortint::{AtomicPatternParameters, ClassicPBSParameters, MultiBitPBSParameters};
|
||||
use tfhe_1_4::{
|
||||
set_server_key, ClientKey, CompressedCompactPublicKey, ConfigBuilder, FheUint32, FheUint64,
|
||||
KVStore, Seed, ServerKey,
|
||||
set_server_key, ClientKey, CompressedCompactPublicKey, CompressedServerKey, ConfigBuilder,
|
||||
FheUint32, FheUint64, KVStore, Seed, ServerKey,
|
||||
};
|
||||
|
||||
macro_rules! store_versioned_test {
|
||||
@@ -249,6 +251,38 @@ impl From<TestParameterSet> for AtomicPatternParameters {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestNoiseSquashingParams> for NoiseSquashingParameters {
|
||||
fn from(value: TestNoiseSquashingParams) -> Self {
|
||||
let TestNoiseSquashingParams {
|
||||
glwe_dimension,
|
||||
polynomial_size,
|
||||
glwe_noise_distribution,
|
||||
decomp_base_log,
|
||||
decomp_level_count,
|
||||
modulus_switch_noise_reduction_params,
|
||||
message_modulus,
|
||||
carry_modulus,
|
||||
ciphertext_modulus,
|
||||
} = value;
|
||||
|
||||
Self::Classic(NoiseSquashingClassicParameters {
|
||||
glwe_dimension: GlweDimension(glwe_dimension),
|
||||
polynomial_size: PolynomialSize(polynomial_size),
|
||||
glwe_noise_distribution: glwe_noise_distribution.into(),
|
||||
decomp_base_log: DecompositionBaseLog(decomp_base_log),
|
||||
decomp_level_count: DecompositionLevelCount(decomp_level_count),
|
||||
modulus_switch_noise_reduction_params: modulus_switch_noise_reduction_params.into(),
|
||||
message_modulus: MessageModulus(message_modulus.try_into().unwrap()),
|
||||
carry_modulus: CarryModulus(carry_modulus.try_into().unwrap()),
|
||||
ciphertext_modulus: if ciphertext_modulus == 0 {
|
||||
CoreCiphertextModulus::new_native()
|
||||
} else {
|
||||
CoreCiphertextModulus::try_new(ciphertext_modulus).unwrap()
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TestNoiseSquashingParamsMultiBit> for NoiseSquashingParameters {
|
||||
fn from(value: TestNoiseSquashingParamsMultiBit) -> Self {
|
||||
let TestNoiseSquashingParamsMultiBit {
|
||||
@@ -375,6 +409,20 @@ const HL_COMPRESSED_KV_STORE_TEST: HlCompressedKVStoreTest = HlCompressedKVStore
|
||||
num_elements: 512,
|
||||
};
|
||||
|
||||
const HL_SERVERKEY_KS32_NOISE_SQUASHING_TEST: HlServerKeyTest = HlServerKeyTest {
|
||||
test_filename: Cow::Borrowed("server_key_ks32_noise_squashing"),
|
||||
client_key_filename: Cow::Borrowed("client_key_ks32_noise_squashing"),
|
||||
rerand_cpk_filename: None,
|
||||
compressed: false,
|
||||
};
|
||||
|
||||
const HL_COMPRESSED_SERVERKEY_KS32_NOISE_SQUASHING_TEST: HlServerKeyTest = HlServerKeyTest {
|
||||
test_filename: Cow::Borrowed("compressed_server_key_ks32_noise_squashing"),
|
||||
client_key_filename: Cow::Borrowed("client_key_ks32_noise_squashing"),
|
||||
rerand_cpk_filename: None,
|
||||
compressed: true,
|
||||
};
|
||||
|
||||
pub struct V1_4;
|
||||
|
||||
impl TfhersVersion for V1_4 {
|
||||
@@ -509,6 +557,36 @@ impl TfhersVersion for V1_4 {
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
let config =
|
||||
tfhe_1_4::ConfigBuilder::with_custom_parameters(INSECURE_SMALL_TEST_PARAMS_KS32)
|
||||
.enable_noise_squashing(
|
||||
INSECURE_SMALL_TEST_NOISE_SQUASHING_PARAMS_MS_NOISE_REDUCTION.into(),
|
||||
)
|
||||
.build();
|
||||
let client_key = ClientKey::generate(config);
|
||||
let compressed_server_key = CompressedServerKey::new(&client_key);
|
||||
let server_key = compressed_server_key.decompress();
|
||||
|
||||
store_versioned_auxiliary!(
|
||||
&client_key,
|
||||
&dir,
|
||||
&HL_SERVERKEY_KS32_NOISE_SQUASHING_TEST.client_key_filename
|
||||
);
|
||||
|
||||
store_versioned_test!(
|
||||
&compressed_server_key,
|
||||
&dir,
|
||||
&HL_COMPRESSED_SERVERKEY_KS32_NOISE_SQUASHING_TEST.test_filename
|
||||
);
|
||||
|
||||
store_versioned_test!(
|
||||
&server_key,
|
||||
&dir,
|
||||
&HL_SERVERKEY_KS32_NOISE_SQUASHING_TEST.test_filename
|
||||
);
|
||||
}
|
||||
|
||||
vec![
|
||||
TestMetadata::HlClientKey(HL_CLIENTKEY_WITH_NOISE_SQUASHING_TEST),
|
||||
TestMetadata::HlServerKey(HL_SERVERKEY_TEST),
|
||||
@@ -517,6 +595,8 @@ impl TfhersVersion for V1_4 {
|
||||
),
|
||||
TestMetadata::HlServerKey(HL_SERVERKEY_RERAND_TEST),
|
||||
TestMetadata::HlCompressedKVStoreTest(HL_COMPRESSED_KV_STORE_TEST),
|
||||
TestMetadata::HlServerKey(HL_COMPRESSED_SERVERKEY_KS32_NOISE_SQUASHING_TEST),
|
||||
TestMetadata::HlServerKey(HL_SERVERKEY_KS32_NOISE_SQUASHING_TEST),
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,12 +197,14 @@ pub const INSECURE_SMALL_TEST_NOISE_SQUASHING_PARAMS_MS_NOISE_REDUCTION: TestNoi
|
||||
glwe_noise_distribution: TestDistribution::TUniform { bound_log2: 30 },
|
||||
decomp_base_log: 24,
|
||||
decomp_level_count: 3,
|
||||
modulus_switch_noise_reduction_params: Some(TestModulusSwitchNoiseReductionParams {
|
||||
modulus_switch_zeros_count: 2,
|
||||
ms_bound: 288230376151711744f64,
|
||||
ms_r_sigma_factor: 13.179852282053789f64,
|
||||
ms_input_variance: 2.63039184094559e-7f64,
|
||||
}),
|
||||
modulus_switch_noise_reduction_params: TestModulusSwitchType::DriftTechniqueNoiseReduction(
|
||||
TestModulusSwitchNoiseReductionParams {
|
||||
modulus_switch_zeros_count: 2,
|
||||
ms_bound: 288230376151711744f64,
|
||||
ms_r_sigma_factor: 13.179852282053789f64,
|
||||
ms_input_variance: 2.63039184094559e-7f64,
|
||||
},
|
||||
),
|
||||
message_modulus: 4,
|
||||
carry_modulus: 4,
|
||||
// 0 interpreted as native modulus for u128
|
||||
@@ -236,6 +238,26 @@ pub const INSECURE_SMALL_TEST_NOISE_SQUASHING_PARAMS_MULTI_BIT: TestNoiseSquashi
|
||||
ciphertext_modulus: 0,
|
||||
};
|
||||
|
||||
pub const INSECURE_SMALL_TEST_PARAMS_KS32: TestParameterSet =
|
||||
TestParameterSet::TestKS32ParameterSet(TestKS32ParameterSet {
|
||||
lwe_dimension: 2,
|
||||
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.15284804376165,
|
||||
ciphertext_modulus: 1 << 64,
|
||||
modulus_switch_noise_reduction_params: TestModulusSwitchType::CenteredMeanNoiseReduction,
|
||||
post_keyswitch_ciphertext_modulus: 1 << 32,
|
||||
});
|
||||
|
||||
// Compression parameters for 2_2 TUniform
|
||||
pub const VALID_TEST_PARAMS_TUNIFORM_COMPRESSION: TestCompressionParameterSet =
|
||||
TestCompressionParameterSet {
|
||||
|
||||
@@ -122,7 +122,7 @@ pub struct TestNoiseSquashingParams {
|
||||
pub glwe_noise_distribution: TestDistribution,
|
||||
pub decomp_base_log: usize,
|
||||
pub decomp_level_count: usize,
|
||||
pub modulus_switch_noise_reduction_params: Option<TestModulusSwitchNoiseReductionParams>,
|
||||
pub modulus_switch_noise_reduction_params: TestModulusSwitchType,
|
||||
pub message_modulus: usize,
|
||||
pub carry_modulus: usize,
|
||||
pub ciphertext_modulus: u128,
|
||||
|
||||
Reference in New Issue
Block a user