chore(backward): add data for ks32 noise squashing server key

This commit is contained in:
Nicolas Sarlin
2025-10-07 18:32:59 +02:00
committed by Nicolas Sarlin
parent 027792d659
commit 516789bd5d
11 changed files with 168 additions and 34 deletions

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c801d8dbf641360ea1c8f330d69ecbcb75a48d9b8957d030bc7bec4b3e050df3
size 7539

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:968306272872b940c7057dbbe140faced3d8f480162e2cc1b0acbce5deee7991
size 688766

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8c823baddc0d71952e3a016ee179e9254017e44173315aa891faf993cf2ac4b9
size 779630

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:15c0efb585a3e714403b541825544cbf7eb593efe0de35311df812009d1fe05b
size 1999534

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cccce20a35dc8e6290b66b7a491638082f0f39cdbbdc47a901fb8c1412940acd
size 2270645

View File

@@ -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,
)),
),
]

View File

@@ -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 {

View File

@@ -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(),

View File

@@ -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),
]
}
}

View File

@@ -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 {

View File

@@ -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,