@@ -207,9 +207,11 @@ impl<AP: AtomicPattern> GenericServerKey<AP> {
207
207
208
208
#[ cfg( test) ]
209
209
pub ( crate ) mod test {
210
- use crate :: core_crypto:: prelude:: decrypt_lwe_ciphertext;
211
- use crate :: shortint:: oprf:: create_random_from_seed_modulus_switched;
212
- use crate :: shortint:: { ClientKey , ServerKey } ;
210
+ use crate :: core_crypto:: prelude:: { decrypt_lwe_ciphertext, LweSecretKey } ;
211
+ use crate :: shortint:: { ClientKey , ServerKey , ShortintParameterSet } ;
212
+
213
+ use super :: * ;
214
+
213
215
use rayon:: prelude:: * ;
214
216
use statrs:: distribution:: ContinuousCDF ;
215
217
use std:: collections:: HashMap ;
@@ -222,22 +224,34 @@ pub(crate) mod test {
222
224
#[ test]
223
225
fn oprf_compare_plain_ci_run_filter ( ) {
224
226
use crate :: shortint:: gen_keys;
227
+ use crate :: shortint:: parameters:: test_params:: TEST_PARAM_MESSAGE_2_CARRY_2_KS32_PBS_TUNIFORM_2M128 ;
225
228
use crate :: shortint:: parameters:: PARAM_MESSAGE_2_CARRY_2_KS_PBS ;
229
+
226
230
let ( ck, sk) = gen_keys ( PARAM_MESSAGE_2_CARRY_2_KS_PBS ) ;
227
231
228
232
for seed in 0 ..1000 {
229
- oprf_compare_plain_from_seed ( Seed ( seed) , & ck, & sk) ;
233
+ oprf_compare_plain_from_seed :: < u64 > ( Seed ( seed) , & ck, & sk) ;
234
+ }
235
+
236
+ let ( ck, sk) = gen_keys ( TEST_PARAM_MESSAGE_2_CARRY_2_KS32_PBS_TUNIFORM_2M128 ) ;
237
+
238
+ for seed in 0 ..1000 {
239
+ oprf_compare_plain_from_seed :: < u32 > ( Seed ( seed) , & ck, & sk) ;
230
240
}
231
241
}
232
242
233
- fn oprf_compare_plain_from_seed ( seed : Seed , ck : & ClientKey , sk : & ServerKey ) {
243
+ fn oprf_compare_plain_from_seed < Scalar : UnsignedInteger + CastFrom < u64 > + CastInto < u64 > > (
244
+ seed : Seed ,
245
+ ck : & ClientKey ,
246
+ sk : & ServerKey ,
247
+ ) {
234
248
let params = ck. parameters ;
235
249
236
250
let random_bits_count = 2 ;
237
251
238
252
let input_p = 2 * params. polynomial_size ( ) . 0 as u64 ;
239
253
240
- let log_input_p = input_p. ilog2 ( ) ;
254
+ let log_input_p = input_p. ilog2 ( ) as usize ;
241
255
242
256
let p_prime = 1 << random_bits_count;
243
257
@@ -255,15 +269,24 @@ pub(crate) mod test {
255
269
params
256
270
. polynomial_size ( )
257
271
. to_blind_rotation_input_modulus_log ( ) ,
258
- sk . ciphertext_modulus ,
272
+ CiphertextModulus :: new_native ( ) ,
259
273
) ;
260
274
261
- let sk = ck. small_lwe_secret_key ( ) ;
275
+ let sk = LweSecretKey :: from_container (
276
+ ck. small_lwe_secret_key ( )
277
+ . as_ref ( )
278
+ . iter ( )
279
+ . copied ( )
280
+ . map ( |x| Scalar :: cast_from ( x) )
281
+ . collect :: < Vec < _ > > ( ) ,
282
+ ) ;
262
283
263
- let plain_prf_input = decrypt_lwe_ciphertext ( & sk, & ct)
264
- . 0
265
- . wrapping_add ( 1 << ( 64 - log_input_p - 1 ) )
266
- >> ( 64 - log_input_p) ;
284
+ let plain_prf_input = CastInto :: < u64 > :: cast_into (
285
+ decrypt_lwe_ciphertext ( & sk, & ct)
286
+ . 0
287
+ . wrapping_add ( Scalar :: ONE << ( Scalar :: BITS - log_input_p - 1 ) )
288
+ >> ( Scalar :: BITS - log_input_p) ,
289
+ ) ;
267
290
268
291
let half_negacyclic_part = |x| 2 * ( x / poly_delta) + 1 ;
269
292
@@ -296,20 +319,28 @@ pub(crate) mod test {
296
319
let p_value_limit: f64 = 0.000_01 ;
297
320
298
321
use crate :: shortint:: gen_keys;
322
+ use crate :: shortint:: parameters:: test_params:: TEST_PARAM_MESSAGE_2_CARRY_2_KS32_PBS_TUNIFORM_2M128 ;
299
323
use crate :: shortint:: parameters:: PARAM_MESSAGE_2_CARRY_2_KS_PBS ;
300
- let ( ck, sk) = gen_keys ( PARAM_MESSAGE_2_CARRY_2_KS_PBS ) ;
301
324
302
- let test_uniformity = |distinct_values : u64 , f : & ( dyn Fn ( usize ) -> u64 + Sync ) | {
303
- test_uniformity ( sample_count, p_value_limit, distinct_values, f)
304
- } ;
325
+ for params in [
326
+ ShortintParameterSet :: from ( PARAM_MESSAGE_2_CARRY_2_KS_PBS ) ,
327
+ ShortintParameterSet :: from ( TEST_PARAM_MESSAGE_2_CARRY_2_KS32_PBS_TUNIFORM_2M128 ) ,
328
+ ] {
329
+ let ( ck, sk) = gen_keys ( params) ;
305
330
306
- let random_bits_count = 2 ;
331
+ let test_uniformity = |distinct_values : u64 , f : & ( dyn Fn ( usize ) -> u64 + Sync ) | {
332
+ test_uniformity ( sample_count, p_value_limit, distinct_values, f)
333
+ } ;
334
+
335
+ let random_bits_count = 2 ;
307
336
308
- test_uniformity ( 1 << random_bits_count, & |seed| {
309
- let img = sk. generate_oblivious_pseudo_random ( Seed ( seed as u128 ) , random_bits_count) ;
337
+ test_uniformity ( 1 << random_bits_count, & |seed| {
338
+ let img =
339
+ sk. generate_oblivious_pseudo_random ( Seed ( seed as u128 ) , random_bits_count) ;
310
340
311
- ck. decrypt_message_and_carry ( & img)
312
- } ) ;
341
+ ck. decrypt_message_and_carry ( & img)
342
+ } ) ;
343
+ }
313
344
}
314
345
315
346
pub fn test_uniformity < F > ( sample_count : usize , p_value_limit : f64 , distinct_values : u64 , f : F )
0 commit comments