diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 706972720..469aeaea8 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -13,8 +13,9 @@ env: PULL_COMMENT: | |core UI changes|device test|click test|persistence test| |---------------|-----------|----------|----------------| - |Model T |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_device_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_device_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_device_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_device_test/master_diff.html)) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_click_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_click_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_click_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_click_test/master_diff.html)) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_persistence_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_persistence_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_persistence_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_persistence_test/master_diff.html))|| - |Model Safe 3 |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_device_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_device_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_device_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_device_test/master_diff.html)) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_click_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_click_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_click_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_click_test/master_diff.html)) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_persistence_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_persistence_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_persistence_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_persistence_test/master_diff.html))|| + |T2T1 Model T |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_device_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_device_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_device_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_device_test/master_diff.html)) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_click_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_click_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_click_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_click_test/master_diff.html)) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_persistence_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_persistence_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_persistence_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2T1-core_persistence_test/master_diff.html))|| + |T2B1 Safe 3 |[#3280](https://github.com/trezor/trezor-firmware/issues/3280) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_click_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_click_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_click_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T2B1-core_click_test/master_diff.html)) |[#2724](https://github.com/trezor/trezor-firmware/issues/2724) || + |T3T1 |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_device_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_device_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_device_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_device_test/master_diff.html)) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_click_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_click_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_click_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_click_test/master_diff.html)) |[test](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_persistence_test/index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_persistence_test/differing_screens.html)) [main](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_persistence_test/master_index.html)([screens](https://data.trezor.io/dev/firmware/ui_report/${{ github.run_id }}/T3T1-core_persistence_test/master_diff.html))|| |All |[main](https://data.trezor.io/dev/firmware/master_diff/${{ github.run_id }}/index.html)([screens](https://data.trezor.io/dev/firmware/master_diff/${{ github.run_id }}/master_diff.html)) || jobs: diff --git a/core/src/apps/debug/__init__.py b/core/src/apps/debug/__init__.py index 476be0461..1e2917183 100644 --- a/core/src/apps/debug/__init__.py +++ b/core/src/apps/debug/__init__.py @@ -170,14 +170,14 @@ if __debug__: # Incrementing the counter for last events so we know what to await debug_events.last_event += 1 - # TT click on specific coordinates, with possible hold + # Touchscreen devices click on specific coordinates, with possible hold if ( x is not None and y is not None and utils.INTERNAL_MODEL in ("T2T1", "T3T1", "D001") ): click_chan.publish((debug_events.last_event, x, y, msg.hold_ms)) - # TR press specific button + # Button devices press specific button elif msg.physical_button is not None and utils.INTERNAL_MODEL in ("T2B1",): button_chan.publish( (debug_events.last_event, msg.physical_button, msg.hold_ms) diff --git a/core/tests/test_apps.nem.hdnode.py b/core/tests/test_apps.nem.hdnode.py index 37fabae59..3e9ae858e 100644 --- a/core/tests/test_apps.nem.hdnode.py +++ b/core/tests/test_apps.nem.hdnode.py @@ -319,5 +319,5 @@ class TestNemHDNode(unittest.TestCase): if __name__ == "__main__": - if not utils.MODEL_IS_T2B1: + if utils.INTERNAL_MODEL == "T2T1": unittest.main() diff --git a/docs/tests/device-tests.md b/docs/tests/device-tests.md index 0947d6286..f3ba110bc 100644 --- a/docs/tests/device-tests.md +++ b/docs/tests/device-tests.md @@ -109,6 +109,7 @@ Tests can be run only for specific models - it is done by disallowing the tests `@pytest.mark.skip_t1` `@pytest.mark.skip_t2` `@pytest.mark.skip_tr` +`@pytest.mark.skip_t3t1` are valid markers to skip current test for T1, TT and TR respectively. [pytest-random-order]: https://pypi.org/project/pytest-random-order/ diff --git a/python/src/trezorlib/debuglink.py b/python/src/trezorlib/debuglink.py index f2912549b..dabf5694e 100644 --- a/python/src/trezorlib/debuglink.py +++ b/python/src/trezorlib/debuglink.py @@ -44,7 +44,7 @@ from typing import ( from mnemonic import Mnemonic from typing_extensions import Literal -from . import mapping, messages, protobuf +from . import mapping, messages, models, protobuf from .client import TrezorClient from .exceptions import TrezorFailure from .log import DUMP_BYTES @@ -368,7 +368,7 @@ class DebugLink: self.mapping = mapping.DEFAULT_MAPPING # To be set by TrezorClientDebugLink (is not known during creation time) - self.model: Optional[str] = None + self.model: Optional[models.TrezorModel] = None self.version: Tuple[int, int, int] = (0, 0, 0) # Where screenshots are being saved @@ -452,7 +452,7 @@ class DebugLink: def reset_debug_events(self) -> None: # Only supported on TT and above certain version - if self.model in ("T", "Safe 3") and not self.legacy_debug: + if (self.model is not models.T1B1) and not self.legacy_debug: return self._call(messages.DebugLinkResetDebugEvents()) return None @@ -691,7 +691,7 @@ class DebugLink: ) -> None: self.screenshot_recording_dir = directory # Different recording logic between core and legacy - if self.model in ("T", "Safe 3"): + if self.model is not models.T1B1: self._call( messages.DebugLinkRecordScreen( target_directory=directory, refresh_index=refresh_index @@ -705,7 +705,7 @@ class DebugLink: def stop_recording(self) -> None: self.screenshot_recording_dir = None # Different recording logic between TT and T1 - if self.model in ("T", "Safe 3"): + if self.model is not models.T1B1: self._call(messages.DebugLinkRecordScreen(target_directory=None)) else: self.t1_take_screenshots = False @@ -732,7 +732,7 @@ class DebugLink: TT handles them differently, see debuglink.start_recording. """ - if self.model == "1" and self.t1_take_screenshots: + if self.model is models.T1B1 and self.t1_take_screenshots: self.save_screenshot_for_t1() def save_screenshot_for_t1(self) -> None: @@ -962,7 +962,7 @@ class TrezorClientDebugLink(TrezorClient): # So that we can choose right screenshotting logic (T1 vs TT) # and know the supported debug capabilities - self.debug.model = self.features.model + self.debug.model = self.model self.debug.version = self.version def reset_debug_features(self) -> None: diff --git a/tests/click_tests/common.py b/tests/click_tests/common.py index 380c2a0e7..263546903 100644 --- a/tests/click_tests/common.py +++ b/tests/click_tests/common.py @@ -3,6 +3,8 @@ from __future__ import annotations from enum import Enum from typing import TYPE_CHECKING +from trezorlib import models + from .. import buttons from .. import translations as TR @@ -44,9 +46,9 @@ def get_char_category(char: str) -> PassphraseCategory: def go_next(debug: "DebugLink", wait: bool = False) -> "LayoutContent" | None: - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): return debug.click(buttons.OK, wait=wait) # type: ignore - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): return debug.press_right(wait=wait) # type: ignore else: raise RuntimeError("Unknown model") @@ -55,9 +57,10 @@ def go_next(debug: "DebugLink", wait: bool = False) -> "LayoutContent" | None: def go_back( debug: "DebugLink", wait: bool = False, r_middle: bool = False ) -> "LayoutContent" | None: - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): return debug.click(buttons.CANCEL, wait=wait) # type: ignore - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): + if r_middle: return debug.press_middle(wait=wait) # type: ignore else: diff --git a/tests/click_tests/recovery.py b/tests/click_tests/recovery.py index 61a7f0f21..c6def77f2 100644 --- a/tests/click_tests/recovery.py +++ b/tests/click_tests/recovery.py @@ -1,5 +1,7 @@ from typing import TYPE_CHECKING +from trezorlib import models + from .. import buttons from .. import translations as TR from .common import get_possible_btn_texts, go_next @@ -16,13 +18,13 @@ DELETE_BTN_TEXTS = get_possible_btn_texts("inputs__delete") + get_possible_btn_t def enter_word( debug: "DebugLink", word: str, is_slip39: bool = False ) -> "LayoutContent": - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): typed_word = word[:4] for coords in buttons.type_word(typed_word, is_slip39=is_slip39): debug.click(coords) return debug.click(buttons.CONFIRM_WORD, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): letter_index = 0 layout = debug.read_layout() @@ -47,9 +49,9 @@ def enter_word( def confirm_recovery(debug: "DebugLink") -> None: layout = debug.wait_layout() TR.assert_equals(layout.title(), "recovery__title") - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.OK, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_right(wait=True) debug.press_right() @@ -60,7 +62,7 @@ def select_number_of_words( if wait: debug.wait_layout() TR.assert_equals(debug.read_layout().text_content(), "recovery__num_of_words") - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): # click the number word_option_offset = 6 word_options = (12, 18, 20, 24, 33) @@ -69,7 +71,7 @@ def select_number_of_words( ) # raises if num of words is invalid coords = buttons.grid34(index % 3, index // 3) layout = debug.click(coords, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): layout = debug.press_right(wait=True) TR.assert_equals(layout.title(), "word_count__title") @@ -92,7 +94,7 @@ def enter_share( debug: "DebugLink", share: str, is_first: bool = True ) -> "LayoutContent": TR.assert_in(debug.read_layout().title(), "recovery__title_recover") - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): layout = debug.wait_layout() for _ in range(layout.page_count()): layout = debug.press_right(wait=True) @@ -146,11 +148,11 @@ def enter_seed_previous_correct( if go_back: go_back = False - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.swipe_right(wait=True) for _ in range(len(bad_word)): debug.click(buttons.RECOVERY_DELETE, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): layout = debug.read_layout() while layout.get_middle_choice() not in DELETE_BTN_TEXTS: @@ -177,9 +179,9 @@ def enter_seed_previous_correct( def prepare_enter_seed(debug: "DebugLink") -> None: TR.assert_in(debug.read_layout().text_content(), "recovery__enter_backup") - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.OK, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_right(wait=True) TR.assert_equals(debug.read_layout().title(), "recovery__title_recover") debug.press_right() diff --git a/tests/click_tests/reset.py b/tests/click_tests/reset.py index eb0d420af..72260ca7e 100644 --- a/tests/click_tests/reset.py +++ b/tests/click_tests/reset.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING from shamir_mnemonic import shamir # type: ignore -from trezorlib import messages +from trezorlib import messages, models from .. import buttons from .. import translations as TR @@ -17,17 +17,17 @@ def confirm_new_wallet(debug: "DebugLink") -> None: debug.read_layout().title(), ["reset__title_create_wallet", "reset__title_create_wallet_shamir"], ) - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.OK, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_right(wait=True) debug.press_right(wait=True) def confirm_read(debug: "DebugLink", middle_r: bool = False) -> None: - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.OK, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): page_count = debug.read_layout().page_count() if page_count > 1: for _ in range(page_count - 1): @@ -39,12 +39,12 @@ def confirm_read(debug: "DebugLink", middle_r: bool = False) -> None: def set_selection(debug: "DebugLink", button: tuple[int, int], diff: int) -> None: - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): assert "NumberInputDialog" in debug.read_layout().all_components() for _ in range(diff): debug.click(button) debug.click(buttons.OK, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): layout = debug.read_layout() if layout.title() in TR.translate( "reset__title_number_of_shares" @@ -66,7 +66,7 @@ def read_words( ) -> list[str]: words: list[str] = [] - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): debug.press_right(wait=True) # Swiping through all the pages and loading the words @@ -75,14 +75,14 @@ def read_words( words.extend(layout.seed_words()) layout = debug.swipe_up(wait=True) assert layout is not None - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): words.extend(layout.seed_words()) # There is hold-to-confirm button if do_htc: - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click_hold(buttons.OK, hold_ms=1500) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_right_htc(1200) else: # It would take a very long time to test 16-of-16 with doing 1500 ms HTC after @@ -94,7 +94,7 @@ def read_words( def confirm_words(debug: "DebugLink", words: list[str]) -> None: layout = debug.wait_layout() - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): TR.assert_template(layout.text_content(), "reset__select_word_x_of_y_template") for _ in range(3): # "Select word 3 of 20" @@ -109,7 +109,7 @@ def confirm_words(debug: "DebugLink", words: list[str]) -> None: wanted_word = words[word_pos - 1].lower() button_pos = btn_texts.index(wanted_word) layout = debug.click(buttons.RESET_WORD_CHECK[button_pos], wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): TR.assert_in(layout.text_content(), "reset__select_correct_word") layout = debug.press_right(wait=True) for _ in range(3): diff --git a/tests/click_tests/test_autolock.py b/tests/click_tests/test_autolock.py index 564267171..7f6d2a561 100644 --- a/tests/click_tests/test_autolock.py +++ b/tests/click_tests/test_autolock.py @@ -20,7 +20,7 @@ from typing import TYPE_CHECKING import pytest -from trezorlib import btc, device, exceptions, messages +from trezorlib import btc, device, exceptions, messages, models from trezorlib.protobuf import MessageType from trezorlib.tools import parse_path @@ -102,12 +102,12 @@ def test_autolock_interrupts_signing(device_handler: "BackgroundDeviceHandler"): in debug.wait_layout().text_content().replace(" ", "") ) - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.OK, wait=True) layout = debug.click(buttons.OK, wait=True) TR.assert_in(layout.text_content(), "send__total_amount") assert "0.0039 BTC" in layout.text_content() - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_right(wait=True) layout = debug.press_right(wait=True) TR.assert_in(layout.text_content(), "send__total_amount") @@ -149,12 +149,12 @@ def test_autolock_does_not_interrupt_signing(device_handler: "BackgroundDeviceHa in debug.wait_layout().text_content().replace(" ", "") ) - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.OK, wait=True) layout = debug.click(buttons.OK, wait=True) TR.assert_in(layout.text_content(), "send__total_amount") assert "0.0039 BTC" in layout.text_content() - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_right(wait=True) layout = debug.press_right(wait=True) TR.assert_in(layout.text_content(), "send__total_amount") @@ -168,9 +168,9 @@ def test_autolock_does_not_interrupt_signing(device_handler: "BackgroundDeviceHa with device_handler.client: device_handler.client.set_filter(messages.TxAck, sleepy_filter) # confirm transaction - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.OK) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_middle() signatures, tx = device_handler.result() @@ -190,17 +190,17 @@ def test_autolock_passphrase_keyboard(device_handler: "BackgroundDeviceHandler") assert "PassphraseKeyboard" in debug.wait_layout().all_components() - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): # Going into the selected character category debug.press_middle() # enter passphrase - slowly # keep clicking for long enough to trigger the autolock if it incorrectly ignored key presses for _ in range(math.ceil(11 / 1.5)): - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): # click at "j" debug.click(CENTER_BUTTON) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): # just go right # NOTE: because of passphrase randomization it would be a pain to input # a specific passphrase, which is not in scope for this test. @@ -208,9 +208,9 @@ def test_autolock_passphrase_keyboard(device_handler: "BackgroundDeviceHandler") time.sleep(1.5) # Send the passphrase to the client (TT has it clicked already, TR needs to input it) - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.OK, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.input("j" * 8, wait=True) # address corresponding to "jjjjjjjj" passphrase @@ -227,16 +227,16 @@ def test_autolock_interrupts_passphrase(device_handler: "BackgroundDeviceHandler assert "PassphraseKeyboard" in debug.wait_layout().all_components() - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): # Going into the selected character category debug.press_middle() # enter passphrase - slowly # autolock must activate even if we pressed some buttons for _ in range(math.ceil(6 / 1.5)): - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(CENTER_BUTTON) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_middle() time.sleep(1.5) @@ -267,7 +267,7 @@ def test_dryrun_locks_at_number_of_words(device_handler: "BackgroundDeviceHandle layout = unlock_dry_run(debug) TR.assert_in(debug.wait_layout().text_content(), "recovery__num_of_words") - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): debug.press_right(wait=True) # wait for autolock to trigger @@ -300,10 +300,10 @@ def test_dryrun_locks_at_word_entry(device_handler: "BackgroundDeviceHandler"): # select 20 words recovery.select_number_of_words(debug, 20) - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): layout = debug.click(buttons.OK, wait=True) assert layout.main_component() == "MnemonicKeyboard" - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): layout = debug.press_right(wait=True) assert "MnemonicKeyboard" in layout.all_components() @@ -326,7 +326,7 @@ def test_dryrun_enter_word_slowly(device_handler: "BackgroundDeviceHandler"): # select 20 words recovery.select_number_of_words(debug, 20) - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): layout = debug.click(buttons.OK, wait=True) assert layout.main_component() == "MnemonicKeyboard" @@ -337,7 +337,7 @@ def test_dryrun_enter_word_slowly(device_handler: "BackgroundDeviceHandler"): layout = debug.click(buttons.CONFIRM_WORD, wait=True) # should not have locked, even though we took 9 seconds to type each letter assert layout.main_component() == "MnemonicKeyboard" - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): layout = debug.press_right(wait=True) assert "MnemonicKeyboard" in layout.all_components() diff --git a/tests/click_tests/test_lock.py b/tests/click_tests/test_lock.py index 199631021..e9d3da66c 100644 --- a/tests/click_tests/test_lock.py +++ b/tests/click_tests/test_lock.py @@ -19,6 +19,8 @@ from typing import TYPE_CHECKING import pytest +from trezorlib import models + from .. import buttons, common if TYPE_CHECKING: @@ -32,11 +34,21 @@ PIN4 = "1234" def test_hold_to_lock(device_handler: "BackgroundDeviceHandler"): debug = device_handler.debuglink() - short_duration = 1000 if debug.model == "T" else 500 - lock_duration = 3500 if debug.model == "T" else 1200 + short_duration = { + models.T1B1: 500, + models.T2B1: 500, + models.T2T1: 1000, + models.T3T1: 1000, + }[debug.model] + lock_duration = { + models.T1B1: 1200, + models.T2B1: 1200, + models.T2T1: 3500, + models.T3T1: 3500, + }[debug.model] def hold(duration: int, wait: bool = True) -> None: - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): debug.press_right_htc(hold_ms=duration) else: debug.input(x=13, y=37, hold_ms=duration, wait=wait) @@ -63,7 +75,7 @@ def test_hold_to_lock(device_handler: "BackgroundDeviceHandler"): assert device_handler.features().unlocked is False # unlock by touching - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): # Doing a short HTC to simulate a click debug.press_right_htc(hold_ms=100) layout = debug.wait_layout() diff --git a/tests/click_tests/test_passphrase_tr.py b/tests/click_tests/test_passphrase_tr.py index 45497de8e..d7fe39ac4 100644 --- a/tests/click_tests/test_passphrase_tr.py +++ b/tests/click_tests/test_passphrase_tr.py @@ -36,7 +36,7 @@ if TYPE_CHECKING: from ..device_handler import BackgroundDeviceHandler -pytestmark = [pytest.mark.skip_t1, pytest.mark.skip_t2] +pytestmark = [pytest.mark.skip_t1, pytest.mark.skip_t2, pytest.mark.skip_t3t1] # Testing the maximum length is really 50 # TODO: show some UI message when length reaches 50? diff --git a/tests/click_tests/test_pin.py b/tests/click_tests/test_pin.py index c005a574d..6f5c475b2 100644 --- a/tests/click_tests/test_pin.py +++ b/tests/click_tests/test_pin.py @@ -20,7 +20,7 @@ from typing import TYPE_CHECKING, Generator import pytest -from trezorlib import device, exceptions +from trezorlib import device, exceptions, models from .. import buttons from .. import translations as TR @@ -96,9 +96,9 @@ def prepare( # Set new PIN device_handler.run(device.change_pin) # type: ignore TR.assert_in(debug.wait_layout().text_content(), "pin__turn_on") - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): go_next(debug) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): go_next(debug, wait=True) go_next(debug, wait=True) go_next(debug, wait=True) @@ -117,7 +117,7 @@ def prepare( _input_see_confirm(debug, old_pin) TR.assert_in(debug.wait_layout().text_content(), "wipe_code__turn_on") go_next(debug, wait=True) - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): go_next(debug, wait=True) go_next(debug, wait=True) go_next(debug, wait=True) @@ -141,13 +141,13 @@ def _input_pin(debug: "DebugLink", pin: str, check: bool = False) -> None: if check: before = debug.read_layout().pin() - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): digits_order = debug.read_layout().tt_pin_digits_order() for digit in pin: digit_index = digits_order.index(digit) coords = buttons.pin_passphrase_index(digit_index) debug.click(coords, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): for digit in pin: navigate_to_action_and_press(debug, digit, TR_PIN_ACTIONS) @@ -158,9 +158,9 @@ def _input_pin(debug: "DebugLink", pin: str, check: bool = False) -> None: def _see_pin(debug: "DebugLink") -> None: """Navigate to "SHOW" and press it""" - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.TOP_ROW, wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): navigate_to_action_and_press(debug, SHOW, TR_PIN_ACTIONS) @@ -170,9 +170,9 @@ def _delete_pin(debug: "DebugLink", digits_to_delete: int, check: bool = True) - before = debug.read_layout().pin() for _ in range(digits_to_delete): - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.pin_passphrase_grid(9), wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): navigate_to_action_and_press(debug, DELETE, TR_PIN_ACTIONS) if check: @@ -182,9 +182,9 @@ def _delete_pin(debug: "DebugLink", digits_to_delete: int, check: bool = True) - def _delete_all(debug: "DebugLink", check: bool = True) -> None: """Navigate to "DELETE" and hold it until all digits are deleted""" - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click_hold(buttons.pin_passphrase_grid(9), hold_ms=1500) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): navigate_to_action_and_press(debug, DELETE, TR_PIN_ACTIONS, hold_ms=1000) if check: @@ -201,9 +201,9 @@ def _cancel_pin(debug: "DebugLink") -> None: def _confirm_pin(debug: "DebugLink") -> None: """Navigate to "ENTER" and press it""" - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): debug.click(buttons.pin_passphrase_grid(11), wait=True) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): navigate_to_action_and_press(debug, ENTER, TR_PIN_ACTIONS) @@ -216,7 +216,7 @@ def _input_see_confirm(debug: "DebugLink", pin: str) -> None: def _enter_two_times(debug: "DebugLink", pin1: str, pin2: str) -> None: _input_see_confirm(debug, pin1) - if debug.model == "Safe 3": + if debug.model in (models.T2B1,): # Please re-enter go_next(debug, wait=True) @@ -306,10 +306,10 @@ def test_pin_setup(device_handler: "BackgroundDeviceHandler"): def test_pin_setup_mismatch(device_handler: "BackgroundDeviceHandler"): with PIN_CANCELLED, prepare(device_handler, Situation.PIN_SETUP) as debug: _enter_two_times(debug, "1", "2") - if debug.model == "T": + if debug.model in (models.T2T1, models.T3T1): go_next(debug) _cancel_pin(debug) - elif debug.model == "Safe 3": + elif debug.model in (models.T2B1,): debug.press_middle() debug.press_no() diff --git a/tests/click_tests/test_tutorial.py b/tests/click_tests/test_tutorial.py index b07773c66..277657c17 100644 --- a/tests/click_tests/test_tutorial.py +++ b/tests/click_tests/test_tutorial.py @@ -30,8 +30,8 @@ if TYPE_CHECKING: from ..device_handler import BackgroundDeviceHandler -# TR-only -pytestmark = [pytest.mark.skip_t1, pytest.mark.skip_t2] +# T2B1-only +pytestmark = [pytest.mark.skip_t1, pytest.mark.skip_t2, pytest.mark.skip_t3t1] @contextmanager diff --git a/tests/common.py b/tests/common.py index 4951eac48..0dd3b3eb2 100644 --- a/tests/common.py +++ b/tests/common.py @@ -23,7 +23,7 @@ from unittest import mock import pytest -from trezorlib import btc, messages, tools +from trezorlib import btc, messages, models, tools if TYPE_CHECKING: from _pytest.mark.structures import MarkDecorator @@ -89,12 +89,14 @@ def parametrize_using_common_fixtures(*paths: str) -> "MarkDecorator": skip_models = test.get("skip_models", []) skip_marks = [] for skip_model in skip_models: - if skip_model == "t1": + if skip_model in ("t1", "t1b1"): skip_marks.append(pytest.mark.skip_t1) - if skip_model == "t2": + if skip_model in ("t2", "t2t1"): skip_marks.append(pytest.mark.skip_t2) - if skip_model == "tr": + if skip_model in ("tr", "t2b1"): skip_marks.append(pytest.mark.skip_tr) + if skip_model == "t3t1": + skip_marks.append(pytest.mark.skip_t3t1) tests.append( pytest.param( @@ -173,10 +175,12 @@ def read_and_confirm_mnemonic( debug: "DebugLink", choose_wrong: bool = False ) -> Generator[None, "ButtonRequest", Optional[str]]: # TODO: these are very similar, reuse some code - if debug.model == "T": + if debug.model is models.T2T1: mnemonic = yield from read_and_confirm_mnemonic_tt(debug, choose_wrong) - elif debug.model == "Safe 3": + elif debug.model is models.T2B1: mnemonic = yield from read_and_confirm_mnemonic_tr(debug, choose_wrong) + elif debug.model is models.T3T1: + mnemonic = yield from read_and_confirm_mnemonic_tt(debug, choose_wrong) else: raise ValueError(f"Unknown model: {debug.model}") @@ -316,3 +320,7 @@ def swipe_till_the_end(debug: "DebugLink", br: messages.ButtonRequest) -> None: if br.pages is not None: for _ in range(br.pages - 1): debug.swipe_up() + + +def is_core(client: "Client") -> bool: + return client.model in (models.T2T1, models.T2B1, models.T3T1) diff --git a/tests/conftest.py b/tests/conftest.py index b6fa7ab2f..43d921178 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -23,7 +23,7 @@ from typing import TYPE_CHECKING, Generator, Iterator import pytest import xdist -from trezorlib import debuglink, log +from trezorlib import debuglink, log, models from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.device import apply_settings from trezorlib.device import wipe as wipe_device @@ -207,6 +207,11 @@ def client( and _raw_client.features.model == "Safe 3" ): pytest.skip("Test excluded on Trezor R") + if ( + request.node.get_closest_marker("skip_t3t1") + and _raw_client.model is models.T3T1 + ): + pytest.skip("Test excluded on Trezor T3T1") sd_marker = request.node.get_closest_marker("sd_card") if sd_marker and not _raw_client.features.sd_card_present: @@ -390,6 +395,7 @@ def pytest_configure(config: "Config") -> None: config.addinivalue_line("markers", "skip_t1: skip the test on Trezor One") config.addinivalue_line("markers", "skip_t2: skip the test on Trezor T") config.addinivalue_line("markers", "skip_tr: skip the test on Trezor R") + config.addinivalue_line("markers", "skip_t3t1: skip the test on Trezor T3T1") config.addinivalue_line( "markers", "experimental: enable experimental features on Trezor" ) diff --git a/tests/device_tests/bitcoin/test_authorize_coinjoin.py b/tests/device_tests/bitcoin/test_authorize_coinjoin.py index 9b4cc5cbd..b149ff53d 100644 --- a/tests/device_tests/bitcoin/test_authorize_coinjoin.py +++ b/tests/device_tests/bitcoin/test_authorize_coinjoin.py @@ -23,6 +23,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path +from ...common import is_core from ...tx_cache import TxCache from .payment_req import make_coinjoin_request from .signtx import ( @@ -453,7 +454,6 @@ def test_sign_tx_spend(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ messages.ButtonRequest(code=B.Other), @@ -462,7 +462,7 @@ def test_sign_tx_spend(client: Client): request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_output(0), @@ -528,7 +528,6 @@ def test_sign_tx_migration(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ messages.ButtonRequest(code=B.Other), @@ -537,7 +536,7 @@ def test_sign_tx_migration(client: Client): request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_2cc3c1), diff --git a/tests/device_tests/bitcoin/test_bcash.py b/tests/device_tests/bitcoin/test_bcash.py index ae4962ea3..dde87449f 100644 --- a/tests/device_tests/bitcoin/test_bcash.py +++ b/tests/device_tests/bitcoin/test_bcash.py @@ -21,6 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( assert_tx_matches, @@ -72,14 +73,13 @@ def test_send_bch_change(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_bc37c2), @@ -125,14 +125,13 @@ def test_send_bch_nochange(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_502e85), @@ -184,14 +183,13 @@ def test_send_bch_oldaddr(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_502e85), @@ -255,7 +253,6 @@ def test_attack_change_input(client: Client): return msg with client: - is_core = client.features.model in ("T", "Safe 3") client.set_filter(messages.TxAck, attack_processor) client.set_expected_responses( [ @@ -263,7 +260,7 @@ def test_attack_change_input(client: Client): request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_bd32ff), @@ -331,13 +328,12 @@ def test_send_bch_multisig_wrongchange(client: Client): amount=23_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_062fbd), @@ -400,13 +396,12 @@ def test_send_bch_multisig_change(client: Client): amount=24_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -445,7 +440,7 @@ def test_send_bch_multisig_change(client: Client): request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -502,14 +497,13 @@ def test_send_bch_external_presigned(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_502e85), diff --git a/tests/device_tests/bitcoin/test_bgold.py b/tests/device_tests/bitcoin/test_bgold.py index f500b8c67..660fefaaa 100644 --- a/tests/device_tests/bitcoin/test_bgold.py +++ b/tests/device_tests/bitcoin/test_bgold.py @@ -21,6 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path, tx_hash +from ...common import is_core from ...tx_cache import TxCache from .signtx import request_finished, request_input, request_meta, request_output @@ -71,14 +72,13 @@ def test_send_bitcoin_gold_change(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_6f0398), @@ -125,14 +125,13 @@ def test_send_bitcoin_gold_nochange(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_6f0398), @@ -195,7 +194,6 @@ def test_attack_change_input(client: Client): return msg with client: - is_core = client.features.model in ("T", "Safe 3") client.set_filter(messages.TxAck, attack_processor) client.set_expected_responses( [ @@ -203,7 +201,7 @@ def test_attack_change_input(client: Client): request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_6f0398), @@ -257,13 +255,12 @@ def test_send_btg_multisig_change(client: Client): amount=1_252_382_934 - 24_000 - 1_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -302,7 +299,7 @@ def test_send_btg_multisig_change(client: Client): request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -351,16 +348,15 @@ def test_send_p2sh(client: Client): amount=1_252_382_934 - 11_000 - 12_300_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_db7239), @@ -405,13 +401,12 @@ def test_send_p2sh_witness_change(client: Client): amount=1_252_382_934 - 11_000 - 12_300_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -466,13 +461,12 @@ def test_send_multisig_1(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_7f1f6b), @@ -495,7 +489,7 @@ def test_send_multisig_1(client: Client): request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_7f1f6b), @@ -584,14 +578,13 @@ def test_send_btg_external_presigned(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_6f0398), diff --git a/tests/device_tests/bitcoin/test_dash.py b/tests/device_tests/bitcoin/test_dash.py index 45f3e8a34..fe2019696 100644 --- a/tests/device_tests/bitcoin/test_dash.py +++ b/tests/device_tests/bitcoin/test_dash.py @@ -20,6 +20,7 @@ from trezorlib import btc, messages from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( request_extra_data, @@ -57,13 +58,12 @@ def test_send_dash(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(inp1.prev_hash), @@ -105,14 +105,13 @@ def test_send_dash_dip2_input(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(inp1.prev_hash), diff --git a/tests/device_tests/bitcoin/test_decred.py b/tests/device_tests/bitcoin/test_decred.py index d67e9c348..474cfe1f5 100644 --- a/tests/device_tests/bitcoin/test_decred.py +++ b/tests/device_tests/bitcoin/test_decred.py @@ -20,6 +20,7 @@ from trezorlib import btc, messages from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import request_finished, request_input, request_meta, request_output @@ -49,7 +50,12 @@ FAKE_TXHASH_51bc9c = bytes.fromhex( "51bc9c71f10a81eef3caedb5333062eb4b1f70998adf02916fe98fdc04c572e8" ) -pytestmark = [pytest.mark.altcoin, pytest.mark.decred, pytest.mark.skip_tr] +pytestmark = [ + pytest.mark.altcoin, + pytest.mark.decred, + pytest.mark.skip_tr, + pytest.mark.skip_t3t1, +] def test_send_decred(client: Client): @@ -72,13 +78,12 @@ def test_send_decred(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.FeeOverThreshold), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -194,14 +199,13 @@ def test_spend_from_stake_generation_and_revocation_decred(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_f8e2f2), @@ -276,7 +280,6 @@ def test_send_decred_change(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), @@ -284,7 +287,7 @@ def test_send_decred_change(client: Client): request_input(2), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -383,7 +386,6 @@ def test_decred_multisig_change(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), @@ -391,7 +393,7 @@ def test_decred_multisig_change(client: Client): request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_9ac7d2), diff --git a/tests/device_tests/bitcoin/test_getaddress_show.py b/tests/device_tests/bitcoin/test_getaddress_show.py index 8b251dd82..7734641ed 100644 --- a/tests/device_tests/bitcoin/test_getaddress_show.py +++ b/tests/device_tests/bitcoin/test_getaddress_show.py @@ -52,6 +52,7 @@ VECTORS = ( # path, script_type, address @pytest.mark.skip_t2 @pytest.mark.skip_tr +@pytest.mark.skip_t3t1 @pytest.mark.parametrize("path, script_type, address", VECTORS) def test_show_t1( client: Client, path: str, script_type: messages.InputScriptType, address: str diff --git a/tests/device_tests/bitcoin/test_komodo.py b/tests/device_tests/bitcoin/test_komodo.py index a26b3d23a..f883afc7b 100644 --- a/tests/device_tests/bitcoin/test_komodo.py +++ b/tests/device_tests/bitcoin/test_komodo.py @@ -20,6 +20,7 @@ from trezorlib import btc, messages from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( request_extra_data, @@ -61,13 +62,12 @@ def test_one_one_fee_sapling(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -126,16 +126,15 @@ def test_one_one_rewards_claim(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), messages.ButtonRequest(code=B.SignTx), request_input(0), diff --git a/tests/device_tests/bitcoin/test_multisig.py b/tests/device_tests/bitcoin/test_multisig.py index b7693be1b..5ccf10da5 100644 --- a/tests/device_tests/bitcoin/test_multisig.py +++ b/tests/device_tests/bitcoin/test_multisig.py @@ -21,7 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path -from ...common import MNEMONIC12 +from ...common import MNEMONIC12, is_core from ...tx_cache import TxCache from .signtx import ( assert_tx_matches, @@ -83,12 +83,11 @@ def test_2_of_3(client: Client, chunkify: bool): ) # Expected responses are the same for both two signings - is_core = client.features.model in ("T", "Safe 3") expected_responses = [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_6b07c1), diff --git a/tests/device_tests/bitcoin/test_multisig_change.py b/tests/device_tests/bitcoin/test_multisig_change.py index 4d3f1e49d..dbc095c54 100644 --- a/tests/device_tests/bitcoin/test_multisig_change.py +++ b/tests/device_tests/bitcoin/test_multisig_change.py @@ -21,7 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import H_, parse_path from ... import bip32 -from ...common import MNEMONIC12 +from ...common import MNEMONIC12, is_core from ...tx_cache import TxCache from .signtx import request_finished, request_input, request_meta, request_output @@ -145,7 +145,6 @@ def _responses( change: int = 0, foreign: bool = False, ): - is_core = client.features.model in ("T", "Safe 3") resp = [ request_input(0), request_input(1), @@ -154,7 +153,7 @@ def _responses( if change != 1: resp.append(messages.ButtonRequest(code=B.ConfirmOutput)) - if is_core: + if is_core(client): resp.append(messages.ButtonRequest(code=B.ConfirmOutput)) elif foreign: resp.append(messages.ButtonRequest(code=B.UnknownDerivationPath)) @@ -163,7 +162,7 @@ def _responses( if change != 2: resp.append(messages.ButtonRequest(code=B.ConfirmOutput)) - if is_core: + if is_core(client): resp.append(messages.ButtonRequest(code=B.ConfirmOutput)) elif foreign: resp.append(messages.ButtonRequest(code=B.UnknownDerivationPath)) diff --git a/tests/device_tests/bitcoin/test_op_return.py b/tests/device_tests/bitcoin/test_op_return.py index 19ebefef2..b50638919 100644 --- a/tests/device_tests/bitcoin/test_op_return.py +++ b/tests/device_tests/bitcoin/test_op_return.py @@ -21,6 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( assert_tx_matches, @@ -63,13 +64,12 @@ def test_opreturn(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), messages.ButtonRequest(code=B.SignTx), diff --git a/tests/device_tests/bitcoin/test_signmessage.py b/tests/device_tests/bitcoin/test_signmessage.py index f60a88f17..eec62bb51 100644 --- a/tests/device_tests/bitcoin/test_signmessage.py +++ b/tests/device_tests/bitcoin/test_signmessage.py @@ -363,7 +363,7 @@ def test_signmessage_pagination(client: Client, message: str): # We cannot differentiate between a newline and space in the message read from Trezor. # TODO: do the check also for model R - if client.features.model == "T": + if client.model in (models.T2T1, models.T3T1): message_read = IF.message_read.replace(" ", "").replace("...", "") signed_message = message.replace("\n", "").replace(" ", "") assert signed_message in message_read diff --git a/tests/device_tests/bitcoin/test_signtx.py b/tests/device_tests/bitcoin/test_signtx.py index 3bad0cc92..4ed5934fb 100644 --- a/tests/device_tests/bitcoin/test_signtx.py +++ b/tests/device_tests/bitcoin/test_signtx.py @@ -23,6 +23,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import Cancelled, TrezorFailure from trezorlib.tools import H_, parse_path +from ...common import is_core from ...input_flows import ( InputFlowLockTimeBlockHeight, InputFlowLockTimeDatetime, @@ -127,13 +128,12 @@ def test_one_one_fee(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_0dac36), @@ -181,13 +181,12 @@ def test_testnet_one_two_fee(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -232,13 +231,12 @@ def test_testnet_fee_high_warning(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.FeeOverThreshold), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -285,14 +283,13 @@ def test_one_two_fee(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_50f6f1), @@ -348,16 +345,15 @@ def test_one_three_fee(client: Client, chunkify: bool): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(2), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -420,7 +416,6 @@ def test_two_two(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), @@ -428,7 +423,7 @@ def test_two_two(client: Client): request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_ac4ca0), @@ -565,13 +560,12 @@ def test_lots_of_change(client: Client): request_change_outputs = [request_output(i + 1) for i in range(cnt)] with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), ] + request_change_outputs + [ @@ -617,13 +611,12 @@ def test_fee_high_warning(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.FeeOverThreshold), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -706,13 +699,12 @@ def test_not_enough_funds(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.Failure(code=messages.FailureType.NotEnoughFunds), ] ) @@ -737,13 +729,12 @@ def test_p2sh(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_58d56a), @@ -825,7 +816,6 @@ def test_attack_change_outputs(client: Client): # Test if the transaction can be signed normally with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), @@ -833,7 +823,7 @@ def test_attack_change_outputs(client: Client): request_output(0), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_ac4ca0), @@ -993,14 +983,13 @@ def test_attack_change_input_address(client: Client): # Now run the attack, must trigger the exception with client: - is_core = client.features.model in ("T", "Safe 3") client.set_filter(messages.TxAck, attack_processor) client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -1045,13 +1034,12 @@ def test_spend_coinbase(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(FAKE_TXHASH_005f6f), @@ -1104,13 +1092,12 @@ def test_two_changes(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), request_output(2), messages.ButtonRequest(code=B.SignTx), @@ -1164,13 +1151,12 @@ def test_change_on_main_chain_allowed(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -1429,13 +1415,12 @@ def test_lock_time(client: Client, lock_time: int, sequence: int): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), messages.ButtonRequest(code=B.SignTx), request_input(0), diff --git a/tests/device_tests/bitcoin/test_signtx_external.py b/tests/device_tests/bitcoin/test_signtx_external.py index 76ef1beaf..8bd657a28 100644 --- a/tests/device_tests/bitcoin/test_signtx_external.py +++ b/tests/device_tests/bitcoin/test_signtx_external.py @@ -22,6 +22,7 @@ from trezorlib.exceptions import TrezorFailure from trezorlib.messages import SafetyCheckLevel from trezorlib.tools import parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( assert_tx_matches, @@ -216,20 +217,19 @@ def test_p2wpkh_in_p2sh_presigned(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(2), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_20912f), @@ -268,20 +268,19 @@ def test_p2wpkh_in_p2sh_presigned(client: Client): # Test corrupted script hash in scriptsig. inp1.script_sig[10] ^= 1 with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(2), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_20912f), @@ -401,14 +400,13 @@ def test_p2wsh_external_presigned(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_ec16dc), @@ -447,14 +445,13 @@ def test_p2wsh_external_presigned(client: Client): # Test corrupted signature in witness. inp2.witness[10] ^= 1 with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_ec16dc), @@ -513,14 +510,13 @@ def test_p2tr_external_presigned(client: Client): script_type=messages.OutputScriptType.PAYTOTAPROOT, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(1), @@ -546,14 +542,13 @@ def test_p2tr_external_presigned(client: Client): # Test corrupted signature in witness. inp2.witness[10] ^= 1 with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(1), @@ -617,17 +612,16 @@ def test_p2wpkh_with_proof(client: Client): with client: is_t1 = client.features.model == "1" - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_e5b7e2), @@ -711,14 +705,13 @@ def test_p2tr_with_proof(client: Client): with client: is_t1 = client.features.model == "1" - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_input(1), diff --git a/tests/device_tests/bitcoin/test_signtx_replacement.py b/tests/device_tests/bitcoin/test_signtx_replacement.py index 08ce57630..4e9cea962 100644 --- a/tests/device_tests/bitcoin/test_signtx_replacement.py +++ b/tests/device_tests/bitcoin/test_signtx_replacement.py @@ -21,6 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( request_finished, @@ -115,8 +116,6 @@ def test_p2pkh_fee_bump(client: Client): orig_index=1, ) - is_core = client.features.model in ("T", "Safe 3") - with client: client.set_expected_responses( [ @@ -133,7 +132,7 @@ def test_p2pkh_fee_bump(client: Client): request_meta(TXHASH_beafc7), request_input(0, TXHASH_beafc7), request_output(0, TXHASH_beafc7), - (is_core, request_orig_input(0, TXHASH_50f6f1)), + (is_core(client), request_orig_input(0, TXHASH_50f6f1)), request_orig_input(0, TXHASH_50f6f1), request_orig_output(0, TXHASH_50f6f1), request_orig_output(1, TXHASH_50f6f1), diff --git a/tests/device_tests/bitcoin/test_signtx_segwit.py b/tests/device_tests/bitcoin/test_signtx_segwit.py index 65f7709a3..967ecfe51 100644 --- a/tests/device_tests/bitcoin/test_signtx_segwit.py +++ b/tests/device_tests/bitcoin/test_signtx_segwit.py @@ -21,6 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( assert_tx_matches, @@ -66,16 +67,15 @@ def test_send_p2sh(client: Client, chunkify: bool): amount=123_456_789 - 11_000 - 12_300_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_20912f), @@ -125,13 +125,12 @@ def test_send_p2sh_change(client: Client): amount=123_456_789 - 11_000 - 12_300_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -181,13 +180,12 @@ def test_testnet_segwit_big_amount(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(prev_hash), @@ -239,12 +237,11 @@ def test_send_multisig_1(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) - is_core = client.features.model in ("T", "Safe 3") expected_responses = [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_338e2d), @@ -307,17 +304,16 @@ def test_attack_change_input_address(client: Client): # Test if the transaction can be signed normally. with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), # The user is required to confirm transfer to another account. messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_20912f), @@ -387,17 +383,19 @@ def test_attack_mixed_inputs(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) - is_core = client.features.model in ("T", "Safe 3") expected_responses = [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput), ( - is_core, + is_core(client), messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput), ), - (is_core, messages.ButtonRequest(code=messages.ButtonRequestType.SignTx)), + ( + is_core(client), + messages.ButtonRequest(code=messages.ButtonRequestType.SignTx), + ), messages.ButtonRequest(code=messages.ButtonRequestType.FeeOverThreshold), messages.ButtonRequest(code=messages.ButtonRequestType.SignTx), request_input(0), diff --git a/tests/device_tests/bitcoin/test_signtx_segwit_native.py b/tests/device_tests/bitcoin/test_signtx_segwit_native.py index 3360999d0..ef350151c 100644 --- a/tests/device_tests/bitcoin/test_signtx_segwit_native.py +++ b/tests/device_tests/bitcoin/test_signtx_segwit_native.py @@ -21,6 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import H_, parse_path from ...bip32 import deserialize +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( assert_tx_matches, @@ -81,16 +82,15 @@ def test_send_p2sh(client: Client): amount=123_456_789 - 11_000 - 12_300_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_20912f), @@ -137,13 +137,12 @@ def test_send_p2sh_change(client: Client): amount=123_456_789 - 11_000 - 12_300_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -191,16 +190,15 @@ def test_send_native(client: Client): amount=100_000 - 40_000 - 10_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_b36780), @@ -279,13 +277,12 @@ def test_send_native_change(client: Client): amount=100_000 - 40_000 - 10_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -347,22 +344,20 @@ def test_send_both(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(2), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), - (is_core, messages.ButtonRequest(code=B.SignTx)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.SignTx)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_65047a), @@ -433,12 +428,11 @@ def test_send_multisig_1(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) - is_core = client.features.model in ("T", "Safe 3") expected_responses = [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_b9abfa), @@ -511,12 +505,11 @@ def test_send_multisig_2(client: Client): script_type=messages.OutputScriptType.PAYTOADDRESS, ) - is_core = client.features.model in ("T", "Safe 3") expected_responses = [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_b9abfa), @@ -596,13 +589,12 @@ def test_send_multisig_3_change(client: Client): script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, ) - is_core = client.features.model in ("T", "Safe 3") expected_responses = [ request_input(0), request_output(0), messages.ButtonRequest(code=B.UnknownDerivationPath), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_b9abfa), @@ -683,13 +675,12 @@ def test_send_multisig_4_change(client: Client): script_type=messages.OutputScriptType.PAYTOWITNESS, ) - is_core = client.features.model in ("T", "Safe 3") expected_responses = [ request_input(0), request_output(0), messages.ButtonRequest(code=B.UnknownDerivationPath), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_b9abfa), @@ -785,18 +776,17 @@ def test_multisig_mismatch_inputs_single(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), # Ensure that the multisig output is not identified as a change output. messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_1c022d), diff --git a/tests/device_tests/bitcoin/test_signtx_taproot.py b/tests/device_tests/bitcoin/test_signtx_taproot.py index cd2bbcb8a..b7300f429 100644 --- a/tests/device_tests/bitcoin/test_signtx_taproot.py +++ b/tests/device_tests/bitcoin/test_signtx_taproot.py @@ -21,6 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( assert_tx_matches, @@ -79,13 +80,12 @@ def test_send_p2tr(client: Client, chunkify: bool): script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_output(0), @@ -134,14 +134,13 @@ def test_send_two_with_change(client: Client): amount=6_800 + 13_000 - 200 - 15_000, ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.SignTx), request_input(0), @@ -224,8 +223,6 @@ def test_send_mixed(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ # process inputs @@ -236,19 +233,19 @@ def test_send_mixed(client: Client): # approve outputs request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(1), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(2), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), request_output(3), messages.ButtonRequest(code=B.ConfirmOutput), request_output(4), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), - (is_core, messages.ButtonRequest(code=B.SignTx)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.SignTx)), messages.ButtonRequest(code=B.SignTx), # verify inputs request_input(0), @@ -358,8 +355,6 @@ def test_attack_script_type(client: Client): return msg with client: - is_core = client.features.model in ("T", "Safe 3") - is_core = client.features.model in ("T", "Safe 3") client.set_filter(messages.TxAck, attack_processor) client.set_expected_responses( [ @@ -367,8 +362,8 @@ def test_attack_script_type(client: Client): request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), - (is_core, messages.ButtonRequest(code=B.SignTx)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.SignTx)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_input(1), diff --git a/tests/device_tests/bitcoin/test_zcash.py b/tests/device_tests/bitcoin/test_zcash.py index 36f372989..caf7b7725 100644 --- a/tests/device_tests/bitcoin/test_zcash.py +++ b/tests/device_tests/bitcoin/test_zcash.py @@ -21,6 +21,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path +from ...common import is_core from ...tx_cache import TxCache from .signtx import ( request_extra_data, @@ -106,13 +107,12 @@ def test_one_one_fee_sapling(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_e38206), @@ -260,14 +260,13 @@ def test_external_presigned(client: Client): ) with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ request_input(0), request_input(1), request_output(0), messages.ButtonRequest(code=B.ConfirmOutput), - (is_core, messages.ButtonRequest(code=B.ConfirmOutput)), + (is_core(client), messages.ButtonRequest(code=B.ConfirmOutput)), messages.ButtonRequest(code=B.SignTx), request_input(0), request_meta(TXHASH_e38206), diff --git a/tests/device_tests/cardano/test_sign_tx.py b/tests/device_tests/cardano/test_sign_tx.py index 7b016227d..12668727a 100644 --- a/tests/device_tests/cardano/test_sign_tx.py +++ b/tests/device_tests/cardano/test_sign_tx.py @@ -16,7 +16,7 @@ import pytest -from trezorlib import cardano, device, messages +from trezorlib import cardano, device, messages, models from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure @@ -33,11 +33,13 @@ def show_details_input_flow(client: Client): yield client.debug.wait_layout() # Clicking for model T, pressing right for model R - if client.features.model == "T": + if client.model in (models.T2T1, models.T3T1): SHOW_ALL_BUTTON_POSITION = (143, 167) client.debug.click(SHOW_ALL_BUTTON_POSITION) - elif client.features.model == "Safe 3": + elif client.model is models.T2B1: client.debug.press_yes() + else: + raise NotImplementedError # reset ui flow to continue "automatically" client.ui.input_flow = None yield diff --git a/tests/device_tests/eos/test_get_public_key.py b/tests/device_tests/eos/test_get_public_key.py index cda429ab1..ef5a66786 100644 --- a/tests/device_tests/eos/test_get_public_key.py +++ b/tests/device_tests/eos/test_get_public_key.py @@ -28,6 +28,7 @@ from ...input_flows import InputFlowShowXpubQRCode @pytest.mark.eos @pytest.mark.skip_t1 @pytest.mark.skip_tr # coin not supported +@pytest.mark.skip_t3t1 @pytest.mark.setup_client(mnemonic=MNEMONIC12) def test_eos_get_public_key(client: Client): with client: diff --git a/tests/device_tests/eos/test_signtx.py b/tests/device_tests/eos/test_signtx.py index 803fdb033..036bb31c4 100644 --- a/tests/device_tests/eos/test_signtx.py +++ b/tests/device_tests/eos/test_signtx.py @@ -31,6 +31,7 @@ pytestmark = [ pytest.mark.eos, pytest.mark.skip_t1, pytest.mark.skip_tr, # coin not supported + pytest.mark.skip_t3t1, pytest.mark.setup_client(mnemonic=MNEMONIC12), ] diff --git a/tests/device_tests/ethereum/test_definitions.py b/tests/device_tests/ethereum/test_definitions.py index b3ff6ad8d..6f2a0cef0 100644 --- a/tests/device_tests/ethereum/test_definitions.py +++ b/tests/device_tests/ethereum/test_definitions.py @@ -199,7 +199,8 @@ METHODS = ( _call_signmessage, pytest.param(_call_sign_typed_data, marks=pytest.mark.skip_t1), pytest.param( - _call_sign_typed_data_hash, marks=[pytest.mark.skip_t2, pytest.mark.skip_tr] + _call_sign_typed_data_hash, + marks=[pytest.mark.skip_t2, pytest.mark.skip_tr, pytest.mark.skip_t3t1], ), ) diff --git a/tests/device_tests/ethereum/test_getpublickey.py b/tests/device_tests/ethereum/test_getpublickey.py index c244f4c88..5c5af044f 100644 --- a/tests/device_tests/ethereum/test_getpublickey.py +++ b/tests/device_tests/ethereum/test_getpublickey.py @@ -46,6 +46,7 @@ def test_slip25_disallowed(client: Client): @pytest.mark.skip_t2 @pytest.mark.skip_tr +@pytest.mark.skip_t3t1 def test_legacy_restrictions(client: Client): path = parse_path("m/46'") with pytest.raises(TrezorFailure, match="Invalid path for EthereumGetPublicKey"): diff --git a/tests/device_tests/ethereum/test_sign_typed_data.py b/tests/device_tests/ethereum/test_sign_typed_data.py index 0293d4f80..700811273 100644 --- a/tests/device_tests/ethereum/test_sign_typed_data.py +++ b/tests/device_tests/ethereum/test_sign_typed_data.py @@ -43,6 +43,7 @@ def test_ethereum_sign_typed_data(client: Client, parameters, result): @pytest.mark.skip_t2 @pytest.mark.skip_tr +@pytest.mark.skip_t3t1 @parametrize_using_common_fixtures("ethereum/sign_typed_data.json") def test_ethereum_sign_typed_data_blind(client: Client, parameters, result): with client: diff --git a/tests/device_tests/ethereum/test_signtx.py b/tests/device_tests/ethereum/test_signtx.py index 0a1d9f00e..2e4adde17 100644 --- a/tests/device_tests/ethereum/test_signtx.py +++ b/tests/device_tests/ethereum/test_signtx.py @@ -16,7 +16,7 @@ import pytest -from trezorlib import ethereum, exceptions, messages +from trezorlib import ethereum, exceptions, messages, models from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.debuglink import message_filters from trezorlib.exceptions import TrezorFailure @@ -208,7 +208,7 @@ def test_data_streaming(client: Client): checked in vectorized function above. """ with client: - is_t1 = client.features.model == "1" + is_t1 = client.model is models.T1B1 client.set_expected_responses( [ messages.ButtonRequest(code=messages.ButtonRequestType.SignTx), diff --git a/tests/device_tests/nem/test_getaddress.py b/tests/device_tests/nem/test_getaddress.py index af33e88f3..c478a9a38 100644 --- a/tests/device_tests/nem/test_getaddress.py +++ b/tests/device_tests/nem/test_getaddress.py @@ -26,6 +26,7 @@ from ...common import MNEMONIC12 @pytest.mark.altcoin @pytest.mark.nem @pytest.mark.skip_tr # coin not supported, +@pytest.mark.skip_t3t1 @pytest.mark.setup_client(mnemonic=MNEMONIC12) @pytest.mark.parametrize("chunkify", (True, False)) def test_nem_getaddress(client: Client, chunkify: bool): diff --git a/tests/device_tests/nem/test_signtx_mosaics.py b/tests/device_tests/nem/test_signtx_mosaics.py index 6c07c9d37..0b85bbb80 100644 --- a/tests/device_tests/nem/test_signtx_mosaics.py +++ b/tests/device_tests/nem/test_signtx_mosaics.py @@ -28,6 +28,7 @@ pytestmark = [ pytest.mark.altcoin, pytest.mark.nem, pytest.mark.skip_tr, # coin not supported, + pytest.mark.skip_t3t1, pytest.mark.setup_client(mnemonic=MNEMONIC12), ] diff --git a/tests/device_tests/nem/test_signtx_multisig.py b/tests/device_tests/nem/test_signtx_multisig.py index 3efa7352a..c31b613fa 100644 --- a/tests/device_tests/nem/test_signtx_multisig.py +++ b/tests/device_tests/nem/test_signtx_multisig.py @@ -26,6 +26,7 @@ pytestmark = [ pytest.mark.altcoin, pytest.mark.nem, pytest.mark.skip_tr, # coin not supported, + pytest.mark.skip_t3t1, pytest.mark.setup_client(mnemonic=MNEMONIC12), ] diff --git a/tests/device_tests/nem/test_signtx_others.py b/tests/device_tests/nem/test_signtx_others.py index bfd357bd7..45be5e045 100644 --- a/tests/device_tests/nem/test_signtx_others.py +++ b/tests/device_tests/nem/test_signtx_others.py @@ -26,6 +26,7 @@ pytestmark = [ pytest.mark.altcoin, pytest.mark.nem, pytest.mark.skip_tr, # coin not supported, + pytest.mark.skip_t3t1, pytest.mark.setup_client(mnemonic=MNEMONIC12), ] diff --git a/tests/device_tests/nem/test_signtx_transfers.py b/tests/device_tests/nem/test_signtx_transfers.py index 5aca8726b..b47437db0 100644 --- a/tests/device_tests/nem/test_signtx_transfers.py +++ b/tests/device_tests/nem/test_signtx_transfers.py @@ -20,12 +20,13 @@ from trezorlib import messages, nem from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path -from ...common import MNEMONIC12 +from ...common import MNEMONIC12, is_core pytestmark = [ pytest.mark.altcoin, pytest.mark.nem, pytest.mark.skip_tr, # coin not supported, + pytest.mark.skip_t3t1, pytest.mark.setup_client(mnemonic=MNEMONIC12), ] @@ -33,7 +34,6 @@ pytestmark = [ # assertion data from T1 @pytest.mark.parametrize("chunkify", (True, False)) def test_nem_signtx_simple(client: Client, chunkify: bool): - is_core = client.features.model in ("T", "Safe 3") with client: client.set_expected_responses( [ @@ -42,7 +42,7 @@ def test_nem_signtx_simple(client: Client, chunkify: bool): # Unencrypted message messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput), ( - is_core, + is_core(client), messages.ButtonRequest( code=messages.ButtonRequestType.ConfirmOutput ), @@ -85,7 +85,6 @@ def test_nem_signtx_simple(client: Client, chunkify: bool): @pytest.mark.setup_client(mnemonic=MNEMONIC12) def test_nem_signtx_encrypted_payload(client: Client): with client: - is_core = client.features.model in ("T", "Safe 3") client.set_expected_responses( [ # Confirm transfer and network fee @@ -93,7 +92,7 @@ def test_nem_signtx_encrypted_payload(client: Client): # Ask for encryption messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput), ( - is_core, + is_core(client), messages.ButtonRequest( code=messages.ButtonRequestType.ConfirmOutput ), diff --git a/tests/device_tests/reset_recovery/test_recovery_bip39_dryrun.py b/tests/device_tests/reset_recovery/test_recovery_bip39_dryrun.py index 70ca3e75c..3c2508a94 100644 --- a/tests/device_tests/reset_recovery/test_recovery_bip39_dryrun.py +++ b/tests/device_tests/reset_recovery/test_recovery_bip39_dryrun.py @@ -82,6 +82,7 @@ def test_seed_mismatch(client: Client): @pytest.mark.skip_t2 @pytest.mark.skip_tr +@pytest.mark.skip_t3t1 def test_invalid_seed_t1(client: Client): with pytest.raises(exceptions.TrezorFailure, match="Invalid seed"): do_recover(client, ["stick"] * 12) diff --git a/tests/device_tests/reset_recovery/test_recovery_bip39_t1.py b/tests/device_tests/reset_recovery/test_recovery_bip39_t1.py index 6c915e93c..bbdd0c373 100644 --- a/tests/device_tests/reset_recovery/test_recovery_bip39_t1.py +++ b/tests/device_tests/reset_recovery/test_recovery_bip39_t1.py @@ -25,7 +25,7 @@ from ...common import MNEMONIC12 PIN4 = "1234" PIN6 = "789456" -pytestmark = [pytest.mark.skip_t2, pytest.mark.skip_tr] +pytestmark = [pytest.mark.skip_t2, pytest.mark.skip_tr, pytest.mark.skip_t3t1] @pytest.mark.setup_client(uninitialized=True) diff --git a/tests/device_tests/reset_recovery/test_reset_bip39_skipbackup.py b/tests/device_tests/reset_recovery/test_reset_bip39_skipbackup.py index 70c9c3db1..29b5f144b 100644 --- a/tests/device_tests/reset_recovery/test_reset_bip39_skipbackup.py +++ b/tests/device_tests/reset_recovery/test_reset_bip39_skipbackup.py @@ -22,7 +22,7 @@ from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import EXTERNAL_ENTROPY, generate_entropy -pytestmark = [pytest.mark.skip_t2, pytest.mark.skip_tr] +pytestmark = [pytest.mark.skip_t2, pytest.mark.skip_tr, pytest.mark.skip_t3t1] STRENGTH = 128 diff --git a/tests/device_tests/reset_recovery/test_reset_bip39_t1.py b/tests/device_tests/reset_recovery/test_reset_bip39_t1.py index ed2ff8f12..01ca7ef18 100644 --- a/tests/device_tests/reset_recovery/test_reset_bip39_t1.py +++ b/tests/device_tests/reset_recovery/test_reset_bip39_t1.py @@ -23,7 +23,7 @@ from trezorlib.tools import parse_path from ...common import EXTERNAL_ENTROPY, generate_entropy -pytestmark = [pytest.mark.skip_t2, pytest.mark.skip_tr] +pytestmark = [pytest.mark.skip_t2, pytest.mark.skip_tr, pytest.mark.skip_t3t1] def reset_device(client: Client, strength: int): diff --git a/tests/device_tests/test_authenticate_device.py b/tests/device_tests/test_authenticate_device.py index 04dbee3db..7d1e9b6da 100644 --- a/tests/device_tests/test_authenticate_device.py +++ b/tests/device_tests/test_authenticate_device.py @@ -16,6 +16,7 @@ ROOT_PUBLIC_KEY = bytes.fromhex( ) +@pytest.mark.skip_t3t1 # FIXME https://github.com/trezor/trezor-firmware/issues/3596 @pytest.mark.parametrize( "challenge", ( diff --git a/tests/device_tests/test_bip32_speed.py b/tests/device_tests/test_bip32_speed.py index aee9cf8ce..82e365c47 100644 --- a/tests/device_tests/test_bip32_speed.py +++ b/tests/device_tests/test_bip32_speed.py @@ -26,6 +26,7 @@ from trezorlib.tools import H_ pytestmark = [ pytest.mark.skip_t2, pytest.mark.skip_tr, + pytest.mark.skip_t3t1, pytest.mark.flaky(max_runs=5), ] diff --git a/tests/device_tests/test_busy_state.py b/tests/device_tests/test_busy_state.py index c81ac9843..23c354a0d 100644 --- a/tests/device_tests/test_busy_state.py +++ b/tests/device_tests/test_busy_state.py @@ -27,7 +27,7 @@ PIN = "1234" def _assert_busy(client: Client, should_be_busy: bool, screen: str = "Homescreen"): assert client.features.busy is should_be_busy - if client.debug.model in ("T", "Safe 3"): + if client.model in (models.T2T1, models.T2B1, models.T3T1): if should_be_busy: assert "CoinJoinProgress" in client.debug.read_layout().all_components() else: diff --git a/tests/device_tests/test_debuglink.py b/tests/device_tests/test_debuglink.py index 492ec0590..16c093186 100644 --- a/tests/device_tests/test_debuglink.py +++ b/tests/device_tests/test_debuglink.py @@ -26,6 +26,7 @@ from ..common import MNEMONIC12 @pytest.mark.skip_t2 @pytest.mark.skip_tr +@pytest.mark.skip_t3t1 def test_layout(client: Client): layout = client.debug.state().layout assert len(layout) == 1024 @@ -33,6 +34,7 @@ def test_layout(client: Client): @pytest.mark.skip_t2 @pytest.mark.skip_tr +@pytest.mark.skip_t3t1 @pytest.mark.setup_client(mnemonic=MNEMONIC12) def test_mnemonic(client: Client): client.ensure_unlocked() @@ -42,6 +44,7 @@ def test_mnemonic(client: Client): @pytest.mark.skip_t2 @pytest.mark.skip_tr +@pytest.mark.skip_t3t1 @pytest.mark.setup_client(mnemonic=MNEMONIC12, pin="1234", passphrase="") def test_pin(client: Client): resp = client.call_raw(messages.GetAddress(address_n=parse_path("m/44'/0'/0'/0/0"))) diff --git a/tests/device_tests/test_firmware_hash.py b/tests/device_tests/test_firmware_hash.py index ea6e32336..3c16b0814 100644 --- a/tests/device_tests/test_firmware_hash.py +++ b/tests/device_tests/test_firmware_hash.py @@ -2,13 +2,15 @@ from hashlib import blake2s import pytest -from trezorlib import firmware +from trezorlib import firmware, models from trezorlib.debuglink import TrezorClientDebugLink as Client +# size of FIRMWARE_AREA, see core/embed/models/model_*_layout.c FIRMWARE_LENGTHS = { - "1": 7 * 128 * 1024 + 64 * 1024, - "T": 13 * 128 * 1024, - "Safe 3": 13 * 128 * 1024, + models.T1B1: 7 * 128 * 1024 + 64 * 1024, + models.T2T1: 13 * 128 * 1024, + models.T2B1: 13 * 128 * 1024, + models.T3T1: 208 * 8 * 1024, } @@ -16,7 +18,7 @@ def test_firmware_hash_emu(client: Client) -> None: if client.features.fw_vendor != "EMULATOR": pytest.skip("Only for emulator") - data = b"\xff" * FIRMWARE_LENGTHS[client.features.model] + data = b"\xff" * FIRMWARE_LENGTHS[client.model] expected_hash = blake2s(data).digest() hash = firmware.get_hash(client, None) @@ -34,7 +36,7 @@ def test_firmware_hash_hw(client: Client) -> None: # TODO get firmware image from outside the environment, check for actual result challenge = b"Hello Trezor" - empty_data = b"\xff" * FIRMWARE_LENGTHS[client.features.model] + empty_data = b"\xff" * FIRMWARE_LENGTHS[client.model] empty_hash = blake2s(empty_data).digest() empty_hash_challenge = blake2s(empty_data, key=challenge).digest() diff --git a/tests/device_tests/test_language.py b/tests/device_tests/test_language.py index c0c9a12cf..363185f62 100644 --- a/tests/device_tests/test_language.py +++ b/tests/device_tests/test_language.py @@ -27,7 +27,11 @@ from ..translations import LANGUAGES, build_and_sign_blob, get_lang_json, set_la pytestmark = pytest.mark.skip_t1 -MAX_DATA_LENGTH = {models.T2T1: 48 * 1024, models.T2B1: 32 * 1024} +MAX_DATA_LENGTH = { + models.T2T1: 48 * 1024, + models.T2B1: 32 * 1024, + models.T3T1: 256 * 1024, +} def get_ping_button(lang: str) -> str: @@ -59,7 +63,7 @@ def _check_ping_screen_texts(client: Client, title: str, right_button: str) -> N client.debug.press_yes() # TT does not have a right button text (but a green OK tick) - if client.features.model == "T": + if client.model in (models.T2T1, models.T3T1): right_button = "-" with client: diff --git a/tests/device_tests/test_msg_applysettings.py b/tests/device_tests/test_msg_applysettings.py index 2b324d39c..609a70cb0 100644 --- a/tests/device_tests/test_msg_applysettings.py +++ b/tests/device_tests/test_msg_applysettings.py @@ -135,6 +135,7 @@ def test_apply_settings_passphrase_on_device(client: Client): @pytest.mark.skip_t1 @pytest.mark.skip_t2 +@pytest.mark.skip_t3t1 def test_apply_homescreen_tr_toif_good(client: Client): with client: _set_expected_responses(client) @@ -147,6 +148,7 @@ def test_apply_homescreen_tr_toif_good(client: Client): @pytest.mark.skip_t1 @pytest.mark.skip_t2 +@pytest.mark.skip_t3t1 @pytest.mark.setup_client(pin=None) # so that "PIN NOT SET" is shown in the header def test_apply_homescreen_tr_toif_with_notification(client: Client): with client: @@ -156,6 +158,7 @@ def test_apply_homescreen_tr_toif_with_notification(client: Client): @pytest.mark.skip_t1 @pytest.mark.skip_t2 +@pytest.mark.skip_t3t1 def test_apply_homescreen_tr_toif_with_long_label(client: Client): with client: _set_expected_responses(client) @@ -172,6 +175,7 @@ def test_apply_homescreen_tr_toif_with_long_label(client: Client): @pytest.mark.skip_t1 @pytest.mark.skip_t2 +@pytest.mark.skip_t3t1 def test_apply_homescreen_tr_toif_wrong_size(client: Client): # 64x64 img img = b"TOIG@\x00@\x009\x02\x00\x00}R\xdb\x81$A\x08\"\x03\xf3\xcf\xd2\x0c<\x01-{\xefc\xe6\xd5\xbbU\xa2\x08T\xd6\xcfw\xf4\xe7\xc7\xb7X\xf1\xe3\x1bl\xf0\xf7\x1b\xf8\x1f\xcf\xe7}\xe1\x83\xcf|>\x8d%\x14\xa5\xb3\xe9p5\xa1;~4:\xcd\xe0&\x11\x1d\xe9\xf6\xa1\x1fw\xf54\x95eWx\xda\xd0u\x91\x86\xb8\xbc\xdf\xdc\x008f\x15\xc6\xf6\x7f\xf0T\xb8\xc1\xa3\xc5_A\xc0G\x930\xe7\xdc=\xd5\xa7\xc1\xbcI\x16\xb8s\x9c&\xaa\x06\xc1}\x8b\x19\x9d'c\xc3\xe3^\xc3m\xb6n\xb0(\x16\xf6\xdeg\xb3\x96:i\xe5\x9c\x02\x93\x9fF\x9f-\xa7\"w\xf3X\x9f\x87\x08\x84\"v,\xab!9: str | None: - return self.client.features.model + def model(self) -> str | models.TrezorModel: + return self.client.model def get(self) -> Callable[[], BRGeneratorType]: self.client.watch_layout(True) @@ -53,10 +53,12 @@ class InputFlowBase: # There could be one common input flow for all models if hasattr(self, "input_flow_common"): return getattr(self, "input_flow_common") - elif self.model() == "T": + elif self.model() is models.T2T1: return self.input_flow_tt - elif self.model() == "Safe 3": + elif self.model() is models.T2B1: return self.input_flow_tr + elif self.model() is models.T3T1: + return self.input_flow_t3t1 else: raise ValueError("Unknown model") @@ -68,6 +70,10 @@ class InputFlowBase: """Special for TR""" raise NotImplementedError + def input_flow_t3t1(self) -> BRGeneratorType: + """Special for T3T1""" + raise NotImplementedError + def text_content(self) -> str: return self.debug.wait_layout().text_content() @@ -91,7 +97,7 @@ class InputFlowSetupDevicePINWIpeCode(InputFlowBase): yield # do you want to set/change the wipe code? self.debug.press_yes() - if self.debug.model == "Safe 3": + if self.model() is models.T2B1: yield from swipe_if_necessary(self.debug) # wipe code info self.debug.press_yes() @@ -120,7 +126,7 @@ class InputFlowNewCodeMismatch(InputFlowBase): yield # do you want to set/change the pin/wipe code? self.debug.press_yes() - if self.debug.model == "Safe 3": + if self.model() is models.T2B1: yield from swipe_if_necessary(self.debug) # code info self.debug.press_yes() @@ -247,6 +253,28 @@ class InputFlowSignMessagePagination(InputFlowBase): yield self.debug.press_yes() + def input_flow_t3t1(self) -> BRGeneratorType: + # collect screen contents into `message_read`. + # Using a helper debuglink function to assemble the final text. + layouts: list[LayoutContent] = [] + + br = yield # confirm address + self.debug.wait_layout() + self.debug.press_yes() + + br = yield + assert br.pages is not None + for i in range(br.pages): + layout = self.debug.wait_layout() + layouts.append(layout) + + if i < br.pages - 1: + self.debug.swipe_up() + + self.message_read = multipage_content(layouts) + + self.debug.press_yes() + class InputFlowSignMessageInfo(InputFlowBase): def __init__(self, client: Client): @@ -269,6 +297,23 @@ class InputFlowSignMessageInfo(InputFlowBase): self.debug.press_no(wait=True) self.debug.press_yes(wait=True) + def input_flow_t3t1(self) -> BRGeneratorType: + yield + # show address/message info + self.debug.click(buttons.CORNER_BUTTON, wait=True) + self.debug.click(buttons.CORNER_BUTTON, wait=True) + self.debug.press_no(wait=True) + self.debug.synchronize_at("IconDialog") + # address mismatch? + self.debug.press_no() + yield + self.debug.press_yes() + yield + self.debug.press_no() + yield + self.debug.press_no(wait=True) + self.debug.press_yes(wait=True) + class InputFlowShowAddressQRCode(InputFlowBase): def __init__(self, client: Client): @@ -309,6 +354,20 @@ class InputFlowShowAddressQRCode(InputFlowBase): self.debug.press_right() self.debug.press_middle() + def input_flow_t3t1(self) -> BRGeneratorType: + yield + self.debug.click(buttons.CORNER_BUTTON, wait=True) + # synchronize; TODO get rid of this once we have single-global-layout + self.debug.synchronize_at("SimplePage") + + self.debug.swipe_left(wait=True) + self.debug.swipe_right(wait=True) + self.debug.swipe_left(wait=True) + self.debug.click(buttons.CORNER_BUTTON, wait=True) + self.debug.press_no(wait=True) + self.debug.press_no(wait=True) + self.debug.press_yes() + class InputFlowShowAddressQRCodeCancel(InputFlowBase): def __init__(self, client: Client): @@ -340,6 +399,17 @@ class InputFlowShowAddressQRCodeCancel(InputFlowBase): self.debug.press_right() self.debug.press_right() + def input_flow_t3t1(self) -> BRGeneratorType: + yield + self.debug.click(buttons.CORNER_BUTTON, wait=True) + # synchronize; TODO get rid of this once we have single-global-layout + self.debug.synchronize_at("SimplePage") + + self.debug.swipe_left(wait=True) + self.debug.click(buttons.CORNER_BUTTON, wait=True) + self.debug.press_no(wait=True) + self.debug.press_yes() + class InputFlowShowMultisigXPUBs(InputFlowBase): def __init__(self, client: Client, address: str, xpubs: list[str], index: int): @@ -422,6 +492,40 @@ class InputFlowShowMultisigXPUBs(InputFlowBase): # show address self.debug.press_middle() + def input_flow_t3t1(self) -> BRGeneratorType: + yield # multisig address warning + self.debug.press_yes() + + yield # show address + layout = self.debug.wait_layout() + TR.assert_in(layout.title(), "address__title_receive_address") + assert "(MULTISIG)" in layout.title() + assert layout.text_content().replace(" ", "") == self.address + + self.debug.click(buttons.CORNER_BUTTON) + assert "Qr" in self.all_components() + + layout = self.debug.swipe_left(wait=True) + # address details + assert "Multisig 2 of 3" in layout.screen_content() + TR.assert_in(layout.screen_content(), "address_details__derivation_path") + + # Three xpub pages with the same testing logic + for xpub_num in range(3): + expected_title = f"MULTISIG XPUB #{xpub_num + 1}" + layout = self.debug.swipe_left(wait=True) + assert expected_title in layout.title() + content = layout.text_content().replace(" ", "") + assert self.xpubs[xpub_num] in content + + self.debug.click(buttons.CORNER_BUTTON, wait=True) + # show address + self.debug.press_no(wait=True) + # address mismatch + self.debug.press_no(wait=True) + # show address + self.debug.press_yes() + class InputFlowShowXpubQRCode(InputFlowBase): def __init__(self, client: Client, passphrase: bool = False): @@ -482,6 +586,33 @@ class InputFlowShowXpubQRCode(InputFlowBase): # Confirm self.debug.press_middle() + def input_flow_t3t1(self) -> BRGeneratorType: + if self.passphrase: + yield + self.debug.press_yes() + yield + self.debug.press_yes() + + br = yield + layout = self.debug.wait_layout() + if "coinjoin" in layout.title().lower() or br.code == B.UnknownDerivationPath: + self.debug.press_yes() + br = yield + + self.debug.click(buttons.CORNER_BUTTON, wait=True) + # synchronize; TODO get rid of this once we have single-global-layout + self.debug.synchronize_at("SimplePage") + + self.debug.swipe_left(wait=True) + self.debug.swipe_right(wait=True) + self.debug.swipe_left(wait=True) + self.debug.click(buttons.CORNER_BUTTON, wait=True) + self.debug.press_no(wait=True) + self.debug.press_no(wait=True) + for _ in range(br.pages - 1): + self.debug.swipe_up(wait=True) + self.debug.press_yes() + class InputFlowPaymentRequestDetails(InputFlowBase): def __init__(self, client: Client, outputs: list[messages.TxOutputType]): @@ -512,6 +643,30 @@ class InputFlowPaymentRequestDetails(InputFlowBase): yield # confirm transaction self.debug.press_yes() + def input_flow_t3t1(self) -> BRGeneratorType: + yield # request to see details + self.debug.wait_layout() + self.debug.press_info() + + yield # confirm first output + assert self.outputs[0].address[:16] in self.text_content() # type: ignore + self.debug.press_yes() + yield # confirm first output + self.debug.wait_layout() + self.debug.press_yes() + + yield # confirm second output + assert self.outputs[1].address[:16] in self.text_content() # type: ignore + self.debug.press_yes() + yield # confirm second output + self.debug.wait_layout() + self.debug.press_yes() + + yield # confirm transaction + self.debug.press_yes() + yield # confirm transaction + self.debug.press_yes() + class InputFlowSignTxHighFee(InputFlowBase): def __init__(self, client: Client): @@ -607,6 +762,11 @@ class InputFlowSignTxInformation(InputFlowBase): self.assert_content(content, "confirm_total__title_sending_from") self.debug.press_yes() + def input_flow_t3t1(self) -> BRGeneratorType: + content = yield from sign_tx_go_to_info(self.client) + self.assert_content(content, "confirm_total__sending_from_account") + self.debug.press_yes() + class InputFlowSignTxInformationMixed(InputFlowBase): def __init__(self, client: Client): @@ -636,6 +796,15 @@ class InputFlowSignTxInformationMixed(InputFlowBase): self.assert_content(content, "confirm_total__title_sending_from") self.debug.press_yes() + def input_flow_t3t1(self) -> BRGeneratorType: + # multiple accounts warning + yield + self.debug.press_yes() + + content = yield from sign_tx_go_to_info(self.client) + self.assert_content(content, "confirm_total__sending_from_account") + self.debug.press_yes() + class InputFlowSignTxInformationCancel(InputFlowBase): def __init__(self, client: Client): @@ -649,6 +818,10 @@ class InputFlowSignTxInformationCancel(InputFlowBase): yield from sign_tx_go_to_info_tr(self.client) self.debug.press_left() + def input_flow_t3t1(self) -> BRGeneratorType: + yield from sign_tx_go_to_info(self.client) + self.debug.press_no() + class InputFlowSignTxInformationReplacement(InputFlowBase): def __init__(self, client: Client): @@ -685,6 +858,23 @@ class InputFlowSignTxInformationReplacement(InputFlowBase): self.debug.press_right() yield + def input_flow_t3t1(self) -> BRGeneratorType: + yield # confirm txid + self.debug.press_yes() + yield # confirm address + self.debug.press_yes() + # go back to address + self.debug.press_no() + # confirm address + self.debug.press_yes() + yield # confirm amount + self.debug.press_yes() + + yield # transaction summary, press info + self.debug.click(buttons.CORNER_BUTTON, wait=True) + self.debug.click(buttons.CORNER_BUTTON, wait=True) + self.debug.press_yes() + def lock_time_input_flow_tt( debug: DebugLink, @@ -746,6 +936,11 @@ class InputFlowLockTimeBlockHeight(InputFlowBase): def input_flow_tr(self) -> BRGeneratorType: yield from lock_time_input_flow_tr(self.debug, self.assert_func) + def input_flow_t3t1(self) -> BRGeneratorType: + yield from lock_time_input_flow_tt( + self.debug, self.assert_func, double_confirm=True + ) + class InputFlowLockTimeDatetime(InputFlowBase): def __init__(self, client: Client, lock_time_str: str): @@ -763,6 +958,9 @@ class InputFlowLockTimeDatetime(InputFlowBase): def input_flow_tr(self) -> BRGeneratorType: yield from lock_time_input_flow_tr(self.debug, self.assert_func) + def input_flow_t3t1(self) -> BRGeneratorType: + yield from lock_time_input_flow_tt(self.debug, self.assert_func) + class InputFlowEIP712ShowMore(InputFlowBase): SHOW_MORE = (143, 167) @@ -773,9 +971,9 @@ class InputFlowEIP712ShowMore(InputFlowBase): def _confirm_show_more(self) -> None: """Model-specific, either clicks a screen or presses a button.""" - if self.model() == "T": + if self.model() in (models.T2T1, models.T3T1): self.debug.click(self.SHOW_MORE) - elif self.model() == "Safe 3": + elif self.model() is models.T2B1: self.debug.press_right() def input_flow_common(self) -> BRGeneratorType: @@ -1087,6 +1285,31 @@ class InputFlowSlip39BasicBackup(InputFlowBase): assert br.code == B.Success self.debug.press_yes() + def input_flow_t3t1(self) -> BRGeneratorType: + yield # 1. Checklist + self.debug.press_yes() + if self.click_info: + yield from click_info_button_tt(self.debug) + yield # 2. Number of shares (5) + self.debug.press_yes() + yield # 3. Checklist + self.debug.press_yes() + if self.click_info: + yield from click_info_button_tt(self.debug) + yield # 4. Threshold (3) + self.debug.press_yes() + yield # 5. Checklist + self.debug.press_yes() + yield # 6. Confirm show seeds + self.debug.press_yes() + + # Mnemonic phrases + self.mnemonics = yield from load_5_shares(self.debug) + + br = yield # Confirm backup + assert br.code == B.Success + self.debug.press_yes() + class InputFlowSlip39BasicResetRecovery(InputFlowBase): def __init__(self, client: Client): @@ -1140,6 +1363,24 @@ class InputFlowSlip39BasicResetRecovery(InputFlowBase): assert br.code == B.Success self.debug.press_yes() + def input_flow_t3t1(self) -> BRGeneratorType: + # 1. Confirm Reset + # 2. Backup your seed + # 3. Confirm warning + # 4. shares info + # 5. Set & Confirm number of shares + # 6. threshold info + # 7. Set & confirm threshold value + # 8. Confirm show seeds + yield from click_through(self.debug, screens=8, code=B.ResetDevice) + + # Mnemonic phrases + self.mnemonics = yield from load_5_shares(self.debug) + + br = yield # safety warning + assert br.code == B.Success + self.debug.press_yes() + def load_5_groups_5_shares( debug: DebugLink, @@ -1229,6 +1470,40 @@ class InputFlowSlip39AdvancedBackup(InputFlowBase): assert br.code == B.Success self.debug.press_yes() + def input_flow_t3t1(self) -> BRGeneratorType: + yield # 1. Checklist + self.debug.press_yes() + if self.click_info: + yield from click_info_button_tt(self.debug) + yield # 2. Set and confirm group count + self.debug.press_yes() + yield # 3. Checklist + self.debug.press_yes() + if self.click_info: + yield from click_info_button_tt(self.debug) + yield # 4. Set and confirm group threshold + self.debug.press_yes() + yield # 5. Checklist + self.debug.press_yes() + for _ in range(5): # for each of 5 groups + if self.click_info: + yield from click_info_button_tt(self.debug) + yield # Set & Confirm number of shares + self.debug.press_yes() + if self.click_info: + yield from click_info_button_tt(self.debug) + yield # Set & confirm share threshold value + self.debug.press_yes() + yield # Confirm show seeds + self.debug.press_yes() + + # Mnemonic phrases - show & confirm shares for all groups + self.mnemonics = yield from load_5_groups_5_shares(self.debug) + + br = yield # Confirm backup + assert br.code == B.Success + self.debug.press_yes() + class InputFlowSlip39AdvancedResetRecovery(InputFlowBase): def __init__(self, client: Client, click_info: bool): @@ -1291,6 +1566,27 @@ class InputFlowSlip39AdvancedResetRecovery(InputFlowBase): assert br.code == B.Success self.debug.press_yes() + def input_flow_t3t1(self) -> BRGeneratorType: + # 1. Confirm Reset + # 2. Backup your seed + # 3. Confirm warning + # 4. shares info + # 5. Set & Confirm number of groups + # 6. threshold info + # 7. Set & confirm group threshold value + # 8-17: for each of 5 groups: + # 1. Set & Confirm number of shares + # 2. Set & confirm share threshold value + # 18. Confirm show seeds + yield from click_through(self.debug, screens=18, code=B.ResetDevice) + + # Mnemonic phrases - show & confirm shares for all groups + self.mnemonics = yield from load_5_groups_5_shares(self.debug) + + br = yield # safety warning + assert br.code == B.Success + self.debug.press_yes() + class InputFlowBip39RecoveryDryRun(InputFlowBase): def __init__(self, client: Client, mnemonic: list[str], mismatch: bool = False): @@ -1377,7 +1673,7 @@ class InputFlowSlip39AdvancedRecoveryAbort(InputFlowBase): def input_flow_common(self) -> BRGeneratorType: yield from self.REC.confirm_recovery() - if self.debug.model == "T": + if self.model() in (models.T2T1, models.T3T1): yield from self.REC.input_number_of_words(20) yield from self.REC.abort_recovery(True) @@ -1390,7 +1686,7 @@ class InputFlowSlip39AdvancedRecoveryNoAbort(InputFlowBase): def input_flow_common(self) -> BRGeneratorType: yield from self.REC.confirm_recovery() - if self.debug.model == "T": + if self.model() in (models.T2T1, models.T3T1): yield from self.REC.input_number_of_words(self.word_count) yield from self.REC.abort_recovery(False) else: @@ -1489,7 +1785,7 @@ class InputFlowSlip39BasicRecoveryAbort(InputFlowBase): def input_flow_common(self) -> BRGeneratorType: yield from self.REC.confirm_recovery() - if self.debug.model == "T": + if self.model() in (models.T2T1, models.T3T1): yield from self.REC.input_number_of_words(20) yield from self.REC.abort_recovery(True) @@ -1503,7 +1799,7 @@ class InputFlowSlip39BasicRecoveryNoAbort(InputFlowBase): def input_flow_common(self) -> BRGeneratorType: yield from self.REC.confirm_recovery() - if self.debug.model == "T": + if self.model() in (models.T2T1, models.T3T1): yield from self.REC.input_number_of_words(self.word_count) yield from self.REC.abort_recovery(False) else: @@ -1605,11 +1901,11 @@ class InputFlowResetSkipBackup(InputFlowBase): yield # Skip Backup info_path = ( "backup__new_wallet_created" - if self.debug.model == "Safe 3" + if self.model() is models.T2B1 else "backup__new_wallet_successfully_created" ) TR.assert_in(self.text_content(), info_path) - if self.debug.model == "Safe 3": + if self.model() is models.T2B1: self.debug.press_right() self.debug.press_no() yield # Confirm skip backup diff --git a/tests/input_flows_helpers.py b/tests/input_flows_helpers.py index 16c59402c..05c800c76 100644 --- a/tests/input_flows_helpers.py +++ b/tests/input_flows_helpers.py @@ -1,4 +1,4 @@ -from trezorlib import messages +from trezorlib import messages, models from trezorlib.debuglink import TrezorClientDebugLink as Client from . import translations as TR @@ -18,7 +18,7 @@ class PinFlow: yield # Enter PIN assert "PinKeyboard" in self.debug.wait_layout().all_components() self.debug.input(pin) - if self.debug.model == "Safe 3": + if self.client.model is models.T2B1: yield # Reenter PIN TR.assert_in( self.debug.wait_layout().text_content(), "pin__reenter_to_confirm" @@ -40,7 +40,7 @@ class BackupFlow: def confirm_new_wallet(self) -> BRGeneratorType: yield TR.assert_in(self.debug.wait_layout().text_content(), "reset__by_continuing") - if self.debug.model == "Safe 3": + if self.client.model is models.T2B1: self.debug.press_right() self.debug.press_yes() @@ -56,7 +56,7 @@ class RecoveryFlow: def confirm_recovery(self) -> BRGeneratorType: yield TR.assert_in(self._text_content(), "reset__by_continuing") - if self.debug.model == "Safe 3": + if self.client.model is models.T2B1: self.debug.press_right() self.debug.press_yes() @@ -66,13 +66,13 @@ class RecoveryFlow: self.debug.press_yes() def setup_slip39_recovery(self, num_words: int) -> BRGeneratorType: - if self.debug.model == "Safe 3": + if self.client.model is models.T2B1: yield from self.tr_recovery_homescreen() yield from self.input_number_of_words(num_words) yield from self.enter_any_share() def setup_bip39_recovery(self, num_words: int) -> BRGeneratorType: - if self.debug.model == "Safe 3": + if self.client.model is models.T2B1: yield from self.tr_recovery_homescreen() yield from self.input_number_of_words(num_words) yield from self.enter_your_backup() @@ -89,7 +89,7 @@ class RecoveryFlow: title in self.debug.wait_layout().title().lower() for title in TR.translate("recovery__title_dry_run", lower=True) ) - if self.debug.model == "Safe 3" and not is_dry_run: + if self.client.model is models.T2B1 and not is_dry_run: # Normal recovery has extra info (not dry run) self.debug.press_right(wait=True) self.debug.press_right(wait=True) @@ -102,7 +102,7 @@ class RecoveryFlow: title in self.debug.wait_layout().title().lower() for title in TR.translate("recovery__title_dry_run", lower=True) ) - if self.debug.model == "Safe 3" and not is_dry_run: + if self.client.model is models.T2B1 and not is_dry_run: # Normal recovery has extra info (not dry run) self.debug.press_right(wait=True) self.debug.press_right(wait=True) @@ -110,7 +110,7 @@ class RecoveryFlow: def abort_recovery(self, confirm: bool) -> BRGeneratorType: yield - if self.debug.model == "Safe 3": + if self.client.model is models.T2B1: TR.assert_in(self._text_content(), "recovery__num_of_words") else: TR.assert_in(self._text_content(), "recovery__enter_any_share") @@ -118,7 +118,7 @@ class RecoveryFlow: yield TR.assert_in(self._text_content(), "recovery__wanna_cancel_recovery") - if self.debug.model == "Safe 3": + if self.client.model is models.T2B1: self.debug.press_right() if confirm: self.debug.press_yes() @@ -128,7 +128,7 @@ class RecoveryFlow: def input_number_of_words(self, num_words: int) -> BRGeneratorType: br = yield assert br.code == B.MnemonicWordCount - if self.debug.model == "Safe 3": + if self.client.model is models.T2B1: TR.assert_in(self.debug.wait_layout().title(), "word_count__title") else: TR.assert_in(self._text_content(), "recovery__num_of_words") @@ -180,7 +180,7 @@ class RecoveryFlow: assert br.code == B.Success text = get_text_possible_pagination(self.debug, br) # TODO: make sure the translations fit on one page - if self.client.debug.model != "T": + if self.client.model not in (models.T2T1, models.T3T1): TR.assert_in(text, "recovery__dry_run_bip39_valid_match") self.debug.press_yes() @@ -189,7 +189,7 @@ class RecoveryFlow: assert br.code == B.Success text = get_text_possible_pagination(self.debug, br) # TODO: make sure the translations fit on one page - if self.client.debug.model != "T": + if self.client.model not in (models.T2T1, models.T3T1): TR.assert_in(text, "recovery__dry_run_slip39_valid_match") self.debug.press_yes() @@ -198,7 +198,7 @@ class RecoveryFlow: assert br.code == B.Warning text = get_text_possible_pagination(self.debug, br) # TODO: make sure the translations fit on one page on TT - if self.client.debug.model != "T": + if self.client.model not in (models.T2T1, models.T3T1): TR.assert_in(text, "recovery__dry_run_slip39_valid_mismatch") self.debug.press_yes() @@ -207,7 +207,7 @@ class RecoveryFlow: assert br.code == B.Warning text = get_text_possible_pagination(self.debug, br) # TODO: make sure the translations fit on one page - if self.client.debug.model != "T": + if self.client.model not in (models.T2T1, models.T3T1): TR.assert_in(text, "recovery__dry_run_bip39_valid_mismatch") self.debug.press_yes() @@ -240,7 +240,7 @@ class RecoveryFlow: if index < len(shares) - 1: if has_groups: yield from self.success_share_group_entered() - if self.debug.model == "T" and click_info: + if self.client.model in (models.T2T1, models.T3T1) and click_info: yield from self.tt_click_info() yield from self.success_more_shares_needed() @@ -292,7 +292,7 @@ class EthereumFlow: ) assert br.pages is not None assert br.pages > 2 - if self.debug.model == "T": + if self.client.model in (models.T2T1, models.T3T1): self.debug.swipe_up(wait=True) self.debug.swipe_up(wait=True) self.debug.click(self.GO_BACK) @@ -312,7 +312,7 @@ class EthereumFlow: yield TR.assert_equals(self.debug.wait_layout().title(), "words__recipient") - if self.debug.model == "T": + if self.client.model in (models.T2T1, models.T3T1): if cancel: self.debug.press_no() else: @@ -387,7 +387,7 @@ class EthereumFlow: "ethereum__staking_claim_intro", ], ) - if self.debug.model == "T": + if self.client.model in (models.T2T1, models.T3T1): # confirm intro if info: self.debug.press_info(wait=True) diff --git a/tests/translations.py b/tests/translations.py index 358a3c6b6..492234dbf 100644 --- a/tests/translations.py +++ b/tests/translations.py @@ -113,6 +113,18 @@ def assert_in(text: str, path: str, template: t.Iterable[t.Any] = ()) -> None: assert False, f"{text} not found in {texts}" +def assert_in_multiple( + text: str, paths: list[str], template: t.Iterable[t.Any] = () +) -> None: + texts: list[str] = [] + for path in paths: + texts += _resolve_path_to_texts(path, template) + for tt in texts: + if tt in text.lower(): + return + assert False, f"{text} not found in {texts}" + + def assert_startswith(text: str, path: str, template: t.Iterable[t.Any] = ()) -> None: texts = _resolve_path_to_texts(path, template) for tt in texts: diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index e1f316c21..a5802b91c 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -734,6 +734,1468 @@ "T1_en_zcash-test_sign_tx.py::test_version_group_id_missing": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } }, +"T3T1": { +"click_tests": { +"T3T1_en_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "86415194d0a822709e64ad765a93c64967ace2adf61b4e7c4f3353e4486a4fbf", +"T3T1_en_test_autolock.py::test_autolock_does_not_interrupt_signing": "a2e5ede5cca634d93f3a4a5bb4a8323b0ae5576652c4183233bba42152480c64", +"T3T1_en_test_autolock.py::test_autolock_interrupts_passphrase": "d7b8c8cb51eee2f131a74577e8beeb8209c93d4bcf12a52fcba461d8c37270b3", +"T3T1_en_test_autolock.py::test_autolock_interrupts_signing": "029a396c23594971c92d282526b736165a72bc5fc7d644c8c1217cf8bbdee485", +"T3T1_en_test_autolock.py::test_autolock_passphrase_keyboard": "d882b3fb28ca8eef1a3b36440bc2e4e8cf73d3febdc53fd1f65f6b7befce144c", +"T3T1_en_test_autolock.py::test_dryrun_enter_word_slowly": "be557c3e4e0492d0b884d4ed549d3ae18e6175b74b5945e7ab6f2f96aab58748", +"T3T1_en_test_autolock.py::test_dryrun_locks_at_number_of_words": "700aa42142055535b4123d84f6d307a0589b43600c2dec525312d06c2af9aa18", +"T3T1_en_test_autolock.py::test_dryrun_locks_at_word_entry": "736652b5298a7a4ee2e51282323d1150c9844b6f7b738f421ac4ad3a83d0788d", +"T3T1_en_test_lock.py::test_hold_to_lock": "9d60d7aa2fbe6a0de14379e02ea825fbf9e21471596498f7be686f2538391f1d", +"T3T1_en_test_passphrase_tt.py::test_cycle_through_last_character": "2a8d54c8014cc0c1bf46c0e4b58d6a002009b62aa8b92db663f88af0ad2f5e19", +"T3T1_en_test_passphrase_tt.py::test_passphrase_click_same_button_many_times": "6a579067b4395a260d173e78643b67ac701304ea833a112cb2da1bce94cbb102", +"T3T1_en_test_passphrase_tt.py::test_passphrase_delete": "6f9fd790c360ea8caa60a183f39d6515ce66493786f71611988f20b6fc5af86d", +"T3T1_en_test_passphrase_tt.py::test_passphrase_delete_all": "386969917a7112629f7a9e3a96f703953d8673a0c9bf5428b7612811566c29e7", +"T3T1_en_test_passphrase_tt.py::test_passphrase_dollar_sign_deletion": "9ec26b92ff4ab6add7216f99329a9b34b59c69dba9ab916a4e9516f0d833b466", +"T3T1_en_test_passphrase_tt.py::test_passphrase_input[Y@14lw%p)JN@f54MYvys@zj'g-mnkoxeaMzLgfCxUdDSZW-78765865": "294e640dd8be88a92546107038ff6190e792896ae754d2d3c73e8d8c6bdac8be", +"T3T1_en_test_passphrase_tt.py::test_passphrase_input[abc 123-mvqzZUb9NaUc62Buk9WCP4L7hunsXFyamT]": "bd916caf1254ee0fc93febad5f03c603592b4adfbc76c3cfe747ffe54ab6ae54", +"T3T1_en_test_passphrase_tt.py::test_passphrase_input[abc123ABC_<>-mtHHfh6uHtJiACwp7kzJZ97yueT6sEdQiG]": "afa0d2c6bdfa50a22983ecbda113074703d21a008dbdd45e11e3d27a3fb704d8", +"T3T1_en_test_passphrase_tt.py::test_passphrase_input[dadadadadadadadadadadadadadadadadadadadadadada-1cc97541": "75beea9b4c13023ac3ea12fc7167e10f8d2eea2aa2f82426a0e7129b9bc21880", +"T3T1_en_test_passphrase_tt.py::test_passphrase_input[dadadadadadadadadadadadadadadadadadadadadadada-ca475dad": "c1a1cf0707dec05b41f36aba36d579ec3c93d5c404c565388bfea1787d094e67", +"T3T1_en_test_passphrase_tt.py::test_passphrase_input_over_50_chars": "75beea9b4c13023ac3ea12fc7167e10f8d2eea2aa2f82426a0e7129b9bc21880", +"T3T1_en_test_passphrase_tt.py::test_passphrase_long_spaces_deletion": "dbf02c793dbb0c7e68e6fcfe1b7baeae0abd048c49dfbaf0994146ce46dcdbae", +"T3T1_en_test_passphrase_tt.py::test_passphrase_loop_all_characters": "82ff267d6ec0d48d8a1e25d1e77e598f563449dbff75fca7f2820dc1409fa453", +"T3T1_en_test_passphrase_tt.py::test_passphrase_prompt_disappears": "12a0d2dfe50c122326bd7ab6af7dd32008943091757ef6f5e9122dd721414987", +"T3T1_en_test_pin.py::test_pin_cancel": "05f5f819be61fec8c7c4341fd23c1bccf78cff93f05d573dd4f528bb0f1edbf5", +"T3T1_en_test_pin.py::test_pin_change": "b5e034705dc4490c0b77ddd73b05b091a00a07ff8f796329f4daca5f3b2692e2", +"T3T1_en_test_pin.py::test_pin_delete_hold": "6af2b57682fef94129a6e8b527b02a44dff2e996ff9695a729d339b1715f79e8", +"T3T1_en_test_pin.py::test_pin_empty_cannot_send": "c0a1204dbf6300041da7ef5b1785417ff162ef8572eb4f6cca8cf4caae88d00e", +"T3T1_en_test_pin.py::test_pin_incorrect": "a8b0d396ad5e5732586e337f16db7f25ca9bf8837c7a3ad889049db6c60b0e1f", +"T3T1_en_test_pin.py::test_pin_long": "8bbeb3622777a8ade656e1d7babfc5bc5f0e2d65cfc71e44f6547ab690d807da", +"T3T1_en_test_pin.py::test_pin_long_delete": "4183ef3dc3ea6c8b469f53c81f373ea86696bc60791bc58e2268f223b01b5ba7", +"T3T1_en_test_pin.py::test_pin_longer_than_max": "83ab91fdb4264beaa06e3aa241ae894548d73c647cb807c31ca456d4c809d5cc", +"T3T1_en_test_pin.py::test_pin_same_as_wipe_code": "a96907da6f88fb0271d98e7f6630a3282a8439d2eb847811186b46fbf8135419", +"T3T1_en_test_pin.py::test_pin_setup": "61975663353d6a02c0024c7d52d481b096f4ed57ab7a5a043367d49d586fbf38", +"T3T1_en_test_pin.py::test_pin_setup_mismatch": "2ccaaf68e752185f567a710b9a1c24b7e0157314c7e9b8583658b320c8e6cc79", +"T3T1_en_test_pin.py::test_pin_short": "c0a1204dbf6300041da7ef5b1785417ff162ef8572eb4f6cca8cf4caae88d00e", +"T3T1_en_test_pin.py::test_wipe_code_same_as_pin": "cac6df29cd37208e4154615852ad8d28642bc9cd1ba88f5a0dbf3169eaa04dc4", +"T3T1_en_test_pin.py::test_wipe_code_setup": "cfd7100fb36a1fc10b613fa400c22e2f06b7c50718080a3a632c3181faeaf557", +"T3T1_en_test_recovery.py::test_recovery_bip39": "273790233eff1ba3dcfd1fa45693a288aed4fbf9bb47a988ef937fe0566ee809", +"T3T1_en_test_recovery.py::test_recovery_bip39_previous_word": "acd14aca1d021bd1f90d57ccecafb35e4e724d68c5a54070d74d8af615329629", +"T3T1_en_test_recovery.py::test_recovery_slip39_basic": "eee17cc5617dac3741098ca72c0ae6ae0b501fe34ceb32dcf98c18ea7ef2c542", +"T3T1_en_test_reset_bip39.py::test_reset_bip39": "1a6c50ab565fd1defb24c2fa3969e5dc99fe68138ba70f89892522869e2238eb", +"T3T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "7a921b594b5b0907ad662bf2c52b5114f90e4350b5cee5e1ae5472209a0a245a", +"T3T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "00c77b15b1c73670e0b27b5d2c7295bd1012586996c30d8bea469b7a711d7483", +"T3T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "0b38016b70e6ecb92bbade2119a107078bb2f5efa555df959d15ad0f47dbb6ed", +"T3T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "acc3d6ea121757a29445af247df94ba0305509b039bcd757f71315fd43bff5e6" +}, +"device_tests": { +"T3T1_en_binance-test_get_address.py::test_binance_get_address[m-44h-714h-0h-0-0-bnb1hgm0p7khfk85zpz-68e2cb5a": "fa3d667e1439c9c2a475fff22d94e330c14697ff8dda4bcdded775492cb40a90", +"T3T1_en_binance-test_get_address.py::test_binance_get_address[m-44h-714h-0h-0-1-bnb1egswqkszzfc2uq7-1adfb691": "ceac9a64c9aff8a4226e40f068ce412556eb582d909a9f8d401e83ca10433d77", +"T3T1_en_binance-test_get_address.py::test_binance_get_address_chunkify_details[m-44h-714h-0h-0-0-bn-59d4996f": "9836e9ae0814d1d42cf3957fc6ac6b17dc2503e5c0bb3a27fd1209ebf57c03d1", +"T3T1_en_binance-test_get_address.py::test_binance_get_address_chunkify_details[m-44h-714h-0h-0-1-bn-c9025900": "7c2943551ba1616bf057ecdeced1f603a90d60768dbd072573a60dbfdf4933b9", +"T3T1_en_binance-test_get_public_key.py::test_binance_get_public_key": "3d0517133c0cef58b6d8627527f3960f10706094d0d7113bc622453dd5cc9d8c", +"T3T1_en_binance-test_sign_tx.py::test_binance_sign_message[False-message0-expected_response0]": "28fde0e964521cf59b97a78c62d0c9655cfc8b0c8b1bdda7f75efb6a6c705a01", +"T3T1_en_binance-test_sign_tx.py::test_binance_sign_message[False-message1-expected_response1]": "5c0a4acdd90581b30266f1d97b811a3ad40cc39d2059d14f0a938c9a71016729", +"T3T1_en_binance-test_sign_tx.py::test_binance_sign_message[False-message2-expected_response2]": "fc22ef1bf651f8c8475674f3699a47c2ea951f9cc93ca60a4c9b2e8ab3c124cf", +"T3T1_en_binance-test_sign_tx.py::test_binance_sign_message[True-message0-expected_response0]": "28fde0e964521cf59b97a78c62d0c9655cfc8b0c8b1bdda7f75efb6a6c705a01", +"T3T1_en_binance-test_sign_tx.py::test_binance_sign_message[True-message1-expected_response1]": "5c0a4acdd90581b30266f1d97b811a3ad40cc39d2059d14f0a938c9a71016729", +"T3T1_en_binance-test_sign_tx.py::test_binance_sign_message[True-message2-expected_response2]": "fc22ef1bf651f8c8475674f3699a47c2ea951f9cc93ca60a4c9b2e8ab3c124cf", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_cancel_authorization": "1779de46a1d6549caf369e488c4045f92484327696e212ff679d6ae8b51a01b2", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_get_address": "f4de0499dac628067619c6081d4ebdba0ad196af7bf9662c5387386eba9e9729", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_get_public_key": "38a7eac0cf0be45770fb28da9c2f74bac6404e85f2a3801acdd4b0107d99f2ff", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_multisession_authorization": "d39b3290ddfecd5a3ceaf249543eaccb2b71c21eb2dbeabef94fe866ad7ce6a8", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_sign_tx[False]": "3bd08b0f7ef6352c5a22bba299d4d65ba6725962426abf6bef48203ab91b9c6b", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_sign_tx[True]": "3bd08b0f7ef6352c5a22bba299d4d65ba6725962426abf6bef48203ab91b9c6b", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_sign_tx_large": "312fca890a6e93da6c3705e3b3c97ba38dd336374634dbed9134362420273380", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_sign_tx_migration": "a0757616e39b5883ccfba01af3b386d1fc2d4a00517b2c3d79519ce0f60bc5cd", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_sign_tx_spend": "b8ca0b72adfb0cfa1ff653c83a0995517b71f8bfc217753e16aab49dd82a3a65", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_wrong_account_type": "4ec28178d68afd83019583d2f70dfc1a66a42f946a801d6a9d210ecb7d700951", +"T3T1_en_bitcoin-test_authorize_coinjoin.py::test_wrong_coordinator": "4ec28178d68afd83019583d2f70dfc1a66a42f946a801d6a9d210ecb7d700951", +"T3T1_en_bitcoin-test_bcash.py::test_attack_change_input": "5a2732a973bf39bb25bd06180cfdfbc7fe494015c07df9461d15e189851b811d", +"T3T1_en_bitcoin-test_bcash.py::test_send_bch_change": "5a2732a973bf39bb25bd06180cfdfbc7fe494015c07df9461d15e189851b811d", +"T3T1_en_bitcoin-test_bcash.py::test_send_bch_external_presigned": "0ebad19508c4746198a6728449e4ac0d1cfdf169db907e4ff1acf1ef7f37a400", +"T3T1_en_bitcoin-test_bcash.py::test_send_bch_multisig_change": "4e9225e760a416bdef0b2eb1ac07489a7fc216b6a682f4edfd0a99dc7a0364c3", +"T3T1_en_bitcoin-test_bcash.py::test_send_bch_multisig_wrongchange": "3350934f73adc12375536ecc125f42631d0f17f37d5a72c3a6a1a062e9e9e565", +"T3T1_en_bitcoin-test_bcash.py::test_send_bch_nochange": "1b7584ac7451c9449962322655770d6d46eb8bd073e13b3aa605b4da5bae2327", +"T3T1_en_bitcoin-test_bcash.py::test_send_bch_oldaddr": "8c7102bac98a0a09a46bbbeac4c980b4219bb63ac8ad6b1d80797bf9cd991cfd", +"T3T1_en_bitcoin-test_bgold.py::test_attack_change_input": "5969da300e12710b02231cebc1aa57ba60d8ca72338ff976c637de228dd743f0", +"T3T1_en_bitcoin-test_bgold.py::test_send_bitcoin_gold_change": "5969da300e12710b02231cebc1aa57ba60d8ca72338ff976c637de228dd743f0", +"T3T1_en_bitcoin-test_bgold.py::test_send_bitcoin_gold_nochange": "8cbb24c33d0801c03ae2b009cca0b6ade37c5ff437eaa64d8ba640a3da8a3002", +"T3T1_en_bitcoin-test_bgold.py::test_send_btg_external_presigned": "22a3e3baf7afcecc5b457ec9f9063e4d729879f79151bc43e1f0738595207b35", +"T3T1_en_bitcoin-test_bgold.py::test_send_btg_multisig_change": "f3e442202d95479ca14b053ab801b8002f752be016aba1a6057201d74503b9a3", +"T3T1_en_bitcoin-test_bgold.py::test_send_mixed_inputs": "8e93f1dc099203ca34177de6bf7370faa7e846ecedc630b8a16194fe7819d4c8", +"T3T1_en_bitcoin-test_bgold.py::test_send_multisig_1": "8066b6a823c1d5e646934754e74ac85652285ad9fdb23a74bd34c9597f6e5618", +"T3T1_en_bitcoin-test_bgold.py::test_send_p2sh": "f4b11a171cf48210e50e7e45acf9020a92cec3ac854921de0c133f60e3d0a5a0", +"T3T1_en_bitcoin-test_bgold.py::test_send_p2sh_witness_change": "9360c9e41a40282f5ecf6d2ee91fad8e2c10ee3be6634a7eead946eed23f94c7", +"T3T1_en_bitcoin-test_dash.py::test_send_dash": "557a45f80747ccb6622001a7540273589a9cfcbbea18ba4a23fb92e94346ccf3", +"T3T1_en_bitcoin-test_dash.py::test_send_dash_dip2_input": "a0b3ed97530eb7d1a0af8fb7069deeaf73bc5624dee58be0c1ddddbac85e04d8", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-10025-InputScriptType.SPENDTAPROOT--301d7568": "b9ecca0a8b6c4750d0af6c9d7433da2704dde0bc7e894778cbfaafb54435630f", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-44-InputScriptType.SPENDADDRESS-pkh-a1b0211f": "7dd16059ade8769aca12649b7b2523ac52718fb7bb9eb416fa13a5cb747be1b2", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-49-InputScriptType.SPENDP2SHWITNESS-75f8d49f": "8b434c5de0caf71301bd6b21481bb1944d4b43dd596a7ecb9acb921c8083e955", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-84-InputScriptType.SPENDWITNESS-wpk-cee65569": "e8628d184603bceaad9c5ae5b9f51460054e7b5622ea9c1a3dc84f84034808bc", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-86-InputScriptType.SPENDTAPROOT-tr(-6b548a1a": "3ca9f504529fc7a320e464819c6a793c8fc156165a80db17ed8ef8c593bcc802", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-44-InputScriptType.SPENDADDRESS-pkh-37215d1b": "a8f46662c3d14e2defdd5aa2ff4486aeac3f566facf086916da7ddc7e0185130", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-49-InputScriptType.SPENDP2SHWITNESS-3ccd985b": "013171ff086e4565db1bc4f8a0d466a0fa7c6449ee58a3d27b27f073bfb74d63", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-84-InputScriptType.SPENDWITNESS-wpk-21c3fa4c": "3941cd14f74e1d7ea919cb32cbd7c5954c412d845305e4f0e495378c7701a53b", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-86-InputScriptType.SPENDTAPROOT-tr(-3a85f3dd": "e3e3495038e8016ef1afcf70effe3f957ae23b95a515c3aa6f3736fb35c9a10b", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-10025-InputScriptType.SPENDTAPROOT--591134d6": "732b01cc2254e25d6d4576af99332e7c9f4ba42f031fcf13588a4a0209e51adf", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-44-InputScriptType.SPENDADDRESS-pkh-b7612f41": "d8e95f6a14ddabd6db4944802f847ccddd8161eed28559f35dc095b568461df7", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-49-InputScriptType.SPENDP2SHWITNESS-4408e6b6": "6ac0059ce935707618eefe9c23d403ff30807df3c3ec23b8615a50b648bbba75", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-84-InputScriptType.SPENDWITNESS-wpk-49d5549d": "b8e44bea2eb0d3ac672a41ebf83683adbb0e02a622cbafe2fb02283117bd4c4a", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-86-InputScriptType.SPENDTAPROOT-tr(-51c6f7dc": "56a011908b178d0deeb00b7596a93ac003892e0adbd24958e875cc9d70340d95", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-44-InputScriptType.SPENDADDRESS-pkh-671fabde": "4795ab245421deef1f7ebdb6568165a64c7066054747a84c4e30a78085c71e22", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-49-InputScriptType.SPENDP2SHWITNESS-6a0c7b09": "284b98fb9d745aae6f552999e1652300d84d4863c3b29452615ae5b691d7b266", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-84-InputScriptType.SPENDWITNESS-wpk-7c651f2d": "660130572e80e9161d733f3ebc465a5f2a9859a79eecd7201c7ebf955173df23", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-86-InputScriptType.SPENDTAPROOT-tr(-b37d77de": "bf917bfb75a6e263410d4401774974598cbb3fbcfd04da54942d8d5f640bc32c", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-0-10025-InputScriptType.SPE-6c24ae6f": "b9ecca0a8b6c4750d0af6c9d7433da2704dde0bc7e894778cbfaafb54435630f", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-0-44-InputScriptType.SPENDA-fc66840d": "7dd16059ade8769aca12649b7b2523ac52718fb7bb9eb416fa13a5cb747be1b2", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-0-49-InputScriptType.SPENDP-3f679311": "8b434c5de0caf71301bd6b21481bb1944d4b43dd596a7ecb9acb921c8083e955", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-0-84-InputScriptType.SPENDW-dedbd46d": "e8628d184603bceaad9c5ae5b9f51460054e7b5622ea9c1a3dc84f84034808bc", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-0-86-InputScriptType.SPENDT-9b717395": "3ca9f504529fc7a320e464819c6a793c8fc156165a80db17ed8ef8c593bcc802", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-1-44-InputScriptType.SPENDA-908dd45b": "a8f46662c3d14e2defdd5aa2ff4486aeac3f566facf086916da7ddc7e0185130", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-1-49-InputScriptType.SPENDP-07c408b2": "013171ff086e4565db1bc4f8a0d466a0fa7c6449ee58a3d27b27f073bfb74d63", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-1-84-InputScriptType.SPENDW-ae5dad46": "3941cd14f74e1d7ea919cb32cbd7c5954c412d845305e4f0e495378c7701a53b", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Bitcoin-1-86-InputScriptType.SPENDT-f5c0cb2f": "e3e3495038e8016ef1afcf70effe3f957ae23b95a515c3aa6f3736fb35c9a10b", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-0-10025-InputScriptType.SPE-ad017c81": "732b01cc2254e25d6d4576af99332e7c9f4ba42f031fcf13588a4a0209e51adf", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-0-44-InputScriptType.SPENDA-87568704": "d8e95f6a14ddabd6db4944802f847ccddd8161eed28559f35dc095b568461df7", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-0-49-InputScriptType.SPENDP-08c818f5": "6ac0059ce935707618eefe9c23d403ff30807df3c3ec23b8615a50b648bbba75", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-0-84-InputScriptType.SPENDW-3a2da005": "b8e44bea2eb0d3ac672a41ebf83683adbb0e02a622cbafe2fb02283117bd4c4a", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-0-86-InputScriptType.SPENDT-0d2d3911": "56a011908b178d0deeb00b7596a93ac003892e0adbd24958e875cc9d70340d95", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-1-44-InputScriptType.SPENDA-06441aab": "4795ab245421deef1f7ebdb6568165a64c7066054747a84c4e30a78085c71e22", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-1-49-InputScriptType.SPENDP-2341fa5a": "284b98fb9d745aae6f552999e1652300d84d4863c3b29452615ae5b691d7b266", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-1-84-InputScriptType.SPENDW-59aa0a79": "660130572e80e9161d733f3ebc465a5f2a9859a79eecd7201c7ebf955173df23", +"T3T1_en_bitcoin-test_descriptors.py::test_descriptors_trezorlib[Testnet-1-86-InputScriptType.SPENDT-af95048b": "bf917bfb75a6e263410d4401774974598cbb3fbcfd04da54942d8d5f640bc32c", +"T3T1_en_bitcoin-test_firo.py::test_spend_lelantus": "213ced04e2b337576abe1861c11ef69352eb5542f2bef720e50d54cea031f9db", +"T3T1_en_bitcoin-test_fujicoin.py::test_send_p2tr": "6104cd021625791fc9141ca802c3c18fb50815459acae06b2eeb05da432352f7", +"T3T1_en_bitcoin-test_getaddress.py::test_address_mac": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_altcoin_address_mac": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_bch": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_bch_multisig": "ef8a33a6700d369cbb842ef4bc0a853c10a06ddcff7abde6a1d84e7d55a0361f", +"T3T1_en_bitcoin-test_getaddress.py::test_btc": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_crw": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_elements": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_grs": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_invalid_path": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_ltc": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_multisig": "f2ba49011a093ad530f0f3c3f60e1386add863c76ff5e3587ac90262a9f4676f", +"T3T1_en_bitcoin-test_getaddress.py::test_multisig_missing[False]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_multisig_missing[True]": "0fe493c41775e7992c88e1bace001577f6d8737500005399cfd73522c7459b0d", +"T3T1_en_bitcoin-test_getaddress.py::test_public_ckd": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_tbtc": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_tgrs": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress.py::test_unknown_path": "1dae1e1f3127cb2112f58e75e5b6eab871da0abadcac14235b3dadbfe0d1da81", +"T3T1_en_bitcoin-test_getaddress_segwit.py::test_multisig_missing[False]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit.py::test_multisig_missing[True]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit.py::test_show_multisig_3": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit.py::test_show_segwit": "cbf5dd38da807d68f93cd9e276f8f0b7a92826e3e3bdc40bdbb30f4a63bcd4fd", +"T3T1_en_bitcoin-test_getaddress_segwit.py::test_show_segwit_altcoin": "a704cd1bed4d13c243f86af77390bf15d8287ab33ad0457eca6697ce68f5121e", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-0-0-bc1p5cyxnuxmeuwuvkwfem-dc12f29f": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-0-1-bc1p4qhjn9zdvkux4e44uh-1f521bf2": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-1-0-bc1p3qkhfews2uk44qtvau-d8b57624": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_multisig_missing[False]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_multisig_missing[True]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_multisig_3": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-84h-0h-0h-0-0-InputScr-6bc4ffc3": "40f2d6e630bc753de21cf7739dc290dcf809337d5e692378699c98572474afba", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-84h-0h-0h-0-0-InputScr-8943c1dc": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-84h-0h-0h-1-0-InputScr-016718c1": "9cf15bac5348807d5c50a8c622e92df0dbb630ba9db0b8423cd7225d2f4b620c", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-84h-0h-0h-1-0-InputScr-7656a4db": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-86h-0h-0h-0-0-InputScr-3d3cc8eb": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-86h-0h-0h-0-0-InputScr-8571d5e0": "64d62a9f4b02896b84d56c3453877f439fc56594b2832d14031d45732817f7ab", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-86h-0h-0h-1-0-InputScr-ab700de2": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-86h-0h-0h-1-0-InputScr-da3803e0": "077a15a5492dea40d65896e4a1d1a17a175e4d85d41c66f44293872594663ff5", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Elements-m-84h-1h-0h-0-0-InputSc-490228be": "d5e4cbb3c97f8d8312002a2dd7ed070a1c293dfca4ac195854fb296c1c1112fe", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Elements-m-84h-1h-0h-0-0-InputSc-ed587e90": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-84h-1h-0h--40b95144": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-84h-1h-0h--45b4ff5d": "277f41432b63286e5b3898080a5245b4c57045b51dde6be49467a1863207448a", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-84h-1h-0h--8f7c658b": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-84h-1h-0h--93c9c3ff": "466e961281fc0e074f0edd4c6d7c04af6032d92aeb33511a8a39af20fdd18541", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-86h-1h-0h--5feb8c64": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-86h-1h-0h--8d4476a1": "d4a50e221264e268a437ff4b6e5477de74729b1171cb7f1854bece821a46c62c", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-84h-17h-0h-0-0-Inp-0200a67b": "f5420ee7d27a19162d284b685a34fdc3ac296fdcfcd9855d7c9c00476611893a", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-84h-17h-0h-0-0-Inp-e6c1098a": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-84h-17h-0h-1-0-Inp-9688a507": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-84h-17h-0h-1-0-Inp-f825f217": "af0a9051d5b974cda12d13f1175f6a870de418708c3aa05266ae2f516ef0fea6", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-86h-17h-0h-0-0-Inp-38cd93cf": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-86h-17h-0h-0-0-Inp-ebecce6e": "30f3f630eb68aeb9c9c8d67811e5101ca3e301cc8ce0ff7069b3e687532fca8b", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-84h-1h-0h-0-0-InputScr-313b9443": "ace7260e65a375a577b0cf58c7c19e73c861a5e705336d772e4d8328796b46ec", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-84h-1h-0h-0-0-InputScr-ce15ec92": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-84h-1h-0h-1-0-InputScr-040186c0": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-84h-1h-0h-1-0-InputScr-b10918be": "a74c4afb2a87e09dd2562bc7650caeaf059552db544872b7704af9e51f26103d", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-0-0-InputScr-55ae0ae6": "6eb641ea4acd345143540a9985e16cf8569e957f830ac4ada79a949629aaf310", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-0-0-InputScr-821a199d": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-1-0-InputScr-9d2fa8bc": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-1-0-InputScr-d5b7f8fc": "f9c524eae89e19091508c9fc40e18a2c2f167a15f28bfd59ff4aad7bd80fa016", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_cancel[m-44h-0h-12h-0-0-InputScriptType.SPENDADD-4eca71e0": "e9e1685bed4796972fdf044a84d24c95981bea00df672614cad8c2ab1b2c8e74", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_cancel[m-49h-0h-12h-0-0-InputScriptType.SPENDP2S-4ec777e0": "3a15c7626541011177bc88967c72c278fc229ad8ac131cf606c8dc1f48b5df2c", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_cancel[m-84h-0h-12h-0-0-InputScriptType.SPENDWIT-d6991e22": "cbbf158f803cec0218cef4482be16b1fbce5a33c27d22089bd562cb8991f697f", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_cancel[m-86h-0h-12h-0-0-InputScriptType.SPENDTAP-4c5b2b38": "0478aa33fb21365c1d114cad7bfb3c0270b20ffc3573d1eb70821101004e30dc", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_multisig_15": "af9af600df851cfbd070139fdd4db6588e6ce4a116b45ca19a0068ce9d678f51", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_multisig_3": "94d22e1a493fa8f3c3e15a65333ef0691fcab1594ee0e767773a3a90db6814b6", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_multisig_xpubs[InputScriptType.SPENDMULTISIG-0-3-4efd9cf3": "faa98c7c2c581c303a2b72f0a2f93bfb6c1ed504cecda4b483af17315b569e78", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_multisig_xpubs[InputScriptType.SPENDMULTISIG-0-3-98a7e339": "faa98c7c2c581c303a2b72f0a2f93bfb6c1ed504cecda4b483af17315b569e78", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_multisig_xpubs[InputScriptType.SPENDP2SHWITNESS--2cf5f03c": "96ea93c13ca429954e84685b85df2eafa7e9f25afbc8ca77a88eb909bd3f7c8d", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_multisig_xpubs[InputScriptType.SPENDP2SHWITNESS--5ea18367": "a93a88119c9ee255e09a87ff1e9c078a61e1e7ec61a26a4ecbccf294a70269cf", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_multisig_xpubs[InputScriptType.SPENDWITNESS-2-bc-e70b56ea": "46b56e80439b320688feac9bd0ceb440ff83cf5d1da51a6425aeb97aaf097393", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_multisig_xpubs[InputScriptType.SPENDWITNESS-2-bc-f3c4650f": "17a274a917e5ff853a429561ef4dbceb12c41520c18714f3c3f037d008e5527e", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_tt[m-44h-0h-12h-0-0-InputScriptType.SPENDADDRESS-5c88d0fd": "2640940dac7119c208074f263482b66323ee2ab0769c2cda32b75e91bfe9f2a3", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_tt[m-44h-0h-12h-0-0-InputScriptType.SPENDADDRESS-87490d4e": "cbe6b393e10f5e4fc0b780255b19d46f53cf60706a2f2361a658a82b0b659825", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_tt[m-49h-0h-12h-0-0-InputScriptType.SPENDP2SHWIT-9bc227c1": "ba1c1f8dab1121f7fdba73f9a481145ff65e383763a24a1e66d25b2b4681c58f", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_tt[m-49h-0h-12h-0-0-InputScriptType.SPENDP2SHWIT-aca0623f": "62c493f4310b90d0082281c38acc314cfd059bbbbfe18a150a5d7236cf9e56f1", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_tt[m-84h-0h-12h-0-0-InputScriptType.SPENDWITNESS-747c079d": "8ccb2c2222cbc695f5d49543e637f03eb69d60ea654636e0e8b97a0c04a21e52", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_tt[m-84h-0h-12h-0-0-InputScriptType.SPENDWITNESS-e4302080": "cd5a286c516dd0bd7eb107081356863504947e9498a9d6b490760265c055c870", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_tt[m-86h-0h-12h-0-0-InputScriptType.SPENDTAPROOT-071a4a07": "a5f25a795619e2adcc3bedc07c6b12dfa605a9369705a013f276428a5a4f78d0", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_tt[m-86h-0h-12h-0-0-InputScriptType.SPENDTAPROOT-25ee9808": "508a69027cc9b71d218f65a015d963f13fffe4bc9ad435f8fb12894ee3ae298e", +"T3T1_en_bitcoin-test_getaddress_show.py::test_show_unrecognized_path": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getownershipproof.py::test_attack_ownership_id": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getownershipproof.py::test_confirm_ownership_proof": "5f4e0c17cb3258af3901c7508968af36632f3e9826f6f63068b8521a4fbb36c2", +"T3T1_en_bitcoin-test_getownershipproof.py::test_confirm_ownership_proof_with_data": "9a31966c5665d23cb1ec01529d09cc3034116a28330a52608d9c12a96bdabe90", +"T3T1_en_bitcoin-test_getownershipproof.py::test_fake_ownership_id": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getownershipproof.py::test_p2tr_ownership_id": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getownershipproof.py::test_p2tr_ownership_proof": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getownershipproof.py::test_p2wpkh_ownership_id": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getownershipproof.py::test_p2wpkh_ownership_proof": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Bitcoin-76067358-path0-xpub6BiVtCpG9fQPx-40a56ca3": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Bitcoin-76067358-path1-xpub6BiVtCpG9fQQR-1abafc98": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Bitcoin-76067358-path2-xpub6FVDRC1jiWNTu-47a67414": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Bitcoin-76067358-path3-xpub6GhTNegKCjTqj-990e0830": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Bitcoin-76067358-path6-xpub68Zyu13qjcQvJ-8285bd20": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Litecoin-27108450-path10-Ltub2dcb6Nghj3k-53e5db37": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Litecoin-27108450-path7-Ltub2Y8PyEMWQVgi-d0bb059c": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Litecoin-27108450-path8-Ltub2Y8PyEMWQVgi-98ae2c41": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Litecoin-27108450-path9-Ltub2dTvwC4v7GNe-8d6d95fb": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Testnet-70617039-path4-tpubDDKn3FtHc74Ca-f3b70aff": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node[Testnet-70617039-path5-tpubDGwNSs8z8jZU2-8b5efa13": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Bitcoin-76067358-path0-xpub6BiVtCpG-d791cce2": "7dd16059ade8769aca12649b7b2523ac52718fb7bb9eb416fa13a5cb747be1b2", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Bitcoin-76067358-path1-xpub6BiVtCpG-74c78643": "76dff54ff9086f92cd401fc9f7fdc7bb784e6c097d2d7afc0c423c8589488a70", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Bitcoin-76067358-path2-xpub6FVDRC1j-3074f5a6": "bae7f0b63e3fee8ece96e59e5fe45fb50b9110e6af0cb431bc42a3f965ff3752", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Bitcoin-76067358-path3-xpub6GhTNegK-1b073ed9": "9b215d4fccdecb67001721ff27073e2cf7f57674713b086163a400315a0a3715", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Bitcoin-76067358-path6-xpub68Zyu13q-eb190bf2": "7e60836a928c98fe074421708bd25561ef46d644f4cdd6867b9bc5d79c020f3a", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Litecoin-27108450-path10-Ltub2dcb6N-d2ef4e5a": "ba55e3d330f207e211264d150ab42394ca033cf8505e1e02f5243c3d4cae3ca2", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Litecoin-27108450-path7-Ltub2Y8PyEM-b9a6bf56": "f2c6c4c91fe5fb8309cb980779a6f7254124c296bd232ec33bfc35d448df2789", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Litecoin-27108450-path8-Ltub2Y8PyEM-d598ed84": "27a5b6815c3b8d444c4fd323a69782f40759e99f582c8f0131835d00fa251eea", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Litecoin-27108450-path9-Ltub2dTvwC4-bfef8b2e": "77c39f9196a1ad8cd7972169854f7cb5f15d93d96c3eb43645c980d3dcd0e771", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Testnet-70617039-path4-tpubDDKn3FtH-5ca1cba5": "d8e95f6a14ddabd6db4944802f847ccddd8161eed28559f35dc095b568461df7", +"T3T1_en_bitcoin-test_getpublickey.py::test_get_public_node_show[Testnet-70617039-path5-tpubDGwNSs8z-60ca5612": "28df2e38996c9cdbf83b98a886c5fa3fb7a685d9e269d55b07035115ff8cd903", +"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Bcash-path5]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path0]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path2]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey.py::test_slip25_path": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey_curve.py::test_publickey_curve[ed25519-path4-002e28dc0346d6d30d4e-e6c7a440": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey_curve.py::test_publickey_curve[nist256p1-path2-0324c6860c25cdf7a8-d75f4900": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey_curve.py::test_publickey_curve[nist256p1-path3-03b93f7e6c777143ad-2d6b178b": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey_curve.py::test_publickey_curve[secp256k1-path0-02f65ce170451f66f4-9c982c22": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_getpublickey_curve.py::test_publickey_curve[secp256k1-path1-0212f4629f4f224db0-0209bb73": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_grs.py::test_legacy": "a806ef300fa0e8ff74828a364b2fee979a4c616b3b21111b150cd4dc92770674", +"T3T1_en_bitcoin-test_grs.py::test_legacy_change": "39af05ab65895d138ed4a080393f3de3c15072980637d72a58c0659fb4b31032", +"T3T1_en_bitcoin-test_grs.py::test_send_p2tr": "8d7cbc9e1e1c2c7e06561563b5ad775bf281eb516c50b61e9fe44293694110be", +"T3T1_en_bitcoin-test_grs.py::test_send_segwit_native": "fe926c9eea3e2184a8d54beee1b148faa2c778aa418e26e29089dd4284f87e87", +"T3T1_en_bitcoin-test_grs.py::test_send_segwit_native_change": "d8ef8d8a6b9c94c3b25a45015a996a7ba31687024e68f91609ff0cd587b0ff1b", +"T3T1_en_bitcoin-test_grs.py::test_send_segwit_p2sh": "c52b96573ff1d0f1a49369298a69c1828e96149f91ff406cdcb43e61245f4449", +"T3T1_en_bitcoin-test_grs.py::test_send_segwit_p2sh_change": "f60bafecfdc71ade91c375e95d0789878f7dc72e29319e257525719e55299cfc", +"T3T1_en_bitcoin-test_komodo.py::test_one_one_fee_sapling": "7656cdff1d59f868ac6918f84908be975adc26d2a98ee9c9706d845dc8a2ef84", +"T3T1_en_bitcoin-test_komodo.py::test_one_one_rewards_claim": "c2fd77b0242d173cd9b95e75c3ca94de10d8d8d2908420241bca24acaba5a010", +"T3T1_en_bitcoin-test_multisig.py::test_15_of_15": "d5938400d691e30dc969e06c21939cafe10dc82bb529f8c11019a2af738aac29", +"T3T1_en_bitcoin-test_multisig.py::test_2_of_3[False]": "99c3eb14a9297b4d9caf1142f562bdab6d68a779ea4a17a1349d0ac40314bcbe", +"T3T1_en_bitcoin-test_multisig.py::test_2_of_3[True]": "6b7c2edc4fb52dfd5d132286dd8f9b3ca84136a522c653116be6f194646bbede", +"T3T1_en_bitcoin-test_multisig.py::test_attack_change_input": "0f230d5c6845daf73081e406e4dd5a0252ffb97a65c6196d3c856ece18372b85", +"T3T1_en_bitcoin-test_multisig.py::test_missing_pubkey": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_multisig_change.py::test_external_external": "c4d64521e603d5b9e3f86881f464be11334877e16923cc7868b4584996144de9", +"T3T1_en_bitcoin-test_multisig_change.py::test_external_internal": "0470c5fa7c26b622c9407e4f957658baa0b8e462aa255b30514495ac4e4a29a6", +"T3T1_en_bitcoin-test_multisig_change.py::test_internal_external": "34916d218a88982a0e031d3da676ba794357a43c13448cdf6ee064669fdfc9da", +"T3T1_en_bitcoin-test_multisig_change.py::test_multisig_change_match_first": "4f4a1630b3435b1755d1d724012be607006fe2c7f04e2a5edfe0fa4aa846165c", +"T3T1_en_bitcoin-test_multisig_change.py::test_multisig_change_match_second": "44d8941b9161ad7f12cb2e8f231509faf2e65dda2fba38504acb39b96311935b", +"T3T1_en_bitcoin-test_multisig_change.py::test_multisig_external_external": "fec43fa5690a40668ed2bba6d713cfec07ebc8c38bc686f82d9954f7e417c8d3", +"T3T1_en_bitcoin-test_multisig_change.py::test_multisig_mismatch_change": "fccfaa06091bd0f574e4c78d6b6f89ab1842a33cc873ed60cf484bf33db3b451", +"T3T1_en_bitcoin-test_multisig_change.py::test_multisig_mismatch_inputs": "f3202ea515b4c5935c8ac5eb377cdc68106fe5f05968b99234954ad4aec25e6f", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-6-255-script_types3-False]": "31755b656cad58d7d32dcebbf939797e416b37156a07e887b55c83f815e8968c", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-6-255-script_types3-True]": "70933a9dad255906242bebbeaa13246fe08feee20f6a4a2149541a967a0ff550", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-script_types2-False]": "686e0a918898f62a77ae2fcc2ca3b9438b441416169d327a3518c5e917036fcd", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-script_types2-True]": "aab1f46581f519c7d3d81aeab5d6ed8e35a8d492e95dddc918ca0431b6e8fd54", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-3h-100h-4-255-script_types1-False]": "0d2fd0b06a57c3c275bdef3eb31327935fd4990443e40f40ab5684dbda4a768f", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-3h-100h-4-255-script_types1-True]": "92d41acbaa6d69fa4512de55c3004b77701d699bdde982861740a25fe785d910", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-4-255-script_types0-False]": "ec02c7840205c63d6bfb9a7a5ddd103c45009ee61c6ee0cfccaf343e920227c1", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-4-255-script_types0-True]": "d212479a0542d5f2fcad9876987db10f6e1c52b9ee13411b72fa8062ea5f73c6", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-49-0-63-0-255-script_types4-False]": "f3f8cf5e56808b1ab3697a84911976d49d37fbe0c6652dc20c2ab11ef4177b61", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress[m-49-0-63-0-255-script_types4-True]": "af8a4f016ec79439685f33edeb4ec8e228bd72ff6eed4c07d7885eb44fdeab09", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths0-address_index0]": "1f12bb3af8bcf6a6b9afafbdf6ceba9674c0d2ef159fd75be949a60748316caa", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths1-address_index1]": "0c47cd2c13f94d818545f493b5c85788024a0667ea8682add50e474347df3d48", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths2-address_index2]": "5b5e013a4b98ba8ec3dd2b44c9653c2eaaa7b5b1a949f9058d3f8da6500b16fe", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths3-address_index3]": "90c5c863c822b85e807f1f971c707bef2c32afeb763d6898f0c9b9c33f26b5ab", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths4-address_index4]": "8b4e69d84b57dc00839900e7cae25b1b9f4baee8cf2649833e467145b254ecc1", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths5-address_index5]": "ff12de01723a4a3cf4bb8c011bd81d45b9f43254ec7cb0ea43556975f5fd1fb7", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths6-address_index6]": "4c53a681a7e094c59a52c8bd2536aae2fc192a3ca93546ce348b601383447135", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths7-address_index7]": "112c66c98a7c85210d619c610e0943fc83677878116565b2e2a875f130f09e0b", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-1195487518-6-255-script_types3]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-1195487518-script_types2]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-3h-100h-4-255-script_types1]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-4-255-script_types0]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-49-0-63-0-255-script_types4]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signmessage[m-1195487518-6-255-script_types3]": "c8dcc2856fc3e7a31e8033caa42a134de2aa05d3144a8eceb0edd3af041f03d9", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signmessage[m-1195487518-script_types2]": "f68f1130cf830aa8e6632901d834e23693ec5ed111619c83eae12ef72f2a3609", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signmessage[m-3h-100h-4-255-script_types1]": "ac684c8ef0dd6f8456ccd70c955290720abe863fecb994a50c6f548111178f06", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signmessage[m-4-255-script_types0]": "2f95be5d0472b94ffe051d5753b9ca68f95b245633d8f76289f2768470f47319", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signmessage[m-49-0-63-0-255-script_types4]": "73857c4de7ca4572bc7f9f428eb23be495569d938fabd35baf4e5bd04dcc31e3", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "0ffdf6683c3dace1725827bee5e0da3c489276bcc0f3cff411a4a848bb7a2ec8", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "c608ac3b16eb3b1a9e294a809b692c5633ba2c83681bf55c85b4c137bbde5810", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "fa9fb399b0fd4f08e344e7581419e1b56d34995650a818f4e637afe8e3f9b3e8", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "7d925ab9aec530d3c863f97174a5c837e32f6044c023f1365cbae7bc75cfb7c9", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "56108f83b7413d2a4b22048caccecf55911c13b5f1d946c40b97ee60c8bbc429", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths0-address_index0]": "0fa3a45f6b8d31955b0e9aaa68d79f5948a7597901cfed56aec1a35ce57aed3b", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths1-address_index1]": "999fc66f082d9923d670ab7d87c4cc4443a50d6b7fa3442f57d3ab2b2dc0d5fc", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths2-address_index2]": "83a6b8ff9609f07a0e10d5c46357a0c3647fac6671eace084f0568f84ff6d5d7", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths3-address_index3]": "dabd2e4161c862f8b45e5793523c0496a765b247e64f23e202fd2432a1a0e94d", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths4-address_index4]": "999fc66f082d9923d670ab7d87c4cc4443a50d6b7fa3442f57d3ab2b2dc0d5fc", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths5-address_index5]": "999fc66f082d9923d670ab7d87c4cc4443a50d6b7fa3442f57d3ab2b2dc0d5fc", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths6-address_index6]": "999fc66f082d9923d670ab7d87c4cc4443a50d6b7fa3442f57d3ab2b2dc0d5fc", +"T3T1_en_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths7-address_index7]": "b62ab2c91fa20d09ea8e79a18904f3ae4465665b4643a1490cf6c0112876d2b7", +"T3T1_en_bitcoin-test_op_return.py::test_nonzero_opreturn": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_op_return.py::test_opreturn": "b4f764f46970686537dedf7acc634675ce8a92e98fe99d2b19d766c546726069", +"T3T1_en_bitcoin-test_op_return.py::test_opreturn_address": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_peercoin.py::test_timestamp_included": "638313d3b73353020ea06a2c34c4b14ae87e864d7c027a882d6a55330030c6c0", +"T3T1_en_bitcoin-test_peercoin.py::test_timestamp_missing": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_peercoin.py::test_timestamp_missing_prevtx": "f524a9f7ee2fa91105477e0d673e3e5c5e1c1a13222d20d46ae2e375f9921c3d", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[NFC message]": "b92a01f39e829d21e16ede95550b2047ac9ea734a7c61f3e28faa16ebc036ccb", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[NFKD message]": "b92a01f39e829d21e16ede95550b2047ac9ea734a7c61f3e28faa16ebc036ccb", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[bcash]": "3c538fad2bd6a1fd6eb3c088d9571142e194e25c53b7f19abff1ef7e03040bb3", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[decred-empty]": "bec877a114f2b28638caf4993e6ac8f83a19ec523b09a210dc0b817b1acf1a26", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[decred]": "f5d7fddf8c0dfc802b58e565e826cde2d9dcf035c5d07539d16dc01e2c9732c6", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[grs-p2pkh]": "d9e1788e58374fdd27b7fbfc014b8dee59948938dcfed47169a5b2acbe380e02", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[grs-segwit-native]": "55f230ea818b01962d5f545f49e893776fa5d6c6b2bb95c78dec22b7e040b4ee", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[grs-segwit-p2sh]": "103ebfb2f9506a61f3ee1f25de8345048318af26666c0cfd98b25898efe6125d", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[p2pkh long message]": "7fff8e2f1f1471c82d2029ce0fd26dba010fa29eb074025f14ecf154348b6442", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[p2pkh0]": "8004f64bdd53564afec8f5f290617fcfbd2a71274a84116b0837bc079601cdc1", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[p2pkh1]": "8004f64bdd53564afec8f5f290617fcfbd2a71274a84116b0837bc079601cdc1", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[p2pkh2]": "f38bed10be867b76b284c718033e7d6de592925bb0211e04afcd31247c334f3d", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[segwit-native long message]": "e500416265ceda3522cfcc85e5640197e53d5eb2679bd1cf3708f62ef4af1abc", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[segwit-native0]": "6bc4d61dd9a8134b8c821c800e91cfcf15559a03e9b03e1e9144debb5fc720d1", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[segwit-native1]": "6bc4d61dd9a8134b8c821c800e91cfcf15559a03e9b03e1e9144debb5fc720d1", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[segwit-native2]": "30e5354089ce5519ed95646fffc9f3468587482a19b81163b719d253421e3645", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[segwit-p2sh long message]": "20d6ed18dd6584879fae23768026fc50d70874a5a68c595251a256d320334e56", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[segwit-p2sh0]": "cf9e2197fe85422b3db5110db75bca948cda95d40917ea0c5dc4cb442d0afb98", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[segwit-p2sh1]": "cf9e2197fe85422b3db5110db75bca948cda95d40917ea0c5dc4cb442d0afb98", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[segwit-p2sh2]": "cb14f397c92ea679413d31b088e6ac149f3ac2406f28d5c07ac939531e1c3f7f", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage[t1 firmware path]": "0c706c1b116ead8623b6b667e57bed1bd2a43abd4b4eed510d025085a66a3e4c", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[NFC message]": "8696e425489452c226a59a6c6ef276f3faf80bfd4e1e1e868216b88f000f0260", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[NFKD message]": "8696e425489452c226a59a6c6ef276f3faf80bfd4e1e1e868216b88f000f0260", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[bcash]": "933d9466accabf431929e82499f29c29b37eb39b0cccd1b6a4a9b022ed6328ba", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[decred-empty]": "3961de777b7578dfd5e500285177284462b03c260f2a46f5827bbad906880b5a", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[decred]": "2b83146021fc6d4e870ecba9b79eeff057e51f1b92e8f6119afef4c7f1a090b4", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[grs-p2pkh]": "863ed334a92063c27233556e2ebe71c658d99d4a454ea2a7328d97200b4b65af", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[grs-segwit-native]": "b25d95a6546962059efc4b3f7749546a1b938c6084bd52a2a62322cfb4e522cf", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[grs-segwit-p2sh]": "382511a667f1cb2695c1fd140c3e1960f64d034c2cf94f39c017627bfc2d12ff", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[p2pkh long message]": "85a84af1b63221a1d0aa66e59a6323e67fcc25bc0f9599eeb4848f602720c3cb", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[p2pkh0]": "d45d875ec1ae14bb86f68673f5e5fd0597ff48cb3f225daeab7bd0ab069edc05", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[p2pkh1]": "d45d875ec1ae14bb86f68673f5e5fd0597ff48cb3f225daeab7bd0ab069edc05", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[p2pkh2]": "10a6cdf39c7d1c4f90cb7b741429c13cab6cb6fd0ec082a82f22220bab185756", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[segwit-native long message]": "ba43a9c316206f12559022c1a6170842b5abc1e4b9b31c41cd183ef71670f785", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[segwit-native0]": "8a50b6cc3eb28bbb186c4e113201425392ac8ebb1bb8f03e817b96b8246a9bd3", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[segwit-native1]": "8a50b6cc3eb28bbb186c4e113201425392ac8ebb1bb8f03e817b96b8246a9bd3", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[segwit-native2]": "ec4a77e34885849a9302779fc47e260c4d943a2ed4f8e6f962769a538261ebd3", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[segwit-p2sh long message]": "6fa6739fafc24cde1d9c820bb5dc6abd94a11283fbf40b5967a29c34bb60149e", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[segwit-p2sh0]": "9221745002c1e2d346d9822e358a13081db57c6a4a459eafbe6e83ee3a037d23", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[segwit-p2sh1]": "9221745002c1e2d346d9822e358a13081db57c6a4a459eafbe6e83ee3a037d23", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[segwit-p2sh2]": "d9d3cd25802f3d429d665f1c987d4f895bdd03ab86f13820282b4667991b9285", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_info[t1 firmware path]": "236dba354336b318a77a8de3ef74abf6fc703b6e044630884b581d72ea6d0963", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_pagination[long_words]": "1333ffd148cb092b927ee65ab020151a0da3ee7cb4e8166f097b1bbb2e7bea4c", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_pagination[newlines]": "590a9899c3a3ed23041ed483df877c61e73a4040849c28d9a3dd29db76a1f162", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_pagination[no_spaces]": "8738ce1102d51b8ba5ee0323b89804d1706473051fa0cc2c9c34c62d8c1cc2ac", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_pagination[normal_text]": "c69fa09b4dab1bafbbe38237d72d5ebc8449c9e188e6d4880136338c31a1431f", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_pagination[single_line_over]": "6ef0e5fe5f520320520fc33df8d91d2fcad0f8863c48d71aa9428ba482156cfe", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_pagination[utf_nospace]": "d7944e2882a1c71850f6bc087479976e7be548f01c4d7907776fd98b6707a0fd", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_pagination[utf_text]": "01658c7ef419d543d2117053de5ab97e6886c8957a3623be5a52c5b1d66d8829", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_pagination_trailing_newline": "0da2f2b6bd625bc5c8f9982ebd83f604748059a77bc1a49e857a07fd24968a0f", +"T3T1_en_bitcoin-test_signmessage.py::test_signmessage_path_warning": "705b683563a06d8eaad242a794e5c8683d41d560a9642761d183e79d85510bd7", +"T3T1_en_bitcoin-test_signtx.py::test_attack_change_input_address": "406e9f0bf3be42d1f41176b0d1f97b7286e834e1d15b5397904f981cea9fc5e0", +"T3T1_en_bitcoin-test_signtx.py::test_attack_change_outputs": "24ac4be4d6bcb7cdfd372bb3441f10563e13fd684ed3fdcc79c0c8e97830326b", +"T3T1_en_bitcoin-test_signtx.py::test_attack_modify_change_address": "477e69874284b2a1ee6e508983eb784fe7742574cc05c7987f45784e2e5d871e", +"T3T1_en_bitcoin-test_signtx.py::test_change_on_main_chain_allowed": "477e69874284b2a1ee6e508983eb784fe7742574cc05c7987f45784e2e5d871e", +"T3T1_en_bitcoin-test_signtx.py::test_fee_high_hardfail": "eb0077831dee4dcb6d6395d01ebf1a4eb78e05f6864cc3247e5c05b936656053", +"T3T1_en_bitcoin-test_signtx.py::test_fee_high_warning": "ad4a82fa012b89ce6a027b88b3170504f5372b93da947517078edbc647b56bad", +"T3T1_en_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.EXTERNAL]": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.SPENDADDRESS]": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOADDRESS]": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOSCRIPTHASH]": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx.py::test_information": "44e044c3f8b299aeed155f0aec66f60510aa7dcd3986d340c76ef128de6a428a", +"T3T1_en_bitcoin-test_signtx.py::test_information_cancel": "d242ec98f96d0db41ebcd7a44ce31bac38637ebd1103727445a068118c51956b", +"T3T1_en_bitcoin-test_signtx.py::test_information_mixed": "c76e1d787c589090bd950101fda86f62dff83e70d4f879ea1fb0519158c1e95a", +"T3T1_en_bitcoin-test_signtx.py::test_information_replacement": "ffce40135620e220930713ec3ec9554e6ae801aea34235ed0ff89dbb805c891c", +"T3T1_en_bitcoin-test_signtx.py::test_lock_time[1-4294967295]": "924ed54c06fd791910d8a43e0b7c6f39852b3406167045211dca4e495dc69b05", +"T3T1_en_bitcoin-test_signtx.py::test_lock_time[499999999-4294967294]": "8eb547d98a20c6333c50f507b62bce5536ece3b9c2a6ecbbf58f31d2fc45b003", +"T3T1_en_bitcoin-test_signtx.py::test_lock_time[500000000-4294967294]": "5deae35138650618ac4df74251ecb300a416addb1af5d7495b0090a23ceede5b", +"T3T1_en_bitcoin-test_signtx.py::test_lock_time_blockheight": "8eb547d98a20c6333c50f507b62bce5536ece3b9c2a6ecbbf58f31d2fc45b003", +"T3T1_en_bitcoin-test_signtx.py::test_lock_time_datetime[1985-11-05 00:53:20]": "5deae35138650618ac4df74251ecb300a416addb1af5d7495b0090a23ceede5b", +"T3T1_en_bitcoin-test_signtx.py::test_lock_time_datetime[2048-08-16 22:14:00]": "2dcdbdf6c4c2770d05b751e1ca1f1e33646c3f83227e298778ce5bc1fb919bd7", +"T3T1_en_bitcoin-test_signtx.py::test_lots_of_change": "e66b43aa7930e28285bcaa14d8ce3a1787a67648c17e55115722a2f90d375af8", +"T3T1_en_bitcoin-test_signtx.py::test_lots_of_inputs": "4210ca2bfc63d054923e03cd9e12a643e0f18a37df2045749911037e262fedf3", +"T3T1_en_bitcoin-test_signtx.py::test_lots_of_outputs": "4a3b8660ac30c4c91f5dbc9b58d02bc8d60a160ae255bafd3f56e4c697afa183", +"T3T1_en_bitcoin-test_signtx.py::test_not_enough_funds": "6b48450b917351d6f25753b29b9df6663c1e6dcdf6a795aae5986992f002b30a", +"T3T1_en_bitcoin-test_signtx.py::test_not_enough_vouts": "e198a73b60c1938810862a5e479806ac4d768f42c76e410e842cd89b66e63093", +"T3T1_en_bitcoin-test_signtx.py::test_one_one_fee": "af649cb645604f4122920ada7fd8b2ac30072a8ef48aadb202c87b1f198fb0ea", +"T3T1_en_bitcoin-test_signtx.py::test_one_three_fee[False]": "033c92c6af972e9e31cee0daf55e76f82015b960459b91cab58535b27711909d", +"T3T1_en_bitcoin-test_signtx.py::test_one_three_fee[True]": "3516df019ae876386583e8176957310b57a2a37af3b7eed728fe4c7708c69e2c", +"T3T1_en_bitcoin-test_signtx.py::test_one_two_fee": "51d00c0953cfac7ff286cb5117e56dae83e9ade576e77f3be8671ba7d9f8321a", +"T3T1_en_bitcoin-test_signtx.py::test_p2sh": "6b705686dc78bf72f8e9ae125b0bb775f814c2f517052cffd2cd3badc9d0dc3f", +"T3T1_en_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[branch_id-13]": "a6f1c9e302cd1372cc642cc0557d7de5132ee8264f27eab492e66cc0f33ab88b", +"T3T1_en_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[expiry-9]": "a6f1c9e302cd1372cc642cc0557d7de5132ee8264f27eab492e66cc0f33ab88b", +"T3T1_en_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[extra_data-hello world]": "a6f1c9e302cd1372cc642cc0557d7de5132ee8264f27eab492e66cc0f33ab88b", +"T3T1_en_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[timestamp-42]": "a6f1c9e302cd1372cc642cc0557d7de5132ee8264f27eab492e66cc0f33ab88b", +"T3T1_en_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[version_group_id-69]": "a6f1c9e302cd1372cc642cc0557d7de5132ee8264f27eab492e66cc0f33ab88b", +"T3T1_en_bitcoin-test_signtx.py::test_signtx_forbidden_fields[branch_id-13]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_signtx.py::test_signtx_forbidden_fields[expiry-9]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_signtx.py::test_signtx_forbidden_fields[timestamp-42]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_signtx.py::test_signtx_forbidden_fields[version_group_id-69]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_signtx.py::test_spend_coinbase": "05d642a9018b50279e386b000ca5591732677370d5fdf1685469ae2406b3bd4b", +"T3T1_en_bitcoin-test_signtx.py::test_testnet_big_amount": "85fe2a297d335bfba11b3e9e01a2ec2c9a30730ea06b967983ed4f4502323698", +"T3T1_en_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "2007e7cbdb14fe7db3c745a20157103855ec65cb932ac3f0c613de26e3f7dd4b", +"T3T1_en_bitcoin-test_signtx.py::test_testnet_one_two_fee": "477e69874284b2a1ee6e508983eb784fe7742574cc05c7987f45784e2e5d871e", +"T3T1_en_bitcoin-test_signtx.py::test_two_changes": "a5b47af1fb057b9384194dbf35c9f8de47c793eb26511028b405be06f09aebae", +"T3T1_en_bitcoin-test_signtx.py::test_two_two": "bd1e6e9b2f4704e1baf777a41e6f1e576be4cdeafd718e454cad973de1f0a9c8", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.BITCOIN]": "af649cb645604f4122920ada7fd8b2ac30072a8ef48aadb202c87b1f198fb0ea", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.MICROBITCOIN]": "73c15b8ad493c3d7b1d9885fb1dc5a56c68bb6a3d4ec9a3792c03be26795c182", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.MILLIBITCOIN]": "c74d09789466f3e48fa92ed5bda1e1dbcf7d9afc9d16df6061fa82395c8e89a5", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.SATOSHI]": "f09a0f6c8c10df04da3ceb63bb4d054fbba4fc6275ee92a376b53d133ca648e8", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[None]": "af649cb645604f4122920ada7fd8b2ac30072a8ef48aadb202c87b1f198fb0ea", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.BITCOIN]": "22fbf18572b82a266cf407f49bff21f05ebd777cfe4c36eaba1e428b48135cdd", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.MICROBITCOIN]": "6ac68aeb33f8e70ed439b3be24f1bc29beeace17a0a5bf2fa1ca89852d1576e7", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.MILLIBITCOIN]": "d975014bdaf34bbb6e48553bed41c3544529e907a02cebce1dd730f1ba38fa3d", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.SATOSHI]": "cb88988daa8afa19885d5eb9f051a1420a3a667b429417e1d0d0a6db6b5684ee", +"T3T1_en_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[None]": "22fbf18572b82a266cf407f49bff21f05ebd777cfe4c36eaba1e428b48135cdd", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2pkh_presigned": "5faa3de360408600bb51e48b59c9be7910340c2697af97ec7b97d64613024d2c", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2pkh_with_proof": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2tr_external_presigned": "8a025c4a07a30fd24274bb200091cb847810b07db961c8f73e4f5ea79da9cc9d", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2tr_external_unverified": "7c861af51673abc3516f25cf2f494951cfb26422886b5359b6c0123ba83b4e4a", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2tr_with_proof": "bc76b3b033eab274e39d8f56846d4eb1a6a3cbc97b2bb4218af62840a0d294f9", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2wpkh_external_unverified": "e630e07f6ca5724a6aa53b31b7b17ffe347d637be3f54f3a51e05bab8cffef6e", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2wpkh_in_p2sh_presigned": "651b9abda274123014f55118ddfcbf0fb08ff52377c0079e5a4cf6b7c13d5225", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2wpkh_in_p2sh_with_proof": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2wpkh_presigned": "191c9bff9eecd6ebeeba1d3e1b1701d9a6750f1bc9770f0a886936e19f6a689e", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2wpkh_with_false_proof": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2wpkh_with_proof": "b0b065fea6ca2acea50cd30b4637a4776688448ff0d86411dc6957de652162b8", +"T3T1_en_bitcoin-test_signtx_external.py::test_p2wsh_external_presigned": "5386d21e156629cf7df3cdfd98074357d93e025b113f74e89f271f4f847298cb", +"T3T1_en_bitcoin-test_signtx_invalid_path.py::test_attack_path_segwit": "950ba42994f18ee1b96786c8d49e33449b674ffff4715319889c9fb5f34a234f", +"T3T1_en_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail_asap": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_invalid_path.py::test_invalid_path_pass_forkid": "4c3cfdccd4f2dacb291d0b3c6d87baa7cdc8f9afe4cc605d9091f9ded9ef00b0", +"T3T1_en_bitcoin-test_signtx_invalid_path.py::test_invalid_path_prompt": "b3f3c1221160e0d9bac89bd44fe10cb587735585628ef6c652213ccf2d92d60f", +"T3T1_en_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_inputs": "27b61dec1412f9ac6bac28fe1914d76fcd2fcbc1a9054895786c2419ea50d9f6", +"T3T1_en_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_non_segwit_inputs": "c5e9f2d4508dcdbf7333531487209832041e7d9c5a7e8d9fe9d5b40978c2c885", +"T3T1_en_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_inputs": "27b61dec1412f9ac6bac28fe1914d76fcd2fcbc1a9054895786c2419ea50d9f6", +"T3T1_en_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_segwit_inputs": "c5e9f2d4508dcdbf7333531487209832041e7d9c5a7e8d9fe9d5b40978c2c885", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_amount": "3278de4acec9009035c80f1a9cc4dad11570582fa2eaab30aa7c034d4f8d4371", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_purchase": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_refund": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_output": "9b9fb6db5b35261355f3e335057b7086dae18adb09d94c446294004bc4016876", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_request[out0+out1]": "da892ff4e7de75f6b3c1fde48c915b4cfd9da2c3f0052552ce0b873c85a539e7", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_request[out012]": "768b6294843581c691d590202a8ef11c0040fff3189a9b0cde91b1a49d6df87e", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_request[out01]": "23e3f995af215af80d9dcdb00189a0545a77a40bfe55e195566ccfe41f78d2e1", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_request[out0]": "da48ca03cffd80b81d5d17cc8f967af2ea82784357ea894f20bf49d559916feb", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_request[out12]": "21aac16e5415731c271adb2e145ec9cf6313bb1205612b74f885a839fdb26c74", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_request[out1]": "de1b8868c3ef6abd31805540f4bb73b3693bc2ded0acea39ee2e9aa44c131a82", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_request[out2]": "66e15e830579ed547e8c28908fcdbcb2483658fbb22ae138764a594c82f60053", +"T3T1_en_bitcoin-test_signtx_payreq.py::test_payment_request_details": "fb9f7cd2571c2c72c56968c57fd0ec16b83d3ab9f0f5be9548d055f37e3f2bb0", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[]": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[hello world]": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[x]": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "b67260417612c7978b42bf0a7014a866152af7e14b0f9159eb2b30e450e10de2", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "b67260417612c7978b42bf0a7014a866152af7e14b0f9159eb2b30e450e10de2", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "b67260417612c7978b42bf0a7014a866152af7e14b0f9159eb2b30e450e10de2", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "b67260417612c7978b42bf0a7014a866152af7e14b0f9159eb2b30e450e10de2", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "dea3bad8302a74441357ed9f49362a2a395f561c0dcafd0a0251381fde16da06", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "dea3bad8302a74441357ed9f49362a2a395f561c0dcafd0a0251381fde16da06", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "dea3bad8302a74441357ed9f49362a2a395f561c0dcafd0a0251381fde16da06", +"T3T1_en_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "dea3bad8302a74441357ed9f49362a2a395f561c0dcafd0a0251381fde16da06", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_attack_fake_ext_input_amount": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_attack_fake_int_input_amount": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_attack_false_internal": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_attack_steal_change": "1b0378c2a799b0b890f1bc8652035d7284126009223f976e5623fdd0a8fb006b", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2pkh_fee_bump": "4d157fa6e9c1da33a59735186b756adb7e02189efc642b7732b373b2c7e0bc64", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2tr_fee_bump": "bd53e379f2e16c5b75b2cc6521ffba666e474f18bae90205aa773d3b6ceecc3f", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2tr_invalid_signature": "bd53e379f2e16c5b75b2cc6521ffba666e474f18bae90205aa773d3b6ceecc3f", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_finalize": "c0f93b453f71ae7f9bd28a27cb50dfa6a99d1131126777d0f7957b194ef2bde6", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_fee_bump_from_external": "bfb6c422e7a8aa05e5e71501ba640b4f6008684816efd86337b46afe6f75057c", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_remove_change": "557523aee043cdfaebe92f63dfbf89d0c7d4e65ad583471c18b91e66a067377f", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_invalid_signature": "c0f93b453f71ae7f9bd28a27cb50dfa6a99d1131126777d0f7957b194ef2bde6", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_op_return_fee_bump": "9362fd8a2a4db51618a4be853623a75e73541aef5d329b2f34729831a3c13bd1", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909659-90000-02483045022100aa1b91-c9b963ae": "77146b5285f8f5cd30307f66929d35cbc2c51fecb78cd6e0b2a491b59545b6c3", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909718-90000-024730440220753f5304-ecb983d1": "77146b5285f8f5cd30307f66929d35cbc2c51fecb78cd6e0b2a491b59545b6c3", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909800-89859-0248304502210097a42b-7a89e474": "77146b5285f8f5cd30307f66929d35cbc2c51fecb78cd6e0b2a491b59545b6c3", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89800-02483045022100af3a87-80428fad": "685ae658aa7b6d7d0e450798dfa88212241f89dce943e2dc7733e9ba0f32578a", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89859-02483045022100eb74ab-881c7bef": "77146b5285f8f5cd30307f66929d35cbc2c51fecb78cd6e0b2a491b59545b6c3", +"T3T1_en_bitcoin-test_signtx_replacement.py::test_tx_meld": "a50dbcdcf5dd7f0b4db8534d67f3fa4c079f37087ab71bc9541a652514acd35f", +"T3T1_en_bitcoin-test_signtx_segwit.py::test_attack_change_input_address": "6ab1dc24fa8dbc1c88a9937882069b33f0d5f0766e99faa7c3cd83709839a98b", +"T3T1_en_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "9023903d91c453cfa696777db99334016385832fa47af3756a1aed58d097ae77", +"T3T1_en_bitcoin-test_signtx_segwit.py::test_send_multisig_1": "f170d79bdc23af7161682637840abd2d271cb73dfcae575f0fc8704904fcf604", +"T3T1_en_bitcoin-test_signtx_segwit.py::test_send_p2sh[False]": "602ae135d5f67b9821d28c3dee2e55c0b30cb6cdbcc9fd7970d8e02f06cd6b7f", +"T3T1_en_bitcoin-test_signtx_segwit.py::test_send_p2sh[True]": "9aefcc92153b1053449dccdf9ef3abfe1c9cf82b777f22340b434ecccb564695", +"T3T1_en_bitcoin-test_signtx_segwit.py::test_send_p2sh_change": "c4d99122211e001a4dc6c421147dd9673f3400af44b26900e4ce1ed49ebefb54", +"T3T1_en_bitcoin-test_signtx_segwit.py::test_testnet_segwit_big_amount": "27aaadf7e3dcb1077651274046e4a4e53bcb708e3a140af0c3c4f92006d4ba98", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_multisig_mismatch_inputs_single": "1bca15e6a93a162199bdf9155e12a23c34fb7611d395ee1093735332b3741a5e", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_both": "72b94474858fd569d20de2a3324f5d7b04dacad3829c4a4499e7c26bfeab49a5", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_multisig_1": "11d1bfd3051ea6389577abd22bb5700eda61da7749af3a3732df17f24b3027dc", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_multisig_2": "2b4f72fd6274d1b3d51b7e4de1801b4a1cc55ce7e2b7bef9be152347a1e39ee1", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_multisig_3_change": "b62b6fde11bd95904270d2be7127728beaf9813cfb3ec94a1e128fbd19540a16", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_multisig_4_change": "ed223eb647b50559e2bb0fdf1a2027d735f9db79683dbc53df567996a0d8b180", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_native": "22fbf18572b82a266cf407f49bff21f05ebd777cfe4c36eaba1e428b48135cdd", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_native_change": "16d836480b99974630adf2a6afeca600cd9dec2343b686a20e3c2b5d854ad8b1", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_p2sh": "2f6a9c1392ba334cfc9987f68687d32c12558d08985e52ad71d0424014238c06", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_p2sh_change": "5647cf2836afd54d618f9da5820ef73071247fea8e50c87b5c2c91c733902321", +"T3T1_en_bitcoin-test_signtx_segwit_native.py::test_send_to_taproot": "d5fc037cf71574e69859ba782ec1a03279acd26eaac25b934a4d913230931de8", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_attack_script_type": "06ea8319a958a624a9febc0d79de37e3034753924b2ee015f2cf0ec3995cb669", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1pam775nxmvam4pfpqlm5q06k0y84e3-a257be51": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plllllllllllllllllllllllllllll-aaa668e3": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plycg5qvjtrp3qjf5f7zl382j9x6nr-5447628e": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1zlycg5qvjtrp3qjf5f7zl382j9x6nr-880d4a6b": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_send_mixed": "1c2e5c70e7a94d1009315e2dcd147612d848e320ccfa2eeb747becb4af796c47", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_send_p2tr[False]": "6abb97c5b7d3488b7d30018bf970507ada2f597b6b9b62ee0d9beb5d422e254c", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_send_p2tr[True]": "2d6f85827d80251c7759b5ab75ca65640d415d40877ea5d64a677190b8715f69", +"T3T1_en_bitcoin-test_signtx_taproot.py::test_send_two_with_change": "fb46ca21976ae67dfbe73f5057ff0304bda4f4000c341fcc8bf856d23c2d177f", +"T3T1_en_bitcoin-test_verifymessage.py::test_message_grs": "0117f15331639fd915916dc9fc33df1e5fb6ff419d7835c4fbfa63f0f448d5c6", +"T3T1_en_bitcoin-test_verifymessage.py::test_message_long": "fe2bb23c5a4f45d8abfaa91872c6a5615f03e6352d8700ca8b9c9cb4825b47ec", +"T3T1_en_bitcoin-test_verifymessage.py::test_message_testnet": "888422306be9265dbff77da9f74faef242c77304f3dc29b874a7e382497f7799", +"T3T1_en_bitcoin-test_verifymessage.py::test_message_verify": "0482e74cc56113072a40fe0fc9c77266f824e5bbd40f5e0456ea2e8c05045c89", +"T3T1_en_bitcoin-test_verifymessage.py::test_message_verify_bcash": "cf22932a05a0db1f4113bfa793d507009d90a48a8deda2b057b35a8bab2e56c3", +"T3T1_en_bitcoin-test_verifymessage.py::test_verify_bitcoind": "3e2a3c1a7b7be9a3cce9cf94d10361bc12bef0c63b1ff8e9d08202d8e876dceb", +"T3T1_en_bitcoin-test_verifymessage.py::test_verify_utf": "ae1867d920f8e18e277e03794d0566bcf1255f55ecbd8ef02bd7cbf8f14e1239", +"T3T1_en_bitcoin-test_verifymessage_segwit.py::test_message_long": "6960accf077f4a754bd318b210a10b7d00a5f9406bddca832ba9e2c91f98e7ab", +"T3T1_en_bitcoin-test_verifymessage_segwit.py::test_message_testnet": "b1f9f1864b9f327518c1ba3a1770072bea7d40c5bde442202206e2fce52171e2", +"T3T1_en_bitcoin-test_verifymessage_segwit.py::test_message_verify": "e600dd4ab19d4c55169cfbe73998fd3294a1fab45a1323289478b6a17b7f152c", +"T3T1_en_bitcoin-test_verifymessage_segwit.py::test_verify_utf": "ad1e3b8a0d1738020f002bb24824b529fa8ccdcf52cfcea354fbfc9c88b9961f", +"T3T1_en_bitcoin-test_verifymessage_segwit_native.py::test_message_long": "f37fb86060db61d5d356d0cb2d4e2ea5e39172b6f314a63fc3d4f530f5c99beb", +"T3T1_en_bitcoin-test_verifymessage_segwit_native.py::test_message_testnet": "93bf717a8b4d4371af323d07f0f4538539a5199f8c811d402445a4f08789abef", +"T3T1_en_bitcoin-test_verifymessage_segwit_native.py::test_message_verify": "ead03a1ab9def68c0c41471fc02f346d6dee943c9479bfe24d88a22e897bee63", +"T3T1_en_bitcoin-test_verifymessage_segwit_native.py::test_verify_utf": "0a7562efc888c57ced1fbcdbea8255bf604ef167098969b313e9a5531203670a", +"T3T1_en_bitcoin-test_zcash.py::test_external_presigned": "58ca129cf30e1cfb9a4b393967b859094cf7b7a3095bb1962f9199b52fac8245", +"T3T1_en_bitcoin-test_zcash.py::test_one_one_fee_sapling": "5b0b0f76aa1fb8eace9848f3dc9fe6e3e4730a85de184192fec9dce364bbec36", +"T3T1_en_bitcoin-test_zcash.py::test_spend_old_versions": "921df31d90290b36c1c650451c4979a85637bbe3e2e918d09d826e63db9eb597", +"T3T1_en_bitcoin-test_zcash.py::test_v3_not_supported": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_bitcoin-test_zcash.py::test_version_group_id_missing": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-icarus-derivation]": "a793235b055146b364dab3842f1364f1d73a0622fbb6f2688463b1eeb46155c7", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-icarus-trezor-derivation]": "b7325f5034455301c16ed0ee5799bbc26669eff127139198c4199bb94968a385", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-ledger-derivation]": "28383f6ff4094be8d3ce786556bd40fc97c3ad0b4c5879328824084ab4317b86", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters0-result0]": "8deed6efec61f0237dcc1e5048492e01d55c7bd833f2c70e4e8fed46e836ad61", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters1-result1]": "8ed36af60e84e1e43cf6d4e5c3fd3fff0125005ecb86f4a78e240f7837e777ea", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters10-result10]": "92b06620086f0cb3b61937db9c942d5eee357efa3fbbd2f86781732f2f692f89", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters11-result11]": "e02e6bcb1f9f6ea287ea5282600f622d52522aa463b48cdbb4ca107201e33d2d", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters12-result12]": "115d5b4e020583299b990d80068cf91c7cb3a66a9911d75ea1b6edff41e18a46", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters13-result13]": "5eebe2c33a6cd56cd926da5a8b525d862997df17846ac49ff137947a5034ef83", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters14-result14]": "f7d576e9ee746008a36d2a19ec7832cb2d107193e77303e5865ad4e811ee52ef", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters15-result15]": "23670f641c3901310bfb3624875ed6188b04376169062062ad580108e4d85052", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters16-result16]": "5c193e247cda7df8cf60fc1b9a132bbe4f75145023aea5c48fa0318b84f3f5c6", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters17-result17]": "b3f09e86d3eae98f8aa2800a78171e19a3edd0f49aeca1dfdc9aa6a5e08fdf5d", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters18-result18]": "5e926670cd17c32366a14ce859c41a8d7b803991b7680ea2ce2f2aa480a17821", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters19-result19]": "a51ca1c7df82ca4094847a4d1ce3a7fb675bd52e105e07d2f494631d5c6ca11c", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters2-result2]": "530b5b42f2d947a67c7439b9af31393ab42e70b73ce7334dd35b0d4f7fc6680c", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters20-result20]": "90dc52fee3fda8a08ca0b5ec6927c56bfaec144474df3c3184acf9f327d4aea7", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters21-result21]": "894a23c78b4f72dd299f07e7fbb21d1fa3669ac5921acc2267eb6f40c8321b96", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters22-result22]": "86a2724d90a4b32bda758216b1fb9b1b609df37d32031af08e91bfb3be40d61d", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters23-result23]": "8ad632a79decdd304a270a9d0275ab43433afc24f08415c0e2c6570230af2a88", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters24-result24]": "f68ecca4dc2ed146c83220e67db6bdf2d684c54c73a243da05fdd1efedcafedb", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters25-result25]": "b841eff7ee1d641a7796cf1e99dd260f0c176343ef0bd8c7bf697769430e0d51", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters26-result26]": "6176161d5744d832e208199e964b6452bc37d782654ba55d361ffeb4f0fb2dbe", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters27-result27]": "edb0279a09e1c36eda30a3d48f0de6f547bc6213fa588fded78c03c7b1cb5630", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters28-result28]": "432be76a7cedfbd3ac00de037cc9074332105770318c7b399749c7551b0b24ea", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters29-result29]": "5438e6f171f6a376e8832f50fdddb5b9f584e55018b85fcee8dea962b152ca1e", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters3-result3]": "79c1a4892f1f5c60274e3622a58b0479a678c3104d3677d4251c56056629db12", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters30-result30]": "911f9906068aba634eaed98136bb4e98c4a7b1bf3aa4fe1390a872f1547edbb8", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters31-result31]": "e429457e523144e8ea90645bf6dec8ee105e02d18eee3c4ba414c311e1ea9c5b", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters32-result32]": "42dfa0cac9ac525a24d7a1770f66d1790352b1900d614a50faa24fc7a07d9f9a", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters33-result33]": "92a896d7018181dadd4c49d4d01639d8fb454403066afff75355d59888c07b02", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters34-result34]": "aa7b2e537a9c7b9510f8298543161407ef4596088fc9c67c57f9a014b97c000a", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters35-result35]": "4ea97f8df29eb686bd4a2ac101aa6ccdf4f124ab1e2dc8b913b36e56a7950d43", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters36-result36]": "a3259e596d5f8c4ca8e9ba4de2f14fe30d269a4c3d011778b84f73ae4a4c80f0", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters4-result4]": "7fabc235b262cbb2fa45e42aeb900bbc1cdd8a684d2ad5e08b51fdb147657990", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters5-result5]": "c40565fd4fdcf558c29c67b25e2aaf88e1e41c3d35735c344ee09ec672cc1266", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters6-result6]": "0053e85ac2f8d5659d098f1d878fa7e37d712c79d3bed8a596bb639fdfc720e3", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters7-result7]": "37afe319cc51bfd117eb04d350e1d2a174030d0f21723eef23ccec7eeb887bfe", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters8-result8]": "5a9e1aedd3047e3f741f88549fb2497e2e9216ee326553efd146ae078449a5bd", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[False-parameters9-result9]": "4b9aa38bea642c08c31c946baf12ce209b5106a5d8894939def0d899c580a4af", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-icarus-derivation]": "5dd80af476ecb417881167555c48b0e267d575ce29f952dba73158861de802b6", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-icarus-trezor-derivation]": "3acdf363fd73843b24bcc482bbffafc0f38eee9a29e1b46a2d101e19851b77bb", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-ledger-derivation]": "fe53efd4fb003b92c0ec7c73e4f5bdb4e37cda1b42bd86c319328d127e4074ed", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters0-result0]": "e8f224fe8adedfeba19c84716af802720cb4df5bb2e346f58b7e9daaefc1a129", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters1-result1]": "dca5729b439904a756b21e18660a933446881f9d4fa47b2b579717b9d6a72e52", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters10-result10]": "9bcff6602d53b7ab987fa11da5e47a6dd4c1ce458af332acf93e8699709cd3fd", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters11-result11]": "151fb9e8eb4eb78c1433de17883440f658661137667733b78ce46027e29f856a", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters12-result12]": "b75c9f7cd0741200af7dadb268f07cf29bb80d1b6b3ee5d7b640c31b5544f41d", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters13-result13]": "d0aa6f83db15be9e81e663daed4ab2d08c7c4f50fe3947a95607ace47e33dfdf", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters14-result14]": "0f2826893d63d9044ccade5681fc1c1e1bb132fa18df0536be1809333bdd5eef", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters15-result15]": "d42e55cc3b2d396128b774a28fdc7e02a9f38497e5df33ba8bc544752e331766", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters16-result16]": "f538030a0b25cb9b2a555f52d1e63fd66dedfce7eb0544838270f1afe3feb8f5", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters17-result17]": "96c6fa4c4dc664ef49a515f2ad2a01639a20d25d28a7d93bea76e1974e171d15", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters18-result18]": "1b48eab06b558cd524f5741db98497d0eb9843f3d216f24e73c904b6ccbfc0e0", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters19-result19]": "cd625eb49e2df164c9118ac74c8de1926c722b72c6139e3c5984f5ccceafcc55", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters2-result2]": "321abb9c816c43d6ec44ad22188bb835505c706df4f9f37ea131e82dbe83451c", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters20-result20]": "1e53c7f2c73c425437435cfc4b02b4240fb1e230a221ecfec39ab09d8f4161c2", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters21-result21]": "2849e68d49e69c8244813885f59021cb993c2f2f29110d3f2e129f4610827ae0", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters22-result22]": "44acac35409ee4a055229367bfc80d745e4847fdb631edf7621d47d7fde7d34d", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters23-result23]": "462b2be9aa31806ba6e30ec00b8542ab263b518c9871aeae10506b6b07a96b98", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters24-result24]": "45137352430b89fee0dc777574b3c3c12b807979a00f277bb2e21bff2ad1c8bb", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters25-result25]": "c8a2b7c44515e1faaa8269ac4c60f1f6c3d22827b924fbd564fba3c8b63b0db8", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters26-result26]": "487484df2758c739067062dc2b9e3080a5e04f8aa5c68ae9277060dccd1eec36", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters27-result27]": "7937e85284cd08917b7db06c4feea5da46f923907a6240a86362031547841b43", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters28-result28]": "faee9b0ccb1ee2b76b8fad5e4da9d6d3d8a6476128a0df91d0d47f5dcef89320", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters29-result29]": "0644211c8a04a5ef6bea4867fa7f4d008786bcadbd4a22a2a32a8203ded4053c", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters3-result3]": "e03d2e13242ccb5964145a256cff5f0d8ecb902ac8f040b6d5dae575be18d262", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters30-result30]": "691b3ccd065e0ed3fb665ddb6e1a6cffe67d7fe74c859f677819efd8030fea60", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters31-result31]": "dff434abdc2e025c5de3a4bdd0a8614f58c27d3778e6062e951244c9d4c5f2d0", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters32-result32]": "97e8a0674c484269b3755a87380859a3d0cebefb95c4678be5acd7e4b6373795", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters33-result33]": "0d572466e8578b2bd6152e3b20ce33aa9ba69abd7da0e1ccb522108484ca53e4", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters34-result34]": "361e677305d13f75bf0a71155f8f384cc7a85a53d27d92b662671354deba1756", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters35-result35]": "a954b7609d2c5a898ad54f1a15c2d7f190d4e2fb5eb828a1d7a2ac107b87f10d", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters36-result36]": "abd332668db3bf105d3a8e55fa1ccf90b4f1acb62e5d1c2860f7ee2599b80534", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters4-result4]": "2994c65408ded3a3a389cb1d3fb7fffd72f6e24aab6b26f6eba08315c09e9444", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters5-result5]": "288e4e13bb3a3a7948e925dcbad8c61cc7245c52409818bd2178b49f0c230c23", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters6-result6]": "614cc13a64f35ac3247b83440cdea22a18257afef165fc54d41917500cdd409f", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters7-result7]": "1c4bf364e403371d1b4570a6d7a2b8f9ac231851cbf67f56f64fe350e0edadd1", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters8-result8]": "a9958771b2394aa3d6488f5d28d0516fb2632997be4ef3cfe272d8468b475e70", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_address[True-parameters9-result9]": "8281c20dcf6ccadd0e0a0db53adb4641706dbcb48bf685762173f5645abfa39b", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[icarus-derivation]": "5dafbc14364b371d938a5dbf2dd1696958dd68fd2f10702dd512f5bd7df02602", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[icarus-trezor-derivation]": "a882c9e5ffbaca9ec0e7f0fcc275270268fa9ef3c9ed135e543ce39af912cbe5", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[ledger-derivation]": "d3c1b530540a57f50020e62cd9acfe8c2d64d8c1ecad74226e9419876ae73f16", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters0-result0]": "262022e068ac3dcbba07b3451e9b670187bce739b85cd87835b18c544ab66b10", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters1-result1]": "dd731124e63c9856d1b3ca05f5b11d922b33bd82db7535f7fa8b135213f648cb", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters10-result10]": "969a01934c3f20e57c1ef3bcccf14499c15621489b67f8e9831dd7365ae3c130", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters11-result11]": "1b397226957de70e91fe48344b86beed80d3c21fc5bd2b6c2b38c1ec6d6a35f3", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters12-result12]": "99898cc1734fd63bf4d7906f30087e77138857371109b4c58fcb0aa8d312476f", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters13-result13]": "bd9d8a62ed8e4bb8dfe479f6c14d026b41a8b5f8d9a65c21784306dc208f4cdf", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters14-result14]": "93a3099eba0179a1ac48e751a7140dedf77cfc572fcc90e8fa6c9f110ceb2b8c", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters15-result15]": "027943246f0638357411b1195bd35a2f0d9a976449a7efd3d8dbf26b8205410e", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters16-result16]": "6173e8a3a2165a0f54bc124bc505a7ce9aeefecb07cb0803fa22c7d9e2487d0a", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters2-result2]": "dde7f3743ec2e9bd7d441b2f6970ccda38c47242fd64440126ded6f61825f756", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters3-result3]": "eab03e524c6cfe6f04d0dcf1a7010faef85d62720f9d8722e6e137e7f05abc33", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters4-result4]": "9859e1419d1a4aa46be81171ec835e137184d834d5f57ef37e918061b485ca8e", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters5-result5]": "e48073cb63f1bcac2d7e5f8dcf59e3dc65edce7205eb0f410f70133d28779130", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters6-result6]": "0942bab8dc494e8527d4ddfb9411e43c43d5960feb16018cb45c5ee2c6f57770", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters7-result7]": "eb01dea0983af584be8ebedacc140c9e5d295204c7f43f604122abae3ffe8f82", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters8-result8]": "4ec3428cbcc79e37db158ec1769f751044b5d3936bd057215c2076ddc2487e21", +"T3T1_en_cardano-test_address_public_key.py::test_cardano_get_public_key[parameters9-result9]": "5598cb3d539a85ee72edbfb70583b43b236e4638662de28bfb642bdd93a6fe59", +"T3T1_en_cardano-test_derivations.py::test_bad_session": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_cardano-test_derivations.py::test_derivation_irrelevant_on_slip39[CardanoDerivationType.ICA-3b0af713": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_cardano-test_derivations.py::test_derivation_irrelevant_on_slip39[CardanoDerivationType.ICARUS]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_cardano-test_derivations.py::test_derivation_irrelevant_on_slip39[CardanoDerivationType.LEDGER]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_cardano-test_derivations.py::test_ledger_available_always": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[all_script]": "bd5251d6b4525252b16983691a028174d6c083b2c062bb076d6e2f242e470812", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[all_script_cont-aae1e6c3": "211a2ca1fc8feadf49d0212d66c4017a12f6860e479cc9da494d3a2db9ee4a40", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[all_script_cont-e4ca0ea5": "4e93343b9e86999504bb3b8e423c5620eb53c86a9fc82f47af142e18d70a457e", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[any_script]": "a175d8c11f1e81eeafe332387e79b3f4bb056e4b1243daa734ea2e9a484a449e", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[any_script_with-f2466a2e": "aa80e685410e23559d8273af3e08e53c499326759206e52fa45556b02f4abeaa", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[invalid_before_script]": "e754f01cc31ef7efb83621473556fc0a2d81743594ef62cdfadb2e8233c12ca7", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[invalid_hereaft-d01d7292": "3c6c11eeddec4f0438c5180ce4cdcbf69ef1cf04470e5f0dd38a53e17fd68203", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[n_of_k_script]": "81005c114bdbe998054d6e94b60bad71d98e7d38715f07a38fb64ce0719bd9b7", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[n_of_k_script_c-d93f5fb0": "d4cb9b8254b7f5d42b6440d6c1d8c7ab4802850c0e3d906b4489302da43e9981", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[nested_script]": "714fa46f0617fc163cb8b7fd2f947f3db9e2e7f43202e77a39eaf612eb3b057d", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[nested_script_w-789238e6": "48a066f73096f96a685337d3942ada9493abe686f5bf70a2a224a999ba5dab3c", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[pub_key_script]": "c3af0c697cfff8e404e6671e5f77f3b556386fbacd25eab158d866c21c6148f6", +"T3T1_en_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[pub_key_script_-1579fe2a": "9343101c53fe8b7360ecd5a102b3e507aabf29f37eeb253df3c88f6deecacb7b", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[byron_to_shelley_transfer]": "2e4d092a9e9348ee51e3527a9b81844e25bb4bca822ad2b817021d66b54357c6", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_change0]": "8b67edca40129904893563b0c85d2c86398a078cb740a3ca6e23d6489afc1813", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_change1]": "3e13929eb81c8077e946779e4ab3b1d3b5a461bf5a4cf3a886d6ac0a1d5297d4", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_multiple_inputs]": "07975bcff0d8fd7d5277cb79fcc986a9d250dd4e78a13128c98912e4e83becc4", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_without_change0]": "07975bcff0d8fd7d5277cb79fcc986a9d250dd4e78a13128c98912e4e83becc4", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_without_change1]": "cfc2ff70d16e4b00becc081367494ef3ea66f2702b318752077ea1002e6aa972", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_different_policies_-1dbb1bfb": "b37e039e74b17959b0d2f13d60bac840956b655b93d8395b9dceba54b4e0e504", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_multiasset_output]": "7572d0edd262f438a53b71eb79f311c0219cc472613492fbc72797d879f5c1be", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_no_ttl-validity_start]": "5043a77c9407a858b905aa2ff2d5ed9f2428519b529262b74feadc13f75c31a2", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_a_required_signer]": "d9c57a802003857f97ffb5eae4a42f93d745c6d574dcad17ef5408bde9d54b36", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_most_elements_fille-29691455": "960cfc6d88ed3325ec564aa9365fb20f489ad0da15acfa2d9567860e798acbbc", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_output_datum_hash]": "0d1f0bcc4aa3fb97b6b2cf9748a0129fc2e45c234243da40b5fc19c34f093ea0", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_script_data_hash]": "31541c99c75d9ba3cc057dac8649890544313ee4dfa8040187238ca3383dfd62", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_deregistratio-1ab28f77": "cf660c71ddea5035946153c57114466d6ff0ae5d4e0af7d14516f9c26f61b517", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_deregistration]": "cf660c71ddea5035946153c57114466d6ff0ae5d4e0af7d14516f9c26f61b517", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_registration_-a144c34c": "2395691691124886700515d814ac9839732a849cf5d96b8db9acb196c5289d6e", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_registration_-bf5f9707": "f73a3e9d253d92d0be75e8d9670f57cb6306abb2b89d5cdf043adb7e1b4889f2", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_token_minting]": "b930f013a193eca96f7692223256eb858c060e6b15029df322c7d8d9b6c02422", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_a_required_signer]": "a75c7275cd4f50c2cf086d84af7d10ffbbb8082385f7e0d2a01dbbe10b0468d5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_both_output_formats]": "fa3cb8592caa01cd3f4121dd8a1870f0fbfb2280ef5bd30224bbcff6e98473cf", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_inline_datum,_refer-d1082570": "fed09cf963c18cf146e4b76e45a76ab8517e92bbe937f6eba6faefddd45169d1", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_long_inline_datum,_-1f681aaa": "46ca1f5850ea62e465758494f42d2970607ab9c34e36fece093d50f901c9bd69", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_multiple_correctly_-6545455a": "9269b9465b1581f0629cd8b317ccf57b69b9607a926f01d982d6f6947f59fa90", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_network_id_included-d9df16f9": "07975bcff0d8fd7d5277cb79fcc986a9d250dd4e78a13128c98912e4e83becc4", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_non-zero_address_in-57a740e6": "a6ef1c68694d404faae26fd10c501debf48d56df64449ebbcb4dd43a5826a210", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_non-zero_address_in-f709f55f": "a75c7275cd4f50c2cf086d84af7d10ffbbb8082385f7e0d2a01dbbe10b0468d5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_non-zero_address_in-fab7e996": "3c045328c328729ae658fe885d9aa49bf39af763febeb0e7826e8cd18cb4b5e0", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_output_datum_hash]": "fed09cf963c18cf146e4b76e45a76ab8517e92bbe937f6eba6faefddd45169d1", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_output_datum_hash_a-84ad587a": "46ca1f5850ea62e465758494f42d2970607ab9c34e36fece093d50f901c9bd69", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_script_address_but_-b0da7209": "585cd801813486920555fdad9184439b3b9802f8eac82f7d95354f6a34fd6969", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_script_data_hash]": "a75c7275cd4f50c2cf086d84af7d10ffbbb8082385f7e0d2a01dbbe10b0468d5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_token_minting]": "48436be0688c36b7a7b372339eed6eedd367b42b2429c2410d7dd85b28072323", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_an_ordinary_input]": "5a20fc3692a0f398948ac869026d8ae313577495ad804ab3bd09638e0b5974b8", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-a33e6741": "a4ec018180fb251666cca02e2525d98e97fc510313e2aa44baa13fdf373f33bb", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-a6481374": "97c3bdfe30e901bd5b4938e4dc19ebfb788ef2b4166fd77aab99d1af1e6d102f", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-ae657c7a": "6497a875d1d188bcbf0293e303c9cea13d26f88b12cd1422239b99aa0f2ed3ed", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_key_script_addre-d3366a63": "31ab7ddf5da2bdd7da4f20c39ae566f0fffd3e84cfa7dbdbe7ae2916482809fc", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_device-owned_collater-8f38b4d7": "a1389ced8400ae5464f921d39bd388ee855de605343c71235097dd0731820db7", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_external_collateral_return]": "42eed639788adda40cb3b5134b97f02974db0fdc27b87a686d7855b5feaa80fc", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_output_datum_hash]": "d3bab830b543745d67656d0913f62f073e315293dffe54382024e4c9fda96b71", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_reference_input]": "641709e3e10fa91ce21803ba5a52cfc434cdd3578bcd962164bcb99d3a43d6da", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_credentials_giv-6a67c1eb": "178e9ba04a5ccbce4326a33bd11fe80b2c8d9e2d16287829a8c48ef8570def7e", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_credentials_giv-72ef969e": "dbc002eddbb6d4a5f71eb0ca8da65903837b2da73201ec1714e3124ed2c3e064", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_deregistration]": "dcc12f084e836ace643b6f503e60b003c88c419d27f483a11737a9e9c6250d17", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_deregistration_-78f5c748": "8c7a81bc9e9e95cd987b6e61036c95f64818b7c1f77c684aabf78297ca2a5ee0", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_registration_an-4da9385a": "2c4a8063b68f4d1c6b1b39f16cb39c9adc7f0b2176d39ed4e56c12b7129c21eb", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_registration_ce-46b0a250": "5c53c3396091ddf0f8a716f471e6c2740c1385a0a04085163299c1ceeeb89092", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_token_minting]": "a4114ed4ac01babea79a34adfbcc0a74b85f4b713af6ee8cff6cc8397c57e59e", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral]": "b69e40793e7ee2df7db1cede931da022fcf9aac5dc71774732c542745ed86450", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral_and_-3f0b305a": "38bc1a59a58e5d66e4fcfd0ec815765445ece013a158997778042417dcf236e7", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral_and_-c92d773b": "94178bb10492c182aa49e0f3c9defa06da9a4a9029bfc500438d2505a2ff29d8", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_without_script_data_hash_a-9590827f": "3dcc07313a80489e31e0615944cc196d0fcc8970578476b562b91c367e282b09", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate]": "a3cd44951bb897630bf0b38dcb4f8ae3366153ad4077b3dcb0f17afc72d39305", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate_wi-336f4a44": "a3cd44951bb897630bf0b38dcb4f8ae3366153ad4077b3dcb0f17afc72d39305", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate_wi-d3427614": "7f0b5327a83fa2f80c83beb131182000c2d20bbc18a563ea2e2bb4783f583119", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate_wi-e1e17a76": "6ec6c8869de3eb9cd36e821a4b8509331ac4b4f49263b2cb5d99730682ed713e", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_with_zero_margin]": "f79ab687372b56b3a554af84ae69fdd56c4835cbdba79793b80e54a16de27798", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction]": "b588d1972aba821545fcf4b60c308fe945fa907f087e2db280433b0419156b22", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction_with_additional_wit-36ba8ce8": "231ea4e3ead93f6785985688a996772e6d9d73e008b16ad08aa2e077ef59af52", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction_with_required_signers]": "b775180796400c7e96abc5c8d07a937adc0b1506e21154fa8a6d2a1288df30e2", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_o-0c37e6dc": "742d2ec5dd248038f744bc22a63246b06e810e88490d162dc8afb2c3a17a518b", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_o-7f1d12f6": "27eb9884ece8027dc01e64b3367c5ae79021ff0b05277d772869ea1607a7f111", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_output]": "a75c7275cd4f50c2cf086d84af7d10ffbbb8082385f7e0d2a01dbbe10b0468d5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_script_address_a-56fc16f7": "10f5a3304c468fe5eca232d508e427023d9276ff5f8576c1c5df5e263599bd20", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_enterprise_address_ch-15518a4c": "f722a2a9d9a92911063f262e8122896ef129b15b6e3e7bfbd7d1773eaeaf5890", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_pointer_address_change_output]": "1df3cf734d6342f74cde5b48d78e3a260be7dafd895c57cdf88154c9b6899d33", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[stake_pool_registration_certificate_with_no_p-0bbad967": "eb632b495afa606d4eb03d0cd449859a659c5d40ad8f6ada7b33fd59ef163708", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[stake_pool_registration_on_testnet]": "033d136f251737d3c3bd3e43d7aeed40e5c2af92266a99c17ce0ca45e23c3505", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[testnet_transaction0]": "203e1cfccd5f40c0ca3eba2ab8812f37b72562a0ea8ca47085213c34e15ea8a7", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[testnet_transaction1]": "4312df9c0b61cbf8e29efae866efdb58df2a339adeffde75ea72e01259a4b4bb", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_auxiliary_data_hash]": "a75c7275cd4f50c2cf086d84af7d10ffbbb8082385f7e0d2a01dbbe10b0468d5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_base_address_change_output_p-3c7243e1": "137fff528553be9c8c12b08865441f954d7423b96b5fe5b5850cf3fbb86e2aa8", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_base_address_change_output_s-20438873": "28ed27584c289daba9ebcb0b5cfa37434fa7482877b87dd5b17e971bb0c22db5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_cip15_registration]": "399d21207fd15392b2b1fb698eb1ca23330e14cc400910e8169780dbcec22b67", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_cip36_registration_and_exter-a66e1a50": "fdc2b395cbaf01587842304f4554246eb8cf6f39cb3960d34c8aec9a382f5328", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_cip36_registration_and_exter-b18e613a": "d7ff337c6fd0c7cba6f1d9f66fed32eba55bd4416178b14ba14de11352b9e3e7", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_cip36_registration_and_non-p-26df89e6": "326faa34ad4e0e092a8a446d3603b06963852e0c3baefa7fdd20d3a1c78fa1aa", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_cip36_registration_and_other-6a6c5c8d": "1c83aa4ac945a5e425d585a041594324c8b11d28d34a86dc51d9a77ce9a35a51", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_cip36_registration_and_votin-1b01d6f0": "bd44276fddeaf4511fb7241a65fad11012088c168d26ebe314fc1e0c204edf1a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_everything_set_except_pool_r-1e1ef130": "dde4b7c2ea73199f674943b01e3cc9e1acec55f7a9ca28ab8c859ca91640a772", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration]": "2059376cc7831247e94634244bb7569cbff6eb5eafc8474875a6073f695857e7", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration_and_withdrawal]": "2059376cc7831247e94634244bb7569cbff6eb5eafc8474875a6073f695857e7", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration_with_ac-9ca046f0": "b182539ac4d8a70556e2eb004723bc07d8ed218e7239a6e45f482e65b8b8a426", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_and_stake-3fdfc583": "8d45248ed4f81d0e42054e39041a1fcc00863a006144147c9b0d9842476ce7c3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_certifica-e7bd462a": "0f0095ba797fc8998b0d45ae32d88feecdbef4b99041e9f68ec85c0a172fdaf9", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_certificate]": "0dc14651ad672280f3dcacb5a406444e5e1c706568fd390a54fd81f25e081197", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_ttl_equal_to_0]": "f5d2d5e4b29e094268b485cfc59d6faecbf09b72bc2252e14325d7e4a53beda6", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_validity_interval_start_equal_to_0]": "08872494c7b3422048efd15aa0fb136fbc9742a3229b5d129a023add1bc0751c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[1854_change_output_path_in_ordinary_tr-805f9bd0": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[1854_input_path_in_ordinary_transaction]": "07975bcff0d8fd7d5277cb79fcc986a9d250dd4e78a13128c98912e4e83becc4", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[additional_witness_requests_in_ordinar-9c4f94c0": "07975bcff0d8fd7d5277cb79fcc986a9d250dd4e78a13128c98912e4e83becc4", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[all_tx_inputs_must_be_external_(without_path)]": "8433673d18ec3f32bdafa4df6e8936a03831354ee91b597cbabf0cecbb7eab91", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_mint_token_group_in_wrong_order]": "abb29879f4bfc730eb3c1273082f5b9abe106f9eae3b3d3e363a0061410a24cb", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_multiasset_token_group_-7c1351bc": "d6b60d525662db4f50820dd2aadbf1751d74640262ea5d36c59f7a291b64ec14", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[auxiliary_data_hash_has_incorrect_length]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[both_datum_hash_and_inline_datum_present]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[byron_to_shelley_transfer_input_accoun-863fee7d": "2e4d092a9e9348ee51e3527a9b81844e25bb4bca822ad2b817021d66b54357c6", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[byron_to_shelley_transfer_output_accou-5a99fb35": "5043a77c9407a858b905aa2ff2d5ed9f2428519b529262b74feadc13f75c31a2", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_both_path_and_key_hash]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_both_path_and_script_hash]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_invalid_pool_size]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_key_hash]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_multisig_path]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_non_staking_path]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_script_hash]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_and_stake_deregistration-e17db500": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_and_withdrawal_account_mismatch]": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_path_larger_than_100]": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_staking_path_larger_than_100]": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_with_script_in_payment_part]": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_input_is_present]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_input_prev_hash_has_incorre-99d2dc0e": "da0e65e13123933d146e70d198b5514b6222ac170939d4fbbbba84a06f5256b5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_return_is_present]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_return_with_datum_hash]": "0c3bd4ec49def1573df016b7830e5a9b7c984c58c25406054e74482769f07659", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_return_with_script_address]": "0c3bd4ec49def1573df016b7830e5a9b7c984c58c25406054e74482769f07659", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[contains_a_different_certificate]": "787846650867f1ba3b58b138efb899b9de030dc07b114e1b448c1c1fac3d1ead", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[contains_multiple_pool_registration_ce-3000d4f0": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[contains_withdrawal]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[fee_is_too_high]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[inline_datum_present_in_output_with_le-43c025ef": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_change_output_account_mismatch]": "64e61dae2757cf9f237493e454ae527c77a0a108a1fe9d92cdcc561367a7be06", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_stake_deregistration_certifi-b3383de2": "db6f5d282c4eefb95b236cd1a08cb59c94167d9604337982ea5a97a306b9502a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_withdrawal_account_mismatch]": "a75c7275cd4f50c2cf086d84af7d10ffbbb8082385f7e0d2a01dbbe10b0468d5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_prev_hash_has_incorrect_length]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[invalid_pool_id]": "787846650867f1ba3b58b138efb899b9de030dc07b114e1b448c1c1fac3d1ead", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[mainnet_protocol_magic_with_testnet_network_id]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[mainnet_transaction_with_testnet_output]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[margin_higher_than_1]": "787846650867f1ba3b58b138efb899b9de030dc07b114e1b448c1c1fac3d1ead", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[missing_owner_with_path]": "8595d86f024902af417cf61d79752361f991e83dcaa06653ccc3e3a5bfe1b03e", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_1852_multisi-b7679330": "d408b986aa66f53990851d09d2c1db4ca8714640301c35aa8d96c3552f956d41", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_a_collateral_input]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_collateral_return]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_long_token_m-9fb3cfe5": "83f4c429914599c039dc8cc49ec9810670868a585fc968de9dfb1efb5c5927cf", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_output_conta-e3b36436": "04ae909cb1220b008e46f25b0f3131dd27ee97defab647744f412ac6e1c4d3c4", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_reference_input]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_repeated_withdrawal]": "20e917d8ec872e7461b33dc59e9b77c8dc0c076dfcde4a864bdfb30a111fa0af", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_delega-19d1722c": "fe52c0528b987d5901cd736cb3a6a127285b2106719fae16be1a808729de865a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_delega-394991f1": "fe52c0528b987d5901cd736cb3a6a127285b2106719fae16be1a808729de865a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_deregi-351ce869": "fe52c0528b987d5901cd736cb3a6a127285b2106719fae16be1a808729de865a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_deregi-43da91d4": "fe52c0528b987d5901cd736cb3a6a127285b2106719fae16be1a808729de865a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_regist-456f1292": "fe52c0528b987d5901cd736cb3a6a127285b2106719fae16be1a808729de865a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_regist-84b1254e": "fe52c0528b987d5901cd736cb3a6a127285b2106719fae16be1a808729de865a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_total_collateral]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_withdrawal_c-9f7e1700": "20e917d8ec872e7461b33dc59e9b77c8dc0c076dfcde4a864bdfb30a111fa0af", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_withdrawal_c-e98b1f5c": "20e917d8ec872e7461b33dc59e9b77c8dc0c076dfcde4a864bdfb30a111fa0af", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_wthdrawal_ad-3291ee9e": "20e917d8ec872e7461b33dc59e9b77c8dc0c076dfcde4a864bdfb30a111fa0af", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_without_minting_b-da5ba399": "d408b986aa66f53990851d09d2c1db4ca8714640301c35aa8d96c3552f956d41", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_long_token_m-350c65f4": "1fddb61e3c3a7fc0bd764b534a9d836a1d71256ba213138ca7e71f59f59e2519", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_token_mintin-bc56f145": "210426af15bf66882c21b523bea7522d93f06f0a67bdd9ed59067edaa1aa07a5", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_without_token_min-a128d577": "11b2bd7e0bff71be8c9c271770b59cd6b8c02d0b0500b58ebd8e61ca44768491", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_has_invalid_crc]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_a_valid_cbor_but_inv-ea3da215": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_invalid_cbor]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_too_long]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_too_short]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_datum_hash_has_incorrect_length]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_has_both_address_and_address_pa-2efc280f": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_total_is_too_high]": "66c962ebc60a9d2bfb0a20defbcac98c2ebbb181628105fb89661578ac6479a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_with_reward_address]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[plutus_transaction_with_output_contain-74465253": "086ceaf6c97354ed2de94ffeedce7a51c86dac8b6351228f692d6c59368ab0d8", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_mint_in_wrong_order]": "96581a719cc8a8ec7d1299fc48138ace97f740645973ba08294439a354858f73", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_multiasset_output_in_wrong_order]": "a8dc52d68ddc7b418dd86cbaddbea42a45bf722e25fe477e24660123af8eef94", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[pool_reward_address_belongs_to_differe-e79b6855": "787846650867f1ba3b58b138efb899b9de030dc07b114e1b448c1c1fac3d1ead", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[pool_reward_address_is_a_base_address]": "787846650867f1ba3b58b138efb899b9de030dc07b114e1b448c1c1fac3d1ead", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[reference_input_is_present]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_mint_token_group]": "759fe8fda91115b4f75f56e4f95cc52f58ce099de2ba466874e23a6c35ff3c6a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_multiasset_token_group]": "945ab62e3008545dbb6d6ea38595fc693844001d093c78dd969a7b5e1b67f1f3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_mint]": "c93d56711bea6a2317d8e14d4f93a9b0941593c87225bda96b8524488ce4b6bb", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_multiasset_output]": "1e62b11c3eb59c4af8e7c66e6481a956b186a32e1ea6f20ab679f5abbae98684", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[required_signer_with_both_key_path_and-7d9a3c59": "0c3bd4ec49def1573df016b7830e5a9b7c984c58c25406054e74482769f07659", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-02b129f8": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-11c8b442": "a3cd44951bb897630bf0b38dcb4f8ae3366153ad4077b3dcb0f17afc72d39305", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-2d1899d5": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-3f8170f6": "a3cd44951bb897630bf0b38dcb4f8ae3366153ad4077b3dcb0f17afc72d39305", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-60961d51": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-790fc948": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-883e81d5": "dec3fdd0efb3f3e163134a1043b5357fe686ebb9013ba4b9c14be1dd9164d434", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-9ae6620c": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-c3588066": "a3cd44951bb897630bf0b38dcb4f8ae3366153ad4077b3dcb0f17afc72d39305", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-d0eba163": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-e7a533e7": "787846650867f1ba3b58b138efb899b9de030dc07b114e1b448c1c1fac3d1ead", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-e908b1a8": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-f9976ae8": "787846650867f1ba3b58b138efb899b9de030dc07b114e1b448c1c1fac3d1ead", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[script_data_hash_has_incorrect_length]": "57812101e7daec78830827aafba09a9b7a6f6180cdfbc63448e46254ba896c2f", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[shelley_mainnet_transaction_with_testn-af110e3e": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[shelley_testnet_transaction_with_mainn-ba78ab8f": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[stake_deregistration_account_larger_than_100]": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[stake_deregistration_address_index_lar-014f81ef": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[stake_deregistration_certificate_and_w-003a1023": "da2d8ed785581989ef058ad4b6f0e71d299e4cb5937a163c04625d3aca8fdcb8", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[testnet_protocol_magic_with_mainnet_network_id]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[testnet_transaction_with_mainnet_output]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[total_collateral_is_present]": "c7cb2b5ea28159fdd7f2937e49f79628d3b87463a7e34c4785ec676996622c2c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[transaction_with_both_auxiliary_data_b-6f1ead27": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[transaction_with_both_vote_public_key_-3e8cccb4": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[transaction_with_cvote_registration_co-2dcb1cea": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[two_owners_with_path]": "a0725ff6de673047101040698cd855af16c8a8fa68f9a67c50dd23452d89f48a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[unsupported_address_type]": "550bcabd8347dd8004aa0662ed213ddc8a463111474e7c7ceaf2e912fa9b958d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_multisig_transaction_signing_mode]": "fe52c0528b987d5901cd736cb3a6a127285b2106719fae16be1a808729de865a", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_ordinary_transaction_signing_mode]": "152476af9b8a7f96548ae0fe83c9d7a6344b570f72a75045134ed6dac36fe01d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_plutus_transaction_signing_mode]": "70df086d9d557fc7ad5fcf230e0232524a9c1c32c33d483722f2b1c7b1ced25f", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_amount_is_too_large]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_contains_both_path_and_key_hash]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_contains_both_path_and_script_hash]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_key_hash]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_multisig_path]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_non_staking_path]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_script_hash]": "0aafa2ecd08c24a6192e557a0e77e5b0abcbd4bf7e7b44af7feebfa1114e21a3", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[mainnet_transaction_without_change]": "468690086dda091c024e7bac1c6bad638b4dc9c7c90aa2e89bcc3d1910167b1c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[multisig_transaction_with_a_requ-c2fba589": "be409a32f2a558fae9dae332264053166f0d3916ebfdbaecf80cc820c90a6a0c", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_a_requ-9728607e": "ad549b55dc4a084a1804eef07da55838b1ea51b37651d4a14c36dac63f7b81ad", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_long_i-708443f3": "c129b2eaf86090db7b9f69f4f7cbe5e2894879bdd476f97ecccfb4cbdcbb1174", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_output-9ba7352d": "333453ec30e9813548597d8d7e72a1b9ba8dc05e621ab45d06bf49f7ab344688", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[plutus_transaction_with_reference_input]": "89f2f6e3d5d80799bfedf16eb153f67fd74530434e6b8d1ad2b243b030d1c274", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[plutus_transaction_with_total_co-e846c221": "d0b79fbb34282a310d7de6c4547e8ea1f7f7d81b594c2d3e594ca763f758914d", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[transaction_with_cip36_registrat-b9111c27": "d644bd53a4c9e966414463acb86d64b10cd2e18d472c8ac1bbc397c49a32ed1e", +"T3T1_en_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[transaction_with_stake_deregistr-6e84da2f": "b23d100a356038d67e4daf39f1e01207d66103a6329c9f659db91d4002937f8b", +"T3T1_en_ethereum-test_definitions.py::test_builtin": "c0da4f04e898db54461b5e8a5f29fc16b91f2c5f620d1dee2e19611a4400cd0f", +"T3T1_en_ethereum-test_definitions.py::test_builtin_token": "94ecde61300f6f5257ebdcb3b62cc7f901c32108497878c1e9ef9104506a5f62", +"T3T1_en_ethereum-test_definitions.py::test_chain_id_allowed": "6370b3457fba40de0120fbb1bfc6554ff76e6f50f86a8e91f45d96ea4209c5ed", +"T3T1_en_ethereum-test_definitions.py::test_chain_id_mismatch": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_definition_does_not_override_builtin": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_external_chain_token_mismatch": "aa3663738e87a951416eb07a96373cdab9e1dc78b4a81d38c90cce4a2c47e27e", +"T3T1_en_ethereum-test_definitions.py::test_external_chain_token_ok": "af0d29cc411fe6a4f8b9840250c2435f85b29962e2a8929ce18fcba36674fc4e", +"T3T1_en_ethereum-test_definitions.py::test_external_chain_without_token": "8340e2f269d4a0a96c7bb0d9b25aff90241e24db218633d8711223b738ab130d", +"T3T1_en_ethereum-test_definitions.py::test_external_token": "179f43de25b6a293ff255b4f9e1d09d78df1a928319d9b5789931b7bb7371a61", +"T3T1_en_ethereum-test_definitions.py::test_method_builtin[_call_getaddress]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_method_builtin[_call_sign_typed_data]": "c610a15399d8ec4d448a5a8904347e598ba7184585af296d4d0c3b6ec5df8993", +"T3T1_en_ethereum-test_definitions.py::test_method_builtin[_call_signmessage]": "cfd045d3ffa9ea1d1622ff50c546cda1f7678e25540c02b23ac3dae4d1a0dbc3", +"T3T1_en_ethereum-test_definitions.py::test_method_def_missing[_call_getaddress]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_method_def_missing[_call_sign_typed_data]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_method_def_missing[_call_signmessage]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_method_external[_call_getaddress]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_method_external[_call_sign_typed_data]": "99b134db1b9f23de02f2f9f98dbaefe5d1b29e8f3b145c6544946c91a896e488", +"T3T1_en_ethereum-test_definitions.py::test_method_external[_call_signmessage]": "433d26ebebf355ffc86eac6d8146447790b1f4d8bd34121b3a631a8dbc30e74b", +"T3T1_en_ethereum-test_definitions.py::test_method_external_mismatch[_call_getaddress]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_method_external_mismatch[_call_sign_typed_data]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_method_external_mismatch[_call_signmessage]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_slip44_disallowed": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions.py::test_slip44_external": "1be87dc3c1f639d9e0507bcd3836f2d8e36ceafb0500fc0c78e74b70541c82e7", +"T3T1_en_ethereum-test_definitions.py::test_slip44_external_disallowed": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_bad_prefix": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_bad_proof": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_bad_type": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_malformed_protobuf": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_mangled_payload": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_mangled_signature": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_missing_signature": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_not_enough_signatures": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_outdated": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_proof_length_mismatch": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_protobuf_mismatch": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_short_message": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_trailing_garbage": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_definitions_bad.py::test_trimmed_proof": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress[ETC]": "dae2d0e17fc633e281c0cdf96663346e2fdc148899cfdc34ebe8143383864d19", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress[Ledger Live legacy path]": "d5963af13b1a053428be488a3475b3e5b25634292f27fbe1e81263cf9edbae79", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress[parameters0-result0]": "8b6d747f11a1bd32b00a92385bed4d638718e733e80ee9f145b0a9fb0d214589", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress[parameters1-result1]": "3aa63c89a2693aa70258f3a46d9aad78d5926a8af63d6aebbc37a2644cbd80ef", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress[parameters2-result2]": "2a03d5555eebb9b3cc7e78e0bf79d5c8b3ff991c1afb5db5078fb8f2ec486fd4", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress[parameters3-result3]": "cc46d5ffd339b76744cc822e950b4f9252b993316f36fa04a6fd371424c8dff4", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress_chunkify_details[ETC]": "2737bbf908acddc26c12e3e32e2d25ba2f8af28020cefadc0dea035491cfbfb8", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress_chunkify_details[Ledger Live legacy path]": "6356dd6ec5475397ac62d4345195d3b9f91e0cdbcace6c9fd2067a1ef31fb44c", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress_chunkify_details[parameters0-result0]": "49746bdc089d8ffa036cdd209a0d99f6fe669d2397ce5a88bf30cbadfb0b5174", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress_chunkify_details[parameters1-result1]": "2e8db4c9cc0879db9a4339556c88118009b919bb5923f93c891f65870974fb17", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress_chunkify_details[parameters2-result2]": "5259d154279b4007f26e44e931550d2e1750bc09be98478d845da9cd30dcd03e", +"T3T1_en_ethereum-test_getaddress.py::test_getaddress_chunkify_details[parameters3-result3]": "0d38df9e7553ab93ea60c080b5ab8a42b3809c637a4257d13db300805553bbe8", +"T3T1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[Ledger Live legacy path]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters0-result0]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_getpublickey.py::test_slip25_disallowed": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "45e584bbcda03cf905239b8bd506a7b63dc17ed5340d803df17e02c3c08a3e07", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "6baded0bdaed70ba48740db902cd7088fcd1aad9f00164209642450fbe92d80e", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "0f252393b52b5f9b4670dce1c16ba06640f84c9039db28b0bf0e0421e375ed08", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[complex_data]": "5e2dff98f868b98280d8605517c0543a6f43848dd681b525ed26f5da99d6cd89", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[full_domain_empty_message]": "175e5fc9017dd2c89ef55bca62773d2deef95dab93578aa061711001b7764f8d", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[injective_testcase]": "ab9687262a7d3c1e621bbd7b5b2d1b486fbd566fc6c5974210800aa0a3a7ba8d", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[struct_list_non_v4]": "0f252393b52b5f9b4670dce1c16ba06640f84c9039db28b0bf0e0421e375ed08", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[struct_list_v4]": "0f252393b52b5f9b4670dce1c16ba06640f84c9039db28b0bf0e0421e375ed08", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[structs_arrays_v4]": "0f252393b52b5f9b4670dce1c16ba06640f84c9039db28b0bf0e0421e375ed08", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_cancel": "5bd656e64cb5013210c2bc189599fe1ed14110deac23043c38c736b98f137e63", +"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_show_more_button": "5541c1bc7cdec395137a32a8c8a894f4c56eb55595179fc334c4a78ef178263b", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters0-result0]": "80c45e65c861c1668f272398c4a790cc9dd0613aace21bfe554c9a685e2eae8f", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters1-result1]": "c6f492dc624460c76c78d367d8ee22e1f24f6627db61eb8dfafdc2c90e5477ce", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters2-result2]": "dba56b7e5def913c477a5a4cd56976f17316a53856a1c4e6a5981d8d7972464b", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters3-result3]": "3e4a965130a869c772ce2334b2fd1a789efc382dee4527f7eb4244af39de1a72", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters4-result4]": "b55f2aa360c610e470b1af6becff9a69e49d56476b51dcc61de43cf4a24f599f", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters5-result5]": "6c710f6210556bf2ded8a6027776280ec23b8724eebd99cb4332552d260a4c59", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters6-result6]": "2d8d1acf5e6a4010cdb9feb342e10f627fd64586e49ad8ea57d422a3fc148ce3", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters7-result7]": "5db2cdd9461ef667c339619a42fce89a7e46c7ae576d83712efebbae8cd4ed09", +"T3T1_en_ethereum-test_sign_verify_message.py::test_signmessage[parameters8-result8]": "985b867aeda08c981c8c610e94f454c8529fc4d14c9cb01881499784c5a4b6c1", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify[parameters0-result0]": "cbea228b1a6582289d57b5ef0017e9b52dbaf1817078039590c9beebe5ba6344", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify[parameters1-result1]": "1b201dbdd316979addaf42877f194481d2cc969e2620268e717c441a31c112e0", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify[parameters2-result2]": "f612aed993f77906c8990d645a9bd4abfb30d57989121ba2e10cfd157a811983", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify[parameters3-result3]": "5c9607cef8d99d24c5a3b1554369a15391bc58ca90a815cb37689c8f05f48dc6", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify[parameters4-result4]": "46148fc0e4ddad92ddf4986b72f557c4316ff6a5d386b12a284a90d0bee46820", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify[parameters5-result5]": "b7e5ac80950f2afcd1db8dca4d37236ab434e810c4e5b4b69f97bb073f14d505", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify[parameters6-result6]": "c175ff9348c8bfbdffed2809f7b8f158ed1e7896abc19b6191245ceca01d594f", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify[parameters7-result7]": "69f815f79ed5dfd60f009bbe3024d7e910fe37ee32377c955ee29b569fd4f58d", +"T3T1_en_ethereum-test_sign_verify_message.py::test_verify_invalid": "cbea228b1a6582289d57b5ef0017e9b52dbaf1817078039590c9beebe5ba6344", +"T3T1_en_ethereum-test_signtx.py::test_data_streaming": "9a89cb6f1a61c69a35a7c5f53239d5ffce3ff7bc07a2a08f67266ebd753de3f7", +"T3T1_en_ethereum-test_signtx.py::test_sanity_checks": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_signtx.py::test_sanity_checks_eip1559": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Auxilium]": "b71d381dcc2c67bd4f50e5c4c9fde74eebe99c3f88030a83e69586a9891d7780", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-ETC]": "70f61cbd4bbed46fadcdb3405b47ea23129026bfd99eb209ed8c5c2c3a03dc12", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Ethereum]": "089129c3cf550128d8f2c9f54e50a0705f6094a1944a17a9575dca950cd57a22", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Ledger Live legacy path0]": "88fa5319d82eda664c0e33f665aef10d782d6df42cff31bda8e170239013170a", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Ledger Live legacy path1]": "089129c3cf550128d8f2c9f54e50a0705f6094a1944a17a9575dca950cd57a22", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Palm]": "b71d381dcc2c67bd4f50e5c4c9fde74eebe99c3f88030a83e69586a9891d7780", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Pirl]": "b71d381dcc2c67bd4f50e5c4c9fde74eebe99c3f88030a83e69586a9891d7780", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Rinkeby]": "b2ca4fea79015cdb99b128ee137b6a2e6a7f6baac44c4d26e1eeb0a9b08f1315", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Ropsten]": "b2ca4fea79015cdb99b128ee137b6a2e6a7f6baac44c4d26e1eeb0a9b08f1315", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Unknown_chain_id_eth_path]": "b71d381dcc2c67bd4f50e5c4c9fde74eebe99c3f88030a83e69586a9891d7780", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-Unknown_chain_id_testnet_path]": "b71d381dcc2c67bd4f50e5c4c9fde74eebe99c3f88030a83e69586a9891d7780", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-data_1]": "c2977250dbd06ad14031de715da17175f5c9db6ddbc3abf3f41b641c68f2e954", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-data_2_bigdata]": "fa47e3639c860f5865382e2b4ba55d833989b6a0f41ed81fa1066a57105f8c59", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-erc20_token]": "3ee1b6b209c139b60a71ee0eaa3fdfe342290dc0fd850396a85e6a018cd95403", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-max_chain_id]": "b71d381dcc2c67bd4f50e5c4c9fde74eebe99c3f88030a83e69586a9891d7780", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-max_chain_plus_one]": "b71d381dcc2c67bd4f50e5c4c9fde74eebe99c3f88030a83e69586a9891d7780", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-max_uint64]": "b71d381dcc2c67bd4f50e5c4c9fde74eebe99c3f88030a83e69586a9891d7780", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-newcontract]": "c68a2f214969822dbc0e96c938263565c38b0609743ff9dbeec33ee170058f72", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-nodata_1]": "c81aab95508fd8ecdba3fe41778e4e7be17cda80b3840151839c9dc9329cb924", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-nodata_2_bigvalue]": "2f22d59bffb56e1cf2ba2353a6cd6c96cf5d04c95eec1b7d25bf223077008772", +"T3T1_en_ethereum-test_signtx.py::test_signtx[False-wanchain]": "3ad938f73145a9eae5303218fe98f832e98e4d94e525d6f3bfdbdcb698549657", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Auxilium]": "62d6ad021dfc6541a8d87ef99f13b5c8c206d417f51a90cf8eed0e926f1f2d42", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-ETC]": "0ef31079e8df1fa01e872a2fac2daa28b1df648bad515a69d9c6014951119308", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Ethereum]": "d672cf971c908bb336356df29037283651ab3ce88e998e25435fd84aeac6fefe", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Ledger Live legacy path0]": "1399e2245a8348e03f95dd1a439df497c13a74fbb7e60b31b909c243c1bdbb4e", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Ledger Live legacy path1]": "d672cf971c908bb336356df29037283651ab3ce88e998e25435fd84aeac6fefe", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Palm]": "62d6ad021dfc6541a8d87ef99f13b5c8c206d417f51a90cf8eed0e926f1f2d42", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Pirl]": "62d6ad021dfc6541a8d87ef99f13b5c8c206d417f51a90cf8eed0e926f1f2d42", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Rinkeby]": "f5d7bab7cb8b1cab1e1856c91a0af105fe034383c6699cc3395c3efc6fc9dc9f", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Ropsten]": "f5d7bab7cb8b1cab1e1856c91a0af105fe034383c6699cc3395c3efc6fc9dc9f", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Unknown_chain_id_eth_path]": "62d6ad021dfc6541a8d87ef99f13b5c8c206d417f51a90cf8eed0e926f1f2d42", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-Unknown_chain_id_testnet_path]": "62d6ad021dfc6541a8d87ef99f13b5c8c206d417f51a90cf8eed0e926f1f2d42", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-data_1]": "1f28dfb98015aca1acdee20dff8a1100892ca40b3a7ba5df80c21629c7cbdfdf", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-data_2_bigdata]": "f9cf7d0ac69d056e77d5b8eea556d25357b8bbf18576fbe537cf7c480031e217", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-erc20_token]": "e31b5fed748116b585b5e86a6f9e842615516759cae407ebe561956d70afad35", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-max_chain_id]": "62d6ad021dfc6541a8d87ef99f13b5c8c206d417f51a90cf8eed0e926f1f2d42", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-max_chain_plus_one]": "62d6ad021dfc6541a8d87ef99f13b5c8c206d417f51a90cf8eed0e926f1f2d42", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-max_uint64]": "62d6ad021dfc6541a8d87ef99f13b5c8c206d417f51a90cf8eed0e926f1f2d42", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-newcontract]": "c68a2f214969822dbc0e96c938263565c38b0609743ff9dbeec33ee170058f72", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-nodata_1]": "ac146a14d60488c3f201e11398fb6ad810c088614a9ce1d529319812e6d4d86e", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-nodata_2_bigvalue]": "2cc8a86f5940e557e838c23f85c899fa5e21663ffb9ab2e5420a30c75b850b84", +"T3T1_en_ethereum-test_signtx.py::test_signtx[True-wanchain]": "76b402adf767f9f34bc237dc37ccfdc48ca1c22fffb117ae8732636965a68d4e", +"T3T1_en_ethereum-test_signtx.py::test_signtx_data_pagination[input_flow_data_go_back]": "238aceb5cbd565e67696c8f6d73dc4573a3bee178ab66b208d85c32cf45957d6", +"T3T1_en_ethereum-test_signtx.py::test_signtx_data_pagination[input_flow_data_scroll_down]": "3d6987d4440d51bb4805d8a08e6cde9f6854f90d2b064553d42c1cbaa420a53f", +"T3T1_en_ethereum-test_signtx.py::test_signtx_data_pagination[input_flow_data_skip]": "0310349fb18c476ec82e058667d8e6bf69adc14696a3755d878e7bae3bf108fb", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-Ledger Live legacy path]": "c81aab95508fd8ecdba3fe41778e4e7be17cda80b3840151839c9dc9329cb924", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-data_1]": "c2977250dbd06ad14031de715da17175f5c9db6ddbc3abf3f41b641c68f2e954", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-data_2_bigdata]": "97fac4b6db7a446f53c3f1fa27ba925c1651a8831e76db7d220efbf414482139", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-erc20]": "3ee1b6b209c139b60a71ee0eaa3fdfe342290dc0fd850396a85e6a018cd95403", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-large_chainid]": "997848a3ecc4f0c5ed8004867a8d5deae48e832c12d4e90bc192f28394a704fb", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-long_fees]": "e85604e8d3d7b102215e6a18d828235df540d9c32df78e1b89b988d6dd7f62e0", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[False-nodata]": "c81aab95508fd8ecdba3fe41778e4e7be17cda80b3840151839c9dc9329cb924", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-Ledger Live legacy path]": "ac146a14d60488c3f201e11398fb6ad810c088614a9ce1d529319812e6d4d86e", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-data_1]": "1f28dfb98015aca1acdee20dff8a1100892ca40b3a7ba5df80c21629c7cbdfdf", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-data_2_bigdata]": "7838bcd3a0bbeeb327aa639e93ad0a938ecd3db27ae3086b5b8d7d1a2cf6970e", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-erc20]": "e31b5fed748116b585b5e86a6f9e842615516759cae407ebe561956d70afad35", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-large_chainid]": "2bd40660815fee49cfb00de9b8e64040cca5b61398b9c38a136225ac50e6830c", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-long_fees]": "8fcc1f1275aa8e99062026b960451521aa894aa3c78b7d04bef368b73085e69e", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559[True-nodata]": "ac146a14d60488c3f201e11398fb6ad810c088614a9ce1d529319812e6d4d86e", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559_access_list": "243010310ac5a4c70c627507ea8501cc61c2e20728eb06bc796f093132bebb4f", +"T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559_access_list_larger": "243010310ac5a4c70c627507ea8501cc61c2e20728eb06bc796f093132bebb4f", +"T3T1_en_ethereum-test_signtx.py::test_signtx_fee_info": "714e4c5f6e6b45fa3e78f74c7ee5e3332f39686f8b708a4f56232105bde0c3e4", +"T3T1_en_ethereum-test_signtx.py::test_signtx_go_back_from_summary": "8bc38a773c40a70c1eb9b91a5d02ce0a61591ce9e42bd0073bc1395f560f2490", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "4b89fe403777b910e365031ff4da4ddf844d8d9385ee6d562d8582e7ef270b8d", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "a82c3762d114bf542e9753faf7c54027cfb02c0fddfb7ba914eedac69366fbfb", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "afb28033e3093ee6d38266defb14bfe1ae36b727869b631e0b055694ab9097d7", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "c4ef05473b0b238e68385cda289a26b8ecf8c86db213cc6b346a225a0f323332", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "de100f2d3c8cc88672a09795ea9324368bf2c6e5e6b5b76ee04f2b3e69a80444", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "0c819d43c537b170b91edd29dc1ec88b78577131c6c4a84d14de7cdc42c3042f", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "207fb30e30123a92291f95b3769a217e05110ddf9f8c3446970459f2fe50b44a", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "405d4ac4856c34af5606e49a742235062b1550b4fcaec4fc4ac3ac4bbe998256", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "c133a3b7addfda617ccd9401ae28a12b1681e9ce47c28ddee8ae78a3ebccbd6d", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "e924f9c247e732fa9b727d71b844bdd734be9afcb4a26ebb74a4450153229f95", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "fac986a6b54fd0ed850fd3810df55de3dc411ebfa9520b8e51ec255bffaf0467", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "106a4cf1f71595f65c4ed2f12b4f868ba0c5f8b6dce75805489be8e6df3f39cf", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[claim_bad_inputs_1]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_1]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_2]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[unstake_bad_inputs_1]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[unstake_bad_inputs_2]": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[claim_holesky]": "63a2b20a46d7eb9dbe188f45286f0e19b696b4fa072743156a1f70b8c33d5dad", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[claim_mainnet]": "63a2b20a46d7eb9dbe188f45286f0e19b696b4fa072743156a1f70b8c33d5dad", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[stake_holesky]": "f24ba4c504e12ec403aa99f19f9d9c78cc513edb2b7671063033902d089d894c", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[stake_main]": "f24ba4c504e12ec403aa99f19f9d9c78cc513edb2b7671063033902d089d894c", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_holesky]": "b24d5247a866e3aa69fe3fc17eabaa210890b285e3c4b84eb253570fcc0c8bed", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_main]": "b24d5247a866e3aa69fe3fc17eabaa210890b285e3c4b84eb253570fcc0c8bed", +"T3T1_en_misc-test_cosi.py::test_cosi_different_key": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_cosi.py::test_cosi_nonce": "25a47ec1384fb563a6495d92d9319d19220cbb15b0f33fbdc26f01d3ccde1980", +"T3T1_en_misc-test_cosi.py::test_cosi_pubkey": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_cosi.py::test_cosi_sign1": "25a47ec1384fb563a6495d92d9319d19220cbb15b0f33fbdc26f01d3ccde1980", +"T3T1_en_misc-test_cosi.py::test_cosi_sign2": "b3086dafdda715fea319d90ee3ccab84a1728678dfa67febce1f7cc943d9e585", +"T3T1_en_misc-test_cosi.py::test_cosi_sign3": "6ea5987edda7c73d7aac080833b8574626f016233c38d068185e8cbcba46cc11", +"T3T1_en_misc-test_cosi.py::test_invalid_path[m-10018-0]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_cosi.py::test_invalid_path[m-1]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_cosi.py::test_invalid_path[m-44h-0h-0h-0-0]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_cosi.py::test_invalid_path[m-44h-60h-0h-0-0]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_cosi.py::test_invalid_path[m-44h-60h-1h]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_cosi.py::test_invalid_path[m-84h-60h-1h-0]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[42-0]": "25929f2293cfef2d7fdd8859bb16d0311c5532e02cc0624a893c50be3e16182c", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[T1B1-0]": "098c3992a0cc170e8041c0b0708a658f2d438da6dd829f38c8082d75a8d43154", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[T2B1-0]": "e6366ba60e181360741bd85df2fa8fca85f4dad889d510a5e3365abe63f4d6a2", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[T2B1-1]": "a78b216be479757c536da26edab8960226c6b1434012d51927b5ea461a952de8", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[T2B1-2]": "e91bc6a2639778d60a1201e93fcb488714b7d38f037be31f0a41838165019a48", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[T2B1-3]": "35ff50fcb49fc802e20fd0a44a161afe0a8b2b2f2781b409a4460632e884a83a", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[T2T1-0]": "106c1900eb2e896139b514d9d0d3b4434858c6752c0b8eaca38cf7aadfbe508f", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[T3W1-0]": "a2c7a9f111cf2a8fd72d06c5fcc738fab679545c891db34043eeb22d1311ac62", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[\\x00-0]": "0a745253b75f0ededdec44be05e3940166128226e96ee49183fb6c97a3fccf70", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[\\x00-3]": "2cbaa2088776f1c7c735aa1ef767d33f8ad8ebdb592b6d9814dd1bbabd6da9b5", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[\\xfe\\xfe\\xfe\\xfe-0]": "58a16c31957f7d540da34a30f54631e607eca1af6efb27a0b3877e49f77a9d56", +"T3T1_en_misc-test_cosi.py::test_slip26_paths[dog-0]": "7cee26436a0025a56eb1f67e432e4e707857714c1bbf5f61df60cc20f54c84ab", +"T3T1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt": "b34ae9ac7b3ea7467afe774bf615ca1e1eab26c64fe5d25178071bf15e8d6518", +"T3T1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt_badlen": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_msg_cipherkeyvalue.py::test_encrypt": "648e45403ce412314e9d91625ace8ffdee52ff37ac99b13f4e86d018a024515d", +"T3T1_en_misc-test_msg_cipherkeyvalue.py::test_encrypt_badlen": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_misc-test_msg_getecdhsessionkey.py::test_ecdh": "1c723bac9117d59b814785b772a9e34ca9cea4af02a8e7e9969a8ab6c07d6faa", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[128]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[129]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[16]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[17]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[1]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[20]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[21]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[256]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[257]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[32]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[33]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[3]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[4]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[512]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[513]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[5]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[64]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[65]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[8]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_getentropy.py::test_entropy[9]": "4dd8a541e8181aac2011a397360f8450c048536a0af77d0360c5b048657fff2b", +"T3T1_en_misc-test_msg_signidentity.py::test_sign": "641820cdb6496ddcbe402cba9b3d24bee009ed212c6c1f54a87ba158b6b05049", +"T3T1_en_monero-test_getaddress.py::test_monero_getaddress[m-44h-128h-0h-4Ahp23WfMrMFK3wYL2hLWQFGt87-f8cc3746": "f04af61059a8edc28122ad708eaa23a5f27441a63a87041da5bde604f3c585c4", +"T3T1_en_monero-test_getaddress.py::test_monero_getaddress[m-44h-128h-1h-44iAazhoAkv5a5RqLNVyh82a1n3-1cc72b15": "097567f203b5c8090204f894017ba1676ff3d42c42b79915960d3de701422fec", +"T3T1_en_monero-test_getaddress.py::test_monero_getaddress[m-44h-128h-2h-47ejhmbZ4wHUhXaqA4b7PN667oP-d571924b": "d081197da687ed543a4c0bd5ecc65d720253fcc15d2975c26b251bd14ab647de", +"T3T1_en_monero-test_getaddress.py::test_monero_getaddress_chunkify_details[m-44h-128h-0h-4Ahp23WfMr-1e763aba": "0ac1a47b3ad0595e46a8aedae71446d39f1bcfa703cbe4d1681da7ea8c332a31", +"T3T1_en_monero-test_getaddress.py::test_monero_getaddress_chunkify_details[m-44h-128h-1h-44iAazhoAk-005b0fdf": "09f056cf1613388427d5f742910d8127acd7fdfc55d44e0ab8138e7a45852784", +"T3T1_en_monero-test_getaddress.py::test_monero_getaddress_chunkify_details[m-44h-128h-2h-47ejhmbZ4w-df40ccfd": "37e8936c92b8af777c1c6276a2c4cf2c556f6babf9ccc6ed03be990d065f64b8", +"T3T1_en_monero-test_getwatchkey.py::test_monero_getwatchkey": "132fcbf2f28d368ed826f8ea2bd096572fc9807c6cc9be8f6ada25847b0a0adb", +"T3T1_en_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[label-test]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[passphrase_protection-True]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[pin_protection-True]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[u2f_counter-1]": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_reset_recovery-test_recovery_bip39_dryrun.py::test_dry_run": "2d9bad062846c0b389f6c04dae3aaaeeb25a5cd83b36226842a4ccd400e6a039", +"T3T1_en_reset_recovery-test_recovery_bip39_dryrun.py::test_invalid_seed_core": "864dc829401d036c222fc8f6b594c2cea5432652f5aa0048226473cbd1457a89", +"T3T1_en_reset_recovery-test_recovery_bip39_dryrun.py::test_seed_mismatch": "a9e0cbc9f0c47ea74e7e2387d369cbf41363440542eba80e2804b4d6cfa66d82", +"T3T1_en_reset_recovery-test_recovery_bip39_dryrun.py::test_uninitialized": "a8dd6b13239972775dc4dfd5e1dce5c39d162291bde8ece6f544c14dcec849f5", +"T3T1_en_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "938c1c691d9b2151e53689b55e03b0564e15025650c9358e286dd4acfab1120f", +"T3T1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "78f0bfd20aceae4c912dde3be23b61d987e344b2e40c40cb7463e1d99eb9e493", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "d0a2a782d4b3e45405f9c1f0acdf602e13327f0bb1d10c0e90db0bdd1aaf8620", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "994c42656e81541aaade90ba15540b360bfbb459fffed7d292dbad9e320d4c38", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "52f53111a72cd76b80eb7486bf4fa4a9f75e1123a0a19d6512b6e610b451f9fc", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "51225c45eb7667a58e97843e8444c80718da8ea83fdb229365384baa79e0b528", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "503354a449822b34fd95b1889edf8d6154c981c9766ed73e28c4284fac112f78", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "6249725b4cd8d46b7e500bd98b9c7f58e4cff38bb8f9113760ab88c59d88fbb9", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "ac9370c1c0595cacd2a0a26214e86871ad67eb3d0d42e3143421a68b869f4462", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "60cdc1527a066c2d99e38749c07225f533436246fd39e8bccf814e60f6bb31a0", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares1-c41d-ca9ddec8": "7e8bf03c539f2bd29eb2952f7b08e4e62ef64d78cd7d3716735b4b3d2992e271", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced_dryrun.py::test_2of3_dryrun": "179d45493e23ccaa7e0d0b11ad5e5c9eb7a20a9005306a80c3406e68316f61f9", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced_dryrun.py::test_2of3_invalid_seed_dryrun": "097fd465bd713db8fa7f52ee2f59f55dc15218cdd7a2aebf3f0c8d27388ea8ff", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "b687780e5757d9531814e55a5b238ece6f5469f7e7ed6d929f6b2d822516a424", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_abort": "d0a2a782d4b3e45405f9c1f0acdf602e13327f0bb1d10c0e90db0bdd1aaf8620", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "1d074124595985ed0467368d6dc630f82192d13684c80872b4bc8af5b18b58c9", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "a0833f3b7e84265344ce9a7ff9da9a943b936d42166184f1275845d41c31fb6d", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "ce21b7bd392f5970c11a89f7bd82a0766e0ea9bf8a0c2436c8dffe41d749165c", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "fdc2e9711e562150bb619ac432003b9e6d033843c7c09f985aa13a071fd9d307", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "980afc76710c9855c21ce4d7b25b85a2db38282a95295d959dde0b3722ff2fc6", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fbc98c8fc]": "c6d2fc6cf0f38e6cefa8d88ddc02d4a62edbf8ccae09fd9c9ad5e9ca1c4bddd8", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-b770e0da1363247652de97a39-a50896b7": "8ee1fb0f0cf76d1eae52aa4e791aa2cb925eea60496e7818082d3fd1282f7e45", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "9fa1379b9b6067ef0aee35ba0dfc0b82363b0524e36a8aa63d327144e58d6f09", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "c4c4fde055988a6cb0fabf84bf8e59f3efca4360b8de79d939240dfedd4c8de5", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "27b2d83564748b37787fde1954bcee050b374c70fef961550cd14d4ed3df2b24", +"T3T1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "28398ee2bfc0e8774613a51155d78039657531b4a34209c457bf364c11e7a13d", +"T3T1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "7a2afcb4d00fab2004cdec95f2bc3d6c5a37c2f2e9b1749982b1571b265b51a2", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "68a9aea1449b9dd8fec1e94bf5bd3130ca691227fdae1873763f7ef341053a73", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Advanced-bac-f67baa1c": "26f41a0a2dd04fe7dadda684012cad5bb66a7d392b4feeeb89cedd1451997a31", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Basic-backup-6348e7fe": "54cfd5ae7887a8bb7277e70df16885243912fbbf2ca6968b32cc13e60bb0131c", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Bip39-backup_flow_bip39]": "e9a5482d5ad20c304ac5936147d4c0a97953c843d49fef3d3db3f1e7dab6ff28", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Advanced-backup-dcbda5cf": "475b8afdae93eca5ddbf67b6d4b6429e4ae8b27b5ff7c79ade60407575007364", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Basic-backup_fl-1577de4d": "ed5e2a6acc3ecf5931aa6e3ca1cb89da2ffaf31c5e1587fa627955d6794d7125", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "8076e689c073eb7a4ade042181e17fac526c99d6e81348b76953fbca3c247859", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device": "7fe87f13425e7d7e65bfcb306c2bcdb5afcdccfc08234edfe9ae3e7d2fc230fd", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192": "ef8e1d03938af141b2d3449a954ddac705437d9b1ffae139f04a6ace7d9e1bfa", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "62ae8ff35f7f47c506f6e9997d6d943b135d66e1aa97b5b7cddfacfbea44c625", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "e0e107f874040e91ecac06522392c8c2d7d2d4e69fdcc919ec1ed03ac908623f", +"T3T1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery": "53eb3e4add05cfd51ee3872b1e75bd03fb236c1318ef72bded1f3cc2e387fb59", +"T3T1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery": "cf1b050bdfbf94075b6a6d01d8150f8fb40f1b70fdfee992c5a87e0a48b72e8c", +"T3T1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery": "e7912c0ee2c0b74ae86ef50c856ef0644cd3c1f81d4ad5e428635cf929bc7ea6", +"T3T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced": "9e01ba76a65909041d8bfd217d7ddfb280267e5a9ea9795b9277d3ef54c4c646", +"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic": "ab745d106ac59733c09a57bd93704770118ba466ee37b183f05d85714baf4e95", +"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256": "6b9e9d8635c6c092656eb2ac323648ed34ab64bb6248828cc39f3cd56c54ce9b", +"T3T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "e1714dd0d8e33bc7d38c8a8f0a24082c89846497a98fcfec5136743007da9171", +"T3T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "6b8a98bb658c617c435cf541e35c1fdb055f86c983add4df01b714836239c1b8", +"T3T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "f2b9355b112c77ea457568adb7375dd8f2338f5170ba26758751ce3f8cee285b", +"T3T1_en_ripple-test_get_address.py::test_ripple_get_address_chunkify_details[m-44h-144h-0h-0-0-rNaq-38238cf8": "5eb57d3f6b2ecee825566767d7216480b425ce5eefc691e2f4c510fc1db68b83", +"T3T1_en_ripple-test_get_address.py::test_ripple_get_address_chunkify_details[m-44h-144h-0h-0-1-rBKz-dd520dc8": "7523f86df84554313e5139bafbed7155f1259ec4e201b4c6072d614f08d430f5", +"T3T1_en_ripple-test_get_address.py::test_ripple_get_address_chunkify_details[m-44h-144h-1h-0-0-rJX2-1534f649": "58242541bf8486a102aa87376f2d9a8f2fee74c6956631501155aa5a92ef742f", +"T3T1_en_ripple-test_get_address.py::test_ripple_get_address_other": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "bc15baef3f52f919dba24b46d828b63eb5ad15dcb0660468e9e17088e1523df4", +"T3T1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "c2bccb5164d6fb0a88a20b0df3b9daabce638b269d805aea3bf9afd9e38e6373", +"T3T1_en_solana-test_address.py::test_solana_get_address[parameters0-result0]": "951f076e5f1eb13f2b5465ba5b9e0561db980f4df59d83e0d817f7134f43f87d", +"T3T1_en_solana-test_address.py::test_solana_get_address[parameters1-result1]": "b1ece4eef5d822ac13244f34850444f72c372ba6839b73b8a782fe181342c396", +"T3T1_en_solana-test_address.py::test_solana_get_address[parameters2-result2]": "fd184770f3a77113c4185a56811707b67fc90eb684b4ac20e93c4ddfdff2f04a", +"T3T1_en_solana-test_public_key.py::test_solana_get_public_key[parameters0-result0]": "8a8f3d3a22c24a4146e2f88b366fff3f64bc94b270eda1a022cfb816b56c1d41", +"T3T1_en_solana-test_public_key.py::test_solana_get_public_key[parameters1-result1]": "9445c0da3a53d11b071908ce1522a65e947205a869c3527409b7833560dc2e8c", +"T3T1_en_solana-test_public_key.py::test_solana_get_public_key[parameters2-result2]": "763ac28b88d516e205373a6eeaa64eea8327d193e86d1f66714e46e6d57bd0de", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[advance_nonce_account]": "452b30bfdbaca370d1523334d4a4c5c335137d61aa0f88a5b241540ed3b9560b", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[allocate]": "4ed857971174696bcdbf8bb96abcc9a79ba207d4b802bb1596523bdefaac0be4", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[allocate_with_seed]": "3306ad130ea0a0725b5ff31b36846154574ba2c63f91805239ce3bc92eac22c9", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[approve]": "bfc9c34d8aff615ec61e887cbb38967c55c33d69e8f75b7d3ac538f40dfd5a58", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[approve_checked]": "8aab2a2a197ef41a044fecbdd3b2b59fc5717ae346cb6d1ea982d874451104e3", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[approve_checked_-_multisig]": "cf87b719150963090eb2d00403d9df11684cd2d37890351ada5f4f13c8c8ac6c", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[assign]": "80376b50c2980f34c096c9e03cf774a1155bfa64e0a2a9bf950dc7fd88c8c4bc", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[assign_with_seed]": "42650574a87a950d75bec25e30f3ea84dedddfccb28c1ec189970c221c0df817", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[authorize]": "ad6338170c71c67cd1b6b43289798e90af93274c5be6c7297f26b30b6ccc54e2", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[authorize_checked]": "2e91a8bb465c735156b069d16de97d814ee8a2c7bbfe90f7283f07049c59ef46", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[authorize_checked_with_seed]": "24e8d545bf0c83798e57aa0e5ffbfc8faaafb5067ca7e9cd8f1070da41316a9e", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[authorize_nonce_account]": "e6a710a2aacc8e586e939b3bf8856280e2579ed59fc9ef6c6cd18b17e8306b9d", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[authorize_with_seed]": "ab367ea9347daf8e57bf5e9fe8bae9c360c3980ac31eb15a20de53c12ebdd126", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "57caae64b1524fa6e87b258cbe1f2371c3189937f35b4f32529aaf99a1f3f55e", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "d9aa2de3287e753b04517c7663d2af2ecca82bf93f4eb45bbf951775692810b1", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "b2564771f11210fa9e8b8e112aa4404f9e14dbcef8b49a14316f5c5452bdd045", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "5b9831bf338022786607e403ac32d12cad57733716f7cee93f37ed3ebf37afc5", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "9887d87d8684b2c9028ce379d9d402420cc1911a633d4f485941a3de6a07c621", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "44dff629846f52d0fb0c44c98d3d82a6bd3eb71985373d79da07c4fe25711d88", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_account_with_seed]": "ec99e2693d5d84bd3b9770b7e62c611c83d14f85ecaa5fec369f2dbc4ffc3a22", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_associated_token_account]": "524a9d4ab0406cce8c7c8165c8eef706656bd44de6f5bf29124db6a98b33c612", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_associated_token_account_idempotent]": "8664c38ef71ce627dd11efb64b0df244ef9da0932f806bbfd284ad7687e8a72c", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "4897dc73849f7e7787de0a5f2dce4973bff127c173a09cd054bdbf68c3f02ece", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "a9a47846ba32a38d250aab36fd6ae12915343f49b40dd17ef808da8e4c7c485e", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "0ba810277887b2c7b1821c8eef4f483c143bb1448ef71a34d0474c6a0afedc7d", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "09b60fa7a047497229eee817684881c85d3360e710b1b917d0d288ae12aa3459", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "5ea99d554e0b5805ab583635badeb1bd5db23df5e5faa38678a48a53acc3c52c", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "738869b0bcf44b9d4d72211293097e1235bde971dcb6b1bed4f4cfeddb4a4fa3", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[initialize_account]": "a6329ab4dc42acb9f7e440ecef446c9992d8c588862e469ac38a5f59a2c65884", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[initialize_checked]": "43abb883196a14a72a008419ea0f921fb6a914dd8cc87e77d43dc00f38ef9540", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[initialize_immutable_owner]": "53c69f1b612db74ebefa551cb50ca59a301b84a255e1bf79044726fce3b9c695", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[initialize_multisig]": "c8b3d2dc9b42c0a95507484a48872bcd31b22bdf078389fc4cbf2e3ce57cf630", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[initialize_nonce_account]": "e17ddfe3512edde12103cb8029ec242bed40103b0f26fbf961061a6300f82bde", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[initialize_stake_account]": "1e983da3fbe7ce90163312f6b6459d3043b47ea32153c09c03a450bc38178d8d", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[initialize_token_account_2]": "8f9e8f10c47b171bb2fe0be9e8eb8e3fd231d45a18e4bc5a4a876cb5fb03793c", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[initialize_token_account_3]": "9654e3167bbda9ff44365f90ee9d42583b473240dce27fa3dfa2976ca4fff8a1", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[lookup_tables]": "3b2f7c6d34b8c18317319e5b8844515f0e1e2c9ed46f0cfb8985760aa1a59de8", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[memo]": "357dd981b6b9cb4bde23e9991bd430ffd63cfe31749d97751f2c3f0575ecb5f1", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[memo_legacy]": "316d6fee2b77f92814bde333aa85523c7e8049669d7b224ce4788459317d1604", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[merge]": "16a725ffa812eb64ca6c5ef5e31ae64538cfaa20112d3edf4fca1fb02fa2655a", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "7557b1cd54311020fd967143f69e259c5a915eb3f6b30f8e463132da90a46315", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "ae11b158580d5bf7b16569923dce63380c9a5f32d073b29d2e9c3ae348a55ff8", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "658d6a4cbf09f305c1e8830b8464cda8d3f72896b5796522571cdc6a34c1b818", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "32e6d73d963f7d9012d7ecbeea33d4ecd80c2e2d1947b2cdcd1524cf20212cc7", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "93eeb08b19927ef368fb7002eba179b6eacdf816e620866ad00128c60b79f722", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "b50b4bef5695edbae422ffd96c4d544857440424b243a5362cd2d26226d86fb5", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_authority_-_multisig]": "23ccb66429760c0202215169cb41f57423de56470c6e8aba0fb6290d57df064a", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_-_with_all_params_set]": "a4d68a3c67736d80a439a78713c27872768a26498b750daf18dd5cb805d436a3", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_-_with_epoch_only]": "7fbdef930fd714d565b61f001e51a4b29920515df4f0f7d5ae97f09629ef37ae", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_checked]": "c283ff73e852ce8aaad4fa2c48057c0cca222e38defb889d5ac20bd277c5c97f", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[split]": "78612d37f00927d13df75bc1379c8ec6fa59593fe5d3e40c6883574280a3577a", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[sync_native]": "7b92d4ca4f4605b86633af82882c40a6b4177103e804db954f9bfdda454817ab", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[thaw_account]": "d33b778dd6396f6289fb074b06431f798133b9ae18dc220a9e6fec39b34a62b0", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[thaw_account_-_multisig]": "30623db2e35594cac28e6897af7caace59f840daae9572e5a671abf4089f4d13", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer0]": "201ad0c9e6b74461b2be186583832afe60624a34a811499666792d2e712fb9b8", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer1]": "de0e2936a3a093259b0ff5b6a4bdf3879cc6d1434df00116b2460b26e012563e", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_checked]": "0b2d55ccbcfd78972e080b6a72d16ed000207c796ac7d81e8f2dc7ce6f5a7048", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_checked_-_multisig]": "6545aafb0f5ec3f7703a5006995b4aa1dd7f70f54113ff871f19da13baaaa1c1", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_token_-_predefined]": "a9a47846ba32a38d250aab36fd6ae12915343f49b40dd17ef808da8e4c7c485e", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget]": "2d7f30fdc029ddeeccc405ee7314ac0eb04b3be71593ee2d4e1adc174c483ca5", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "f4e95cb91b71f9bbc64749ec062d944fabf4e59d44753b7c4f71755f5e37cf88", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "b610b5c902ee60ad14c76f81bcb9144ac20806b63856054e9efd4ef36c5755fd", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "255fb82c371edfa0c8a0b93751f9994784913afa12d6cc85b99a26eaab12874b", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "7a42704bc017c3128894f0016c5ab110edecc243ddebfc8beb0f48ff3befdd0a", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "da57711b9f55bf97f7bee8f734a8fdd5e02563046fa911e40014b0f42456450a", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters0-result0]": "18272296d219ce2f54f30820936a29d698bd7a26890336c9a326c30007a43e3f", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters1-result1]": "a9b53f23f657a00cc215987ee1289c6a86225602012ed33fe12ecb7421a960cf", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters2-result2]": "214f0ab5a2c67891e91e89ef71668fa89c0b58dd367cc5fc076ac9e1810ac344", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters3-result3]": "a2ab7d0bdac04efcab422955495d6e4f542e5c0d7770d712bf11b41e75ecb1b7", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters4-result4]": "1621736102d9ef3197b8593978875905b3978dd355937657e33af5c1054b02ac", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters5-result5]": "9fa8e800aa31d45e37da86169d03a19dd0ef6954473a7f4ebb3d3d339d4bbc4b", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters6-result6]": "a8357c843abe1124dacde751c70313f57ae0b46e6dd2dbf91c5f3027484822a5", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters7-result7]": "da742ffb1db1bb3430f6ea64f9d50813d41b15762969ffa4172d48ed62f0aa29", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters8-result8]": "e16b547bc1bcb9e11c8785fdc98514a54d53c2b2226e0778cd4b59146ba6ecb8", +"T3T1_en_stellar-test_stellar.py::test_get_address[parameters9-result9]": "4d4a0d45419529aaeadf4cf7ee391f26d15acf586b7f11212ff1a7a0b09c389b", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters0-result0]": "34490052e6eee68a9e9c732686461a4fe7f956691feae677f31df6d9054be475", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters1-result1]": "353c7dfdeef8d68454e8b9026212b52fb761864b4c5ddefa17ea973cd0e73e7a", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters2-result2]": "a23d222bbd77d3b199bf73f6c60f5bfae48a45a913b62579e6934df142ff5a4e", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters3-result3]": "3c3146d203c179bacb4d389330a6b29077359e53e6ae72f443e5efef3d841cc5", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters4-result4]": "f3bada923b206539ad960d369d3a28fdd0500d106ea079714f41add5be37543b", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters5-result5]": "9d53cf2c0aa7cd569e613edb9cc710a366e7f152264cf24042009cfa65f83452", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters6-result6]": "06c44f296124b25d22690d9a8dc5f8ac7421db139dfce0dd2e2f87762e65198b", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters7-result7]": "2ae8078b3f39e1f930a1a7c0750d863a8ae9edfad2bdf32b57d63b729fb7fb1c", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters8-result8]": "be46f409ac67fbc359df19ad6d188ab31062f7d89b94011e1788fd4d5893640b", +"T3T1_en_stellar-test_stellar.py::test_get_address_chunkify_details[parameters9-result9]": "a7172a64a86555942540d9eef80042a3051d4c58e1f8cf7a39e9c99987830e27", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarAccountMergeOp]": "84e2e99c4c0dbba1f2e44a2f833742dc37f88013972c8ffd0d02673660eb694f", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarAllowTrustOp-allow]": "a3de7fcd5cad8c5e4b4316fedde7dc7862eb89ca2f2a8d1a9ba8fb50a068342c", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarAllowTrustOp-revoke]": "d75e62e491d87be5d1317e51241431bc71b5a24da21eeb31dbf5a10e929290dc", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarBumpSequenceOp]": "846e5b0c1e740f230b8670be9fdf93de80918e2c1afc43ed99d15af1d959edde", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarChangeTrustOp-add]": "380dd41734316482b1c4d2e33777fe42f02829cf637c550fbcc699cc4f7bcbaf", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarChangeTrustOp-delete]": "3d0f941c6ca7df69d6204063f171b1aedeea36e8c9c4d3c81fbd9eca75b248c0", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarClaimClaimableBalanceOp]": "e7ae941c1a5fb1a10a2e25686771d0ebc5864211966eb7741c88c7bcdb3ea6ca", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarCreateAccountOp]": "993afda5f990300f12d8f2f318b51a3f7374f7abdbe983326e39c66f0bce0568", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarCreatePassiveSellOfferOp]": "61242eeca3cd77d51fc2d9012d86e57dde6e722aa4a2df4e818f3ed679aeb430", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarManageBuyOfferOp]": "d1746738380b806d193be170c8f476e21448dfa227a91f8547d05e43cda2fe5f", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarManageDataOp]": "6bddffc62fca2af49b98cefe7ed5aea24541bc41d0f3c242f7fb7dbd96f190f7", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarManageSellOfferOp]": "dc5de8b32a6c86fd034b46daaac0fc3ed1b813e0cefde376de0977d1ec1ece44", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictReceiveOp]": "66ca24e60f8c0b6589b8af806b68308972e56087c1517289cd1c85406ad1aa4f", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "adc5c6dda829f19ad14a79547779472d5dd72c9706853aa665e8de7361433183", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "e7bae062ee776b91f0e61d3b8a743a7800deb265bee722500e79ceba459729b3", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "d24cdb336b45aa5a6dc51ea70414b38ed157ec007d1c3840dede56af9ef1d13e", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "93471a4ccc8f77e64e0fee636363a90bb05039a517f9259f898f460fb6336f00", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "4995cef741327264327241df0ae283074abdd4477d63028be16f2d216aaa8f7f", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "3383ea7a0661c2e227bcdd714e8c4b8599a70ef0677991f0d111a14eca410906", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "fdc7d3703010dc7a5a267a3264b7604580926844aa3a3ba8b093a23e2ba7b50e", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[memo_hash]": "b0c90ca5c5bfce6c79f10c64966d0e2287ab6e70f70ed0dd32dd7c76173baf0e", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[memo_id]": "12205c75d5a6066fbaf7b89d545583d69062d7169706dd2e6c9aaae6a4b71918", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[memo_return]": "989d9d0713f644338e5696be59848b67119851fd64e44d290a43c8cecd554a58", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[memo_text]": "31deca2fef5dc1d898a3f6d95c2f715f0c85d8be48a2405d596fa0b955597359", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[multiple_operations]": "cdbd1117fded4dc3efef76f723f5ca646461b86a89f741011a25a794cd016b29", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[source_account]": "641f0ec39c752109a6e287478d529b1e5d3d98cb4eb6b23320a8ba7d97baffba", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[timebounds-0-0]": "808e6873ffc198a8271244e51538a91f4a737e716bccd441e84775589ad75138", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[timebounds-0-1575234180]": "ee0c8989f31e75c36a4a74f3715d5bf341366cdbd6b750da99ec1f91d7b90db4", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[timebounds-461535181-0]": "06aef40642884843baabe7e7d6b69bcd772d6f1e16f231d2c6244b6a727bd08c", +"T3T1_en_stellar-test_stellar.py::test_sign_tx[timebounds-461535181-1575234180]": "93471a4ccc8f77e64e0fee636363a90bb05039a517f9259f898f460fb6336f00", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay": "039b45fb265d4c7515160a8c54b38ac0526c349fb4f4855a607c656b91b30189", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_out_of_range[0]": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_out_of_range[1]": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_out_of_range[4194304]": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_out_of_range[536871]": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_out_of_range[9]": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_valid[10]": "313a241f2f94cc60afa2f8d1afda7a6badd91b437f7acfedec1dc1e406187c90", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_valid[123]": "dafff07651565cd5e9228d0fababa296fef90f9523985b123dc2839c2120328e", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_valid[3601]": "9e963071645850e247825f828ef64031b80b1f11edf54c9290f96c909f4de606", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_valid[536870]": "d8a1776116a79dde0519140150a176d6858828645259420c4f481c485dae208b", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_valid[60]": "831f8ad892a7a9283d8c6317d3ddaa7e3373f500144a88e18dca31fe69c7569f", +"T3T1_en_test_autolock.py::test_apply_auto_lock_delay_valid[7227]": "9de19207e95dc1ac1a4b6bb4268143fca1d832fa89d9bf01a8264043517d8bbf", +"T3T1_en_test_autolock.py::test_autolock_cancels_ui": "90f36d6374ab9689f2177b4a3add9f5605bd5572493e731119a61281678abebe", +"T3T1_en_test_autolock.py::test_autolock_default_value": "636069ad7e5a8d2e696502408fb494920648308b32ce9da154ac4f4470ea4a9c", +"T3T1_en_test_autolock.py::test_autolock_ignores_getaddress": "88d6b6e2701a5dcea58ff8c267b6c0c8210dfde802d75ca4e252fbc899be53f7", +"T3T1_en_test_autolock.py::test_autolock_ignores_initialize": "88d6b6e2701a5dcea58ff8c267b6c0c8210dfde802d75ca4e252fbc899be53f7", +"T3T1_en_test_basic.py::test_capabilities": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_basic.py::test_device_id_different": "c7c49fa9548fecd0c1f90c1806a920d68519a2eddeda88fcbe44ef5457dadaee", +"T3T1_en_test_basic.py::test_device_id_same": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_basic.py::test_features": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_basic.py::test_ping": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_busy_state.py::test_busy_expiry": "6509e7c943f2d09e3a5a7c69faee74c75b321ed1614d881d1ebdb57693c7f69a", +"T3T1_en_test_busy_state.py::test_busy_state": "738e905dfe55634972474416817c53f0a22a9ebec487d9046be867ab3f2576dd", +"T3T1_en_test_cancel.py::test_cancel_message_via_cancel[message0]": "1bd3157d54327e33542f89dcac6c7cd23808f7c9aa1b0adb390e5fcc1fd858a5", +"T3T1_en_test_cancel.py::test_cancel_message_via_cancel[message1]": "1bd3157d54327e33542f89dcac6c7cd23808f7c9aa1b0adb390e5fcc1fd858a5", +"T3T1_en_test_cancel.py::test_cancel_message_via_initialize[message0]": "1bd3157d54327e33542f89dcac6c7cd23808f7c9aa1b0adb390e5fcc1fd858a5", +"T3T1_en_test_cancel.py::test_cancel_message_via_initialize[message1]": "1bd3157d54327e33542f89dcac6c7cd23808f7c9aa1b0adb390e5fcc1fd858a5", +"T3T1_en_test_cancel.py::test_cancel_on_paginated": "498ffee2ea02e2783466cbb993f0cd83eedd3b67afde37b5d1f713fc996c1455", +"T3T1_en_test_debuglink.py::test_softlock_instability": "5a3dcb27bb23f916e277caff7dc32e32a20c24722cc238f9a585506665bfd64a", +"T3T1_en_test_firmware_hash.py::test_firmware_hash_emu": "2a63f0bd10ba99e223f571482d4af635653bb8a3bddc1d8400777ee5519bc605", +"T3T1_en_test_firmware_hash.py::test_firmware_hash_hw": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_language.py::test_error_invalid_data_hash": "67782b952469c260afac92bac1efc2ba9c2f342319ae95fb5e91c843da2a6e46", +"T3T1_en_test_language.py::test_error_invalid_data_length": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_language.py::test_error_invalid_header_magic": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_language.py::test_error_invalid_header_version": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_language.py::test_error_invalid_signature": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_language.py::test_error_too_long": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_language.py::test_error_version_mismatch": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_language.py::test_full_language_change[cs]": "1359095f8b87e599c6fd88c15dd257c09c4afb3095d4db671e1746dfc4017604", +"T3T1_en_test_language.py::test_full_language_change[de]": "d05c45a698f9e8a00b7f64bee10077dbce8e592fb5f76b76ba37e62df8d34e6c", +"T3T1_en_test_language.py::test_full_language_change[en]": "5f6cec419aad5e5658f6fda45c2cd40fa4581823e7f9f0c4199970cd179bfd4e", +"T3T1_en_test_language.py::test_full_language_change[es]": "fcb472f8786ab55cc7b90450a002165fd74ed88edc0d41a0dffd741b801d7f0b", +"T3T1_en_test_language.py::test_full_language_change[fr]": "a6b00695cb76f4fcc7197d37df49c3b1997da6ed23f2c21330d30e0f28dc910d", +"T3T1_en_test_language.py::test_language_is_removed_after_wipe": "e03d143d6de0d03e5581c1492658b47d96b7fa96a75ae29711083b58c9247b97", +"T3T1_en_test_language.py::test_reject_update": "78b8f16e00c5d653a7d5c0929d21ae8ae1c76798fe28f0eb6edee8e2ee8b0202", +"T3T1_en_test_language.py::test_silent_update": "62649fa5951dd7df2392627dbe0faa654dfd65b28bf9fdaf0050518b1b33e235", +"T3T1_en_test_language.py::test_translations_renders_on_screen": "5af6cd73525ef98f4151bf97d73bd92be0866bc99406f339a4aeab95e3a95048", +"T3T1_en_test_msg_applysettings.py::test_apply_homescreen_jpeg": "8ac0c969e6d8a79257a41d4651dcf62f936e2120547cb97c6ebdb8d3e57c0cfd", +"T3T1_en_test_msg_applysettings.py::test_apply_homescreen_jpeg_progressive": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_msg_applysettings.py::test_apply_homescreen_jpeg_wrong_size": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_msg_applysettings.py::test_apply_homescreen_toif": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_msg_applysettings.py::test_apply_settings": "da4d930d3ce1790722c946a0a266c48c37a552275a98c8db18e3b7df81230a24", +"T3T1_en_test_msg_applysettings.py::test_apply_settings_passphrase": "537cc0ac2cba1292e97e7973079ef8202e2441809036b03d368caad769204661", +"T3T1_en_test_msg_applysettings.py::test_apply_settings_passphrase_on_device": "a1f6dc01500cc25bb7ad302da3e5b6040567d9245486e2ab983bc7b03a511603", +"T3T1_en_test_msg_applysettings.py::test_apply_settings_rotation": "3e9e307a8d14c10e682873e7988fdde21bc7456d47a8a0ce61907b12cd23bfa1", +"T3T1_en_test_msg_applysettings.py::test_experimental_features": "e774f4de022f48caacc2445b1994ac19dce7a6155b4224ae7eb727ffc8975ca9", +"T3T1_en_test_msg_applysettings.py::test_label_too_long": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_msg_applysettings.py::test_safety_checks": "b129e0ba2e3c7ac836b3bb4b0bc8ded1c922eba054b42b434d10499fc780ea2b", +"T3T1_en_test_msg_backup_device.py::test_backup_bip39": "dfb5ff96727714c4d8115f9dee8d76d9cb40c46a6a5e693118cb8e332e0124ab", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[click_info]": "24ef4ff564a1d024deb4efa7b2fff91fa69892a6373f566cc5c4d86045c0c853", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[no_click_info]": "ca4836dd39f2398401fe2001a6cb7bf389f83fcd8e7770a65ca79b6840fe176a", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[click_info]": "01af0780579b900211698fdaa68a34f4339fa516f152dfd013e210f96b02f5e1", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[no_click_info]": "efd5fa4a4a87e6ac6e6b6b2c819d3d40711e7aff0340d1bab27794c333caa8d0", +"T3T1_en_test_msg_backup_device.py::test_interrupt_backup_fails": "ae147498028d68aa71c7337544e4a5049c4c943897f905c6fe29e88e5c3ab056", +"T3T1_en_test_msg_backup_device.py::test_no_backup_fails": "fada9d38ec099b3c6a4fd8bf994bb1f3431e40085128b4e0cd9deb8344dec53e", +"T3T1_en_test_msg_backup_device.py::test_no_backup_show_entropy_fails": "a8dd6b13239972775dc4dfd5e1dce5c39d162291bde8ece6f544c14dcec849f5", +"T3T1_en_test_msg_change_wipe_code_t2.py::test_set_pin_to_wipe_code": "c89489b44e487f6be6757c7dff2118bf4769454cce1ab3b03e0c12a68651d432", +"T3T1_en_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "9c861a52adb748eb9ced78260726583889dabf286377b030031471b18c4fade9", +"T3T1_en_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "6e974727f6611b6d20f08fb0e3394b9457545bfef0d9c60c86655003a3fde410", +"T3T1_en_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "ac44babb407ef9d30cc1301b9a1a7c02c92e3ff2f555f4b21909814636cfe1f7", +"T3T1_en_test_msg_changepin_t2.py::test_change_failed": "5fc1a4fa6b5074dfdf76cb081c35555fd432c62237fc77179ba49595779406d2", +"T3T1_en_test_msg_changepin_t2.py::test_change_invalid_current": "7d4521ca4be8f334a262f3bfe4b3d2eb38ba13f55a4adf75c1d6a97c04fc0090", +"T3T1_en_test_msg_changepin_t2.py::test_change_pin": "cfe12091650149ae4310c39903c67725e9983c50ae33727add8cf5476c4ad266", +"T3T1_en_test_msg_changepin_t2.py::test_remove_pin": "2ec521e63d280bd2a551b3cd01c01d58ac79cd59d14c1c6bd7a04c3040ac715c", +"T3T1_en_test_msg_changepin_t2.py::test_set_failed": "bd112f5b80f4a57013ed24cd2edc191e76648508ed70d2ff84602ac02f11b730", +"T3T1_en_test_msg_changepin_t2.py::test_set_pin": "a8ae3193f87cb964296b4b9a3ec029533a547eb343bf3f9dadf462b3078d58c0", +"T3T1_en_test_msg_loaddevice.py::test_load_device_1": "f146bdbf2d30777c72f620604ae97aab4a201a890ba75308e84cce028c6a710f", +"T3T1_en_test_msg_loaddevice.py::test_load_device_2": "ce6ea09595f77c72f3159d35cf1d80e3f792f639fb369f7ae91bd70be459e17d", +"T3T1_en_test_msg_loaddevice.py::test_load_device_slip39_advanced": "f146bdbf2d30777c72f620604ae97aab4a201a890ba75308e84cce028c6a710f", +"T3T1_en_test_msg_loaddevice.py::test_load_device_slip39_basic": "f146bdbf2d30777c72f620604ae97aab4a201a890ba75308e84cce028c6a710f", +"T3T1_en_test_msg_loaddevice.py::test_load_device_utf": "eb6c15a794f191ab1793193c029cde35237eb3127d63e57ad42b4b06c1c50b2d", +"T3T1_en_test_msg_ping.py::test_ping": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_msg_sd_protect.py::test_enable_disable": "a0ae9e29d00a0481c7a72130e0fc90181c2f7c00cb4dcac3bc6f2419504e62cf", +"T3T1_en_test_msg_sd_protect.py::test_refresh": "efab70c899991735fff30328f7be12dd1ba12720665c461826fe7fadf4251106", +"T3T1_en_test_msg_sd_protect.py::test_wipe": "6b56dad8e624de808e85d5f8660a8bc0a194e75bee5bc3fdcde250ea89967952", +"T3T1_en_test_msg_wipedevice.py::test_autolock_not_retained": "41e028d6a5cb40788157ef506ae1e62809a05dfc895cce2cbd15e4de2762d963", +"T3T1_en_test_msg_wipedevice.py::test_wipe_device": "c7c49fa9548fecd0c1f90c1806a920d68519a2eddeda88fcbe44ef5457dadaee", +"T3T1_en_test_passphrase_slip39_advanced.py::test_128bit_passphrase": "c4a8e8e7544a7dd8a7157aef8572f1be99c10b290ca9e0f60763b7e3583c7882", +"T3T1_en_test_passphrase_slip39_advanced.py::test_256bit_passphrase": "c4a8e8e7544a7dd8a7157aef8572f1be99c10b290ca9e0f60763b7e3583c7882", +"T3T1_en_test_passphrase_slip39_basic.py::test_2of5_passphrase": "fdf4b1631f9726cd27137dc3e20a78d88d223fd774fee8828a1afb33624e9a11", +"T3T1_en_test_passphrase_slip39_basic.py::test_3of6_passphrase": "fdf4b1631f9726cd27137dc3e20a78d88d223fd774fee8828a1afb33624e9a11", +"T3T1_en_test_pin.py::test_correct_pin": "e74c2b59a4164fab459b67b7fc2fd6fc349ede0b8efaeac638659ae25e4790e3", +"T3T1_en_test_pin.py::test_exponential_backoff_t2": "de409b3dff3aef0ec32a2d45ec6cf5c33d23b3c7ec8a8130f99f5f47197c6998", +"T3T1_en_test_pin.py::test_incorrect_pin_t2": "afe6d894276043f93bbc2c3f44ae31036963d2fe597d5f93cc0ca8ea54fd67a9", +"T3T1_en_test_pin.py::test_no_protection": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_protection_levels.py::test_apply_settings": "f73dfa0b964e817e75eb1aefe4c0eda83365cc0fa7cdaf79c89659677c13a490", +"T3T1_en_test_protection_levels.py::test_change_pin_t2": "628f59eba987445b4d6a90bb2401ca0b099454199793da3743b0e8eadae4dc65", +"T3T1_en_test_protection_levels.py::test_get_address": "5e03fffedab4035e2fa1a270d9212672fafb282c19ffb783c734e32d4f33cf3e", +"T3T1_en_test_protection_levels.py::test_get_entropy": "295a8a97bc590301de424a39ec768c5b73da92b23dab04f5df6a0de5da8b8fc9", +"T3T1_en_test_protection_levels.py::test_get_public_key": "5e03fffedab4035e2fa1a270d9212672fafb282c19ffb783c734e32d4f33cf3e", +"T3T1_en_test_protection_levels.py::test_initialize": "00b62142b8f9a2b0dbbcc5a6a987ff0b1569c4841eca45499857dc264b875841", +"T3T1_en_test_protection_levels.py::test_passphrase_cached": "2be6f9bdf9836f159ba935cc758afc83121f2ad30f0ea8ae27a0c1d436a2a5cf", +"T3T1_en_test_protection_levels.py::test_passphrase_reporting[False]": "ea68873cced831c9babca7ad78a93d0fc0603ed77f4427c673336f267dc8a83a", +"T3T1_en_test_protection_levels.py::test_passphrase_reporting[True]": "232f83ebc546ec9f606a01be78864c14913c8dcdb0bfcdd01d4d0f6dcfc3224a", +"T3T1_en_test_protection_levels.py::test_ping": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_protection_levels.py::test_sign_message": "29b2ef280a8573f6cb6c1249acf13006228faf1d7968da8fee999f84df540845", +"T3T1_en_test_protection_levels.py::test_signtx": "e36db8f49378262cc3befe4295f6155b6c56b1f21395249ddfcff9a41cb15be0", +"T3T1_en_test_protection_levels.py::test_unlocked": "835c5327c35866df9acdf1433e75775eb652956b34ab6123595a06764389f61e", +"T3T1_en_test_protection_levels.py::test_verify_message_t2": "456368c2e05ef1a743baa467897ddcad4af06b9cc863b809740d145a66dd88cd", +"T3T1_en_test_protection_levels.py::test_wipe_device": "00ed01b75f201b177f98be231224ae6c7492d9f686dc32195799aa689959e83a", +"T3T1_en_test_sdcard.py::test_sd_format": "eb00c8c6d53fb2cbb1020f053219babe32ef3accb8ccefa8dbe315c03fb19149", +"T3T1_en_test_sdcard.py::test_sd_no_format": "14511e3d3ee535d97287d8ade25101e8c16db17c1dc5d3151b91e5e8eba61ba5", +"T3T1_en_test_sdcard.py::test_sd_protect_unlock": "097106b59798ff84733f7c6c4855cd52fbc3c0923e91aa84c0f81ac3ebc651b2", +"T3T1_en_test_session.py::test_cannot_resume_ended_session": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_session.py::test_clear_session": "28127dd802f15874ad7cfb67027b732ea378a9e03852b89861579650b125edb7", +"T3T1_en_test_session.py::test_derive_cardano_empty_session": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_session.py::test_derive_cardano_running_session": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_session.py::test_end_session": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_session.py::test_end_session_only_current": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_session.py::test_session_recycling": "fdf4b1631f9726cd27137dc3e20a78d88d223fd774fee8828a1afb33624e9a11", +"T3T1_en_test_session_id_and_passphrase.py::test_cardano_passphrase": "f39549678b9631de2991711e728ff7a703ab80be965d794b40c69c0010ede943", +"T3T1_en_test_session_id_and_passphrase.py::test_hide_passphrase_from_host": "74ca896a0493ee40b4e3a709f4cf1ad1d5e80dcccf7229de09fe1a3e40fdc615", +"T3T1_en_test_session_id_and_passphrase.py::test_max_sessions_with_passphrases": "f7e9a2550ae7c57cefb0e2a13c62a1ead48fcbd86328d372ec7b54b26d51101a", +"T3T1_en_test_session_id_and_passphrase.py::test_multiple_passphrases": "f6d22736654a397b99e7ed4700b88235953bf7b11a293b0fa975f8225dfbb07d", +"T3T1_en_test_session_id_and_passphrase.py::test_multiple_sessions": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_test_session_id_and_passphrase.py::test_passphrase_ack_mismatch": "3b6c5cf5c6512f1491b77f895d21d2f850f774c2b9d67c1b76eaeb2892e95e6b", +"T3T1_en_test_session_id_and_passphrase.py::test_passphrase_always_on_device": "671a366a006193926c0af0d7a84f0feba09a220bca32fbc609b17ac431f6f79a", +"T3T1_en_test_session_id_and_passphrase.py::test_passphrase_length": "c4c9e8c395f99b21e7de2216154a18af726beca5b82a09e689b35d02b6d14eb8", +"T3T1_en_test_session_id_and_passphrase.py::test_passphrase_missing": "2be6f9bdf9836f159ba935cc758afc83121f2ad30f0ea8ae27a0c1d436a2a5cf", +"T3T1_en_test_session_id_and_passphrase.py::test_passphrase_on_device": "b95cba09bd47cb9ac2df7272a1ae1e7a6d3ff3b345ad40ac3d139d99637c1ed8", +"T3T1_en_test_session_id_and_passphrase.py::test_session_enable_passphrase": "5de5cbe74fe51d694ff926523f318ea3ad93f98bc5bbb13519e76c2f2c5cea43", +"T3T1_en_test_session_id_and_passphrase.py::test_session_with_passphrase": "9b2d4b75a4c96cc3ab52056d4b4bc83a38d948bb35aaf422829b05c43ac0cf14", +"T3T1_en_tezos-test_getaddress.py::test_tezos_get_address[m-44h-1729h-0h-tz1Kef7BSg6fo75jk37WkKRYSnJ-80986d6e": "e956201e6a960c53fee449e29be2a3094d10bfd7ea3956b0c356aebc90891f60", +"T3T1_en_tezos-test_getaddress.py::test_tezos_get_address[m-44h-1729h-1h-tz1ekQapZCX4AXxTJhJZhroDKDY-1a82407d": "b8006f9f20dbe6b437522702ea1068b15b3320909f8d6d86eed47c700b4d9bed", +"T3T1_en_tezos-test_getaddress.py::test_tezos_get_address_chunkify_details[m-44h-1729h-0h-tz1Kef7BSg-3b56caf9": "f911f2fcc0813237d78c7c59a4237058aec8f8066116703ed4402b70ae802569", +"T3T1_en_tezos-test_getaddress.py::test_tezos_get_address_chunkify_details[m-44h-1729h-1h-tz1ekQapZC-aca49b5f": "f686330e653bbe1d12bd05b896a9f6fd60b10f9ec1bb2e56cfd8de5e9b7f2941", +"T3T1_en_tezos-test_getpublickey.py::test_tezos_get_public_key": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_kt_remove_delegation": "842b1dba8dedf7ee6a2c6ce15305dda05b249d7a1cd4ad2854a4a2dead2657d4", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sign_tx_delegation": "2c89c52a396e7aa8aee9b5216307b8aa89fd613d2734cbcad6200f95a614b418", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sign_tx_multiple_proposals": "c755c8ab6ac30e0e6b5e74b820ab2fe8dc2651da9f28d82206c50a1b12002d57", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sign_tx_origination": "dab7d08e722611f6df10c65cf899eb5fd2d7c581b9782b20f915061bf3621a59", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sign_tx_proposal": "9e50c84010c632d4f77cf6986589d02b20612e0750330d7698747648186ee2f1", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sign_tx_reveal": "c96aa7c1a89ea02258c3de675fce069ca711a373e0da6f4243df2bfad4dc99fa", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sign_tx_tranasaction[False]": "872dec677716e31c8a273cbc2fb0b378721f62c8520cc3e58c66424230c6f113", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sign_tx_tranasaction[True]": "a8584c502480d28e3cc5ff93f62f46430bd78103b4d2530130e1b84e8912a6d7", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sing_tx_ballot_nay": "37e2bb21c01ac37d2766602293139c1068fb2fa1529e47447b19800e707e1fd2", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sing_tx_ballot_pass": "9d4e51b1baf7958ccbce3fd950f56d39b235da4d1428889fa0bdbb9300b781ec", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_sing_tx_ballot_yay": "dfebebe52bd943dbb719062355b7ac38729cc95339a49b795a34fa900419c4ee", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_smart_contract_delegation": "f51e94cc8df4063ceab5fe431c9a53544533d809a6cf43e5beb4b5c2471d44aa", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_smart_contract_transfer": "3e23b6eb2ee4d4ae726eee3105dcf06d2914f6dfced39231496ea4c181ecd7ee", +"T3T1_en_tezos-test_sign_tx.py::test_tezos_smart_contract_transfer_to_contract": "011aaa0232bfe00f8df11afc2de1c00d01323624e9f4483895965d125e23d971", +"T3T1_en_webauthn-test_msg_webauthn.py::test_add_remove": "7a5407948b99a424d913a27023920eb5deb2b06cba1b78271c8ff6c69b56b85b", +"T3T1_en_webauthn-test_u2f_counter.py::test_u2f_counter": "87f09bc2e7d3160ea1ffa7f340ed8513ec64b8bbb64e884e82f80fbb07899e1e", +"T3T1_en_zcash-test_sign_tx.py::test_external_presigned": "58ca129cf30e1cfb9a4b393967b859094cf7b7a3095bb1962f9199b52fac8245", +"T3T1_en_zcash-test_sign_tx.py::test_one_two": "761e56a0674e522af18cdcfc9cdbd398a7f82f9454eb8bebaf076155336f28f7", +"T3T1_en_zcash-test_sign_tx.py::test_refuse_replacement_tx": "c6bb77373d142024bf2b24d43f7af1867f7b0da28d18e89fb6cdba8b7c8aee81", +"T3T1_en_zcash-test_sign_tx.py::test_send_to_multisig": "d408c807422deac11166c3b232208951b4751fc34b3c85a71d2794a42efe0e5d", +"T3T1_en_zcash-test_sign_tx.py::test_spend_multisig": "05e12d33ff11d7d149711105573b25378e819f89bdaf5571d502c77cf50951a5", +"T3T1_en_zcash-test_sign_tx.py::test_spend_v4_input": "f780cbed9d8d015ba1872dc35db94fb5b311b179f5a2a4dff057529aaea7b0c3", +"T3T1_en_zcash-test_sign_tx.py::test_spend_v5_input": "ba41b7d7c77c4ef9ce5b8e50d749241d0633ccdc22aad8d9491d74a01930add8", +"T3T1_en_zcash-test_sign_tx.py::test_unified_address": "895eca0e5eca607eaf3733956c57daf7e9fd579ccd87b187b12938b76aaa4f20", +"T3T1_en_zcash-test_sign_tx.py::test_version_group_id_missing": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3" +}, +"persistence_tests": { +"T3T1_en_test_safety_checks.py::test_safety_checks_level_after_reboot[SafetyCheckLevel.PromptAlways--081810a6": "dd29bd8f3c813b40e773237eb41214ed062f3aea3197ed6fe6d71436fa5b27b6", +"T3T1_en_test_safety_checks.py::test_safety_checks_level_after_reboot[SafetyCheckLevel.PromptTempora-b3d21f4a": "41b0ebf0aaf76d7ffec3a0a50fd3b5ad9ea63ecfd49b2d6d3b19aba805753ae8", +"T3T1_en_test_safety_checks.py::test_safety_checks_level_after_reboot[SafetyCheckLevel.Strict-Safety-f1ff9c26": "ae20a90041a8a6ff0b713600c1468572c57615f5e87ccab6c936ec3c32adcca7", +"T3T1_en_test_shamir_persistence.py::test_abort": "3d8b84d8742d08a90bfca2b49c287c34ad610bc86017d5be3429cea699c33daf", +"T3T1_en_test_shamir_persistence.py::test_recovery_multiple_resets": "c7bddc41921819016ff1dd460f47d8b6dd87bc7886e8c99b9e6311524a1cde7d", +"T3T1_en_test_shamir_persistence.py::test_recovery_on_old_wallet": "71f48f7a558c7fe0eec99f711a9a5e806abb5f570665ba2318770ed8a9ddb08d", +"T3T1_en_test_shamir_persistence.py::test_recovery_single_reset": "a6d805ba18ea2eecac1c7c4e0c2b2b7c4c3cae70bf57e1d3e2d834f1987770fb", +"T3T1_en_test_wipe_code.py::test_wipe_code_activate_core": "0f32dd3c38b769554ad2f75f1cc138853e6062733f2d62e15e1883dcb6d1a4fe" +} +}, "TR": { "click_tests": { "TR_cs_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "c70b31b09e26a3c3c9b456eda7244e55f64cf42c2b99232581121fe1ff014a2f",