From dc07cd3c39b0c7d3402a99d980c388b37b42177d Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Fri, 1 Nov 2019 12:36:50 +0000 Subject: [PATCH] gentest.py: test private key edge cases --- mmgen/protocol.py | 3 ++- test/gentest.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/mmgen/protocol.py b/mmgen/protocol.py index 91dd8ca7..b3049783 100755 --- a/mmgen/protocol.py +++ b/mmgen/protocol.py @@ -124,7 +124,8 @@ class BitcoinProtocol(MMGenObject): elif pk == cls.secp256k1_ge: # ditto ydie(3,'Private key == secp256k1_ge!') else: - ymsg('Warning: private key is greater than secp256k1 group order!:\n {}'.format(sec.hex())) + if not g.test_suite: + ymsg('Warning: private key is greater than secp256k1 group order!:\n {}'.format(hexpriv)) return (pk % cls.secp256k1_ge).to_bytes(cls.privkey_len,'big') @classmethod diff --git a/test/gentest.py b/test/gentest.py index e9ab5ea8..cc92340a 100755 --- a/test/gentest.py +++ b/test/gentest.py @@ -228,6 +228,20 @@ def compare_test(): '\ninput: {b}\n%-9s {k}\nvkey: {v}\naddr: {a}\n')[ 'viewkey' in addr_type.extra_attrs] % (addr_type.wif_label + ':') + # test some important private key edge cases: + edgecase_sks = ( + bytes([0x00]*31 + [0x01]), # min + bytes([0xff]*32), # max + bytes([0x0f] + [0xff]*31), # same key as above for zcash-z + bytes([0x00]*31 + [0xff]), # monero will reduce + bytes([0xff]*31 + [0x0f]), # monero will not reduce + ) + + qmsg(purple('edge cases:')) + for i,in_bytes in enumerate(edgecase_sks): + do_compare_test(i,len(edgecase_sks),in_bytes) + qmsg(green('\rOK ' if opt.verbose else 'OK')) + qmsg(purple('random input:')) for i in range(rounds): do_compare_test(i,rounds,os.urandom(32))