@@ -290,24 +290,33 @@ def sign_schnorr(key, msg, aux=None, flip_p=False, flip_r=False):
290
290
291
291
292
292
class TestFrameworkKey (unittest .TestCase ):
293
- def test_schnorr (self ):
294
- """Test the Python Schnorr implementation."""
293
+ def test_ecdsa_and_schnorr (self ):
294
+ """Test the Python ECDSA and Schnorr implementations."""
295
+ def random_bitflip (sig ):
296
+ sig = list (sig )
297
+ sig [random .randrange (len (sig ))] ^= (1 << (random .randrange (8 )))
298
+ return bytes (sig )
299
+
295
300
byte_arrays = [generate_privkey () for _ in range (3 )] + [v .to_bytes (32 , 'big' ) for v in [0 , ORDER - 1 , ORDER , 2 ** 256 - 1 ]]
296
301
keys = {}
297
- for privkey in byte_arrays : # build array of key/pubkey pairs
298
- pubkey , _ = compute_xonly_pubkey (privkey )
299
- if pubkey is not None :
300
- keys [privkey ] = pubkey
302
+ for privkey_bytes in byte_arrays : # build array of key/pubkey pairs
303
+ privkey = ECKey ()
304
+ privkey .set (privkey_bytes , compressed = True )
305
+ if privkey .is_valid :
306
+ keys [privkey ] = privkey .get_pubkey ()
301
307
for msg in byte_arrays : # test every combination of message, signing key, verification key
302
308
for sign_privkey , _ in keys .items ():
303
- sig = sign_schnorr (sign_privkey , msg )
309
+ sig_ecdsa = sign_privkey .sign_ecdsa (msg )
310
+ sig_schnorr = sign_schnorr (sign_privkey .get_bytes (), msg )
304
311
for verify_privkey , verify_pubkey in keys .items ():
312
+ verify_xonly_pubkey = verify_pubkey .get_bytes ()[1 :]
305
313
if verify_privkey == sign_privkey :
306
- self .assertTrue (verify_schnorr (verify_pubkey , sig , msg ))
307
- sig = list (sig )
308
- sig [random .randrange (64 )] ^= (1 << (random .randrange (8 ))) # damaging signature should break things
309
- sig = bytes (sig )
310
- self .assertFalse (verify_schnorr (verify_pubkey , sig , msg ))
314
+ self .assertTrue (verify_pubkey .verify_ecdsa (sig_ecdsa , msg ))
315
+ self .assertTrue (verify_schnorr (verify_xonly_pubkey , sig_schnorr , msg ))
316
+ sig_ecdsa = random_bitflip (sig_ecdsa ) # damaging signature should break things
317
+ sig_schnorr = random_bitflip (sig_schnorr )
318
+ self .assertFalse (verify_pubkey .verify_ecdsa (sig_ecdsa , msg ))
319
+ self .assertFalse (verify_schnorr (verify_xonly_pubkey , sig_schnorr , msg ))
311
320
312
321
def test_schnorr_testvectors (self ):
313
322
"""Implement the BIP340 test vectors (read from bip340_test_vectors.csv)."""
0 commit comments