diff --git a/core/src/apps/common/signverify.py b/core/src/apps/common/signverify.py index d175d9edc..da208473c 100644 --- a/core/src/apps/common/signverify.py +++ b/core/src/apps/common/signverify.py @@ -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) diff --git a/core/src/apps/ethereum/sign_message.py b/core/src/apps/ethereum/sign_message.py index e029f6951..47c978f42 100644 --- a/core/src/apps/ethereum/sign_message.py +++ b/core/src/apps/ethereum/sign_message.py @@ -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) diff --git a/core/src/apps/ethereum/verify_message.py b/core/src/apps/ethereum/verify_message.py index b3a636434..ac503848b 100644 --- a/core/src/apps/ethereum/verify_message.py +++ b/core/src/apps/ethereum/verify_message.py @@ -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) diff --git a/core/src/apps/lisk/sign_message.py b/core/src/apps/lisk/sign_message.py index cbd1f4e07..0293a1329 100644 --- a/core/src/apps/lisk/sign_message.py +++ b/core/src/apps/lisk/sign_message.py @@ -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) diff --git a/core/src/apps/lisk/verify_message.py b/core/src/apps/lisk/verify_message.py index c02ca7549..0070b4622 100644 --- a/core/src/apps/lisk/verify_message.py +++ b/core/src/apps/lisk/verify_message.py @@ -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") diff --git a/core/src/apps/nem/transfer/layout.py b/core/src/apps/nem/transfer/layout.py index be2789a32..8146cc81a 100644 --- a/core/src/apps/nem/transfer/layout.py +++ b/core/src/apps/nem/transfer/layout.py @@ -134,9 +134,9 @@ async def _require_confirm_payload(ctx, payload: bytearray, encrypt=False): if encrypt: text = Text("Confirm payload", ui.ICON_SEND, ui.GREEN) text.bold("Encrypted:") - text.normal(*payload.split(" ")) + text.normal(payload) else: text = Text("Confirm payload", ui.ICON_SEND, ui.RED) text.bold("Unencrypted:") - text.normal(*payload.split(" ")) + text.normal(payload) await require_confirm(ctx, text, ButtonRequestType.ConfirmOutput) diff --git a/core/src/apps/wallet/sign_message.py b/core/src/apps/wallet/sign_message.py index 376d16396..fb4c508b6 100644 --- a/core/src/apps/wallet/sign_message.py +++ b/core/src/apps/wallet/sign_message.py @@ -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) diff --git a/core/src/apps/wallet/verify_message.py b/core/src/apps/wallet/verify_message.py index b06fb3308..03bd7f949 100644 --- a/core/src/apps/wallet/verify_message.py +++ b/core/src/apps/wallet/verify_message.py @@ -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) diff --git a/core/src/trezor/ui/text.py b/core/src/trezor/ui/text.py index 9349f49b2..a3bb5184d 100644 --- a/core/src/trezor/ui/text.py +++ b/core/src/trezor/ui/text.py @@ -32,7 +32,7 @@ def render_text( ) -> None: # initial rendering state INITIAL_OFFSET_X = offset_x - offset_y_max = offset_y * max_lines + offset_y_max = TEXT_HEADER_HEIGHT + (TEXT_LINE_HEIGHT * max_lines) FONTS = (ui.NORMAL, ui.BOLD, ui.MONO, ui.MONO_BOLD) @@ -47,7 +47,7 @@ def render_text( if isinstance(word, int): if word is BR or word is BR_HALF: # line break or half-line break - if offset_y >= offset_y_max: + if offset_y > offset_y_max: ui.display.text(offset_x, offset_y, "...", ui.BOLD, ui.GREY, bg) return offset_x = INITIAL_OFFSET_X diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 432b492fa..bb2aa839b 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -18,7 +18,7 @@ "test_msg_binance_get_address.py::test_binance_get_address[m-44'-714'-0'-0-0-bnb1hgm0p7khfk85zpz5v0j8": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", "test_msg_binance_get_address.py::test_binance_get_address[m-44'-714'-0'-0-1-bnb1egswqkszzfc2uq78zjsl": "c53ae271ae6158320c85dfc5ef43693def6f9606a3e733db0abb78dca392b7bb", "test_msg_binance_get_public_key.py::test_binance_get_public_key": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_binance_sign_tx.py::test_binance_sign_message[message0-expected_response0]": "07e93c712f63190a9bdb01f30c10750afd264fd2f491d9f7b89c431b9550edc8", +"test_msg_binance_sign_tx.py::test_binance_sign_message[message0-expected_response0]": "d41ee5e01a50f0f96fd7881db1750fab31cfe62c25b4eabbc092cc3daa039c7f", "test_msg_binance_sign_tx.py::test_binance_sign_message[message1-expected_response1]": "7b8bbe5ba7d7b07c95065608fb1cf9aeafcb3f9671835a6e5e5a6997ff4ff99b", "test_msg_binance_sign_tx.py::test_binance_sign_message[message2-expected_response2]": "813ad1b802dee1ace4dfa378edd840dbcea57c1a1b8eed67134def024c40a6e9", "test_msg_cardano_get_address.py::test_cardano_get_address[m-44'-1815'-0'-0-0-Ae2tdPwUPEZLCq3sFv4wVYx": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", @@ -75,7 +75,7 @@ "test_msg_eos_signtx.py-test_eos_signtx_vote_proxy": "4a831fc808e4b32fe9c8a5bed11cbbeb8b623391e9c603e61fbf352152f63fd9", "test_msg_ethereum_getaddress.py-test_ethereum_getaddress": "c2e87f78afb53c0f861ebf02bb45af22ab0d336b10ea72d5ad246d1f59162211", "test_msg_ethereum_getpublickey.py-test_ethereum_getpublickey": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_ethereum_signmessage.py-test_sign": "da471bd9779da7a17c4c4fb67ca9acedfe2a36510e3e9abc30c96cca4de24c0c", +"test_msg_ethereum_signmessage.py-test_sign": "c630df2f7260fd705d6522401024626968eec074eed08702626937c007d050ab", "test_msg_ethereum_signtx.py-test_ethereum_sanity_checks": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", "test_msg_ethereum_signtx.py-test_ethereum_signtx_data": "9454b0c1ee99d865668e6ff04c32d9e14002d0f2b29d0f45e81996f711cb8068", "test_msg_ethereum_signtx.py-test_ethereum_signtx_known_erc20_token": "2a4a3a192cb992b482d4ccb1e23e957fa1c8d04c7144a4d4329701a9f4290d2e", @@ -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": "5d1c3f207e498c1b6e874156f2dcb6dd51f8efc27fc5f8474c35abc7c32e4cfb", "test_msg_ethereum_verifymessage.py-test_verify_invalid": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", "test_msg_getaddress.py-test_bch": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", "test_msg_getaddress.py-test_bch_multisig": "806770e0656c11dc8099eeba0156a359a3733184cd23a8c0e457f550e5ae1262", @@ -155,16 +155,16 @@ "test_msg_lisk_getaddress.py-test_lisk_getaddress": "0063ceb48d21aecd1ddabdb083c8afd2042cdf577e4751fa3f57b2b80f619084", "test_msg_lisk_getpublickey.py-test_lisk_get_public_key": "e4cb8c7430c240e27a2211391ab5eba848be4f50136cf9f693142c2677a939d7", "test_msg_lisk_signmessage.py-test_sign": "c47a6ec147137c75903cff19da6607eaef5a1fc03ace1f840d2952744342b568", -"test_msg_lisk_signmessage.py-test_sign_long": "410f482dfeb3b90f52d715ca109d0ee5cd3100deae5e71701e2203777613eb0e", +"test_msg_lisk_signmessage.py-test_sign_long": "d9824857ac7d7a530631e0847eb1d71a44a8d78ea186460a03ca74ddfcf094eb", "test_msg_lisk_signtx.py-test_lisk_sign_tx_cast_votes": "1211b642511c054119d79933894f942a1d714f9cef642cf7a3f60d675f93eab7", "test_msg_lisk_signtx.py-test_lisk_sign_tx_delegate_registration": "4e68f914978c6c130c5f7e98bc63d46e98899b4194483f13db1fac22b2a5fadb", "test_msg_lisk_signtx.py-test_lisk_sign_tx_multisignature": "2d2d5747973e15bf478f3c1b879fbb7f30281b3d3a7ad9ff2b3b262de80fa33e", "test_msg_lisk_signtx.py-test_lisk_sign_tx_second_signature": "f7312ad6214786884a5649c029a589faeaf3efa72e62dd870da4c1e28c0e5143", "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_signtx.py-test_lisk_sign_tx_send_wrong_path": "08ad66a3dc5e67d9bfd592efbeea170927188f5e6d79e1faf4a9d26a96661d6a", +"test_msg_lisk_verifymessage.py-test_verify": "1854e1c346d1db91c8e35b8081e3fcfe851340a367d1207c51dac156dddc93ea", +"test_msg_lisk_verifymessage.py-test_verify_long": "1798e15f373dc321e43094b13d07d6bbb8ad532c31f425351433f6571d61c289", "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", @@ -182,7 +182,7 @@ "test_msg_nem_signtx_multisig.py-test_nem_signtx_multisig_signer": "64eeea8ee5f838bad0cd15f7e446952c614969b0c13d7f8b18f95f74147c5991", "test_msg_nem_signtx_others.py-test_nem_signtx_importance_transfer": "eaa237fd2c2e99da0b719f9dcd1c32863c22f3d82761e4f46559961cdc109980", "test_msg_nem_signtx_others.py-test_nem_signtx_provision_namespace": "399e3b9cdd889ffd25a59505d2da8822b3e7775f2a9f6031cdd79c4720dbe393", -"test_msg_nem_signtx_transfers.py-test_nem_signtx_encrypted_payload": "ccbe72f47bd85de463cf537c08fe1f9314e25a0e1cb4b915ddb0084fc8de40b9", +"test_msg_nem_signtx_transfers.py-test_nem_signtx_encrypted_payload": "a1b05b9796d6509f7ee8b2fe088ac85cabf15f40535fe46b74c6c0b35851bbe6", "test_msg_nem_signtx_transfers.py-test_nem_signtx_known_mosaic": "141da3168cd042aef5bd2fb62b52ecbca3a2ec27302f10a3a0fc98bae6d9c7da", "test_msg_nem_signtx_transfers.py-test_nem_signtx_known_mosaic_with_levy": "0c05c1946ff84e634d391b8cb4adc9fe92c65810eb9a2b3dfb6f4f71a84c08b9", "test_msg_nem_signtx_transfers.py-test_nem_signtx_multiple_mosaics": "e3fb11c280a9ff5121d6158f156758cc551dd7708b1c6fb3ce92ab3cffe2c184", @@ -240,21 +240,21 @@ "test_msg_signmessage.py-test_sign": "c37aec5647a983219a57a74797247505dd08e98408964207b1b34df904d6797c", "test_msg_signmessage.py-test_sign_bch": "c37aec5647a983219a57a74797247505dd08e98408964207b1b34df904d6797c", "test_msg_signmessage.py-test_sign_grs": "9a21b2633749b87174fb666144641f4563d58aaec5c5694e1d1eac3ac993831d", -"test_msg_signmessage.py-test_sign_long": "3593ee0fdda71eebc4ed345a14e69b211f786723c30c9f153bccdcd621b40c25", +"test_msg_signmessage.py-test_sign_long": "7576249e9bcba7937a489cf1f0c7e063026c0fcd008a98b105a96b68bb989083", "test_msg_signmessage.py-test_sign_testnet": "c37aec5647a983219a57a74797247505dd08e98408964207b1b34df904d6797c", "test_msg_signmessage.py-test_sign_utf": "48e01e6c84af9960581e95a60669f97eebfb8ebe43daac8f958062d77394c569", -"test_msg_signmessage_decred.py-test_sign_long": "760dd838580022cdbdb5b4b84506448cfeed2f316b68fb6669b382ad5271870e", +"test_msg_signmessage_decred.py-test_sign_long": "50da7b603a754324bc9cb364e3216656a7cc3906ca807595723b03653231b1bd", "test_msg_signmessage_decred.py-test_sign_mainnet": "afced22a35654f96108611b53bde65e8a11cc8ab258a95012da722c818c0a2d2", "test_msg_signmessage_decred.py-test_sign_testnet": "afced22a35654f96108611b53bde65e8a11cc8ab258a95012da722c818c0a2d2", "test_msg_signmessage_decred.py-test_sign_utf": "068dc608b061f688875c8e0ce611d1e3e9ae269a0c9e3440374fdb1125413df8", "test_msg_signmessage_segwit.py-test_sign": "c37aec5647a983219a57a74797247505dd08e98408964207b1b34df904d6797c", "test_msg_signmessage_segwit.py-test_sign_grs": "9a21b2633749b87174fb666144641f4563d58aaec5c5694e1d1eac3ac993831d", -"test_msg_signmessage_segwit.py-test_sign_long": "3593ee0fdda71eebc4ed345a14e69b211f786723c30c9f153bccdcd621b40c25", +"test_msg_signmessage_segwit.py-test_sign_long": "7576249e9bcba7937a489cf1f0c7e063026c0fcd008a98b105a96b68bb989083", "test_msg_signmessage_segwit.py-test_sign_testnet": "c37aec5647a983219a57a74797247505dd08e98408964207b1b34df904d6797c", "test_msg_signmessage_segwit.py-test_sign_utf": "48e01e6c84af9960581e95a60669f97eebfb8ebe43daac8f958062d77394c569", "test_msg_signmessage_segwit_native.py-test_sign": "c37aec5647a983219a57a74797247505dd08e98408964207b1b34df904d6797c", "test_msg_signmessage_segwit_native.py-test_sign_grs": "9a21b2633749b87174fb666144641f4563d58aaec5c5694e1d1eac3ac993831d", -"test_msg_signmessage_segwit_native.py-test_sign_long": "3593ee0fdda71eebc4ed345a14e69b211f786723c30c9f153bccdcd621b40c25", +"test_msg_signmessage_segwit_native.py-test_sign_long": "7576249e9bcba7937a489cf1f0c7e063026c0fcd008a98b105a96b68bb989083", "test_msg_signmessage_segwit_native.py-test_sign_testnet": "c37aec5647a983219a57a74797247505dd08e98408964207b1b34df904d6797c", "test_msg_signmessage_segwit_native.py-test_sign_utf": "48e01e6c84af9960581e95a60669f97eebfb8ebe43daac8f958062d77394c569", "test_msg_signtx.py-test_attack_change_input_address": "7660d99de0b4580f0e2af3e0c19a0a198e385fdc26de46882152c947d939b7be", @@ -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": "45e8597d27f354d8f7f18b96f563729b247f9454c3a9496ea0e5f985232e3ef7", +"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": "84c3d161e694b656ea0472dbc77dd0d88d9772f4ffffa94c4304e3e3cb958770", +"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": "09bdef88a5a43df4ff349101adc05e7b485bb437b029031406348e1a3f6d6866", +"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",