Skip to content

Commit d59db83

Browse files
author
shadowy-pycoder
committed
small refactoring
1 parent 6d61de5 commit d59db83

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

src/bitcoin_message_tool/main.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ class Signature(NamedTuple):
5959
[b'\x27', b'\x29', b'\x28', b'\x2a'],
6060
[b'\x2b', b'\x2c', b'\x2d', b'\x2e']]
6161

62-
addresses = ['p2pkh', 'p2wpkh-p2sh', 'p2wpkh']
63-
6462

6563
class BitcoinMessageError(Exception):
6664
"""Base exception for PieWallet"""
@@ -373,7 +371,7 @@ def sign(privkey: int, msg: int, /) -> Signature:
373371

374372
def derive_address(pubkey, addr_type: str, uncompressed=False) -> tuple[str, int]:
375373
if uncompressed and addr_type != 'p2pkh':
376-
raise SignatureError
374+
raise PrivateKeyError('Need WIF-compressed private key for this address type:', addr_type)
377375
elif uncompressed:
378376
return create_address(pubkey), 0
379377
elif addr_type.lower() == 'p2pkh':
@@ -383,7 +381,7 @@ def derive_address(pubkey, addr_type: str, uncompressed=False) -> tuple[str, int
383381
elif addr_type.lower() == 'p2wpkh':
384382
return create_native_segwit(pubkey), 3
385383
else:
386-
raise SignatureError
384+
raise SignatureError('Invalid address type')
387385

388386

389387
def sign_message(wif: str, addr_type: str, message: str, /, *, deterministic=False) -> tuple[str, ...]:
@@ -404,7 +402,7 @@ def sign_message(wif: str, addr_type: str, message: str, /, *, deterministic=Fal
404402
verified = verify_message(address, message, signature)
405403
if verified:
406404
return address, message, signature
407-
raise SignatureError
405+
raise SignatureError('Invalid signature parameters')
408406

409407

410408
def bitcoin_message(wif, addr_type: str, message: str, /, *, deterministic=False) -> None:
@@ -422,12 +420,13 @@ def verify_message(address: str, message: str, signature: str, /) -> bool:
422420
dsig = base64.b64decode(signature)
423421
if len(dsig) != 65:
424422
raise SignatureError('Signature must be 65 bytes long:', len(dsig))
425-
ver = dsig[:1]
426-
m_bytes = msg_magic(message)
427-
z = int.from_bytes(double_sha256(m_bytes), 'big')
428423
header, r, s = dsig[0], int.from_bytes(dsig[1:33], 'big'), int.from_bytes(dsig[33:], 'big')
429424
if header < 27 or header > 46:
430425
raise SignatureError('Header byte out of range:', header)
426+
if r >= secp256k1.n_curve or r == 0:
427+
raise SignatureError('r-value out of range:', r)
428+
if s >= secp256k1.n_curve or s == 0:
429+
raise SignatureError('s-value out of range:', s)
431430
if header >= 43:
432431
header -= 16
433432
if header >= 39:
@@ -444,6 +443,9 @@ def verify_message(address: str, message: str, signature: str, /) -> bool:
444443
if is_odd(beta - recid):
445444
y = secp256k1.p_curve - beta
446445
R = Point(x, y)
446+
ver = dsig[:1]
447+
m_bytes = msg_magic(message)
448+
z = int.from_bytes(double_sha256(m_bytes), 'big')
447449
e = (-z) % secp256k1.n_curve
448450
inv_r = mod_inverse(r, secp256k1.n_curve)
449451
p = ec_mul(s, R)
@@ -463,8 +465,6 @@ def verify_message(address: str, message: str, signature: str, /) -> bool:
463465
addr = create_native_segwit(pubkey)
464466
elif ver in headers[4]:
465467
raise NotImplementedError()
466-
else:
467-
raise SignatureError('Header byte out of range:', header)
468468
return addr == address
469469

470470

0 commit comments

Comments
 (0)