@@ -47,16 +47,21 @@ impl KeyValidator {
4747 } )
4848 }
4949
50- fn verify_expiry ( & self , parts : Parts , expiry_grace_period : std:: time:: Duration ) -> Result < KeyStatus > {
50+ fn verify_expiry (
51+ & self ,
52+ parts : Parts ,
53+ expiry_grace_period : std:: time:: Duration ,
54+ ) -> Result < KeyStatus > {
5155 if let Some ( expiry) = parts. expiry_b64 {
5256 let decoded = URL_SAFE_NO_PAD
5357 . decode ( expiry)
5458 . or ( Err ( Error :: InvalidFormat ) ) ?;
55- let expiry_timestamp = i64:: from_be_bytes ( decoded. try_into ( ) . or ( Err ( Error :: InvalidFormat ) ) ?) ;
59+ let expiry_timestamp =
60+ i64:: from_be_bytes ( decoded. try_into ( ) . or ( Err ( Error :: InvalidFormat ) ) ?) ;
5661
5762 let current_time = chrono:: Utc :: now ( ) . timestamp ( ) ;
5863 let grace_seconds = expiry_grace_period. as_secs ( ) as i64 ;
59-
64+
6065 // Key is invalid if it expired more than grace_period ago
6166 // This ensures once a key expires beyond the grace period, it stays expired
6267 // even if the clock goes backwards
@@ -156,25 +161,29 @@ mod tests {
156161 let hash = hasher. hash ( & key) . unwrap ( ) ;
157162
158163 let ( dummy_key, dummy_hash) = dummy_key_and_hash ( ) ;
159- let validator =
160- KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
164+ let validator = KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
161165 assert_eq ! (
162166 validator
163- . verify( key. expose_secret( ) , hash. as_ref( ) , std:: time:: Duration :: ZERO )
167+ . verify(
168+ key. expose_secret( ) ,
169+ hash. as_ref( ) ,
170+ std:: time:: Duration :: ZERO
171+ )
164172 . unwrap( ) ,
165173 KeyStatus :: Valid
166174 ) ;
167175 assert_eq ! (
168- validator. verify( "wrong_key" , hash. as_ref( ) , std:: time:: Duration :: ZERO ) . unwrap( ) ,
176+ validator
177+ . verify( "wrong_key" , hash. as_ref( ) , std:: time:: Duration :: ZERO )
178+ . unwrap( ) ,
169179 KeyStatus :: Invalid
170180 ) ;
171181 }
172182
173183 #[ test]
174184 fn test_invalid_hash_format ( ) {
175185 let ( dummy_key, dummy_hash) = dummy_key_and_hash ( ) ;
176- let validator =
177- KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
186+ let validator = KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
178187 let result = validator. verify ( "any_key" , "invalid_hash" , std:: time:: Duration :: ZERO ) ;
179188 // After timing oracle fix: invalid hash format returns Ok(Invalid) instead of Err
180189 // to prevent timing-based user enumeration attacks
@@ -190,8 +199,7 @@ mod tests {
190199 let hash = hasher. hash ( & valid_key) . unwrap ( ) ;
191200
192201 let ( dummy_key, dummy_hash) = dummy_key_and_hash ( ) ;
193- let validator =
194- KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
202+ let validator = KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
195203 let result = validator. verify ( & oversized_key, hash. as_ref ( ) , std:: time:: Duration :: ZERO ) ;
196204 assert ! ( result. is_err( ) ) ;
197205 assert ! ( matches!( result. unwrap_err( ) , Error :: InvalidFormat ) ) ;
@@ -202,8 +210,7 @@ mod tests {
202210 let oversized_hash = "a" . repeat ( 513 ) ; // Exceeds MAX_HASH_LENGTH
203211
204212 let ( dummy_key, dummy_hash) = dummy_key_and_hash ( ) ;
205- let validator =
206- KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
213+ let validator = KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
207214 let result = validator. verify ( "valid_key" , & oversized_hash, std:: time:: Duration :: ZERO ) ;
208215 assert ! ( result. is_err( ) ) ;
209216 assert ! ( matches!( result. unwrap_err( ) , Error :: InvalidFormat ) ) ;
@@ -216,8 +223,7 @@ mod tests {
216223 let hash = hasher. hash ( & valid_key) . unwrap ( ) ;
217224
218225 let ( dummy_key, dummy_hash) = dummy_key_and_hash ( ) ;
219- let validator =
220- KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
226+ let validator = KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
221227
222228 // Test at boundary (512 chars - should pass)
223229 let max_key = "a" . repeat ( 512 ) ;
@@ -238,18 +244,25 @@ mod tests {
238244 let valid_hash = hasher. hash ( & valid_key) . unwrap ( ) ;
239245
240246 let ( dummy_key, dummy_hash) = dummy_key_and_hash ( ) ;
241- let validator =
242- KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
247+ let validator = KeyValidator :: new ( true , dummy_key, dummy_hash) . unwrap ( ) ;
243248
244249 let result1 = validator. verify ( "wrong_key" , valid_hash. as_ref ( ) , std:: time:: Duration :: ZERO ) ;
245250 assert ! ( result1. is_ok( ) ) ;
246251 assert_eq ! ( result1. unwrap( ) , KeyStatus :: Invalid ) ;
247252
248- let result2 = validator. verify ( valid_key. expose_secret ( ) , "invalid_hash_format" , std:: time:: Duration :: ZERO ) ;
253+ let result2 = validator. verify (
254+ valid_key. expose_secret ( ) ,
255+ "invalid_hash_format" ,
256+ std:: time:: Duration :: ZERO ,
257+ ) ;
249258 assert ! ( result2. is_ok( ) ) ;
250259 assert_eq ! ( result2. unwrap( ) , KeyStatus :: Invalid ) ;
251260
252- let result3 = validator. verify ( valid_key. expose_secret ( ) , "not even close to valid" , std:: time:: Duration :: ZERO ) ;
261+ let result3 = validator. verify (
262+ valid_key. expose_secret ( ) ,
263+ "not even close to valid" ,
264+ std:: time:: Duration :: ZERO ,
265+ ) ;
253266 assert ! ( result3. is_ok( ) ) ;
254267 assert_eq ! ( result3. unwrap( ) , KeyStatus :: Invalid ) ;
255268 }
0 commit comments