You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/src/apps/nem/helpers.py

64 lines
2.0 KiB

from micropython import const
from apps.common import HARDENED
NEM_NETWORK_MAINNET = const(0x68)
NEM_NETWORK_TESTNET = const(0x98)
NEM_NETWORK_MIJIN = const(0x60)
NEM_TRANSACTION_TYPE_TRANSFER = const(0x0101)
NEM_TRANSACTION_TYPE_IMPORTANCE_TRANSFER = const(0x0801)
NEM_TRANSACTION_TYPE_AGGREGATE_MODIFICATION = const(0x1001)
NEM_TRANSACTION_TYPE_MULTISIG_SIGNATURE = const(0x1002)
NEM_TRANSACTION_TYPE_MULTISIG = const(0x1004)
NEM_TRANSACTION_TYPE_PROVISION_NAMESPACE = const(0x2001)
NEM_TRANSACTION_TYPE_MOSAIC_CREATION = const(0x4001)
NEM_TRANSACTION_TYPE_MOSAIC_SUPPLY_CHANGE = const(0x4002)
NEM_MAX_DIVISIBILITY = const(6)
NEM_MAX_SUPPLY = const(9000000000)
NEM_SALT_SIZE = const(32)
AES_BLOCK_SIZE = const(16)
NEM_HASH_ALG = "keccak"
NEM_PUBLIC_KEY_SIZE = const(32) # ed25519 public key
NEM_LEVY_PERCENTILE_DIVISOR_ABSOLUTE = const(10000)
NEM_MOSAIC_AMOUNT_DIVISOR = const(1000000)
NEM_MAX_PLAIN_PAYLOAD_SIZE = const(1024)
NEM_MAX_ENCRYPTED_PAYLOAD_SIZE = const(960)
def get_network_str(network: int) -> str:
if network == NEM_NETWORK_MAINNET:
return "Mainnet"
elif network == NEM_NETWORK_TESTNET:
return "Testnet"
elif network == NEM_NETWORK_MIJIN:
return "Mijin"
def check_path(path: list, network=None) -> bool:
"""
Validates derivation path to fit 44'/43'/a' or 44'/43'/a'/0'/0',
where `a` is an account number. We believe the path should be
44'/43'/a', but for compatibility reasons with NEM's NanoWallet
we allow 44'/43'/a'/0'/0' as well.
Testnet is also allowed: 44'/1'/a'{/0'/0'}
"""
length = len(path)
if length != 3 and length != 5:
return False
if path[0] != 44 | HARDENED:
return False
if not (
path[1] == 43 | HARDENED
or (network == NEM_NETWORK_TESTNET and path[1] == 1 | HARDENED)
):
return False
if path[2] < HARDENED or path[2] > 1000000 | HARDENED:
return False
if length == 5 and (path[3] != 0 | HARDENED or path[4] != 0 | HARDENED):
return False
return True