mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-16 04:29:08 +00:00
e073e619c9
isort set to skip the first necessary "from common import *" line. A better solution would be to get rid of the need of this import in the future. [no changelog]
123 lines
3.8 KiB
Python
123 lines
3.8 KiB
Python
from common import * # isort:skip
|
|
|
|
from apps.common.paths import HARDENED
|
|
|
|
if not utils.BITCOIN_ONLY:
|
|
from trezor.crypto import nem
|
|
|
|
from apps.nem.helpers import (
|
|
NEM_NETWORK_MAINNET,
|
|
NEM_NETWORK_MIJIN,
|
|
NEM_NETWORK_TESTNET,
|
|
check_path,
|
|
)
|
|
|
|
|
|
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
|
|
class TestNemAddress(unittest.TestCase):
|
|
def test_addresses(self):
|
|
pubkey = unhexlify(
|
|
"c5f54ba980fcbb657dbaaa42700539b207873e134d2375efeab5f1ab52f87844"
|
|
)
|
|
address = nem.compute_address(pubkey, NEM_NETWORK_MAINNET)
|
|
self.assertEqual(address, "NDD2CT6LQLIYQ56KIXI3ENTM6EK3D44P5JFXJ4R4")
|
|
|
|
pubkey = unhexlify(
|
|
"114171230ad6f8522a000cdc73fbc5c733b30bb71f2b146ccbdf34499f79a810"
|
|
)
|
|
address = nem.compute_address(pubkey, NEM_NETWORK_MAINNET)
|
|
self.assertEqual(address, "NCUKWDY3J3THKQHAKOK5ALF6ANJQABZHCH7VN6DP")
|
|
|
|
def test_validate_address(self):
|
|
validity = nem.validate_address(
|
|
"NDD2CT6LQLIYQ56KIXI3ENTM6EK3D44P5JFXJ4R4", NEM_NETWORK_MAINNET
|
|
)
|
|
self.assertTrue(validity)
|
|
|
|
validity = nem.validate_address(
|
|
"NCUKWDY3J3THKQHAKOK5ALF6ANJQABZHCH7VN6DP", NEM_NETWORK_MAINNET
|
|
)
|
|
self.assertTrue(validity)
|
|
|
|
validity = nem.validate_address(
|
|
"TAU5HO3DRQZNELFEMZZTUKQEZGQ7IUAHKPO7OOLK", NEM_NETWORK_TESTNET
|
|
)
|
|
self.assertTrue(validity)
|
|
|
|
validity = nem.validate_address("nope", NEM_NETWORK_TESTNET)
|
|
self.assertFalse(validity)
|
|
|
|
# not valid on testnet
|
|
validity = nem.validate_address(
|
|
"NCUKWDY3J3THKQHAKOK5ALF6ANJQABZHCH7VN6DP", NEM_NETWORK_TESTNET
|
|
)
|
|
self.assertFalse(validity)
|
|
|
|
def test_check_path(self):
|
|
# mainnet path:
|
|
self.assertTrue(
|
|
check_path(
|
|
[
|
|
44 | HARDENED,
|
|
43 | HARDENED,
|
|
0 | HARDENED,
|
|
0 | HARDENED,
|
|
0 | HARDENED,
|
|
],
|
|
NEM_NETWORK_MAINNET,
|
|
)
|
|
)
|
|
# should be valid on mijin as well:
|
|
self.assertTrue(
|
|
check_path(
|
|
[
|
|
44 | HARDENED,
|
|
43 | HARDENED,
|
|
0 | HARDENED,
|
|
0 | HARDENED,
|
|
0 | HARDENED,
|
|
],
|
|
NEM_NETWORK_MIJIN,
|
|
)
|
|
)
|
|
# testnet path:
|
|
self.assertTrue(
|
|
check_path(
|
|
[44 | HARDENED, 1 | HARDENED, 0 | HARDENED, 0 | HARDENED, 0 | HARDENED],
|
|
NEM_NETWORK_TESTNET,
|
|
)
|
|
)
|
|
# short path (check_path does not validate pattern match):
|
|
self.assertTrue(check_path([44 | HARDENED, 43 | HARDENED], NEM_NETWORK_MAINNET))
|
|
|
|
# testnet path on mainnet:
|
|
self.assertFalse(
|
|
check_path(
|
|
[44 | HARDENED, 1 | HARDENED, 0 | HARDENED, 0 | HARDENED, 0 | HARDENED],
|
|
NEM_NETWORK_MAINNET,
|
|
)
|
|
)
|
|
# mainnet path on testnet:
|
|
self.assertFalse(
|
|
check_path(
|
|
[
|
|
44 | HARDENED,
|
|
43 | HARDENED,
|
|
0 | HARDENED,
|
|
0 | HARDENED,
|
|
0 | HARDENED,
|
|
],
|
|
NEM_NETWORK_TESTNET,
|
|
)
|
|
)
|
|
# path too short to extract SLIP44:
|
|
self.assertFalse(check_path([44 | HARDENED], NEM_NETWORK_TESTNET))
|
|
# unknown SLIP44:
|
|
self.assertFalse(check_path([44 | HARDENED, 0 | HARDENED], NEM_NETWORK_MAINNET))
|
|
# unhardened SLIP44:
|
|
self.assertFalse(check_path([44 | HARDENED, 43, 0], NEM_NETWORK_MAINNET))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|