1
- use kes_summed_ed25519:: { kes:: Sum6Kes , traits:: KesSk , PublicKey } ;
1
+ use kes_summed_ed25519:: { kes:: Sum6Kes , traits:: KesSk , PublicKey as KesPublicKey } ;
2
2
use rand_chacha:: ChaCha20Rng ;
3
3
use rand_core:: { RngCore , SeedableRng } ;
4
4
@@ -11,7 +11,7 @@ use crate::{
11
11
test_utils:: { fake_data, mithril_fixture:: MithrilFixture } ,
12
12
} ;
13
13
14
- use super :: precomputed_keskey ;
14
+ use super :: precomputed_kes_key ;
15
15
16
16
/// A builder of mithril types.
17
17
pub struct MithrilFixtureBuilder {
@@ -144,58 +144,61 @@ impl MithrilFixtureBuilder {
144
144
}
145
145
}
146
146
147
- fn provide_kes_key < ' a > (
148
- key_buffer : & ' a mut [ u8 ] ,
149
- kes_key_seed : & ' a mut [ u8 ] ,
150
- ) -> ( Sum6KesBytes , PublicKey ) {
147
+ fn provide_kes_key ( kes_key_seed : & mut [ u8 ] ) -> ( Sum6KesBytes , KesPublicKey ) {
151
148
if let Some ( ( kes_bytes, kes_verification_key) ) =
152
149
MithrilFixtureBuilder :: cached_kes_key ( kes_key_seed)
153
150
{
154
151
( kes_bytes, kes_verification_key)
155
152
} else {
156
- // TODO We can log a warning to indicate that the cache is not used
157
- MithrilFixtureBuilder :: generate_kes_key ( key_buffer, kes_key_seed)
153
+ println ! (
154
+ "KES key not found in test cache, generating a new one for the seed {:?}." ,
155
+ kes_key_seed
156
+ ) ;
157
+ MithrilFixtureBuilder :: generate_kes_key ( kes_key_seed)
158
158
}
159
159
}
160
160
161
- fn cached_kes_key ( kes_key_seed : & [ u8 ] ) -> Option < ( Sum6KesBytes , PublicKey ) > {
162
- precomputed_keskey:: cached_kes_key ( kes_key_seed) . map ( |( kes_bytes, kes_verification_key) | {
163
- let kes_verification_key = PublicKey :: from_bytes ( & kes_verification_key) . unwrap ( ) ;
164
- let kes_bytes = Sum6KesBytes ( kes_bytes) ;
165
- ( kes_bytes, kes_verification_key)
166
- } )
161
+ fn cached_kes_key ( kes_key_seed : & [ u8 ] ) -> Option < ( Sum6KesBytes , KesPublicKey ) > {
162
+ precomputed_kes_key:: cached_kes_key ( kes_key_seed) . map (
163
+ |( kes_bytes, kes_verification_key) | {
164
+ let kes_verification_key = KesPublicKey :: from_bytes ( & kes_verification_key) . unwrap ( ) ;
165
+ let kes_bytes = Sum6KesBytes ( kes_bytes) ;
166
+
167
+ ( kes_bytes, kes_verification_key)
168
+ } ,
169
+ )
167
170
}
168
171
169
- fn generate_kes_key < ' a > (
170
- key_buffer : & ' a mut [ u8 ] ,
171
- kes_key_seed : & ' a mut [ u8 ] ,
172
- ) -> ( Sum6KesBytes , PublicKey ) {
173
- let ( kes_secret_key, kes_verification_key) = Sum6Kes :: keygen ( key_buffer, kes_key_seed) ;
172
+ fn generate_kes_key ( kes_key_seed : & mut [ u8 ] ) -> ( Sum6KesBytes , KesPublicKey ) {
173
+ let mut key_buffer = [ 0u8 ; Sum6Kes :: SIZE + 4 ] ;
174
+
175
+ let ( kes_secret_key, kes_verification_key) = Sum6Kes :: keygen ( & mut key_buffer, kes_key_seed) ;
174
176
let mut kes_bytes = Sum6KesBytes ( [ 0u8 ; Sum6Kes :: SIZE + 4 ] ) ;
175
177
kes_bytes. 0 . copy_from_slice ( & kes_secret_key. clone_sk ( ) ) ;
178
+
176
179
( kes_bytes, kes_verification_key)
177
180
}
178
181
179
182
fn generate_cold_key_seed ( & self , party_index : usize ) -> Vec < u8 > {
180
- let mut cold_key_seed: Vec < u8 > = ( party_index)
183
+ let mut cold_key_seed: Vec < _ > = ( party_index)
181
184
. to_le_bytes ( )
182
185
. iter ( )
183
186
. zip ( self . party_id_seed )
184
187
. map ( |( v1, v2) | v1 + v2)
185
188
. collect ( ) ;
186
189
cold_key_seed. resize ( 32 , 0 ) ;
190
+
187
191
cold_key_seed
188
192
}
189
193
190
194
fn build_party_with_operational_certificate ( & self , party_index : usize ) -> PartyId {
191
- let cold_key_seed: Vec < u8 > = self . generate_cold_key_seed ( party_index) . to_vec ( ) ;
195
+ let cold_key_seed = self . generate_cold_key_seed ( party_index) . to_vec ( ) ;
192
196
let mut kes_key_seed = cold_key_seed. clone ( ) ;
193
197
194
198
let keypair =
195
199
ColdKeyGenerator :: create_deterministic_keypair ( cold_key_seed. try_into ( ) . unwrap ( ) ) ;
196
- let mut kes_key_buffer = [ 0u8 ; Sum6Kes :: SIZE + 4 ] ;
197
200
let ( kes_bytes, kes_verification_key) =
198
- MithrilFixtureBuilder :: provide_kes_key ( & mut kes_key_buffer , & mut kes_key_seed) ;
201
+ MithrilFixtureBuilder :: provide_kes_key ( & mut kes_key_seed) ;
199
202
let operational_certificate = OpCert :: new ( kes_verification_key, 0 , 0 , keypair) ;
200
203
let party_id = operational_certificate
201
204
. compute_protocol_party_id ( )
@@ -219,7 +222,6 @@ impl MithrilFixtureBuilder {
219
222
#[ cfg( test) ]
220
223
mod tests {
221
224
use super :: * ;
222
- use kes_summed_ed25519:: { kes:: Sum6Kes , traits:: KesSk , PublicKey } ;
223
225
use std:: collections:: BTreeSet ;
224
226
225
227
#[ test]
@@ -312,15 +314,14 @@ mod tests {
312
314
}
313
315
}
314
316
315
- /// Verify that there is cached kes key for a number of party id.
316
- /// If the cache is not up to date, the test will generate the code that could be copy/paste into the [precomputed_keskey] module.
317
- /// The number of party id that should be in cache is defined in the test.
318
- /// If we want lore or less, just change `precomputed_number` value and launch the test to generate the code.
317
+ /// Verify that there is a cached kes key for a number of party id.
318
+ /// If the cache is not up to date, the test will generate the code that can be copied/pasted into the [precomputed_kes_key] module.
319
+ /// The number of party id that should be in cache is defined with `precomputed_number`
319
320
#[ test]
320
321
fn verify_kes_key_cache_content ( ) {
321
- // Generate code that should be in the match instruction of cached_kes_key .
322
- // It could be copy paste to update the cache.
323
- fn generate_code ( party_ids : & Vec < ( & [ u8 ] , [ u8 ; 612 ] , PublicKey ) > ) -> String {
322
+ // Generate code that should be in the `cached_kes_key` function of the `precomputed_kes_key.rs` file .
323
+ // It can be copied and pasted to update the cache.
324
+ fn generate_code ( party_ids : & Vec < ( & [ u8 ] , [ u8 ; 612 ] , KesPublicKey ) > ) -> String {
324
325
party_ids
325
326
. iter ( )
326
327
. map ( |( key, i, p) | format ! ( "{:?} => ({:?}, {:?})," , key, i, p. as_bytes( ) ) )
@@ -338,10 +339,9 @@ mod tests {
338
339
let computed_keys_key: Vec < _ > = cold_keys
339
340
. iter ( )
340
341
. map ( |cold_key| {
341
- let mut kes_key_buffer = [ 0u8 ; Sum6Kes :: SIZE + 4 ] ;
342
342
let mut kes_key_seed: Vec < u8 > = cold_key. clone ( ) ;
343
343
let ( kes_bytes, kes_verification_key) =
344
- MithrilFixtureBuilder :: generate_kes_key ( & mut kes_key_buffer , & mut kes_key_seed) ;
344
+ MithrilFixtureBuilder :: generate_kes_key ( & mut kes_key_seed) ;
345
345
346
346
( cold_key. as_slice ( ) , kes_bytes. 0 , kes_verification_key)
347
347
} )
@@ -363,14 +363,14 @@ mod tests {
363
363
364
364
assert_eq ! (
365
365
computed_keys_key, cached_kes_key,
366
- "Precomputed keskeys should be:\n {}\n but seems to be:\n {}" ,
366
+ "Precomputed KES keys should be:\n {}\n but seems to be:\n {}" ,
367
367
expected_code, actual_code
368
368
) ;
369
369
370
370
let kes_key_seed = fixture. generate_cold_key_seed ( precomputed_number) ;
371
371
assert ! (
372
372
MithrilFixtureBuilder :: cached_kes_key( kes_key_seed. as_slice( ) ) . is_none( ) ,
373
- "We checked precomputed keskey up to {} but it seems to be more." ,
373
+ "We checked precomputed KES keys up to {} but it seems to be more." ,
374
374
precomputed_number
375
375
) ;
376
376
}
0 commit comments