1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-09 16:18:10 +00:00

refactor(core): turn show_address, show_pubkey, show_xpub into layouts

This commit is contained in:
Martin Milata 2021-01-08 01:39:23 +01:00
parent 03699f5639
commit 391602ae99
17 changed files with 79 additions and 101 deletions

View File

@ -1,9 +1,10 @@
from trezor.messages.BinanceAddress import BinanceAddress from trezor.messages.BinanceAddress import BinanceAddress
from trezor.messages.BinanceGetAddress import BinanceGetAddress from trezor.messages.BinanceGetAddress import BinanceGetAddress
from trezor.ui.layouts import show_address
from apps.common import paths from apps.common import paths
from apps.common.keychain import Keychain, auto_keychain from apps.common.keychain import Keychain, auto_keychain
from apps.common.layout import address_n_to_str, show_address, show_qr from apps.common.layout import address_n_to_str
from .helpers import address_from_public_key from .helpers import address_from_public_key
@ -19,10 +20,6 @@ async def get_address(ctx, msg: BinanceGetAddress, keychain: Keychain):
address = address_from_public_key(pubkey, HRP) address = address_from_public_key(pubkey, HRP)
if msg.show_display: if msg.show_display:
desc = address_n_to_str(msg.address_n) desc = address_n_to_str(msg.address_n)
while True: await show_address(ctx, address=address, address_qr=address, desc=desc)
if await show_address(ctx, address, desc=desc):
break
if await show_qr(ctx, address, desc=desc):
break
return BinanceAddress(address=address) return BinanceAddress(address=address)

View File

@ -1,7 +1,10 @@
from ubinascii import hexlify
from trezor.messages.BinanceGetPublicKey import BinanceGetPublicKey from trezor.messages.BinanceGetPublicKey import BinanceGetPublicKey
from trezor.messages.BinancePublicKey import BinancePublicKey from trezor.messages.BinancePublicKey import BinancePublicKey
from trezor.ui.layouts import require, show_pubkey
from apps.common import layout, paths from apps.common import paths
from apps.common.keychain import Keychain, auto_keychain from apps.common.keychain import Keychain, auto_keychain
@ -12,6 +15,6 @@ async def get_public_key(ctx, msg: BinanceGetPublicKey, keychain: Keychain):
pubkey = node.public_key() pubkey = node.public_key()
if msg.show_display: if msg.show_display:
await layout.show_pubkey(ctx, pubkey) await require(show_pubkey(ctx, hexlify(pubkey).decode()))
return BinancePublicKey(public_key=pubkey) return BinancePublicKey(public_key=pubkey)

View File

@ -2,8 +2,9 @@ from trezor import wire
from trezor.messages import InputScriptType from trezor.messages import InputScriptType
from trezor.messages.HDNodeType import HDNodeType from trezor.messages.HDNodeType import HDNodeType
from trezor.messages.PublicKey import PublicKey from trezor.messages.PublicKey import PublicKey
from trezor.ui.layouts import require, show_xpub
from apps.common import coins, layout, paths from apps.common import coins, paths
from apps.common.keychain import get_keychain from apps.common.keychain import get_keychain
if False: if False:
@ -58,7 +59,7 @@ async def get_public_key(ctx: wire.Context, msg: GetPublicKey) -> PublicKey:
) )
if msg.show_display: if msg.show_display:
await layout.show_xpub(ctx, node_xpub, "XPUB", "Cancel") await require(show_xpub(ctx, node_xpub, "XPUB", "Cancel"))
return PublicKey( return PublicKey(
node=node_type, node=node_type,

View File

@ -3,8 +3,9 @@ from ubinascii import hexlify
from trezor import log, wire from trezor import log, wire
from trezor.messages.CardanoPublicKey import CardanoPublicKey from trezor.messages.CardanoPublicKey import CardanoPublicKey
from trezor.messages.HDNodeType import HDNodeType from trezor.messages.HDNodeType import HDNodeType
from trezor.ui.layouts import require, show_pubkey
from apps.common import layout, paths from apps.common import paths
from apps.common.seed import remove_ed25519_prefix from apps.common.seed import remove_ed25519_prefix
from . import seed from . import seed
@ -35,7 +36,7 @@ async def get_public_key(
raise wire.ProcessError("Deriving public key failed") raise wire.ProcessError("Deriving public key failed")
if msg.show_display: if msg.show_display:
await layout.show_pubkey(ctx, key.node.public_key) await require(show_pubkey(ctx, hexlify(key.node.public_key).decode()))
return key return key

View File

@ -1,5 +1,4 @@
from micropython import const from micropython import const
from ubinascii import hexlify
from trezor import ui from trezor import ui
from trezor.messages import ButtonRequestType from trezor.messages import ButtonRequestType
@ -11,34 +10,13 @@ from trezor.ui.qr import Qr
from trezor.utils import chunks from trezor.utils import chunks
from apps.common import HARDENED from apps.common import HARDENED
from apps.common.confirm import confirm, require_confirm from apps.common.confirm import confirm
if False: if False:
from typing import Iterable, Iterator, List, Union from typing import Iterable, Iterator, List, Union
from trezor import wire from trezor import wire
async def show_address(
ctx: wire.Context,
address: str,
desc: str = "Confirm address",
cancel: str = "QR",
network: str = None,
) -> bool:
text = Text(desc, ui.ICON_RECEIVE, ui.GREEN)
if network is not None:
text.normal("%s network" % network)
text.mono(*split_address(address))
return await confirm(
ctx,
text,
code=ButtonRequestType.Address,
cancel=cancel,
cancel_style=ButtonDefault,
)
async def show_qr( async def show_qr(
ctx: wire.Context, ctx: wire.Context,
address: str, address: str,
@ -62,13 +40,6 @@ async def show_qr(
) )
async def show_pubkey(ctx: wire.Context, pubkey: bytes) -> None:
lines = chunks(hexlify(pubkey).decode(), 18)
text = Text("Confirm public key", ui.ICON_RECEIVE, ui.GREEN)
text.mono(*lines)
await require_confirm(ctx, text, ButtonRequestType.PublicKey)
def split_address(address: str) -> Iterator[str]: def split_address(address: str) -> Iterator[str]:
return chunks(address, 17) return chunks(address, 17)

View File

@ -1,9 +1,10 @@
from trezor.crypto.curve import secp256k1 from trezor.crypto.curve import secp256k1
from trezor.crypto.hashlib import sha3_256 from trezor.crypto.hashlib import sha3_256
from trezor.messages.EthereumAddress import EthereumAddress from trezor.messages.EthereumAddress import EthereumAddress
from trezor.ui.layouts import show_address
from apps.common import paths from apps.common import paths
from apps.common.layout import address_n_to_str, show_address, show_qr from apps.common.layout import address_n_to_str
from . import networks from . import networks
from .address import address_from_bytes from .address import address_from_bytes
@ -27,10 +28,6 @@ async def get_address(ctx, msg, keychain):
if msg.show_display: if msg.show_display:
desc = address_n_to_str(msg.address_n) desc = address_n_to_str(msg.address_n)
while True: await show_address(ctx, address=address, address_qr=address, desc=desc)
if await show_address(ctx, address, desc=desc):
break
if await show_qr(ctx, address, desc=desc):
break
return EthereumAddress(address=address) return EthereumAddress(address=address)

View File

@ -1,7 +1,10 @@
from ubinascii import hexlify
from trezor.messages.EthereumPublicKey import EthereumPublicKey from trezor.messages.EthereumPublicKey import EthereumPublicKey
from trezor.messages.HDNodeType import HDNodeType from trezor.messages.HDNodeType import HDNodeType
from trezor.ui.layouts import require, show_pubkey
from apps.common import coins, layout, paths from apps.common import coins, paths
from .keychain import with_keychain_from_path from .keychain import with_keychain_from_path
@ -27,6 +30,6 @@ async def get_public_key(ctx, msg, keychain):
) )
if msg.show_display: if msg.show_display:
await layout.show_pubkey(ctx, pubkey) await require(show_pubkey(ctx, hexlify(pubkey).decode()))
return EthereumPublicKey(node=node_type, xpub=node_xpub) return EthereumPublicKey(node=node_type, xpub=node_xpub)

View File

@ -1,8 +1,9 @@
from trezor.messages.LiskAddress import LiskAddress from trezor.messages.LiskAddress import LiskAddress
from trezor.ui.layouts import show_address
from apps.common import paths from apps.common import paths
from apps.common.keychain import auto_keychain from apps.common.keychain import auto_keychain
from apps.common.layout import address_n_to_str, show_address, show_qr from apps.common.layout import address_n_to_str
from .helpers import get_address_from_public_key from .helpers import get_address_from_public_key
@ -18,10 +19,6 @@ async def get_address(ctx, msg, keychain):
if msg.show_display: if msg.show_display:
desc = address_n_to_str(msg.address_n) desc = address_n_to_str(msg.address_n)
while True: await show_address(ctx, address=address, address_qr=address, desc=desc)
if await show_address(ctx, address, desc=desc):
break
if await show_qr(ctx, address, desc=desc):
break
return LiskAddress(address=address) return LiskAddress(address=address)

View File

@ -1,6 +1,9 @@
from trezor.messages.LiskPublicKey import LiskPublicKey from ubinascii import hexlify
from apps.common import layout, paths from trezor.messages.LiskPublicKey import LiskPublicKey
from trezor.ui.layouts import require, show_pubkey
from apps.common import paths
from apps.common.keychain import auto_keychain from apps.common.keychain import auto_keychain
@ -13,6 +16,6 @@ async def get_public_key(ctx, msg, keychain):
pubkey = pubkey[1:] # skip ed25519 pubkey marker pubkey = pubkey[1:] # skip ed25519 pubkey marker
if msg.show_display: if msg.show_display:
await layout.show_pubkey(ctx, pubkey) await require(show_pubkey(ctx, hexlify(pubkey).decode()))
return LiskPublicKey(public_key=pubkey) return LiskPublicKey(public_key=pubkey)

View File

@ -1,11 +1,14 @@
from ubinascii import hexlify
from trezor import ui from trezor import ui
from trezor.messages import ButtonRequestType from trezor.messages import ButtonRequestType
from trezor.strings import format_amount from trezor.strings import format_amount
from trezor.ui.components.tt.text import Text from trezor.ui.components.tt.text import Text
from trezor.ui.layouts import require, show_pubkey
from trezor.utils import chunks from trezor.utils import chunks
from apps.common.confirm import require_confirm, require_hold_to_confirm from apps.common.confirm import require_confirm, require_hold_to_confirm
from apps.common.layout import show_pubkey, split_address from apps.common.layout import split_address
from .helpers import get_vote_tx_text from .helpers import get_vote_tx_text
@ -33,7 +36,7 @@ async def require_confirm_vote_tx(ctx, votes):
async def require_confirm_public_key(ctx, public_key): async def require_confirm_public_key(ctx, public_key):
return await show_pubkey(ctx, public_key) return await require(show_pubkey(ctx, hexlify(public_key).decode()))
async def require_confirm_multisig(ctx, multisignature): async def require_confirm_multisig(ctx, multisignature):

View File

@ -1,7 +1,8 @@
from trezor.messages.NEMAddress import NEMAddress from trezor.messages.NEMAddress import NEMAddress
from trezor.ui.layouts import show_address
from apps.common.keychain import with_slip44_keychain from apps.common.keychain import with_slip44_keychain
from apps.common.layout import address_n_to_str, show_address, show_qr from apps.common.layout import address_n_to_str
from apps.common.paths import validate_path from apps.common.paths import validate_path
from . import CURVE, PATTERNS, SLIP44_ID from . import CURVE, PATTERNS, SLIP44_ID
@ -21,12 +22,12 @@ async def get_address(ctx, msg, keychain):
if msg.show_display: if msg.show_display:
desc = address_n_to_str(msg.address_n) desc = address_n_to_str(msg.address_n)
while True: await show_address(
if await show_address( ctx,
ctx, address, desc=desc, network=get_network_str(network) address=address,
): address_qr=address.upper(),
break desc=desc,
if await show_qr(ctx, address.upper(), desc=desc): network=get_network_str(network),
break )
return NEMAddress(address=address) return NEMAddress(address=address)

View File

@ -11,7 +11,8 @@ from trezor.messages import (
from trezor.ui.components.tt.scroll import Paginated from trezor.ui.components.tt.scroll import Paginated
from trezor.ui.components.tt.text import Text from trezor.ui.components.tt.text import Text
from apps.common.layout import require_confirm, split_address from apps.common.confirm import require_confirm
from apps.common.layout import split_address
from ..layout import ( from ..layout import (
require_confirm_content, require_confirm_content,

View File

@ -1,9 +1,10 @@
from trezor.messages.RippleAddress import RippleAddress from trezor.messages.RippleAddress import RippleAddress
from trezor.messages.RippleGetAddress import RippleGetAddress from trezor.messages.RippleGetAddress import RippleGetAddress
from trezor.ui.layouts import show_address
from apps.common import paths from apps.common import paths
from apps.common.keychain import auto_keychain from apps.common.keychain import auto_keychain
from apps.common.layout import address_n_to_str, show_address, show_qr from apps.common.layout import address_n_to_str
from .helpers import address_from_public_key from .helpers import address_from_public_key
@ -18,10 +19,6 @@ async def get_address(ctx, msg: RippleGetAddress, keychain):
if msg.show_display: if msg.show_display:
desc = address_n_to_str(msg.address_n) desc = address_n_to_str(msg.address_n)
while True: await show_address(ctx, address=address, address_qr=address, desc=desc)
if await show_address(ctx, address, desc=desc):
break
if await show_qr(ctx, address, desc=desc):
break
return RippleAddress(address=address) return RippleAddress(address=address)

View File

@ -1,9 +1,10 @@
from trezor.messages.StellarAddress import StellarAddress from trezor.messages.StellarAddress import StellarAddress
from trezor.messages.StellarGetAddress import StellarGetAddress from trezor.messages.StellarGetAddress import StellarGetAddress
from trezor.ui.layouts import show_address
from apps.common import paths, seed from apps.common import paths, seed
from apps.common.keychain import auto_keychain from apps.common.keychain import auto_keychain
from apps.common.layout import address_n_to_str, show_address, show_qr from apps.common.layout import address_n_to_str
from . import helpers from . import helpers
@ -18,10 +19,6 @@ async def get_address(ctx, msg: StellarGetAddress, keychain):
if msg.show_display: if msg.show_display:
desc = address_n_to_str(msg.address_n) desc = address_n_to_str(msg.address_n)
while True: await show_address(ctx, address=address, address_qr=address.upper(), desc=desc)
if await show_address(ctx, address, desc=desc):
break
if await show_qr(ctx, address.upper(), desc=desc):
break
return StellarAddress(address=address) return StellarAddress(address=address)

View File

@ -1,9 +1,10 @@
from trezor.crypto import hashlib from trezor.crypto import hashlib
from trezor.messages.TezosAddress import TezosAddress from trezor.messages.TezosAddress import TezosAddress
from trezor.ui.layouts import show_address
from apps.common import paths, seed from apps.common import paths, seed
from apps.common.keychain import with_slip44_keychain from apps.common.keychain import with_slip44_keychain
from apps.common.layout import address_n_to_str, show_address, show_qr from apps.common.layout import address_n_to_str
from . import CURVE, PATTERNS, SLIP44_ID, helpers from . import CURVE, PATTERNS, SLIP44_ID, helpers
@ -22,10 +23,6 @@ async def get_address(ctx, msg, keychain):
if msg.show_display: if msg.show_display:
desc = address_n_to_str(msg.address_n) desc = address_n_to_str(msg.address_n)
while True: await show_address(ctx, address=address, address_qr=address, desc=desc)
if await show_address(ctx, address, desc=desc):
break
if await show_qr(ctx, address, desc=desc):
break
return TezosAddress(address=address) return TezosAddress(address=address)

View File

@ -1,11 +1,7 @@
from trezor import ui
from trezor.messages import ButtonRequestType
from trezor.messages.TezosPublicKey import TezosPublicKey from trezor.messages.TezosPublicKey import TezosPublicKey
from trezor.ui.components.tt.text import Text from trezor.ui.layouts import require, show_pubkey
from trezor.utils import chunks
from apps.common import paths, seed from apps.common import paths, seed
from apps.common.confirm import require_confirm
from apps.common.keychain import with_slip44_keychain from apps.common.keychain import with_slip44_keychain
from . import CURVE, PATTERNS, SLIP44_ID, helpers from . import CURVE, PATTERNS, SLIP44_ID, helpers
@ -20,13 +16,6 @@ async def get_public_key(ctx, msg, keychain):
pk_prefixed = helpers.base58_encode_check(pk, prefix=helpers.TEZOS_PUBLICKEY_PREFIX) pk_prefixed = helpers.base58_encode_check(pk, prefix=helpers.TEZOS_PUBLICKEY_PREFIX)
if msg.show_display: if msg.show_display:
await _show_tezos_pubkey(ctx, pk_prefixed) await require(show_pubkey(ctx, pk_prefixed))
return TezosPublicKey(public_key=pk_prefixed) return TezosPublicKey(public_key=pk_prefixed)
async def _show_tezos_pubkey(ctx, pubkey):
lines = chunks(pubkey, 18)
text = Text("Confirm public key", ui.ICON_RECEIVE, ui.GREEN)
text.mono(*lines)
await require_confirm(ctx, text, code=ButtonRequestType.PublicKey)

View File

@ -39,7 +39,9 @@ __all__ = (
"confirm_backup", "confirm_backup",
"confirm_path_warning", "confirm_path_warning",
"show_address", "show_address",
"show_pubkey",
"show_success", "show_success",
"show_xpub",
"show_warning", "show_warning",
"confirm_output", "confirm_output",
"confirm_hex", "confirm_hex",
@ -199,6 +201,14 @@ def _show_xpub(xpub: str, desc: str, cancel: str) -> Paginated:
return content return content
def show_xpub(
ctx: wire.GenericContext, xpub: str, desc: str, cancel: str
) -> LayoutType:
return interact(
ctx, _show_xpub(xpub, desc, cancel), "show_xpub", ButtonRequestType.PublicKey
)
async def show_address( async def show_address(
ctx: wire.GenericContext, ctx: wire.GenericContext,
address: str, address: str,
@ -252,6 +262,16 @@ async def show_address(
return return
# FIXME: this is basically same as confirm_hex
# TODO: pagination for long keys
def show_pubkey(
ctx: wire.Context, pubkey: str, title: str = "Confirm public key"
) -> LayoutType:
text = Text(title, ui.ICON_RECEIVE, ui.GREEN)
text.mono(*_hex_lines(pubkey))
return interact(ctx, Confirm(text), "show_pubkey", ButtonRequestType.PublicKey)
def show_warning( def show_warning(
ctx: wire.GenericContext, ctx: wire.GenericContext,
br_type: str, br_type: str,