@@ -139,6 +139,56 @@ impl SchnorrSignature {
139139
140140#[ cfg( test) ]
141141mod tests {
142+ use rand_chacha:: ChaCha20Rng ;
143+ use rand_core:: SeedableRng ;
144+
145+ use crate :: signature_scheme:: { SchnorrSignature , SchnorrSigningKey , SchnorrVerificationKey } ;
146+
147+ #[ test]
148+ fn invalid_sig ( ) {
149+ let msg = vec ! [ 0 , 0 , 0 , 1 ] ;
150+ let msg2 = vec ! [ 0 , 0 , 0 , 2 ] ;
151+ let seed = [ 0u8 ; 32 ] ;
152+ let mut rng = ChaCha20Rng :: from_seed ( seed) ;
153+ let sk = SchnorrSigningKey :: generate ( & mut rng) . unwrap ( ) ;
154+ let vk = SchnorrVerificationKey :: new_from_signing_key ( sk. clone ( ) ) . unwrap ( ) ;
155+ let sk2 = SchnorrSigningKey :: generate ( & mut rng) . unwrap ( ) ;
156+ let vk2 = SchnorrVerificationKey :: new_from_signing_key ( sk2) . unwrap ( ) ;
157+
158+ let sig = sk. sign ( & msg, & mut rng) . unwrap ( ) ;
159+ let sig2 = sk. sign ( & msg2, & mut rng) . unwrap ( ) ;
160+
161+ // Wrong verification key is used
162+ let result1 = sig. verify ( & msg, & vk2) ;
163+ let result2 = sig2. verify ( & msg, & vk) ;
164+
165+ result1. expect_err ( "Wrong verification key used, test should fail." ) ;
166+ // Wrong message is verified
167+ result2. expect_err ( "Wrong message used, test should fail." ) ;
168+ }
169+
170+ #[ test]
171+ fn serialize_deserialize_signature ( ) {
172+ let mut rng = ChaCha20Rng :: from_seed ( [ 0u8 ; 32 ] ) ;
173+
174+ let msg = vec ! [ 0 , 0 , 0 , 1 ] ;
175+ let sk = SchnorrSigningKey :: generate ( & mut rng) . unwrap ( ) ;
176+
177+ let sig = sk. sign ( & msg, & mut rng) . unwrap ( ) ;
178+ let sig_bytes: [ u8 ; 96 ] = sig. to_bytes ( ) ;
179+ let sig2 = SchnorrSignature :: from_bytes ( & sig_bytes) . unwrap ( ) ;
180+
181+ assert_eq ! ( sig, sig2) ;
182+ }
183+
184+ #[ test]
185+ fn from_bytes_signature_not_enough_bytes ( ) {
186+ let msg = vec ! [ 0u8 ; 95 ] ;
187+
188+ let result = SchnorrSignature :: from_bytes ( & msg) ;
189+
190+ result. expect_err ( "Not enough bytes." ) ;
191+ }
142192
143193 mod golden {
144194
0 commit comments