@@ -82,6 +82,10 @@ pub enum ProtocolInitializerErrorWrapper {
82
82
/// Error raised when a KES update error occurs
83
83
#[ error( "KES key cannot be updated for period {0}" ) ]
84
84
KesUpdate ( KESPeriod ) ,
85
+
86
+ /// Period of key file does not match with period provided by user
87
+ #[ error( "Period of key file, {0}, does not match with period provided by user, {1}" ) ]
88
+ KesMismatch ( KESPeriod , KESPeriod ) ,
85
89
}
86
90
/// Wrapper structure for [MithrilStm:StmInitializer](mithril_stm::stm::StmInitializer).
87
91
/// It now obtains a KES signature over the Mithril key. This allows the signers prove
@@ -119,14 +123,23 @@ impl StmInitializerWrapper {
119
123
let kes_signature = if let Some ( kes_sk_path) = kes_sk_path {
120
124
let mut kes_sk: Sum6Kes = Sum6Kes :: from_file ( kes_sk_path) ?;
121
125
122
- // We need to perform the evolutions, as the key is stored in evolution 0 in `kes.skey`
123
- for period in 0 ..kes_period. unwrap_or_default ( ) {
124
- kes_sk
125
- . update ( )
126
- . map_err ( |_| ProtocolInitializerErrorWrapper :: KesUpdate ( period) ) ?;
127
- }
126
+ let kes_sk_period = kes_sk. get_period ( ) ;
127
+ let provided_period = kes_period. unwrap_or_default ( ) ;
128
+ if kes_sk_period <= provided_period {
129
+ // We need to perform the evolutions
130
+ for period in kes_sk_period..provided_period {
131
+ kes_sk
132
+ . update ( )
133
+ . map_err ( |_| ProtocolInitializerErrorWrapper :: KesUpdate ( period) ) ?;
134
+ }
128
135
129
- Some ( kes_sk. sign ( & stm_initializer. verification_key ( ) . to_bytes ( ) ) )
136
+ Some ( kes_sk. sign ( & stm_initializer. verification_key ( ) . to_bytes ( ) ) )
137
+ } else {
138
+ return Err ( ProtocolInitializerErrorWrapper :: KesMismatch (
139
+ kes_sk_period,
140
+ provided_period,
141
+ ) ) ;
142
+ }
130
143
} else {
131
144
println ! ( "WARNING: Non certified signer registration by providing only a Pool Id is decommissionned and must be used for tests only!" ) ;
132
145
None
0 commit comments