From c5881ab9bbed3063f7ae9d42ac5edfef88f04878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 27 Nov 2024 11:03:15 +0100 Subject: [PATCH 01/12] [test] use pytezos key for account --- tests/integration/nano/utils/account.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tests/integration/nano/utils/account.py b/tests/integration/nano/utils/account.py index 0ae640875..6eb890026 100644 --- a/tests/integration/nano/utils/account.py +++ b/tests/integration/nano/utils/account.py @@ -19,6 +19,7 @@ import base58 from pytezos import pytezos +from pytezos.crypto.key import Key as PytezosKey from ragger.bip import pack_derivation_path @@ -89,27 +90,27 @@ class Account: path: bytes sig_type: Union[SigType, int] - public_key: str + __key: str def __init__(self, path: Union[str, bytes], sig_type: Union[SigType, int], - public_key: str): + key: str): self.path = \ pack_derivation_path(path) if isinstance(path, str) \ else path self.sig_type = sig_type - self.public_key = public_key + self.__key = key def __repr__(self) -> str: - return self.public_key + return self.__key @property def base58_decoded(self) -> bytes: """Decodes public_key from base58 encoding.""" # Get the public_key without prefix - public_key = base58.b58decode_check(self.public_key) + public_key = base58.b58decode_check(self.key.public_key()) if self.sig_type in [ SigType.ED25519, @@ -159,6 +160,11 @@ def check_public_key(self, data: bytes) -> None: assert data == public_key, \ f"Expected public key {public_key.hex()} but got {data.hex()}" + @property + def key(self) -> PytezosKey: + """pytezos key of the account.""" + return pytezos.using(key=self.__key).key + def check_signature(self, signature: Union[bytes, Signature], message: Union[str, bytes]): @@ -173,8 +179,7 @@ def check_signature(self, SigType.BIP32_ED25519 ] \ else Signature.from_tlv(signature) - ctxt = pytezos.using(key=self.public_key) - assert ctxt.key.verify(signature.value, message), \ + assert self.key.verify(signature.value, message), \ f"Fail to verify signature {signature}, \n\ with account {self} \n\ and message {message.hex()}" From 8d1cfd1d43161bac37dcf80768d8e90dc78050e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 27 Nov 2024 11:24:01 +0100 Subject: [PATCH 02/12] [test] check hash inside check_signature encode signature as pytezos do --- .../test_sign/operations/test_sign_ballot.py | 3 +- .../test_sign_batched_operations.py | 9 +-- .../operations/test_sign_delegation.py | 3 +- .../operations/test_sign_failing_noop.py | 3 +- .../test_sign_increase_paid_storage.py | 3 +- .../operations/test_sign_origination.py | 3 +- .../operations/test_sign_proposals.py | 3 +- .../test_sign_register_global_constant.py | 3 +- .../test_sign/operations/test_sign_reveal.py | 3 +- .../test_sign_sc_rollup_add_messages.py | 3 +- ...t_sign_sc_rollup_execute_outbox_message.py | 3 +- .../test_sign_sc_rollup_originate.py | 3 +- .../operations/test_sign_set_consensus_key.py | 3 +- .../operations/test_sign_set_deposit_limit.py | 3 +- .../operations/test_sign_transaction.py | 24 ++---- .../operations/test_sign_transfer_ticket.py | 6 +- .../nano/test_sign/test_apdu_sign.py | 11 +-- .../nano/test_sign/test_blindsign.py | 9 +-- tests/integration/nano/test_sign/test_key.py | 6 +- tests/integration/nano/utils/account.py | 79 +++++++++++-------- tests/integration/nano/utils/app.py | 14 ---- tests/integration/nano/utils/message.py | 3 + 22 files changed, 82 insertions(+), 118 deletions(-) diff --git a/tests/integration/nano/test_sign/operations/test_sign_ballot.py b/tests/integration/nano/test_sign/operations/test_sign_ballot.py index 68f09811b..ae1e382be 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_ballot.py +++ b/tests/integration/nano/test_sign/operations/test_sign_ballot.py @@ -38,8 +38,7 @@ def test_sign_ballot(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py index d46266eeb..c3ec5d4c8 100644 --- a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py +++ b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py @@ -62,8 +62,7 @@ def test_nanos_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -104,8 +103,7 @@ def test_nanox_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -148,8 +146,7 @@ def test_sign_complex_operation(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_delegation.py b/tests/integration/nano/test_sign/operations/test_sign_delegation.py index f69febe24..db6dd9095 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_delegation.py +++ b/tests/integration/nano/test_sign/operations/test_sign_delegation.py @@ -40,8 +40,7 @@ def test_sign_delegation(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py index 648462e81..ca63d3d3b 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py +++ b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py @@ -33,8 +33,7 @@ def test_sign_failing_noop(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py index 9b0e0266c..d4b801bc0 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py +++ b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py @@ -41,8 +41,7 @@ def test_sign_increase_paid_storage(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_origination.py b/tests/integration/nano/test_sign/operations/test_sign_origination.py index 05c8acc30..0d277c52f 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_origination.py +++ b/tests/integration/nano/test_sign/operations/test_sign_origination.py @@ -42,8 +42,7 @@ def test_sign_origination(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_proposals.py b/tests/integration/nano/test_sign/operations/test_sign_proposals.py index 92c4710d5..251d19f70 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_proposals.py +++ b/tests/integration/nano/test_sign/operations/test_sign_proposals.py @@ -40,8 +40,7 @@ def test_sign_proposals(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py index 70a6d3fa5..b900cca7d 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py +++ b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py @@ -40,8 +40,7 @@ def test_sign_register_global_constant(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_reveal.py b/tests/integration/nano/test_sign/operations/test_sign_reveal.py index 41f899073..603c30558 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_reveal.py +++ b/tests/integration/nano/test_sign/operations/test_sign_reveal.py @@ -40,8 +40,7 @@ def test_sign_reveal(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py index 00712038a..34059ea1b 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py @@ -40,8 +40,7 @@ def test_sign_sc_rollup_add_messages(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py index c28fa0789..6a4060f0f 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py @@ -42,8 +42,7 @@ def test_sign_sc_rollup_execute_outbox_message(app: TezosAppScreen, snapshot_dir with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py index f0196912a..106474fc5 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py @@ -63,8 +63,7 @@ def test_sign_sc_rollup_originate(app: TezosAppScreen, whitelist: Optional[List[ with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py index 232cc5cd7..f0c423355 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py @@ -40,8 +40,7 @@ def test_sign_set_consensus_key(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py index bd8ae82b5..b8eb75328 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py @@ -40,8 +40,7 @@ def test_sign_set_deposit_limit(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_transaction.py b/tests/integration/nano/test_sign/operations/test_sign_transaction.py index ef038f3ef..daa2b2089 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transaction.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transaction.py @@ -44,8 +44,7 @@ def test_sign_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -96,8 +95,7 @@ def test_sign_simple_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -152,8 +150,7 @@ def test_sign_stake_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -181,8 +178,7 @@ def test_sign_unstake_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -210,8 +206,7 @@ def test_sign_finalize_unstake_transaction(app: TezosAppScreen, snapshot_dir: Pa with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -248,8 +243,7 @@ def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, snapshot_ with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -278,8 +272,7 @@ def test_sign_with_long_hash(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -308,8 +301,7 @@ def test_ensure_always_clearsign(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py index 30ad3b79f..77c118a32 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py @@ -45,8 +45,7 @@ def test_sign_transfer_ticket(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -78,8 +77,7 @@ def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, snapshot_ with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/test_apdu_sign.py b/tests/integration/nano/test_sign/test_apdu_sign.py index ea34c387f..0df428625 100644 --- a/tests/integration/nano/test_sign/test_apdu_sign.py +++ b/tests/integration/nano/test_sign/test_apdu_sign.py @@ -35,8 +35,7 @@ def test_sign_micheline_without_hash(app: TezosAppScreen, snapshot_dir: Path): with_hash=False, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=False, data=data) @@ -59,9 +58,8 @@ def check_sign_with_small_packet( send=lambda: app.backend.sign(account, message, apdu_size=10), navigate=lambda: app.navigate_until_text(ScreenText.SIGN_ACCEPT, path)) - app.checker.check_signature( - account, - message, + account.check_signature( + message=message, with_hash=False, data=data) @@ -97,8 +95,7 @@ def test_nanosp_regression_press_right_works_across_apdu_recieves(app: TezosAppS with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/test_blindsign.py b/tests/integration/nano/test_sign/test_blindsign.py index 883d2c6bc..d62ba2a7d 100644 --- a/tests/integration/nano/test_sign/test_blindsign.py +++ b/tests/integration/nano/test_sign/test_blindsign.py @@ -48,8 +48,7 @@ def _sign_too_long(app: TezosAppScreen, with_hash=True, navigate=navigate) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) @@ -402,8 +401,7 @@ def blind_navigate() -> None: with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=expression, with_hash=True, data=data) @@ -422,8 +420,7 @@ def test_blindsign_too_large(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, + DEFAULT_ACCOUNT.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/test_key.py b/tests/integration/nano/test_sign/test_key.py index cb1854aa1..435b5fb01 100644 --- a/tests/integration/nano/test_sign/test_key.py +++ b/tests/integration/nano/test_sign/test_key.py @@ -53,8 +53,7 @@ def test_sign_micheline_basic(app: TezosAppScreen, account: Account, snapshot_di with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=account, + account.check_signature( message=message, with_hash=True, data=data) @@ -94,8 +93,7 @@ def test_sign_with_another_seed(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, path=snapshot_dir) - app.checker.check_signature( - account=account, + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/utils/account.py b/tests/integration/nano/utils/account.py index 6eb890026..93f47ea94 100644 --- a/tests/integration/nano/utils/account.py +++ b/tests/integration/nano/utils/account.py @@ -19,9 +19,11 @@ import base58 from pytezos import pytezos +from pytezos.crypto.encoding import base58_encode from pytezos.crypto.key import Key as PytezosKey from ragger.bip import pack_derivation_path +from .message import Message class SigType(IntEnum): """Class representing signature type.""" @@ -34,29 +36,20 @@ class SigType(IntEnum): def __str__(self) -> str: return self.name -class Signature: +class Signature(bytes): """Class representing signature.""" - GENERIC_SIGNATURE_PREFIX = bytes.fromhex("04822b") # sig(96) - - value: bytes - - def __init__(self, value: bytes): - value = Signature.GENERIC_SIGNATURE_PREFIX + value - self.value = base58.b58encode_check(value) - - def __repr__(self) -> str: - return self.value.hex() - - @classmethod - def from_tlv(cls, tlv: Union[bytes, bytearray]) -> 'Signature': - """Get Signature from tlv.""" + def __str__(self) -> str: + return self.decode() - if isinstance(tlv, bytes): - tlv = bytearray(tlv) + @staticmethod + def from_secp256_tlv(tlv: Union[bytes, bytearray]) -> bytes: + """Get the signature encapsulated in a TLV.""" # See: # https://developers.ledger.com/docs/embedded-app/crypto-api/lcx__ecdsa_8h/#cx_ecdsa_sign # TLV: 30 || L || 02 || Lr || r || 02 || Ls || s + if isinstance(tlv, bytes): + tlv = bytearray(tlv) header_tag_index = 0 # Remove the unwanted parity information set here. tlv[header_tag_index] &= ~0x01 @@ -81,9 +74,26 @@ def from_tlv(cls, tlv: Union[bytes, bytearray]) -> 'Signature': s = tlv[s_index : s_index + s_len] # Sometimes \x00 are added or removed # A size adjustment is required here. - def adjust_size(raw, size): - return raw[-size:].rjust(size, b'\x00') - return cls(adjust_size(r, 32) + adjust_size(s, 32)) + def adjust_size(data, size): + return data[-size:].rjust(size, b'\x00') + return adjust_size(r, 32) + adjust_size(s, 32) + + @classmethod + def from_bytes(cls, data: bytes, sig_type: SigType) -> 'Signature': + """Get the signature according to the SigType.""" + if sig_type in {SigType.ED25519, SigType.BIP32_ED25519}: + prefix = b'edsig' + elif sig_type == SigType.SECP256K1: + prefix = b'spsig' + data = Signature.from_secp256_tlv(data) + elif sig_type == SigType.SECP256R1: + prefix = b'p2sig' + data = Signature.from_secp256_tlv(data) + else: + assert False, f"Wrong signature type: {sig_type}" + + return cls(base58_encode(data, prefix)) + class Account: """Class representing account.""" @@ -165,21 +175,20 @@ def key(self) -> PytezosKey: """pytezos key of the account.""" return pytezos.using(key=self.__key).key - def check_signature(self, - signature: Union[bytes, Signature], - message: Union[str, bytes]): + def check_signature( + self, + data: bytes, + message: Message, + with_hash: bool): """Checks if signature correspond to a signature of message sign by the account.""" + if with_hash: + assert data.startswith(message.hash), \ + f"Expected a starting hash {message.hash.hex()} but got {data.hex()}" + data = data[len(message.hash):] + + signature = Signature.from_bytes(data, SigType(self.sig_type)) - if isinstance(message, str): - message = bytes.fromhex(message) - if isinstance(signature, bytes): - signature = Signature(signature) \ - if self.sig_type in [ - SigType.ED25519, - SigType.BIP32_ED25519 - ] \ - else Signature.from_tlv(signature) - assert self.key.verify(signature.value, message), \ - f"Fail to verify signature {signature}, \n\ + assert self.key.verify(signature, bytes(message)), \ + f"Fail to verify signature {signature!r}, \n\ with account {self} \n\ - and message {message.hex()}" + and message {message}" diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index d2fbedf69..da27b2a3e 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -77,20 +77,6 @@ def check_public_key(self, """Check that public_key is the account public key.""" account.check_public_key(public_key) - def check_signature(self, - account: Account, - message: Message, - with_hash: bool, - data: bytes) -> None: - """Check that data is a signature of message from account.""" - if with_hash: - assert data.startswith(message.hash), \ - f"Expected a starting hash {message.hash.hex()} but got {data.hex()}" - - data = data[len(message.hash):] - - account.check_signature(data, bytes(message)) - MAX_ATTEMPTS = 50 def with_retry(f, attempts=MAX_ATTEMPTS): diff --git a/tests/integration/nano/utils/message.py b/tests/integration/nano/utils/message.py index 209e06ccf..1c849c321 100644 --- a/tests/integration/nano/utils/message.py +++ b/tests/integration/nano/utils/message.py @@ -47,6 +47,9 @@ def hash(self) -> bytes: def __bytes__(self) -> bytes: raise NotImplementedError + def __str__(self) -> str: + return bytes(self).hex() + class RawMessage(Message): """Class representing a raw message.""" From 5fb4deb8f5b701553a4be4003d30d0a8721a3930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 27 Nov 2024 10:46:22 +0100 Subject: [PATCH 03/12] [test] encode public key as pytezos do This allow easy public key check --- tests/integration/nano/test_public_key.py | 18 ++-- tests/integration/nano/test_wrong_apdu.py | 5 +- tests/integration/nano/utils/account.py | 114 +++++++++++----------- tests/integration/nano/utils/app.py | 6 -- 4 files changed, 70 insertions(+), 73 deletions(-) diff --git a/tests/integration/nano/test_public_key.py b/tests/integration/nano/test_public_key.py index f3d9969c0..12a614fd9 100644 --- a/tests/integration/nano/test_public_key.py +++ b/tests/integration/nano/test_public_key.py @@ -20,7 +20,7 @@ import pytest -from utils.account import Account, SigType +from utils.account import Account, PublicKey, SigType from utils.app import Screen, TezosAppScreen, DEFAULT_ACCOUNT accounts = [ @@ -42,25 +42,29 @@ def test_get_pk(app: TezosAppScreen, account: Account): """Test that public keys get from the app are correct.""" - app.assert_screen(Screen.HOME) + expected_public_key = account.key.public_key() data = app.backend.get_public_key(account, with_prompt=False) - app.checker.check_public_key(account, data) + public_key = PublicKey.from_bytes(data, account.sig_type) + + assert public_key == expected_public_key.encode(), \ + f"Expected public key {expected_public_key} but got {public_key}" - app.quit() @pytest.mark.parametrize("account", accounts, ids=lambda account: f"{account.sig_type}") def test_provide_pk(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Test that public keys get from the app are correct and correctly displayed.""" - app.assert_screen(Screen.HOME) + expected_public_key = account.key.public_key() data = app.provide_public_key(account, snapshot_dir) - app.checker.check_public_key(account, data) + public_key = PublicKey.from_bytes(data, account.sig_type) + + assert public_key == expected_public_key.encode(), \ + f"Expected public key {expected_public_key} but got {public_key}" - app.quit() def test_reject_pk(app: TezosAppScreen, snapshot_dir: Path): """Check reject pk behaviour""" diff --git a/tests/integration/nano/test_wrong_apdu.py b/tests/integration/nano/test_wrong_apdu.py index 018e5db0b..f601532bd 100644 --- a/tests/integration/nano/test_wrong_apdu.py +++ b/tests/integration/nano/test_wrong_apdu.py @@ -52,11 +52,8 @@ def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Pat with_hash=True, path=snapshot_dir / "reject_signing") - data = app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) + app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) - app.checker.check_public_key(DEFAULT_ACCOUNT, data) - - app.quit() def test_change_sign_instruction(app: TezosAppScreen): """Check signing instruction changes behaviour""" diff --git a/tests/integration/nano/utils/account.py b/tests/integration/nano/utils/account.py index 93f47ea94..5544b1789 100644 --- a/tests/integration/nano/utils/account.py +++ b/tests/integration/nano/utils/account.py @@ -17,7 +17,6 @@ from enum import IntEnum from typing import Union -import base58 from pytezos import pytezos from pytezos.crypto.encoding import base58_encode from pytezos.crypto.key import Key as PytezosKey @@ -95,6 +94,64 @@ def from_bytes(cls, data: bytes, sig_type: SigType) -> 'Signature': return cls(base58_encode(data, prefix)) +class PublicKey(bytes): + """Class representing public key.""" + + def __str__(self) -> str: + return self.decode() + + class CompressionKind(IntEnum): + """Bytes compression kind""" + EVEN = 0x02 + ODD = 0x03 + UNCOMPRESSED = 0x04 + + def __bytes__(self) -> bytes: + return bytes([self]) + + @classmethod + def from_bytes(cls, data: bytes, sig_type: Union[SigType, int]) -> 'PublicKey': + """Convert a public key from bytes to string""" + + length, data = data[0], data[1:] + assert length == len(data), f"Wrong data size, {length} != {len(data)}" + + # `data` should be: + # kind + pk + # pk length = 32 for compressed, 64 for uncompressed + kind = data[0] + data = data[1:] + + # Ed25519 + if sig_type in [ + SigType.ED25519, + SigType.BIP32_ED25519 + ]: + assert kind == cls.CompressionKind.EVEN, \ + f"Wrong Ed25519 public key compression kind: {kind}" + assert len(data) == 32, \ + f"Wrong Ed25519 public key length: {len(data)}" + return cls(base58_encode(data, b'edpk')) + + # Secp256 + if sig_type in [ + SigType.SECP256K1, + SigType.SECP256R1 + ]: + assert kind == cls.CompressionKind.UNCOMPRESSED, \ + f"Wrong Secp256 public key compression kind: {kind}" + assert len(data) == 2 * 32, \ + f"Wrong Secp256 public key length: {len(data)}" + kind = cls.CompressionKind.ODD if data[-1] & 1 else \ + cls.CompressionKind.EVEN + prefix = b'sppk' if sig_type == SigType.SECP256K1 \ + else b'p2pk' + data = bytes(kind) + data[:32] + return cls(base58_encode(data, prefix)) + + assert False, f"Wrong signature type: {sig_type}" + + class Account: """Class representing account.""" @@ -115,61 +172,6 @@ def __init__(self, def __repr__(self) -> str: return self.__key - @property - def base58_decoded(self) -> bytes: - """Decodes public_key from base58 encoding.""" - - # Get the public_key without prefix - public_key = base58.b58decode_check(self.key.public_key()) - - if self.sig_type in [ - SigType.ED25519, - SigType.BIP32_ED25519 - ]: - prefix = bytes.fromhex("0d0f25d9") # edpk(54) - elif self.sig_type == SigType.SECP256K1: - prefix = bytes.fromhex("03fee256") # sppk(55) - elif self.sig_type == SigType.SECP256R1: - prefix = bytes.fromhex("03b28b7f") # p2pk(55) - else: - assert False, \ - "Account do not have a right signature type: {account.sig_type}" - assert public_key.startswith(prefix), \ - "Expected prefix {prefix.hex()} but got {public_key.hex()}" - - public_key = public_key[len(prefix):] - - if self.sig_type in [ - SigType.SECP256K1, - SigType.SECP256R1 - ]: - assert public_key[0] in [0x02, 0x03], \ - "Expected a prefix kind of 0x02 or 0x03 but got {public_key[0]}" - public_key = public_key[1:] - - return public_key - - def check_public_key(self, data: bytes) -> None: - """Checks if the data correspond to the public_key.""" - - # `data` should be: - # length + kind + pk - # kind : 02=odd, 03=even, 04=uncompressed - # pk length = 32 for compressed, 64 for uncompressed - assert len(data) == data[0] + 1 - if data[1] == 0x04: # public key uncompressed - assert data[0] == 1 + 32 + 32 - elif data[1] in [0x02, 0x03]: # public key even or odd (compressed) - assert data[0] == 1 + 32 - else: - assert False, \ - "Expected a prefix kind of 0x02, 0x03 or 0x04 but got {data[1]}" - data = data[2:2+32] - - public_key = self.base58_decoded - assert data == public_key, \ - f"Expected public key {public_key.hex()} but got {data.hex()}" - @property def key(self) -> PytezosKey: """pytezos key of the account.""" diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index da27b2a3e..e39e920ee 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -71,12 +71,6 @@ def check_version(self, raw_version: bytes) -> None: assert raw_version == self.version_bytes, \ f"Expected version {self.version_bytes.hex()} but got {raw_version.hex()}" - def check_public_key(self, - account: Account, - public_key: bytes) -> None: - """Check that public_key is the account public key.""" - account.check_public_key(public_key) - MAX_ATTEMPTS = 50 def with_retry(f, attempts=MAX_ATTEMPTS): From e924c3e876e6ad42906b3a07b3f5ae4b7a999464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 27 Nov 2024 10:24:20 +0100 Subject: [PATCH 04/12] [test] check version/git in the test file --- tests/integration/nano/conftest.py | 3 +- tests/integration/nano/test_version.py | 32 ++++++++++---- tests/integration/nano/utils/app.py | 48 ++------------------- tests/integration/nano/utils/backend.py | 56 +++++++++++++++++++++---- 4 files changed, 77 insertions(+), 62 deletions(-) diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py index 01a2d87a3..dddd236a7 100644 --- a/tests/integration/nano/conftest.py +++ b/tests/integration/nano/conftest.py @@ -23,7 +23,6 @@ from ragger.firmware import Firmware from utils.app import TezosAppScreen, SpeculosTezosBackend, DEFAULT_SEED -from utils.backend import AppKind FIRMWARES: List[Firmware] = [ Firmware.NANOS, @@ -179,7 +178,7 @@ def backend(app_path: Path, @pytest.fixture(scope="function") def app(backend: SpeculosTezosBackend, golden_run: bool) -> TezosAppScreen: """Get `app` for pytest.""" - return TezosAppScreen(backend, AppKind.WALLET, golden_run) + return TezosAppScreen(backend, golden_run) @pytest.fixture(scope="function") def snapshot_dir(request) -> Path : diff --git a/tests/integration/nano/test_version.py b/tests/integration/nano/test_version.py index fd1dc3402..4bf2d7277 100755 --- a/tests/integration/nano/test_version.py +++ b/tests/integration/nano/test_version.py @@ -16,24 +16,42 @@ """Gathering of tests related to app version.""" -from utils.app import Screen, TezosAppScreen +import git + +from utils.app import TezosAppScreen +from utils.backend import Version + def test_version(app: TezosAppScreen): """Test that the app version is the same as the current version.""" - app.assert_screen(Screen.HOME) + current_version = Version(Version.AppKind.WALLET, 3, 0, 6) data = app.backend.version() - app.checker.check_version(data) + app_version = Version.from_bytes(data) + + assert current_version == app_version, \ + f"Expected {current_version} but got {app_version}" - app.quit() def test_git(app: TezosAppScreen): """Test that the app commit is the same as the current git commit.""" - app.assert_screen(Screen.HOME) + git_repo = git.Repo(search_parent_directories=True) + git_describe = git_repo.git.describe( + tags=True, + abbrev=8, + always=True, + long=True, + dirty=True + ) + current_commit = git_describe.replace('-dirty', '*') data = app.backend.git() - app.checker.check_commit(data) + assert data.endswith(b'\x00'), \ + f"Should end with by '\x00' but got {data.hex()}" + + app_commit = data[:-1].decode('utf-8') - app.quit() + assert current_commit == app_commit, \ + f"Expected {current_commit} but got {app_commit}" diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index e39e920ee..4f61df0f9 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -21,55 +21,17 @@ from multiprocessing import Process, Queue from pathlib import Path import time -from typing import Callable, Generator, List, Optional, Tuple, Union +from typing import Callable, Generator, List, Optional, Union import requests -import git from ragger.backend import SpeculosBackend from ragger.error import ExceptionRAPDU from ragger.navigator import NavInsID, NanoNavigator from .message import Message from .account import Account, SigType -from .backend import StatusCode, TezosBackend, AppKind - -version: Tuple[int, int, int] = (3, 0, 6) - -class TezosAPDUChecker: - """Helper to check APDU received.""" - - app_kind: AppKind - - def __init__(self, app_kind: AppKind): - self.app_kind = app_kind - - @property - def commit(self) -> bytes: - """Current commit.""" - repo = git.Repo(".") - commit = repo.head.commit.hexsha[:8] - if repo.is_dirty(): - commit += "*" - return bytes.fromhex(commit.encode('utf-8').hex() + "00") - - @property - def version_bytes(self) -> bytes: - """Current version in bytes.""" - return \ - self.app_kind.to_bytes(1, byteorder='big') + \ - version[0].to_bytes(1, byteorder='big') + \ - version[1].to_bytes(1, byteorder='big') + \ - version[2].to_bytes(1, byteorder='big') - - def check_commit(self, commit: bytes) -> None: - """Check if the commit is the current commit.""" - assert commit == self.commit, \ - f"Expected commit {self.commit.hex()} but got {commit.hex()}" - - def check_version(self, raw_version: bytes) -> None: - """Check if the version is the current version.""" - assert raw_version == self.version_bytes, \ - f"Expected version {self.version_bytes.hex()} but got {raw_version.hex()}" +from .backend import StatusCode, TezosBackend + MAX_ATTEMPTS = 50 @@ -176,7 +138,6 @@ class TezosAppScreen(): """Class representing Tezos app management.""" backend: SpeculosTezosBackend - checker: TezosAPDUChecker path: Path snapshots_dir: Path tmp_snapshots_dir: Path @@ -186,11 +147,8 @@ class TezosAppScreen(): def __init__(self, backend: SpeculosTezosBackend, - app_kind: AppKind, golden_run: bool): self.backend = backend - self.checker = TezosAPDUChecker(app_kind) - self.path = Path(__file__).resolve().parent.parent self.snapshots_dir = self.path / "snapshots" / backend.firmware.name self.tmp_snapshots_dir = self.path / "snapshots-tmp" / backend.firmware.name diff --git a/tests/integration/nano/utils/backend.py b/tests/integration/nano/utils/backend.py index 3ac303df6..c59b87023 100644 --- a/tests/integration/nano/utils/backend.py +++ b/tests/integration/nano/utils/backend.py @@ -15,6 +15,7 @@ """Tezos app backend.""" from enum import IntEnum +from struct import unpack from typing import Union from ragger.backend.interface import BackendInterface, RAPDU @@ -23,6 +24,53 @@ from .account import Account, SigType from .message import Message + +class Version: + """Class representing the version.""" + + class AppKind(IntEnum): + """Class representing the kind of app.""" + + WALLET = 0x00 + BAKING = 0x01 + + def __str__(self) -> str: + return self.name + + app_kind: AppKind + major: int + minor: int + patch: int + + def __init__(self, + app_kind: AppKind, + major: int, + minor: int, + patch: int): + self.app_kind = app_kind + self.major = major + self.minor = minor + self.patch = patch + + def __repr__(self) -> str: + return f"App {self.app_kind}: {self.major}.{self.minor}.{self.patch}" + + def __eq__(self, other: object): + if not isinstance(other, Version): + return NotImplemented + return \ + self.app_kind == other.app_kind and \ + self.major == other.major and \ + self.minor == other.minor and \ + self.patch == other.patch + + @classmethod + def from_bytes(cls, raw: bytes) -> 'Version': + """Create a version from bytes.""" + (app_kind, major, minor, patch) = unpack(' str: return self.name -class AppKind(IntEnum): - """Class representing the kind of app.""" - - WALLET = 0x00 - BAKING = 0x01 - - def __str__(self) -> str: - return self.name MAX_APDU_SIZE: int = 235 From 0a666f36796cad54abab95c47327da7ad9e256fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 8 Nov 2024 17:05:45 +0100 Subject: [PATCH 05/12] [test] use ThreadPool instead of Process for parallelism This allow a better error handling for send-and-navigate --- tests/integration/nano/utils/app.py | 56 ++++++++++++++++------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index 4f61df0f9..58fc39fad 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -18,10 +18,10 @@ from contextlib import contextmanager from enum import Enum from io import BytesIO -from multiprocessing import Process, Queue +from multiprocessing.pool import ThreadPool from pathlib import Path import time -from typing import Callable, Generator, List, Optional, Union +from typing import Callable, Generator, List, Optional, TypeVar, Union import requests from ragger.backend import SpeculosBackend @@ -48,28 +48,36 @@ def with_retry(f, attempts=MAX_ATTEMPTS): # Give plenty of time for speculos to update - can take a long time on CI machines time.sleep(0.5) -def run_simultaneously(processes: List[Process]) -> None: - """Executes multiples process at the same time.""" - - for process in processes: - process.start() - - for process in processes: - process.join() - assert process.exitcode == 0, "Should have terminate successfully" - -def send_and_navigate(send: Callable[[], bytes], navigate: Callable[[], None]) -> bytes: - """Sends APDU and navigates.""" - - def _send(result_queue: Queue) -> None: - res = send() - result_queue.put(res) - - result_queue: Queue = Queue() - send_process = Process(target=_send, args=(result_queue,)) - navigate_process = Process(target=navigate) - run_simultaneously([navigate_process, send_process]) - return result_queue.get() +RESPONSE = TypeVar('RESPONSE') + +def send_and_navigate( + send: Callable[[], RESPONSE], + navigate: Callable[[], None], + timeout: float = 300.0 +) -> RESPONSE: + """Sends a request and navigates before receiving a response.""" + + with ThreadPool(processes=2) as pool: + + t = 0.0 + send_res = pool.apply_async(send) + navigate_res = pool.apply_async(navigate) + + while True: + if send_res.ready(): + result = send_res.get() + navigate_res.get() + break + if navigate_res.ready(): + navigate_res.get() + result = send_res.get() + break + time.sleep(0.1) + t += 0.1 + if timeout is not None and timeout < t: + raise TimeoutError("Timeout waiting for Send and Navigate") + + return result class SpeculosTezosBackend(TezosBackend, SpeculosBackend): """Class representing Tezos app running on Speculos.""" From 944208e785ddc1fe1a5930317c03b735cb3b66b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 27 Nov 2024 16:05:49 +0100 Subject: [PATCH 06/12] [test] check `StatusCode` outside of `send_and_navigate` --- tests/integration/nano/test_public_key.py | 4 +- .../operations/test_sign_transaction.py | 23 ++-- .../nano/test_sign/test_blindsign.py | 51 ++++----- .../nano/test_sign/test_parsing_errors.py | 25 +++-- tests/integration/nano/test_wrong_apdu.py | 40 +++---- tests/integration/nano/utils/app.py | 102 +++--------------- tests/integration/nano/utils/backend.py | 18 +++- 7 files changed, 106 insertions(+), 157 deletions(-) diff --git a/tests/integration/nano/test_public_key.py b/tests/integration/nano/test_public_key.py index 12a614fd9..b3dd49ea1 100644 --- a/tests/integration/nano/test_public_key.py +++ b/tests/integration/nano/test_public_key.py @@ -22,6 +22,7 @@ from utils.account import Account, PublicKey, SigType from utils.app import Screen, TezosAppScreen, DEFAULT_ACCOUNT +from utils.backend import StatusCode accounts = [ Account("m/44'/1729'/0'/0'", @@ -71,6 +72,7 @@ def test_reject_pk(app: TezosAppScreen, snapshot_dir: Path): app.assert_screen(Screen.HOME) - app.reject_public_key(DEFAULT_ACCOUNT, snapshot_dir) + with StatusCode.REJECT.expected(): + app.reject_public_key(DEFAULT_ACCOUNT, snapshot_dir) app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_transaction.py b/tests/integration/nano/test_sign/operations/test_sign_transaction.py index daa2b2089..fa0b95c8d 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transaction.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transaction.py @@ -68,10 +68,11 @@ def test_reject_transaction(app: TezosAppScreen, snapshot_dir: Path): parameter = [{'prim':'pair','args':[{'string':"["},{'prim':'pair','args':[{'string':"Z"},{'prim':'pair','args':[{'string':"Y"},{'prim':'pair','args':[{'string':"X"},{'prim':'pair','args':[{'string':"W"},{'prim':'pair','args':[{'string':"V"},{'prim':'pair','args':[{'string':"U"},{'prim':'pair','args':[{'string':"T"},{'prim':'pair','args':[{'string':"S"},{'prim':'pair','args':[{'string':"R"},{'prim':'pair','args':[{'string':"Q"},{'prim':'pair','args':[{'string':"P"},{'prim':'pair','args':[{'string':"O"},{'prim':'pair','args':[{'string':"N"},{'prim':'pair','args':[{'string':"M"},{'prim':'pair','args':[{'string':"L"},{'prim':'pair','args':[{'string':"K"},{'prim':'pair','args':[{'string':"J"},{'prim':'pair','args':[{'string':"I"},{'prim':'pair','args':[{'string':"H"},{'prim':'pair','args':[{'string':"G"},{'prim':'pair','args':[{'string':"F"},{'prim':'pair','args':[{'string':"E"},{'prim':'pair','args':[{'string':"D"},{'prim':'pair','args':[{'string':"C"},{'prim':'pair','args':[{'string':"B"},[]]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{'prim':'pair','args':[{'int':10},{'prim':'pair','args':[{'int':9},{'prim':'pair','args':[{'int':8},{'prim':'pair','args':[{'int':7},{'prim':'pair','args':[{'int':6},{'prim':'pair','args':[{'int':5},{'prim':'pair','args':[{'int':4},{'prim':'pair','args':[{'int':3},{'prim':'pair','args':[{'int':2},{'prim':'pair','args':[{'int':1},[]]}]}]}]}]}]}]}]}]}]}] ) - app.reject_signing(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=snapshot_dir) + with StatusCode.REJECT.expected(): + app.reject_signing(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=snapshot_dir) app.quit() @@ -119,13 +120,13 @@ def test_too_complex_transaction(app: TezosAppScreen, snapshot_dir: Path): parameter = {'prim': 'CAR'} ) - app._failing_signing(DEFAULT_ACCOUNT, - message, - with_hash=True, - navigate=(lambda: app.navigate_until_text( - ScreenText.BACK_HOME, - snapshot_dir)), - status_code=StatusCode.REJECT) + with StatusCode.REJECT.expected(): + app._sign( + DEFAULT_ACCOUNT, + message, + with_hash=True, + navigate=lambda: app.navigate_until_text(ScreenText.BACK_HOME, snapshot_dir) + ) app.quit() diff --git a/tests/integration/nano/test_sign/test_blindsign.py b/tests/integration/nano/test_sign/test_blindsign.py index d62ba2a7d..96bd3d527 100644 --- a/tests/integration/nano/test_sign/test_blindsign.py +++ b/tests/integration/nano/test_sign/test_blindsign.py @@ -76,14 +76,13 @@ def _reject_too_long( app.setup_expert_mode() app.setup_blindsign_on() - app._failing_signing( - DEFAULT_ACCOUNT, - message, - with_hash=True, - navigate=navigate, - status_code=status_code) - - app.quit() + with status_code.expected(): + app._sign( + DEFAULT_ACCOUNT, + message, + with_hash=True, + navigate=navigate + ) ### Too long operation ### @@ -432,10 +431,13 @@ def test_blindsign_reject_from_clear(app: TezosAppScreen, snapshot_dir: Path): expression = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) - app.parsing_error_signing(DEFAULT_ACCOUNT, - expression, - with_hash=False, - path=snapshot_dir) + with StatusCode.PARSE_ERROR.expected(): + app.reject_signing( + DEFAULT_ACCOUNT, + expression, + with_hash=False, + path=snapshot_dir + ) app.quit() @@ -444,23 +446,16 @@ def test_blindsign_reject_from_blind(app: TezosAppScreen, snapshot_dir: Path): expression = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) - def expected_failure_send() -> bytes: - with app.expect_apdu_failure(StatusCode.REJECT): - app.backend.sign(DEFAULT_ACCOUNT, expression, with_hash=False) - return b'' - def navigate() -> None: - app.navigate_until_text( - ScreenText.ACCEPT_RISK, - snapshot_dir / "clear" + app.navigate_until_text(ScreenText.ACCEPT_RISK, snapshot_dir / "clear") + app.navigate_until_text(ScreenText.SIGN_REJECT, snapshot_dir / "blind") + + with StatusCode.REJECT.expected(): + app._sign( + DEFAULT_ACCOUNT, + expression, + with_hash=False, + navigate=navigate ) - app.navigate_until_text( - ScreenText.SIGN_REJECT, - snapshot_dir / "blind" - ) - - send_and_navigate( - send=expected_failure_send, - navigate=navigate) app.quit() diff --git a/tests/integration/nano/test_sign/test_parsing_errors.py b/tests/integration/nano/test_sign/test_parsing_errors.py index 2a9929d2a..ee1929baa 100755 --- a/tests/integration/nano/test_sign/test_parsing_errors.py +++ b/tests/integration/nano/test_sign/test_parsing_errors.py @@ -20,7 +20,7 @@ import pytest -from utils.app import Screen, TezosAppScreen, DEFAULT_ACCOUNT +from utils.app import ScreenText, TezosAppScreen, DEFAULT_ACCOUNT from utils.backend import StatusCode from utils.message import RawMessage @@ -58,10 +58,13 @@ def test_parsing_error(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): app.setup_expert_mode() - app.parsing_error_signing(DEFAULT_ACCOUNT, - RawMessage(raw_msg), - with_hash=True, - path=snapshot_dir) + with StatusCode.PARSE_ERROR.expected(): + app.reject_signing( + DEFAULT_ACCOUNT, + RawMessage(raw_msg), + with_hash=True, + path=snapshot_dir + ) app.quit() @@ -78,10 +81,12 @@ def test_parsing_hard_fail(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path app.setup_expert_mode() - app.hard_failing_signing(DEFAULT_ACCOUNT, - RawMessage(raw_msg), - with_hash=True, - status_code=StatusCode.UNEXPECTED_SIGN_STATE, - path=snapshot_dir) + with StatusCode.UNEXPECTED_SIGN_STATE.expected(): + app._sign( + DEFAULT_ACCOUNT, + RawMessage(raw_msg), + with_hash=True, + navigate=lambda: app.navigate_until_text(ScreenText.HOME, snapshot_dir) + ) app.quit() diff --git a/tests/integration/nano/test_wrong_apdu.py b/tests/integration/nano/test_wrong_apdu.py index f601532bd..6c7e81115 100644 --- a/tests/integration/nano/test_wrong_apdu.py +++ b/tests/integration/nano/test_wrong_apdu.py @@ -31,7 +31,8 @@ def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Pat app.setup_expert_mode() - app.reject_public_key(DEFAULT_ACCOUNT, snapshot_dir / "reject_public_key") + with StatusCode.REJECT.expected(): + app.reject_public_key(DEFAULT_ACCOUNT, snapshot_dir / "reject_public_key") app.assert_screen(Screen.HOME) @@ -47,10 +48,11 @@ def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Pat parameter = [{'prim':'pair','args':[{'string':"["},{'prim':'pair','args':[{'string':"Z"},{'prim':'pair','args':[{'string':"Y"},{'prim':'pair','args':[{'string':"X"},{'prim':'pair','args':[{'string':"W"},{'prim':'pair','args':[{'string':"V"},{'prim':'pair','args':[{'string':"U"},{'prim':'pair','args':[{'string':"T"},{'prim':'pair','args':[{'string':"S"},{'prim':'pair','args':[{'string':"R"},{'prim':'pair','args':[{'string':"Q"},{'prim':'pair','args':[{'string':"P"},{'prim':'pair','args':[{'string':"O"},{'prim':'pair','args':[{'string':"N"},{'prim':'pair','args':[{'string':"M"},{'prim':'pair','args':[{'string':"L"},{'prim':'pair','args':[{'string':"K"},{'prim':'pair','args':[{'string':"J"},{'prim':'pair','args':[{'string':"I"},{'prim':'pair','args':[{'string':"H"},{'prim':'pair','args':[{'string':"G"},{'prim':'pair','args':[{'string':"F"},{'prim':'pair','args':[{'string':"E"},{'prim':'pair','args':[{'string':"D"},{'prim':'pair','args':[{'string':"C"},{'prim':'pair','args':[{'string':"B"},[]]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{'prim':'pair','args':[{'int':10},{'prim':'pair','args':[{'int':9},{'prim':'pair','args':[{'int':8},{'prim':'pair','args':[{'int':7},{'prim':'pair','args':[{'int':6},{'prim':'pair','args':[{'int':5},{'prim':'pair','args':[{'int':4},{'prim':'pair','args':[{'int':3},{'prim':'pair','args':[{'int':2},{'prim':'pair','args':[{'int':1},[]]}]}]}]}]}]}]}]}]}]}] ) - app.reject_signing(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=snapshot_dir / "reject_signing") + with StatusCode.REJECT.expected(): + app.reject_signing(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=snapshot_dir / "reject_signing") app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) @@ -75,7 +77,7 @@ def test_change_sign_instruction(app: TezosAppScreen): app.backend._ask_sign(Ins.SIGN_WITH_HASH, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.INVALID_INS): + with StatusCode.INVALID_INS.expected(): app.backend._continue_sign(Ins.SIGN, payload, last=True) @@ -84,7 +86,7 @@ def test_change_sign_instruction(app: TezosAppScreen): app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.INVALID_INS): + with StatusCode.INVALID_INS.expected(): app.backend._continue_sign(Ins.SIGN_WITH_HASH, payload, last=True) @@ -97,37 +99,37 @@ def test_mixing_command(app: TezosAppScreen): app.assert_screen(Screen.HOME) app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + with StatusCode.UNEXPECTED_STATE.expected(): app.backend.version() app.assert_screen(Screen.HOME) app.backend._ask_sign(Ins.SIGN_WITH_HASH, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + with StatusCode.UNEXPECTED_STATE.expected(): app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) app.assert_screen(Screen.HOME) app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + with StatusCode.UNEXPECTED_STATE.expected(): app.backend._ask_sign(Ins.SIGN_WITH_HASH, DEFAULT_ACCOUNT) app.assert_screen(Screen.HOME) app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + with StatusCode.UNEXPECTED_STATE.expected(): app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=True) app.assert_screen(Screen.HOME) app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + with StatusCode.UNEXPECTED_STATE.expected(): app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) app.assert_screen(Screen.HOME) app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + with StatusCode.UNEXPECTED_STATE.expected(): app.backend.git() app.quit() @@ -139,7 +141,7 @@ def test_wrong_index(app: TezosAppScreen, ins: Ins, index: Index): app.assert_screen(Screen.HOME) - with app.expect_apdu_failure(StatusCode.WRONG_PARAM): + with StatusCode.WRONG_PARAM.expected(): app.backend._exchange(ins, index=index, sig_type=DEFAULT_ACCOUNT.sig_type, @@ -169,7 +171,7 @@ def test_wrong_derivation_type(app: TezosAppScreen, sender: Callable[[TezosAppSc app.assert_screen(Screen.HOME) - with app.expect_apdu_failure(StatusCode.WRONG_PARAM): + with StatusCode.WRONG_PARAM.expected(): sender(app, account) app.quit() @@ -220,7 +222,7 @@ def test_wrong_derivation_path( app.assert_screen(Screen.HOME) - with app.expect_apdu_failure(StatusCode.WRONG_LENGTH_FOR_INS): + with StatusCode.WRONG_LENGTH_FOR_INS.expected(): sender(app, account) app.quit() @@ -237,7 +239,7 @@ def test_wrong_class(app: TezosAppScreen, class_: int): int(SigType.ED25519).to_bytes(1, 'big') + \ int(0x00).to_bytes(1, 'big') - with app.expect_apdu_failure(StatusCode.CLASS): + with StatusCode.CLASS.expected(): app.backend.exchange_raw(raw) app.quit() @@ -262,7 +264,7 @@ def test_wrong_apdu_length(app: TezosAppScreen, size: int, data: bytes): size.to_bytes(1, 'big') + \ data - with app.expect_apdu_failure(StatusCode.WRONG_LENGTH_FOR_INS): + with StatusCode.WRONG_LENGTH_FOR_INS.expected(): app.backend.exchange_raw(raw) app.quit() @@ -289,7 +291,7 @@ def test_unimplemented_commands(app: TezosAppScreen, ins: Union[int, Ins]): app.assert_screen(Screen.HOME) - with app.expect_apdu_failure(StatusCode.INVALID_INS): + with StatusCode.INVALID_INS.expected(): app.backend._exchange(ins) app.quit() diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index 58fc39fad..2b3014561 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -15,22 +15,20 @@ """Tezos app backend.""" -from contextlib import contextmanager from enum import Enum from io import BytesIO from multiprocessing.pool import ThreadPool from pathlib import Path import time -from typing import Callable, Generator, List, Optional, TypeVar, Union +from typing import Callable, List, Optional, TypeVar, Union import requests from ragger.backend import SpeculosBackend -from ragger.error import ExceptionRAPDU from ragger.navigator import NavInsID, NanoNavigator from .message import Message from .account import Account, SigType -from .backend import StatusCode, TezosBackend +from .backend import TezosBackend MAX_ATTEMPTS = 50 @@ -272,34 +270,9 @@ def navigate_until_text(self, text: ScreenText, path: Union[str, Path]) -> None: test_case_name=path, screen_change_after_last_instruction=False) - @contextmanager - def expect_apdu_failure(self, code: StatusCode) -> Generator[None, None, None]: - """Expect the body to fail with code.""" - try: - yield - assert False, f"Expect fail with { code } but succeed" - except ExceptionRAPDU as e: - failing_code = StatusCode(e.status) - assert code == failing_code, \ - f"Expect fail with { code.name } but fail with { failing_code.name }" - - def _failing_send(self, - send: Callable[[], bytes], - navigate: Callable[[], None], - status_code: StatusCode) -> None: - """Expect that send and navigates fails with status_code.""" - def expected_failure_send() -> bytes: - with self.expect_apdu_failure(status_code): - send() - return b'' - - send_and_navigate( - send=expected_failure_send, - navigate=navigate) - def provide_public_key(self, - account: Account, - path: Union[str, Path]) -> bytes: + account: Account, + path: Union[str, Path]) -> bytes: """Get the account's public key from the app after approving it.""" return send_and_navigate( send=lambda: self.backend.get_public_key(account, with_prompt=True), @@ -307,14 +280,11 @@ def provide_public_key(self, def reject_public_key(self, account: Account, - path: Union[str, Path]) -> None: + path: Union[str, Path]) -> bytes: """Reject the account's public key.""" - self._failing_send( - send=(lambda: self.backend.get_public_key(account, with_prompt=True)), - navigate=(lambda: self.navigate_until_text( - ScreenText.PUBLIC_KEY_REJECT, - path)), - status_code=StatusCode.REJECT) + return send_and_navigate( + send=lambda: self.backend.get_public_key(account, with_prompt=True), + navigate=lambda: self.navigate_until_text(ScreenText.PUBLIC_KEY_REJECT, path)) def _sign(self, account: Account, @@ -351,65 +321,23 @@ def navigate() -> None: self.navigate_until_text(ScreenText.ACCEPT_RISK, path / "clear") self.navigate_until_text(ScreenText.SIGN_ACCEPT, path / "blind") - return send_and_navigate( - send=(lambda: self.backend.sign(account, message, with_hash)), + return self._sign( + account, + message, + with_hash, navigate=navigate) - def _failing_signing(self, - account: Account, - message: Message, - with_hash: bool, - navigate: Callable[[], None], - status_code: StatusCode) -> None: - """Expect requests signing and navigate fails with status_code.""" - self._failing_send( - send=(lambda: self.backend.sign(account, message, with_hash)), - navigate=navigate, - status_code=status_code) - def reject_signing(self, account: Account, message: Message, with_hash: bool, - path: Union[str, Path]) -> None: + path: Union[str, Path]) -> bytes: """Request and reject signing the message.""" - self._failing_signing( + return self._sign( account, message, with_hash, - navigate=(lambda: self.navigate_until_text( - ScreenText.SIGN_REJECT, - path)), - status_code=StatusCode.REJECT) - - def hard_failing_signing(self, - account: Account, - message: Message, - with_hash: bool, - status_code: StatusCode, - path: Union[str, Path]) -> None: - """Expect the signing request to hard fail.""" - self._failing_signing(account, - message, - with_hash, - navigate=(lambda: self.navigate_until_text( - ScreenText.HOME, - path)), - status_code=status_code) - - def parsing_error_signing(self, - account: Account, - message: Message, - with_hash: bool, - path: Union[str, Path]) -> None: - """Expect the signing request to fail with parsing error.""" - self._failing_signing(account, - message, - with_hash, - navigate=(lambda: self.navigate_until_text( - ScreenText.SIGN_REJECT, - path)), - status_code=StatusCode.PARSE_ERROR) + navigate=lambda: self.navigate_until_text(ScreenText.SIGN_REJECT, path)) DEFAULT_SEED = 'zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra' diff --git a/tests/integration/nano/utils/backend.py b/tests/integration/nano/utils/backend.py index c59b87023..4912226ae 100644 --- a/tests/integration/nano/utils/backend.py +++ b/tests/integration/nano/utils/backend.py @@ -14,9 +14,10 @@ """Tezos app backend.""" +from contextlib import contextmanager from enum import IntEnum from struct import unpack -from typing import Union +from typing import Generator, Union from ragger.backend.interface import BackendInterface, RAPDU from ragger.error import ExceptionRAPDU @@ -137,6 +138,21 @@ class StatusCode(IntEnum): def __str__(self) -> str: return self.name + @contextmanager + def expected(self) -> Generator[None, None, None]: + """Fail if the right RAPDU code exception is not raise.""" + try: + yield + assert self == StatusCode.OK, \ + f"Expect fail with {self} but succeed" + except ExceptionRAPDU as e: + try: + status = f"{StatusCode(e.status)}" + except ValueError: + status = f"0x{e.status:x}" + assert self == e.status, \ + f"Expect fail with {self} but fail with {status}" + MAX_APDU_SIZE: int = 235 From 03a861b52bc84f33900930e8450aa9b524a056b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 28 Nov 2024 17:26:53 +0100 Subject: [PATCH 07/12] [test] allowing to custom `navigate` function navigation functions --- tests/integration/nano/test_public_key.py | 4 +- .../test_sign/operations/test_sign_ballot.py | 2 +- .../test_sign_batched_operations.py | 6 +- .../operations/test_sign_delegation.py | 2 +- .../operations/test_sign_failing_noop.py | 2 +- .../test_sign_increase_paid_storage.py | 2 +- .../operations/test_sign_origination.py | 2 +- .../operations/test_sign_proposals.py | 2 +- .../test_sign_register_global_constant.py | 2 +- .../test_sign/operations/test_sign_reveal.py | 2 +- .../test_sign_sc_rollup_add_messages.py | 2 +- ...t_sign_sc_rollup_execute_outbox_message.py | 2 +- .../test_sign_sc_rollup_originate.py | 2 +- .../operations/test_sign_set_consensus_key.py | 2 +- .../operations/test_sign_set_deposit_limit.py | 2 +- .../operations/test_sign_transaction.py | 22 +-- .../operations/test_sign_transfer_ticket.py | 4 +- .../nano/test_sign/test_apdu_sign.py | 9 +- .../nano/test_sign/test_blindsign.py | 157 +++++++++++------- tests/integration/nano/test_sign/test_key.py | 4 +- .../nano/test_sign/test_parsing_errors.py | 9 +- tests/integration/nano/test_wrong_apdu.py | 4 +- tests/integration/nano/utils/app.py | 151 +++++++++-------- 23 files changed, 221 insertions(+), 175 deletions(-) diff --git a/tests/integration/nano/test_public_key.py b/tests/integration/nano/test_public_key.py index b3dd49ea1..a8faa6b70 100644 --- a/tests/integration/nano/test_public_key.py +++ b/tests/integration/nano/test_public_key.py @@ -59,7 +59,7 @@ def test_provide_pk(app: TezosAppScreen, account: Account, snapshot_dir: Path): expected_public_key = account.key.public_key() - data = app.provide_public_key(account, snapshot_dir) + data = app.provide_public_key(account, snap_path=snapshot_dir) public_key = PublicKey.from_bytes(data, account.sig_type) @@ -73,6 +73,6 @@ def test_reject_pk(app: TezosAppScreen, snapshot_dir: Path): app.assert_screen(Screen.HOME) with StatusCode.REJECT.expected(): - app.reject_public_key(DEFAULT_ACCOUNT, snapshot_dir) + app.reject_public_key(DEFAULT_ACCOUNT, snap_path=snapshot_dir) app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_ballot.py b/tests/integration/nano/test_sign/operations/test_sign_ballot.py index ae1e382be..07b3d381d 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_ballot.py +++ b/tests/integration/nano/test_sign/operations/test_sign_ballot.py @@ -36,7 +36,7 @@ def test_sign_ballot(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py index c3ec5d4c8..3f436c84e 100644 --- a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py +++ b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py @@ -60,7 +60,7 @@ def test_nanos_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -101,7 +101,7 @@ def test_nanox_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -144,7 +144,7 @@ def test_sign_complex_operation(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_delegation.py b/tests/integration/nano/test_sign/operations/test_sign_delegation.py index db6dd9095..734124de1 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_delegation.py +++ b/tests/integration/nano/test_sign/operations/test_sign_delegation.py @@ -38,7 +38,7 @@ def test_sign_delegation(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py index ca63d3d3b..5de07bac5 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py +++ b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py @@ -31,7 +31,7 @@ def test_sign_failing_noop(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py index d4b801bc0..1c9770a29 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py +++ b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py @@ -39,7 +39,7 @@ def test_sign_increase_paid_storage(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_origination.py b/tests/integration/nano/test_sign/operations/test_sign_origination.py index 0d277c52f..8a70acbf2 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_origination.py +++ b/tests/integration/nano/test_sign/operations/test_sign_origination.py @@ -40,7 +40,7 @@ def test_sign_origination(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_proposals.py b/tests/integration/nano/test_sign/operations/test_sign_proposals.py index 251d19f70..b6a27a0ff 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_proposals.py +++ b/tests/integration/nano/test_sign/operations/test_sign_proposals.py @@ -38,7 +38,7 @@ def test_sign_proposals(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py index b900cca7d..3f01d24db 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py +++ b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py @@ -38,7 +38,7 @@ def test_sign_register_global_constant(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_reveal.py b/tests/integration/nano/test_sign/operations/test_sign_reveal.py index 603c30558..d7297975a 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_reveal.py +++ b/tests/integration/nano/test_sign/operations/test_sign_reveal.py @@ -38,7 +38,7 @@ def test_sign_reveal(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py index 34059ea1b..0b226eab2 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py @@ -38,7 +38,7 @@ def test_sign_sc_rollup_add_messages(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py index 6a4060f0f..d4b733f31 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py @@ -40,7 +40,7 @@ def test_sign_sc_rollup_execute_outbox_message(app: TezosAppScreen, snapshot_dir data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py index 106474fc5..f1ecb1e7c 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py @@ -61,7 +61,7 @@ def test_sign_sc_rollup_originate(app: TezosAppScreen, whitelist: Optional[List[ data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py index f0c423355..d5669275e 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py @@ -38,7 +38,7 @@ def test_sign_set_consensus_key(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py index b8eb75328..c1487a9fa 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py @@ -38,7 +38,7 @@ def test_sign_set_deposit_limit(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_transaction.py b/tests/integration/nano/test_sign/operations/test_sign_transaction.py index fa0b95c8d..6f8be63b5 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transaction.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transaction.py @@ -42,7 +42,7 @@ def test_sign_transaction(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -72,7 +72,7 @@ def test_reject_transaction(app: TezosAppScreen, snapshot_dir: Path): app.reject_signing(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) app.quit() @@ -94,7 +94,7 @@ def test_sign_simple_transaction(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -121,11 +121,11 @@ def test_too_complex_transaction(app: TezosAppScreen, snapshot_dir: Path): ) with StatusCode.REJECT.expected(): - app._sign( + app.sign( DEFAULT_ACCOUNT, message, with_hash=True, - navigate=lambda: app.navigate_until_text(ScreenText.BACK_HOME, snapshot_dir) + navigate=lambda: app.navigate_review(text=ScreenText.BACK_HOME, snap_path=snapshot_dir) ) app.quit() @@ -149,7 +149,7 @@ def test_sign_stake_transaction(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -177,7 +177,7 @@ def test_sign_unstake_transaction(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -205,7 +205,7 @@ def test_sign_finalize_unstake_transaction(app: TezosAppScreen, snapshot_dir: Pa data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -242,7 +242,7 @@ def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, snapshot_ data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -271,7 +271,7 @@ def test_sign_with_long_hash(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -300,7 +300,7 @@ def test_ensure_always_clearsign(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py index 77c118a32..7e4b66543 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py @@ -43,7 +43,7 @@ def test_sign_transfer_ticket(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -75,7 +75,7 @@ def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, snapshot_ data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/test_apdu_sign.py b/tests/integration/nano/test_sign/test_apdu_sign.py index 0df428625..7037905bf 100644 --- a/tests/integration/nano/test_sign/test_apdu_sign.py +++ b/tests/integration/nano/test_sign/test_apdu_sign.py @@ -20,7 +20,7 @@ from conftest import requires_device from utils.account import Account -from utils.app import send_and_navigate, Screen, ScreenText, TezosAppScreen, DEFAULT_ACCOUNT +from utils.app import send_and_navigate, Screen, TezosAppScreen, DEFAULT_ACCOUNT from utils.message import Message, MichelineExpr, Transaction def test_sign_micheline_without_hash(app: TezosAppScreen, snapshot_dir: Path): @@ -33,7 +33,7 @@ def test_sign_micheline_without_hash(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(DEFAULT_ACCOUNT, message, with_hash=False, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, @@ -56,7 +56,8 @@ def check_sign_with_small_packet( data = send_and_navigate( send=lambda: app.backend.sign(account, message, apdu_size=10), - navigate=lambda: app.navigate_until_text(ScreenText.SIGN_ACCEPT, path)) + navigate=lambda: app.navigate_sign_accept(snap_path=path) + ) account.check_signature( message=message, @@ -93,7 +94,7 @@ def test_nanosp_regression_press_right_works_across_apdu_recieves(app: TezosAppS data = app.sign(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) DEFAULT_ACCOUNT.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/test_blindsign.py b/tests/integration/nano/test_sign/test_blindsign.py index 96bd3d527..77c240e11 100644 --- a/tests/integration/nano/test_sign/test_blindsign.py +++ b/tests/integration/nano/test_sign/test_blindsign.py @@ -42,7 +42,7 @@ def _sign_too_long(app: TezosAppScreen, app.setup_expert_mode() app.setup_blindsign_on() - data = app._sign( + data = app.sign( DEFAULT_ACCOUNT, message, with_hash=True, @@ -61,8 +61,11 @@ def _sign_decodable_too_long(app: TezosAppScreen, """Sign a decodable too long message""" def navigate() -> None: - app.navigate_until_text(ScreenText.ACCEPT_RISK, path / "clear_n_too_long_warning") - app.navigate_until_text(ScreenText.SIGN_ACCEPT, path / "summary") + app.navigate_review( + text=ScreenText.ACCEPT_RISK, + snap_path=path / "clear_n_too_long_warning" + ) + app.navigate_sign_accept(snap_path=path / "summary") _sign_too_long(app, message, navigate) @@ -77,7 +80,7 @@ def _reject_too_long( app.setup_blindsign_on() with status_code.expected(): - app._sign( + app.sign( DEFAULT_ACCOUNT, message, with_hash=True, @@ -162,7 +165,9 @@ def test_reject_basic_too_long_operation_at_warning(app: TezosAppScreen, snapsho """Check reject too long operation at warning""" def navigate() -> None: - app.navigate_until_text(ScreenText.SIGN_REJECT, snapshot_dir / "clear_n_too_long_warning") + app.navigate_sign_reject( + snap_path=snapshot_dir / "clear_n_too_long_warning" + ) _reject_too_long(app, BASIC_OPERATION, StatusCode.REJECT, navigate) @@ -170,8 +175,13 @@ def test_reject_basic_too_long_operation_at_summary(app: TezosAppScreen, snapsho """Check reject too long operation at summary""" def navigate() -> None: - app.navigate_until_text(ScreenText.ACCEPT_RISK, snapshot_dir / "clear_n_too_long_warning") - app.navigate_until_text(ScreenText.SIGN_REJECT, snapshot_dir / "summary") + app.navigate_review( + text=ScreenText.ACCEPT_RISK, + snap_path=snapshot_dir / "clear_n_too_long_warning" + ) + app.navigate_sign_reject( + snap_path=snapshot_dir / "summary" + ) _reject_too_long(app, BASIC_OPERATION, StatusCode.REJECT, navigate) @@ -325,8 +335,13 @@ def test_sign_too_long_operation_with_too_large(app: TezosAppScreen, snapshot_di """Check sign too long operation that will also fail the parsing""" def navigate() -> None: - app.navigate_until_text(ScreenText.ACCEPT_RISK, snapshot_dir / "clear_n_too_large_warning") - app.navigate_until_text(ScreenText.SIGN_ACCEPT, snapshot_dir / "blindsigning") + app.navigate_review( + text=ScreenText.ACCEPT_RISK, + snap_path=snapshot_dir / "clear_n_too_large_warning" + ) + app.navigate_sign_accept( + snap_path=snapshot_dir / "blindsigning" + ) _sign_too_long(app, OPERATION_WITH_TOO_LARGE, navigate) @@ -334,7 +349,9 @@ def test_reject_too_long_operation_with_too_large_at_too_large_warning(app: Tezo """Check reject too long operation that will also fail the parsing at too large warning""" def navigate() -> None: - app.navigate_until_text(ScreenText.SIGN_REJECT, snapshot_dir / "clear_n_too_large_warning") + app.navigate_sign_reject( + snap_path=snapshot_dir / "clear_n_too_large_warning" + ) _reject_too_long(app, OPERATION_WITH_TOO_LARGE, StatusCode.PARSE_ERROR, navigate) @@ -342,8 +359,13 @@ def test_reject_too_long_operation_with_too_large_at_blindsigning(app: TezosAppS """Check reject too long operation that will also fail the parsing at blindsigning""" def navigate() -> None: - app.navigate_until_text(ScreenText.ACCEPT_RISK, snapshot_dir / "clear_n_too_large_warning") - app.navigate_until_text(ScreenText.SIGN_REJECT, snapshot_dir / "blindsigning") + app.navigate_review( + text=ScreenText.ACCEPT_RISK, + snap_path=snapshot_dir / "clear_n_too_large_warning" + ) + app.navigate_sign_reject( + snap_path=snapshot_dir / "blindsigning" + ) _reject_too_long(app, OPERATION_WITH_TOO_LARGE, StatusCode.REJECT, navigate) @@ -354,51 +376,42 @@ def test_blindsign_too_deep(app: TezosAppScreen, snapshot_dir: Path): expression = MichelineExpr([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{'int':42}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]) - if app.backend.firmware.device == "nanos": - def send(result_queue: Queue) -> None: - res = app.backend.sign(DEFAULT_ACCOUNT, expression, with_hash=True) - result_queue.put(res) - def assert_screen_i(i): - app.assert_screen(f"{str(i).zfill(5)}", snapshot_dir / "clear") - - result_queue: Queue = Queue() - send_process = Process(target=send, args=(result_queue,)) - send_process.start() - - app.backend.wait_for_text_not_on_screen(ScreenText.HOME) - - for i in range(6): - # 'Review operation' - # 'Expression {{{...{{{' - # 'Expression {{{...{{{' - # 'The transaction cannot be trusted.' - # 'Parsing error ERR_TOO_DEEP' - # 'Learn More: bit.ly/ledger-tez' - assert_screen_i(i) - app.backend.right_click() - - # 'Accept risk' screen - assert_screen_i(i+1) - - def blind_navigate() -> None: - app.navigate_until_text(ScreenText.SIGN_ACCEPT, snapshot_dir / "blind") - navigate_process = Process(target=blind_navigate) - navigate_process.start() - - app.backend.both_click() - - navigate_process.join() - assert navigate_process.exitcode == 0, "Should have terminate successfully" - - send_process.join() - assert send_process.exitcode == 0, "Should have terminate successfully" + def navigate() -> None: + if app.backend.firmware.device == "nanos": + ### Simulate `navigate_review` up to `ACCEPT_RISK` because the nanos screen can look like it hasn't changed. + + def assert_screen_i(i): + app.assert_screen(f"{str(i).zfill(5)}", snapshot_dir / "clear") + + app.backend.wait_for_text_not_on_screen(ScreenText.HOME) + for i in range(6): + # 'Review operation' + # 'Expression {{{...{{{' + # 'Expression {{{...{{{' + # 'The transaction cannot be trusted.' + # 'Parsing error ERR_TOO_DEEP' + # 'Learn More: bit.ly/ledger-tez' + assert_screen_i(i) + app.backend.right_click() + # 'Accept risk' screen + assert_screen_i(i+1) + app.backend.both_click() + else: + app.navigate_review( + text=ScreenText.ACCEPT_RISK, + snap_path=snapshot_dir / "clear" + ) + + app.navigate_sign_accept( + snap_path=snapshot_dir / "blind" + ) - data = result_queue.get() - else: - data = app.blind_sign(DEFAULT_ACCOUNT, - expression, - with_hash=True, - path=snapshot_dir) + data = app.sign( + DEFAULT_ACCOUNT, + expression, + with_hash=True, + navigate=navigate + ) DEFAULT_ACCOUNT.check_signature( message=expression, @@ -414,10 +427,21 @@ def test_blindsign_too_large(app: TezosAppScreen, snapshot_dir: Path): message = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) - data = app.blind_sign(DEFAULT_ACCOUNT, - message=message, - with_hash=True, - path=snapshot_dir) + def navigate() -> None: + app.navigate_review( + text=ScreenText.ACCEPT_RISK, + snap_path=snapshot_dir / "clear" + ) + app.navigate_sign_accept( + snap_path=snapshot_dir / "blind" + ) + + data = app.sign( + DEFAULT_ACCOUNT, + message, + with_hash=True, + navigate=navigate + ) DEFAULT_ACCOUNT.check_signature( message=message, @@ -436,7 +460,7 @@ def test_blindsign_reject_from_clear(app: TezosAppScreen, snapshot_dir: Path): DEFAULT_ACCOUNT, expression, with_hash=False, - path=snapshot_dir + snap_path=snapshot_dir ) app.quit() @@ -447,11 +471,16 @@ def test_blindsign_reject_from_blind(app: TezosAppScreen, snapshot_dir: Path): expression = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) def navigate() -> None: - app.navigate_until_text(ScreenText.ACCEPT_RISK, snapshot_dir / "clear") - app.navigate_until_text(ScreenText.SIGN_REJECT, snapshot_dir / "blind") + app.navigate_review( + text=ScreenText.ACCEPT_RISK, + snap_path=snapshot_dir / "clear" + ) + app.navigate_sign_reject( + snap_path=snapshot_dir / "blind" + ) with StatusCode.REJECT.expected(): - app._sign( + app.sign( DEFAULT_ACCOUNT, expression, with_hash=False, diff --git a/tests/integration/nano/test_sign/test_key.py b/tests/integration/nano/test_sign/test_key.py index 435b5fb01..35a76bcbf 100644 --- a/tests/integration/nano/test_sign/test_key.py +++ b/tests/integration/nano/test_sign/test_key.py @@ -51,7 +51,7 @@ def test_sign_micheline_basic(app: TezosAppScreen, account: Account, snapshot_di data = app.sign(account, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) account.check_signature( message=message, @@ -91,7 +91,7 @@ def test_sign_with_another_seed(app: TezosAppScreen, snapshot_dir: Path): data = app.sign(account, message, with_hash=True, - path=snapshot_dir) + snap_path=snapshot_dir) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/test_parsing_errors.py b/tests/integration/nano/test_sign/test_parsing_errors.py index ee1929baa..d5062cca0 100755 --- a/tests/integration/nano/test_sign/test_parsing_errors.py +++ b/tests/integration/nano/test_sign/test_parsing_errors.py @@ -63,7 +63,7 @@ def test_parsing_error(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): DEFAULT_ACCOUNT, RawMessage(raw_msg), with_hash=True, - path=snapshot_dir + snap_path=snapshot_dir ) app.quit() @@ -82,11 +82,14 @@ def test_parsing_hard_fail(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path app.setup_expert_mode() with StatusCode.UNEXPECTED_SIGN_STATE.expected(): - app._sign( + app.sign( DEFAULT_ACCOUNT, RawMessage(raw_msg), with_hash=True, - navigate=lambda: app.navigate_until_text(ScreenText.HOME, snapshot_dir) + navigate=lambda: app.navigate_review( + text=ScreenText.HOME, + snap_path=snapshot_dir + ) ) app.quit() diff --git a/tests/integration/nano/test_wrong_apdu.py b/tests/integration/nano/test_wrong_apdu.py index 6c7e81115..1e9a7d1ec 100644 --- a/tests/integration/nano/test_wrong_apdu.py +++ b/tests/integration/nano/test_wrong_apdu.py @@ -32,7 +32,7 @@ def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Pat app.setup_expert_mode() with StatusCode.REJECT.expected(): - app.reject_public_key(DEFAULT_ACCOUNT, snapshot_dir / "reject_public_key") + app.reject_public_key(DEFAULT_ACCOUNT, snap_path=snapshot_dir / "reject_public_key") app.assert_screen(Screen.HOME) @@ -52,7 +52,7 @@ def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Pat app.reject_signing(DEFAULT_ACCOUNT, message, with_hash=True, - path=snapshot_dir / "reject_signing") + snap_path=snapshot_dir / "reject_signing") app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index 2b3014561..6d1cbcb08 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -24,7 +24,7 @@ import requests from ragger.backend import SpeculosBackend -from ragger.navigator import NavInsID, NanoNavigator +from ragger.navigator import NavIns, NavInsID, NanoNavigator from .message import Message from .account import Account, SigType @@ -144,7 +144,7 @@ class TezosAppScreen(): """Class representing Tezos app management.""" backend: SpeculosTezosBackend - path: Path + _root_dir: Path snapshots_dir: Path tmp_snapshots_dir: Path snapshotted: List[str] @@ -155,9 +155,9 @@ def __init__(self, backend: SpeculosTezosBackend, golden_run: bool): self.backend = backend - self.path = Path(__file__).resolve().parent.parent - self.snapshots_dir = self.path / "snapshots" / backend.firmware.name - self.tmp_snapshots_dir = self.path / "snapshots-tmp" / backend.firmware.name + self._root_dir = Path(__file__).resolve().parent.parent + self.snapshots_dir = self._root_dir / "snapshots" / backend.firmware.name + self.tmp_snapshots_dir = self._root_dir / "snapshots-tmp" / backend.firmware.name if not self.snapshots_dir.is_dir() and golden_run: self.snapshots_dir.mkdir(parents=True) if not self.tmp_snapshots_dir.is_dir(): @@ -258,86 +258,99 @@ def quit(self) -> None: self.backend.right_click() self._quit() - def navigate_until_text(self, text: ScreenText, path: Union[str, Path]) -> None: - """Click right until the expected text is displayed, then both click.""" - if isinstance(path, str): - path = Path(path) - self.navigator.\ - navigate_until_text_and_compare(NavInsID.RIGHT_CLICK, - [NavInsID.BOTH_CLICK], - text, - path=self.path, - test_case_name=path, - screen_change_after_last_instruction=False) + def navigate(self, + snap_path: Optional[Path] = None, + screen_change_before_first_instruction: bool = False, + **kwargs) -> None: + """Wrapper of `navigator.navigate_and_compare`""" + self.navigator.navigate_and_compare( + path=self._root_dir, + test_case_name=snap_path, + screen_change_before_first_instruction=screen_change_before_first_instruction, + **kwargs + ) + + def navigate_until_text(self, + snap_path: Optional[Path] = None, + screen_change_before_first_instruction: bool = False, + validation_instructions: List[Union[NavIns, NavInsID]] = [], + **kwargs) -> None: + """Wrapper of `navigator.navigate_until_text_and_compare`""" + self.navigator.navigate_until_text_and_compare( + path=self._root_dir, + test_case_name=snap_path, + screen_change_before_first_instruction=screen_change_before_first_instruction, + validation_instructions=validation_instructions, + **kwargs + ) + + def navigate_forward(self, **kwargs) -> None: + """Navigate forward until the text is found.""" + self.navigate_until_text(navigate_instruction=NavInsID.RIGHT_CLICK, **kwargs) + + def navigate_review(self, + screen_change_before_first_instruction=True, + screen_change_after_last_instruction=False, + **kwargs) -> None: + """Navigate forward until the text is found. Confirm at the end.""" + self.navigate_forward( + validation_instructions=[NavInsID.BOTH_CLICK], + screen_change_before_first_instruction=screen_change_before_first_instruction, + screen_change_after_last_instruction=screen_change_after_last_instruction, + **kwargs + ) def provide_public_key(self, account: Account, - path: Union[str, Path]) -> bytes: - """Get the account's public key from the app after approving it.""" + navigate: Optional[Callable] = None, + **kwargs) -> bytes: + """Send a get public key request and navigate""" + if navigate is None: + def navigate(): + self.navigate_review(text=ScreenText.PUBLIC_KEY_APPROVE, **kwargs) return send_and_navigate( send=lambda: self.backend.get_public_key(account, with_prompt=True), - navigate=lambda: self.navigate_until_text(ScreenText.PUBLIC_KEY_APPROVE, path)) + navigate=navigate + ) - def reject_public_key(self, - account: Account, - path: Union[str, Path]) -> bytes: - """Reject the account's public key.""" - return send_and_navigate( - send=lambda: self.backend.get_public_key(account, with_prompt=True), - navigate=lambda: self.navigate_until_text(ScreenText.PUBLIC_KEY_REJECT, path)) - - def _sign(self, - account: Account, - message: Message, - with_hash: bool, - navigate: Callable[[], None]) -> bytes: - """Requests to sign the message with account and navigates.""" - return send_and_navigate( - send=(lambda: self.backend.sign(account, message, with_hash)), - navigate=navigate) + def reject_public_key(self, account: Account, **kwargs) -> bytes: + """Send a get public key request and navigate in order to reject it""" + def navigate(): + self.navigate_review(text=ScreenText.PUBLIC_KEY_REJECT, **kwargs) + return self.provide_public_key(account, navigate) + + def navigate_sign_accept(self, **kwargs) -> None: + """Navigate through signing flow and accept to sign""" + self.navigate_review(text=ScreenText.SIGN_ACCEPT, **kwargs) def sign(self, account: Account, message: Message, with_hash: bool, - path: Union[str, Path]) -> bytes: - """Sign the message with account.""" - return self._sign( - account, - message, - with_hash, - navigate=lambda: self.navigate_until_text(ScreenText.SIGN_ACCEPT, path)) - - def blind_sign(self, - account: Account, - message: Message, - with_hash: bool, - path: Union[str, Path]) -> bytes: - """Blindsign the message with account.""" - if isinstance(path, str): - path = Path(path) - - def navigate() -> None: - self.navigate_until_text(ScreenText.ACCEPT_RISK, path / "clear") - self.navigate_until_text(ScreenText.SIGN_ACCEPT, path / "blind") - - return self._sign( - account, - message, - with_hash, - navigate=navigate) + navigate: Optional[Callable] = None, + **kwargs) -> bytes: + """Send a sign request and navigate""" + if navigate is None: + def navigate(): + self.navigate_sign_accept(**kwargs) + return send_and_navigate( + send=lambda: self.backend.sign(account, message, with_hash), + navigate=navigate + ) + + def navigate_sign_reject(self, **kwargs) -> None: + """Navigate through signing flow and reject.""" + self.navigate_review(text=ScreenText.SIGN_REJECT, **kwargs) def reject_signing(self, account: Account, message: Message, with_hash: bool, - path: Union[str, Path]) -> bytes: - """Request and reject signing the message.""" - return self._sign( - account, - message, - with_hash, - navigate=lambda: self.navigate_until_text(ScreenText.SIGN_REJECT, path)) + **kwargs) -> None: + """Send a sign request and navigate in order to reject it""" + def navigate(): + self.navigate_sign_reject(**kwargs) + self.sign(account, message, with_hash, navigate) DEFAULT_SEED = 'zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra' From 7e2cbf9509971d7491c411ae4f4636ed1700440c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 28 Nov 2024 08:49:26 +0100 Subject: [PATCH 08/12] [test] remove unnecessary app.assert_screen(HOME) and app.quit() --- tests/integration/nano/test_public_key.py | 4 -- .../test_sign/operations/test_sign_ballot.py | 4 -- .../test_sign_batched_operations.py | 7 --- .../operations/test_sign_delegation.py | 4 -- .../operations/test_sign_failing_noop.py | 4 -- .../test_sign_increase_paid_storage.py | 4 -- .../operations/test_sign_origination.py | 2 - .../operations/test_sign_proposals.py | 4 -- .../test_sign_register_global_constant.py | 2 - .../test_sign/operations/test_sign_reveal.py | 4 -- .../test_sign_sc_rollup_add_messages.py | 4 -- ...t_sign_sc_rollup_execute_outbox_message.py | 2 - .../test_sign_sc_rollup_originate.py | 2 - .../operations/test_sign_set_consensus_key.py | 4 -- .../operations/test_sign_set_deposit_limit.py | 4 -- .../operations/test_sign_transaction.py | 22 ---------- .../operations/test_sign_transfer_ticket.py | 4 -- .../nano/test_sign/test_apdu_sign.py | 12 ----- .../nano/test_sign/test_blindsign.py | 14 ------ tests/integration/nano/test_sign/test_key.py | 6 --- .../nano/test_sign/test_parsing_errors.py | 4 -- tests/integration/nano/test_wrong_apdu.py | 44 +------------------ 22 files changed, 1 insertion(+), 160 deletions(-) diff --git a/tests/integration/nano/test_public_key.py b/tests/integration/nano/test_public_key.py index a8faa6b70..c175568dc 100644 --- a/tests/integration/nano/test_public_key.py +++ b/tests/integration/nano/test_public_key.py @@ -70,9 +70,5 @@ def test_provide_pk(app: TezosAppScreen, account: Account, snapshot_dir: Path): def test_reject_pk(app: TezosAppScreen, snapshot_dir: Path): """Check reject pk behaviour""" - app.assert_screen(Screen.HOME) - with StatusCode.REJECT.expected(): app.reject_public_key(DEFAULT_ACCOUNT, snap_path=snapshot_dir) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_ballot.py b/tests/integration/nano/test_sign/operations/test_sign_ballot.py index 07b3d381d..cc1270013 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_ballot.py +++ b/tests/integration/nano/test_sign/operations/test_sign_ballot.py @@ -24,8 +24,6 @@ def test_sign_ballot(app: TezosAppScreen, snapshot_dir: Path): """Check signing ballot""" - app.assert_screen(Screen.HOME) - message = Ballot( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', proposal = 'ProtoALphaALphaALphaALphaALphaALphaALpha61322gcLUGH', @@ -42,5 +40,3 @@ def test_sign_ballot(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py index 3f436c84e..5d0b2a990 100644 --- a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py +++ b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py @@ -67,8 +67,6 @@ def test_nanos_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, data=data) - app.quit() - @requires_device("nanox") def test_nanox_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): """Check signing batch operation""" @@ -108,12 +106,9 @@ def test_nanox_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, data=data) - app.quit() - def test_sign_complex_operation(app: TezosAppScreen, snapshot_dir: Path): """Check signing complex operation""" - app.assert_screen(Screen.HOME) app.setup_expert_mode() message = OperationGroup([ @@ -150,5 +145,3 @@ def test_sign_complex_operation(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_delegation.py b/tests/integration/nano/test_sign/operations/test_sign_delegation.py index 734124de1..acf55cd50 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_delegation.py +++ b/tests/integration/nano/test_sign/operations/test_sign_delegation.py @@ -24,8 +24,6 @@ def test_sign_delegation(app: TezosAppScreen, snapshot_dir: Path): """Check signing delegation""" - app.assert_screen(Screen.HOME) - message = Delegation( source = 'tz2KC42yW9FXFMJpkUooae2NFYQsM5do3E8H', fee = 200000, @@ -44,5 +42,3 @@ def test_sign_delegation(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py index 5de07bac5..de1233ef6 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py +++ b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py @@ -24,8 +24,6 @@ def test_sign_failing_noop(app: TezosAppScreen, snapshot_dir: Path): """Check signing failing noop""" - app.assert_screen(Screen.HOME) - message = FailingNoop("9f09f2952d34528c733f94615cfc39bc555619fc550dd4a67ba2208ce8e867aa3d13a6ef99dfbe32c6974aa9a2150d21eca29c3349e59c13b9081f1c11b440ac4d3455dedbe4ee0de15a8af620d4c86247d9d132de1bb6da23d5ff9d8dffda22ba9a84") data = app.sign(DEFAULT_ACCOUNT, @@ -37,5 +35,3 @@ def test_sign_failing_noop(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py index 1c9770a29..ade361c0b 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py +++ b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py @@ -24,8 +24,6 @@ def test_sign_increase_paid_storage(app: TezosAppScreen, snapshot_dir: Path): """Check signing increase paid storage""" - app.assert_screen(Screen.HOME) - message = IncreasePaidStorage( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', fee = 10000, @@ -45,5 +43,3 @@ def test_sign_increase_paid_storage(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_origination.py b/tests/integration/nano/test_sign/operations/test_sign_origination.py index 8a70acbf2..05a611bfb 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_origination.py +++ b/tests/integration/nano/test_sign/operations/test_sign_origination.py @@ -46,5 +46,3 @@ def test_sign_origination(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_proposals.py b/tests/integration/nano/test_sign/operations/test_sign_proposals.py index b6a27a0ff..2662a796d 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_proposals.py +++ b/tests/integration/nano/test_sign/operations/test_sign_proposals.py @@ -24,8 +24,6 @@ def test_sign_proposals(app: TezosAppScreen, snapshot_dir: Path): """Check signing proposals""" - app.assert_screen(Screen.HOME) - message = Proposals( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', proposals = [ @@ -44,5 +42,3 @@ def test_sign_proposals(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py index 3f01d24db..ecdf8e736 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py +++ b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py @@ -44,5 +44,3 @@ def test_sign_register_global_constant(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_reveal.py b/tests/integration/nano/test_sign/operations/test_sign_reveal.py index d7297975a..ad8e4f827 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_reveal.py +++ b/tests/integration/nano/test_sign/operations/test_sign_reveal.py @@ -24,8 +24,6 @@ def test_sign_reveal(app: TezosAppScreen, snapshot_dir: Path): """Check signing reveal""" - app.assert_screen(Screen.HOME) - message = Reveal( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', fee = 10000, @@ -44,5 +42,3 @@ def test_sign_reveal(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py index 0b226eab2..519a7150a 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py @@ -24,8 +24,6 @@ def test_sign_sc_rollup_add_messages(app: TezosAppScreen, snapshot_dir: Path): """Check signing smart rollup add message""" - app.assert_screen(Screen.HOME) - message = ScRollupAddMessage( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', fee = 10000, @@ -44,5 +42,3 @@ def test_sign_sc_rollup_add_messages(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py index d4b733f31..522152354 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py @@ -46,5 +46,3 @@ def test_sign_sc_rollup_execute_outbox_message(app: TezosAppScreen, snapshot_dir message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py index f1ecb1e7c..7090c497b 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py @@ -67,5 +67,3 @@ def test_sign_sc_rollup_originate(app: TezosAppScreen, whitelist: Optional[List[ message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py index d5669275e..2077d1cde 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py @@ -24,8 +24,6 @@ def test_sign_set_consensus_key(app: TezosAppScreen, snapshot_dir: Path): """Check signing set consensus key""" - app.assert_screen(Screen.HOME) - message = UpdateConsensusKey( source = 'tz1dyX3B1CFYa2DfdFLyPtiJCfQRUgPVME6E', fee = 10000, @@ -44,5 +42,3 @@ def test_sign_set_consensus_key(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py index c1487a9fa..6ce1ad6cb 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py @@ -24,8 +24,6 @@ def test_sign_set_deposit_limit(app: TezosAppScreen, snapshot_dir: Path): """Check signing set deposit limit""" - app.assert_screen(Screen.HOME) - message = SetDepositLimit( source = 'tz3XeTwXXJeWNgVR3LqMcyBDdnxjbZ7TeEGH', fee = 60000, @@ -44,5 +42,3 @@ def test_sign_set_deposit_limit(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_transaction.py b/tests/integration/nano/test_sign/operations/test_sign_transaction.py index 6f8be63b5..cb9171866 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transaction.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transaction.py @@ -49,8 +49,6 @@ def test_sign_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, data=data) - app.quit() - def test_reject_transaction(app: TezosAppScreen, snapshot_dir: Path): """Check reject transaction""" @@ -74,8 +72,6 @@ def test_reject_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, snap_path=snapshot_dir) - app.quit() - def test_sign_simple_transaction(app: TezosAppScreen, snapshot_dir: Path): """Check sign not complex transaction""" @@ -101,13 +97,9 @@ def test_sign_simple_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, data=data) - app.quit() - def test_too_complex_transaction(app: TezosAppScreen, snapshot_dir: Path): """Check sign complex transaction""" - app.assert_screen(Screen.HOME) - message = Transaction( source = 'tz2JPgTWZZpxZZLqHMfS69UAy1UHm4Aw5iHu', fee = 50000, @@ -128,8 +120,6 @@ def test_too_complex_transaction(app: TezosAppScreen, snapshot_dir: Path): navigate=lambda: app.navigate_review(text=ScreenText.BACK_HOME, snap_path=snapshot_dir) ) - app.quit() - def test_sign_stake_transaction(app: TezosAppScreen, snapshot_dir: Path): """Check sign stake""" @@ -156,8 +146,6 @@ def test_sign_stake_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, data=data) - app.quit() - def test_sign_unstake_transaction(app: TezosAppScreen, snapshot_dir: Path): """Check sign unstake""" @@ -184,8 +172,6 @@ def test_sign_unstake_transaction(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, data=data) - app.quit() - def test_sign_finalize_unstake_transaction(app: TezosAppScreen, snapshot_dir: Path): """Check sign finalize_unstake""" @@ -212,8 +198,6 @@ def test_sign_finalize_unstake_transaction(app: TezosAppScreen, snapshot_dir: Pa with_hash=True, data=data) - app.quit() - def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, snapshot_dir: Path): """Check sign set delegate parameters""" @@ -249,8 +233,6 @@ def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, snapshot_ with_hash=True, data=data) - app.quit() - def test_sign_with_long_hash(app: TezosAppScreen, snapshot_dir: Path): """Check signing transaction with a long destination hash""" @@ -278,8 +260,6 @@ def test_sign_with_long_hash(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, data=data) - app.quit() - def test_ensure_always_clearsign(app: TezosAppScreen, snapshot_dir: Path): """Check clear signing never blindsign""" @@ -306,5 +286,3 @@ def test_ensure_always_clearsign(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py index 7e4b66543..4c1d8a4a3 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py @@ -50,8 +50,6 @@ def test_sign_transfer_ticket(app: TezosAppScreen, snapshot_dir: Path): with_hash=True, data=data) - app.quit() - @requires_device("nanosp") def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, snapshot_dir: Path): """Check signing operation that display potentially empty screens""" @@ -81,5 +79,3 @@ def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, snapshot_ message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/test_apdu_sign.py b/tests/integration/nano/test_sign/test_apdu_sign.py index 7037905bf..ed9fe3896 100644 --- a/tests/integration/nano/test_sign/test_apdu_sign.py +++ b/tests/integration/nano/test_sign/test_apdu_sign.py @@ -26,8 +26,6 @@ def test_sign_micheline_without_hash(app: TezosAppScreen, snapshot_dir: Path): """Check signing micheline wihout getting hash""" - app.assert_screen(Screen.HOME) - message = MichelineExpr([{'string': 'CACA'}, {'string': 'POPO'}, {'string': 'BOUDIN'}]) data = app.sign(DEFAULT_ACCOUNT, @@ -40,8 +38,6 @@ def test_sign_micheline_without_hash(app: TezosAppScreen, snapshot_dir: Path): with_hash=False, data=data) - app.quit() - def test_sign_with_small_packet(app: TezosAppScreen, snapshot_dir: Path): """Check signing using small packet instead of full size packets""" @@ -52,8 +48,6 @@ def check_sign_with_small_packet( message: Message, path: Path) -> None: - app.assert_screen(Screen.HOME) - data = send_and_navigate( send=lambda: app.backend.sign(account, message, apdu_size=10), navigate=lambda: app.navigate_sign_accept(snap_path=path) @@ -81,14 +75,10 @@ def check_sign_with_small_packet( message=message, path=snapshot_dir) - app.quit() - @requires_device("nanosp") def test_nanosp_regression_press_right_works_across_apdu_recieves(app: TezosAppScreen, snapshot_dir: Path): """Check no need to click right two times between APDUs during signing flow""" - app.assert_screen(Screen.HOME) - message = MichelineExpr([{'prim':'IF_NONE','args':[[[{'prim':'SWAP'},{'prim':'IF','args':[[{'prim':'DIP','args':[[[{'prim':'DROP','args':[{'int':1}]},{'prim':'PUSH','args':[{'prim':'unit'},{'prim':'Unit'}]},{'prim':'PUSH','args':[{'prim':'bool'},{'prim':'True'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':';L\\S?p$-Fq)VDg\n]te\no4v0_8)\"'}]}]]]}],[[{'prim':'DROP','args':[{'int':2}]},{'prim':'PUSH','args':[{'prim':'unit'},{'prim':'Unit'}]},{'prim':'PUSH','args':[{'prim':'bool'},{'prim':'False'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':'Li-%*edF6~?E[5Kmu?dyviwJ^2\"\\d$FyQ>>!>D$g(Qg'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':'*Tx None: def test_blindsign_too_deep(app: TezosAppScreen, snapshot_dir: Path): """Check blindsigning on too deep expression""" - app.assert_screen(Screen.HOME) - expression = MichelineExpr([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{'int':42}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]) def navigate() -> None: @@ -418,13 +414,9 @@ def assert_screen_i(i): with_hash=True, data=data) - app.quit() - def test_blindsign_too_large(app: TezosAppScreen, snapshot_dir: Path): """Check blindsigning on too large expression""" - app.assert_screen(Screen.HOME) - message = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) def navigate() -> None: @@ -448,8 +440,6 @@ def navigate() -> None: with_hash=True, data=data) - app.quit() - def test_blindsign_reject_from_clear(app: TezosAppScreen, snapshot_dir: Path): """Check blindsigning rejection""" @@ -463,8 +453,6 @@ def test_blindsign_reject_from_clear(app: TezosAppScreen, snapshot_dir: Path): snap_path=snapshot_dir ) - app.quit() - def test_blindsign_reject_from_blind(app: TezosAppScreen, snapshot_dir: Path): """Check blindsigning rejection""" @@ -486,5 +474,3 @@ def navigate() -> None: with_hash=False, navigate=navigate ) - - app.quit() diff --git a/tests/integration/nano/test_sign/test_key.py b/tests/integration/nano/test_sign/test_key.py index 35a76bcbf..484fed181 100644 --- a/tests/integration/nano/test_sign/test_key.py +++ b/tests/integration/nano/test_sign/test_key.py @@ -44,8 +44,6 @@ def test_sign_micheline_basic(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing with ed25519""" - app.assert_screen(Screen.HOME) - message = MichelineExpr([{'string': 'CACA'}, {'string': 'POPO'}, {'string': 'BOUDIN'}]) data = app.sign(account, @@ -58,8 +56,6 @@ def test_sign_micheline_basic(app: TezosAppScreen, account: Account, snapshot_di with_hash=True, data=data) - app.quit() - @pytest.mark.parametrize( "seed", [ @@ -97,5 +93,3 @@ def test_sign_with_another_seed(app: TezosAppScreen, snapshot_dir: Path): message=message, with_hash=True, data=data) - - app.quit() diff --git a/tests/integration/nano/test_sign/test_parsing_errors.py b/tests/integration/nano/test_sign/test_parsing_errors.py index d5062cca0..7af2ed5b3 100755 --- a/tests/integration/nano/test_sign/test_parsing_errors.py +++ b/tests/integration/nano/test_sign/test_parsing_errors.py @@ -66,8 +66,6 @@ def test_parsing_error(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): snap_path=snapshot_dir ) - app.quit() - @pytest.mark.parametrize( "raw_msg", [ "030000000000000000000000000000000000000000000000000000000000000000ce00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c63966303966323935326433343532386337333366393436313563666333396263353535363139666335353064643461363762613232303863653865383637616133643133613665663939646662653332633639373461613961323135306432316563613239633333343965353963313362393038316631", @@ -91,5 +89,3 @@ def test_parsing_hard_fail(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path snap_path=snapshot_dir ) ) - - app.quit() diff --git a/tests/integration/nano/test_wrong_apdu.py b/tests/integration/nano/test_wrong_apdu.py index 1e9a7d1ec..9c7081c2e 100644 --- a/tests/integration/nano/test_wrong_apdu.py +++ b/tests/integration/nano/test_wrong_apdu.py @@ -34,7 +34,7 @@ def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Pat with StatusCode.REJECT.expected(): app.reject_public_key(DEFAULT_ACCOUNT, snap_path=snapshot_dir / "reject_public_key") - app.assert_screen(Screen.HOME) + app.backend.wait_for_home_screen() message = Transaction( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -60,8 +60,6 @@ def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Pat def test_change_sign_instruction(app: TezosAppScreen): """Check signing instruction changes behaviour""" - app.assert_screen(Screen.HOME) - message = Transaction( source = 'tz2JPgTWZZpxZZLqHMfS69UAy1UHm4Aw5iHu', fee = 50000, @@ -82,8 +80,6 @@ def test_change_sign_instruction(app: TezosAppScreen): payload, last=True) - app.assert_screen(Screen.HOME) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) with StatusCode.INVALID_INS.expected(): @@ -91,64 +87,44 @@ def test_change_sign_instruction(app: TezosAppScreen): payload, last=True) - app.quit() - def test_mixing_command(app: TezosAppScreen): """Check that mixing instruction fails""" - app.assert_screen(Screen.HOME) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) with StatusCode.UNEXPECTED_STATE.expected(): app.backend.version() - app.assert_screen(Screen.HOME) - app.backend._ask_sign(Ins.SIGN_WITH_HASH, DEFAULT_ACCOUNT) with StatusCode.UNEXPECTED_STATE.expected(): app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) - app.assert_screen(Screen.HOME) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) with StatusCode.UNEXPECTED_STATE.expected(): app.backend._ask_sign(Ins.SIGN_WITH_HASH, DEFAULT_ACCOUNT) - app.assert_screen(Screen.HOME) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) with StatusCode.UNEXPECTED_STATE.expected(): app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=True) - app.assert_screen(Screen.HOME) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) with StatusCode.UNEXPECTED_STATE.expected(): app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) - app.assert_screen(Screen.HOME) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) with StatusCode.UNEXPECTED_STATE.expected(): app.backend.git() - app.quit() - @pytest.mark.parametrize("ins", [Ins.GET_PUBLIC_KEY, Ins.PROMPT_PUBLIC_KEY], ids=lambda ins: f"{ins}") @pytest.mark.parametrize("index", [Index.OTHER, Index.LAST], ids=lambda index: f"{index}") def test_wrong_index(app: TezosAppScreen, ins: Ins, index: Index): """Check wrong apdu index behaviour""" - app.assert_screen(Screen.HOME) - with StatusCode.WRONG_PARAM.expected(): app.backend._exchange(ins, index=index, sig_type=DEFAULT_ACCOUNT.sig_type, payload=DEFAULT_ACCOUNT.path) - app.quit() - @pytest.mark.parametrize( "sender", @@ -169,13 +145,9 @@ def test_wrong_derivation_type(app: TezosAppScreen, sender: Callable[[TezosAppSc """Check wrong derivation type behaviour""" account = Account("m/44'/1729'/0'/0'", 0x04, "__unused__") - app.assert_screen(Screen.HOME) - with StatusCode.WRONG_PARAM.expected(): sender(app, account) - app.quit() - @pytest.mark.parametrize( "sender", @@ -220,17 +192,12 @@ def test_wrong_derivation_path( sender: Callable[[TezosAppScreen, Account], Any]): """Check wrong derivation path behaviour""" - app.assert_screen(Screen.HOME) - with StatusCode.WRONG_LENGTH_FOR_INS.expected(): sender(app, account) - app.quit() - @pytest.mark.parametrize("class_", [0x00, 0x81]) def test_wrong_class(app: TezosAppScreen, class_: int): """Check wrong apdu class behaviour""" - app.assert_screen(Screen.HOME) raw = \ class_.to_bytes(1, 'big') + \ @@ -242,8 +209,6 @@ def test_wrong_class(app: TezosAppScreen, class_: int): with StatusCode.CLASS.expected(): app.backend.exchange_raw(raw) - app.quit() - @pytest.mark.parametrize( "size, data", [ @@ -254,7 +219,6 @@ def test_wrong_class(app: TezosAppScreen, class_: int): ) def test_wrong_apdu_length(app: TezosAppScreen, size: int, data: bytes): """Check wrong apdu length behaviour""" - app.assert_screen(Screen.HOME) raw = \ int(Cla.DEFAULT).to_bytes(1, 'big') + \ @@ -267,8 +231,6 @@ def test_wrong_apdu_length(app: TezosAppScreen, size: int, data: bytes): with StatusCode.WRONG_LENGTH_FOR_INS.expected(): app.backend.exchange_raw(raw) - app.quit() - @pytest.mark.parametrize( "ins", [ @@ -289,9 +251,5 @@ def test_wrong_apdu_length(app: TezosAppScreen, size: int, data: bytes): def test_unimplemented_commands(app: TezosAppScreen, ins: Union[int, Ins]): """Check unimplemented commands""" - app.assert_screen(Screen.HOME) - with StatusCode.INVALID_INS.expected(): app.backend._exchange(ins) - - app.quit() From 080ba47d94e8959c8dd0a1f70b0d2609a4cce90c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 28 Nov 2024 13:59:13 +0100 Subject: [PATCH 09/12] [test] use navigator instead of assert_screen --- .../test_home_menu/00000.png} | Bin .../test_home_menu/00001.png} | Bin .../test_home_menu/00002.png} | Bin .../test_home_menu/00003.png} | Bin .../test_settings_menu/00000.png} | Bin .../test_settings_menu/00001.png} | Bin .../test_settings_menu/00002.png} | Bin .../test_menu/test_settings_menu/00003.png | Bin 0 -> 435 bytes .../test_menu/test_toggle_blindsign/00000.png | Bin 0 -> 435 bytes .../test_menu/test_toggle_blindsign/00001.png | Bin 0 -> 311 bytes .../test_menu/test_toggle_blindsign/00002.png | Bin 0 -> 355 bytes .../test_menu/test_toggle_blindsign/00003.png | Bin 0 -> 420 bytes .../test_menu/test_toggle_blindsign/00004.png | Bin 0 -> 420 bytes .../test_toggle_blindsign/00005.png} | Bin .../test_menu/test_toggle_blindsign/00006.png | Bin 0 -> 342 bytes .../test_menu/test_toggle_blindsign/00007.png | Bin 0 -> 435 bytes .../test_menu/test_toggle_blindsign/00008.png | Bin 0 -> 311 bytes .../test_menu/test_toggle_blindsign/00009.png | Bin 0 -> 355 bytes .../test_menu/test_toggle_blindsign/00010.png | Bin 0 -> 420 bytes .../test_menu/test_toggle_blindsign/00011.png | Bin 0 -> 422 bytes .../test_menu/test_toggle_blindsign/00012.png | Bin 0 -> 420 bytes .../test_menu/test_toggle_blindsign/00013.png | Bin 0 -> 342 bytes .../test_menu/test_toggle_blindsign/00014.png | Bin 0 -> 435 bytes .../test_toggle_expert_mode/00000.png | Bin 0 -> 435 bytes .../test_toggle_expert_mode/00001.png | Bin 0 -> 311 bytes .../test_toggle_expert_mode/00002.png | Bin 0 -> 355 bytes .../test_toggle_expert_mode/00003.png | Bin 0 -> 420 bytes .../test_toggle_expert_mode/00004.png} | Bin .../test_toggle_expert_mode/00005.png | Bin 0 -> 420 bytes .../test_toggle_expert_mode/00006.png | Bin 0 -> 342 bytes .../test_toggle_expert_mode/00007.png | Bin 0 -> 435 bytes .../test_toggle_expert_mode/00008.png | Bin 0 -> 311 bytes .../test_toggle_expert_mode/00009.png | Bin 0 -> 355 bytes .../test_toggle_expert_mode/00010.png | Bin 0 -> 409 bytes .../test_toggle_expert_mode/00011.png | Bin 0 -> 420 bytes .../test_toggle_expert_mode/00012.png | Bin 0 -> 420 bytes .../test_toggle_expert_mode/00013.png | Bin 0 -> 342 bytes .../test_toggle_expert_mode/00014.png | Bin 0 -> 435 bytes .../test_home_menu/00000.png} | Bin .../test_home_menu/00001.png} | Bin .../test_home_menu/00002.png} | Bin .../test_home_menu/00003.png} | Bin .../test_settings_menu/00000.png} | Bin .../test_settings_menu/00001.png} | Bin .../test_settings_menu/00002.png} | Bin .../test_menu/test_settings_menu/00003.png} | Bin .../test_menu/test_toggle_blindsign/00000.png | Bin 0 -> 506 bytes .../test_toggle_blindsign/00001.png} | Bin .../test_toggle_blindsign/00002.png} | Bin .../test_toggle_blindsign/00003.png} | Bin .../test_toggle_blindsign/00004.png} | Bin .../test_toggle_blindsign/00005.png} | Bin .../test_toggle_blindsign/00006.png} | Bin .../test_menu/test_toggle_blindsign/00007.png | Bin 0 -> 506 bytes .../test_menu/test_toggle_blindsign/00008.png | Bin 0 -> 340 bytes .../test_menu/test_toggle_blindsign/00009.png | Bin 0 -> 381 bytes .../test_menu/test_toggle_blindsign/00010.png | Bin 0 -> 451 bytes .../test_toggle_blindsign/00011.png} | Bin .../test_menu/test_toggle_blindsign/00012.png | Bin 0 -> 440 bytes .../test_menu/test_toggle_blindsign/00013.png | Bin 0 -> 365 bytes .../test_menu/test_toggle_blindsign/00014.png | Bin 0 -> 506 bytes .../test_toggle_expert_mode/00000.png | Bin 0 -> 506 bytes .../test_toggle_expert_mode/00001.png | Bin 0 -> 340 bytes .../test_toggle_expert_mode/00002.png | Bin 0 -> 381 bytes .../test_toggle_expert_mode/00003.png | Bin 0 -> 451 bytes .../test_toggle_expert_mode/00004.png} | Bin .../test_toggle_expert_mode/00005.png | Bin 0 -> 440 bytes .../test_toggle_expert_mode/00006.png | Bin 0 -> 365 bytes .../test_toggle_expert_mode/00007.png | Bin 0 -> 506 bytes .../test_toggle_expert_mode/00008.png | Bin 0 -> 340 bytes .../test_toggle_expert_mode/00009.png | Bin 0 -> 381 bytes .../test_toggle_expert_mode/00010.png} | Bin .../test_toggle_expert_mode/00011.png | Bin 0 -> 451 bytes .../test_toggle_expert_mode/00012.png | Bin 0 -> 440 bytes .../test_toggle_expert_mode/00013.png | Bin 0 -> 365 bytes .../test_toggle_expert_mode/00014.png | Bin 0 -> 506 bytes .../nanox/test_menu/test_home_menu/00000.png | Bin 0 -> 506 bytes .../nanox/test_menu/test_home_menu/00001.png | Bin 0 -> 340 bytes .../nanox/test_menu/test_home_menu/00002.png | Bin 0 -> 381 bytes .../test_home_menu/00003.png} | Bin .../test_menu/test_settings_menu/00000.png | Bin 0 -> 451 bytes .../test_menu/test_settings_menu/00001.png | Bin 0 -> 440 bytes .../test_menu/test_settings_menu/00002.png | Bin 0 -> 365 bytes .../test_menu/test_settings_menu/00003.png | Bin 0 -> 506 bytes .../test_menu/test_toggle_blindsign/00000.png | Bin 0 -> 506 bytes .../test_menu/test_toggle_blindsign/00001.png | Bin 0 -> 340 bytes .../test_menu/test_toggle_blindsign/00002.png | Bin 0 -> 381 bytes .../test_menu/test_toggle_blindsign/00003.png | Bin 0 -> 451 bytes .../test_menu/test_toggle_blindsign/00004.png | Bin 0 -> 440 bytes .../test_menu/test_toggle_blindsign/00005.png | Bin 0 -> 449 bytes .../test_menu/test_toggle_blindsign/00006.png | Bin 0 -> 365 bytes .../test_menu/test_toggle_blindsign/00007.png | Bin 0 -> 506 bytes .../test_menu/test_toggle_blindsign/00008.png | Bin 0 -> 340 bytes .../test_menu/test_toggle_blindsign/00009.png | Bin 0 -> 381 bytes .../test_menu/test_toggle_blindsign/00010.png | Bin 0 -> 451 bytes .../test_menu/test_toggle_blindsign/00011.png | Bin 0 -> 449 bytes .../test_menu/test_toggle_blindsign/00012.png | Bin 0 -> 440 bytes .../test_menu/test_toggle_blindsign/00013.png | Bin 0 -> 365 bytes .../test_menu/test_toggle_blindsign/00014.png | Bin 0 -> 506 bytes .../test_toggle_expert_mode/00000.png | Bin 0 -> 506 bytes .../test_toggle_expert_mode/00001.png | Bin 0 -> 340 bytes .../test_toggle_expert_mode/00002.png | Bin 0 -> 381 bytes .../test_toggle_expert_mode/00003.png | Bin 0 -> 451 bytes .../test_toggle_expert_mode/00004.png | Bin 0 -> 440 bytes .../test_toggle_expert_mode/00005.png | Bin 0 -> 440 bytes .../test_toggle_expert_mode/00006.png | Bin 0 -> 365 bytes .../test_toggle_expert_mode/00007.png | Bin 0 -> 506 bytes .../test_toggle_expert_mode/00008.png | Bin 0 -> 340 bytes .../test_toggle_expert_mode/00009.png | Bin 0 -> 381 bytes .../test_toggle_expert_mode/00010.png | Bin 0 -> 440 bytes .../test_toggle_expert_mode/00011.png | Bin 0 -> 451 bytes .../test_toggle_expert_mode/00012.png | Bin 0 -> 440 bytes .../test_toggle_expert_mode/00013.png | Bin 0 -> 365 bytes .../test_toggle_expert_mode/00014.png | Bin 0 -> 506 bytes tests/integration/nano/test_menu.py | 127 ++++++----- tests/integration/nano/test_public_key.py | 2 +- .../test_sign/operations/test_sign_ballot.py | 2 +- .../test_sign_batched_operations.py | 8 +- .../operations/test_sign_delegation.py | 2 +- .../operations/test_sign_failing_noop.py | 2 +- .../test_sign_increase_paid_storage.py | 2 +- .../operations/test_sign_origination.py | 2 +- .../operations/test_sign_proposals.py | 2 +- .../test_sign_register_global_constant.py | 2 +- .../test_sign/operations/test_sign_reveal.py | 2 +- .../test_sign_sc_rollup_add_messages.py | 2 +- ...t_sign_sc_rollup_execute_outbox_message.py | 2 +- .../test_sign_sc_rollup_originate.py | 2 +- .../operations/test_sign_set_consensus_key.py | 2 +- .../operations/test_sign_set_deposit_limit.py | 2 +- .../operations/test_sign_transaction.py | 20 +- .../operations/test_sign_transfer_ticket.py | 4 +- .../nano/test_sign/test_apdu_sign.py | 4 +- .../nano/test_sign/test_blindsign.py | 45 ++-- tests/integration/nano/test_sign/test_key.py | 4 +- .../nano/test_sign/test_parsing_errors.py | 4 +- tests/integration/nano/test_wrong_apdu.py | 4 +- tests/integration/nano/utils/app.py | 206 ++++++++---------- 138 files changed, 218 insertions(+), 236 deletions(-) rename tests/integration/nano/snapshots/nanos/{home.png => test_menu/test_home_menu/00000.png} (100%) rename tests/integration/nano/snapshots/nanos/{version.png => test_menu/test_home_menu/00001.png} (100%) rename tests/integration/nano/snapshots/nanos/{settings.png => test_menu/test_home_menu/00002.png} (100%) rename tests/integration/nano/snapshots/nanos/{quit.png => test_menu/test_home_menu/00003.png} (100%) rename tests/integration/nano/snapshots/nanos/{settings_expert_mode_disabled.png => test_menu/test_settings_menu/00000.png} (100%) rename tests/integration/nano/snapshots/nanos/{settings_blindsign_off.png => test_menu/test_settings_menu/00001.png} (100%) rename tests/integration/nano/snapshots/nanos/{back.png => test_menu/test_settings_menu/00002.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00003.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00000.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00001.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00002.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00003.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00004.png rename tests/integration/nano/snapshots/nanos/{settings_blindsign_on.png => test_menu/test_toggle_blindsign/00005.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00006.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00007.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00008.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00009.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00010.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00011.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00012.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00013.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00014.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00000.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00001.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00002.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00003.png rename tests/integration/nano/snapshots/nanos/{settings_expert_mode_enabled.png => test_menu/test_toggle_expert_mode/00004.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00005.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00006.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00007.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00008.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00009.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00010.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00011.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00012.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00013.png create mode 100644 tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00014.png rename tests/integration/nano/snapshots/nanosp/{home.png => test_menu/test_home_menu/00000.png} (100%) rename tests/integration/nano/snapshots/nanosp/{version.png => test_menu/test_home_menu/00001.png} (100%) rename tests/integration/nano/snapshots/nanosp/{settings.png => test_menu/test_home_menu/00002.png} (100%) rename tests/integration/nano/snapshots/nanosp/{quit.png => test_menu/test_home_menu/00003.png} (100%) rename tests/integration/nano/snapshots/nanosp/{settings_expert_mode_disabled.png => test_menu/test_settings_menu/00000.png} (100%) rename tests/integration/nano/snapshots/nanosp/{settings_blindsign_off.png => test_menu/test_settings_menu/00001.png} (100%) rename tests/integration/nano/snapshots/nanosp/{back.png => test_menu/test_settings_menu/00002.png} (100%) rename tests/integration/nano/snapshots/{nanox/home.png => nanosp/test_menu/test_settings_menu/00003.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00000.png rename tests/integration/nano/snapshots/{nanox/version.png => nanosp/test_menu/test_toggle_blindsign/00001.png} (100%) rename tests/integration/nano/snapshots/{nanox/settings.png => nanosp/test_menu/test_toggle_blindsign/00002.png} (100%) rename tests/integration/nano/snapshots/{nanox/settings_expert_mode_disabled.png => nanosp/test_menu/test_toggle_blindsign/00003.png} (100%) rename tests/integration/nano/snapshots/{nanox/settings_blindsign_off.png => nanosp/test_menu/test_toggle_blindsign/00004.png} (100%) rename tests/integration/nano/snapshots/nanosp/{settings_blindsign_on.png => test_menu/test_toggle_blindsign/00005.png} (100%) rename tests/integration/nano/snapshots/{nanox/back.png => nanosp/test_menu/test_toggle_blindsign/00006.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00007.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00008.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00009.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00010.png rename tests/integration/nano/snapshots/{nanox/settings_blindsign_on.png => nanosp/test_menu/test_toggle_blindsign/00011.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00012.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00013.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00014.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00000.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00001.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00002.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00003.png rename tests/integration/nano/snapshots/nanosp/{settings_expert_mode_enabled.png => test_menu/test_toggle_expert_mode/00004.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00005.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00006.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00007.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00008.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00009.png rename tests/integration/nano/snapshots/{nanox/settings_expert_mode_enabled.png => nanosp/test_menu/test_toggle_expert_mode/00010.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00011.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00012.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00013.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00014.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_home_menu/00000.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_home_menu/00001.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_home_menu/00002.png rename tests/integration/nano/snapshots/nanox/{quit.png => test_menu/test_home_menu/00003.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00000.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00001.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00002.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00003.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00000.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00001.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00002.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00003.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00004.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00005.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00006.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00007.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00008.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00009.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00010.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00011.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00012.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00013.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00014.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00000.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00001.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00002.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00003.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00004.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00005.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00006.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00007.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00008.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00009.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00010.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00011.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00012.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00013.png create mode 100644 tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00014.png diff --git a/tests/integration/nano/snapshots/nanos/home.png b/tests/integration/nano/snapshots/nanos/test_menu/test_home_menu/00000.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/home.png rename to tests/integration/nano/snapshots/nanos/test_menu/test_home_menu/00000.png diff --git a/tests/integration/nano/snapshots/nanos/version.png b/tests/integration/nano/snapshots/nanos/test_menu/test_home_menu/00001.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/version.png rename to tests/integration/nano/snapshots/nanos/test_menu/test_home_menu/00001.png diff --git a/tests/integration/nano/snapshots/nanos/settings.png b/tests/integration/nano/snapshots/nanos/test_menu/test_home_menu/00002.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/settings.png rename to tests/integration/nano/snapshots/nanos/test_menu/test_home_menu/00002.png diff --git a/tests/integration/nano/snapshots/nanos/quit.png b/tests/integration/nano/snapshots/nanos/test_menu/test_home_menu/00003.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/quit.png rename to tests/integration/nano/snapshots/nanos/test_menu/test_home_menu/00003.png diff --git a/tests/integration/nano/snapshots/nanos/settings_expert_mode_disabled.png b/tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00000.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/settings_expert_mode_disabled.png rename to tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00000.png diff --git a/tests/integration/nano/snapshots/nanos/settings_blindsign_off.png b/tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00001.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/settings_blindsign_off.png rename to tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00001.png diff --git a/tests/integration/nano/snapshots/nanos/back.png b/tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00002.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/back.png rename to tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00002.png diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00003.png b/tests/integration/nano/snapshots/nanos/test_menu/test_settings_menu/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..056ffc4017890607ec11b7cd57be8dcd68458456 GIT binary patch literal 435 zcmV;k0ZjghP)plH-Hk3Z&JYvHBBCybp-8k{m=ja002ovPDHLkV1i`1$Kn70 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00000.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..056ffc4017890607ec11b7cd57be8dcd68458456 GIT binary patch literal 435 zcmV;k0ZjghP)plH-Hk3Z&JYvHBBCybp-8k{m=ja002ovPDHLkV1i`1$Kn70 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00001.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..c52c35326269710dd00983fa6a083be7dc808ef7 GIT binary patch literal 311 zcmV-70m%M|P)bKJw0s&ql17QTXhUT=s@I^p<{MG2~3KfJAa4*;*KxxYW;n`ORBfu@f%om{} z6gyEROCLa?vvQ#-(N2W65$o#AxEWF$Q>XPOlRiL_SqRCk>M$K?-e?5qgvWTI0eGMzz&*SsCeCeLUMR!S`jd8I>WalhPmEcRIo%?%tOtWCx@aCUMQGF zQ&-y}+*>pB5c>)npawh}bPAe-n}U)=MBaiXla}m^Esp>I002ovPDHLkV1haa BnL_{o literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00003.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..a10bdaeacfd22d90c63e4c46e5e4d164850b8154 GIT binary patch literal 420 zcmV;V0bBlwP);tF>54k|aqoD~sdU`^NmNj*cFr#vB;! z+ueiTWWtl>fxiF*Er?~szo|voQ{%n?do2Su6TWmLIy@M2@lyKbG3bGPYd)&HMf^)$ zDD}LZ+mnsx&NYK0>tQd(@F=lcP<5;2tk z#Yl3mEX*cAfvKJ?1>H#vdNSNDG!@4rt7@qJb`Oc;P^i&|LS5>y$7xj{gbfV9m9X@l z18ZvVhc;_{Kp1^bTRN@&*e~HkF?KEJ;(~?c<=bYl3@m`I8IT^eswxTz8|O~r)-y?xBuSDa3E=~O-`#14exu?5 O0000OO1ONcwscZq;&pV}*wq0)Fy?tbz z0vGo?vMu`tJnA*S{KXvSALHDsYw5N3335Zg{XHVgd2~|B#Q&n_$@@R`T z3`&;e;!W?Ol+MfOlSeQ55bc}qX+%F%XDTz}*=@HpOBYR~JqFEyODXsgP_+D&S8JiA z%=Xo^aeA+MJ2cNEl7RI_AAp}7I0H9Wx0E9Rw8j}lw!ppS7P>0kD>RHRlAH52l8JpMI(P7MX6UY#phzO(~}Qs=Ftg@t+K+^ciqqQN$q+=EjD=M3Y?_|*mc%CVoHeOOn=EQA8m z=uZ>>@#|htsN-=j5CXu=sZ-dXEcGlp<3!foxwHu%`D#R~d@S!w~ zh@N8M*w2fRJ2>E_8nrpNfKJHf;ICM`XkZ`6WbwGx&@uRe|47@sOdWn0V#2&17|t}n}8zS4I<#xH-iBE oPoTGe((z*4zzz({r~^~ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00007.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..056ffc4017890607ec11b7cd57be8dcd68458456 GIT binary patch literal 435 zcmV;k0ZjghP)plH-Hk3Z&JYvHBBCybp-8k{m=ja002ovPDHLkV1i`1$Kn70 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00008.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..c52c35326269710dd00983fa6a083be7dc808ef7 GIT binary patch literal 311 zcmV-70m%M|P)bKJw0s&ql17QTXhUT=s@I^p<{MG2~3KfJAa4*;*KxxYW;n`ORBfu@f%om{} z6gyEROCLa?vvQ#-(N2W65$o#AxEWF$Q>XPOlRiL_SqRCk>M$K?-e?5qgvWTI0eGMzz&*SsCeCeLUMR!S`jd8I>WalhPmEcRIo%?%tOtWCx@aCUMQGF zQ&-y}+*>pB5c>)npawh}bPAe-n}U)=MBaiXla}m^Esp>I002ovPDHLkV1haa BnL_{o literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00010.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..a10bdaeacfd22d90c63e4c46e5e4d164850b8154 GIT binary patch literal 420 zcmV;V0bBlwP);tF>54k|aqoD~sdU`^NmNj*cFr#vB;! z+ueiTWWtl>fxiF*Er?~szo|voQ{%n?do2Su6TWmLIy@M2@lyKbG3bGPYd)&HMf^)$ zDD}LZ+mnsx&NYK0>tQd(@F=lcP<5;2tk z#Yl3mEX*cAfvKJ?1>H#vdNSNDG!@4rt7@qJb`Oc;P^i&|LS5>y$7xj{gbfV9m9X@l z18ZvVhc;_{Kp1^bTRN@&*e~HkF?KEJ;(~?c<=bYl3@m`I8IT^eswxTz8|O~r)-y?xBuSDa3E=~O-`#14exu?5 O0000k!JOv4MTT1sI6>~TVqjo_?d1nx@p4lPFRFmgKO7FRAq zC#Aj!!;)q9L5O*BLOt1PFgqzI- za`nl_?|xE5sSoTt|Ai>Hc`yvN)aJneGDV);gK%FFKX5z=o0Dl5rb2khA^R~gC9fhT zNArX@9~&94CVLsM;3nA1fCbskfYmlZx4$HNfQ!rh8?}@NhG7_nVHgMU1uL@AuaQ90 QJOBUy07*qoM6N<$f;B9+w*UYD literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00012.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..834142cf8f9bdf75b4c3a631e9469d188e2fdc37 GIT binary patch literal 420 zcmV;V0bBlwP)OO1ONcwscZq;&pV}*wq0)Fy?tbz z0vGo?vMu`tJnA*S{KXvSALHDsYw5N3335Zg{XHVgd2~|B#Q&n_$@@R`T z3`&;e;!W?Ol+MfOlSeQ55bc}qX+%F%XDTz}*=@HpOBYR~JqFEyODXsgP_+D&S8JiA z%=Xo^aeA+MJ2cNEl7RI_AAp}7I0H9Wx0E9Rw8j}lw!ppS7P>0kD>RHRlAH52l8JpMI(P7MX6UY#phzO(~}Qs=Ftg@t+K+^ciqqQN$q+=EjD=M3Y?_|*mc%CVoHeOOn=EQA8m z=uZ>>@#|htsN-=j5CXu=sZ-dXEcGlp<3!foxwHu%`D#R~d@S!w~ zh@N8M*w2fRJ2>E_8nrpNfKJHf;ICM`XkZ`6WbwGx&@uRe|47@sOdWn0V#2&17|t}n}8zS4I<#xH-iBE oPoTGe((z*4zzz({r~^~ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00014.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_blindsign/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..056ffc4017890607ec11b7cd57be8dcd68458456 GIT binary patch literal 435 zcmV;k0ZjghP)plH-Hk3Z&JYvHBBCybp-8k{m=ja002ovPDHLkV1i`1$Kn70 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00000.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..056ffc4017890607ec11b7cd57be8dcd68458456 GIT binary patch literal 435 zcmV;k0ZjghP)plH-Hk3Z&JYvHBBCybp-8k{m=ja002ovPDHLkV1i`1$Kn70 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00001.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..c52c35326269710dd00983fa6a083be7dc808ef7 GIT binary patch literal 311 zcmV-70m%M|P)bKJw0s&ql17QTXhUT=s@I^p<{MG2~3KfJAa4*;*KxxYW;n`ORBfu@f%om{} z6gyEROCLa?vvQ#-(N2W65$o#AxEWF$Q>XPOlRiL_SqRCk>M$K?-e?5qgvWTI0eGMzz&*SsCeCeLUMR!S`jd8I>WalhPmEcRIo%?%tOtWCx@aCUMQGF zQ&-y}+*>pB5c>)npawh}bPAe-n}U)=MBaiXla}m^Esp>I002ovPDHLkV1haa BnL_{o literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00003.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..a10bdaeacfd22d90c63e4c46e5e4d164850b8154 GIT binary patch literal 420 zcmV;V0bBlwP);tF>54k|aqoD~sdU`^NmNj*cFr#vB;! z+ueiTWWtl>fxiF*Er?~szo|voQ{%n?do2Su6TWmLIy@M2@lyKbG3bGPYd)&HMf^)$ zDD}LZ+mnsx&NYK0>tQd(@F=lcP<5;2tk z#Yl3mEX*cAfvKJ?1>H#vdNSNDG!@4rt7@qJb`Oc;P^i&|LS5>y$7xj{gbfV9m9X@l z18ZvVhc;_{Kp1^bTRN@&*e~HkF?KEJ;(~?c<=bYl3@m`I8IT^eswxTz8|O~r)-y?xBuSDa3E=~O-`#14exu?5 O0000OO1ONcwscZq;&pV}*wq0)Fy?tbz z0vGo?vMu`tJnA*S{KXvSALHDsYw5N3335Zg{XHVgd2~|B#Q&n_$@@R`T z3`&;e;!W?Ol+MfOlSeQ55bc}qX+%F%XDTz}*=@HpOBYR~JqFEyODXsgP_+D&S8JiA z%=Xo^aeA+MJ2cNEl7RI_AAp}7I0H9Wx0E9Rw8j}lw!ppS7P>0kD>RHRlAH52l8JpMI(P7MX6UY#phzO(~}Qs=Ftg@t+K+^ciqqQN$q+=EjD=M3Y?_|*mc%CVoHeOOn=EQA8m z=uZ>>@#|htsN-=j5CXu=sZ-dXEcGlp<3!foxwHu%`D#R~d@S!w~ zh@N8M*w2fRJ2>E_8nrpNfKJHf;ICM`XkZ`6WbwGx&@uRe|47@sOdWn0V#2&17|t}n}8zS4I<#xH-iBE oPoTGe((z*4zzz({r~^~ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00007.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..056ffc4017890607ec11b7cd57be8dcd68458456 GIT binary patch literal 435 zcmV;k0ZjghP)plH-Hk3Z&JYvHBBCybp-8k{m=ja002ovPDHLkV1i`1$Kn70 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00008.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..c52c35326269710dd00983fa6a083be7dc808ef7 GIT binary patch literal 311 zcmV-70m%M|P)bKJw0s&ql17QTXhUT=s@I^p<{MG2~3KfJAa4*;*KxxYW;n`ORBfu@f%om{} z6gyEROCLa?vvQ#-(N2W65$o#AxEWF$Q>XPOlRiL_SqRCk>M$K?-e?5qgvWTI0eGMzz&*SsCeCeLUMR!S`jd8I>WalhPmEcRIo%?%tOtWCx@aCUMQGF zQ&-y}+*>pB5c>)npawh}bPAe-n}U)=MBaiXla}m^Esp>I002ovPDHLkV1haa BnL_{o literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00010.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..1b968b6c27caad50d50292651cbdadcd11917fee GIT binary patch literal 409 zcmV;K0cQS*P)oy&2nd}LXp`^Mx+=(@lvGNRBuO$Wi{ae+hU~0{h6Yl7cJ%gZ zZozIb?!mIaUH||##InlQ&_en{%?ukAZE2TdclOEW&(_0m{kbhwa zgdVr!{?LaE$C`;V^JzPM7>aKSs`sOwI`BHhHQ%`t`GjX-<&xXrn1U|wg#2#ogMA9Z zh})karj${LX;3uhrM=@bK;Qo2qqvS$q{8!eg5}2#l50MU$IlY7=x;QN#!5p1F_i#C z335~vW)q-@p`I-S;iLwUJT41O#WBdN8p_Y^KCXzBgXT|+UV9*Y_&^^#!`ntY8Jrys z_+di4?kP5i<-8z#Pr^O$dgrT&t_6ve;o-w?T6rx>av%w(nQi_y1x4?GeqNfFo+?1+ zm$LsSS^y;- literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00011.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..a10bdaeacfd22d90c63e4c46e5e4d164850b8154 GIT binary patch literal 420 zcmV;V0bBlwP);tF>54k|aqoD~sdU`^NmNj*cFr#vB;! z+ueiTWWtl>fxiF*Er?~szo|voQ{%n?do2Su6TWmLIy@M2@lyKbG3bGPYd)&HMf^)$ zDD}LZ+mnsx&NYK0>tQd(@F=lcP<5;2tk z#Yl3mEX*cAfvKJ?1>H#vdNSNDG!@4rt7@qJb`Oc;P^i&|LS5>y$7xj{gbfV9m9X@l z18ZvVhc;_{Kp1^bTRN@&*e~HkF?KEJ;(~?c<=bYl3@m`I8IT^eswxTz8|O~r)-y?xBuSDa3E=~O-`#14exu?5 O0000OO1ONcwscZq;&pV}*wq0)Fy?tbz z0vGo?vMu`tJnA*S{KXvSALHDsYw5N3335Zg{XHVgd2~|B#Q&n_$@@R`T z3`&;e;!W?Ol+MfOlSeQ55bc}qX+%F%XDTz}*=@HpOBYR~JqFEyODXsgP_+D&S8JiA z%=Xo^aeA+MJ2cNEl7RI_AAp}7I0H9Wx0E9Rw8j}lw!ppS7P>0kD>RHRlAH52l8JpMI(P7MX6UY#phzO(~}Qs=Ftg@t+K+^ciqqQN$q+=EjD=M3Y?_|*mc%CVoHeOOn=EQA8m z=uZ>>@#|htsN-=j5CXu=sZ-dXEcGlp<3!foxwHu%`D#R~d@S!w~ zh@N8M*w2fRJ2>E_8nrpNfKJHf;ICM`XkZ`6WbwGx&@uRe|47@sOdWn0V#2&17|t}n}8zS4I<#xH-iBE oPoTGe((z*4zzz({r~^~ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00014.png b/tests/integration/nano/snapshots/nanos/test_menu/test_toggle_expert_mode/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..056ffc4017890607ec11b7cd57be8dcd68458456 GIT binary patch literal 435 zcmV;k0ZjghP)plH-Hk3Z&JYvHBBCybp-8k{m=ja002ovPDHLkV1i`1$Kn70 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/home.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_home_menu/00000.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/home.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_home_menu/00000.png diff --git a/tests/integration/nano/snapshots/nanosp/version.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_home_menu/00001.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/version.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_home_menu/00001.png diff --git a/tests/integration/nano/snapshots/nanosp/settings.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_home_menu/00002.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/settings.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_home_menu/00002.png diff --git a/tests/integration/nano/snapshots/nanosp/quit.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_home_menu/00003.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/quit.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_home_menu/00003.png diff --git a/tests/integration/nano/snapshots/nanosp/settings_expert_mode_disabled.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_settings_menu/00000.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/settings_expert_mode_disabled.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_settings_menu/00000.png diff --git a/tests/integration/nano/snapshots/nanosp/settings_blindsign_off.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_settings_menu/00001.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/settings_blindsign_off.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_settings_menu/00001.png diff --git a/tests/integration/nano/snapshots/nanosp/back.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_settings_menu/00002.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/back.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_settings_menu/00002.png diff --git a/tests/integration/nano/snapshots/nanox/home.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_settings_menu/00003.png similarity index 100% rename from tests/integration/nano/snapshots/nanox/home.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_settings_menu/00003.png diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00000.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_d zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_dV0LB*Gq$Vf#@KRE*KD3RZ_aNZGX*`NSi(C8@p4t$kzxjM9~>ii4Nw2+kt^V9aW z{?}iiNNj%~_%LQWCn~Pwi(A{(Qn`Wzw_V8jr-b*qyrg?{XYZv|Kd9^y@oj z^<|#$E}!yFR@Ls+*G&TNU&bvupCMuNQhu4R=}Y+@sfr}=Pe=Z5SZ;Q2_Gz1Iv*+LT zxo6}o`y|f8BmMTa1wX0zopr03isC-2eap literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00009.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..d885fe67b493f41a049111c376b0642375e01aed GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#VBTQ`0oTA= zYd8E?-8j8&fs#o>@KLS)=XXAfTRT=HusH{TbU}g7)F3a-S8;bft$lZ3w$q*3_J`hg z8_U-mnp=GD&g9=Z#tBjx$6u%)=XtTbp7&S9(T-F$o6dN)kjF*|=HInX^UTmYv`^n@ zTGo!+b`LBsey(4R!K}J!g3#*?LJw{G{%Jh=7Z{a$ z@Qa4in||w+A53@uz0O+5=A)i}qVsjccKt1jU;a~nT={iNWa2lOLJ9G-axcy2ci6Yw zJGK8;|K)4z{%?Hwex1}!Hyehx4-e10wM|KRecCS`j^qn^Z9nVcHOgyGA2Pha@9;i; z^+Ag{pMFi|i)>jPs@2k+7%MCO@aoYE&lI~qe3t#kRUO9p%i-7D4{Vo(SYScXaQ*{x W@T*I;C2r!^L1Lb+elF{r5}E)u39PmN literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00010.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..22d3f5c2eb87768ffb84d6c225b5699b021a6e76 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U>ba4!+nDh2#V9*f-o`%Gd zJ)Ga|g~~rRPCTj7cx@|V*uVEHgM$|=@s0K11nPo;mLDD2yQW;~D?V2!YrCSa@>$0I zMb;g=Xa1Zls%XRLTdi1h?p>kv;zzen26gpr&zz9BO5a+@+NS)Brq1R0g1uf#r`%ht zb$-SEZQi%8oc?UI@92utspsxY%iU~#{KJ}+sw?dJA74^@e|hio{WhK34&K{xYYO|! z@TRy8&b9q=&J~=K?p%*A^gb1Q$LK|wx$bu>#{T_@q>a>SjSX9baiTfRF?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/settings_blindsign_on.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00011.png similarity index 100% rename from tests/integration/nano/snapshots/nanox/settings_blindsign_on.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00011.png diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00012.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea6ff33abeb9ecec3f2f07f8c960f50aa81c9b6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#?xbb~o`%G2 zo6R5obN{6GH?jSsfN)cj{M+AuZaGR#@o+I$1?qwUgQM|#UT@OTTsr4-TDRS<^HR$% z9DL0D)Asw^4=YaV{M*eI_g}(dkLvT7R3|wp(<7Pti(G^+toE5-&;5SK!d3H6hfKAw zs@!zciZ_#Yb+ftqeV(T==T_Gq)ml-SA0|8N`pYwQ;d58+vfO{x(%SH};!KbKGHdv( zrl?M75YmpTTq_oN>d(emwM~n|-OG>6S*6TqZu8q>Z}|l_yM)IJZ*fjAJ*T;;RjxF5 z;%cLPPSrm}kIC!pIMTdakSA1q!Org;M{M^Q+HShC=DBa=!E?t-u4rv{GHtToen=+p z?3IZ!E>5Ak`jrn_c9&1}jMtv;cVEB~`$kf` f;Vg0}zWB-(BBm*nx#Ih4P{4Y+`njxgN@xNAOx(v8 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00013.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..e06738f46b9701ea6fb0360a18dfd7d65519421a GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-yba4!+nDh2#G~Xcwf!4&F zJDk7cg{nU`wg{|KT6re(-}{pb)JpjJE?BVxHGx4x^j<&z2jz+_Uv5>`7pPgQFrVSZtLpcnxBdJy8}y_1U+Z_!Y*3k6ackn6 z$vg+P8VM|wYPhUlyF|oc^Z6^yQExpo8yN4#J4-fv)XtRK*YeKu%G14F+k4|1q^CtB zeY&ffSM&C|)3Yxz*G$xO%6VU%c(CMoiK6RdrO5}^YOJ?hHorskb!z5x$^F^&$yxZa>;9Z z%w^RiMibxs^O5&zxmg1K3tusR@abdPPTh2v-+^?+3jU)P7xl~zO!5Yadb;|#taD0e F0svE&nlJzW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00014.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_blindsign/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_d zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_dV0LB*Gq$Vf#@KRE*KD3RZ_aNZGX*`NSi(C8@p4t$kzxjM9~>ii4Nw2+kt^V9aW z{?}iiNNj%~_%LQWCn~Pwi(A{(Qn`Wzw_V8jr-b*qyrg?{XYZv|Kd9^y@oj z^<|#$E}!yFR@Ls+*G&TNU&bvupCMuNQhu4R=}Y+@sfr}=Pe=Z5SZ;Q2_Gz1Iv*+LT zxo6}o`y|f8BmMTa1wX0zopr03isC-2eap literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00002.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..d885fe67b493f41a049111c376b0642375e01aed GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#VBTQ`0oTA= zYd8E?-8j8&fs#o>@KLS)=XXAfTRT=HusH{TbU}g7)F3a-S8;bft$lZ3w$q*3_J`hg z8_U-mnp=GD&g9=Z#tBjx$6u%)=XtTbp7&S9(T-F$o6dN)kjF*|=HInX^UTmYv`^n@ zTGo!+b`LBsey(4R!K}J!g3#*?LJw{G{%Jh=7Z{a$ z@Qa4in||w+A53@uz0O+5=A)i}qVsjccKt1jU;a~nT={iNWa2lOLJ9G-axcy2ci6Yw zJGK8;|K)4z{%?Hwex1}!Hyehx4-e10wM|KRecCS`j^qn^Z9nVcHOgyGA2Pha@9;i; z^+Ag{pMFi|i)>jPs@2k+7%MCO@aoYE&lI~qe3t#kRUO9p%i-7D4{Vo(SYScXaQ*{x W@T*I;C2r!^L1Lb+elF{r5}E)u39PmN literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00003.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..22d3f5c2eb87768ffb84d6c225b5699b021a6e76 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U>ba4!+nDh2#V9*f-o`%Gd zJ)Ga|g~~rRPCTj7cx@|V*uVEHgM$|=@s0K11nPo;mLDD2yQW;~D?V2!YrCSa@>$0I zMb;g=Xa1Zls%XRLTdi1h?p>kv;zzen26gpr&zz9BO5a+@+NS)Brq1R0g1uf#r`%ht zb$-SEZQi%8oc?UI@92utspsxY%iU~#{KJ}+sw?dJA74^@e|hio{WhK34&K{xYYO|! z@TRy8&b9q=&J~=K?p%*A^gb1Q$LK|wx$bu>#{T_@q>a>SjSX9baiTfRF?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/settings_expert_mode_enabled.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00004.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/settings_expert_mode_enabled.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00004.png diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00005.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea6ff33abeb9ecec3f2f07f8c960f50aa81c9b6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#?xbb~o`%G2 zo6R5obN{6GH?jSsfN)cj{M+AuZaGR#@o+I$1?qwUgQM|#UT@OTTsr4-TDRS<^HR$% z9DL0D)Asw^4=YaV{M*eI_g}(dkLvT7R3|wp(<7Pti(G^+toE5-&;5SK!d3H6hfKAw zs@!zciZ_#Yb+ftqeV(T==T_Gq)ml-SA0|8N`pYwQ;d58+vfO{x(%SH};!KbKGHdv( zrl?M75YmpTTq_oN>d(emwM~n|-OG>6S*6TqZu8q>Z}|l_yM)IJZ*fjAJ*T;;RjxF5 z;%cLPPSrm}kIC!pIMTdakSA1q!Org;M{M^Q+HShC=DBa=!E?t-u4rv{GHtToen=+p z?3IZ!E>5Ak`jrn_c9&1}jMtv;cVEB~`$kf` f;Vg0}zWB-(BBm*nx#Ih4P{4Y+`njxgN@xNAOx(v8 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00006.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..e06738f46b9701ea6fb0360a18dfd7d65519421a GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-yba4!+nDh2#G~Xcwf!4&F zJDk7cg{nU`wg{|KT6re(-}{pb)JpjJE?BVxHGx4x^j<&z2jz+_Uv5>`7pPgQFrVSZtLpcnxBdJy8}y_1U+Z_!Y*3k6ackn6 z$vg+P8VM|wYPhUlyF|oc^Z6^yQExpo8yN4#J4-fv)XtRK*YeKu%G14F+k4|1q^CtB zeY&ffSM&C|)3Yxz*G$xO%6VU%c(CMoiK6RdrO5}^YOJ?hHorskb!z5x$^F^&$yxZa>;9Z z%w^RiMibxs^O5&zxmg1K3tusR@abdPPTh2v-+^?+3jU)P7xl~zO!5Yadb;|#taD0e F0svE&nlJzW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00007.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_dV0LB*Gq$Vf#@KRE*KD3RZ_aNZGX*`NSi(C8@p4t$kzxjM9~>ii4Nw2+kt^V9aW z{?}iiNNj%~_%LQWCn~Pwi(A{(Qn`Wzw_V8jr-b*qyrg?{XYZv|Kd9^y@oj z^<|#$E}!yFR@Ls+*G&TNU&bvupCMuNQhu4R=}Y+@sfr}=Pe=Z5SZ;Q2_Gz1Iv*+LT zxo6}o`y|f8BmMTa1wX0zopr03isC-2eap literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00009.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..d885fe67b493f41a049111c376b0642375e01aed GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#VBTQ`0oTA= zYd8E?-8j8&fs#o>@KLS)=XXAfTRT=HusH{TbU}g7)F3a-S8;bft$lZ3w$q*3_J`hg z8_U-mnp=GD&g9=Z#tBjx$6u%)=XtTbp7&S9(T-F$o6dN)kjF*|=HInX^UTmYv`^n@ zTGo!+b`LBsey(4R!K}J!g3#*?LJw{G{%Jh=7Z{a$ z@Qa4in||w+A53@uz0O+5=A)i}qVsjccKt1jU;a~nT={iNWa2lOLJ9G-axcy2ci6Yw zJGK8;|K)4z{%?Hwex1}!Hyehx4-e10wM|KRecCS`j^qn^Z9nVcHOgyGA2Pha@9;i; z^+Ag{pMFi|i)>jPs@2k+7%MCO@aoYE&lI~qe3t#kRUO9p%i-7D4{Vo(SYScXaQ*{x W@T*I;C2r!^L1Lb+elF{r5}E)u39PmN literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/settings_expert_mode_enabled.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00010.png similarity index 100% rename from tests/integration/nano/snapshots/nanox/settings_expert_mode_enabled.png rename to tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00010.png diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00011.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..22d3f5c2eb87768ffb84d6c225b5699b021a6e76 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U>ba4!+nDh2#V9*f-o`%Gd zJ)Ga|g~~rRPCTj7cx@|V*uVEHgM$|=@s0K11nPo;mLDD2yQW;~D?V2!YrCSa@>$0I zMb;g=Xa1Zls%XRLTdi1h?p>kv;zzen26gpr&zz9BO5a+@+NS)Brq1R0g1uf#r`%ht zb$-SEZQi%8oc?UI@92utspsxY%iU~#{KJ}+sw?dJA74^@e|hio{WhK34&K{xYYO|! z@TRy8&b9q=&J~=K?p%*A^gb1Q$LK|wx$bu>#{T_@q>a>SjSX9baiTfRF?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00012.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea6ff33abeb9ecec3f2f07f8c960f50aa81c9b6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#?xbb~o`%G2 zo6R5obN{6GH?jSsfN)cj{M+AuZaGR#@o+I$1?qwUgQM|#UT@OTTsr4-TDRS<^HR$% z9DL0D)Asw^4=YaV{M*eI_g}(dkLvT7R3|wp(<7Pti(G^+toE5-&;5SK!d3H6hfKAw zs@!zciZ_#Yb+ftqeV(T==T_Gq)ml-SA0|8N`pYwQ;d58+vfO{x(%SH};!KbKGHdv( zrl?M75YmpTTq_oN>d(emwM~n|-OG>6S*6TqZu8q>Z}|l_yM)IJZ*fjAJ*T;;RjxF5 z;%cLPPSrm}kIC!pIMTdakSA1q!Org;M{M^Q+HShC=DBa=!E?t-u4rv{GHtToen=+p z?3IZ!E>5Ak`jrn_c9&1}jMtv;cVEB~`$kf` f;Vg0}zWB-(BBm*nx#Ih4P{4Y+`njxgN@xNAOx(v8 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00013.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..e06738f46b9701ea6fb0360a18dfd7d65519421a GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-yba4!+nDh2#G~Xcwf!4&F zJDk7cg{nU`wg{|KT6re(-}{pb)JpjJE?BVxHGx4x^j<&z2jz+_Uv5>`7pPgQFrVSZtLpcnxBdJy8}y_1U+Z_!Y*3k6ackn6 z$vg+P8VM|wYPhUlyF|oc^Z6^yQExpo8yN4#J4-fv)XtRK*YeKu%G14F+k4|1q^CtB zeY&ffSM&C|)3Yxz*G$xO%6VU%c(CMoiK6RdrO5}^YOJ?hHorskb!z5x$^F^&$yxZa>;9Z z%w^RiMibxs^O5&zxmg1K3tusR@abdPPTh2v-+^?+3jU)P7xl~zO!5Yadb;|#taD0e F0svE&nlJzW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00014.png b/tests/integration/nano/snapshots/nanosp/test_menu/test_toggle_expert_mode/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_d zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_dV0LB*Gq$Vf#@KRE*KD3RZ_aNZGX*`NSi(C8@p4t$kzxjM9~>ii4Nw2+kt^V9aW z{?}iiNNj%~_%LQWCn~Pwi(A{(Qn`Wzw_V8jr-b*qyrg?{XYZv|Kd9^y@oj z^<|#$E}!yFR@Ls+*G&TNU&bvupCMuNQhu4R=}Y+@sfr}=Pe=Z5SZ;Q2_Gz1Iv*+LT zxo6}o`y|f8BmMTa1wX0zopr03isC-2eap literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_home_menu/00002.png b/tests/integration/nano/snapshots/nanox/test_menu/test_home_menu/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..d885fe67b493f41a049111c376b0642375e01aed GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#VBTQ`0oTA= zYd8E?-8j8&fs#o>@KLS)=XXAfTRT=HusH{TbU}g7)F3a-S8;bft$lZ3w$q*3_J`hg z8_U-mnp=GD&g9=Z#tBjx$6u%)=XtTbp7&S9(T-F$o6dN)kjF*|=HInX^UTmYv`^n@ zTGo!+b`LBsey(4R!K}J!g3#*?LJw{G{%Jh=7Z{a$ z@Qa4in||w+A53@uz0O+5=A)i}qVsjccKt1jU;a~nT={iNWa2lOLJ9G-axcy2ci6Yw zJGK8;|K)4z{%?Hwex1}!Hyehx4-e10wM|KRecCS`j^qn^Z9nVcHOgyGA2Pha@9;i; z^+Ag{pMFi|i)>jPs@2k+7%MCO@aoYE&lI~qe3t#kRUO9p%i-7D4{Vo(SYScXaQ*{x W@T*I;C2r!^L1Lb+elF{r5}E)u39PmN literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/quit.png b/tests/integration/nano/snapshots/nanox/test_menu/test_home_menu/00003.png similarity index 100% rename from tests/integration/nano/snapshots/nanox/quit.png rename to tests/integration/nano/snapshots/nanox/test_menu/test_home_menu/00003.png diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00000.png b/tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..22d3f5c2eb87768ffb84d6c225b5699b021a6e76 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U>ba4!+nDh2#V9*f-o`%Gd zJ)Ga|g~~rRPCTj7cx@|V*uVEHgM$|=@s0K11nPo;mLDD2yQW;~D?V2!YrCSa@>$0I zMb;g=Xa1Zls%XRLTdi1h?p>kv;zzen26gpr&zz9BO5a+@+NS)Brq1R0g1uf#r`%ht zb$-SEZQi%8oc?UI@92utspsxY%iU~#{KJ}+sw?dJA74^@e|hio{WhK34&K{xYYO|! z@TRy8&b9q=&J~=K?p%*A^gb1Q$LK|wx$bu>#{T_@q>a>SjSX9baiTfRF?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00001.png b/tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea6ff33abeb9ecec3f2f07f8c960f50aa81c9b6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#?xbb~o`%G2 zo6R5obN{6GH?jSsfN)cj{M+AuZaGR#@o+I$1?qwUgQM|#UT@OTTsr4-TDRS<^HR$% z9DL0D)Asw^4=YaV{M*eI_g}(dkLvT7R3|wp(<7Pti(G^+toE5-&;5SK!d3H6hfKAw zs@!zciZ_#Yb+ftqeV(T==T_Gq)ml-SA0|8N`pYwQ;d58+vfO{x(%SH};!KbKGHdv( zrl?M75YmpTTq_oN>d(emwM~n|-OG>6S*6TqZu8q>Z}|l_yM)IJZ*fjAJ*T;;RjxF5 z;%cLPPSrm}kIC!pIMTdakSA1q!Org;M{M^Q+HShC=DBa=!E?t-u4rv{GHtToen=+p z?3IZ!E>5Ak`jrn_c9&1}jMtv;cVEB~`$kf` f;Vg0}zWB-(BBm*nx#Ih4P{4Y+`njxgN@xNAOx(v8 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00002.png b/tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..e06738f46b9701ea6fb0360a18dfd7d65519421a GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-yba4!+nDh2#G~Xcwf!4&F zJDk7cg{nU`wg{|KT6re(-}{pb)JpjJE?BVxHGx4x^j<&z2jz+_Uv5>`7pPgQFrVSZtLpcnxBdJy8}y_1U+Z_!Y*3k6ackn6 z$vg+P8VM|wYPhUlyF|oc^Z6^yQExpo8yN4#J4-fv)XtRK*YeKu%G14F+k4|1q^CtB zeY&ffSM&C|)3Yxz*G$xO%6VU%c(CMoiK6RdrO5}^YOJ?hHorskb!z5x$^F^&$yxZa>;9Z z%w^RiMibxs^O5&zxmg1K3tusR@abdPPTh2v-+^?+3jU)P7xl~zO!5Yadb;|#taD0e F0svE&nlJzW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00003.png b/tests/integration/nano/snapshots/nanox/test_menu/test_settings_menu/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_d zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_dV0LB*Gq$Vf#@KRE*KD3RZ_aNZGX*`NSi(C8@p4t$kzxjM9~>ii4Nw2+kt^V9aW z{?}iiNNj%~_%LQWCn~Pwi(A{(Qn`Wzw_V8jr-b*qyrg?{XYZv|Kd9^y@oj z^<|#$E}!yFR@Ls+*G&TNU&bvupCMuNQhu4R=}Y+@sfr}=Pe=Z5SZ;Q2_Gz1Iv*+LT zxo6}o`y|f8BmMTa1wX0zopr03isC-2eap literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00002.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..d885fe67b493f41a049111c376b0642375e01aed GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#VBTQ`0oTA= zYd8E?-8j8&fs#o>@KLS)=XXAfTRT=HusH{TbU}g7)F3a-S8;bft$lZ3w$q*3_J`hg z8_U-mnp=GD&g9=Z#tBjx$6u%)=XtTbp7&S9(T-F$o6dN)kjF*|=HInX^UTmYv`^n@ zTGo!+b`LBsey(4R!K}J!g3#*?LJw{G{%Jh=7Z{a$ z@Qa4in||w+A53@uz0O+5=A)i}qVsjccKt1jU;a~nT={iNWa2lOLJ9G-axcy2ci6Yw zJGK8;|K)4z{%?Hwex1}!Hyehx4-e10wM|KRecCS`j^qn^Z9nVcHOgyGA2Pha@9;i; z^+Ag{pMFi|i)>jPs@2k+7%MCO@aoYE&lI~qe3t#kRUO9p%i-7D4{Vo(SYScXaQ*{x W@T*I;C2r!^L1Lb+elF{r5}E)u39PmN literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00003.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..22d3f5c2eb87768ffb84d6c225b5699b021a6e76 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U>ba4!+nDh2#V9*f-o`%Gd zJ)Ga|g~~rRPCTj7cx@|V*uVEHgM$|=@s0K11nPo;mLDD2yQW;~D?V2!YrCSa@>$0I zMb;g=Xa1Zls%XRLTdi1h?p>kv;zzen26gpr&zz9BO5a+@+NS)Brq1R0g1uf#r`%ht zb$-SEZQi%8oc?UI@92utspsxY%iU~#{KJ}+sw?dJA74^@e|hio{WhK34&K{xYYO|! z@TRy8&b9q=&J~=K?p%*A^gb1Q$LK|wx$bu>#{T_@q>a>SjSX9baiTfRF?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00004.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea6ff33abeb9ecec3f2f07f8c960f50aa81c9b6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#?xbb~o`%G2 zo6R5obN{6GH?jSsfN)cj{M+AuZaGR#@o+I$1?qwUgQM|#UT@OTTsr4-TDRS<^HR$% z9DL0D)Asw^4=YaV{M*eI_g}(dkLvT7R3|wp(<7Pti(G^+toE5-&;5SK!d3H6hfKAw zs@!zciZ_#Yb+ftqeV(T==T_Gq)ml-SA0|8N`pYwQ;d58+vfO{x(%SH};!KbKGHdv( zrl?M75YmpTTq_oN>d(emwM~n|-OG>6S*6TqZu8q>Z}|l_yM)IJZ*fjAJ*T;;RjxF5 z;%cLPPSrm}kIC!pIMTdakSA1q!Org;M{M^Q+HShC=DBa=!E?t-u4rv{GHtToen=+p z?3IZ!E>5Ak`jrn_c9&1}jMtv;cVEB~`$kf` f;Vg0}zWB-(BBm*nx#Ih4P{4Y+`njxgN@xNAOx(v8 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00005.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..94d6d85b34bed6891796a76d3a31281ad17049f3 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U!m)PBBS}6z4Px_doasy_!sb%%hbJxZk)ATzGJiWxqwurRn`3dcmDNeo)5V^&peY&TKaO}<{0i!&VBE=E-#i? zIZvj-Nz~o0@*t~pjmUb7|M`dX<^LYO{(j{`KDIw|U!M?a@0YIyfD z=eFujyE5JWQkvnmlA{0RvD<%{)O78ze9ZlAuB|#_cU1^e*c_IAuLE84rZqfOJGf@Q oO8SK6)qkb8hVj7y6G$K6sc+UZxXkFk{uD^m)78&qol`;+0K31)cK`qY literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00006.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..e06738f46b9701ea6fb0360a18dfd7d65519421a GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-yba4!+nDh2#G~Xcwf!4&F zJDk7cg{nU`wg{|KT6re(-}{pb)JpjJE?BVxHGx4x^j<&z2jz+_Uv5>`7pPgQFrVSZtLpcnxBdJy8}y_1U+Z_!Y*3k6ackn6 z$vg+P8VM|wYPhUlyF|oc^Z6^yQExpo8yN4#J4-fv)XtRK*YeKu%G14F+k4|1q^CtB zeY&ffSM&C|)3Yxz*G$xO%6VU%c(CMoiK6RdrO5}^YOJ?hHorskb!z5x$^F^&$yxZa>;9Z z%w^RiMibxs^O5&zxmg1K3tusR@abdPPTh2v-+^?+3jU)P7xl~zO!5Yadb;|#taD0e F0svE&nlJzW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00007.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_dV0LB*Gq$Vf#@KRE*KD3RZ_aNZGX*`NSi(C8@p4t$kzxjM9~>ii4Nw2+kt^V9aW z{?}iiNNj%~_%LQWCn~Pwi(A{(Qn`Wzw_V8jr-b*qyrg?{XYZv|Kd9^y@oj z^<|#$E}!yFR@Ls+*G&TNU&bvupCMuNQhu4R=}Y+@sfr}=Pe=Z5SZ;Q2_Gz1Iv*+LT zxo6}o`y|f8BmMTa1wX0zopr03isC-2eap literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00009.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..d885fe67b493f41a049111c376b0642375e01aed GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#VBTQ`0oTA= zYd8E?-8j8&fs#o>@KLS)=XXAfTRT=HusH{TbU}g7)F3a-S8;bft$lZ3w$q*3_J`hg z8_U-mnp=GD&g9=Z#tBjx$6u%)=XtTbp7&S9(T-F$o6dN)kjF*|=HInX^UTmYv`^n@ zTGo!+b`LBsey(4R!K}J!g3#*?LJw{G{%Jh=7Z{a$ z@Qa4in||w+A53@uz0O+5=A)i}qVsjccKt1jU;a~nT={iNWa2lOLJ9G-axcy2ci6Yw zJGK8;|K)4z{%?Hwex1}!Hyehx4-e10wM|KRecCS`j^qn^Z9nVcHOgyGA2Pha@9;i; z^+Ag{pMFi|i)>jPs@2k+7%MCO@aoYE&lI~qe3t#kRUO9p%i-7D4{Vo(SYScXaQ*{x W@T*I;C2r!^L1Lb+elF{r5}E)u39PmN literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00010.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..22d3f5c2eb87768ffb84d6c225b5699b021a6e76 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U>ba4!+nDh2#V9*f-o`%Gd zJ)Ga|g~~rRPCTj7cx@|V*uVEHgM$|=@s0K11nPo;mLDD2yQW;~D?V2!YrCSa@>$0I zMb;g=Xa1Zls%XRLTdi1h?p>kv;zzen26gpr&zz9BO5a+@+NS)Brq1R0g1uf#r`%ht zb$-SEZQi%8oc?UI@92utspsxY%iU~#{KJ}+sw?dJA74^@e|hio{WhK34&K{xYYO|! z@TRy8&b9q=&J~=K?p%*A^gb1Q$LK|wx$bu>#{T_@q>a>SjSX9baiTfRF?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00011.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..94d6d85b34bed6891796a76d3a31281ad17049f3 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U!m)PBBS}6z4Px_doasy_!sb%%hbJxZk)ATzGJiWxqwurRn`3dcmDNeo)5V^&peY&TKaO}<{0i!&VBE=E-#i? zIZvj-Nz~o0@*t~pjmUb7|M`dX<^LYO{(j{`KDIw|U!M?a@0YIyfD z=eFujyE5JWQkvnmlA{0RvD<%{)O78ze9ZlAuB|#_cU1^e*c_IAuLE84rZqfOJGf@Q oO8SK6)qkb8hVj7y6G$K6sc+UZxXkFk{uD^m)78&qol`;+0K31)cK`qY literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00012.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea6ff33abeb9ecec3f2f07f8c960f50aa81c9b6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#?xbb~o`%G2 zo6R5obN{6GH?jSsfN)cj{M+AuZaGR#@o+I$1?qwUgQM|#UT@OTTsr4-TDRS<^HR$% z9DL0D)Asw^4=YaV{M*eI_g}(dkLvT7R3|wp(<7Pti(G^+toE5-&;5SK!d3H6hfKAw zs@!zciZ_#Yb+ftqeV(T==T_Gq)ml-SA0|8N`pYwQ;d58+vfO{x(%SH};!KbKGHdv( zrl?M75YmpTTq_oN>d(emwM~n|-OG>6S*6TqZu8q>Z}|l_yM)IJZ*fjAJ*T;;RjxF5 z;%cLPPSrm}kIC!pIMTdakSA1q!Org;M{M^Q+HShC=DBa=!E?t-u4rv{GHtToen=+p z?3IZ!E>5Ak`jrn_c9&1}jMtv;cVEB~`$kf` f;Vg0}zWB-(BBm*nx#Ih4P{4Y+`njxgN@xNAOx(v8 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00013.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..e06738f46b9701ea6fb0360a18dfd7d65519421a GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-yba4!+nDh2#G~Xcwf!4&F zJDk7cg{nU`wg{|KT6re(-}{pb)JpjJE?BVxHGx4x^j<&z2jz+_Uv5>`7pPgQFrVSZtLpcnxBdJy8}y_1U+Z_!Y*3k6ackn6 z$vg+P8VM|wYPhUlyF|oc^Z6^yQExpo8yN4#J4-fv)XtRK*YeKu%G14F+k4|1q^CtB zeY&ffSM&C|)3Yxz*G$xO%6VU%c(CMoiK6RdrO5}^YOJ?hHorskb!z5x$^F^&$yxZa>;9Z z%w^RiMibxs^O5&zxmg1K3tusR@abdPPTh2v-+^?+3jU)P7xl~zO!5Yadb;|#taD0e F0svE&nlJzW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00014.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_blindsign/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_d zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_dV0LB*Gq$Vf#@KRE*KD3RZ_aNZGX*`NSi(C8@p4t$kzxjM9~>ii4Nw2+kt^V9aW z{?}iiNNj%~_%LQWCn~Pwi(A{(Qn`Wzw_V8jr-b*qyrg?{XYZv|Kd9^y@oj z^<|#$E}!yFR@Ls+*G&TNU&bvupCMuNQhu4R=}Y+@sfr}=Pe=Z5SZ;Q2_Gz1Iv*+LT zxo6}o`y|f8BmMTa1wX0zopr03isC-2eap literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00002.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..d885fe67b493f41a049111c376b0642375e01aed GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#VBTQ`0oTA= zYd8E?-8j8&fs#o>@KLS)=XXAfTRT=HusH{TbU}g7)F3a-S8;bft$lZ3w$q*3_J`hg z8_U-mnp=GD&g9=Z#tBjx$6u%)=XtTbp7&S9(T-F$o6dN)kjF*|=HInX^UTmYv`^n@ zTGo!+b`LBsey(4R!K}J!g3#*?LJw{G{%Jh=7Z{a$ z@Qa4in||w+A53@uz0O+5=A)i}qVsjccKt1jU;a~nT={iNWa2lOLJ9G-axcy2ci6Yw zJGK8;|K)4z{%?Hwex1}!Hyehx4-e10wM|KRecCS`j^qn^Z9nVcHOgyGA2Pha@9;i; z^+Ag{pMFi|i)>jPs@2k+7%MCO@aoYE&lI~qe3t#kRUO9p%i-7D4{Vo(SYScXaQ*{x W@T*I;C2r!^L1Lb+elF{r5}E)u39PmN literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00003.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..22d3f5c2eb87768ffb84d6c225b5699b021a6e76 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U>ba4!+nDh2#V9*f-o`%Gd zJ)Ga|g~~rRPCTj7cx@|V*uVEHgM$|=@s0K11nPo;mLDD2yQW;~D?V2!YrCSa@>$0I zMb;g=Xa1Zls%XRLTdi1h?p>kv;zzen26gpr&zz9BO5a+@+NS)Brq1R0g1uf#r`%ht zb$-SEZQi%8oc?UI@92utspsxY%iU~#{KJ}+sw?dJA74^@e|hio{WhK34&K{xYYO|! z@TRy8&b9q=&J~=K?p%*A^gb1Q$LK|wx$bu>#{T_@q>a>SjSX9baiTfRF?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00004.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e9acdbd453cdeed5882d259ed65d2dd19db67d GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#;G|{+o`%Ho z^!!7A`;WwaI~b|v%yelQ1NZ;$DY{HTy{3EhfVyDd!K2gbUrQw4;#2&=d*!0-^NE}P zev~`#KINGHH1_WdDlgkO6ldJd^uK2Jw#V?*H!Ge^k!I88b-`aEetWwg8XBen3)UKiZx%>ncmvB=~3|ynW{?J z)eHN*uFBn9@GtON*m~QP+%JvlM)!HV^x1!<9=emKX*T2Op2)U+oZByaJ-63)9qY`g z58t)dTb$aabyCsWqW|Wz|H~FEUA^$qy2{Lp3?~1Aw>6f|XVhf7seihmdKI;Vst038#_!~g&Q literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00005.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea6ff33abeb9ecec3f2f07f8c960f50aa81c9b6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#?xbb~o`%G2 zo6R5obN{6GH?jSsfN)cj{M+AuZaGR#@o+I$1?qwUgQM|#UT@OTTsr4-TDRS<^HR$% z9DL0D)Asw^4=YaV{M*eI_g}(dkLvT7R3|wp(<7Pti(G^+toE5-&;5SK!d3H6hfKAw zs@!zciZ_#Yb+ftqeV(T==T_Gq)ml-SA0|8N`pYwQ;d58+vfO{x(%SH};!KbKGHdv( zrl?M75YmpTTq_oN>d(emwM~n|-OG>6S*6TqZu8q>Z}|l_yM)IJZ*fjAJ*T;;RjxF5 z;%cLPPSrm}kIC!pIMTdakSA1q!Org;M{M^Q+HShC=DBa=!E?t-u4rv{GHtToen=+p z?3IZ!E>5Ak`jrn_c9&1}jMtv;cVEB~`$kf` f;Vg0}zWB-(BBm*nx#Ih4P{4Y+`njxgN@xNAOx(v8 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00006.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..e06738f46b9701ea6fb0360a18dfd7d65519421a GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-yba4!+nDh2#G~Xcwf!4&F zJDk7cg{nU`wg{|KT6re(-}{pb)JpjJE?BVxHGx4x^j<&z2jz+_Uv5>`7pPgQFrVSZtLpcnxBdJy8}y_1U+Z_!Y*3k6ackn6 z$vg+P8VM|wYPhUlyF|oc^Z6^yQExpo8yN4#J4-fv)XtRK*YeKu%G14F+k4|1q^CtB zeY&ffSM&C|)3Yxz*G$xO%6VU%c(CMoiK6RdrO5}^YOJ?hHorskb!z5x$^F^&$yxZa>;9Z z%w^RiMibxs^O5&zxmg1K3tusR@abdPPTh2v-+^?+3jU)P7xl~zO!5Yadb;|#taD0e F0svE&nlJzW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00007.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_dV0LB*Gq$Vf#@KRE*KD3RZ_aNZGX*`NSi(C8@p4t$kzxjM9~>ii4Nw2+kt^V9aW z{?}iiNNj%~_%LQWCn~Pwi(A{(Qn`Wzw_V8jr-b*qyrg?{XYZv|Kd9^y@oj z^<|#$E}!yFR@Ls+*G&TNU&bvupCMuNQhu4R=}Y+@sfr}=Pe=Z5SZ;Q2_Gz1Iv*+LT zxo6}o`y|f8BmMTa1wX0zopr03isC-2eap literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00009.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..d885fe67b493f41a049111c376b0642375e01aed GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#VBTQ`0oTA= zYd8E?-8j8&fs#o>@KLS)=XXAfTRT=HusH{TbU}g7)F3a-S8;bft$lZ3w$q*3_J`hg z8_U-mnp=GD&g9=Z#tBjx$6u%)=XtTbp7&S9(T-F$o6dN)kjF*|=HInX^UTmYv`^n@ zTGo!+b`LBsey(4R!K}J!g3#*?LJw{G{%Jh=7Z{a$ z@Qa4in||w+A53@uz0O+5=A)i}qVsjccKt1jU;a~nT={iNWa2lOLJ9G-axcy2ci6Yw zJGK8;|K)4z{%?Hwex1}!Hyehx4-e10wM|KRecCS`j^qn^Z9nVcHOgyGA2Pha@9;i; z^+Ag{pMFi|i)>jPs@2k+7%MCO@aoYE&lI~qe3t#kRUO9p%i-7D4{Vo(SYScXaQ*{x W@T*I;C2r!^L1Lb+elF{r5}E)u39PmN literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00010.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e9acdbd453cdeed5882d259ed65d2dd19db67d GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#;G|{+o`%Ho z^!!7A`;WwaI~b|v%yelQ1NZ;$DY{HTy{3EhfVyDd!K2gbUrQw4;#2&=d*!0-^NE}P zev~`#KINGHH1_WdDlgkO6ldJd^uK2Jw#V?*H!Ge^k!I88b-`aEetWwg8XBen3)UKiZx%>ncmvB=~3|ynW{?J z)eHN*uFBn9@GtON*m~QP+%JvlM)!HV^x1!<9=emKX*T2Op2)U+oZByaJ-63)9qY`g z58t)dTb$aabyCsWqW|Wz|H~FEUA^$qy2{Lp3?~1Aw>6f|XVhf7seihmdKI;Vst038#_!~g&Q literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00011.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..22d3f5c2eb87768ffb84d6c225b5699b021a6e76 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{U>ba4!+nDh2#V9*f-o`%Gd zJ)Ga|g~~rRPCTj7cx@|V*uVEHgM$|=@s0K11nPo;mLDD2yQW;~D?V2!YrCSa@>$0I zMb;g=Xa1Zls%XRLTdi1h?p>kv;zzen26gpr&zz9BO5a+@+NS)Brq1R0g1uf#r`%ht zb$-SEZQi%8oc?UI@92utspsxY%iU~#{KJ}+sw?dJA74^@e|hio{WhK34&K{xYYO|! z@TRy8&b9q=&J~=K?p%*A^gb1Q$LK|wx$bu>#{T_@q>a>SjSX9baiTfRF?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00012.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea6ff33abeb9ecec3f2f07f8c960f50aa81c9b6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Gba4!+nDh2#?xbb~o`%G2 zo6R5obN{6GH?jSsfN)cj{M+AuZaGR#@o+I$1?qwUgQM|#UT@OTTsr4-TDRS<^HR$% z9DL0D)Asw^4=YaV{M*eI_g}(dkLvT7R3|wp(<7Pti(G^+toE5-&;5SK!d3H6hfKAw zs@!zciZ_#Yb+ftqeV(T==T_Gq)ml-SA0|8N`pYwQ;d58+vfO{x(%SH};!KbKGHdv( zrl?M75YmpTTq_oN>d(emwM~n|-OG>6S*6TqZu8q>Z}|l_yM)IJZ*fjAJ*T;;RjxF5 z;%cLPPSrm}kIC!pIMTdakSA1q!Org;M{M^Q+HShC=DBa=!E?t-u4rv{GHtToen=+p z?3IZ!E>5Ak`jrn_c9&1}jMtv;cVEB~`$kf` f;Vg0}zWB-(BBm*nx#Ih4P{4Y+`njxgN@xNAOx(v8 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00013.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..e06738f46b9701ea6fb0360a18dfd7d65519421a GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-yba4!+nDh2#G~Xcwf!4&F zJDk7cg{nU`wg{|KT6re(-}{pb)JpjJE?BVxHGx4x^j<&z2jz+_Uv5>`7pPgQFrVSZtLpcnxBdJy8}y_1U+Z_!Y*3k6ackn6 z$vg+P8VM|wYPhUlyF|oc^Z6^yQExpo8yN4#J4-fv)XtRK*YeKu%G14F+k4|1q^CtB zeY&ffSM&C|)3Yxz*G$xO%6VU%c(CMoiK6RdrO5}^YOJ?hHorskb!z5x$^F^&$yxZa>;9Z z%w^RiMibxs^O5&zxmg1K3tusR@abdPPTh2v-+^?+3jU)P7xl~zO!5Yadb;|#taD0e F0svE&nlJzW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00014.png b/tests/integration/nano/snapshots/nanox/test_menu/test_toggle_expert_mode/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..08e112b5bf992226837e896d8e15df7c54a7d430 GIT binary patch literal 506 zcmV zraBvdY?1-Eb_hV8`!Pm{otLsh077e%i~=;S0eAGpycB86FO>STE5jQ;JbloRi@;ACzcc4Ow~Pa8oegRaP4eafL#57ehM{kmha zx3UPK&XU2-e>Tq=x#F`_XF}ZrJ9P#$Klcxwu0@0GoE|hH+yC1Ks2OB*;T(3OYo%Y0 zxBMVA_y5&`+NtsM@akgRgypYv#q>fx)x$fl8mfXXv#nXpA1U$6rR-?# zmz!|stXFHM!h7-qyBN0t27ri&Rx^F#56m$pC3&Zq~EgvPXv81)wY`{TS5$bzTQO;&dl$^ui!F>uU9PmjU;RprM-k w6W%Y;9p0kibP1vj`F~wZL_|bHL`1Z|9|<^C2@_d None: if app.backend.firmware.device == "nanos": ### Simulate `navigate_review` up to `ACCEPT_RISK` because the nanos screen can look like it hasn't changed. - def assert_screen_i(i): - app.assert_screen(f"{str(i).zfill(5)}", snapshot_dir / "clear") - - app.backend.wait_for_text_not_on_screen(ScreenText.HOME) - for i in range(6): + instructions: List[Union[NavIns, NavInsID]] = [ # 'Review operation' - # 'Expression {{{...{{{' - # 'Expression {{{...{{{' - # 'The transaction cannot be trusted.' - # 'Parsing error ERR_TOO_DEEP' - # 'Learn More: bit.ly/ledger-tez' - assert_screen_i(i) - app.backend.right_click() - # 'Accept risk' screen - assert_screen_i(i+1) - app.backend.both_click() + NavInsID.RIGHT_CLICK, # 'Expression {{{...{{{' + NavInsID.RIGHT_CLICK, # 'Expression {{{...{{{' + NavInsID.RIGHT_CLICK, # 'The transaction cannot be trusted.' + NavInsID.RIGHT_CLICK, # 'Parsing error ERR_TOO_DEEP' + NavInsID.RIGHT_CLICK, # 'Learn More: bit.ly/ledger-tez' + NavInsID.RIGHT_CLICK, # 'Accept risk' + NavInsID.BOTH_CLICK, + ] + + app.unsafe_navigate( + instructions=instructions, + screen_change_before_first_instruction=True, + screen_change_after_last_instruction=False, + snap_path=snapshot_dir / "clear", + ) else: app.navigate_review( text=ScreenText.ACCEPT_RISK, diff --git a/tests/integration/nano/test_sign/test_key.py b/tests/integration/nano/test_sign/test_key.py index 484fed181..1db218a6d 100644 --- a/tests/integration/nano/test_sign/test_key.py +++ b/tests/integration/nano/test_sign/test_key.py @@ -21,7 +21,7 @@ import pytest from utils.account import Account, SigType -from utils.app import Screen, TezosAppScreen +from utils.app import TezosAppScreen from utils.message import MichelineExpr, Transaction @pytest.mark.parametrize( @@ -66,7 +66,7 @@ def test_sign_micheline_basic(app: TezosAppScreen, account: Account, snapshot_di def test_sign_with_another_seed(app: TezosAppScreen, snapshot_dir: Path): """Check signing using another seed than [zebra*24]""" - app.setup_expert_mode() + app.toggle_expert_mode() account = Account("m/44'/1729'/0'/0'", SigType.ED25519, diff --git a/tests/integration/nano/test_sign/test_parsing_errors.py b/tests/integration/nano/test_sign/test_parsing_errors.py index 7af2ed5b3..6cddb4d15 100755 --- a/tests/integration/nano/test_sign/test_parsing_errors.py +++ b/tests/integration/nano/test_sign/test_parsing_errors.py @@ -56,7 +56,7 @@ def test_parsing_error(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): """Check parsing error handling""" - app.setup_expert_mode() + app.toggle_expert_mode() with StatusCode.PARSE_ERROR.expected(): app.reject_signing( @@ -77,7 +77,7 @@ def test_parsing_error(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): def test_parsing_hard_fail(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): """Check parsing error hard failing""" - app.setup_expert_mode() + app.toggle_expert_mode() with StatusCode.UNEXPECTED_SIGN_STATE.expected(): app.sign( diff --git a/tests/integration/nano/test_wrong_apdu.py b/tests/integration/nano/test_wrong_apdu.py index 9c7081c2e..13e15c872 100644 --- a/tests/integration/nano/test_wrong_apdu.py +++ b/tests/integration/nano/test_wrong_apdu.py @@ -22,14 +22,14 @@ import pytest from utils.account import Account, SigType -from utils.app import Screen, TezosAppScreen, DEFAULT_ACCOUNT +from utils.app import TezosAppScreen, DEFAULT_ACCOUNT from utils.backend import Cla, Index, Ins, StatusCode from utils.message import Transaction def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Path): """Check the app still runs after rejects signing""" - app.setup_expert_mode() + app.toggle_expert_mode() with StatusCode.REJECT.expected(): app.reject_public_key(DEFAULT_ACCOUNT, snap_path=snapshot_dir / "reject_public_key") diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index 6d1cbcb08..b54bee6c4 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -22,7 +22,6 @@ import time from typing import Callable, List, Optional, TypeVar, Union -import requests from ragger.backend import SpeculosBackend from ragger.navigator import NavIns, NavInsID, NanoNavigator @@ -103,21 +102,6 @@ def __enter__(self) -> "SpeculosTezosBackend": self._client.process = process return self -class Screen(str, Enum): - """Class representing common, known app screens.""" - - HOME = "home" - VERSION = "version" - SETTINGS = "settings" - SETTINGS_EXPERT_MODE_DISABLED = "settings_expert_mode_disabled" - SETTINGS_EXPERT_MODE_ENABLED = "settings_expert_mode_enabled" - SETTINGS_BLINDSIGN_ON = "settings_blindsign_on" - SETTINGS_BLINDSIGN_OFF = "settings_blindsign_off" - SETTINGS_BACK = "back" - QUIT = "quit" - - def __str__(self) -> str: - return self.value class ScreenText(str, Enum): """Class representing common, known app screen's text.""" @@ -145,10 +129,6 @@ class TezosAppScreen(): backend: SpeculosTezosBackend _root_dir: Path - snapshots_dir: Path - tmp_snapshots_dir: Path - snapshotted: List[str] - golden_run: bool navigator: NanoNavigator def __init__(self, @@ -156,15 +136,6 @@ def __init__(self, golden_run: bool): self.backend = backend self._root_dir = Path(__file__).resolve().parent.parent - self.snapshots_dir = self._root_dir / "snapshots" / backend.firmware.name - self.tmp_snapshots_dir = self._root_dir / "snapshots-tmp" / backend.firmware.name - if not self.snapshots_dir.is_dir() and golden_run: - self.snapshots_dir.mkdir(parents=True) - if not self.tmp_snapshots_dir.is_dir(): - self.tmp_snapshots_dir.mkdir(parents=True) - self.snapshotted = [] - - self.golden_run = golden_run self.navigator = NanoNavigator(backend, backend.firmware, golden_run) def __enter__(self) -> "TezosAppScreen": @@ -174,90 +145,6 @@ def __enter__(self) -> "TezosAppScreen": def __exit__(self, *args): self.backend.__exit__(*args) - def assert_screen(self, - screen: Union[str, Screen], - path: Optional[Union[str, Path]] = None) -> None: - """Check if the screen is the one expected.""" - golden_run = self.golden_run and screen not in self.snapshotted - if golden_run: - self.snapshotted = self.snapshotted + [screen] - input(f"Press ENTER to snapshot {screen}") - - snapshots_dir = self.snapshots_dir if path is None \ - else self.snapshots_dir / path - tmp_snapshots_dir = self.tmp_snapshots_dir if path is None \ - else self.tmp_snapshots_dir / path - - if not snapshots_dir.is_dir() and golden_run: - snapshots_dir.mkdir(parents=True) - if not tmp_snapshots_dir.is_dir(): - tmp_snapshots_dir.mkdir(parents=True) - - path = snapshots_dir / f'{screen}.png' - tmp_path = tmp_snapshots_dir / f'{screen}.png' - def check(): - print(f"- Expecting {screen} -") - assert self.backend.compare_screen_with_snapshot( - path, - tmp_snap_path=tmp_path, - golden_run=golden_run) - - with_retry(check) - self.backend._last_screenshot = BytesIO(self.backend._client.get_screenshot()) - - def setup_expert_mode(self) -> None: - """Enable expert-mode from home screen.""" - self.assert_screen(Screen.HOME) - self.backend.right_click() - self.assert_screen(Screen.VERSION) - self.backend.right_click() - self.assert_screen(Screen.SETTINGS) - self.backend.both_click() - self.assert_screen(Screen.SETTINGS_EXPERT_MODE_DISABLED) - self.backend.both_click() - self.assert_screen(Screen.SETTINGS_EXPERT_MODE_ENABLED) - self.backend.left_click() - self.assert_screen(Screen.SETTINGS_BACK) - self.backend.both_click() - self.assert_screen(Screen.HOME) - - def setup_blindsign_on(self) -> None: - """Enable blindsign from home screen.""" - self.assert_screen(Screen.HOME) - self.backend.right_click() - self.assert_screen(Screen.VERSION) - self.backend.right_click() - self.assert_screen(Screen.SETTINGS) - self.backend.both_click() - # expert_mode screen - self.backend.right_click() - self.assert_screen(Screen.SETTINGS_BLINDSIGN_OFF) - self.backend.both_click() - self.assert_screen(Screen.SETTINGS_BLINDSIGN_ON) - self.backend.right_click() - self.assert_screen(Screen.SETTINGS_BACK) - self.backend.both_click() - self.assert_screen(Screen.HOME) - - def _quit(self) -> None: - """Ensure quiting exit the app.""" - self.assert_screen(Screen.QUIT) - try: - self.backend.both_click() - assert False, "Must have lost connection with speculos" - except requests.exceptions.ConnectionError: - pass - - def quit(self) -> None: - """Quit the app from home screen.""" - self.assert_screen(Screen.HOME) - self.backend.right_click() - self.assert_screen(Screen.VERSION) - self.backend.right_click() - self.assert_screen(Screen.SETTINGS) - self.backend.right_click() - self._quit() - def navigate(self, snap_path: Optional[Path] = None, screen_change_before_first_instruction: bool = False, @@ -284,6 +171,99 @@ def navigate_until_text(self, **kwargs ) + def unsafe_navigate( + self, + instructions: List[Union[NavIns, NavInsID]], + snap_path: Optional[Path] = None, + timeout: float = 10.0, + screen_change_before_first_instruction: bool = False, + screen_change_after_last_instruction: bool = True, + snap_start_idx: int = 0) -> None: + """Navigate using instructions but do not wait for screens to + change. Only use this function if consecutive screens are the + same. + + Function based on `ragger.navigator.navigate_and_compare` + + """ + self.backend.pause_ticker() + self.navigator._run_instruction( + NavIns(NavInsID.WAIT, (0, )), + timeout, + wait_for_screen_change=screen_change_before_first_instruction, + path=self._root_dir, + test_case_name=snap_path, + snap_idx=snap_start_idx + ) + for idx, instruction in enumerate(instructions): + if idx + 1 != len(instructions) or screen_change_after_last_instruction: + self.navigator._run_instruction( + instruction, + timeout, + wait_for_screen_change=False, + path=self._root_dir, + test_case_name=snap_path, + snap_idx=snap_start_idx + idx + 1 + ) + else: + self.navigator._run_instruction( + instruction, + timeout, + wait_for_screen_change=False, + snap_idx=snap_start_idx + idx + 1 + ) + self.backend.resume_ticker() + + def navigate_to_settings(self, **kwargs) -> int: + """Navigate from Home screen to settings.""" + instructions: List[Union[NavIns, NavInsID]] = [ + # Home + NavInsID.RIGHT_CLICK, # Version + NavInsID.RIGHT_CLICK, # Settings + NavInsID.BOTH_CLICK, + ] + self.navigate(instructions=instructions, **kwargs) + snap_start_idx = kwargs['snap_start_idx'] if 'snap_start_idx' in kwargs else 0 + return snap_start_idx + len(instructions) + + def toggle_expert_mode(self, **kwargs) -> int: + """Enable expert-mode from home screen.""" + go_to_settings_kwargs = kwargs.copy() + go_to_settings_kwargs['screen_change_after_last_instruction'] = True + snap_idx = self.navigate_to_settings(**go_to_settings_kwargs) + + instructions: List[Union[NavIns, NavInsID]] = [ + # Expert Mode + NavInsID.BOTH_CLICK, + NavInsID.RIGHT_CLICK, # Blind Sign + NavInsID.RIGHT_CLICK, # Back + NavInsID.BOTH_CLICK, # Home + ] + kwargs['snap_start_idx'] = snap_idx + kwargs['screen_change_before_first_instruction'] = False + self.navigate(instructions=instructions, **kwargs) + + return snap_idx + len(instructions) + + def toggle_blindsign(self, **kwargs) -> int: + """Enable blindsign from home screen.""" + go_to_settings_kwargs = kwargs.copy() + go_to_settings_kwargs['screen_change_after_last_instruction'] = True + snap_idx = self.navigate_to_settings(**go_to_settings_kwargs) + + instructions: List[Union[NavIns, NavInsID]] = [ + # Expert Mode + NavInsID.RIGHT_CLICK, # Blind Sign + NavInsID.BOTH_CLICK, + NavInsID.RIGHT_CLICK, # Back + NavInsID.BOTH_CLICK, # Home + ] + kwargs['snap_start_idx'] = snap_idx + kwargs['screen_change_before_first_instruction'] = False + self.navigate(instructions=instructions, **kwargs) + + return snap_idx + len(instructions) + def navigate_forward(self, **kwargs) -> None: """Navigate forward until the text is found.""" self.navigate_until_text(navigate_instruction=NavInsID.RIGHT_CLICK, **kwargs) From c566ef3e02a48935ce39607b4cf8069291febd0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 11 Dec 2024 11:45:33 +0100 Subject: [PATCH 10/12] [test] use a pytest param account set to DEFAULT_ACCOUNT Instead of using it directly + Move DEFAULT_ACCOUNT and DEFAULT_SEED into `account.py` --- tests/integration/nano/conftest.py | 9 ++- tests/integration/nano/test_public_key.py | 6 +- .../test_sign/operations/test_sign_ballot.py | 9 +-- .../test_sign_batched_operations.py | 21 +++--- .../operations/test_sign_delegation.py | 9 +-- .../operations/test_sign_failing_noop.py | 9 +-- .../test_sign_increase_paid_storage.py | 9 +-- .../operations/test_sign_origination.py | 9 +-- .../operations/test_sign_proposals.py | 9 +-- .../test_sign_register_global_constant.py | 9 +-- .../test_sign/operations/test_sign_reveal.py | 9 +-- .../test_sign_sc_rollup_add_messages.py | 9 +-- ...t_sign_sc_rollup_execute_outbox_message.py | 9 +-- .../test_sign_sc_rollup_originate.py | 9 +-- .../operations/test_sign_set_consensus_key.py | 9 +-- .../operations/test_sign_set_deposit_limit.py | 9 +-- .../operations/test_sign_transaction.py | 59 +++++++++-------- .../operations/test_sign_transfer_ticket.py | 15 +++-- .../nano/test_sign/test_apdu_sign.py | 18 ++--- .../nano/test_sign/test_blindsign.py | 66 ++++++++++--------- .../nano/test_sign/test_parsing_errors.py | 11 ++-- tests/integration/nano/test_wrong_apdu.py | 44 ++++++------- tests/integration/nano/utils/account.py | 9 +++ tests/integration/nano/utils/app.py | 8 +-- 24 files changed, 207 insertions(+), 176 deletions(-) diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py index dddd236a7..1268f3d3e 100644 --- a/tests/integration/nano/conftest.py +++ b/tests/integration/nano/conftest.py @@ -22,7 +22,8 @@ import pytest from ragger.firmware import Firmware -from utils.app import TezosAppScreen, SpeculosTezosBackend, DEFAULT_SEED +from utils.account import Account, DEFAULT_ACCOUNT, DEFAULT_SEED +from utils.app import TezosAppScreen, SpeculosTezosBackend FIRMWARES: List[Firmware] = [ Firmware.NANOS, @@ -150,6 +151,12 @@ def seed(request) -> str: param = getattr(request, "param", None) return param.get("seed", DEFAULT_SEED) if param else DEFAULT_SEED +@pytest.fixture(scope="function") +def account(request) -> Account: + """Get `account` for pytest.""" + param = getattr(request, "param", None) + return param.get("account", DEFAULT_ACCOUNT) if param else DEFAULT_ACCOUNT + @pytest.fixture(scope="function") def backend(app_path: Path, firmware: Firmware, diff --git a/tests/integration/nano/test_public_key.py b/tests/integration/nano/test_public_key.py index 1670e5f7e..2484e75a5 100644 --- a/tests/integration/nano/test_public_key.py +++ b/tests/integration/nano/test_public_key.py @@ -21,7 +21,7 @@ import pytest from utils.account import Account, PublicKey, SigType -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.app import TezosAppScreen from utils.backend import StatusCode accounts = [ @@ -67,8 +67,8 @@ def test_provide_pk(app: TezosAppScreen, account: Account, snapshot_dir: Path): f"Expected public key {expected_public_key} but got {public_key}" -def test_reject_pk(app: TezosAppScreen, snapshot_dir: Path): +def test_reject_pk(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check reject pk behaviour""" with StatusCode.REJECT.expected(): - app.reject_public_key(DEFAULT_ACCOUNT, snap_path=snapshot_dir) + app.reject_public_key(account, snap_path=snapshot_dir) diff --git a/tests/integration/nano/test_sign/operations/test_sign_ballot.py b/tests/integration/nano/test_sign/operations/test_sign_ballot.py index c6ab3ad5c..39835e16d 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_ballot.py +++ b/tests/integration/nano/test_sign/operations/test_sign_ballot.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import Ballot -def test_sign_ballot(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_ballot(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing ballot""" message = Ballot( @@ -31,12 +32,12 @@ def test_sign_ballot(app: TezosAppScreen, snapshot_dir: Path): period = 32 ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py index 0b289d627..6875f8296 100644 --- a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py +++ b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py @@ -20,7 +20,8 @@ from conftest import requires_device -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import ( OperationGroup, Origination, @@ -29,7 +30,7 @@ ) @requires_device("nanos") -def test_nanos_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): +def test_nanos_regression_batched_ops(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing batch operation""" app.toggle_expert_mode() @@ -57,18 +58,18 @@ def test_nanos_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): ) ]) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) @requires_device("nanox") -def test_nanox_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): +def test_nanox_regression_batched_ops(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing batch operation""" app.toggle_expert_mode() @@ -96,17 +97,17 @@ def test_nanox_regression_batched_ops(app: TezosAppScreen, snapshot_dir: Path): ) ]) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_sign_complex_operation(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_complex_operation(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing complex operation""" app.toggle_expert_mode() @@ -136,12 +137,12 @@ def test_sign_complex_operation(app: TezosAppScreen, snapshot_dir: Path): ) ]) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_delegation.py b/tests/integration/nano/test_sign/operations/test_sign_delegation.py index 75d3241ef..b777d0c5f 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_delegation.py +++ b/tests/integration/nano/test_sign/operations/test_sign_delegation.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import Delegation -def test_sign_delegation(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_delegation(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing delegation""" message = Delegation( @@ -33,12 +34,12 @@ def test_sign_delegation(app: TezosAppScreen, snapshot_dir: Path): delegate = 'tz1TmFPVZsGQ8MnrBJtnECJgkFUwLa6EWYDm' ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py index 609c9ef11..f1983ef53 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py +++ b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py @@ -18,20 +18,21 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import FailingNoop -def test_sign_failing_noop(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_failing_noop(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing failing noop""" message = FailingNoop("9f09f2952d34528c733f94615cfc39bc555619fc550dd4a67ba2208ce8e867aa3d13a6ef99dfbe32c6974aa9a2150d21eca29c3349e59c13b9081f1c11b440ac4d3455dedbe4ee0de15a8af620d4c86247d9d132de1bb6da23d5ff9d8dffda22ba9a84") - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py index b18fc1703..69a456847 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py +++ b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import IncreasePaidStorage -def test_sign_increase_paid_storage(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_increase_paid_storage(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing increase paid storage""" message = IncreasePaidStorage( @@ -34,12 +35,12 @@ def test_sign_increase_paid_storage(app: TezosAppScreen, snapshot_dir: Path): destination = "KT18amZmM5W7qDWVt2pH6uj7sCEd3kbzLrHT" ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_origination.py b/tests/integration/nano/test_sign/operations/test_sign_origination.py index 53a6a92f7..c3cc05b3a 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_origination.py +++ b/tests/integration/nano/test_sign/operations/test_sign_origination.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import Origination -def test_sign_origination(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_origination(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing origination""" app.toggle_expert_mode() @@ -37,12 +38,12 @@ def test_sign_origination(app: TezosAppScreen, snapshot_dir: Path): balance = 500000 ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_proposals.py b/tests/integration/nano/test_sign/operations/test_sign_proposals.py index 948182f71..2f81eb770 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_proposals.py +++ b/tests/integration/nano/test_sign/operations/test_sign_proposals.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import Proposals -def test_sign_proposals(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_proposals(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing proposals""" message = Proposals( @@ -33,12 +34,12 @@ def test_sign_proposals(app: TezosAppScreen, snapshot_dir: Path): period = 32 ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py index ef485011f..e30604297 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py +++ b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import RegisterGlobalConstant -def test_sign_register_global_constant(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_register_global_constant(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing register global constant""" app.toggle_expert_mode() @@ -35,12 +36,12 @@ def test_sign_register_global_constant(app: TezosAppScreen, snapshot_dir: Path): value = {'prim': 'Pair', 'args': [{'string': '1'}, {'int': 2}]} ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_reveal.py b/tests/integration/nano/test_sign/operations/test_sign_reveal.py index 05b2bfb83..48d1db68c 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_reveal.py +++ b/tests/integration/nano/test_sign/operations/test_sign_reveal.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import Reveal -def test_sign_reveal(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_reveal(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing reveal""" message = Reveal( @@ -33,12 +34,12 @@ def test_sign_reveal(app: TezosAppScreen, snapshot_dir: Path): public_key = 'edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY' ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py index 6a0372f7b..b91fdd592 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import ScRollupAddMessage -def test_sign_sc_rollup_add_messages(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_sc_rollup_add_messages(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing smart rollup add message""" message = ScRollupAddMessage( @@ -33,12 +34,12 @@ def test_sign_sc_rollup_add_messages(app: TezosAppScreen, snapshot_dir: Path): message = [bytes.fromhex('012345'), bytes.fromhex('67'), bytes.fromhex('89abcdef')] ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py index f391921a2..81e04a07f 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import ScRollupExecuteOutboxMessage -def test_sign_sc_rollup_execute_outbox_message(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_sc_rollup_execute_outbox_message(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing smart rollup execute outbox message""" app.toggle_expert_mode() @@ -37,12 +38,12 @@ def test_sign_sc_rollup_execute_outbox_message(app: TezosAppScreen, snapshot_dir output_proof = b'9f09f2952d34528c733f94615cfc39bc555619fc550dd4a67ba2208ce8e867aa3d13a6ef99dfbe32c6974aa9a2150d21eca29c3349e59c13b9081f1c11b440ac4d3455dedbe4ee0de15a8af620d4c86247d9d132de1bb6da23d5ff9d8dffda22ba9a84' ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py index 0e9e1c12a..3743adcf2 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py @@ -21,7 +21,8 @@ import pytest -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import ScRollupOriginate @@ -41,7 +42,7 @@ "with_whitelist", ], ) -def test_sign_sc_rollup_originate(app: TezosAppScreen, whitelist: Optional[List[str]], snapshot_dir: Path): +def test_sign_sc_rollup_originate(app: TezosAppScreen, account: Account, whitelist: Optional[List[str]], snapshot_dir: Path): """Check signing smart rollup originate""" app.toggle_expert_mode() @@ -58,12 +59,12 @@ def test_sign_sc_rollup_originate(app: TezosAppScreen, whitelist: Optional[List[ whitelist = whitelist ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py index 61d8db686..f385b90e9 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import UpdateConsensusKey -def test_sign_set_consensus_key(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_set_consensus_key(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing set consensus key""" message = UpdateConsensusKey( @@ -33,12 +34,12 @@ def test_sign_set_consensus_key(app: TezosAppScreen, snapshot_dir: Path): pk = "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY" ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py index 4bda6ec6c..217917bd2 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py @@ -18,10 +18,11 @@ from pathlib import Path -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import SetDepositLimit -def test_sign_set_deposit_limit(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_set_deposit_limit(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing set deposit limit""" message = SetDepositLimit( @@ -33,12 +34,12 @@ def test_sign_set_deposit_limit(app: TezosAppScreen, snapshot_dir: Path): limit = 20000 ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_transaction.py b/tests/integration/nano/test_sign/operations/test_sign_transaction.py index 18198cfc8..1575c16ff 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transaction.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transaction.py @@ -18,11 +18,12 @@ from pathlib import Path -from utils.app import ScreenText, TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import ScreenText, TezosAppScreen from utils.backend import StatusCode from utils.message import Transaction -def test_sign_transaction(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing transaction""" app.toggle_expert_mode() @@ -39,17 +40,17 @@ def test_sign_transaction(app: TezosAppScreen, snapshot_dir: Path): parameter = {'prim': 'CAR'} ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_reject_transaction(app: TezosAppScreen, snapshot_dir: Path): +def test_reject_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check reject transaction""" app.toggle_expert_mode() @@ -67,12 +68,12 @@ def test_reject_transaction(app: TezosAppScreen, snapshot_dir: Path): ) with StatusCode.REJECT.expected(): - app.reject_signing(DEFAULT_ACCOUNT, + app.reject_signing(account, message, with_hash=True, snap_path=snapshot_dir) -def test_sign_simple_transaction(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_simple_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign not complex transaction""" app.toggle_expert_mode() @@ -87,17 +88,17 @@ def test_sign_simple_transaction(app: TezosAppScreen, snapshot_dir: Path): amount = 10000 ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_too_complex_transaction(app: TezosAppScreen, snapshot_dir: Path): +def test_too_complex_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign complex transaction""" message = Transaction( @@ -114,13 +115,13 @@ def test_too_complex_transaction(app: TezosAppScreen, snapshot_dir: Path): with StatusCode.REJECT.expected(): app.sign( - DEFAULT_ACCOUNT, + account, message, with_hash=True, navigate=lambda: app.navigate_review(text=ScreenText.BACK_HOME, snap_path=snapshot_dir) ) -def test_sign_stake_transaction(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_stake_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign stake""" app.toggle_expert_mode() @@ -136,17 +137,17 @@ def test_sign_stake_transaction(app: TezosAppScreen, snapshot_dir: Path): entrypoint = 'stake', ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_sign_unstake_transaction(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_unstake_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign unstake""" app.toggle_expert_mode() @@ -162,17 +163,17 @@ def test_sign_unstake_transaction(app: TezosAppScreen, snapshot_dir: Path): entrypoint = 'unstake' ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_sign_finalize_unstake_transaction(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_finalize_unstake_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign finalize_unstake""" app.toggle_expert_mode() @@ -188,17 +189,17 @@ def test_sign_finalize_unstake_transaction(app: TezosAppScreen, snapshot_dir: Pa entrypoint = 'finalize_unstake' ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign set delegate parameters""" app.toggle_expert_mode() @@ -223,17 +224,17 @@ def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, snapshot_ ]} ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_sign_with_long_hash(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_with_long_hash(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing transaction with a long destination hash""" app.toggle_expert_mode() @@ -250,17 +251,17 @@ def test_sign_with_long_hash(app: TezosAppScreen, snapshot_dir: Path): parameter = {'int': 0} ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_ensure_always_clearsign(app: TezosAppScreen, snapshot_dir: Path): +def test_ensure_always_clearsign(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check clear signing never blindsign""" app.toggle_expert_mode() @@ -277,12 +278,12 @@ def test_ensure_always_clearsign(app: TezosAppScreen, snapshot_dir: Path): parameter = [{'prim':'pair','args':[{'string':"["},{'prim':'pair','args':[{'string':"Z"},{'prim':'pair','args':[{'string':"Y"},{'prim':'pair','args':[{'string':"X"},{'prim':'pair','args':[{'string':"W"},{'prim':'pair','args':[{'string':"V"},{'prim':'pair','args':[{'string':"U"},{'prim':'pair','args':[{'string':"T"},{'prim':'pair','args':[{'string':"S"},{'prim':'pair','args':[{'string':"R"},{'prim':'pair','args':[{'string':"Q"},{'prim':'pair','args':[{'string':"P"},{'prim':'pair','args':[{'string':"O"},{'prim':'pair','args':[{'string':"N"},{'prim':'pair','args':[{'string':"M"},{'prim':'pair','args':[{'string':"L"},{'prim':'pair','args':[{'string':"K"},{'prim':'pair','args':[{'string':"J"},{'prim':'pair','args':[{'string':"I"},{'prim':'pair','args':[{'string':"H"},{'prim':'pair','args':[{'string':"G"},{'prim':'pair','args':[{'string':"F"},{'prim':'pair','args':[{'string':"E"},{'prim':'pair','args':[{'string':"D"},{'prim':'pair','args':[{'string':"C"},{'prim':'pair','args':[{'string':"B"},[]]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{'prim':'pair','args':[{'int':10},{'prim':'pair','args':[{'int':9},{'prim':'pair','args':[{'int':8},{'prim':'pair','args':[{'int':7},{'prim':'pair','args':[{'int':6},{'prim':'pair','args':[{'int':5},{'prim':'pair','args':[{'int':4},{'prim':'pair','args':[{'int':3},{'prim':'pair','args':[{'int':2},{'prim':'pair','args':[{'int':1},[]]}]}]}]}]}]}]}]}]}]}] ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py index 6ba362b2a..7b205f289 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py @@ -19,10 +19,11 @@ from pathlib import Path from conftest import requires_device -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import TezosAppScreen from utils.message import TransferTicket -def test_sign_transfer_ticket(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_transfer_ticket(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing transfer ticket""" app.toggle_expert_mode() @@ -40,18 +41,18 @@ def test_sign_transfer_ticket(app: TezosAppScreen, snapshot_dir: Path): destination = 'KT18amZmM5W7qDWVt2pH6uj7sCEd3kbzLrHT' ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) @requires_device("nanosp") -def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, snapshot_dir: Path): +def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing operation that display potentially empty screens""" app.toggle_expert_mode() @@ -70,12 +71,12 @@ def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, snapshot_ entrypoint = 'S\n\nS\nS\nS' ) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=True, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) diff --git a/tests/integration/nano/test_sign/test_apdu_sign.py b/tests/integration/nano/test_sign/test_apdu_sign.py index fdf68b2a0..d7c9e2686 100644 --- a/tests/integration/nano/test_sign/test_apdu_sign.py +++ b/tests/integration/nano/test_sign/test_apdu_sign.py @@ -20,25 +20,25 @@ from conftest import requires_device from utils.account import Account -from utils.app import send_and_navigate, TezosAppScreen, DEFAULT_ACCOUNT +from utils.app import send_and_navigate, TezosAppScreen from utils.message import Message, MichelineExpr, Transaction -def test_sign_micheline_without_hash(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_micheline_without_hash(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing micheline wihout getting hash""" message = MichelineExpr([{'string': 'CACA'}, {'string': 'POPO'}, {'string': 'BOUDIN'}]) - data = app.sign(DEFAULT_ACCOUNT, + data = app.sign(account, message, with_hash=False, snap_path=snapshot_dir) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=False, data=data) -def test_sign_with_small_packet(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_with_small_packet(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check signing using small packet instead of full size packets""" app.toggle_expert_mode() @@ -71,22 +71,22 @@ def check_sign_with_small_packet( ) check_sign_with_small_packet( - account=DEFAULT_ACCOUNT, + account=account, message=message, path=snapshot_dir) @requires_device("nanosp") -def test_nanosp_regression_press_right_works_across_apdu_recieves(app: TezosAppScreen, snapshot_dir: Path): +def test_nanosp_regression_press_right_works_across_apdu_recieves(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check no need to click right two times between APDUs during signing flow""" message = MichelineExpr([{'prim':'IF_NONE','args':[[[{'prim':'SWAP'},{'prim':'IF','args':[[{'prim':'DIP','args':[[[{'prim':'DROP','args':[{'int':1}]},{'prim':'PUSH','args':[{'prim':'unit'},{'prim':'Unit'}]},{'prim':'PUSH','args':[{'prim':'bool'},{'prim':'True'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':';L\\S?p$-Fq)VDg\n]te\no4v0_8)\"'}]}]]]}],[[{'prim':'DROP','args':[{'int':2}]},{'prim':'PUSH','args':[{'prim':'unit'},{'prim':'Unit'}]},{'prim':'PUSH','args':[{'prim':'bool'},{'prim':'False'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':'Li-%*edF6~?E[5Kmu?dyviwJ^2\"\\d$FyQ>>!>D$g(Qg'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':'*Tx None: ) app.navigate_sign_accept(snap_path=path / "summary") - _sign_too_long(app, message, navigate) + _sign_too_long(app, account, message, navigate) def _reject_too_long( app: TezosAppScreen, + account: Account, message: Message, status_code: StatusCode, navigate: Callable[[], None]): @@ -81,7 +85,7 @@ def _reject_too_long( with status_code.expected(): app.sign( - DEFAULT_ACCOUNT, + account, message, with_hash=True, navigate=navigate @@ -157,11 +161,11 @@ def _reject_too_long( ) ]) -def test_sign_basic_too_long_operation(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_basic_too_long_operation(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign too long operation""" - _sign_decodable_too_long(app, BASIC_OPERATION, snapshot_dir) + _sign_decodable_too_long(app, account, BASIC_OPERATION, snapshot_dir) -def test_reject_basic_too_long_operation_at_warning(app: TezosAppScreen, snapshot_dir: Path): +def test_reject_basic_too_long_operation_at_warning(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check reject too long operation at warning""" def navigate() -> None: @@ -169,9 +173,9 @@ def navigate() -> None: snap_path=snapshot_dir / "clear_n_too_long_warning" ) - _reject_too_long(app, BASIC_OPERATION, StatusCode.REJECT, navigate) + _reject_too_long(app, account, BASIC_OPERATION, StatusCode.REJECT, navigate) -def test_reject_basic_too_long_operation_at_summary(app: TezosAppScreen, snapshot_dir: Path): +def test_reject_basic_too_long_operation_at_summary(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check reject too long operation at summary""" def navigate() -> None: @@ -183,12 +187,12 @@ def navigate() -> None: snap_path=snapshot_dir / "summary" ) - _reject_too_long(app, BASIC_OPERATION, StatusCode.REJECT, navigate) + _reject_too_long(app, account, BASIC_OPERATION, StatusCode.REJECT, navigate) ### Different kind of too long operation ### -def test_sign_too_long_operation_with_only_transactions(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_too_long_operation_with_only_transactions(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign too long operation that contains only transaction""" message = OperationGroup([ Transaction( @@ -246,9 +250,9 @@ def test_sign_too_long_operation_with_only_transactions(app: TezosAppScreen, sna amount = 5000000 ) ]) - _sign_decodable_too_long(app, message, snapshot_dir) + _sign_decodable_too_long(app, account, message, snapshot_dir) -def test_sign_too_long_operation_without_fee_or_amount(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_too_long_operation_without_fee_or_amount(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign too long operation that doesn't have fees or amount""" message = Proposals( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -276,7 +280,7 @@ def test_sign_too_long_operation_without_fee_or_amount(app: TezosAppScreen, snap ], period = 32 ) - _sign_decodable_too_long(app, message, snapshot_dir) + _sign_decodable_too_long(app, account, message, snapshot_dir) ### Too long operation containing a too large number ### @@ -331,7 +335,7 @@ def test_sign_too_long_operation_without_fee_or_amount(app: TezosAppScreen, snap ) ]) -def test_sign_too_long_operation_with_too_large(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_too_long_operation_with_too_large(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check sign too long operation that will also fail the parsing""" def navigate() -> None: @@ -343,9 +347,9 @@ def navigate() -> None: snap_path=snapshot_dir / "blindsigning" ) - _sign_too_long(app, OPERATION_WITH_TOO_LARGE, navigate) + _sign_too_long(app, account, OPERATION_WITH_TOO_LARGE, navigate) -def test_reject_too_long_operation_with_too_large_at_too_large_warning(app: TezosAppScreen, snapshot_dir: Path): +def test_reject_too_long_operation_with_too_large_at_too_large_warning(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check reject too long operation that will also fail the parsing at too large warning""" def navigate() -> None: @@ -353,9 +357,9 @@ def navigate() -> None: snap_path=snapshot_dir / "clear_n_too_large_warning" ) - _reject_too_long(app, OPERATION_WITH_TOO_LARGE, StatusCode.PARSE_ERROR, navigate) + _reject_too_long(app, account, OPERATION_WITH_TOO_LARGE, StatusCode.PARSE_ERROR, navigate) -def test_reject_too_long_operation_with_too_large_at_blindsigning(app: TezosAppScreen, snapshot_dir: Path): +def test_reject_too_long_operation_with_too_large_at_blindsigning(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check reject too long operation that will also fail the parsing at blindsigning""" def navigate() -> None: @@ -367,9 +371,9 @@ def navigate() -> None: snap_path=snapshot_dir / "blindsigning" ) - _reject_too_long(app, OPERATION_WITH_TOO_LARGE, StatusCode.REJECT, navigate) + _reject_too_long(app, account, OPERATION_WITH_TOO_LARGE, StatusCode.REJECT, navigate) -def test_blindsign_too_deep(app: TezosAppScreen, snapshot_dir: Path): +def test_blindsign_too_deep(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check blindsigning on too deep expression""" expression = MichelineExpr([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{'int':42}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]) @@ -406,18 +410,18 @@ def navigate() -> None: ) data = app.sign( - DEFAULT_ACCOUNT, + account, expression, with_hash=True, navigate=navigate ) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=expression, with_hash=True, data=data) -def test_blindsign_too_large(app: TezosAppScreen, snapshot_dir: Path): +def test_blindsign_too_large(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check blindsigning on too large expression""" message = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) @@ -432,31 +436,31 @@ def navigate() -> None: ) data = app.sign( - DEFAULT_ACCOUNT, + account, message, with_hash=True, navigate=navigate ) - DEFAULT_ACCOUNT.check_signature( + account.check_signature( message=message, with_hash=True, data=data) -def test_blindsign_reject_from_clear(app: TezosAppScreen, snapshot_dir: Path): +def test_blindsign_reject_from_clear(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check blindsigning rejection""" expression = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) with StatusCode.PARSE_ERROR.expected(): app.reject_signing( - DEFAULT_ACCOUNT, + account, expression, with_hash=False, snap_path=snapshot_dir ) -def test_blindsign_reject_from_blind(app: TezosAppScreen, snapshot_dir: Path): +def test_blindsign_reject_from_blind(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check blindsigning rejection""" expression = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) @@ -472,7 +476,7 @@ def navigate() -> None: with StatusCode.REJECT.expected(): app.sign( - DEFAULT_ACCOUNT, + account, expression, with_hash=False, navigate=navigate diff --git a/tests/integration/nano/test_sign/test_parsing_errors.py b/tests/integration/nano/test_sign/test_parsing_errors.py index 6cddb4d15..766df7453 100755 --- a/tests/integration/nano/test_sign/test_parsing_errors.py +++ b/tests/integration/nano/test_sign/test_parsing_errors.py @@ -20,7 +20,8 @@ import pytest -from utils.app import ScreenText, TezosAppScreen, DEFAULT_ACCOUNT +from utils.account import Account +from utils.app import ScreenText, TezosAppScreen from utils.backend import StatusCode from utils.message import RawMessage @@ -53,14 +54,14 @@ "one_byte_added_inside", ] ) -def test_parsing_error(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): +def test_parsing_error(app: TezosAppScreen, raw_msg: str, account: Account, snapshot_dir: Path): """Check parsing error handling""" app.toggle_expert_mode() with StatusCode.PARSE_ERROR.expected(): app.reject_signing( - DEFAULT_ACCOUNT, + account, RawMessage(raw_msg), with_hash=True, snap_path=snapshot_dir @@ -74,14 +75,14 @@ def test_parsing_error(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): "wrong_last_packet", ] ) -def test_parsing_hard_fail(app: TezosAppScreen, raw_msg: str, snapshot_dir: Path): +def test_parsing_hard_fail(app: TezosAppScreen, raw_msg: str, account: Account, snapshot_dir: Path): """Check parsing error hard failing""" app.toggle_expert_mode() with StatusCode.UNEXPECTED_SIGN_STATE.expected(): app.sign( - DEFAULT_ACCOUNT, + account, RawMessage(raw_msg), with_hash=True, navigate=lambda: app.navigate_review( diff --git a/tests/integration/nano/test_wrong_apdu.py b/tests/integration/nano/test_wrong_apdu.py index 13e15c872..7715ae6a8 100644 --- a/tests/integration/nano/test_wrong_apdu.py +++ b/tests/integration/nano/test_wrong_apdu.py @@ -22,17 +22,17 @@ import pytest from utils.account import Account, SigType -from utils.app import TezosAppScreen, DEFAULT_ACCOUNT +from utils.app import TezosAppScreen from utils.backend import Cla, Index, Ins, StatusCode from utils.message import Transaction -def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Path): +def test_regression_continue_after_reject(app: TezosAppScreen, account: Account, snapshot_dir: Path): """Check the app still runs after rejects signing""" app.toggle_expert_mode() with StatusCode.REJECT.expected(): - app.reject_public_key(DEFAULT_ACCOUNT, snap_path=snapshot_dir / "reject_public_key") + app.reject_public_key(account, snap_path=snapshot_dir / "reject_public_key") app.backend.wait_for_home_screen() @@ -49,15 +49,15 @@ def test_regression_continue_after_reject(app: TezosAppScreen, snapshot_dir: Pat ) with StatusCode.REJECT.expected(): - app.reject_signing(DEFAULT_ACCOUNT, + app.reject_signing(account, message, with_hash=True, snap_path=snapshot_dir / "reject_signing") - app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) + app.backend.get_public_key(account, with_prompt=False) -def test_change_sign_instruction(app: TezosAppScreen): +def test_change_sign_instruction(app: TezosAppScreen, account: Account): """Check signing instruction changes behaviour""" message = Transaction( @@ -73,57 +73,57 @@ def test_change_sign_instruction(app: TezosAppScreen): ) payload=bytes(message) - app.backend._ask_sign(Ins.SIGN_WITH_HASH, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN_WITH_HASH, account) with StatusCode.INVALID_INS.expected(): app.backend._continue_sign(Ins.SIGN, payload, last=True) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN, account) with StatusCode.INVALID_INS.expected(): app.backend._continue_sign(Ins.SIGN_WITH_HASH, payload, last=True) -def test_mixing_command(app: TezosAppScreen): +def test_mixing_command(app: TezosAppScreen, account: Account): """Check that mixing instruction fails""" - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): app.backend.version() - app.backend._ask_sign(Ins.SIGN_WITH_HASH, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN_WITH_HASH, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN, account) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend._ask_sign(Ins.SIGN_WITH_HASH, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN_WITH_HASH, account) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=True) + app.backend.get_public_key(account, with_prompt=True) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) + app.backend.get_public_key(account, with_prompt=False) - app.backend._ask_sign(Ins.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): app.backend.git() @pytest.mark.parametrize("ins", [Ins.GET_PUBLIC_KEY, Ins.PROMPT_PUBLIC_KEY], ids=lambda ins: f"{ins}") @pytest.mark.parametrize("index", [Index.OTHER, Index.LAST], ids=lambda index: f"{index}") -def test_wrong_index(app: TezosAppScreen, ins: Ins, index: Index): +def test_wrong_index(app: TezosAppScreen, account: Account, ins: Ins, index: Index): """Check wrong apdu index behaviour""" with StatusCode.WRONG_PARAM.expected(): app.backend._exchange(ins, index=index, - sig_type=DEFAULT_ACCOUNT.sig_type, - payload=DEFAULT_ACCOUNT.path) + sig_type=account.sig_type, + payload=account.path) @pytest.mark.parametrize( diff --git a/tests/integration/nano/utils/account.py b/tests/integration/nano/utils/account.py index 5544b1789..6fd077c80 100644 --- a/tests/integration/nano/utils/account.py +++ b/tests/integration/nano/utils/account.py @@ -194,3 +194,12 @@ def check_signature( f"Fail to verify signature {signature!r}, \n\ with account {self} \n\ and message {message}" + + +DEFAULT_SEED = ' '.join(['zebra']*24) + +DEFAULT_ACCOUNT = Account( + "m/44'/1729'/0'/0'", + SigType.ED25519, + "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY" +) diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index b54bee6c4..657788546 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -26,7 +26,7 @@ from ragger.navigator import NavIns, NavInsID, NanoNavigator from .message import Message -from .account import Account, SigType +from .account import Account from .backend import TezosBackend @@ -331,9 +331,3 @@ def reject_signing(self, def navigate(): self.navigate_sign_reject(**kwargs) self.sign(account, message, with_hash, navigate) - -DEFAULT_SEED = 'zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra' - -DEFAULT_ACCOUNT = Account("m/44'/1729'/0'/0'", - SigType.ED25519, - "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY") From c0b76b6941bf923d43aafdeae85e7a5085e071a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Mon, 9 Dec 2024 09:32:17 +0100 Subject: [PATCH 11/12] [test] rename TezosAppScreen to TezosNavigator - move functions and value not related to navigator out of `navigator.py` --- tests/integration/nano/conftest.py | 13 +- tests/integration/nano/test_menu.py | 32 ++--- tests/integration/nano/test_public_key.py | 16 +-- .../test_sign/operations/test_sign_ballot.py | 15 +- .../test_sign_batched_operations.py | 45 +++--- .../operations/test_sign_delegation.py | 15 +- .../operations/test_sign_failing_noop.py | 15 +- .../test_sign_increase_paid_storage.py | 15 +- .../operations/test_sign_origination.py | 17 ++- .../operations/test_sign_proposals.py | 15 +- .../test_sign_register_global_constant.py | 17 ++- .../test_sign/operations/test_sign_reveal.py | 15 +- .../test_sign_sc_rollup_add_messages.py | 15 +- ...t_sign_sc_rollup_execute_outbox_message.py | 17 ++- .../test_sign_sc_rollup_originate.py | 16 ++- .../operations/test_sign_set_consensus_key.py | 15 +- .../operations/test_sign_set_deposit_limit.py | 15 +- .../operations/test_sign_transaction.py | 135 ++++++++++-------- .../operations/test_sign_transfer_ticket.py | 31 ++-- .../nano/test_sign/test_apdu_sign.py | 40 ++++-- .../nano/test_sign/test_blindsign.py | 116 ++++++++------- tests/integration/nano/test_sign/test_key.py | 29 ++-- .../nano/test_sign/test_parsing_errors.py | 17 +-- tests/integration/nano/test_version.py | 11 +- tests/integration/nano/test_wrong_apdu.py | 125 ++++++++-------- tests/integration/nano/utils/backend.py | 43 ++++++ .../nano/utils/{app.py => navigator.py} | 92 +++--------- 27 files changed, 523 insertions(+), 424 deletions(-) rename tests/integration/nano/utils/{app.py => navigator.py} (78%) diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py index 1268f3d3e..2e6248bd1 100644 --- a/tests/integration/nano/conftest.py +++ b/tests/integration/nano/conftest.py @@ -21,9 +21,11 @@ import pytest from ragger.firmware import Firmware +from ragger.navigator import NanoNavigator from utils.account import Account, DEFAULT_ACCOUNT, DEFAULT_SEED -from utils.app import TezosAppScreen, SpeculosTezosBackend +from utils.backend import TezosBackend, SpeculosTezosBackend +from utils.navigator import TezosNavigator FIRMWARES: List[Firmware] = [ Firmware.NANOS, @@ -163,7 +165,7 @@ def backend(app_path: Path, port: int, display: bool, seed: str, - speculos_args: List[str]) -> Generator[SpeculosTezosBackend, None, None]: + speculos_args: List[str]) -> Generator[TezosBackend, None, None]: """Get `backend` for pytest.""" if display: @@ -183,9 +185,10 @@ def backend(app_path: Path, yield b @pytest.fixture(scope="function") -def app(backend: SpeculosTezosBackend, golden_run: bool) -> TezosAppScreen: - """Get `app` for pytest.""" - return TezosAppScreen(backend, golden_run) +def tezos_navigator(backend: TezosBackend, golden_run: bool) -> TezosNavigator: + """Get `navigator` for pytest.""" + navigator = NanoNavigator(backend, backend.firmware, golden_run) + return TezosNavigator(backend, navigator) @pytest.fixture(scope="function") def snapshot_dir(request) -> Path : diff --git a/tests/integration/nano/test_menu.py b/tests/integration/nano/test_menu.py index 97ceb37bd..d29e0ca65 100755 --- a/tests/integration/nano/test_menu.py +++ b/tests/integration/nano/test_menu.py @@ -24,10 +24,10 @@ from ragger.navigator import NavIns, NavInsID from utils.backend import TezosBackend -from utils.app import TezosAppScreen +from utils.navigator import TezosNavigator -def test_home_menu(app: TezosAppScreen, snapshot_dir: Path): +def test_home_menu(tezos_navigator: TezosNavigator, snapshot_dir: Path): """Check home menu flow""" instructions: List[Union[NavIns, NavInsID]] = [ # Home @@ -35,48 +35,48 @@ def test_home_menu(app: TezosAppScreen, snapshot_dir: Path): NavInsID.RIGHT_CLICK, # Settings NavInsID.RIGHT_CLICK, # Quit ] - app.navigate( + tezos_navigator.navigate( instructions=instructions, snap_path=snapshot_dir, ) -def test_settings_menu(app: TezosAppScreen, snapshot_dir: Path): +def test_settings_menu(tezos_navigator: TezosNavigator, snapshot_dir: Path): """Check settings menu flow""" - app.navigate_to_settings() + tezos_navigator.navigate_to_settings() instructions: List[Union[NavIns, NavInsID]] = [ # Expert Mode NavInsID.RIGHT_CLICK, # Blind Sign NavInsID.RIGHT_CLICK, # Back NavInsID.BOTH_CLICK, # Home ] - app.navigate( + tezos_navigator.navigate( instructions=instructions, snap_path=snapshot_dir ) -def test_toggle_expert_mode(app: TezosAppScreen, snapshot_dir: Path): +def test_toggle_expert_mode(tezos_navigator: TezosNavigator, snapshot_dir: Path): """Check settings' expert_mode toggle""" - snap_idx = app.toggle_expert_mode(snap_path=snapshot_dir) + snap_idx = tezos_navigator.toggle_expert_mode(snap_path=snapshot_dir) # Toggle back - app.toggle_expert_mode(snap_start_idx=snap_idx, snap_path=snapshot_dir) + tezos_navigator.toggle_expert_mode(snap_start_idx=snap_idx, snap_path=snapshot_dir) -def test_toggle_blindsign(app: TezosAppScreen, snapshot_dir: Path): +def test_toggle_blindsign(tezos_navigator: TezosNavigator, snapshot_dir: Path): """Check settings' blindsign toggle""" - snap_idx = app.toggle_blindsign(snap_path=snapshot_dir) + snap_idx = tezos_navigator.toggle_blindsign(snap_path=snapshot_dir) # Toggle back - app.toggle_blindsign(snap_start_idx=snap_idx, snap_path=snapshot_dir) + tezos_navigator.toggle_blindsign(snap_start_idx=snap_idx, snap_path=snapshot_dir) -def test_quit(app: TezosAppScreen): +def test_quit(backend: TezosBackend): """Check quit app""" # Home - app.backend.left_click() - app.backend.wait_for_screen_change() # Quit + backend.left_click() + backend.wait_for_screen_change() # Quit try: - app.backend.both_click() + backend.both_click() assert False, "Must have lost connection with speculos" except requests.exceptions.ConnectionError: pass diff --git a/tests/integration/nano/test_public_key.py b/tests/integration/nano/test_public_key.py index 2484e75a5..59215aa48 100644 --- a/tests/integration/nano/test_public_key.py +++ b/tests/integration/nano/test_public_key.py @@ -21,8 +21,8 @@ import pytest from utils.account import Account, PublicKey, SigType -from utils.app import TezosAppScreen -from utils.backend import StatusCode +from utils.backend import TezosBackend, StatusCode +from utils.navigator import TezosNavigator accounts = [ Account("m/44'/1729'/0'/0'", @@ -40,12 +40,12 @@ ] @pytest.mark.parametrize("account", accounts, ids=lambda account: f"{account.sig_type}") -def test_get_pk(app: TezosAppScreen, account: Account): +def test_get_pk(backend: TezosBackend, account: Account): """Test that public keys get from the app are correct.""" expected_public_key = account.key.public_key() - data = app.backend.get_public_key(account, with_prompt=False) + data = backend.get_public_key(account, with_prompt=False) public_key = PublicKey.from_bytes(data, account.sig_type) @@ -54,12 +54,12 @@ def test_get_pk(app: TezosAppScreen, account: Account): @pytest.mark.parametrize("account", accounts, ids=lambda account: f"{account.sig_type}") -def test_provide_pk(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_provide_pk(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Test that public keys get from the app are correct and correctly displayed.""" expected_public_key = account.key.public_key() - data = app.provide_public_key(account, snap_path=snapshot_dir) + data = tezos_navigator.provide_public_key(account, snap_path=snapshot_dir) public_key = PublicKey.from_bytes(data, account.sig_type) @@ -67,8 +67,8 @@ def test_provide_pk(app: TezosAppScreen, account: Account, snapshot_dir: Path): f"Expected public key {expected_public_key} but got {public_key}" -def test_reject_pk(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_reject_pk(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check reject pk behaviour""" with StatusCode.REJECT.expected(): - app.reject_public_key(account, snap_path=snapshot_dir) + tezos_navigator.reject_public_key(account, snap_path=snapshot_dir) diff --git a/tests/integration/nano/test_sign/operations/test_sign_ballot.py b/tests/integration/nano/test_sign/operations/test_sign_ballot.py index 39835e16d..3ddeafb65 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_ballot.py +++ b/tests/integration/nano/test_sign/operations/test_sign_ballot.py @@ -19,10 +19,11 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import Ballot +from utils.navigator import TezosNavigator -def test_sign_ballot(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_ballot(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing ballot""" message = Ballot( @@ -32,10 +33,12 @@ def test_sign_ballot(app: TezosAppScreen, account: Account, snapshot_dir: Path): period = 32 ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py index 6875f8296..f3665a36a 100644 --- a/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py +++ b/tests/integration/nano/test_sign/operations/test_sign_batched_operations.py @@ -21,19 +21,20 @@ from conftest import requires_device from utils.account import Account -from utils.app import TezosAppScreen from utils.message import ( OperationGroup, Origination, Transaction, TransferTicket ) +from utils.navigator import TezosNavigator + @requires_device("nanos") -def test_nanos_regression_batched_ops(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_nanos_regression_batched_ops(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing batch operation""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = OperationGroup([ Transaction( @@ -58,10 +59,12 @@ def test_nanos_regression_batched_ops(app: TezosAppScreen, account: Account, sna ) ]) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, @@ -69,10 +72,10 @@ def test_nanos_regression_batched_ops(app: TezosAppScreen, account: Account, sna data=data) @requires_device("nanox") -def test_nanox_regression_batched_ops(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_nanox_regression_batched_ops(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing batch operation""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = OperationGroup([ Transaction( @@ -97,20 +100,22 @@ def test_nanox_regression_batched_ops(app: TezosAppScreen, account: Account, sna ) ]) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=True, data=data) -def test_sign_complex_operation(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_complex_operation(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing complex operation""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = OperationGroup([ Origination( @@ -137,10 +142,12 @@ def test_sign_complex_operation(app: TezosAppScreen, account: Account, snapshot_ ) ]) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_delegation.py b/tests/integration/nano/test_sign/operations/test_sign_delegation.py index b777d0c5f..c91749d6e 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_delegation.py +++ b/tests/integration/nano/test_sign/operations/test_sign_delegation.py @@ -19,10 +19,11 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import Delegation +from utils.navigator import TezosNavigator -def test_sign_delegation(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_delegation(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing delegation""" message = Delegation( @@ -34,10 +35,12 @@ def test_sign_delegation(app: TezosAppScreen, account: Account, snapshot_dir: Pa delegate = 'tz1TmFPVZsGQ8MnrBJtnECJgkFUwLa6EWYDm' ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py index f1983ef53..86b358050 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py +++ b/tests/integration/nano/test_sign/operations/test_sign_failing_noop.py @@ -19,18 +19,21 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import FailingNoop +from utils.navigator import TezosNavigator -def test_sign_failing_noop(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_failing_noop(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing failing noop""" message = FailingNoop("9f09f2952d34528c733f94615cfc39bc555619fc550dd4a67ba2208ce8e867aa3d13a6ef99dfbe32c6974aa9a2150d21eca29c3349e59c13b9081f1c11b440ac4d3455dedbe4ee0de15a8af620d4c86247d9d132de1bb6da23d5ff9d8dffda22ba9a84") - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py index 69a456847..e7b3dd7ea 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py +++ b/tests/integration/nano/test_sign/operations/test_sign_increase_paid_storage.py @@ -19,10 +19,11 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import IncreasePaidStorage +from utils.navigator import TezosNavigator -def test_sign_increase_paid_storage(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_increase_paid_storage(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing increase paid storage""" message = IncreasePaidStorage( @@ -35,10 +36,12 @@ def test_sign_increase_paid_storage(app: TezosAppScreen, account: Account, snaps destination = "KT18amZmM5W7qDWVt2pH6uj7sCEd3kbzLrHT" ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_origination.py b/tests/integration/nano/test_sign/operations/test_sign_origination.py index c3cc05b3a..5c167483f 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_origination.py +++ b/tests/integration/nano/test_sign/operations/test_sign_origination.py @@ -19,13 +19,14 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import Origination +from utils.navigator import TezosNavigator -def test_sign_origination(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_origination(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing origination""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Origination( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -38,10 +39,12 @@ def test_sign_origination(app: TezosAppScreen, account: Account, snapshot_dir: P balance = 500000 ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_proposals.py b/tests/integration/nano/test_sign/operations/test_sign_proposals.py index 2f81eb770..556a3f6fe 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_proposals.py +++ b/tests/integration/nano/test_sign/operations/test_sign_proposals.py @@ -19,10 +19,11 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import Proposals +from utils.navigator import TezosNavigator -def test_sign_proposals(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_proposals(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing proposals""" message = Proposals( @@ -34,10 +35,12 @@ def test_sign_proposals(app: TezosAppScreen, account: Account, snapshot_dir: Pat period = 32 ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py index e30604297..9b5fc069b 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py +++ b/tests/integration/nano/test_sign/operations/test_sign_register_global_constant.py @@ -19,13 +19,14 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import RegisterGlobalConstant +from utils.navigator import TezosNavigator -def test_sign_register_global_constant(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_register_global_constant(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing register global constant""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = RegisterGlobalConstant( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -36,10 +37,12 @@ def test_sign_register_global_constant(app: TezosAppScreen, account: Account, sn value = {'prim': 'Pair', 'args': [{'string': '1'}, {'int': 2}]} ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_reveal.py b/tests/integration/nano/test_sign/operations/test_sign_reveal.py index 48d1db68c..485f1c335 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_reveal.py +++ b/tests/integration/nano/test_sign/operations/test_sign_reveal.py @@ -19,10 +19,11 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import Reveal +from utils.navigator import TezosNavigator -def test_sign_reveal(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_reveal(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing reveal""" message = Reveal( @@ -34,10 +35,12 @@ def test_sign_reveal(app: TezosAppScreen, account: Account, snapshot_dir: Path): public_key = 'edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY' ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py index b91fdd592..230af2121 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_add_messages.py @@ -19,10 +19,11 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import ScRollupAddMessage +from utils.navigator import TezosNavigator -def test_sign_sc_rollup_add_messages(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_sc_rollup_add_messages(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing smart rollup add message""" message = ScRollupAddMessage( @@ -34,10 +35,12 @@ def test_sign_sc_rollup_add_messages(app: TezosAppScreen, account: Account, snap message = [bytes.fromhex('012345'), bytes.fromhex('67'), bytes.fromhex('89abcdef')] ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py index 81e04a07f..c67918903 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_execute_outbox_message.py @@ -19,13 +19,14 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import ScRollupExecuteOutboxMessage +from utils.navigator import TezosNavigator -def test_sign_sc_rollup_execute_outbox_message(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_sc_rollup_execute_outbox_message(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing smart rollup execute outbox message""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = ScRollupExecuteOutboxMessage( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -38,10 +39,12 @@ def test_sign_sc_rollup_execute_outbox_message(app: TezosAppScreen, account: Acc output_proof = b'9f09f2952d34528c733f94615cfc39bc555619fc550dd4a67ba2208ce8e867aa3d13a6ef99dfbe32c6974aa9a2150d21eca29c3349e59c13b9081f1c11b440ac4d3455dedbe4ee0de15a8af620d4c86247d9d132de1bb6da23d5ff9d8dffda22ba9a84' ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py index 3743adcf2..00829ae8f 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py +++ b/tests/integration/nano/test_sign/operations/test_sign_sc_rollup_originate.py @@ -22,8 +22,8 @@ import pytest from utils.account import Account -from utils.app import TezosAppScreen from utils.message import ScRollupOriginate +from utils.navigator import TezosNavigator @pytest.mark.parametrize( @@ -42,10 +42,10 @@ "with_whitelist", ], ) -def test_sign_sc_rollup_originate(app: TezosAppScreen, account: Account, whitelist: Optional[List[str]], snapshot_dir: Path): +def test_sign_sc_rollup_originate(tezos_navigator: TezosNavigator, account: Account, whitelist: Optional[List[str]], snapshot_dir: Path): """Check signing smart rollup originate""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = ScRollupOriginate( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -59,10 +59,12 @@ def test_sign_sc_rollup_originate(app: TezosAppScreen, account: Account, whiteli whitelist = whitelist ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py index f385b90e9..38cc77024 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_consensus_key.py @@ -19,10 +19,11 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import UpdateConsensusKey +from utils.navigator import TezosNavigator -def test_sign_set_consensus_key(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_set_consensus_key(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing set consensus key""" message = UpdateConsensusKey( @@ -34,10 +35,12 @@ def test_sign_set_consensus_key(app: TezosAppScreen, account: Account, snapshot_ pk = "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY" ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py index 217917bd2..3bbe4c06f 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py +++ b/tests/integration/nano/test_sign/operations/test_sign_set_deposit_limit.py @@ -19,10 +19,11 @@ from pathlib import Path from utils.account import Account -from utils.app import TezosAppScreen from utils.message import SetDepositLimit +from utils.navigator import TezosNavigator -def test_sign_set_deposit_limit(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_set_deposit_limit(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing set deposit limit""" message = SetDepositLimit( @@ -34,10 +35,12 @@ def test_sign_set_deposit_limit(app: TezosAppScreen, account: Account, snapshot_ limit = 20000 ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_transaction.py b/tests/integration/nano/test_sign/operations/test_sign_transaction.py index 1575c16ff..50540dd29 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transaction.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transaction.py @@ -19,14 +19,15 @@ from pathlib import Path from utils.account import Account -from utils.app import ScreenText, TezosAppScreen from utils.backend import StatusCode from utils.message import Transaction +from utils.navigator import ScreenText, TezosNavigator -def test_sign_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_transaction(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing transaction""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz2JPgTWZZpxZZLqHMfS69UAy1UHm4Aw5iHu', @@ -40,20 +41,22 @@ def test_sign_transaction(app: TezosAppScreen, account: Account, snapshot_dir: P parameter = {'prim': 'CAR'} ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=True, data=data) -def test_reject_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_reject_transaction(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check reject transaction""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -68,15 +71,17 @@ def test_reject_transaction(app: TezosAppScreen, account: Account, snapshot_dir: ) with StatusCode.REJECT.expected(): - app.reject_signing(account, - message, - with_hash=True, - snap_path=snapshot_dir) + tezos_navigator.reject_signing( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) -def test_sign_simple_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_simple_transaction(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign not complex transaction""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -88,17 +93,19 @@ def test_sign_simple_transaction(app: TezosAppScreen, account: Account, snapshot amount = 10000 ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=True, data=data) -def test_too_complex_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_too_complex_transaction(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign complex transaction""" message = Transaction( @@ -114,17 +121,17 @@ def test_too_complex_transaction(app: TezosAppScreen, account: Account, snapshot ) with StatusCode.REJECT.expected(): - app.sign( + tezos_navigator.sign( account, message, with_hash=True, - navigate=lambda: app.navigate_review(text=ScreenText.BACK_HOME, snap_path=snapshot_dir) + navigate=lambda: tezos_navigator.navigate_review(text=ScreenText.BACK_HOME, snap_path=snapshot_dir) ) -def test_sign_stake_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_stake_transaction(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign stake""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz2WmivuMG8MMRKMEmzKRMMxMApxZQWYNS4W', @@ -137,20 +144,22 @@ def test_sign_stake_transaction(app: TezosAppScreen, account: Account, snapshot_ entrypoint = 'stake', ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=True, data=data) -def test_sign_unstake_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_unstake_transaction(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign unstake""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz2WmivuMG8MMRKMEmzKRMMxMApxZQWYNS4W', @@ -163,20 +172,22 @@ def test_sign_unstake_transaction(app: TezosAppScreen, account: Account, snapsho entrypoint = 'unstake' ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=True, data=data) -def test_sign_finalize_unstake_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_finalize_unstake_transaction(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign finalize_unstake""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz2WmivuMG8MMRKMEmzKRMMxMApxZQWYNS4W', @@ -189,20 +200,22 @@ def test_sign_finalize_unstake_transaction(app: TezosAppScreen, account: Account entrypoint = 'finalize_unstake' ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=True, data=data) -def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_set_delegate_parameters_transaction(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign set delegate parameters""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz2WmivuMG8MMRKMEmzKRMMxMApxZQWYNS4W', @@ -224,20 +237,22 @@ def test_sign_set_delegate_parameters_transaction(app: TezosAppScreen, account: ]} ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=True, data=data) -def test_sign_with_long_hash(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_with_long_hash(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing transaction with a long destination hash""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -251,20 +266,22 @@ def test_sign_with_long_hash(app: TezosAppScreen, account: Account, snapshot_dir parameter = {'int': 0} ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=True, data=data) -def test_ensure_always_clearsign(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_ensure_always_clearsign(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check clear signing never blindsign""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = Transaction( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -278,10 +295,12 @@ def test_ensure_always_clearsign(app: TezosAppScreen, account: Account, snapshot parameter = [{'prim':'pair','args':[{'string':"["},{'prim':'pair','args':[{'string':"Z"},{'prim':'pair','args':[{'string':"Y"},{'prim':'pair','args':[{'string':"X"},{'prim':'pair','args':[{'string':"W"},{'prim':'pair','args':[{'string':"V"},{'prim':'pair','args':[{'string':"U"},{'prim':'pair','args':[{'string':"T"},{'prim':'pair','args':[{'string':"S"},{'prim':'pair','args':[{'string':"R"},{'prim':'pair','args':[{'string':"Q"},{'prim':'pair','args':[{'string':"P"},{'prim':'pair','args':[{'string':"O"},{'prim':'pair','args':[{'string':"N"},{'prim':'pair','args':[{'string':"M"},{'prim':'pair','args':[{'string':"L"},{'prim':'pair','args':[{'string':"K"},{'prim':'pair','args':[{'string':"J"},{'prim':'pair','args':[{'string':"I"},{'prim':'pair','args':[{'string':"H"},{'prim':'pair','args':[{'string':"G"},{'prim':'pair','args':[{'string':"F"},{'prim':'pair','args':[{'string':"E"},{'prim':'pair','args':[{'string':"D"},{'prim':'pair','args':[{'string':"C"},{'prim':'pair','args':[{'string':"B"},[]]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{'prim':'pair','args':[{'int':10},{'prim':'pair','args':[{'int':9},{'prim':'pair','args':[{'int':8},{'prim':'pair','args':[{'int':7},{'prim':'pair','args':[{'int':6},{'prim':'pair','args':[{'int':5},{'prim':'pair','args':[{'int':4},{'prim':'pair','args':[{'int':3},{'prim':'pair','args':[{'int':2},{'prim':'pair','args':[{'int':1},[]]}]}]}]}]}]}]}]}]}]}] ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py index 7b205f289..c201a7df6 100755 --- a/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py +++ b/tests/integration/nano/test_sign/operations/test_sign_transfer_ticket.py @@ -20,13 +20,14 @@ from conftest import requires_device from utils.account import Account -from utils.app import TezosAppScreen from utils.message import TransferTicket +from utils.navigator import TezosNavigator -def test_sign_transfer_ticket(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_transfer_ticket(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing transfer ticket""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = TransferTicket( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -41,10 +42,12 @@ def test_sign_transfer_ticket(app: TezosAppScreen, account: Account, snapshot_di destination = 'KT18amZmM5W7qDWVt2pH6uj7sCEd3kbzLrHT' ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, @@ -52,10 +55,10 @@ def test_sign_transfer_ticket(app: TezosAppScreen, account: Account, snapshot_di data=data) @requires_device("nanosp") -def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_nanosp_regression_potential_empty_screen(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing operation that display potentially empty screens""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() message = TransferTicket( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -71,10 +74,12 @@ def test_nanosp_regression_potential_empty_screen(app: TezosAppScreen, account: entrypoint = 'S\n\nS\nS\nS' ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/test_apdu_sign.py b/tests/integration/nano/test_sign/test_apdu_sign.py index d7c9e2686..246fe5683 100644 --- a/tests/integration/nano/test_sign/test_apdu_sign.py +++ b/tests/integration/nano/test_sign/test_apdu_sign.py @@ -20,28 +20,36 @@ from conftest import requires_device from utils.account import Account -from utils.app import send_and_navigate, TezosAppScreen +from utils.backend import TezosBackend from utils.message import Message, MichelineExpr, Transaction +from utils.navigator import send_and_navigate, TezosNavigator -def test_sign_micheline_without_hash(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_sign_micheline_without_hash(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing micheline wihout getting hash""" message = MichelineExpr([{'string': 'CACA'}, {'string': 'POPO'}, {'string': 'BOUDIN'}]) - data = app.sign(account, - message, - with_hash=False, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=False, + snap_path=snapshot_dir + ) account.check_signature( message=message, with_hash=False, data=data) -def test_sign_with_small_packet(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_with_small_packet( + backend: TezosBackend, + tezos_navigator: TezosNavigator, + account: Account, + snapshot_dir: Path): """Check signing using small packet instead of full size packets""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() def check_sign_with_small_packet( account: Account, @@ -49,8 +57,8 @@ def check_sign_with_small_packet( path: Path) -> None: data = send_and_navigate( - send=lambda: app.backend.sign(account, message, apdu_size=10), - navigate=lambda: app.navigate_sign_accept(snap_path=path) + send=lambda: backend.sign(account, message, apdu_size=10), + navigate=lambda: tezos_navigator.navigate_sign_accept(snap_path=path) ) account.check_signature( @@ -76,15 +84,17 @@ def check_sign_with_small_packet( path=snapshot_dir) @requires_device("nanosp") -def test_nanosp_regression_press_right_works_across_apdu_recieves(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_nanosp_regression_press_right_works_across_apdu_recieves(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check no need to click right two times between APDUs during signing flow""" message = MichelineExpr([{'prim':'IF_NONE','args':[[[{'prim':'SWAP'},{'prim':'IF','args':[[{'prim':'DIP','args':[[[{'prim':'DROP','args':[{'int':1}]},{'prim':'PUSH','args':[{'prim':'unit'},{'prim':'Unit'}]},{'prim':'PUSH','args':[{'prim':'bool'},{'prim':'True'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':';L\\S?p$-Fq)VDg\n]te\no4v0_8)\"'}]}]]]}],[[{'prim':'DROP','args':[{'int':2}]},{'prim':'PUSH','args':[{'prim':'unit'},{'prim':'Unit'}]},{'prim':'PUSH','args':[{'prim':'bool'},{'prim':'False'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':'Li-%*edF6~?E[5Kmu?dyviwJ^2\"\\d$FyQ>>!>D$g(Qg'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':'*Tx None: - app.navigate_review( + tezos_navigator.navigate_review( text=ScreenText.ACCEPT_RISK, snap_path=path / "clear_n_too_long_warning" ) - app.navigate_sign_accept(snap_path=path / "summary") + tezos_navigator.navigate_sign_accept(snap_path=path / "summary") - _sign_too_long(app, account, message, navigate) + _sign_too_long(tezos_navigator, account, message, navigate) def _reject_too_long( - app: TezosAppScreen, + tezos_navigator: TezosNavigator, account: Account, message: Message, status_code: StatusCode, navigate: Callable[[], None]): """Reject a too long message""" - app.toggle_expert_mode() - app.toggle_blindsign() + tezos_navigator.toggle_expert_mode() + tezos_navigator.toggle_blindsign() with status_code.expected(): - app.sign( + tezos_navigator.sign( account, message, with_hash=True, @@ -161,38 +162,38 @@ def _reject_too_long( ) ]) -def test_sign_basic_too_long_operation(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_basic_too_long_operation(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign too long operation""" - _sign_decodable_too_long(app, account, BASIC_OPERATION, snapshot_dir) + _sign_decodable_too_long(tezos_navigator, account, BASIC_OPERATION, snapshot_dir) -def test_reject_basic_too_long_operation_at_warning(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_reject_basic_too_long_operation_at_warning(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check reject too long operation at warning""" def navigate() -> None: - app.navigate_sign_reject( + tezos_navigator.navigate_sign_reject( snap_path=snapshot_dir / "clear_n_too_long_warning" ) - _reject_too_long(app, account, BASIC_OPERATION, StatusCode.REJECT, navigate) + _reject_too_long(tezos_navigator, account, BASIC_OPERATION, StatusCode.REJECT, navigate) -def test_reject_basic_too_long_operation_at_summary(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_reject_basic_too_long_operation_at_summary(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check reject too long operation at summary""" def navigate() -> None: - app.navigate_review( + tezos_navigator.navigate_review( text=ScreenText.ACCEPT_RISK, snap_path=snapshot_dir / "clear_n_too_long_warning" ) - app.navigate_sign_reject( + tezos_navigator.navigate_sign_reject( snap_path=snapshot_dir / "summary" ) - _reject_too_long(app, account, BASIC_OPERATION, StatusCode.REJECT, navigate) + _reject_too_long(tezos_navigator, account, BASIC_OPERATION, StatusCode.REJECT, navigate) ### Different kind of too long operation ### -def test_sign_too_long_operation_with_only_transactions(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_too_long_operation_with_only_transactions(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign too long operation that contains only transaction""" message = OperationGroup([ Transaction( @@ -250,9 +251,9 @@ def test_sign_too_long_operation_with_only_transactions(app: TezosAppScreen, acc amount = 5000000 ) ]) - _sign_decodable_too_long(app, account, message, snapshot_dir) + _sign_decodable_too_long(tezos_navigator, account, message, snapshot_dir) -def test_sign_too_long_operation_without_fee_or_amount(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_too_long_operation_without_fee_or_amount(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign too long operation that doesn't have fees or amount""" message = Proposals( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -280,7 +281,7 @@ def test_sign_too_long_operation_without_fee_or_amount(app: TezosAppScreen, acco ], period = 32 ) - _sign_decodable_too_long(app, account, message, snapshot_dir) + _sign_decodable_too_long(tezos_navigator, account, message, snapshot_dir) ### Too long operation containing a too large number ### @@ -335,51 +336,56 @@ def test_sign_too_long_operation_without_fee_or_amount(app: TezosAppScreen, acco ) ]) -def test_sign_too_long_operation_with_too_large(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_too_long_operation_with_too_large(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check sign too long operation that will also fail the parsing""" def navigate() -> None: - app.navigate_review( + tezos_navigator.navigate_review( text=ScreenText.ACCEPT_RISK, snap_path=snapshot_dir / "clear_n_too_large_warning" ) - app.navigate_sign_accept( + tezos_navigator.navigate_sign_accept( snap_path=snapshot_dir / "blindsigning" ) - _sign_too_long(app, account, OPERATION_WITH_TOO_LARGE, navigate) + _sign_too_long(tezos_navigator, account, OPERATION_WITH_TOO_LARGE, navigate) -def test_reject_too_long_operation_with_too_large_at_too_large_warning(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_reject_too_long_operation_with_too_large_at_too_large_warning(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check reject too long operation that will also fail the parsing at too large warning""" def navigate() -> None: - app.navigate_sign_reject( + tezos_navigator.navigate_sign_reject( snap_path=snapshot_dir / "clear_n_too_large_warning" ) - _reject_too_long(app, account, OPERATION_WITH_TOO_LARGE, StatusCode.PARSE_ERROR, navigate) + _reject_too_long(tezos_navigator, account, OPERATION_WITH_TOO_LARGE, StatusCode.PARSE_ERROR, navigate) -def test_reject_too_long_operation_with_too_large_at_blindsigning(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_reject_too_long_operation_with_too_large_at_blindsigning(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check reject too long operation that will also fail the parsing at blindsigning""" def navigate() -> None: - app.navigate_review( + tezos_navigator.navigate_review( text=ScreenText.ACCEPT_RISK, snap_path=snapshot_dir / "clear_n_too_large_warning" ) - app.navigate_sign_reject( + tezos_navigator.navigate_sign_reject( snap_path=snapshot_dir / "blindsigning" ) - _reject_too_long(app, account, OPERATION_WITH_TOO_LARGE, StatusCode.REJECT, navigate) + _reject_too_long(tezos_navigator, account, OPERATION_WITH_TOO_LARGE, StatusCode.REJECT, navigate) -def test_blindsign_too_deep(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_blindsign_too_deep( + backend: TezosBackend, + firmware: Firmware, + tezos_navigator: TezosNavigator, + account: Account, + snapshot_dir: Path): """Check blindsigning on too deep expression""" expression = MichelineExpr([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{'int':42}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]) def navigate() -> None: - if app.backend.firmware.device == "nanos": + if firmware == Firmware.NANOS: ### Simulate `navigate_review` up to `ACCEPT_RISK` because the nanos screen can look like it hasn't changed. instructions: List[Union[NavIns, NavInsID]] = [ @@ -393,23 +399,23 @@ def navigate() -> None: NavInsID.BOTH_CLICK, ] - app.unsafe_navigate( + tezos_navigator.unsafe_navigate( instructions=instructions, screen_change_before_first_instruction=True, screen_change_after_last_instruction=False, snap_path=snapshot_dir / "clear", ) else: - app.navigate_review( + tezos_navigator.navigate_review( text=ScreenText.ACCEPT_RISK, snap_path=snapshot_dir / "clear" ) - app.navigate_sign_accept( + tezos_navigator.navigate_sign_accept( snap_path=snapshot_dir / "blind" ) - data = app.sign( + data = tezos_navigator.sign( account, expression, with_hash=True, @@ -421,21 +427,21 @@ def navigate() -> None: with_hash=True, data=data) -def test_blindsign_too_large(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_blindsign_too_large(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check blindsigning on too large expression""" message = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) def navigate() -> None: - app.navigate_review( + tezos_navigator.navigate_review( text=ScreenText.ACCEPT_RISK, snap_path=snapshot_dir / "clear" ) - app.navigate_sign_accept( + tezos_navigator.navigate_sign_accept( snap_path=snapshot_dir / "blind" ) - data = app.sign( + data = tezos_navigator.sign( account, message, with_hash=True, @@ -447,35 +453,35 @@ def navigate() -> None: with_hash=True, data=data) -def test_blindsign_reject_from_clear(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_blindsign_reject_from_clear(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check blindsigning rejection""" expression = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) with StatusCode.PARSE_ERROR.expected(): - app.reject_signing( + tezos_navigator.reject_signing( account, expression, with_hash=False, snap_path=snapshot_dir ) -def test_blindsign_reject_from_blind(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_blindsign_reject_from_blind(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check blindsigning rejection""" expression = MichelineExpr({'int':12345678901234567890123456789012345678901234567890123456789012345678901234567890}) def navigate() -> None: - app.navigate_review( + tezos_navigator.navigate_review( text=ScreenText.ACCEPT_RISK, snap_path=snapshot_dir / "clear" ) - app.navigate_sign_reject( + tezos_navigator.navigate_sign_reject( snap_path=snapshot_dir / "blind" ) with StatusCode.REJECT.expected(): - app.sign( + tezos_navigator.sign( account, expression, with_hash=False, diff --git a/tests/integration/nano/test_sign/test_key.py b/tests/integration/nano/test_sign/test_key.py index 1db218a6d..680f9a4f4 100644 --- a/tests/integration/nano/test_sign/test_key.py +++ b/tests/integration/nano/test_sign/test_key.py @@ -21,8 +21,9 @@ import pytest from utils.account import Account, SigType -from utils.app import TezosAppScreen from utils.message import MichelineExpr, Transaction +from utils.navigator import TezosNavigator + @pytest.mark.parametrize( "account", [ @@ -41,15 +42,17 @@ ], ids=lambda account: f"{account.sig_type}" ) -def test_sign_micheline_basic(app: TezosAppScreen, account: Account, snapshot_dir: Path): +def test_sign_micheline_basic(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): """Check signing with ed25519""" message = MichelineExpr([{'string': 'CACA'}, {'string': 'POPO'}, {'string': 'BOUDIN'}]) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, @@ -63,10 +66,10 @@ def test_sign_micheline_basic(app: TezosAppScreen, account: Account, snapshot_di ], ids=["seed21"] ) -def test_sign_with_another_seed(app: TezosAppScreen, snapshot_dir: Path): +def test_sign_with_another_seed(tezos_navigator: TezosNavigator, snapshot_dir: Path): """Check signing using another seed than [zebra*24]""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() account = Account("m/44'/1729'/0'/0'", SigType.ED25519, @@ -84,10 +87,12 @@ def test_sign_with_another_seed(app: TezosAppScreen, snapshot_dir: Path): parameter = {'prim': 'CAR'} ) - data = app.sign(account, - message, - with_hash=True, - snap_path=snapshot_dir) + data = tezos_navigator.sign( + account, + message, + with_hash=True, + snap_path=snapshot_dir + ) account.check_signature( message=message, diff --git a/tests/integration/nano/test_sign/test_parsing_errors.py b/tests/integration/nano/test_sign/test_parsing_errors.py index 766df7453..fcd152cca 100755 --- a/tests/integration/nano/test_sign/test_parsing_errors.py +++ b/tests/integration/nano/test_sign/test_parsing_errors.py @@ -21,9 +21,10 @@ import pytest from utils.account import Account -from utils.app import ScreenText, TezosAppScreen from utils.backend import StatusCode from utils.message import RawMessage +from utils.navigator import ScreenText, TezosNavigator + # Operation (0): Transaction # Source: tz2JPgTWZZpxZZLqHMfS69UAy1UHm4Aw5iHu @@ -54,13 +55,13 @@ "one_byte_added_inside", ] ) -def test_parsing_error(app: TezosAppScreen, raw_msg: str, account: Account, snapshot_dir: Path): +def test_parsing_error(tezos_navigator: TezosNavigator, raw_msg: str, account: Account, snapshot_dir: Path): """Check parsing error handling""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() with StatusCode.PARSE_ERROR.expected(): - app.reject_signing( + tezos_navigator.reject_signing( account, RawMessage(raw_msg), with_hash=True, @@ -75,17 +76,17 @@ def test_parsing_error(app: TezosAppScreen, raw_msg: str, account: Account, snap "wrong_last_packet", ] ) -def test_parsing_hard_fail(app: TezosAppScreen, raw_msg: str, account: Account, snapshot_dir: Path): +def test_parsing_hard_fail(tezos_navigator: TezosNavigator, raw_msg: str, account: Account, snapshot_dir: Path): """Check parsing error hard failing""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() with StatusCode.UNEXPECTED_SIGN_STATE.expected(): - app.sign( + tezos_navigator.sign( account, RawMessage(raw_msg), with_hash=True, - navigate=lambda: app.navigate_review( + navigate=lambda: tezos_navigator.navigate_review( text=ScreenText.HOME, snap_path=snapshot_dir ) diff --git a/tests/integration/nano/test_version.py b/tests/integration/nano/test_version.py index 4bf2d7277..233482505 100755 --- a/tests/integration/nano/test_version.py +++ b/tests/integration/nano/test_version.py @@ -18,15 +18,14 @@ import git -from utils.app import TezosAppScreen -from utils.backend import Version +from utils.backend import TezosBackend, Version -def test_version(app: TezosAppScreen): +def test_version(backend: TezosBackend): """Test that the app version is the same as the current version.""" current_version = Version(Version.AppKind.WALLET, 3, 0, 6) - data = app.backend.version() + data = backend.version() app_version = Version.from_bytes(data) @@ -34,7 +33,7 @@ def test_version(app: TezosAppScreen): f"Expected {current_version} but got {app_version}" -def test_git(app: TezosAppScreen): +def test_git(backend: TezosBackend): """Test that the app commit is the same as the current git commit.""" git_repo = git.Repo(search_parent_directories=True) git_describe = git_repo.git.describe( @@ -46,7 +45,7 @@ def test_git(app: TezosAppScreen): ) current_commit = git_describe.replace('-dirty', '*') - data = app.backend.git() + data = backend.git() assert data.endswith(b'\x00'), \ f"Should end with by '\x00' but got {data.hex()}" diff --git a/tests/integration/nano/test_wrong_apdu.py b/tests/integration/nano/test_wrong_apdu.py index 7715ae6a8..1bc728668 100644 --- a/tests/integration/nano/test_wrong_apdu.py +++ b/tests/integration/nano/test_wrong_apdu.py @@ -22,19 +22,24 @@ import pytest from utils.account import Account, SigType -from utils.app import TezosAppScreen -from utils.backend import Cla, Index, Ins, StatusCode +from utils.backend import Cla, TezosBackend, Index, Ins, StatusCode from utils.message import Transaction +from utils.navigator import TezosNavigator -def test_regression_continue_after_reject(app: TezosAppScreen, account: Account, snapshot_dir: Path): + +def test_regression_continue_after_reject( + backend: TezosBackend, + tezos_navigator: TezosNavigator, + account: Account, + snapshot_dir: Path): """Check the app still runs after rejects signing""" - app.toggle_expert_mode() + tezos_navigator.toggle_expert_mode() with StatusCode.REJECT.expected(): - app.reject_public_key(account, snap_path=snapshot_dir / "reject_public_key") + tezos_navigator.reject_public_key(account, snap_path=snapshot_dir / "reject_public_key") - app.backend.wait_for_home_screen() + backend.wait_for_home_screen() message = Transaction( source = 'tz1ixvCiPJYyMjsp2nKBVaq54f6AdbV8hCKa', @@ -49,15 +54,17 @@ def test_regression_continue_after_reject(app: TezosAppScreen, account: Account, ) with StatusCode.REJECT.expected(): - app.reject_signing(account, - message, - with_hash=True, - snap_path=snapshot_dir / "reject_signing") + tezos_navigator.reject_signing( + account, + message, + with_hash=True, + snap_path=snapshot_dir / "reject_signing" + ) - app.backend.get_public_key(account, with_prompt=False) + backend.get_public_key(account, with_prompt=False) -def test_change_sign_instruction(app: TezosAppScreen, account: Account): +def test_change_sign_instruction(backend: TezosBackend, account: Account): """Check signing instruction changes behaviour""" message = Transaction( @@ -73,66 +80,70 @@ def test_change_sign_instruction(app: TezosAppScreen, account: Account): ) payload=bytes(message) - app.backend._ask_sign(Ins.SIGN_WITH_HASH, account) + backend._ask_sign(Ins.SIGN_WITH_HASH, account) with StatusCode.INVALID_INS.expected(): - app.backend._continue_sign(Ins.SIGN, - payload, - last=True) + backend._continue_sign( + Ins.SIGN, + payload, + last=True) - app.backend._ask_sign(Ins.SIGN, account) + backend._ask_sign(Ins.SIGN, account) with StatusCode.INVALID_INS.expected(): - app.backend._continue_sign(Ins.SIGN_WITH_HASH, - payload, - last=True) + backend._continue_sign( + Ins.SIGN_WITH_HASH, + payload, + last=True) -def test_mixing_command(app: TezosAppScreen, account: Account): +def test_mixing_command(backend: TezosBackend, account: Account): """Check that mixing instruction fails""" - app.backend._ask_sign(Ins.SIGN, account) + backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend.version() + backend.version() - app.backend._ask_sign(Ins.SIGN_WITH_HASH, account) + backend._ask_sign(Ins.SIGN_WITH_HASH, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend._ask_sign(Ins.SIGN, account) + backend._ask_sign(Ins.SIGN, account) - app.backend._ask_sign(Ins.SIGN, account) + backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend._ask_sign(Ins.SIGN_WITH_HASH, account) + backend._ask_sign(Ins.SIGN_WITH_HASH, account) - app.backend._ask_sign(Ins.SIGN, account) + backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend.get_public_key(account, with_prompt=True) + backend.get_public_key(account, with_prompt=True) - app.backend._ask_sign(Ins.SIGN, account) + backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend.get_public_key(account, with_prompt=False) + backend.get_public_key(account, with_prompt=False) - app.backend._ask_sign(Ins.SIGN, account) + backend._ask_sign(Ins.SIGN, account) with StatusCode.UNEXPECTED_STATE.expected(): - app.backend.git() + backend.git() @pytest.mark.parametrize("ins", [Ins.GET_PUBLIC_KEY, Ins.PROMPT_PUBLIC_KEY], ids=lambda ins: f"{ins}") @pytest.mark.parametrize("index", [Index.OTHER, Index.LAST], ids=lambda index: f"{index}") -def test_wrong_index(app: TezosAppScreen, account: Account, ins: Ins, index: Index): +def test_wrong_index(backend: TezosBackend, account: Account, ins: Ins, index: Index): """Check wrong apdu index behaviour""" with StatusCode.WRONG_PARAM.expected(): - app.backend._exchange(ins, - index=index, - sig_type=account.sig_type, - payload=account.path) + backend._exchange( + ins, + index=index, + sig_type=account.sig_type, + payload=account.path + ) @pytest.mark.parametrize( "sender", [ - lambda app, account: app.backend.get_public_key(account, with_prompt=False), - lambda app, account: app.backend.get_public_key(account, with_prompt=True), - lambda app, account: app.backend._ask_sign(Ins.SIGN, account), - lambda app, account: app.backend._ask_sign(Ins.SIGN_WITH_HASH, account) + lambda backend, account: backend.get_public_key(account, with_prompt=False), + lambda backend, account: backend.get_public_key(account, with_prompt=True), + lambda backend, account: backend._ask_sign(Ins.SIGN, account), + lambda backend, account: backend._ask_sign(Ins.SIGN_WITH_HASH, account) ], ids=[ "get_pk_without_prompt", @@ -141,21 +152,21 @@ def test_wrong_index(app: TezosAppScreen, account: Account, ins: Ins, index: Ind "sign_with_hash", ] ) -def test_wrong_derivation_type(app: TezosAppScreen, sender: Callable[[TezosAppScreen, Account], Any]): +def test_wrong_derivation_type(backend: TezosBackend, sender: Callable[[TezosBackend, Account], Any]): """Check wrong derivation type behaviour""" account = Account("m/44'/1729'/0'/0'", 0x04, "__unused__") with StatusCode.WRONG_PARAM.expected(): - sender(app, account) + sender(backend, account) @pytest.mark.parametrize( "sender", [ - lambda app, account: app.backend.get_public_key(account, with_prompt=False), - lambda app, account: app.backend.get_public_key(account, with_prompt=True), - lambda app, account: app.backend._ask_sign(Ins.SIGN, account), - lambda app, account: app.backend._ask_sign(Ins.SIGN_WITH_HASH, account) + lambda backend, account: backend.get_public_key(account, with_prompt=False), + lambda backend, account: backend.get_public_key(account, with_prompt=True), + lambda backend, account: backend._ask_sign(Ins.SIGN, account), + lambda backend, account: backend._ask_sign(Ins.SIGN_WITH_HASH, account) ], ids=[ "get_pk_without_prompt", @@ -187,16 +198,16 @@ def test_wrong_derivation_type(app: TezosAppScreen, sender: Callable[[TezosAppSc ] ) def test_wrong_derivation_path( - app: TezosAppScreen, + backend: TezosBackend, account: Account, - sender: Callable[[TezosAppScreen, Account], Any]): + sender: Callable[[TezosBackend, Account], Any]): """Check wrong derivation path behaviour""" with StatusCode.WRONG_LENGTH_FOR_INS.expected(): - sender(app, account) + sender(backend, account) @pytest.mark.parametrize("class_", [0x00, 0x81]) -def test_wrong_class(app: TezosAppScreen, class_: int): +def test_wrong_class(backend: TezosBackend, class_: int): """Check wrong apdu class behaviour""" raw = \ @@ -207,7 +218,7 @@ def test_wrong_class(app: TezosAppScreen, class_: int): int(0x00).to_bytes(1, 'big') with StatusCode.CLASS.expected(): - app.backend.exchange_raw(raw) + backend.exchange_raw(raw) @pytest.mark.parametrize( "size, data", @@ -217,7 +228,7 @@ def test_wrong_class(app: TezosAppScreen, class_: int): ], ids=lambda param: f"size={param}" if isinstance(param, int) else f"data={param}" ) -def test_wrong_apdu_length(app: TezosAppScreen, size: int, data: bytes): +def test_wrong_apdu_length(backend: TezosBackend, size: int, data: bytes): """Check wrong apdu length behaviour""" raw = \ @@ -229,7 +240,7 @@ def test_wrong_apdu_length(app: TezosAppScreen, size: int, data: bytes): data with StatusCode.WRONG_LENGTH_FOR_INS.expected(): - app.backend.exchange_raw(raw) + backend.exchange_raw(raw) @pytest.mark.parametrize( "ins", @@ -248,8 +259,8 @@ def test_wrong_apdu_length(app: TezosAppScreen, size: int, data: bytes): ], ids=lambda ins: f"ins={ins}" ) -def test_unimplemented_commands(app: TezosAppScreen, ins: Union[int, Ins]): +def test_unimplemented_commands(backend: TezosBackend, ins: Union[int, Ins]): """Check unimplemented commands""" with StatusCode.INVALID_INS.expected(): - app.backend._exchange(ins) + backend._exchange(ins) diff --git a/tests/integration/nano/utils/backend.py b/tests/integration/nano/utils/backend.py index 4912226ae..6a87676b0 100644 --- a/tests/integration/nano/utils/backend.py +++ b/tests/integration/nano/utils/backend.py @@ -16,9 +16,11 @@ from contextlib import contextmanager from enum import IntEnum +import time from struct import unpack from typing import Generator, Union +from ragger.backend import SpeculosBackend from ragger.backend.interface import BackendInterface, RAPDU from ragger.error import ExceptionRAPDU @@ -238,3 +240,44 @@ def sign(self, assert not data, f"No data expected but got {data.hex()}" assert False, "We should have already returned" + +MAX_ATTEMPTS = 50 + +def with_retry(f, attempts=MAX_ATTEMPTS): + """Try f until it succeeds or has been executed attempts times.""" + while True: + try: + return f() + except Exception as e: + if attempts <= 0: + print("- with_retry: attempts exhausted -") + raise e + attempts -= 1 + # Give plenty of time for speculos to update - can take a long time on CI machines + time.sleep(0.5) + +class SpeculosTezosBackend(TezosBackend, SpeculosBackend): + """Class representing Tezos app running on Speculos.""" + + # speculos can be slow to start up in a slow environment. + # Here, we expect a little more + def __enter__(self) -> "SpeculosTezosBackend": + try: + super().__enter__() + return self + except Exception: + process = self._client.process + try: + with_retry(self._client._wait_until_ready, attempts=5) + super().__enter__() + except Exception as e: + self._client.stop() + # do not forget to close the first process + self._client.process = process + self._client.stop() + raise e + # replace the new process by the first one + self._client.process.kill() + self._client.process.wait() + self._client.process = process + return self diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/navigator.py similarity index 78% rename from tests/integration/nano/utils/app.py rename to tests/integration/nano/utils/navigator.py index 657788546..f8bf988f4 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/navigator.py @@ -16,35 +16,19 @@ """Tezos app backend.""" from enum import Enum -from io import BytesIO from multiprocessing.pool import ThreadPool from pathlib import Path import time from typing import Callable, List, Optional, TypeVar, Union -from ragger.backend import SpeculosBackend -from ragger.navigator import NavIns, NavInsID, NanoNavigator +from ragger.firmware import Firmware +from ragger.navigator import NavIns, NavInsID, Navigator from .message import Message from .account import Account from .backend import TezosBackend -MAX_ATTEMPTS = 50 - -def with_retry(f, attempts=MAX_ATTEMPTS): - """Try f until it succeeds or has been executed attempts times.""" - while True: - try: - return f() - except Exception as e: - if attempts <= 0: - print("- with_retry: attempts exhausted -") - raise e - attempts -= 1 - # Give plenty of time for speculos to update - can take a long time on CI machines - time.sleep(0.5) - RESPONSE = TypeVar('RESPONSE') def send_and_navigate( @@ -76,32 +60,6 @@ def send_and_navigate( return result -class SpeculosTezosBackend(TezosBackend, SpeculosBackend): - """Class representing Tezos app running on Speculos.""" - - # speculos can be slow to start up in a slow environment. - # Here, we expect a little more - def __enter__(self) -> "SpeculosTezosBackend": - try: - super().__enter__() - return self - except Exception: - process = self._client.process - try: - with_retry(self._client._wait_until_ready, attempts=5) - super().__enter__() - except Exception as e: - self._client.stop() - # do not forget to close the first process - self._client.process = process - self._client.stop() - raise e - # replace the new process by the first one - self._client.process.kill() - self._client.process.wait() - self._client.process = process - return self - class ScreenText(str, Enum): """Class representing common, known app screen's text.""" @@ -117,40 +75,34 @@ class ScreenText(str, Enum): BLINDSIGN_NANOS = "Blindsign" @classmethod - def blindsign(cls, backend: SpeculosTezosBackend) -> "ScreenText": + def blindsign(cls, backend: TezosBackend) -> "ScreenText": """Get blindsign text depending on device.""" - if backend.firmware.device == "nanos": + if backend.firmware == Firmware.NANOS: return cls.BLINDSIGN_NANOS return cls.BLINDSIGN -class TezosAppScreen(): - """Class representing Tezos app management.""" - backend: SpeculosTezosBackend +class TezosNavigator(): + """Class representing Tezos app navigation.""" + + _backend: TezosBackend _root_dir: Path - navigator: NanoNavigator + _navigator: Navigator def __init__(self, - backend: SpeculosTezosBackend, - golden_run: bool): - self.backend = backend + backend: TezosBackend, + navigator: Navigator): + self._backend = backend self._root_dir = Path(__file__).resolve().parent.parent - self.navigator = NanoNavigator(backend, backend.firmware, golden_run) - - def __enter__(self) -> "TezosAppScreen": - with_retry(self.backend.__enter__, attempts=3) - return self - - def __exit__(self, *args): - self.backend.__exit__(*args) + self._navigator = navigator def navigate(self, snap_path: Optional[Path] = None, screen_change_before_first_instruction: bool = False, **kwargs) -> None: """Wrapper of `navigator.navigate_and_compare`""" - self.navigator.navigate_and_compare( + self._navigator.navigate_and_compare( path=self._root_dir, test_case_name=snap_path, screen_change_before_first_instruction=screen_change_before_first_instruction, @@ -163,7 +115,7 @@ def navigate_until_text(self, validation_instructions: List[Union[NavIns, NavInsID]] = [], **kwargs) -> None: """Wrapper of `navigator.navigate_until_text_and_compare`""" - self.navigator.navigate_until_text_and_compare( + self._navigator.navigate_until_text_and_compare( path=self._root_dir, test_case_name=snap_path, screen_change_before_first_instruction=screen_change_before_first_instruction, @@ -186,8 +138,8 @@ def unsafe_navigate( Function based on `ragger.navigator.navigate_and_compare` """ - self.backend.pause_ticker() - self.navigator._run_instruction( + self._backend.pause_ticker() + self._navigator._run_instruction( NavIns(NavInsID.WAIT, (0, )), timeout, wait_for_screen_change=screen_change_before_first_instruction, @@ -197,7 +149,7 @@ def unsafe_navigate( ) for idx, instruction in enumerate(instructions): if idx + 1 != len(instructions) or screen_change_after_last_instruction: - self.navigator._run_instruction( + self._navigator._run_instruction( instruction, timeout, wait_for_screen_change=False, @@ -206,13 +158,13 @@ def unsafe_navigate( snap_idx=snap_start_idx + idx + 1 ) else: - self.navigator._run_instruction( + self._navigator._run_instruction( instruction, timeout, wait_for_screen_change=False, snap_idx=snap_start_idx + idx + 1 ) - self.backend.resume_ticker() + self._backend.resume_ticker() def navigate_to_settings(self, **kwargs) -> int: """Navigate from Home screen to settings.""" @@ -289,7 +241,7 @@ def provide_public_key(self, def navigate(): self.navigate_review(text=ScreenText.PUBLIC_KEY_APPROVE, **kwargs) return send_and_navigate( - send=lambda: self.backend.get_public_key(account, with_prompt=True), + send=lambda: self._backend.get_public_key(account, with_prompt=True), navigate=navigate ) @@ -314,7 +266,7 @@ def sign(self, def navigate(): self.navigate_sign_accept(**kwargs) return send_and_navigate( - send=lambda: self.backend.sign(account, message, with_hash), + send=lambda: self._backend.sign(account, message, with_hash), navigate=navigate ) From f3d23813a65886efefab73bbf2bbc01bf84374ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 13 Dec 2024 18:05:34 +0100 Subject: [PATCH 12/12] [test] stop taking snapshot if not necessary - remove `test_nanosp_regression_press_right_works_across_apdu_recieves` that does not make sens anymore --- .../00000.png | Bin 395 -> 0 bytes .../00001.png | Bin 481 -> 0 bytes .../00002.png | Bin 375 -> 0 bytes .../00003.png | Bin 404 -> 0 bytes .../test_sign_with_small_packet/00000.png | Bin 395 -> 0 bytes .../test_sign_with_small_packet/00001.png | Bin 414 -> 0 bytes .../test_sign_with_small_packet/00002.png | Bin 488 -> 0 bytes .../test_sign_with_small_packet/00003.png | Bin 464 -> 0 bytes .../test_sign_with_small_packet/00004.png | Bin 316 -> 0 bytes .../test_sign_with_small_packet/00005.png | Bin 387 -> 0 bytes .../test_sign_with_small_packet/00006.png | Bin 371 -> 0 bytes .../test_sign_with_small_packet/00007.png | Bin 495 -> 0 bytes .../test_sign_with_small_packet/00008.png | Bin 503 -> 0 bytes .../test_sign_with_small_packet/00009.png | Bin 324 -> 0 bytes .../test_sign_with_small_packet/00010.png | Bin 499 -> 0 bytes .../test_sign_with_small_packet/00011.png | Bin 347 -> 0 bytes .../test_sign_with_small_packet/00012.png | Bin 404 -> 0 bytes .../00000.png | Bin 395 -> 0 bytes .../00001.png | Bin 481 -> 0 bytes .../00002.png | Bin 375 -> 0 bytes .../00003.png | Bin 404 -> 0 bytes .../00000.png | Bin 395 -> 0 bytes .../00001.png | Bin 481 -> 0 bytes .../00002.png | Bin 375 -> 0 bytes .../00003.png | Bin 404 -> 0 bytes .../00000.png | Bin 395 -> 0 bytes .../00001.png | Bin 481 -> 0 bytes .../00002.png | Bin 375 -> 0 bytes .../00003.png | Bin 404 -> 0 bytes .../00000.png | Bin 395 -> 0 bytes .../00001.png | Bin 481 -> 0 bytes .../00002.png | Bin 375 -> 0 bytes .../00003.png | Bin 404 -> 0 bytes .../00000.png | Bin 395 -> 0 bytes .../00001.png | Bin 414 -> 0 bytes .../00002.png | Bin 488 -> 0 bytes .../00003.png | Bin 464 -> 0 bytes .../00004.png | Bin 316 -> 0 bytes .../00005.png | Bin 387 -> 0 bytes .../00006.png | Bin 371 -> 0 bytes .../00007.png | Bin 495 -> 0 bytes .../00008.png | Bin 503 -> 0 bytes .../00009.png | Bin 324 -> 0 bytes .../00010.png | Bin 499 -> 0 bytes .../00011.png | Bin 347 -> 0 bytes .../00012.png | Bin 404 -> 0 bytes .../reject_public_key/00000.png | Bin 387 -> 0 bytes .../reject_public_key/00001.png | Bin 493 -> 0 bytes .../reject_public_key/00002.png | Bin 499 -> 0 bytes .../reject_public_key/00003.png | Bin 341 -> 0 bytes .../reject_public_key/00004.png | Bin 341 -> 0 bytes .../reject_signing/00000.png | Bin 395 -> 0 bytes .../reject_signing/00001.png | Bin 414 -> 0 bytes .../reject_signing/00002.png | Bin 481 -> 0 bytes .../reject_signing/00003.png | Bin 482 -> 0 bytes .../reject_signing/00004.png | Bin 311 -> 0 bytes .../reject_signing/00005.png | Bin 359 -> 0 bytes .../reject_signing/00006.png | Bin 329 -> 0 bytes .../reject_signing/00007.png | Bin 495 -> 0 bytes .../reject_signing/00008.png | Bin 503 -> 0 bytes .../reject_signing/00009.png | Bin 326 -> 0 bytes .../reject_signing/00010.png | Bin 499 -> 0 bytes .../reject_signing/00011.png | Bin 421 -> 0 bytes .../reject_signing/00012.png | Bin 406 -> 0 bytes .../reject_signing/00013.png | Bin 402 -> 0 bytes .../reject_signing/00014.png | Bin 407 -> 0 bytes .../reject_signing/00015.png | Bin 405 -> 0 bytes .../reject_signing/00016.png | Bin 422 -> 0 bytes .../reject_signing/00017.png | Bin 415 -> 0 bytes .../reject_signing/00018.png | Bin 420 -> 0 bytes .../reject_signing/00019.png | Bin 414 -> 0 bytes .../reject_signing/00020.png | Bin 398 -> 0 bytes .../reject_signing/00021.png | Bin 406 -> 0 bytes .../reject_signing/00022.png | Bin 401 -> 0 bytes .../reject_signing/00023.png | Bin 390 -> 0 bytes .../reject_signing/00024.png | Bin 439 -> 0 bytes .../reject_signing/00025.png | Bin 314 -> 0 bytes .../reject_signing/00026.png | Bin 410 -> 0 bytes .../reject_signing/00027.png | Bin 403 -> 0 bytes .../reject_signing/00028.png | Bin 392 -> 0 bytes .../reject_signing/00029.png | Bin 419 -> 0 bytes .../reject_signing/00030.png | Bin 404 -> 0 bytes .../reject_signing/00031.png | Bin 404 -> 0 bytes .../reject_signing/00032.png | Bin 341 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 954 -> 0 bytes .../00002.png | Bin 1022 -> 0 bytes .../00003.png | Bin 1136 -> 0 bytes .../00004.png | Bin 1028 -> 0 bytes .../00005.png | Bin 1033 -> 0 bytes .../00006.png | Bin 651 -> 0 bytes .../00007.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../test_sign_with_small_packet/00000.png | Bin 463 -> 0 bytes .../test_sign_with_small_packet/00001.png | Bin 448 -> 0 bytes .../test_sign_with_small_packet/00002.png | Bin 716 -> 0 bytes .../test_sign_with_small_packet/00003.png | Bin 335 -> 0 bytes .../test_sign_with_small_packet/00004.png | Bin 417 -> 0 bytes .../test_sign_with_small_packet/00005.png | Bin 397 -> 0 bytes .../test_sign_with_small_packet/00006.png | Bin 730 -> 0 bytes .../test_sign_with_small_packet/00007.png | Bin 357 -> 0 bytes .../test_sign_with_small_packet/00008.png | Bin 545 -> 0 bytes .../test_sign_with_small_packet/00009.png | Bin 371 -> 0 bytes .../test_sign_with_small_packet/00010.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 448 -> 0 bytes .../00002.png | Bin 716 -> 0 bytes .../00003.png | Bin 335 -> 0 bytes .../00004.png | Bin 417 -> 0 bytes .../00005.png | Bin 397 -> 0 bytes .../00006.png | Bin 730 -> 0 bytes .../00007.png | Bin 357 -> 0 bytes .../00008.png | Bin 545 -> 0 bytes .../00009.png | Bin 371 -> 0 bytes .../00010.png | Bin 459 -> 0 bytes .../reject_public_key/00000.png | Bin 458 -> 0 bytes .../reject_public_key/00001.png | Bin 729 -> 0 bytes .../reject_public_key/00002.png | Bin 374 -> 0 bytes .../reject_public_key/00003.png | Bin 368 -> 0 bytes .../reject_signing/00000.png | Bin 463 -> 0 bytes .../reject_signing/00001.png | Bin 448 -> 0 bytes .../reject_signing/00002.png | Bin 734 -> 0 bytes .../reject_signing/00003.png | Bin 330 -> 0 bytes .../reject_signing/00004.png | Bin 387 -> 0 bytes .../reject_signing/00005.png | Bin 349 -> 0 bytes .../reject_signing/00006.png | Bin 730 -> 0 bytes .../reject_signing/00007.png | Bin 360 -> 0 bytes .../reject_signing/00008.png | Bin 545 -> 0 bytes .../reject_signing/00009.png | Bin 743 -> 0 bytes .../reject_signing/00010.png | Bin 734 -> 0 bytes .../reject_signing/00011.png | Bin 745 -> 0 bytes .../reject_signing/00012.png | Bin 716 -> 0 bytes .../reject_signing/00013.png | Bin 743 -> 0 bytes .../reject_signing/00014.png | Bin 459 -> 0 bytes .../reject_signing/00015.png | Bin 368 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../test_sign_with_small_packet/00000.png | Bin 463 -> 0 bytes .../test_sign_with_small_packet/00001.png | Bin 448 -> 0 bytes .../test_sign_with_small_packet/00002.png | Bin 716 -> 0 bytes .../test_sign_with_small_packet/00003.png | Bin 335 -> 0 bytes .../test_sign_with_small_packet/00004.png | Bin 417 -> 0 bytes .../test_sign_with_small_packet/00005.png | Bin 397 -> 0 bytes .../test_sign_with_small_packet/00006.png | Bin 730 -> 0 bytes .../test_sign_with_small_packet/00007.png | Bin 357 -> 0 bytes .../test_sign_with_small_packet/00008.png | Bin 545 -> 0 bytes .../test_sign_with_small_packet/00009.png | Bin 371 -> 0 bytes .../test_sign_with_small_packet/00010.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 597 -> 0 bytes .../00002.png | Bin 459 -> 0 bytes .../00000.png | Bin 463 -> 0 bytes .../00001.png | Bin 448 -> 0 bytes .../00002.png | Bin 716 -> 0 bytes .../00003.png | Bin 335 -> 0 bytes .../00004.png | Bin 417 -> 0 bytes .../00005.png | Bin 397 -> 0 bytes .../00006.png | Bin 730 -> 0 bytes .../00007.png | Bin 357 -> 0 bytes .../00008.png | Bin 545 -> 0 bytes .../00009.png | Bin 371 -> 0 bytes .../00010.png | Bin 459 -> 0 bytes .../reject_public_key/00000.png | Bin 458 -> 0 bytes .../reject_public_key/00001.png | Bin 729 -> 0 bytes .../reject_public_key/00002.png | Bin 374 -> 0 bytes .../reject_public_key/00003.png | Bin 368 -> 0 bytes .../reject_signing/00000.png | Bin 463 -> 0 bytes .../reject_signing/00001.png | Bin 448 -> 0 bytes .../reject_signing/00002.png | Bin 734 -> 0 bytes .../reject_signing/00003.png | Bin 330 -> 0 bytes .../reject_signing/00004.png | Bin 387 -> 0 bytes .../reject_signing/00005.png | Bin 349 -> 0 bytes .../reject_signing/00006.png | Bin 730 -> 0 bytes .../reject_signing/00007.png | Bin 360 -> 0 bytes .../reject_signing/00008.png | Bin 545 -> 0 bytes .../reject_signing/00009.png | Bin 743 -> 0 bytes .../reject_signing/00010.png | Bin 734 -> 0 bytes .../reject_signing/00011.png | Bin 745 -> 0 bytes .../reject_signing/00012.png | Bin 716 -> 0 bytes .../reject_signing/00013.png | Bin 743 -> 0 bytes .../reject_signing/00014.png | Bin 459 -> 0 bytes .../reject_signing/00015.png | Bin 368 -> 0 bytes .../nano/test_sign/test_apdu_sign.py | 64 +++--------------- tests/integration/nano/test_sign/test_key.py | 28 ++------ tests/integration/nano/test_wrong_apdu.py | 35 ++-------- 209 files changed, 24 insertions(+), 103 deletions(-) delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00004.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00005.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00007.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00008.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00009.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00010.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00011.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00012.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[ED25519]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[ED25519]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[ED25519]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[ED25519]/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00004.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00005.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00007.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00008.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00009.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00010.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00011.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00012.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00004.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00000.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00001.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00003.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00004.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00005.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00008.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00009.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00010.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00012.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00013.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00014.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00015.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00016.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00017.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00018.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00019.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00020.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00021.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00022.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00023.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00024.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00025.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00026.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00027.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00028.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00029.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00030.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00031.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00032.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00003.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00004.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00005.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00006.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00007.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00003.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00004.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00005.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00007.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00008.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00009.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00010.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[ED25519]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[ED25519]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[ED25519]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00003.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00004.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00005.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00007.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00008.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00009.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00010.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00003.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00000.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00001.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00003.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00004.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00005.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00008.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00009.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00010.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00012.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00013.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00014.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00015.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00003.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00004.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00005.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00007.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00008.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00009.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00010.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[ED25519]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[ED25519]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[ED25519]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00003.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00004.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00005.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00007.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00008.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00009.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00010.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00003.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00000.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00001.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00003.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00004.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00005.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00008.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00009.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00010.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00012.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00013.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00014.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00015.png diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00000.png b/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00000.png deleted file mode 100644 index 053fc534be7eed4c1cf588f2d2252826fd4eae15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 395 zcmV;60d)R}P)jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6SXozVPy!TEO0#ckxZhsa`*o31F@`Ab9pGdQv^m4< zcOhlqA}B4`BM{1dm9IepA>sYY-zUEWo(}s335jPc#dvM@s5EA0AKnA*1xxr{oK3JG zCYr3}5@LiKpPB)-$xs0n?0uXLaaR&}azP^YG%nQCnv!|cH8`{zXQ$KyDvC?Ui+ZZ( zsyBMwf>zc*YXT&mrUc(|_Ma}ZV_|KEeT1bC#Yp#?QfBPb-UMYi`BZv7!kUq|?4OU{ zn^upuN|O9zcIzf-*2y`xY2K+eJ~vX@7b zJg9+Au9cR=iFDpI0wT$n00VNLheOTE1Q}eis5MO*tzkt=KVl6ItHV1%4^os%C`EO3 zUvZ+xC1|7uRuM?nQ?&4|%KCH5ZCgZ{5r?pLP_&$WGi2tI=93^?o*b1mhp^@3x#;`j zeNU@Lc?jqU1OORAMWP?KCk<&2ZTB_J{SM%dn`$VFC$?|g3s6KA#(Dtt$NU0J&JqIT z-yeOy;V&V;%&a0nCe3}ne~M2L-l+d8&3CDJF}_t diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00003.png b/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00003.png deleted file mode 100644 index 7e0e238204773a5ce6d51d5a1ce25147473482ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6S_BxrFb!&{^ILBf4kEuP+^O? zh~+!bomvph6FJv1wHA3k=0fo_l=42Zml-C=j`1ZUy#9$p^<;%MMq!NU6a8+ zK%B<6CTWaRf=aBOtZ$x$e;e~+!_)x)0000000000007*Z52L;7gjM`S@c;k-07*qo IM6N<$g4)`+LI3~& diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png b/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png deleted file mode 100644 index 138c4f0ab45d3a03430f83f0b7899c0c507c19c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmVP)V?UASE-(Z zHoB+MX{*qyMpvuOmgDt(C?B&~OT}uL%xPh(`qA{*!TZ!rmP6woo|N7`EZ9U*IM}GFP6`N<^8+lFQ;{Kn}XEvnS<0TofULn`ojr`5I-WF zCZQHds|c5N$ghtTsj@Fd?eIcuNrfppcN@oHP7EHRk|l1D>nhGTzh3z?4geX`xZ6 zMyt~zwM+SR(oScxrkwmGIZRGMw#GS1R%wMc_*-|FVV zg5Aws5oO7zLbA9M!0>HVUv+9uN@?00WbcEP){3`MCZx&MKC(Y-(+#sh;xVWj>~QIsNJf6Qd+N=Nbg^Z9+f;&jA9qp;a;lE;Sz+z^QPnsh`ZP>dK*t;A4=Wk5b`xcmydeV+ z9(^{)WsJH}%kgbAJYkos6+ZbN;bUM$f0g}k>LAx!kUD+#ApOc<4TjI%a06nBUn7+^ zp&pXfA)M+ZOHT{STKFLxzQF(hK%bnev5d_sp^wZ+$#3ReTASZ?v;j~vYqdWk6zL0Z+E%{rU{;pJKz>i`p?6QyqQN??SEu(CfF)mZ6cJiU`IWrJSd+vYfGB&e1px=(#(_i&BmI-z z2}dVko$lvhqMv?k0O&q*dTg%S+rfIt{e||wV9%?Gh=_=Yh=_=Y=o4ONklPxA+`z`!KHED(3 z)#ZwabFiicI=J!F*Q?f@E~Ep?uok3z&r*b1p5 zu{CV&0p>p^b_}k7l=|}K!vY2qpwf8oz7K0H$m<(U0M_Jw7AJ4|=H@9a$mRwB00000 h000000000O#}{@wzq?cRnn3^n002ovPDHLkV1izCr^5gM diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png b/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png deleted file mode 100644 index 18f76751c0b8129bbdb8d51a1003f2da9684832f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmV-(0gV2MP)h1YTU|_;F-h3v zJJ3OSsEf`7!jo7k-DfT~PJu%RApn5Q+W-KSP>wuB7kjm%f4aRzdHd_|_PG4y9HLnG z7vHaqRvX;A_AQ+S#ivnDq%Hrj-Uv{ZEGR$#ul{rOsC|RTMp($^)ruhf zJn;1;J{&~z;ZHFNTN>1%{8BbTXO4~(V``%+&=FOH8qg7`JWtlF)gF~aeDtrU9=JSM zoGBwxgpFrQs_Bcc8FiGGK<723RAs=CwXar&nHt?yYNT;M5b8X5@LvQ|7A#xxX{Z&k ztolysIj&1k*c>t8Pc8PA1M)OydCm@8{@bm-;)qK@vkf>Kb2gG6*_p-qZZC}r zvYoO{Zpk*9wfH7=RPnn&)mITMZMuDhQhV!;fvsYBJ>b}Hr8g;im3e+R`#k5cN*{f* zmW)wtRC|_%@=@+?9sAz5_d4TBkqpqTikhH3Lv0>iBJ-$ebczyH;}6_+67D+CjzvFv zyJY6h9g(6=!e?O%a5&dDh>QOR4EQH+*i(P{FKn~(Qr0RQ>&$9AV=g~_fz9@FiaaqZX_vd0N_v#HxBH z+8nnnC@cp?fFi@E4V^YU*aPTT4(c4jJ93qaF^Ow(wIO=S1_|6P4k5D1ClZN-0~e4v z4hg!|`|dt`d(@p&y8 zqi@w!#E^Yq9~XESK&(lb=I#@unV4ve0aXqQG>q0DYIv; z$URjeIG2`wKLMV$*fS4{Xcn^$4Aq>AZ`KFsjQhWja{ZJ7ykF0J@mHl;fL>Frn@j`_xyUfj+*`>SyG zm4`h#{WWuqm#z967cyh|8q>KJ%O71>vt;-D%3WfAwuw!=%Xgvrf`Z$eiq^kDHZSL}|+Y{7z(GjZk%W4DFHLLQFIiVPqW_@DVr@DFnZnM1&kfPe`Pxu0sc UUud?Nau6io>FVdQ&MBb@05=qjhyVZp diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00010.png b/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00010.png deleted file mode 100644 index 92b4bce4e0b6ca6910717fd0d8adde36278ae65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVH2m#<3l*OiL?N`Uy1>t1pO)`;a(i8 zk<&>IQes|ZwRvad*npM+PK(fvl5Lz8*{|qJ0eXf*wTY|St~?UA{Q|az_p1VT5w*z3 z&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y80g5ub4`FsTJTZ@;egPI~GI|---PIU2 zIHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#Dc8FERAKjhK{cRos@5M2_N>b3zv8Dkq zEbo6-9~L$Mlp_Ca_19B9_#_9ILdriM5|g{)0uFE=Hr8V0)XsuScw|SvJS$$ZHjQ0VG z55;1!u_8qDE#{h6Q)QnQGA>8xJMFwxuZA*4(06`ANnan|`dQGu;Rus-4dHm4svt0;=1D2k%+@Bq*KU0yYTz|jBz002ovPDHLkV1f}m=$ill diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00011.png b/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00011.png deleted file mode 100644 index 6f75a6599218fd6ca395e5f014ad540381528c05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA64Ffb~4x;TbZ%y~P*k*`I8$F=a$ zo&N{)=D1E?rmLGYMQif^M@}2J{Ag^_QSGe_?mum=|E2qdJucwbH*cZFyHj z$S(HjO_^<>x3w|uqwn%wlL=dYOkBO=V(;y0#q+n;&SO0JDtPt_ttdWa-xTH0$s3xs zHWr3f%gtrjQg6sybj5uB^&e5?I`g?MuDG#Ha#iy@_Utc72^DIm*e1!%o);0G^Uk$< zO>lszK0b3PfL#K^GVy{1Me z8y9qD%w2Nm1%FgTe~DWM4fRMeI$ diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00012.png b/tests/integration/nano/snapshots/nanos/test_sign/test_apdu_sign/test_sign_with_small_packet/00012.png deleted file mode 100644 index 7e0e238204773a5ce6d51d5a1ce25147473482ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6SXozVPy!TEO0#ckxZhsa`*o31F@`Ab9pGdQv^m4< zcOhlqA}B4`BM{1dm9IepA>sYY-zUEWo(}s335jPc#dvM@s5EA0AKnA*1xxr{oK3JG zCYr3}5@LiKpPB)-$xs0n?0uXLaaR&}azP^YG%nQCnv!|cH8`{zXQ$KyDvC?Ui+ZZ( zsyBMwf>zc*YXT&mrUc(|_Ma}ZV_|KEeT1bC#Yp#?QfBPb-UMYi`BZv7!kUq|?4OU{ zn^upuN|O9zcIzf-*2y`xY2K+eJ~vX@7b zJg9+Au9cR=iFDpI0wT$n00VNLheOTE1Q}eis5MO*tzkt=KVl6ItHV1%4^os%C`EO3 zUvZ+xC1|7uRuM?nQ?&4|%KCH5ZCgZ{5r?pLP_&$WGi2tI=93^?o*b1mhp^@3x#;`j zeNU@Lc?jqU1OORAMWP?KCk<&2ZTB_J{SM%dn`$VFC$?|g3s6KA#(Dtt$NU0J&JqIT z-yeOy;V&V;%&a0nCe3}ne~M2L-l+d8&3CDJF}_t diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00003.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00003.png deleted file mode 100644 index 7e0e238204773a5ce6d51d5a1ce25147473482ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6SXozVPy!TEO0#ckxZhsa`*o31F@`Ab9pGdQv^m4< zcOhlqA}B4`BM{1dm9IepA>sYY-zUEWo(}s335jPc#dvM@s5EA0AKnA*1xxr{oK3JG zCYr3}5@LiKpPB)-$xs0n?0uXLaaR&}azP^YG%nQCnv!|cH8`{zXQ$KyDvC?Ui+ZZ( zsyBMwf>zc*YXT&mrUc(|_Ma}ZV_|KEeT1bC#Yp#?QfBPb-UMYi`BZv7!kUq|?4OU{ zn^upuN|O9zcIzf-*2y`xY2K+eJ~vX@7b zJg9+Au9cR=iFDpI0wT$n00VNLheOTE1Q}eis5MO*tzkt=KVl6ItHV1%4^os%C`EO3 zUvZ+xC1|7uRuM?nQ?&4|%KCH5ZCgZ{5r?pLP_&$WGi2tI=93^?o*b1mhp^@3x#;`j zeNU@Lc?jqU1OORAMWP?KCk<&2ZTB_J{SM%dn`$VFC$?|g3s6KA#(Dtt$NU0J&JqIT z-yeOy;V&V;%&a0nCe3}ne~M2L-l+d8&3CDJF}_t diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[ED25519]/00003.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[ED25519]/00003.png deleted file mode 100644 index 7e0e238204773a5ce6d51d5a1ce25147473482ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6SXozVPy!TEO0#ckxZhsa`*o31F@`Ab9pGdQv^m4< zcOhlqA}B4`BM{1dm9IepA>sYY-zUEWo(}s335jPc#dvM@s5EA0AKnA*1xxr{oK3JG zCYr3}5@LiKpPB)-$xs0n?0uXLaaR&}azP^YG%nQCnv!|cH8`{zXQ$KyDvC?Ui+ZZ( zsyBMwf>zc*YXT&mrUc(|_Ma}ZV_|KEeT1bC#Yp#?QfBPb-UMYi`BZv7!kUq|?4OU{ zn^upuN|O9zcIzf-*2y`xY2K+eJ~vX@7b zJg9+Au9cR=iFDpI0wT$n00VNLheOTE1Q}eis5MO*tzkt=KVl6ItHV1%4^os%C`EO3 zUvZ+xC1|7uRuM?nQ?&4|%KCH5ZCgZ{5r?pLP_&$WGi2tI=93^?o*b1mhp^@3x#;`j zeNU@Lc?jqU1OORAMWP?KCk<&2ZTB_J{SM%dn`$VFC$?|g3s6KA#(Dtt$NU0J&JqIT z-yeOy;V&V;%&a0nCe3}ne~M2L-l+d8&3CDJF}_t diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00003.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00003.png deleted file mode 100644 index 7e0e238204773a5ce6d51d5a1ce25147473482ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6SXozVPy!TEO0#ckxZhsa`*o31F@`Ab9pGdQv^m4< zcOhlqA}B4`BM{1dm9IepA>sYY-zUEWo(}s335jPc#dvM@s5EA0AKnA*1xxr{oK3JG zCYr3}5@LiKpPB)-$xs0n?0uXLaaR&}azP^YG%nQCnv!|cH8`{zXQ$KyDvC?Ui+ZZ( zsyBMwf>zc*YXT&mrUc(|_Ma}ZV_|KEeT1bC#Yp#?QfBPb-UMYi`BZv7!kUq|?4OU{ zn^upuN|O9zcIzf-*2y`xY2K+eJ~vX@7b zJg9+Au9cR=iFDpI0wT$n00VNLheOTE1Q}eis5MO*tzkt=KVl6ItHV1%4^os%C`EO3 zUvZ+xC1|7uRuM?nQ?&4|%KCH5ZCgZ{5r?pLP_&$WGi2tI=93^?o*b1mhp^@3x#;`j zeNU@Lc?jqU1OORAMWP?KCk<&2ZTB_J{SM%dn`$VFC$?|g3s6KA#(Dtt$NU0J&JqIT z-yeOy;V&V;%&a0nCe3}ne~M2L-l+d8&3CDJF}_t diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00003.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00003.png deleted file mode 100644 index 7e0e238204773a5ce6d51d5a1ce25147473482ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6S_BxrFb!&{^ILBf4kEuP+^O? zh~+!bomvph6FJv1wHA3k=0fo_l=42Zml-C=j`1ZUy#9$p^<;%MMq!NU6a8+ zK%B<6CTWaRf=aBOtZ$x$e;e~+!_)x)0000000000007*Z52L;7gjM`S@c;k-07*qo IM6N<$g4)`+LI3~& diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png deleted file mode 100644 index 138c4f0ab45d3a03430f83f0b7899c0c507c19c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmVP)V?UASE-(Z zHoB+MX{*qyMpvuOmgDt(C?B&~OT}uL%xPh(`qA{*!TZ!rmP6woo|N7`EZ9U*IM}GFP6`N<^8+lFQ;{Kn}XEvnS<0TofULn`ojr`5I-WF zCZQHds|c5N$ghtTsj@Fd?eIcuNrfppcN@oHP7EHRk|l1D>nhGTzh3z?4geX`xZ6 zMyt~zwM+SR(oScxrkwmGIZRGMw#GS1R%wMc_*-|FVV zg5Aws5oO7zLbA9M!0>HVUv+9uN@?00WbcEP){3`MCZx&MKC(Y-(+#sh;xVWj>~QIsNJf6Qd+N=Nbg^Z9+f;&jA9qp;a;lE;Sz+z^QPnsh`ZP>dK*t;A4=Wk5b`xcmydeV+ z9(^{)WsJH}%kgbAJYkos6+ZbN;bUM$f0g}k>LAx!kUD+#ApOc<4TjI%a06nBUn7+^ zp&pXfA)M+ZOHT{STKFLxzQF(hK%bnev5d_sp^wZ+$#3ReTASZ?v;j~vYqdWk6zL0Z+E%{rU{;pJKz>i`p?6QyqQN??SEu(CfF)mZ6cJiU`IWrJSd+vYfGB&e1px=(#(_i&BmI-z z2}dVko$lvhqMv?k0O&q*dTg%S+rfIt{e||wV9%?Gh=_=Yh=_=Y=o4ONklPxA+`z`!KHED(3 z)#ZwabFiicI=J!F*Q?f@E~Ep?uok3z&r*b1p5 zu{CV&0p>p^b_}k7l=|}K!vY2qpwf8oz7K0H$m<(U0M_Jw7AJ4|=H@9a$mRwB00000 h000000000O#}{@wzq?cRnn3^n002ovPDHLkV1izCr^5gM diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png deleted file mode 100644 index 18f76751c0b8129bbdb8d51a1003f2da9684832f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmV-(0gV2MP)h1YTU|_;F-h3v zJJ3OSsEf`7!jo7k-DfT~PJu%RApn5Q+W-KSP>wuB7kjm%f4aRzdHd_|_PG4y9HLnG z7vHaqRvX;A_AQ+S#ivnDq%Hrj-Uv{ZEGR$#ul{rOsC|RTMp($^)ruhf zJn;1;J{&~z;ZHFNTN>1%{8BbTXO4~(V``%+&=FOH8qg7`JWtlF)gF~aeDtrU9=JSM zoGBwxgpFrQs_Bcc8FiGGK<723RAs=CwXar&nHt?yYNT;M5b8X5@LvQ|7A#xxX{Z&k ztolysIj&1k*c>t8Pc8PA1M)OydCm@8{@bm-;)qK@vkf>Kb2gG6*_p-qZZC}r zvYoO{Zpk*9wfH7=RPnn&)mITMZMuDhQhV!;fvsYBJ>b}Hr8g;im3e+R`#k5cN*{f* zmW)wtRC|_%@=@+?9sAz5_d4TBkqpqTikhH3Lv0>iBJ-$ebczyH;}6_+67D+CjzvFv zyJY6h9g(6=!e?O%a5&dDh>QOR4EQH+*i(P{FKn~(Qr0RQ>&$9AV=g~_fz9@FiaaqZX_vd0N_v#HxBH z+8nnnC@cp?fFi@E4V^YU*aPTT4(c4jJ93qaF^Ow(wIO=S1_|6P4k5D1ClZN-0~e4v z4hg!|`|dt`d(@p&y8 zqi@w!#E^Yq9~XESK&(lb=I#@unV4ve0aXqQG>q0DYIv; z$URjeIG2`wKLMV$*fS4{Xcn^$4Aq>AZ`KFsjQhWja{ZJ7ykF0J@mHl;fL>Frn@j`_xyUfj+*`>SyG zm4`h#{WWuqm#z967cyh|8q>KJ%O71>vt;-D%3WfAwuw!=%Xgvrf`Z$eiq^kDHZSL}|+Y{7z(GjZk%W4DFHLLQFIiVPqW_@DVr@DFnZnM1&kfPe`Pxu0sc UUud?Nau6io>FVdQ&MBb@05=qjhyVZp diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00010.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00010.png deleted file mode 100644 index 92b4bce4e0b6ca6910717fd0d8adde36278ae65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVH2m#<3l*OiL?N`Uy1>t1pO)`;a(i8 zk<&>IQes|ZwRvad*npM+PK(fvl5Lz8*{|qJ0eXf*wTY|St~?UA{Q|az_p1VT5w*z3 z&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y80g5ub4`FsTJTZ@;egPI~GI|---PIU2 zIHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#Dc8FERAKjhK{cRos@5M2_N>b3zv8Dkq zEbo6-9~L$Mlp_Ca_19B9_#_9ILdriM5|g{)0uFE=Hr8V0)XsuScw|SvJS$$ZHjQ0VG z55;1!u_8qDE#{h6Q)QnQGA>8xJMFwxuZA*4(06`ANnan|`dQGu;Rus-4dHm4svt0;=1D2k%+@Bq*KU0yYTz|jBz002ovPDHLkV1f}m=$ill diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00011.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00011.png deleted file mode 100644 index 6f75a6599218fd6ca395e5f014ad540381528c05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA64Ffb~4x;TbZ%y~P*k*`I8$F=a$ zo&N{)=D1E?rmLGYMQif^M@}2J{Ag^_QSGe_?mum=|E2qdJucwbH*cZFyHj z$S(HjO_^<>x3w|uqwn%wlL=dYOkBO=V(;y0#q+n;&SO0JDtPt_ttdWa-xTH0$s3xs zHWr3f%gtrjQg6sybj5uB^&e5?I`g?MuDG#Ha#iy@_Utc72^DIm*e1!%o);0G^Uk$< zO>lszK0b3PfL#K^GVy{1Me z8y9qD%w2Nm1%FgTe~DWM4fRMeI$ diff --git a/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00012.png b/tests/integration/nano/snapshots/nanos/test_sign/test_key/test_sign_with_another_seed[seed21]/00012.png deleted file mode 100644 index 7e0e238204773a5ce6d51d5a1ce25147473482ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000Nkls!-v5Dju`WEv5ulk$^e?`v#hCpARIHSOAP9ngW%Cv=%CVo<+rv-CEPx51 zp{HP`0WAR~`ZV0C5rmt!fFW3*0ppIzvA?W8?T;W}&Vay;TA5>(e?pxBEY_Hz&!BZd zDcaB<0r4Pq>@ZR<3-W4t6(R@zL=HSLi9T(^KWfR<)9ez7>NxJl1@Y~77a1q=H?<4* z30fCqoB-J@W)UUU>>?%Q7PB`7m-dE{DXFP_Yw1Vxw>$}#cVp7k02Oh?pFX8dj_j!p z&OB>#i>-dDT54=qMp-liaw*Z@0t z<|Y?Dv&><(1TEZ4`^!!B8Gf+bGFyMr${8THO}Q>Dgbm)d*PI(Z7Mn06?wz|anEwX^ hU*hWJ9|S?*%M!Kxo^>_ zi?zWYW6<_oAx#t09%eLb&%gE}IUkd6SwN9Fdutw)#E=Ew({ji>CrF z5Ho%njJZPoA!B!2X3#`w$ahckob--U&!aDO2w$hb0RR9Zvd@4fLG|XPInmBWcZlFW*E@iLQSw&tLoA}Ca` zSGsATwfBh!gFM|;siwR5;X3hRr3=ddX5a*&#Jj49JSu~&2D#<)icOomTX$L~de>c8 z2GGnaV6~B&H?jcj;Nof-WX@3=JQ!p-0}LS<6Q7X3Eeop*l;_}7*8c!OpM1sj=IMIW zlgZh)Q$GUC$o0;{raDBD@ybxjX|`H7kSdVGYY84aJQaM>41zM^Mw7n0 zVCEHg4>&(AM={ok1i8?^!bdWvyU3#ZzRUMdK$^S~*Jq5uFn2DrEmv~_mmf8LQe zaqysxopey))g1y+m; zLcCrMgOl>^SQY4cp>xRr*MIf^rX&=6od!IX_F893rO0zZsLCZ-+$HWfSTC7UY3S#y z1&G*J1`iTHYBHq7fXIsliO2|DM@2?9Uas!!-BV`vy{hAPzk)^>bX*h5`LKJ8}rL=v2Y)q=SN*lakw&k@R-^>pmFN7D`DtZRo9wvYgLhj28&^(cAjGFT+00000NkvXXu0mjfv^tc9 diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00004.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00004.png deleted file mode 100644 index 970b15944a929cb54b84d1187fb0c49d776ce161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmV-b0jmCqP)W-nCXG%?1iv`4kFawPk8Wm)K5CEhTv2Gq0-vaAjgxfa@jYGiT n^^^<1PeB1FN0fgM1i@ZzG{l9d4y4un00000NkvXXu0mjf06&f| diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00000.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00000.png deleted file mode 100644 index 053fc534be7eed4c1cf588f2d2252826fd4eae15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 395 zcmV;60d)R}P)jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6S_BxrFb!&{^ILBf4kEuP+^O? zh~+!bomvph6FJv1wHA3k=0fo_l=42Zml-C=j`1ZUy#9$p^<;%MMq!NU6a8+ zK%B<6CTWaRf=aBOtZ$x$e;e~+!_)x)0000000000007*Z52L;7gjM`S@c;k-07*qo IM6N<$g4)`+LI3~& diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png deleted file mode 100644 index 8b7980241856323a359afabb952612c53e1ab67b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrK|P)rCxSAdzGG?uW#eH+$K*l(v!s`4{OtpN@9oTmtm3uig!#u@&wWLPvk7QC?>!? z`XtBO7{Q_0!t=E z%&g|=evyLd31%+)R%s*FrN4?Z`Zl6FIkLzeeUa8SGO;P^C$k{$xsnpwvKovUGAQ_y zwzmcOVijL}qFl1>okBWSI!;ny|h3m|u2!=8kFx)&aHx*qv@ZJ#)OQ z6waXEc_?B!J6v%Z1D1f3+H9Am%-&}Jp}UX&AU`z$-Q%$<)5-@y5ClOG1VIo4L9miP XekfXGIc1__00000NkvXXu0mjfQvBJV diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00003.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00003.png deleted file mode 100644 index 97eab5d99deeae5058b969d5401bab38b91bf938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)a#U2H40TL`Z@#eu*>xkKKYC7Ik42f%KmnGk^3!3T|R4&ex+DR`KAXhKrHbi(`gav zA!!}L)PJ(=X<=F0eh6>hU;qGMfKs&8ho(wH%b@yJc9vt4-rLgCcSLrbYT1_)$&4CC zHG0OAua{%lNtmNiIM(VJj`dSGg1Cy9!!KYcsyf<>1nQL?EgO8fCyEettYwGQISB=# z1SCV3qPL-_%dLIOjH`bMGm%(M9beKf8Cr)$q&g89Oiz>m>AtFC%{FOm6jsa2ct)+M zvuLmOCL(mc0E3IRAWC1EG1xvnH1qAZIuejv*Cu-rjKJYf<1~4KR58 zm;a5ExUWZ}*bGk@yI=Rc8YMJbFGx%)kh__CNB!$#`>u;h7W_xzYEMfYI-aq`tM28; zC3dr06&~H=*3X%ClIz0j1AD$nIh?E(-ORORiszEcX|uK`_Ib2M?QQzS&C>racb4b} z#V3yUHd)PNu1V`S_*ie1NWXILGwnFXT>&~9Ihom}b=*69i+P#B{ZDaIx2uZezA|n# zak!`c>_WW%-Bn-Cn*Nh{pTS=6WObeEgX||cUOy-9Ic70A=dW7H^6h>MZok@>`!=*} z{cX!H{P)8a&IR{H>-)Q3AA5O1`{TT6avZ<+&+34IcLj|9-6s0$8R*FXLxRE6)z4*} HQ$iB}B3_GW diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00005.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00005.png deleted file mode 100644 index 78b15b726690a1189cf8af3276b49e8f35fd069c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmV-t0hs=YP)?FMG^0r2hj%3)QiO0?c%9R?OntNYU~L z6V}&JeJydE4J(k^fsU|WF3F1}nz^}Np=^eUF8&BGSXl!)s$Usc^QP84{0{!AnsP!% zx!f-D9!#Z$4rvl?F=41ntB_G1n%j~OdTv2odaxQn3$#}>iZ|D&mN2c zzS8)_zXdrbjxL~;(q~aJ09p_sgb+dqA%qY@2qA>roiE=-x0^M5;l=;}002ovPDHLk FV1nMpm@)tW diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png deleted file mode 100644 index 1e80339bd3be6eafedf4b5309a6c82cb4f19c54e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA64Ffa;ux;TbZ%y~QGHea&=N88HC z`~MsF7KrNHlfrj{D(9{BTX)24;&DC|6)Vdi{@&colu!3t#^F=7b$u>Ab?tYk zp#bBDvwyw!U6A{~_+Q}h1Zmxf&-2t`)T?5f-XtG*^@KCx)`Ih16ZUO&nJRg;CH7pS z&Z+4xDe4L5t^|o~zmqeEn~#A(Krrx=S;DEALh*HGOJnNg7yO7zGny}<+iR8efcxF? z+YR#{OtGJQedBw%y@@ggPhK*1%>B1<=Y3|T>2=Rusx#bKWUV!$fBn`U)yHapfdK;z Zobkc8SF`msZu$!n@^tlcS?83{1OO#Yj6?tc diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png deleted file mode 100644 index e725e1f9e6e1c0667a48acf31e4c5f9b95e76f54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmV{rOsC|RTMp($^)ruhf zJn;1;J{&~z;ZHFNTN>1%{8BbTXO4~(V``%+&=FOH8qg7`JWtlF)gF~aeDtrU9=JSM zoGBwxgpFrQs_Bcc8FiGGK<723RAs=CwXar&nHt?yYNT;M5b8X5@LvQ|7A#xxX{Z&k ztolysIj&1k*c>t8Pc8PA1M)OydCm@8{@bm-;)qK@vkf>Kb2gG6*_p-qZZC}r zvYoO{Zpk*9wfH7=RPnn&)mITMZMuDhQhV!;fvsYBJ>b}Hr8g;im3e+R`#k5cN*{f* zmW)wtRC|_%@=@+?9sAz5_d4TBkqpqTikhH3Lv0>iBJ-$ebczyH;}6_+67D+CjzvFv zyJY6h9g(6=!e?O%a5&dDh>QOR4EQH+*i(P{FKn~(Qr0RQ>&$9AV=g~_fz9@FiaaqZX_vd0N_v#HxBH z+8nnnC@cp?fFi@E4V^YU*aPTT4(c4jJ93qaF^Ow(wIO=S1_|6P4k5D1ClZN-0~e4v z4hg!|`|dt`d(@p&y8 zqi@w!#E^Yq9~XESK&(lb=I#@unV4ve0aXqQG>q0DYIv; z$URjeIG2`wKLMV$*fS4{Xcn^$4Aq>AZ`KFsjQhW-L%NF zFSQarKRM$09L=cxVpE@`Uz_bW$G9+Ks^q)sdF$Bf*SM-!G5+H5JE7v3qj-<&qv#eF zz9m=A%n(1JGE@5s!^`>2NwXj3zg?U+L-k9>{mNTayq{y5eP6ujc^h*(Kpp6@Tain& zR`?4FC+*|(zH|FYO3Ey@lEg{=;#Dzo=1A;XaBxBc2H2m#<3l*OiL?N`Uy1>t1pO)`;a(i8 zk<&>IQes|ZwRvad*npM+PK(fvl5Lz8*{|qJ0eXf*wTY|St~?UA{Q|az_p1VT5w*z3 z&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y80g5ub4`FsTJTZ@;egPI~GI|---PIU2 zIHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#Dc8FERAKjhK{cRos@5M2_N>b3zv8Dkq zEbo6-9~L$Mlp_Ca_19B9_#_9ILdriM5|g{)0uFE=Hr8V0)XsuScw|SvJS$$ZHjQ0VG z55;1!u_8qDE#{h6Q)QnQGA>8xJMFwxuZA*4(06`ANnan|`dQGu;Rus-4dHm4svt0;=1D2k%+@Bq*KU0yYTz|jBz002ovPDHLkV1f}m=$ill diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png deleted file mode 100644 index de32f3ce07dff69f81610af590478fccb00eb981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421 zcmV;W0b2fvP)hgctg;okJS}5Hsg|TnN?duz7`o_GKHsL8-F7*4p z`A%(S02LoaDAGrKOk_8YAwQyvNf|D{d(ka*QLPKLwq(tv+HwU1dq0mU|5E7=;hL5V z_Zo*hSPKYMwPx=CQ0iwZAjbP*dY##--|~`)PRG8Cs~^gB@M%48G*7gm0cS>L#?~1b zTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q68V{0R2f&|Q!D@g#IYJo`@&oskJPG_ z!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)>2cnUevO+kuebo1zlW9>)-xRgH?1YQ? z>VFt9hS!HpFNv*Vw*rQn+zU&*lcqiQ@7i&+A9V5+&tcQf)sx)|_>W_ZaD0+*Y9u$O zHzbY`%}uKc?}*=#`h1pt+A6fp0ewZ-lbuF2VO zuW`tOseu?O9eH#Bh{tCuz{mUI^$KsRe#>1`6grk|hWa612S=`9;PgZ;8gN={TIPCU zV@vGhI0PjNisCNUydx`u^PgI+s_@`I^0PyDat})jd4AlLr z8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3exMb`Tg^M=R&xR4suX7A$_a%)(NzPe zZW*Tw=w##yPq|Np^0xQ8Z$LR(Q=irGE!VJf9~XTh>AZXA1dx_OY)q%%~yc4`YEP#EV&#)nwkw) zjYA4*1K~=09-RPk|7->Ls4pI`@wCNv`O*}Pfo+?iI^^qMtKAqlJyFXB9E*)*t|vBq z$wkgnkXj(GB&P0(lNzx2{s;74pC+QKA258BsLynzXfqW55(@wT9u(8)?a#;d6k;o& zcMqPyJf_r&n1!)G)jkvYmN>6!sag^DXop+tC5VfBXRF=X6$us0G-`c?Mslz>14J&; zsmU{#XLMQtHwd-kn-|Q~8bFP(2uunlQW3Tz+EzYYtT7BrK|+*bDf8@k#0ka^uR3NT wR4|NprXX;QP%mAmU;qFB000000Dynv2UNE4WGARJoB#j-07*qoM6N<$f*$;-)&Kwi diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00014.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00014.png deleted file mode 100644 index ca3d9981762c636f11dddc5cf3ebbb25d718bc9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmV;I0cie-P)JmK1ZsQr?9Q~jve3m#IA~Yo% z9yJa{Ff|aaQqR^2AokB@fKT+r<5iwE`!074QR!H>F^xk!54O?`!{LciHsG|_w2U=k zqe~p*I0YpWz0~Hs+O6I|#{gh4-8qF#x zqWy%ReUEJ_qZ6eWK)dL{{4>cm&{2j)4bX*7$KD}hz8~Oa=oR6X{3C3#1?}?mFa2}i zEMsEloblLx97pvtYRy-UjjL*AxJYI3GH|Ei36PcRJ!n}Xp zzFo5fQ1NUCMdpadM1FG&`4#;!%5VX$MUSM?^e)WKC0j1dmNOtY`#GlkOJzDlYI-s} zYaGg8Eg($Qmc0u=X`ju2nCy%0DZOoe%coo@in@$z9?E&}?7eVwPxPt*$0B3#bw_3{ zWs=JhR85edWY4^325Ufy9RvEVhlS|u28L^i^_g0lGOolgu>b&|a?CNK>{Z03TWFoC ziMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1f!<|D)Gha94{M8fi;9(fOXK|#m-{oX>xFqV?x{%ma%0@z zuh>_c5m0e7j51@yHBrAsLwQ7hCT+L@Z$+2Xq}jW2>r3%0-O3e^9Q~rH{5Ba56`Gz6 zj~a&}SQ{u;wdd#rApNrykQ06NddAx}=klp8jE1&NXdL7^IC>8PyC-_tfHPw=)7KRn zUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5uQu{OAY1)L6zr_LofXVLZ%s%5N1K#RX zX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB127b18yJg*-{c42+U;aee3h(7udXm@ zRyV27uETFf!-=nw3q+=%<_!JX$?e1_X_ceBpgPwgey$UsBys=>|54ruBQgcepelgP zto8Ny)njkW-%uq>lT(PFah{_@5}$$=0hw^jIssZo2><{9000000Ptsg01T|@)Au7K QNB{r;07*qoM6N<$g20ZwKL7v# diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00017.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00017.png deleted file mode 100644 index f20965b93a9104857683e8020bb96a3cd236905f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)Bd{@iL4mW5hL4zfD8CM1Ll2xB+iPht$OEUAT>Cm~j_;chQ67i$|#i4hM#Zvz|?q45ozq~Ry|Vt7GAppqxK ze1{wDF-)52CVCxvOGAc|RjNvmIYO76JWiaF@;M;H&kj!_NQw1502ES{0W*l*K(lHs zk2t->;v{9NlC7!Pl%JtW2}%$!c{~G%eUtzI0000000030fFErQ<+t=(wPOGP002ov JPDHLkV1m|8uU!BD diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00018.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00018.png deleted file mode 100644 index 91ba67e9d58f19b59a4f1935d93924c881070be3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)&`4QZ|}rnM!{Tuxg?K(PARr~FH$9739& z4Ofjr3f2ZHm*99aq#M0a9p0~WdqKP&CFW= z*w|8vT&AEZKrYESb zKLe4bnsqg@Wpe1u4T)*cPvYjxrW6FO#2F%hIF&O1000000002M<@f=LaQQ-<=!fwD O0000Ti=+saxaUNFB{|j zJJ%kq#ess4ViXx8?i1~sd`Ls|rO}2P@L6<8Q`FtFWqnC2%VlK-1V=ylls<rYHNkVSv{12jmP*OzJA zlGn9fg`pB%4)prq!Lkh4!lVN+y#R@K4WQoEE+!oa?*%L_!cQdjH*l4pV@?Fry2{BU zLanPVu`{%2hfLjxn67=J4<0~*z!=-#xBvhE00000001z+A6r`Ih-l-XHUIzs07*qo IM6N<$g4%nq0ssI2 diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00020.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00020.png deleted file mode 100644 index 972f178b3e37735865d0e4ee44873ed4fd2c9f4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmV;90df9`P)BdBEPW@@fQ8*wBZK47F|*m)w^hREV1RZ*>nats~`Ime<77aNK>-m zs&Poc+(0yyw`?5%()QU5@KIk3uQFQoUB2X^Qn7AhszW*t_R%%H?=ztHx*3SBE?{^qk)NqVwK2s%#R34piqvDS2+DlPm{+{L zNNu{V`yGUK6ydt|$+U5VU!>Wjg3hI`^_#DOO_Kxd%VP2Io;VD~g^!w-V z9omQiioGHf=_76v^_y+TRrF_2h70gk^hr&sy$iLrWX+}8at8!^KiialsdR^MO-qJ* zjYA&P0z#G6>>U6~{cH!scwY?fWVF?_e5s3*hUYS_ekk|B-l}lyo@hk_&WOxNUo$ec zluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ex{PDj4Sae761U;`T3aGs%@PSdAU~N zXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`}-(ZDsvN%L8V#XNL6ChTHc&kah3vG7{ zgL~ZD3^)8k&}5XkC#F%od#sB~S07*qoM6N<$g3;W! AV*mgE diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00022.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00022.png deleted file mode 100644 index 9c2054a609aabadd8aa507d9098cac32d83ad4bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401 zcmV;C0dD?@P)|pEss2+J4Ke291T*A3-1ywl<@xq&dShOhG7%|V7RLQ^ z+jgx-K*E(V@{AGJMC}F*;THYrwBZK47F|-6Z0o|UF2Qr`HXZ@a(GQx!?})=8LQ}Hg zQR7eqQv=~D^=zF0V*hLe_(WfHuhQG>yFAoHrDEO2G!F4NxJow+n0Y$C7VKFp zS_{x#wz{XFN$K-hcv8TVQc#KC&J}pwg#xt6eGdSRXpaDKqL-c49L{^~1Y{lVh0nqI v&H_e23i@M~zktgH000000000006_2shW_QTlDPgpjoPwE5JGW!Kd)sWH?l4QZhVh z9ExBppj5@0dnW*?pRE9&=&RvnMr(e{k4$7b=4HCZL9T-%^`fJBB9#p|B{C(pYGm3X zgDg`}v_M|ToN*7_)PT)*4(PkSO+-&OFua$l&(vbdbj82K0sw#$W+wf62YG9Pa<{VU z>_#=wNq8)eYLwd1Hmq-srLx@wZ&p-)H>Sq1n!Ugc3#6b$nB>!& k#0>xd00000003ZFe%;mUX7~$={Qv*}07*qoM6N<$f`|IBH2?qr diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00024.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00024.png deleted file mode 100644 index afa9173a2db50134265726a18b83f78c125c7317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)ZMgy_M?d?Nf2j;d6`Ga| zj~a&}CYQ_7Fd zdDOafkj>?hb<+e@mOak2)EahO*Gj+&aN%GlWj1eF;dex5)alxF^hKa+vcD!^0B&@d zQC(A?G2Y%OD0fNSC#9I&a^+RsJ`PTT8<(MJSH00wIPqld?!b9mbrYV+jdErPPwzhf h000000002+Bz`w~>+2=D($N3_002ovPDHLkV1gEE#g+g7 diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00025.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00025.png deleted file mode 100644 index 7226a9e230b3e9732865ded1fe0d639b690029e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA64FfcNDx;TbZ%y~QGE?=_(k6U5k z`~L^xa>P}9xmV2aeEG=oyPbqT3J1F#qV_K-CO2y zhOFUL_V4{NMUFZIOj*gO5r&0SkXAFQdH7i>3a>f#A$=iOE> z6J*V9J{0=4vV?iVzfjg6E8=zDCu}`i{xhhfx$(G}bLocC4ex9vB;szoW}789dtSu; z8+W=zZ*E(#%HiLn8N1T`zBN3V&0M+OU;5%zehJ%EH|9U}yPT%+FItDeLFd)`{TtNv zw$!;cD62eZWO->|xJy9PKvD>ZKA1F_e3y`RSj4o<8596uFz>K{lgIHZO}%FmSfOL)tq1( zP)Nw zxkGE|K*FXNdHRU=iF89B!YlgIXu}P7EqbIXs=8>_me6wCY`g-Ty&w7%eoO2Q;hLNc z_Zo*hm>P(t(w1ijfVh3O0(`tLhF2J^`YoT5C{!%lO!Y&&4z}EjiSk4)8gN={TC_%N zY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WREwMjSiE1+y|1A~(0H)J@Oe`3vHnu_( z{Zq4tokVQATR5Rl^2?m% xPbU49LI^?c;+f}=TL=LF000000001g!Vd}r3nNCnlQsYV002ovPDHLkV1jqwsZjs` diff --git a/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00028.png b/tests/integration/nano/snapshots/nanos/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00028.png deleted file mode 100644 index f13eb25ed587c0b4a16f9b23cb556d08e40e6259..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAk1P)G8OYSUHuTRgUx!;QJ%1(0jI{MM(c`A zTVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb;68kfis5V{k-(mp(z>i`iwF2(xgJxc( zx6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K=>%}pj;g~Dhcl7wSxQ&pdxb93Z30xz zU1(2VfMz;kg7K~|n!Bmu4PU5~Y4HWzvhKDl^Lp=uC<0LSga m9A*Uo0000000000|HT(FQRTW?A!tVc00005!Dm7wgk_y+c*Q9qaWrJK3g1)Bs7{0 zj~a&}m>VRna?hg+Kc@w;LvUilqa-mz^SpR(RyNI zOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8HO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xM zX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^Celk8nvrsr&YCVR6Ux;Hr)Zv){kR~Pe{#SOjDE5 zR?~;Ve_^yHc*Ih@n_W+|?nfNRr@Zud} zN&y@pN~s8E+Ht8Hxa1}U0vtB8RK!GTDFjogFSJHDTz6i41GUtGso8aL?JDUiKjwvC zxVxZ<=WdhX!I=rE{E8TW_S%o)20{2RCdrIjRHSlb5Dt~NioW;fY3h>&B;WvY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000W-nCXG%?1iv`4kFawPk8Wm)K5CEhTv2Gq0-vaAjgxfa@jYGiT n^^^<1PeB1FN0fgM1i@ZzG{l9d4y4un00000NkvXXu0mjf06&f| diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00000.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00000.png deleted file mode 100644 index 9fa51df290f85860c685b43831f20f559eca45c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0WkiFP)F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00001.png deleted file mode 100644 index 3c46f158c36d1378fa93cb3924a1a37742d230f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 954 zcmV;r14aCaP)JYA^HAXEGEQ5fvY)aKEaJqCwHi~6; zNJ}US(C4*lV+gba#g!?ekVO#3mP%aXbR)CiSW#M4pt3v#(}QqFad&=A?zp@=WkK(M zXc{6mGG?h2jvj_r!Xio~obDg#qt+r&9HMY`q6fF|eWDyOU{r+|wZUN8fD%qGtW!#j z4o&Q7e9b;>m|W1fQ=S?LvU;n7J?Rl)=ZrF}YcO;InxLzxL|ckUh*3dJ{c$H0x4D5< zyHQ%QV5xhuplT*gF}$#5EZc({u*!izAYg-ujH65(ZO8JbT8xOSnIcw{*4kg39otJU zg@3aAO6lo?66K^bbR`;~L#)!-K06X^_Buo3Uo5vds*Lr zR*$CCpC#6;Pnt{rj)5Y_r-UdS{wKgU{)qQYGiGlc=yhpPj{%O?BX-to-WpCr^9kr< zy&c6Gi9F+^)oTo#rQ6H(!_oQ{vt~NBFCf{|(C^!W;M4+vK)@f>dz3X4mr$0o|5Dr%)F#gyOPXu;?SDA{1&$5<9o zD;YG==8TO-+?x&E#h^Lj-W#xsL36}|E@aL`!wKlH9Sp)HhRZH$C4+{e7@?~)el1S( zADY)A}rE_D$Km&(qxFIpbxGaIS>eM-QSQ>y|qY z_(2A(EpXX-J;B;jukEk?E(l+53%P~`ot^IXwVMrGkfNs9z>%07*qoM6N<$g7T2VwEzGB diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00002.png deleted file mode 100644 index 986f7dda9efb2800674e67ee949cda78fe5112d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmV85 z@cJ|%HR@LDLL2?V1v}zJ%F}q9gm4VCI&oz6q}B=&JNw z!V-~%+TRXe7_GkTA%&4B0~88{h4{%$Ll-)VVbEPKMJ(x%fUQ_aLbCEmWeCRM6>t4y=v=PePKIq*oC*0S~CAuE68Vx8qJgdb&TpDijJkpv!4BiFn)s&G;zgb`1Px8+E46 zVUy6s^Lpqj!{``xmZED)O5x}kVn4nMvt$d9liNcl7{<0CBKf8=fT`!%E-_F zoe?V-8_Rok=#mqVFUFyz?(nYbIxDOs9`TfVBAt7x-=O@+yPz(I7j4fk%=Ok3;{cMc zhfO!r9@3^}w*_1HN-#|tfUUCWa!7@_C`V;39Yc-!Z6|CoLf6v6!qBxq3%c_%cp%vSyjVIUe;o>lsRw0+H%i&(Ps)ZDZusNdN!<07*qoM6N<$f>_Dt>Hq)$ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00003.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00003.png deleted file mode 100644 index df5a094dd836cf21ae211d19bcc1d978e5490d32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmV-$1dscPP)JIVf+l)cPH&UI*BmWamgvA(*E0)h{y$=MC^E~G$Rc&}mdjqJm z5@n7M`&m#u@JDu{=;nbRqwJf5<37J8yla2i-0z=KC*wcXR8_EftE3rSbVZ!@HEs1qfMNi z{VA6vVNfP#i7k2gpd_*_07D^JIaxPQN2r;;O6SSns&?GJawjp9a8UyTAg5H_vy>@f z!~NYrJ5vrdYC8vGWG#BtFYHyc1ptq*YGRe2S+G_tuD{;NYU*yVhF1~11MvR1O<60q zlVG63sY%x1hM#gO7PY}^3Oum*#@`*P2^A}II+T{rgsFZ+r4Y5JoI71WmI^hxH+R(LNmZyS zT~5Oyd7L4w0)6uwkNAB8KdMow?%*I9cL=tGHnLOi0(edKh$*@mG8&>I^YBLR_d_Yd`@c{%bfj5YHg(Z8MD25GN~?U7Sg zBXu~WLRE;vNmOm{t?KXW*y&h>*uc>HO0s;V3u_+EytaU?1r zX1o)=ei^~0{iuEgg$$8AlIkYs5u&KS2EKs?04XEccNzZN)DDR&D+{A*W~dPB46=o? z25D$}1WG$&=|I)a#A>S^fI;3z0CG(?5bvkF-309c(U68R#nv3ud{hciTP%7`nVp? zV4Yh@2*|&=Zfg;98gJCPxh?ZRV(_c| zaB-X+j@J216skXzF!xIBMerO> zj!NVZ)`Yy#`zt4myMa&0od3m!QFCq6@C(9v?@JC)HhF)6S= z*bNQ9p{z2O%GZc6QT`x1M!XsIFSogukdXEf>vdyeV`F3Et_YBEHam7;w-MFe7D#fQANT#CIDK08b@$krZ;C1|Q9^HjcD)t-BSxPR{c zQeJycuncz(z!UC5MxJeH8j25L8{9I)`ZT|WTmj}?6V_qg{!K_OG-k~;v?c|KFPO#= z+RL>zjCddUbz@^=;|fs8IIWJ=YEJC~4TOEu)Nx&eEE^FEQfY`r(O|@H7NQiGcskk4 z8aM>8D%9@kLOMq!Yr4t`u|z%j-V*d8SXzjI_=e&L1{460`%QdiBMvb>br}hXNRD!u zF4KTW#sLN3J67VnS&Xpm#bn&nlc4;}aH+JA#+-TeXMjBcaT$_s;Eom(BN0`*>T${7 z#6J(^JHTz9eNPLgpvNm_*yI|pK+eh-Y;0_7d;sv&FLn@zYXnQ*-|ZO%p8cbp=K?&J zvW3CWU zA(_cf6LW6Ghl}q_jMp8Xi&y~M4{Z9qKfW98@WP-h1!=D&H*8FQA!7$a=NU67Ys0G18vvc< zsB?zecY*c5FWM+zjTBSP^JIS)NihkoU-~}TC1rMS+#*5tc+B-N9qQf>{A0HF%X>ga zffD)@db4O?9gX@@2~t9pPxSy@Wd8yXu=b%l*j0%@om(XAo<@aIv#MksPz*lOgUxXQ z9M2Hapl&rUw9p@0P-G0GO#sg&=a08d25QrqvZCzeq zLE^|)r$ue|xLN>agQdOf!qy?sQA1+of)|rp0I1#7eSo@y^^xQ_BaADzJH}KMlvI0Z z0kGS|GHctiF$jun0Uj{r03+T-=N0JuQmd*~59C2?G1_tfim-CKWC88PUPw9KQqko} zmFsE7*8>R#Z`?)yAEfsai9})wy0_QDa8Y`T$`z8X$;cNc19#IUicyjG8KV=QQu{&j z)qx8_gx3L1yeI1-ws~LAqkgS%~(W7esCvg*eA_&2B3*NF}8O> zFf%CWv`@At0PFyeO=M3=9RsmrRp0S2X3%9-H3xw8$ocnQt}LXG@x*%oFC0&|QdPQz z0YJgC+t3^Uq#dplWB!@?xtSNI-AZ7fmiCT4Y^V$OIThm;c9Ynx@FC+M1*W%QK^gqg z3rQ@-uu5hygD9~#>5sc^J4T;n{5L%P-3pt z3^)o>NYzSm<3MyGtioA&TlcRN8)*XFhAL)A9CcJj5=`PG(gO0*Hkr>5qJeH{!Hq|#v00000NkvXXu0mjf DYEsls diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00006.png deleted file mode 100644 index 8a571ec0ce454e08ca400ad030a36b8c53a314d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)_Y-hu z4b(Y9?XxgF@S_{uFh|IgQi}PTBxDkwzxsKKOK5bwUy=xWMvV0^9PQpW|1;bB^c?73 zxI|y&-XsmCqs6^iB9v(5Q$3(3*zfZPX|TCS{K&GopLL1Ggix@#KHXQ9|h^dU|O_0^_^ zb^!S4P2bK%JD0Y5!grIlDyHR?kl)FCrHsY_k=E|EHeR5YnDDAFZ-XcO+IPnm3 zdEQ)Zz)CU|#*n2t03b0bQV?IFc)!hCc+23s$-d>#_v4*GdK-ecB+_^x zPkJL3cU+z=TazaRp!-uF{dxcxoXSGm@w7ei7Nsd%!jql=fmfWLl6-P;cKVB}r%G;~ z>Ayt|~ap%JCKKn>f10wlnRB}(1e*gdg000000000000000 l0000000000006*O@e6Wdbqn4ojXeMW002ovPDHLkV1oCeCi(yX diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00007.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_nanosp_regression_press_right_works_across_apdu_recieves/00007.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00001.png deleted file mode 100644 index 7009edb4d9b16d34114d9679f84e4145804c9298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?+bba4!+nDh2VCcpe(YHpSCjg z>hEctcELWOf!62V-mL28TG4u?X1h~Cd=d#LS z*rs_i-#(L6*lNGodV+k`8vc#bE-zF)CKsk|u6sJ7-eLE-=WUg2QBBLXeNCzTJZIm3 k>F*imdl`Y@jtx{a*e^1S30M&6G94uC>FVdQ&MBb@07{3;3IG5A diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png deleted file mode 100644 index 86f889eb1b5017362ba0edf43c6bd5a0e0677718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmV;-0yF)IP)WuSyfxE>uL|>Z8mFZLadg>R12Bv7yWR8_o z<9`CSd!Maw>7%aKs(+mqPdMe6g}>|{+vmXY{w(?55IY2O^2ZURE}vaUX9eAtesKYE ziT^}8twFsctxLFkZdrO;Skks%!rKoR000005R@oLMMfiqT z>0l-zDj2A+Zrxza8lz`oWEeEVj0<5M)HF4c2B%XNKUGdha58OwP=#i~P70cfUgdgE z2x+3&>vHQbEp%0?tJP_d+NJ!&5Q??~I;Dt*xkG$kTmBkSlzu&8Scz?PmLAd?t!f)D zM_anB7HQD*WG}ZYSate|C`&#Sl8{jGCV=7Fs{X5U=cJUTT{eAxTc~qyVNO8z=nR?? z=|hFjD#|`Q)0UxpBPO3&&=w!hlyk|i#|@Ok7*4^l%nH;Nn{mFPfjfZm{BQ@A z< zN=qC&$^@w2EvVy(C}^fn{NdNELRc9$PfeJg7-r@HehTi}!8jq6X9vByqPLJt#D=hb zQ&kowXij0#GH?3ERZ%8Do^jG&P9NGXhZ-Nuf?PUbUhXbD;SAuMXwwchgrQ(FGCT(W y000000000000000000000000000000Q}_d-r2Q`Y^;{FKxkxl6ZqY4Xkc{%Ft9?=xr1UAJj^buOt>{$WEWYeW5- zVy<2B-zQv_-DUN}guQ3+&9#qQ?KEu{=*jW4$L(2mrsiDA|GBr4?(FK@e&VFB?30jv z_n6iM70uXkgQ+H<|25a9zuT9IZP_yE^30;JIdAgoGZ}xxe17g(T${&t-tzFXtIvU< cfdX2-F&jO-8r}HhkReFi)78&qol`;+0AqTXBLDyZ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00004.png deleted file mode 100644 index 04889b556e859d91e6593a0bead9fb4f3129bfe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jfba4!+nDh2Vw9p|19*4k^ zJDk7cgT6mvR~DY!uykp^#rK+09X6f`VRA1ePH(#Mdd_FZy=&w>C7bue{a?HJrilSe$uzxuHtjsL{8jUX|w9vr)hguT)cDaui&YZ1-EY;e7{gEY?82n;qSSuuj?{C z&$E;MpKkV)YwxO4yn)3Za_-)^@4NGcSg`J^Yq3`s-!a*~RP0wc=PYY>T{FkUnv)~< zRqmQ9f4;#alP|?o7t;ExIr4pn_?+OCA}*T0YOB~Er1Y<5 zH(2)7j!R)#f~v>HJ Bwn_j1 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00005.png deleted file mode 100644 index c5894b08c2f035d393960ca23b646f4f1d8ea84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|n9nxu1&tbwG!gMKnE1DE$(pD<>FAE-L zS&^lgdb&pM%FAsYFK6c(*ecc5)RtFgrAv8f*6q+^RJHeCYN*&hdBgg|^N92cF9O**q!b z?ye{C#*dX`KFQpe{%NgVnQBJZy`^h^pR=F6`~V{ZgHrrO;ThpZm%>+Ej(dKz|8Li} zvwsfuuk#7p_Hfz#y_dhKhgmdKI;Vst02U;&g#Z8m diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png deleted file mode 100644 index ac060763048ca5de77be02f164bd8027df762e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)DSPRFQ=;gH01G^LcT$_kLgp);`?`{Ozu)w>l(O#a2~HAWO}6f> zIi%MUkKYo*LDU$2rO~#bK?AClvJ%>Jw4@nR8`T3XQJqi&S|UBKQ++aTKlEmQ>z7j0 zhO31wm{ua4u=4WHC6*f13F}eE^DWSRt$b#{k+HAN%9S;GXsMCL8ybPlgCF)oYTary zbj;G1p9qG{s%OIb_-hH;)(1`l?QA|-QFhgxJ>W{~gO-QT6}gqOG>KYLvu-VxvExMD zEt1%|$O8ZX0HDXK{-GOmyS8*RnKLYA5mG;h*joWeJ;REeNe+JPR%Ycmmk!ND$T^y_ zl6uQd?bfrS1U<-vlI60N+n`w_Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl? z`Qe;&9Jz+x`eu~P7kfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahqLtWsSnQomp*9 zHAw{u+3Nvcg1~0b0RVu5ykt=@i(osuDkKCwM6!#nywPjW81PTx)cnRn7sv_Z6+exwdL#AMuAm9Sw|D6dAd;)sER?H5FEQ?n4(~{gu09~`-qp zsw(vy$xG>ggVG?Qh<}hya;~zc9rPtgP2E_DMTR!llxIIGwN2wWF*Re~RpRM#3Q4o| zA&bCSpamT!nugvB#y$W50000000000000000000000000002M+fAL@=tTZSh4gdfE M07*qoM6N<$f{*4-^8f$< diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00007.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00007.png deleted file mode 100644 index 364af7467f57ecc825c32581510428e33a9898a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2#G+(oVfJ0!; z9nRnJld4~`b1po5!r4`B?{jX^#1tKY-7~k#9DjKF+O6xqLJz-?aEP-AI&T(zsVH%4 z*)7%uX1kA0mD(%&arN_GpAuW2e(14yAI%}%lh5;7<=rW^f}fS4A3xMxnl7(?Pyga# z{pjrTY!_u$8FyOvq^!_tU_WYk@4QpylPK}6WJ;$8(bN*KAKONk27ipOu;<%@B zuX(;^MwiTtrnx;EaktG3V{fz@iofp0>>8 z<{$sLf6}WhXzO%vYDg&GegFHBtRJ17$5fZG0CgdQ=pUQ>=RdFH?R$K}etjXw;$Oba z1?%U$Zu=m-E@E+Iy!?HsBck6dpZOlBoEOES-}iXJ_RTh`y_-GECLA}Ny`*J9+|q&_ zV$-vZemTT`c4J_wb>;nImb2e9maN`zGQE3a$!d$d7ujsv+GDqN?!LYLj%c|pWB8%h zp~0`!PEFJ9U%M<``i6*OX51l}wxW$Kvh7#P54>9?yITLMm~eu|@@m1nYi&K-S*~)M zoZWKD!pr=fb7!Vh`;uz{AFs^c@`>+6;5pOddY4@VXJ5F^BX)JmtA}R-f+PRQoGW>= z`KMUVJ(NoFyc@rYZbz(7I=||y+MFpYHT)OKCe7Nrym#xNu6?%I?dPNI zPGq<)IGMfeb6NFNP7TNPm94Y(#qN6>x$@VcjqlRWSTD%%u-u)0w`}&2`?9ky$IoF! djwTS>ypFN($-kn=OXjaYTu)a&mvv4FO#or~`;Y(t diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00009.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_apdu_sign/test_sign_with_small_packet/00009.png deleted file mode 100644 index c3d91803266513c0381429a103e59db091faba59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_WJba4!+nDh3gqfoN~k3-;_ z3gP$lD(^0_21_wJ%CH>$nZHzmv3bGPZt0`d`sLemrLTRNTzg4r>dNf9Gs@rBUiV)8 z(jjWcGDqcNmER(_d22b^AGxLW@JvWQdbh%BTWRRqsndVGZd+Am&dio>|3$Olcgcz? z5r#(Dn{LfGXyOn$_1c|k#(=N?(+|vev-%l#`0TyY{Y?WcHp*N!< zLqqP)-OO7z$*aVC%1Ufq*!gvt1lQVpiQqrWPS)_&F57m9Fdk zXP=0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[ED25519]/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[ED25519]/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[ED25519]/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[ED25519]/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00001.png deleted file mode 100644 index 7009edb4d9b16d34114d9679f84e4145804c9298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?+bba4!+nDh2VCcpe(YHpSCjg z>hEctcELWOf!62V-mL28TG4u?X1h~Cd=d#LS z*rs_i-#(L6*lNGodV+k`8vc#bE-zF)CKsk|u6sJ7-eLE-=WUg2QBBLXeNCzTJZIm3 k>F*imdl`Y@jtx{a*e^1S30M&6G94uC>FVdQ&MBb@07{3;3IG5A diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png deleted file mode 100644 index 86f889eb1b5017362ba0edf43c6bd5a0e0677718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmV;-0yF)IP)WuSyfxE>uL|>Z8mFZLadg>R12Bv7yWR8_o z<9`CSd!Maw>7%aKs(+mqPdMe6g}>|{+vmXY{w(?55IY2O^2ZURE}vaUX9eAtesKYE ziT^}8twFsctxLFkZdrO;Skks%!rKoR000005R@oLMMfiqT z>0l-zDj2A+Zrxza8lz`oWEeEVj0<5M)HF4c2B%XNKUGdha58OwP=#i~P70cfUgdgE z2x+3&>vHQbEp%0?tJP_d+NJ!&5Q??~I;Dt*xkG$kTmBkSlzu&8Scz?PmLAd?t!f)D zM_anB7HQD*WG}ZYSate|C`&#Sl8{jGCV=7Fs{X5U=cJUTT{eAxTc~qyVNO8z=nR?? z=|hFjD#|`Q)0UxpBPO3&&=w!hlyk|i#|@Ok7*4^l%nH;Nn{mFPfjfZm{BQ@A z< zN=qC&$^@w2EvVy(C}^fn{NdNELRc9$PfeJg7-r@HehTi}!8jq6X9vByqPLJt#D=hb zQ&kowXij0#GH?3ERZ%8Do^jG&P9NGXhZ-Nuf?PUbUhXbD;SAuMXwwchgrQ(FGCT(W y000000000000000000000000000000Q}_d-r2Q`Y^;{FKxkxl6ZqY4Xkc{%Ft9?=xr1UAJj^buOt>{$WEWYeW5- zVy<2B-zQv_-DUN}guQ3+&9#qQ?KEu{=*jW4$L(2mrsiDA|GBr4?(FK@e&VFB?30jv z_n6iM70uXkgQ+H<|25a9zuT9IZP_yE^30;JIdAgoGZ}xxe17g(T${&t-tzFXtIvU< cfdX2-F&jO-8r}HhkReFi)78&qol`;+0AqTXBLDyZ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00004.png deleted file mode 100644 index 04889b556e859d91e6593a0bead9fb4f3129bfe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jfba4!+nDh2Vw9p|19*4k^ zJDk7cgT6mvR~DY!uykp^#rK+09X6f`VRA1ePH(#Mdd_FZy=&w>C7bue{a?HJrilSe$uzxuHtjsL{8jUX|w9vr)hguT)cDaui&YZ1-EY;e7{gEY?82n;qSSuuj?{C z&$E;MpKkV)YwxO4yn)3Za_-)^@4NGcSg`J^Yq3`s-!a*~RP0wc=PYY>T{FkUnv)~< zRqmQ9f4;#alP|?o7t;ExIr4pn_?+OCA}*T0YOB~Er1Y<5 zH(2)7j!R)#f~v>HJ Bwn_j1 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00005.png deleted file mode 100644 index c5894b08c2f035d393960ca23b646f4f1d8ea84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|n9nxu1&tbwG!gMKnE1DE$(pD<>FAE-L zS&^lgdb&pM%FAsYFK6c(*ecc5)RtFgrAv8f*6q+^RJHeCYN*&hdBgg|^N92cF9O**q!b z?ye{C#*dX`KFQpe{%NgVnQBJZy`^h^pR=F6`~V{ZgHrrO;ThpZm%>+Ej(dKz|8Li} zvwsfuuk#7p_Hfz#y_dhKhgmdKI;Vst02U;&g#Z8m diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png deleted file mode 100644 index ac060763048ca5de77be02f164bd8027df762e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)DSPRFQ=;gH01G^LcT$_kLgp);`?`{Ozu)w>l(O#a2~HAWO}6f> zIi%MUkKYo*LDU$2rO~#bK?AClvJ%>Jw4@nR8`T3XQJqi&S|UBKQ++aTKlEmQ>z7j0 zhO31wm{ua4u=4WHC6*f13F}eE^DWSRt$b#{k+HAN%9S;GXsMCL8ybPlgCF)oYTary zbj;G1p9qG{s%OIb_-hH;)(1`l?QA|-QFhgxJ>W{~gO-QT6}gqOG>KYLvu-VxvExMD zEt1%|$O8ZX0HDXK{-GOmyS8*RnKLYA5mG;h*joWeJ;REeNe+JPR%Ycmmk!ND$T^y_ zl6uQd?bfrS1U<-vlI60N+n`w_Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl? z`Qe;&9Jz+x`eu~P7kfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahqLtWsSnQomp*9 zHAw{u+3Nvcg1~0b0RVu5ykt=@i(osuDkKCwM6!#nywPjW81PTx)cnRn7sv_Z6+exwdL#AMuAm9Sw|D6dAd;)sER?H5FEQ?n4(~{gu09~`-qp zsw(vy$xG>ggVG?Qh<}hya;~zc9rPtgP2E_DMTR!llxIIGwN2wWF*Re~RpRM#3Q4o| zA&bCSpamT!nugvB#y$W50000000000000000000000000002M+fAL@=tTZSh4gdfE M07*qoM6N<$f{*4-^8f$< diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00007.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00007.png deleted file mode 100644 index 364af7467f57ecc825c32581510428e33a9898a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2#G+(oVfJ0!; z9nRnJld4~`b1po5!r4`B?{jX^#1tKY-7~k#9DjKF+O6xqLJz-?aEP-AI&T(zsVH%4 z*)7%uX1kA0mD(%&arN_GpAuW2e(14yAI%}%lh5;7<=rW^f}fS4A3xMxnl7(?Pyga# z{pjrTY!_u$8FyOvq^!_tU_WYk@4QpylPK}6WJ;$8(bN*KAKONk27ipOu;<%@B zuX(;^MwiTtrnx;EaktG3V{fz@iofp0>>8 z<{$sLf6}WhXzO%vYDg&GegFHBtRJ17$5fZG0CgdQ=pUQ>=RdFH?R$K}etjXw;$Oba z1?%U$Zu=m-E@E+Iy!?HsBck6dpZOlBoEOES-}iXJ_RTh`y_-GECLA}Ny`*J9+|q&_ zV$-vZemTT`c4J_wb>;nImb2e9maN`zGQE3a$!d$d7ujsv+GDqN?!LYLj%c|pWB8%h zp~0`!PEFJ9U%M<``i6*OX51l}wxW$Kvh7#P54>9?yITLMm~eu|@@m1nYi&K-S*~)M zoZWKD!pr=fb7!Vh`;uz{AFs^c@`>+6;5pOddY4@VXJ5F^BX)JmtA}R-f+PRQoGW>= z`KMUVJ(NoFyc@rYZbz(7I=||y+MFpYHT)OKCe7Nrym#xNu6?%I?dPNI zPGq<)IGMfeb6NFNP7TNPm94Y(#qN6>x$@VcjqlRWSTD%%u-u)0w`}&2`?9ky$IoF! djwTS>ypFN($-kn=OXjaYTu)a&mvv4FO#or~`;Y(t diff --git a/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00009.png b/tests/integration/nano/snapshots/nanosp/test_sign/test_key/test_sign_with_another_seed[seed21]/00009.png deleted file mode 100644 index c3d91803266513c0381429a103e59db091faba59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_WJba4!+nDh3gqfoN~k3-;_ z3gP$lD(^0_21_wJ%CH>$nZHzmv3bGPZt0`d`sLemrLTRNTzg4r>dNf9Gs@rBUiV)8 z(jjWcGDqcNmER(_d22b^AGxLW@JvWQdbh%BTWRRqsndVGZd+Am&dio>|3$Olcgcz? z5r#(Dn{LfGXyOn$_1c|k#(=N?(+|vev-%l#`0TyY{Y?WcHp*N!< zLqqP)-OO7z$*aVC%1Ufq*!gvt1lQVpiQqrWPS)_&F57m9Fdk zXP=0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6(BmW7Aa={+^mLq(%~;j zXFwP0q@k~pJp~Dmp+Q_`BL)DtuRx1%U03UhYOkNVQL-Hk{djla1mnS6%+Raq*s%l~ zF*RC?nBA|vu(wFC^P*D9`03FT&_=W^O|saIwei*7Z|{mQImR3WDnYe#wt^oFcP{mN zway1hz{WeVo=$v6-AWL;1f4j>Bh(+6t;4YrV2ilD=oaCmrcXhE_5q(0d1nx727FY& z=*t}vkiBr>-ll8s1s3Gy`Xwkh|Bcw{$HmpZAI6rp)#{Ebo@(*pKLg4i8IF3o(5yC7 z-Eo`D&W>#3rse;|ngOepRbzAHsBX+(gzd5O4Cn^zS&AW#g6_MX`hw^i!cBH00000006kYUwJ$oh`tuP`~Uy|07*qoM6N<$f~|np AVE_OC diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00001.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00001.png deleted file mode 100644 index 53efaa94ba2d1ff869d4c2f2a983da2d02dc7a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmV;~0w(>5P)3`I#-ZsPkN$#==ZRSK;MA%?cQ{@aCS5CQ@EPANCwJkRqy<3Bm|AID1;ZJrwq z_ccDXP$&2+D;>wN#hwPLxoR{V$8nWkme+OSB^$WxWW&8hz<%#Dhq7p3#;Ap?6RM*+ znzfZBtD(I@{71kC_dau0aPQ}OsOM;{=u%i5yx0#rO(CXVsz*g>Ieq_~SC9U71Z`de z8mm4EtU!$HQ>V@y&Yz;q?k7@doi)YYp6WemU8mNLzSSjsp9c;A0002gS5Oltf3Yrl zR!)D`FVVVlf|bW#JFK~HThIp83~NTzHuLy#vVrR-N4#wI=_k5US5ODFRMM_NgOwwl zICcD?xfoYm7hB1Tv{-IECYg1SPR%6g44`(46)Opp1yG~LiKF@_vab$Ff1b|SGM=`` zRZsg)xCM~ zF>=OT`);YPXX%EYm1xWeP{Y=`44b}SCyet9Eiup10y~B|##kke>Sx)|JL0~@{?yln zXVE@_!1I{?g$n@irR2r9i>CBurHhuz=8JK%Fe109&8=*IQ6x)i_&jaN``h9p!uLS8Zc(Q3tweZDid^SLw@pw2a%04LR@E8=pk;+<3f ziMGzH<+?^nERtGKE(INAa8TKta`G-ULe?BP`jZRr5%I+O?4=^_(%$HlJ*=Re2~U*O zrX0sX1!mF7Hl3Mrw7+E{@|kq5??hHV@l~hy{En}Y661-w{w=y-^3oZ^ncG(rxx?&s1omr zm&>QrXj^IrF}oT2-1(v!#>{oK`NB)@HEdTpvR_=hEIzTloN@WhNR7N-La*fmR_t(I zE+26ux{iS%@7a0%<#TUem|1wkeN}5|f8l2Bo%bVGJ9*nKJ~$;Pa!FYB{#EW7yAN8n z$9RSQ{`G_1$FKfN*zy-)N$j`dZ`RyCe|PEKcX7+->0RB;827x+H!-T5p{|Z?-JIY``d*9~$r#Y89{hQIW>-ojf(kpXsU7xdRm2&f9L2G5pxF`E!m{aoj zmz+$hFS;)u5*;jl@2_e4Ij8a+2Q8OKpIX(={V~p6zl{wR0ucJzC#FWZGihxf%=1A4 Mp00i_>zopr0BjMTR{#J2 diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00003.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00003.png deleted file mode 100644 index 3d36b194cfc82107a670d51fb067ff4ddac0c997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-&ba4!+nDh2#Bww=uk89xe zSAIACPuerRE`rO1nad;e&js6fSKq*_bc2IDKwTi9_3quf@B4gT@7={by>#&!iC+t* zH00iXF^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00001.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00001.png deleted file mode 100644 index 7009edb4d9b16d34114d9679f84e4145804c9298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?+bba4!+nDh2VCcpe(YHpSCjg z>hEctcELWOf!62V-mL28TG4u?X1h~Cd=d#LS z*rs_i-#(L6*lNGodV+k`8vc#bE-zF)CKsk|u6sJ7-eLE-=WUg2QBBLXeNCzTJZIm3 k>F*imdl`Y@jtx{a*e^1S30M&6G94uC>FVdQ&MBb@07{3;3IG5A diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png deleted file mode 100644 index c0ac1f93d74002f7a1d273a395f6dbbc2414fe62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMj0P)U%Ip_tK4)O1)xqvFd!X?|b>M{hBSF6d~S|n>j5Ms-N|j6}(@&$#W>)@kBg9qEodvqDyWyw|0GhcPAfXjc1=vdz z9AME9G#hs6Pw!;F^aL~4d>ed5w0mCzW8!5bHnM4wJ@Y0?Hxk%0>n~-wjHC(wMW8|%KH_MqO5E8DmR_6CCVY9=k&M;$q~Y~(?}(ql{-Y~3>L8;8)e$79SU zTx-?m=ndFE>zbwZZ0ngPc6Y}K%IxdO3Cc{b3v?SA^cQbyCz_Ek>m4E7EM5>xJf(py zt#@;Loz_$4K(sM}Bmi1{@s2lIP#V%+_tgRJD>c1QfHy+1%<=>o=CC@T??0Df9d8=> zu)S^^ItHm*CKqBIKcVQp_eUZywRJ|KdqAo~v@|aQyEj9zI_oSu)a7fc*UVOA=TGkt zclDRO$t+>Ssx<#1M#jPb5JCtcgb+dqA%qY@2qAs!oWk4;_Bk84 zt?m^}-h6HAHf65lTW>#z=zsQm$@2H%!L;i|Pd?my{wBvh$fn2po$Eop|4QXzrITWR z=2mn3f9Wo+;Q7=4{uTz^<<)(gKc&?FTE_aI_~BE}9rre`=G2|N{oz+WU_c;)1EzNv XU7w!SY@Q^Y3KI8p^>bP0l+XkKqjQme diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00004.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00004.png deleted file mode 100644 index 908600200d45a13b6992c9edeaa2393b0861e45e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2#>^dezp0-4j zcP)SQGrv7zop@z^!{@^dD({O;3pZS0lC^y<_-c8seF_?~)R`1e_fGkV^^&kc_nKe2Ci;Xa$I%_*{c^5!6)e{)29 zm26b^_g($2+GqGHEFoLHbjrtX)ApXY*wuVn^43v}zKkE#FzsNY5Gxh(T zJCBYVE0jbr-{!qkvu!oY_1(2BlJPz7}7ba4!+nDh2#WZq!~0fqqc zSH3&`Pu$^czb5F+j<`i!9>4B|Gi{q;kW)4-mCy3|oX;;b*eZ@J`X?J0_2$}_2{rGx z-B43_J}2mv(D_c&JC}lgM%Nz9JGtrY{fg??tH!*VOK;p!V|1?C-?{ST1=D#FH>x66 z+U73Wx3|Vmv-ICyLw0*k3F~k9UtQmP6u)IZOU9;d^@}(Ea}J$#xUb{*w>V(d>huGd zJca9gHs#OlI_9=|IW%HQ%7&hq0FJ`tVdO9K4UibR+ zqfY7*s`>6+h+VlW!tT!V7Yy?P<-+v%Ud`lxV7-3v%a?zJ4L*OEe{235#>;wtkN!T- sFmLZiCj<5gNZww3@WY7@)m33$Tdz-E&D^x(@p00i_>zopr0On_&DgXcg diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png deleted file mode 100644 index ac060763048ca5de77be02f164bd8027df762e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)DSPRFQ=;gH01G^LcT$_kLgp);`?`{Ozu)w>l(O#a2~HAWO}6f> zIi%MUkKYo*LDU$2rO~#bK?AClvJ%>Jw4@nR8`T3XQJqi&S|UBKQ++aTKlEmQ>z7j0 zhO31wm{ua4u=4WHC6*f13F}eE^DWSRt$b#{k+HAN%9S;GXsMCL8ybPlgCF)oYTary zbj;G1p9qG{s%OIb_-hH;)(1`l?QA|-QFhgxJ>W{~gO-QT6}gqOG>KYLvu-VxvExMD zEt1%|$O8ZX0HDXK{-GOmyS8*RnKLYA5mG;h*joWeJ;REeNe+JPR%Ycmmk!ND$T^y_ zl6uQd?bfrS1U<-vlI60N+n`w_Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl? z`Qe;&9Jz+x`eu~P7kfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahqLtWsSnQomp*9 zHAw{u+3Nvcg1~0b0RVu5ykt=@i(osuDkKCwM6!#nywPjW81PTx)cnRn7sv_Z6+exwdL#AMuAm9Sw|D6dAd;)sER?H5FEQ?n4(~{gu09~`-qp zsw(vy$xG>ggVG?Qh<}hya;~zc9rPtgP2E_DMTR!llxIIGwN2wWF*Re~RpRM#3Q4o| zA&bCSpamT!nugvB#y$W50000000000000000000000000002M+fAL@=tTZSh4gdfE M07*qoM6N<$f{*4-^8f$< diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png deleted file mode 100644 index 2b33e84bd934985581cc1e8b3a0342a628c6b7be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`huba4!+nDh2VG+&DXk3-;` zGk!PzPr7ruW`@ABwGI3&v#R&iD1jy* z_7tuc-X2`6D!9B=&`RV$?-z;s?@lkD#0b03H`@JsruZ7K`CrR^37WIHUd?Kg+v9Pj zdB5t3qY^D`KF4Al(j@krk`wsV?`V45!~0vO!5Q5z8TTqx8?q{_cxJMm^;b80SfPL3 zxsEZe;!XDC&5Q*bT^SkJK5vS)@Nhm`?|9J5xpd}-MKzfcA3yuahwGm^6Djq}j^{uE r5ZReMJXE*4{GtvUFnq9q2etDnm{r-UW|7_yO_ diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00008.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00008.png deleted file mode 100644 index 1fcdee14dce21c819b5e211dbbdf546034789b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@XV>EaktG3V{fz@iofp0>>8 z<{$sLf6}WhXzO%vYDg&GegFHBtRJ17$5fZG0CgdQ=pUQ>=RdFH?R$K}etjXw;$Oba z1?%U$Zu=m-E@E+Iy!?HsBck6dpZOlBoEOES-}iXJ_RTh`y_-GECLA}Ny`*J9+|q&_ zV$-vZemTT`c4J_wb>;nImb2e9maN`zGQE3a$!d$d7ujsv+GDqN?!LYLj%c|pWB8%h zp~0`!PEFJ9U%M<``i6*OX51l}wxW$Kvh7#P54>9?yITLMm~eu|@@m1nYi&K-S*~)M zoZWKD!pr=fb7!Vh`;uz{AFs^c@`>+6;5pOddY4@VXJ5F^BX)JmtA}R-f+PRQoGW>= z`KMUVJ(NoFyc@rYZbz(7I=||y+MFpYHT)OKCe7Nrym#xNu6?%I?dPNI zPGq<)IGMfeb6NFNP7TNPm94Y(#qN6>x$@VcjqlRWSTD%%u-u)0w`}&2`?9ky$IoF! djwTS>ypFN($-kn=OXjaYTu)a&mvv4FO#or~`;Y(t diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00009.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00009.png deleted file mode 100644 index 431986c71c6e730392aef05dda8241072bc257cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmV?P)eChM& zT5kXui5bbY6GICs@~sPc-XJGpv+jw`7!YL7LB6iL9ntIr2JVH%=e(sD!;1V6>o|_% zIF1an(}{L4Yz@v;idmKyYvZZWmZ@|Nuotw+)HI7Pn6S0w1^FPvCm>O?&(KC_=AhtE zuTi^pOsSEZ)DWOa(O_wG7vug{x5wyyUQRs~wgA~3&|T&!njD*{Sy!-y2QqwQ?^mAX z)ZG37*$MazBTpWdK{!+fH>NX$jCAtU#Re_H_fTnkls@h*Bpw6!j$h0){shjQ@Hmch zI!wM83X?bHiURf#U5FJKoZF$7s|aU=x&pY?0fE_)8~K%70N+bKCB80LO7;&@#nPUU`RZA47xif++@3ap?A;SqG@Rt#*VMHCRnC)E5=~dNDDZNSkpP zQ*%T`F`8q5x+@3K5@To(9tT-5rk$A{TwRd5D`!@W9HvY$Q(_=Tc0tY@rY<^DVjRcW zr?#FHHpNgR+|Dgy2ZBKuxnqZ#Vr}?jFj^5tOfdl&`m`OcZWy6Mr!Hd_GCMlH|8H>T z(l9bdl$2p^A!fv(6O&=?1biE0gYZcI!)l6MmA`lumSG(urkD{K!MmXEMg7uC7?I(q Z@dpUnXY~1da}EFi002ovPDHLkV1h-hOUVEL diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00010.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00010.png deleted file mode 100644 index 1acb7d563ed662112c5ae28ad4e37237518f8ce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMj0P)7fXO&+E0)o#+bi7jzg?!%lwpwKugi0 z*zPe#)=R?(C=Y(iAjvk$HKlq_4d+Mc1u`ZN$j?e|(<#;3L9vvV`X>Vvd+7nft$%7d z3D@QTP1B0WTP-g(wO|(5E0Ob}kb5o$>l1h*;PD8;aD)M57l=W&U=|Fh{>|1h7N-Wa1w}xR=wq{GD0cHjky-mV*p7x7VZR< zlDDjc&0=VCt{ZduSlFs2ti)50Q$xK6BDKsPx# diff --git a/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png b/tests/integration/nano/snapshots/nanosp/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png deleted file mode 100644 index eb05139023bd5b5ba9e8ce624586023cf3f8fa75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmVZ427MZ*@^pKl6&ccr!)qLKz{Y)d+I0ymnZ?QPCuI!$8o@q`@Wks9hsl{5Q>y6 zj&VPZL$zxo0_ua`x{zgzpr+F9so^|T{unF+3&3xckL4@P)={;RUHy}Rs=bT=C4zMUR8?KGb^<{4|BnEh=%eO|-Zt;$sV0ao(q&ZRfX2bMcS5iE z@^>#AKt{@pw8beS3kvcj1=R!OiNuWi$;}+F*Sk!BfH?5Efy zNs=TVJ8VbBbR)ZQu$P|<;;lAQZlH|FJdt}>n;&rj- zRG(S;Ou~-KxM(X##eIOFM@AplZaUgEqY(GV=rY>&+^se~!Xu!`Yc@?97|j8WCY`%K zNRvBZXXI0mo<~+=X3sqajo#j_-1V9^z+w_!2EN3Z43P_-BuR|1d0TC}&bOAXT=`fa zWX$3)2?v=}$7QHK1lD~su6c0HiGz5#a#Jz};a-5F^DbXGPXE~Pwhx12Tw8`7>M4l- zwwg#)Qj1jat%-#f6vPe_ks;oZG~=A%rl25pn5vBEKc5a_hXs)_OQxU~5#-hjA|pwX z0Y2h2&N?S_dARXGxn=MCYbzT8QX2yQCt_1Q(b&-W3Q)WN2BugLS1u6luc~PaK#v6Y zSf?PSbbb~VGzUd+dmytG2$BAC1c;M6VP}L#fV(%REudLpEZj{ocL7sm3VJW@H=w(K b;dMMiFrGe@|(uf*KJC?N87m##nxQzu#)2J@Z@NA|oY> z;kd^bw{~qrf%@jFE~Gg|rA}FH(jk47F9yq$1PHRI?AHoV9{r?K zB76@A8Jb?1a@5LZ^9a@jNKK+~6)K0{rKh~HSLu?~#|*>cNEBWF564^Pus6q^8E>0UsM+$_U8b+hXyEHyP; z&V8&Cdf(H!&Z&P3mHvvH2AS<7*7D$Xo5(5ySbsQEdS1NO=g5c{p!tF!&tpj?<0jI`o=lec%W<2^%A}0{A2{@!YpiBo>kl yQ#|eNjGfs}e9>0)U3QtEh<^z5!&wdwcou(u^iLm&WE+710000?P)-?y3TmHEz3fk??R zG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP!gY>TWGu~444vLj*>R&ZLv9A$e9Q~(G z57#>!AT*dw8nv|87{S~C6qT2(od7`j|0BRA`oKNW+Tyd^<$}18wo#1(7zaPt1wHri z7|RAJEjBH_I5x6?Aiq*jK0tP4&A2~Q=77t#58`uOO+>v5nDj0%KgTmg8&&M5SjTZ3 z$8l5{-Y5|UMH^X1A%W>=GP2br_NYp6ncD$SjN^c*X5eJ1;Q-@J9nAz&(1^#Xs?}7} zf|Mir_I5`cBu7Azfy9kzoU)FFk#$sfAtO$dd{=WctPKdZ$f5%r0&WTdB6e}Q>($YU zFQmjB(G@UoB!kqE+K++ivk z-%%AUEvQ&gY*Ul|1Roz>NPre`#7A9>OBwsVs@IwkFDUNO>xosmyMi^ID>02F3NAhA^^_hytA0oFIK`gP; zGuSa!2-cldxnIgr@v7iBGZo`72HIo!^<1x)E@U=hPs8Fn zs;fQi9o)wI01-KCr?vKK2+CnZ3Mv|iXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^ z%=}4snEU0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6#&!iC+t* zH00iXF^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00001.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00002.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_micheline_without_hash/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00001.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00001.png deleted file mode 100644 index 7009edb4d9b16d34114d9679f84e4145804c9298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?+bba4!+nDh2VCcpe(YHpSCjg z>hEctcELWOf!62V-mL28TG4u?X1h~Cd=d#LS z*rs_i-#(L6*lNGodV+k`8vc#bE-zF)CKsk|u6sJ7-eLE-=WUg2QBBLXeNCzTJZIm3 k>F*imdl`Y@jtx{a*e^1S30M&6G94uC>FVdQ&MBb@07{3;3IG5A diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00002.png deleted file mode 100644 index 86f889eb1b5017362ba0edf43c6bd5a0e0677718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmV;-0yF)IP)WuSyfxE>uL|>Z8mFZLadg>R12Bv7yWR8_o z<9`CSd!Maw>7%aKs(+mqPdMe6g}>|{+vmXY{w(?55IY2O^2ZURE}vaUX9eAtesKYE ziT^}8twFsctxLFkZdrO;Skks%!rKoR000005R@oLMMfiqT z>0l-zDj2A+Zrxza8lz`oWEeEVj0<5M)HF4c2B%XNKUGdha58OwP=#i~P70cfUgdgE z2x+3&>vHQbEp%0?tJP_d+NJ!&5Q??~I;Dt*xkG$kTmBkSlzu&8Scz?PmLAd?t!f)D zM_anB7HQD*WG}ZYSate|C`&#Sl8{jGCV=7Fs{X5U=cJUTT{eAxTc~qyVNO8z=nR?? z=|hFjD#|`Q)0UxpBPO3&&=w!hlyk|i#|@Ok7*4^l%nH;Nn{mFPfjfZm{BQ@A z< zN=qC&$^@w2EvVy(C}^fn{NdNELRc9$PfeJg7-r@HehTi}!8jq6X9vByqPLJt#D=hb zQ&kowXij0#GH?3ERZ%8Do^jG&P9NGXhZ-Nuf?PUbUhXbD;SAuMXwwchgrQ(FGCT(W y000000000000000000000000000000Q}_d-r2Q`Y^;{FKxkxl6ZqY4Xkc{%Ft9?=xr1UAJj^buOt>{$WEWYeW5- zVy<2B-zQv_-DUN}guQ3+&9#qQ?KEu{=*jW4$L(2mrsiDA|GBr4?(FK@e&VFB?30jv z_n6iM70uXkgQ+H<|25a9zuT9IZP_yE^30;JIdAgoGZ}xxe17g(T${&t-tzFXtIvU< cfdX2-F&jO-8r}HhkReFi)78&qol`;+0AqTXBLDyZ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00004.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00004.png deleted file mode 100644 index 04889b556e859d91e6593a0bead9fb4f3129bfe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jfba4!+nDh2Vw9p|19*4k^ zJDk7cgT6mvR~DY!uykp^#rK+09X6f`VRA1ePH(#Mdd_FZy=&w>C7bue{a?HJrilSe$uzxuHtjsL{8jUX|w9vr)hguT)cDaui&YZ1-EY;e7{gEY?82n;qSSuuj?{C z&$E;MpKkV)YwxO4yn)3Za_-)^@4NGcSg`J^Yq3`s-!a*~RP0wc=PYY>T{FkUnv)~< zRqmQ9f4;#alP|?o7t;ExIr4pn_?+OCA}*T0YOB~Er1Y<5 zH(2)7j!R)#f~v>HJ Bwn_j1 diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00005.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00005.png deleted file mode 100644 index c5894b08c2f035d393960ca23b646f4f1d8ea84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|n9nxu1&tbwG!gMKnE1DE$(pD<>FAE-L zS&^lgdb&pM%FAsYFK6c(*ecc5)RtFgrAv8f*6q+^RJHeCYN*&hdBgg|^N92cF9O**q!b z?ye{C#*dX`KFQpe{%NgVnQBJZy`^h^pR=F6`~V{ZgHrrO;ThpZm%>+Ej(dKz|8Li} zvwsfuuk#7p_Hfz#y_dhKhgmdKI;Vst02U;&g#Z8m diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00006.png deleted file mode 100644 index ac060763048ca5de77be02f164bd8027df762e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)DSPRFQ=;gH01G^LcT$_kLgp);`?`{Ozu)w>l(O#a2~HAWO}6f> zIi%MUkKYo*LDU$2rO~#bK?AClvJ%>Jw4@nR8`T3XQJqi&S|UBKQ++aTKlEmQ>z7j0 zhO31wm{ua4u=4WHC6*f13F}eE^DWSRt$b#{k+HAN%9S;GXsMCL8ybPlgCF)oYTary zbj;G1p9qG{s%OIb_-hH;)(1`l?QA|-QFhgxJ>W{~gO-QT6}gqOG>KYLvu-VxvExMD zEt1%|$O8ZX0HDXK{-GOmyS8*RnKLYA5mG;h*joWeJ;REeNe+JPR%Ycmmk!ND$T^y_ zl6uQd?bfrS1U<-vlI60N+n`w_Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl? z`Qe;&9Jz+x`eu~P7kfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahqLtWsSnQomp*9 zHAw{u+3Nvcg1~0b0RVu5ykt=@i(osuDkKCwM6!#nywPjW81PTx)cnRn7sv_Z6+exwdL#AMuAm9Sw|D6dAd;)sER?H5FEQ?n4(~{gu09~`-qp zsw(vy$xG>ggVG?Qh<}hya;~zc9rPtgP2E_DMTR!llxIIGwN2wWF*Re~RpRM#3Q4o| zA&bCSpamT!nugvB#y$W50000000000000000000000000002M+fAL@=tTZSh4gdfE M07*qoM6N<$f{*4-^8f$< diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00007.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00007.png deleted file mode 100644 index 364af7467f57ecc825c32581510428e33a9898a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2#G+(oVfJ0!; z9nRnJld4~`b1po5!r4`B?{jX^#1tKY-7~k#9DjKF+O6xqLJz-?aEP-AI&T(zsVH%4 z*)7%uX1kA0mD(%&arN_GpAuW2e(14yAI%}%lh5;7<=rW^f}fS4A3xMxnl7(?Pyga# z{pjrTY!_u$8FyOvq^!_tU_WYk@4QpylPK}6WJ;$8(bN*KAKONk27ipOu;<%@B zuX(;^MwiTtrnx;EaktG3V{fz@iofp0>>8 z<{$sLf6}WhXzO%vYDg&GegFHBtRJ17$5fZG0CgdQ=pUQ>=RdFH?R$K}etjXw;$Oba z1?%U$Zu=m-E@E+Iy!?HsBck6dpZOlBoEOES-}iXJ_RTh`y_-GECLA}Ny`*J9+|q&_ zV$-vZemTT`c4J_wb>;nImb2e9maN`zGQE3a$!d$d7ujsv+GDqN?!LYLj%c|pWB8%h zp~0`!PEFJ9U%M<``i6*OX51l}wxW$Kvh7#P54>9?yITLMm~eu|@@m1nYi&K-S*~)M zoZWKD!pr=fb7!Vh`;uz{AFs^c@`>+6;5pOddY4@VXJ5F^BX)JmtA}R-f+PRQoGW>= z`KMUVJ(NoFyc@rYZbz(7I=||y+MFpYHT)OKCe7Nrym#xNu6?%I?dPNI zPGq<)IGMfeb6NFNP7TNPm94Y(#qN6>x$@VcjqlRWSTD%%u-u)0w`}&2`?9ky$IoF! djwTS>ypFN($-kn=OXjaYTu)a&mvv4FO#or~`;Y(t diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00009.png b/tests/integration/nano/snapshots/nanox/test_sign/test_apdu_sign/test_sign_with_small_packet/00009.png deleted file mode 100644 index c3d91803266513c0381429a103e59db091faba59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_WJba4!+nDh3gqfoN~k3-;_ z3gP$lD(^0_21_wJ%CH>$nZHzmv3bGPZt0`d`sLemrLTRNTzg4r>dNf9Gs@rBUiV)8 z(jjWcGDqcNmER(_d22b^AGxLW@JvWQdbh%BTWRRqsndVGZd+Am&dio>|3$Olcgcz? z5r#(Dn{LfGXyOn$_1c|k#(=N?(+|vev-%l#`0TyY{Y?WcHp*N!< zLqqP)-OO7z$*aVC%1Ufq*!gvt1lQVpiQqrWPS)_&F57m9Fdk zXP=0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00001.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00002.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[BIP32_ED25519]/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[ED25519]/00001.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[ED25519]/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[ED25519]/00002.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[ED25519]/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00001.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00002.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256K1]/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00001.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00001.png deleted file mode 100644 index b0dbfe2af65cb079f3339a2353ecd72275f240b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^E*ba4!+nDcg4^tNUN9@pIK zb2&fDPb%IiUv_bZ_{C2_=l^Xobnr27c$59|(5`hqt(IO%54hSExLCfyYIV|l-CcXd zR(&O9r-dG(L+ znm_RVf9uJIcKJMDgf;NLmeWcX51Oa#H+lKjoAxIz)Z1GuwOw9meEF3@HAB~m#+?@& z-+yA3Ld*%x*24oHEgtDnm{r-UW|U9ko_ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00002.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_micheline_basic[SECP256R1]/00002.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00001.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00001.png deleted file mode 100644 index 7009edb4d9b16d34114d9679f84e4145804c9298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?+bba4!+nDh2VCcpe(YHpSCjg z>hEctcELWOf!62V-mL28TG4u?X1h~Cd=d#LS z*rs_i-#(L6*lNGodV+k`8vc#bE-zF)CKsk|u6sJ7-eLE-=WUg2QBBLXeNCzTJZIm3 k>F*imdl`Y@jtx{a*e^1S30M&6G94uC>FVdQ&MBb@07{3;3IG5A diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00002.png deleted file mode 100644 index 86f889eb1b5017362ba0edf43c6bd5a0e0677718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmV;-0yF)IP)WuSyfxE>uL|>Z8mFZLadg>R12Bv7yWR8_o z<9`CSd!Maw>7%aKs(+mqPdMe6g}>|{+vmXY{w(?55IY2O^2ZURE}vaUX9eAtesKYE ziT^}8twFsctxLFkZdrO;Skks%!rKoR000005R@oLMMfiqT z>0l-zDj2A+Zrxza8lz`oWEeEVj0<5M)HF4c2B%XNKUGdha58OwP=#i~P70cfUgdgE z2x+3&>vHQbEp%0?tJP_d+NJ!&5Q??~I;Dt*xkG$kTmBkSlzu&8Scz?PmLAd?t!f)D zM_anB7HQD*WG}ZYSate|C`&#Sl8{jGCV=7Fs{X5U=cJUTT{eAxTc~qyVNO8z=nR?? z=|hFjD#|`Q)0UxpBPO3&&=w!hlyk|i#|@Ok7*4^l%nH;Nn{mFPfjfZm{BQ@A z< zN=qC&$^@w2EvVy(C}^fn{NdNELRc9$PfeJg7-r@HehTi}!8jq6X9vByqPLJt#D=hb zQ&kowXij0#GH?3ERZ%8Do^jG&P9NGXhZ-Nuf?PUbUhXbD;SAuMXwwchgrQ(FGCT(W y000000000000000000000000000000Q}_d-r2Q`Y^;{FKxkxl6ZqY4Xkc{%Ft9?=xr1UAJj^buOt>{$WEWYeW5- zVy<2B-zQv_-DUN}guQ3+&9#qQ?KEu{=*jW4$L(2mrsiDA|GBr4?(FK@e&VFB?30jv z_n6iM70uXkgQ+H<|25a9zuT9IZP_yE^30;JIdAgoGZ}xxe17g(T${&t-tzFXtIvU< cfdX2-F&jO-8r}HhkReFi)78&qol`;+0AqTXBLDyZ diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00004.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00004.png deleted file mode 100644 index 04889b556e859d91e6593a0bead9fb4f3129bfe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jfba4!+nDh2Vw9p|19*4k^ zJDk7cgT6mvR~DY!uykp^#rK+09X6f`VRA1ePH(#Mdd_FZy=&w>C7bue{a?HJrilSe$uzxuHtjsL{8jUX|w9vr)hguT)cDaui&YZ1-EY;e7{gEY?82n;qSSuuj?{C z&$E;MpKkV)YwxO4yn)3Za_-)^@4NGcSg`J^Yq3`s-!a*~RP0wc=PYY>T{FkUnv)~< zRqmQ9f4;#alP|?o7t;ExIr4pn_?+OCA}*T0YOB~Er1Y<5 zH(2)7j!R)#f~v>HJ Bwn_j1 diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00005.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00005.png deleted file mode 100644 index c5894b08c2f035d393960ca23b646f4f1d8ea84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|n9nxu1&tbwG!gMKnE1DE$(pD<>FAE-L zS&^lgdb&pM%FAsYFK6c(*ecc5)RtFgrAv8f*6q+^RJHeCYN*&hdBgg|^N92cF9O**q!b z?ye{C#*dX`KFQpe{%NgVnQBJZy`^h^pR=F6`~V{ZgHrrO;ThpZm%>+Ej(dKz|8Li} zvwsfuuk#7p_Hfz#y_dhKhgmdKI;Vst02U;&g#Z8m diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00006.png deleted file mode 100644 index ac060763048ca5de77be02f164bd8027df762e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)DSPRFQ=;gH01G^LcT$_kLgp);`?`{Ozu)w>l(O#a2~HAWO}6f> zIi%MUkKYo*LDU$2rO~#bK?AClvJ%>Jw4@nR8`T3XQJqi&S|UBKQ++aTKlEmQ>z7j0 zhO31wm{ua4u=4WHC6*f13F}eE^DWSRt$b#{k+HAN%9S;GXsMCL8ybPlgCF)oYTary zbj;G1p9qG{s%OIb_-hH;)(1`l?QA|-QFhgxJ>W{~gO-QT6}gqOG>KYLvu-VxvExMD zEt1%|$O8ZX0HDXK{-GOmyS8*RnKLYA5mG;h*joWeJ;REeNe+JPR%Ycmmk!ND$T^y_ zl6uQd?bfrS1U<-vlI60N+n`w_Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl? z`Qe;&9Jz+x`eu~P7kfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahqLtWsSnQomp*9 zHAw{u+3Nvcg1~0b0RVu5ykt=@i(osuDkKCwM6!#nywPjW81PTx)cnRn7sv_Z6+exwdL#AMuAm9Sw|D6dAd;)sER?H5FEQ?n4(~{gu09~`-qp zsw(vy$xG>ggVG?Qh<}hya;~zc9rPtgP2E_DMTR!llxIIGwN2wWF*Re~RpRM#3Q4o| zA&bCSpamT!nugvB#y$W50000000000000000000000000002M+fAL@=tTZSh4gdfE M07*qoM6N<$f{*4-^8f$< diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00007.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00007.png deleted file mode 100644 index 364af7467f57ecc825c32581510428e33a9898a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2#G+(oVfJ0!; z9nRnJld4~`b1po5!r4`B?{jX^#1tKY-7~k#9DjKF+O6xqLJz-?aEP-AI&T(zsVH%4 z*)7%uX1kA0mD(%&arN_GpAuW2e(14yAI%}%lh5;7<=rW^f}fS4A3xMxnl7(?Pyga# z{pjrTY!_u$8FyOvq^!_tU_WYk@4QpylPK}6WJ;$8(bN*KAKONk27ipOu;<%@B zuX(;^MwiTtrnx;EaktG3V{fz@iofp0>>8 z<{$sLf6}WhXzO%vYDg&GegFHBtRJ17$5fZG0CgdQ=pUQ>=RdFH?R$K}etjXw;$Oba z1?%U$Zu=m-E@E+Iy!?HsBck6dpZOlBoEOES-}iXJ_RTh`y_-GECLA}Ny`*J9+|q&_ zV$-vZemTT`c4J_wb>;nImb2e9maN`zGQE3a$!d$d7ujsv+GDqN?!LYLj%c|pWB8%h zp~0`!PEFJ9U%M<``i6*OX51l}wxW$Kvh7#P54>9?yITLMm~eu|@@m1nYi&K-S*~)M zoZWKD!pr=fb7!Vh`;uz{AFs^c@`>+6;5pOddY4@VXJ5F^BX)JmtA}R-f+PRQoGW>= z`KMUVJ(NoFyc@rYZbz(7I=||y+MFpYHT)OKCe7Nrym#xNu6?%I?dPNI zPGq<)IGMfeb6NFNP7TNPm94Y(#qN6>x$@VcjqlRWSTD%%u-u)0w`}&2`?9ky$IoF! djwTS>ypFN($-kn=OXjaYTu)a&mvv4FO#or~`;Y(t diff --git a/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00009.png b/tests/integration/nano/snapshots/nanox/test_sign/test_key/test_sign_with_another_seed[seed21]/00009.png deleted file mode 100644 index c3d91803266513c0381429a103e59db091faba59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_WJba4!+nDh3gqfoN~k3-;_ z3gP$lD(^0_21_wJ%CH>$nZHzmv3bGPZt0`d`sLemrLTRNTzg4r>dNf9Gs@rBUiV)8 z(jjWcGDqcNmER(_d22b^AGxLW@JvWQdbh%BTWRRqsndVGZd+Am&dio>|3$Olcgcz? z5r#(Dn{LfGXyOn$_1c|k#(=N?(+|vev-%l#`0TyY{Y?WcHp*N!< zLqqP)-OO7z$*aVC%1Ufq*!gvt1lQVpiQqrWPS)_&F57m9Fdk zXP=0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6(BmW7Aa={+^mLq(%~;j zXFwP0q@k~pJp~Dmp+Q_`BL)DtuRx1%U03UhYOkNVQL-Hk{djla1mnS6%+Raq*s%l~ zF*RC?nBA|vu(wFC^P*D9`03FT&_=W^O|saIwei*7Z|{mQImR3WDnYe#wt^oFcP{mN zway1hz{WeVo=$v6-AWL;1f4j>Bh(+6t;4YrV2ilD=oaCmrcXhE_5q(0d1nx727FY& z=*t}vkiBr>-ll8s1s3Gy`Xwkh|Bcw{$HmpZAI6rp)#{Ebo@(*pKLg4i8IF3o(5yC7 z-Eo`D&W>#3rse;|ngOepRbzAHsBX+(gzd5O4Cn^zS&AW#g6_MX`hw^i!cBH00000006kYUwJ$oh`tuP`~Uy|07*qoM6N<$f~|np AVE_OC diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00001.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00001.png deleted file mode 100644 index 53efaa94ba2d1ff869d4c2f2a983da2d02dc7a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmV;~0w(>5P)3`I#-ZsPkN$#==ZRSK;MA%?cQ{@aCS5CQ@EPANCwJkRqy<3Bm|AID1;ZJrwq z_ccDXP$&2+D;>wN#hwPLxoR{V$8nWkme+OSB^$WxWW&8hz<%#Dhq7p3#;Ap?6RM*+ znzfZBtD(I@{71kC_dau0aPQ}OsOM;{=u%i5yx0#rO(CXVsz*g>Ieq_~SC9U71Z`de z8mm4EtU!$HQ>V@y&Yz;q?k7@doi)YYp6WemU8mNLzSSjsp9c;A0002gS5Oltf3Yrl zR!)D`FVVVlf|bW#JFK~HThIp83~NTzHuLy#vVrR-N4#wI=_k5US5ODFRMM_NgOwwl zICcD?xfoYm7hB1Tv{-IECYg1SPR%6g44`(46)Opp1yG~LiKF@_vab$Ff1b|SGM=`` zRZsg)xCM~ zF>=OT`);YPXX%EYm1xWeP{Y=`44b}SCyet9Eiup10y~B|##kke>Sx)|JL0~@{?yln zXVE@_!1I{?g$n@irR2r9i>CBurHhuz=8JK%Fe109&8=*IQ6x)i_&jaN``h9p!uLS8Zc(Q3tweZDid^SLw@pw2a%04LR@E8=pk;+<3f ziMGzH<+?^nERtGKE(INAa8TKta`G-ULe?BP`jZRr5%I+O?4=^_(%$HlJ*=Re2~U*O zrX0sX1!mF7Hl3Mrw7+E{@|kq5??hHV@l~hy{En}Y661-w{w=y-^3oZ^ncG(rxx?&s1omr zm&>QrXj^IrF}oT2-1(v!#>{oK`NB)@HEdTpvR_=hEIzTloN@WhNR7N-La*fmR_t(I zE+26ux{iS%@7a0%<#TUem|1wkeN}5|f8l2Bo%bVGJ9*nKJ~$;Pa!FYB{#EW7yAN8n z$9RSQ{`G_1$FKfN*zy-)N$j`dZ`RyCe|PEKcX7+->0RB;827x+H!-T5p{|Z?-JIY``d*9~$r#Y89{hQIW>-ojf(kpXsU7xdRm2&f9L2G5pxF`E!m{aoj zmz+$hFS;)u5*;jl@2_e4Ij8a+2Q8OKpIX(={V~p6zl{wR0ucJzC#FWZGihxf%=1A4 Mp00i_>zopr0BjMTR{#J2 diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00003.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_public_key/00003.png deleted file mode 100644 index 3d36b194cfc82107a670d51fb067ff4ddac0c997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-&ba4!+nDh2#Bww=uk89xe zSAIACPuerRE`rO1nad;e&js6fSKq*_bc2IDKwTi9_3quf@B4gT@7={by>#&!iC+t* zH00iXF^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00001.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00001.png deleted file mode 100644 index 7009edb4d9b16d34114d9679f84e4145804c9298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?+bba4!+nDh2VCcpe(YHpSCjg z>hEctcELWOf!62V-mL28TG4u?X1h~Cd=d#LS z*rs_i-#(L6*lNGodV+k`8vc#bE-zF)CKsk|u6sJ7-eLE-=WUg2QBBLXeNCzTJZIm3 k>F*imdl`Y@jtx{a*e^1S30M&6G94uC>FVdQ&MBb@07{3;3IG5A diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00002.png deleted file mode 100644 index c0ac1f93d74002f7a1d273a395f6dbbc2414fe62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMj0P)U%Ip_tK4)O1)xqvFd!X?|b>M{hBSF6d~S|n>j5Ms-N|j6}(@&$#W>)@kBg9qEodvqDyWyw|0GhcPAfXjc1=vdz z9AME9G#hs6Pw!;F^aL~4d>ed5w0mCzW8!5bHnM4wJ@Y0?Hxk%0>n~-wjHC(wMW8|%KH_MqO5E8DmR_6CCVY9=k&M;$q~Y~(?}(ql{-Y~3>L8;8)e$79SU zTx-?m=ndFE>zbwZZ0ngPc6Y}K%IxdO3Cc{b3v?SA^cQbyCz_Ek>m4E7EM5>xJf(py zt#@;Loz_$4K(sM}Bmi1{@s2lIP#V%+_tgRJD>c1QfHy+1%<=>o=CC@T??0Df9d8=> zu)S^^ItHm*CKqBIKcVQp_eUZywRJ|KdqAo~v@|aQyEj9zI_oSu)a7fc*UVOA=TGkt zclDRO$t+>Ssx<#1M#jPb5JCtcgb+dqA%qY@2qAs!oWk4;_Bk84 zt?m^}-h6HAHf65lTW>#z=zsQm$@2H%!L;i|Pd?my{wBvh$fn2po$Eop|4QXzrITWR z=2mn3f9Wo+;Q7=4{uTz^<<)(gKc&?FTE_aI_~BE}9rre`=G2|N{oz+WU_c;)1EzNv XU7w!SY@Q^Y3KI8p^>bP0l+XkKqjQme diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00004.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00004.png deleted file mode 100644 index 908600200d45a13b6992c9edeaa2393b0861e45e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2#>^dezp0-4j zcP)SQGrv7zop@z^!{@^dD({O;3pZS0lC^y<_-c8seF_?~)R`1e_fGkV^^&kc_nKe2Ci;Xa$I%_*{c^5!6)e{)29 zm26b^_g($2+GqGHEFoLHbjrtX)ApXY*wuVn^43v}zKkE#FzsNY5Gxh(T zJCBYVE0jbr-{!qkvu!oY_1(2BlJPz7}7ba4!+nDh2#WZq!~0fqqc zSH3&`Pu$^czb5F+j<`i!9>4B|Gi{q;kW)4-mCy3|oX;;b*eZ@J`X?J0_2$}_2{rGx z-B43_J}2mv(D_c&JC}lgM%Nz9JGtrY{fg??tH!*VOK;p!V|1?C-?{ST1=D#FH>x66 z+U73Wx3|Vmv-ICyLw0*k3F~k9UtQmP6u)IZOU9;d^@}(Ea}J$#xUb{*w>V(d>huGd zJca9gHs#OlI_9=|IW%HQ%7&hq0FJ`tVdO9K4UibR+ zqfY7*s`>6+h+VlW!tT!V7Yy?P<-+v%Ud`lxV7-3v%a?zJ4L*OEe{235#>;wtkN!T- sFmLZiCj<5gNZww3@WY7@)m33$Tdz-E&D^x(@p00i_>zopr0On_&DgXcg diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00006.png deleted file mode 100644 index ac060763048ca5de77be02f164bd8027df762e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)DSPRFQ=;gH01G^LcT$_kLgp);`?`{Ozu)w>l(O#a2~HAWO}6f> zIi%MUkKYo*LDU$2rO~#bK?AClvJ%>Jw4@nR8`T3XQJqi&S|UBKQ++aTKlEmQ>z7j0 zhO31wm{ua4u=4WHC6*f13F}eE^DWSRt$b#{k+HAN%9S;GXsMCL8ybPlgCF)oYTary zbj;G1p9qG{s%OIb_-hH;)(1`l?QA|-QFhgxJ>W{~gO-QT6}gqOG>KYLvu-VxvExMD zEt1%|$O8ZX0HDXK{-GOmyS8*RnKLYA5mG;h*joWeJ;REeNe+JPR%Ycmmk!ND$T^y_ zl6uQd?bfrS1U<-vlI60N+n`w_Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl? z`Qe;&9Jz+x`eu~P7kfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahqLtWsSnQomp*9 zHAw{u+3Nvcg1~0b0RVu5ykt=@i(osuDkKCwM6!#nywPjW81PTx)cnRn7sv_Z6+exwdL#AMuAm9Sw|D6dAd;)sER?H5FEQ?n4(~{gu09~`-qp zsw(vy$xG>ggVG?Qh<}hya;~zc9rPtgP2E_DMTR!llxIIGwN2wWF*Re~RpRM#3Q4o| zA&bCSpamT!nugvB#y$W50000000000000000000000000002M+fAL@=tTZSh4gdfE M07*qoM6N<$f{*4-^8f$< diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00007.png deleted file mode 100644 index 2b33e84bd934985581cc1e8b3a0342a628c6b7be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`huba4!+nDh2VG+&DXk3-;` zGk!PzPr7ruW`@ABwGI3&v#R&iD1jy* z_7tuc-X2`6D!9B=&`RV$?-z;s?@lkD#0b03H`@JsruZ7K`CrR^37WIHUd?Kg+v9Pj zdB5t3qY^D`KF4Al(j@krk`wsV?`V45!~0vO!5Q5z8TTqx8?q{_cxJMm^;b80SfPL3 zxsEZe;!XDC&5Q*bT^SkJK5vS)@Nhm`?|9J5xpd}-MKzfcA3yuahwGm^6Djq}j^{uE r5ZReMJXE*4{GtvUFnq9q2etDnm{r-UW|7_yO_ diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00008.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00008.png deleted file mode 100644 index 1fcdee14dce21c819b5e211dbbdf546034789b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@XV>EaktG3V{fz@iofp0>>8 z<{$sLf6}WhXzO%vYDg&GegFHBtRJ17$5fZG0CgdQ=pUQ>=RdFH?R$K}etjXw;$Oba z1?%U$Zu=m-E@E+Iy!?HsBck6dpZOlBoEOES-}iXJ_RTh`y_-GECLA}Ny`*J9+|q&_ zV$-vZemTT`c4J_wb>;nImb2e9maN`zGQE3a$!d$d7ujsv+GDqN?!LYLj%c|pWB8%h zp~0`!PEFJ9U%M<``i6*OX51l}wxW$Kvh7#P54>9?yITLMm~eu|@@m1nYi&K-S*~)M zoZWKD!pr=fb7!Vh`;uz{AFs^c@`>+6;5pOddY4@VXJ5F^BX)JmtA}R-f+PRQoGW>= z`KMUVJ(NoFyc@rYZbz(7I=||y+MFpYHT)OKCe7Nrym#xNu6?%I?dPNI zPGq<)IGMfeb6NFNP7TNPm94Y(#qN6>x$@VcjqlRWSTD%%u-u)0w`}&2`?9ky$IoF! djwTS>ypFN($-kn=OXjaYTu)a&mvv4FO#or~`;Y(t diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00009.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00009.png deleted file mode 100644 index 431986c71c6e730392aef05dda8241072bc257cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmV?P)eChM& zT5kXui5bbY6GICs@~sPc-XJGpv+jw`7!YL7LB6iL9ntIr2JVH%=e(sD!;1V6>o|_% zIF1an(}{L4Yz@v;idmKyYvZZWmZ@|Nuotw+)HI7Pn6S0w1^FPvCm>O?&(KC_=AhtE zuTi^pOsSEZ)DWOa(O_wG7vug{x5wyyUQRs~wgA~3&|T&!njD*{Sy!-y2QqwQ?^mAX z)ZG37*$MazBTpWdK{!+fH>NX$jCAtU#Re_H_fTnkls@h*Bpw6!j$h0){shjQ@Hmch zI!wM83X?bHiURf#U5FJKoZF$7s|aU=x&pY?0fE_)8~K%70N+bKCB80LO7;&@#nPUU`RZA47xif++@3ap?A;SqG@Rt#*VMHCRnC)E5=~dNDDZNSkpP zQ*%T`F`8q5x+@3K5@To(9tT-5rk$A{TwRd5D`!@W9HvY$Q(_=Tc0tY@rY<^DVjRcW zr?#FHHpNgR+|Dgy2ZBKuxnqZ#Vr}?jFj^5tOfdl&`m`OcZWy6Mr!Hd_GCMlH|8H>T z(l9bdl$2p^A!fv(6O&=?1biE0gYZcI!)l6MmA`lumSG(urkD{K!MmXEMg7uC7?I(q Z@dpUnXY~1da}EFi002ovPDHLkV1h-hOUVEL diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00010.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00010.png deleted file mode 100644 index 1acb7d563ed662112c5ae28ad4e37237518f8ce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMj0P)7fXO&+E0)o#+bi7jzg?!%lwpwKugi0 z*zPe#)=R?(C=Y(iAjvk$HKlq_4d+Mc1u`ZN$j?e|(<#;3L9vvV`X>Vvd+7nft$%7d z3D@QTP1B0WTP-g(wO|(5E0Ob}kb5o$>l1h*;PD8;aD)M57l=W&U=|Fh{>|1h7N-Wa1w}xR=wq{GD0cHjky-mV*p7x7VZR< zlDDjc&0=VCt{ZduSlFs2ti)50Q$xK6BDKsPx# diff --git a/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png b/tests/integration/nano/snapshots/nanox/test_wrong_apdu/test_regression_continue_after_reject/reject_signing/00011.png deleted file mode 100644 index eb05139023bd5b5ba9e8ce624586023cf3f8fa75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmVZ427MZ*@^pKl6&ccr!)qLKz{Y)d+I0ymnZ?QPCuI!$8o@q`@Wks9hsl{5Q>y6 zj&VPZL$zxo0_ua`x{zgzpr+F9so^|T{unF+3&3xckL4@P)={;RUHy}Rs=bT=C4zMUR8?KGb^<{4|BnEh=%eO|-Zt;$sV0ao(q&ZRfX2bMcS5iE z@^>#AKt{@pw8beS3kvcj1=R!OiNuWi$;}+F*Sk!BfH?5Efy zNs=TVJ8VbBbR)ZQu$P|<;;lAQZlH|FJdt}>n;&rj- zRG(S;Ou~-KxM(X##eIOFM@AplZaUgEqY(GV=rY>&+^se~!Xu!`Yc@?97|j8WCY`%K zNRvBZXXI0mo<~+=X3sqajo#j_-1V9^z+w_!2EN3Z43P_-BuR|1d0TC}&bOAXT=`fa zWX$3)2?v=}$7QHK1lD~su6c0HiGz5#a#Jz};a-5F^DbXGPXE~Pwhx12Tw8`7>M4l- zwwg#)Qj1jat%-#f6vPe_ks;oZG~=A%rl25pn5vBEKc5a_hXs)_OQxU~5#-hjA|pwX z0Y2h2&N?S_dARXGxn=MCYbzT8QX2yQCt_1Q(b&-W3Q)WN2BugLS1u6luc~PaK#v6Y zSf?PSbbb~VGzUd+dmytG2$BAC1c;M6VP}L#fV(%REudLpEZj{ocL7sm3VJW@H=w(K b;dMMiFrGe@|(uf*KJC?N87m##nxQzu#)2J@Z@NA|oY> z;kd^bw{~qrf%@jFE~Gg|rA}FH(jk47F9yq$1PHRI?AHoV9{r?K zB76@A8Jb?1a@5LZ^9a@jNKK+~6)K0{rKh~HSLu?~#|*>cNEBWF564^Pus6q^8E>0UsM+$_U8b+hXyEHyP; z&V8&Cdf(H!&Z&P3mHvvH2AS<7*7D$Xo5(5ySbsQEdS1NO=g5c{p!tF!&tpj?<0jI`o=lec%W<2^%A}0{A2{@!YpiBo>kl yQ#|eNjGfs}e9>0)U3QtEh<^z5!&wdwcou(u^iLm&WE+710000?P)-?y3TmHEz3fk??R zG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP!gY>TWGu~444vLj*>R&ZLv9A$e9Q~(G z57#>!AT*dw8nv|87{S~C6qT2(od7`j|0BRA`oKNW+Tyd^<$}18wo#1(7zaPt1wHri z7|RAJEjBH_I5x6?Aiq*jK0tP4&A2~Q=77t#58`uOO+>v5nDj0%KgTmg8&&M5SjTZ3 z$8l5{-Y5|UMH^X1A%W>=GP2br_NYp6ncD$SjN^c*X5eJ1;Q-@J9nAz&(1^#Xs?}7} zf|Mir_I5`cBu7Azfy9kzoU)FFk#$sfAtO$dd{=WctPKdZ$f5%r0&WTdB6e}Q>($YU zFQmjB(G@UoB!kqE+K++ivk z-%%AUEvQ&gY*Ul|1Roz>NPre`#7A9>OBwsVs@IwkFDUNO>xosmyMi^ID>02F3NAhA^^_hytA0oFIK`gP; zGuSa!2-cldxnIgr@v7iBGZo`72HIo!^<1x)E@U=hPs8Fn zs;fQi9o)wI01-KCr?vKK2+CnZ3Mv|iXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^ z%=}4snEU0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6#&!iC+t* zH00iX None: - - data = send_and_navigate( - send=lambda: backend.sign(account, message, apdu_size=10), - navigate=lambda: tezos_navigator.navigate_sign_accept(snap_path=path) - ) - - account.check_signature( - message=message, - with_hash=False, - data=data) - - message = Transaction( - source = 'tz2JPgTWZZpxZZLqHMfS69UAy1UHm4Aw5iHu', - fee = 50000, - counter = 8, - gas_limit = 54, - storage_limit = 45, - destination = 'KT18amZmM5W7qDWVt2pH6uj7sCEd3kbzLrHT', - amount = 240000, - entrypoint = 'do', - parameter = {'prim': 'CAR'} - ) - - check_sign_with_small_packet( - account=account, - message=message, - path=snapshot_dir) - -@requires_device("nanosp") -def test_nanosp_regression_press_right_works_across_apdu_recieves(tezos_navigator: TezosNavigator, account: Account, snapshot_dir: Path): - """Check no need to click right two times between APDUs during signing flow""" - - message = MichelineExpr([{'prim':'IF_NONE','args':[[[{'prim':'SWAP'},{'prim':'IF','args':[[{'prim':'DIP','args':[[[{'prim':'DROP','args':[{'int':1}]},{'prim':'PUSH','args':[{'prim':'unit'},{'prim':'Unit'}]},{'prim':'PUSH','args':[{'prim':'bool'},{'prim':'True'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':';L\\S?p$-Fq)VDg\n]te\no4v0_8)\"'}]}]]]}],[[{'prim':'DROP','args':[{'int':2}]},{'prim':'PUSH','args':[{'prim':'unit'},{'prim':'Unit'}]},{'prim':'PUSH','args':[{'prim':'bool'},{'prim':'False'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':'Li-%*edF6~?E[5Kmu?dyviwJ^2\"\\d$FyQ>>!>D$g(Qg'}]},{'prim':'PUSH','args':[{'prim':'string'},{'string':'*Tx