From afb5c55416559523735ee067f36c098805014db0 Mon Sep 17 00:00:00 2001 From: Martin Milata Date: Fri, 13 Jan 2023 20:41:58 +0100 Subject: [PATCH] feat(core/ui): reset_device copy change [no changelog] --- core/embed/rust/src/ui/component/label.rs | 10 ++- .../rust/src/ui/model_tt/component/frame.rs | 13 ++- core/embed/rust/src/ui/model_tt/layout.rs | 61 ++++++++++---- core/mocks/generated/trezorui2.pyi | 2 +- .../management/recovery_device/__init__.py | 4 +- .../apps/management/reset_device/__init__.py | 8 +- core/src/trezor/ui/layouts/tt_v2/__init__.py | 8 +- tests/click_tests/recovery.py | 2 +- .../click_tests/test_reset_slip39_advanced.py | 4 +- tests/click_tests/test_reset_slip39_basic.py | 4 +- .../reset_recovery/test_recovery_bip39_t2.py | 4 +- .../test_shamir_persistence.py | 2 +- tests/ui_tests/fixtures.json | 80 +++++++++---------- 13 files changed, 114 insertions(+), 88 deletions(-) diff --git a/core/embed/rust/src/ui/component/label.rs b/core/embed/rust/src/ui/component/label.rs index 713b38995a..f49097ce43 100644 --- a/core/embed/rust/src/ui/component/label.rs +++ b/core/embed/rust/src/ui/component/label.rs @@ -63,9 +63,13 @@ where type Msg = Never; fn place(&mut self, bounds: Rect) -> Rect { - let line_bounds = bounds.with_height(self.font().text_max_height()); - self.layout = self.layout.with_bounds(line_bounds); - line_bounds + let height = self + .layout + .with_bounds(bounds) + .fit_text(self.text.as_ref()) + .height(); + self.layout = self.layout.with_bounds(bounds.with_height(height)); + self.layout.bounds } fn event(&mut self, _ctx: &mut EventCtx, _event: Event) -> Option { diff --git a/core/embed/rust/src/ui/model_tt/component/frame.rs b/core/embed/rust/src/ui/model_tt/component/frame.rs index d09c051ede..522454751e 100644 --- a/core/embed/rust/src/ui/model_tt/component/frame.rs +++ b/core/embed/rust/src/ui/model_tt/component/frame.rs @@ -1,7 +1,7 @@ use super::theme; use crate::ui::{ component::{label::Label, text::TextStyle, Child, Component, Event, EventCtx}, - display::{self, toif::Icon, Color, Font}, + display::{self, toif::Icon, Color}, geometry::{Alignment, Insets, Offset, Rect}, util::icon_text_center, }; @@ -57,13 +57,10 @@ where fn place(&mut self, bounds: Rect) -> Rect { const TITLE_SPACE: i16 = theme::BUTTON_SPACING; - let (title_area, content_area) = bounds - .inset(self.border) - .split_top(Font::BOLD.text_height()); - let title_area = title_area.inset(Insets::sides(theme::CONTENT_BORDER)); - let content_area = content_area.inset(Insets::top(TITLE_SPACE)); - - self.title.place(title_area); + let bounds = bounds.inset(self.border); + let title_area = bounds.inset(Insets::sides(theme::CONTENT_BORDER)); + let title_area = self.title.place(title_area); + let content_area = bounds.inset(Insets::top(title_area.height() + TITLE_SPACE)); self.content.place(content_area); bounds } diff --git a/core/embed/rust/src/ui/model_tt/layout.rs b/core/embed/rust/src/ui/model_tt/layout.rs index 147f953ebf..9ec3548168 100644 --- a/core/embed/rust/src/ui/model_tt/layout.rs +++ b/core/embed/rust/src/ui/model_tt/layout.rs @@ -20,6 +20,7 @@ use crate::{ image::BlendedImage, paginated::{PageMsg, Paginate}, painter, + placed::GridPlaced, text::{ paragraphs::{ Checklist, Paragraph, ParagraphSource, ParagraphStrType, ParagraphVecLong, @@ -27,7 +28,7 @@ use crate::{ }, TextStyle, }, - Border, Component, Empty, Timeout, TimeoutMsg, + Border, Component, Empty, FormattedText, Timeout, TimeoutMsg, }, display::{tjpgd::jpeg_info, toif::Icon}, geometry, @@ -320,6 +321,16 @@ where } } +impl ComponentMsgObj for (GridPlaced>, GridPlaced>) +where + T: ParagraphSource, + S: AsRef, +{ + fn msg_try_into_obj(&self, _msg: Self::Msg) -> Result { + unreachable!() + } +} + extern "C" fn new_confirm_action(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj { let block = move |_args: &[Obj], kwargs: &Map| { let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?; @@ -502,22 +513,38 @@ extern "C" fn new_confirm_homescreen(n_args: usize, args: *const Obj, kwargs: *m extern "C" fn new_confirm_reset_device(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj { let block = move |_args: &[Obj], kwargs: &Map| { let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?; - let prompt: StrBuffer = kwargs.get(Qstr::MP_QSTR_prompt)?.try_into()?; - let description: StrBuffer = "\nBy continuing you agree to".into(); - let url: StrBuffer = "https://trezor.io/tos".into(); + let button: StrBuffer = kwargs.get(Qstr::MP_QSTR_button)?.try_into()?; - let paragraphs = Paragraphs::new([ - Paragraph::new(&theme::TEXT_BOLD, prompt), - Paragraph::new(&theme::TEXT_NORMAL, description), - Paragraph::new(&theme::TEXT_BOLD, url), - ]); - - let buttons = Button::cancel_confirm_text(None, "CONTINUE"); - let obj = LayoutObj::new(Frame::left_aligned( - theme::label_title(), - title, - SwipePage::new(paragraphs, buttons, theme::BG), - ))?; + let paragraphs = Paragraphs::new(Paragraph::new( + &theme::TEXT_NORMAL, + StrBuffer::from("By continuing you agree\nto Trezor Company's\nterms and conditions."), + )); + let url = FormattedText::new( + theme::TEXT_NORMAL, + theme::FORMATTED, + "More info at {demibold}trezor.io/tos", + ); + let buttons = Button::cancel_confirm( + Button::with_icon(Icon::new(theme::ICON_CANCEL)), + Button::with_text(button).styled(theme::button_confirm()), + 3, + ); + let obj = LayoutObj::new( + Frame::left_aligned( + theme::label_title(), + title, + Dialog::new( + ( + GridPlaced::new(paragraphs) + .with_grid(3, 1) + .with_from_to((0, 0), (1, 0)), + GridPlaced::new(url).with_grid(3, 1).with_row_col(2, 0), + ), + buttons, + ), + ) + .with_border(theme::borders()), + )?; Ok(obj.into()) }; unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) } @@ -1389,7 +1416,7 @@ pub static mp_module_trezorui2: Module = obj_module! { /// def confirm_reset_device( /// *, /// title: str, - /// prompt: str, + /// button: str, /// ) -> object: /// """Confirm TOS before device setup.""" Qstr::MP_QSTR_confirm_reset_device => obj_fn_kw!(0, new_confirm_reset_device).as_obj(), diff --git a/core/mocks/generated/trezorui2.pyi b/core/mocks/generated/trezorui2.pyi index 65c04ad36d..733576c75a 100644 --- a/core/mocks/generated/trezorui2.pyi +++ b/core/mocks/generated/trezorui2.pyi @@ -103,7 +103,7 @@ def confirm_properties( def confirm_reset_device( *, title: str, - prompt: str, + button: str, ) -> object: """Confirm TOS before device setup.""" diff --git a/core/src/apps/management/recovery_device/__init__.py b/core/src/apps/management/recovery_device/__init__.py index d40b3a847c..df44ab62c0 100644 --- a/core/src/apps/management/recovery_device/__init__.py +++ b/core/src/apps/management/recovery_device/__init__.py @@ -57,9 +57,7 @@ async def recovery_device(ctx: Context, msg: RecoveryDevice) -> Success: # -------------------------------------------------------- # _continue_dialog if not dry_run: - await confirm_reset_device( - ctx, "Do you really want to recover a wallet?", recovery=True - ) + await confirm_reset_device(ctx, "Wallet recovery", recovery=True) else: await confirm_action( ctx, diff --git a/core/src/apps/management/reset_device/__init__.py b/core/src/apps/management/reset_device/__init__.py index e0c3e82143..258cc07681 100644 --- a/core/src/apps/management/reset_device/__init__.py +++ b/core/src/apps/management/reset_device/__init__.py @@ -41,12 +41,12 @@ async def reset_device(ctx: Context, msg: ResetDevice) -> Success: # make sure user knows they're setting up a new wallet if backup_type == BAK_T_SLIP39_BASIC: - prompt = "Create a new wallet with Shamir Backup?" + title = "Wallet creation\n(Shamir)" elif backup_type == BAK_T_SLIP39_ADVANCED: - prompt = "Create a new wallet with Super Shamir?" + title = "Wallet creation\n(Super Shamir)" else: - prompt = "Do you want to create a new wallet?" - await confirm_reset_device(ctx, prompt) + title = "Wallet creation" + await confirm_reset_device(ctx, title) # Rendering empty loader so users do not feel a freezing screen render_empty_loader("PROCESSING", "") diff --git a/core/src/trezor/ui/layouts/tt_v2/__init__.py b/core/src/trezor/ui/layouts/tt_v2/__init__.py index 18a55af0e0..bb98d0642d 100644 --- a/core/src/trezor/ui/layouts/tt_v2/__init__.py +++ b/core/src/trezor/ui/layouts/tt_v2/__init__.py @@ -252,12 +252,12 @@ async def confirm_action( async def confirm_reset_device( - ctx: GenericContext, prompt: str, recovery: bool = False + ctx: GenericContext, title: str, recovery: bool = False ) -> None: if recovery: - title = "RECOVERY MODE" + button = "RECOVER WALLET" else: - title = "CREATE NEW WALLET" + button = "CREATE WALLET" await raise_if_not_confirmed( interact( @@ -265,7 +265,7 @@ async def confirm_reset_device( RustLayout( trezorui2.confirm_reset_device( title=title.upper(), - prompt=prompt, + button=button, ) ), "recover_device" if recovery else "setup_device", diff --git a/tests/click_tests/recovery.py b/tests/click_tests/recovery.py index 3bffc58052..55e9aaeee0 100644 --- a/tests/click_tests/recovery.py +++ b/tests/click_tests/recovery.py @@ -25,7 +25,7 @@ def confirm_recovery(debug: "DebugLink", legacy_ui: bool = False) -> None: if legacy_ui: layout.text.startswith("Recovery mode") else: - assert layout.get_title() == "RECOVERY MODE" + assert layout.get_title().startswith("WALLET RECOVERY") debug.click(buttons.OK, wait=True) diff --git a/tests/click_tests/test_reset_slip39_advanced.py b/tests/click_tests/test_reset_slip39_advanced.py index bcddea09f1..aff056a4f1 100644 --- a/tests/click_tests/test_reset_slip39_advanced.py +++ b/tests/click_tests/test_reset_slip39_advanced.py @@ -52,7 +52,7 @@ def test_reset_slip39_advanced_2of2groups_2of2shares( ) # confirm new wallet - reset.confirm_wait(debug, "Create new wallet") + reset.confirm_wait(debug, "Wallet creation") # confirm back up reset.confirm_read(debug, "Success") @@ -137,7 +137,7 @@ def test_reset_slip39_advanced_16of16groups_16of16shares( ) # confirm new wallet - reset.confirm_wait(debug, "Create new wallet") + reset.confirm_wait(debug, "Wallet creation") # confirm back up reset.confirm_read(debug, "Success") diff --git a/tests/click_tests/test_reset_slip39_basic.py b/tests/click_tests/test_reset_slip39_basic.py index 6bfdd82813..afae51f1ed 100644 --- a/tests/click_tests/test_reset_slip39_basic.py +++ b/tests/click_tests/test_reset_slip39_basic.py @@ -50,7 +50,7 @@ def test_reset_slip39_basic_1of1(device_handler: "BackgroundDeviceHandler"): ) # confirm new wallet - reset.confirm_wait(debug, "Create new wallet") + reset.confirm_wait(debug, "Wallet creation") # confirm back up reset.confirm_read(debug, "Success") @@ -123,7 +123,7 @@ def test_reset_slip39_basic_16of16(device_handler: "BackgroundDeviceHandler"): ) # confirm new wallet - reset.confirm_wait(debug, "Create new wallet") + reset.confirm_wait(debug, "Wallet creation") # confirm back up reset.confirm_read(debug, "Success") diff --git a/tests/device_tests/reset_recovery/test_recovery_bip39_t2.py b/tests/device_tests/reset_recovery/test_recovery_bip39_t2.py index cfa8b8fd65..cc4e0f470c 100644 --- a/tests/device_tests/reset_recovery/test_recovery_bip39_t2.py +++ b/tests/device_tests/reset_recovery/test_recovery_bip39_t2.py @@ -31,7 +31,7 @@ def test_tt_pin_passphrase(client: Client): def input_flow(): yield - assert "Do you really want to recover a wallet?" in layout().get_content() + assert "recover wallet" in layout().text.lower() client.debug.press_yes() yield @@ -85,7 +85,7 @@ def test_tt_nopin_nopassphrase(client: Client): def input_flow(): yield - assert "Do you really want to recover a wallet?" in layout().get_content() + assert "recover wallet" in layout().text.lower() client.debug.press_yes() yield diff --git a/tests/persistence_tests/test_shamir_persistence.py b/tests/persistence_tests/test_shamir_persistence.py index 24df90e365..4cfb6aee5c 100644 --- a/tests/persistence_tests/test_shamir_persistence.py +++ b/tests/persistence_tests/test_shamir_persistence.py @@ -50,7 +50,7 @@ def test_abort(emulator: Emulator): device_handler.run(device.recover, pin_protection=False) layout = debug.wait_layout() - assert layout.get_title() == "RECOVERY MODE" + assert layout.get_title() == "WALLET RECOVERY" layout = debug.click(buttons.OK, wait=True) assert "Select number of words" in layout.text diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index caf8badf54..a98f4aa24f 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -1516,50 +1516,50 @@ "TT_reset_recovery-test_recovery_bip39_dryrun.py::test_seed_mismatch": "489efce4df13f3675171aabbdb45d9338ad24636bb03ad9c106f0e33d240427b", "TT_reset_recovery-test_recovery_bip39_dryrun.py::test_uninitialized": "1cbcf9bba947956dbccfb2fa59b4e734a6696f6608c6b772829bfa320789be02", "TT_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "bd83a31d0fc4c23953dfd0d138e4441984e34698ace96aad5308a4ae51b712ae", -"TT_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "9c0464c3bab2b901c6389f986a7d278c62ec64cc2766784e9b671538925c61c6", -"TT_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "908e9b06393f9942083fda2f39f6cbde723be0548d552e248696ff700158ecbf", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "ea1915d2bdbed2f27aa5f44b43581e4c45cda865f40f30235e8cc475d4c72b18", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "0d2552c483f5184f30c39dd34fe18c210cfe673fb389b9422a58147b02308377", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "8425b0e8ea7591425750bab0b6aed6bb278657420dcd7b31a59b124e00dd5034", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "3b13d0b3e9a79c3d139431d9261ffb7f171bd7d01dd2759e6659291866bb33ae", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "ca667cec51947de87c47a23e6be914aedd6e5b8d45166344a64998471af84053", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "96911f5c93c73ea2576360550123c4e8ac87beb767fe8a1191e8cf29d11ad56f", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "83c8e02a94e4e2c2bc2d30b62bc069d14cfa5f1af09825d06b593085fa558c07", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "b7535c4e501d8729ad8b6aef3fe4829ba9fa281c0f5b20180419c7b690ce469f", -"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares1-c41d-ca9ddec8": "c17dcc4090667fcc98eb3fb4c2d1a53c7539651fa85ab30efbabcd6289f7a070", +"TT_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "a2dc8e3009d8daf02d56ffb54083b8edd0996d4aa174b131ec4ef4d3812a8f82", +"TT_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "9f6fcbf7e79bd185c7f77db3e7411e1c5c6e095e2deb83248475068ca635302e", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "27d8a9fca3e35281e82b5dcbdc7e5b09b6ba9b60ad066feaa07cd15bcc200056", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "bbc295a9e6931f67dd4e006dd235ca6097f728e8504ca3641e4f2866614f5887", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "5a99501f9c90d2d27797ab75ccd8a5ed492894f358689104792dcef1033cc625", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "ca215b6b06215d2d931197fa04313f179b08612901877b99a361225d57dc1893", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "82434e50f2f1cd4d9bb90fbf5ea7c44756a7f434b6abdb3895716cf65446fddb", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "0459af236116c3a1967e90cb4f09ec64faa83bb54b0c194f2d617a48352b3a4a", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "787d718405dbe2455acafd7c08e8531d3d0cdb417505173f62d2f0800a8a5973", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "ed22bc6525d8b485d2afe9c1cc3d8495d1fee75afcd1663dc39e80a0404ab425", +"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares1-c41d-ca9ddec8": "f04611de9772fc345072471a4ccc9fcda1e1952baea003b0329b5c3b01d34b5c", "TT_reset_recovery-test_recovery_slip39_advanced_dryrun.py::test_2of3_dryrun": "d82a31b085b52eae882ea9f07a319ab711a66b9ba309b3efb5ac2d048912ad10", "TT_reset_recovery-test_recovery_slip39_advanced_dryrun.py::test_2of3_invalid_seed_dryrun": "3da7c811bb5d6f39da9c58900d760268f24034ef9d933da42faf327c1d009952", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "62edce732911df2f4b9f84fa75aca8ba3839764819c9b3540b323d82e63841d3", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_abort": "ea1915d2bdbed2f27aa5f44b43581e4c45cda865f40f30235e8cc475d4c72b18", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_ask_word_number": "6de3122125e5ce8e448617c1a9e7be6ae991bf755d69c333b2c4cbf164f41e83", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "a8e0cee27af9a2fd831bf69d9bf5fe678594c4f21d4cc349d7b2936f461ddb68", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "bec901f5d0700146a18791c5d61fb4f861b8bc33baf869dcffa10a1070759616", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "40e69fd098e950a129898baa6a3050fb995b0718eb52f2d0a71bf5bd86f1ffbf", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fbc98c8fc]": "e6204f0c96ab61736598d97412cd3bda7aea5671277a8c1cd51229e759a598d1", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-b770e0da1363247652de97a39-a50896b7": "ebb2564ff23b5a3cc64f6bdab670ce7c5d4e1bfc1864bd132d2de403c7a73380", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "de119907cfc90ee7b45b50039bc949a6eef26f675b50ddf148287d61f3b0b162", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "42ab13af0538342427a923ca5f3d0d2078f17561779d8bc42c27e97af7d08b68", -"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "366197e5c0ae4748f94350037c6cf9905af0c825548e3d993b634a06ae12d9b8", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "d30d5c840d1e932547aedf6720e1ea5144455112e760422cab1aec5d6c9c26f6", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_abort": "27d8a9fca3e35281e82b5dcbdc7e5b09b6ba9b60ad066feaa07cd15bcc200056", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_ask_word_number": "a8094f1d078a0eddc097b00e67d27cca9c1df917cc340f666194803e77ad94df", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "388ada02eda485cc063f01c34faa2f0d57692396cc128ae749ebb42a555ee7ef", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "6fc54a3f796fcde0a15a9ef6d174b6edc864cae67c5ffa3de4e4e88fcc7e7988", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "e92799ee818e2bce75bad7de73356a5df74337be64387692eec8fe6a7c775de6", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fbc98c8fc]": "56574dc9cafbfd8315b4eca4e0c505bf82d026a9ebb4a6940589a5425634387e", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-b770e0da1363247652de97a39-a50896b7": "03801f71238abfb2c8f2f31ebbdb24f5f8a9c281331380535e8ddcdc68cdb4db", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "f5dadcc0f26b23feb57ef9631dc4560630fa1f844d8400995faeb2b60814e348", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "d3fe8653fcf9f68ce3787df4a174f0821fafd4ce061aa194a046e894b47e43e8", +"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "f247455f45556b7b5b71008703b4aaf6c2b5310ada694fb22e53c8cf753c3018", "TT_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "a6b5e4f08546d0bcdbfa2e798a4b56719743f691da7e6946a71681c0aaec2056", "TT_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "dc397401ed5d0ea187598080c2799a2c0d0faa428c94b1312bfd62659e987a94", -"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "c190a8ea4f1bef1de5dc59871a564290a0ffc51e417d93e7ea277d7fdfbbfc53", -"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Advanced-bac-f67baa1c": "fcf541d6f16707a369134b15e5b96918cf6d710ad67d302dc01e7c85edbcc976", -"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Basic-backup-6348e7fe": "76e61f9d8a7e376e06ce22f100fff2695cbfd9c51557258e35139cffb4303e58", -"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Bip39-backup_flow_bip39]": "32c679421e1b681573742e68f5e23707345d8eec70102689f26f3d6be2fb8157", -"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Advanced-backup-dcbda5cf": "2a0de8ff0de71ab4d1e6163ef86f162fb60fe9b939169fd357c96f5e9f57aec2", -"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Basic-backup_fl-1577de4d": "2ff34f612b51c36d416881701efa249c3aa68b36da43670183c4b24e5a9e09ee", +"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "bff67c223da54ad64ee60abf1912be025913f94b67728afdc7e600c40de3934c", +"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Advanced-bac-f67baa1c": "9ef7bdbe75302b32684eca62183885c26e994d2a32f20cd07823d01a4996ef91", +"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Basic-backup-6348e7fe": "4a1959eee0d5af5fb68378702fdef30e3850381a92eb339959bfcc6da2fb03f8", +"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Bip39-backup_flow_bip39]": "98b9c6fa669763f0688be9ef317abf70999c82ac4363b0b09c47dcc6380e904c", +"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Advanced-backup-dcbda5cf": "152d2a026a08511ff553e27647131d3ff6fd6d680adfe40b73ca597849d2e7fb", +"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Basic-backup_fl-1577de4d": "0b90aaf1f896cc26fba20be86e3e37a949f4f58041a6d2ba3a68e144ecc5ee70", "TT_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "bd83a31d0fc4c23953dfd0d138e4441984e34698ace96aad5308a4ae51b712ae", -"TT_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "de4f40345c49662f1a8ce8249dffeb3eee0d4f00d3ebeb13ec1e4b8347609454", -"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device": "a86599521f0117abae401979552ad8b01a73ac5a996cd5652faa6def8cab8343", -"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192": "02c8f1e681c9c8f241cc2af4c9ed6f55d4d8c3d46eb8943859079859d8436121", -"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "0f6beb876550f17fcfb24205b5cfc3dfbab2e050a4a1eb463cd00edddd802ef3", -"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "62fb402d690d3e300cc3b48697c3674c0abaae635855738d355253ca5e63f814", -"TT_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery": "f575662fdbb94f038c61378d11234a8be40ff762c425bd4fe9776438e6c45089", -"TT_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery": "cb76ee44fa16fb759dc7d258ba3afdce214977d7b9c4d426ab694f7d93f9e9c3", -"TT_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery": "1c4e62fb5dc548d974ae59b8bffa1582823a608ddb3e0892ba196ddbd4bd893e", -"TT_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced": "b646036a2464a674688a6eee1c0fec7b15dbef8b0438696760c5a490f170f289", -"TT_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic": "bddc9481eae2a9549edcd53a20dcad3a5c137b2ce6ab037fa7395118baa0b399", -"TT_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256": "80cac8bf29bf75d83decaf8b821df23798cb9b702ed5f2b3072af295fae45155", +"TT_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "aee0f776a66f7b7a8b8ebdf7fac6d38c7a7bb28aafa3a7678d4cf610d7b8764d", +"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device": "6c401c3c716ac6e9fbf8df3ae8c86d6a01edbe2789b11e3cfff4ce45e83a74ef", +"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192": "ed68ddd5b20ebd2676bdbe7173263a44bce69c4bbe619bc15cc0e34896a7fac8", +"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "c2a5f9b1e9f89243503af5e661cf0deaf33daf43fb64706cd089b2e3a5e25a2b", +"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "fa916d548c9f2091c3ab06972241ec427d2f47e78130c157bbdd05268c40f81b", +"TT_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery": "b199a8e4817884b76115ea3cf09ec7368dba08e4c026f1a48df80dae591e92bd", +"TT_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery": "e70655249d26442b9fcf4a0de133f15f108267c03da532aa5df6639dbf2c02c7", +"TT_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery": "1985a029684557c92c4413990dc61f062c1c9fd1b9e3fb38793e83d01983879e", +"TT_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced": "953c646844e1ad9f2b2e81506f01761bea9b7c31cf06a24ea83de65a92a8013c", +"TT_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic": "ec9373002f8a2d7e9de36f766bb5133a7b30b67daac7aa6e4e8ac034a1d84381", +"TT_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256": "f36510a719acbd65d7ce83619cd2b51932b96763b06475fafe32b2dd3efd9177", "TT_ripple-test_get_address.py::test_ripple_get_address": "bd83a31d0fc4c23953dfd0d138e4441984e34698ace96aad5308a4ae51b712ae", "TT_ripple-test_get_address.py::test_ripple_get_address_other": "bd83a31d0fc4c23953dfd0d138e4441984e34698ace96aad5308a4ae51b712ae", "TT_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "bd83a31d0fc4c23953dfd0d138e4441984e34698ace96aad5308a4ae51b712ae", @@ -1669,7 +1669,7 @@ "TT_test_msg_sd_protect.py::test_enable_disable": "281291394deac125a39600cbe887143d6acae06c34204ea2a204e04f7ac4ff9d", "TT_test_msg_sd_protect.py::test_refresh": "c4d3fd6a6fa2cd604797213ad78ad7db920baf978ac74c5e6a63efe92eab5c1f", "TT_test_msg_sd_protect.py::test_wipe": "75a8d711080e86476ccfa571cd3f34a920f066fd3f68bd6908b9933fa40bf3f2", -"TT_test_msg_wipedevice.py::test_autolock_not_retained": "226a96885a6493ffb23f02fe7d7faccb69d6d993f07fa1257da8e72b7818c384", +"TT_test_msg_wipedevice.py::test_autolock_not_retained": "b37910800ac26040928f663a85d936425bdb50632b1b0bf7cb8a1d85c6d3776f", "TT_test_msg_wipedevice.py::test_wipe_device": "08515af24e5da8f81eedb0d878242f3c25751ff008822fdd61df4bd966104213", "TT_test_passphrase_slip39_advanced.py::test_128bit_passphrase": "f023150016d0ab8c5db296ad35f2a626d4d74cc02fffd77f1e9fb1bca5fb8e9f", "TT_test_passphrase_slip39_advanced.py::test_256bit_passphrase": "f023150016d0ab8c5db296ad35f2a626d4d74cc02fffd77f1e9fb1bca5fb8e9f",