Browse Source

follow-up moving some funcs from ecc.py to bitcoin.py

follow-up 2f3d89f415
master
SomberNight 1 year ago
parent
commit
a674a22155
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 2
      electrum/bitcoin.py
  2. 8
      electrum/gui/qt/update_checker.py
  3. 6
      electrum/plugins/digitalbitbox/digitalbitbox.py

2
electrum/bitcoin.py

@ -845,7 +845,6 @@ def control_block_for_taproot_script_spend(
# user message signing # user message signing
def usermessage_magic(message: bytes) -> bytes: def usermessage_magic(message: bytes) -> bytes:
from .bitcoin import var_int
length = var_int(len(message)) length = var_int(len(message))
return b"\x18Bitcoin Signed Message:\n" + length + message return b"\x18Bitcoin Signed Message:\n" + length + message
@ -855,7 +854,6 @@ def ecdsa_sign_usermessage(ec_privkey, message: Union[bytes, str], *, is_compres
return ec_privkey.ecdsa_sign_recoverable(msg32, is_compressed=is_compressed) return ec_privkey.ecdsa_sign_recoverable(msg32, is_compressed=is_compressed)
def verify_usermessage_with_address(address: str, sig65: bytes, message: bytes, *, net=None) -> bool: def verify_usermessage_with_address(address: str, sig65: bytes, message: bytes, *, net=None) -> bool:
from .bitcoin import pubkey_to_address
from .ecc import ECPubkey from .ecc import ECPubkey
assert_bytes(sig65, message) assert_bytes(sig65, message)
if net is None: net = constants.net if net is None: net = constants.net

8
electrum/gui/qt/update_checker.py

@ -11,7 +11,7 @@ from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QLabel, QProgressBar,
from electrum import version from electrum import version
from electrum import constants from electrum import constants
from electrum import ecc from electrum.bitcoin import verify_usermessage_with_address
from electrum.i18n import _ from electrum.i18n import _
from electrum.util import make_aiohttp_session from electrum.util import make_aiohttp_session
from electrum.logging import Logger from electrum.logging import Logger
@ -123,8 +123,10 @@ class UpdateCheckThread(QThread, Logger):
continue continue
sig = base64.b64decode(sig) sig = base64.b64decode(sig)
msg = version_num.encode('utf-8') msg = version_num.encode('utf-8')
if ecc.verify_usermessage_with_address(address=address, sig65=sig, message=msg, if verify_usermessage_with_address(
net=constants.BitcoinMainnet): address=address, sig65=sig, message=msg,
net=constants.BitcoinMainnet
):
self.logger.info(f"valid sig for version announcement '{version_num}' from address '{address}'") self.logger.info(f"valid sig for version announcement '{version_num}' from address '{address}'")
break break
else: else:

6
electrum/plugins/digitalbitbox/digitalbitbox.py

@ -18,7 +18,7 @@ import copy
from typing import TYPE_CHECKING, Optional from typing import TYPE_CHECKING, Optional
from electrum.crypto import sha256d, EncodeAES_bytes, DecodeAES_bytes, hmac_oneshot from electrum.crypto import sha256d, EncodeAES_bytes, DecodeAES_bytes, hmac_oneshot
from electrum.bitcoin import public_key_to_p2pkh, usermessage_magic from electrum.bitcoin import public_key_to_p2pkh, usermessage_magic, verify_usermessage_with_address
from electrum.bip32 import BIP32Node, convert_bip32_intpath_to_strpath, is_all_public_derivation from electrum.bip32 import BIP32Node, convert_bip32_intpath_to_strpath, is_all_public_derivation
from electrum.bip32 import normalize_bip32_derivation from electrum.bip32 import normalize_bip32_derivation
from electrum import descriptor from electrum import descriptor
@ -497,7 +497,7 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
sig = ecc.construct_ecdsa_sig65(sig_string, recid, is_compressed=True) sig = ecc.construct_ecdsa_sig65(sig_string, recid, is_compressed=True)
pubkey, compressed, txin_type_guess = ecc.ECPubkey.from_ecdsa_sig65(sig, msg_hash) pubkey, compressed, txin_type_guess = ecc.ECPubkey.from_ecdsa_sig65(sig, msg_hash)
addr = public_key_to_p2pkh(pubkey.get_public_key_bytes(compressed=compressed)) addr = public_key_to_p2pkh(pubkey.get_public_key_bytes(compressed=compressed))
if ecc.verify_usermessage_with_address(addr, sig, message) is False: if verify_usermessage_with_address(addr, sig, message) is False:
raise Exception(_("Could not sign message")) raise Exception(_("Could not sign message"))
elif 'pubkey' in reply['sign'][0]: elif 'pubkey' in reply['sign'][0]:
# firmware <= v2.1.1 # firmware <= v2.1.1
@ -506,7 +506,7 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
sig = ecc.construct_ecdsa_sig65(sig_string, recid, is_compressed=True) sig = ecc.construct_ecdsa_sig65(sig_string, recid, is_compressed=True)
try: try:
addr = public_key_to_p2pkh(binascii.unhexlify(reply['sign'][0]['pubkey'])) addr = public_key_to_p2pkh(binascii.unhexlify(reply['sign'][0]['pubkey']))
if ecc.verify_usermessage_with_address(addr, sig, message): if verify_usermessage_with_address(addr, sig, message):
break break
except Exception: except Exception:
continue continue

Loading…
Cancel
Save