Improve bip32 test coverage
This commit is contained in:
parent
1addbd6815
commit
54c3ae4c5d
@ -59,6 +59,8 @@ class TestPubKey(object):
|
|||||||
cls(raw_pubkey, chain_code, 0, -1)
|
cls(raw_pubkey, chain_code, 0, -1)
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
cls(raw_pubkey, chain_code, 0, 256)
|
cls(raw_pubkey, chain_code, 0, 256)
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
cls(b'\0' + b'\2' * 32, chain_code, 0, 0)
|
||||||
|
|
||||||
# These are OK
|
# These are OK
|
||||||
cls(b'\2' + b'\2' * 32, chain_code, 0, 0)
|
cls(b'\2' + b'\2' * 32, chain_code, 0, 0)
|
||||||
@ -88,6 +90,18 @@ class TestPubKey(object):
|
|||||||
assert mpubkey.chain_code == b'>V\x83\x92`\r\x17\xb3"\xa6\x7f\xaf\xc0\x930\xf7\x1e\xdc\x12i\x9c\xe4\xc0,a\x1a\x04\xec\x16\x19\xaeK'
|
assert mpubkey.chain_code == b'>V\x83\x92`\r\x17\xb3"\xa6\x7f\xaf\xc0\x930\xf7\x1e\xdc\x12i\x9c\xe4\xc0,a\x1a\x04\xec\x16\x19\xaeK'
|
||||||
assert mpubkey.ec_point().x() == 44977109961578369385937116592536468905742111247230478021459394832226142714624
|
assert mpubkey.ec_point().x() == 44977109961578369385937116592536468905742111247230478021459394832226142714624
|
||||||
|
|
||||||
|
def test_extended_key(self):
|
||||||
|
# Test argument validation
|
||||||
|
with pytest.raises(TypeError):
|
||||||
|
mpubkey._extended_key('foot', bytes(33))
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
mpubkey._extended_key(b'foo', bytes(33))
|
||||||
|
with pytest.raises(TypeError):
|
||||||
|
mpubkey._extended_key(bytes(4), ' ' * 33)
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
mpubkey._extended_key(b'foot', bytes(32))
|
||||||
|
mpubkey._extended_key(b'foot', bytes(33))
|
||||||
|
|
||||||
def test_extended_key_string(self):
|
def test_extended_key_string(self):
|
||||||
# Implictly tests extended_key()
|
# Implictly tests extended_key()
|
||||||
assert mpubkey.extended_key_string(Bitcoin) == MXPUB
|
assert mpubkey.extended_key_string(Bitcoin) == MXPUB
|
||||||
@ -183,6 +197,10 @@ class TestPrivKey(object):
|
|||||||
cls(bip32._exponent_to_bytes(cls.CURVE.order - 1), chain_code, 0, 0)
|
cls(bip32._exponent_to_bytes(cls.CURVE.order - 1), chain_code, 0, 0)
|
||||||
privkey = cls(MPRIVKEY, chain_code, 0, 255)
|
privkey = cls(MPRIVKEY, chain_code, 0, 255)
|
||||||
|
|
||||||
|
# Construction with bad parent
|
||||||
|
with pytest.raises(TypeError):
|
||||||
|
cls(MPRIVKEY, chain_code, 0, 0, privkey.public_key)
|
||||||
|
|
||||||
# Construction from signing key
|
# Construction from signing key
|
||||||
dup = cls(privkey.signing_key, chain_code, 0, 0)
|
dup = cls(privkey.signing_key, chain_code, 0, 0)
|
||||||
assert dup.ec_point() == privkey.ec_point()
|
assert dup.ec_point() == privkey.ec_point()
|
||||||
@ -217,6 +235,18 @@ class TestPrivKey(object):
|
|||||||
assert mprivkey.public_key.n == mpubkey.n
|
assert mprivkey.public_key.n == mpubkey.n
|
||||||
assert mprivkey.public_key.depth == mpubkey.depth
|
assert mprivkey.public_key.depth == mpubkey.depth
|
||||||
|
|
||||||
|
def test_extended_key(self):
|
||||||
|
# Test argument validation
|
||||||
|
with pytest.raises(TypeError):
|
||||||
|
mprivkey._extended_key('foot', bytes(33))
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
mprivkey._extended_key(b'foo', bytes(33))
|
||||||
|
with pytest.raises(TypeError):
|
||||||
|
mprivkey._extended_key(bytes(4), ' ' * 33)
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
mprivkey._extended_key(b'foot', bytes(32))
|
||||||
|
mprivkey._extended_key(b'foot', bytes(33))
|
||||||
|
|
||||||
def test_extended_key_string(self):
|
def test_extended_key_string(self):
|
||||||
# Also tests extended_key, WIF and privkey_bytes
|
# Also tests extended_key, WIF and privkey_bytes
|
||||||
assert mprivkey.extended_key_string(Bitcoin) == MXPRV
|
assert mprivkey.extended_key_string(Bitcoin) == MXPRV
|
||||||
|
|||||||
@ -110,8 +110,7 @@ class PubKey(_KeyBase):
|
|||||||
# p is the finite field order
|
# p is the finite field order
|
||||||
a, b, p = curve.a(), curve.b(), curve.p()
|
a, b, p = curve.a(), curve.b(), curve.p()
|
||||||
y2 = pow(x, 3, p) + b
|
y2 = pow(x, 3, p) + b
|
||||||
if a:
|
assert a == 0 # Otherwise y2 += a * pow(x, 2, p)
|
||||||
y2 += a * pow(x, 2, p)
|
|
||||||
y = NT.square_root_mod_prime(y2 % p, p)
|
y = NT.square_root_mod_prime(y2 % p, p)
|
||||||
if bool(y & 1) != is_odd:
|
if bool(y & 1) != is_odd:
|
||||||
y = p - y
|
y = p - y
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user