@@ -43,17 +43,16 @@ impl KesSigner for KesSignerStandard {
4343 let operational_certificate = OpCert :: from_file ( & self . operational_certificate_path )
4444 . with_context ( || "StandardKesSigner can not read operational certificate from file" ) ?;
4545 let kes_period_start = operational_certificate. get_start_kes_period ( ) as u32 ;
46- let kes_sk_period = kes_sk. get_period ( ) ;
47- let kes_evolutions = current_kes_period. saturating_sub ( kes_period_start) ;
48- if kes_sk_period > kes_evolutions {
46+ if kes_period_start > current_kes_period {
4947 return Err ( anyhow ! ( KesSignError :: PeriodMismatch (
50- kes_sk_period ,
51- kes_evolutions
48+ kes_period_start ,
49+ current_kes_period
5250 ) ) ) ;
5351 }
52+ let kes_evolutions = current_kes_period. saturating_sub ( kes_period_start) ;
5453
5554 // We need to perform the evolutions
56- for evolution in kes_sk_period ..kes_evolutions {
55+ for evolution in 0 ..kes_evolutions {
5756 kes_sk. update ( ) . map_err ( |_| KesSignError :: UpdateKey ( evolution) ) ?;
5857 }
5958
@@ -74,7 +73,7 @@ mod tests {
7473 #[ test]
7574 fn create_valid_signature_for_message ( ) {
7675 let start_kes_period = 10 as KesPeriod ;
77- let kes_evolutions = 1 ;
76+ let kes_evolutions = 32 ;
7877 let signing_kes_period = start_kes_period + kes_evolutions;
7978 let KesCryptographicMaterialForTest {
8079 party_id : _,
@@ -100,7 +99,7 @@ mod tests {
10099 #[ test]
101100 fn create_invalid_signature_for_different_message ( ) {
102101 let start_kes_period = 10 as KesPeriod ;
103- let kes_evolutions = 1 ;
102+ let kes_evolutions = 32 ;
104103 let signing_kes_period = start_kes_period + kes_evolutions;
105104 let KesCryptographicMaterialForTest {
106105 party_id : _,
@@ -124,7 +123,35 @@ mod tests {
124123 }
125124
126125 #[ test]
127- fn create_invalid_signature_for_invalid_kes_evolution ( ) {
126+ fn create_invalid_signature_for_invalid_current_kes_period ( ) {
127+ let start_kes_period = 10 as KesPeriod ;
128+ let signing_kes_period = 5 ;
129+ let KesCryptographicMaterialForTest {
130+ party_id : _,
131+ operational_certificate_file,
132+ kes_secret_key_file,
133+ } = create_kes_cryptographic_material (
134+ 1 as KesPartyIndexForTest ,
135+ start_kes_period,
136+ current_function ! ( ) ,
137+ ) ;
138+ let message = b"Test message for KES signing" ;
139+ let kes_signer = KesSignerStandard :: new ( kes_secret_key_file, operational_certificate_file) ;
140+
141+ let res = kes_signer
142+ . sign ( message, signing_kes_period)
143+ . expect_err ( "Signing should fail" ) ;
144+ assert_eq ! (
145+ res. downcast_ref:: <KesSignError >( ) ,
146+ Some ( & KesSignError :: PeriodMismatch (
147+ start_kes_period,
148+ signing_kes_period
149+ ) )
150+ ) ;
151+ }
152+
153+ #[ test]
154+ fn create_invalid_signature_for_invalid_kes_evolutions ( ) {
128155 const MAX_KES_EVOLUTIONS : KesPeriod = 63 ;
129156 let start_kes_period = 10 as KesPeriod ;
130157 let signing_kes_period = start_kes_period + MAX_KES_EVOLUTIONS + 1 ;
@@ -140,8 +167,12 @@ mod tests {
140167 let message = b"Test message for KES signing" ;
141168 let kes_signer = KesSignerStandard :: new ( kes_secret_key_file, operational_certificate_file) ;
142169
143- kes_signer
170+ let res = kes_signer
144171 . sign ( message, signing_kes_period)
145172 . expect_err ( "Signing should fail" ) ;
173+ assert_eq ! (
174+ res. downcast_ref:: <KesSignError >( ) ,
175+ Some ( & KesSignError :: UpdateKey ( MAX_KES_EVOLUTIONS ) )
176+ ) ;
146177 }
147178}
0 commit comments