URI: 
       tbitcoin: stricter check on WIF for compressed pubkeys - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 7584cebbe32055a2455d448b436c7af470428e2a
   DIR parent a6762ffebcfbefd33be9393920c16f016aaf9d63
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Thu, 25 Apr 2019 14:35:16 +0200
       
       bitcoin: stricter check on WIF for compressed pubkeys
       
       fixes #5290
       
       Diffstat:
         M electrum/bitcoin.py                 |       8 +++++++-
         M electrum/tests/test_bitcoin.py      |       6 ++++++
       
       2 files changed, 13 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/electrum/bitcoin.py b/electrum/bitcoin.py
       t@@ -578,7 +578,13 @@ def deserialize_privkey(key: str) -> Tuple[str, bytes, bool]:
        
            if len(vch) not in [33, 34]:
                raise BitcoinException('invalid vch len for WIF key: {}'.format(len(vch)))
       -    compressed = len(vch) == 34
       +    compressed = False
       +    if len(vch) == 34:
       +        if vch[33] == 0x01:
       +            compressed = True
       +        else:
       +            raise BitcoinException(f'invalid WIF key. length suggests compressed pubkey, '
       +                                   f'but last byte is {vch[33]} != 0x01')
        
            if is_segwit_script_type(txin_type) and not compressed:
                raise BitcoinException('only compressed public keys can be used in segwit scripts')
   DIR diff --git a/electrum/tests/test_bitcoin.py b/electrum/tests/test_bitcoin.py
       t@@ -742,6 +742,12 @@ class Test_keyImport(SequentialTestCase):
                    is_private_key("p2wpkh-p2sh:5JKXxT3wAZHcybJ9YNkuHur9vou6uuAnorBV9A8vVxGNFH5wvTW",
                                   raise_on_error=True)
        
       +    @needs_test_with_all_ecc_implementations
       +    def test_wif_with_invalid_magic_byte_for_compressed_pubkey(self):
       +        with self.assertRaises(BitcoinException):
       +            is_private_key("KwFAa6AumokBD2dVqQLPou42jHiVsvThY1n25HJ8Ji8REf1wxAQb",
       +                           raise_on_error=True)
       +
        
        class TestBaseEncode(SequentialTestCase):