From a680e51374f38dbbfc75c04d031e2b946f1d11b5 Mon Sep 17 00:00:00 2001 From: Coline Date: Thu, 30 Jun 2022 13:43:59 +0200 Subject: [PATCH] feat: eip191 tests --- .../speculos/ethereum_client/ethereum_cmd.py | 75 ++---- .../ethereum_client/ethereum_cmd_builder.py | 37 ++- tests/speculos/ethereum_client/transaction.py | 17 ++ .../nanos/personal_sign_metamask/00000.png | Bin 0 -> 368 bytes .../nanos/personal_sign_metamask/00001.png | Bin 0 -> 463 bytes .../nanos/personal_sign_metamask/00002.png | Bin 0 -> 423 bytes .../nanos/personal_sign_metamask/00003.png | Bin 0 -> 407 bytes .../nanos/personal_sign_non_ascii/00000.png | Bin 0 -> 368 bytes .../nanos/personal_sign_non_ascii/00001.png | Bin 0 -> 492 bytes .../nanos/personal_sign_non_ascii/00002.png | Bin 0 -> 489 bytes .../nanos/personal_sign_non_ascii/00003.png | Bin 0 -> 474 bytes .../nanos/personal_sign_non_ascii/00004.png | Bin 0 -> 490 bytes .../nanos/personal_sign_non_ascii/00005.png | Bin 0 -> 407 bytes .../nanos/personal_sign_opensea/00000.png | Bin 0 -> 368 bytes .../nanos/personal_sign_opensea/00001.png | Bin 0 -> 475 bytes .../nanos/personal_sign_opensea/00002.png | Bin 0 -> 471 bytes .../nanos/personal_sign_opensea/00003.png | Bin 0 -> 465 bytes .../nanos/personal_sign_opensea/00004.png | Bin 0 -> 449 bytes .../nanos/personal_sign_opensea/00005.png | Bin 0 -> 466 bytes .../nanos/personal_sign_opensea/00006.png | Bin 0 -> 407 bytes .../nanos/personal_sign_reject/00000.png | Bin 0 -> 368 bytes .../nanos/personal_sign_reject/00001.png | Bin 0 -> 423 bytes .../nanos/personal_sign_reject/00002.png | Bin 0 -> 407 bytes .../nanos/personal_sign_reject/00003.png | Bin 0 -> 449 bytes .../nanos/personal_sign_reject/00004.png | Bin 0 -> 449 bytes .../nanox/personal_sign_metamask/00000.png | Bin 0 -> 415 bytes .../nanox/personal_sign_metamask/00001.png | Bin 0 -> 624 bytes .../nanox/personal_sign_metamask/00002.png | Bin 0 -> 463 bytes .../nanox/personal_sign_non_ascii/00000.png | Bin 0 -> 415 bytes .../nanox/personal_sign_non_ascii/00001.png | Bin 0 -> 882 bytes .../nanox/personal_sign_non_ascii/00002.png | Bin 0 -> 570 bytes .../nanox/personal_sign_non_ascii/00003.png | Bin 0 -> 463 bytes .../nanox/personal_sign_opensea/00000.png | Bin 0 -> 415 bytes .../nanox/personal_sign_opensea/00001.png | Bin 0 -> 853 bytes .../nanox/personal_sign_opensea/00002.png | Bin 0 -> 852 bytes .../nanox/personal_sign_opensea/00003.png | Bin 0 -> 837 bytes .../nanox/personal_sign_opensea/00004.png | Bin 0 -> 814 bytes .../nanox/personal_sign_opensea/00005.png | Bin 0 -> 522 bytes .../nanox/personal_sign_opensea/00006.png | Bin 0 -> 463 bytes .../nanox/personal_sign_reject/00000.png | Bin 0 -> 415 bytes .../nanox/personal_sign_reject/00001.png | Bin 0 -> 503 bytes .../nanox/personal_sign_reject/00002.png | Bin 0 -> 463 bytes .../nanox/personal_sign_reject/00003.png | Bin 0 -> 499 bytes tests/speculos/test_eip191.py | 223 ++++++++++++++++++ 44 files changed, 301 insertions(+), 51 deletions(-) create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00000.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00001.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00002.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00003.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00000.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00001.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00002.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00003.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00004.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00005.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00000.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00001.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00002.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00003.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00004.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00005.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00006.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00001.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00002.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00003.png create mode 100644 tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00004.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00000.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00001.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00002.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00000.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00001.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00002.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00003.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00000.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00001.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00002.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00003.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00004.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00005.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00006.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00000.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00002.png create mode 100644 tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00003.png create mode 100644 tests/speculos/test_eip191.py diff --git a/tests/speculos/ethereum_client/ethereum_cmd.py b/tests/speculos/ethereum_client/ethereum_cmd.py index 2bbb133..a9949b2 100644 --- a/tests/speculos/ethereum_client/ethereum_cmd.py +++ b/tests/speculos/ethereum_client/ethereum_cmd.py @@ -1,7 +1,5 @@ from ast import List from contextlib import contextmanager -from ctypes.wintypes import INT -from re import A import struct from typing import Tuple @@ -9,8 +7,9 @@ from speculos.client import SpeculosClient, ApduException from ethereum_client.ethereum_cmd_builder import EthereumCommandBuilder, InsType from ethereum_client.exception import DeviceException -from ethereum_client.transaction import Transaction +from ethereum_client.transaction import PersonalTransaction, Transaction from ethereum_client.plugin import Plugin +from ethereum_client.utils import parse_sign_response class EthereumCommand: @@ -122,47 +121,8 @@ class EthereumCommand: except ApduException as error: raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_TX) - - # Not use @contextmanager - def test_zemu_hard_apdu_sign(self) -> Tuple[int, int, int]: - sign: bytes = b'\xe0\x04\x00\x00\x80\x05\x80\x00\x00\x2c\x80\x00\x00\x3c\x80\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x69\x46\x85\x06\xa8\xb1\x5e\x00\x82\xeb\xeb\x94\x6b\x17\x54\x74\xe8\x90\x94\xc4\x4d\xa9\x8b\x95\x4e\xed\xea\xc4\x95\x27\x1d\x0f\x80\xb8\x44\x09\x5e\xa7\xb3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x27\x68\xde\x32\xb0\xb8\x0b\x7a\x34\x54\xc0\x6b\xda\xc9\x4a\x69\xdd\xc7\xa9\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x80\x80' - simple_eth: bytes = b'\xe0\x04\x00\x00\x41\x05\x80\x00\x00\x2c\x80\x00\x00\x3c\x80\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x44\x85\x03\x06\xdc\x42\x00\x82\x52\x08\x94\x5a\x32\x17\x44\x66\x70\x52\xaf\xfa\x83\x86\xed\x49\xe0\x0e\xf2\x23\xcb\xff\xc3\x87\x6f\x9c\x9e\x7b\xf6\x18\x18\x80\x01\x80\x80' - provide_erc20: bytes = b'\xe0\x0a\x00\x00\x67\x03\x44\x41\x49\x6b\x17\x54\x74\xe8\x90\x94\xc4\x4d\xa9\x8b\x95\x4e\xed\xea\xc4\x95\x27\x1d\x0f\x00\x00\x00\x12\x00\x00\x00\x01\x30\x45\x02\x21\x00\xb3\xaa\x97\x96\x33\x28\x4e\xb0\xf5\x54\x59\x09\x93\x33\xab\x92\xcf\x06\xfd\xd5\x8d\xc9\x0e\x9c\x07\x00\x00\xc8\xe9\x68\x86\x4c\x02\x20\x7b\x10\xec\x7d\x66\x09\xf5\x1d\xda\x53\xd0\x83\xa6\xe1\x65\xa0\xab\xf3\xa7\x7e\x13\x25\x0e\x6f\x26\x07\x72\x80\x9b\x49\xaf\xf5' - - b: bytes = b'\xe0\x04\x00\x00\x56\x05\x80\x00\x00\x2c\x80\x00\x00\x3c\x80\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x3f\x26\x8e\x02\xcc\x9b\xe5\xc5\x3e\xa4\x4b\xd4\x3c\x28\x9d\xcd\xdc\x82\x52\x08\x94\xda\xc1\x7f\x95\x8d\x2e\xe5\x23\xa2\x20\x62\x06\x99\x45\x97\xc1\x3d\x83\x1e\xc7\x92\x8d\xb8\xb0\x86\x1b\x8f\x7f\xe5\xdf\x83\xcd\x55\x3a\x82\x98\x78\x00\x00\x80\x01\x80\x80' - test: bytes = b"".join([b'\xe0\x04\x00\x00\x89\x05\x80\x00\x00\x2c\x80\x00\x00\x3c\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02', - b'\xf8\x70\x02', - b'\x02', #nonce - b'\x85', - b'\x02\x54\x0b\xe4\x00', # max priority fee per gas - b'\x85', - b'\x02\x54\x0b\xe4\x00', # max fee per gas - b'\x86', - b'\x24\x61\x39\xca\x80\x80', # gas limit - b'\x94', - b'\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc', # destination - b'\x81'+ - b'\xFF' + # Amount - b'\x00' + # Payload - b'\xc0\x01\xa0\xe0\x7f\xb8\xa6\x4e\xa3\x78\x6c\x9a\x66\x49\xe5\x44\x29\xe2\x78\x6a\xf3\xea\x31\xc6\xd0\x61\x65\x34\x66\x78\xcf\x8c\xe4\x4f\x9b\xa0\x0e\x4a\x05\x26\xdb\x1e\x90\x5b\x71\x64\xa8\x58\xfd\x5e\xbd\x2f\x17\x59\xe2\x2e\x69\x55\x49\x94\x48\xbd\x27\x6a\x6a\xa6\x28\x30']) - - - - try: - with self.client._apdu_exchange_nowait(test) as ex: - yield ex - - #response = self.client._apdu_exchange( - # sign - #) - except ApduException as error: - raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_TX) - - - @contextmanager - def simple_sign_tx(self, bip32_path: str, transaction: Transaction, result: List = list()) -> Tuple[int, bytes]: + def simple_sign_tx(self, bip32_path: str, transaction: Transaction, result: List = list()) -> None: try: chunk: bytes = self.builder.simple_sign_tx(bip32_path=bip32_path, transaction=transaction) @@ -177,19 +137,34 @@ class EthereumCommand: # response = V (1) || R (32) || S (32) assert len(response) == 65 + v, r, s = parse_sign_response(response) + + result.append(v) + result.append(r) + result.append(s) + - offset: int = 0 + @contextmanager + def simple_personal_sign_tx(self, bip32_path: str, transaction: PersonalTransaction, result: List = list()) -> None: + try: + chunk: bytes = self.builder.simple_personal_sign_tx(bip32_path=bip32_path, transaction=transaction) - v: bytes = response[offset] - offset += 1 + with self.client.apdu_exchange_nowait(cla=chunk[0], ins=chunk[1], + p1=chunk[2], p2=chunk[3], + data=chunk[5:]) as exchange: + yield exchange + response: bytes = exchange.receive() + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_TX) - r: bytes = response[offset:offset + 32] - offset += 32 - - s: bytes = response[offset:] + # response = V (1) || R (32) || S (32) + assert len(response) == 65 + v, r, s = parse_sign_response(response) result.append(v) result.append(r) result.append(s) + diff --git a/tests/speculos/ethereum_client/ethereum_cmd_builder.py b/tests/speculos/ethereum_client/ethereum_cmd_builder.py index a02facf..c96bf70 100644 --- a/tests/speculos/ethereum_client/ethereum_cmd_builder.py +++ b/tests/speculos/ethereum_client/ethereum_cmd_builder.py @@ -4,7 +4,7 @@ import struct from typing import List, Tuple, Union, Iterator, cast -from ethereum_client.transaction import Transaction +from ethereum_client.transaction import PersonalTransaction, Transaction from ethereum_client.plugin import Plugin from ethereum_client.utils import bip32_path_from_string @@ -274,3 +274,38 @@ class EthereumCommandBuilder: p1=0x00, p2=0x00, cdata=cdata) + + + def simple_personal_sign_tx(self, bip32_path: str, transaction: PersonalTransaction) -> bytes: + """Command builder for INS_SIGN_PERSONAL_TX. + + Parameters + ---------- + bip32_path : str + String representation of BIP32 path. + transaction : Transaction + Representation of the transaction to be signed. + + Yields + ------- + bytes + APDU command chunk for INS_SIGN_PERSONAL_TX. + + """ + bip32_paths: List[bytes] = bip32_path_from_string(bip32_path) + + cdata: bytes = b"".join([ + len(bip32_paths).to_bytes(1, byteorder="big"), + *bip32_paths + ]) + + + tx: bytes = transaction.serialize() + + cdata = cdata + tx + + return self.serialize(cla=self.CLA, + ins=InsType.INS_SIGN_PERSONAL_TX, + p1=0x00, + p2=0x00, + cdata=cdata) diff --git a/tests/speculos/ethereum_client/transaction.py b/tests/speculos/ethereum_client/transaction.py index f7aec02..f1c4d9e 100644 --- a/tests/speculos/ethereum_client/transaction.py +++ b/tests/speculos/ethereum_client/transaction.py @@ -11,6 +11,23 @@ class TransactionError(Exception): EIP2930 = 1 EIP1559 = 2 +# e0 + 08 + 00 + 00 + 38 + 05 + 8000002c 8000003c 80000000 00000000 00000000 + 0000001f + 4578616d706c652060706572736f6e616c5f7369676e60206d657373616765 +# E0 + 08 + 00 + 00 + 34 + 05 + 8000002C 8000003C 80000000 00000000 00000000 + 4578616D706C652060706572736F6E616C5F7369676E60206D657373616765 +# E0 08 00 00 35058000002C8000003C8000000000000000000000001F4578616D706C652060706572736F6E616C5F7369676E60206D657373616765 + +class PersonalTransaction: + def __init__(self, msg: Union[str, bytes]) -> None: + # If you want to send bytes directly you have to put "0x" before the string + if msg[0:2] == "0x": + self.msg: bytes = bytes.fromhex(msg[2:]) + else: + self.msg: bytes = bytes(msg, "utf-8") + + def serialize(self) -> bytes: + return b"".join([ + len(self.msg).to_bytes(4, byteorder="big"), + self.msg, + ]) class Transaction: def __init__(self, txType: int, nonce: int, gasPrice: int, gasLimit: int, to: Union[str, bytes], value: int, data: Union[str, bytes] = "", chainID: int = -1) -> None: diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..ab16f62bfcfb15701d788a6a84fe55001d152730 GIT binary patch literal 368 zcmV-$0gwKPP)m1gYoarBO3LH$euV2HeiC{**okfHIi+m$sv2p+{O|Q}I5aNh^Ys5dP#v zj%1qABdJ+S6K!y2Hbl8uvs5Q~cSHZe-9%(GG&6lVhU>>5GXsQK^2D%BBCpwrIq!n_ zbF$#pv0JKROAs&1vS|{M6`m6<_23d_XsOOAL5k@8zo4r@s|o-B(!2ofEx#wWs1tqw O0000MaU92SR5*`t9v2czV|X*7BvxgO z)p+ZvUYGL-uTN3<`uzV)UX(wBJ~&{Iaqz+-DJeaLDamgLY-*-R{vnH4-lM9jf!c0Z zW(TB_^bJjm!dYmTEbNp>H>H5d0)RioL&_xJL%+#x*1e1;tlet>H^A3mCU^5fdvRf~^Fux$cn{KwhX0c0r{CWT}dOP@do{nOCcdxzI`4*IM{X z(+=@)+0baZ)i*pXCfVP#10*4_ zb})?2Qi4;iiq{~_r}BO6jb^%WahCib^CWx$9LI5<%NLSnLSpuqiy>kU=~#TZ3V6h&d-ea!o0ERxQIK0r5|1-|8U z_`@f?F82OCybtn>zGY+f1o*|}hFaJ}Eva6Ajo;Kn6MaCN(B3IU#~G0*w9F0&E#bN6tRh{PX$qPz!L z&z2-%L#|DKhC!3CvqPQ8j%tcd$*e*1Skq3In;H^kC6uo~pR56Ep zGQ7@O5AzNnvKDJXldQAuM{N~T9zhR>?f~@YrjRh-15(tU`sG>QLq$=PZoYT}NH|@ zz8wshkB{~MB4`H0-uM*3M1j}m%A!300N{kCpu~9KJs1LQ1E{7`qHO>OJQ#XfRy9Bv z^==(ieYk597RD@{OEdS6GT+Lmuf_h$vek1^KVM4p7nbmHWt7bot=9>X{;(33tDmYc z&D9U$Wf)T#sV`+WTVz^Qo=ISYs`0?ozXTD=g%{*$&h`n6Q%*!K%L9vjA?<}S_3O~y z51_40w#ON-)XL64x@JligSXK^F9>U5TpZCDR;l1-dd45KJ?)^knt8<|^tT^?&`+$? zRq8>0Bcb3GkI=CJNF3=@I3K*Rlqo0JRixhcTL&d5MMji-{W*PXyu+hM-x=UTI}_BI zGx^;Gypw%}(Vkv=s~wl1InZ7QJjtlNRl_ihQog8p&yJp0VZ8tV002ovPDHLkV1iJ- Bw$=au literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..ab16f62bfcfb15701d788a6a84fe55001d152730 GIT binary patch literal 368 zcmV-$0gwKPP)m1gYoarBO3LH$euV2HeiC{**okfHIi+m$sv2p+{O|Q}I5aNh^Ys5dP#v zj%1qABdJ+S6K!y2Hbl8uvs5Q~cSHZe-9%(GG&6lVhU>>5GXsQK^2D%BBCpwrIq!n_ zbF$#pv0JKROAs&1vS|{M6`m6<_23d_XsOOAL5k@8zo4r@s|o-B(!2ofEx#wWs1tqw O00006LwR*|Yf6fo2|!!QiP=+AY!>nuoSD#O*_l3{AU z2F?3iuG1Z#vT)WxdCz$bCM?n~UfG0_+$c#-o+x&FmN{!T`~t!}fWihmvYFBnU&GC iHU}7nVHk#C7=kZ=)>zdthta420000 z@m&|&>(e-Pxt%COFx3G`$y0e}SEOjGiUr$V(++DhoC@Hx&%0tn>~eY~D=orYm8TAC zoB&M0UoMFfWjwWMM*JCw{tifInJY;sDTbU4(gi8Mp7OYKE-TtCd+8p9dYDmyZ4d z*6sE#-+n@R)80{X2Px1K;e(m@ohWoid>eTahQ+cJxgdjdI~4DW+O+H~ljJL-{^OzB z%hTkn?&4&R5WzQ7bJKaxn)?gy*a8P%CZW08jAce+7!8vvI>C5PwD3F%VD`s>~nF(@!7} f2m}Iwzz^XKS+88*y!L||00000NkvXXu0mjf@D19* literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00003.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd68b2ff0dd294d869ba59869833833ab338336 GIT binary patch literal 474 zcmV<00VV#4P)Wb~JX@k{_&;UC2@s_<{Z!umi#mryXP`NRcI7~bD&3cP)=rEde zAq(c&$&J5m%U@}4oV3xR*O^c>}^#9 zd;F}~=HxbfdPf(}t~sYy(7YtYR+1H0zOMA0imnv!kRP{Fv>&EO1=iSex1EGdykA2d zy|^;_Xk@Y078W5mVBfTL06V1$Pm4N&8>$3{yzsA!MlENZqDxr(8HcqOWcUeJC`YS7I1@){sWIgaBvj^j9lH!=KV$FT{N QIsgCw07*qoM6N<$f_S6fk^lez literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00004.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..251c562bb48fde4f7c038b5bb7b48ecf11927c88 GIT binary patch literal 490 zcmVhh zT`ZL$-Dt4{F1l^~wt|eCK{pzIh5K gI2;a#!||K=2jD|uwtM20uK)l507*qoM6N<$g1g?{yZ`_I literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00005.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c2d6774a86d59f5cad0974eb03748765433d08 GIT binary patch literal 407 zcmV;I0cie-P)H|@ zz8wshkB{~MB4`H0-uM*3M1j}m%A!300N{kCpu~9KJs1LQ1E{7`qHO>OJQ#XfRy9Bv z^==(ieYk597RD@{OEdS6GT+Lmuf_h$vek1^KVM4p7nbmHWt7bot=9>X{;(33tDmYc z&D9U$Wf)T#sV`+WTVz^Qo=ISYs`0?ozXTD=g%{*$&h`n6Q%*!K%L9vjA?<}S_3O~y z51_40w#ON-)XL64x@JligSXK^F9>U5TpZCDR;l1-dd45KJ?)^knt8<|^tT^?&`+$? zRq8>0Bcb3GkI=CJNF3=@I3K*Rlqo0JRixhcTL&d5MMji-{W*PXyu+hM-x=UTI}_BI zGx^;Gypw%}(Vkv=s~wl1InZ7QJjtlNRl_ihQog8p&yJp0VZ8tV002ovPDHLkV1iJ- Bw$=au literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..ab16f62bfcfb15701d788a6a84fe55001d152730 GIT binary patch literal 368 zcmV-$0gwKPP)m1gYoarBO3LH$euV2HeiC{**okfHIi+m$sv2p+{O|Q}I5aNh^Ys5dP#v zj%1qABdJ+S6K!y2Hbl8uvs5Q~cSHZe-9%(GG&6lVhU>>5GXsQK^2D%BBCpwrIq!n_ zbF$#pv0JKROAs&1vS|{M6`m6<_23d_XsOOAL5k@8zo4r@s|o-B(!2ofEx#wWs1tqw O0000SyQLV>f``qQOXbqPQ!xHR|COsXOA0SyCJd8p>4D$G9G01l`_(uRqI zm-0Bm&=LeaYiYtkEafR_*d`q3*-+7p*k<53^!1u%AOyTIcM4XSqhdgXLp08%+! z=q2-`B8L>iaS;F>zm;Y{ zj&!821jz#B0i?eyMp+k`@-*5>54HRek%oSDznJODGUXpK{{#vm*lAeRXW1z!`B~Xjy zoAGI8WQapZ2;I@an8mpTOzf3HSkd@SvJ9DX?dY4Tu2=hTU(oHz5rZ; zcW&Y(@^ngKy8r2NR&_DJ_We(W`h=ted`L_r*}!=os@dXs5;KouA3XpLFc_Pq!grT) zn$-`3T@YSb%OM;DmxX1hPTUvOlax!H_A}V1OL_*z6WcCOy`e$Xo>ouuZ9Wstoi4QZ z0rtu`Kg?*?n!p2a8;s;pUT8Tk7TInCC2DvXLa4|LcN@FrYMmlFqHW~3gGX)07UdM79NJ?6+R3ma-P@KPV zRAMn*27p6YZ76Wizk)I-0{JC5TxgdZ#1P&dd|R&4+P N002ovPDHLkV1k+Z%<%vK literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00003.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..582648da56a7d94ec933c29542bffe0905921119 GIT binary patch literal 465 zcmV;?0WSWDP) zt}Y19tmP6;g3E$+s7~0I)C+QYwA1U>*y|&`0ppEruW))pgQ^EEUimmLfaXpY+WQ&y zlW~3+Yu6gU9}sKc$zOS)<@lZCjVYe(9&Rv+jS=;m(XVjA>E(}IPaH;hEA%kNJ=8qJ z*e!5MI1_~vsE~bIHAFq7U0k%YsIazS7xsvwQeXewA)SC?)KixjRY}!~15|7fXgvYr znz$&h3ZN!AG*WL;Wh{vO4N|N>h!d6DRnb5ptI9k@Q$|DYMCA#fpLg&U(z8edy#vv1 zl71nuT}wq$Ur?y1qV^PRnEEZ{Zk)RTgm6L5!~z6C5ZsqH@5oSV+{|q600000NkvXX Hu0mjfC5O-K literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00004.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53e131782764371604e832ef97bbf7abadd774d6 GIT binary patch literal 449 zcmV;y0Y3hTP)>A zCic^4-VGqNf4sisQZUBV07V7)Yn4^9g&QR-eZ1VIFEK07bgE*m6!8~<~AO{WhFIm124^q rjn^$wHITeD_#eVS5ClOG1e@^zhU7M@71qgk)t^U7DQ&yf(v0)? z9rv=~g4nk0;A!sYz>kyO(cum)z1%Q9dQU(OHxirrEo_l`EzRYN>=AeiFW@b2zo+Uv z{(n%X^0YR?tbnqG=VeLQsFT1I!u;dr^pYkMkasqo6G#i$^!OggGY{81Rpxp0HUPn2 zMU-IN_PIPx=$e8`&ssL&B&4iThU+ZHl1AY#%4E=XbKE5H)xo%9+Xbq3G^l#e$1^YI z3DDB%M6sWNuZ-gZtexu*d;u{BJ^89EG#xLTtUvaip(dyQ`+RQFry5}YT3#F6`#!vX z5QAqWSQ~(4cl{7#8IcU9oS`fR7<*+&MNbQ)@}Vvu3Ex((H`@E^hAA!e7Hf}E1dMtT zT=&AtUM_{}<}D?aXg&e1ANedgr3x#Q@uyQYR4;I@V89=hRzO*l=hx}gCamNisk+G< zB}r&%mVv!^QsUn&l%grW=!0K~jS;+681jS6O2h;NK@hCV6S?wCq3f%xlK=n!07*qo IM6N<$f*F9@#{d8T literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00006.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c2d6774a86d59f5cad0974eb03748765433d08 GIT binary patch literal 407 zcmV;I0cie-P)H|@ zz8wshkB{~MB4`H0-uM*3M1j}m%A!300N{kCpu~9KJs1LQ1E{7`qHO>OJQ#XfRy9Bv z^==(ieYk597RD@{OEdS6GT+Lmuf_h$vek1^KVM4p7nbmHWt7bot=9>X{;(33tDmYc z&D9U$Wf)T#sV`+WTVz^Qo=ISYs`0?ozXTD=g%{*$&h`n6Q%*!K%L9vjA?<}S_3O~y z51_40w#ON-)XL64x@JligSXK^F9>U5TpZCDR;l1-dd45KJ?)^knt8<|^tT^?&`+$? zRq8>0Bcb3GkI=CJNF3=@I3K*Rlqo0JRixhcTL&d5MMji-{W*PXyu+hM-x=UTI}_BI zGx^;Gypw%}(Vkv=s~wl1InZ7QJjtlNRl_ihQog8p&yJp0VZ8tV002ovPDHLkV1iJ- Bw$=au literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..ab16f62bfcfb15701d788a6a84fe55001d152730 GIT binary patch literal 368 zcmV-$0gwKPP)m1gYoarBO3LH$euV2HeiC{**okfHIi+m$sv2p+{O|Q}I5aNh^Ys5dP#v zj%1qABdJ+S6K!y2Hbl8uvs5Q~cSHZe-9%(GG&6lVhU>>5GXsQK^2D%BBCpwrIq!n_ zbF$#pv0JKROAs&1vS|{M6`m6<_23d_XsOOAL5k@8zo4r@s|o-B(!2ofEx#wWs1tqw O0000JPQKUVRFRN0ze*yF$u}+vI&JLQ{B7fVpGeMn%AKebdo40Z4-e zaT0`0SkD6zO7w`^1e=4EY?p;p(YX)DnG}B|RcG=3X`Xw>k={m?D151y%k57z{2@ku z2VuvN(;!gtIDrNrsdP5)E%BO?{!2b9);R$X0Ub6DKUrZX2g|_PI5FMiJK?S}gsq6g zwq!OK%meuHzRs%;(u?E-BmvvhfQ<2``}Um$mw>f0FgNmUDE28i4U|CY9QIiyBcSRy zf(G4Ff}PI%Y{_i}n=q+UovW$}i3pqYM*i3zGH=1J79fmhiV%P6Hw?p&H|@ zz8wshkB{~MB4`H0-uM*3M1j}m%A!300N{kCpu~9KJs1LQ1E{7`qHO>OJQ#XfRy9Bv z^==(ieYk597RD@{OEdS6GT+Lmuf_h$vek1^KVM4p7nbmHWt7bot=9>X{;(33tDmYc z&D9U$Wf)T#sV`+WTVz^Qo=ISYs`0?ozXTD=g%{*$&h`n6Q%*!K%L9vjA?<}S_3O~y z51_40w#ON-)XL64x@JligSXK^F9>U5TpZCDR;l1-dd45KJ?)^knt8<|^tT^?&`+$? zRq8>0Bcb3GkI=CJNF3=@I3K*Rlqo0JRixhcTL&d5MMji-{W*PXyu+hM-x=UTI}_BI zGx^;Gypw%}(Vkv=s~wl1InZ7QJjtlNRl_ihQog8p&yJp0VZ8tV002ovPDHLkV1iJ- Bw$=au literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00003.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..d55782f429e629a5ae929916914befa14613edba GIT binary patch literal 449 zcmV;y0Y3hTP)9Z)nZ zoKdfPKxBZtOD`O!Ud7)^nCSVm48R~fHVz_gJJ3!JB$;A z73W%!0pdWH0?92?e|oM4;Hw|T9Z)nZ zoKdfPKxBZtOD`O!Ud7)^nCSVm48R~fHVz_gJJ3!JB$;A z73W%!0pdWH0?92?e|oM4;Hw|T5YKJ%(KU&1ONcAAJx@!`E?Y1^<~WN}zCyXs#X zo?o6k@9c|LZskJhD8km*o@uZbHa}-B?&(7HD5C%IYmwHRbJ)2) z`V`bZme<8JnX>F>hL3vOBL0b~>J+pM|9!ySI57nP0000WkROv_^0k3i)wKWs002ov JPDHLkV1lAe!YTj& literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..58f060626179693a40fbd8ebe172a55ee552d996 GIT binary patch literal 624 zcmV-$0+0QPP)0`;d{4QW3j_ock`M?Xgb+dqG3V=);*`>L5M!*3 zyn*l22E3i0(*}f;QjGCl{>9XNe5J+MNHO?$vL${q;BrljQT0^etb8Q?5rp6KbFd0C z&S!wi?F*0@c?|NAMn7T|W*iPcUVPL-Bv*RwxNGrBSJomSBPV|v}pRwN^TJgTAsZYt}Th%Kg=3yaxKw|Ey;g2`gF%`v^M~t(O7h_ zH>s{!A`O$3M_RbUT8j^}YG2*jXNKHtz@oOXaBl{*_aN5--g?%yQ}CW^piAnS#{KXh zmKLte0QJ_5V9tCS+I!b;kADjZA%qY@2qAi<1<)ust$A*~1i00000005j&Ypu2Jj^YWw zy90QoT&ZuaQvl6=DP?aYPf1pQ*$k63`;x8zO;>}w*_U($&=hOZQ)gd9es%|NhM$F! zW?$0X0Zo_gyxGq!-I5;w002`g?B41@dShn48j^qcKMg+SRb@~2kiDXt9?G(zZ_&4C zhfSe&Es>ja8l-41$VME{IyOzQ?Ue@1yRzZ^H{)W~!1tfC>juYNH#BJt?4%T&zcu@I zbg0WXI2uYRp~7D9ao)DXaZq_zsB{W|%4eW}Iz^4!e zUu_N6PY6z&;*%m4K>3kw6W0ds>@{hh*5YKJ%(KU&1ONcAAJx@!`E?Y1^<~WN}zCyXs#X zo?o6k@9c|LZskJhD8km*o@uZbHa}-B?&(7HD5C%IYmwHRbJ)2) z`V`bZme<8JnX>F>hL3vOBL0b~>J+pM|9!ySI57nP0000WkROv_^0k3i)wKWs002ov JPDHLkV1lAe!YTj& literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..93eda35385a2312963bba2b12c1c5f518b17e39f GIT binary patch literal 882 zcmV-&1C9KNP)6Q%z zf)wUGA>CWet#3eEQ!r9yz`f=3!!`u2FToi$3!gig*k@On+X`8ta#<7d&sI36vo{=BKe17GS$g$0&k)*i~Ca0 z_OsZ@q9zt^F&b~M3DY_ZsP}GdC>g%zRQ(ucO2`b6TG!jX&fmHRq^#WB<)3*Iz8UX4 zS`=f~F5$52skdE1#}X@9Obzx5`Z1M4KlM&=beD}{Q(r&pIZYKpbO`j3M8!b;C4@pL}#kPAEHl@Du$ zWklK1>jobe_ah3cA;C>}P8j&zYJ{c>d{}NhC)Vl(0g@Y zTIZX`sXoAN=qllnzIA!A_h5P=_Wxbq2h53@DL~D~JTm(PUvMJtnt%sUR=r7XDJvsk z0+i%CDu~nB*-KNRY{_%r)@7lK`$zirQxru}6h-lyP}R@|xwXQQx|j-Gk&4sK&FB_2 zAqp)qiU7$iqUgwdo^r)i(%vFgS3ZPKA#49dDN#&K*JW=LIXIVY!daKSrI$u8n~6WT zGns_nu6Z%Yr3rv3l{^joj2ZcgP{Eyx-i%x^et=EDVvuApE^!G@#7mTsiKux$FI7XA z24#h)IgK;{p#Yh+2SB6loa?e7O2!WrR#L1eilQirqA1?Ne?C3o5S)?U3jhEB07*qo IM6N<$f;&B*c>n+a literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..873634efa0bd3de936624c6dbdec7f3c5b33077f GIT binary patch literal 570 zcmV-A0>%A_P)T=mewjbsv>P0nqkEo-p3+2T8CC8O&O=C%~ z%Go`NM^8Z6P^wbRZ0nNq#UXUB+t?=R?L0&8(2TL<1gMk|8z-Yy$953|CX6o4sWPsF zaN-xBc0Q^jk~_T?E^l5bWp5=^b(~^()+x~4tE_TCm%2AqhX1i?Jk`x%D!tT~th)^2 z!%+1Es5j@>C2SX}-Q@_??maiC+I^qEdJie3=7M$llX;gC@{+>;`VNTNwt?F}(gi(C z&jkShfRoufzzE$uIZ-t?SsL4crVKIdVI1xNS9Uj&Q9JJ*`MuivQtfrOQ;ce@YAZk6 z=|44mv`u)%HW`v`3qxbG>Q3G;Qi{(7d0dcR{h41nP8VT2tKKZsFXsVf7r>vCznl3g z^DI@p+oDuuQDlPJ)<`wcj9Hp4jVF)t)B+g)MhqH%EvG$Tbal>h9nbv_C^RQM#4kIy z!j_B2rVT@H4bkwPc8O|EnzoamJr9un{t%rBL+wa<;10Nu_j3>O2hkN7^&dl#8ucHB zHP{JWXeSpUvj$5+UH||9000000000000000000000Dxuu0&U>+zsop!Qvd(}07*qo IM6N<$g7=g90RR91 literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00003.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..c9da92b60a9314d8252cfcd68c1cd10acaf07bb1 GIT binary patch literal 463 zcmV;=0WkiFP)i<1<)ust$A*~1i00000005j&Ypu2Jj^YWw zy90QoT&ZuaQvl6=DP?aYPf1pQ*$k63`;x8zO;>}w*_U($&=hOZQ)gd9es%|NhM$F! zW?$0X0Zo_gyxGq!-I5;w002`g?B41@dShn48j^qcKMg+SRb@~2kiDXt9?G(zZ_&4C zhfSe&Es>ja8l-41$VME{IyOzQ?Ue@1yRzZ^H{)W~!1tfC>juYNH#BJt?4%T&zcu@I zbg0WXI2uYRp~7D9ao)DXaZq_zsB{W|%4eW}Iz^4!e zUu_N6PY6z&;*%m4K>3kw6W0ds>@{hh*5YKJ%(KU&1ONcAAJx@!`E?Y1^<~WN}zCyXs#X zo?o6k@9c|LZskJhD8km*o@uZbHa}-B?&(7HD5C%IYmwHRbJ)2) z`V`bZme<8JnX>F>hL3vOBL0b~>J+pM|9!ySI57nP0000WkROv_^0k3i)wKWs002ov JPDHLkV1lAe!YTj& literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..802fad56d37a5496b01e613af00acd1b784e63aa GIT binary patch literal 853 zcmV-b1FHOqP)@~p&BKdi-~k#ki13!%WXI4deZD{d}ge| z*qn{16D|SBCm(hqqCGu#Tr(~I34mRTWl`^HfU#BkMhqnSrF|Bg#Vqm`KzJ%-6GT<( zA1PO=ZVy#~wGDMEi@r~X0{B5M**bPnQbV<7zjk&$uv_ap0z6pqMzJU@GTv;%D&yM& z;JWKsvZb;sWxrNZQI<%EsfeT_&oW9mtUv|$tsDVHFSBn>_7S9|K8{800s7IM|}e3M$s>&}Mm#%jyRdBKsR8#YatSH>d(%+2+sMXX51U5)CjsU+VON1Mf4R_5Ur$Q5Txgh(I z$GpB11BEX+6`F`t#A5130Ql@jvzWF2yeN7TTPUfPZb`cGLf2EFd$HWO4t0;=1D2k#emh&gk)_vd4 zFReAHWjptM5103}x7K=x-Ukj(;cud?^MMZSUPkQ?(95kg_$Tcg;V02n=Lr*bp=?Y! zS}xgZY-ft}uU!8QS$YC`(6OFE9)T_Gmy0+E_R*(+A^&#SC|M36h)NW^I7m zgNf&wy;F?y6<3ndh1%5Vwq$dB0@6e8tu<-jE1R^Zdr4>@`_^DLIOzOAZ*QNA=;ZSL zG8k8v_ZL%pu#?I{I~h2+_FyVb_s-rGNvJpk<8AZm6=ZqsaPM1)2t-yXLQx`N2dVmZ z6fd-HQuIr@HhlrcQN5>P2Q32%P{BJ1Y#RMO6gZ{MZsQL9(jjUpEw4VN@nkRkZYUcy zFu2^eSB?cpTjH2K65xwAVCvn4#U@<<9kt-AxRj-8=wglYzy(l3CxAY1q=ygt5LWV! zBwo5@PSl4TMU&D{k)?gQA0m=)h3EX3Xx5o}$fi-M9KsmPyF?WUNbBBgEzRfxmSd#R-&JG%*e-;@(z zKfm@-5kXX10CWxfY5WL25tpLX0f~vlVhTP~9QHpeD|W;bl=~e`i>b&&RJ5_ocmjh; zI8i=auSDuI!d!36`!h&;2rF1jQSDH2A8lksN;ISAG58)`#6ABwihN2!cTi&7W@-b9 eq9}@D6aN4>tGTwWostLu00003`I#QH}UFRtt2 zQvRL$zN<6Mw}RZOx325Ld0O!(J_Bu?4+v-lq_?{uCuzjbSD>v%9VVos1@2w1|hTGoVdvGEyK|eTpzz`#f?L?N*sAr~S%()+;G!HYx5#ey8d=REUORxLql+`%nj{gDAH)u5ZSLBA0@ z`<9^cJJ^LmEu?Vk0I)_@0cy9@3yg!57n)(K09_*VkWk8Bub*e_0}foHB6q@@;oe7+ zBuSFpY?e?|p=r*-gf(Zwhu?y@`X2iXbT)i!BUYo2>M&l94;TEY4vxOQHsl@3)cRM8J6A%p6GT&c=dDWb=?ab4}h=ui!JY1M&D z;kD(8U27}LdZJ%Bhe`#yw4?)Yla75v&-FndumddKsEVNQ?CLd3kViIUsii^MS1UDo zU7~KgWb8+cN$&|TSCA0OwiRQO P00000NkvXXu0mjfmobDs literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00004.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..eab9f1d489e914195b0f28fae10625d1802d26c1 GIT binary patch literal 814 zcmV+}1JV46P)WgU0~?00000z;eC)%cT1N{OV?s31*Q0W5jM%F3vhdDGqM zT{Ml8jq42J15hR(HWAe`y>#3)d23fnj$j|5o_T#WBwd@W!kLwVOuv(#l>DPZGL?UX zWm+R`S4Lu83Oeq|u1spBL`nk08rucwUGcByHHlqw9|sAE5+S8kNY{gW);=I=+6GSl z$er+Fr1wz(005hbdQa%Hvr^1?5Vi0!ZfAC@L9^qXy553xO}y4VSs9&}a_+)NN0NPK zE9rLFoAvafbV_a~<|U0)yYxb~LWdo5C){Vs-1;igp<>D}3%aC;z}3C?+2A+MPT20; zs7!ya78Iq*25y%o3B~%kV{518DduNM5q_i-y>M%E1^8E=k{qRIlcNG<#I>Eetw*Qy z_ehK!)kE9Usp2JbDg3Do<{>&6-d_geYIuJ!h`~;fg?3^%88Mj3Qupe@!(s*xa?_3U zYq#YU%nN|iphw>6?r|`*L!YIv`d_{_HXV1(>w?t|6(KY4uzgnY z#EwF}FVa>~VVf>y@E|F|$w)rwJHVOB%L3r~zRYLAth0t!K7^G+C?cIcK}prwwgRLl ss`EgqdnuUd#jm*n000000Pt3R0a$Qy>tzDFPXGV_07*qoM6N<$f(VR)`v3p{ literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00005.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4bdbd98ccf3f72a060e4b0c5fb192c849418e5 GIT binary patch literal 522 zcmV+l0`>igP)(Y^%m5cW=uhAqiEo}2D=s@d#V3zu;T7DOK7Xv3hhbH zm)c+C`{ZPy+TEs7Laf>n{|HK>x=nwI@{@3>FM8d;bl?g{Q&91{vop+G-0HGAgeUhZ)z;dFJ=on1UuBcjc!}{^=t!)uNlmXctFV;`Avf zhju5ZJC;@|5Tlt>h}q4})Y@Cx@-EwJFJeiC&(fu4o4RXGpMq}ZX*tUICVZIIc@zKu zp2)B|xqb+T_>aDX6}Jeg2Wj45cf^ z;l*|6z+}9iOhJ2hfcsD)a#sVn)cADGRgZaQm+Y#B29K363!Ft47n%A=@&NBwiqNlW z=e5(d?%R<&z-8a*3V~Ug?yDePD%8VHK7`GL({i;gXp3GtDZQ-HpyPAm;)7|5jQYng zq(=S2um*QR7P^yx$gIIukQV>|00000000000000000000003YczYvwlj>9mIv;Y7A M07*qoM6N<$f`&Er1^@s6 literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00006.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..c9da92b60a9314d8252cfcd68c1cd10acaf07bb1 GIT binary patch literal 463 zcmV;=0WkiFP)i<1<)ust$A*~1i00000005j&Ypu2Jj^YWw zy90QoT&ZuaQvl6=DP?aYPf1pQ*$k63`;x8zO;>}w*_U($&=hOZQ)gd9es%|NhM$F! zW?$0X0Zo_gyxGq!-I5;w002`g?B41@dShn48j^qcKMg+SRb@~2kiDXt9?G(zZ_&4C zhfSe&Es>ja8l-41$VME{IyOzQ?Ue@1yRzZ^H{)W~!1tfC>juYNH#BJt?4%T&zcu@I zbg0WXI2uYRp~7D9ao)DXaZq_zsB{W|%4eW}Iz^4!e zUu_N6PY6z&;*%m4K>3kw6W0ds>@{hh*5YKJ%(KU&1ONcAAJx@!`E?Y1^<~WN}zCyXs#X zo?o6k@9c|LZskJhD8km*o@uZbHa}-B?&(7HD5C%IYmwHRbJ)2) z`V`bZme<8JnX>F>hL3vOBL0b~>J+pM|9!ySI57nP0000WkROv_^0k3i)wKWs002ov JPDHLkV1lAe!YTj& literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..717f3a5bac5957ea60d4ba4c2c5276a2a15c7761 GIT binary patch literal 503 zcmV2M1_fq%w zZ(xfvpP)qB>paZeW&9moeGw~e>x)+;@yJnA;W)0@v(#SJ@-As-^Q+|>P3iTuoxbjS ztHuh*^OE~ITA!?n4OMo-?pw{8*6P?-t6WTdw<6N1S6|^`9~}ZxQ={MYW6PDN{zAY%HUBI~4K-shfD>fK tpew=)0000000000000000001V^8>!&mq6`OZlM4G002ovPDHLkV1iod?C}5q literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c9da92b60a9314d8252cfcd68c1cd10acaf07bb1 GIT binary patch literal 463 zcmV;=0WkiFP)i<1<)ust$A*~1i00000005j&Ypu2Jj^YWw zy90QoT&ZuaQvl6=DP?aYPf1pQ*$k63`;x8zO;>}w*_U($&=hOZQ)gd9es%|NhM$F! zW?$0X0Zo_gyxGq!-I5;w002`g?B41@dShn48j^qcKMg+SRb@~2kiDXt9?G(zZ_&4C zhfSe&Es>ja8l-41$VME{IyOzQ?Ue@1yRzZ^H{)W~!1tfC>juYNH#BJt?4%T&zcu@I zbg0WXI2uYRp~7D9ao)DXaZq_zsB{W|%4eW}Iz^4!e zUu_N6PY6z&;*%m4K>3kw6W0ds>@{hh*gX9g;)ZTl>^=Ar