Skip to content

Commit fd554e7

Browse files
committed
fix(shortint): add ciphertext_modulus_after_packing_ks to compression parameters
1 parent a668112 commit fd554e7

File tree

6 files changed

+77
-11
lines changed

6 files changed

+77
-11
lines changed

tfhe/src/integer/gpu/client_key/radix.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl RadixClientKey {
4343
params.packing_ks_base_log,
4444
params.packing_ks_level,
4545
params.packing_ks_key_noise_distribution,
46-
self.parameters().ciphertext_modulus(),
46+
params.ciphertext_modulus_after_packing_ks,
4747
&mut engine.encryption_generator,
4848
)
4949
});
Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,59 @@
1-
use tfhe_versionable::VersionsDispatch;
2-
31
use super::parameters::list_compression::CompressionParameters;
2+
use super::CiphertextModulus;
3+
use crate::core_crypto::prelude::{CiphertextModulusLog, LweCiphertextCount};
4+
use crate::shortint::parameters::{
5+
DecompositionBaseLog, DecompositionLevelCount, DynamicDistribution, GlweDimension,
6+
PolynomialSize,
7+
};
8+
use std::convert::Infallible;
9+
use tfhe_versionable::{Upgrade, Version, VersionsDispatch};
10+
11+
#[derive(Version)]
12+
pub struct CompressionParametersV0 {
13+
pub br_level: DecompositionLevelCount,
14+
pub br_base_log: DecompositionBaseLog,
15+
pub packing_ks_level: DecompositionLevelCount,
16+
pub packing_ks_base_log: DecompositionBaseLog,
17+
pub packing_ks_polynomial_size: PolynomialSize,
18+
pub packing_ks_glwe_dimension: GlweDimension,
19+
pub lwe_per_glwe: LweCiphertextCount,
20+
pub storage_log_modulus: CiphertextModulusLog,
21+
pub packing_ks_key_noise_distribution: DynamicDistribution<u64>,
22+
}
23+
24+
impl Upgrade<CompressionParameters> for CompressionParametersV0 {
25+
type Error = Infallible;
26+
27+
fn upgrade(self) -> Result<CompressionParameters, Self::Error> {
28+
let Self {
29+
br_level,
30+
br_base_log,
31+
packing_ks_level,
32+
packing_ks_base_log,
33+
packing_ks_polynomial_size,
34+
packing_ks_glwe_dimension,
35+
lwe_per_glwe,
36+
storage_log_modulus,
37+
packing_ks_key_noise_distribution,
38+
} = self;
39+
40+
Ok(CompressionParameters {
41+
br_level,
42+
br_base_log,
43+
packing_ks_level,
44+
packing_ks_base_log,
45+
packing_ks_polynomial_size,
46+
packing_ks_glwe_dimension,
47+
lwe_per_glwe,
48+
storage_log_modulus,
49+
packing_ks_key_noise_distribution,
50+
ciphertext_modulus_after_packing_ks: CiphertextModulus::new_native(),
51+
})
52+
}
53+
}
454

555
#[derive(VersionsDispatch)]
656
pub enum CompressionParametersVersions {
7-
V0(CompressionParameters),
57+
V0(CompressionParametersV0),
58+
V1(CompressionParameters),
859
}

tfhe/src/shortint/list_compression/compressed_server_keys.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ impl ClientKey {
103103
params.packing_ks_base_log,
104104
params.packing_ks_level,
105105
params.packing_ks_key_noise_distribution,
106-
self.parameters.ciphertext_modulus(),
106+
params.ciphertext_modulus_after_packing_ks,
107107
&mut engine.seeder,
108108
)
109109
});

tfhe/src/shortint/list_compression/compression.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ impl CompressionKey {
2525
let lwe_pksk = &self.packing_key_switching_key;
2626

2727
let polynomial_size = lwe_pksk.output_polynomial_size();
28-
let ciphertext_modulus = lwe_pksk.ciphertext_modulus();
28+
29+
let out_ciphertext_modulus = lwe_pksk.ciphertext_modulus();
30+
2931
let glwe_size = lwe_pksk.output_glwe_size();
3032
let lwe_size = lwe_pksk.input_key_lwe_dimension().to_lwe_size();
3133

@@ -43,6 +45,7 @@ impl CompressionKey {
4345
let message_modulus = first_ct.message_modulus;
4446
let carry_modulus = first_ct.carry_modulus;
4547
let pbs_order = first_ct.pbs_order;
48+
let in_ciphertext_modulus = first_ct.ct.ciphertext_modulus();
4649

4750
assert!(
4851
message_modulus.0 <= carry_modulus.0,
@@ -86,6 +89,12 @@ impl CompressionKey {
8689
"All ciphertexts do not have the same pbs order"
8790
);
8891

92+
assert_eq!(
93+
in_ciphertext_modulus,
94+
ct.ct.ciphertext_modulus(),
95+
"All ciphertexts do not have the same ciphertext modulus"
96+
);
97+
8998
let mut ct = ct.clone();
9099
let max_noise_level =
91100
MaxNoiseLevel::new((ct.noise_level() * message_modulus.0).get());
@@ -94,12 +103,12 @@ impl CompressionKey {
94103
list.extend(ct.ct.as_ref());
95104
}
96105

97-
let list = LweCiphertextList::from_container(list, lwe_size, ciphertext_modulus);
106+
let list = LweCiphertextList::from_container(list, lwe_size, in_ciphertext_modulus);
98107

99108
let bodies_count = LweCiphertextCount(ct_list.len());
100109

101110
let mut out =
102-
GlweCiphertext::new(0, glwe_size, polynomial_size, ciphertext_modulus);
111+
GlweCiphertext::new(0, glwe_size, polynomial_size, out_ciphertext_modulus);
103112

104113
par_keyswitch_lwe_ciphertext_list_and_pack_in_glwe_ciphertext(
105114
lwe_pksk, &list, &mut out,
@@ -120,7 +129,7 @@ impl CompressionKey {
120129
pbs_order,
121130
lwe_per_glwe,
122131
count,
123-
ciphertext_modulus,
132+
ciphertext_modulus: out_ciphertext_modulus,
124133
}
125134
}
126135
}

tfhe/src/shortint/list_compression/server_keys.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ impl ClientKey {
6565
params.packing_ks_base_log,
6666
params.packing_ks_level,
6767
params.packing_ks_key_noise_distribution,
68-
self.parameters.ciphertext_modulus(),
68+
params.ciphertext_modulus_after_packing_ks,
6969
&mut engine.encryption_generator,
7070
)
7171
});
@@ -116,6 +116,7 @@ pub struct CompressionConformanceParameters {
116116
pub packing_ks_base_log: DecompositionBaseLog,
117117
pub packing_ks_polynomial_size: PolynomialSize,
118118
pub packing_ks_glwe_dimension: GlweDimension,
119+
pub ciphertext_modulus_after_packing_ks: CiphertextModulus<u64>,
119120
pub lwe_per_glwe: LweCiphertextCount,
120121
pub storage_log_modulus: CiphertextModulusLog,
121122
pub uncompressed_polynomial_size: PolynomialSize,
@@ -132,6 +133,8 @@ impl From<(PBSParameters, CompressionParameters)> for CompressionConformancePara
132133
packing_ks_base_log: compression_params.packing_ks_base_log,
133134
packing_ks_polynomial_size: compression_params.packing_ks_polynomial_size,
134135
packing_ks_glwe_dimension: compression_params.packing_ks_glwe_dimension,
136+
ciphertext_modulus_after_packing_ks: compression_params
137+
.ciphertext_modulus_after_packing_ks,
135138
lwe_per_glwe: compression_params.lwe_per_glwe,
136139
storage_log_modulus: compression_params.storage_log_modulus,
137140
uncompressed_polynomial_size: pbs_params.polynomial_size(),
@@ -159,7 +162,7 @@ impl ParameterSetConformant for CompressionKey {
159162
.to_equivalent_lwe_dimension(parameter_set.uncompressed_polynomial_size),
160163
output_glwe_size: parameter_set.packing_ks_glwe_dimension.to_glwe_size(),
161164
output_polynomial_size: parameter_set.packing_ks_polynomial_size,
162-
ciphertext_modulus: parameter_set.cipherext_modulus,
165+
ciphertext_modulus: parameter_set.ciphertext_modulus_after_packing_ks,
163166
};
164167

165168
packing_key_switching_key.is_conformant(&params)

tfhe/src/shortint/parameters/list_compression.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use tfhe_versionable::Versionize;
22

3+
use super::CiphertextModulus;
34
use crate::core_crypto::prelude::{CiphertextModulusLog, LweCiphertextCount};
45
use crate::shortint::backward_compatibility::parameters::list_compression::CompressionParametersVersions;
56
use crate::shortint::parameters::{
@@ -20,6 +21,7 @@ pub struct CompressionParameters {
2021
pub lwe_per_glwe: LweCiphertextCount,
2122
pub storage_log_modulus: CiphertextModulusLog,
2223
pub packing_ks_key_noise_distribution: DynamicDistribution<u64>,
24+
pub ciphertext_modulus_after_packing_ks: CiphertextModulus,
2325
}
2426

2527
pub const COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64: CompressionParameters =
@@ -36,4 +38,5 @@ pub const V0_11_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64: CompressionPa
3638
lwe_per_glwe: LweCiphertextCount(256),
3739
storage_log_modulus: CiphertextModulusLog(12),
3840
packing_ks_key_noise_distribution: DynamicDistribution::new_t_uniform(43),
41+
ciphertext_modulus_after_packing_ks: CiphertextModulus::new_native(),
3942
};

0 commit comments

Comments
 (0)