@@ -6,7 +6,7 @@ use pkcs8::der::{Decode, Encode};
6
6
use rand:: { CryptoRng , RngCore , SeedableRng } ;
7
7
use rand_chacha:: ChaCha8Rng ;
8
8
use sha2:: Sha256 ;
9
- use signature:: { DigestVerifier , RandomizedDigestSigner } ;
9
+ use signature:: { DigestVerifier , RandomizedDigestSigner , hazmat :: { PrehashSigner , PrehashVerifier } , Signer , Verifier } ;
10
10
11
11
/// Seed used for the ChaCha8 RNG
12
12
const SEED : u64 = 0x2103_1949 ;
@@ -87,3 +87,24 @@ fn verify_signature() {
87
87
. verify_digest( Sha256 :: new( ) . chain_update( MESSAGE ) , & signature)
88
88
. is_ok( ) ) ;
89
89
}
90
+
91
+ #[ test]
92
+ fn signer_verifier_signature ( ) {
93
+ let signing_key = generate_deterministic_keypair ( ) ;
94
+ let verifying_key = signing_key. verifying_key ( ) ;
95
+ let message = b"Hello world! This is the message signed as part of the testing process." ;
96
+
97
+ // construct signature manually and by `Signer` defaults. Ensure results are identical.
98
+ let manual_digest = Sha256 :: new_with_prefix ( message) . finalize ( ) ;
99
+ let manual_signature = signing_key. sign_prehash ( & manual_digest) . unwrap ( ) ;
100
+ let signer_signature = signing_key. sign ( message) ;
101
+ verifying_key. verify ( message, & manual_signature) . unwrap ( ) ;
102
+ verifying_key. verify ( message, & signer_signature) . unwrap ( ) ;
103
+ assert_eq ! ( manual_signature, signer_signature) ;
104
+
105
+ // verify signature manually and by `Verifier` defaults. Ensure signatures can be applied interchangeably.
106
+ verifying_key. verify_prehash ( & manual_digest, & manual_signature) . unwrap ( ) ;
107
+ verifying_key. verify_prehash ( & manual_digest, & signer_signature) . unwrap ( ) ;
108
+ verifying_key. verify ( message, & manual_signature) . unwrap ( ) ;
109
+ verifying_key. verify ( message, & signer_signature) . unwrap ( ) ;
110
+ }
0 commit comments