diff --git a/core/embed/rust/librust_qstr.h b/core/embed/rust/librust_qstr.h index 2539e3565..83824a301 100644 --- a/core/embed/rust/librust_qstr.h +++ b/core/embed/rust/librust_qstr.h @@ -93,6 +93,7 @@ static void _librust_qstrs(void) { MP_QSTR_bounds; MP_QSTR_button; MP_QSTR_button_event; + MP_QSTR_button_request; MP_QSTR_buttons__abort; MP_QSTR_buttons__access; MP_QSTR_buttons__again; diff --git a/core/embed/rust/src/ui/button_request.rs b/core/embed/rust/src/ui/button_request.rs new file mode 100644 index 000000000..8a3056fbe --- /dev/null +++ b/core/embed/rust/src/ui/button_request.rs @@ -0,0 +1,58 @@ +use crate::strutil::TString; +use num_traits::FromPrimitive; + +// ButtonRequestType from messages-common.proto +// Eventually this should be generated +#[derive(Clone, Copy, FromPrimitive)] +#[repr(u16)] +pub enum ButtonRequestCode { + Other = 1, + FeeOverThreshold = 2, + ConfirmOutput = 3, + ResetDevice = 4, + ConfirmWord = 5, + WipeDevice = 6, + ProtectCall = 7, + SignTx = 8, + FirmwareCheck = 9, + Address = 10, + PublicKey = 11, + MnemonicWordCount = 12, + MnemonicInput = 13, + UnknownDerivationPath = 15, + RecoveryHomepage = 16, + Success = 17, + Warning = 18, + PassphraseEntry = 19, + PinEntry = 20, +} + +impl ButtonRequestCode { + pub fn num(&self) -> u16 { + *self as u16 + } + + pub fn with_type(self, br_type: &'static str) -> ButtonRequest { + ButtonRequest::new(self, br_type.into()) + } + + pub fn from(i: u16) -> Self { + unwrap!(Self::from_u16(i)) + } +} + +#[derive(Clone)] +pub struct ButtonRequest { + pub code: ButtonRequestCode, + pub br_type: TString<'static>, +} + +impl ButtonRequest { + pub fn new(code: ButtonRequestCode, br_type: TString<'static>) -> Self { + ButtonRequest { code, br_type } + } + + pub fn from_num(code: u16, br_type: TString<'static>) -> Self { + ButtonRequest::new(ButtonRequestCode::from(code), br_type) + } +} diff --git a/core/embed/rust/src/ui/component/base.rs b/core/embed/rust/src/ui/component/base.rs index 75fbb0be4..77f0ce865 100644 --- a/core/embed/rust/src/ui/component/base.rs +++ b/core/embed/rust/src/ui/component/base.rs @@ -6,6 +6,7 @@ use crate::{ strutil::TString, time::Duration, ui::{ + button_request::{ButtonRequest, ButtonRequestCode}, component::{maybe::PaintOverlapping, MsgMap}, display::{self, Color}, geometry::{Offset, Rect}, @@ -486,6 +487,7 @@ pub struct EventCtx { paint_requested: bool, anim_frame_scheduled: bool, page_count: Option, + button_request: Option, root_repaint_requested: bool, } @@ -512,6 +514,7 @@ impl EventCtx { * `Child::marked_for_paint` being true. */ anim_frame_scheduled: false, page_count: None, + button_request: None, root_repaint_requested: false, } } @@ -569,6 +572,16 @@ impl EventCtx { self.page_count } + pub fn send_button_request(&mut self, code: ButtonRequestCode, br_type: TString<'static>) { + #[cfg(feature = "ui_debug")] + assert!(self.button_request.is_none()); + self.button_request = Some(ButtonRequest::new(code, br_type)); + } + + pub fn button_request(&mut self) -> Option { + self.button_request.take() + } + pub fn pop_timer(&mut self) -> Option<(TimerToken, Duration)> { self.timers.pop() } @@ -578,6 +591,9 @@ impl EventCtx { self.paint_requested = false; self.anim_frame_scheduled = false; self.page_count = None; + #[cfg(feature = "ui_debug")] + assert!(self.button_request.is_none()); + self.button_request = None; self.root_repaint_requested = false; } diff --git a/core/embed/rust/src/ui/component/button_request.rs b/core/embed/rust/src/ui/component/button_request.rs new file mode 100644 index 000000000..8abb392f3 --- /dev/null +++ b/core/embed/rust/src/ui/component/button_request.rs @@ -0,0 +1,65 @@ +use crate::ui::{ + button_request::ButtonRequest, + component::{Component, Event, EventCtx}, + geometry::Rect, +}; + +/// Component that sends a ButtonRequest after receiving Event::Attach. The +/// request is only sent once. +#[derive(Clone)] +pub struct OneButtonRequest { + button_request: Option, + pub inner: T, +} + +impl OneButtonRequest { + pub fn new(button_request: ButtonRequest, inner: T) -> Self { + Self { + button_request: Some(button_request), + inner, + } + } +} + +impl Component for OneButtonRequest { + type Msg = T::Msg; + + fn place(&mut self, bounds: Rect) -> Rect { + self.inner.place(bounds) + } + + fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option { + if matches!(event, Event::Attach) { + if let Some(button_request) = self.button_request.take() { + ctx.send_button_request(button_request.code, button_request.br_type) + } + } + self.inner.event(ctx, event) + } + + fn paint(&mut self) { + self.inner.paint() + } + + fn render<'s>(&self, target: &mut impl crate::ui::shape::Renderer<'s>) { + self.inner.render(target) + } +} + +#[cfg(feature = "ui_debug")] +impl crate::trace::Trace for OneButtonRequest { + fn trace(&self, t: &mut dyn crate::trace::Tracer) { + self.inner.trace(t) + } +} + +pub trait ButtonRequestExt { + fn one_button_request(self, br: ButtonRequest) -> OneButtonRequest + where + Self: Sized, + { + OneButtonRequest::new(br, self) + } +} + +impl ButtonRequestExt for T {} diff --git a/core/embed/rust/src/ui/component/mod.rs b/core/embed/rust/src/ui/component/mod.rs index 0859d6858..3240e80bc 100644 --- a/core/embed/rust/src/ui/component/mod.rs +++ b/core/embed/rust/src/ui/component/mod.rs @@ -3,6 +3,7 @@ pub mod bar; pub mod base; pub mod border; +pub mod button_request; pub mod connect; pub mod empty; pub mod image; @@ -22,6 +23,7 @@ pub mod timeout; pub use bar::Bar; pub use base::{Child, Component, ComponentExt, Event, EventCtx, Never, Root, TimerToken}; pub use border::Border; +pub use button_request::{ButtonRequestExt, OneButtonRequest}; pub use empty::Empty; #[cfg(all(feature = "jpeg", feature = "micropython"))] pub use jpeg::Jpeg; diff --git a/core/embed/rust/src/ui/layout/obj.rs b/core/embed/rust/src/ui/layout/obj.rs index b7c15eb6f..01130a3cc 100644 --- a/core/embed/rust/src/ui/layout/obj.rs +++ b/core/embed/rust/src/ui/layout/obj.rs @@ -17,6 +17,7 @@ use crate::{ }, time::Duration, ui::{ + button_request::ButtonRequest, component::{Component, Event, EventCtx, Never, Root, TimerToken}, constant, display::sync, @@ -248,6 +249,17 @@ impl LayoutObj { self.inner.borrow().page_count.into() } + fn obj_button_request(&self) -> Result { + let inner = &mut *self.inner.borrow_mut(); + + match inner.event_ctx.button_request() { + None => Ok(Obj::const_none()), + Some(ButtonRequest { code, br_type }) => { + (code.num().into(), br_type.try_into()?).try_into() + } + } + } + #[cfg(feature = "ui_debug")] fn obj_bounds(&self) { use crate::ui::display; @@ -280,6 +292,7 @@ impl LayoutObj { Qstr::MP_QSTR_trace => obj_fn_2!(ui_layout_trace).as_obj(), Qstr::MP_QSTR_bounds => obj_fn_1!(ui_layout_bounds).as_obj(), Qstr::MP_QSTR_page_count => obj_fn_1!(ui_layout_page_count).as_obj(), + Qstr::MP_QSTR_button_request => obj_fn_1!(ui_layout_button_request).as_obj(), }), }; &TYPE @@ -470,6 +483,14 @@ extern "C" fn ui_layout_page_count(this: Obj) -> Obj { unsafe { util::try_or_raise(block) } } +extern "C" fn ui_layout_button_request(this: Obj) -> Obj { + let block = || { + let this: Gc = this.try_into()?; + this.obj_button_request() + }; + unsafe { util::try_or_raise(block) } +} + #[cfg(feature = "ui_debug")] #[no_mangle] pub extern "C" fn ui_debug_layout_type() -> &'static Type { diff --git a/core/embed/rust/src/ui/mod.rs b/core/embed/rust/src/ui/mod.rs index b08f77789..029c13658 100644 --- a/core/embed/rust/src/ui/mod.rs +++ b/core/embed/rust/src/ui/mod.rs @@ -2,6 +2,7 @@ pub mod macros; pub mod animation; +pub mod button_request; pub mod component; pub mod constant; pub mod display; diff --git a/core/embed/rust/src/ui/model_tt/layout.rs b/core/embed/rust/src/ui/model_tt/layout.rs index 35bfccb99..ec5681c77 100644 --- a/core/embed/rust/src/ui/model_tt/layout.rs +++ b/core/embed/rust/src/ui/model_tt/layout.rs @@ -1688,6 +1688,9 @@ pub static mp_module_trezorui2: Module = obj_module! { /// def page_count(self) -> int: /// """Return the number of pages in the layout object.""" /// + /// def button_request(self) -> tuple[int, str] | None: + /// """Return (code, type) of button request made during the last event or timer pass.""" + /// /// class UiResult: /// """Result of a UI operation.""" /// pass diff --git a/core/mocks/generated/trezorui2.pyi b/core/mocks/generated/trezorui2.pyi index a7b1afc35..e02bb65d4 100644 --- a/core/mocks/generated/trezorui2.pyi +++ b/core/mocks/generated/trezorui2.pyi @@ -505,6 +505,8 @@ class LayoutObj(Generic[T]): """Paint bounds of individual components on screen.""" def page_count(self) -> int: """Return the number of pages in the layout object.""" + def button_request(self) -> tuple[int, str] | None: + """Return (code, type) of button request made during the last event or timer pass.""" # rust/src/ui/model_tt/layout.rs diff --git a/core/src/trezor/ui/layouts/common.py b/core/src/trezor/ui/layouts/common.py index f16dcc16e..86ce7a47f 100644 --- a/core/src/trezor/ui/layouts/common.py +++ b/core/src/trezor/ui/layouts/common.py @@ -39,4 +39,4 @@ async def interact( # We know for certain how many pages the layout will have pages = layout.page_count() # type: ignore [Cannot access attribute "page_count" for class "LayoutType"] await button_request(br_type, br_code, pages) - return await context.wait(layout) + return await layout diff --git a/core/src/trezor/ui/layouts/tr/__init__.py b/core/src/trezor/ui/layouts/tr/__init__.py index ae54d338f..0fa4a02a8 100644 --- a/core/src/trezor/ui/layouts/tr/__init__.py +++ b/core/src/trezor/ui/layouts/tr/__init__.py @@ -1,10 +1,10 @@ from typing import TYPE_CHECKING import trezorui2 -from trezor import TR, io, loop, ui, utils +from trezor import TR, io, log, loop, ui, utils from trezor.enums import ButtonRequestType -from trezor.wire import ActionCancelled -from trezor.wire.context import wait as ctx_wait +from trezor.messages import ButtonAck, ButtonRequest +from trezor.wire import ActionCancelled, context from ..common import button_request, interact @@ -38,9 +38,11 @@ if __debug__: class RustLayout(LayoutParentType[T]): # pylint: disable=super-init-not-called def __init__(self, layout: trezorui2.LayoutObj[T]): + self.br_chan = loop.chan() self.layout = layout self.timer = loop.Timer() self.layout.attach_timer_fn(self.set_timer) + self._send_button_request() def set_timer(self, token: int, deadline: int) -> None: self.timer.schedule(deadline, token) @@ -62,13 +64,23 @@ class RustLayout(LayoutParentType[T]): from trezor.enums import DebugPhysicalButton def create_tasks(self) -> tuple[loop.AwaitableTask, ...]: - return ( - self.handle_input_and_rendering(), - self.handle_timers(), - self.handle_swipe_signal(), - self.handle_button_signal(), - self.handle_result_signal(), - ) + if context.CURRENT_CONTEXT: + return ( + self.handle_input_and_rendering(), + self.handle_timers(), + self.handle_swipe_signal(), + self.handle_button_signal(), + self.handle_result_signal(), + self.handle_usb(context.get_context()), + ) + else: + return ( + self.handle_input_and_rendering(), + self.handle_timers(), + self.handle_swipe_signal(), + self.handle_button_signal(), + self.handle_result_signal(), + ) async def handle_result_signal(self) -> None: """Enables sending arbitrary input - ui.Result. @@ -98,30 +110,41 @@ class RustLayout(LayoutParentType[T]): async def _press_left(self, hold_ms: int | None) -> Any: """Triggers left button press.""" self.layout.button_event(io.BUTTON_PRESSED, io.BUTTON_LEFT) + self._send_button_request() self._paint() if hold_ms is not None: await loop.sleep(hold_ms) - return self.layout.button_event(io.BUTTON_RELEASED, io.BUTTON_LEFT) + r = self.layout.button_event(io.BUTTON_RELEASED, io.BUTTON_LEFT) + self._send_button_request() + return r async def _press_right(self, hold_ms: int | None) -> Any: """Triggers right button press.""" self.layout.button_event(io.BUTTON_PRESSED, io.BUTTON_RIGHT) + self._send_button_request() self._paint() if hold_ms is not None: await loop.sleep(hold_ms) - return self.layout.button_event(io.BUTTON_RELEASED, io.BUTTON_RIGHT) + r = self.layout.button_event(io.BUTTON_RELEASED, io.BUTTON_RIGHT) + self._send_button_request() + return r async def _press_middle(self, hold_ms: int | None) -> Any: """Triggers middle button press.""" self.layout.button_event(io.BUTTON_PRESSED, io.BUTTON_LEFT) + self._send_button_request() self._paint() self.layout.button_event(io.BUTTON_PRESSED, io.BUTTON_RIGHT) + self._send_button_request() self._paint() if hold_ms is not None: await loop.sleep(hold_ms) self.layout.button_event(io.BUTTON_RELEASED, io.BUTTON_LEFT) + self._send_button_request() self._paint() - return self.layout.button_event(io.BUTTON_RELEASED, io.BUTTON_RIGHT) + r = self.layout.button_event(io.BUTTON_RELEASED, io.BUTTON_RIGHT) + self._send_button_request() + return r async def _press_button( self, @@ -197,7 +220,11 @@ class RustLayout(LayoutParentType[T]): else: def create_tasks(self) -> tuple[loop.AwaitableTask, ...]: - return self.handle_timers(), self.handle_input_and_rendering() + return ( + self.handle_timers(), + self.handle_input_and_rendering(), + self.handle_usb(context.get_context()), + ) def _first_paint(self) -> None: self._paint() @@ -233,6 +260,7 @@ class RustLayout(LayoutParentType[T]): msg = None if event in (io.BUTTON_PRESSED, io.BUTTON_RELEASED): msg = self.layout.button_event(event, button_num) + self._send_button_request() if msg is not None: raise ui.Result(msg) self._paint() @@ -242,6 +270,7 @@ class RustLayout(LayoutParentType[T]): # Using `yield` instead of `await` to avoid allocations. token = yield self.timer msg = self.layout.timer(token) + self._send_button_request() if msg is not None: raise ui.Result(msg) self._paint() @@ -250,6 +279,20 @@ class RustLayout(LayoutParentType[T]): """How many paginated pages current screen has.""" return self.layout.page_count() + async def handle_usb(self, ctx: context.Context): + while True: + br_code, br_type, page_count = await loop.race( + ctx.read(()), self.br_chan.take() + ) + log.debug(__name__, "ButtonRequest.type=%s", br_type) + await ctx.call(ButtonRequest(code=br_code, pages=page_count), ButtonAck) + + def _send_button_request(self): + res = self.layout.button_request() + if res is not None: + br_code, br_type = res + self.br_chan.publish((br_code, br_type, self.layout.page_count())) + def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None: # Simple drawing not supported for layouts that set timers. @@ -505,7 +548,7 @@ async def show_address( pages=layout.page_count(), ) layout.request_complete_repaint() - result = await ctx_wait(layout) + result = await layout # User confirmed with middle button. if result is CONFIRMED: @@ -524,27 +567,23 @@ async def show_address( ) return result - result = await ctx_wait( - RustLayout( - trezorui2.show_address_details( - qr_title="", # unused on this model - address=address if address_qr is None else address_qr, - case_sensitive=case_sensitive, - details_title="", # unused on this model - account=account, - path=path, - xpubs=[(xpub_title(i), xpub) for i, xpub in enumerate(xpubs)], - ) - ), + result = await RustLayout( + trezorui2.show_address_details( + qr_title="", # unused on this model + address=address if address_qr is None else address_qr, + case_sensitive=case_sensitive, + details_title="", # unused on this model + account=account, + path=path, + xpubs=[(xpub_title(i), xpub) for i, xpub in enumerate(xpubs)], + ) ) # Can only go back from the address details. assert result is CANCELLED # User pressed left cancel button, show mismatch dialogue. else: - result = await ctx_wait( - RustLayout(trezorui2.show_mismatch(title=mismatch_title)) - ) + result = await RustLayout(trezorui2.show_mismatch(title=mismatch_title)) assert result in (CONFIRMED, CANCELLED) # Right button aborts action, left goes back to showing address. if result is CONFIRMED: @@ -1019,24 +1058,22 @@ async def confirm_value( should_show_more_layout.page_count(), ) - result = await ctx_wait(should_show_more_layout) + result = await should_show_more_layout if result is CONFIRMED: return elif result is INFO: info_title, info_value = info_items_list[0] - await ctx_wait( - RustLayout( - trezorui2.confirm_blob( - title=info_title, - data=info_value, - description=description, - extra=None, - verb="", - verb_cancel="<", - hold=False, - chunkify=chunkify_info, - ) + await RustLayout( + trezorui2.confirm_blob( + title=info_title, + data=info_value, + description=description, + extra=None, + verb="", + verb_cancel="<", + hold=False, + chunkify=chunkify_info, ) ) else: @@ -1276,7 +1313,7 @@ async def confirm_modify_output( address_layout.page_count(), ) address_layout.request_complete_repaint() - await raise_if_not_confirmed(ctx_wait(address_layout)) + await raise_if_not_confirmed(address_layout) if send_button_request: send_button_request = False @@ -1286,7 +1323,7 @@ async def confirm_modify_output( modify_layout.page_count(), ) modify_layout.request_complete_repaint() - result = await ctx_wait(modify_layout) + result = await modify_layout if result is CONFIRMED: break diff --git a/core/src/trezor/ui/layouts/tt/__init__.py b/core/src/trezor/ui/layouts/tt/__init__.py index 6dd82ff8f..72b69cf65 100644 --- a/core/src/trezor/ui/layouts/tt/__init__.py +++ b/core/src/trezor/ui/layouts/tt/__init__.py @@ -1,10 +1,10 @@ from typing import TYPE_CHECKING import trezorui2 -from trezor import TR, io, loop, ui, utils +from trezor import TR, io, log, loop, ui, utils from trezor.enums import ButtonRequestType -from trezor.wire import ActionCancelled -from trezor.wire.context import wait as ctx_wait +from trezor.messages import ButtonAck, ButtonRequest +from trezor.wire import ActionCancelled, context from ..common import button_request, interact @@ -40,9 +40,11 @@ class RustLayout(LayoutParentType[T]): # pylint: disable=super-init-not-called def __init__(self, layout: trezorui2.LayoutObj[T]): + self.br_chan = loop.chan() self.layout = layout self.timer = loop.Timer() self.layout.attach_timer_fn(self.set_timer) + self._send_button_request() def set_timer(self, token: int, deadline: int) -> None: self.timer.schedule(deadline, token) @@ -63,13 +65,23 @@ class RustLayout(LayoutParentType[T]): if __debug__: def create_tasks(self) -> tuple[loop.AwaitableTask, ...]: - return ( - self.handle_timers(), - self.handle_input_and_rendering(), - self.handle_swipe(), - self.handle_click_signal(), - self.handle_result_signal(), - ) + if context.CURRENT_CONTEXT: + return ( + self.handle_timers(), + self.handle_input_and_rendering(), + self.handle_swipe(), + self.handle_click_signal(), + self.handle_result_signal(), + self.handle_usb(context.get_context()), + ) + else: + return ( + self.handle_timers(), + self.handle_input_and_rendering(), + self.handle_swipe(), + self.handle_click_signal(), + self.handle_result_signal(), + ) async def handle_result_signal(self) -> None: """Enables sending arbitrary input - ui.Result. @@ -116,6 +128,7 @@ class RustLayout(LayoutParentType[T]): (io.TOUCH_END, orig_x + 2 * off_x, orig_y + 2 * off_y), ): msg = self.layout.touch_event(event, x, y) + self._send_button_request() self._paint() if msg is not None: raise ui.Result(msg) @@ -135,10 +148,12 @@ class RustLayout(LayoutParentType[T]): from apps.debug import notify_layout_change self.layout.touch_event(io.TOUCH_START, x, y) + self._send_button_request() self._paint() if hold_ms is not None: await loop.sleep(hold_ms) msg = self.layout.touch_event(io.TOUCH_END, x, y) + self._send_button_request() if msg is not None: debug_storage.new_layout_event_id = event_id @@ -165,7 +180,17 @@ class RustLayout(LayoutParentType[T]): else: def create_tasks(self) -> tuple[loop.AwaitableTask, ...]: - return self.handle_timers(), self.handle_input_and_rendering() + if context.CURRENT_CONTEXT: + return ( + self.handle_timers(), + self.handle_input_and_rendering(), + self.handle_usb(context.get_context()), + ) + else: + return ( + self.handle_timers(), + self.handle_input_and_rendering(), + ) def _first_paint(self) -> None: ui.backlight_fade(ui.style.BACKLIGHT_NONE) @@ -205,6 +230,7 @@ class RustLayout(LayoutParentType[T]): msg = None if event in (io.TOUCH_START, io.TOUCH_MOVE, io.TOUCH_END): msg = self.layout.touch_event(event, x, y) + self._send_button_request() if msg is not None: raise ui.Result(msg) self._paint() @@ -214,6 +240,7 @@ class RustLayout(LayoutParentType[T]): # Using `yield` instead of `await` to avoid allocations. token = yield self.timer msg = self.layout.timer(token) + self._send_button_request() if msg is not None: raise ui.Result(msg) self._paint() @@ -221,6 +248,20 @@ class RustLayout(LayoutParentType[T]): def page_count(self) -> int: return self.layout.page_count() + async def handle_usb(self, ctx: context.Context): + while True: + br_code, br_type, page_count = await loop.race( + ctx.read(()), self.br_chan.take() + ) + log.debug(__name__, "ButtonRequest.type=%s", br_type) + await ctx.call(ButtonRequest(code=br_code, pages=page_count), ButtonAck) + + def _send_button_request(self): + res = self.layout.button_request() + if res is not None: + br_code, br_type = res + self.br_chan.publish((br_code, br_type, self.layout.page_count())) + def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None: # Simple drawing not supported for layouts that set timers. @@ -452,7 +493,7 @@ async def show_address( pages=layout.page_count(), ) layout.request_complete_repaint() - result = await ctx_wait(layout) + result = await layout # User pressed right button. if result is CONFIRMED: @@ -470,25 +511,21 @@ async def show_address( ) return result - result = await ctx_wait( - RustLayout( - trezorui2.show_address_details( - qr_title=title, - address=address if address_qr is None else address_qr, - case_sensitive=case_sensitive, - details_title=details_title, - account=account, - path=path, - xpubs=[(xpub_title(i), xpub) for i, xpub in enumerate(xpubs)], - ) + result = await RustLayout( + trezorui2.show_address_details( + qr_title=title, + address=address if address_qr is None else address_qr, + case_sensitive=case_sensitive, + details_title=details_title, + account=account, + path=path, + xpubs=[(xpub_title(i), xpub) for i, xpub in enumerate(xpubs)], ) ) assert result is CANCELLED else: - result = await ctx_wait( - RustLayout(trezorui2.show_mismatch(title=mismatch_title)) - ) + result = await RustLayout(trezorui2.show_mismatch(title=mismatch_title)) assert result in (CONFIRMED, CANCELLED) # Right button aborts action, left goes back to showing address. if result is CONFIRMED: @@ -1187,7 +1224,7 @@ async def confirm_modify_output( address_layout.page_count(), ) address_layout.request_complete_repaint() - await raise_if_not_confirmed(ctx_wait(address_layout)) + await raise_if_not_confirmed(address_layout) if send_button_request: send_button_request = False @@ -1197,7 +1234,7 @@ async def confirm_modify_output( modify_layout.page_count(), ) modify_layout.request_complete_repaint() - result = await ctx_wait(modify_layout) + result = await modify_layout if result is CONFIRMED: break @@ -1212,11 +1249,11 @@ async def with_info( await button_request(br_type, br_code, pages=main_layout.page_count()) while True: - result = await ctx_wait(main_layout) + result = await main_layout if result is INFO: info_layout.request_complete_repaint() - result = await ctx_wait(info_layout) + result = await info_layout assert result is CANCELLED main_layout.request_complete_repaint() continue @@ -1344,8 +1381,8 @@ async def confirm_signverify( address_layout, info_layout, br_type, br_code=BR_TYPE_OTHER ) if result is not CONFIRMED: - result = await ctx_wait( - RustLayout(trezorui2.show_mismatch(title=TR.addr_mismatch__mismatch)) + result = await RustLayout( + trezorui2.show_mismatch(title=TR.addr_mismatch__mismatch) ) assert result in (CONFIRMED, CANCELLED) # Right button aborts action, left goes back to showing address. diff --git a/core/src/trezor/ui/layouts/tt/recovery.py b/core/src/trezor/ui/layouts/tt/recovery.py index a3c99e4fc..82310480a 100644 --- a/core/src/trezor/ui/layouts/tt/recovery.py +++ b/core/src/trezor/ui/layouts/tt/recovery.py @@ -3,7 +3,6 @@ from typing import Callable, Iterable import trezorui2 from trezor import TR from trezor.enums import ButtonRequestType -from trezor.wire.context import wait as ctx_wait from ..common import interact from . import RustLayout, raise_if_not_confirmed @@ -17,7 +16,7 @@ async def _is_confirmed_info( info_func: Callable, ) -> bool: while True: - result = await ctx_wait(dialog) + result = await dialog if result is trezorui2.INFO: await info_func() @@ -50,7 +49,7 @@ async def request_word( ) ) - word: str = await ctx_wait(keyboard) + word: str = await keyboard return word @@ -143,7 +142,7 @@ async def continue_recovery( if info_func is not None: return await _is_confirmed_info(homepage, info_func) else: - result = await ctx_wait(homepage) + result = await homepage return result is CONFIRMED diff --git a/core/src/trezor/ui/layouts/tt/reset.py b/core/src/trezor/ui/layouts/tt/reset.py index ebc2bff0d..4ac805594 100644 --- a/core/src/trezor/ui/layouts/tt/reset.py +++ b/core/src/trezor/ui/layouts/tt/reset.py @@ -4,7 +4,6 @@ import trezorui2 from trezor import TR from trezor.enums import ButtonRequestType from trezor.wire import ActionCancelled -from trezor.wire.context import wait as ctx_wait from ..common import interact from . import RustLayout, raise_if_not_confirmed @@ -89,15 +88,13 @@ async def select_word( while len(words) < 3: words.append(words[-1]) - result = await ctx_wait( - RustLayout( - trezorui2.select_word( - title=title, - description=TR.reset__select_word_x_of_y_template.format( - checked_index + 1, count - ), - words=(words[0], words[1], words[2]), - ) + result = await RustLayout( + trezorui2.select_word( + title=title, + description=TR.reset__select_word_x_of_y_template.format( + checked_index + 1, count + ), + words=(words[0], words[1], words[2]), ) ) if __debug__ and isinstance(result, str): @@ -173,13 +170,11 @@ async def _prompt_number( assert isinstance(value, int) return value - await ctx_wait( - RustLayout( - trezorui2.show_simple( - title=None, - description=info(value), - button=TR.buttons__ok_i_understand, - ) + await RustLayout( + trezorui2.show_simple( + title=None, + description=info(value), + button=TR.buttons__ok_i_understand, ) ) num_input.request_complete_repaint() diff --git a/core/src/trezor/wire/context.py b/core/src/trezor/wire/context.py index 08eaab347..b2f9afa5e 100644 --- a/core/src/trezor/wire/context.py +++ b/core/src/trezor/wire/context.py @@ -157,6 +157,17 @@ class Context: memoryview(buffer)[:msg_size], ) + async def call( + self, + msg: protobuf.MessageType, + expected_type: type[LoadedMessageType], + ) -> LoadedMessageType: + assert expected_type.MESSAGE_WIRE_TYPE is not None + + await self.write(msg) + del msg + return await self.read((expected_type.MESSAGE_WIRE_TYPE,), expected_type) + CURRENT_CONTEXT: Context | None = None @@ -186,11 +197,7 @@ async def call( if CURRENT_CONTEXT is None: raise RuntimeError("No wire context") - assert expected_type.MESSAGE_WIRE_TYPE is not None - - await CURRENT_CONTEXT.write(msg) - del msg - return await CURRENT_CONTEXT.read((expected_type.MESSAGE_WIRE_TYPE,), expected_type) + return await CURRENT_CONTEXT.call(msg, expected_type) async def call_any( diff --git a/core/tests/test_apps.ethereum.sign_typed_data.py b/core/tests/test_apps.ethereum.sign_typed_data.py index bf6f3772c..e8a261886 100644 --- a/core/tests/test_apps.ethereum.sign_typed_data.py +++ b/core/tests/test_apps.ethereum.sign_typed_data.py @@ -41,6 +41,17 @@ class MockContext: async def read(self, _resp_types, _resp_type): return EthereumTypedDataValueAck(value=self.next_response) + async def call( + self, + msg: protobuf.MessageType, + expected_type: type[LoadedMessageType], + ) -> LoadedMessageType: + assert expected_type.MESSAGE_WIRE_TYPE is not None + + await self.write(msg) + del msg + return await self.read((expected_type.MESSAGE_WIRE_TYPE,), expected_type) + # Helper functions from trezorctl to build expected type data structures # TODO: it could be better to group these functions into a class, to visibly differentiate it diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index bdd272a88..1a2dac17f 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -9183,9 +9183,9 @@ "T2T1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "8e8b2479b6006c1b829346d4e8625a782a6f7ac6346e24e52f82dcb946c0fe43", "T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "2f89aad6748f21cffc13fc6054174ae1a58b02acb1867942229f48b8b88ae84d", "T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "93f34d7ae28e05b2804057e2b5844e2ac80b992b0141befdecb9f6bd533e1d90", -"T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "f04dd2dcaf04b8bab5221a32bf4026a96b352f88d4d09fb0c5fa5af4e908eb27", +"T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "1283119ffe9877dc24cf54c2d17c86c1bea3bbe3bd88fab61a78351ece37574b", "T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "6966b39783763d03f78da209a871f37e7abf81e25bbeaa61ef3aa23b55336e14", -"T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "a6590a72349b73e7870cc029b2a20e1c9750f2270520e8e2e33ac87d460cc55b", +"T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "816dc97287a08a952baa0a5a6051a13c2bda981e08184c2502a9582c4c847ac2", "T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "74d94117100e2a85c7341466cf671343f4257df72c1aa78539e6fc19d5d55727", "T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "3c881c6e70b7656ec061d86d7aa454e12d6428b7c8bb1b40d3e596016284bb44", "T2T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "4eea02a651a4da7b45e25da9850e1b65beaada45ee6d3d655490521dafa897f7", @@ -9195,16 +9195,16 @@ "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "06f4b7012e441435326d930378208705e53278de984b829f65710ee01414325b", "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_abort": "2f89aad6748f21cffc13fc6054174ae1a58b02acb1867942229f48b8b88ae84d", "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "e80c2d4b8c5ebeb70a1b550686000f381c115b3f1a91282572cc28df6ace5ea6", -"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "fb99ffda1ecdecf2e75f61c13d1deecc9e0612a04d33fcfb5c0c61e244cd6bf0", +"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "d0ac4405cb7c9c192af8654a8cb11a450d05dea809dd794963cbc21c5b29ab74", "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "be084493431aab50cf76dd2c34d4af188d4f40d18b950ae1adf1ac811bde7de7", "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "fd689f2c88a44f83de5a9443d97d73d28f14817cb4e030121998ceb6ed2e8a05", -"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "e3f558c1852b5031204544186946b1fc9dc6942eb0440f515d1b2cbb9ff734ae", +"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "330b30519e08bbb16abde05166478b0e3c6ced442fb2706b3286b267e5cd6448", "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "87d21a96f2a50abad9a75cbce923d50e9513ff7173fbe50f679ac1aae9e10406", "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "e4ac680898a749c2749f828a7b3e1611b1413778c2a1d6c6c9317180e655051f", "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "01d97c9e5a671eeb8b56c7ac8b25ec82e2dac5904fdf052e797ae6c054453372", -"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "bc8a7d98375d46bd676b8b39ef36ae20a12dfa712420bd971fad3f8cb21f1095", -"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "ce0bebb96e5ce058cd142b95d9f97994bce2678a339ec5b4bf4576f20005a752", -"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "ddf1bcc7cee67e2bc38dda78543c9d04d6c6429a6540423042117cfe6e707fab", +"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "0b8ba4a3d38e2ae12f87f06a21bfeec30fa892fb628b869206d2875f0aa8ce8d", +"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "6ea13220d030b0b2531ceddfe1af6bf8b8d6a13d103c449944d9a119217270f0", +"T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "4d5a7fc576810fd8a1fb7504dd83d9cce623432dc897e3f871a960d35bc48fe6", "T2T1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "2db3e3119116de9b001a288f040d92e4b90ae4c6178ec94f7b44d23f247e2a73", "T2T1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "fce31a993c026c2ab3a2b381c712b6069cda27bd66b084c35005bdca81afb048", "T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "29956f95d176dba8da7eebf385ef404749d99c8a92e030e29a197846880da228", @@ -9384,11 +9384,11 @@ "T2T1_cs_test_basic.py::test_ping": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d", "T2T1_cs_test_busy_state.py::test_busy_expiry": "5807370e36255f64722c9b70002daad3b718387eaa41102561ec6a0dcbeed20a", "T2T1_cs_test_busy_state.py::test_busy_state": "491481abc34b5ebe614e45edb1a5831cffb87b9acd28b5bb596d8e61c0b29147", -"T2T1_cs_test_cancel.py::test_cancel_message_via_cancel[message0]": "b51e0d1d0e72a525724163cceef0426977dd3bb36bc0df5a0d96979cd0ebd011", -"T2T1_cs_test_cancel.py::test_cancel_message_via_cancel[message1]": "b51e0d1d0e72a525724163cceef0426977dd3bb36bc0df5a0d96979cd0ebd011", -"T2T1_cs_test_cancel.py::test_cancel_message_via_initialize[message0]": "b51e0d1d0e72a525724163cceef0426977dd3bb36bc0df5a0d96979cd0ebd011", -"T2T1_cs_test_cancel.py::test_cancel_message_via_initialize[message1]": "b51e0d1d0e72a525724163cceef0426977dd3bb36bc0df5a0d96979cd0ebd011", -"T2T1_cs_test_cancel.py::test_cancel_on_paginated": "59a00b375bf2e60cc0e624626aaf4b651cc24200be29e41e912fbc9358f7168e", +"T2T1_cs_test_cancel.py::test_cancel_message_via_cancel[message0]": "fea263b87f3b5ccbbc7ac43de02f28a3927cc13116505a76b71047427d3b80d3", +"T2T1_cs_test_cancel.py::test_cancel_message_via_cancel[message1]": "2e607dedaaff54ba045743b6cf77f83eb81608d7e5ab22c3aaadbc13bfba9cb1", +"T2T1_cs_test_cancel.py::test_cancel_message_via_initialize[message0]": "fea263b87f3b5ccbbc7ac43de02f28a3927cc13116505a76b71047427d3b80d3", +"T2T1_cs_test_cancel.py::test_cancel_message_via_initialize[message1]": "2e607dedaaff54ba045743b6cf77f83eb81608d7e5ab22c3aaadbc13bfba9cb1", +"T2T1_cs_test_cancel.py::test_cancel_on_paginated": "19cd5133ca91858fe667cdb4cd38de92ab01eba5a232eff23ba6591f59e7f26d", "T2T1_cs_test_debuglink.py::test_softlock_instability": "5ace49e9f6465d2a6fe19c0ccccfa5604f103b7ceb02a20a917647f09c374802", "T2T1_cs_test_firmware_hash.py::test_firmware_hash_emu": "bf3b0b0bfc905aa8b9cb991baffb7c523f4f185f0a6531081c2e09fee5964108", "T2T1_cs_test_firmware_hash.py::test_firmware_hash_hw": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d", @@ -9440,7 +9440,7 @@ "T2T1_cs_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "be92f86f750cb31cf1f105413e2ad00053cbb8080b3c52c43b0682c8e2beae9c", "T2T1_cs_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "3e893170b1e80dc53617b5707b94f9a486f9fbf6f7d42fe05dd7d6c1d0c3d497", "T2T1_cs_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "e474c3b7ee87123456263add1b6a793a0478e4a5eb3887e8d8794f7890b0d4f8", -"T2T1_cs_test_msg_changepin_t2.py::test_change_failed": "3ae8aaa54debbeda6d7e2a9d4d178003b0f5c49e95478728b6c9965324eb7889", +"T2T1_cs_test_msg_changepin_t2.py::test_change_failed": "eda917e9a4b55412c89628aa1414cc5cc1c7aefccf4cd452447f9ae188d49162", "T2T1_cs_test_msg_changepin_t2.py::test_change_invalid_current": "08ac3c286ca2a906945aa3a64f65cdaccfc9fee97c52a696be5fddb6fa350d54", "T2T1_cs_test_msg_changepin_t2.py::test_change_pin": "1016d5ded51408eed07b9d048f8f51eceec1df950c215615670d8799a9020e83", "T2T1_cs_test_msg_changepin_t2.py::test_remove_pin": "6b81f8e410e9eb6f12e00b96085ce069b998645b5c92100da6aad4230b9fa306", @@ -10650,9 +10650,9 @@ "T2T1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "532d10d1d33670a6355c5a66eaa91cc48d88f1cac8dc9be6b156a8ea5e28677a", "T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "a6031e2fc7555aa12fca1573e4d4c1b242fc9e5aee3e6f5ba7a0a0c446248243", "T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "08f68408b7970643c752646103a0c2b87b939fdbf3fefc4baef358547159f473", -"T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "4dff74af975048a9d9bb3f157ee35a83548879c913440aaccef8d119063903a3", +"T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "f1c91a2ab5a56bfbc85413d61711296ca739a14c129eff64fd8dc0a02c1ae8e0", "T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "e8c0a2c6e23ec2a6fcc2f0572c0e3ac1e6af4bf697789a0cace07a5b0ced6e05", -"T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "7308412ff00cdc11e543ed5b447f60fbe26b31514b6e63b973e1ff7020601bec", +"T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "fdda959fde60b0e9ffcabfc7bb0c992c4e3c59a207103158e5f6cdab97d9ff3c", "T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "e8ea4f59030b9ed7a43ac1ad2cb7614fa0dc23aefbb84d661be366425d888b08", "T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "9ac53a165c84a7169b1516a31c3a322c259e2e0f5d327e2be93605a01d4dd524", "T2T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "f3a8b2faac72a00121576d82d9f8d6924318a7c9d06c30c8f4974f88bc373e8d", @@ -10662,16 +10662,16 @@ "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "cfb205a8c4b04bcb0cd58feaa772994dfab3c026ef0b4524f363278b47acd913", "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_abort": "a6031e2fc7555aa12fca1573e4d4c1b242fc9e5aee3e6f5ba7a0a0c446248243", "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "8803ff610d055436af3c65e62f5095d5ac4270ff510963264dcf401c555b79c5", -"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "2afff9b5465911d33953eef488bcc483bb56f592ebb28f1a8150b1082dddac7b", +"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "9c321d3c97a8a334790e71c112c90ddb30f003373e7d1c64a00feeecb9f5bc44", "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "85e29b77ef87355218645a113a9d1bd8df7a8850f236cefac9eb84f9b75e2ea2", "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "f881175d64809ef465fff40bb4039d159b36f9aeb33f4b0dccfe4347fa9dd8ec", -"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "80602dd55133f67f580ab3dfd73b6401074cdd677d34f37f75781a2a3c037a30", +"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "46d44f853f15c05ac3fa45af7a5d7e1c063b3d8999d5affd15d0aec723ca7d63", "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "4a8daae73ff52d016d529efb7e32df4073c5426def3a790806c0438c4ce67c92", "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "9aa47aaaecbfb76f29abec5a89a746af3e54b2bbb8621544492757d3e28b9f0f", "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "d52a8fcfe810c2b15a83ae9a1a4e82310a38768daa9a4612e693caad09328b23", -"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "33c17d161982e254eb831ad5659ebb9f8aa2478ffa7d6cd4025dbc0e8773d4fd", -"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "7f32fe7e694ad2112b1cdbd0f0704660dc1050a6bf67c6f01650d8d002115363", -"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "3171aae7e67c53d2d82db5bb5b7b5f369c9873b6acf97b83e4aa03b4452f1279", +"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "ebbaf18cd0de3c80f7a8a3111870a7835fdb84377c5f5814ebf62bb54c254cfd", +"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "6ed7fbb11d4ef801c17550f7167b85a059a827ba2e9f743dc7be4737ee5ed680", +"T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "357db16be36a5a0ed19dd981b084f46d1bd874db05f2622dc5ea06237ae7490a", "T2T1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "a41c082f40c0cf424064179da18c8a28c25aea8da7aa8d97b49397b33a72fa03", "T2T1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "24f8115deb03abf6624975d228cde64253d5f6a822f216e1671ed28c45d12221", "T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "03c67a21b9c0e19b7da02d4cbf7f380a2a411215abd9004d0ce9e3062e2437a3", @@ -10851,11 +10851,11 @@ "T2T1_de_test_basic.py::test_ping": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390", "T2T1_de_test_busy_state.py::test_busy_expiry": "d00c19e4be337da53afb665aa2c38784a51a91989ba65bb77aaadc8605994395", "T2T1_de_test_busy_state.py::test_busy_state": "2e3c5140f572097a5abf9134ec2324f1d0fcafb91a73bf754672db1868a004d1", -"T2T1_de_test_cancel.py::test_cancel_message_via_cancel[message0]": "c07eceb7d7f8ecd914ceac903e30121d3a8d2a4a8e1b3597852188b9e393495e", -"T2T1_de_test_cancel.py::test_cancel_message_via_cancel[message1]": "c07eceb7d7f8ecd914ceac903e30121d3a8d2a4a8e1b3597852188b9e393495e", -"T2T1_de_test_cancel.py::test_cancel_message_via_initialize[message0]": "c07eceb7d7f8ecd914ceac903e30121d3a8d2a4a8e1b3597852188b9e393495e", -"T2T1_de_test_cancel.py::test_cancel_message_via_initialize[message1]": "c07eceb7d7f8ecd914ceac903e30121d3a8d2a4a8e1b3597852188b9e393495e", -"T2T1_de_test_cancel.py::test_cancel_on_paginated": "1aaaa6973bbea8cdf9378cd8b9abe61c3339039b5f5481735e0c5c4f3fa92e91", +"T2T1_de_test_cancel.py::test_cancel_message_via_cancel[message0]": "78c008c19b84f7784c6e26d9b1e3b04c2ef5aa6312318e53146abaa7b563cc08", +"T2T1_de_test_cancel.py::test_cancel_message_via_cancel[message1]": "0f74eaf21eeb33f4926152e82f47d0c9bc62e5e6002aecb6da2f3ebd126b1f31", +"T2T1_de_test_cancel.py::test_cancel_message_via_initialize[message0]": "78c008c19b84f7784c6e26d9b1e3b04c2ef5aa6312318e53146abaa7b563cc08", +"T2T1_de_test_cancel.py::test_cancel_message_via_initialize[message1]": "0f74eaf21eeb33f4926152e82f47d0c9bc62e5e6002aecb6da2f3ebd126b1f31", +"T2T1_de_test_cancel.py::test_cancel_on_paginated": "581f308ac81b24a6380967324898b9691c030661ffdd706d8159649bf0b2e557", "T2T1_de_test_debuglink.py::test_softlock_instability": "b1f71b2ccea57e0375d465b3c0bc5a4fbcfab66ce4eb9701fa91fc4808e1359d", "T2T1_de_test_firmware_hash.py::test_firmware_hash_emu": "5f74c8e2421c3e3af6f8c3fed431fe795b8a8db7b83a95a5d48ef779df916363", "T2T1_de_test_firmware_hash.py::test_firmware_hash_hw": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390", @@ -10907,7 +10907,7 @@ "T2T1_de_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "fc90ebd4d7a642a0a09596c52b690a9e867245fe475f1f2ec1b404776b24d3a9", "T2T1_de_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "294aca06fb27eccda67897470412979142bde2e7bf363f19035c20c31277e486", "T2T1_de_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "236fd39a8761eb753a8ba6bb411c3ea596ca0578443bbaf7d73af3c779200c3e", -"T2T1_de_test_msg_changepin_t2.py::test_change_failed": "101e76a2de2aca0e1cb8f47b79a226624fa45c092c5ba40f52dc564d59b7c025", +"T2T1_de_test_msg_changepin_t2.py::test_change_failed": "21d332ede2903b750cc7c3ad3164e1fce27765e9da37eb7261b5ffd856213035", "T2T1_de_test_msg_changepin_t2.py::test_change_invalid_current": "291d3fa301b49446735db5c367d1e4d561b53783eaf312037b24488458ff65dd", "T2T1_de_test_msg_changepin_t2.py::test_change_pin": "546c92a1ae7c89c2ded37d4b1e111cd62924580340db46ff269608c8ea88e1c4", "T2T1_de_test_msg_changepin_t2.py::test_remove_pin": "cd257f3a7c48f0d4f550cbddef61a46401a1cd706dc788cdb56b574247bf0585", @@ -12117,9 +12117,9 @@ "T2T1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "9d161076574c957b3708ec34771026a970b1ad90ac7bbf5b1492ded0de1f5ba4", "T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "264cc069a974286064781c22c175e54bdb28000909b5dc671acfa03ab272b426", "T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "7d0f0cac581360c5a8b64e229171f0c6a92972adff3c3ed334c483076021a041", -"T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "2561ac9a4a209c181d8cf35579db0fa36f752cb628067d59d3456d64f82f93cc", +"T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "980c374bd173485c06ffc3ad2f3874762ef065762ce063440791383f1bb01b08", "T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "2c4f3600b0f26c4da64add476618ce5bb9d759d914afe89c5a75eec3cd7ebeac", -"T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "b86d2d1c561fac4055ed1c437bcdd69d2dd7f43553af6bb5630259430983f55a", +"T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "a1ad9e10356bd6223b37949538fbb560a4487aa9463d19a9001ad35c4834d8fd", "T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "9271c61c3740658029b0fe3b375377233aaad70a97d929d984f6b1a16b3c1ef7", "T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "c0886a9bef6b448d193ddf032c14b614069c5f742aacdfab0d4d21c53a5dd331", "T2T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "4f90f47e88cca3af88975a817baa01937b21647c19d7799acea6795309bba28b", @@ -12129,16 +12129,16 @@ "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "73de5bb9f1528b81396ebfd321df67f773f925d6cbd7e616a58ce30eaea27ef0", "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_abort": "264cc069a974286064781c22c175e54bdb28000909b5dc671acfa03ab272b426", "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "59786fd2798a68e0546515ccd7ec0d7e4c3276098545615850911899953681e1", -"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "bcab24b36d8ac28c76f6ebcf54f416024d3b32ef03862234a88d9128d1e16548", +"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "703ed967f59738cf2a41aa6780656d1a8c77ab3c2cc558820981421a9e6475df", "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "12ea0985454ab09cbec3d1f9e4246f0e6c098cc8ea69774ea253a473065e6938", "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "66c45751002ae4d84e0ffb3a80349585604b5f19f87d08368e806ff0ac0d6cd5", -"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "7d6b8c0008568f8a9fac9e6bb543b3b60845eb6aa5cc715efc5ed75f95aa27cb", +"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "b5d6d520a1fa9d7c8e1d074dbb9646c62f0f5ff8c4fc192f5547b671d6bf7913", "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "443ab1ba8f9bc006865e978418b4ccdf931f88ad5c13397467cfc01ed3b3e406", "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "7a6eda20f828b170eaf90a58813a5569ae7af9d0f49e41c4d84227e64107733c", "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "a16d8e9838b762534c0a2d8c82c277ba81e49f018506dc26624a4a0d8cce97c6", -"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "c8f48570ea01b8046ac1deb84f3a12d1b02718ef28fcb47402e9f98745769d3e", -"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "d31779beb275065c26d2ad3fab64682b4c55c9c0bee2e2ddab6c607762d1e551", -"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "35b9bc382e6e0c8778be8456f7dda77ea693ed5e8bc1168213c9ca5b1b1d5720", +"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "f9e8df5075762c89e5f9eacc171ecb1592c9e905ee87d07066f8d2863f7c8598", +"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "041e5ffdafb2812db3c37a6bcd89f50fb1906563aecffd95dbc02bceb8084172", +"T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "4b32bef901796d64fe03b215688da4af7c24d013b67ecd5b0d561043fa47dc44", "T2T1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "5f3413af77cc76413fe1ec3e00e17850f8de504499b5bf9d753ed4d9351931e5", "T2T1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "2b866e19489d98b9924398080478e2126fe9769b057ea725e7ba795584adb1ad", "T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "e5468c5e24463f2e7f0bd7eec981bb7e942cce7dbadcdbd7c5cf3bd1df229a4f", @@ -12318,11 +12318,11 @@ "T2T1_en_test_basic.py::test_ping": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", "T2T1_en_test_busy_state.py::test_busy_expiry": "6509e7c943f2d09e3a5a7c69faee74c75b321ed1614d881d1ebdb57693c7f69a", "T2T1_en_test_busy_state.py::test_busy_state": "13fce27fd795f6f622614fde678ba3f717129a27ecc6d0c2cbd389ede4a2798f", -"T2T1_en_test_cancel.py::test_cancel_message_via_cancel[message0]": "1bd3157d54327e33542f89dcac6c7cd23808f7c9aa1b0adb390e5fcc1fd858a5", -"T2T1_en_test_cancel.py::test_cancel_message_via_cancel[message1]": "1bd3157d54327e33542f89dcac6c7cd23808f7c9aa1b0adb390e5fcc1fd858a5", -"T2T1_en_test_cancel.py::test_cancel_message_via_initialize[message0]": "1bd3157d54327e33542f89dcac6c7cd23808f7c9aa1b0adb390e5fcc1fd858a5", -"T2T1_en_test_cancel.py::test_cancel_message_via_initialize[message1]": "1bd3157d54327e33542f89dcac6c7cd23808f7c9aa1b0adb390e5fcc1fd858a5", -"T2T1_en_test_cancel.py::test_cancel_on_paginated": "498ffee2ea02e2783466cbb993f0cd83eedd3b67afde37b5d1f713fc996c1455", +"T2T1_en_test_cancel.py::test_cancel_message_via_cancel[message0]": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T2T1_en_test_cancel.py::test_cancel_message_via_cancel[message1]": "3ed24b99952d25fcf0d9bd6d307c576862fe870ddb98288fa89b227f0e192073", +"T2T1_en_test_cancel.py::test_cancel_message_via_initialize[message0]": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T2T1_en_test_cancel.py::test_cancel_message_via_initialize[message1]": "3ed24b99952d25fcf0d9bd6d307c576862fe870ddb98288fa89b227f0e192073", +"T2T1_en_test_cancel.py::test_cancel_on_paginated": "5c198919403dab5ba394a87544aaa95bdafe82959fbabdbe918c81e2d226b051", "T2T1_en_test_debuglink.py::test_softlock_instability": "55cb4cbeec68bd8ccee460034677cf8053f8f688d5c3559f360c38a205b34e37", "T2T1_en_test_firmware_hash.py::test_firmware_hash_emu": "2a63f0bd10ba99e223f571482d4af635653bb8a3bddc1d8400777ee5519bc605", "T2T1_en_test_firmware_hash.py::test_firmware_hash_hw": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", @@ -12374,7 +12374,7 @@ "T2T1_en_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "db9ffa189464d1c0ba7d3ea2533306e25e6895355083066c2b6f9b19efb54406", "T2T1_en_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "96a18ef7ba92b18fd9d6d3856f737e8b1418df79221d6750723109c90b2d5807", "T2T1_en_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "f478a15ed2dfde070953b1f14c6054452b0ac27ef8ab5cf9c1ea233a43676a32", -"T2T1_en_test_msg_changepin_t2.py::test_change_failed": "1526ada2ec21dc5219ac42698a1d6a9314b11f79adf37465d226ffb37b603124", +"T2T1_en_test_msg_changepin_t2.py::test_change_failed": "72e36642bd0b8832bec9e3b171da5a7fe5e2a1b44282c521a69d4fc0b5254828", "T2T1_en_test_msg_changepin_t2.py::test_change_invalid_current": "e9925836465ef35c3d5364e90780626274a92a1123451b572b9ea11a9cd2180a", "T2T1_en_test_msg_changepin_t2.py::test_change_pin": "256483cab21191ee110281e9f547c3fa08968f4d49fa38896f8141f5b8eb4701", "T2T1_en_test_msg_changepin_t2.py::test_remove_pin": "6a606987a97b9d50d991288f1222adf2c819846076b2014e91909c9907a0e427", @@ -13602,9 +13602,9 @@ "T2T1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "f924ac5735b5d1c42ff10bb5d74ca08b22468a4d8dd1d6b9fbe7a191d5272c76", "T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "aeb20740f1aed49544823071d0fb58e942aa39ecea8dee58f4ccd872801ce798", "T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "7a010cdd6866e367b0c0790d7ab31e0705a81dbe3c49b5b679d895fb5a97e4fb", -"T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "ee3da185b3b56bf08a4742e4bec131ed82b61db1a45070f2c74dbfe13df43978", +"T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "2c6502d7676bfb4f7b0cb3e93be9fd11bfa655a7115a5e1bb712eacbee0cc6f7", "T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "8f1970fc42bbffbd429bed2d6ed19b2df86f82264db6711e043d493d2c893d00", -"T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "39accd1ed5c5575cfd9603eef34926c524c6dabd6f2aa4a7f9927609b4800ac2", +"T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "cae7cb874a05c6f12958687e45bcc7f8009a5d98aa757e0aa266aaf521e9fef5", "T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "1b0d315dcce62c807d740072da246ef399eb4c031ca06a20be9b43c0efb8b619", "T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "4783ef6eb4517eb96c57295ef5a7cf0faa7e8ccc344cafbe16b68af12dbea83f", "T2T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "859c80626b65a088763d6c29d0200c35c65e6e24da9dd7173f2c251efb8a5699", @@ -13614,16 +13614,16 @@ "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "dc511287d381e40164fb32fe409906f4042e17367ba35c7d282e281707639e30", "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_abort": "aeb20740f1aed49544823071d0fb58e942aa39ecea8dee58f4ccd872801ce798", "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "02de62b333ee9f4f510977e95385a06c97dc66e4d700458dc8b73c16dbf80306", -"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "dbea283e09e907b3f8405ff71de5b828b67be49e478a73a7f97700176ed62371", +"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "75082ea23878210f06b2782e3e241886df201e688b54b74f55ece47cb9a5cdf0", "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "0e8e437276ab32efc4d3c961ec4f3e1ba8ba4e03eec5d640b52a38822d037df7", "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "a6d9c431ee736c40d7600e824321077794e207d7088b713f96ebca875e9a8f38", -"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "ef5542a30ed086d193a3bb2ef3025c1190e3f7372216e2c70a8464a4066194ea", +"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "1a41ba9855f21bcad666b9e6e7077aee2cc770edb38b2d632a0210d5611b2c2e", "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "f638a59f17d88b973dd0ac432ed78e3d411fe4a56229ac29c845e019bef5de16", "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "cc18812d2f5b7ef5c23555ebcad59a28e82c01d06f2c5907b952156c44045ff2", "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "0a8fd0daaa315189ef7e063736fdf0301bd4ddb36ec31e2250a4f66408b1dc7c", -"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "c43145b81703108d19c39a9043136c7eb94c62ede3668890a226ed5a87ba709a", -"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "3224baf58710455f51d287069bd69865436b16182aa9d6ee9e5f6ea4e502567c", -"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "985a80b7cc665ddb740fd8b49fc21fff87c06a3cd42d297d9f72d41771f98bc4", +"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "2495dc14e3f0175f3b9c6850455dc12523a65ceaa76022ba7502a6dbd4e4f60d", +"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "105c981ef63c444c26e4280340e476a29ebee11015c079ec31ec3960229c154a", +"T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "5ade258d2f37bc47b0ce25f1478e669743e7d500a6e00f6d65b82c0367fb78c9", "T2T1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "d405d791a687be77da11e1c7b37eb49feaa5dd74b5746fac42c5916385c8b63a", "T2T1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "611d56d305fa5d605b191b866822428e99ab605e7634190e70d60070ed8f3195", "T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "d224c8e21874c5a238a21cab83dc0b7ea8cf6b02f05df42b6a4cb2f3f380deb7", @@ -13803,11 +13803,11 @@ "T2T1_es_test_basic.py::test_ping": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab", "T2T1_es_test_busy_state.py::test_busy_expiry": "da280d408675fbdbaddefe467ce32f0fbd64726f8935dc5d49b9d2fe969f7585", "T2T1_es_test_busy_state.py::test_busy_state": "1f9f7512198e2a8b471738fb5192fd39dac29f0ae800a128a586a79ef5f57ebb", -"T2T1_es_test_cancel.py::test_cancel_message_via_cancel[message0]": "38fcd1064e016bef25510a8a5d6a9dbb4bed8ef7d9d482a59291f3769a1a621d", -"T2T1_es_test_cancel.py::test_cancel_message_via_cancel[message1]": "38fcd1064e016bef25510a8a5d6a9dbb4bed8ef7d9d482a59291f3769a1a621d", -"T2T1_es_test_cancel.py::test_cancel_message_via_initialize[message0]": "38fcd1064e016bef25510a8a5d6a9dbb4bed8ef7d9d482a59291f3769a1a621d", -"T2T1_es_test_cancel.py::test_cancel_message_via_initialize[message1]": "38fcd1064e016bef25510a8a5d6a9dbb4bed8ef7d9d482a59291f3769a1a621d", -"T2T1_es_test_cancel.py::test_cancel_on_paginated": "e7867645a35ee40b80f8a3eeaa122571367a3d3a1f850f89f5f7b14ce28522d7", +"T2T1_es_test_cancel.py::test_cancel_message_via_cancel[message0]": "1d98be5dd1e52fe5da379d1c72d6bc9065228b1d66939ee5bd2eda2fe857b679", +"T2T1_es_test_cancel.py::test_cancel_message_via_cancel[message1]": "61caffa741cf81f709e6df2818a5ace7411fef1765e14aec7dd99b13f7d1322f", +"T2T1_es_test_cancel.py::test_cancel_message_via_initialize[message0]": "1d98be5dd1e52fe5da379d1c72d6bc9065228b1d66939ee5bd2eda2fe857b679", +"T2T1_es_test_cancel.py::test_cancel_message_via_initialize[message1]": "61caffa741cf81f709e6df2818a5ace7411fef1765e14aec7dd99b13f7d1322f", +"T2T1_es_test_cancel.py::test_cancel_on_paginated": "d842630d249b84c0582c95187ad93a13bdd42c7320407a1ed552920b281f6f9a", "T2T1_es_test_debuglink.py::test_softlock_instability": "073cd4ce53bde3d39a8ba0cf1cb0faeead2ab1b3b4d666c7c60aab1e813c1dd1", "T2T1_es_test_firmware_hash.py::test_firmware_hash_emu": "6f9a2eb356b7054881d6b60116f6f54e4884835b3b3881c151ba6ab5f32f8560", "T2T1_es_test_firmware_hash.py::test_firmware_hash_hw": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab", @@ -13859,7 +13859,7 @@ "T2T1_es_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "9bc3b09fc66b9faa15ec07cfb47ad6dc10e6965833822e9ddbeb56fe55f546e8", "T2T1_es_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "6b9bce5a9ffc79f57f0d9f2856c65c708a0f82ddc6ffbfa84b6746421788a00d", "T2T1_es_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "0a483f3f2c218e4141ab45e93074c062e81cdded4c27ff54d52a4d02b037670b", -"T2T1_es_test_msg_changepin_t2.py::test_change_failed": "b1e04819151d46cb2dfd1e32aaf1f6cc593fd9a422f2a93d1c18ffbde05a191c", +"T2T1_es_test_msg_changepin_t2.py::test_change_failed": "b9f80c0be3b257a0c53a16815c27ae6f3a2ba1e9ef5f7ad296c9c228acd524d9", "T2T1_es_test_msg_changepin_t2.py::test_change_invalid_current": "8631c5489ab6371809d83c57763a62356fc8d6e392bda073f78c0e4a623af491", "T2T1_es_test_msg_changepin_t2.py::test_change_pin": "b904e3b1e59a41b45a3b7b8de590e4d848c7225c7a9aeef3d35839f29671bc60", "T2T1_es_test_msg_changepin_t2.py::test_remove_pin": "a7627e527f283d7a42caed5ca29b3271120cff3daf755d877d19e000745a6b02", @@ -15069,9 +15069,9 @@ "T2T1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "974d8435badcf1dd4cec0c9df6fffacc46336b769641e752e6f6f449a46773f7", "T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "4d0ebbf93a6212f2a655ccb2707e8da7e8798d6e95e5786810d6484f98bd5aad", "T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "fc9a5ac9b017e3b3b52c7c407d880c3d78842da4a103afa55842c09eaad1c52b", -"T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "617d68b91757d66a187d4171792ccbe32b75a46275d9aac439d84e88c01e3fdc", +"T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "b78289d8e69db34f4590d209534ff7537566adedeba3ee4958c278a82e09f15c", "T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "294ebf84ed042c3614cb4d440ed2c219ec176c8235154070c727daee69caed7b", -"T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "15a367a52163e65271307a7b106306bdcc35334d5b95723e1a5ae621c2beba52", +"T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "32857469ef5cf8cf3cc347736b2f0265c0683adbce86cbf22e46b14866e0b565", "T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "8d614efdd82ac142fdbe0736c5a374bcc12cb7b1545f78f40fdddfeb132da7c9", "T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "99ebcfb43037d4c901d40f6b22cdad95ac8ca3d7c0b43cd281691244ef197567", "T2T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "d5b21612ac87850a91b28c8a1f07fd7dc7f4142990bf9868126473a088a80e96", @@ -15081,16 +15081,16 @@ "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "e31f44d338bd64d8a3d8d8db82d0403b2d3314a999ce0b172c044ad1ec0890f1", "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_abort": "4d0ebbf93a6212f2a655ccb2707e8da7e8798d6e95e5786810d6484f98bd5aad", "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "ec024a426936d65d84d7198ff2bf44a8ffa1f24e60afc00ebc0ca090937d56d6", -"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "4707f43e73d9d5537a8a16d3a83b3fb274c10e74fbc0d9025b445e7b89efdadf", +"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "e80d8bfe48bb0f2a025664197e0b8273e93977950b9e24bab3ecbcad11e2aa75", "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "142b8458dba27108711b54b500d399a8f6b186d277e5c0704d82219fb70b76c9", "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "1261f7b79a1cb4a110f50cb00cae5cdc590768989b69c98b542386ead92de8c6", -"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "cc8d63461af6e282b7fc4afcd6e418ce487cba3cf95c4b1eb9990cec648c61c8", +"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "2f251ec4904901641728864098844c56c3efe1e868f2f92903915ac162e3ce8f", "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "2618492c26098f91ea57e82feb5850d076fa707e7b0c195bb7a5760b1c47e8e3", "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "1cd921e884adbf2453e120ceae4bb61ccbd5fcfc3280eb1576e88786e006e0e2", "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "4618d385c51aed62a5edfa7063f61d4c5e1a2d9f4422658f2d3471b293b88d4e", -"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "f074b5739f3bec0e444926534fbb6be4f1269d5567e2ea6ec4a7d29315a3da8d", -"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "ec1610029c2085be5d2f59f55873d3104bbcdf719cbe90b99ab91098424d2a7b", -"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "a6370ff212817bdf354d6b12c9bd4ea9da883c5f1b28bf746d2b7745f81ace0b", +"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "42a66f1495a3ebeb3134c3be93ed6f4bfe8c4f9315522302192aeebe1a853edd", +"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "4452014cfbf7501ebadbb7d6c0954a67e9fb0d00e2ad2f9dcddbea8daf46d6fd", +"T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "b3a5868738d31a49d3ad3a97dc5145c9f0e0cef977bb895730d981155fe758af", "T2T1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "461178dd45fc130048749dd679ae202547e64c3311e07ff9ea27a593c7cbe51d", "T2T1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "6904de14224eb55d657747ccbc0b73a093406d2910665c69dbfc65df949b1d3a", "T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "e18f67ec58ea71bbd9d8dbc83a36846b5ef494cf4653e64b93c6f858a1834dd8", @@ -15270,11 +15270,11 @@ "T2T1_fr_test_basic.py::test_ping": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94", "T2T1_fr_test_busy_state.py::test_busy_expiry": "0b142663642a8981e8fb85cf0eda771d72c9d2206cd224d170b588f32da4d8cd", "T2T1_fr_test_busy_state.py::test_busy_state": "315b1d0679a565a8a65804592914e4e8ffb3010d73795e0164b327d1776d5dda", -"T2T1_fr_test_cancel.py::test_cancel_message_via_cancel[message0]": "469c355dcabfba4a0f56eeb89834dfa595fcec58989f8c17e5db9a8a268a9b7f", -"T2T1_fr_test_cancel.py::test_cancel_message_via_cancel[message1]": "469c355dcabfba4a0f56eeb89834dfa595fcec58989f8c17e5db9a8a268a9b7f", -"T2T1_fr_test_cancel.py::test_cancel_message_via_initialize[message0]": "469c355dcabfba4a0f56eeb89834dfa595fcec58989f8c17e5db9a8a268a9b7f", -"T2T1_fr_test_cancel.py::test_cancel_message_via_initialize[message1]": "469c355dcabfba4a0f56eeb89834dfa595fcec58989f8c17e5db9a8a268a9b7f", -"T2T1_fr_test_cancel.py::test_cancel_on_paginated": "3547888bf963a9e458d362f218df5770e81b53ad850c462f98c00ea772ab42dd", +"T2T1_fr_test_cancel.py::test_cancel_message_via_cancel[message0]": "e2146f6ece95111d17b01b0f2e0bf720c845242c7b0791ce5c8af5e9ca63249e", +"T2T1_fr_test_cancel.py::test_cancel_message_via_cancel[message1]": "722d1df17cd5650880e8a634038c1f582229258661a26ee307a9a8d8737dc178", +"T2T1_fr_test_cancel.py::test_cancel_message_via_initialize[message0]": "e2146f6ece95111d17b01b0f2e0bf720c845242c7b0791ce5c8af5e9ca63249e", +"T2T1_fr_test_cancel.py::test_cancel_message_via_initialize[message1]": "722d1df17cd5650880e8a634038c1f582229258661a26ee307a9a8d8737dc178", +"T2T1_fr_test_cancel.py::test_cancel_on_paginated": "33d4d29b50e577aa96fdbdac167a6bd9f50351fa6cf3e1367291596051f74146", "T2T1_fr_test_debuglink.py::test_softlock_instability": "8788c9a37a7e20aa1fcecdb0c8b781b9146868a5d89223f90613a4a5d5fbb22f", "T2T1_fr_test_firmware_hash.py::test_firmware_hash_emu": "a1d024203379022355feb1ecbe72d16ded27a7060cba89469b82d14e84d8eabc", "T2T1_fr_test_firmware_hash.py::test_firmware_hash_hw": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94", @@ -15326,7 +15326,7 @@ "T2T1_fr_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "e5fa81d7e17a26c8906151ccfee94221ae7be518cb3d34565a64d5e3bd89d184", "T2T1_fr_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "c7c79c893280efdcfa43925b3e559eb5e00bc7615817ecc08920bb60f0096b6c", "T2T1_fr_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "fd8da1b96ce39c633caac4c7bc48165bd3b8f07bc06d311deeaf050666635bd7", -"T2T1_fr_test_msg_changepin_t2.py::test_change_failed": "124e530e51e0f35f68a11cea194515f4947947a8fd094353644186c531547042", +"T2T1_fr_test_msg_changepin_t2.py::test_change_failed": "89f34ff69cde4cbe1322313ce004575fa1c58d4fc2898421887ece256984dee9", "T2T1_fr_test_msg_changepin_t2.py::test_change_invalid_current": "018f43d9235fa8e37ed0c7dc6251d9eb1eba2e219f2b2f4fc28c55338913303b", "T2T1_fr_test_msg_changepin_t2.py::test_change_pin": "610f987ce40ceb7c7ab6d5c4dbaf22518b33219118baf2bd161343324d93c0a9", "T2T1_fr_test_msg_changepin_t2.py::test_remove_pin": "1bda09d5cd9f99f25778f3e104356a895f33b3b98990c508f89ee213afcf90a2", @@ -16732,9 +16732,9 @@ "T3T1_cs_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "3c6ac4165c200aff2e4100493b1f61f07666bee1980296efc4dff745dee45075", "T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "1e590c419465f8e57df6e0f9e85bda9d71751da84497a68958c046dcc6270ab1", "T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "eb334c59e145d62a9f68d251d0b8ab52dbda32d3768bf4fe79f0e73fd5e21abe", -"T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "15bd361e29b05f96f88dec6f987d38c798cb6093536fa0018553b4e65915c72b", +"T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "d4a17de10a15cb113a0fe80fcff712bf4155cef906529d1b45cfedeae21a1209", "T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "537c0de7f1b15b90c20daac7eb952ac75c25eda0522d1e084a27207bc9b51cfe", -"T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "7b8ae474e0b552e733aaf7212fff42ab04f1a40a90bd4a24d2e6ec0339c95781", +"T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "dbf54ffb031915f5daf4314715535eec3077c057504c894f6171b741059fbb03", "T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "da2e9ef780a1838e3c4605c4928ae780eadc6a3d712be1fed620eda22349aa5a", "T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "62090cd2fbb8fa4439cf115749a6093849ce984bda63a8fc4cfa6523ff90cd11", "T3T1_cs_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "f6f2893420b12f51159c6343d2e12aa561eb07cdd2af554e4e6b2a72253abc19", @@ -16744,16 +16744,16 @@ "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "3c2bcdaf8606bac2d56748fd6944ac4cdc38542fa8c1c84268910ff09b24a26e", "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_abort": "1e590c419465f8e57df6e0f9e85bda9d71751da84497a68958c046dcc6270ab1", "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "0af7a7a73de53629bf1ed8ed77f34a1c0010a15310c8a3081ee89fb6d6c2c4a0", -"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "a8e6d613fb0085004901775bb95071b472b719f1669e69341c1f4dca7c49631c", +"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "f07044323bdc4eb3e297fff70814493f63071f701fb95e949bdd9466b9eb2514", "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "d3687f2ad206424a8824c026cc23b8c2efcc207cf5666a83b10b447828aa0f32", "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "666a315e37b89fd2d614e579b9dbae14e32c39359ab1790450345f0d32c89f8d", -"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "14b116ab0973cee00da7f207cd041cab67012d2fa902ae457d44737976a6fc10", +"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "feb1871fa09e7a12a1586669b056276f3a259d190fa4bdc396f4ba26fa07d851", "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "20bd63e82f4a56754df3ee96dc5571a81295f41ab067b35be9a965baf9594e3e", "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "4ef4f4b9fac2056860fd5253317b41ec99b729e1be892b249690efc1d31f305d", "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "9f116fe69f56453062534cde498c32debfab02d82ff685cf497777aeb536d747", -"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "3d31b330afcec7290165371e4946b5cd239eb36674927535f065d724eaf4bcdb", -"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "236a020544ecd081cb8854d5e02ffb74b0961bb33f13c8eeab0b1fb323b7c0bb", -"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "0b587dfaedf22a648a277a6a4569a0aea575c2f81b92dc5d1c636c8e112d3ca2", +"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "39e016c5a3d17f3cad668e6d4c7ead2cbd7db3f322f3a8eab3ddd10d0030c0e6", +"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "45b27f60f4d25f70bf7113af1eec6fe214f5fe5a2bb9a8279da4111209d72ee1", +"T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "a78f85f7055be2063d01ec475356e0e7c3d9c4985fd302e42236eb03c88ca953", "T3T1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "6e30344a76f7988bc928b86abafdb032b78a48607ef16cffc66d58473a7c8a13", "T3T1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "1e7110cdc5c51a73279fccfff529d9c905203299f9de5d834aba262e5f0194a5", "T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "443583bdf27b893b6dd4b56bd5ed31f66a33e11d622a8ef2013c6e36f9b4f39a", @@ -16933,11 +16933,11 @@ "T3T1_cs_test_basic.py::test_ping": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d", "T3T1_cs_test_busy_state.py::test_busy_expiry": "5807370e36255f64722c9b70002daad3b718387eaa41102561ec6a0dcbeed20a", "T3T1_cs_test_busy_state.py::test_busy_state": "9a846017e3ac79ae304490124caaf70eef76b60d0372c48e3cb8cfc2b334b2b0", -"T3T1_cs_test_cancel.py::test_cancel_message_via_cancel[message0]": "b51e0d1d0e72a525724163cceef0426977dd3bb36bc0df5a0d96979cd0ebd011", -"T3T1_cs_test_cancel.py::test_cancel_message_via_cancel[message1]": "b51e0d1d0e72a525724163cceef0426977dd3bb36bc0df5a0d96979cd0ebd011", -"T3T1_cs_test_cancel.py::test_cancel_message_via_initialize[message0]": "b51e0d1d0e72a525724163cceef0426977dd3bb36bc0df5a0d96979cd0ebd011", -"T3T1_cs_test_cancel.py::test_cancel_message_via_initialize[message1]": "b51e0d1d0e72a525724163cceef0426977dd3bb36bc0df5a0d96979cd0ebd011", -"T3T1_cs_test_cancel.py::test_cancel_on_paginated": "59a00b375bf2e60cc0e624626aaf4b651cc24200be29e41e912fbc9358f7168e", +"T3T1_cs_test_cancel.py::test_cancel_message_via_cancel[message0]": "fea263b87f3b5ccbbc7ac43de02f28a3927cc13116505a76b71047427d3b80d3", +"T3T1_cs_test_cancel.py::test_cancel_message_via_cancel[message1]": "2e607dedaaff54ba045743b6cf77f83eb81608d7e5ab22c3aaadbc13bfba9cb1", +"T3T1_cs_test_cancel.py::test_cancel_message_via_initialize[message0]": "fea263b87f3b5ccbbc7ac43de02f28a3927cc13116505a76b71047427d3b80d3", +"T3T1_cs_test_cancel.py::test_cancel_message_via_initialize[message1]": "2e607dedaaff54ba045743b6cf77f83eb81608d7e5ab22c3aaadbc13bfba9cb1", +"T3T1_cs_test_cancel.py::test_cancel_on_paginated": "19cd5133ca91858fe667cdb4cd38de92ab01eba5a232eff23ba6591f59e7f26d", "T3T1_cs_test_debuglink.py::test_softlock_instability": "c6d1589a2a6f53a752806e4aa4e2b03f68685ca7213c5dd4af5c82eafa6d014a", "T3T1_cs_test_firmware_hash.py::test_firmware_hash_emu": "bf3b0b0bfc905aa8b9cb991baffb7c523f4f185f0a6531081c2e09fee5964108", "T3T1_cs_test_firmware_hash.py::test_firmware_hash_hw": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d", @@ -16989,7 +16989,7 @@ "T3T1_cs_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "8f7a0b93fd9602605aaaaca55b409468e09715f425611bfd98519eee9f059e38", "T3T1_cs_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "c1febab3a5f19fb7f5d52a7f8aa0b61ec00bcbbd21e8fd4df641ef7f7e737826", "T3T1_cs_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "0151cccb0237921183ac7036f9ba711f0beaae379191bb2bc64b9830f3f971e0", -"T3T1_cs_test_msg_changepin_t2.py::test_change_failed": "76ec57af41088bd292ff93475169dd125c1992da8a1bcb29625d13bd088f960c", +"T3T1_cs_test_msg_changepin_t2.py::test_change_failed": "b0e1f29128f59d355bee664cad0eb02fcae4bfef3cf06d5196fb316af89bd858", "T3T1_cs_test_msg_changepin_t2.py::test_change_invalid_current": "21248c1c66a4ff82086d023306e0ff4968841a9264f600190a32dfdc046bcafe", "T3T1_cs_test_msg_changepin_t2.py::test_change_pin": "49d87a7062641b69719b84a1e5c18dd444f231a1796bca763317daffb921c25d", "T3T1_cs_test_msg_changepin_t2.py::test_remove_pin": "98f5e95a8394a34a221a92b62d00fffd7d4c47c6252bca1c3f2d1f426e3a97c5", @@ -18139,9 +18139,9 @@ "T3T1_de_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "bedfc358a7a465f6eb9bc6366623b85eeeec83ccda92af2495041b25d4b78115", "T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "696ace0f4b428b30472057e2ad641519a3750781777f4820c970fe502cd9f77d", "T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "7f4161c22319a1a29f96da0f44e4e4686fbecab5c905894ddd940fd4874a0ce1", -"T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "e218f9ce906f50e3addbc8bdb01bfbbefdb42b0e023c57031a2b5902d8b5fb61", +"T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "5f90813b92b3aece66d008454c6f516fc278b500d54281a1c33b51be0eaa82cf", "T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "91f03f4ec9c34a0278ca8aade6287a10ca8460ef9c41240d89ef39b5fad29b17", -"T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "4befb3acfff8dca6c4a95de63a7ddab93065de9c4823ba1ff640aa8799088431", +"T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "0725e1dec4ed68391b8a6b2ee6a24b715c4e4eb54d3b43cb655858b092be096d", "T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "f9f199713e65ddd3c0de87c38c6200feeb437bb621e7b9cd2dffb426fe08a919", "T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "8ad558621d0da6618b8fef7b84622fbe5002d9ac293592eb4274d65f12a40828", "T3T1_de_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "f689f408d545a39929e410a9a80c2fefaed8d3016b4981ba6b11e512b4e1b52d", @@ -18151,16 +18151,16 @@ "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "2a2785d202cf020f0aa5e62840146377d16ebe336811cd2f7b0af64456536b2e", "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_abort": "696ace0f4b428b30472057e2ad641519a3750781777f4820c970fe502cd9f77d", "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "97d02aaf682c6c7de7032b4636dfe88b3811be15e19b00c282ad0e795b996afb", -"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "84adc6852f32637d784d3b6659a5478bfcaf46c384128f478b0b67d02a94fc23", +"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "abc8b384279bf2a7352d692b9854d1335212f3f31a98bc0da817d2340eec00ef", "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "7dca8aee178b0f410cf37e9fa09ffeeb93b01ffc238d286d564cbc98c9a2517e", "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "11a3ac4ed9f8b9ecf389f673e0007dec579099b5b1a297dedbc0c9a5bd766fca", -"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "009e13b39f0b8a858b3ee9f597d626b7e5773713a7431d5c97a6d525ca6744c5", +"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "2bc4583abf984773ab36dd000a75aa446430d7aaa6d596867946e841d38e7d2e", "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "d86ed6bc3c866c8259173961ef12a981138d865de4ce9b9ac70854b158ba9981", "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "c4775909de03bb73ada542a4ff4938eabbc479068f95a22a76547f3cae7cf615", "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "9482b15d527ee4c850c3edc14eadf42284e5db401f3ee42855624383761c425e", -"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "e1fbbf789f5daca5f4bf5f8c44c25b32cfa324c40e19746177808f075279bd61", -"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "ed90c16baf66e6665f1dda17265c72c3cbdd772bb7571bfc90a60a578a8d85f4", -"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "3b565b07969ae6804beb55ad8179b2d84b99831a82ffd238b0be53b40615c25e", +"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "053a693f265775f7c7228b8d05ccaab4ab3b962f5b38749add483d3870e1be28", +"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "aa471a5ab69cb05d4b1d37a9cde66455040ec98a40bb592ecf7723186629dd59", +"T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "d12de58352a65e7132fbcbdb588509d14952a05702d6873d0461935f4fe00b9c", "T3T1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "8f11d9988ab51214ab59e3ecdea10bf810259b69f3e5c6774d6af3a8266af3e8", "T3T1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "7edd741620c6d5c96e7229e11d215ff1114630b64b814c022467c6c0a72fe740", "T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "adda197012484eeba7d8a6379ced43ecbae120f985f2d4f347b4ad4afb05d6ef", @@ -18340,11 +18340,11 @@ "T3T1_de_test_basic.py::test_ping": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390", "T3T1_de_test_busy_state.py::test_busy_expiry": "d00c19e4be337da53afb665aa2c38784a51a91989ba65bb77aaadc8605994395", "T3T1_de_test_busy_state.py::test_busy_state": "f305a101d05f33d6f0fa3d4e002fcc37a569bb3e89690dc74ad058899085aedf", -"T3T1_de_test_cancel.py::test_cancel_message_via_cancel[message0]": "c07eceb7d7f8ecd914ceac903e30121d3a8d2a4a8e1b3597852188b9e393495e", -"T3T1_de_test_cancel.py::test_cancel_message_via_cancel[message1]": "c07eceb7d7f8ecd914ceac903e30121d3a8d2a4a8e1b3597852188b9e393495e", -"T3T1_de_test_cancel.py::test_cancel_message_via_initialize[message0]": "c07eceb7d7f8ecd914ceac903e30121d3a8d2a4a8e1b3597852188b9e393495e", -"T3T1_de_test_cancel.py::test_cancel_message_via_initialize[message1]": "c07eceb7d7f8ecd914ceac903e30121d3a8d2a4a8e1b3597852188b9e393495e", -"T3T1_de_test_cancel.py::test_cancel_on_paginated": "1aaaa6973bbea8cdf9378cd8b9abe61c3339039b5f5481735e0c5c4f3fa92e91", +"T3T1_de_test_cancel.py::test_cancel_message_via_cancel[message0]": "78c008c19b84f7784c6e26d9b1e3b04c2ef5aa6312318e53146abaa7b563cc08", +"T3T1_de_test_cancel.py::test_cancel_message_via_cancel[message1]": "0f74eaf21eeb33f4926152e82f47d0c9bc62e5e6002aecb6da2f3ebd126b1f31", +"T3T1_de_test_cancel.py::test_cancel_message_via_initialize[message0]": "78c008c19b84f7784c6e26d9b1e3b04c2ef5aa6312318e53146abaa7b563cc08", +"T3T1_de_test_cancel.py::test_cancel_message_via_initialize[message1]": "0f74eaf21eeb33f4926152e82f47d0c9bc62e5e6002aecb6da2f3ebd126b1f31", +"T3T1_de_test_cancel.py::test_cancel_on_paginated": "581f308ac81b24a6380967324898b9691c030661ffdd706d8159649bf0b2e557", "T3T1_de_test_debuglink.py::test_softlock_instability": "f533b6840f7f5b94c5baf11d12ae6b2e04a68efb292a67f8a7307f23366758d6", "T3T1_de_test_firmware_hash.py::test_firmware_hash_emu": "5f74c8e2421c3e3af6f8c3fed431fe795b8a8db7b83a95a5d48ef779df916363", "T3T1_de_test_firmware_hash.py::test_firmware_hash_hw": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390", @@ -18396,7 +18396,7 @@ "T3T1_de_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "f21c1007eaea59c50a6cb7c63c6f4b4db6c6f211b78b4c5bda8f336ba1bcfb67", "T3T1_de_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "a10ab0a73f43177fe38832332963d3966f52f0e42059df190aa6ca8e6453faff", "T3T1_de_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "e64a6ddd81183c32612970a8f9526e013a7d53136cf61732714991bda7be054a", -"T3T1_de_test_msg_changepin_t2.py::test_change_failed": "6bd169a4c415d9cc065dff40e3177e90a10a74e7dbc4e7d72a600aad736708c2", +"T3T1_de_test_msg_changepin_t2.py::test_change_failed": "9ccf32e673ca1a85b5cee9c589b24df6b7792144e0c0936840d5945510a329c6", "T3T1_de_test_msg_changepin_t2.py::test_change_invalid_current": "1ade4c776ac6f77b5226d92249521185465184f6329825353e34b03ecdf178a4", "T3T1_de_test_msg_changepin_t2.py::test_change_pin": "2639b62eb8538e260aef167bad24e84209958952517d093f2e3d5e602e166d46", "T3T1_de_test_msg_changepin_t2.py::test_remove_pin": "9e389b85510bdfce0b71dc8c0beda8ead9107360b430d241de1b76835d147618", @@ -19546,9 +19546,9 @@ "T3T1_en_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "6a57b810b4be43a92d396dfc3d605c211b6f1aa6787dc46d1187ab9ea1733798", "T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "4e265c664333863752796376367463d27e0bd27cec4b769c10d008f043f4952d", "T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "42eb8eedc199d864ea39e8dbd22ef1e9e2160e6a82967e73860210bedc7365b8", -"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "629658dc4feb14309037583c186a7e3bb97b3c39adb33cd66a731c85be6ea913", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "812f9e504c5dec3e077d86596c11966eb0e7278ce85e809a3a2871e9933e667f", "T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "cb0a3043c74558979bf602a5b2333af7e87aadb789e78ad7fcd85e2ea2f90ea9", -"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "fb62f4781906e3c9cb856c19203018554af912ca5fb75192d6d2551a6385246c", +"T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "fb7a9389d4873ae48773caaee6406ff570e5f15676767391384e422e8275034c", "T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "0807d127aaa86576c6bf3bd1de2b81931ee6e266e99f04b7c628752c69df7c72", "T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "b6ae624dacb8f665e4f03484486dc6b79fc8f5257ae49e91e62b656575486066", "T3T1_en_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "4e24347e5228591d498da9357d57d5a01b5445d0943c21c8512505b5652406db", @@ -19558,16 +19558,16 @@ "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "19838c4a131f4d62c7dd2443562f2b8f29f94f74253b2e4edeb96ef2e5d6501d", "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_abort": "4e265c664333863752796376367463d27e0bd27cec4b769c10d008f043f4952d", "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "3b546816ab0eabecfa5362ce145c0d98348dfc524a70005f38ea0fb586d7e008", -"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "b49ed8c62af3d83fb3826f84bdfda00621b9030856b385951cc5238c59d9a7d0", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "971db3604d75697f6112cb359804a9d372a080e6085c3321d5207ba420832c6b", "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "0aee3f3ac01e30b4a56e2053d8e2a6f434bd672c6a07f4434c57826e55e9d555", "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "1d2a0ec3ca058c2c52f9b093b42976ba377bb634fb3483766003ad561f34c89c", -"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "e31d8c1996f0bc22f64c6b45f79ce6c653fad3e28f210d7dff118adde1e28d6b", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "3eb4d5b1f25458ccf003fa726efcc5be3882e04c90d67ed4266fe257e5ac5cac", "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "1d93919e23c2053dafe725495349ef934afd54cae89555614c7d3d169edac8d6", "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "fb3a81295319b448ce4d8540767432317cb82100538cba3161d5b65b3b1e158e", "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "13d1bf36c203d6d3652becdc4b4f27207ed910db99f29c0b0ad3aac8c9d3aeee", -"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "1ccebb6bdbd12ec5e9efca2202f20ebfd9696306ce6646598c3f3440f339ebfa", -"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "5e13b86617820a9ff1b5a9ac5d21092743f6c89bb523e9f17e4f88ba1e91da08", -"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "21558d4237f3e390b757cd01bf68ec7b00734803e8ca7237410db4bd12985924", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "d7b20289cbdf4a283f956638088899542d4232b40cf840c209454b3e11d23320", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "9593b38f658c9e26deaf140e020ef7f52febee75958193a9b0bf25a4e896ff5c", +"T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "912ef70c6dee6d43d75302faaffaf6953066e79ded2d41ad0c9523d1ec2a1a1f", "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]": "64626ac12c65af4f17b3654ea2cb3fd487ccf62855792c5a7cf43709996024b7", @@ -19747,11 +19747,11 @@ "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_cancel.py::test_cancel_message_via_cancel[message0]": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_cancel.py::test_cancel_message_via_cancel[message1]": "3ed24b99952d25fcf0d9bd6d307c576862fe870ddb98288fa89b227f0e192073", +"T3T1_en_test_cancel.py::test_cancel_message_via_initialize[message0]": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739", +"T3T1_en_test_cancel.py::test_cancel_message_via_initialize[message1]": "3ed24b99952d25fcf0d9bd6d307c576862fe870ddb98288fa89b227f0e192073", +"T3T1_en_test_cancel.py::test_cancel_on_paginated": "5c198919403dab5ba394a87544aaa95bdafe82959fbabdbe918c81e2d226b051", "T3T1_en_test_debuglink.py::test_softlock_instability": "3609018ae27ce0ab9eb091384029089ad01bb097d80d9afceb7341548b935ecb", "T3T1_en_test_firmware_hash.py::test_firmware_hash_emu": "2a63f0bd10ba99e223f571482d4af635653bb8a3bddc1d8400777ee5519bc605", "T3T1_en_test_firmware_hash.py::test_firmware_hash_hw": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3", @@ -19803,7 +19803,7 @@ "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_failed": "342a87f544728c242efb04e8c0e1f97ba1c55cf52299018a1928056fc37fe5ad", "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", @@ -20953,9 +20953,9 @@ "T3T1_es_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "f63d0dd2f531b73b30882b719af8f1ab7a73a2cd1cc4e2d266a7b7c44835582b", "T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "0b5ee74ba3c3fb18fff92165224915df64758dcba5328c34ec45dfe83a17b2bf", "T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "09ebd80dcc9d7a83ae61aba89cd6d765a49d695354eaa8de10176bb38c25e8ea", -"T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "44ba7cbdbb2d00f1669f37391f06c6257d72ce3c5a609ecfab561f177fe617a9", +"T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "b391bdf02a4a45be41d985fc4697cabbd9bd34d3119f8f798417467ed462d63c", "T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "a5487ceec2a9ce0b770043324dcffa1e3939bed1f170582a81fd4f782341d85b", -"T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "4552050122b494d538e57bc62640480169ac23eb5bd51f9c536ede3208105f6e", +"T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "3b4d5727853dba24e52bcaf136b53c644b31541042cf4078233befb5474057e0", "T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "9cfd571774ffe61fa707d42d29b419992ff2c1a531b5cc8b217055c9bd1c9e24", "T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "c9261f4860afebaa6db020c511407422d11ed08af50082c5a3fd9cb53d610734", "T3T1_es_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "479c5e6b88126d8fb9238f93132688d8e8433b1c2bc6e46e79554cd4bcf3f58a", @@ -20965,16 +20965,16 @@ "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "2d341da46fa9a3400aecefe493183c4666f292503c1c06944f6cdad4bdb5018f", "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_abort": "0b5ee74ba3c3fb18fff92165224915df64758dcba5328c34ec45dfe83a17b2bf", "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "959e031abbfabd4ae6a0eb293da80b761568564d8dbb4dd2d765d03fe56c0967", -"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "551d3f62b3f454aa22b96e6fc0067a1c4d9dd1e8f773214d7f7452afa385620f", +"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "a9ae7d17cdcd24989af6bcca343dca556969abdcb6ae9c71f9f4f5fd6ce0a19c", "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "3a67bc3443050f96d0c4c8a75fd530a56e10ac3475b2e0091edbf23206902e63", "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "0f1c26001259b5ad5c7d76c829f98840ef44ffe2983d5421e921b4cfbd262984", -"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "882411d64d76e6278a6d2fff2d7aacad8cef900fc262bdf08377072a653106f2", +"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "94b4ea3565ba024c632f4ee9d4bf76a605090c69537844feaa3e677d79f2231b", "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "3b3aa844adabee59c61bfe02dd1da657d6158f6b72fe67453acf8078ed047af6", "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "92fe7a3e8d794033bc5f58551c31a1d2c5ba32ce67be30916160c49d2926043f", "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "12dc603108d008cfa24a397f94f0843fd749b47cc0eaa3efeb3e70a9cdcefbfc", -"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "985ac0579e31affe6132031a379da9f04c1800e955fffd568c5d95e9205eecff", -"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "c186283f2b9fd19bda632ade2c582b069b45612a074b0299a35e112e996f988a", -"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "089c3f2a77b2ccc054a7dd6b1ba6bb75a172a78c720c8909c9ab78652b310063", +"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "a8d339776a14a549cbb6db5f5dd83c8086c7ebae973e828d370cac42bdd5cab6", +"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "de4c354453bf85f76b439961e74e30df10302df5c7a4d6faa7fb250a0a71518d", +"T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "ea8998b0ab48d3886780747b949133542d4115ca9b391947e21c6e3e3462ff57", "T3T1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "7aa840499711432e69917f40c1d0681b5c2a0510098a5b155f110cb1608f4c41", "T3T1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "8ee942007e5ef72baab7fb67a4eaade25e48da2aa92ebfeda28fda4177572467", "T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "d5657e597cae4958fc657bd768d179af28f3469600be95af950697f06ab83c7d", @@ -21154,11 +21154,11 @@ "T3T1_es_test_basic.py::test_ping": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab", "T3T1_es_test_busy_state.py::test_busy_expiry": "da280d408675fbdbaddefe467ce32f0fbd64726f8935dc5d49b9d2fe969f7585", "T3T1_es_test_busy_state.py::test_busy_state": "cba9b124a66e083ae97eb0588259aaa7567a8fd03303d42645d9f51ce4a6a2d0", -"T3T1_es_test_cancel.py::test_cancel_message_via_cancel[message0]": "38fcd1064e016bef25510a8a5d6a9dbb4bed8ef7d9d482a59291f3769a1a621d", -"T3T1_es_test_cancel.py::test_cancel_message_via_cancel[message1]": "38fcd1064e016bef25510a8a5d6a9dbb4bed8ef7d9d482a59291f3769a1a621d", -"T3T1_es_test_cancel.py::test_cancel_message_via_initialize[message0]": "38fcd1064e016bef25510a8a5d6a9dbb4bed8ef7d9d482a59291f3769a1a621d", -"T3T1_es_test_cancel.py::test_cancel_message_via_initialize[message1]": "38fcd1064e016bef25510a8a5d6a9dbb4bed8ef7d9d482a59291f3769a1a621d", -"T3T1_es_test_cancel.py::test_cancel_on_paginated": "e7867645a35ee40b80f8a3eeaa122571367a3d3a1f850f89f5f7b14ce28522d7", +"T3T1_es_test_cancel.py::test_cancel_message_via_cancel[message0]": "1d98be5dd1e52fe5da379d1c72d6bc9065228b1d66939ee5bd2eda2fe857b679", +"T3T1_es_test_cancel.py::test_cancel_message_via_cancel[message1]": "61caffa741cf81f709e6df2818a5ace7411fef1765e14aec7dd99b13f7d1322f", +"T3T1_es_test_cancel.py::test_cancel_message_via_initialize[message0]": "1d98be5dd1e52fe5da379d1c72d6bc9065228b1d66939ee5bd2eda2fe857b679", +"T3T1_es_test_cancel.py::test_cancel_message_via_initialize[message1]": "61caffa741cf81f709e6df2818a5ace7411fef1765e14aec7dd99b13f7d1322f", +"T3T1_es_test_cancel.py::test_cancel_on_paginated": "d842630d249b84c0582c95187ad93a13bdd42c7320407a1ed552920b281f6f9a", "T3T1_es_test_debuglink.py::test_softlock_instability": "feba60e1880714c37e5d961dbdd5f5aeaf7b283d946be44d8309daad7fee1c98", "T3T1_es_test_firmware_hash.py::test_firmware_hash_emu": "6f9a2eb356b7054881d6b60116f6f54e4884835b3b3881c151ba6ab5f32f8560", "T3T1_es_test_firmware_hash.py::test_firmware_hash_hw": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab", @@ -21210,7 +21210,7 @@ "T3T1_es_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "c122f12ce28406bc09fba1e25368fe9e204a52d77d94843a885d9f2b4a97811e", "T3T1_es_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "9367f80f31160a72981279b6642f552419bc78e5bcbfaf0cd84b4c3d2cd1fdc8", "T3T1_es_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "73b403297a2160cc9a477626cf4170f4a8879ee35a8bfd4f5cb14037a6ee7ea9", -"T3T1_es_test_msg_changepin_t2.py::test_change_failed": "101d4a36a62dd78ae91293d802bc0ad405d65e52f50792452968fc6d7fd2039a", +"T3T1_es_test_msg_changepin_t2.py::test_change_failed": "78f4c7b8d604e4e35b316152c77a790eaa8ea04273782e493d5e4033402d5b0a", "T3T1_es_test_msg_changepin_t2.py::test_change_invalid_current": "65051eba72b59178e2235b6fa874fcfbeb880e74e69898cd6e33a05de7ff99d4", "T3T1_es_test_msg_changepin_t2.py::test_change_pin": "026a511c9a7eb63f41c16c69c628a07cc46040bf62fd34de5b1973b75e459e9c", "T3T1_es_test_msg_changepin_t2.py::test_remove_pin": "e8e63e04a31f8717f2969428315c072e4881dc7faa8870966926a2c6c07c15f4", @@ -22360,9 +22360,9 @@ "T3T1_fr_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "b2f1b602b48bf3bcbbb12369a66ee0e0879d7a26c399c542671e9b8871f3032c", "T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "85feeb0f3d4cf30430c35fd38ddfc77cfe5a14193f324ee834dc6fd1dcdee0ad", "T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "e44d77327cec2941c462cbad4db480757a6aa4b0a6f4e19f7a53ab119b172be7", -"T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "6960c07e518d614f09549d6ea79aab05fab24f09159bcf61f664c9fbcae33265", +"T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "14fed7b4c7883807c1b5a21afcaa2750fc91cf4659968715dbb0251ff026f3cc", "T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "ffbb0fc217ea369ddf8f48e7996acb244723b3d90f1a236995991126e9e4e248", -"T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "80ed26de1c7113c0d6d924fc364169a297404ce533c8a182f42d711b06a5b1ae", +"T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "c4570091395a64c40b46acea1bbaba73c2eeef503b061dc2053036b0adce7b46", "T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "615a79f6753c275585c170398c6bb00c534d593c5aed5d7b1b27b15490c82ac0", "T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "eb16a5b7da1ed8b24be1db79231008fa3d4b64d308b30854fe64cb6a28102b97", "T3T1_fr_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "164a4c03716896d3db6700cf919dcde4c715ee761070e0e2cfb014f7fd516864", @@ -22372,16 +22372,16 @@ "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "8497cb8859b51d23da7237480044c6e9c7b60e87a3cb3428d57d529733767ae4", "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_abort": "85feeb0f3d4cf30430c35fd38ddfc77cfe5a14193f324ee834dc6fd1dcdee0ad", "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_first_share": "9f4fcd77dad26b98f5d7b0c3e29e960f8a3daaf3fb05471c5d5178547a55f3f3", -"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "6ab08347663a1513cf81c006d7711cc3ef25a4b8b444adb2cd1566f5c0779f33", +"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_invalid_mnemonic_second_share": "22fc081333652c2121954d8b97568817d30ea26b3abce510321c50acc48f9ebd", "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "434257550a35df97886608c509a1f932fa53eb6afc33df03ce4c0bd7a2c29387", "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "60330f58f8bea3ec4a300574b7e3ef4989d18af978c23f846765824f649caf26", -"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "0a6cbd84a805de18273596f5daeed2e3b207f65841a679570ac99f497786b8a0", +"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "ad8acb8aa44ed8b27d876e403bddfc046253549c452471dab1ee2158a28d42e0", "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fb-ad8c45c0": "efc2f67b938680b0be58849b77752ca483893e7c42d099d7d547813dd33220ed", "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-644c905b0c4da21692f06fff3-30d0f8ca": "dd62e134242bec58ca7b52af08bcd57db546c111a965f92db1bad489b7ae7c93", "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares2-b770e0da1363247652de97a39-6af744e3": "2aa810576ef39cb32ff6837c29b8335e84eff606055bda54c98a6303abd5f86e", -"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "c1695da4dd9d771c78b41f264ea13604a951c177b293e69282ddd12ee7277031", -"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "8c0c32f4052d35675d16e68bc2482b3f7466928cbdf22557e6adfe68fad47f5b", -"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "3dd8afa6b064886ca518a853d2896c42a13b8f3dcb1888772cccd6eeeef45402", +"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "0d71010feb919e13db7b21f9e3eca29e9b5d3247d7e506977e1dff17d63b3356", +"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "c86df7925da65b59a895f5fbdee03c346cc8f17e259df889c78bda69bf33b164", +"T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "16154185227dd5e2dc40396740ec0b222624b81d1501a5684d0356232e495a68", "T3T1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "69855dee7d227ed8014c64961595f76f395e1d2ff1e7eaefea672ccc448415d4", "T3T1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "02b3a838e4b2a18991816b36778684755999f546fcce32646d8b78d0a8cbf36c", "T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "7ac21681f55e71eb1c04394f3250b4ff4b392abd8c94bb851341436eaafc4bc3", @@ -22561,11 +22561,11 @@ "T3T1_fr_test_basic.py::test_ping": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94", "T3T1_fr_test_busy_state.py::test_busy_expiry": "0b142663642a8981e8fb85cf0eda771d72c9d2206cd224d170b588f32da4d8cd", "T3T1_fr_test_busy_state.py::test_busy_state": "251609abd57665b7882e24583141737c9b6c1ca43ff75ab8bec2181e4fa3f044", -"T3T1_fr_test_cancel.py::test_cancel_message_via_cancel[message0]": "469c355dcabfba4a0f56eeb89834dfa595fcec58989f8c17e5db9a8a268a9b7f", -"T3T1_fr_test_cancel.py::test_cancel_message_via_cancel[message1]": "469c355dcabfba4a0f56eeb89834dfa595fcec58989f8c17e5db9a8a268a9b7f", -"T3T1_fr_test_cancel.py::test_cancel_message_via_initialize[message0]": "469c355dcabfba4a0f56eeb89834dfa595fcec58989f8c17e5db9a8a268a9b7f", -"T3T1_fr_test_cancel.py::test_cancel_message_via_initialize[message1]": "469c355dcabfba4a0f56eeb89834dfa595fcec58989f8c17e5db9a8a268a9b7f", -"T3T1_fr_test_cancel.py::test_cancel_on_paginated": "3547888bf963a9e458d362f218df5770e81b53ad850c462f98c00ea772ab42dd", +"T3T1_fr_test_cancel.py::test_cancel_message_via_cancel[message0]": "e2146f6ece95111d17b01b0f2e0bf720c845242c7b0791ce5c8af5e9ca63249e", +"T3T1_fr_test_cancel.py::test_cancel_message_via_cancel[message1]": "722d1df17cd5650880e8a634038c1f582229258661a26ee307a9a8d8737dc178", +"T3T1_fr_test_cancel.py::test_cancel_message_via_initialize[message0]": "e2146f6ece95111d17b01b0f2e0bf720c845242c7b0791ce5c8af5e9ca63249e", +"T3T1_fr_test_cancel.py::test_cancel_message_via_initialize[message1]": "722d1df17cd5650880e8a634038c1f582229258661a26ee307a9a8d8737dc178", +"T3T1_fr_test_cancel.py::test_cancel_on_paginated": "33d4d29b50e577aa96fdbdac167a6bd9f50351fa6cf3e1367291596051f74146", "T3T1_fr_test_debuglink.py::test_softlock_instability": "11479b768ca4b58acf621101c18d681126bbf66581184489922df2eea1357ba5", "T3T1_fr_test_firmware_hash.py::test_firmware_hash_emu": "a1d024203379022355feb1ecbe72d16ded27a7060cba89469b82d14e84d8eabc", "T3T1_fr_test_firmware_hash.py::test_firmware_hash_hw": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94", @@ -22617,7 +22617,7 @@ "T3T1_fr_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "143d20c7d11e9b3246e30c2d75de7c22e658ecbd4bfb7781a6fc98c3fe2b4e1d", "T3T1_fr_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "67d680e6ae25fd4e1d2107aea8e7e8a48ec2d25c435ce4edb8eaa2fb4150498a", "T3T1_fr_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "9d6002b5b1f5547d0be0e83651385d800f1b27d276c1838a846002198c974798", -"T3T1_fr_test_msg_changepin_t2.py::test_change_failed": "2f36b9bc6a3103f84647c887086ccf78b468950df0709e38b3f32955756b1549", +"T3T1_fr_test_msg_changepin_t2.py::test_change_failed": "5927032c252eac56fd04ac378d7688f837fde76be4c8b296dd134dd0d00ac7f7", "T3T1_fr_test_msg_changepin_t2.py::test_change_invalid_current": "a7a672e01a6b436411df8bd10ced9fc6d93912ce5e7e67d290a5508f6aeb5f04", "T3T1_fr_test_msg_changepin_t2.py::test_change_pin": "db874cb9046bc9e902fe76b69d74ab3711d7b36ca83f8b077d45f11149d8ec0a", "T3T1_fr_test_msg_changepin_t2.py::test_remove_pin": "d2e0316c1ce92ccec54631e6385c89e2d60e9e65cc1c4913e5809b3de0c1536b",