tfix #4093 - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit e31c2d491d4301c6ec44e977ee22f2bc81381410 DIR parent d71d22d279b57dbe1f1509b7ba37fc421b2f173a HTML Author: SomberNight <somber.night@protonmail.com> Date: Sun, 11 Mar 2018 07:18:07 +0100 fix #4093 Diffstat: M lib/bitcoin.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) --- DIR diff --git a/lib/bitcoin.py b/lib/bitcoin.py t@@ -408,7 +408,10 @@ def base_decode(v, length, base): chars = __b43chars long_value = 0 for (i, c) in enumerate(v[::-1]): - long_value += chars.find(bytes([c])) * (base**i) + digit = chars.find(bytes([c])) + if digit == -1: + raise ValueError('Forbidden character {} for base {}'.format(c, base)) + long_value += digit * (base**i) result = bytearray() while long_value >= 256: div, mod = divmod(long_value, 256) t@@ -428,6 +431,10 @@ def base_decode(v, length, base): return bytes(result) +class InvalidChecksum(Exception): + pass + + def EncodeBase58Check(vchIn): hash = Hash(vchIn) return base_encode(vchIn + hash[0:4], base=58) t@@ -440,7 +447,7 @@ def DecodeBase58Check(psz): hash = Hash(key) cs32 = hash[0:4] if cs32 != csum: - return None + raise InvalidChecksum('expected {}, actual {}'.format(bh2u(cs32), bh2u(csum))) else: return key t@@ -479,8 +486,9 @@ def deserialize_privkey(key): if ':' in key: txin_type, key = key.split(sep=':', maxsplit=1) assert txin_type in SCRIPT_TYPES - vch = DecodeBase58Check(key) - if not vch: + try: + vch = DecodeBase58Check(key) + except BaseException: neutered_privkey = str(key)[:3] + '..' + str(key)[-2:] raise BaseException("cannot deserialize", neutered_privkey)