1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-24 15:28:10 +00:00

feat(core/ui): reset_device copy change

[no changelog]
This commit is contained in:
Martin Milata 2023-01-13 20:41:58 +01:00
parent 89b905a349
commit afb5c55416
13 changed files with 114 additions and 88 deletions

View File

@ -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<Self::Msg> {

View File

@ -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
}

View File

@ -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<T, S> ComponentMsgObj for (GridPlaced<Paragraphs<T>>, GridPlaced<FormattedText<S, S>>)
where
T: ParagraphSource,
S: AsRef<str>,
{
fn msg_try_into_obj(&self, _msg: Self::Msg) -> Result<Obj, Error> {
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(),

View File

@ -103,7 +103,7 @@ def confirm_properties(
def confirm_reset_device(
*,
title: str,
prompt: str,
button: str,
) -> object:
"""Confirm TOS before device setup."""

View File

@ -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,

View File

@ -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", "")

View File

@ -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",

View File

@ -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)

View File

@ -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")

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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",