From cf14e06aa0a6280a9fe1af3bea8188058e98ffc9 Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Fri, 5 Nov 2021 18:03:17 +0100 Subject: [PATCH] feat(core): Show address confirmation in SignMessage. --- core/.changelog.d/1586.added.1 | 1 + core/src/apps/bitcoin/sign_message.py | 13 ++++++++++--- core/src/apps/bitcoin/verify_message.py | 1 + core/src/apps/ethereum/sign_message.py | 8 ++++++-- core/src/apps/ethereum/verify_message.py | 4 +++- core/src/trezor/ui/layouts/tt/__init__.py | 18 +++++++++--------- 6 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 core/.changelog.d/1586.added.1 diff --git a/core/.changelog.d/1586.added.1 b/core/.changelog.d/1586.added.1 new file mode 100644 index 000000000..04f09d2ff --- /dev/null +++ b/core/.changelog.d/1586.added.1 @@ -0,0 +1 @@ +Show address confirmation in SignMessage. diff --git a/core/src/apps/bitcoin/sign_message.py b/core/src/apps/bitcoin/sign_message.py index edd0ad128..967a70bfd 100644 --- a/core/src/apps/bitcoin/sign_message.py +++ b/core/src/apps/bitcoin/sign_message.py @@ -7,7 +7,7 @@ from trezor.ui.layouts import confirm_signverify from apps.common.paths import validate_path from apps.common.signverify import decode_message, message_digest -from .addresses import get_address +from .addresses import address_short, get_address from .keychain import with_keychain if False: @@ -26,12 +26,19 @@ async def sign_message( script_type = msg.script_type or InputScriptType.SPENDADDRESS await validate_path(ctx, keychain, address_n) - await confirm_signverify(ctx, coin.coin_shortcut, decode_message(message)) node = keychain.derive(address_n) + address = get_address(script_type, coin, node) + await confirm_signverify( + ctx, + coin.coin_shortcut, + decode_message(message), + address_short(coin, address), + verify=False, + ) + seckey = node.private_key() - address = get_address(script_type, coin, node) digest = message_digest(coin, message) signature = secp256k1.sign(seckey, digest) diff --git a/core/src/apps/bitcoin/verify_message.py b/core/src/apps/bitcoin/verify_message.py index 660396fb0..95b439b9f 100644 --- a/core/src/apps/bitcoin/verify_message.py +++ b/core/src/apps/bitcoin/verify_message.py @@ -67,6 +67,7 @@ async def verify_message(ctx: wire.Context, msg: VerifyMessage) -> Success: coin.coin_shortcut, decode_message(message), address=address_short(coin, address), + verify=True, ) return Success(message="Message verified") diff --git a/core/src/apps/ethereum/sign_message.py b/core/src/apps/ethereum/sign_message.py index 921e7af64..84218546a 100644 --- a/core/src/apps/ethereum/sign_message.py +++ b/core/src/apps/ethereum/sign_message.py @@ -31,9 +31,13 @@ async def sign_message( ctx: Context, msg: EthereumSignMessage, keychain: Keychain ) -> EthereumMessageSignature: await paths.validate_path(ctx, keychain, msg.address_n) - await confirm_signverify(ctx, "ETH", decode_message(msg.message)) node = keychain.derive(msg.address_n) + address = address_from_bytes(node.ethereum_pubkeyhash()) + await confirm_signverify( + ctx, "ETH", decode_message(msg.message), address, verify=False + ) + signature = secp256k1.sign( node.private_key(), message_digest(msg.message), @@ -42,6 +46,6 @@ async def sign_message( ) return EthereumMessageSignature( - address=address_from_bytes(node.ethereum_pubkeyhash()), + address=address, signature=signature[1:] + bytearray([signature[0]]), ) diff --git a/core/src/apps/ethereum/verify_message.py b/core/src/apps/ethereum/verify_message.py index 26b9130f9..a04bb349a 100644 --- a/core/src/apps/ethereum/verify_message.py +++ b/core/src/apps/ethereum/verify_message.py @@ -33,6 +33,8 @@ async def verify_message(ctx: Context, msg: EthereumVerifyMessage) -> Success: address = address_from_bytes(address_bytes) - await confirm_signverify(ctx, "ETH", decode_message(msg.message), address=address) + await confirm_signverify( + ctx, "ETH", decode_message(msg.message), address=address, verify=True + ) return Success(message="Message verified") diff --git a/core/src/trezor/ui/layouts/tt/__init__.py b/core/src/trezor/ui/layouts/tt/__init__.py index 55c8d8c56..3c2d2c3c6 100644 --- a/core/src/trezor/ui/layouts/tt/__init__.py +++ b/core/src/trezor/ui/layouts/tt/__init__.py @@ -983,24 +983,24 @@ async def confirm_sign_identity( async def confirm_signverify( - ctx: wire.GenericContext, coin: str, message: str, address: str | None = None + ctx: wire.GenericContext, coin: str, message: str, address: str, verify: bool ) -> None: - if address: + if verify: header = f"Verify {coin} message" font = ui.MONO br_type = "verify_message" - - text = Text(header, new_lines=False) - text.bold("Confirm address:\n") - text.mono(*chunks_intersperse(address, MONO_ADDR_PER_LINE)) - await raise_if_cancelled( - interact(ctx, Confirm(text), br_type, ButtonRequestType.Other) - ) else: header = f"Sign {coin} message" font = ui.NORMAL br_type = "sign_message" + text = Text(header, new_lines=False) + text.bold("Confirm address:\n") + text.mono(*chunks_intersperse(address, MONO_ADDR_PER_LINE)) + await raise_if_cancelled( + interact(ctx, Confirm(text), br_type, ButtonRequestType.Other) + ) + await raise_if_cancelled( interact( ctx,