Skip to content

Commit f7655cc

Browse files
committed
fix(shortint): make noise_level field of Ciphertext private again
- this is required to make sure we have correctness checks on noise_level updates if we enable them
1 parent 371e823 commit f7655cc

File tree

19 files changed

+144
-139
lines changed

19 files changed

+144
-139
lines changed

tfhe/src/integer/gpu/ciphertext/boolean_value.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,17 @@ impl CudaBooleanBlock {
139139
let h_lwe_ciphertext_list = self.0.ciphertext.d_blocks.to_lwe_ciphertext_list(streams);
140140
let ciphertext_modulus = h_lwe_ciphertext_list.ciphertext_modulus();
141141

142-
let block = Ciphertext {
143-
ct: LweCiphertextOwned::from_container(
142+
let block = Ciphertext::new(
143+
LweCiphertextOwned::from_container(
144144
h_lwe_ciphertext_list.into_container(),
145145
ciphertext_modulus,
146146
),
147-
degree: self.0.ciphertext.info.blocks[0].degree,
148-
noise_level: self.0.ciphertext.info.blocks[0].noise_level,
149-
message_modulus: self.0.ciphertext.info.blocks[0].message_modulus,
150-
carry_modulus: self.0.ciphertext.info.blocks[0].carry_modulus,
151-
pbs_order: self.0.ciphertext.info.blocks[0].pbs_order,
152-
};
147+
self.0.ciphertext.info.blocks[0].degree,
148+
self.0.ciphertext.info.blocks[0].noise_level,
149+
self.0.ciphertext.info.blocks[0].message_modulus,
150+
self.0.ciphertext.info.blocks[0].carry_modulus,
151+
self.0.ciphertext.info.blocks[0].pbs_order,
152+
);
153153

154154
BooleanBlock::new_unchecked(block)
155155
}

tfhe/src/integer/gpu/ciphertext/mod.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,15 @@ impl CudaRadixCiphertext {
161161
.into_container()
162162
.chunks(lwe_size)
163163
.zip(&self.info.blocks)
164-
.map(|(data, i)| Ciphertext {
165-
ct: LweCiphertextOwned::from_container(data.to_vec(), ciphertext_modulus),
166-
degree: i.degree,
167-
noise_level: i.noise_level,
168-
message_modulus: i.message_modulus,
169-
carry_modulus: i.carry_modulus,
170-
pbs_order: i.pbs_order,
164+
.map(|(data, i)| {
165+
Ciphertext::new(
166+
LweCiphertextOwned::from_container(data.to_vec(), ciphertext_modulus),
167+
i.degree,
168+
i.noise_level,
169+
i.message_modulus,
170+
i.carry_modulus,
171+
i.pbs_order,
172+
)
171173
})
172174
.collect()
173175
}

tfhe/src/integer/server_key/crt/scalar_mul_crt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl ServerKey {
4949
&& self
5050
.key
5151
.max_noise_level
52-
.validate(ct_i.noise_level * scalar)
52+
.validate(ct_i.noise_level() * scalar)
5353
.is_ok()
5454
{
5555
self.key.unchecked_scalar_mul_assign(ct_i, scalar_i);

tfhe/src/integer/server_key/crt_parallel/scalar_mul_crt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl ServerKey {
6060
&& self
6161
.key
6262
.max_noise_level
63-
.validate(ct_i.noise_level * scalar)
63+
.validate(ct_i.noise_level() * scalar)
6464
.is_ok()
6565
{
6666
self.key.unchecked_scalar_mul_assign(ct_i, scalar_i);

tfhe/src/integer/server_key/radix_parallel/block_shift.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ impl ServerKey {
6565
result
6666
.blocks_mut()
6767
.par_iter_mut()
68-
.filter(|b| b.noise_level > NoiseLevel::NOMINAL)
68+
.filter(|b| b.noise_level() > NoiseLevel::NOMINAL)
6969
.for_each(|block| self.key.message_extract_assign(block));
7070
return result;
7171
}
@@ -81,7 +81,7 @@ impl ServerKey {
8181
ct.blocks().iter().all(|block| self
8282
.key
8383
.max_noise_level
84-
.validate(block.noise_level + NoiseLevel::NOMINAL)
84+
.validate(block.noise_level() + NoiseLevel::NOMINAL)
8585
.is_ok()),
8686
"Blocks of ciphertext to be shifted has a noise level too high"
8787
);
@@ -152,7 +152,7 @@ impl ServerKey {
152152
assert!(current_blocks.iter().all(|block| {
153153
self.key
154154
.max_noise_level
155-
.validate(block.noise_level + shift_bit.noise_level())
155+
.validate(block.noise_level() + shift_bit.noise_level())
156156
.is_ok()
157157
}));
158158

tfhe/src/integer/server_key/radix_parallel/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ impl ServerKey {
240240
s.spawn(|_| {
241241
to_be_cleaned
242242
.par_iter_mut()
243-
.filter(|block| block.noise_level > NoiseLevel::NOMINAL)
243+
.filter(|block| block.noise_level() > NoiseLevel::NOMINAL)
244244
.for_each(|block| self.key.message_extract_assign(block));
245245
});
246246
}

tfhe/src/integer/server_key/radix_parallel/mul.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ impl ServerKey {
169169
if !ct1.block_carries_are_empty() {
170170
self.full_propagate_parallelized(ct1);
171171
}
172-
if ct2.noise_level != NoiseLevel::NOMINAL || !ct2.carry_is_empty() {
172+
if ct2.noise_level() != NoiseLevel::NOMINAL || !ct2.carry_is_empty() {
173173
self.key.message_extract_assign(ct2);
174174
}
175175

tfhe/src/integer/server_key/radix_parallel/tests_cases_unsigned.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -447,15 +447,15 @@ where
447447

448448
let encrypted_result = executor.execute((&ct, &shift));
449449
for (i, b) in encrypted_result.blocks.iter().enumerate() {
450-
if b.noise_level > NoiseLevel::NOMINAL {
451-
println!("{i}: {:?}", b.noise_level);
450+
if b.noise_level() > NoiseLevel::NOMINAL {
451+
println!("{i}: {:?}", b.noise_level());
452452
}
453453
}
454454
assert!(
455455
encrypted_result
456456
.blocks
457457
.iter()
458-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
458+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
459459
"Expected all blocks to have at most NOMINAL noise level"
460460
);
461461
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -472,7 +472,7 @@ where
472472
encrypted_result
473473
.blocks
474474
.iter()
475-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
475+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
476476
"Expected all blocks to have at most NOMINAL noise level"
477477
);
478478
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -530,7 +530,7 @@ where
530530
encrypted_result
531531
.blocks
532532
.iter()
533-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
533+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
534534
"Expected all blocks to have at most NOMINAL noise level"
535535
);
536536
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -546,7 +546,7 @@ where
546546
encrypted_result
547547
.blocks
548548
.iter()
549-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
549+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
550550
"Expected all blocks to have at most NOMINAL noise level"
551551
);
552552
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -606,7 +606,7 @@ where
606606
encrypted_result
607607
.blocks
608608
.iter()
609-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
609+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
610610
"Expected all blocks to have at most NOMINAL noise level"
611611
);
612612
let expected = rotate_left_helper(clear, clear_shift, nb_bits);
@@ -622,7 +622,7 @@ where
622622
encrypted_result
623623
.blocks
624624
.iter()
625-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
625+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
626626
"Expected all blocks to have at most NOMINAL noise level"
627627
);
628628
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -677,7 +677,7 @@ where
677677
encrypted_result
678678
.blocks
679679
.iter()
680-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
680+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
681681
"Expected all blocks to have at most NOMINAL noise level"
682682
);
683683
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -694,7 +694,7 @@ where
694694
encrypted_result
695695
.blocks
696696
.iter()
697-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
697+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
698698
"Expected all blocks to have at most NOMINAL noise level"
699699
);
700700
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -2421,7 +2421,7 @@ where
24212421
assert!(res
24222422
.blocks
24232423
.iter()
2424-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL));
2424+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL));
24252425
assert_eq!(res, tmp);
24262426

24272427
clear = clear.wrapping_mul(clear2.wrapping_mul(multiplier)) % modulus;
@@ -2821,7 +2821,7 @@ where
28212821
assert!(
28222822
ct.blocks
28232823
.iter()
2824-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
2824+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
28252825
"Invalid noise_level after propagation"
28262826
);
28272827

@@ -2886,7 +2886,7 @@ where
28862886
assert!(
28872887
ct.blocks
28882888
.iter()
2889-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
2889+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
28902890
"Invalid noise_level after propagation"
28912891
);
28922892

@@ -2968,7 +2968,7 @@ where
29682968
assert!(
29692969
ct.blocks
29702970
.iter()
2971-
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
2971+
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
29722972
"Invalid noise_level after propagation"
29732973
);
29742974

tfhe/src/integer/server_key/radix_parallel/tests_long_run/test_random_op_sequence.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ pub(crate) fn random_op_sequence_test<P>(
574574
);
575575
res.blocks.iter().enumerate().for_each(|(k, b)| {
576576
assert!(
577-
b.noise_level <= NoiseLevel::NOMINAL,
577+
b.noise_level() <= NoiseLevel::NOMINAL,
578578
"Noise level greater than nominal value on op {fn_name} for block {k}",
579579
)
580580
});
@@ -624,7 +624,7 @@ pub(crate) fn random_op_sequence_test<P>(
624624
);
625625
res.blocks.iter().enumerate().for_each(|(k, b)| {
626626
assert!(
627-
b.noise_level <= NoiseLevel::NOMINAL,
627+
b.noise_level() <= NoiseLevel::NOMINAL,
628628
"Noise level greater than nominal value on op {fn_name} for block {k}",
629629
)
630630
});
@@ -665,7 +665,7 @@ pub(crate) fn random_op_sequence_test<P>(
665665
);
666666
res.blocks.iter().enumerate().for_each(|(k, b)| {
667667
assert!(
668-
b.noise_level <= NoiseLevel::NOMINAL,
668+
b.noise_level() <= NoiseLevel::NOMINAL,
669669
"Noise level greater than nominal value on op {fn_name} for block {k}",
670670
)
671671
});
@@ -707,12 +707,12 @@ pub(crate) fn random_op_sequence_test<P>(
707707
);
708708
res.blocks.iter().enumerate().for_each(|(k, b)| {
709709
assert!(
710-
b.noise_level <= NoiseLevel::NOMINAL,
710+
b.noise_level() <= NoiseLevel::NOMINAL,
711711
"Noise level greater than nominal value on op {fn_name} for block {k}",
712712
)
713713
});
714714
assert!(
715-
overflow.0.noise_level <= NoiseLevel::NOMINAL,
715+
overflow.0.noise_level() <= NoiseLevel::NOMINAL,
716716
"Noise level greater than nominal value on overflow for op {fn_name}",
717717
);
718718
// Determinism check
@@ -765,12 +765,12 @@ pub(crate) fn random_op_sequence_test<P>(
765765
);
766766
res.blocks.iter().enumerate().for_each(|(k, b)| {
767767
assert!(
768-
b.noise_level <= NoiseLevel::NOMINAL,
768+
b.noise_level() <= NoiseLevel::NOMINAL,
769769
"Noise level greater than nominal value on op {fn_name} for block {k}",
770770
)
771771
});
772772
assert!(
773-
overflow.0.noise_level <= NoiseLevel::NOMINAL,
773+
overflow.0.noise_level() <= NoiseLevel::NOMINAL,
774774
"Noise level greater than nominal value on overflow for op {fn_name}",
775775
);
776776
// Determinism check
@@ -815,7 +815,7 @@ pub(crate) fn random_op_sequence_test<P>(
815815

816816
let res = comparison_op_executor.execute((&left_vec[i], &right_vec[i]));
817817
assert!(
818-
res.0.noise_level <= NoiseLevel::NOMINAL,
818+
res.0.noise_level() <= NoiseLevel::NOMINAL,
819819
"Noise level greater than nominal value on op {fn_name}",
820820
);
821821
// Determinism check
@@ -852,7 +852,7 @@ pub(crate) fn random_op_sequence_test<P>(
852852

853853
let res = scalar_comparison_op_executor.execute((&left_vec[i], clear_right_vec[i]));
854854
assert!(
855-
res.0.noise_level <= NoiseLevel::NOMINAL,
855+
res.0.noise_level() <= NoiseLevel::NOMINAL,
856856
"Noise level greater than nominal value on op {fn_name}",
857857
);
858858
// Determinism check
@@ -895,7 +895,7 @@ pub(crate) fn random_op_sequence_test<P>(
895895
);
896896
res.blocks.iter().enumerate().for_each(|(k, b)| {
897897
assert!(
898-
b.noise_level <= NoiseLevel::NOMINAL,
898+
b.noise_level() <= NoiseLevel::NOMINAL,
899899
"Noise level greater than nominal value on op {fn_name} for block {k}",
900900
)
901901
});
@@ -942,13 +942,13 @@ pub(crate) fn random_op_sequence_test<P>(
942942
);
943943
res_q.blocks.iter().enumerate().for_each(|(k, b)| {
944944
assert!(
945-
b.noise_level <= NoiseLevel::NOMINAL,
945+
b.noise_level() <= NoiseLevel::NOMINAL,
946946
"Noise level greater than nominal value on op {fn_name} for block {k}",
947947
)
948948
});
949949
res_r.blocks.iter().enumerate().for_each(|(k, b)| {
950950
assert!(
951-
b.noise_level <= NoiseLevel::NOMINAL,
951+
b.noise_level() <= NoiseLevel::NOMINAL,
952952
"Noise level greater than nominal value on op {fn_name} for block {k}",
953953
)
954954
});
@@ -1005,13 +1005,13 @@ pub(crate) fn random_op_sequence_test<P>(
10051005
);
10061006
res_q.blocks.iter().enumerate().for_each(|(k, b)| {
10071007
assert!(
1008-
b.noise_level <= NoiseLevel::NOMINAL,
1008+
b.noise_level() <= NoiseLevel::NOMINAL,
10091009
"Noise level greater than nominal value on op {fn_name} for block {k}",
10101010
)
10111011
});
10121012
res_r.blocks.iter().enumerate().for_each(|(k, b)| {
10131013
assert!(
1014-
b.noise_level <= NoiseLevel::NOMINAL,
1014+
b.noise_level() <= NoiseLevel::NOMINAL,
10151015
"Noise level greater than nominal value on op {fn_name} for block {k}",
10161016
)
10171017
});
@@ -1073,7 +1073,7 @@ pub(crate) fn random_op_sequence_test<P>(
10731073
);
10741074
res.blocks.iter().enumerate().for_each(|(k, b)| {
10751075
assert!(
1076-
b.noise_level <= NoiseLevel::NOMINAL,
1076+
b.noise_level() <= NoiseLevel::NOMINAL,
10771077
"Noise level greater than nominal value on op {fn_name} for block {k}",
10781078
)
10791079
});

0 commit comments

Comments
 (0)