@@ -452,10 +452,10 @@ impl<Ids: KeyIds> KeyStoreContext<'_, Ids> {
452
452
#[ cfg( test) ]
453
453
#[ allow( deprecated) ]
454
454
mod tests {
455
+ use serde:: { Deserialize , Serialize } ;
456
+
455
457
use crate :: {
456
- store:: { tests:: DataView , KeyStore } ,
457
- traits:: tests:: { TestIds , TestSigningKey , TestSymmKey } ,
458
- Decryptable , Encryptable , SignatureAlgorithm , SigningKey , SymmetricCryptoKey ,
458
+ store:: { tests:: DataView , KeyStore } , traits:: tests:: { TestIds , TestSigningKey , TestSymmKey } , CryptoError , Decryptable , Encryptable , SignatureAlgorithm , SigningKey , SymmetricCryptoKey
459
459
} ;
460
460
461
461
#[ test]
@@ -534,4 +534,39 @@ mod tests {
534
534
// Assert that the decrypted data is the same
535
535
assert_eq ! ( decrypted1. 0 , decrypted2. 0 ) ;
536
536
}
537
+
538
+
539
+ #[ test]
540
+ fn test_signing ( ) {
541
+ let store: KeyStore < TestIds > = KeyStore :: default ( ) ;
542
+
543
+ // Generate and insert a key
544
+ let key_a0_id = TestSigningKey :: A ( 0 ) ;
545
+ let key_a0 = SigningKey :: make ( SignatureAlgorithm :: Ed25519 ) . unwrap ( ) ;
546
+ let verifying_key = key_a0. to_verifying_key ( ) ;
547
+ store
548
+ . context_mut ( )
549
+ . set_signing_key ( key_a0_id, key_a0)
550
+ . unwrap ( ) ;
551
+
552
+ assert ! ( store. context( ) . has_signing_key( key_a0_id) ) ;
553
+
554
+ // Sign some data with the key
555
+ #[ derive( Serialize , Deserialize ) ]
556
+ struct TestData {
557
+ data : String ,
558
+ }
559
+ let signed_object = store
560
+ . context ( )
561
+ . sign ( key_a0_id, & TestData { data : "Hello" . to_string ( ) } , & & crate :: SigningNamespace :: ExampleNamespace )
562
+ . unwrap ( ) ;
563
+ let payload: Result < TestData , CryptoError > = verifying_key. get_verified_payload ( & signed_object, & crate :: SigningNamespace :: ExampleNamespace ) ;
564
+ assert ! ( payload. is_ok( ) ) ;
565
+
566
+ let ( signature, serialized_message) = store
567
+ . context ( )
568
+ . sign_detached ( key_a0_id, & TestData { data : "Hello" . to_string ( ) } , & & crate :: SigningNamespace :: ExampleNamespace )
569
+ . unwrap ( ) ;
570
+ assert ! ( verifying_key. verify_signature( & serialized_message, & crate :: SigningNamespace :: ExampleNamespace , & signature) ) ;
571
+ }
537
572
}
0 commit comments