core: unify sign/verify functions

The UI records are modified because of two changes:
- Added a coin name to the Sign/Verify screen (ETH/Lisk).
- Unified to use mono.
pull/880/head
Tomas Susanka 4 years ago
parent b317613d63
commit 744c32991f

@ -1,8 +1,11 @@
from ubinascii import hexlify
from trezor import utils
from trezor import utils, wire
from trezor.crypto.hashlib import blake256, sha256
from trezor.ui.text import Text
from apps.common.confirm import require_confirm
from apps.common.layout import split_address
from apps.wallet.sign_tx.writers import write_varint
if False:
@ -33,3 +36,24 @@ def split_message(message: bytes) -> List[str]:
m = "hex(%s)" % hexlify(message).decode()
words = [m]
return words
async def require_confirm_sign_message(
ctx: wire.Context, header: str, message: bytes
) -> None:
message = split_message(message)
text = Text(header, new_lines=False)
text.normal(*message)
await require_confirm(ctx, text)
async def require_confirm_verify_message(
ctx: wire.Context, address: str, header: str, message: bytes
) -> None:
text = Text("Confirm address", new_lines=False)
text.mono(*split_address(address))
await require_confirm(ctx, text)
text = Text(header, new_lines=False)
text.mono(*split_message(message))
await require_confirm(ctx, text)

@ -1,12 +1,10 @@
from trezor.crypto.curve import secp256k1
from trezor.crypto.hashlib import sha3_256
from trezor.messages.EthereumMessageSignature import EthereumMessageSignature
from trezor.ui.text import Text
from trezor.utils import HashWriter
from apps.common import paths
from apps.common.confirm import require_confirm
from apps.common.signverify import split_message
from apps.common.signverify import require_confirm_sign_message
from apps.ethereum import CURVE, address
@ -23,7 +21,7 @@ async def sign_message(ctx, msg, keychain):
await paths.validate_path(
ctx, address.validate_full_path, keychain, msg.address_n, CURVE
)
await require_confirm_sign_message(ctx, msg.message)
await require_confirm_sign_message(ctx, "Sign ETH message", msg.message)
node = keychain.derive(msg.address_n)
signature = secp256k1.sign(
@ -37,10 +35,3 @@ async def sign_message(ctx, msg, keychain):
sig.address = address.address_from_bytes(node.ethereum_pubkeyhash())
sig.signature = signature[1:] + bytearray([signature[0]])
return sig
async def require_confirm_sign_message(ctx, message):
message = split_message(message)
text = Text("Sign ETH message", new_lines=False)
text.normal(*message)
await require_confirm(ctx, text)

@ -2,11 +2,8 @@ from trezor import wire
from trezor.crypto.curve import secp256k1
from trezor.crypto.hashlib import sha3_256
from trezor.messages.Success import Success
from trezor.ui.text import Text
from apps.common.confirm import require_confirm
from apps.common.layout import split_address
from apps.common.signverify import split_message
from apps.common.signverify import require_confirm_verify_message
from apps.ethereum.address import address_from_bytes, bytes_from_address
from apps.ethereum.sign_message import message_digest
@ -30,16 +27,8 @@ async def verify_message(ctx, msg):
address = address_from_bytes(address_bytes)
await require_confirm_verify_message(ctx, address, msg.message)
await require_confirm_verify_message(
ctx, address, "Verify ETH message", msg.message
)
return Success(message="Message verified")
async def require_confirm_verify_message(ctx, address, message):
text = Text("Confirm address", new_lines=False)
text.mono(*split_address(address))
await require_confirm(ctx, text)
text = Text("Verify message", new_lines=False)
text.mono(*split_message(message))
await require_confirm(ctx, text)

@ -1,12 +1,10 @@
from trezor.crypto.curve import ed25519
from trezor.crypto.hashlib import sha256
from trezor.messages.LiskMessageSignature import LiskMessageSignature
from trezor.ui.text import Text
from trezor.utils import HashWriter
from apps.common import paths
from apps.common.confirm import require_confirm
from apps.common.signverify import split_message
from apps.common.signverify import require_confirm_sign_message
from apps.lisk import CURVE
from apps.lisk.helpers import validate_full_path
from apps.wallet.sign_tx.writers import write_varint
@ -24,7 +22,7 @@ def message_digest(message):
async def sign_message(ctx, msg, keychain):
await paths.validate_path(ctx, validate_full_path, keychain, msg.address_n, CURVE)
await require_confirm_sign_message(ctx, msg.message)
await require_confirm_sign_message(ctx, "Sign Lisk message", msg.message)
node = keychain.derive(msg.address_n, CURVE)
seckey = node.private_key()
@ -34,10 +32,3 @@ async def sign_message(ctx, msg, keychain):
signature = ed25519.sign(seckey, message_digest(msg.message))
return LiskMessageSignature(public_key=pubkey, signature=signature)
async def require_confirm_sign_message(ctx, message):
message = split_message(message)
text = Text("Sign Lisk message", new_lines=False)
text.normal(*message)
await require_confirm(ctx, text)

@ -5,7 +5,7 @@ from trezor.messages.Success import Success
from .helpers import get_address_from_public_key
from .sign_message import message_digest
from apps.wallet.verify_message import require_confirm_verify_message
from apps.common.signverify import require_confirm_verify_message
async def verify_message(ctx, msg):
@ -15,6 +15,8 @@ async def verify_message(ctx, msg):
raise wire.ProcessError("Invalid signature")
address = get_address_from_public_key(msg.public_key)
await require_confirm_verify_message(ctx, address, msg.message)
await require_confirm_verify_message(
ctx, address, "Verify Lisk message", msg.message
)
return Success(message="Message verified")

@ -2,12 +2,10 @@ from trezor import wire
from trezor.crypto.curve import secp256k1
from trezor.messages.InputScriptType import SPENDADDRESS, SPENDP2SHWITNESS, SPENDWITNESS
from trezor.messages.MessageSignature import MessageSignature
from trezor.ui.text import Text
from apps.common import coins
from apps.common.confirm import require_confirm
from apps.common.paths import validate_path
from apps.common.signverify import message_digest, split_message
from apps.common.signverify import message_digest, require_confirm_sign_message
from apps.wallet.sign_tx.addresses import get_address, validate_full_path
@ -18,7 +16,7 @@ async def sign_message(ctx, msg, keychain):
script_type = msg.script_type or 0
coin = coins.by_name(coin_name)
await require_confirm_sign_message(ctx, message)
await require_confirm_sign_message(ctx, "Sign message", message)
await validate_path(
ctx,
validate_full_path,
@ -47,10 +45,3 @@ async def sign_message(ctx, msg, keychain):
raise wire.ProcessError("Unsupported script type")
return MessageSignature(address=address, signature=signature)
async def require_confirm_sign_message(ctx, message):
message = split_message(message)
text = Text("Sign message", new_lines=False)
text.normal(*message)
await require_confirm(ctx, text)

@ -2,12 +2,9 @@ from trezor import wire
from trezor.crypto.curve import secp256k1
from trezor.messages.InputScriptType import SPENDADDRESS, SPENDP2SHWITNESS, SPENDWITNESS
from trezor.messages.Success import Success
from trezor.ui.text import Text
from apps.common import coins
from apps.common.confirm import require_confirm
from apps.common.layout import split_address
from apps.common.signverify import message_digest, split_message
from apps.common.signverify import message_digest, require_confirm_verify_message
from apps.wallet.sign_tx.addresses import (
address_p2wpkh,
address_p2wpkh_in_p2sh,
@ -58,16 +55,8 @@ async def verify_message(ctx, msg):
if addr != address:
raise wire.ProcessError("Invalid signature")
await require_confirm_verify_message(ctx, address_short(coin, address), message)
await require_confirm_verify_message(
ctx, address_short(coin, address), "Verify message", message
)
return Success(message="Message verified")
async def require_confirm_verify_message(ctx, address, message):
text = Text("Confirm address")
text.mono(*split_address(address))
await require_confirm(ctx, text)
text = Text("Verify message", new_lines=False)
text.normal(*split_message(message))
await require_confirm(ctx, text)

@ -101,7 +101,7 @@
"test_msg_ethereum_signtx_eip155.py::test_ethereum_signtx_eip155[vector7]": "bc91fd1543c2e2e5cd52eb8e7eceeb7bbc9958c6a4d44c3c1638942e4c7cb308",
"test_msg_ethereum_signtx_eip155.py::test_ethereum_signtx_eip155[vector8]": "bc91fd1543c2e2e5cd52eb8e7eceeb7bbc9958c6a4d44c3c1638942e4c7cb308",
"test_msg_ethereum_signtx_eip155.py::test_ethereum_signtx_eip155[vector9]": "bc91fd1543c2e2e5cd52eb8e7eceeb7bbc9958c6a4d44c3c1638942e4c7cb308",
"test_msg_ethereum_verifymessage.py-test_verify": "19e068da53c30fff93ca2ff62296ef8a758faa0f9e5067b2d69d28cc6bc9d504",
"test_msg_ethereum_verifymessage.py-test_verify": "6e22a4241a76e2ddf0027d93f0fc3b2133758b46c81e91cebd24947674e8aeba",
"test_msg_ethereum_verifymessage.py-test_verify_invalid": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586",
"test_msg_getaddress.py-test_bch": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586",
"test_msg_getaddress.py-test_bch_multisig": "806770e0656c11dc8099eeba0156a359a3733184cd23a8c0e457f550e5ae1262",
@ -163,8 +163,8 @@
"test_msg_lisk_signtx.py-test_lisk_sign_tx_send": "69b10cf641834235146af56114260c96618d223b4d38f3e262f8d976685aa396",
"test_msg_lisk_signtx.py-test_lisk_sign_tx_send_with_data": "d27a40c13d8266cb3ea5e4db01d0802f5ec6138124cbe8daaf9cd65b30fcdd5f",
"test_msg_lisk_signtx.py-test_lisk_sign_tx_send_wrong_path": "61631e80e1a04ac74fe87c90c742a2a433613637c941d200870a9e8f8fffa0a2",
"test_msg_lisk_verifymessage.py-test_verify": "5e9cf05f6ccf10f697cae9f780042db934892e1d7c68fb2f19a40319a687ea50",
"test_msg_lisk_verifymessage.py-test_verify_long": "26adab7e31f388e5b034a865f9c010d57e67fd855d44839d2f2600d8317bd98e",
"test_msg_lisk_verifymessage.py-test_verify": "1854e1c346d1db91c8e35b8081e3fcfe851340a367d1207c51dac156dddc93ea",
"test_msg_lisk_verifymessage.py-test_verify_long": "32da2aa586d14093de6b414fbb58227b3e1665fefdb0184ea3aa5d036ac415b1",
"test_msg_loaddevice.py-test_load_device_1": "114d7e07b00f8a9fc60e0888ce3e39f79805c577b99f4d25967fcf7cf6367664",
"test_msg_loaddevice.py-test_load_device_2": "9947760ad56ea110b6f3937883c37701c866dd57b6c342806bd8e8b3aa889887",
"test_msg_loaddevice.py-test_load_device_slip39_advanced": "1c6db0d592b1d22b3c9fce3ddab8a9fd138f11d83e5d4e64431a02bf4ffed605",
@ -346,21 +346,21 @@
"test_msg_tezos_sign_tx.py-test_tezos_smart_contract_delegation": "23a855ba8893b2d58c07ef3013995310e5e97eb963acc535edc058cb092154e5",
"test_msg_tezos_sign_tx.py-test_tezos_smart_contract_transfer": "ef560be97a67e1cf071a7917636400892fc8206253313c224d1c4a7fffc5b411",
"test_msg_tezos_sign_tx.py-test_tezos_smart_contract_transfer_to_contract": "d0be5617db780e6c65c32b46d3e198a1f2db1f60886a1b3d3d502f4d1d0b7ba9",
"test_msg_verifymessage.py-test_message_grs": "e179e2c6ddc1c8340d4be6c5d12a02c7b184862d9b7d105afe17381382540766",
"test_msg_verifymessage.py-test_message_long": "4fd2cd0c2300cbc750419b351bdcb46312866e8d5ef1b70d0ad86d63281237ef",
"test_msg_verifymessage.py-test_message_testnet": "31294deeffe9ee61b4162493f15d563eae018faac40e4e41fb4d54afb7652a50",
"test_msg_verifymessage.py-test_message_verify": "158f81f405d6ea30ffd17eea8fd757cef4d03ba2b349d8327d5935e8fad9643c",
"test_msg_verifymessage.py-test_message_verify_bcash": "f07bb4c6d1b13579f38c264a3cbe3d820c58a958f36f3d4f9d54b6438c6f0e52",
"test_msg_verifymessage.py-test_verify_bitcoind": "33ee230d1685ee9fa58120949385a5472a25b11ebb00231960f53f5cac878479",
"test_msg_verifymessage.py-test_verify_utf": "d199af260049c8a4708f55d7e07613655100d49e14e3d78f510fa8c1077b1533",
"test_msg_verifymessage_segwit.py-test_message_long": "7aeb59ff336b2ac8453ddd539a06dff2ce51eb934d9ce961a1da087e0a44c39a",
"test_msg_verifymessage_segwit.py-test_message_testnet": "4d8f19b435923996debea19a179fc6ab897469355673de494198a18357b6e937",
"test_msg_verifymessage_segwit.py-test_message_verify": "f7ef6838ce8f8d09e50236c57f146d77f2b34e490734d8f632d552fbcf6fef3f",
"test_msg_verifymessage_segwit.py-test_verify_utf": "539e19cbb17a77c3423caeec0cfcf6e28666d2be17c65b1775bb51ac62894e8a",
"test_msg_verifymessage_segwit_native.py-test_message_long": "fe05eb6cbaed0ba751c2be87f2fe82e00a8dd5b3b6545b345f7b842c51e93236",
"test_msg_verifymessage_segwit_native.py-test_message_testnet": "9bda85a70f5ddf8f8ad78bb6a8d2b7dfe11d18daa4c14013adb2a4c0a4473c54",
"test_msg_verifymessage_segwit_native.py-test_message_verify": "61f9643c031ed87a2c3a1d87d876d63e64850ec362f091f181e2aa2b1d67f6dd",
"test_msg_verifymessage_segwit_native.py-test_verify_utf": "c71743bbc5d1bd587800222065f9f2a77b375e341c50ab4e175fb9678c866d38",
"test_msg_verifymessage.py-test_message_grs": "507bd5412292355b4b0c1cb684eb2305ab4c0016f2ca297b8c1359120fbe2ae1",
"test_msg_verifymessage.py-test_message_long": "0a213804b26546a08b43a421e6867c92c03faefa41e5b5f7b5d56266ff7c7511",
"test_msg_verifymessage.py-test_message_testnet": "7295f8f7ca84c069a0e000766fd685b1b2bafe3f2a60f8b102796d0af79ed67b",
"test_msg_verifymessage.py-test_message_verify": "a357a0874e3ae40c0e385aa5ef365a1d20a34d51feb7ea1691c0d86c6f9bf242",
"test_msg_verifymessage.py-test_message_verify_bcash": "e88b6bd86172f87662ed401b9847f7ec4a31ee67e87df584f449da89d0b7e646",
"test_msg_verifymessage.py-test_verify_bitcoind": "ad8b1680392d4348db9201653a2c0fce2b67aa54e07139d5127ba18bed21e23b",
"test_msg_verifymessage.py-test_verify_utf": "6a9fe6de0ceed6aba76a8c24b8ace541713af71e652521d42bd444c95c8dbd66",
"test_msg_verifymessage_segwit.py-test_message_long": "3a07c136e206884eab4e33224df5ae00a20f382255045fd26f7da9eca33022c2",
"test_msg_verifymessage_segwit.py-test_message_testnet": "2df34d0457f537023d513de468b4ccc7fbfcd70e9f980e4e1ec30d3c63157f36",
"test_msg_verifymessage_segwit.py-test_message_verify": "9af19581b27db5dfed6250f0a245be98428ac98149b3bbd93409756becee07e5",
"test_msg_verifymessage_segwit.py-test_verify_utf": "91d3f97f98780d7edd7526bf91bae0a56cf8003a31ab1baf424cec66be9e5735",
"test_msg_verifymessage_segwit_native.py-test_message_long": "22f6d25712f77b7ffe30bca6a7c649a754bd4b04af1c924f720b6c4ccea8d7a3",
"test_msg_verifymessage_segwit_native.py-test_message_testnet": "113ad2d6389810b542e5ae5aba5d0de2aa52661e321c3f1d9f45cc91637b3c1d",
"test_msg_verifymessage_segwit_native.py-test_message_verify": "b206b7a79c40525efa765718376d5f369caf424e11e93dd0eab97861dc1f4f8d",
"test_msg_verifymessage_segwit_native.py-test_verify_utf": "a8011d120ec7d776ba0a73318357b4be59f461aa927386ab13b3beff7c95c21f",
"test_msg_webauthn.py-test_add_remove": "820eac5b32863356b967dc70b0afbc4b9faa9c39ec40d55923f4fb07bd5f3707",
"test_msg_wipedevice.py-test_wipe_device": "f1ce844040c9f7597323d58e987f568c1de69fe6da75d5fc59b7df0e5d05c881",
"test_multisig.py-test_15_of_15": "ff567aca97451b865db6b518014fa3bd2da0fa317493f28baca50a694de23acb",

Loading…
Cancel
Save