feat(core/rust/ui): progress indicators

[no changelog]
pull/2678/head
Martin Milata 2 years ago
parent 11ffee0b45
commit 95d8a21294

@ -47,10 +47,12 @@ static void _librust_qstrs(void) {
MP_QSTR_show_group_share_success;
MP_QSTR_show_remaining_shares;
MP_QSTR_show_share_words;
MP_QSTR_show_progress;
MP_QSTR_attach_timer_fn;
MP_QSTR_touch_event;
MP_QSTR_button_event;
MP_QSTR_progress_event;
MP_QSTR_timer;
MP_QSTR_paint;
MP_QSTR_request_complete_repaint;
@ -96,4 +98,5 @@ static void _librust_qstrs(void) {
MP_QSTR_app_name;
MP_QSTR_icon_name;
MP_QSTR_accounts;
MP_QSTR_indeterminate;
}

@ -330,7 +330,7 @@ where
}
#[derive(Copy, Clone, PartialEq, Eq)]
pub enum Event {
pub enum Event<'a> {
#[cfg(feature = "buttons")]
Button(ButtonEvent),
#[cfg(feature = "touch")]
@ -338,6 +338,8 @@ pub enum Event {
/// Previously requested timer was triggered. This invalidates the timer
/// token (another timer has to be requested).
Timer(TimerToken),
/// Advance progress bar. Progress screens only.
Progress(u16, &'a str),
/// Component has been attached to component tree. This event is sent once
/// before any other events.
Attach,

@ -6,6 +6,7 @@ use core::{
use crate::{
error::Error,
micropython::{
buffer::StrBuffer,
gc::Gc,
map::Map,
obj::{Obj, ObjBase},
@ -271,6 +272,7 @@ impl LayoutObj {
Qstr::MP_QSTR_attach_timer_fn => obj_fn_2!(ui_layout_attach_timer_fn).as_obj(),
Qstr::MP_QSTR_touch_event => obj_fn_var!(4, 4, ui_layout_touch_event).as_obj(),
Qstr::MP_QSTR_button_event => obj_fn_var!(3, 3, ui_layout_button_event).as_obj(),
Qstr::MP_QSTR_progress_event => obj_fn_var!(3, 3, ui_layout_progress_event).as_obj(),
Qstr::MP_QSTR_timer => obj_fn_2!(ui_layout_timer).as_obj(),
Qstr::MP_QSTR_paint => obj_fn_1!(ui_layout_paint).as_obj(),
Qstr::MP_QSTR_request_complete_repaint => obj_fn_1!(ui_layout_request_complete_repaint).as_obj(),
@ -335,8 +337,10 @@ impl TryFrom<Duration> for Obj {
}
}
impl From<Never> for Obj {
fn from(_: Never) -> Self {
impl TryFrom<Never> for Obj {
type Error = Error;
fn try_from(_: Never) -> Result<Self, Self::Error> {
unreachable!()
}
}
@ -394,6 +398,20 @@ extern "C" fn ui_layout_button_event(_n_args: usize, _args: *const Obj) -> Obj {
Obj::const_none()
}
extern "C" fn ui_layout_progress_event(n_args: usize, args: *const Obj) -> Obj {
let block = |args: &[Obj], _kwargs: &Map| {
if args.len() != 3 {
return Err(Error::TypeError);
}
let this: Gc<LayoutObj> = args[0].try_into()?;
let value: u16 = args[1].try_into()?;
let description: StrBuffer = args[2].try_into()?;
let msg = this.obj_event(Event::Progress(value, description.as_ref()))?;
Ok(msg)
};
unsafe { util::try_with_args_and_kwargs(n_args, args, &Map::EMPTY, block) }
}
extern "C" fn ui_layout_timer(this: Obj, token: Obj) -> Obj {
let block = || {
let this: Gc<LayoutObj> = this.try_into()?;

@ -8,6 +8,7 @@ mod keyboard;
mod loader;
mod number_input;
mod page;
mod progress;
mod scroll;
mod swipe;
@ -30,6 +31,7 @@ pub use keyboard::{
pub use loader::{Loader, LoaderMsg, LoaderStyle, LoaderStyleSheet};
pub use number_input::{NumberInputDialog, NumberInputDialogMsg};
pub use page::{SwipeHoldPage, SwipePage};
pub use progress::Progress;
pub use scroll::ScrollBar;
pub use swipe::{Swipe, SwipeDirection};

@ -0,0 +1,138 @@
use core::mem;
use crate::{
error::Error,
ui::{
component::{
base::ComponentExt,
paginated::Paginate,
text::paragraphs::{Paragraph, ParagraphStrType, Paragraphs},
Child, Component, Event, EventCtx, Label, Never, Pad,
},
display::{self, Font},
geometry::{Insets, Rect},
model_tt::constant,
util::animation_disabled,
},
};
use super::theme;
pub struct Progress<T> {
title: Child<Label<T>>,
value: u16,
loader_y_offset: i16,
indeterminate: bool,
description: Child<Paragraphs<Paragraph<T>>>,
description_pad: Pad,
update_description: fn(&str) -> Result<T, Error>,
}
impl<T> Progress<T>
where
T: ParagraphStrType,
{
const AREA: Rect = constant::screen().inset(theme::borders());
pub fn new(
title: T,
indeterminate: bool,
description: T,
update_description: fn(&str) -> Result<T, Error>,
) -> Self {
Self {
title: Label::centered(title, theme::label_progress()).into_child(),
value: 0,
loader_y_offset: 0,
indeterminate,
description: Paragraphs::new(
Paragraph::new(&theme::TEXT_NORMAL, description).centered(),
)
.into_child(),
description_pad: Pad::with_background(theme::BG),
update_description,
}
}
}
impl<T> Component for Progress<T>
where
T: ParagraphStrType,
{
type Msg = Never;
fn place(&mut self, _bounds: Rect) -> Rect {
let description_lines = 1 + self
.description
.inner()
.inner()
.content()
.as_ref()
.chars()
.filter(|c| *c == '\n')
.count() as i16;
let (title, rest) = Self::AREA.split_top(self.title.inner().max_size().y);
let (loader, description) =
rest.split_bottom(Font::NORMAL.line_height() * description_lines);
let loader = loader.inset(Insets::top(theme::CONTENT_BORDER));
self.title.place(title);
self.loader_y_offset = loader.center().y - constant::screen().center().y;
self.description.place(description);
self.description_pad.place(description);
Self::AREA
}
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
if let Event::Progress(new_value, new_description) = event {
if mem::replace(&mut self.value, new_value) != new_value {
if !animation_disabled() {
ctx.request_paint();
}
self.description.mutate(ctx, |ctx, para| {
if para.inner_mut().content().as_ref() != new_description {
let new_description = unwrap!((self.update_description)(new_description));
para.inner_mut().update(new_description);
para.change_page(0); // Recompute bounding box.
ctx.request_paint();
self.description_pad.clear();
}
});
}
}
None
}
fn paint(&mut self) {
self.title.paint();
if self.indeterminate {
display::loader_indeterminate(
self.value,
self.loader_y_offset,
theme::FG,
theme::BG,
None,
);
} else {
display::loader(self.value, self.loader_y_offset, theme::FG, theme::BG, None);
}
self.description_pad.paint();
self.description.paint();
}
fn bounds(&self, sink: &mut dyn FnMut(Rect)) {
sink(Self::AREA);
self.title.bounds(sink);
self.description.bounds(sink);
}
}
#[cfg(feature = "ui_debug")]
impl<T> crate::trace::Trace for Progress<T>
where
T: ParagraphStrType,
{
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
t.open("Progress");
t.close();
}
}

@ -26,7 +26,7 @@ use crate::{
},
TextStyle,
},
Border, Component, Timeout, TimeoutMsg,
Border, Component, Empty, Timeout, TimeoutMsg,
},
geometry,
layout::{
@ -43,7 +43,7 @@ use super::{
Dialog, DialogMsg, FidoConfirm, FidoMsg, Frame, HoldToConfirm, HoldToConfirmMsg,
IconDialog, MnemonicInput, MnemonicKeyboard, MnemonicKeyboardMsg, NotificationFrame,
NumberInputDialog, NumberInputDialogMsg, PassphraseKeyboard, PassphraseKeyboardMsg,
PinKeyboard, PinKeyboardMsg, SelectWordCount, SelectWordCountMsg, SelectWordMsg,
PinKeyboard, PinKeyboardMsg, Progress, SelectWordCount, SelectWordCountMsg, SelectWordMsg,
Slip39Input, SwipeHoldPage, SwipePage,
},
theme,
@ -284,6 +284,15 @@ where
}
}
impl<T> ComponentMsgObj for Progress<T>
where
T: ParagraphStrType,
{
fn msg_try_into_obj(&self, _msg: Self::Msg) -> Result<Obj, Error> {
unreachable!()
}
}
extern "C" fn new_confirm_action(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = move |_args: &[Obj], kwargs: &Map| {
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
@ -596,8 +605,27 @@ fn new_show_modal(
let allow_cancel: bool = kwargs.get_or(Qstr::MP_QSTR_allow_cancel, true)?;
let time_ms: u32 = kwargs.get_or(Qstr::MP_QSTR_time_ms, 0)?;
let obj = match (allow_cancel, time_ms) {
(true, 0) => LayoutObj::new(
let no_buttons = button.as_ref().is_empty();
let obj = if no_buttons && time_ms == 0 {
// No buttons and no timer, used when we only want to draw the dialog once and
// then throw away the layout object.
LayoutObj::new(IconDialog::new(icon, title, Empty).with_description(description))?.into()
} else if no_buttons && time_ms > 0 {
// Timeout, no buttons.
LayoutObj::new(
IconDialog::new(
icon,
title,
Timeout::new(time_ms).map(|msg| {
(matches!(msg, TimeoutMsg::TimedOut)).then(|| CancelConfirmMsg::Confirmed)
}),
)
.with_description(description),
)?
.into()
} else if allow_cancel {
// Two buttons.
LayoutObj::new(
IconDialog::new(
icon,
title,
@ -609,8 +637,10 @@ fn new_show_modal(
)
.with_description(description),
)?
.into(),
(false, 0) => LayoutObj::new(
.into()
} else {
// Single button.
LayoutObj::new(
IconDialog::new(
icon,
title,
@ -620,18 +650,7 @@ fn new_show_modal(
)
.with_description(description),
)?
.into(),
(_, time_ms) => LayoutObj::new(
IconDialog::new(
icon,
title,
Timeout::new(time_ms).map(|msg| {
(matches!(msg, TimeoutMsg::TimedOut)).then(|| CancelConfirmMsg::Confirmed)
}),
)
.with_description(description),
)?
.into(),
.into()
};
Ok(obj)
@ -1123,6 +1142,26 @@ extern "C" fn new_show_remaining_shares(n_args: usize, args: *const Obj, kwargs:
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
extern "C" fn new_show_progress(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = move |_args: &[Obj], kwargs: &Map| {
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
let indeterminate: bool = kwargs.get_or(Qstr::MP_QSTR_indeterminate, false)?;
let description: StrBuffer =
kwargs.get_or(Qstr::MP_QSTR_description, StrBuffer::empty())?;
// Description updates are received as &str and we need to provide a way to
// convert them to StrBuffer.
let obj = LayoutObj::new(Progress::new(
title,
indeterminate,
description,
StrBuffer::alloc,
))?;
Ok(obj.into())
};
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
#[no_mangle]
pub static mp_module_trezorui2: Module = obj_module! {
Qstr::MP_QSTR___name__ => Qstr::MP_QSTR_trezorui2.to_obj(),
@ -1249,7 +1288,7 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// allow_cancel: bool = False,
/// time_ms: int = 0,
/// ) -> object:
/// """Error modal."""
/// """Error modal. No buttons shown when `button` is empty string."""
Qstr::MP_QSTR_show_error => obj_fn_kw!(0, new_show_error).as_obj(),
/// def show_warning(
@ -1260,7 +1299,7 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// allow_cancel: bool = False,
/// time_ms: int = 0,
/// ) -> object:
/// """Warning modal."""
/// """Warning modal. No buttons shown when `button` is empty string."""
Qstr::MP_QSTR_show_warning => obj_fn_kw!(0, new_show_warning).as_obj(),
/// def show_success(
@ -1271,7 +1310,7 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// allow_cancel: bool = False,
/// time_ms: int = 0,
/// ) -> object:
/// """Success modal."""
/// """Success modal. No buttons shown when `button` is empty string."""
Qstr::MP_QSTR_show_success => obj_fn_kw!(0, new_show_success).as_obj(),
/// def show_info(
@ -1282,7 +1321,7 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// allow_cancel: bool = False,
/// time_ms: int = 0,
/// ) -> object:
/// """Info modal."""
/// """Info modal. No buttons shown when `button` is empty string."""
Qstr::MP_QSTR_show_info => obj_fn_kw!(0, new_show_info).as_obj(),
/// def show_simple(
@ -1426,6 +1465,17 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// ) -> int:
/// """Shows SLIP39 state after info button is pressed on `confirm_recovery`."""
Qstr::MP_QSTR_show_remaining_shares => obj_fn_kw!(0, new_show_remaining_shares).as_obj(),
/// def show_progress(
/// *,
/// title: str,
/// indeterminate: bool = False,
/// description: str | None = None,
/// ) -> object:
/// """Show progress loader. Please note that the number of lines reserved on screen for
/// description is determined at construction time. If you want multiline descriptions
/// make sure the initial desciption has at least that amount of lines."""
Qstr::MP_QSTR_show_progress => obj_fn_kw!(0, new_show_progress).as_obj(),
};
#[cfg(test)]

@ -118,6 +118,10 @@ pub const fn label_recovery_description() -> TextStyle {
TEXT_NORMAL_OFF_WHITE
}
pub const fn label_progress() -> TextStyle {
TEXT_BOLD
}
pub fn button_default() -> ButtonStyleSheet {
ButtonStyleSheet {
normal: &ButtonStyle {

@ -179,7 +179,7 @@ def show_error(
allow_cancel: bool = False,
time_ms: int = 0,
) -> object:
"""Error modal."""
"""Error modal. No buttons shown when `button` is empty string."""
# rust/src/ui/model_tt/layout.rs
@ -191,7 +191,7 @@ def show_warning(
allow_cancel: bool = False,
time_ms: int = 0,
) -> object:
"""Warning modal."""
"""Warning modal. No buttons shown when `button` is empty string."""
# rust/src/ui/model_tt/layout.rs
@ -203,7 +203,7 @@ def show_success(
allow_cancel: bool = False,
time_ms: int = 0,
) -> object:
"""Success modal."""
"""Success modal. No buttons shown when `button` is empty string."""
# rust/src/ui/model_tt/layout.rs
@ -215,7 +215,7 @@ def show_info(
allow_cancel: bool = False,
time_ms: int = 0,
) -> object:
"""Info modal."""
"""Info modal. No buttons shown when `button` is empty string."""
# rust/src/ui/model_tt/layout.rs
@ -374,3 +374,15 @@ def show_remaining_shares(
pages: Iterable[tuple[str, str]],
) -> int:
"""Shows SLIP39 state after info button is pressed on `confirm_recovery`."""
# rust/src/ui/model_tt/layout.rs
def show_progress(
*,
title: str,
indeterminate: bool = False,
description: str | None = None,
) -> object:
"""Show progress loader. Please note that the number of lines reserved on screen for
description is determined at construction time. If you want multiline descriptions
make sure the initial desciption has at least that amount of lines."""

@ -1,7 +1,5 @@
from typing import TYPE_CHECKING
from trezor import ui
if TYPE_CHECKING:
from trezor.messages import SignTx
from apps.common.coininfo import CoinInfo
@ -111,13 +109,13 @@ class Progress:
def report_init(self) -> None:
from trezor import workflow
from trezor.ui.layouts import bitcoin_progress
workflow.close_others()
ui.display.clear()
if self.signing:
ui.header("Signing transaction")
self.progress_layout = bitcoin_progress("Signing transaction")
else:
ui.header("Loading transaction")
self.progress_layout = bitcoin_progress("Loading transaction")
def report(self) -> None:
from trezor import utils
@ -125,7 +123,7 @@ class Progress:
if utils.DISABLE_ANIMATION:
return
p = int(1000 * self.progress / self.steps)
ui.display.loader(p, False, 18, ui.WHITE, ui.BG)
self.progress_layout.report(p)
if __debug__:

@ -5,6 +5,7 @@ from trezor import utils
if TYPE_CHECKING:
from trezor.enums import BackupType
from trezor.ui.layouts.common import ProgressLayout
def get() -> tuple[bytes | None, BackupType]:
@ -84,24 +85,34 @@ if not utils.BITCOIN_ONLY:
from trezor.crypto import cardano
return cardano.derive_icarus(
seed = cardano.derive_icarus(
mnemonic_secret.decode(), passphrase, trezor_derivation, render_func
)
_finish_progress()
return seed
_progress_obj: ProgressLayout | None = None
def _start_progress() -> None:
from trezor import workflow
from trezor.ui.layouts import draw_simple_text
from trezor.ui.layouts import progress
global _progress_obj
# Because we are drawing to the screen manually, without a layout, we
# should make sure that no other layout is running.
workflow.close_others()
draw_simple_text("Please wait")
_progress_obj = progress()
def _render_progress(progress: int, total: int) -> None:
from trezor import ui
global _progress_obj
if _progress_obj is not None:
_progress_obj.report(1000 * progress // total)
p = 1000 * progress // total
ui.display.loader(p, False, 18, ui.WHITE, ui.BG)
ui.refresh()
def _finish_progress() -> None:
global _progress_obj
_progress_obj = None

@ -78,3 +78,9 @@ async def _request_on_host(ctx: Context) -> str:
)
return passphrase
def _entry_dialog() -> None:
from trezor.ui.layouts import request_passphrase_on_host
request_passphrase_on_host()

@ -3,30 +3,32 @@ from typing import TYPE_CHECKING
if TYPE_CHECKING:
from trezor.messages import GetFirmwareHash, FirmwareHash
from trezor.wire import Context
from trezor.ui.layouts.common import ProgressLayout
_progress_obj: ProgressLayout | None = None
async def get_firmware_hash(ctx: Context, msg: GetFirmwareHash) -> FirmwareHash:
from trezor.messages import FirmwareHash
from trezor.utils import firmware_hash
from trezor.ui.layouts import draw_simple_text
from trezor.ui.layouts import progress
from trezor import wire, workflow
workflow.close_others()
draw_simple_text("Please wait")
global _progress_obj
_progress_obj = progress()
try:
hash = firmware_hash(msg.challenge, _render_progress)
except ValueError as e:
raise wire.DataError(str(e))
finally:
_progress_obj = None
return FirmwareHash(hash=hash)
def _render_progress(progress: int, total: int) -> None:
from trezor.utils import DISABLE_ANIMATION
from trezor import ui
if not DISABLE_ANIMATION:
p = 1000 * progress // total
ui.display.loader(p, False, 18, ui.WHITE, ui.BG)
ui.refresh()
global _progress_obj
if _progress_obj is not None:
_progress_obj.report(1000 * progress // total)

@ -1,30 +1,27 @@
from typing import Any
from typing import TYPE_CHECKING
from trezor import utils
if TYPE_CHECKING:
from typing import Any
from trezor.ui.layouts.common import ProgressLayout
_previous_progress: int | None = None
_previous_seconds: int | None = None
_previous_remaining: str | None = None
_progress_layout: ProgressLayout | None = None
keepalive_callback: Any = None
def show_pin_timeout(seconds: int, progress: int, message: str) -> bool:
from trezor import ui
from trezor.ui.layouts import pin_progress
global _previous_progress
global _previous_seconds
global _previous_remaining
global _progress_layout
if callable(keepalive_callback):
keepalive_callback()
if progress == 0:
if progress != _previous_progress:
# avoid overdraw in case of repeated progress calls
ui.display.clear()
_previous_seconds = None
ui.display.text_center(ui.WIDTH // 2, 37, message, ui.BOLD, ui.FG, ui.BG)
if not utils.DISABLE_ANIMATION:
ui.display.loader(progress, False, 0, ui.FG, ui.BG)
if progress == 0 or _progress_layout is None:
_previous_seconds = None
if seconds != _previous_seconds:
if seconds == 0:
@ -33,12 +30,16 @@ def show_pin_timeout(seconds: int, progress: int, message: str) -> bool:
remaining = "1 second left"
else:
remaining = f"{seconds} seconds left"
ui.display.bar(0, ui.HEIGHT - 42, ui.WIDTH, 25, ui.BG)
ui.display.text_center(
ui.WIDTH // 2, ui.HEIGHT - 22, remaining, ui.BOLD, ui.FG, ui.BG
)
_previous_remaining = remaining
_previous_seconds = seconds
else:
remaining = _previous_remaining
if progress == 0 or _progress_layout is None:
_progress_layout = pin_progress(message, description=remaining or "")
_progress_layout.report(progress, remaining)
# drop the layout when done so trezor.ui doesn't have to remain in memory
if seconds == 0:
_progress_layout = None
ui.refresh()
_previous_progress = progress
return False

@ -91,7 +91,10 @@ def backlight_fade(val: int, delay: int = 14000, step: int = 15) -> None:
display.backlight(val)
return
current = display.backlight()
if current > val:
if current < 0:
display.backlight(val)
return
elif current > val:
step = -step
for i in range(current, val, step):
display.backlight(i)

@ -5,12 +5,16 @@ from trezor.enums import ButtonRequestType
from trezor.messages import ButtonAck, ButtonRequest
if TYPE_CHECKING:
from typing import Any, Awaitable
from typing import Any, Awaitable, Protocol
LayoutType = Awaitable[Any]
PropertyType = tuple[str | None, str | bytes | None]
ExceptionType = BaseException | type[BaseException]
class ProgressLayout(Protocol):
def report(self, value: int, description: str | None = None) -> None:
...
async def button_request(
ctx: wire.GenericContext,

@ -12,7 +12,7 @@ if TYPE_CHECKING:
from typing import Any, Awaitable, Iterable, NoReturn, Sequence, TypeVar
from trezor.wire import GenericContext, Context
from ..common import PropertyType, ExceptionType
from ..common import PropertyType, ExceptionType, ProgressLayout
T = TypeVar("T")
@ -170,6 +170,19 @@ class _RustLayout(ui.Layout):
return self.layout.page_count()
def draw_simple(layout: Any) -> None:
# Simple drawing not supported for layouts that set timers.
def dummy_set_timer(token: int, deadline: int) -> None:
raise RuntimeError
layout.attach_timer_fn(dummy_set_timer)
ui.backlight_fade(ui.style.BACKLIGHT_DIM)
ui.display.clear()
layout.paint()
ui.refresh()
ui.backlight_fade(ui.style.BACKLIGHT_NORMAL)
async def raise_if_not_confirmed(a: Awaitable[T], exc: Any = ActionCancelled) -> T:
result = await a
if result is not CONFIRMED:
@ -956,7 +969,13 @@ async def confirm_coinjoin(
def show_coinjoin() -> None:
log.error(__name__, "show_coinjoin not implemented")
draw_simple(
trezorui2.show_info(
title="CoinJoin in progress.",
description="Do not disconnect your Trezor.",
button="",
)
)
# TODO cleanup @ redesign
@ -1025,6 +1044,15 @@ def draw_simple_text(title: str, description: str = "") -> None:
log.error(__name__, "draw_simple_text not implemented")
def request_passphrase_on_host() -> None:
draw_simple(
trezorui2.show_info(
title="Please type your passphrase on the connected host.",
button="",
)
)
async def request_passphrase_on_device(ctx: GenericContext, max_len: int) -> str:
await button_request(
ctx, "passphrase_device", code=ButtonRequestType.PassphraseEntry
@ -1076,3 +1104,43 @@ async def request_pin_on_device(
raise PinCancelled
assert isinstance(result, str)
return result
class RustProgress:
def __init__(
self,
title: str,
description: str | None = None,
indeterminate: bool = False,
):
self.layout: Any = trezorui2.show_progress(
title=title.upper(),
indeterminate=indeterminate,
description=description or "",
)
ui.backlight_fade(ui.style.BACKLIGHT_DIM)
ui.display.clear()
self.layout.attach_timer_fn(self.set_timer)
self.layout.paint()
ui.backlight_fade(ui.style.BACKLIGHT_NORMAL)
def set_timer(self, token: int, deadline: int) -> None:
raise RuntimeError # progress layouts should not set timers
def report(self, value: int, description: str | None = None):
msg = self.layout.progress_event(value, description or "")
assert msg is None
self.layout.paint()
ui.refresh()
def progress(message: str = "PLEASE WAIT") -> ProgressLayout:
return RustProgress(message.upper())
def bitcoin_progress(message: str) -> ProgressLayout:
return RustProgress(message.upper())
def pin_progress(message: str, description: str) -> ProgressLayout:
return RustProgress(message.upper(), description=description)

@ -628,34 +628,34 @@
"TT_bitcoin-test_authorize_coinjoin.py::test_get_address": "f8109795f7fa910f1c1c87a57e9ac4514da546285bdc378441a2778d2bfb3c02",
"TT_bitcoin-test_authorize_coinjoin.py::test_get_public_key": "6096153081f06b4c24654068b5035298902ad5b42f687b2871518c561c93aebc",
"TT_bitcoin-test_authorize_coinjoin.py::test_multisession_authorization": "f61fd1bb79b4a6062387bf49ef913fcd2d10d7f0fd0ddc359a0e94033761be07",
"TT_bitcoin-test_authorize_coinjoin.py::test_sign_tx": "5219897e58b2d6d718bb1f2a6992402244aa9f00355e983bf18099e541c2252b",
"TT_bitcoin-test_authorize_coinjoin.py::test_sign_tx_large": "e9e2ede5ed9c053112aa605fd0d4efb36d70c8ca879371135a7a6d800c9bc853",
"TT_bitcoin-test_authorize_coinjoin.py::test_sign_tx_spend": "39dad2750b06cae3ee822a054625e2b9cde3b5855f8a27b67cb97ea63a09e1a9",
"TT_bitcoin-test_authorize_coinjoin.py::test_sign_tx": "69bdf4b30712bb14d91dc60d91cf2194347998d6cc6b652129d51bd332d34a71",
"TT_bitcoin-test_authorize_coinjoin.py::test_sign_tx_large": "67b705e375c08695225511a47f9f1c1360d9ab1e0ba9442329e4b2c996e9e151",
"TT_bitcoin-test_authorize_coinjoin.py::test_sign_tx_spend": "732fc13e6b96d5694df01a34906725ad97a70ffc5086ab34d3e0c94d8ee0ba0d",
"TT_bitcoin-test_authorize_coinjoin.py::test_wrong_account_type": "1028683f41271a604331fc31a539817c327e7b1d9e218502c43a1a737697f5b8",
"TT_bitcoin-test_authorize_coinjoin.py::test_wrong_coordinator": "1028683f41271a604331fc31a539817c327e7b1d9e218502c43a1a737697f5b8",
"TT_bitcoin-test_bcash.py::test_attack_change_input": "fe14043f36d03f17ec9a908aab33c5acb3ceb2570fe9351e3fa522831e12395f",
"TT_bitcoin-test_bcash.py::test_send_bch_change": "fe14043f36d03f17ec9a908aab33c5acb3ceb2570fe9351e3fa522831e12395f",
"TT_bitcoin-test_bcash.py::test_send_bch_external_presigned": "f5fcbf514fb2b86f56eec40ac255caff43ea29e9b00d27fe9ea6fc3674bc60f1",
"TT_bitcoin-test_bcash.py::test_send_bch_multisig_change": "14ee2b674ba0d0977b8e5d6c1b5ba0c14d7a44966a4baf77fd0ba87045dc97d0",
"TT_bitcoin-test_bcash.py::test_send_bch_multisig_wrongchange": "66f363c651c7d8e0f48376f369f8d30f47c105ab5f79016282d64c43b74a629b",
"TT_bitcoin-test_bcash.py::test_send_bch_nochange": "a87a939901355c944f3b293cdef344e3ca82cdcc1d7c17239173be82046b4e24",
"TT_bitcoin-test_bcash.py::test_send_bch_oldaddr": "fb2d2fb55b4f264e70b0311db78e4011df0e74512b4674cc50972dc911f52bc1",
"TT_bitcoin-test_bgold.py::test_attack_change_input": "da2412379de5549664cb764a30150691062ac683cea4005e7b042dc0995664d2",
"TT_bitcoin-test_bgold.py::test_send_bitcoin_gold_change": "da2412379de5549664cb764a30150691062ac683cea4005e7b042dc0995664d2",
"TT_bitcoin-test_bgold.py::test_send_bitcoin_gold_nochange": "1d3cf9cb8249b25018bf370ed1c146f8d8821e9dbef7ff1108829cd7c58d6cac",
"TT_bitcoin-test_bgold.py::test_send_btg_external_presigned": "3e755c0a414d6a2c5c006dd994ae8ea3607641a681000ce0d629b4d064f366ed",
"TT_bitcoin-test_bgold.py::test_send_btg_multisig_change": "81725e92da7fac586fd070dae70f28ef5efd9e43130eede2a11f3ea79a3676cf",
"TT_bitcoin-test_bgold.py::test_send_mixed_inputs": "68d8d3b9f6a610c2800da8e5ecd5d05478f65dc7270aff07d152dcd50d22890c",
"TT_bitcoin-test_bgold.py::test_send_multisig_1": "8ef55efc4ce93fe30239e40c4d66a914faf1a1399ae04ae58d9a4809d7e1d2c8",
"TT_bitcoin-test_bgold.py::test_send_p2sh": "0e4eb079e8baf9423562c82bdbbadf68b7fa97f6581ea756eab7f530f03be9a5",
"TT_bitcoin-test_bgold.py::test_send_p2sh_witness_change": "e62398e6f5eca82e36fbb02f1e14a9b726fcee8a54863bda78f3abdaa27d6b89",
"TT_bitcoin-test_dash.py::test_send_dash": "9b6c1133bb55919e80760fec79dc0030d7443cfe5de1c3077faa6998ce3602d9",
"TT_bitcoin-test_dash.py::test_send_dash_dip2_input": "96139df9b94179ea5192fbba7814f8e6a3b8cdda1469c658cb98fd2b6e1c70ca",
"TT_bitcoin-test_decred.py::test_decred_multisig_change": "16a4d7dfb66495ff268cf91763ec2ae4c6a739980754bcde5a0eb0b7fbe0d7e0",
"TT_bitcoin-test_decred.py::test_purchase_ticket_decred": "36a136969249f5e07f992006b0a00f704a8f763ebab3891fb865eb46d48030ac",
"TT_bitcoin-test_decred.py::test_send_decred": "502a346ad2190af3c8ecd54aac9110cea7afcdadb1ca40c16d324bdb8b102f81",
"TT_bitcoin-test_decred.py::test_send_decred_change": "9174cc2a4383c5f3d6d45601a2de8fa83a5bd825c5049f4c6adfb08634370038",
"TT_bitcoin-test_decred.py::test_spend_from_stake_generation_and_revocation_decred": "83b4f27318e17dac80591dcd475568849a22c1ca618a8c32a5543d6efb63e7aa",
"TT_bitcoin-test_bcash.py::test_attack_change_input": "7980a2463ab728029c315ce294eae9493aa35827a456531ace6200473906c09e",
"TT_bitcoin-test_bcash.py::test_send_bch_change": "7980a2463ab728029c315ce294eae9493aa35827a456531ace6200473906c09e",
"TT_bitcoin-test_bcash.py::test_send_bch_external_presigned": "9209205f11fc9c1be29ebd08643292ac741d1feb8bb35235802c7dd1203f5b14",
"TT_bitcoin-test_bcash.py::test_send_bch_multisig_change": "20c9f75ea1b4a45905efd579f5100b38fc63a9f043ab19c5fd5e00cb46fc855f",
"TT_bitcoin-test_bcash.py::test_send_bch_multisig_wrongchange": "82c3ac6971ac86b6989bca3529b03457f8a3617c6b1dfc24f2fefac2e45a0f2e",
"TT_bitcoin-test_bcash.py::test_send_bch_nochange": "1dac1c9a0166a2968acaec3dd445e8722962b17a95f45ce79abc73027a60f3bc",
"TT_bitcoin-test_bcash.py::test_send_bch_oldaddr": "4b30716dd3df71fb00b99f8609f63284f326a417a19d928683f3bd793db89eb6",
"TT_bitcoin-test_bgold.py::test_attack_change_input": "95feb022feb0f43b9c643c2a57b148f7eb9245917892623c9331345843118b21",
"TT_bitcoin-test_bgold.py::test_send_bitcoin_gold_change": "95feb022feb0f43b9c643c2a57b148f7eb9245917892623c9331345843118b21",
"TT_bitcoin-test_bgold.py::test_send_bitcoin_gold_nochange": "e249a80269a904d3e9cac52567af2272f6b80e328aa1f4d83cdfc417a865c3ab",
"TT_bitcoin-test_bgold.py::test_send_btg_external_presigned": "81a17e2eaa947563c474b52db26bca930103899026fa0bcfbf954f14996d9b61",
"TT_bitcoin-test_bgold.py::test_send_btg_multisig_change": "4a608a00a476e11eec9dd1eb95cfd05ba60d64cc2ba03ce35ad48f1558bf3532",
"TT_bitcoin-test_bgold.py::test_send_mixed_inputs": "a915db2e708349c5ef0eed36af655abf33dd9476a191f4422f5b2aaf4b32846c",
"TT_bitcoin-test_bgold.py::test_send_multisig_1": "ef7550d39f3bbaf270e1f4e898eaee7e28e7e4b635585ee1b930a2066f759ef9",
"TT_bitcoin-test_bgold.py::test_send_p2sh": "bd6e55daf9f7c8e93943d4644aaab53d0f15ceb3ff507cc694a46cc9ecb7bf62",
"TT_bitcoin-test_bgold.py::test_send_p2sh_witness_change": "74b903cc1de861dace23a18c0a84cc6e11483ed0b87822704d9af81308c342c2",
"TT_bitcoin-test_dash.py::test_send_dash": "ec545f79425f4c3f91fb980925955d2b913dabb68399508e16a759886b901fac",
"TT_bitcoin-test_dash.py::test_send_dash_dip2_input": "b97b0255ed0c283d7f515b4beac212c65cf38f096113cf649ed16e5ba2c25fb5",
"TT_bitcoin-test_decred.py::test_decred_multisig_change": "cf29818d9f791e5e78a603f0fe92f380b8eea98e729c653ed1a8997034b9732b",
"TT_bitcoin-test_decred.py::test_purchase_ticket_decred": "d975d7554d155bf2c7f0f7cce98df7bc389901bb8fbb37ce7f50e94846d94c14",
"TT_bitcoin-test_decred.py::test_send_decred": "87e19a9ea2319bf4528c4dd0c6d20c2f3376271513a6f1bb2cc6dbfc7ef348aa",
"TT_bitcoin-test_decred.py::test_send_decred_change": "a67dcb8252f99a8cab654282260ab65330dc5a5d051110d44bd69ba9d5f2738f",
"TT_bitcoin-test_decred.py::test_spend_from_stake_generation_and_revocation_decred": "9e815554c9dd5b60519f0215b65b914b34a979631366d8bf056ef556e0c99149",
"TT_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDADDRESS-pkh([5-7a80e3db": "ad04cac909e9625ff43c87a71879620f024cd389e0454654d5f56a267369bca4",
"TT_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDP2SHWITNESS-sh-03d56ac2": "e2e1c5825a8931c4b9cf2ae592c7e4bedb194914ee2e4433a6d19c8f82e06acf",
"TT_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDTAPROOT-tr([5c-22751b2f": "061e1fd9cb4b861a3e51a593208c9587b073cc977e31dd2705dbee388bdcf9de",
@ -672,8 +672,8 @@
"TT_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-InputScriptType.SPENDP2SHWITNESS-sh-e8c5303c": "96b14ce63d45712604c22c5f668b33903486bc0d50a6bc09e45871a2c742b42d",
"TT_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-InputScriptType.SPENDTAPROOT-tr([5c-ddc924d3": "7200647c4e7cc4166f162c46f0a05f7c509b0ec34748320804f5d1880067c670",
"TT_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-InputScriptType.SPENDWITNESS-wpkh([-996ae319": "b39da1de17911b1c83ec0a3b313a9d3548b7322e2164a5bef9958dfc387755e2",
"TT_bitcoin-test_firo.py::test_spend_lelantus": "04cc7695f552c2518e4f107c26ae672b706edeffefc37e47b1b2fd422e4f1ba2",
"TT_bitcoin-test_fujicoin.py::test_send_p2tr": "9aa62165c4441aa85a041c875c4e4f95714fca5537e88e74901201c7d3a2d429",
"TT_bitcoin-test_firo.py::test_spend_lelantus": "4c3691304e0adeb5661d4b6aa5148e33cbc495f76a5b1c4ab8c8ae7d48460579",
"TT_bitcoin-test_fujicoin.py::test_send_p2tr": "099dc2fc987f9dd9f2c428545636eff4276c97a127051d7a552cdea6557fe213",
"TT_bitcoin-test_getaddress.py::test_address_mac": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_getaddress.py::test_altcoin_address_mac": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_getaddress.py::test_bch": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -782,27 +782,27 @@
"TT_bitcoin-test_getpublickey_curve.py::test_publickey_curve[nist256p1-path3-03b93f7e6c777143ad-2d6b178b": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_getpublickey_curve.py::test_publickey_curve[secp256k1-path0-02f65ce170451f66f4-9c982c22": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_getpublickey_curve.py::test_publickey_curve[secp256k1-path1-0212f4629f4f224db0-0209bb73": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_grs.py::test_legacy": "dcfabfd5151b17754b652ecec503c165679f2bda669e18de9a59cd58b879757b",
"TT_bitcoin-test_grs.py::test_legacy_change": "aa3e3454bff80c653aef5c199ea3c879af83a83471728f9bfa7777ebced140eb",
"TT_bitcoin-test_grs.py::test_send_p2tr": "31e0b74e3b0ea80b70d8220943a737ef079bfbdf3eca5facc5bd8fd3c13d7af3",
"TT_bitcoin-test_grs.py::test_send_segwit_native": "a2e1ed81bb2524d20910bed8ff7eaa702fca325c5d6cd717875bc1da67f389d7",
"TT_bitcoin-test_grs.py::test_send_segwit_native_change": "a93824baff74a2cc7c34bfdd43a03419e55c7778ec18ebbbcf3f129414a21e23",
"TT_bitcoin-test_grs.py::test_send_segwit_p2sh": "0b3d5e4920f98b0f8230667ac50adb04e79aa26d1ac588f5159c334007efe793",
"TT_bitcoin-test_grs.py::test_send_segwit_p2sh_change": "67cd99a325314f9ef9ecfb954ed9e4cf0c109de77a7146522ae0b8ee611befd4",
"TT_bitcoin-test_komodo.py::test_one_one_fee_sapling": "90c68d14e0e7c6d01f1eb67e05c3194a52f798608142bde0421887aaeb42e8a8",
"TT_bitcoin-test_komodo.py::test_one_one_rewards_claim": "805514e3fd668d2885b71eb81004042d3c2b568e46c13048e560bd7b0419bdee",
"TT_bitcoin-test_multisig.py::test_15_of_15": "447f9163061ab7668f574959a7e80cfc7605d669e4abf0c17ed2934873f3cf51",
"TT_bitcoin-test_multisig.py::test_2_of_3": "58d038355356d8db1e379ca34944a9e7290602f59256ced06ef8ed444e34f544",
"TT_bitcoin-test_multisig.py::test_attack_change_input": "e71435d29542d5311775e91e10060cc32e043538306de4b9ee97ba98b99ddaaa",
"TT_bitcoin-test_multisig.py::test_missing_pubkey": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_multisig_change.py::test_external_external": "98dc77db2812fedeba81b68687c788e7297305b1524ccd6ffffaf5ca5dfdf7f0",
"TT_bitcoin-test_multisig_change.py::test_external_internal": "bd3b318d58fab493472b70ea5a26dbef3609f99a1283a047a383ec63276bb4f5",
"TT_bitcoin-test_multisig_change.py::test_internal_external": "e65ac08242b22f6b25f05fdc63172cd7816c2ab3c06c2b774962532e5f235164",
"TT_bitcoin-test_multisig_change.py::test_multisig_change_match_first": "83e30a0c1317a9613166860cb61f136ec29070d42c12092be9ef6348a08f5532",
"TT_bitcoin-test_multisig_change.py::test_multisig_change_match_second": "e5e3a0e66738e0dc42b33951b783f774dc3a3fb2a17a4b612c375ca903fd1f42",
"TT_bitcoin-test_multisig_change.py::test_multisig_external_external": "6ab25ae4c80fde6dd9caa6e34d114ba6b05d4a1d8135b07c845fd8d187caf623",
"TT_bitcoin-test_multisig_change.py::test_multisig_mismatch_change": "c15aacbe4c3190c0570f3d11281ad768d8403983a54d09873eb492517aa17ec3",
"TT_bitcoin-test_multisig_change.py::test_multisig_mismatch_inputs": "ec0895548550a3ac96f27535fa530bf809a3b4949211386b554ab99e9def4b00",
"TT_bitcoin-test_grs.py::test_legacy": "b5b9f8a667574dff58979232d09ffb8b5415ac0ea8f409cc82e2d66a71c30214",
"TT_bitcoin-test_grs.py::test_legacy_change": "6e7bcb6b0630276f68797635ce15de9b7ad1f957161afadec3ffc0c119dfc340",
"TT_bitcoin-test_grs.py::test_send_p2tr": "ed72128980e6080540fafb26bfd7fa609197cc36f77787c29af373644ad07c66",
"TT_bitcoin-test_grs.py::test_send_segwit_native": "30eaf07ccd18048407ede917ac8bc8d38fe83fb71d2d2eaa6525f94d14443435",
"TT_bitcoin-test_grs.py::test_send_segwit_native_change": "1ec3b056eae982447761352b8ab1eb244e383f7a699ea5ebef44798f28dd11de",
"TT_bitcoin-test_grs.py::test_send_segwit_p2sh": "cf553e4581a0a1c390a2692bc7ed4c51d1172f224c59d9ecf9147698255f078d",
"TT_bitcoin-test_grs.py::test_send_segwit_p2sh_change": "5dddcc80eb7ae83b49bd3ae2d750d4189c10fb51ef7f6ca95370068bb20f57dd",
"TT_bitcoin-test_komodo.py::test_one_one_fee_sapling": "014f0f75f6a4df52b688969493a9ebce9b35f7738a172140c0aca3423f3614cf",
"TT_bitcoin-test_komodo.py::test_one_one_rewards_claim": "f7ba41c95cfcefde3c1fb3bb9eb78c7213e83f26a971ca8e07e953bfa8ee0936",
"TT_bitcoin-test_multisig.py::test_15_of_15": "2cd7b7cd2ea35c71f92aad63f73f0d329619959ce48011d4695541bd279a2ca0",
"TT_bitcoin-test_multisig.py::test_2_of_3": "28e166aab3f9430beb03160e0290377d8af354038270a88429a9c55bc901b38b",
"TT_bitcoin-test_multisig.py::test_attack_change_input": "084fd5b1b5552f09fa1f40e879f965865a7cc9e15096e6f01ace9d63022bde94",
"TT_bitcoin-test_multisig.py::test_missing_pubkey": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_multisig_change.py::test_external_external": "216e3afcea97ed796940561b9f72a54ccf48e1ccd92e1bf2db17769d18b11ae3",
"TT_bitcoin-test_multisig_change.py::test_external_internal": "ee81a8e82ca452122164be408aabaedaa9019a3ad6b7c81316f47964d2d6463b",
"TT_bitcoin-test_multisig_change.py::test_internal_external": "8e4902b244e4546df8232b4b35d9773b77c67c58528dc8bee82555c9a65fde58",
"TT_bitcoin-test_multisig_change.py::test_multisig_change_match_first": "284079188f8c2f9b999a917f134482c43ed7c9cf5e1b7e65b76c89d27f36fb23",
"TT_bitcoin-test_multisig_change.py::test_multisig_change_match_second": "f8457090055432ab79c6742aa5cd50c6f5829e6731b9e22c315326b320cf5402",
"TT_bitcoin-test_multisig_change.py::test_multisig_external_external": "876728881b9ef98ed49902a866a2831fd2cddce446a854af49b3f0cbadafdff7",
"TT_bitcoin-test_multisig_change.py::test_multisig_mismatch_change": "c60bb83069d074acb350c4673f022264396cfad964f75062ef68e75383fc1065",
"TT_bitcoin-test_multisig_change.py::test_multisig_mismatch_inputs": "d8d896ed42c166c15a6d9b4cbf21a9d587d80e0ccb9b01188d00d29c0a8c1b23",
"TT_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-6-255-script_types3]": "c1e2a55bc70cc9464c3a3790b747421a7e3cfe7d55dd1e9ab7cdcd66ab158b3a",
"TT_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-script_types2]": "12a9859706807d8720a1e94b16786f135ab7e3a7c138d62990170d2e0a160156",
"TT_bitcoin-test_nonstandard_paths.py::test_getaddress[m-3h-100h-4-255-script_types1]": "ca667675c8396d5a36307e1f4d680b26b0f2da550011bce409efb993dd292904",
@ -825,24 +825,24 @@
"TT_bitcoin-test_nonstandard_paths.py::test_signmessage[m-3h-100h-4-255-script_types1]": "de021393501e9d29934348006c179917c38a5d0dad6d4c2a1cb03956e7029787",
"TT_bitcoin-test_nonstandard_paths.py::test_signmessage[m-4-255-script_types0]": "bd78a5e34417a0221452294291e719338082d970039ae4b5b3248ba4d42d46e6",
"TT_bitcoin-test_nonstandard_paths.py::test_signmessage[m-49-0-63-0-255-script_types4]": "597c555edf3c5b28325340a58673530dbc05d9c17fa86ecacf6266dab963cb9f",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "540e71cb9d7abb5fad13ef9f4a04485177c17465f1b2bf0353ec2660f22f6d7c",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "4a4c06a6cba6584838693b699387885f40969ee5c42348d37efd39000e1d28be",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "6e85c507797512c587089823cd3709df82912dec76edb0a34ab491556e232668",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "6e85c507797512c587089823cd3709df82912dec76edb0a34ab491556e232668",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "0a2814f704d98ce8b1f61c10fbeaaed2a3cbc7e95904b899dd302e0b4394ca28",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths0-address_index0]": "600ce5be9cc20f0651200b38240056f461bd31933427546529c2333940547f0a",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths1-address_index1]": "600ce5be9cc20f0651200b38240056f461bd31933427546529c2333940547f0a",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths2-address_index2]": "73244d643dfb757c4deb2fe47e4cb6266c9b06b0f19c484a2e15e33efe28b91b",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths3-address_index3]": "03f239ccd7c433911846dd9ae37276b18e29ac8b5e16ad3c8c69355e381a95da",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths4-address_index4]": "600ce5be9cc20f0651200b38240056f461bd31933427546529c2333940547f0a",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths5-address_index5]": "600ce5be9cc20f0651200b38240056f461bd31933427546529c2333940547f0a",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths6-address_index6]": "600ce5be9cc20f0651200b38240056f461bd31933427546529c2333940547f0a",
"TT_bitcoin-test_op_return.py::test_nonzero_opreturn": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_op_return.py::test_opreturn": "181880970c28eace629b2053c83121dd719966cee230b7478d3f581f05f60d5e",
"TT_bitcoin-test_op_return.py::test_opreturn_address": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_peercoin.py::test_timestamp_included": "0fe4e672f457423cf764383b8698ae4ecd3945efb4210a96ddbf9b08c9ce5336",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "7cf365e113b76dceada661f350bf5e1d952bd72d261d2699aae0f8c25141b118",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "37b38e77a66917bfb3be306133b78d7c2b14ce02b1d146f65b896afdce4cba55",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "a1df1e45f0e5b92bc29882b06f8aee72b6492e446f4a248f7bf5513dc781eff3",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "a1df1e45f0e5b92bc29882b06f8aee72b6492e446f4a248f7bf5513dc781eff3",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "3f1c254ae1f2405c290711133ed0b8e0b7f27ed1221adb7730d2f9244b876bc3",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths0-address_index0]": "9632d4e4b601583d48868a3d39de5da6073ed4f0ab6a2114c62207a8d96014b5",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths1-address_index1]": "9632d4e4b601583d48868a3d39de5da6073ed4f0ab6a2114c62207a8d96014b5",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths2-address_index2]": "1a22db5993cca25750a9e2aad6095065a9de814b80cd5ac5cab432e760f63074",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths3-address_index3]": "6298a7b5c03418f357120d41fa2c205f18b590306cc22881bc9cb51258bf8a44",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths4-address_index4]": "9632d4e4b601583d48868a3d39de5da6073ed4f0ab6a2114c62207a8d96014b5",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths5-address_index5]": "9632d4e4b601583d48868a3d39de5da6073ed4f0ab6a2114c62207a8d96014b5",
"TT_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths6-address_index6]": "9632d4e4b601583d48868a3d39de5da6073ed4f0ab6a2114c62207a8d96014b5",
"TT_bitcoin-test_op_return.py::test_nonzero_opreturn": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_op_return.py::test_opreturn": "6cbed37de7b75fd13d2f03db834eaa202870377ef55543e58cf81812d079e008",
"TT_bitcoin-test_op_return.py::test_opreturn_address": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_peercoin.py::test_timestamp_included": "e6f891822c02ed8c5b1b7fb125c59e77dc78ace85af60c4c2356b7b3214e9ad5",
"TT_bitcoin-test_peercoin.py::test_timestamp_missing": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_peercoin.py::test_timestamp_missing_prevtx": "675b0ddd450d18cd5c12eea82d732dfb578dafc357807623a07090bae3a01ede",
"TT_bitcoin-test_peercoin.py::test_timestamp_missing_prevtx": "f0500537d3790dc30a17e2e1b29f47e19b0d47f5d03286fc9c81a3c985231061",
"TT_bitcoin-test_signmessage.py::test_signmessage[NFC message]": "9bdeda55973832ef9133428fbe32043fafd03e803bb885f86e74fb9547ad3860",
"TT_bitcoin-test_signmessage.py::test_signmessage[NFKD message]": "9bdeda55973832ef9133428fbe32043fafd03e803bb885f86e74fb9547ad3860",
"TT_bitcoin-test_signmessage.py::test_signmessage[bcash]": "7c3afa23553401b65cc71e8c2499c1701fe46a58011d9193cbcb68c5b6ddec58",
@ -873,144 +873,144 @@
"TT_bitcoin-test_signmessage.py::test_signmessage_pagination[utf_text]": "a9d278ebc3a4f32dc68b052d1c71577d96bdd2ea493048c9a410d3001526197d",
"TT_bitcoin-test_signmessage.py::test_signmessage_pagination_trailing_newline": "8a787ffa2a016d3ea236fb2bd7b1b79ecb0e0605181b166278278ecb72bd5a00",
"TT_bitcoin-test_signmessage.py::test_signmessage_path_warning": "2d9c06553c2def12610122e054417e67b705920a84af450d4b9d52d87c4c4b4a",
"TT_bitcoin-test_signtx.py::test_attack_change_input_address": "8891bc222ec8168bb18eff526f916d0330efc56de00cc42fefaee9694e1fef67",
"TT_bitcoin-test_signtx.py::test_attack_change_outputs": "27cfd2f10a25f5cc39ba9cb25e5b95ab362cb5045cbfa7362769665f96134630",
"TT_bitcoin-test_signtx.py::test_attack_modify_change_address": "9958b7477a8046a598a48e16f337d6021c4eabcdfe33dae36e24a64172dd3d17",
"TT_bitcoin-test_signtx.py::test_change_on_main_chain_allowed": "9958b7477a8046a598a48e16f337d6021c4eabcdfe33dae36e24a64172dd3d17",
"TT_bitcoin-test_signtx.py::test_fee_high_hardfail": "018b7c1620d0fd8c107261c32fe30f3f4b398cccf4761103cf4a6f2aafbcce77",
"TT_bitcoin-test_signtx.py::test_fee_high_warning": "2e235cb4711129ae0323d09c03b1cd10082b1de06a72fb92aad67fe690c647ca",
"TT_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.EXTERNAL]": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.SPENDADDRESS]": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOADDRESS]": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOSCRIPTHASH]": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx.py::test_lock_time[1-4294967295]": "3a2a9ef0fc414f27ea24288537ca93cbb62d4d14502dfe9feb321bc4583085dc",
"TT_bitcoin-test_signtx.py::test_lock_time[499999999-4294967294]": "c8315a3717cb0afe902986b5c027c38de91ccb10f44d9fc8ce77970fb0237415",
"TT_bitcoin-test_signtx.py::test_lock_time[500000000-4294967294]": "d61193705006f78217466de410d935564c69acc255c44fb4d39ae7921028434b",
"TT_bitcoin-test_signtx.py::test_lock_time_blockheight": "c8315a3717cb0afe902986b5c027c38de91ccb10f44d9fc8ce77970fb0237415",
"TT_bitcoin-test_signtx.py::test_lock_time_datetime[1985-11-05 00:53:20]": "d61193705006f78217466de410d935564c69acc255c44fb4d39ae7921028434b",
"TT_bitcoin-test_signtx.py::test_lock_time_datetime[2048-08-16 22:14:00]": "1d2c594279a349dd6eba61219f728b67fa833edb6a0034b12c85b77ad2765198",
"TT_bitcoin-test_signtx.py::test_lots_of_change": "487fc08a43cd2115b5897d02cd441970094bfd7cbc6c17b6b890bc87cd92462e",
"TT_bitcoin-test_signtx.py::test_lots_of_inputs": "217172c0c149c2eb7c2840befa9b4a8bc6b7ea1730465ece719173231eecf627",
"TT_bitcoin-test_signtx.py::test_lots_of_outputs": "2ada8e0cf595f0c7ef0f27f05132e2a28f7366fb4f2da1a9fd8ca9e26ef2f492",
"TT_bitcoin-test_signtx.py::test_not_enough_funds": "3f1280d8006fb79a038c6cfa7a62968bcf873ce97f95ef41d814a6b1ad444a75",
"TT_bitcoin-test_signtx.py::test_not_enough_vouts": "20b6d2b9d511a2ca564c8c2130218e9680c84ce53b37d5358a7974c956ec42ca",
"TT_bitcoin-test_signtx.py::test_one_one_fee": "89015561eb7b8a664f54b797bb1123d1bb051a9b4800f7a28f594d26fe381993",
"TT_bitcoin-test_signtx.py::test_one_three_fee": "8d4ec74337d28e59c43fa334f522fb842929fe397b0b63c073a81fa05c80dc8e",
"TT_bitcoin-test_signtx.py::test_one_two_fee": "b5f0ac8c0029826e0f387dc00fb004631ac47826e3870660c7438dce4927e7ff",
"TT_bitcoin-test_signtx.py::test_p2sh": "22a32ba67001865a911f694986cdddd44cd6de88a2d443fbd75104485b34e407",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[branch_id-13]": "32dcbaab61c6e9931352455d8df01bf34021f0910e35f9c6198ae56548829fed",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[expiry-9]": "32dcbaab61c6e9931352455d8df01bf34021f0910e35f9c6198ae56548829fed",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[extra_data-hello world]": "32dcbaab61c6e9931352455d8df01bf34021f0910e35f9c6198ae56548829fed",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[timestamp-42]": "32dcbaab61c6e9931352455d8df01bf34021f0910e35f9c6198ae56548829fed",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[version_group_id-69]": "32dcbaab61c6e9931352455d8df01bf34021f0910e35f9c6198ae56548829fed",
"TT_bitcoin-test_signtx.py::test_attack_change_input_address": "80801b169549aca809b50afbf0befee27aa4bb886987ec27307f73d5eee62aa8",
"TT_bitcoin-test_signtx.py::test_attack_change_outputs": "93257afd10e2ef69125b8554c0a614776eab49f152f9ac58f79880c78cd6cfee",
"TT_bitcoin-test_signtx.py::test_attack_modify_change_address": "404a5ad37fb5c6707ccf5df6001da27c40a6f8de3a80b6d246581695210a50e6",
"TT_bitcoin-test_signtx.py::test_change_on_main_chain_allowed": "404a5ad37fb5c6707ccf5df6001da27c40a6f8de3a80b6d246581695210a50e6",
"TT_bitcoin-test_signtx.py::test_fee_high_hardfail": "7b44f6d50c881a61e4e502f4d33985045b844728c0208a2b405ea5e614a7e541",
"TT_bitcoin-test_signtx.py::test_fee_high_warning": "f0a89b3f01df4f4f335cfbcb0e68323404795402f20f4c4ebfc47e694f2fd924",
"TT_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.EXTERNAL]": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.SPENDADDRESS]": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOADDRESS]": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOSCRIPTHASH]": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx.py::test_lock_time[1-4294967295]": "54ed9595910b91adc8d803eb2feee2dff069981c57387cee9d0374f3a11d1a97",
"TT_bitcoin-test_signtx.py::test_lock_time[499999999-4294967294]": "0d5c5795d158929c75d96a5ed31d422fcd28cc918cdcadc9b55b67090cc537c6",
"TT_bitcoin-test_signtx.py::test_lock_time[500000000-4294967294]": "bb2a73bc25bf3a68567c39369b8c86837abf4a7ee8f39e68e0b24f3955394925",
"TT_bitcoin-test_signtx.py::test_lock_time_blockheight": "0d5c5795d158929c75d96a5ed31d422fcd28cc918cdcadc9b55b67090cc537c6",
"TT_bitcoin-test_signtx.py::test_lock_time_datetime[1985-11-05 00:53:20]": "bb2a73bc25bf3a68567c39369b8c86837abf4a7ee8f39e68e0b24f3955394925",
"TT_bitcoin-test_signtx.py::test_lock_time_datetime[2048-08-16 22:14:00]": "e1076dba8c18d412951eaf3e1a2427eb5e245b1777481b370b8d32ab753e9e3d",
"TT_bitcoin-test_signtx.py::test_lots_of_change": "34eea516eaa3627db9a7dd3b455036871d2f6e05c5ebeb2c824a367c2e94c920",
"TT_bitcoin-test_signtx.py::test_lots_of_inputs": "5febcace7b557ec98f4daa5fcef321b6f42081e94449b86e3fb07407ffce2a21",
"TT_bitcoin-test_signtx.py::test_lots_of_outputs": "79c1191e24e39a7e1d9737e2ab5ae72dd88ac3e86e60542f65415e6a768c1f1f",
"TT_bitcoin-test_signtx.py::test_not_enough_funds": "35b4880b24546a94ad4426dbd3efb1a252053f5ac846d5f98bb01532a5d5e75f",
"TT_bitcoin-test_signtx.py::test_not_enough_vouts": "abec897bebd2d12549a827c3bb8866493c5518cd522ff1f895d1a7d93da6396d",
"TT_bitcoin-test_signtx.py::test_one_one_fee": "f92cc77c80caef6f912c31f9c9964355c0e01e71f8edc37a718ee2ecd41eb67b",
"TT_bitcoin-test_signtx.py::test_one_three_fee": "6a4cf784919ea698c35090514518c6c5c8591d140d71404090f51a1facab3963",
"TT_bitcoin-test_signtx.py::test_one_two_fee": "1305403d2a90a688dae15d625e7bf07556bc1932165053eee2d8bc1db029ffec",
"TT_bitcoin-test_signtx.py::test_p2sh": "848ee393439ac3029726ff2090845432da933bdbbbe6987d5cbdc54fb2bfe79b",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[branch_id-13]": "3cb052304829ff476f5ac18631b61937bfea325945097e6de074ddc03fc60a4f",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[expiry-9]": "3cb052304829ff476f5ac18631b61937bfea325945097e6de074ddc03fc60a4f",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[extra_data-hello world]": "3cb052304829ff476f5ac18631b61937bfea325945097e6de074ddc03fc60a4f",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[timestamp-42]": "3cb052304829ff476f5ac18631b61937bfea325945097e6de074ddc03fc60a4f",
"TT_bitcoin-test_signtx.py::test_prevtx_forbidden_fields[version_group_id-69]": "3cb052304829ff476f5ac18631b61937bfea325945097e6de074ddc03fc60a4f",
"TT_bitcoin-test_signtx.py::test_signtx_forbidden_fields[branch_id-13]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_signtx.py::test_signtx_forbidden_fields[expiry-9]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_signtx.py::test_signtx_forbidden_fields[timestamp-42]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_signtx.py::test_signtx_forbidden_fields[version_group_id-69]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_signtx.py::test_spend_coinbase": "f7e4e4689191d64d2376de4b56ae7a57eb7dcf0e64a1109f9e99fff6b689e699",
"TT_bitcoin-test_signtx.py::test_testnet_big_amount": "2d8dedeb18c81449f32ec26119c2ea244c709fc98d72e4326999bf6d5ebe8e96",
"TT_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "ad364eb03db689c15b7b10c21621e02e230896f2edf838f03817c189d9f73722",
"TT_bitcoin-test_signtx.py::test_testnet_one_two_fee": "9958b7477a8046a598a48e16f337d6021c4eabcdfe33dae36e24a64172dd3d17",
"TT_bitcoin-test_signtx.py::test_two_changes": "f3bc69e2932beed020fbaaf1d590896562cb483dc1daa252e35a97d9f918d5ac",
"TT_bitcoin-test_signtx.py::test_two_two": "40c26d19037eb771c0c65b6b96bfc31a64e19552f93cedb206b97ab52fd7944b",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.BITCOIN]": "89015561eb7b8a664f54b797bb1123d1bb051a9b4800f7a28f594d26fe381993",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.MICROBITCOIN]": "b0d822204abba0efe921c4b9b1a7305aec25210e8589b2872eb21fe6803c4b56",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.MILLIBITCOIN]": "605b4ae175a66aa78b7acb575f68ad0aa02ae45dd494dbb7a009e5ed71d3d793",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.SATOSHI]": "3b6bdced408c2ba3687b4c151d462bce5c9e2e47b617ea4510b6d09e4461ec0a",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[None]": "89015561eb7b8a664f54b797bb1123d1bb051a9b4800f7a28f594d26fe381993",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.BITCOIN]": "ad989109fcc4deee9fe4b519935008362e0afd86eb835cf272232e88bc4a297a",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.MICROBITCOIN]": "96ffd1ad676d73c719625c178f528208c6fe5b4ab817105d238c1cbb89a770ea",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.MILLIBITCOIN]": "e03f9b98762afb25a7c5d2ea7ea0563e4f7c6740b0a76a9e70dbb2e4f4101857",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.SATOSHI]": "084c10c18bef8a470dfedce059d8ff0c566eb33f10855eb486a396ee0b2528bb",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[None]": "ad989109fcc4deee9fe4b519935008362e0afd86eb835cf272232e88bc4a297a",
"TT_bitcoin-test_signtx_external.py::test_p2pkh_presigned": "1b1dd690450093088e56c724ec7e4ee1dc18b99959d63e127d6ab047e87961a3",
"TT_bitcoin-test_signtx.py::test_spend_coinbase": "4095d3eaa147b2b747029afe1202ea663662f49a40f7b45cacec8c6a2d15c58a",
"TT_bitcoin-test_signtx.py::test_testnet_big_amount": "1452fba00e755f9cea2d944d98cf10f4d7221edb8fa1fc3e8ddc35d6e0b0af9f",
"TT_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "c3cc8d24e6e8cb4369c748e676a4e9ae347db40898cceeae3edb28b995565dd1",
"TT_bitcoin-test_signtx.py::test_testnet_one_two_fee": "404a5ad37fb5c6707ccf5df6001da27c40a6f8de3a80b6d246581695210a50e6",
"TT_bitcoin-test_signtx.py::test_two_changes": "1105e5514ecb91f3959b5b6756565e0d10bd2de79385ea1432596bb8405eb25f",
"TT_bitcoin-test_signtx.py::test_two_two": "4eb0e37a95d70372acc30ab1a5942c87a09a99eab2023e436ae2328a2fc2a8d1",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.BITCOIN]": "f92cc77c80caef6f912c31f9c9964355c0e01e71f8edc37a718ee2ecd41eb67b",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.MICROBITCOIN]": "602820fac9f739915f5869da9dbf068faec0020ab7938c832053093f522104dd",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.MILLIBITCOIN]": "fa9d38ea032fbfb31576401d8aa31836fa72c80e8b7c7518cdbf2c9087ab575d",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[AmountUnit.SATOSHI]": "351be8202fae247ab858a73b99325ece08c71e4d218c25341ecf87058ae5ee42",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_btc[None]": "f92cc77c80caef6f912c31f9c9964355c0e01e71f8edc37a718ee2ecd41eb67b",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.BITCOIN]": "4f613685e6395dfa48251433bf1e06aa8a9136795b61b251124af8370e9f463f",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.MICROBITCOIN]": "7e4a5b526630d3be7696811731c8bc89c3033655c5eb34adfce02a0956bd2e25",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.MILLIBITCOIN]": "87fb743201e9eaa32afe19881924f39b605e0ac6b22cbcbb1ab5f64d85c1d991",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[AmountUnit.SATOSHI]": "ce19c2b2b5f916fd6ed3f3afda4fc19495759ccc87565139109e2fd68ddf5777",
"TT_bitcoin-test_signtx_amount_unit.py::test_signtx_testnet[None]": "4f613685e6395dfa48251433bf1e06aa8a9136795b61b251124af8370e9f463f",
"TT_bitcoin-test_signtx_external.py::test_p2pkh_presigned": "f3948129851e422c81324a6b561f65521569a8d5472c7f0a8b71f89a3f95b637",
"TT_bitcoin-test_signtx_external.py::test_p2pkh_with_proof": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_signtx_external.py::test_p2tr_external_presigned": "8bdfb73b3a158da161e598c64aa0fe4570a38a0a95259070c44e04ed388b24f3",
"TT_bitcoin-test_signtx_external.py::test_p2tr_external_unverified": "dfd3dfd53c539d2f55c150ba5926fca5c6efed6cf0765978827b44b0243d83c9",
"TT_bitcoin-test_signtx_external.py::test_p2tr_with_proof": "564455b0dea8ab4c2584152631a6516704288a2a0ce65397bd2b77b35eca6769",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_external_unverified": "2f8f07ac717f15ce8ab0378da163d648b9b5cc6a2a533ef19fe01131182019a9",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_in_p2sh_presigned": "42bc202309d8a44adbd20f18fcb0db12af3860cf169950594e6a1d27bfe6f3c9",
"TT_bitcoin-test_signtx_external.py::test_p2tr_external_presigned": "efa21c3aff20a8df5ab7b10e9c72f8ff0420cb182474ed1ce718c7453300b649",
"TT_bitcoin-test_signtx_external.py::test_p2tr_external_unverified": "f58f0d698280d68cbcb43c58da7b12716b93870ba6541a9a85c28d7c2d7ea128",
"TT_bitcoin-test_signtx_external.py::test_p2tr_with_proof": "7591f182c6d7c328f7102c259217a5efa86f7620d6508364c452936a8a2a1085",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_external_unverified": "282d7fc64a231849a88f9e3263e0314c89b6fa0cac56fd9d8b39286cdc633a44",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_in_p2sh_presigned": "e5503316994d84d315e38ab6f0e59539e1f718fa798d99ed059d985f8acea5cd",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_in_p2sh_with_proof": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_presigned": "424848564ebb824119d4724c27c03ab364b891767236c27013f36f830475a3e4",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_with_false_proof": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_with_proof": "8c244b23c5e7d68a834ae436f5922e311b2843afadfb613ba3dd42eda0fd2cf4",
"TT_bitcoin-test_signtx_external.py::test_p2wsh_external_presigned": "b0280f597ce0a9bded2e2fde3cd500711fbab407a1255208a9235aea834cc0f0",
"TT_bitcoin-test_signtx_invalid_path.py::test_attack_path_segwit": "c35708f1972896f69130b4624eaf93fcce1708acd667035923f858ca836bcdd8",
"TT_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail_asap": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_invalid_path.py::test_invalid_path_pass_forkid": "b7a29bf58715748016a31054d157b3bf2a47fb75afdab1d150f3854806f55bb0",
"TT_bitcoin-test_signtx_invalid_path.py::test_invalid_path_prompt": "06c05052796f728964a61d91ea8cea2bda25feb56b2579967ace3eae7c7e4c3c",
"TT_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_inputs": "53b2405d7846d2d4a546279b329cdb4b5297f9af7dc000a9b080a5ebf96ce149",
"TT_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_non_segwit_inputs": "263bb1ffccdc3240f54c03eb4c9525dbbe36da9d89b83c6c929821f72174e15e",
"TT_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_inputs": "53b2405d7846d2d4a546279b329cdb4b5297f9af7dc000a9b080a5ebf96ce149",
"TT_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_segwit_inputs": "e333085a6472e9fb4ee63a9a56001c71737592aaec8dc1eb36008dd84a09f92a",
"TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_amount": "829da8d3cce348f519ad11b570fd5be69efc8c42f635ce4ddb68c5ddb316764b",
"TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_purchase": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_refund": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_output": "4059a0e71b8899b55ecc85bafe67b67145c20816325150dcfed86e51b427aad8",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out0+out1]": "b9489a55ba2b246854ad5de3c12b67d7d5bf80c0b7057f5bf6d2fb5c5b8bb1fc",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out012]": "086a534eaa4bc5eb2fdfc3bf1e2de5383629709115ff6237911b0aacb7181b7f",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out01]": "a1986700a3714ee322ba29bf2d769eed0e2f9d83542419d5674cd5c535ab33fb",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out0]": "6560a267a319a5349ce4fdd2a3a2249c8070a5249fea8087db321e17e18c4575",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out12]": "a8cf09b64a282db9397e6fa3886c056c28a5ebb91f0af969b9e4b0f918ed8b05",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out1]": "9f908c511ca07c0c45be8720182f3c51a44bb1fc0419f49725c184993cb97c8a",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out2]": "829faf40697323c2044845ce9ca65c35bf22f53bc0bc0936e977d591aebdee78",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request_details": "03038915d06fee1b5e05ad230bd60052ddf56119e289465d78e1125f97735ffd",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[]": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[hello world]": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[x]": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "0d9d8ded224606fdca37dcdd9d8a0926ea8520d4b96646cfaf6f091ca6397937",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "0d9d8ded224606fdca37dcdd9d8a0926ea8520d4b96646cfaf6f091ca6397937",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "0d9d8ded224606fdca37dcdd9d8a0926ea8520d4b96646cfaf6f091ca6397937",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "0d9d8ded224606fdca37dcdd9d8a0926ea8520d4b96646cfaf6f091ca6397937",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "0606849a7d0253e7157f2231c455740c1d8706b886bde4461c97fdf213df8e31",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "0606849a7d0253e7157f2231c455740c1d8706b886bde4461c97fdf213df8e31",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "0606849a7d0253e7157f2231c455740c1d8706b886bde4461c97fdf213df8e31",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "0606849a7d0253e7157f2231c455740c1d8706b886bde4461c97fdf213df8e31",
"TT_bitcoin-test_signtx_replacement.py::test_attack_fake_ext_input_amount": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_replacement.py::test_attack_fake_int_input_amount": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_replacement.py::test_attack_false_internal": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_replacement.py::test_attack_steal_change": "02a8c170fcded8f26d76960b5444bf8a6cb1b536306194ba76cb2845ad9070f5",
"TT_bitcoin-test_signtx_replacement.py::test_p2pkh_fee_bump": "4a196a97801c461d6eb9e526da8acba4470a3ddbd8273d380e3be71d290d5102",
"TT_bitcoin-test_signtx_replacement.py::test_p2tr_fee_bump": "1285e4060a9baedf87635633491d0a7cfc67786c58389d2403535e7488414965",
"TT_bitcoin-test_signtx_replacement.py::test_p2tr_invalid_signature": "1285e4060a9baedf87635633491d0a7cfc67786c58389d2403535e7488414965",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_finalize": "b832053d66f034d61e5776e039b891f31ca60d902d3afa3021dc2f219821c462",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_fee_bump_from_external": "04c4191d7f9b1cfcf7107f9e77027203af9e22fae00945db1bddb5e9b4762ee3",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_remove_change": "a6868b01860acd29b819fbf37e1ef89b8769d41c2b960e6f25207ed1eb90b163",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_invalid_signature": "b832053d66f034d61e5776e039b891f31ca60d902d3afa3021dc2f219821c462",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_op_return_fee_bump": "d714f49e220ed7d050eb2dbdbecf3469289aac325a47e5b346101efceebd2fbe",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909659-90000-02483045022100aa1b91-c9b963ae": "10a274b994850a53ac2d05cf140e3e7425149a92e42e6401f4dbf408b8a67c25",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909718-90000-024730440220753f5304-ecb983d1": "10a274b994850a53ac2d05cf140e3e7425149a92e42e6401f4dbf408b8a67c25",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909800-89859-0248304502210097a42b-7a89e474": "10a274b994850a53ac2d05cf140e3e7425149a92e42e6401f4dbf408b8a67c25",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89800-02483045022100af3a87-80428fad": "d6bca6d6e6f2a8c91018805c3c6892270196ae5872ba6f183c86d892b6ade8df",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89859-02483045022100eb74ab-881c7bef": "10a274b994850a53ac2d05cf140e3e7425149a92e42e6401f4dbf408b8a67c25",
"TT_bitcoin-test_signtx_replacement.py::test_tx_meld": "7b67a7549659d4358da4e4b78b0bac663ff2ee420ac3d761c291256715379585",
"TT_bitcoin-test_signtx_segwit.py::test_attack_change_input_address": "14e671eb5ad2430ea6bc17864ac4785f44b0e6d1bf3287cba98a62a2cd5ded49",
"TT_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "c0c49cc954d80e181e194a915b30375efaa56e3fd84f86e42d7fbdb49325cbcd",
"TT_bitcoin-test_signtx_segwit.py::test_send_multisig_1": "5f3b585538238efda343de5b29dd50b608ec8c96d2cc606cfdaeb7a3f4e43b0f",
"TT_bitcoin-test_signtx_segwit.py::test_send_p2sh": "153c813849363284dba75b17c9284b0bf4677b28ac0476800fdf2b60bab7533f",
"TT_bitcoin-test_signtx_segwit.py::test_send_p2sh_change": "229f3a9b3b29523d428fa248f1b3ca3c37f8b6304751f5b223e7fdb3cad3695e",
"TT_bitcoin-test_signtx_segwit.py::test_testnet_segwit_big_amount": "24f3efe72cbbe28b48ac7a7aedd09ffe3f5dfce8f32735869779df2320948dde",
"TT_bitcoin-test_signtx_segwit_native.py::test_multisig_mismatch_inputs_single": "6360a0ba468fafa9890d10ed2d3f174a15f6697422cfb2e5e1bc2a586383c97b",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_both": "0b74f4e0aa1a59b2a5150111c09c5c36c79dc033e2d27bbeeee621539bfd7913",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_1": "bf536b22b6273d8990196a8cf91d5c2dfce99fbc3c827e60a811c987683dae15",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_2": "5c7e8ab6b12e723c6346f10e44d397d3e40914617b5b37d397ffa1a9e5cdfba2",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_3_change": "890f0a2e36bd9e72409a4bd21834b7240f2abf432aa9d5f454f4cffbbf526cde",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_4_change": "64129eb963fcc73c93d3035ea4746938af656bfbce1d1474f6f84c4812faf396",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_native": "ad989109fcc4deee9fe4b519935008362e0afd86eb835cf272232e88bc4a297a",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_native_change": "88593dfb096fb650747f725968a2c75b2d69baf2c6248d6c7b4ae8b44dacf9c5",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_p2sh": "8d46bf1d571f11c9f4dbb740092bf2dcd4e2748cce7fc7e52c4d2e33aaa91a72",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_p2sh_change": "96b6a031cdca4c3649d94fea6d56b3e3d452ac0d53104b1789c791c2ba2c82c3",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_to_taproot": "5b34dc642aee52e6155ac035eec8b6eac607d7db453edea6b12aade488b77314",
"TT_bitcoin-test_signtx_taproot.py::test_attack_script_type": "f420d9a642a18e310c4bf6b5983ee6ccca243d06eebacb825225fcf72563153e",
"TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1pam775nxmvam4pfpqlm5q06k0y84e3-a257be51": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plllllllllllllllllllllllllllll-aaa668e3": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plycg5qvjtrp3qjf5f7zl382j9x6nr-5447628e": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1zlycg5qvjtrp3qjf5f7zl382j9x6nr-880d4a6b": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_bitcoin-test_signtx_taproot.py::test_send_mixed": "8ab4199a9f1bd20e626e03912a9a777427e2fa5867b10b8ba591233d7359f35c",
"TT_bitcoin-test_signtx_taproot.py::test_send_p2tr": "b71156d528de48899529b577360cdd68aac3442d7bea5de6d0adaf738b390330",
"TT_bitcoin-test_signtx_taproot.py::test_send_two_with_change": "444eef035ca96dbda9fd9133c07084bcdec5e163a40c40ed7a458dea418f04c8",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_presigned": "0eef0ba4609714f1f0652cd7c255f916b590d05ea4e2bc1d7e3956aad2eb3805",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_with_false_proof": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_external.py::test_p2wpkh_with_proof": "60995350f280967265cc7ab5e64359b4a8711abe8d0b0d65d85425d8d936f266",
"TT_bitcoin-test_signtx_external.py::test_p2wsh_external_presigned": "036c6d579e13479977f9b962a3288e95c4d84f6ec04ae9c9cfb20948745ee305",
"TT_bitcoin-test_signtx_invalid_path.py::test_attack_path_segwit": "72ae88d5d84dd01f61a894bee7eb326a88cd7b3476222b7a1949ac2d22059f11",
"TT_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail_asap": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_invalid_path.py::test_invalid_path_pass_forkid": "fad46308049ae114b11bd4b1c6087826a1694b426b1e43738a244d284d046acf",
"TT_bitcoin-test_signtx_invalid_path.py::test_invalid_path_prompt": "a335802d73981392e43798f6eee1b3ded171b2e76218155cb6576598b46ee410",
"TT_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_inputs": "b49d8233e83cc2ff467d7c14552512656077e2124c01b84d5529d607b1c8590c",
"TT_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_non_segwit_inputs": "0dd5468870d51b9deaa8ad8465b80346fc4ccdb547b18f15f5ba264863f81a14",
"TT_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_inputs": "b49d8233e83cc2ff467d7c14552512656077e2124c01b84d5529d607b1c8590c",
"TT_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_segwit_inputs": "b4d5b98c0e30346f2762e2838421fb61aa90e66b627850b6e29337b6c70078f8",
"TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_amount": "52891ec8e5a13b9040ee77eaa58b12df0ae3ffd39ef8479dcc4ff6f8ba745177",
"TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_purchase": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_mac_refund": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_payreq.py::test_payment_req_wrong_output": "1b03f15d7f8aab8b1bb44c36e0cbdcded1c3dcf8d8c351ca74ecae6ca612fa3b",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out0+out1]": "894b781403f06eb29ec841acbc3ceaacd124a0e59affed4f966355c074c42e20",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out012]": "3e44ed37116ff261556b562f408b79155d753ec139079f9ba95dfb2204b00ca9",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out01]": "2becf9f33bfee50406cceaad9ac495258371808c9b92643448422e94a1e67999",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out0]": "222378380213f7e508280b9c22487fc5df89266ffd47e2f5046f410fbcc3eb19",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out12]": "dc487f19b06e90ab38a98636acc80b9a7e9fdc0a9a3df1f81b8b5a79ddc3b6a4",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out1]": "7b99a9cf625738ec8a641f4b32d87d99b6dd3283375a17c9de958f32533ca1cf",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request[out2]": "2d77b81c3c6ad74d052927a5118ffbe5bf3d7df093ceeb01b376d2ca59641593",
"TT_bitcoin-test_signtx_payreq.py::test_payment_request_details": "f73ea80b4bf010108982d75f66aab4c629f4bdf1065081c994aaf8b38f227e22",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[]": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[hello world]": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[x]": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "75ac4f60f9562e8560f991b42351394bad1e1ebadd84ff43a15c49789c02268a",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "75ac4f60f9562e8560f991b42351394bad1e1ebadd84ff43a15c49789c02268a",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "75ac4f60f9562e8560f991b42351394bad1e1ebadd84ff43a15c49789c02268a",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "75ac4f60f9562e8560f991b42351394bad1e1ebadd84ff43a15c49789c02268a",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "f99a1fb14a22ef93dea3e1a363cea84136b17e0f23407aa476e283ccd589857e",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "f99a1fb14a22ef93dea3e1a363cea84136b17e0f23407aa476e283ccd589857e",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "f99a1fb14a22ef93dea3e1a363cea84136b17e0f23407aa476e283ccd589857e",
"TT_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "f99a1fb14a22ef93dea3e1a363cea84136b17e0f23407aa476e283ccd589857e",
"TT_bitcoin-test_signtx_replacement.py::test_attack_fake_ext_input_amount": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_replacement.py::test_attack_fake_int_input_amount": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_replacement.py::test_attack_false_internal": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_replacement.py::test_attack_steal_change": "07b72cc4e350d281af7b4e1a31c0e78912352a65a524e5b07d93c9f309a6d1ee",
"TT_bitcoin-test_signtx_replacement.py::test_p2pkh_fee_bump": "3596a0bc5976bff8389754c1e3b4db8087a1bac2f909e87c1d6b8b99232781bf",
"TT_bitcoin-test_signtx_replacement.py::test_p2tr_fee_bump": "891ee99732b67b1c6526e3b1b94c319964d275d2c14819c403f2253aef737554",
"TT_bitcoin-test_signtx_replacement.py::test_p2tr_invalid_signature": "891ee99732b67b1c6526e3b1b94c319964d275d2c14819c403f2253aef737554",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_finalize": "dae2491da9803fb0c4b2164365a6e46398ef6d5680234c79d8dd6e2fca47ee97",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_fee_bump_from_external": "3f688148644ce6a0b1be08d79608e7f3d828188e5bd153dc26d688407ee99d02",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_remove_change": "75cc79d2b0f544de9f3142af18be70fc38ebbeb2b53c72974dc8af37c729494a",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_invalid_signature": "dae2491da9803fb0c4b2164365a6e46398ef6d5680234c79d8dd6e2fca47ee97",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_op_return_fee_bump": "57a784a11901f02af600a73d13a3c418548ce468ce2d04e2f69ac2d730a50121",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909659-90000-02483045022100aa1b91-c9b963ae": "101e3901839d5a3ab2dad47e8ebab223e6915f740a46d0158f2d77607c175f35",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909718-90000-024730440220753f5304-ecb983d1": "101e3901839d5a3ab2dad47e8ebab223e6915f740a46d0158f2d77607c175f35",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909800-89859-0248304502210097a42b-7a89e474": "101e3901839d5a3ab2dad47e8ebab223e6915f740a46d0158f2d77607c175f35",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89800-02483045022100af3a87-80428fad": "1c1630d353e5ae0bc445fa78df1d26d025bd1a4e885daaf2a69ea70d1ff7d6e0",
"TT_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89859-02483045022100eb74ab-881c7bef": "101e3901839d5a3ab2dad47e8ebab223e6915f740a46d0158f2d77607c175f35",
"TT_bitcoin-test_signtx_replacement.py::test_tx_meld": "05d413ad098a04a174a2c2c037081d272afcfe6913e195d99b0571f1694941bb",
"TT_bitcoin-test_signtx_segwit.py::test_attack_change_input_address": "5008d4b989303801f453e1c71d27e68c415faf7cf9f29a1b24afad9e4c20879b",
"TT_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "ffb93033bedd1de8a0902dae28aae0d355866b405c340836d98e1a3637e2c301",
"TT_bitcoin-test_signtx_segwit.py::test_send_multisig_1": "fe9b70f92b43c79fd6380afdcd8f480bb4f3a3effd0085adff69570da361f715",
"TT_bitcoin-test_signtx_segwit.py::test_send_p2sh": "209b8ed3be0d348bce8982ecaff99dc329cd140eade6d9680151a41ffab0a4b0",
"TT_bitcoin-test_signtx_segwit.py::test_send_p2sh_change": "dfa52cc2fb954d8af352875ec38632ef9a2bc5977a987a4007d2ad0984f42a5a",
"TT_bitcoin-test_signtx_segwit.py::test_testnet_segwit_big_amount": "92d732c58b0e02954659271d3e415f47d2bc1ea779155bec08bd42a5c66e0bd6",
"TT_bitcoin-test_signtx_segwit_native.py::test_multisig_mismatch_inputs_single": "a4344c9e54ae09c04a91d12cdcd92987e51a038a24e5f629b1548f4b7cc6215a",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_both": "6451fe87e8bea37756665c4cf2602dffbc09f04f308d10207a89b457fee415fb",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_1": "ecf98a768b2e870ee5a301967a826cfde3694b97067ae6895e452f5a02643347",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_2": "cb9eca350da2b5401d8991037e3c8410304819e027c54bf4593d2379cbfc21a5",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_3_change": "18113744a828ac629966c66873e56f5407eca0954c57c9d67d00a3bf09bc20ad",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_multisig_4_change": "1718d6392a183a70ff72eab6580fae0106730eda0a54bcbcfd81ec52d7b4dc9b",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_native": "4f613685e6395dfa48251433bf1e06aa8a9136795b61b251124af8370e9f463f",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_native_change": "b2434c41db394a9e5eaee76f9a069c3c180b73afecf26099991481666a65a00c",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_p2sh": "b90903c32875744339c975cdebf7dba7ac7bcb520344eeca432cc4f4112378ec",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_p2sh_change": "7d6d602fc71d3c719f6ec9179de2e34427aed28e19306763e3fa503e9660c69b",
"TT_bitcoin-test_signtx_segwit_native.py::test_send_to_taproot": "507cc6d913964cba9d456ca9d882b78e4205ce034104c835dbbe8880ce5b1c1b",
"TT_bitcoin-test_signtx_taproot.py::test_attack_script_type": "df25002ef2425c28e7dfd8e73a6ef63fe5fef5224cbb10fd81620d4a1dd1cfeb",
"TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1pam775nxmvam4pfpqlm5q06k0y84e3-a257be51": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plllllllllllllllllllllllllllll-aaa668e3": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1plycg5qvjtrp3qjf5f7zl382j9x6nr-5447628e": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_taproot.py::test_send_invalid_address[tb1zlycg5qvjtrp3qjf5f7zl382j9x6nr-880d4a6b": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_bitcoin-test_signtx_taproot.py::test_send_mixed": "8a4944b88131aa68fbe9e941262986f00f424f2d3fc211c0ce8ef304a02d7f4b",
"TT_bitcoin-test_signtx_taproot.py::test_send_p2tr": "6cad0158adcaaea4b101bf8cfbd8caa0850f45f5fd49a7bbcbfb0be88db6e6a9",
"TT_bitcoin-test_signtx_taproot.py::test_send_two_with_change": "f3ab86c6543c6b7ff439c990c1f911b615ae9dfaa735a0f0ad16e3d3c7abc03b",
"TT_bitcoin-test_verifymessage.py::test_message_grs": "bb651a932064074e087ec89e3ffa6647e39e573ed4e717be109254fb2c00c8cd",
"TT_bitcoin-test_verifymessage.py::test_message_long": "4f4d766b7c620cace16ce624059e38cfc60ac5a82f1d7e92f37420543779e959",
"TT_bitcoin-test_verifymessage.py::test_message_testnet": "ed33548d6ae4241fe1b89624319a2454a2fb755d4f3eca1b4960a2445a103232",
@ -1026,9 +1026,9 @@
"TT_bitcoin-test_verifymessage_segwit_native.py::test_message_testnet": "de831f0ca069c6867d7309f7df71357e74ecc6013f9e63c19606828ec38f3be6",
"TT_bitcoin-test_verifymessage_segwit_native.py::test_message_verify": "3a563246a21ca8a39696485cd2254eb6365a0abb82e9d10a714be8b9ef211597",
"TT_bitcoin-test_verifymessage_segwit_native.py::test_verify_utf": "988cd0c1a2cc0dc9f7a6bdccee854f2b4edf564cface30b1888f41419587a6a4",
"TT_bitcoin-test_zcash.py::test_external_presigned": "db6cce246954fb19c16ec47c6051f06386e8c3a7b6cdbd9d07214380ed8de80a",
"TT_bitcoin-test_zcash.py::test_one_one_fee_sapling": "5f3a8d1a87bc927d7727ddd9bbed29f475739c262684d0e0841189268828fbbd",
"TT_bitcoin-test_zcash.py::test_spend_old_versions": "feaae0c5c8c1873ca81c3b638cd6e3339209cd299a82d32e596a0bf6d1d0857e",
"TT_bitcoin-test_zcash.py::test_external_presigned": "9543d3b056465cc73546bc52a80a6dfc0f0d7e3eee567177262167d7811f541b",
"TT_bitcoin-test_zcash.py::test_one_one_fee_sapling": "58424aa2d28404d9aa9eaa55f890485849f9e489a771cb8a00ac56d08638dc76",
"TT_bitcoin-test_zcash.py::test_spend_old_versions": "084dc0646755a75f80fb9e0f682b0b56aaf8f3d92157864ce6aff9777622bc14",
"TT_bitcoin-test_zcash.py::test_v3_not_supported": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_bitcoin-test_zcash.py::test_version_group_id_missing": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_cardano-test_address_public_key.py::test_cardano_get_address[icarus-derivation]": "bdc08b11746ed0ab970019e169f171148a6122a1c9658c8d42e0fd8cbfabaa5e",
@ -1465,55 +1465,55 @@
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[passphrase_protection-True]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[pin_protection-True]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[u2f_counter-1]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_dry_run": "d5cd3bdcfb744a516668abbbe1784ea82e123a2614337cf37d5d4c3d2eaf78c5",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_invalid_seed_core": "9c793efe29ba1d3f848b12f0a3876e41744ef63aa826557c9ea10b8e2127ac6e",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_seed_mismatch": "c231848f4040453a8201d9e9ccacd2095ad737da1a46b34f617174495b486cc2",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_dry_run": "893446ffd0a2370fb03afbbb0c93eabc1ab8c31d025836821e7f5aa3b0a5345c",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_invalid_seed_core": "712d9a6e0cbe38397eeb1d4468a17722db364c0b927736d98445e3862e18b004",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_seed_mismatch": "77c807619fd0a3561d1817ad0bd1713e707aeb876bcc2b42e306dbd5f91bcfa4",
"TT_reset_recovery-test_recovery_bip39_dryrun.py::test_uninitialized": "8711e2fa6f7b301add7641e08ffb4bacf29bcd41530b1dd435fdbddb49b4bdf8",
"TT_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "575c3f9fe3f9fa7e9396c42b586bdafa82c07bcf18d5b6daab8b6533d5de679b",
"TT_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "bcef3bb9d9b423276e1b06bbcd75af6aab6102b58d1b2fd61b4baa712af52340",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "7717c45923e9f73efd1201a728e659db2cf3631c7d244418b77fc04301875a10",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "01642ed01267ba6d53524b8a01530e563e84983ef71559be4401de7799505d3b",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "550337bf2577650d9c88b442b0fcb0e5f57a044a2360ed54ebbb44010293e124",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "9cd51efc9458359ff8fc0e3d10b809e885cc0cf5c21ec0fb2a5ce0a12d26b8ff",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "5f6ca704f20636a9a725c992895970f35928e57ce3b1595ee7b3528d70e171de",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "a65ca1d4bf588015ba1f6334cb20f6b4d9fa0136e40968ab1c42c9029752a30d",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "fe4de5cd82fa5af0c45c6dd890573763dd6babc1677e973d51ee8b80c18d9435",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "16efa172d1c4948067ac4813196e27f56693f4ebb4d27e3fd765e72dac0608d9",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares1-c41d-ca9ddec8": "0da05a609eeb7227122c3a70b19fd753efef9cfcfe340af7028e5367c732447e",
"TT_reset_recovery-test_recovery_slip39_advanced_dryrun.py::test_2of3_dryrun": "592efc4818dd747b79952f2637f22c828934b000145828b9274e00ff6f9f6799",
"TT_reset_recovery-test_recovery_slip39_advanced_dryrun.py::test_2of3_invalid_seed_dryrun": "d2956c6f897713a73a5e4dd8bee16a9f30f5449fd8645dfad656cc473c1e15c6",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "645294f84e6639613afbd8c730cc5dc4e9cc1f46a062d83fc894d15d3d64d409",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_abort": "7717c45923e9f73efd1201a728e659db2cf3631c7d244418b77fc04301875a10",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_ask_word_number": "b096d90b3eafd3044eeeb56ef6dc41ed44656741f402d5a067a9fb1854c07210",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "8d427091cd5050d6ce058de184a55fb8b103c52303e2b84027b5f7c22bf6f7b9",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "1d5b29035013aea4d12e1d8524c4d8b75257b1a6f914f7cc0993f44bcb3526c5",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "779d26152cebfd00927406a690cd0b91a7e9159f0a7a5fc5229fdb2234c630a9",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fbc98c8fc]": "975226cc64d04932e0668080667fae4405fa946a9962f3110c7cb925f4f38cc3",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-b770e0da1363247652de97a39-a50896b7": "322df710ab6942fb092beab94b62c3d88bf40cdc47f19b04bcc1c4bd40371ec2",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "dcee998e4a40ab4ce0db1d808d8ebe350152230f316d6f676f189d6de8f5f3db",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "47944f740779f1a81e45d191732c0ffd499bb74ecc5b8912495ec028a745da3d",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "69db953a31741cbbe48bd3d5e4e08a9b25da0dc6b6cea784d108041025098540",
"TT_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "c5760d953ec8322842e1cb0d4f040bce277cf6f690528417dc104f05c0a68237",
"TT_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "f8174614db6d452299d49f2296183671f6248f411da79be1899574dd21b66312",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "781b3a4dec0764835ba8caf01a1ded3d0ca9293c6c3c2f0da039d64cf58752d5",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Advanced-bac-f67baa1c": "dafc84bed542ffd801ece8a46e0a3dd7523d334e569be5b8aa6d4b9e083a895b",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Basic-backup-6348e7fe": "0b87e12d402faacce2536f5c47849256d26a9b120730fe3eaf07c52975a4d68f",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Bip39-backup_flow_bip39]": "800dc315249ba794673c137379e2a4b2d9c4f6f4339305fd80cbfad11045df98",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Advanced-backup-dcbda5cf": "b1f500f5f6d44569c010befbb1d2e77476a5c771c12f3af5582a357f74005e54",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Basic-backup_fl-1577de4d": "6730a052cfbd7685f736fcb90dfee16ec4561b88cc7565ec8cb8cfe4a4949b15",
"TT_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "080f44d1dd3317aad4535a97fd9c0d9120dde510fdbb9a177251d6f8713f9a89",
"TT_reset_recovery-test_recovery_bip39_t2.py::test_tt_pin_passphrase": "c2c4f9914188411f1b1c3cd97a9781eddbf298beaa61662df798c15362a7efaf",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_abort": "862f8eacd392de8f6432658df32b881821940b6559e09d87d072abbd7f8cd946",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_extra_share_entered": "f3f86b63788220d3740f6445369bf5d8403c3c6a41cc9a0623c55a8c8f7526e8",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_group_threshold_reached": "fcdd70b7b2ad043cbe6c81e7faa4ab365d49469d3de507a56d440391f3e35b6a",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_noabort": "f126f728a3aabf69aab35b12fe4bab816646cc8b47774e22e561e4f0e9ee75cd",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_same_share": "a0a5fe38afd0796ab71d1da93bbffb7e1d6657c16c794a931d4157a6e10d22d2",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares0-c2d2e26ad06023c60145f1-afc2dad5": "4bc5e209040001c29e012f3479ae417c82eb95ff24e7bb8d7c486e2cbb638b7a",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret[shares1-c41d5cf80fed71a008a3a0-eb47093e": "351f9b791ca1eeb3fd298952ecec540b20bda03a12d8305ee4e49d31d2dc620e",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares0-c2d2-850ffa77": "2042402357fb2e485eec01056ca0f0344ce7e42f0ca88e4fccfdfaffffa581ac",
"TT_reset_recovery-test_recovery_slip39_advanced.py::test_secret_click_info_button[shares1-c41d-ca9ddec8": "c5e40e7d11692e18729c9b0abcbf9c4e1222483f5b29dd1dce8e1c6d00d646e5",
"TT_reset_recovery-test_recovery_slip39_advanced_dryrun.py::test_2of3_dryrun": "d83c06b0ca227dbcd20a0300c7ee142ef7812a95ed05a5b62deb4927b01cde07",
"TT_reset_recovery-test_recovery_slip39_advanced_dryrun.py::test_2of3_invalid_seed_dryrun": "cc629e9ca460729ae6d72ca01ee58fa41b6b3e62594c11ab6417424483d4f18c",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_1of1": "7f85994120a6c2a462b01c6abb7e4df932ae4d76a65d0fb0513f0172989d8ff6",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_abort": "862f8eacd392de8f6432658df32b881821940b6559e09d87d072abbd7f8cd946",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_ask_word_number": "a4b0c157d6a180ab63200b9759a0e03132f51690a2d216f1e76307b43c763e6c",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_noabort": "704ad4594e1626cbbf58e798db8be3222c63b13561954ad76ca0edb80517cb66",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_recover_with_pin_passphrase": "8c605aa6a8dc80f186da529f653812a5ec1442faf54897790e138945238f9c87",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_same_share": "784859917cef061a296346627ec77d6410ae88785366640ce0ce511c81e3e4d3",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares0-491b795b80fc21ccdf466c0fbc98c8fc]": "136903d575090a9c863c60c419d211a4348eb11b9852609a11cb0016ca0289cf",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_secret[shares1-b770e0da1363247652de97a39-a50896b7": "80c6b72d672552a1be281e58b2900aaa13dd6add73e21243b79c5ebf10fb1337",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[0]": "49dc64f8830d5db676d8af48e5d03d8ccc9069dd437c115bdd56e785ae332486",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[1]": "3ffaf3ea8170a1289d2826ecb3982f6bac17a1be00dabe69f6e22ab496959d05",
"TT_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "ffec38d219e73d89472ffc77f60e1e34e109705271d2f0b2395df2a49aa90abf",
"TT_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "df446369900e4701b8a7b6e30f37d59db5e45d80174fbb463b14a05d82f1a8fd",
"TT_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "40dfa5dc507f33132655b60eb5fb3635a1997c94a2f207c9ca9abd86b7c45819",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "f82843d34b7aaf38a38f5701cb7cb95281d1769ae4e11210e0e6c6c4355b6472",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Advanced-bac-f67baa1c": "3f666cdebeb8311386b5f31558decf1d43f30e5069dfb8284281afeef3d25645",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Basic-backup-6348e7fe": "e40757245ab5abed8d6c0e10ddd0fae2548d563c1fc2f209ffaffa925a1abac5",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Bip39-backup_flow_bip39]": "fc1716babbb47a62b3d16f90ae36ff5119d68a6217660f98b8c1fd63a9a3d482",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Advanced-backup-dcbda5cf": "a0a175bd08c3e25c138342666a882bf9013aaa9df48944206dc7bc9146686c2d",
"TT_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Basic-backup_fl-1577de4d": "966cdb09aaca8d90309c2bdc274ca488587c9592f28104fbbf4503c9425121c1",
"TT_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "586559f16eb7b966abb521bcb57c65df3d6d78a82e295eb5868e5fd02a43d470",
"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device": "b9c8c453db87b31777af9a6db5861d357d78633239862bc670591221aa4c7dfb",
"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192": "fded148e118c4e874683d04b497d79e18e1b8a5fb6b362b8c32a11c31c8e7593",
"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "7ae5d8fcf616d070d4e696d05ff8d17d5e2043170aa296cd6892e23178df4fbf",
"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "483539f744e003d4216598c17a0e1487575c6fc6ca209a5cadfdfb4da7073968",
"TT_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery": "bef3fc7817c8e727b4fd45e3fcd329f808495193a99ef897eccbd8f7b7d42ce9",
"TT_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery": "052c4918766cc78b0e4f4e76451e1b9e05c70920348cf7a60735f40c1c6cc439",
"TT_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery": "e25e7b90f53018de09b71592d94f05597a2df5a3fba0e85d2021e0b81a7ebe1a",
"TT_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced": "ddfe04e444886ce6396d41f0265a9df1c9cf9002716445419461f90120ef07b3",
"TT_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic": "4a274ef77b76b63260303b95521739727496d61235dcc8653704722907614b18",
"TT_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256": "5cdfe3e37d223458c40169d0c24c7cc949338ae26a88a23852a2de5ec9c89afd",
"TT_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "798d844e85d384af27df27f6f79eb08017a2029d114b1c8f43a7514c99997d1c",
"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device": "26f3d1690d9c948c6e7704c280717ba9ef2a51e65421c33e4ba941d05e4fc871",
"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192": "2f3f2a070d171258211da6f381151ee4b637bd40554df0ec488a3a1595ef6c5f",
"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "776e32edd055cf085e39bfc2b5022cd03071bfb9bb8def811a65ffcca427c720",
"TT_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "9f4ed211281833cdcfea62e28016f61d4fdb0f986fb6056ed09985cdf5f984ae",
"TT_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery": "5a7a1fef1303142a03e5c9f78c6c4c38f41742c4123b741a38e0b0f9938a64cc",
"TT_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery": "52c7963a6a7ea451d1c033a2f4d0660ca3d2d8a45512e55c3d382ff84159788f",
"TT_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery": "76654c2a577b0d80de6fc1095ccaafa6ff56c2e528f0128e99949a14801025e6",
"TT_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced": "ed0ad3882b609a0bb0219691ca3f64382eb5c0b302b80349db6ec52f4bf81522",
"TT_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic": "d286292ef42855a4f4ce7f3b86c2e9f61aafedba6ac4d2042804a8823b9a516c",
"TT_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256": "cfcbc785a5afba184c7a24cfd96fc85a12fdd335d92894e63ed9cc5edf68e863",
"TT_ripple-test_get_address.py::test_ripple_get_address": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_ripple-test_get_address.py::test_ripple_get_address_other": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -1557,43 +1557,43 @@
"TT_stellar-test_stellar.py::test_sign_tx[timebounds-0-1575234180]": "a679ac9f594f6dc9c5f3fb4b0871e400fb37e434246084f00feb2375ff7e70c9",
"TT_stellar-test_stellar.py::test_sign_tx[timebounds-461535181-0]": "a9253f97e3920e935d425310fa280033d838f33451c2d6399b4cea7add5cb46d",
"TT_stellar-test_stellar.py::test_sign_tx[timebounds-461535181-1575234180]": "c0ce436dc7fb64bf9dfd8a01fd2226d538b73daa1b9f4a544afdd3f0c94e1e22",
"TT_test_autolock.py::test_apply_auto_lock_delay": "d51ad160eeb8a73ba643e95dae14a06724efc398f6b7178fa0afd6d229989e3f",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[0]": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[1]": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[4194304]": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[536871]": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[9]": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[10]": "82e00b89d50d5401b28adfbae981bbb92cce60d2174b4d77db0394635f498d6b",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[123]": "f11df7505872e387765c8b842b38414003ef8958bd4bc1a32208ab24f800279e",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[3601]": "fca21ed846243b4e3c844867477b6a8762f02f61a87a3098d69d1e6ea7e2b436",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[536870]": "709d2e8b2de24762737c8a8edd875a40ff6fbde5c9559b3203a2d7bd2f120153",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[60]": "9f6a5026d1547070f16d0354ff44ebe3ec2f7daf18e3088efb4b9f0dc12a18e0",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[7227]": "c7f7390392442a5f35c8c072b1b1f424366a29a2f63317f9735fa2b76e749e75",
"TT_test_autolock.py::test_autolock_cancels_ui": "d81e7c4c8a365ef176894371af8c1e35290e5b12b765d6217ea083a6a320c003",
"TT_test_autolock.py::test_autolock_default_value": "cecd5e89f9973e2fe3675006c010be1fba3291de17a298f8f410ac512ec2d2e3",
"TT_test_basic.py::test_device_id_different": "73feab1d7f8665282dc3f3a12376d6cc1f79a0467640bd31025064821f786f29",
"TT_test_autolock.py::test_apply_auto_lock_delay": "8d9c05fbfdcc317f45a74a3fa7ed0a6f0d01815934490ba1df2cdaab0957bac1",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[0]": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[1]": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[4194304]": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[536871]": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_autolock.py::test_apply_auto_lock_delay_out_of_range[9]": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[10]": "f5a3691dd22bab338ebfa66a5a89c4249a617a917fd9fc6850b1b10a5b026fd1",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[123]": "0ade5ff31d42d36b7c3a7d7cbafa91322a03f0aec08466bf44c069a44c5fa7e5",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[3601]": "3b5c3d3bb2d0795be5313b2c9415744c1ba71bd4c9d2f2a3c685001292fd8509",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[536870]": "bf0529557363167b7fa5620a5e3319858c3bb890f3543effdba04adfd1ac7051",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[60]": "3f4b17c2e568c4f402423d1229f997c8156fed8c006f4c3ac85d63241e1acfa8",
"TT_test_autolock.py::test_apply_auto_lock_delay_valid[7227]": "8865642a45e98557fa0a25fb9688679442f487ce7fb433f20ec94693524b8cbd",
"TT_test_autolock.py::test_autolock_cancels_ui": "8e051e881e7b5c982d0107a3e351956fbf85a3a13ff59ecdf24e1dac793a5158",
"TT_test_autolock.py::test_autolock_default_value": "55686a86c86ace4d9de72a97dc29bd80b38b9f9700a59a3d6dbf008d7758d8d6",
"TT_test_basic.py::test_device_id_different": "7ea7eebcb9173664ff8fcc717efe6ed7b35a47933a0d389b76803e05324d7bad",
"TT_test_basic.py::test_device_id_same": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_basic.py::test_features": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_basic.py::test_ping": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_busy_state.py::test_busy_expiry": "3e59ea446f4aa4fc9dd6c7980b32428181b79c5f92367fb7eebe053fe1aee4e0",
"TT_test_busy_state.py::test_busy_state": "1a67fc79d7b26aa4a6d0d406a558e40ffe45920a2afc09c88fb9063a0e322acb",
"TT_test_busy_state.py::test_busy_expiry": "460662121241e4eef1a1bdd9fcff6f44f1e88d8570d445dea8f29d74e931c6ce",
"TT_test_busy_state.py::test_busy_state": "6b436931f710b1626ea510fea17809225c81b56db3dac4099a4e0f71a282b5ad",
"TT_test_cancel.py::test_cancel_message_via_cancel[message0]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TT_test_cancel.py::test_cancel_message_via_cancel[message1]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TT_test_cancel.py::test_cancel_message_via_initialize[message0]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TT_test_cancel.py::test_cancel_message_via_initialize[message1]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TT_test_cancel.py::test_cancel_on_paginated": "cf7416c7ee045a7e583061dc01d332be70455e790b77ea8e1482ede674c2e748",
"TT_test_debuglink.py::test_softlock_instability": "119c2497c809c1db43b3ea6dbcf297ae69ea9c7caeb654192948f6f85cfd4fd0",
"TT_test_firmware_hash.py::test_firmware_hash_emu": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TT_test_debuglink.py::test_softlock_instability": "1b089ebb927dc4e626a68f352d3ab8a0aee01b7ba11f288cd187914e0eeac2c6",
"TT_test_firmware_hash.py::test_firmware_hash_emu": "2e1ef4d7ca8a088fe2d262ef31728fa12be57ee097882e1900b6150e07cac339",
"TT_test_firmware_hash.py::test_firmware_hash_hw": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_msg_applysettings.py::test_apply_homescreen_toif": "f37429eb2022b604b5498db90fd733ee56bae3ed23e8001a822e2b2defba6c80",
"TT_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIf\\x80\\x00\\x80\\x00~\\x00\\x00\\x0-ba464b0c": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIf\\x90\\x00\\x90\\x00~XXXf\\x90\\x0-cb3c88da": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIg\\x90\\x00\\x90\\x00~\\x00\\x00\\x0-09cb7d43": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_msg_applysettings.py::test_apply_settings": "2e9d4cd4d10939e0ff00329c3dd8c4b8b3c33605191abdc6c514ad2399c3bfe2",
"TT_test_msg_applysettings.py::test_apply_settings_passphrase": "62a8ff0495ae35a6be4bbd2578264b7f5bd6da4c3cb4c8b58952ac97749eace6",
"TT_test_msg_applysettings.py::test_apply_homescreen_toif": "1802078a2b87faca3a6c2f57f437177d5db4e6f4d82504c30b475cd13c2056e1",
"TT_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIf\\x80\\x00\\x80\\x00~\\x00\\x00\\x0-ba464b0c": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIf\\x90\\x00\\x90\\x00~XXXf\\x90\\x0-cb3c88da": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_msg_applysettings.py::test_apply_homescreen_toif_fail[TOIg\\x90\\x00\\x90\\x00~\\x00\\x00\\x0-09cb7d43": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_msg_applysettings.py::test_apply_settings": "7165b16c5d4fd4807ce8fbdbfa38839c5fef39869beff2113a6e72f3d23e01a7",
"TT_test_msg_applysettings.py::test_apply_settings_passphrase": "4d0d474eb514317475d8eca6f678d201b910be3ab71e2db6bbf8bf3e4f1618df",
"TT_test_msg_applysettings.py::test_apply_settings_passphrase_on_device": "9ee483bf455a0185bde3ba7ebc15c04ee9c3159e802818157beae60f23d41325",
"TT_test_msg_applysettings.py::test_apply_settings_rotation": "4c0789149ffdf4e1a234dd82bcf5ef07c21bdebd0989330ccdd9040819a53f83",
"TT_test_msg_applysettings.py::test_experimental_features": "f67b4537eb756dc98bf2a611cf5aa1f6a7980e9e882fa4b9a099944422c20853",
"TT_test_msg_applysettings.py::test_apply_settings_rotation": "1632ffeb8082f80e9defddf3a464fbcd26d479f5aa98e8c1460b85c9504dadba",
"TT_test_msg_applysettings.py::test_experimental_features": "24fccf50260b16141d74871b06fce01b3bbbc90e91329f48c6a0e0ff4d6e66ac",
"TT_test_msg_applysettings.py::test_label_too_long": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_msg_applysettings.py::test_safety_checks": "3b4ce2d35a1cebca782cdbb4820c2659c8beff382c925fa96390b529414edfdc",
"TT_test_msg_backup_device.py::test_backup_bip39": "67b2774849c96ac1a7c7a2bbed3bdaaa58003e96b7e89bd8502aac119976ca21",
@ -1604,55 +1604,55 @@
"TT_test_msg_backup_device.py::test_interrupt_backup_fails": "a8b5bc47867681b496da4b7473cde4fa43027c01fb071c2b0dcf97804809643f",
"TT_test_msg_backup_device.py::test_no_backup_fails": "ffc38ab2b61939fea6883a4805b2a4eb17a0be03afe0fed3b1cca492b50bb25c",
"TT_test_msg_backup_device.py::test_no_backup_show_entropy_fails": "8711e2fa6f7b301add7641e08ffb4bacf29bcd41530b1dd435fdbddb49b4bdf8",
"TT_test_msg_change_wipe_code_t2.py::test_set_pin_to_wipe_code": "b08bbe787f81903eeba3c2c61fdeb33ec49a57ac62b1d4143920d36a4bf86fb3",
"TT_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "3cb12f582fc2c2ebacbff554479fd83bc28fb52bc2f01396fe0a6e640a5a7316",
"TT_test_msg_change_wipe_code_t2.py::test_set_pin_to_wipe_code": "309b516ed6a73b34fa7ad75965773428a59910aa741ecef3158a28e2928ef598",
"TT_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "2720b2895a013ef99f0b94331b03cc55835b304f55532858901cc25b164c9817",
"TT_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "8f63a3bf93371a6df3af8f416e08e7a46aad3ea23e66f23cee9e45de65e9f33c",
"TT_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "aed589ff77b0043db847bf9290f69f6b8a5a48b442b53e347b696c22c0ea083d",
"TT_test_msg_changepin_t2.py::test_change_failed": "c41c6e1c4125cf071bc464b106da21dd4418e765d6fa88a0d4e2f0cae262ac88",
"TT_test_msg_changepin_t2.py::test_change_invalid_current": "d90427015c30c66dc58dd415f1dd944afd92e60c910a5dab992efb3f5d04cae1",
"TT_test_msg_changepin_t2.py::test_change_pin": "e5fe5dbf22c272b471851af59e340186af375881a0637b97b96cca45e3568dce",
"TT_test_msg_changepin_t2.py::test_remove_pin": "29f886079a1d3430a94a40d4950731515c408efc7e6365d9d42ceae6ce5a7cbf",
"TT_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "fd01bbb83bd5560b0435251c16e9af12886771ef6745f248e2867126b4e1001c",
"TT_test_msg_changepin_t2.py::test_change_failed": "8182a8980f6752bd7a41fe34c0c5dbe22c9b2761e750a3dd104ae3a811a822b3",
"TT_test_msg_changepin_t2.py::test_change_invalid_current": "f6cfc84b96838b274b14f9eeb0eed0e70db578537018d47ad2eccf53a9de098f",
"TT_test_msg_changepin_t2.py::test_change_pin": "634a53b833f30228fd4d0ce635f456c98cd9c096b5b1804986d840ff5e619b99",
"TT_test_msg_changepin_t2.py::test_remove_pin": "e52ba2124b5e93cf929cf14078ece149e8ab6a3d2e3c93757ccc2bc80d2e5554",
"TT_test_msg_changepin_t2.py::test_set_failed": "d6051691425c425f04060a6549b52637de0b0c2e29084adda4195b7b7bd28d07",
"TT_test_msg_changepin_t2.py::test_set_pin": "c6be5263d435089601f7bfeb24dd47e51d56a9c17d47b7cbbe86d561e1471bcc",
"TT_test_msg_changepin_t2.py::test_set_pin": "407074f8601c80404b6b63ab70d49edf98e5f5741086ab373a653ce2cc9b7155",
"TT_test_msg_loaddevice.py::test_load_device_1": "eeb5afb34b4bbf42b8c635fdd34bae5c1e3693facb16e6d64e629746612a2c3f",
"TT_test_msg_loaddevice.py::test_load_device_2": "a95020926a62b4078cb0034f6e7a772e49fc42121c9197b534437e26c306a994",
"TT_test_msg_loaddevice.py::test_load_device_2": "f5dbc817f4c5e07e4b3c64a1117c3d983c35716c051ee6d312ade159d9f2b26d",
"TT_test_msg_loaddevice.py::test_load_device_slip39_advanced": "eeb5afb34b4bbf42b8c635fdd34bae5c1e3693facb16e6d64e629746612a2c3f",
"TT_test_msg_loaddevice.py::test_load_device_slip39_basic": "eeb5afb34b4bbf42b8c635fdd34bae5c1e3693facb16e6d64e629746612a2c3f",
"TT_test_msg_loaddevice.py::test_load_device_utf": "2177733bb8d39ea79a43cdd457238533dd4d79d8a8be3f43b519837db4888666",
"TT_test_msg_loaddevice.py::test_load_device_utf": "cd25e4800311e40ea541a2107fd551388ca39a2383976b081d963ae01deb647d",
"TT_test_msg_ping.py::test_ping": "9b44725459426439bc27f2cf72ee926ab7146f3ee1236d197382524cdf9a89a1",
"TT_test_msg_sd_protect.py::test_enable_disable": "fc801999f79d34e43f2f09fd91bcfae07e80af2a88729167692e43e843adb7bd",
"TT_test_msg_sd_protect.py::test_refresh": "5558ccabb7878f5224d1130c176d6b6debd63f8a7f07b85385c1d46f874191e3",
"TT_test_msg_sd_protect.py::test_wipe": "b1aa7408689efb7ef10af9f28f51f09ef4d925ac864619f00b172644ea601e45",
"TT_test_msg_wipedevice.py::test_autolock_not_retained": "e82cec0a12c83236510fbfa1054b05b7c9f50bd52c81a0ceea411b81a8535777",
"TT_test_msg_wipedevice.py::test_wipe_device": "73feab1d7f8665282dc3f3a12376d6cc1f79a0467640bd31025064821f786f29",
"TT_test_msg_sd_protect.py::test_enable_disable": "440db11fff1645eecea1dd8108d187bfe4c0621e3df88844a6b12446bc65e090",
"TT_test_msg_sd_protect.py::test_refresh": "69f7208a8ef4a0c21336c96fbedeb6c1e98ad0e0a8d8f6b5d39ae8c9a8c4a413",
"TT_test_msg_sd_protect.py::test_wipe": "94969218b87d7522125f881919b61584d1d3357e7ff8d31b3bb5f04264481842",
"TT_test_msg_wipedevice.py::test_autolock_not_retained": "694d69dee9295b3d782e0eb61ce7d641d54c33093a6ec60786d384ead25bbbd4",
"TT_test_msg_wipedevice.py::test_wipe_device": "7ea7eebcb9173664ff8fcc717efe6ed7b35a47933a0d389b76803e05324d7bad",
"TT_test_passphrase_slip39_advanced.py::test_128bit_passphrase": "68e7d02ee3038fa20f0ccc226abdc29c422aa0d3b0c54533869276cd08a7a5b8",
"TT_test_passphrase_slip39_advanced.py::test_256bit_passphrase": "68e7d02ee3038fa20f0ccc226abdc29c422aa0d3b0c54533869276cd08a7a5b8",
"TT_test_passphrase_slip39_basic.py::test_2of5_passphrase": "db4a8f21cfd2bdaef28debb199e2296092b33ba26798b2ed52e708a51b62a569",
"TT_test_passphrase_slip39_basic.py::test_3of6_passphrase": "db4a8f21cfd2bdaef28debb199e2296092b33ba26798b2ed52e708a51b62a569",
"TT_test_pin.py::test_correct_pin": "2e04a8e156327ad6d8147456d51c035013868886f6360ffa91705d3df619fa63",
"TT_test_pin.py::test_exponential_backoff_t2": "fd98021a35069ffc05143156453a99fe5afb356d44b737f8413ec871492754a7",
"TT_test_pin.py::test_incorrect_pin_t2": "b8949e19b4978700b20e79ffd8463a95257c84450093f04680fa29b1c600b78a",
"TT_test_pin.py::test_correct_pin": "09a26d8bdc96641fbf1d200836708e9234d44f49466eefdbe48bce740be184f7",
"TT_test_pin.py::test_exponential_backoff_t2": "9a1754d5ae428eae26a7d941839337a466c0782c311032c32080b5da8ff6fdb7",
"TT_test_pin.py::test_incorrect_pin_t2": "f66a4cdfefd1d1b30485b6f5e27b37686704c674b39ace31fde8b32320420e99",
"TT_test_pin.py::test_no_protection": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_protection_levels.py::test_apply_settings": "28c2ee2911b9f90de7c0ea5e34376a2842f46299e1a675cdefb79bca93120ff4",
"TT_test_protection_levels.py::test_change_pin_t2": "36bf96ac65a768ba464467ccdd0ae29c87f74e717245d386c2b0900d672b7f3f",
"TT_test_protection_levels.py::test_get_address": "0f8c342df6831aa84748daac30d2f9a2710835946fef3fa317516a59a842d5a3",
"TT_test_protection_levels.py::test_get_entropy": "a305c9934384a5a4d679cbe37e2e54dfe19bde842cd1f4df02ed446ffa65cfb7",
"TT_test_protection_levels.py::test_get_public_key": "0f8c342df6831aa84748daac30d2f9a2710835946fef3fa317516a59a842d5a3",
"TT_test_protection_levels.py::test_initialize": "8c8d70df4266df41ca69324d9b81d0ab77eaeeb89a633c8b23bfc57aa8fbe604",
"TT_test_protection_levels.py::test_apply_settings": "8f32f2b877c2589bb871a44649cd9d9878634a1f0df5e85be7453246c4cb44cd",
"TT_test_protection_levels.py::test_change_pin_t2": "04458882d22c5bc6df1ea28318836ae73604829999963a2df2a8bdf5c559d2e3",
"TT_test_protection_levels.py::test_get_address": "b5d011e6c4a09ad8be2861930c326a4536f9e61fec5624658b7257dc6da23664",
"TT_test_protection_levels.py::test_get_entropy": "9b1b7c073c92d7d45c49b94e85f547cf608f2c5f4ac57e110e13b069c507f22b",
"TT_test_protection_levels.py::test_get_public_key": "b5d011e6c4a09ad8be2861930c326a4536f9e61fec5624658b7257dc6da23664",
"TT_test_protection_levels.py::test_initialize": "c9a9e2ab23667b6be60a442ddd3cae376b4448629057cc1a713463f78c392cb4",
"TT_test_protection_levels.py::test_passphrase_cached": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TT_test_protection_levels.py::test_passphrase_reporting[False]": "33507c11b872522eb3196916ae0046d19da75fb8bb709bcff8b993f94b0ffe32",
"TT_test_protection_levels.py::test_passphrase_reporting[True]": "6148e0154ffa11e52c48fc2355561c5516a87ebf848fd5963fb383e3c9aa1e31",
"TT_test_protection_levels.py::test_passphrase_reporting[False]": "fa38dd686df48d6d7810178b78168c1d8d87fb39963c2cba5b3f12315013816f",
"TT_test_protection_levels.py::test_passphrase_reporting[True]": "5de7113917e63c52fd2f8c3e6acd99a69a966d8096d742264e02b0637136f19d",
"TT_test_protection_levels.py::test_ping": "9b44725459426439bc27f2cf72ee926ab7146f3ee1236d197382524cdf9a89a1",
"TT_test_protection_levels.py::test_sign_message": "8d3cce0711ba3e1cf7f9a4cac1d0e0cd857f7c9a6f972a7310fafe8f345ec9b4",
"TT_test_protection_levels.py::test_signtx": "f45b6e9f41c3a85a16ec2f084b27c826bba534857296519f06de9c9ef02fbcbb",
"TT_test_protection_levels.py::test_unlocked": "bb315d43cda7529736a9ce79a1919d50d8e18432fea5ee84f2787fcdd45cba5d",
"TT_test_protection_levels.py::test_verify_message_t2": "ad6412a1e6167cb55d873577236368169c1677f51402be47bf6acbafd5ae8985",
"TT_test_protection_levels.py::test_wipe_device": "268c8b8948909d952758ca67d3fa3fad657fb74c8bba04c7f9ec85f272df08b2",
"TT_test_sdcard.py::test_sd_format": "83a3b2fdc0eda55c18a476868f4da957710ffcfd7f5300cd54c4c139a3aee72d",
"TT_test_protection_levels.py::test_sign_message": "5979ec73c56b2766d8921bad5243274f1796792b7fe3a98c175984c7e5099cd8",
"TT_test_protection_levels.py::test_signtx": "042f9190563c991630d1e2ce870cb78157707ea21fdf1ac990731a412e378220",
"TT_test_protection_levels.py::test_unlocked": "5c08e44d462575a3b119a7afebd9f8076b2718623977ae30beb439725bd6b9c0",
"TT_test_protection_levels.py::test_verify_message_t2": "b20aa9be40597dff8b30e1a34c27f104fd5236be2797f767fe26fdcbc58e5c22",
"TT_test_protection_levels.py::test_wipe_device": "5e54568f39628aabc2e46ac45cf96ac56447ea1d62ae3e46ec317cd7d49e1949",
"TT_test_sdcard.py::test_sd_format": "b398c0c39ea6c4c711d51d5a1c12cbbd4810f094d4b7616653cc12f346c7eaad",
"TT_test_sdcard.py::test_sd_no_format": "e48ac8dc3f81340d89746a9a6bc2b89f8ebce54568c4c1805e626178ff1c509c",
"TT_test_sdcard.py::test_sd_protect_unlock": "35a3629da12c2c1e3feff7194dd8970a5daf3e5f019c7808254537cbbd6b334a",
"TT_test_sdcard.py::test_sd_protect_unlock": "abc72a3e0ed6b5158ba75f25f0258b0cf86c109fe52f02e136c7297dfc3d9033",
"TT_test_session.py::test_cannot_resume_ended_session": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_session.py::test_clear_session": "ebf3e0055182a8cd5992df8051927a3686338662b2bcf17293370b5fb9564bb5",
"TT_test_session.py::test_clear_session": "42cd0f29bb1c40d70178fd7488bdffcea8c578759a72260b89e61bacf9ea1283",
"TT_test_session.py::test_derive_cardano_empty_session": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_session.py::test_derive_cardano_running_session": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TT_test_session.py::test_end_session": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -1686,13 +1686,13 @@
"TT_tezos-test_sign_tx.py::test_tezos_smart_contract_transfer_to_contract": "5f5033fb5debd0252fddc005de508c5074400cdfc31895e663d1ec1454c13675",
"TT_webauthn-test_msg_webauthn.py::test_add_remove": "943e29255d6738cc6824c2565001c05906c2cd032aa2eb09993782564e890a16",
"TT_webauthn-test_u2f_counter.py::test_u2f_counter": "c6a8e270ce726c7693e2ff88f9af57c56f2d3d8b1cc9c04b6f1dc71e13fcb88e",
"TT_zcash-test_sign_tx.py::test_external_presigned": "db6cce246954fb19c16ec47c6051f06386e8c3a7b6cdbd9d07214380ed8de80a",
"TT_zcash-test_sign_tx.py::test_one_two": "b0f75e54902165407718544e1f079761cfd7b211907870e5c9df52fffed1814c",
"TT_zcash-test_sign_tx.py::test_refuse_replacement_tx": "43106624df7948079a4873fdbd34b2a1555e0abb2fc88a8c2e194f6b3a83bd3c",
"TT_zcash-test_sign_tx.py::test_send_to_multisig": "2000a053d0fe3aff5f6b6c1a641568c9a5ed32687ad47fa598008cfb2472ecb5",
"TT_zcash-test_sign_tx.py::test_spend_multisig": "42de89bf5d7d4fbd2e9a528a3cc5fd5ecb95713e90d96f81feba45ae0cb91e78",
"TT_zcash-test_sign_tx.py::test_spend_v4_input": "641e5d09f3ca504faa9c1d5d5258bb67180673b2d24c7405ca00c30338bf932f",
"TT_zcash-test_sign_tx.py::test_spend_v5_input": "07ba43c33427467c8cf435fbc0e60d969a8e2337e82077696c2dc0efc3bca99f",
"TT_zcash-test_sign_tx.py::test_unified_address": "938b7218083d53aec136e7f963766b2dd97dc77e3352d0dad747cce49902815c",
"TT_zcash-test_sign_tx.py::test_external_presigned": "9543d3b056465cc73546bc52a80a6dfc0f0d7e3eee567177262167d7811f541b",
"TT_zcash-test_sign_tx.py::test_one_two": "1e8aae8dce639f41eb8d99ed7cbf3d961fc609e4f1406df317d0ca2817a518b8",
"TT_zcash-test_sign_tx.py::test_refuse_replacement_tx": "f96ed5a6c1c4f7e48f3b2f2578c97740c04ced388e91465529af5e7812ddb14f",
"TT_zcash-test_sign_tx.py::test_send_to_multisig": "f11433a73e529f2192bbb71d76a35aadb12b5738914e2ba4564f6df32b07c121",
"TT_zcash-test_sign_tx.py::test_spend_multisig": "d030f5c2d12228963badf17689c316e22e29bb21c50e35d66eb605d38137fede",
"TT_zcash-test_sign_tx.py::test_spend_v4_input": "b380914038e00e3af638f0cb58435826c3f6adfaf513a1e3c1327208cb43f9cb",
"TT_zcash-test_sign_tx.py::test_spend_v5_input": "bfc1f8c55d5d600eb0a3637cde6ab455ded301dcb461a19afd434837e868a248",
"TT_zcash-test_sign_tx.py::test_unified_address": "d72ebc2927f725907ab0f49e5501f7f70d441d92925466ac120ecc045ba8a5b4",
"TT_zcash-test_sign_tx.py::test_version_group_id_missing": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1"
}

Loading…
Cancel
Save