@@ -7,7 +7,11 @@ use tfhe::boolean::engine::BooleanEngine;
77use tfhe:: core_crypto:: commons:: generators:: DeterministicSeeder ;
88use tfhe:: core_crypto:: prelude:: DefaultRandomGenerator ;
99use tfhe:: shortint:: engine:: ShortintEngine ;
10- use tfhe:: { CompressedServerKey , Seed } ;
10+ use tfhe:: zk:: { CompactPkeCrs , ZkComputeLoad } ;
11+ use tfhe:: {
12+ ClientKey , CompactPublicKey , CompressedServerKey , ProvenCompactCiphertextList , Seed , ServerKey ,
13+ set_server_key,
14+ } ;
1115use tfhe_backward_compat_data:: generate:: * ;
1216use tfhe_backward_compat_data:: * ;
1317use utils:: * ;
@@ -30,6 +34,23 @@ const HL_SERVERKEY_WITH_COMPRESSION_TEST: HlServerKeyTest = HlServerKeyTest {
3034 rerand_cpk_filename : None ,
3135 compressed : false ,
3236} ;
37+
38+ // We have a proven list generated for 0.11, but since this version the hash modes have evolved so
39+ // we re generate one
40+ const HL_PROVEN_COMPACTLIST_TEST_ZKV2 : HlHeterogeneousCiphertextListTest =
41+ HlHeterogeneousCiphertextListTest {
42+ test_filename : Cow :: Borrowed ( "hl_proven_list_zkv2_1_5" ) ,
43+ key_filename : Cow :: Borrowed ( "client_key_for_zk" ) ,
44+ clear_values : Cow :: Borrowed ( & [ 17u8 as u64 ] ) ,
45+ data_kinds : Cow :: Borrowed ( & [ DataKind :: Unsigned ] ) ,
46+ compressed : false ,
47+ proof_info : Some ( PkeZkProofAuxiliaryInfo {
48+ public_key_filename : Cow :: Borrowed ( "public_key" ) ,
49+ params_filename : Cow :: Borrowed ( "zk_pke_crs" ) ,
50+ metadata : Cow :: Borrowed ( "2vdrawkcab" ) ,
51+ } ) ,
52+ } ;
53+
3354pub struct V1_5 ;
3455
3556impl TfhersVersion for V1_5 {
@@ -54,29 +75,97 @@ impl TfhersVersion for V1_5 {
5475 let dir = Self :: data_dir ( base_data_dir) . join ( HL_MODULE_NAME ) ;
5576 create_dir_all ( & dir) . unwrap ( ) ;
5677
57- let config =
58- tfhe:: ConfigBuilder :: with_custom_parameters ( HL_CLIENTKEY_TEST . parameters . convert ( ) )
59- . enable_compression ( INSECURE_TEST_PARAMS_TUNIFORM_COMPRESSION_MULTIBIT . convert ( ) )
60- . build ( ) ;
61- let ( hl_client_key, hl_server_key) = tfhe:: generate_keys ( config) ;
62- let compressed_server_key = CompressedServerKey :: new ( & hl_client_key) ;
63-
64- store_versioned_test ( & hl_client_key, & dir, & HL_CLIENTKEY_TEST . test_filename ) ;
65- store_versioned_test (
66- & compressed_server_key,
67- & dir,
68- & HL_COMPRESSED_SERVERKEY_TEST . test_filename ,
69- ) ;
70- store_versioned_test (
71- & hl_server_key,
72- & dir,
73- & HL_SERVERKEY_WITH_COMPRESSION_TEST . test_filename ,
74- ) ;
78+ {
79+ let config =
80+ tfhe:: ConfigBuilder :: with_custom_parameters ( HL_CLIENTKEY_TEST . parameters . convert ( ) )
81+ . enable_compression (
82+ INSECURE_TEST_PARAMS_TUNIFORM_COMPRESSION_MULTIBIT . convert ( ) ,
83+ )
84+ . build ( ) ;
85+ let ( hl_client_key, hl_server_key) = tfhe:: generate_keys ( config) ;
86+ let compressed_server_key = CompressedServerKey :: new ( & hl_client_key) ;
87+
88+ store_versioned_test ( & hl_client_key, & dir, & HL_CLIENTKEY_TEST . test_filename ) ;
89+ store_versioned_test (
90+ & compressed_server_key,
91+ & dir,
92+ & HL_COMPRESSED_SERVERKEY_TEST . test_filename ,
93+ ) ;
94+ store_versioned_test (
95+ & hl_server_key,
96+ & dir,
97+ & HL_SERVERKEY_WITH_COMPRESSION_TEST . test_filename ,
98+ ) ;
99+ }
100+
101+ // Generate a zk proof with the new hash modes
102+ {
103+ let config = tfhe:: ConfigBuilder :: with_custom_parameters (
104+ INSECURE_SMALL_TEST_PARAMS_KS32 . convert ( ) ,
105+ )
106+ . use_dedicated_compact_public_key_parameters ( (
107+ INSECURE_DEDICATED_CPK_TEST_PARAMS . convert ( ) ,
108+ KS_TO_SMALL_TEST_PARAMS . convert ( ) ,
109+ ) )
110+ . build ( ) ;
111+ let hl_client_key = ClientKey :: generate ( config) ;
112+ let hl_server_key = ServerKey :: new ( & hl_client_key) ;
113+ set_server_key ( hl_server_key. clone ( ) ) ;
114+ let compact_pub_key = CompactPublicKey :: new ( & hl_client_key) ;
115+ let crs = CompactPkeCrs :: from_config ( config, 64 ) . unwrap ( ) ;
116+
117+ store_versioned_auxiliary (
118+ & crs,
119+ & dir,
120+ & HL_PROVEN_COMPACTLIST_TEST_ZKV2
121+ . proof_info
122+ . unwrap ( )
123+ . params_filename ,
124+ ) ;
125+
126+ // Store the associated client key to be able to decrypt the ciphertexts in the list
127+ store_versioned_auxiliary (
128+ & hl_client_key,
129+ & dir,
130+ & HL_PROVEN_COMPACTLIST_TEST_ZKV2 . key_filename ,
131+ ) ;
132+
133+ store_versioned_auxiliary (
134+ & compact_pub_key,
135+ & dir,
136+ & HL_PROVEN_COMPACTLIST_TEST_ZKV2
137+ . proof_info
138+ . unwrap ( )
139+ . public_key_filename ,
140+ ) ;
141+
142+ let mut proven_builder = ProvenCompactCiphertextList :: builder ( & compact_pub_key) ;
143+ proven_builder. push ( HL_PROVEN_COMPACTLIST_TEST_ZKV2 . clear_values [ 0 ] as u8 ) ;
144+
145+ let proven_list_packed = proven_builder
146+ . build_with_proof_packed (
147+ & crs,
148+ HL_PROVEN_COMPACTLIST_TEST_ZKV2
149+ . proof_info
150+ . unwrap ( )
151+ . metadata
152+ . as_bytes ( ) ,
153+ ZkComputeLoad :: Proof ,
154+ )
155+ . unwrap ( ) ;
156+
157+ store_versioned_test (
158+ & proven_list_packed,
159+ & dir,
160+ & HL_PROVEN_COMPACTLIST_TEST_ZKV2 . test_filename ,
161+ ) ;
162+ }
75163
76164 vec ! [
77165 TestMetadata :: HlClientKey ( HL_CLIENTKEY_TEST ) ,
78166 TestMetadata :: HlServerKey ( HL_COMPRESSED_SERVERKEY_TEST ) ,
79167 TestMetadata :: HlServerKey ( HL_SERVERKEY_WITH_COMPRESSION_TEST ) ,
168+ TestMetadata :: HlHeterogeneousCiphertextList ( HL_PROVEN_COMPACTLIST_TEST_ZKV2 ) ,
80169 ]
81170 }
82171}
0 commit comments