@@ -96,4 +96,80 @@ mod tests {
9696 assert ! ( result. is_ok( ) ) ;
9797 assert ! ( result. unwrap( ) ) ;
9898 }
99+
100+ #[ test]
101+ fn test_signature_verification_invalid_hotkey ( ) {
102+ let result = verify_validator_signature ( "invalid_hotkey" , "message" , "signature" ) ;
103+ assert ! ( result. is_err( ) ) ;
104+ }
105+
106+ #[ test]
107+ fn test_signature_verification_invalid_signature_hex ( ) {
108+ let kp = Keypair :: generate ( ) ;
109+ let result = verify_validator_signature ( & kp. hotkey ( ) . to_hex ( ) , "message" , "not_hex" ) ;
110+ assert ! ( result. is_err( ) ) ;
111+ }
112+
113+ #[ test]
114+ fn test_signature_verification_wrong_signature ( ) {
115+ let kp1 = Keypair :: generate ( ) ;
116+ let kp2 = Keypair :: generate ( ) ;
117+ let message = "test:1234567890:nonce" ;
118+ let signed = kp1. sign ( message. as_bytes ( ) ) ;
119+
120+ // Use kp2's hotkey but kp1's signature - should fail
121+ let hotkey_hex = kp2. hotkey ( ) . to_hex ( ) ;
122+ let sig_hex = hex:: encode ( & signed. signature ) ;
123+
124+ let result = verify_validator_signature ( & hotkey_hex, message, & sig_hex) ;
125+ assert ! ( result. is_ok( ) ) ;
126+ assert ! ( !result. unwrap( ) ) ; // Signature doesn't match
127+ }
128+
129+ #[ test]
130+ fn test_signature_verification_wrong_message ( ) {
131+ let kp = Keypair :: generate ( ) ;
132+ let message1 = "test:1234567890:nonce1" ;
133+ let message2 = "test:1234567890:nonce2" ;
134+ let signed = kp. sign ( message1. as_bytes ( ) ) ;
135+
136+ let hotkey_hex = kp. hotkey ( ) . to_hex ( ) ;
137+ let sig_hex = hex:: encode ( & signed. signature ) ;
138+
139+ // Try to verify with different message - should fail
140+ let result = verify_validator_signature ( & hotkey_hex, message2, & sig_hex) ;
141+ assert ! ( result. is_ok( ) ) ;
142+ assert ! ( !result. unwrap( ) ) ;
143+ }
144+
145+ #[ test]
146+ fn test_verify_timestamp_edge_case ( ) {
147+ let now = chrono:: Utc :: now ( ) . timestamp ( ) ;
148+ // Test exactly at 5 minute boundary
149+ assert ! ( !verify_timestamp( now - 301 ) ) ; // 5 minutes 1 second ago
150+ assert ! ( verify_timestamp( now - 299 ) ) ; // 4 minutes 59 seconds ago
151+ }
152+
153+ #[ test]
154+ fn test_verify_timestamp_future ( ) {
155+ let now = chrono:: Utc :: now ( ) . timestamp ( ) ;
156+ assert ! ( verify_timestamp( now + 10 ) ) ; // Future timestamp within 5 min should be valid
157+ assert ! ( verify_timestamp( now + 299 ) ) ; // Just under 5 minutes in future
158+ }
159+
160+ #[ test]
161+ fn test_signature_verification_invalid_length ( ) {
162+ let kp = Keypair :: generate ( ) ;
163+ let message = "test:1234567890:nonce" ;
164+
165+ // Test with signature that's too short (not 64 bytes)
166+ let short_sig = hex:: encode ( & [ 0u8 ; 32 ] ) ; // Only 32 bytes
167+ let result = verify_validator_signature ( & kp. hotkey ( ) . to_hex ( ) , message, & short_sig) ;
168+ assert ! ( result. is_err( ) ) ;
169+
170+ // Test with signature that's too long
171+ let long_sig = hex:: encode ( & [ 0u8 ; 128 ] ) ; // 128 bytes
172+ let result = verify_validator_signature ( & kp. hotkey ( ) . to_hex ( ) , message, & long_sig) ;
173+ assert ! ( result. is_err( ) ) ;
174+ }
99175}
0 commit comments