mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-29 10:58:21 +00:00
core: allow spending coins from Bitcoin paths if the coin ...
has implemented strong replay protection via SIGHASH_FORKID
This commit is contained in:
parent
503ac8d801
commit
0620911e46
@ -16,6 +16,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
- Print inverted question mark for non-printable characters.
|
- Print inverted question mark for non-printable characters.
|
||||||
- Remove pre-fill bar from text rendering functions. [#1173]
|
- Remove pre-fill bar from text rendering functions. [#1173]
|
||||||
- Display coin name when signing or verifying messages. [#1159]
|
- Display coin name when signing or verifying messages. [#1159]
|
||||||
|
- Allow spending coins from Bitcoin paths if the coin has implemented strong replay protection via `SIGHASH_FORKID`. [#1188]
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
@ -269,3 +270,4 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
[#1159]: https://github.com/trezor/trezor-firmware/issues/1159
|
[#1159]: https://github.com/trezor/trezor-firmware/issues/1159
|
||||||
[#1165]: https://github.com/trezor/trezor-firmware/pull/1165
|
[#1165]: https://github.com/trezor/trezor-firmware/pull/1165
|
||||||
[#1173]: https://github.com/trezor/trezor-firmware/pull/1173
|
[#1173]: https://github.com/trezor/trezor-firmware/pull/1173
|
||||||
|
[#1188]: https://github.com/trezor/trezor-firmware/issues/1188
|
||||||
|
@ -56,6 +56,16 @@ def get_namespaces_for_coin(coin: coininfo.CoinInfo):
|
|||||||
# m/0x4741b11e/6/pointer
|
# m/0x4741b11e/6/pointer
|
||||||
namespaces.append([0x4741B11E])
|
namespaces.append([0x4741B11E])
|
||||||
|
|
||||||
|
# some wallets such as Electron-Cash (BCH) store coins on Bitcoin paths
|
||||||
|
# we can allow spending these coins from Bitcoin paths if the coin has
|
||||||
|
# implemented strong replay protection via SIGHASH_FORKID
|
||||||
|
if coin.fork_id is not None:
|
||||||
|
namespaces.append([44 | HARDENED, 0 | HARDENED])
|
||||||
|
namespaces.append([48 | HARDENED, 0 | HARDENED])
|
||||||
|
if coin.segwit:
|
||||||
|
namespaces.append([49 | HARDENED, 0 | HARDENED])
|
||||||
|
namespaces.append([84 | HARDENED, 0 | HARDENED])
|
||||||
|
|
||||||
return namespaces
|
return namespaces
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,14 +87,46 @@ class TestAltcoinKeychains(unittest.TestCase):
|
|||||||
self.assertFalse(coin.segwit)
|
self.assertFalse(coin.segwit)
|
||||||
valid_addresses = (
|
valid_addresses = (
|
||||||
[44 | HARDENED, 145 | HARDENED],
|
[44 | HARDENED, 145 | HARDENED],
|
||||||
|
[44 | HARDENED, 0 | HARDENED],
|
||||||
[45 | HARDENED, 123456],
|
[45 | HARDENED, 123456],
|
||||||
[48 | HARDENED, 145 | HARDENED],
|
[48 | HARDENED, 145 | HARDENED],
|
||||||
|
[48 | HARDENED, 0 | HARDENED],
|
||||||
)
|
)
|
||||||
invalid_addresses = (
|
invalid_addresses = (
|
||||||
[43 | HARDENED, 145 | HARDENED],
|
[43 | HARDENED, 145 | HARDENED],
|
||||||
[44 | HARDENED, 0 | HARDENED],
|
[43 | HARDENED, 0 | HARDENED],
|
||||||
[49 | HARDENED, 145 | HARDENED],
|
[49 | HARDENED, 145 | HARDENED],
|
||||||
|
[49 | HARDENED, 0 | HARDENED],
|
||||||
[84 | HARDENED, 145 | HARDENED],
|
[84 | HARDENED, 145 | HARDENED],
|
||||||
|
[84 | HARDENED, 0 | HARDENED],
|
||||||
|
)
|
||||||
|
|
||||||
|
for addr in valid_addresses:
|
||||||
|
keychain.derive(addr)
|
||||||
|
|
||||||
|
for addr in invalid_addresses:
|
||||||
|
self.assertRaises(wire.DataError, keychain.derive, addr)
|
||||||
|
|
||||||
|
def test_litecoin(self):
|
||||||
|
keychain, coin = await_result(
|
||||||
|
get_keychain_for_coin(wire.DUMMY_CONTEXT, "Litecoin")
|
||||||
|
)
|
||||||
|
self.assertEqual(coin.coin_name, "Litecoin")
|
||||||
|
|
||||||
|
self.assertTrue(coin.segwit)
|
||||||
|
valid_addresses = (
|
||||||
|
[44 | HARDENED, 2 | HARDENED],
|
||||||
|
[45 | HARDENED, 123456],
|
||||||
|
[48 | HARDENED, 2 | HARDENED],
|
||||||
|
[49 | HARDENED, 2 | HARDENED],
|
||||||
|
[84 | HARDENED, 2 | HARDENED],
|
||||||
|
)
|
||||||
|
invalid_addresses = (
|
||||||
|
[43 | HARDENED, 2 | HARDENED],
|
||||||
|
[44 | HARDENED, 0 | HARDENED],
|
||||||
|
[48 | HARDENED, 0 | HARDENED],
|
||||||
|
[49 | HARDENED, 0 | HARDENED],
|
||||||
|
[84 | HARDENED, 0 | HARDENED],
|
||||||
)
|
)
|
||||||
|
|
||||||
for addr in valid_addresses:
|
for addr in valid_addresses:
|
||||||
|
Loading…
Reference in New Issue
Block a user