|
|
|
@ -1,14 +1,14 @@
|
|
|
|
|
from trezor import wire
|
|
|
|
|
|
|
|
|
|
from apps.common import HARDENED, coininfo
|
|
|
|
|
from apps.common.seed import get_keychain
|
|
|
|
|
from apps.common.keychain import get_keychain
|
|
|
|
|
|
|
|
|
|
if False:
|
|
|
|
|
from protobuf import MessageType
|
|
|
|
|
from typing import Callable, Optional, Tuple, TypeVar
|
|
|
|
|
from typing_extensions import Protocol
|
|
|
|
|
|
|
|
|
|
from apps.common.seed import Keychain, MsgOut, Handler
|
|
|
|
|
from apps.common.keychain import Keychain, MsgOut, Handler
|
|
|
|
|
|
|
|
|
|
class MsgWithCoinName(MessageType, Protocol):
|
|
|
|
|
coin_name = ... # type: Optional[str]
|
|
|
|
@ -21,24 +21,21 @@ if False:
|
|
|
|
|
|
|
|
|
|
def get_namespaces_for_coin(coin: coininfo.CoinInfo):
|
|
|
|
|
namespaces = []
|
|
|
|
|
curve = coin.curve_name
|
|
|
|
|
slip44_id = coin.slip44 | HARDENED
|
|
|
|
|
|
|
|
|
|
# BIP-44 - legacy: m/44'/slip44' (/account'/change/addr)
|
|
|
|
|
namespaces.append((curve, [44 | HARDENED, slip44_id]))
|
|
|
|
|
namespaces.append([44 | HARDENED, slip44_id])
|
|
|
|
|
# BIP-45 - multisig cosigners: m/45' (/cosigner/change/addr)
|
|
|
|
|
namespaces.append((curve, [45 | HARDENED]))
|
|
|
|
|
namespaces.append([45 | HARDENED])
|
|
|
|
|
# "purpose48" - multisig as done by Electrum
|
|
|
|
|
# m/48'/slip44' (/account'/script_type'/change/addr)
|
|
|
|
|
namespaces.append((curve, [48 | HARDENED, slip44_id]))
|
|
|
|
|
|
|
|
|
|
namespaces.append(("slip21", [b"SLIP-0019"]))
|
|
|
|
|
namespaces.append([48 | HARDENED, slip44_id])
|
|
|
|
|
|
|
|
|
|
if coin.segwit:
|
|
|
|
|
# BIP-49 - p2sh segwit: m/49'/slip44' (/account'/change/addr)
|
|
|
|
|
namespaces.append((curve, [49 | HARDENED, slip44_id]))
|
|
|
|
|
namespaces.append([49 | HARDENED, slip44_id])
|
|
|
|
|
# BIP-84 - native segwit: m/84'/slip44' (/account'/change/addr)
|
|
|
|
|
namespaces.append((curve, [84 | HARDENED, slip44_id]))
|
|
|
|
|
namespaces.append([84 | HARDENED, slip44_id])
|
|
|
|
|
|
|
|
|
|
return namespaces
|
|
|
|
|
|
|
|
|
@ -55,7 +52,8 @@ async def get_keychain_for_coin(
|
|
|
|
|
raise wire.DataError("Unsupported coin type")
|
|
|
|
|
|
|
|
|
|
namespaces = get_namespaces_for_coin(coin)
|
|
|
|
|
keychain = await get_keychain(ctx, namespaces)
|
|
|
|
|
slip21_namespaces = [[b"SLIP-0019"]]
|
|
|
|
|
keychain = await get_keychain(ctx, coin.curve_name, namespaces, slip21_namespaces)
|
|
|
|
|
return keychain, coin
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|