diff --git a/core/SConscript.firmware b/core/SConscript.firmware index f87288cb0fe..937deadfd91 100644 --- a/core/SConscript.firmware +++ b/core/SConscript.firmware @@ -314,24 +314,23 @@ SOURCE_MOD += [ # rust mods SOURCE_MOD += [ + 'embed/upymod/bindgen-static.c', 'embed/upymod/rustmods.c', ] -# modutime +# modutime, modtimeq SOURCE_MOD += [ + 'embed/upymod/modtimeq.c', 'embed/upymod/modutime.c', ] SOURCE_MICROPYTHON = [ - 'vendor/micropython/extmod/modubinascii.c', + 'vendor/micropython/extmod/modtime.c', 'vendor/micropython/extmod/moductypes.c', - 'vendor/micropython/extmod/moduheapq.c', - 'vendor/micropython/extmod/modutimeq.c', - 'vendor/micropython/extmod/utime_mphal.c', 'vendor/micropython/shared/libc/abort_.c', 'vendor/micropython/shared/libc/printf.c', - 'vendor/micropython/shared/runtime/gchelper_m3.s', 'vendor/micropython/shared/runtime/gchelper_native.c', + 'vendor/micropython/shared/runtime/gchelper_thumb.s' 'vendor/micropython/shared/runtime/interrupt_char.c', 'vendor/micropython/shared/runtime/pyexec.c', 'vendor/micropython/shared/runtime/stdout_helpers.c', @@ -350,6 +349,7 @@ SOURCE_MICROPYTHON = [ 'vendor/micropython/py/builtinhelp.c', 'vendor/micropython/py/builtinimport.c', 'vendor/micropython/py/compile.c', + 'vendor/micropython/py/cstack.c', 'vendor/micropython/py/emitbc.c', 'vendor/micropython/py/emitcommon.c', 'vendor/micropython/py/emitglue.c', @@ -378,6 +378,7 @@ SOURCE_MICROPYTHON = [ 'vendor/micropython/py/objboundmeth.c', 'vendor/micropython/py/objcell.c', 'vendor/micropython/py/objclosure.c', + 'vendor/micropython/py/objcode.c', 'vendor/micropython/py/objcomplex.c', 'vendor/micropython/py/objdict.c', 'vendor/micropython/py/objenumerate.c', @@ -560,9 +561,10 @@ env.Replace( MAKEQSTRDATA='$PYTHON vendor/micropython/py/makeqstrdata.py', MAKEVERSIONHDR='$PYTHON vendor/micropython/py/makeversionhdr.py', MAKEMODULEDEFS='$PYTHON vendor/micropython/py/makemoduledefs.py', + MAKEROOTPOINTERS='$PYTHON vendor/micropython/py/make_root_pointers.py', MAKECMAKELISTS='$PYTHON tools/make_cmakelists.py', MPY_TOOL='$PYTHON vendor/micropython/tools/mpy-tool.py', - MPY_CROSS='vendor/micropython/mpy-cross/mpy-cross -O' + BYTECODE_OPTIMIZATION, + MPY_CROSS='vendor/micropython/mpy-cross/build/mpy-cross -O' + BYTECODE_OPTIMIZATION, PB2PY='$PYTHON ../common/protob/pb2py', ) @@ -636,6 +638,18 @@ compressed_data = env.GenerateCompressed( env.Ignore(micropy_defines, compressed_data) +# +# Micropython root pointers +# + +rootpointers_collected = env.CollectRootPointers( + target='genhdr/root_pointers.collected', source=micropy_defines) + +rootpointers_data = env.GenerateRootPointers( + target='genhdr/root_pointers.h', source=rootpointers_collected) + +env.Ignore(micropy_defines, rootpointers_data) + # # Micropython version # diff --git a/core/SConscript.unix b/core/SConscript.unix index ac5ce199206..34e4597ceb3 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -96,7 +96,10 @@ CPPDEFINES_HAL = [] PATH_HAL = [] CPPDEFINES_MOD = [] SOURCE_MOD = [ + 'vendor/micropython/extmod/vfs.c', + 'vendor/micropython/extmod/vfs_posix.c', 'vendor/micropython/extmod/vfs_posix_file.c', + 'vendor/micropython/extmod/vfs_reader.c', ] SOURCE_MOD_CRYPTO = [] RUST_UI_FEATURES = [] @@ -296,21 +299,20 @@ SOURCE_MOD += [ # rust mods SOURCE_MOD += [ + 'embed/upymod/bindgen-static.c', 'embed/upymod/rustmods.c', ] -# modutime +# modutime, modtimeq SOURCE_MOD += [ + 'embed/upymod/modtimeq.c', 'embed/upymod/modutime.c', ] SOURCE_MICROPYTHON = [ - 'vendor/micropython/extmod/modubinascii.c', + 'vendor/micropython/extmod/modtime.c', 'vendor/micropython/extmod/moductypes.c', - 'vendor/micropython/extmod/moduheapq.c', - 'vendor/micropython/extmod/moduos.c', - 'vendor/micropython/extmod/modutimeq.c', - 'vendor/micropython/extmod/utime_mphal.c', + 'vendor/micropython/extmod/modos.c', 'vendor/micropython/shared/readline/readline.c', 'vendor/micropython/shared/timeutils/timeutils.c', 'vendor/micropython/py/argcheck.c', @@ -326,6 +328,7 @@ SOURCE_MICROPYTHON = [ 'vendor/micropython/py/builtinhelp.c', 'vendor/micropython/py/builtinimport.c', 'vendor/micropython/py/compile.c', + 'vendor/micropython/py/cstack.c', 'vendor/micropython/py/emitbc.c', 'vendor/micropython/py/emitcommon.c', 'vendor/micropython/py/emitglue.c', @@ -354,7 +357,7 @@ SOURCE_MICROPYTHON = [ 'vendor/micropython/py/modstruct.c', 'vendor/micropython/py/modsys.c', 'vendor/micropython/py/modthread.c', - 'vendor/micropython/py/moduerrno.c', + 'vendor/micropython/py/moderrno.c', 'vendor/micropython/py/mpprint.c', 'vendor/micropython/py/mpstate.c', 'vendor/micropython/py/mpz.c', @@ -372,6 +375,7 @@ SOURCE_MICROPYTHON = [ 'vendor/micropython/py/objbool.c', 'vendor/micropython/py/objboundmeth.c', 'vendor/micropython/py/objcell.c', + 'vendor/micropython/py/objcode.c', 'vendor/micropython/py/objclosure.c', 'vendor/micropython/py/objcomplex.c', 'vendor/micropython/py/objdeque.c', @@ -439,6 +443,7 @@ SOURCE_UNIX = [ 'vendor/micropython/ports/unix/input.c', 'vendor/micropython/ports/unix/unix_mphal.c', 'vendor/micropython/shared/runtime/gchelper_generic.c', + 'vendor/micropython/shared/runtime/pyexec.c', ] if "app_loading" in FEATURES_WANTED: @@ -575,9 +580,10 @@ env.Replace( MAKEQSTRDATA='$PYTHON vendor/micropython/py/makeqstrdata.py', MAKEVERSIONHDR='$PYTHON vendor/micropython/py/makeversionhdr.py', MAKEMODULEDEFS='$PYTHON vendor/micropython/py/makemoduledefs.py', + MAKEROOTPOINTERS='$PYTHON vendor/micropython/py/make_root_pointers.py', MAKECMAKELISTS='$PYTHON tools/make_cmakelists.py', MPY_TOOL='$PYTHON vendor/micropython/tools/mpy-tool.py', - MPY_CROSS='vendor/micropython/mpy-cross/mpy-cross -O' + BYTECODE_OPTIMIZATION, + MPY_CROSS='vendor/micropython/mpy-cross/build/mpy-cross -O' + BYTECODE_OPTIMIZATION, PB2PY='$PYTHON ../common/protob/pb2py', ) @@ -652,6 +658,18 @@ compressed_data = env.GenerateCompressed( env.Ignore(micropy_defines, compressed_data) +# +# Micropython root pointers +# + +rootpointers_collected = env.CollectRootPointers( + target='genhdr/root_pointers.collected', source=micropy_defines) + +rootpointers_data = env.GenerateRootPointers( + target='genhdr/root_pointers.h', source=rootpointers_collected) + +env.Ignore(micropy_defines, rootpointers_data) + # # Micropython version # diff --git a/core/embed/projects/firmware/main.c b/core/embed/projects/firmware/main.c index 01b59baf452..827b5d59350 100644 --- a/core/embed/projects/firmware/main.c +++ b/core/embed/projects/firmware/main.c @@ -147,13 +147,12 @@ int main_func(uint32_t cmd, void *arg) { // Interpreter init LOG_INF("Starting interpreter"); mp_init(); - mp_obj_list_init(mp_sys_argv, 0); mp_obj_list_init(mp_sys_path, 0); mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__dot_frozen)); // Execute the main script LOG_INF("Executing main script"); - pyexec_frozen_module("main.py"); + pyexec_frozen_module("main.py", false); // Clean up LOG_INF("Main script finished, cleaning up"); diff --git a/core/embed/projects/firmware/mpconfigport.h b/core/embed/projects/firmware/mpconfigport.h index 5928bc3b9b8..844e0236841 100644 --- a/core/embed/projects/firmware/mpconfigport.h +++ b/core/embed/projects/firmware/mpconfigport.h @@ -80,8 +80,8 @@ #define MICROPY_ENABLE_SOURCE_LINE (1) #endif #define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_FLOAT) +#define MICROPY_TIME_SUPPORT_Y2100_AND_BEYOND (1) #define MICROPY_STREAMS_NON_BLOCK (1) -#define MICROPY_MODULE_WEAK_LINKS (0) #define MICROPY_CAN_OVERRIDE_BUILTINS (0) #define MICROPY_USE_INTERNAL_ERRNO (1) #define MICROPY_ENABLE_SCHEDULER (0) @@ -92,6 +92,7 @@ #define MICROPY_PY_FUNCTION_ATTRS (1) #define MICROPY_PY_DESCRIPTORS (0) #define MICROPY_PY_DELATTR_SETATTR (0) +#define MICROPY_PY_BUILTINS_BYTES_HEX (1) #define MICROPY_PY_BUILTINS_STR_UNICODE (1) #define MICROPY_PY_BUILTINS_STR_CENTER (0) #define MICROPY_PY_BUILTINS_STR_PARTITION (1) @@ -130,37 +131,36 @@ #define MICROPY_PY_SYS_STDFILES (0) #define MICROPY_PY_SYS_STDIO_BUFFER (0) #define MICROPY_PY_SYS_PLATFORM "trezor" -#define MICROPY_PY_UERRNO (0) +#define MICROPY_PY_SYS_ARGV (0) +#define MICROPY_PY_ERRNO (0) #define MICROPY_PY_THREAD (0) #define MICROPY_PY_FSTRINGS (1) // extended modules #define MICROPY_PY_UCTYPES (!BITCOIN_ONLY) // used in FIDO -#define MICROPY_PY_UZLIB (0) -#define MICROPY_PY_UJSON (0) -#define MICROPY_PY_UOS (0) -#define MICROPY_PY_URE (0) -#define MICROPY_PY_URE_SUB (0) -#define MICROPY_PY_UHEAPQ (0) -#define MICROPY_PY_UHASHLIB (0) -#define MICROPY_PY_UHASHLIB_MD5 (0) -#define MICROPY_PY_UHASHLIB_SHA1 (0) -#define MICROPY_PY_UCRYPTOLIB (0) -#define MICROPY_PY_UBINASCII (1) -#define MICROPY_PY_UBINASCII_CRC32 (0) -#define MICROPY_PY_URANDOM (0) -#define MICROPY_PY_URANDOM_EXTRA_FUNCS (0) -#define MICROPY_PY_USELECT (0) -#define MICROPY_PY_UTIME (1) -#define MICROPY_PY_UTIMEQ (1) -#define MICROPY_PY_UTIME_MP_HAL (1) +#define MICROPY_PY_DEFLATE (0) +#define MICROPY_PY_JSON (0) +#define MICROPY_PY_OS (0) +#define MICROPY_PY_RE (0) +#define MICROPY_PY_RE_SUB (0) +#define MICROPY_PY_HEAPQ (0) +#define MICROPY_PY_HASHLIB (0) +#define MICROPY_PY_HASHLIB_MD5 (0) +#define MICROPY_PY_HASHLIB_SHA1 (0) +#define MICROPY_PY_CRYPTOLIB (0) +#define MICROPY_PY_BINASCII (0) +#define MICROPY_PY_BINASCII_CRC32 (0) +#define MICROPY_PY_RANDOM (0) +#define MICROPY_PY_RANDOM_EXTRA_FUNCS (0) +#define MICROPY_PY_SELECT (0) +#define MICROPY_PY_TIME (1) #define MICROPY_PY_OS_DUPTERM (0) #define MICROPY_PY_LWIP_SOCK_RAW (0) #define MICROPY_PY_MACHINE (0) -#define MICROPY_PY_UWEBSOCKET (0) +#define MICROPY_PY_WEBSOCKET (0) #define MICROPY_PY_WEBREPL (0) #define MICROPY_PY_FRAMEBUF (0) -#define MICROPY_PY_USOCKET (0) +#define MICROPY_PY_SOCKET (0) #define MICROPY_PY_NETWORK (0) // allocate traceback data only on debug builds @@ -180,7 +180,8 @@ // by default contains nearest git tag, which may not be present in shallow // repo, breaking reproducibility -#define MICROPY_BANNER_NAME_AND_VERSION "" +#define MICROPY_BANNER_NAME_AND_VERSION "MicroPython" +#define MICROPY_BANNER_MACHINE "Trezor" // ============= this ends common config section =================== @@ -197,15 +198,6 @@ typedef int mp_int_t; // must be pointer size typedef unsigned int mp_uint_t; // must be pointer size typedef long mp_off_t; -#define MICROPY_BEGIN_ATOMIC_SECTION() (0) -#define MICROPY_END_ATOMIC_SECTION(state) (void)(state) -#define MICROPY_EVENT_POLL_HOOK \ - do { \ - extern void mp_handle_pending(bool); \ - mp_handle_pending(true); \ - __WFI(); \ - } while (0); - #define MICROPY_HW_BOARD_NAME "TREZORv2" #define MICROPY_HW_MCU_NAME "STM32F427xx" #define MICROPY_HW_HAS_SDCARD 1 @@ -218,9 +210,6 @@ typedef long mp_off_t; #define free(p) m_free(p) #define realloc(p, n) m_realloc(p, n) -#define MICROPY_PORT_ROOT_POINTERS \ - mp_obj_t trezorconfig_ui_wait_callback; \ - // We need to provide a declaration/definition of alloca() #include diff --git a/core/embed/projects/firmware/mphalport.c b/core/embed/projects/firmware/mphalport.c index 0b138cdedd0..2dbd063f3b1 100644 --- a/core/embed/projects/firmware/mphalport.c +++ b/core/embed/projects/firmware/mphalport.c @@ -37,9 +37,12 @@ int mp_hal_stdin_rx_chr(void) { #endif } -void mp_hal_stdout_tx_strn(const char *str, size_t len) { +mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) { #ifdef USE_DBG_CONSOLE - dbg_console_write(str, len); + ssize_t written = dbg_console_write(str, len); + return (written > 0 ? written : 0); +#else + return 0; #endif } diff --git a/core/embed/projects/firmware/nlrthumb.c b/core/embed/projects/firmware/nlrthumb.c index 4cf92ddb921..12d976c1179 100644 --- a/core/embed/projects/firmware/nlrthumb.c +++ b/core/embed/projects/firmware/nlrthumb.c @@ -115,6 +115,22 @@ void nlr_pop(void) { *top = (*top)->prev; } +void nlr_push_jump_callback(nlr_jump_callback_node_t *node, nlr_jump_callback_fun_t fun) { + nlr_jump_callback_node_t **top = &MP_STATE_THREAD(nlr_jump_callback_top); + node->prev = *top; + node->fun = fun; + *top = node; +} + +void nlr_pop_jump_callback(bool run_callback) { + nlr_jump_callback_node_t **top = &MP_STATE_THREAD(nlr_jump_callback_top); + nlr_jump_callback_node_t *cur = *top; + *top = (*top)->prev; + if (run_callback) { + cur->fun(cur); + } +} + NORETURN __attribute__((naked)) void nlr_jump(void *val) { nlr_buf_t **top_ptr = &MP_STATE_THREAD(nlr_top); nlr_buf_t *top = *top_ptr; diff --git a/core/embed/projects/unix/main.c b/core/embed/projects/unix/main.c index fabd3ae887c..c7ae55ca94e 100644 --- a/core/embed/projects/unix/main.c +++ b/core/embed/projects/unix/main.c @@ -4,6 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2013, 2014 Damien P. George + * Copyright (c) 2014-2017 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -32,33 +33,43 @@ #include #endif +#include "version.h" + #include #include #include #include +#include +#include +#include #include +#include #include #include #include #include "extmod/misc.h" +#include "extmod/modplatform.h" +#include "extmod/vfs.h" #include "extmod/vfs_posix.h" #include "genhdr/mpversion.h" #include "input.h" - #include "py/builtin.h" #include "py/compile.h" +#include "py/cstack.h" #include "py/gc.h" #include "py/mperrno.h" #include "py/mphal.h" #include "py/mpthread.h" +#include "py/objstr.h" #include "py/repl.h" #include "py/runtime.h" -#include "py/stackctrl.h" +#include "shared/runtime/pyexec.h" +#include "stack_size.h" // Command line options, with their defaults -STATIC bool compile_only = false; -STATIC uint emit_opt = MP_EMIT_OPT_NONE; +bool mp_compile_only = false; +static uint emit_opt = MP_EMIT_OPT_NONE; #if MICROPY_ENABLE_GC // Heap size of GC heap (if enabled) @@ -66,12 +77,25 @@ STATIC uint emit_opt = MP_EMIT_OPT_NONE; long heap_size = 1024 * 1024 * (sizeof(mp_uint_t) / 4); #endif -STATIC void stderr_print_strn(void *env, const char *str, size_t len) { +// Number of heaps to assign by default if MICROPY_GC_SPLIT_HEAP=1 +#ifndef MICROPY_GC_SPLIT_HEAP_N_HEAPS +#define MICROPY_GC_SPLIT_HEAP_N_HEAPS (1) +#endif + +#if !MICROPY_PY_SYS_PATH +#error "The unix port requires MICROPY_PY_SYS_PATH=1" +#endif + +#if !MICROPY_PY_SYS_ARGV +#error "The unix port requires MICROPY_PY_SYS_ARGV=1" +#endif + +static void stderr_print_strn(void *env, const char *str, size_t len) { (void)env; #ifdef USE_DBG_CONSOLE dbg_console_write(str, len); #endif - mp_uos_dupterm_tx_strn(str, len); + mp_os_dupterm_tx_strn(str, len); } const mp_print_t mp_stderr_print = {NULL, stderr_print_strn}; @@ -80,7 +104,7 @@ const mp_print_t mp_stderr_print = {NULL, stderr_print_strn}; // If exc is SystemExit, return value where FORCED_EXIT bit set, // and lower 8 bits are SystemExit value. For all other exceptions, // return 1. -STATIC int handle_uncaught_exception(mp_obj_base_t *exc) { +static int handle_uncaught_exception(mp_obj_base_t *exc) { // check for SystemExit if (mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(exc->type), MP_OBJ_FROM_PTR(&mp_type_SystemExit))) { @@ -99,14 +123,12 @@ STATIC int handle_uncaught_exception(mp_obj_base_t *exc) { } #define LEX_SRC_STR (1) -#define LEX_SRC_VSTR (2) -#define LEX_SRC_FILENAME (3) #define LEX_SRC_STDIN (4) // Returns standard error codes: 0 for success, 1 for all other errors, // except if FORCED_EXIT bit is set then script raised SystemExit and the // value of the exit is in the lower 8 bits of the return value -STATIC int execute_from_lexer(int source_kind, const void *source, +static int execute_from_lexer(int source_kind, const void *source, mp_parse_input_kind_t input_kind, bool is_repl) { mp_hal_set_interrupt_char(CHAR_CTRL_C); @@ -118,19 +140,13 @@ STATIC int execute_from_lexer(int source_kind, const void *source, const char *line = source; lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, line, strlen(line), false); - } else if (source_kind == LEX_SRC_VSTR) { - const vstr_t *vstr = source; - lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, vstr->buf, - vstr->len, false); - } else if (source_kind == LEX_SRC_FILENAME) { - lex = mp_lexer_new_from_file((const char *)source); } else { // LEX_SRC_STDIN lex = mp_lexer_new_from_fd(MP_QSTR__lt_stdin_gt_, 0, false); } qstr source_name = lex->source_name; -#if MICROPY_PY___FILE__ +#if MICROPY_MODULE___FILE__ if (input_kind == MP_PARSE_FILE_INPUT) { mp_store_global(MP_QSTR___file__, MP_OBJ_NEW_QSTR(source_name)); } @@ -138,26 +154,31 @@ STATIC int execute_from_lexer(int source_kind, const void *source, mp_parse_tree_t parse_tree = mp_parse(lex, input_kind); +#if defined(MICROPY_UNIX_COVERAGE) + // allow to print the parse tree in the coverage build + if (mp_verbose_flag >= 3) { + printf("----------------\n"); + mp_parse_node_print(&mp_plat_print, parse_tree.root, 0); + printf("----------------\n"); + } +#endif + mp_obj_t module_fun = mp_compile(&parse_tree, source_name, is_repl); - if (!compile_only) { + if (!mp_compile_only) { // execute it mp_call_function_0(module_fun); - // check for pending exception - if (MP_STATE_MAIN_THREAD(mp_pending_exception) != MP_OBJ_NULL) { - mp_obj_t obj = MP_STATE_MAIN_THREAD(mp_pending_exception); - MP_STATE_MAIN_THREAD(mp_pending_exception) = MP_OBJ_NULL; - nlr_raise(obj); - } } mp_hal_set_interrupt_char(-1); + mp_handle_pending(MP_HANDLE_PENDING_CALLBACKS_AND_EXCEPTIONS); nlr_pop(); return 0; } else { // uncaught exception mp_hal_set_interrupt_char(-1); + mp_handle_pending(MP_HANDLE_PENDING_CALLBACKS_AND_CLEAR_EXCEPTIONS); return handle_uncaught_exception(nlr.ret_val); } } @@ -165,7 +186,7 @@ STATIC int execute_from_lexer(int source_kind, const void *source, #if MICROPY_USE_READLINE == 1 #include "shared/readline/readline.h" #else -STATIC char *strjoin(const char *s1, int sep_char, const char *s2) { +static char *strjoin(const char *s1, int sep_char, const char *s2) { int l1 = strlen(s1); int l2 = strlen(s2); char *s = malloc(l1 + l2 + 2); @@ -180,102 +201,41 @@ STATIC char *strjoin(const char *s1, int sep_char, const char *s2) { } #endif -STATIC int do_repl(void) { - mp_hal_stdout_tx_str("MicroPython " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE - "; " MICROPY_PY_SYS_PLATFORM - " version\nUse Ctrl-D to exit, Ctrl-E for paste mode\n"); - +static int do_repl(void) { #if MICROPY_USE_READLINE == 1 - // use MicroPython supplied readline + // use MicroPython supplied readline-based REPL - vstr_t line; - vstr_init(&line, 16); + int ret = 0; for (;;) { - mp_hal_stdio_mode_raw(); - - input_restart: - vstr_reset(&line); - int ret = readline(&line, ">>> "); - mp_parse_input_kind_t parse_input_kind = MP_PARSE_SINGLE_INPUT; - - if (ret == CHAR_CTRL_C) { - // cancel input - mp_hal_stdout_tx_str("\r\n"); - goto input_restart; - } else if (ret == CHAR_CTRL_D) { - // EOF - printf("\n"); - mp_hal_stdio_mode_orig(); - vstr_clear(&line); - return 0; - } else if (ret == CHAR_CTRL_E) { - // paste mode - mp_hal_stdout_tx_str( - "\npaste mode; Ctrl-C to cancel, Ctrl-D to finish\n=== "); - vstr_reset(&line); - for (;;) { - char c = mp_hal_stdin_rx_chr(); - if (c == CHAR_CTRL_C) { - // cancel everything - mp_hal_stdout_tx_str("\n"); - goto input_restart; - } else if (c == CHAR_CTRL_D) { - // end of input - mp_hal_stdout_tx_str("\n"); - break; - } else { - // add char to buffer and echo - vstr_add_byte(&line, c); - if (c == '\r') { - mp_hal_stdout_tx_str("\n=== "); - } else { - mp_hal_stdout_tx_strn(&c, 1); - } - } - } - parse_input_kind = MP_PARSE_FILE_INPUT; - } else if (line.len == 0) { - if (ret != 0) { - printf("\n"); + if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) { + if ((ret = pyexec_raw_repl()) != 0) { + break; } - goto input_restart; } else { - // got a line with non-zero length, see if it needs continuing - while (mp_repl_continue_with_input(vstr_null_terminated_str(&line))) { - vstr_add_byte(&line, '\n'); - ret = readline(&line, "... "); - if (ret == CHAR_CTRL_C) { - // cancel everything - printf("\n"); - goto input_restart; - } else if (ret == CHAR_CTRL_D) { - // stop entering compound statement - break; - } + if ((ret = pyexec_friendly_repl()) != 0) { + break; } } - - mp_hal_stdio_mode_orig(); - - ret = execute_from_lexer(LEX_SRC_VSTR, &line, parse_input_kind, true); - if (ret & FORCED_EXIT) { - return ret; - } } + return ret; #else // use simple readline + mp_hal_stdout_tx_str(MICROPY_BANNER_NAME_AND_VERSION); + mp_hal_stdout_tx_str("; " MICROPY_BANNER_MACHINE); + mp_hal_stdout_tx_str("\nUse Ctrl-D to exit, Ctrl-E for paste mode\n"); + for (;;) { - char *line = prompt(">>> "); + char *line = prompt((char *)mp_repl_get_ps1()); if (line == NULL) { // EOF return 0; } while (mp_repl_continue_with_input(line)) { - char *line2 = prompt("... "); + char *line2 = prompt((char *)mp_repl_get_ps2()); if (line2 == NULL) { break; } @@ -287,29 +247,65 @@ STATIC int do_repl(void) { int ret = execute_from_lexer(LEX_SRC_STR, line, MP_PARSE_SINGLE_INPUT, true); + free(line); if (ret & FORCED_EXIT) { return ret; } - free(line); } #endif } -STATIC int do_file(const char *file) { - return execute_from_lexer(LEX_SRC_FILENAME, file, MP_PARSE_FILE_INPUT, false); +static inline int convert_pyexec_result(int ret) { +#if MICROPY_PYEXEC_ENABLE_EXIT_CODE_HANDLING + // With exit code handling enabled: + // pyexec returns exit code with PYEXEC_FORCED_EXIT flag set for SystemExit + // Unix port expects: 0 for success, non-zero for error/exit + if (ret & PYEXEC_FORCED_EXIT) { + // SystemExit: extract exit code from lower bits + return ret & 0xFF; + } + // Normal execution or exception: return as-is (0 for success, 1 for + // exception) + return ret; +#else + // pyexec returns 1 for success, 0 for exception, PYEXEC_FORCED_EXIT for + // SystemExit Convert to unix port's expected codes: 0 for success, 1 for + // exception, FORCED_EXIT|val for SystemExit + if (ret == 1) { + return 0; // success + } else if (ret & PYEXEC_FORCED_EXIT) { + return ret; // SystemExit with exit value in lower 8 bits + } else { + return 1; // exception + } +#endif +} + +static int do_file(const char *file) { + return convert_pyexec_result(pyexec_file(file)); } -STATIC int do_str(const char *str) { - return execute_from_lexer(LEX_SRC_STR, str, MP_PARSE_FILE_INPUT, false); +static int do_str(const char *str) { + vstr_t vstr; + vstr.buf = (char *)str; + vstr.len = strlen(str); + int ret = pyexec_vstr(&vstr, true); + return convert_pyexec_result(ret); } -STATIC int usage(char **argv) { +static void print_help(char **argv) { printf( - "usage: %s [] [-X ] [-c ] []\n" + "usage: %s [] [-X ] [-i | -c | -m | " + "]\n" "Options:\n" "--emulator-properties : print basic emulator info and exit\n" + "--version : show version information\n" + "-h : print this help message\n" + "-i : enable REPL\n" +#if MICROPY_DEBUG_PRINTERS "-v : verbose (trace various operations); can be multiple\n" +#endif "-O[N] : apply bytecode optimizations of level N\n" "\n" "Implementation specific options (-X):\n", @@ -334,21 +330,34 @@ STATIC int usage(char **argv) { if (impl_opts_cnt == 0) { printf(" (none)\n"); } +} +static int invalid_args(void) { + fprintf(stderr, "Invalid command line arguments. Use -h option for help.\n"); return 1; } // Process options which set interpreter init options -STATIC void pre_process_options(int argc, char **argv) { +static void pre_process_options(int argc, char **argv) { for (int a = 1; a < argc; a++) { if (argv[a][0] == '-') { + if (strcmp(argv[a], "-h") == 0) { + print_help(argv); + exit(0); + } + if (strcmp(argv[a], "--version") == 0) { + printf("%s (trezor-core %d.%d.%d.%d); %s\n", + MICROPY_BANNER_NAME_AND_VERSION, VERSION_MAJOR, VERSION_MINOR, + VERSION_PATCH, VERSION_BUILD, MICROPY_BANNER_MACHINE); + exit(0); + } if (strcmp(argv[a], "-X") == 0) { if (a + 1 >= argc) { - exit(usage(argv)); + exit(invalid_args()); } if (0) { } else if (strcmp(argv[a + 1], "compile-only") == 0) { - compile_only = true; + mp_compile_only = true; } else if (strcmp(argv[a + 1], "emit=bytecode") == 0) { emit_opt = MP_EMIT_OPT_BYTECODE; #if MICROPY_EMIT_NATIVE @@ -394,8 +403,7 @@ STATIC void pre_process_options(int argc, char **argv) { #endif } else { invalid_arg: - printf("Invalid option\n"); - exit(usage(argv)); + exit(invalid_args()); } a++; } @@ -403,12 +411,27 @@ STATIC void pre_process_options(int argc, char **argv) { } } -STATIC void set_sys_argv(char *argv[], int argc, int start_arg) { +static void set_sys_argv(char *argv[], int argc, int start_arg) { for (int i = start_arg; i < argc; i++) { mp_obj_list_append(mp_sys_argv, MP_OBJ_NEW_QSTR(qstr_from_str(argv[i]))); } } +#if MICROPY_PY_SYS_EXECUTABLE +extern mp_obj_str_t mp_sys_executable_obj; +static char *executable_path = NULL; + +static void sys_set_excecutable(char *argv0) { + if (executable_path == NULL) { + executable_path = realpath(argv0, NULL); + } + if (executable_path != NULL) { + mp_obj_str_set_data(&mp_sys_executable_obj, (byte *)executable_path, + strlen(executable_path)); + } +} +#endif + #ifdef _WIN32 #define PATHLIST_SEP_CHAR ';' #else @@ -417,7 +440,7 @@ STATIC void set_sys_argv(char *argv[], int argc, int start_arg) { static int do_import_module(const char *modname) { mp_obj_t import_args[4]; - import_args[0] = mp_obj_new_str(modname, strlen(modname)); + import_args[0] = mp_obj_new_str_from_cstr(modname); import_args[1] = import_args[2] = mp_const_none; // Ask __import__ to handle imported module specially - set its __name__ // to __main__, and also return this leaf module, not top-level package @@ -433,16 +456,22 @@ static int do_import_module(const char *modname) { bool subpkg_tried = false; reimport: + mp_hal_set_interrupt_char(CHAR_CTRL_C); if (nlr_push(&nlr) == 0) { mod = mp_builtin___import__(MP_ARRAY_SIZE(import_args), import_args); + mp_hal_set_interrupt_char(-1); + mp_handle_pending(MP_HANDLE_PENDING_CALLBACKS_AND_EXCEPTIONS); nlr_pop(); } else { // uncaught exception + mp_hal_set_interrupt_char(-1); + mp_handle_pending(MP_HANDLE_PENDING_CALLBACKS_AND_CLEAR_EXCEPTIONS); exit(handle_uncaught_exception(nlr.ret_val) & 0xff); } + // If this module is a package, see if it has a `__main__.py`. mp_obj_t dest[2]; - mp_load_method_maybe(mod, MP_QSTR___path__, dest); + mp_load_method_protected(mod, MP_QSTR___path__, dest, true); if (dest[0] != MP_OBJ_NULL && !subpkg_tried) { subpkg_tried = true; vstr_t vstr; @@ -450,7 +479,7 @@ static int do_import_module(const char *modname) { vstr_init(&vstr, len + sizeof(".__main__")); vstr_add_strn(&vstr, modname, len); vstr_add_strn(&vstr, ".__main__", sizeof(".__main__") - 1); - import_args[0] = mp_obj_new_str_from_vstr(&mp_type_str, &vstr); + import_args[0] = mp_obj_new_str_from_vstr(&vstr); goto reimport; } @@ -482,13 +511,25 @@ MP_NOINLINE int main_(int argc, char **argv) { signal(SIGPIPE, SIG_IGN); #endif - mp_stack_set_limit(600000 * (sizeof(void *) / 4)); - pre_process_options(argc, argv); #if MICROPY_ENABLE_GC +#if !MICROPY_GC_SPLIT_HEAP char *heap = malloc(heap_size); gc_init(heap, heap + heap_size); +#else + assert(MICROPY_GC_SPLIT_HEAP_N_HEAPS > 0); + char *heaps[MICROPY_GC_SPLIT_HEAP_N_HEAPS]; + long multi_heap_size = heap_size / MICROPY_GC_SPLIT_HEAP_N_HEAPS; + for (size_t i = 0; i < MICROPY_GC_SPLIT_HEAP_N_HEAPS; i++) { + heaps[i] = malloc(multi_heap_size); + if (i == 0) { + gc_init(heaps[i], heaps[i] + multi_heap_size); + } else { + gc_add(heaps[i], heaps[i] + multi_heap_size); + } + } +#endif #endif #if MICROPY_ENABLE_PYSTACK @@ -498,72 +539,101 @@ MP_NOINLINE int main_(int argc, char **argv) { mp_init(); +#if MICROPY_EMIT_NATIVE + // Set default emitter options + MP_STATE_VM(default_emit_opt) = emit_opt; +#else + (void)emit_opt; +#endif + #if MICROPY_ENABLE_COMPILER && MICROPY_ENABLE_SOURCE_LINE // include source lines on non-frozen builds MP_STATE_VM(include_source_lines) = true; #endif - char *home = getenv("HOME"); - char *path = getenv("MICROPYPATH"); - if (path == NULL) { +// do not let frozen emulator import live files +#ifndef TREZOR_EMULATOR_FROZEN +#if MICROPY_VFS_POSIX + { + // Mount the host FS at the root of our internal VFS + mp_obj_t args[2] = { + MP_OBJ_TYPE_GET_SLOT(&mp_type_vfs_posix, make_new)(&mp_type_vfs_posix, + 0, 0, NULL), + MP_OBJ_NEW_QSTR(MP_QSTR__slash_), + }; + mp_vfs_mount(2, args, (mp_map_t *)&mp_const_empty_map); + + // Make sure the root that was just mounted is the current VFS (it's always + // at the end of the linked list). Can't use chdir('/') because that will + // change the current path within the VfsPosix object. + MP_STATE_VM(vfs_cur) = MP_STATE_VM(vfs_mount_table); + while (MP_STATE_VM(vfs_cur)->next != NULL) { + MP_STATE_VM(vfs_cur) = MP_STATE_VM(vfs_cur)->next; + } + } +#endif +#endif + + { + // sys.path starts as [""] + mp_sys_path = mp_obj_new_list(0, NULL); + mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR_)); + + // Add colon-separated entries from MICROPYPATH. + char *home = getenv("HOME"); + char *path = getenv("MICROPYPATH"); + if (path == NULL) { #ifdef MICROPY_PY_SYS_PATH_DEFAULT - path = MICROPY_PY_SYS_PATH_DEFAULT; + path = MICROPY_PY_SYS_PATH_DEFAULT; #else - path = ".frozen"; + path = ".frozen"; #endif - } - size_t path_num = 1; // [0] is for current dir (or base dir of the script) - if (*path == ':') { - path_num++; - } - for (char *p = path; p != NULL; p = strchr(p, PATHLIST_SEP_CHAR)) { - path_num++; - if (p != NULL) { - p++; } - } - mp_obj_list_init(MP_OBJ_TO_PTR(mp_sys_path), path_num); - mp_obj_t *path_items; - mp_obj_list_get(mp_sys_path, &path_num, &path_items); - path_items[0] = MP_OBJ_NEW_QSTR(MP_QSTR_); - { - char *p = path; - for (mp_uint_t i = 1; i < path_num; i++) { - char *p1 = strchr(p, PATHLIST_SEP_CHAR); - if (p1 == NULL) { - p1 = p + strlen(p); + if (*path == PATHLIST_SEP_CHAR) { + // First entry is empty. We've already added an empty entry to sys.path, + // so skip it. + ++path; + } + // GCC targeting RISC-V 64 reports a warning about `path_remaining` being + // clobbered by either setjmp or vfork if that variable it is allocated on + // the stack. This may probably be a compiler error as it occurs on a few + // recent GCC releases (up to 14.1.0) but LLVM doesn't report any warnings. + static bool path_remaining; + path_remaining = *path; + while (path_remaining) { + char *path_entry_end = strchr(path, PATHLIST_SEP_CHAR); + if (path_entry_end == NULL) { + path_entry_end = path + strlen(path); + path_remaining = false; } - if (p[0] == '~' && p[1] == '/' && home != NULL) { + if (path[0] == '~' && path[1] == '/' && home != NULL) { // Expand standalone ~ to $HOME int home_l = strlen(home); vstr_t vstr; - vstr_init(&vstr, home_l + (p1 - p - 1) + 1); + vstr_init(&vstr, home_l + (path_entry_end - path - 1) + 1); vstr_add_strn(&vstr, home, home_l); - vstr_add_strn(&vstr, p + 1, p1 - p - 1); - path_items[i] = mp_obj_new_str_from_vstr(&mp_type_str, &vstr); + vstr_add_strn(&vstr, path + 1, path_entry_end - path - 1); + mp_obj_list_append(mp_sys_path, mp_obj_new_str_from_vstr(&vstr)); } else { - path_items[i] = mp_obj_new_str_via_qstr(p, p1 - p); + mp_obj_list_append( + mp_sys_path, mp_obj_new_str_via_qstr(path, path_entry_end - path)); } - p = p1 + 1; + path = path_entry_end + 1; } } mp_obj_list_init(MP_OBJ_TO_PTR(mp_sys_argv), 0); - // Here is some example code to create a class and instance of that class. - // First is the Python, then the C code. - // - // class TestClass: - // pass - // test_obj = TestClass() - // test_obj.attr = 42 - // - // mp_obj_t test_class_type, test_class_instance; - // test_class_type = mp_obj_new_type(QSTR_FROM_STR_STATIC("TestClass"), - // mp_const_empty_tuple, mp_obj_new_dict(0)); - // mp_store_name(QSTR_FROM_STR_STATIC("test_obj"), test_class_instance = - // mp_call_function_0(test_class_type)); mp_store_attr(test_class_instance, - // QSTR_FROM_STR_STATIC("attr"), mp_obj_new_int(42)); +#if defined(MICROPY_UNIX_COVERAGE) + { + MP_DECLARE_CONST_FUN_OBJ_0(extra_coverage_obj); + MP_DECLARE_CONST_FUN_OBJ_0(extra_cpp_coverage_obj); + mp_store_global(MP_QSTR_extra_coverage, + MP_OBJ_FROM_PTR(&extra_coverage_obj)); + mp_store_global(MP_QSTR_extra_cpp_coverage, + MP_OBJ_FROM_PTR(&extra_cpp_coverage_obj)); + } +#endif /* printf("bytes:\n"); @@ -572,6 +642,10 @@ MP_NOINLINE int main_(int argc, char **argv) { printf(" peak %d\n", m_get_peak_bytes_allocated()); */ +#if MICROPY_PY_SYS_EXECUTABLE + sys_set_excecutable(argv[0]); +#endif + const int NOTHING_EXECUTED = -2; int ret = NOTHING_EXECUTED; bool inspect = false; @@ -583,7 +657,7 @@ MP_NOINLINE int main_(int argc, char **argv) { inspect = true; } else if (strcmp(argv[a], "-c") == 0) { if (a + 1 >= argc) { - return usage(argv); + return invalid_args(); } ret = do_str(argv[a + 1]); if (ret & FORCED_EXIT) { @@ -592,7 +666,7 @@ MP_NOINLINE int main_(int argc, char **argv) { a += 1; } else if (strcmp(argv[a], "-m") == 0) { if (a + 1 >= argc) { - return usage(argv); + return invalid_args(); } default_import = false; set_sys_argv(argv, argc, a + 1); @@ -613,24 +687,23 @@ MP_NOINLINE int main_(int argc, char **argv) { p++, MP_STATE_VM(mp_optimise_value)++); } } else { - return usage(argv); + return invalid_args(); } } else { - char *pathbuf = malloc(PATH_MAX); - char *basedir = realpath(argv[a], pathbuf); + char *basedir = realpath(argv[a], NULL); if (basedir == NULL) { mp_printf(&mp_stderr_print, "%s: can't open file '%s': [Errno %d] %s\n", argv[0], argv[a], errno, strerror(errno)); // CPython exits with 2 in such case ret = 2; - free(pathbuf); break; } - // Set base dir of the script as first entry in sys.path + // Set base dir of the script as first entry in sys.path. char *p = strrchr(basedir, '/'); - path_items[0] = mp_obj_new_str_via_qstr(basedir, p - basedir); - free(pathbuf); + mp_obj_list_store(mp_sys_path, MP_OBJ_NEW_SMALL_INT(0), + mp_obj_new_str_via_qstr(basedir, p - basedir)); + free(basedir); set_sys_argv(argv, argc, a); ret = do_file(argv[a]); @@ -642,8 +715,12 @@ MP_NOINLINE int main_(int argc, char **argv) { ret = do_import_module("main"); } + const char *inspect_env = getenv("MICROPYINSPECT"); + if (inspect_env && inspect_env[0] != '\0') { + inspect = true; + } if (ret == NOTHING_EXECUTED || inspect) { - if (isatty(0)) { + if (isatty(0) || inspect) { prompt_read_history(); ret = do_repl(); prompt_write_history(); @@ -674,12 +751,36 @@ MP_NOINLINE int main_(int argc, char **argv) { } #endif +#if MICROPY_PY_BLUETOOTH + int mp_bluetooth_deinit(void); + mp_bluetooth_deinit(); +#endif + +#if MICROPY_PY_THREAD + mp_thread_deinit(); +#endif + +#if defined(MICROPY_UNIX_COVERAGE) + gc_sweep_all(); +#endif + mp_deinit(); #if MICROPY_ENABLE_GC && !defined(NDEBUG) - // We don't really need to free memory since we are about to exit the - // process, but doing so helps to find memory leaks. +// We don't really need to free memory since we are about to exit the +// process, but doing so helps to find memory leaks. +#if !MICROPY_GC_SPLIT_HEAP free(heap); +#else + for (size_t i = 0; i < MICROPY_GC_SPLIT_HEAP_N_HEAPS; i++) { + free(heaps[i]); + } +#endif +#endif + +#if MICROPY_PY_SYS_EXECUTABLE && !defined(NDEBUG) + // Again, make memory leak detector happy + free(executable_path); #endif // printf("total bytes = %d\n", m_get_total_bytes_allocated()); @@ -690,61 +791,43 @@ int coreapp_emu(int argc, char **argv) { #if MICROPY_PY_THREAD mp_thread_init(); #endif + + // Define a reasonable stack limit to detect stack overflow. + mp_uint_t stack_size = 600000 * UNIX_STACK_MULTIPLIER; + // We should capture stack top ASAP after start, and it should be // captured guaranteedly before any other stack variables are allocated. // For this, actual main (renamed main_) should not be inlined into // this function. main_() itself may have other functions inlined (with // their own stack variables), that's why we need this main/main_ split. - mp_stack_ctrl_init(); + mp_cstack_init_with_sp_here(stack_size); return main_(argc, argv); } -#if !MICROPY_VFS - -#ifdef TREZOR_EMULATOR_FROZEN -mp_import_stat_t mp_import_stat(const char *path) { - return MP_IMPORT_STAT_NO_EXIST; -} -#else -mp_import_stat_t mp_import_stat(const char *path) { - struct stat st; - if (stat(path, &st) == 0) { - if (S_ISDIR(st.st_mode)) { - return MP_IMPORT_STAT_DIR; - } else if (S_ISREG(st.st_mode)) { - return MP_IMPORT_STAT_FILE; - } - } - return MP_IMPORT_STAT_NO_EXIST; -} +void nlr_jump_fail(void *val) { +#if MICROPY_USE_READLINE == 1 + mp_hal_stdio_mode_orig(); #endif - -#if MICROPY_PY_IO -// Factory function for I/O stream classes, only needed if generic VFS subsystem -// isn't used. Note: buffering and encoding are currently ignored. -mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *pos_args, - mp_map_t *kwargs) { - enum { ARG_file, ARG_mode }; - STATIC const mp_arg_t allowed_args[] = { - {MP_QSTR_file, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_rom_obj = MP_ROM_NONE}}, - {MP_QSTR_mode, MP_ARG_OBJ, {.u_obj = MP_OBJ_NEW_QSTR(MP_QSTR_r)}}, - {MP_QSTR_buffering, MP_ARG_INT, {.u_int = -1}}, - {MP_QSTR_encoding, MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE}}, - }; - mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; - mp_arg_parse_all(n_args, pos_args, kwargs, MP_ARRAY_SIZE(allowed_args), - allowed_args, args); - return mp_vfs_posix_file_open(&mp_type_textio, args[ARG_file].u_obj, - args[ARG_mode].u_obj); + fprintf(stderr, "FATAL: uncaught NLR %p\n", val); + exit(1); } -MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open); -#endif -#endif +#if MICROPY_VFS_ROM_IOCTL -void nlr_jump_fail(void *val) { - printf("FATAL: uncaught NLR %p\n", val); - exit(1); +static uint8_t romfs_buf[4] = {0xd2, 0xcd, 0x31, 0x00}; // empty ROMFS +static const MP_DEFINE_MEMORYVIEW_OBJ(romfs_obj, 'B', 0, sizeof(romfs_buf), + romfs_buf); + +mp_obj_t mp_vfs_rom_ioctl(size_t n_args, const mp_obj_t *args) { + switch (mp_obj_get_int(args[0])) { + case MP_VFS_ROM_IOCTL_GET_NUMBER_OF_SEGMENTS: + return MP_OBJ_NEW_SMALL_INT(1); + + case MP_VFS_ROM_IOCTL_GET_SEGMENT: + return MP_OBJ_FROM_PTR(&romfs_obj); + } + + return MP_OBJ_NEW_SMALL_INT(-MP_EINVAL); } -MP_REGISTER_MODULE(MP_QSTR_uos, mp_module_uos); +#endif diff --git a/core/embed/projects/unix/mpconfigport.h b/core/embed/projects/unix/mpconfigport.h index 18e5e9bd924..ff066ddfce8 100644 --- a/core/embed/projects/unix/mpconfigport.h +++ b/core/embed/projects/unix/mpconfigport.h @@ -71,7 +71,7 @@ #define MICROPY_CONFIG_ROM_LEVEL (MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES) // Python internal features -#define MICROPY_READER_VFS (0) +#define MICROPY_READER_VFS (1) #define MICROPY_ENABLE_GC (1) #define MICROPY_ENABLE_FINALISER (1) #define MICROPY_STACK_CHECK (1) @@ -88,19 +88,21 @@ #define MICROPY_ENABLE_SOURCE_LINE (1) #endif #define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_FLOAT) +#define MICROPY_TIME_SUPPORT_Y2100_AND_BEYOND (1) #define MICROPY_STREAMS_NON_BLOCK (1) -#define MICROPY_MODULE_WEAK_LINKS (0) #define MICROPY_CAN_OVERRIDE_BUILTINS (0) -#define MICROPY_VFS_POSIX_FILE (1) +#define MICROPY_VFS_POSIX (1) #define MICROPY_USE_INTERNAL_ERRNO (0) +#define MICROPY_PYEXEC_ENABLE_EXIT_CODE_HANDLING (1) #define MICROPY_ENABLE_SCHEDULER (0) #define MICROPY_SCHEDULER_DEPTH (0) -#define MICROPY_VFS (0) +#define MICROPY_VFS (1) // control over Python builtins #define MICROPY_PY_FUNCTION_ATTRS (1) #define MICROPY_PY_DESCRIPTORS (0) #define MICROPY_PY_DELATTR_SETATTR (0) +#define MICROPY_PY_BUILTINS_BYTES_HEX (1) #define MICROPY_PY_BUILTINS_STR_UNICODE (1) #define MICROPY_PY_BUILTINS_STR_CENTER (0) #define MICROPY_PY_BUILTINS_STR_PARTITION (1) @@ -139,43 +141,41 @@ #define MICROPY_PY_SYS_STDFILES (0) #define MICROPY_PY_SYS_STDIO_BUFFER (0) #define MICROPY_PY_SYS_PLATFORM "trezor-emulator" -#define MICROPY_PY_UERRNO (0) +#define MICROPY_PY_ERRNO (0) #define MICROPY_PY_THREAD (0) #define MICROPY_PY_FSTRINGS (1) // extended modules #define MICROPY_PY_UCTYPES (!BITCOIN_ONLY) // used in FIDO -#define MICROPY_PY_UZLIB (0) -#define MICROPY_PY_UJSON (0) -#define MICROPY_PY_UOS (1) -#define MICROPY_PY_UOS_INCLUDEFILE "ports/unix/moduos.c" -#define MICROPY_PY_UOS_ERRNO (1) -#define MICROPY_PY_UOS_GETENV_PUTENV_UNSETENV (1) -#define MICROPY_PY_UOS_SEP (1) -#define MICROPY_PY_UOS_SYSTEM (1) -#define MICROPY_PY_UOS_URANDOM (1) -#define MICROPY_PY_URE (0) -#define MICROPY_PY_URE_SUB (0) -#define MICROPY_PY_UHEAPQ (0) -#define MICROPY_PY_UHASHLIB (0) -#define MICROPY_PY_UHASHLIB_MD5 (0) -#define MICROPY_PY_UHASHLIB_SHA1 (0) -#define MICROPY_PY_UCRYPTOLIB (0) -#define MICROPY_PY_UBINASCII (1) -#define MICROPY_PY_UBINASCII_CRC32 (0) -#define MICROPY_PY_URANDOM (0) -#define MICROPY_PY_URANDOM_EXTRA_FUNCS (0) -#define MICROPY_PY_USELECT (0) -#define MICROPY_PY_UTIMEQ (1) -#define MICROPY_PY_UTIME (1) -#define MICROPY_PY_UTIME_MP_HAL (1) +#define MICROPY_PY_DEFLATE (0) +#define MICROPY_PY_JSON (0) +#define MICROPY_PY_OS (1) +#define MICROPY_PY_OS_INCLUDEFILE "ports/unix/modos.c" +#define MICROPY_PY_OS_ERRNO (1) +#define MICROPY_PY_OS_GETENV_PUTENV_UNSETENV (1) +#define MICROPY_PY_OS_SEP (1) +#define MICROPY_PY_OS_SYSTEM (1) +#define MICROPY_PY_OS_URANDOM (1) +#define MICROPY_PY_RE (0) +#define MICROPY_PY_RE_SUB (0) +#define MICROPY_PY_HEAPQ (0) +#define MICROPY_PY_HASHLIB (0) +#define MICROPY_PY_HASHLIB_MD5 (0) +#define MICROPY_PY_HASHLIB_SHA1 (0) +#define MICROPY_PY_CRYPTOLIB (0) +#define MICROPY_PY_BINASCII (0) +#define MICROPY_PY_BINASCII_CRC32 (0) +#define MICROPY_PY_RANDOM (0) +#define MICROPY_PY_RANDOM_EXTRA_FUNCS (0) +#define MICROPY_PY_SELECT (0) +#define MICROPY_PY_TIME (1) #define MICROPY_PY_OS_DUPTERM (0) #define MICROPY_PY_LWIP_SOCK_RAW (0) #define MICROPY_PY_MACHINE (0) -#define MICROPY_PY_UWEBSOCKET (0) +#define MICROPY_PY_WEBSOCKET (0) #define MICROPY_PY_WEBREPL (0) #define MICROPY_PY_FRAMEBUF (0) -#define MICROPY_PY_USOCKET (0) +#define MICROPY_PY_SOCKET (0) #define MICROPY_PY_NETWORK (0) // allocate traceback data only on debug builds @@ -230,7 +230,8 @@ extern const struct _mp_print_t mp_stderr_print; // by default contains nearest git tag, which may not be present in shallow // repo, breaking reproducibility -#define MICROPY_BANNER_NAME_AND_VERSION "" +#define MICROPY_BANNER_NAME_AND_VERSION "MicroPython" +#define MICROPY_BANNER_MACHINE "unix" // ============= this ends common config section =================== @@ -250,13 +251,6 @@ typedef unsigned int mp_uint_t; // must be pointer size #endif #endif -#define MICROPY_EVENT_POLL_HOOK \ - do { \ - extern void mp_handle_pending(bool); \ - mp_handle_pending(true); \ - mp_hal_delay_us(500); \ - } while (0); - // Cannot include , as it may lead to symbol name clashes #if _FILE_OFFSET_BITS == 64 && !defined(__LP64__) typedef long long mp_off_t; @@ -284,11 +278,6 @@ void mp_unix_mark_exec(void); // with EINTR, updates remaining timeout value. #define MICROPY_SELECT_REMAINING_TIME (1) -#define MICROPY_PORT_ROOT_POINTERS \ - const char *readline_hist[50]; \ - void *mmap_region_head; \ - mp_obj_t trezorconfig_ui_wait_callback; \ - // We need to provide a declaration/definition of alloca() // unless support for it is disabled. #if !defined(MICROPY_NO_ALLOCA) || MICROPY_NO_ALLOCA == 0 diff --git a/core/embed/rust/build.rs b/core/embed/rust/build.rs index 0d04b957ecb..57f1da49bff 100644 --- a/core/embed/rust/build.rs +++ b/core/embed/rust/build.rs @@ -40,10 +40,19 @@ fn generate_micropython_bindings(lib: &mut CLibrary) -> Result<()> { lib.add_rust_bindings_ex("micropython", |builder| { Ok(builder .header("micropython.h") + // Needed to call header statics like mp_obj_list_set_len. See also upymod/build.rs. + .wrap_static_fns(true) + //.wrap_static_fns_path(PathBuf::from(out_dir.clone()).join("bindgen-static")) // obj .new_type_alias("mp_obj_t") .allowlist_type("mp_obj_type_t") .allowlist_type("mp_obj_base_t") + .allowlist_type("mp_obj_full_type_t") + .allowlist_type("mp_attr_fun_t") + .allowlist_type("mp_call_fun_t") + .allowlist_type("mp_make_new_fun_t") + .allowlist_type("mp_print_fun_t") + .allowlist_type("mp_buffer_fun_t") .allowlist_function("mp_obj_new_int") .allowlist_function("mp_obj_new_int_from_ll") .allowlist_function("mp_obj_new_int_from_ull") @@ -58,6 +67,7 @@ fn generate_micropython_bindings(lib: &mut CLibrary) -> Result<()> { .allowlist_function("mp_call_function_n_kw") .allowlist_function("trezor_obj_get_ll_checked") .allowlist_function("trezor_obj_str_from_rom_text") + .allowlist_var("MP_TYPE_FLAG_NONE") // buffer .allowlist_function("mp_obj_new_slice") .allowlist_function("mp_obj_subscr") @@ -216,6 +226,7 @@ fn generate_trezorhal_bindings(lib: &mut CLibrary) -> Result<()> { .allowlist_function("gfx_mono8_blend_mono4") .allowlist_function("gfx_bitblt_wait") // uzlib + .allowlist_type("uzlib_uncomp_t") .allowlist_function("uzlib_uncompress_init") .allowlist_function("uzlib_uncompress") // bip39 diff --git a/core/embed/rust/librust.h b/core/embed/rust/librust.h index fb46c75aab8..706a2c06ad6 100644 --- a/core/embed/rust/librust.h +++ b/core/embed/rust/librust.h @@ -7,21 +7,21 @@ mp_obj_t protobuf_debug_msg_type(); mp_obj_t protobuf_debug_msg_def_type(); #endif -extern mp_obj_module_t mp_module_trezorproto; -extern mp_obj_module_t mp_module_trezorui_api; -extern mp_obj_module_t mp_module_trezortranslate; -extern mp_obj_module_t mp_module_trezorble; -extern mp_obj_module_t mp_module_trezorthp; +extern const mp_obj_module_t mp_module_trezorproto; +extern const mp_obj_module_t mp_module_trezorui_api; +extern const mp_obj_module_t mp_module_trezortranslate; +extern const mp_obj_module_t mp_module_trezorble; +extern const mp_obj_module_t mp_module_trezorthp; #ifdef USE_DBG_CONSOLE -extern mp_obj_module_t mp_module_trezorlog; +extern const mp_obj_module_t mp_module_trezorlog; #endif #if !PYOPT mp_obj_t ui_debug_layout_type(); #ifdef TREZOR_EMULATOR -extern mp_obj_module_t mp_module_coveragedata; +extern const mp_obj_module_t mp_module_coveragedata; #endif #endif diff --git a/core/embed/rust/micropython.h b/core/embed/rust/micropython.h index 8fe33f6b2f2..6951690d174 100644 --- a/core/embed/rust/micropython.h +++ b/core/embed/rust/micropython.h @@ -2,6 +2,7 @@ #include "py/mphal.h" #include "py/nlr.h" #include "py/obj.h" +#include "py/objlist.h" #include "py/objstr.h" #include "py/runtime.h" diff --git a/core/embed/rust/src/micropython/exception.rs b/core/embed/rust/src/micropython/exception.rs index ba5ce494732..02369708b27 100644 --- a/core/embed/rust/src/micropython/exception.rs +++ b/core/embed/rust/src/micropython/exception.rs @@ -3,7 +3,7 @@ use super::ffi; use super::obj::Obj; use super::qstr::Qstr; -use super::typ::Type; +use super::typ::{FullType, Type}; pub const AttributeError: &Type = unsafe { &ffi::mp_type_AttributeError }; pub const EOFError: &Type = unsafe { &ffi::mp_type_EOFError }; @@ -17,7 +17,7 @@ pub const RuntimeError: &Type = unsafe { &ffi::mp_type_RuntimeError }; pub const TypeError: &Type = unsafe { &ffi::mp_type_TypeError }; pub const ValueError: &Type = unsafe { &ffi::mp_type_ValueError }; -pub const fn define_exception(name: Qstr, parent: &Type) -> Type { +pub const fn define_exception(name: Qstr, parent: &Type) -> FullType { obj_type! { name: name, make_new_fn: ffi::mp_obj_exception_make_new, diff --git a/core/embed/rust/src/micropython/macros.rs b/core/embed/rust/src/micropython/macros.rs index a8415270275..75dde3627ed 100644 --- a/core/embed/rust/src/micropython/macros.rs +++ b/core/embed/rust/src/micropython/macros.rs @@ -118,72 +118,102 @@ macro_rules! obj_type { $(print_fn: $print_fn:path,)? $(parent: $parent:path,)? ) => {{ - #[allow(unused_unsafe)] - unsafe { - use $crate::micropython::ffi; + use $crate::micropython::ffi; - let name = $name.to_u16(); + let name = $name.to_u16(); - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut base_type: &'static ffi::mp_obj_type_t = &ffi::mp_type_type; - $(base_type = &$base;)? + #[allow(unused_mut)] + #[allow(unused_assignments)] + // SAFETY: micropython ffi + let mut base_type: &'static ffi::mp_obj_type_t = unsafe { &ffi::mp_type_type }; + $(base_type = &$base;)? - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut attr: ffi::mp_attr_fun_t = None; - $(attr = Some($attr_fn);)? + #[allow(unused_mut)] + #[allow(unused_assignments)] + let mut attr: ffi::mp_attr_fun_t = None; + $(attr = Some($attr_fn);)? - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut call: ffi::mp_call_fun_t = None; - $(call = Some($call_fn);)? + #[allow(unused_mut)] + #[allow(unused_assignments)] + let mut call: ffi::mp_call_fun_t = None; + $(call = Some($call_fn);)? - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut make_new: ffi::mp_make_new_fun_t = None; - $(make_new = Some($make_new_fn);)? + #[allow(unused_mut)] + #[allow(unused_assignments)] + let mut make_new: ffi::mp_make_new_fun_t = None; + $(make_new = Some($make_new_fn);)? - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut print: ffi::mp_print_fun_t = None; - $(print = Some($print_fn);)? + #[allow(unused_mut)] + #[allow(unused_assignments)] + let mut print: ffi::mp_print_fun_t = None; + $(print = Some($print_fn);)? - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut parent: *const cty::c_void = ::core::ptr::null_mut(); - $(parent = $parent as *const _ as *mut _;)? + #[allow(unused_mut)] + #[allow(unused_assignments)] + let mut parent: Option<&ffi::mp_obj_type_t> = None; + $(parent = Some($parent);)? - // TODO: This is safe only if we pass in `Dict` with fixed `Map` (created by - // `Map::fixed()`, usually through `obj_map!`), because only then will - // MicroPython treat `locals_dict` as immutable, and make the mutable cast safe. - #[allow(unused_mut)] - #[allow(unused_assignments)] - let mut locals_dict = ::core::ptr::null_mut(); - $(locals_dict = $locals as *const _ as *mut _;)? + // TODO: This is safe only if we pass in `Dict` with fixed `Map` (created by + // `Map::fixed()`, usually through `obj_map!`), because only then will + // MicroPython treat `locals_dict` as immutable, and make the mutable cast safe. + #[allow(unused_mut)] + #[allow(unused_assignments)] + let mut locals_dict: Option<&ffi::mp_obj_dict_t> = None; + $(locals_dict = Some($locals);)? - ffi::mp_obj_type_t { - base: ffi::mp_obj_base_t { - type_: base_type, - }, - flags: 0, - name, - print, - make_new, - call, - unary_op: None, - binary_op: None, - attr, - subscr: None, - getiter: None, - iternext: None, - buffer_p: ffi::mp_buffer_p_t { get_buffer: None }, - protocol: ::core::ptr::null(), - parent, - locals_dict, - } + const fn slot(val: &Option, num: u8) -> u8 { + if val.is_some() { num } else { 0 } + } + + ffi::mp_obj_full_type_t { + base: ffi::mp_obj_base_t { + type_: base_type, + }, + flags: ffi::MP_TYPE_FLAG_NONE as u16, + name, + + slot_index_make_new: slot(&make_new, 1), + slot_index_print: slot(&print, 2), + slot_index_call: slot(&call, 3), + slot_index_unary_op: 0, + slot_index_binary_op: 0, + slot_index_attr: slot(&attr, 4), + slot_index_subscr: 0, + slot_index_iter: 0, + slot_index_buffer: 0, + slot_index_protocol: 0, + slot_index_parent: slot(&parent, 5), + slot_index_locals_dict: slot(&locals_dict, 6), + + slots: [ + obj_type!(@cast_fn make_new), + obj_type!(@cast_fn print), + obj_type!(@cast_fn call), + obj_type!(@cast_fn attr), + obj_type!(@cast_ref parent), + obj_type!(@cast_ref locals_dict), + ::core::ptr::null(), + ::core::ptr::null(), + ::core::ptr::null(), + ::core::ptr::null(), + ::core::ptr::null(), + ], } }}; + // Option => *const cty::c_void + (@cast_fn $e:expr) => { + match $e { + None => ::core::ptr::null(), + Some(x) => x as *const cty::c_void, + } + }; + // Option<&T> => *const cty::c_void + (@cast_ref $e:expr) => { + match $e { + None => ::core::ptr::null(), + Some(x) => x as *const _ as *const cty::c_void, + } + }; } /// Construct an upymod definition. diff --git a/core/embed/rust/src/micropython/simple_type.rs b/core/embed/rust/src/micropython/simple_type.rs index a348ab8055e..5d0480a2518 100644 --- a/core/embed/rust/src/micropython/simple_type.rs +++ b/core/embed/rust/src/micropython/simple_type.rs @@ -1,5 +1,5 @@ use super::obj::{Obj, ObjBase}; -use super::typ::Type; +use super::typ::FullType; /// Simple MicroPython object type builder. /// @@ -24,9 +24,11 @@ pub struct SimpleTypeObj { } impl SimpleTypeObj { - pub const fn new(base: &'static Type) -> Self { + // base would ideally be something like impl Into<&'static Type> but we don't + // have const traits and it's currently only used with FullType anyway + pub const fn new(base: &'static FullType) -> Self { Self { - base: base.as_base(), + base: base.as_type().as_base(), } } diff --git a/core/embed/rust/src/micropython/typ.rs b/core/embed/rust/src/micropython/typ.rs index dee138fb4bc..95ee34374f2 100644 --- a/core/embed/rust/src/micropython/typ.rs +++ b/core/embed/rust/src/micropython/typ.rs @@ -1,3 +1,5 @@ +use core::ops::Deref; + use super::ffi; use super::obj::{Obj, ObjBase}; @@ -33,3 +35,31 @@ impl Type { // SAFETY: We are in a single-threaded environment. unsafe impl Sync for Type {} + +/// Since Type has variable size due to its slots array, functions that +/// construct type objects return this which is a Type with the maximum number +/// of slots. +pub type FullType = ffi::mp_obj_full_type_t; + +impl FullType { + pub const fn as_type(&self) -> &Type { + let type_ptr = self as *const Self as *const ffi::mp_obj_type_t; + // SAFETY: + // - aligned, non-null, and dereferanceable because it came from a reference + // - pointee is valid because the initial part of FullType has the same layout + // as Type + // - aliasing the same as source reference + unsafe { type_ptr.as_ref_unchecked() } + } +} + +impl Deref for FullType { + type Target = Type; + + fn deref(&self) -> &Type { + self.as_type() + } +} + +// SAFETY: We are in a single-threaded environment. +unsafe impl Sync for FullType {} diff --git a/core/embed/rust/src/protobuf/obj.rs b/core/embed/rust/src/protobuf/obj.rs index edadbc53159..7d272c53557 100644 --- a/core/embed/rust/src/protobuf/obj.rs +++ b/core/embed/rust/src/protobuf/obj.rs @@ -11,7 +11,7 @@ use crate::micropython::map::Map; use crate::micropython::module::Module; use crate::micropython::obj::{Obj, ObjBase}; use crate::micropython::qstr::Qstr; -use crate::micropython::typ::Type; +use crate::micropython::typ::{FullType, Type}; use crate::micropython::{ffi, util}; #[repr(C)] @@ -45,7 +45,7 @@ impl MsgObj { } fn obj_type() -> &'static Type { - static TYPE: Type = obj_type! { + static TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_Msg, attr_fn: msg_obj_attr, }; @@ -165,7 +165,7 @@ impl MsgDefObj { } fn obj_type() -> &'static Type { - static TYPE: Type = obj_type! { + static TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_MsgDef, attr_fn: msg_def_obj_attr, call_fn: msg_def_obj_call, diff --git a/core/embed/rust/src/thp/micropython.rs b/core/embed/rust/src/thp/micropython.rs index 3dfd8be5b19..53347a38146 100644 --- a/core/embed/rust/src/thp/micropython.rs +++ b/core/embed/rust/src/thp/micropython.rs @@ -13,7 +13,7 @@ use crate::micropython::module::Module; use crate::micropython::obj::Obj; use crate::micropython::qstr::Qstr; use crate::micropython::simple_type::SimpleTypeObj; -use crate::micropython::typ::Type; +use crate::micropython::typ::FullType; use crate::micropython::{exception, util}; extern "C" fn thp_init(iface_num: Obj, device_properties: Obj) -> Obj { @@ -303,15 +303,15 @@ extern "C" fn thp_handshake_key(iface_num: Obj, local_static_privkey: Obj) -> Ob } #[allow(non_upper_case_globals)] -pub static ThpError: Type = +pub static ThpError: FullType = exception::define_exception(Qstr::MP_QSTR_ThpError, exception::Exception); -static FAILED_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_FAILED, }; -static KEY_REQUIRED_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_KEY_REQUIRED, }; -static KEY_REQUIRED_UNLOCK_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_KEY_REQUIRED_UNLOCK, }; -static MESSAGE_READY_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_MESSAGE_READY, }; -static ACK_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_ACK, }; -static MESSAGE_READY_ACK_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_MESSAGE_READY_ACK, }; +static FAILED_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_FAILED, }; +static KEY_REQUIRED_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_KEY_REQUIRED, }; +static KEY_REQUIRED_UNLOCK_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_KEY_REQUIRED_UNLOCK, }; +static MESSAGE_READY_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_MESSAGE_READY, }; +static ACK_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_ACK, }; +static MESSAGE_READY_ACK_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_MESSAGE_READY_ACK, }; pub static FAILED_OBJ: SimpleTypeObj = SimpleTypeObj::new(&FAILED_TYPE); pub static KEY_REQUIRED_OBJ: SimpleTypeObj = SimpleTypeObj::new(&KEY_REQUIRED_TYPE); @@ -359,7 +359,7 @@ pub static mp_module_trezorthp: Module = obj_module! { Qstr::MP_QSTR___name__ => Qstr::MP_QSTR_trezorthp.to_obj(), /// ThpError: type[Exception] - Qstr::MP_QSTR_ThpError => ThpError.as_obj(), + Qstr::MP_QSTR_ThpError => ThpError.as_type().as_obj(), /// MESSAGE_READY: object Qstr::MP_QSTR_MESSAGE_READY => MESSAGE_READY_OBJ.as_obj(), diff --git a/core/embed/rust/src/translations/obj.rs b/core/embed/rust/src/translations/obj.rs index 5c18d5c96b2..33cadf94680 100644 --- a/core/embed/rust/src/translations/obj.rs +++ b/core/embed/rust/src/translations/obj.rs @@ -10,7 +10,7 @@ use crate::micropython::module::Module; use crate::micropython::obj::Obj; use crate::micropython::qstr::Qstr; use crate::micropython::simple_type::SimpleTypeObj; -use crate::micropython::typ::Type; +use crate::micropython::typ::FullType; use crate::micropython::{ffi, util}; use crate::trezorhal::translations; @@ -37,7 +37,7 @@ unsafe extern "C" fn tr_attr_fn(_self_in: Obj, attr: ffi::qstr, dest: *mut Obj) unsafe { util::try_or_raise(block) } } -static TR_TYPE: Type = obj_type! { +static TR_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_TR, attr_fn: tr_attr_fn, }; @@ -85,7 +85,7 @@ pub extern "C" fn translations_header_from_flash(_cls_in: Obj) -> Obj { unsafe { util::try_or_raise(block) } } -static TRANSLATIONS_HEADER_TYPE: Type = obj_type! { +static TRANSLATIONS_HEADER_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_TranslationsHeader, locals: &obj_dict!(obj_map! { Qstr::MP_QSTR_load_from_flash => obj_fn_1!(translations_header_from_flash).as_obj(), diff --git a/core/embed/rust/src/trezorhal/ble/micropython.rs b/core/embed/rust/src/trezorhal/ble/micropython.rs index 7bbc55b51c6..49748d66c47 100644 --- a/core/embed/rust/src/trezorhal/ble/micropython.rs +++ b/core/embed/rust/src/trezorhal/ble/micropython.rs @@ -9,7 +9,7 @@ use crate::micropython::module::Module; use crate::micropython::obj::Obj; use crate::micropython::qstr::Qstr; use crate::micropython::simple_type::SimpleTypeObj; -use crate::micropython::typ::Type; +use crate::micropython::typ::FullType; use crate::micropython::util; extern "C" fn py_erase_bonds() -> Obj { @@ -261,7 +261,7 @@ extern "C" fn py_iface_read(n_args: usize, args: *const Obj) -> Obj { unsafe { util::try_with_args_and_kwargs(n_args, args, &Map::EMPTY, block) } } -static BLE_INTERFACE_TYPE: Type = obj_type! { +static BLE_INTERFACE_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_BLEIF, locals: &obj_dict!(obj_map! { Qstr::MP_QSTR_iface_num => obj_fn_1!(py_iface_num).as_obj(), diff --git a/core/embed/rust/src/trezorhal/uzlib.rs b/core/embed/rust/src/trezorhal/uzlib.rs index 89770c9e600..0f0ebe8559a 100644 --- a/core/embed/rust/src/trezorhal/uzlib.rs +++ b/core/embed/rust/src/trezorhal/uzlib.rs @@ -1,67 +1,19 @@ use core::cell::RefCell; use core::marker::PhantomData; use core::mem::MaybeUninit; -use core::ptr; use super::ffi; use crate::io::BinaryData; pub const UZLIB_WINDOW_SIZE: usize = 1 << 10; -pub use ffi::uzlib_uncomp; +pub use ffi::uzlib_uncomp_t; -impl Default for ffi::uzlib_uncomp { +impl Default for ffi::uzlib_uncomp_t { fn default() -> Self { unsafe { MaybeUninit::::zeroed().assume_init() } } } -pub struct UzlibContext<'a> { - uncomp: ffi::uzlib_uncomp, - src_data: PhantomData<&'a [u8]>, -} - -impl<'a> UzlibContext<'a> { - pub fn new(src: &'a [u8], window: Option<&'a mut [u8; UZLIB_WINDOW_SIZE]>) -> Self { - let mut ctx = Self { - uncomp: uzlib_uncomp::default(), - src_data: PhantomData, - }; - - unsafe { - ctx.uncomp.source = src.as_ptr(); - ctx.uncomp.source_limit = src.as_ptr().add(src.len()); - - if let Some(w) = window { - ffi::uzlib_uncompress_init( - &mut ctx.uncomp, - w.as_mut_ptr() as _, - UZLIB_WINDOW_SIZE as u32, - ); - } else { - ffi::uzlib_uncompress_init(&mut ctx.uncomp, ptr::null_mut(), 0); - } - } - - ctx - } - - /// Returns `Ok(true)` if all data was read. - pub fn uncompress(&mut self, dest_buf: &mut [u8]) -> Result { - unsafe { - self.uncomp.dest = dest_buf.as_mut_ptr(); - self.uncomp.dest_limit = self.uncomp.dest.add(dest_buf.len()); - - let res = ffi::uzlib_uncompress(&mut self.uncomp); - - match res { - 0 => Ok(false), - 1 => Ok(true), - _ => Err(()), - } - } - } -} - struct SourceReadContext<'a> { /// Compressed data data: BinaryData<'a>, @@ -86,7 +38,7 @@ impl<'a> SourceReadContext<'a> { } /// Fill the uncomp struct with the appropriate pointers to the source data - pub fn prepare_uncomp(&self, uncomp: &mut ffi::uzlib_uncomp) { + pub fn prepare_uncomp(&self, uncomp: &mut ffi::uzlib_uncomp_t) { // SAFETY: the offsets are within the buffer bounds. // - buf_head is either 0 or advanced by uzlib to at most buf_tail (via // advance()) @@ -104,7 +56,7 @@ impl<'a> SourceReadContext<'a> { /// The operation is only valid on an uncomp struct that has been filled via /// `prepare_uncomp` and the source pointer has been updated by the uzlib /// library after a single uncompress operation. - pub unsafe fn advance(&mut self, uncomp: &ffi::uzlib_uncomp) { + pub unsafe fn advance(&mut self, uncomp: &ffi::uzlib_uncomp_t) { unsafe { // SAFETY: we trust uzlib to move the `source` pointer only up to `source_limit` self.buf_head = uncomp.source.offset_from(self.buf.as_ptr()) as usize; @@ -116,7 +68,7 @@ impl<'a> SourceReadContext<'a> { /// If the uncomp buffer is exhausted, a callback is invoked that should (a) /// read one byte of data, and optionally (b) update the uncomp buffer /// with more data. - pub fn reader_callback(&mut self, uncomp: &mut ffi::uzlib_uncomp) -> Option { + pub fn reader_callback(&mut self, uncomp: &mut ffi::uzlib_uncomp_t) -> Option { // fill the internal buffer first let bytes_read = self.data.read(self.offset, self.buf.as_mut()); self.buf_head = 0; @@ -142,7 +94,7 @@ pub struct ZlibInflate<'a> { /// Compressed data reader data: RefCell>, /// Uzlib context - uncomp: ffi::uzlib_uncomp, + uncomp: ffi::uzlib_uncomp_t, window: PhantomData<&'a [u8]>, } @@ -158,7 +110,7 @@ impl<'a> ZlibInflate<'a> { ) -> Self { let mut inflate = Self { data: RefCell::new(SourceReadContext::new(data, offset)), - uncomp: uzlib_uncomp::default(), + uncomp: uzlib_uncomp_t::default(), window: PhantomData, }; @@ -185,6 +137,7 @@ impl<'a> ZlibInflate<'a> { self.uncomp.source_read_cb = Some(zlib_reader_callback); // Context for the source data callback self.uncomp.source_read_cb_context = &self.data as *const _ as *mut cty::c_void; + self.uncomp.source_read_data = &self.uncomp as *const _ as *mut cty::c_void; // Destination buffer self.uncomp.dest = dest.as_mut_ptr(); @@ -205,6 +158,7 @@ impl<'a> ZlibInflate<'a> { // Clear the source read callback (just for safety) self.uncomp.source_read_cb_context = core::ptr::null_mut(); + self.uncomp.source_read_data = core::ptr::null_mut(); match res { 0 => Ok(false), @@ -230,7 +184,8 @@ impl<'a> ZlibInflate<'a> { /// This function is called by the uzlib library to read more data from the /// input stream. -unsafe extern "C" fn zlib_reader_callback(uncomp: *mut ffi::uzlib_uncomp) -> i32 { +unsafe extern "C" fn zlib_reader_callback(arg: *mut cty::c_void) -> i32 { + let uncomp = arg as *mut ffi::uzlib_uncomp_t; // SAFETY: we assume that passed-in uncomp is not null and that we own it // exclusively (ensured by passing it as &mut into uzlib_uncompress()) let uncomp = unwrap!(unsafe { uncomp.as_mut() }); diff --git a/core/embed/rust/src/ui/backlight.rs b/core/embed/rust/src/ui/backlight.rs index d5415c6a729..65ddf80591d 100644 --- a/core/embed/rust/src/ui/backlight.rs +++ b/core/embed/rust/src/ui/backlight.rs @@ -3,7 +3,7 @@ use crate::micropython::macros::obj_type; use crate::micropython::obj::Obj; use crate::micropython::qstr::Qstr; use crate::micropython::simple_type::SimpleTypeObj; -use crate::micropython::typ::Type; +use crate::micropython::typ::FullType; use crate::micropython::{ffi, util}; use crate::ui::{CommonUI, ModelUI}; @@ -16,7 +16,7 @@ use crate::ui::{CommonUI, ModelUI}; * things stay forever. Written in May 2024.) */ -static BACKLIGHT_LEVELS_TYPE: Type = obj_type! { +static BACKLIGHT_LEVELS_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_BacklightLevels, attr_fn: backlight_levels_attr, }; diff --git a/core/embed/rust/src/ui/geometry.rs b/core/embed/rust/src/ui/geometry.rs index 76489623782..cc5eebb8583 100644 --- a/core/embed/rust/src/ui/geometry.rs +++ b/core/embed/rust/src/ui/geometry.rs @@ -373,7 +373,7 @@ impl Rect { /// Checks if the rectangle is empty. /// - /// It is possible to custruct a rectangle with negative width or height. + /// It is possible to construct a rectangle with negative width or height. /// All such rectangles are considered as empty. pub const fn is_empty(&self) -> bool { self.x0 >= self.x1 || self.y0 >= self.y1 diff --git a/core/embed/rust/src/ui/layout/base.rs b/core/embed/rust/src/ui/layout/base.rs index d42c0de98dd..833add7a35a 100644 --- a/core/embed/rust/src/ui/layout/base.rs +++ b/core/embed/rust/src/ui/layout/base.rs @@ -25,26 +25,26 @@ mod micropython { use crate::micropython::obj::Obj; use crate::micropython::qstr::Qstr; use crate::micropython::simple_type::SimpleTypeObj; - use crate::micropython::typ::Type; + use crate::micropython::typ::FullType; - static STATE_INITIAL_TYPE: Type = obj_type! { + static STATE_INITIAL_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_INITIAL, - base: LAYOUT_STATE_TYPE, + base: LAYOUT_STATE_TYPE.as_type(), }; - static STATE_ATTACHED_TYPE: Type = obj_type! { + static STATE_ATTACHED_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_ATTACHED, - base: LAYOUT_STATE_TYPE, + base: LAYOUT_STATE_TYPE.as_type(), }; - static STATE_TRANSITIONING_TYPE: Type = obj_type! { + static STATE_TRANSITIONING_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_TRANSITIONING, - base: LAYOUT_STATE_TYPE, + base: LAYOUT_STATE_TYPE.as_type(), }; - static STATE_DONE_TYPE: Type = obj_type! { + static STATE_DONE_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_DONE, - base: LAYOUT_STATE_TYPE, + base: LAYOUT_STATE_TYPE.as_type(), }; pub static STATE_INITIAL: SimpleTypeObj = SimpleTypeObj::new(&STATE_INITIAL_TYPE); @@ -52,7 +52,7 @@ mod micropython { pub static STATE_TRANSITIONING: SimpleTypeObj = SimpleTypeObj::new(&STATE_TRANSITIONING_TYPE); pub static STATE_DONE: SimpleTypeObj = SimpleTypeObj::new(&STATE_DONE_TYPE); - static LAYOUT_STATE_TYPE: Type = obj_type! { + static LAYOUT_STATE_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_LayoutState, locals: &obj_dict! { obj_map! { Qstr::MP_QSTR_INITIAL => STATE_INITIAL.as_obj(), diff --git a/core/embed/rust/src/ui/layout/device_menu_result.rs b/core/embed/rust/src/ui/layout/device_menu_result.rs index a31471e6d1b..d0d48449993 100644 --- a/core/embed/rust/src/ui/layout/device_menu_result.rs +++ b/core/embed/rust/src/ui/layout/device_menu_result.rs @@ -3,7 +3,7 @@ use crate::micropython::macros::obj_type; use crate::micropython::obj::Obj; use crate::micropython::qstr::Qstr; use crate::micropython::simple_type::SimpleTypeObj; -use crate::micropython::typ::Type; +use crate::micropython::typ::FullType; use crate::micropython::{ffi, util}; #[derive(Copy, Clone)] @@ -87,7 +87,7 @@ impl DeviceMenuMsg { } // Create a DeviceMenuResult class that contains all result types -static DEVICE_MENU_RESULT_TYPE: Type = obj_type! { +static DEVICE_MENU_RESULT_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_DeviceMenuResult, attr_fn: device_menu_result_attr, }; diff --git a/core/embed/rust/src/ui/layout/obj.rs b/core/embed/rust/src/ui/layout/obj.rs index 09eb58528ca..94e57bebf17 100644 --- a/core/embed/rust/src/ui/layout/obj.rs +++ b/core/embed/rust/src/ui/layout/obj.rs @@ -19,7 +19,7 @@ use crate::micropython::map::Map; use crate::micropython::obj::{Obj, ObjBase}; use crate::micropython::qstr::Qstr; use crate::micropython::simple_type::SimpleTypeObj; -use crate::micropython::typ::Type; +use crate::micropython::typ::{FullType, Type}; use crate::micropython::util; use crate::time::Duration; use crate::ui::button_request::ButtonRequest; @@ -70,7 +70,7 @@ impl AttachType { } } -static ATTACH_TYPE: Type = obj_type! { +static ATTACH_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_AttachType, locals: &obj_dict!(obj_map! { Qstr::MP_QSTR_INITIAL => Obj::small_int(0u16), @@ -395,7 +395,7 @@ impl LayoutObj { } fn obj_type() -> &'static Type { - static TYPE: Type = obj_type! { + static TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_LayoutObj, locals: &obj_dict!(obj_map! { Qstr::MP_QSTR_attach_timer_fn => obj_fn_3!(ui_layout_attach_timer_fn).as_obj(), diff --git a/core/embed/rust/src/ui/layout/result.rs b/core/embed/rust/src/ui/layout/result.rs index 4e3f470c7f8..bec286d35de 100644 --- a/core/embed/rust/src/ui/layout/result.rs +++ b/core/embed/rust/src/ui/layout/result.rs @@ -1,12 +1,12 @@ use crate::micropython::macros::obj_type; use crate::micropython::qstr::Qstr; use crate::micropython::simple_type::SimpleTypeObj; -use crate::micropython::typ::Type; +use crate::micropython::typ::FullType; -static CONFIRMED_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_CONFIRMED, }; -static CANCELLED_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_CANCELLED, }; -static BACK_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_BACK, }; -static INFO_TYPE: Type = obj_type! { name: Qstr::MP_QSTR_INFO, }; +static CONFIRMED_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_CONFIRMED, }; +static CANCELLED_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_CANCELLED, }; +static BACK_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_BACK, }; +static INFO_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_INFO, }; pub static CONFIRMED: SimpleTypeObj = SimpleTypeObj::new(&CONFIRMED_TYPE); pub static CANCELLED: SimpleTypeObj = SimpleTypeObj::new(&CANCELLED_TYPE); diff --git a/core/embed/rust/src/ui/notification.rs b/core/embed/rust/src/ui/notification.rs index 53eb66cf43f..dfc6fcd03b1 100644 --- a/core/embed/rust/src/ui/notification.rs +++ b/core/embed/rust/src/ui/notification.rs @@ -5,7 +5,7 @@ use crate::micropython::{ obj::Obj, qstr::Qstr, simple_type::SimpleTypeObj, - typ::Type, + typ::FullType, }; use crate::strutil::TString; @@ -67,7 +67,7 @@ impl TryFrom for NotificationLevel { } #[cfg(feature = "micropython")] -static NOTIFICATION_LEVEL_TYPE: Type = obj_type! { +static NOTIFICATION_LEVEL_TYPE: FullType = obj_type! { name: Qstr::MP_QSTR_NotificationLevel, locals: &obj_dict!(obj_map! { Qstr::MP_QSTR_ALERT => Obj::small_int(0), diff --git a/core/embed/sec/image/stm32/boot_image.c b/core/embed/sec/image/stm32/boot_image.c index b3e100f141d..5c530dbdeb6 100644 --- a/core/embed/sec/image/stm32/boot_image.c +++ b/core/embed/sec/image/stm32/boot_image.c @@ -56,10 +56,10 @@ _Static_assert( BOOTLOADER_MAXSIZE <= IMAGE_CHUNK_SIZE, "BOOTLOADER_MAXSIZE must be less than or equal to IMAGE_CHUNK_SIZE"); -static void uzlib_prepare(struct uzlib_uncomp *decomp, uint8_t *window, +static void uzlib_prepare(uzlib_uncomp_t *decomp, uint8_t *window, const void *src, uint32_t srcsize, void *dest, uint32_t destsize) { - memzero(decomp, sizeof(struct uzlib_uncomp)); + memzero(decomp, sizeof(uzlib_uncomp_t)); if (window) { memzero(window, UZLIB_WINDOW_SIZE); } @@ -100,14 +100,14 @@ void boot_image_replace(const boot_image_t *image) { mpu_mode_t mode = mpu_reconfig(MPU_MODE_BOOTLOADER); - struct uzlib_uncomp decomp = {0}; + uzlib_uncomp_t decomp = {0}; uint8_t decomp_window[UZLIB_WINDOW_SIZE] = {0}; uint32_t decomp_out[IMAGE_HEADER_SIZE / sizeof(uint32_t)] = {0}; uzlib_prepare(&decomp, decomp_window, image->image_ptr, image->image_size, decomp_out, sizeof(decomp_out)); - ensure((uzlib_uncompress(&decomp) == TINF_OK) ? sectrue : secfalse, + ensure((uzlib_uncompress(&decomp) == UZLIB_OK) ? sectrue : secfalse, "Bootloader header decompression failed"); const image_header *new_bld_hdr = read_image_header( @@ -154,7 +154,7 @@ void boot_image_replace(const boot_image_t *image) { error_shutdown("Invalid bootloader contents"); } - memset(&decomp, 0, sizeof(struct uzlib_uncomp)); + memset(&decomp, 0, sizeof(uzlib_uncomp_t)); // cannot find valid header for current bootloader, something is wrong ensure(current_bld_hdr == (const image_header *)bl_data ? sectrue : secfalse, @@ -193,7 +193,7 @@ void boot_image_replace(const boot_image_t *image) { uzlib_prepare(&decomp, decomp_window, image->image_ptr, image->image_size, decomp_out, sizeof(decomp_out)); - ensure((uzlib_uncompress(&decomp) == TINF_OK) ? sectrue : secfalse, + ensure((uzlib_uncompress(&decomp) == UZLIB_OK) ? sectrue : secfalse, "Bootloader decompression failed"); do { diff --git a/core/embed/upymod/bindgen-static.c b/core/embed/upymod/bindgen-static.c new file mode 100644 index 00000000000..c23ca715d51 --- /dev/null +++ b/core/embed/upymod/bindgen-static.c @@ -0,0 +1,11 @@ +#include "py/obj.h" +#include "py/objlist.h" + +// Static wrappers + +void mp_obj_list_get__extern(mp_obj_t self_in, size_t *len, mp_obj_t **items) { + mp_obj_list_get(self_in, len, items); +} +void mp_obj_list_set_len__extern(mp_obj_t self_in, size_t len) { + mp_obj_list_set_len(self_in, len); +} diff --git a/core/embed/upymod/build.rs b/core/embed/upymod/build.rs index 3b231c3c827..850ec3655f4 100644 --- a/core/embed/upymod/build.rs +++ b/core/embed/upymod/build.rs @@ -18,7 +18,8 @@ fn main() -> Result<()> { if cfg!(feature = "emulator") { // There are two mpconfigport.h files in both ports/unix and projects/unix. - // The first one has precedence and is used for compilation. + // The first one has precedence and is used for compilation. We need mphalport.h + // from the other. lib.add_include("../projects/unix"); lib.add_include(PathBuf::from(mpy_dir).join("ports/unix")); } else if cfg!(feature = "mcu_stm32") { @@ -85,9 +86,7 @@ fn main() -> Result<()> { lib.add_private_define("MICROPY_OOM_CALLBACK", Some("0")); } else { lib.add_define("PYOPT", Some("0")); - // This is needed to compile modtrezorutils-meminfo.h that - // calls STATIC functions in other modules - lib.add_private_defines([("STATIC", Some("")), ("MICROPY_OOM_CALLBACK", Some("1"))]); + lib.add_private_define("MICROPY_OOM_CALLBACK", Some("1")); } // TODO: remove this hack (causing cyclic dependence) by moving micropython @@ -95,6 +94,10 @@ fn main() -> Result<()> { lib.add_private_include("../rust"); lib.add_sources([ + // Wrappers for micropython static/inline header functions that are called from rust. + // Currently needs to be updated manually even though it's generated by bindgen. + "bindgen-static.c", + "modtimeq.c", "modutime.c", "rustmods.c", "trezorobj.c", @@ -116,23 +119,11 @@ fn main() -> Result<()> { lib.add_sources_in_dir_with_attrs(mpy_dir, ["py/gc.c", "py/pystack.c", "py/vm.c"], attrs); - // silence warning about unterminated string literals - // TODO: remove this after we upgrade MicroPython - let attrs_silence_unterminated = - xbuild::CompileAttrs::new().with_flag("-Wno-unterminated-string-initialization"); - lib.add_sources_in_dir_with_attrs( - mpy_dir, - ["extmod/moductypes.c"], - Some(attrs_silence_unterminated), - ); - lib.add_sources_in_dir( mpy_dir, [ - "extmod/modubinascii.c", - "extmod/moduheapq.c", - "extmod/modutimeq.c", - "extmod/utime_mphal.c", + "extmod/modtime.c", + "extmod/moductypes.c", "shared/timeutils/timeutils.c", "py/argcheck.c", "py/asmarm.c", @@ -147,13 +138,13 @@ fn main() -> Result<()> { "py/builtinhelp.c", "py/builtinimport.c", "py/compile.c", + "py/cstack.c", "py/emitbc.c", "py/emitcommon.c", "py/emitglue.c", "py/emitinlinethumb.c", "py/formatfloat.c", "py/frozenmod.c", - "py/lexer.c", "py/malloc.c", "py/map.c", "py/modarray.c", @@ -166,8 +157,6 @@ fn main() -> Result<()> { "py/modmicropython.c", "py/modstruct.c", "py/modsys.c", - "py/modthread.c", - "py/moduerrno.c", "py/mpprint.c", "py/mpstate.c", "py/mpz.c", @@ -179,6 +168,7 @@ fn main() -> Result<()> { "py/objboundmeth.c", "py/objcell.c", "py/objclosure.c", + "py/objcode.c", "py/objcomplex.c", "py/objdeque.c", "py/objdict.c", @@ -217,7 +207,6 @@ fn main() -> Result<()> { "py/parsenumbase.c", "py/persistentcode.c", "py/qstr.c", - "py/reader.c", "py/repl.c", "py/runtime.c", "py/runtime_utils.c", @@ -235,28 +224,25 @@ fn main() -> Result<()> { ); if cfg!(feature = "emulator") { - lib.add_defines([("MP_CONFIGFILE", Some("\"mpconfigport.h\""))]); - if cfg!(feature = "frozen") { lib.add_define("TREZOR_EMULATOR_FROZEN", None); } - // TODO: refactor modtrezorutils-meminfo.h to avoid this - // - // The hack is needed to compile modtrezorutils-meminfo.h that - // calls STATIC functions in other modules - lib.add_private_define("STATIC", Some("")); - lib.add_sources_in_dir( mpy_dir, [ + "extmod/vfs.c", + "extmod/vfs_posix.c", "extmod/vfs_posix_file.c", - "extmod/moduos.c", + "extmod/vfs_reader.c", + "extmod/modos.c", + "extmod/modvfs.c", "py/emitnarm.c", "py/emitnative.c", "py/emitnthumb.c", "py/emitnx64.c", "py/emitnx86.c", + "py/lexer.c", "py/nlr.c", "py/nlraarch64.c", "py/nlrsetjmp.c", @@ -264,11 +250,13 @@ fn main() -> Result<()> { "py/nlrx64.c", "py/nlrx86.c", "py/profile.c", + "py/reader.c", "ports/unix/alloc.c", "ports/unix/gccollect.c", "ports/unix/input.c", "ports/unix/unix_mphal.c", "shared/runtime/gchelper_generic.c", + "shared/runtime/pyexec.c", "shared/readline/readline.c", ], ); @@ -285,7 +273,7 @@ fn main() -> Result<()> { "shared/runtime/interrupt_char.c", "shared/runtime/pyexec.c", "shared/runtime/stdout_helpers.c", - // "shared/runtime/gchelper_m3.s", // This file is added later + // "shared/runtime/gchelper_thumb2.s", // This file is added later ], ); } else { @@ -314,7 +302,7 @@ fn main() -> Result<()> { if cfg!(not(feature = "emulator")) { // This file must not be preprocessed in MpyBuilder so it is added here // after the build_genhdr step - lib.add_sources_in_dir(mpy_dir, ["shared/runtime/gchelper_m3.s"]); + lib.add_sources_in_dir(mpy_dir, ["shared/runtime/gchelper_thumb2.s"]); } Ok(()) @@ -507,6 +495,14 @@ impl<'a> MpyBuilder<'a> { // can be included directly in firmware. self.build_compressed_data(&compressed_collected)?; + // Extract all MP_REGISTER_ROOT_POINTER(...); statements from preprocessed + // .upydef files and store them in root_pointers.collected.h. + let root_pointers_collected = self.build_root_pointers_collected(&upydefs)?; + + // Run make_root_pointers.py on root_pointers.collected.h to generate + // root_pointers.h that micropython uses in the definition of `mp_state_vm_t`. + self.build_root_pointers_data(&root_pointers_collected)?; + // Generate protobuf blobs based on .proto for Rust code. self.build_protobuf_blobs(&qstr_generated)?; @@ -635,7 +631,7 @@ impl<'a> MpyBuilder<'a> { let output = self.genhdr_dir.join("moduledefs.collected.h"); let mut cmd = std::process::Command::new("sh"); cmd.arg("-c") - .arg(r#"out="$1"; shift; grep '^MP_REGISTER_MODULE' "$@" > "$out""#) + .arg(r#"out="$1"; shift; grep -E '^MP_REGISTER(_EXTENSIBLE)?_MODULE' "$@" > "$out""#) .arg("sh") .arg(&output) .args(upydef_files); @@ -779,6 +775,35 @@ impl<'a> MpyBuilder<'a> { Ok(output) } + fn build_root_pointers_collected(&self, upydef_files: &[PathBuf]) -> Result { + let output = self.genhdr_dir.join("root_pointers.collected.h"); + let mut cmd = std::process::Command::new("sh"); + cmd + .arg("-c") + .arg(r#"out="$1"; shift; cat "$@" | sed -nr 's/.*(MP_REGISTER_ROOT_POINTER\(.*\);).*/\1/p' > "$out""#) + .arg("sh") + .arg(&output) + .args(upydef_files); + + let inputs = upydef_files.iter().collect::>(); + xbuild::run_command(&mut cmd, &inputs, [&output]) + .context("Failed to build root_pointers collected")?; + + Ok(output) + } + + fn build_root_pointers_data(&self, root_pointers_collected: &Path) -> Result { + let mut cmd = std::process::Command::new("python3"); + let tool = self.mpy_dir.join("py/make_root_pointers.py"); + cmd.arg(&tool).arg(root_pointers_collected); + + let output = self.genhdr_dir.join("root_pointers.h"); + let inputs = [tool, root_pointers_collected.to_path_buf()]; + xbuild::run_command_to_file(&mut cmd, &inputs, &output) + .context("Failed to build root_pointers data")?; + Ok(output) + } + fn build_mpy_cross(&self) -> Result { // Here we build `mpy-cross` by calling make directly, so dependency // tracking is left entirely to the makefiles in the mpy-cross source. @@ -789,7 +814,6 @@ impl<'a> MpyBuilder<'a> { // Build mpy-cross in the folder common for all models and targets. let build_dir = xbuild::cargo_target_dir()?.join("mpy-cross"); - let mpy_cross = build_dir.join("mpy-cross"); let source_dir = self.mpy_dir.join("mpy-cross"); let mpycross_include = self.crate_dir.join("mpycross_include"); @@ -799,7 +823,6 @@ impl<'a> MpyBuilder<'a> { cmd.args(["-j", ¶llel_job_count.to_string()]) .args(["-C", &source_dir.to_string_lossy()]) .arg(format!("BUILD={}", &build_dir.to_string_lossy())) - .arg(format!("PROG={}", &mpy_cross.to_string_lossy())) .env("INC", format!("-I{}", &mpycross_include.to_string_lossy())); let cmd_output = cmd @@ -811,7 +834,7 @@ impl<'a> MpyBuilder<'a> { bail!(xbuild::format_command_error(&cmd, &cmd_output)); } - Ok(mpy_cross) + Ok(build_dir.join("mpy-cross")) } fn build_frozen_modules(&self, qstr_preprocessed: &Path) -> Result { diff --git a/core/embed/upymod/modtimeq.c b/core/embed/upymod/modtimeq.c new file mode 100644 index 00000000000..c5a680b45a2 --- /dev/null +++ b/core/embed/upymod/modtimeq.c @@ -0,0 +1,267 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2014 Damien P. George + * Copyright (c) 2016-2017 Paul Sokolovsky + * Copyright (c) 2018 Jan Pochyla + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// copy of extmod/modtimeq.c from last commit before removal - +// 8211d56712301d58970904892da5312b11b2ab7c, plus discard method by +// jpochyla@gmail.com + +#include + +#include "py/objlist.h" +#include "py/runtime.h" +#include "py/smallint.h" + +#define MODULO MICROPY_PY_TIME_TICKS_PERIOD + +#define DEBUG 0 + +// the algorithm here is modelled on CPython's heapq.py + +struct qentry { + mp_uint_t time; + mp_uint_t id; + mp_obj_t callback; + mp_obj_t args; +}; + +typedef struct _mp_obj_timeq_t { + mp_obj_base_t base; + mp_uint_t alloc; + mp_uint_t len; + struct qentry items[]; +} mp_obj_timeq_t; + +static mp_uint_t timeq_id; + +static mp_obj_timeq_t *timeq_get_heap(mp_obj_t heap_in) { + return MP_OBJ_TO_PTR(heap_in); +} + +static bool time_less_than(struct qentry *item, struct qentry *parent) { + mp_uint_t item_tm = item->time; + mp_uint_t parent_tm = parent->time; + mp_uint_t res = parent_tm - item_tm; + if (res == 0) { + // TODO: This actually should use the same "ring" logic + // as for time, to avoid artifacts when id's overflow. + return item->id < parent->id; + } + if ((mp_int_t)res < 0) { + res += MODULO; + } + return res && res < (MODULO / 2); +} + +static mp_obj_t timeq_make_new(const mp_obj_type_t *type, size_t n_args, + size_t n_kw, const mp_obj_t *args) { + mp_arg_check_num(n_args, n_kw, 1, 1, false); + mp_uint_t alloc = mp_obj_get_int(args[0]); + mp_obj_timeq_t *o = + mp_obj_malloc_var(mp_obj_timeq_t, items, struct qentry, alloc, type); + memset(o->items, 0, sizeof(*o->items) * alloc); + o->alloc = alloc; + o->len = 0; + return MP_OBJ_FROM_PTR(o); +} + +static void timeq_heap_siftdown(mp_obj_timeq_t *heap, mp_uint_t start_pos, + mp_uint_t pos) { + struct qentry item = heap->items[pos]; + while (pos > start_pos) { + mp_uint_t parent_pos = (pos - 1) >> 1; + struct qentry *parent = &heap->items[parent_pos]; + bool lessthan = time_less_than(&item, parent); + if (lessthan) { + heap->items[pos] = *parent; + pos = parent_pos; + } else { + break; + } + } + heap->items[pos] = item; +} + +static void timeq_heap_siftup(mp_obj_timeq_t *heap, mp_uint_t pos) { + mp_uint_t start_pos = pos; + mp_uint_t end_pos = heap->len; + struct qentry item = heap->items[pos]; + for (mp_uint_t child_pos = 2 * pos + 1; child_pos < end_pos; + child_pos = 2 * pos + 1) { + // choose right child if it's <= left child + if (child_pos + 1 < end_pos) { + bool lessthan = + time_less_than(&heap->items[child_pos], &heap->items[child_pos + 1]); + if (!lessthan) { + child_pos += 1; + } + } + // bubble up the smaller child + heap->items[pos] = heap->items[child_pos]; + pos = child_pos; + } + heap->items[pos] = item; + timeq_heap_siftdown(heap, start_pos, pos); +} + +static mp_obj_t mod_timeq_heappush(size_t n_args, const mp_obj_t *args) { + (void)n_args; + mp_obj_t heap_in = args[0]; + mp_obj_timeq_t *heap = timeq_get_heap(heap_in); + if (heap->len == heap->alloc) { + mp_raise_msg(&mp_type_IndexError, MP_ERROR_TEXT("queue overflow")); + } + mp_uint_t l = heap->len; + heap->items[l].time = MP_OBJ_SMALL_INT_VALUE(args[1]); + heap->items[l].id = timeq_id++; + heap->items[l].callback = args[2]; + heap->items[l].args = args[3]; + timeq_heap_siftdown(heap, 0, heap->len); + heap->len++; + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_timeq_heappush_obj, 4, 4, + mod_timeq_heappush); + +static mp_obj_t mod_timeq_heappop(mp_obj_t heap_in, mp_obj_t list_ref) { + mp_obj_timeq_t *heap = timeq_get_heap(heap_in); + if (heap->len == 0) { + mp_raise_msg(&mp_type_IndexError, MP_ERROR_TEXT("empty heap")); + } + mp_obj_list_t *ret = MP_OBJ_TO_PTR(list_ref); + if (!mp_obj_is_type(list_ref, &mp_type_list) || ret->len < 3) { + mp_raise_TypeError(NULL); + } + + struct qentry *item = &heap->items[0]; + ret->items[0] = MP_OBJ_NEW_SMALL_INT(item->time); + ret->items[1] = item->callback; + ret->items[2] = item->args; + heap->len -= 1; + heap->items[0] = heap->items[heap->len]; + heap->items[heap->len].callback = + MP_OBJ_NULL; // so we don't retain a pointer + heap->items[heap->len].args = MP_OBJ_NULL; + if (heap->len) { + timeq_heap_siftup(heap, 0); + } + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_2(mod_timeq_heappop_obj, mod_timeq_heappop); + +static mp_obj_t mod_timeq_peektime(mp_obj_t heap_in) { + mp_obj_timeq_t *heap = timeq_get_heap(heap_in); + if (heap->len == 0) { + mp_raise_msg(&mp_type_IndexError, MP_ERROR_TEXT("empty heap")); + } + + struct qentry *item = &heap->items[0]; + return MP_OBJ_NEW_SMALL_INT(item->time); +} +static MP_DEFINE_CONST_FUN_OBJ_1(mod_timeq_peektime_obj, mod_timeq_peektime); + +static mp_obj_t mod_timeq_discard(mp_obj_t heap_in, mp_obj_t callback) { + mp_obj_timeq_t *heap = timeq_get_heap(heap_in); + if (heap->len == 0) { + return mp_const_none; + } + for (mp_uint_t i = 0; i < heap->len; i++) { + if (heap->items[i].callback != callback) { + continue; + } + heap->len -= 1; + heap->items[i] = heap->items[heap->len]; + heap->items[heap->len].callback = MP_OBJ_NULL; + heap->items[heap->len].args = MP_OBJ_NULL; + if (i < heap->len) { + timeq_heap_siftup(heap, i); + timeq_heap_siftdown(heap, 0, i); + } + } + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_2(mod_timeq_discard_obj, mod_timeq_discard); + +#if DEBUG +static mp_obj_t mod_timeq_dump(mp_obj_t heap_in) { + mp_obj_timeq_t *heap = timeq_get_heap(heap_in); + for (int i = 0; i < heap->len; i++) { + printf(UINT_FMT "\t%p\t%p\n", heap->items[i].time, + MP_OBJ_TO_PTR(heap->items[i].callback), + MP_OBJ_TO_PTR(heap->items[i].args)); + } + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_1(mod_timeq_dump_obj, mod_timeq_dump); +#endif + +static mp_obj_t timeq_unary_op(mp_unary_op_t op, mp_obj_t self_in) { + mp_obj_timeq_t *self = MP_OBJ_TO_PTR(self_in); + switch (op) { + case MP_UNARY_OP_BOOL: + return mp_obj_new_bool(self->len != 0); + case MP_UNARY_OP_LEN: + return MP_OBJ_NEW_SMALL_INT(self->len); + default: + return MP_OBJ_NULL; // op not supported + } +} + +static const mp_rom_map_elem_t timeq_locals_dict_table[] = { + {MP_ROM_QSTR(MP_QSTR_push), MP_ROM_PTR(&mod_timeq_heappush_obj)}, + {MP_ROM_QSTR(MP_QSTR_pop), MP_ROM_PTR(&mod_timeq_heappop_obj)}, + {MP_ROM_QSTR(MP_QSTR_peektime), MP_ROM_PTR(&mod_timeq_peektime_obj)}, + {MP_ROM_QSTR(MP_QSTR_discard), MP_ROM_PTR(&mod_timeq_discard_obj)}, +#if DEBUG + {MP_ROM_QSTR(MP_QSTR_dump), MP_ROM_PTR(&mod_timeq_dump_obj)}, +#endif +}; + +static MP_DEFINE_CONST_DICT(timeq_locals_dict, timeq_locals_dict_table); + +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(timeq_type, + MP_QSTR_timeq, MP_TYPE_FLAG_NONE, + make_new, timeq_make_new, + unary_op, timeq_unary_op, + locals_dict, &timeq_locals_dict); +// clang-format on + +static const mp_rom_map_elem_t mp_module_timeq_globals_table[] = { + {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_timeq)}, + {MP_ROM_QSTR(MP_QSTR_timeq), MP_ROM_PTR(&timeq_type)}, +}; + +static MP_DEFINE_CONST_DICT(mp_module_timeq_globals, + mp_module_timeq_globals_table); + +const mp_obj_module_t mp_module_timeq = { + .base = {&mp_type_module}, + .globals = (mp_obj_dict_t *)&mp_module_timeq_globals, +}; + +MP_REGISTER_MODULE(MP_QSTR_timeq, mp_module_timeq); diff --git a/core/embed/upymod/modtrezorapp/modtrezorapp-image.h b/core/embed/upymod/modtrezorapp/modtrezorapp-image.h index ffa3819ebce..3597246e17e 100644 --- a/core/embed/upymod/modtrezorapp/modtrezorapp-image.h +++ b/core/embed/upymod/modtrezorapp/modtrezorapp-image.h @@ -36,7 +36,7 @@ typedef struct _mp_obj_AppImage_t { /// """ /// Writes data to the application image at the specified offset. /// """ -STATIC mp_obj_t mod_trezorapp_AppImage_write(mp_obj_t self, mp_obj_t offset_obj, +static mp_obj_t mod_trezorapp_AppImage_write(mp_obj_t self, mp_obj_t offset_obj, mp_obj_t data_obj) { mp_obj_AppImage_t *o = MP_OBJ_TO_PTR(self); app_cache_handle_t image = o->image; @@ -54,7 +54,7 @@ STATIC mp_obj_t mod_trezorapp_AppImage_write(mp_obj_t self, mp_obj_t offset_obj, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorapp_AppImage_write_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorapp_AppImage_write_obj, mod_trezorapp_AppImage_write); /// def finalize(self, bool accept) -> None: @@ -63,7 +63,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorapp_AppImage_write_obj, /// the image is marked as loaded and will be available for execution. /// If `accept` is false, the image is discarded. /// """ -STATIC mp_obj_t mod_trezorapp_AppImage_finalize(mp_obj_t self, +static mp_obj_t mod_trezorapp_AppImage_finalize(mp_obj_t self, mp_obj_t accept_obj) { mp_obj_AppImage_t *o = MP_OBJ_TO_PTR(self); @@ -82,19 +82,19 @@ STATIC mp_obj_t mod_trezorapp_AppImage_finalize(mp_obj_t self, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorapp_AppImage_finalize_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorapp_AppImage_finalize_obj, mod_trezorapp_AppImage_finalize); -STATIC const mp_rom_map_elem_t mod_trezorapp_AppImage_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorapp_AppImage_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mod_trezorapp_AppImage_write_obj)}, {MP_ROM_QSTR(MP_QSTR_finalize), MP_ROM_PTR(&mod_trezorapp_AppImage_finalize_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorapp_AppImage_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorapp_AppImage_locals_dict, mod_trezorapp_AppImage_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorapp_AppImage_type = { - {&mp_type_type}, - .name = MP_QSTR_AppImage, - .locals_dict = (void *)&mod_trezorapp_AppImage_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorapp_AppImage_type, + MP_QSTR_AppImage, MP_TYPE_FLAG_NONE, + locals_dict, &mod_trezorapp_AppImage_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorapp/modtrezorapp-task.h b/core/embed/upymod/modtrezorapp/modtrezorapp-task.h index ddfd41798a4..fe045189fca 100644 --- a/core/embed/upymod/modtrezorapp/modtrezorapp-task.h +++ b/core/embed/upymod/modtrezorapp/modtrezorapp-task.h @@ -36,18 +36,18 @@ typedef struct _mp_obj_AppTask_t { /// """ /// Returns the task id. /// """ -STATIC mp_obj_t mod_trezorapp_AppTask_id(mp_obj_t self) { +static mp_obj_t mod_trezorapp_AppTask_id(mp_obj_t self) { mp_obj_AppTask_t *o = MP_OBJ_TO_PTR(self); return MP_OBJ_NEW_SMALL_INT(o->task_id); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorapp_AppTask_id_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorapp_AppTask_id_obj, mod_trezorapp_AppTask_id); /// def is_running(self) -> bool: /// """ /// Returns whether the application is still running. /// """ -STATIC mp_obj_t mod_trezorapp_AppTask_is_running(mp_obj_t self) { +static mp_obj_t mod_trezorapp_AppTask_is_running(mp_obj_t self) { mp_obj_AppTask_t *o = MP_OBJ_TO_PTR(self); if (app_task_is_running(o->task_id)) { @@ -56,14 +56,14 @@ STATIC mp_obj_t mod_trezorapp_AppTask_is_running(mp_obj_t self) { return mp_const_false; } } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorapp_AppTask_is_running_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorapp_AppTask_is_running_obj, mod_trezorapp_AppTask_is_running); /// def unload(self) -> None: /// """ /// Unloads the application associated with this task. /// """ -STATIC mp_obj_t mod_trezorapp_AppTask_unload(mp_obj_t self) { +static mp_obj_t mod_trezorapp_AppTask_unload(mp_obj_t self) { mp_obj_AppTask_t *o = MP_OBJ_TO_PTR(self); app_task_unload(o->task_id); @@ -71,21 +71,21 @@ STATIC mp_obj_t mod_trezorapp_AppTask_unload(mp_obj_t self) { return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorapp_AppTask_unload_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorapp_AppTask_unload_obj, mod_trezorapp_AppTask_unload); -STATIC const mp_rom_map_elem_t mod_trezorapp_AppTask_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorapp_AppTask_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_id), MP_ROM_PTR(&mod_trezorapp_AppTask_id_obj)}, {MP_ROM_QSTR(MP_QSTR_is_running), MP_ROM_PTR(&mod_trezorapp_AppTask_is_running_obj)}, {MP_ROM_QSTR(MP_QSTR_unload), MP_ROM_PTR(&mod_trezorapp_AppTask_unload_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorapp_AppTask_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorapp_AppTask_locals_dict, mod_trezorapp_AppTask_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorapp_AppTask_type = { - {&mp_type_type}, - .name = MP_QSTR_AppTask, - .locals_dict = (void *)&mod_trezorapp_AppTask_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorapp_AppTask_type, + MP_QSTR_AppTask, MP_TYPE_FLAG_NONE, + locals_dict, &mod_trezorapp_AppTask_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorapp/modtrezorapp.c b/core/embed/upymod/modtrezorapp/modtrezorapp.c index 15b04461eb8..0110742505d 100644 --- a/core/embed/upymod/modtrezorapp/modtrezorapp.c +++ b/core/embed/upymod/modtrezorapp/modtrezorapp.c @@ -41,7 +41,7 @@ /// """ /// Spawns an application task from the app cache. /// """ -STATIC mp_obj_t mod_trezorapp_spawn_task(mp_obj_t app_hash_obj) { +static mp_obj_t mod_trezorapp_spawn_task(mp_obj_t app_hash_obj) { mp_buffer_info_t hash = {0}; mp_get_buffer_raise(app_hash_obj, &hash, MP_BUFFER_READ); @@ -63,14 +63,14 @@ STATIC mp_obj_t mod_trezorapp_spawn_task(mp_obj_t app_hash_obj) { o->task_id = task_id; return MP_OBJ_FROM_PTR(o); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorapp_spawn_task_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorapp_spawn_task_obj, mod_trezorapp_spawn_task); /// def create_image(app_hash: bytes, size: int) -> AppImage: /// """ /// Creates a new application image in the app cache. /// """ -STATIC mp_obj_t mod_trezorapp_create_image(mp_obj_t app_hash_obj, +static mp_obj_t mod_trezorapp_create_image(mp_obj_t app_hash_obj, mp_obj_t size_obj) { mp_buffer_info_t hash = {0}; mp_get_buffer_raise(app_hash_obj, &hash, MP_BUFFER_READ); @@ -94,7 +94,7 @@ STATIC mp_obj_t mod_trezorapp_create_image(mp_obj_t app_hash_obj, o->image = image; return MP_OBJ_FROM_PTR(o); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorapp_create_image_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorapp_create_image_obj, mod_trezorapp_create_image); #ifdef TREZOR_EMULATOR @@ -102,7 +102,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorapp_create_image_obj, /// """ /// Loads an application image from a file into the app cache. /// """ -STATIC mp_obj_t mod_trezorapp_load_file(mp_obj_t app_hash_obj, +static mp_obj_t mod_trezorapp_load_file(mp_obj_t app_hash_obj, mp_obj_t filename_obj) { mp_buffer_info_t hash = {0}; mp_get_buffer_raise(app_hash_obj, &hash, MP_BUFFER_READ); @@ -123,11 +123,11 @@ STATIC mp_obj_t mod_trezorapp_load_file(mp_obj_t app_hash_obj, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorapp_load_file_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorapp_load_file_obj, mod_trezorapp_load_file); #endif // TREZOR_EMULATOR -STATIC const mp_rom_map_elem_t mp_module_trezorapp_globals_table[] = { +static const mp_rom_map_elem_t mp_module_trezorapp_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_trezorapp)}, {MP_ROM_QSTR(MP_QSTR_spawn_task), @@ -139,7 +139,7 @@ STATIC const mp_rom_map_elem_t mp_module_trezorapp_globals_table[] = { #endif }; -STATIC MP_DEFINE_CONST_DICT(mp_module_trezorapp_globals, +static MP_DEFINE_CONST_DICT(mp_module_trezorapp_globals, mp_module_trezorapp_globals_table); const mp_obj_module_t mp_module_trezorapp = { diff --git a/core/embed/upymod/modtrezorconfig/modtrezorconfig.c b/core/embed/upymod/modtrezorconfig/modtrezorconfig.c index 7f8cdf2b03e..ac8ecc426b8 100644 --- a/core/embed/upymod/modtrezorconfig/modtrezorconfig.c +++ b/core/embed/upymod/modtrezorconfig/modtrezorconfig.c @@ -31,6 +31,8 @@ #include "memzero.h" +MP_REGISTER_ROOT_POINTER(mp_obj_t trezorconfig_ui_wait_callback); + static secbool wrapped_ui_wait_callback(uint32_t wait, uint32_t progress, enum storage_ui_message_t message) { if (mp_obj_is_callable(MP_STATE_VM(trezorconfig_ui_wait_callback))) { @@ -55,7 +57,7 @@ static secbool wrapped_ui_wait_callback(uint32_t wait, uint32_t progress, /// Locks the storage if it is currently unlocked, and allows setting /// a new UI callback. /// """ -STATIC mp_obj_t mod_trezorconfig_init(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorconfig_init(size_t n_args, const mp_obj_t *args) { if (n_args > 0) { MP_STATE_VM(trezorconfig_ui_wait_callback) = args[0]; storage_setup(wrapped_ui_wait_callback); @@ -64,7 +66,7 @@ STATIC mp_obj_t mod_trezorconfig_init(size_t n_args, const mp_obj_t *args) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_init_obj, 0, 1, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_init_obj, 0, 1, mod_trezorconfig_init); /// def unlock(pin: str, ext_salt: AnyBytes | None) -> bool: @@ -72,7 +74,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_init_obj, 0, 1, /// Attempts to unlock the storage with the given PIN and external salt. /// Returns True on success, False on failure. /// """ -STATIC mp_obj_t mod_trezorconfig_unlock(mp_obj_t pin, mp_obj_t ext_salt) { +static mp_obj_t mod_trezorconfig_unlock(mp_obj_t pin, mp_obj_t ext_salt) { mp_buffer_info_t pin_b = {0}; mp_get_buffer_raise(pin, &pin_b, MP_BUFFER_READ); @@ -137,7 +139,7 @@ STATIC mp_obj_t mod_trezorconfig_unlock(mp_obj_t pin, mp_obj_t ext_salt) { MP_ERROR_TEXT("Something went wrong during unlock.")); } } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorconfig_unlock_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorconfig_unlock_obj, mod_trezorconfig_unlock); /// def check_pin(pin: str, ext_salt: AnyBytes | None) -> bool: @@ -145,57 +147,57 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorconfig_unlock_obj, /// Check the given PIN with the given external salt. /// Returns True on success, False on failure. /// """ -STATIC mp_obj_t mod_trezorconfig_check_pin(mp_obj_t pin, mp_obj_t ext_salt) { +static mp_obj_t mod_trezorconfig_check_pin(mp_obj_t pin, mp_obj_t ext_salt) { return mod_trezorconfig_unlock(pin, ext_salt); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorconfig_check_pin_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorconfig_check_pin_obj, mod_trezorconfig_check_pin); /// def lock() -> None: /// """ /// Locks the storage. /// """ -STATIC mp_obj_t mod_trezorconfig_lock(void) { +static mp_obj_t mod_trezorconfig_lock(void) { storage_lock(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_lock_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_lock_obj, mod_trezorconfig_lock); /// def is_unlocked() -> bool: /// """ /// Returns True if storage is unlocked, False otherwise. /// """ -STATIC mp_obj_t mod_trezorconfig_is_unlocked(void) { +static mp_obj_t mod_trezorconfig_is_unlocked(void) { if (sectrue != storage_is_unlocked()) { return mp_const_false; } return mp_const_true; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_is_unlocked_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_is_unlocked_obj, mod_trezorconfig_is_unlocked); /// def has_pin() -> bool: /// """ /// Returns True if storage has a configured PIN, False otherwise. /// """ -STATIC mp_obj_t mod_trezorconfig_has_pin(void) { +static mp_obj_t mod_trezorconfig_has_pin(void) { if (sectrue != storage_has_pin()) { return mp_const_false; } return mp_const_true; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_has_pin_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_has_pin_obj, mod_trezorconfig_has_pin); /// def get_pin_rem() -> int: /// """ /// Returns the number of remaining PIN entry attempts. /// """ -STATIC mp_obj_t mod_trezorconfig_get_pin_rem(void) { +static mp_obj_t mod_trezorconfig_get_pin_rem(void) { return mp_obj_new_int_from_uint(storage_get_pin_rem()); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_get_pin_rem_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_get_pin_rem_obj, mod_trezorconfig_get_pin_rem); /// def change_pin( @@ -206,7 +208,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_get_pin_rem_obj, /// Change PIN and external salt. Returns True on success, False on entering /// the wipe code. Has to be run with unlocked storage. /// """ -STATIC mp_obj_t mod_trezorconfig_change_pin(size_t n_args, +static mp_obj_t mod_trezorconfig_change_pin(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t newpin = {0}; mp_get_buffer_raise(args[0], &newpin, MP_BUFFER_READ); @@ -245,33 +247,33 @@ STATIC mp_obj_t mod_trezorconfig_change_pin(size_t n_args, mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("Change PIN failed.")); } } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_change_pin_obj, 2, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_change_pin_obj, 2, 2, mod_trezorconfig_change_pin); /// def ensure_not_wipe_code(pin: str) -> None: /// """ /// Wipes the device if the entered PIN is the wipe code. /// """ -STATIC mp_obj_t mod_trezorconfig_ensure_not_wipe_code(mp_obj_t pin) { +static mp_obj_t mod_trezorconfig_ensure_not_wipe_code(mp_obj_t pin) { mp_buffer_info_t pin_b = {0}; mp_get_buffer_raise(pin, &pin_b, MP_BUFFER_READ); storage_ensure_not_wipe_code(pin_b.buf, pin_b.len); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorconfig_ensure_not_wipe_code_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorconfig_ensure_not_wipe_code_obj, mod_trezorconfig_ensure_not_wipe_code); /// def has_wipe_code() -> bool: /// """ /// Returns True if storage has a configured wipe code, False otherwise. /// """ -STATIC mp_obj_t mod_trezorconfig_has_wipe_code(void) { +static mp_obj_t mod_trezorconfig_has_wipe_code(void) { if (sectrue != storage_has_wipe_code()) { return mp_const_false; } return mp_const_true; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_has_wipe_code_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_has_wipe_code_obj, mod_trezorconfig_has_wipe_code); /// def change_wipe_code( @@ -282,7 +284,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_has_wipe_code_obj, /// """ /// Change wipe code. Returns True on success, False on failure. /// """ -STATIC mp_obj_t mod_trezorconfig_change_wipe_code(size_t n_args, +static mp_obj_t mod_trezorconfig_change_wipe_code(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t pin_b = {0}; mp_get_buffer_raise(args[0], &pin_b, MP_BUFFER_READ); @@ -306,7 +308,7 @@ STATIC mp_obj_t mod_trezorconfig_change_wipe_code(size_t n_args, } return mp_const_true; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorconfig_change_wipe_code_obj, 3, 3, mod_trezorconfig_change_wipe_code); @@ -316,7 +318,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// Raises a RuntimeError if decryption or authentication of the stored /// value fails. /// """ -STATIC mp_obj_t mod_trezorconfig_get(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorconfig_get(size_t n_args, const mp_obj_t *args) { uint8_t app = trezor_obj_get_uint8(args[0]); if (app == 0 || app > MAX_APPID) { mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Invalid app ID.")); @@ -340,16 +342,16 @@ STATIC mp_obj_t mod_trezorconfig_get(size_t n_args, const mp_obj_t *args) { mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("Failed to get value from storage.")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_get_obj, 2, 3, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_get_obj, 2, 3, mod_trezorconfig_get); /// def set(app: int, key: int, value: AnyBytes, public: bool = False) -> None: /// """ /// Sets a value of given key for given app. /// """ -STATIC mp_obj_t mod_trezorconfig_set(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorconfig_set(size_t n_args, const mp_obj_t *args) { uint8_t app = trezor_obj_get_uint8(args[0]); if (app == 0 || app > MAX_APPID) { mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Invalid app ID.")); @@ -367,7 +369,7 @@ STATIC mp_obj_t mod_trezorconfig_set(size_t n_args, const mp_obj_t *args) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_set_obj, 3, 4, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_set_obj, 3, 4, mod_trezorconfig_set); /// def delete( @@ -376,7 +378,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_set_obj, 3, 4, /// """ /// Deletes the given key of the given app. /// """ -STATIC mp_obj_t mod_trezorconfig_delete(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorconfig_delete(size_t n_args, const mp_obj_t *args) { uint8_t app = trezor_obj_get_uint8(args[0]); if (app == 0 || app > MAX_APPID) { mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Invalid app ID.")); @@ -398,7 +400,7 @@ STATIC mp_obj_t mod_trezorconfig_delete(size_t n_args, const mp_obj_t *args) { } return mp_const_true; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_delete_obj, 2, 4, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_delete_obj, 2, 4, mod_trezorconfig_delete); /// def set_counter( @@ -407,7 +409,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_delete_obj, 2, 4, /// """ /// Sets the given key of the given app as a counter with the given value. /// """ -STATIC mp_obj_t mod_trezorconfig_set_counter(size_t n_args, +static mp_obj_t mod_trezorconfig_set_counter(size_t n_args, const mp_obj_t *args) { uint8_t app = trezor_obj_get_uint8(args[0]); if (app == 0 || app > MAX_APPID) { @@ -427,7 +429,7 @@ STATIC mp_obj_t mod_trezorconfig_set_counter(size_t n_args, } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_set_counter_obj, 3, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_set_counter_obj, 3, 4, mod_trezorconfig_set_counter); /// def next_counter( @@ -437,7 +439,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_set_counter_obj, 3, /// Increments the counter stored under the given key of the given app and /// returns the new value. /// """ -STATIC mp_obj_t mod_trezorconfig_next_counter(size_t n_args, +static mp_obj_t mod_trezorconfig_next_counter(size_t n_args, const mp_obj_t *args) { uint8_t app = trezor_obj_get_uint8(args[0]); if (app == 0 || app > MAX_APPID) { @@ -457,18 +459,18 @@ STATIC mp_obj_t mod_trezorconfig_next_counter(size_t n_args, } return mp_obj_new_int_from_uint(count); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_next_counter_obj, 2, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorconfig_next_counter_obj, 2, 3, mod_trezorconfig_next_counter); /// def wipe() -> None: /// """ /// Erases the whole config. Use with caution! /// """ -STATIC mp_obj_t mod_trezorconfig_wipe(void) { +static mp_obj_t mod_trezorconfig_wipe(void) { storage_wipe(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_wipe_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_wipe_obj, mod_trezorconfig_wipe); /// from enum import IntEnum @@ -478,15 +480,15 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_wipe_obj, /// PROCESSING_MSG = 2 /// STARTING_MSG = 3 /// WRONG_PIN_MSG = 4 -STATIC const qstr mod_trezorconfig_StorageMessage_fields[] = { +static const qstr mod_trezorconfig_StorageMessage_fields[] = { MP_QSTR_NO_MSG, MP_QSTR_VERIFYING_PIN_MSG, MP_QSTR_PROCESSING_MSG, MP_QSTR_STARTING_MSG, MP_QSTR_WRONG_PIN_MSG}; -STATIC MP_DEFINE_ATTRTUPLE( +static MP_DEFINE_ATTRTUPLE( mod_trezorconfig_StorageMessage_obj, mod_trezorconfig_StorageMessage_fields, (sizeof(mod_trezorconfig_StorageMessage_fields) / sizeof(qstr)), MP_ROM_INT(0), MP_ROM_INT(1), MP_ROM_INT(2), MP_ROM_INT(3), MP_ROM_INT(4)); -STATIC const mp_rom_map_elem_t mp_module_trezorconfig_globals_table[] = { +static const mp_rom_map_elem_t mp_module_trezorconfig_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_trezorconfig)}, {MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&mod_trezorconfig_init_obj)}, {MP_ROM_QSTR(MP_QSTR_check_pin), @@ -517,7 +519,7 @@ STATIC const mp_rom_map_elem_t mp_module_trezorconfig_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_StorageMessage), MP_ROM_PTR(&mod_trezorconfig_StorageMessage_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mp_module_trezorconfig_globals, +static MP_DEFINE_CONST_DICT(mp_module_trezorconfig_globals, mp_module_trezorconfig_globals_table); const mp_obj_module_t mp_module_trezorconfig = { diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-aes.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-aes.h index aac688e0dd4..58a19b81706 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-aes.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-aes.h @@ -58,7 +58,7 @@ typedef struct _mp_obj_AES_t { /// """ /// Initialize AES context. /// """ -STATIC mp_obj_t mod_trezorcrypto_AES_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_AES_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 2, 3, false); @@ -81,8 +81,7 @@ STATIC mp_obj_t mod_trezorcrypto_AES_make_new(const mp_obj_type_t *type, } } - mp_obj_AES_t *o = m_new_obj_with_finaliser(mp_obj_AES_t); - o->base.type = type; + mp_obj_AES_t *o = mp_obj_malloc_with_finaliser(mp_obj_AES_t, type); o->mode = mode; if (iv.len != 0) { memcpy(o->iv, iv.buf, AES_BLOCK_SIZE); @@ -158,40 +157,40 @@ static mp_obj_t aes_update(mp_obj_t self, mp_obj_t data, bool encrypt) { aes_ctr_cbuf_inc, &(o->encrypt_ctx)); break; } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } /// def encrypt(self, data: AnyBytes) -> bytes: /// """ /// Encrypt data and update AES context. /// """ -STATIC mp_obj_t mod_trezorcrypto_AES_encrypt(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_AES_encrypt(mp_obj_t self, mp_obj_t data) { return aes_update(self, data, true); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AES_encrypt_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AES_encrypt_obj, mod_trezorcrypto_AES_encrypt); /// def decrypt(self, data: AnyBytes) -> bytes: /// """ /// Decrypt data and update AES context. /// """ -STATIC mp_obj_t mod_trezorcrypto_AES_decrypt(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_AES_decrypt(mp_obj_t self, mp_obj_t data) { return aes_update(self, data, false); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AES_decrypt_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AES_decrypt_obj, mod_trezorcrypto_AES_decrypt); -STATIC mp_obj_t mod_trezorcrypto_AES___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_AES___del__(mp_obj_t self) { mp_obj_AES_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->encrypt_ctx), sizeof(aes_encrypt_ctx)); memzero(&(o->decrypt_ctx), sizeof(aes_decrypt_ctx)); memzero(o->iv, AES_BLOCK_SIZE); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_AES___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_AES___del___obj, mod_trezorcrypto_AES___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_AES_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_AES_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_encrypt), MP_ROM_PTR(&mod_trezorcrypto_AES_encrypt_obj)}, {MP_ROM_QSTR(MP_QSTR_decrypt), @@ -204,12 +203,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_AES_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_OFB), MP_ROM_INT(OFB)}, {MP_ROM_QSTR(MP_QSTR_CTR), MP_ROM_INT(CTR)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_AES_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_AES_locals_dict, mod_trezorcrypto_AES_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_AES_type = { - {&mp_type_type}, - .name = MP_QSTR_AES, - .make_new = mod_trezorcrypto_AES_make_new, - .locals_dict = (void *)&mod_trezorcrypto_AES_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_AES_type, + MP_QSTR_AES, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_AES_make_new, + locals_dict, &mod_trezorcrypto_AES_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-aesgcm.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-aesgcm.h index eb3bffad3d7..c6fc685a6e9 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-aesgcm.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-aesgcm.h @@ -46,7 +46,7 @@ typedef struct _mp_obj_AesGcm_t { /// """ /// Initialize the AES-GCM context for encryption. /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_AesGcm_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 2, 2, false); @@ -58,8 +58,7 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_make_new(const mp_obj_type_t *type, "Invalid length of key (has to be 128, 192 or 256 bits).")); } - mp_obj_AesGcm_t *o = m_new_obj_with_finaliser(mp_obj_AesGcm_t); - o->base.type = type; + mp_obj_AesGcm_t *o = mp_obj_malloc_with_finaliser(mp_obj_AesGcm_t, type); o->state = STATE_INIT; if (gcm_init_and_key(key.buf, key.len, &(o->ctx)) != RETURN_GOOD || gcm_init_message(iv.buf, iv.len, &(o->ctx)) != RETURN_GOOD) { @@ -75,7 +74,7 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_make_new(const mp_obj_type_t *type, /// be called repeatedly to add authenticated data at any point before /// finish(). /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_auth(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_AesGcm_auth(mp_obj_t self, mp_obj_t data) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); if (o->state != STATE_INIT && o->state != STATE_PROCESSING) { mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("Invalid state.")); @@ -88,14 +87,14 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_auth(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_auth_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_auth_obj, mod_trezorcrypto_AesGcm_auth); /// def reset(self, iv: AnyBytes) -> None: /// """ /// Reset the IV for encryption. /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_reset(mp_obj_t self, mp_obj_t iv) { +static mp_obj_t mod_trezorcrypto_AesGcm_reset(mp_obj_t self, mp_obj_t iv) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t in = {0}; mp_get_buffer_raise(iv, &in, MP_BUFFER_READ); @@ -106,14 +105,14 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_reset(mp_obj_t self, mp_obj_t iv) { o->state = STATE_INIT; return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_reset_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_reset_obj, mod_trezorcrypto_AesGcm_reset); /// def encrypt(self, data: AnyBytes) -> bytes: /// """ /// Encrypt data chunk. /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_encrypt(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_AesGcm_encrypt(mp_obj_t self, mp_obj_t data) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); if (o->state != STATE_INIT && o->state != STATE_PROCESSING) { mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("Invalid state.")); @@ -129,16 +128,16 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_encrypt(mp_obj_t self, mp_obj_t data) { o->state = STATE_FAILED; mp_raise_type(&mp_type_RuntimeError); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_encrypt_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_encrypt_obj, mod_trezorcrypto_AesGcm_encrypt); /// def encrypt_in_place(self, data: AnyBuffer) -> int: /// """ /// Encrypt data chunk in place. Returns the length of the encrypted data. /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_encrypt_in_place(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_AesGcm_encrypt_in_place(mp_obj_t self, mp_obj_t data) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); if (o->state != STATE_INIT && o->state != STATE_PROCESSING) { @@ -153,14 +152,14 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_encrypt_in_place(mp_obj_t self, } return mp_obj_new_int(in.len); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_encrypt_in_place_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_encrypt_in_place_obj, mod_trezorcrypto_AesGcm_encrypt_in_place); /// def finish(self) -> bytes: /// """ /// Compute the GCM authentication tag. /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_encrypt_finish(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_AesGcm_encrypt_finish(mp_obj_t self) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); if (o->state != STATE_INIT && o->state != STATE_PROCESSING) { mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("Invalid state.")); @@ -174,9 +173,9 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_encrypt_finish(mp_obj_t self) { o->state = STATE_FAILED; mp_raise_type(&mp_type_RuntimeError); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &tag); + return mp_obj_new_bytes_from_vstr(&tag); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_AesGcm_encrypt_finish_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_AesGcm_encrypt_finish_obj, mod_trezorcrypto_AesGcm_encrypt_finish); /// class aesgcm_decrypt: @@ -205,7 +204,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_AesGcm_encrypt_finish_obj, /// """ /// Decrypt data chunk. /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_decrypt(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_AesGcm_decrypt(mp_obj_t self, mp_obj_t data) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); if (o->state != STATE_INIT && o->state != STATE_PROCESSING) { mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("Invalid state.")); @@ -221,16 +220,16 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_decrypt(mp_obj_t self, mp_obj_t data) { o->state = STATE_FAILED; mp_raise_type(&mp_type_RuntimeError); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_decrypt_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_decrypt_obj, mod_trezorcrypto_AesGcm_decrypt); /// def decrypt_in_place(self, data: AnyBuffer) -> int: /// """ /// Decrypt data chunk in place. Returns the length of the decrypted data. /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_decrypt_in_place(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_AesGcm_decrypt_in_place(mp_obj_t self, mp_obj_t data) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); if (o->state != STATE_INIT && o->state != STATE_PROCESSING) { @@ -245,14 +244,14 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_decrypt_in_place(mp_obj_t self, } return mp_obj_new_int(in.len); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_decrypt_in_place_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_decrypt_in_place_obj, mod_trezorcrypto_AesGcm_decrypt_in_place); /// def finish(self, expected_tag: AnyBytes) -> None: /// """ /// Verify the GCM authentication tag. /// """ -STATIC mp_obj_t mod_trezorcrypto_AesGcm_decrypt_finish(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_AesGcm_decrypt_finish(mp_obj_t self, mp_obj_t expected_tag) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); if (o->state != STATE_INIT && o->state != STATE_PROCESSING) { @@ -281,18 +280,18 @@ STATIC mp_obj_t mod_trezorcrypto_AesGcm_decrypt_finish(mp_obj_t self, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_decrypt_finish_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_AesGcm_decrypt_finish_obj, mod_trezorcrypto_AesGcm_decrypt_finish); -STATIC mp_obj_t mod_trezorcrypto_AesGcm___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_AesGcm___del__(mp_obj_t self) { mp_obj_AesGcm_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(gcm_ctx)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_AesGcm___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_AesGcm___del___obj, mod_trezorcrypto_AesGcm___del__); -STATIC const mp_rom_map_elem_t +static const mp_rom_map_elem_t mod_trezorcrypto_AesGcmEncrypt_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_auth), MP_ROM_PTR(&mod_trezorcrypto_AesGcm_auth_obj)}, @@ -308,10 +307,10 @@ STATIC const mp_rom_map_elem_t MP_ROM_PTR(&mod_trezorcrypto_AesGcm___del___obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_AesGcmEncrypt_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_AesGcmEncrypt_locals_dict, mod_trezorcrypto_AesGcmEncrypt_locals_dict_table); -STATIC const mp_rom_map_elem_t +static const mp_rom_map_elem_t mod_trezorcrypto_AesGcmDecrypt_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_auth), MP_ROM_PTR(&mod_trezorcrypto_AesGcm_auth_obj)}, @@ -327,19 +326,19 @@ STATIC const mp_rom_map_elem_t MP_ROM_PTR(&mod_trezorcrypto_AesGcm___del___obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_AesGcmDecrypt_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_AesGcmDecrypt_locals_dict, mod_trezorcrypto_AesGcmDecrypt_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_AesGcmEncrypt_type = { - {&mp_type_type}, - .name = MP_QSTR_aesgcm_encrypt, - .make_new = mod_trezorcrypto_AesGcm_make_new, - .locals_dict = (void *)&mod_trezorcrypto_AesGcmEncrypt_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_AesGcmEncrypt_type, + MP_QSTR_aesgcm_encrypt, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_AesGcm_make_new, + locals_dict, &mod_trezorcrypto_AesGcmEncrypt_locals_dict); +// clang-format on -STATIC const mp_obj_type_t mod_trezorcrypto_AesGcmDecrypt_type = { - {&mp_type_type}, - .name = MP_QSTR_aesgcm_decrypt, - .make_new = mod_trezorcrypto_AesGcm_make_new, - .locals_dict = (void *)&mod_trezorcrypto_AesGcmDecrypt_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_AesGcmDecrypt_type, + MP_QSTR_aesgcm_decrypt, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_AesGcm_make_new, + locals_dict, &mod_trezorcrypto_AesGcmDecrypt_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bech32.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bech32.h index a57e2a78192..80751e83b48 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bech32.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bech32.h @@ -31,7 +31,7 @@ /// """ /// Decode a Bech32 or Bech32m string /// """ -STATIC mp_obj_t mod_trezorcrypto_bech32_decode(size_t n_args, +static mp_obj_t mod_trezorcrypto_bech32_decode(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t bech = {0}; mp_get_buffer_raise(args[0], &bech, MP_BUFFER_READ); @@ -63,26 +63,26 @@ STATIC mp_obj_t mod_trezorcrypto_bech32_decode(size_t n_args, } mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(3, NULL)); - tuple->items[0] = mp_obj_new_str(hrp, strlen(hrp)); + tuple->items[0] = mp_obj_new_str_from_cstr(hrp); tuple->items[1] = data_list; tuple->items[2] = MP_OBJ_NEW_SMALL_INT(enc); return MP_OBJ_FROM_PTR(tuple); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_bech32_decode_obj, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_bech32_decode_obj, 1, 2, mod_trezorcrypto_bech32_decode); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_bech32_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_bech32_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bech32)}, {MP_ROM_QSTR(MP_QSTR_decode), MP_ROM_PTR(&mod_trezorcrypto_bech32_decode_obj)}, {MP_ROM_QSTR(MP_QSTR_BECH32), MP_ROM_INT(BECH32_ENCODING_BECH32)}, {MP_ROM_QSTR(MP_QSTR_BECH32M), MP_ROM_INT(BECH32_ENCODING_BECH32M)}}; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_bech32_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_bech32_globals, mod_trezorcrypto_bech32_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_bech32_module = { +static const mp_obj_module_t mod_trezorcrypto_bech32_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_bech32_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip32.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip32.h index 2347e5b7587..d5ec43f0c33 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip32.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip32.h @@ -49,10 +49,10 @@ /// ) -> None: /// """ /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_HDNode_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - STATIC const mp_arg_t allowed_args[] = { + static const mp_arg_t allowed_args[] = { {MP_QSTR_depth, MP_ARG_REQUIRED | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none}}, @@ -115,8 +115,7 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_make_new(const mp_obj_type_t *type, mp_raise_ValueError(MP_ERROR_TEXT("curve_name is invalid")); } - mp_obj_HDNode_t *o = m_new_obj_with_finaliser(mp_obj_HDNode_t); - o->base.type = type; + mp_obj_HDNode_t *o = mp_obj_malloc_with_finaliser(mp_obj_HDNode_t, type); o->fingerprint = fingerprint; o->hdnode.depth = depth; o->hdnode.child_num = child_num; @@ -146,7 +145,7 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_make_new(const mp_obj_type_t *type, /// """ /// Derive a BIP0032 child node in place. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_derive(size_t n_args, +static mp_obj_t mod_trezorcrypto_HDNode_derive(size_t n_args, const mp_obj_t *args) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(args[0]); uint32_t i = trezor_obj_get_uint(args[1]); @@ -177,7 +176,7 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_derive(size_t n_args, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_HDNode_derive_obj, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_HDNode_derive_obj, 2, 3, mod_trezorcrypto_HDNode_derive); @@ -186,7 +185,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_HDNode_derive_obj, /// Go through a list of indexes and iteratively derive a child node in /// place. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_derive_path(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_HDNode_derive_path(mp_obj_t self, mp_obj_t path) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); @@ -213,14 +212,14 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_derive_path(mp_obj_t self, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_derive_path_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_derive_path_obj, mod_trezorcrypto_HDNode_derive_path); /// def serialize_public(self, version: int) -> str: /// """ /// Serialize the public info from HD node to base58 string. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_serialize_public(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_HDNode_serialize_public(mp_obj_t self, mp_obj_t version) { uint32_t ver = trezor_obj_get_uint(version); mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); @@ -238,112 +237,112 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_serialize_public(mp_obj_t self, } // written includes NULL at the end of the string xpub.len = written - 1; - return mp_obj_new_str_from_vstr(&mp_type_str, &xpub); + return mp_obj_new_str_from_vstr(&xpub); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_serialize_public_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_serialize_public_obj, mod_trezorcrypto_HDNode_serialize_public); /// def clone(self) -> HDNode: /// """ /// Returns a copy of the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_clone(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_clone(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); - mp_obj_HDNode_t *copy = m_new_obj_with_finaliser(mp_obj_HDNode_t); - copy->base.type = &mod_trezorcrypto_HDNode_type; + mp_obj_HDNode_t *copy = mp_obj_malloc_with_finaliser( + mp_obj_HDNode_t, &mod_trezorcrypto_HDNode_type); copy->hdnode = o->hdnode; copy->fingerprint = o->fingerprint; return MP_OBJ_FROM_PTR(copy); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_clone_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_clone_obj, mod_trezorcrypto_HDNode_clone); /// def depth(self) -> int: /// """ /// Returns a depth of the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_depth(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_depth(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); return mp_obj_new_int_from_uint(o->hdnode.depth); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_depth_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_depth_obj, mod_trezorcrypto_HDNode_depth); /// def fingerprint(self) -> int: /// """ /// Returns a fingerprint of the HD node (hash of the parent public key). /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_fingerprint(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_fingerprint(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); return mp_obj_new_int_from_uint(o->fingerprint); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_fingerprint_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_fingerprint_obj, mod_trezorcrypto_HDNode_fingerprint); /// def child_num(self) -> int: /// """ /// Returns a child index of the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_child_num(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_child_num(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); return mp_obj_new_int_from_uint(o->hdnode.child_num); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_child_num_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_child_num_obj, mod_trezorcrypto_HDNode_child_num); /// def chain_code(self) -> bytes: /// """ /// Returns a chain code of the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_chain_code(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_chain_code(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); return mp_obj_new_bytes(o->hdnode.chain_code, sizeof(o->hdnode.chain_code)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_chain_code_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_chain_code_obj, mod_trezorcrypto_HDNode_chain_code); /// def private_key(self) -> bytes: /// """ /// Returns a private key of the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_private_key(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_private_key(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); return mp_obj_new_bytes(o->hdnode.private_key, sizeof(o->hdnode.private_key)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_private_key_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_private_key_obj, mod_trezorcrypto_HDNode_private_key); /// def private_key_ext(self) -> bytes: /// """ /// Returns a private key extension of the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_private_key_ext(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_private_key_ext(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); return mp_obj_new_bytes(o->hdnode.private_key_extension, sizeof(o->hdnode.private_key_extension)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_private_key_ext_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_private_key_ext_obj, mod_trezorcrypto_HDNode_private_key_ext); /// def public_key(self) -> bytes: /// """ /// Returns a public key of the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_public_key(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_public_key(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); if (hdnode_fill_public_key(&o->hdnode) != 0) { mp_raise_ValueError(MP_ERROR_TEXT("Invalid private key")); } return mp_obj_new_bytes(o->hdnode.public_key, sizeof(o->hdnode.public_key)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_public_key_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode_public_key_obj, mod_trezorcrypto_HDNode_public_key); /// def address(self, version: int) -> str: /// """ /// Compute a base58-encoded address string from the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_address(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_HDNode_address(mp_obj_t self, mp_obj_t version) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); @@ -355,9 +354,9 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_address(mp_obj_t self, mp_raise_ValueError(MP_ERROR_TEXT("Failed to get address")); } address.len = strlen(address.buf); - return mp_obj_new_str_from_vstr(&mp_type_str, &address); + return mp_obj_new_str_from_vstr(&address); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_address_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_address_obj, mod_trezorcrypto_HDNode_address); #if !BITCOIN_ONLY @@ -367,7 +366,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_address_obj, /// """ /// Compute a NEM address string from the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_nem_address(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_HDNode_nem_address(mp_obj_t self, mp_obj_t network) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); @@ -380,9 +379,9 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_nem_address(mp_obj_t self, mp_raise_ValueError(MP_ERROR_TEXT("Failed to compute a NEM address")); } address.len = strlen(address.buf); - return mp_obj_new_str_from_vstr(&mp_type_str, &address); + return mp_obj_new_str_from_vstr(&address); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_nem_address_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_nem_address_obj, mod_trezorcrypto_HDNode_nem_address); /// def nem_encrypt( @@ -395,7 +394,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_nem_address_obj, /// """ /// Encrypts payload using the transfer's public key /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_nem_encrypt(size_t n_args, +static mp_obj_t mod_trezorcrypto_HDNode_nem_encrypt(size_t n_args, const mp_obj_t *args) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(args[0]); @@ -429,9 +428,9 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_nem_encrypt(size_t n_args, salt.buf, payload.buf, payload.len, (uint8_t *)vstr.buf)) { mp_raise_ValueError(MP_ERROR_TEXT("HDNode nem encrypt failed")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_HDNode_nem_encrypt_obj, 5, 5, mod_trezorcrypto_HDNode_nem_encrypt); @@ -441,15 +440,15 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Compute an Ethereum pubkeyhash (aka address) from the HD node. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode_ethereum_pubkeyhash(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode_ethereum_pubkeyhash(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); vstr_t pkh = {0}; vstr_init_len(&pkh, 20); hdnode_get_ethereum_pubkeyhash(&o->hdnode, (uint8_t *)pkh.buf); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pkh); + return mp_obj_new_bytes_from_vstr(&pkh); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1( +static MP_DEFINE_CONST_FUN_OBJ_1( mod_trezorcrypto_HDNode_ethereum_pubkeyhash_obj, mod_trezorcrypto_HDNode_ethereum_pubkeyhash); @@ -459,16 +458,16 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1( /// """ /// Cleans up sensitive memory. /// """ -STATIC mp_obj_t mod_trezorcrypto_HDNode___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_HDNode___del__(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); o->fingerprint = 0; memzero(&o->hdnode, sizeof(o->hdnode)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_HDNode___del___obj, mod_trezorcrypto_HDNode___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_HDNode_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_HDNode_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mod_trezorcrypto_HDNode___del___obj)}, {MP_ROM_QSTR(MP_QSTR_derive), @@ -506,15 +505,15 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_HDNode_locals_dict_table[] = { MP_ROM_PTR(&mod_trezorcrypto_HDNode_ethereum_pubkeyhash_obj)}, #endif }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_HDNode_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_HDNode_locals_dict, mod_trezorcrypto_HDNode_locals_dict_table); -const mp_obj_type_t mod_trezorcrypto_HDNode_type = { - {&mp_type_type}, - .name = MP_QSTR_HDNode, - .make_new = mod_trezorcrypto_HDNode_make_new, - .locals_dict = (void *)&mod_trezorcrypto_HDNode_locals_dict, -}; +// clang-format off +MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_HDNode_type, + MP_QSTR_HDNode, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_HDNode_make_new, + locals_dict, &mod_trezorcrypto_HDNode_locals_dict); +// clang-format on /// mock:global @@ -522,7 +521,7 @@ const mp_obj_type_t mod_trezorcrypto_HDNode_type = { /// """ /// Construct a BIP0032 HD node from a BIP0039 seed value. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip32_from_seed(mp_obj_t seed, +static mp_obj_t mod_trezorcrypto_bip32_from_seed(mp_obj_t seed, mp_obj_t curve_name) { mp_buffer_info_t seedb = {0}; mp_get_buffer_raise(seed, &seedb, MP_BUFFER_READ); @@ -542,25 +541,25 @@ STATIC mp_obj_t mod_trezorcrypto_bip32_from_seed(mp_obj_t seed, mp_raise_ValueError(MP_ERROR_TEXT("Failed to derive the root node")); } - mp_obj_HDNode_t *o = m_new_obj_with_finaliser(mp_obj_HDNode_t); - o->base.type = &mod_trezorcrypto_HDNode_type; + mp_obj_HDNode_t *o = mp_obj_malloc_with_finaliser( + mp_obj_HDNode_t, &mod_trezorcrypto_HDNode_type); o->hdnode = hdnode; o->fingerprint = 0; return MP_OBJ_FROM_PTR(o); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_bip32_from_seed_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_bip32_from_seed_obj, mod_trezorcrypto_bip32_from_seed); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_bip32_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_bip32_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bip32)}, {MP_ROM_QSTR(MP_QSTR_HDNode), MP_ROM_PTR(&mod_trezorcrypto_HDNode_type)}, {MP_ROM_QSTR(MP_QSTR_from_seed), MP_ROM_PTR(&mod_trezorcrypto_bip32_from_seed_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_bip32_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_bip32_globals, mod_trezorcrypto_bip32_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_bip32_module = { +static const mp_obj_module_t mod_trezorcrypto_bip32_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_bip32_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip340.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip340.h index c5bf0c42b01..6185858448a 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip340.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip340.h @@ -31,7 +31,7 @@ /// """ /// Generate secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip340_generate_secret() { +static mp_obj_t mod_trezorcrypto_bip340_generate_secret() { vstr_t sk = {0}; vstr_init_len(&sk, 32); for (;;) { @@ -53,16 +53,16 @@ STATIC mp_obj_t mod_trezorcrypto_bip340_generate_secret() { continue; break; } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sk); + return mp_obj_new_bytes_from_vstr(&sk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_bip340_generate_secret_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_bip340_generate_secret_obj, mod_trezorcrypto_bip340_generate_secret); /// def publickey(secret_key: AnyBytes) -> bytes: /// """ /// Computes public key from secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip340_publickey(mp_obj_t secret_key) { +static mp_obj_t mod_trezorcrypto_bip340_publickey(mp_obj_t secret_key) { mp_buffer_info_t sk = {0}; mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); if (sk.len != 32) { @@ -76,10 +76,10 @@ STATIC mp_obj_t mod_trezorcrypto_bip340_publickey(mp_obj_t secret_key) { vstr_clear(&pk); mp_raise_ValueError(MP_ERROR_TEXT("Invalid secret key")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); + return mp_obj_new_bytes_from_vstr(&pk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip340_publickey_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip340_publickey_obj, mod_trezorcrypto_bip340_publickey); /// def sign( @@ -89,7 +89,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip340_publickey_obj, /// """ /// Uses secret key to produce the signature of the digest. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip340_sign(mp_obj_t secret_key, +static mp_obj_t mod_trezorcrypto_bip340_sign(mp_obj_t secret_key, mp_obj_t digest) { mp_buffer_info_t sk = {0}, dig = {0}; mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); @@ -110,10 +110,10 @@ STATIC mp_obj_t mod_trezorcrypto_bip340_sign(mp_obj_t secret_key, vstr_clear(&sig); mp_raise_ValueError(MP_ERROR_TEXT("Signing failed")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_bip340_sign_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_bip340_sign_obj, mod_trezorcrypto_bip340_sign); /// def verify_publickey(public_key: AnyBytes) -> bool: @@ -121,7 +121,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_bip340_sign_obj, /// Verifies whether the public key is valid. /// Returns True on success. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip340_verify_publickey(mp_obj_t public_key) { +static mp_obj_t mod_trezorcrypto_bip340_verify_publickey(mp_obj_t public_key) { mp_buffer_info_t pk = {0}; mp_get_buffer_raise(public_key, &pk, MP_BUFFER_READ); if (pk.len != 32) { @@ -130,7 +130,7 @@ STATIC mp_obj_t mod_trezorcrypto_bip340_verify_publickey(mp_obj_t public_key) { int ret = zkp_bip340_verify_publickey((const uint8_t *)pk.buf); return mp_obj_new_bool(ret == 0); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip340_verify_publickey_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip340_verify_publickey_obj, mod_trezorcrypto_bip340_verify_publickey); /// def verify( @@ -140,7 +140,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip340_verify_publickey_obj, /// Uses public key to verify the signature of the digest. /// Returns True on success. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip340_verify(mp_obj_t public_key, +static mp_obj_t mod_trezorcrypto_bip340_verify(mp_obj_t public_key, mp_obj_t signature, mp_obj_t digest) { mp_buffer_info_t pk = {0}, sig = {0}, dig = {0}; @@ -161,7 +161,7 @@ STATIC mp_obj_t mod_trezorcrypto_bip340_verify(mp_obj_t public_key, (const uint8_t *)dig.buf); return mp_obj_new_bool(ret == 0); } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_bip340_verify_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_bip340_verify_obj, mod_trezorcrypto_bip340_verify); /// def tweak_public_key( @@ -171,7 +171,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_bip340_verify_obj, /// """ /// Tweaks the public key with the specified root_hash. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip340_tweak_public_key(size_t n_args, +static mp_obj_t mod_trezorcrypto_bip340_tweak_public_key(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t pk = {0}; mp_get_buffer_raise(args[0], &pk, MP_BUFFER_READ); @@ -197,10 +197,10 @@ STATIC mp_obj_t mod_trezorcrypto_bip340_tweak_public_key(size_t n_args, vstr_clear(&tpk); mp_raise_ValueError(MP_ERROR_TEXT("Failed to tweak public key")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &tpk); + return mp_obj_new_bytes_from_vstr(&tpk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_bip340_tweak_public_key_obj, 1, 2, mod_trezorcrypto_bip340_tweak_public_key); @@ -211,7 +211,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Tweaks the secret key with the specified root_hash. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip340_tweak_secret_key(size_t n_args, +static mp_obj_t mod_trezorcrypto_bip340_tweak_secret_key(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t sk = {0}; mp_get_buffer_raise(args[0], &sk, MP_BUFFER_READ); @@ -237,14 +237,14 @@ STATIC mp_obj_t mod_trezorcrypto_bip340_tweak_secret_key(size_t n_args, vstr_clear(&tsk); mp_raise_ValueError(MP_ERROR_TEXT("Failed to tweak secret key")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &tsk); + return mp_obj_new_bytes_from_vstr(&tsk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_bip340_tweak_secret_key_obj, 1, 2, mod_trezorcrypto_bip340_tweak_secret_key); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_bip340_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_bip340_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bip340)}, {MP_ROM_QSTR(MP_QSTR_generate_secret), MP_ROM_PTR(&mod_trezorcrypto_bip340_generate_secret_obj)}, @@ -259,10 +259,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_bip340_globals_table[] = { MP_ROM_PTR(&mod_trezorcrypto_bip340_tweak_public_key_obj)}, {MP_ROM_QSTR(MP_QSTR_tweak_secret_key), MP_ROM_PTR(&mod_trezorcrypto_bip340_tweak_secret_key_obj)}}; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_bip340_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_bip340_globals, mod_trezorcrypto_bip340_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_bip340_module = { +static const mp_obj_module_t mod_trezorcrypto_bip340_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_bip340_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip39.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip39.h index a7dc9c0d00d..d3e66cb55ef 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip39.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-bip39.h @@ -29,7 +29,7 @@ /// """ /// Generate a mnemonic from given data (of 16, 20, 24, 28 and 32 bytes). /// """ -STATIC mp_obj_t mod_trezorcrypto_bip39_from_data(mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_bip39_from_data(mp_obj_t data) { mp_buffer_info_t bin = {0}; mp_get_buffer_raise(data, &bin, MP_BUFFER_READ); if (bin.len % 4 || bin.len < 16 || bin.len > 32) { @@ -42,20 +42,20 @@ STATIC mp_obj_t mod_trezorcrypto_bip39_from_data(mp_obj_t data) { mnemonic_clear(); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_from_data_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_from_data_obj, mod_trezorcrypto_bip39_from_data); /// def check(mnemonic: str) -> bool: /// """ /// Check whether given mnemonic is valid. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip39_check(mp_obj_t mnemonic) { +static mp_obj_t mod_trezorcrypto_bip39_check(mp_obj_t mnemonic) { mp_buffer_info_t text = {0}; mp_get_buffer_raise(mnemonic, &text, MP_BUFFER_READ); return (text.len > 0 && mnemonic_check(text.buf)) ? mp_const_true : mp_const_false; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_check_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_check_obj, mod_trezorcrypto_bip39_check); /// def seed( @@ -66,7 +66,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_check_obj, /// """ /// Generate seed from mnemonic and passphrase. /// """ -STATIC mp_obj_t mod_trezorcrypto_bip39_seed(size_t n_args, +static mp_obj_t mod_trezorcrypto_bip39_seed(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t mnemo = {0}; mp_buffer_info_t phrase = {0}; @@ -86,9 +86,9 @@ STATIC mp_obj_t mod_trezorcrypto_bip39_seed(size_t n_args, // generate without callback mnemonic_to_seed(pmnemonic, ppassphrase, (uint8_t *)seed.buf, NULL); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &seed); + return mp_obj_new_bytes_from_vstr(&seed); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_bip39_seed_obj, 2, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_bip39_seed_obj, 2, 3, mod_trezorcrypto_bip39_seed); #if !BITCOIN_ONLY @@ -96,7 +96,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_bip39_seed_obj, 2, /// """ /// Convert the mnemonic to its binary representation (including checksum). /// """ -STATIC mp_obj_t mod_trezorcrypto_bip39_mnemonic_to_bits(mp_obj_t mnemonic) { +static mp_obj_t mod_trezorcrypto_bip39_mnemonic_to_bits(mp_obj_t mnemonic) { mp_buffer_info_t text = {0}; mp_get_buffer_raise(mnemonic, &text, MP_BUFFER_READ); @@ -107,11 +107,11 @@ STATIC mp_obj_t mod_trezorcrypto_bip39_mnemonic_to_bits(mp_obj_t mnemonic) { } return mp_obj_new_bytes(bits, (binary_mnemonics_len + 7) / 8); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_mnemonic_to_bits_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_mnemonic_to_bits_obj, mod_trezorcrypto_bip39_mnemonic_to_bits); #endif // !BITCOIN_ONLY -STATIC const mp_rom_map_elem_t mod_trezorcrypto_bip39_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_bip39_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bip39)}, {MP_ROM_QSTR(MP_QSTR_from_data), MP_ROM_PTR(&mod_trezorcrypto_bip39_from_data_obj)}, @@ -122,10 +122,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_bip39_globals_table[] = { MP_ROM_PTR(&mod_trezorcrypto_bip39_mnemonic_to_bits_obj)}, #endif // !BITCOIN_ONLY }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_bip39_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_bip39_globals, mod_trezorcrypto_bip39_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_bip39_module = { +static const mp_obj_module_t mod_trezorcrypto_bip39_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_bip39_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake256.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake256.h index bd46342d6fc..b4b36de2458 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake256.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake256.h @@ -35,18 +35,17 @@ typedef struct _mp_obj_Blake256_t { BLAKE256_CTX ctx; } mp_obj_Blake256_t; -STATIC mp_obj_t mod_trezorcrypto_Blake256_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Blake256_update(mp_obj_t self, mp_obj_t data); /// def __init__(self, __data: StrOrBytes | None = None) -> None: /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake256_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Blake256_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Blake256_t *o = m_new_obj_with_finaliser(mp_obj_Blake256_t); - o->base.type = type; + mp_obj_Blake256_t *o = mp_obj_malloc_with_finaliser(mp_obj_Blake256_t, type); blake256_Init(&(o->ctx)); // constructor called with bytes/str as first parameter if (n_args == 1) { @@ -59,7 +58,7 @@ STATIC mp_obj_t mod_trezorcrypto_Blake256_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake256_update(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_Blake256_update(mp_obj_t self, mp_obj_t data) { mp_obj_Blake256_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(data, &msg, MP_BUFFER_READ); @@ -68,14 +67,14 @@ STATIC mp_obj_t mod_trezorcrypto_Blake256_update(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Blake256_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Blake256_update_obj, mod_trezorcrypto_Blake256_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake256_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Blake256_digest(mp_obj_t self) { mp_obj_Blake256_t *o = MP_OBJ_TO_PTR(self); vstr_t hash = {0}; vstr_init_len(&hash, BLAKE256_DIGEST_LENGTH); @@ -83,20 +82,20 @@ STATIC mp_obj_t mod_trezorcrypto_Blake256_digest(mp_obj_t self) { memcpy(&ctx, &(o->ctx), sizeof(BLAKE256_CTX)); blake256_Final(&ctx, (uint8_t *)hash.buf); memzero(&ctx, sizeof(BLAKE256_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake256_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake256_digest_obj, mod_trezorcrypto_Blake256_digest); -STATIC mp_obj_t mod_trezorcrypto_Blake256___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Blake256___del__(mp_obj_t self) { mp_obj_Blake256_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(BLAKE256_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake256___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake256___del___obj, mod_trezorcrypto_Blake256___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Blake256_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Blake256_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Blake256_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -106,12 +105,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Blake256_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(BLAKE256_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(BLAKE256_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Blake256_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Blake256_locals_dict, mod_trezorcrypto_Blake256_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Blake256_type = { - {&mp_type_type}, - .name = MP_QSTR_Blake256, - .make_new = mod_trezorcrypto_Blake256_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Blake256_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Blake256_type, + MP_QSTR_Blake256, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Blake256_make_new, + locals_dict, &mod_trezorcrypto_Blake256_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake2b.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake2b.h index 903f25464f1..3b71205a530 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake2b.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake2b.h @@ -37,7 +37,7 @@ typedef struct _mp_obj_Blake2b_t { BLAKE2B_CTX ctx; } mp_obj_Blake2b_t; -STATIC mp_obj_t mod_trezorcrypto_Blake2b_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Blake2b_update(mp_obj_t self, mp_obj_t data); /// def __init__( /// self, @@ -49,10 +49,10 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2b_update(mp_obj_t self, mp_obj_t data); /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake2b_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Blake2b_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - STATIC const mp_arg_t allowed_args[] = { + static const mp_arg_t allowed_args[] = { {MP_QSTR_data, MP_ARG_OBJ, {.u_obj = mp_const_empty_bytes}}, {MP_QSTR_outlen, MP_ARG_KW_ONLY | MP_ARG_INT, @@ -84,8 +84,7 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2b_make_new(const mp_obj_type_t *type, MP_ERROR_TEXT("Cannot use Blake2b key and personal at the same time")); } - mp_obj_Blake2b_t *o = m_new_obj_with_finaliser(mp_obj_Blake2b_t); - o->base.type = type; + mp_obj_Blake2b_t *o = mp_obj_malloc_with_finaliser(mp_obj_Blake2b_t, type); int res = 0; if (key_len > 0) { @@ -113,7 +112,7 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2b_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake2b_update(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_Blake2b_update(mp_obj_t self, mp_obj_t data) { mp_obj_Blake2b_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(data, &msg, MP_BUFFER_READ); @@ -122,14 +121,14 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2b_update(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Blake2b_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Blake2b_update_obj, mod_trezorcrypto_Blake2b_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake2b_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Blake2b_digest(mp_obj_t self) { mp_obj_Blake2b_t *o = MP_OBJ_TO_PTR(self); BLAKE2B_CTX ctx = {0}; memcpy(&ctx, &(o->ctx), sizeof(BLAKE2B_CTX)); @@ -137,20 +136,20 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2b_digest(mp_obj_t self) { vstr_init_len(&hash, ctx.outlen); blake2b_Final(&ctx, (uint8_t *)hash.buf, hash.len); memzero(&ctx, sizeof(BLAKE2B_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake2b_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake2b_digest_obj, mod_trezorcrypto_Blake2b_digest); -STATIC mp_obj_t mod_trezorcrypto_Blake2b___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Blake2b___del__(mp_obj_t self) { mp_obj_Blake2b_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(BLAKE2B_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake2b___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake2b___del___obj, mod_trezorcrypto_Blake2b___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Blake2b_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Blake2b_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Blake2b_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -160,12 +159,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Blake2b_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(BLAKE2B_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(BLAKE2B_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Blake2b_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Blake2b_locals_dict, mod_trezorcrypto_Blake2b_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Blake2b_type = { - {&mp_type_type}, - .name = MP_QSTR_Blake2b, - .make_new = mod_trezorcrypto_Blake2b_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Blake2b_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Blake2b_type, + MP_QSTR_Blake2b, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Blake2b_make_new, + locals_dict, &mod_trezorcrypto_Blake2b_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake2s.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake2s.h index a09334f6984..15dc51ef93c 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake2s.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-blake2s.h @@ -37,7 +37,7 @@ typedef struct _mp_obj_Blake2s_t { BLAKE2S_CTX ctx; } mp_obj_Blake2s_t; -STATIC mp_obj_t mod_trezorcrypto_Blake2s_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Blake2s_update(mp_obj_t self, mp_obj_t data); /// def __init__( /// self, @@ -49,10 +49,10 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2s_update(mp_obj_t self, mp_obj_t data); /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake2s_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Blake2s_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - STATIC const mp_arg_t allowed_args[] = { + static const mp_arg_t allowed_args[] = { {MP_QSTR_data, MP_ARG_OBJ, {.u_obj = mp_const_empty_bytes}}, {MP_QSTR_outlen, MP_ARG_KW_ONLY | MP_ARG_INT, @@ -84,8 +84,7 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2s_make_new(const mp_obj_type_t *type, MP_ERROR_TEXT("Cannot use Blake2s key and personal at the same time")); } - mp_obj_Blake2s_t *o = m_new_obj_with_finaliser(mp_obj_Blake2s_t); - o->base.type = type; + mp_obj_Blake2s_t *o = mp_obj_malloc_with_finaliser(mp_obj_Blake2s_t, type); int res = 0; if (key_len > 0) { @@ -113,7 +112,7 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2s_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake2s_update(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_Blake2s_update(mp_obj_t self, mp_obj_t data) { mp_obj_Blake2s_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(data, &msg, MP_BUFFER_READ); @@ -122,14 +121,14 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2s_update(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Blake2s_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Blake2s_update_obj, mod_trezorcrypto_Blake2s_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Blake2s_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Blake2s_digest(mp_obj_t self) { mp_obj_Blake2s_t *o = MP_OBJ_TO_PTR(self); BLAKE2S_CTX ctx = {0}; memcpy(&ctx, &(o->ctx), sizeof(BLAKE2S_CTX)); @@ -137,20 +136,20 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2s_digest(mp_obj_t self) { vstr_init_len(&hash, ctx.outlen); blake2s_Final(&ctx, (uint8_t *)hash.buf, hash.len); memzero(&ctx, sizeof(BLAKE2S_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake2s_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake2s_digest_obj, mod_trezorcrypto_Blake2s_digest); -STATIC mp_obj_t mod_trezorcrypto_Blake2s___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Blake2s___del__(mp_obj_t self) { mp_obj_Blake2s_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(BLAKE2S_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake2s___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Blake2s___del___obj, mod_trezorcrypto_Blake2s___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Blake2s_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Blake2s_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Blake2s_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -160,12 +159,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Blake2s_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(BLAKE2S_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(BLAKE2S_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Blake2s_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Blake2s_locals_dict, mod_trezorcrypto_Blake2s_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Blake2s_type = { - {&mp_type_type}, - .name = MP_QSTR_Blake2s, - .make_new = mod_trezorcrypto_Blake2s_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Blake2s_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Blake2s_type, + MP_QSTR_Blake2s, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Blake2s_make_new, + locals_dict, &mod_trezorcrypto_Blake2s_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-cardano.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-cardano.h index 8b78da02412..68cf8f7ab85 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-cardano.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-cardano.h @@ -44,7 +44,7 @@ /// scheme. If `trezor_derivation` is True, the Icarus-Trezor variant is /// used (see CIP-3). /// """ -STATIC mp_obj_t mod_trezorcrypto_cardano_derive_icarus(size_t n_args, +static mp_obj_t mod_trezorcrypto_cardano_derive_icarus(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t binary_mnemonic = {0}, phrase = {0}; mp_get_buffer_raise(args[0], &binary_mnemonic, MP_BUFFER_READ); @@ -86,10 +86,10 @@ STATIC mp_obj_t mod_trezorcrypto_cardano_derive_icarus(size_t n_args, MP_ERROR_TEXT("Unexpected failure in Icarus derivation.")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_cardano_derive_icarus_obj, 3, 4, mod_trezorcrypto_cardano_derive_icarus); @@ -97,15 +97,15 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Creates a Cardano HD node from a master secret. /// """ -STATIC mp_obj_t mod_trezorcrypto_from_secret(mp_obj_t secret) { +static mp_obj_t mod_trezorcrypto_from_secret(mp_obj_t secret) { mp_buffer_info_t bufinfo; mp_get_buffer_raise(secret, &bufinfo, MP_BUFFER_READ); if (bufinfo.len != CARDANO_SECRET_LENGTH) { mp_raise_ValueError(MP_ERROR_TEXT("Invalid secret length")); } - mp_obj_HDNode_t *o = m_new_obj_with_finaliser(mp_obj_HDNode_t); - o->base.type = &mod_trezorcrypto_HDNode_type; + mp_obj_HDNode_t *o = mp_obj_malloc_with_finaliser( + mp_obj_HDNode_t, &mod_trezorcrypto_HDNode_type); const int res = hdnode_from_secret_cardano(bufinfo.buf, &o->hdnode); if (res != 1) { m_del_obj(mp_obj_HDNode_t, o); @@ -117,14 +117,14 @@ STATIC mp_obj_t mod_trezorcrypto_from_secret(mp_obj_t secret) { return MP_OBJ_FROM_PTR(o); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_from_secret_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_from_secret_obj, mod_trezorcrypto_from_secret); /// def from_seed_slip23(seed: AnyBytes) -> HDNode: /// """ /// Creates a Cardano HD node from a seed via SLIP-23 derivation. /// """ -STATIC mp_obj_t mod_trezorcrypto_from_seed_slip23(mp_obj_t seed) { +static mp_obj_t mod_trezorcrypto_from_seed_slip23(mp_obj_t seed) { mp_buffer_info_t bufinfo; mp_get_buffer_raise(seed, &bufinfo, MP_BUFFER_READ); if (bufinfo.len == 0) { @@ -147,21 +147,21 @@ STATIC mp_obj_t mod_trezorcrypto_from_seed_slip23(mp_obj_t seed) { MP_ERROR_TEXT("Unexpected failure in constructing Cardano node.")); } - mp_obj_HDNode_t *o = m_new_obj_with_finaliser(mp_obj_HDNode_t); - o->base.type = &mod_trezorcrypto_HDNode_type; + mp_obj_HDNode_t *o = mp_obj_malloc_with_finaliser( + mp_obj_HDNode_t, &mod_trezorcrypto_HDNode_type); o->hdnode = hdnode; o->fingerprint = hdnode_fingerprint(&o->hdnode); return MP_OBJ_FROM_PTR(o); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_from_seed_slip23_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_from_seed_slip23_obj, mod_trezorcrypto_from_seed_slip23); /// def from_seed_ledger(seed: AnyBytes) -> HDNode: /// """ /// Creates a Cardano HD node from a seed via Ledger derivation. /// """ -STATIC mp_obj_t mod_trezorcrypto_from_seed_ledger(mp_obj_t seed) { +static mp_obj_t mod_trezorcrypto_from_seed_ledger(mp_obj_t seed) { mp_buffer_info_t bufinfo; mp_get_buffer_raise(seed, &bufinfo, MP_BUFFER_READ); if (bufinfo.len == 0) { @@ -184,17 +184,17 @@ STATIC mp_obj_t mod_trezorcrypto_from_seed_ledger(mp_obj_t seed) { MP_ERROR_TEXT("Unexpected failure in constructing Cardano node.")); } - mp_obj_HDNode_t *o = m_new_obj_with_finaliser(mp_obj_HDNode_t); - o->base.type = &mod_trezorcrypto_HDNode_type; + mp_obj_HDNode_t *o = mp_obj_malloc_with_finaliser( + mp_obj_HDNode_t, &mod_trezorcrypto_HDNode_type); o->hdnode = hdnode; o->fingerprint = hdnode_fingerprint(&o->hdnode); return MP_OBJ_FROM_PTR(o); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_from_seed_ledger_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_from_seed_ledger_obj, mod_trezorcrypto_from_seed_ledger); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_cardano_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_cardano_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_cardano)}, {MP_ROM_QSTR(MP_QSTR_derive_icarus), MP_ROM_PTR(&mod_trezorcrypto_cardano_derive_icarus_obj)}, @@ -205,10 +205,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_cardano_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_from_seed_ledger), MP_ROM_PTR(&mod_trezorcrypto_from_seed_ledger_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_cardano_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_cardano_globals, mod_trezorcrypto_cardano_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_cardano_module = { +static const mp_obj_module_t mod_trezorcrypto_cardano_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_cardano_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-chacha20poly1305.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-chacha20poly1305.h index f22596d8b47..5f7e7a297eb 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-chacha20poly1305.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-chacha20poly1305.h @@ -47,7 +47,7 @@ typedef struct _mp_obj_ChaCha20Poly1305_t { /// Initialize the ChaCha20 + Poly1305 context for encryption /// using a 32 byte key and 12 byte nonce as in the RFC 7539 style. /// """ -STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_make_new( +static mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 2, 2, false); @@ -61,9 +61,8 @@ STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_make_new( mp_raise_ValueError(MP_ERROR_TEXT("Invalid length of nonce")); } mp_obj_ChaCha20Poly1305_t *o = - m_new_obj_with_finaliser(mp_obj_ChaCha20Poly1305_t); + mp_obj_malloc_with_finaliser(mp_obj_ChaCha20Poly1305_t, type); rfc7539_init(&(o->ctx), key.buf, nonce.buf); - o->base.type = type; o->alen = 0; o->plen = 0; o->state = INIT; @@ -76,7 +75,7 @@ STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_make_new( /// style with 16 byte padding. This must only be called once and prior /// to encryption. /// """ -STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_auth(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_auth(mp_obj_t self, mp_obj_t data) { mp_obj_ChaCha20Poly1305_t *o = MP_OBJ_TO_PTR(self); if (o->state != INIT) { @@ -89,7 +88,7 @@ STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_auth(mp_obj_t self, o->alen += in.len; return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ChaCha20Poly1305_auth_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ChaCha20Poly1305_auth_obj, mod_trezorcrypto_ChaCha20Poly1305_auth); /// def encrypt(self, data: AnyBytes) -> bytes: @@ -97,7 +96,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ChaCha20Poly1305_auth_obj, /// Encrypt data (length of data must be divisible by 64 except for the /// final value). /// """ -STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_encrypt(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_encrypt(mp_obj_t self, mp_obj_t data) { mp_obj_ChaCha20Poly1305_t *o = MP_OBJ_TO_PTR(self); if (o->state != INIT && o->state != PROCESSING) { @@ -110,17 +109,17 @@ STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_encrypt(mp_obj_t self, vstr_init_len(&vstr, in.len); chacha20poly1305_encrypt(&(o->ctx), in.buf, (uint8_t *)vstr.buf, in.len); o->plen += in.len; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ChaCha20Poly1305_encrypt_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ChaCha20Poly1305_encrypt_obj, mod_trezorcrypto_ChaCha20Poly1305_encrypt); /// def finish(self) -> bytes: /// """ /// Compute RFC 7539-style Poly1305 MAC. /// """ -STATIC mp_obj_t -mod_trezorcrypto_ChaCha20Poly1305_encrypt_finish(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_encrypt_finish( + mp_obj_t self) { mp_obj_ChaCha20Poly1305_t *o = MP_OBJ_TO_PTR(self); if (o->state != INIT && o->state != PROCESSING) { mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("Invalid state.")); @@ -130,9 +129,9 @@ mod_trezorcrypto_ChaCha20Poly1305_encrypt_finish(mp_obj_t self) { vstr_t mac = {0}; vstr_init_len(&mac, 16); rfc7539_finish(&(o->ctx), o->alen, o->plen, (uint8_t *)mac.buf); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &mac); + return mp_obj_new_bytes_from_vstr(&mac); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1( +static MP_DEFINE_CONST_FUN_OBJ_1( mod_trezorcrypto_ChaCha20Poly1305_encrypt_finish_obj, mod_trezorcrypto_ChaCha20Poly1305_encrypt_finish); @@ -159,7 +158,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1( /// Decrypt data (length of data must be divisible by 64 except for the /// final value). /// """ -STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_decrypt(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_decrypt(mp_obj_t self, mp_obj_t data) { mp_obj_ChaCha20Poly1305_t *o = MP_OBJ_TO_PTR(self); if (o->state != INIT && o->state != PROCESSING) { @@ -172,16 +171,16 @@ STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_decrypt(mp_obj_t self, vstr_init_len(&vstr, in.len); chacha20poly1305_decrypt(&(o->ctx), in.buf, (uint8_t *)vstr.buf, in.len); o->plen += in.len; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ChaCha20Poly1305_decrypt_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ChaCha20Poly1305_decrypt_obj, mod_trezorcrypto_ChaCha20Poly1305_decrypt); /// def finish(self, expected_mac: AnyBytes) -> None: /// """ /// Verify RFC 7539-style Poly1305 MAC. /// """ -STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_decrypt_finish( +static mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_decrypt_finish( mp_obj_t self, mp_obj_t expected_mac) { mp_obj_ChaCha20Poly1305_t *o = MP_OBJ_TO_PTR(self); if (o->state != INIT && o->state != PROCESSING) { @@ -206,21 +205,21 @@ STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_decrypt_finish( return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2( +static MP_DEFINE_CONST_FUN_OBJ_2( mod_trezorcrypto_ChaCha20Poly1305_decrypt_finish_obj, mod_trezorcrypto_ChaCha20Poly1305_decrypt_finish); -STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_ChaCha20Poly1305___del__(mp_obj_t self) { mp_obj_ChaCha20Poly1305_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(chacha20poly1305_ctx)); o->alen = 0; o->plen = 0; return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_ChaCha20Poly1305___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_ChaCha20Poly1305___del___obj, mod_trezorcrypto_ChaCha20Poly1305___del__); -STATIC const mp_rom_map_elem_t +static const mp_rom_map_elem_t mod_trezorcrypto_ChaCha20Poly1305Encrypt_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_encrypt), MP_ROM_PTR(&mod_trezorcrypto_ChaCha20Poly1305_encrypt_obj)}, @@ -231,11 +230,11 @@ STATIC const mp_rom_map_elem_t {MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mod_trezorcrypto_ChaCha20Poly1305___del___obj)}, }; -STATIC MP_DEFINE_CONST_DICT( +static MP_DEFINE_CONST_DICT( mod_trezorcrypto_ChaCha20Poly1305Encrypt_locals_dict, mod_trezorcrypto_ChaCha20Poly1305Encrypt_locals_dict_table); -STATIC const mp_rom_map_elem_t +static const mp_rom_map_elem_t mod_trezorcrypto_ChaCha20Poly1305Decrypt_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_decrypt), MP_ROM_PTR(&mod_trezorcrypto_ChaCha20Poly1305_decrypt_obj)}, @@ -246,22 +245,20 @@ STATIC const mp_rom_map_elem_t {MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mod_trezorcrypto_ChaCha20Poly1305___del___obj)}, }; -STATIC MP_DEFINE_CONST_DICT( +static MP_DEFINE_CONST_DICT( mod_trezorcrypto_ChaCha20Poly1305Decrypt_locals_dict, mod_trezorcrypto_ChaCha20Poly1305Decrypt_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_ChaCha20Poly1305Encrypt_type = { - {&mp_type_type}, - .name = MP_QSTR_chacha20poly1305_encrypt, - .make_new = mod_trezorcrypto_ChaCha20Poly1305_make_new, - .locals_dict = - (void *)&mod_trezorcrypto_ChaCha20Poly1305Encrypt_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_ChaCha20Poly1305Encrypt_type, + MP_QSTR_chacha20poly1305_encrypt, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_ChaCha20Poly1305_make_new, + locals_dict, &mod_trezorcrypto_ChaCha20Poly1305Encrypt_locals_dict); +// clang-format on -STATIC const mp_obj_type_t mod_trezorcrypto_ChaCha20Poly1305Decrypt_type = { - {&mp_type_type}, - .name = MP_QSTR_chacha20poly1305_decrypt, - .make_new = mod_trezorcrypto_ChaCha20Poly1305_make_new, - .locals_dict = - (void *)&mod_trezorcrypto_ChaCha20Poly1305Decrypt_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_ChaCha20Poly1305Decrypt_type, + MP_QSTR_chacha20poly1305_decrypt, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_ChaCha20Poly1305_make_new, + locals_dict, &mod_trezorcrypto_ChaCha20Poly1305Decrypt_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-crc.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-crc.h index 61f283c44b9..bd10ea3bd10 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-crc.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-crc.h @@ -44,17 +44,17 @@ mp_obj_t mod_trezorcrypto_crc_crc32(size_t n_args, const mp_obj_t *args) { crc = checksum_crc32(bufinfo.buf, bufinfo.len, crc ^ 0xffffffff); return mp_obj_new_int_from_uint(crc ^ 0xffffffff); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_crc_crc32_obj, 1, 2, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_crc_crc32_obj, 1, 2, mod_trezorcrypto_crc_crc32); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_crc_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_crc_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_crc)}, {MP_ROM_QSTR(MP_QSTR_crc32), MP_ROM_PTR(&mod_trezorcrypto_crc_crc32_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_crc_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_crc_globals, mod_trezorcrypto_crc_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_crc_module = { +static const mp_obj_module_t mod_trezorcrypto_crc_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_crc_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-curve25519.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-curve25519.h index 04dec57a414..b693e729899 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-curve25519.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-curve25519.h @@ -29,7 +29,7 @@ /// """ /// Generate secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_curve25519_generate_secret() { +static mp_obj_t mod_trezorcrypto_curve25519_generate_secret() { vstr_t sk = {0}; vstr_init_len(&sk, 32); rng_fill_buffer((uint8_t *)sk.buf, sk.len); @@ -37,9 +37,9 @@ STATIC mp_obj_t mod_trezorcrypto_curve25519_generate_secret() { sk.buf[0] &= 248; sk.buf[31] &= 127; sk.buf[31] |= 64; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sk); + return mp_obj_new_bytes_from_vstr(&sk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0( +static MP_DEFINE_CONST_FUN_OBJ_0( mod_trezorcrypto_curve25519_generate_secret_obj, mod_trezorcrypto_curve25519_generate_secret); @@ -47,7 +47,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0( /// """ /// Computes public key from secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_curve25519_publickey(mp_obj_t secret_key) { +static mp_obj_t mod_trezorcrypto_curve25519_publickey(mp_obj_t secret_key) { mp_buffer_info_t sk = {0}; mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); if (sk.len != 32) { @@ -56,9 +56,9 @@ STATIC mp_obj_t mod_trezorcrypto_curve25519_publickey(mp_obj_t secret_key) { vstr_t pk = {0}; vstr_init_len(&pk, 32); curve25519_scalarmult_basepoint((uint8_t *)pk.buf, (const uint8_t *)sk.buf); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); + return mp_obj_new_bytes_from_vstr(&pk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_curve25519_publickey_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_curve25519_publickey_obj, mod_trezorcrypto_curve25519_publickey); /// def multiply(secret_key: AnyBytes, public_key: AnyBytes) -> bytes: @@ -66,7 +66,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_curve25519_publickey_obj, /// Multiplies point defined by public_key with scalar defined by /// secret_key. Useful for ECDH. /// """ -STATIC mp_obj_t mod_trezorcrypto_curve25519_multiply(mp_obj_t secret_key, +static mp_obj_t mod_trezorcrypto_curve25519_multiply(mp_obj_t secret_key, mp_obj_t public_key) { mp_buffer_info_t sk = {0}, pk = {0}; mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); @@ -81,12 +81,12 @@ STATIC mp_obj_t mod_trezorcrypto_curve25519_multiply(mp_obj_t secret_key, vstr_init_len(&out, 32); curve25519_scalarmult((uint8_t *)out.buf, (const uint8_t *)sk.buf, (const uint8_t *)pk.buf); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &out); + return mp_obj_new_bytes_from_vstr(&out); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_curve25519_multiply_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_curve25519_multiply_obj, mod_trezorcrypto_curve25519_multiply); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_curve25519_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_curve25519_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_curve25519)}, {MP_ROM_QSTR(MP_QSTR_generate_secret), MP_ROM_PTR(&mod_trezorcrypto_curve25519_generate_secret_obj)}, @@ -95,10 +95,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_curve25519_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_multiply), MP_ROM_PTR(&mod_trezorcrypto_curve25519_multiply_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_curve25519_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_curve25519_globals, mod_trezorcrypto_curve25519_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_curve25519_module = { +static const mp_obj_module_t mod_trezorcrypto_curve25519_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_curve25519_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-ed25519.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-ed25519.h index 1c8df4952b7..36864ec8323 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-ed25519.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-ed25519.h @@ -30,20 +30,20 @@ /// """ /// Generate secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_ed25519_generate_secret() { +static mp_obj_t mod_trezorcrypto_ed25519_generate_secret() { vstr_t sk = {0}; vstr_init_len(&sk, 32); rng_fill_buffer((uint8_t *)sk.buf, sk.len); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sk); + return mp_obj_new_bytes_from_vstr(&sk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_ed25519_generate_secret_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_ed25519_generate_secret_obj, mod_trezorcrypto_ed25519_generate_secret); /// def publickey(secret_key: AnyBytes) -> bytes: /// """ /// Computes public key from secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_ed25519_publickey(mp_obj_t secret_key) { +static mp_obj_t mod_trezorcrypto_ed25519_publickey(mp_obj_t secret_key) { mp_buffer_info_t sk = {0}; mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); if (sk.len != 32) { @@ -53,9 +53,9 @@ STATIC mp_obj_t mod_trezorcrypto_ed25519_publickey(mp_obj_t secret_key) { vstr_init_len(&pk, sizeof(ed25519_public_key)); ed25519_publickey(*(const ed25519_secret_key *)sk.buf, *(ed25519_public_key *)pk.buf); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); + return mp_obj_new_bytes_from_vstr(&pk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_ed25519_publickey_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_ed25519_publickey_obj, mod_trezorcrypto_ed25519_publickey); /// def sign( @@ -64,7 +64,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_ed25519_publickey_obj, /// """ /// Uses secret key to produce the signature of message. /// """ -STATIC mp_obj_t mod_trezorcrypto_ed25519_sign(size_t n_args, +static mp_obj_t mod_trezorcrypto_ed25519_sign(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t sk = {0}, msg = {0}; mp_get_buffer_raise(args[0], &sk, MP_BUFFER_READ); @@ -94,9 +94,9 @@ STATIC mp_obj_t mod_trezorcrypto_ed25519_sign(size_t n_args, *(ed25519_signature *)sig.buf); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_ed25519_sign_obj, 2, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_ed25519_sign_obj, 2, 3, mod_trezorcrypto_ed25519_sign); #if !BITCOIN_ONLY @@ -107,7 +107,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_ed25519_sign_obj, 2, /// """ /// Uses extended secret key to produce the cardano signature of message. /// """ -STATIC mp_obj_t mod_trezorcrypto_ed25519_sign_ext(mp_obj_t secret_scalar, +static mp_obj_t mod_trezorcrypto_ed25519_sign_ext(mp_obj_t secret_scalar, mp_obj_t secret_extension, mp_obj_t message) { mp_buffer_info_t sk = {0}, skext = {0}, msg = {0}; @@ -129,9 +129,9 @@ STATIC mp_obj_t mod_trezorcrypto_ed25519_sign_ext(mp_obj_t secret_scalar, ed25519_sign_ext(msg.buf, msg.len, *(const ed25519_secret_key *)sk.buf, *(const ed25519_secret_key *)skext.buf, *(ed25519_signature *)sig.buf); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_ed25519_sign_ext_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_ed25519_sign_ext_obj, mod_trezorcrypto_ed25519_sign_ext); #endif @@ -143,7 +143,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_ed25519_sign_ext_obj, /// Uses public key to verify the signature of the message. /// Returns True on success. /// """ -STATIC mp_obj_t mod_trezorcrypto_ed25519_verify(mp_obj_t public_key, +static mp_obj_t mod_trezorcrypto_ed25519_verify(mp_obj_t public_key, mp_obj_t signature, mp_obj_t message) { mp_buffer_info_t pk = {0}, sig = {0}, msg = {0}; @@ -165,15 +165,15 @@ STATIC mp_obj_t mod_trezorcrypto_ed25519_verify(mp_obj_t public_key, ? mp_const_true : mp_const_false; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_ed25519_verify_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_ed25519_verify_obj, mod_trezorcrypto_ed25519_verify); /// def cosi_combine_publickeys(public_keys: Sequence[AnyBytes]) -> bytes: /// """ /// Combines a list of public keys used in COSI cosigning scheme. /// """ -STATIC mp_obj_t -mod_trezorcrypto_ed25519_cosi_combine_publickeys(mp_obj_t public_keys) { +static mp_obj_t mod_trezorcrypto_ed25519_cosi_combine_publickeys( + mp_obj_t public_keys) { size_t pklen = 0; mp_obj_t *pkitems = NULL; mp_obj_get_array(public_keys, &pklen, &pkitems); @@ -198,9 +198,9 @@ mod_trezorcrypto_ed25519_cosi_combine_publickeys(mp_obj_t public_keys) { vstr_clear(&pk); mp_raise_ValueError(MP_ERROR_TEXT("Error combining public keys")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); + return mp_obj_new_bytes_from_vstr(&pk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1( +static MP_DEFINE_CONST_FUN_OBJ_1( mod_trezorcrypto_ed25519_cosi_combine_publickeys_obj, mod_trezorcrypto_ed25519_cosi_combine_publickeys); @@ -210,7 +210,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1( /// """ /// Combines a list of signatures used in COSI cosigning scheme. /// """ -STATIC mp_obj_t mod_trezorcrypto_ed25519_cosi_combine_signatures( +static mp_obj_t mod_trezorcrypto_ed25519_cosi_combine_signatures( mp_obj_t R, mp_obj_t signatures) { mp_buffer_info_t sigR = {0}; mp_get_buffer_raise(R, &sigR, MP_BUFFER_READ); @@ -239,9 +239,9 @@ STATIC mp_obj_t mod_trezorcrypto_ed25519_cosi_combine_signatures( ed25519_cosi_combine_signatures(*(ed25519_signature *)sig.buf, *(const ed25519_public_key *)sigR.buf, sigs, siglen); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2( +static MP_DEFINE_CONST_FUN_OBJ_2( mod_trezorcrypto_ed25519_cosi_combine_signatures_obj, mod_trezorcrypto_ed25519_cosi_combine_signatures); @@ -249,7 +249,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2( /// """ /// Generate a nonce and commitment for the CoSi cosigning scheme. /// """ -STATIC mp_obj_t mod_trezorcrypto_ed25519_cosi_commit() { +static mp_obj_t mod_trezorcrypto_ed25519_cosi_commit() { vstr_t nonce = {0}; vstr_t commitment = {0}; vstr_init_len(&nonce, 32); @@ -257,11 +257,11 @@ STATIC mp_obj_t mod_trezorcrypto_ed25519_cosi_commit() { ed25519_cosi_commit(*(ed25519_secret_key *)nonce.buf, *(ed25519_public_key *)commitment.buf); mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL)); - tuple->items[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &nonce); - tuple->items[1] = mp_obj_new_str_from_vstr(&mp_type_bytes, &commitment); + tuple->items[0] = mp_obj_new_bytes_from_vstr(&nonce); + tuple->items[1] = mp_obj_new_bytes_from_vstr(&commitment); return MP_OBJ_FROM_PTR(tuple); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_ed25519_cosi_commit_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_ed25519_cosi_commit_obj, mod_trezorcrypto_ed25519_cosi_commit); /// def cosi_sign( @@ -274,7 +274,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_ed25519_cosi_commit_obj, /// """ /// Produce signature of message using COSI cosigning scheme. /// """ -STATIC mp_obj_t mod_trezorcrypto_ed25519_cosi_sign(size_t n_args, +static mp_obj_t mod_trezorcrypto_ed25519_cosi_sign(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t sk = {0}, msg = {0}, nonce = {0}, sigR = {0}, pk = {0}; mp_get_buffer_raise(args[0], &sk, MP_BUFFER_READ); @@ -306,13 +306,13 @@ STATIC mp_obj_t mod_trezorcrypto_ed25519_cosi_sign(size_t n_args, vstr_clear(&sig); mp_raise_ValueError(MP_ERROR_TEXT("Signing failed")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_ed25519_cosi_sign_obj, 5, 5, mod_trezorcrypto_ed25519_cosi_sign); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_ed25519_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_ed25519_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_ed25519)}, {MP_ROM_QSTR(MP_QSTR_generate_secret), MP_ROM_PTR(&mod_trezorcrypto_ed25519_generate_secret_obj)}, @@ -334,10 +334,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_ed25519_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_cosi_sign), MP_ROM_PTR(&mod_trezorcrypto_ed25519_cosi_sign_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_ed25519_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_ed25519_globals, mod_trezorcrypto_ed25519_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_ed25519_module = { +static const mp_obj_module_t mod_trezorcrypto_ed25519_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_ed25519_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-elligator2.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-elligator2.h index 4200f7d4aad..dcaf2c4439b 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-elligator2.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-elligator2.h @@ -44,21 +44,21 @@ mp_obj_t mod_trezorcrypto_elligator2_map_to_curve25519(mp_obj_t input) { mp_raise_ValueError(NULL); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &output_vstr); + return mp_obj_new_bytes_from_vstr(&output_vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1( +static MP_DEFINE_CONST_FUN_OBJ_1( mod_trezorcrypto_elligator2_map_to_curve25519_obj, mod_trezorcrypto_elligator2_map_to_curve25519); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_elligator2_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_elligator2_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_elligator2)}, {MP_ROM_QSTR(MP_QSTR_map_to_curve25519), MP_ROM_PTR(&mod_trezorcrypto_elligator2_map_to_curve25519_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_elligator2_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_elligator2_globals, mod_trezorcrypto_elligator2_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_elligator2_module = { +static const mp_obj_module_t mod_trezorcrypto_elligator2_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_elligator2_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-groestl.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-groestl.h index 0e2e4f80e09..38abd733937 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-groestl.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-groestl.h @@ -38,19 +38,19 @@ typedef struct _mp_obj_Groestl512_t { GROESTL512_CTX ctx; } mp_obj_Groestl512_t; -STATIC mp_obj_t mod_trezorcrypto_Groestl512_update(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_Groestl512_update(mp_obj_t self, mp_obj_t data); /// def __init__(self, __data: StrOrBytes | None = None) -> None: /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Groestl512_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Groestl512_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Groestl512_t *o = m_new_obj_with_finaliser(mp_obj_Groestl512_t); - o->base.type = type; + mp_obj_Groestl512_t *o = + mp_obj_malloc_with_finaliser(mp_obj_Groestl512_t, type); groestl512_Init(&(o->ctx)); if (n_args == 1) { mod_trezorcrypto_Groestl512_update(MP_OBJ_FROM_PTR(o), args[0]); @@ -62,7 +62,7 @@ STATIC mp_obj_t mod_trezorcrypto_Groestl512_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Groestl512_update(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_Groestl512_update(mp_obj_t self, mp_obj_t data) { mp_obj_Groestl512_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; @@ -72,14 +72,14 @@ STATIC mp_obj_t mod_trezorcrypto_Groestl512_update(mp_obj_t self, } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Groestl512_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Groestl512_update_obj, mod_trezorcrypto_Groestl512_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Groestl512_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Groestl512_digest(mp_obj_t self) { mp_obj_Groestl512_t *o = MP_OBJ_TO_PTR(self); vstr_t hash = {0}; vstr_init_len(&hash, GROESTL512_DIGEST_LENGTH); @@ -87,21 +87,21 @@ STATIC mp_obj_t mod_trezorcrypto_Groestl512_digest(mp_obj_t self) { memcpy(&ctx, &(o->ctx), sizeof(GROESTL512_CTX)); groestl512_Final(&ctx, (uint8_t *)hash.buf); memzero(&ctx, sizeof(GROESTL512_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Groestl512_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Groestl512_digest_obj, mod_trezorcrypto_Groestl512_digest); -STATIC mp_obj_t mod_trezorcrypto_Groestl512___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Groestl512___del__(mp_obj_t self) { mp_obj_Groestl512_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(GROESTL512_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Groestl512___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Groestl512___del___obj, mod_trezorcrypto_Groestl512___del__); -STATIC const mp_rom_map_elem_t - mod_trezorcrypto_Groestl512_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Groestl512_locals_dict_table[] = + { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Groestl512_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -112,12 +112,12 @@ STATIC const mp_rom_map_elem_t {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(GROESTL512_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Groestl512_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Groestl512_locals_dict, mod_trezorcrypto_Groestl512_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Groestl512_type = { - {&mp_type_type}, - .name = MP_QSTR_Groestl512, - .make_new = mod_trezorcrypto_Groestl512_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Groestl512_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Groestl512_type, + MP_QSTR_Groestl512, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Groestl512_make_new, + locals_dict, &mod_trezorcrypto_Groestl512_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-hmac.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-hmac.h index 3e819d8f78e..fcfc2a88691 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-hmac.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-hmac.h @@ -42,7 +42,7 @@ typedef struct _mp_obj_Hmac_t { uint32_t hashtype; } mp_obj_Hmac_t; -STATIC mp_obj_t mod_trezorcrypto_Hmac_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Hmac_update(mp_obj_t self, mp_obj_t data); /// def __init__( /// self, @@ -53,7 +53,7 @@ STATIC mp_obj_t mod_trezorcrypto_Hmac_update(mp_obj_t self, mp_obj_t data); /// """ /// Create a HMAC context. /// """ -STATIC mp_obj_t mod_trezorcrypto_Hmac_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Hmac_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 2, 3, false); @@ -65,8 +65,7 @@ STATIC mp_obj_t mod_trezorcrypto_Hmac_make_new(const mp_obj_type_t *type, key.buf = ""; } - mp_obj_Hmac_t *o = m_new_obj_with_finaliser(mp_obj_Hmac_t); - o->base.type = type; + mp_obj_Hmac_t *o = mp_obj_malloc_with_finaliser(mp_obj_Hmac_t, type); o->hashtype = trezor_obj_get_uint(args[0]); if (o->hashtype == SHA256) { hmac_sha256_Init(&(o->ctx256), key.buf, key.len); @@ -87,7 +86,7 @@ STATIC mp_obj_t mod_trezorcrypto_Hmac_make_new(const mp_obj_type_t *type, /// """ /// Update a HMAC context. /// """ -STATIC mp_obj_t mod_trezorcrypto_Hmac_update(mp_obj_t self, mp_obj_t message) { +static mp_obj_t mod_trezorcrypto_Hmac_update(mp_obj_t self, mp_obj_t message) { mp_obj_Hmac_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(message, &msg, MP_BUFFER_READ); @@ -100,14 +99,14 @@ STATIC mp_obj_t mod_trezorcrypto_Hmac_update(mp_obj_t self, mp_obj_t message) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Hmac_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Hmac_update_obj, mod_trezorcrypto_Hmac_update); /// def digest(self) -> bytes: /// """ /// Return the digest of processed data so far. /// """ -STATIC mp_obj_t mod_trezorcrypto_Hmac_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Hmac_digest(mp_obj_t self) { mp_obj_Hmac_t *o = MP_OBJ_TO_PTR(self); vstr_t mac = {0}; if (o->hashtype == SHA256) { @@ -125,21 +124,21 @@ STATIC mp_obj_t mod_trezorcrypto_Hmac_digest(mp_obj_t self) { } else { mp_raise_ValueError(MP_ERROR_TEXT("Invalid hashtype")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &mac); + return mp_obj_new_bytes_from_vstr(&mac); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Hmac_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Hmac_digest_obj, mod_trezorcrypto_Hmac_digest); -STATIC mp_obj_t mod_trezorcrypto_Hmac___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Hmac___del__(mp_obj_t self) { mp_obj_Hmac_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx256), sizeof(HMAC_SHA256_CTX)); memzero(&(o->ctx512), sizeof(HMAC_SHA512_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Hmac___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Hmac___del___obj, mod_trezorcrypto_Hmac___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Hmac_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Hmac_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Hmac_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -149,12 +148,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Hmac_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_SHA256), MP_ROM_INT(SHA256)}, {MP_ROM_QSTR(MP_QSTR_SHA512), MP_ROM_INT(SHA512)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Hmac_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Hmac_locals_dict, mod_trezorcrypto_Hmac_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Hmac_type = { - {&mp_type_type}, - .name = MP_QSTR_Hmac, - .make_new = mod_trezorcrypto_Hmac_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Hmac_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Hmac_type, + MP_QSTR_Hmac, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Hmac_make_new, + locals_dict, &mod_trezorcrypto_Hmac_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-mcu.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-mcu.h index 9cf636bb1b9..4d0469b1cfd 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-mcu.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-mcu.h @@ -27,7 +27,7 @@ /// """ /// Return MCU device certificate. /// """ -STATIC mp_obj_t mod_trezorcrypto_mcu_get_certificate(void) { +static mp_obj_t mod_trezorcrypto_mcu_get_certificate(void) { size_t cert_size = 0; if (mcu_attestation_cert_size(&cert_size) != sectrue) { mp_raise_msg(&mp_type_RuntimeError, @@ -44,16 +44,16 @@ STATIC mp_obj_t mod_trezorcrypto_mcu_get_certificate(void) { } cert.len = cert_size; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &cert); + return mp_obj_new_bytes_from_vstr(&cert); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_mcu_get_certificate_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_mcu_get_certificate_obj, mod_trezorcrypto_mcu_get_certificate); /// def sign(challenge: AnyBytes) -> bytes: /// """ /// Sign challenge bytes with MCU device attestation key. /// """ -STATIC mp_obj_t mod_trezorcrypto_mcu_sign(mp_obj_t challenge) { +static mp_obj_t mod_trezorcrypto_mcu_sign(mp_obj_t challenge) { mp_buffer_info_t challenge_buf = {0}; mp_get_buffer_raise(challenge, &challenge_buf, MP_BUFFER_READ); @@ -66,21 +66,21 @@ STATIC mp_obj_t mod_trezorcrypto_mcu_sign(mp_obj_t challenge) { } sig.len = MCU_ATTESTATION_SIG_SIZE; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_mcu_sign_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_mcu_sign_obj, mod_trezorcrypto_mcu_sign); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_mcu_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_mcu_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_mcu)}, {MP_ROM_QSTR(MP_QSTR_get_certificate), MP_ROM_PTR(&mod_trezorcrypto_mcu_get_certificate_obj)}, {MP_ROM_QSTR(MP_QSTR_sign), MP_ROM_PTR(&mod_trezorcrypto_mcu_sign_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_mcu_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_mcu_globals, mod_trezorcrypto_mcu_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_mcu_module = { +static const mp_obj_module_t mod_trezorcrypto_mcu_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_mcu_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-monero.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-monero.h index 67c1de605e8..a67614b3c8c 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-monero.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-monero.h @@ -49,9 +49,8 @@ typedef struct _mp_obj_bignum256modm_t { // Helpers // -STATIC const mp_obj_type_t mod_trezorcrypto_monero_ge25519_type; -STATIC const mp_obj_type_t mod_trezorcrypto_monero_bignum256modm_type; -STATIC const mp_obj_type_t mod_trezorcrypto_monero_hasher_type; +static const mp_obj_type_t mod_trezorcrypto_monero_ge25519_type; +static const mp_obj_type_t mod_trezorcrypto_monero_bignum256modm_type; #define MP_OBJ_IS_GE25519(o) \ MP_OBJ_IS_TYPE((o), &mod_trezorcrypto_monero_ge25519_type) @@ -78,14 +77,14 @@ static inline void assert_scalar(const mp_obj_t o) { } } -STATIC mp_obj_t mp_obj_new_scalar() { - mp_obj_bignum256modm_t *o = m_new_obj_with_finaliser(mp_obj_bignum256modm_t); - o->base.type = &mod_trezorcrypto_monero_bignum256modm_type; +static mp_obj_t mp_obj_new_scalar() { + mp_obj_bignum256modm_t *o = mp_obj_malloc_with_finaliser( + mp_obj_bignum256modm_t, &mod_trezorcrypto_monero_bignum256modm_type); set256_modm(o->p, 0); return MP_OBJ_FROM_PTR(o); } -STATIC mp_obj_t mp_obj_new_scalar_r(mp_obj_t r) { +static mp_obj_t mp_obj_new_scalar_r(mp_obj_t r) { if (r == mp_const_none) { return mp_obj_new_scalar(); } @@ -94,14 +93,14 @@ STATIC mp_obj_t mp_obj_new_scalar_r(mp_obj_t r) { return r; } -STATIC mp_obj_t mp_obj_new_ge25519() { - mp_obj_ge25519_t *o = m_new_obj_with_finaliser(mp_obj_ge25519_t); - o->base.type = &mod_trezorcrypto_monero_ge25519_type; +static mp_obj_t mp_obj_new_ge25519() { + mp_obj_ge25519_t *o = mp_obj_malloc_with_finaliser( + mp_obj_ge25519_t, &mod_trezorcrypto_monero_ge25519_type); ge25519_set_neutral(&o->p); return MP_OBJ_FROM_PTR(o); } -STATIC mp_obj_t mp_obj_new_ge25519_r(mp_obj_t r) { +static mp_obj_t mp_obj_new_ge25519_r(mp_obj_t r) { if (r == mp_const_none) { return mp_obj_new_ge25519(); } @@ -110,7 +109,7 @@ STATIC mp_obj_t mp_obj_new_ge25519_r(mp_obj_t r) { return r; } -STATIC void mp_unpack_ge25519(ge25519 *r, const mp_obj_t arg, mp_int_t offset) { +static void mp_unpack_ge25519(ge25519 *r, const mp_obj_t arg, mp_int_t offset) { mp_buffer_info_t buff = {0}; mp_get_buffer_raise(arg, &buff, MP_BUFFER_READ); if (buff.len < 32 + offset) { @@ -123,7 +122,7 @@ STATIC void mp_unpack_ge25519(ge25519 *r, const mp_obj_t arg, mp_int_t offset) { } } -STATIC void mp_unpack_scalar(bignum256modm r, const mp_obj_t arg, +static void mp_unpack_scalar(bignum256modm r, const mp_obj_t arg, mp_int_t offset) { mp_buffer_info_t buff = {0}; mp_get_buffer_raise(arg, &buff, MP_BUFFER_READ); @@ -147,12 +146,11 @@ STATIC void mp_unpack_scalar(bignum256modm r, const mp_obj_t arg, /// Constructor /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_ge25519_make_new( +static mp_obj_t mod_trezorcrypto_monero_ge25519_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_ge25519_t *o = m_new_obj_with_finaliser(mp_obj_ge25519_t); - o->base.type = type; + mp_obj_ge25519_t *o = mp_obj_malloc_with_finaliser(mp_obj_ge25519_t, type); if (n_args == 0 || args[0] == mp_const_none) { ge25519_set_neutral(&o->p); @@ -168,12 +166,12 @@ STATIC mp_obj_t mod_trezorcrypto_monero_ge25519_make_new( return MP_OBJ_FROM_PTR(o); } -STATIC mp_obj_t mod_trezorcrypto_monero_ge25519___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_monero_ge25519___del__(mp_obj_t self) { mp_obj_ge25519_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->p), sizeof(ge25519)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_ge25519___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_ge25519___del___obj, mod_trezorcrypto_monero_ge25519___del__); /// class Scalar: @@ -186,12 +184,12 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_ge25519___del___obj, /// Constructor /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_bignum256modm_make_new( +static mp_obj_t mod_trezorcrypto_monero_bignum256modm_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_bignum256modm_t *o = m_new_obj_with_finaliser(mp_obj_bignum256modm_t); - o->base.type = type; + mp_obj_bignum256modm_t *o = + mp_obj_malloc_with_finaliser(mp_obj_bignum256modm_t, type); if (n_args == 0 || args[0] == mp_const_none) { set256_modm(o->p, 0); @@ -210,12 +208,12 @@ STATIC mp_obj_t mod_trezorcrypto_monero_bignum256modm_make_new( return MP_OBJ_FROM_PTR(o); } -STATIC mp_obj_t mod_trezorcrypto_monero_bignum256modm___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_monero_bignum256modm___del__(mp_obj_t self) { mp_obj_bignum256modm_t *o = MP_OBJ_TO_PTR(self); memzero(o->p, sizeof(bignum256modm)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1( +static MP_DEFINE_CONST_FUN_OBJ_1( mod_trezorcrypto_monero_bignum256modm___del___obj, mod_trezorcrypto_monero_bignum256modm___del__); @@ -231,7 +229,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1( /// """ /// Initializes a scalar /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_copy(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_sc_copy(const mp_obj_t dest, const mp_obj_t src) { mp_obj_t res = mp_obj_new_scalar_r(dest); @@ -247,54 +245,54 @@ STATIC mp_obj_t mod_trezorcrypto_monero_sc_copy(const mp_obj_t dest, } return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_sc_copy_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_sc_copy_obj, mod_trezorcrypto_monero_sc_copy); /// def sc_check(val: Scalar) -> None: /// """ /// Throws exception if scalar is invalid /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_check(const mp_obj_t arg) { +static mp_obj_t mod_trezorcrypto_monero_sc_check(const mp_obj_t arg) { assert_scalar(arg); if (check256_modm(MP_OBJ_C_SCALAR(arg)) != 1) { mp_raise_ValueError(MP_ERROR_TEXT("Ed25519 scalar invalid")); } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_sc_check_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_sc_check_obj, mod_trezorcrypto_monero_sc_check); /// def sc_iszero(val: Scalar) -> bool: /// """ /// Returns False if the scalar is zero /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_iszero(const mp_obj_t arg) { +static mp_obj_t mod_trezorcrypto_monero_sc_iszero(const mp_obj_t arg) { assert_scalar(arg); const int r = iszero256_modm(MP_OBJ_C_SCALAR(arg)); return mp_obj_new_int(r); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_sc_iszero_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_sc_iszero_obj, mod_trezorcrypto_monero_sc_iszero); /// def sc_eq(a: Scalar, b: Scalar) -> int: /// """ /// Compares scalars, returns 1 on the same value /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_eq(const mp_obj_t a, +static mp_obj_t mod_trezorcrypto_monero_sc_eq(const mp_obj_t a, const mp_obj_t b) { assert_scalar(a); assert_scalar(b); int r = eq256_modm(MP_OBJ_C_SCALAR(a), MP_OBJ_C_SCALAR(b)); return MP_OBJ_NEW_SMALL_INT(r); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_sc_eq_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_sc_eq_obj, mod_trezorcrypto_monero_sc_eq); /// def sc_add_into(r: Scalar | None, a: Scalar, b: Scalar) -> Scalar: /// """ /// Scalar addition /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_add_into(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_sc_add_into(const mp_obj_t dest, const mp_obj_t a, const mp_obj_t b) { mp_obj_t res = mp_obj_new_scalar_r(dest); @@ -304,14 +302,14 @@ STATIC mp_obj_t mod_trezorcrypto_monero_sc_add_into(const mp_obj_t dest, add256_modm(MP_OBJ_SCALAR(res), MP_OBJ_C_SCALAR(a), MP_OBJ_C_SCALAR(b)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_sc_add_into_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_sc_add_into_obj, mod_trezorcrypto_monero_sc_add_into); /// def sc_sub_into(r: Scalar | None, a: Scalar, b: Scalar) -> Scalar: /// """ /// Scalar subtraction /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_sub_into(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_sc_sub_into(const mp_obj_t dest, const mp_obj_t a, const mp_obj_t b) { mp_obj_t res = mp_obj_new_scalar_r(dest); @@ -321,14 +319,14 @@ STATIC mp_obj_t mod_trezorcrypto_monero_sc_sub_into(const mp_obj_t dest, sub256_modm(MP_OBJ_SCALAR(res), MP_OBJ_C_SCALAR(a), MP_OBJ_C_SCALAR(b)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_sc_sub_into_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_sc_sub_into_obj, mod_trezorcrypto_monero_sc_sub_into); /// def sc_mul_into(r: Scalar | None, a: Scalar, b: Scalar) -> Scalar: /// """ /// Scalar multiplication /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_mul_into(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_sc_mul_into(const mp_obj_t dest, const mp_obj_t a, const mp_obj_t b) { mp_obj_t res = mp_obj_new_scalar_r(dest); @@ -338,7 +336,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_sc_mul_into(const mp_obj_t dest, mul256_modm(MP_OBJ_SCALAR(res), MP_OBJ_C_SCALAR(a), MP_OBJ_C_SCALAR(b)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_sc_mul_into_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_sc_mul_into_obj, mod_trezorcrypto_monero_sc_mul_into); /// def sc_mulsub_into( @@ -347,7 +345,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_sc_mul_into_obj, /// """ /// c - a*b /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_mulsub_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_sc_mulsub_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 4, 4, false); mp_obj_t res = mp_obj_new_scalar_r(args[0]); @@ -359,7 +357,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_sc_mulsub_into(size_t n_args, MP_OBJ_C_SCALAR(args[2]), MP_OBJ_C_SCALAR(args[3])); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_sc_mulsub_into_obj, 4, 4, mod_trezorcrypto_monero_sc_mulsub_into); @@ -369,7 +367,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// c + a*b /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_muladd_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_sc_muladd_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 4, 4, false); mp_obj_t res = mp_obj_new_scalar_r(args[0]); @@ -381,7 +379,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_sc_muladd_into(size_t n_args, MP_OBJ_C_SCALAR(args[2]), MP_OBJ_C_SCALAR(args[3])); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_sc_muladd_into_obj, 4, 4, mod_trezorcrypto_monero_sc_muladd_into); @@ -389,7 +387,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Scalar modular inversion /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_sc_inv_into(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_sc_inv_into(const mp_obj_t dest, const mp_obj_t arg) { mp_obj_t res = mp_obj_new_scalar_r(dest); assert_scalar(arg); @@ -413,7 +411,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_sc_inv_into(const mp_obj_t dest, return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_sc_inv_into_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_sc_inv_into_obj, mod_trezorcrypto_monero_sc_inv_into); /// def encodeint_into( @@ -422,7 +420,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_sc_inv_into_obj, /// """ /// Scalar compression /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_encodeint_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_encodeint_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 2, 3, false); if (args[0] == mp_const_none) { @@ -430,7 +428,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_encodeint_into(size_t n_args, vstr_t out = {0}; vstr_init_len(&out, 32); contract256_modm((uint8_t *)out.buf, MP_OBJ_C_SCALAR(args[1])); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &out); + return mp_obj_new_bytes_from_vstr(&out); } else { mp_buffer_info_t bufm = {0}; mp_get_buffer_raise(args[0], &bufm, MP_BUFFER_WRITE); @@ -443,7 +441,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_encodeint_into(size_t n_args, return args[0]; } } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_encodeint_into_obj, 2, 3, mod_trezorcrypto_monero_encodeint_into); @@ -453,7 +451,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Scalar decompression /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_decodeint_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_decodeint_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 2, 3, false); mp_obj_t res = mp_obj_new_scalar_r(args[0]); @@ -461,7 +459,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_decodeint_into(size_t n_args, mp_unpack_scalar(MP_OBJ_SCALAR(res), args[1], offset); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_decodeint_into_obj, 2, 3, mod_trezorcrypto_monero_decodeint_into); @@ -471,7 +469,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Scalar decompression, raw, without modular reduction /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_decodeint_into_noreduce( +static mp_obj_t mod_trezorcrypto_monero_decodeint_into_noreduce( size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 2, 3, false); mp_obj_t res = mp_obj_new_scalar_r(args[0]); @@ -486,7 +484,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_decodeint_into_noreduce( expand_raw256_modm(MP_OBJ_SCALAR(res), ((uint8_t *)buff.buf) + offset); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_decodeint_into_noreduce_obj, 2, 3, mod_trezorcrypto_monero_decodeint_into_noreduce); @@ -498,13 +496,13 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Sets neutral point /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_identity_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_identity_into(size_t n_args, const mp_obj_t *args) { mp_obj_t res = mp_obj_new_ge25519_r(n_args == 1 ? args[0] : mp_const_none); ge25519_set_neutral(&MP_OBJ_GE25519(res)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_identity_into_obj, 0, 1, mod_trezorcrypto_monero_identity_into); @@ -512,48 +510,48 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Sets H point /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_xmr_H(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_xmr_H(size_t n_args, const mp_obj_t *args) { mp_obj_t res = mp_obj_new_ge25519_r(n_args == 1 ? args[0] : mp_const_none); ge25519_set_xmr_h(&MP_OBJ_GE25519(res)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_monero_xmr_H_obj, 0, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_monero_xmr_H_obj, 0, 1, mod_trezorcrypto_monero_xmr_H); /// def ge25519_check(r: Point) -> None: /// """ /// Checks point, throws if not on curve /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_ge25519_check(const mp_obj_t arg) { +static mp_obj_t mod_trezorcrypto_monero_ge25519_check(const mp_obj_t arg) { assert_ge25519(arg); if (ge25519_check(&MP_OBJ_C_GE25519(arg)) != 1) { mp_raise_ValueError(MP_ERROR_TEXT("Ed25519 point not on curve")); } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_ge25519_check_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_monero_ge25519_check_obj, mod_trezorcrypto_monero_ge25519_check); /// def point_eq(a: Point, b: Point) -> bool: /// """ /// Compares EC points /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_point_eq(const mp_obj_t a, +static mp_obj_t mod_trezorcrypto_monero_point_eq(const mp_obj_t a, const mp_obj_t b) { assert_ge25519(a); assert_ge25519(b); int r = ge25519_eq(&MP_OBJ_C_GE25519(a), &MP_OBJ_C_GE25519(b)); return MP_OBJ_NEW_SMALL_INT(r); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_point_eq_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_point_eq_obj, mod_trezorcrypto_monero_point_eq); /// def point_add_into(r: Point | None, a: Point, b: Point) -> Point: /// """ /// Adds EC points /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_point_add_into(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_point_add_into(const mp_obj_t dest, const mp_obj_t a, const mp_obj_t b) { mp_obj_t res = mp_obj_new_ge25519_r(dest); @@ -564,14 +562,14 @@ STATIC mp_obj_t mod_trezorcrypto_monero_point_add_into(const mp_obj_t dest, 0); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_point_add_into_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_point_add_into_obj, mod_trezorcrypto_monero_point_add_into); /// def point_sub_into(r: Point | None, a: Point, b: Point) -> Point: /// """ /// Subtracts EC points /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_point_sub_into(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_point_sub_into(const mp_obj_t dest, const mp_obj_t a, const mp_obj_t b) { mp_obj_t res = mp_obj_new_ge25519_r(dest); @@ -582,21 +580,21 @@ STATIC mp_obj_t mod_trezorcrypto_monero_point_sub_into(const mp_obj_t dest, 1); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_point_sub_into_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_point_sub_into_obj, mod_trezorcrypto_monero_point_sub_into); /// def ge25519_mul8(r: Point | None, p: Point) -> Point: /// """ /// EC point * 8 /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_ge25519_mul8(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_ge25519_mul8(const mp_obj_t dest, const mp_obj_t src) { mp_obj_t res = mp_obj_new_ge25519_r(dest); assert_ge25519(src); ge25519_mul8(&MP_OBJ_GE25519(res), &MP_OBJ_C_GE25519(src)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_ge25519_mul8_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_ge25519_mul8_obj, mod_trezorcrypto_monero_ge25519_mul8); /// def ge25519_double_scalarmult_vartime_into( @@ -605,7 +603,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_monero_ge25519_mul8_obj, /// """ /// s1 * G + s2 * p1 /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_ge25519_double_scalarmult_vartime_into( +static mp_obj_t mod_trezorcrypto_monero_ge25519_double_scalarmult_vartime_into( size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 4, 4, false); mp_obj_t res = mp_obj_new_ge25519_r(args[0]); @@ -618,7 +616,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_ge25519_double_scalarmult_vartime_into( MP_OBJ_C_SCALAR(args[2]), MP_OBJ_C_SCALAR(args[3])); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_ge25519_double_scalarmult_vartime_into_obj, 4, 4, mod_trezorcrypto_monero_ge25519_double_scalarmult_vartime_into); @@ -628,7 +626,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// s * G /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_scalarmult_base_into( +static mp_obj_t mod_trezorcrypto_monero_scalarmult_base_into( const mp_obj_t dest, const mp_obj_t src) { mp_obj_t res = mp_obj_new_ge25519_r(dest); @@ -644,7 +642,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_scalarmult_base_into( return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2( +static MP_DEFINE_CONST_FUN_OBJ_2( mod_trezorcrypto_monero_scalarmult_base_into_obj, mod_trezorcrypto_monero_scalarmult_base_into); @@ -654,7 +652,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2( /// """ /// s * p /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_scalarmult_into(const mp_obj_t dest, +static mp_obj_t mod_trezorcrypto_monero_scalarmult_into(const mp_obj_t dest, const mp_obj_t p, const mp_obj_t s) { mp_obj_t res = mp_obj_new_ge25519_r(dest); @@ -673,7 +671,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_scalarmult_into(const mp_obj_t dest, return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_scalarmult_into_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_scalarmult_into_obj, mod_trezorcrypto_monero_scalarmult_into); /// def encodepoint_into( @@ -682,7 +680,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_monero_scalarmult_into_obj, /// """ /// Point compression /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_encodepoint_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_encodepoint_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 2, 3, false); if (args[0] == mp_const_none) { @@ -690,7 +688,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_encodepoint_into(size_t n_args, vstr_t out = {0}; vstr_init_len(&out, 32); ge25519_pack((uint8_t *)out.buf, &MP_OBJ_C_GE25519(args[1])); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &out); + return mp_obj_new_bytes_from_vstr(&out); } else { mp_buffer_info_t bufm = {0}; mp_get_buffer_raise(args[0], &bufm, MP_BUFFER_WRITE); @@ -703,7 +701,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_encodepoint_into(size_t n_args, return args[0]; } } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_encodepoint_into_obj, 2, 3, mod_trezorcrypto_monero_encodepoint_into); @@ -713,7 +711,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Point decompression /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_decodepoint_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_decodepoint_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 2, 3, false); mp_obj_t res = mp_obj_new_ge25519_r(args[0]); @@ -721,7 +719,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_decodepoint_into(size_t n_args, mp_unpack_ge25519(&MP_OBJ_GE25519(res), args[1], offset); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_decodepoint_into_obj, 2, 3, mod_trezorcrypto_monero_decodepoint_into); @@ -733,7 +731,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Monero block base 58 encoding /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_xmr_base58_addr_encode_check( +static mp_obj_t mod_trezorcrypto_monero_xmr_base58_addr_encode_check( const mp_obj_t tag, const mp_obj_t buff) { vstr_t out = {0}; vstr_init_len(&out, 128); @@ -748,9 +746,9 @@ STATIC mp_obj_t mod_trezorcrypto_monero_xmr_base58_addr_encode_check( } out.len = sz; - return mp_obj_new_str_from_vstr(&mp_type_str, &out); + return mp_obj_new_str_from_vstr(&out); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2( +static MP_DEFINE_CONST_FUN_OBJ_2( mod_trezorcrypto_monero_xmr_base58_addr_encode_check_obj, mod_trezorcrypto_monero_xmr_base58_addr_encode_check); @@ -759,8 +757,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2( /// Monero block base 58 decoding, returning (decoded, tag) or raising on /// error. /// """ -STATIC mp_obj_t -mod_trezorcrypto_monero_xmr_base58_addr_decode_check(const mp_obj_t buff) { +static mp_obj_t mod_trezorcrypto_monero_xmr_base58_addr_decode_check( + const mp_obj_t buff) { uint64_t tag = 0; vstr_t out = {0}; vstr_init_len(&out, 128); @@ -777,11 +775,11 @@ mod_trezorcrypto_monero_xmr_base58_addr_decode_check(const mp_obj_t buff) { out.len = sz; mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL)); - tuple->items[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &out); + tuple->items[0] = mp_obj_new_bytes_from_vstr(&out); tuple->items[1] = mp_obj_new_int_from_ull(tag); return MP_OBJ_FROM_PTR(tuple); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1( +static MP_DEFINE_CONST_FUN_OBJ_1( mod_trezorcrypto_monero_xmr_base58_addr_decode_check_obj, mod_trezorcrypto_monero_xmr_base58_addr_decode_check); @@ -789,13 +787,13 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1( /// """ /// Generates a random scalar /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_random_scalar(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_random_scalar(size_t n_args, const mp_obj_t *args) { mp_obj_t res = mp_obj_new_scalar_r(n_args == 1 ? args[0] : mp_const_none); xmr_random_scalar(MP_OBJ_SCALAR(res)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_random_scalar_obj, 0, 1, mod_trezorcrypto_monero_random_scalar); @@ -808,7 +806,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// XMR fast hash /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_fast_hash_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_fast_hash_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 2, 4, false); vstr_t out = {0}; @@ -836,11 +834,9 @@ STATIC mp_obj_t mod_trezorcrypto_monero_fast_hash_into(size_t n_args, mp_raise_ValueError(MP_ERROR_TEXT("Illegal offset/length")); } xmr_fast_hash(buff_use, (const char *)data.buf + offset, length); - return args[0] != mp_const_none - ? args[0] - : mp_obj_new_str_from_vstr(&mp_type_bytes, &out); + return args[0] != mp_const_none ? args[0] : mp_obj_new_bytes_from_vstr(&out); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_fast_hash_into_obj, 2, 4, mod_trezorcrypto_monero_fast_hash_into); @@ -853,7 +849,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// XMR hashing to EC point /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_hash_to_point_into( +static mp_obj_t mod_trezorcrypto_monero_hash_to_point_into( size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 2, 4, false); mp_obj_t res = mp_obj_new_ge25519_r(args[0]); @@ -870,7 +866,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_hash_to_point_into( xmr_hash_to_ec(&MP_OBJ_GE25519(res), (const char *)data.buf + offset, length); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_hash_to_point_into_obj, 2, 4, mod_trezorcrypto_monero_hash_to_point_into); @@ -883,7 +879,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// XMR hashing to EC scalar /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_hash_to_scalar_into( +static mp_obj_t mod_trezorcrypto_monero_hash_to_scalar_into( size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 2, 4, false); mp_obj_t res = mp_obj_new_scalar_r(args[0]); @@ -900,7 +896,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_hash_to_scalar_into( length); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_hash_to_scalar_into_obj, 2, 4, mod_trezorcrypto_monero_hash_to_scalar_into); @@ -910,7 +906,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// H_s(derivation || varint(output_index)) /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_xmr_derivation_to_scalar( +static mp_obj_t mod_trezorcrypto_monero_xmr_derivation_to_scalar( const mp_obj_t dest, const mp_obj_t p, const mp_obj_t output_index) { mp_obj_t res = mp_obj_new_scalar_r(dest); assert_ge25519(p); @@ -918,7 +914,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_xmr_derivation_to_scalar( mp_obj_get_int(output_index)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3( +static MP_DEFINE_CONST_FUN_OBJ_3( mod_trezorcrypto_monero_xmr_derivation_to_scalar_obj, mod_trezorcrypto_monero_xmr_derivation_to_scalar); @@ -928,7 +924,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3( /// """ /// 8*(key2*key1) /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_xmr_generate_key_derivation( +static mp_obj_t mod_trezorcrypto_monero_xmr_generate_key_derivation( const mp_obj_t dest, const mp_obj_t A, const mp_obj_t b) { mp_obj_t res = mp_obj_new_ge25519_r(dest); assert_ge25519(A); @@ -937,7 +933,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_xmr_generate_key_derivation( MP_OBJ_C_SCALAR(b)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3( +static MP_DEFINE_CONST_FUN_OBJ_3( mod_trezorcrypto_monero_xmr_generate_key_derivation_obj, mod_trezorcrypto_monero_xmr_generate_key_derivation); @@ -947,7 +943,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3( /// """ /// base + H_s(derivation || varint(output_index)) /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_xmr_derive_private_key( +static mp_obj_t mod_trezorcrypto_monero_xmr_derive_private_key( size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 4, 4, false); mp_obj_t res = mp_obj_new_scalar_r(args[0]); @@ -957,7 +953,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_xmr_derive_private_key( mp_obj_get_int(args[2]), MP_OBJ_C_SCALAR(args[3])); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_xmr_derive_private_key_obj, 4, 4, mod_trezorcrypto_monero_xmr_derive_private_key); @@ -967,7 +963,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// H_s(derivation || varint(output_index))G + base /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_xmr_derive_public_key( +static mp_obj_t mod_trezorcrypto_monero_xmr_derive_public_key( size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 4, 4, false); mp_obj_t res = mp_obj_new_ge25519_r(args[0]); @@ -977,7 +973,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_xmr_derive_public_key( mp_obj_get_int(args[2]), &MP_OBJ_C_GE25519(args[3])); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_xmr_derive_public_key_obj, 4, 4, mod_trezorcrypto_monero_xmr_derive_public_key); @@ -987,7 +983,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// aG + bB, G is basepoint /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_add_keys2_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_add_keys2_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 4, 4, false); mp_obj_t res = mp_obj_new_ge25519_r(args[0]); @@ -998,7 +994,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_add_keys2_into(size_t n_args, MP_OBJ_SCALAR(args[2]), &MP_OBJ_C_GE25519(args[3])); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_add_keys2_into_obj, 4, 4, mod_trezorcrypto_monero_add_keys2_into); @@ -1008,7 +1004,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// aA + bB /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_add_keys3_into(size_t n_args, +static mp_obj_t mod_trezorcrypto_monero_add_keys3_into(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 5, 5, false); mp_obj_t res = mp_obj_new_ge25519_r(args[0]); @@ -1021,7 +1017,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_add_keys3_into(size_t n_args, &MP_OBJ_C_GE25519(args[4])); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_add_keys3_into_obj, 5, 5, mod_trezorcrypto_monero_add_keys3_into); @@ -1031,7 +1027,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Hs(SubAddr || a || index_major || index_minor) /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_xmr_get_subaddress_secret_key( +static mp_obj_t mod_trezorcrypto_monero_xmr_get_subaddress_secret_key( size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 4, 4, false); mp_obj_t res = mp_obj_new_scalar_r(args[0]); @@ -1041,7 +1037,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_xmr_get_subaddress_secret_key( MP_OBJ_C_SCALAR(args[3])); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_monero_xmr_get_subaddress_secret_key_obj, 4, 4, mod_trezorcrypto_monero_xmr_get_subaddress_secret_key); @@ -1049,7 +1045,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// aG + amount * H /// """ -STATIC mp_obj_t mod_trezorcrypto_monero_gen_commitment_into( +static mp_obj_t mod_trezorcrypto_monero_gen_commitment_into( const mp_obj_t dest, const mp_obj_t a, const mp_obj_t amount) { mp_obj_t res = mp_obj_new_ge25519_r(dest); assert_scalar(a); @@ -1057,7 +1053,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_gen_commitment_into( trezor_obj_get_uint64(amount)); return res; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3( +static MP_DEFINE_CONST_FUN_OBJ_3( mod_trezorcrypto_monero_gen_commitment_into_obj, mod_trezorcrypto_monero_gen_commitment_into); @@ -1065,7 +1061,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3( /// """ /// Constant time buffer comparison /// """ -STATIC mp_obj_t mod_trezorcrypto_ct_equals(const mp_obj_t a, const mp_obj_t b) { +static mp_obj_t mod_trezorcrypto_ct_equals(const mp_obj_t a, const mp_obj_t b) { mp_buffer_info_t buff_a = {0}, buff_b = {0}; mp_get_buffer_raise(a, &buff_a, MP_BUFFER_READ); mp_get_buffer_raise(b, &buff_b, MP_BUFFER_READ); @@ -1077,46 +1073,46 @@ STATIC mp_obj_t mod_trezorcrypto_ct_equals(const mp_obj_t a, const mp_obj_t b) { int r = consteq(buff_a.buf, buff_b.buf, buff_a.len); return MP_OBJ_NEW_SMALL_INT(r); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ct_equals_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_ct_equals_obj, mod_trezorcrypto_ct_equals); // // Type defs // -STATIC const mp_rom_map_elem_t +static const mp_rom_map_elem_t mod_trezorcrypto_monero_ge25519_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mod_trezorcrypto_monero_ge25519___del___obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_monero_ge25519_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_monero_ge25519_locals_dict, mod_trezorcrypto_monero_ge25519_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_monero_ge25519_type = { - {&mp_type_type}, - .name = MP_QSTR_Point, - .make_new = mod_trezorcrypto_monero_ge25519_make_new, - .locals_dict = (void *)&mod_trezorcrypto_monero_ge25519_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_monero_ge25519_type, + MP_QSTR_Point, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_monero_ge25519_make_new, + locals_dict, &mod_trezorcrypto_monero_ge25519_locals_dict); +// clang-format on -STATIC const mp_rom_map_elem_t +static const mp_rom_map_elem_t mod_trezorcrypto_monero_bignum256modm_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mod_trezorcrypto_monero_bignum256modm___del___obj)}, }; -STATIC MP_DEFINE_CONST_DICT( +static MP_DEFINE_CONST_DICT( mod_trezorcrypto_monero_bignum256modm_locals_dict, mod_trezorcrypto_monero_bignum256modm_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_monero_bignum256modm_type = { - {&mp_type_type}, - .name = MP_QSTR_Scalar, - .make_new = mod_trezorcrypto_monero_bignum256modm_make_new, - .locals_dict = (void *)&mod_trezorcrypto_monero_bignum256modm_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_monero_bignum256modm_type, + MP_QSTR_Scalar, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_monero_bignum256modm_make_new, + locals_dict, &mod_trezorcrypto_monero_bignum256modm_locals_dict); +// clang-format on /// BP_GI_PLUS_PRE: bytes -STATIC const mp_obj_str_t mod_trezorcrypto_monero_BP_PLUS_GI_PRE_obj = {{&mp_type_bytes}, 0, 8192, (const byte*)"" +static const mp_obj_str_t mod_trezorcrypto_monero_BP_PLUS_GI_PRE_obj = {{&mp_type_bytes}, 0, 8192, (const byte*)"" "\x38\xc5\xd4\xdb\x53\xae\xb8\x6f\x5a\x80\xde\xf9\xbe\x49\x53\xf2" "\x28\x8e\xd5\xa4\x4c\x66\xaf\x72\x3f\x46\x3d\x01\x70\x82\x90\x10" "\x8a\x6c\x81\x7d\xab\xe9\x0f\xdb\x50\xcc\x38\x67\x7b\x23\xff\xa7" @@ -1632,7 +1628,7 @@ STATIC const mp_obj_str_t mod_trezorcrypto_monero_BP_PLUS_GI_PRE_obj = {{&mp_typ }; /// BP_HI_PLUS_PRE: bytes -STATIC const mp_obj_str_t mod_trezorcrypto_monero_BP_PLUS_HI_PRE_obj = {{&mp_type_bytes}, 0, 8192, (const byte*)"" +static const mp_obj_str_t mod_trezorcrypto_monero_BP_PLUS_HI_PRE_obj = {{&mp_type_bytes}, 0, 8192, (const byte*)"" "\x48\x62\x8d\xf3\x80\xa5\x01\x6d\x25\x45\x1a\xaa\x50\x17\x31\xa1" "\x1b\x72\xbf\x66\xdc\x41\xd8\x1f\x71\x9a\xbd\x35\xce\x92\xb0\xed" "\x11\x0d\x2b\x61\xf8\xc7\xc1\x08\x61\xc3\xe4\xff\xe7\x77\x4f\xab" @@ -2147,7 +2143,7 @@ STATIC const mp_obj_str_t mod_trezorcrypto_monero_BP_PLUS_HI_PRE_obj = {{&mp_typ "\xd3\x3a\xb9\xb1\x12\x23\xee\x67\xea\x78\xb1\xd3\x8a\x6a\xe3\xeb" }; -STATIC const mp_rom_map_elem_t mod_trezorcrypto_monero_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_monero_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_monero)}, // types {MP_ROM_QSTR(MP_QSTR_Point), @@ -2242,10 +2238,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_monero_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_BP_PLUS_HI_PRE), MP_ROM_PTR(&mod_trezorcrypto_monero_BP_PLUS_HI_PRE_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_monero_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_monero_globals, mod_trezorcrypto_monero_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_monero_module = { +static const mp_obj_module_t mod_trezorcrypto_monero_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_monero_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-nem.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-nem.h index 128c89fa0fc..db4642b89bb 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-nem.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-nem.h @@ -29,7 +29,7 @@ /// """ /// Validate a NEM address /// """ -STATIC mp_obj_t mod_trezorcrypto_nem_validate_address(mp_obj_t address, +static mp_obj_t mod_trezorcrypto_nem_validate_address(mp_obj_t address, mp_obj_t network) { mp_buffer_info_t addr = {0}; mp_get_buffer_raise(address, &addr, MP_BUFFER_READ); @@ -37,14 +37,14 @@ STATIC mp_obj_t mod_trezorcrypto_nem_validate_address(mp_obj_t address, uint32_t n = trezor_obj_get_uint(network); return mp_obj_new_bool(nem_validate_address(addr.buf, n)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nem_validate_address_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nem_validate_address_obj, mod_trezorcrypto_nem_validate_address); /// def compute_address(public_key: AnyBytes, network: int) -> str: /// """ /// Compute a NEM address from a public key /// """ -STATIC mp_obj_t mod_trezorcrypto_nem_compute_address(mp_obj_t public_key, +static mp_obj_t mod_trezorcrypto_nem_compute_address(mp_obj_t public_key, mp_obj_t network) { mp_buffer_info_t p = {0}; mp_get_buffer_raise(public_key, &p, MP_BUFFER_READ); @@ -56,23 +56,23 @@ STATIC mp_obj_t mod_trezorcrypto_nem_compute_address(mp_obj_t public_key, mp_raise_ValueError(MP_ERROR_TEXT( "Failed to compute a NEM address from provided public key")); } - return mp_obj_new_str(address, strlen(address)); + return mp_obj_new_str_from_cstr(address); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nem_compute_address_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nem_compute_address_obj, mod_trezorcrypto_nem_compute_address); // objects definition -STATIC const mp_rom_map_elem_t mod_trezorcrypto_nem_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_nem_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_validate_address), MP_ROM_PTR(&mod_trezorcrypto_nem_validate_address_obj)}, {MP_ROM_QSTR(MP_QSTR_compute_address), MP_ROM_PTR(&mod_trezorcrypto_nem_compute_address_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_nem_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_nem_globals, mod_trezorcrypto_nem_globals_table); // module definition -STATIC const mp_obj_module_t mod_trezorcrypto_nem_module = { +static const mp_obj_module_t mod_trezorcrypto_nem_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_nem_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-nist256p1.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-nist256p1.h index 5f214ad05e2..5c47ba8d198 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-nist256p1.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-nist256p1.h @@ -30,7 +30,7 @@ /// """ /// Generate secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_nist256p1_generate_secret() { +static mp_obj_t mod_trezorcrypto_nist256p1_generate_secret() { vstr_t sk = {0}; vstr_init_len(&sk, 32); for (;;) { @@ -52,16 +52,16 @@ STATIC mp_obj_t mod_trezorcrypto_nist256p1_generate_secret() { continue; break; } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sk); + return mp_obj_new_bytes_from_vstr(&sk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_nist256p1_generate_secret_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_nist256p1_generate_secret_obj, mod_trezorcrypto_nist256p1_generate_secret); /// def publickey(secret_key: AnyBytes, compressed: bool = True) -> bytes: /// """ /// Computes public key from secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_nist256p1_publickey(size_t n_args, +static mp_obj_t mod_trezorcrypto_nist256p1_publickey(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t sk = {0}; mp_get_buffer_raise(args[0], &sk, MP_BUFFER_READ); @@ -83,9 +83,9 @@ STATIC mp_obj_t mod_trezorcrypto_nist256p1_publickey(size_t n_args, mp_raise_ValueError(MP_ERROR_TEXT("Invalid secret key")); } } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); + return mp_obj_new_bytes_from_vstr(&pk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_nist256p1_publickey_obj, 1, 2, mod_trezorcrypto_nist256p1_publickey); @@ -95,7 +95,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( /// """ /// Uses secret key to produce the signature of the digest. /// """ -STATIC mp_obj_t mod_trezorcrypto_nist256p1_sign(size_t n_args, +static mp_obj_t mod_trezorcrypto_nist256p1_sign(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t sk = {0}; mp_buffer_info_t dig = {0}; @@ -118,9 +118,9 @@ STATIC mp_obj_t mod_trezorcrypto_nist256p1_sign(size_t n_args, mp_raise_ValueError(MP_ERROR_TEXT("Signing failed")); } sig.buf[0] = 27 + pby + compressed * 4; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_nist256p1_sign_obj, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_nist256p1_sign_obj, 2, 3, mod_trezorcrypto_nist256p1_sign); @@ -131,7 +131,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_nist256p1_sign_obj, /// Uses public key to verify the signature of the digest. /// Returns True on success. /// """ -STATIC mp_obj_t mod_trezorcrypto_nist256p1_verify(mp_obj_t public_key, +static mp_obj_t mod_trezorcrypto_nist256p1_verify(mp_obj_t public_key, mp_obj_t signature, mp_obj_t digest) { mp_buffer_info_t pk = {0}, sig = {0}, dig = {0}; @@ -153,7 +153,7 @@ STATIC mp_obj_t mod_trezorcrypto_nist256p1_verify(mp_obj_t public_key, (const uint8_t *)sig.buf + offset, (const uint8_t *)dig.buf)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_nist256p1_verify_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_nist256p1_verify_obj, mod_trezorcrypto_nist256p1_verify); /// def verify_recover(signature: AnyBytes, digest: AnyBytes) -> bytes: @@ -161,7 +161,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_nist256p1_verify_obj, /// Uses signature of the digest to verify the digest and recover the public /// key. Returns public key on success, None if the signature is invalid. /// """ -STATIC mp_obj_t mod_trezorcrypto_nist256p1_verify_recover(mp_obj_t signature, +static mp_obj_t mod_trezorcrypto_nist256p1_verify_recover(mp_obj_t signature, mp_obj_t digest) { mp_buffer_info_t sig = {0}, dig = {0}; mp_get_buffer_raise(signature, &sig, MP_BUFFER_READ); @@ -187,12 +187,12 @@ STATIC mp_obj_t mod_trezorcrypto_nist256p1_verify_recover(mp_obj_t signature, pk.buf[0] = 0x02 | (pk.buf[64] & 1); pk.len = 33; } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); + return mp_obj_new_bytes_from_vstr(&pk); } else { return mp_const_none; } } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nist256p1_verify_recover_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nist256p1_verify_recover_obj, mod_trezorcrypto_nist256p1_verify_recover); /// def multiply(secret_key: AnyBytes, public_key: AnyBytes) -> bytes: @@ -200,7 +200,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nist256p1_verify_recover_obj, /// Multiplies point defined by public_key with scalar defined by /// secret_key. Useful for ECDH. /// """ -STATIC mp_obj_t mod_trezorcrypto_nist256p1_multiply(mp_obj_t secret_key, +static mp_obj_t mod_trezorcrypto_nist256p1_multiply(mp_obj_t secret_key, mp_obj_t public_key) { mp_buffer_info_t sk = {0}, pk = {0}; mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); @@ -218,12 +218,12 @@ STATIC mp_obj_t mod_trezorcrypto_nist256p1_multiply(mp_obj_t secret_key, vstr_clear(&out); mp_raise_ValueError(MP_ERROR_TEXT("Multiply failed")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &out); + return mp_obj_new_bytes_from_vstr(&out); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nist256p1_multiply_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_nist256p1_multiply_obj, mod_trezorcrypto_nist256p1_multiply); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_nist256p1_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_nist256p1_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_nist256p1)}, {MP_ROM_QSTR(MP_QSTR_generate_secret), MP_ROM_PTR(&mod_trezorcrypto_nist256p1_generate_secret_obj)}, @@ -238,10 +238,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_nist256p1_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_multiply), MP_ROM_PTR(&mod_trezorcrypto_nist256p1_multiply_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_nist256p1_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_nist256p1_globals, mod_trezorcrypto_nist256p1_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_nist256p1_module = { +static const mp_obj_module_t mod_trezorcrypto_nist256p1_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_nist256p1_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-optiga.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-optiga.h index 3dccf6c6c74..f7b1515a8dc 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-optiga.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-optiga.h @@ -40,7 +40,7 @@ MP_DEFINE_EXCEPTION(SigningInaccessible, OptigaError) /// """ /// Return the certificate stored at the given index. /// """ -STATIC mp_obj_t mod_trezorcrypto_optiga_get_certificate(mp_obj_t cert_index) { +static mp_obj_t mod_trezorcrypto_optiga_get_certificate(mp_obj_t cert_index) { mp_int_t idx = mp_obj_get_int(cert_index); if (idx < 0 || idx >= OPTIGA_CERT_COUNT) { mp_raise_ValueError(MP_ERROR_TEXT("Invalid index.")); @@ -61,9 +61,9 @@ STATIC mp_obj_t mod_trezorcrypto_optiga_get_certificate(mp_obj_t cert_index) { } cert.len = cert_size; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &cert); + return mp_obj_new_bytes_from_vstr(&cert); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_optiga_get_certificate_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_optiga_get_certificate_obj, mod_trezorcrypto_optiga_get_certificate); /// def sign( @@ -74,7 +74,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_optiga_get_certificate_obj, /// Uses the private key at key_index to produce a DER-encoded signature of /// the digest. /// """ -STATIC mp_obj_t mod_trezorcrypto_optiga_sign(mp_obj_t key_index, +static mp_obj_t mod_trezorcrypto_optiga_sign(mp_obj_t key_index, mp_obj_t digest) { mp_int_t idx = mp_obj_get_int(key_index); if (idx < 0 || idx >= OPTIGA_ECC_KEY_COUNT) { @@ -104,23 +104,23 @@ STATIC mp_obj_t mod_trezorcrypto_optiga_sign(mp_obj_t key_index, } sig.len = sig_size; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_optiga_sign_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_optiga_sign_obj, mod_trezorcrypto_optiga_sign); /// def get_sec() -> int | None: /// """ /// Returns the value of Optiga's security event counter. /// """ -STATIC mp_obj_t mod_trezorcrypto_optiga_get_sec() { +static mp_obj_t mod_trezorcrypto_optiga_get_sec() { uint8_t sec = 0; if (optiga_read_sec(&sec)) { return mp_obj_new_int_from_uint(sec); } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_optiga_get_sec_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_optiga_get_sec_obj, mod_trezorcrypto_optiga_get_sec); #if USE_OPTIGA_TESTING @@ -128,18 +128,18 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_optiga_get_sec_obj, /// """ /// Set Optiga's security event counter to maximum. /// """ -STATIC mp_obj_t mod_trezorcrypto_optiga_set_sec_max() { +static mp_obj_t mod_trezorcrypto_optiga_set_sec_max() { optiga_set_sec_max(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_optiga_set_sec_max_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_optiga_set_sec_max_obj, mod_trezorcrypto_optiga_set_sec_max); #endif /// DEVICE_CERT_INDEX: int /// DEVICE_ECC_KEY_INDEX: int -STATIC const mp_rom_map_elem_t mod_trezorcrypto_optiga_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_optiga_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_optiga)}, {MP_ROM_QSTR(MP_QSTR_get_certificate), MP_ROM_PTR(&mod_trezorcrypto_optiga_get_certificate_obj)}, @@ -157,10 +157,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_optiga_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_OptigaError), MP_ROM_PTR(&mp_type_OptigaError)}, {MP_ROM_QSTR(MP_QSTR_SigningInaccessible), MP_ROM_PTR(&mp_type_SigningInaccessible)}}; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_optiga_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_optiga_globals, mod_trezorcrypto_optiga_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_optiga_module = { +static const mp_obj_module_t mod_trezorcrypto_optiga_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_optiga_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h index cf2880d497b..342fbde7170 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h @@ -42,7 +42,7 @@ typedef struct _mp_obj_Pbkdf2_t { uint32_t prf; } mp_obj_Pbkdf2_t; -STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Pbkdf2_update(mp_obj_t self, mp_obj_t data); /// def __init__( /// self, @@ -55,7 +55,7 @@ STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_update(mp_obj_t self, mp_obj_t data); /// """ /// Create a PBKDF2 context. /// """ -STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Pbkdf2_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 3, 4, false); @@ -78,8 +78,7 @@ STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_make_new(const mp_obj_type_t *type, } mp_uint_t prf = trezor_obj_get_uint(args[0]); - mp_obj_Pbkdf2_t *o = m_new_obj_with_finaliser(mp_obj_Pbkdf2_t); - o->base.type = type; + mp_obj_Pbkdf2_t *o = mp_obj_malloc_with_finaliser(mp_obj_Pbkdf2_t, type); o->prf = prf; if (o->prf == PRF_HMAC_SHA256) { pbkdf2_hmac_sha256_Init(&(o->ctx256), password.buf, password.len, salt.buf, @@ -102,7 +101,7 @@ STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_make_new(const mp_obj_type_t *type, /// """ /// Update a PBKDF2 context. /// """ -STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_update(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_Pbkdf2_update(mp_obj_t self, mp_obj_t iterations) { mp_obj_Pbkdf2_t *o = MP_OBJ_TO_PTR(self); uint32_t iter = trezor_obj_get_uint(iterations); @@ -116,14 +115,14 @@ STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_update(mp_obj_t self, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Pbkdf2_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Pbkdf2_update_obj, mod_trezorcrypto_Pbkdf2_update); /// def key(self) -> bytes: /// """ /// Retrieve derived key. /// """ -STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_key(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Pbkdf2_key(mp_obj_t self) { mp_obj_Pbkdf2_t *o = MP_OBJ_TO_PTR(self); vstr_t out = {0}; if (o->prf == PRF_HMAC_SHA256) { @@ -141,21 +140,21 @@ STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_key(mp_obj_t self) { } else { mp_raise_ValueError(MP_ERROR_TEXT("Invalid PRF")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &out); + return mp_obj_new_bytes_from_vstr(&out); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Pbkdf2_key_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Pbkdf2_key_obj, mod_trezorcrypto_Pbkdf2_key); -STATIC mp_obj_t mod_trezorcrypto_Pbkdf2___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Pbkdf2___del__(mp_obj_t self) { mp_obj_Pbkdf2_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx256), sizeof(PBKDF2_HMAC_SHA256_CTX)); memzero(&(o->ctx512), sizeof(PBKDF2_HMAC_SHA512_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Pbkdf2___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Pbkdf2___del___obj, mod_trezorcrypto_Pbkdf2___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Pbkdf2_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Pbkdf2_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Pbkdf2_update_obj)}, {MP_ROM_QSTR(MP_QSTR_key), MP_ROM_PTR(&mod_trezorcrypto_Pbkdf2_key_obj)}, @@ -164,12 +163,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Pbkdf2_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_HMAC_SHA256), MP_ROM_INT(PRF_HMAC_SHA256)}, {MP_ROM_QSTR(MP_QSTR_HMAC_SHA512), MP_ROM_INT(PRF_HMAC_SHA512)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Pbkdf2_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Pbkdf2_locals_dict, mod_trezorcrypto_Pbkdf2_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Pbkdf2_type = { - {&mp_type_type}, - .name = MP_QSTR_Pbkdf2, - .make_new = mod_trezorcrypto_Pbkdf2_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Pbkdf2_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Pbkdf2_type, + MP_QSTR_Pbkdf2, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Pbkdf2_make_new, + locals_dict, &mod_trezorcrypto_Pbkdf2_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-random.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-random.h index 39061ea2c29..289e9a47058 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-random.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-random.h @@ -30,14 +30,14 @@ /// """ /// Compute uniform random number from interval 0 ... n - 1. /// """ -STATIC mp_obj_t mod_trezorcrypto_random_uniform(mp_obj_t n) { +static mp_obj_t mod_trezorcrypto_random_uniform(mp_obj_t n) { uint32_t nn = trezor_obj_get_uint(n); if (nn == 0) { mp_raise_ValueError(MP_ERROR_TEXT("Maximum can't be zero")); } return mp_obj_new_int_from_uint(random_uniform(nn)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_random_uniform_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_random_uniform_obj, mod_trezorcrypto_random_uniform); /// import builtins @@ -46,7 +46,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_random_uniform_obj, /// Generate random bytes sequence of length len. If `strong` is set then /// maximum sources of entropy are used. /// """ -STATIC mp_obj_t mod_trezorcrypto_random_bytes(size_t n_args, +static mp_obj_t mod_trezorcrypto_random_bytes(size_t n_args, const mp_obj_t *args) { uint32_t len = trezor_obj_get_uint(args[0]); if (len > 1024) { @@ -63,16 +63,16 @@ STATIC mp_obj_t mod_trezorcrypto_random_bytes(size_t n_args, } else { rng_fill_buffer((uint8_t *)vstr.buf, len); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_random_bytes_obj, 1, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_random_bytes_obj, 1, 2, mod_trezorcrypto_random_bytes); /// def shuffle(data: list) -> None: /// """ /// Shuffles items of given list (in-place). /// """ -STATIC mp_obj_t mod_trezorcrypto_random_shuffle(mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_random_shuffle(mp_obj_t data) { size_t count = 0; mp_obj_t *items = NULL; mp_obj_get_array(data, &count, &items); @@ -92,7 +92,7 @@ STATIC mp_obj_t mod_trezorcrypto_random_shuffle(mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_random_shuffle_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_random_shuffle_obj, mod_trezorcrypto_random_shuffle); #ifdef TREZOR_EMULATOR @@ -100,15 +100,15 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_random_shuffle_obj, /// """ /// Re-seed the RNG with given value. /// """ -STATIC mp_obj_t mod_trezorcrypto_random_reseed(mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_random_reseed(mp_obj_t data) { random_reseed(trezor_obj_get_uint(data)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_random_reseed_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_random_reseed_obj, mod_trezorcrypto_random_reseed); #endif -STATIC const mp_rom_map_elem_t mod_trezorcrypto_random_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_random_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_random)}, {MP_ROM_QSTR(MP_QSTR_uniform), MP_ROM_PTR(&mod_trezorcrypto_random_uniform_obj)}, @@ -121,10 +121,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_random_globals_table[] = { MP_ROM_PTR(&mod_trezorcrypto_random_reseed_obj)}, #endif }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_random_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_random_globals, mod_trezorcrypto_random_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_random_module = { +static const mp_obj_module_t mod_trezorcrypto_random_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_random_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-ripemd160.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-ripemd160.h index cc889719d67..b48c50cbced 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-ripemd160.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-ripemd160.h @@ -35,18 +35,18 @@ typedef struct _mp_obj_Ripemd160_t { ripemd160_state ctx; } mp_obj_Ripemd160_t; -STATIC mp_obj_t mod_trezorcrypto_Ripemd160_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Ripemd160_update(mp_obj_t self, mp_obj_t data); /// def __init__(self, __data: StrOrBytes | None = None) -> None: /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Ripemd160_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Ripemd160_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Ripemd160_t *o = m_new_obj_with_finaliser(mp_obj_Ripemd160_t); - o->base.type = type; + mp_obj_Ripemd160_t *o = + mp_obj_malloc_with_finaliser(mp_obj_Ripemd160_t, type); ripemd160_init(&(o->ctx)); // constructor called with bytes/str as first parameter if (n_args == 1) { @@ -59,7 +59,7 @@ STATIC mp_obj_t mod_trezorcrypto_Ripemd160_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Ripemd160_update(mp_obj_t self, +static mp_obj_t mod_trezorcrypto_Ripemd160_update(mp_obj_t self, mp_obj_t data) { mp_obj_Ripemd160_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; @@ -69,14 +69,14 @@ STATIC mp_obj_t mod_trezorcrypto_Ripemd160_update(mp_obj_t self, } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Ripemd160_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Ripemd160_update_obj, mod_trezorcrypto_Ripemd160_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Ripemd160_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Ripemd160_digest(mp_obj_t self) { mp_obj_Ripemd160_t *o = MP_OBJ_TO_PTR(self); vstr_t hash = {0}; vstr_init_len(&hash, RIPEMD160_DIGEST_LENGTH); @@ -84,21 +84,21 @@ STATIC mp_obj_t mod_trezorcrypto_Ripemd160_digest(mp_obj_t self) { memcpy(&ctx, &(o->ctx), sizeof(ripemd160_state)); ripemd160_done(&ctx, (uint8_t *)hash.buf); memzero(&ctx, sizeof(ripemd160_state)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Ripemd160_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Ripemd160_digest_obj, mod_trezorcrypto_Ripemd160_digest); -STATIC mp_obj_t mod_trezorcrypto_Ripemd160___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Ripemd160___del__(mp_obj_t self) { mp_obj_Ripemd160_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(ripemd160_state)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Ripemd160___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Ripemd160___del___obj, mod_trezorcrypto_Ripemd160___del__); -STATIC const mp_rom_map_elem_t - mod_trezorcrypto_Ripemd160_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Ripemd160_locals_dict_table[] = + { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Ripemd160_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -108,12 +108,12 @@ STATIC const mp_rom_map_elem_t {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(RIPEMD160_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(RIPEMD160_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Ripemd160_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Ripemd160_locals_dict, mod_trezorcrypto_Ripemd160_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Ripemd160_type = { - {&mp_type_type}, - .name = MP_QSTR_Ripemd160, - .make_new = mod_trezorcrypto_Ripemd160_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Ripemd160_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Ripemd160_type, + MP_QSTR_Ripemd160, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Ripemd160_make_new, + locals_dict, &mod_trezorcrypto_Ripemd160_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-secp256k1.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-secp256k1.h index 9de7d3bcbca..e60d339b3e5 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-secp256k1.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-secp256k1.h @@ -30,7 +30,7 @@ /// """ /// Generate secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_secp256k1_generate_secret() { +static mp_obj_t mod_trezorcrypto_secp256k1_generate_secret() { vstr_t sk = {0}; vstr_init_len(&sk, 32); for (;;) { @@ -52,16 +52,16 @@ STATIC mp_obj_t mod_trezorcrypto_secp256k1_generate_secret() { continue; break; } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sk); + return mp_obj_new_bytes_from_vstr(&sk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_secp256k1_generate_secret_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorcrypto_secp256k1_generate_secret_obj, mod_trezorcrypto_secp256k1_generate_secret); /// def publickey(secret_key: AnyBytes, compressed: bool = True) -> bytes: /// """ /// Computes public key from secret key. /// """ -STATIC mp_obj_t mod_trezorcrypto_secp256k1_publickey(size_t n_args, +static mp_obj_t mod_trezorcrypto_secp256k1_publickey(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t sk = {0}; mp_get_buffer_raise(args[0], &sk, MP_BUFFER_READ); @@ -84,9 +84,9 @@ STATIC mp_obj_t mod_trezorcrypto_secp256k1_publickey(size_t n_args, vstr_clear(&pk); mp_raise_ValueError(MP_ERROR_TEXT("Invalid secret key")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); + return mp_obj_new_bytes_from_vstr(&pk); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( mod_trezorcrypto_secp256k1_publickey_obj, 1, 2, mod_trezorcrypto_secp256k1_publickey); @@ -125,7 +125,7 @@ enum { /// """ /// Uses secret key to produce the signature of the digest. /// """ -STATIC mp_obj_t mod_trezorcrypto_secp256k1_sign(size_t n_args, +static mp_obj_t mod_trezorcrypto_secp256k1_sign(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t sk = {0}; mp_buffer_info_t dig = {0}; @@ -160,9 +160,9 @@ STATIC mp_obj_t mod_trezorcrypto_secp256k1_sign(size_t n_args, mp_raise_ValueError(MP_ERROR_TEXT("Signing failed")); } sig.buf[0] = 27 + pby + compressed * 4; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_secp256k1_sign_obj, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_secp256k1_sign_obj, 2, 4, mod_trezorcrypto_secp256k1_sign); @@ -173,7 +173,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_secp256k1_sign_obj, /// Uses public key to verify the signature of the digest. /// Returns True on success. /// """ -STATIC mp_obj_t mod_trezorcrypto_secp256k1_verify(mp_obj_t public_key, +static mp_obj_t mod_trezorcrypto_secp256k1_verify(mp_obj_t public_key, mp_obj_t signature, mp_obj_t digest) { mp_buffer_info_t pk = {0}, sig = {0}, dig = {0}; @@ -195,7 +195,7 @@ STATIC mp_obj_t mod_trezorcrypto_secp256k1_verify(mp_obj_t public_key, (const uint8_t *)dig.buf); return mp_obj_new_bool(ret == 0); } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_secp256k1_verify_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_secp256k1_verify_obj, mod_trezorcrypto_secp256k1_verify); /// def verify_recover(signature: AnyBytes, digest: AnyBytes) -> bytes: @@ -203,7 +203,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_secp256k1_verify_obj, /// Uses signature of the digest to verify the digest and recover the public /// key. Returns public key on success, None if the signature is invalid. /// """ -STATIC mp_obj_t mod_trezorcrypto_secp256k1_verify_recover(mp_obj_t signature, +static mp_obj_t mod_trezorcrypto_secp256k1_verify_recover(mp_obj_t signature, mp_obj_t digest) { mp_buffer_info_t sig = {0}, dig = {0}; mp_get_buffer_raise(signature, &sig, MP_BUFFER_READ); @@ -229,12 +229,12 @@ STATIC mp_obj_t mod_trezorcrypto_secp256k1_verify_recover(mp_obj_t signature, pk.buf[0] = 0x02 | (pk.buf[64] & 1); pk.len = 33; } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &pk); + return mp_obj_new_bytes_from_vstr(&pk); } else { return mp_const_none; } } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_secp256k1_verify_recover_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_secp256k1_verify_recover_obj, mod_trezorcrypto_secp256k1_verify_recover); /// def multiply(secret_key: AnyBytes, public_key: AnyBytes) -> bytes: @@ -242,7 +242,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_secp256k1_verify_recover_obj, /// Multiplies point defined by public_key with scalar defined by /// secret_key. Useful for ECDH. /// """ -STATIC mp_obj_t mod_trezorcrypto_secp256k1_multiply(mp_obj_t secret_key, +static mp_obj_t mod_trezorcrypto_secp256k1_multiply(mp_obj_t secret_key, mp_obj_t public_key) { mp_buffer_info_t sk = {0}, pk = {0}; mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ); @@ -260,12 +260,12 @@ STATIC mp_obj_t mod_trezorcrypto_secp256k1_multiply(mp_obj_t secret_key, vstr_clear(&out); mp_raise_ValueError(MP_ERROR_TEXT("Multiply failed")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &out); + return mp_obj_new_bytes_from_vstr(&out); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_secp256k1_multiply_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_secp256k1_multiply_obj, mod_trezorcrypto_secp256k1_multiply); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_secp256k1_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_secp256k1_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_secp256k1)}, {MP_ROM_QSTR(MP_QSTR_generate_secret), MP_ROM_PTR(&mod_trezorcrypto_secp256k1_generate_secret_obj)}, @@ -285,10 +285,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_secp256k1_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_CANONICAL_SIG_EOS), MP_ROM_INT(CANONICAL_SIG_EOS)}, #endif }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_secp256k1_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_secp256k1_globals, mod_trezorcrypto_secp256k1_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_secp256k1_module = { +static const mp_obj_module_t mod_trezorcrypto_secp256k1_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_secp256k1_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha1.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha1.h index 82440ca0aa3..c3104d8046a 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha1.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha1.h @@ -35,18 +35,17 @@ typedef struct _mp_obj_Sha1_t { SHA1_CTX ctx; } mp_obj_Sha1_t; -STATIC mp_obj_t mod_trezorcrypto_Sha1_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Sha1_update(mp_obj_t self, mp_obj_t data); /// def __init__(self, __data: StrOrBytes | None = None) -> None: /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha1_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Sha1_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Sha1_t *o = m_new_obj_with_finaliser(mp_obj_Sha1_t); - o->base.type = type; + mp_obj_Sha1_t *o = mp_obj_malloc_with_finaliser(mp_obj_Sha1_t, type); sha1_Init(&(o->ctx)); // constructor called with bytes/str as first parameter if (n_args == 1) { @@ -59,7 +58,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha1_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha1_update(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_Sha1_update(mp_obj_t self, mp_obj_t data) { mp_obj_Sha1_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(data, &msg, MP_BUFFER_READ); @@ -68,14 +67,14 @@ STATIC mp_obj_t mod_trezorcrypto_Sha1_update(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha1_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha1_update_obj, mod_trezorcrypto_Sha1_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha1_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha1_digest(mp_obj_t self) { mp_obj_Sha1_t *o = MP_OBJ_TO_PTR(self); vstr_t hash = {0}; vstr_init_len(&hash, SHA1_DIGEST_LENGTH); @@ -83,20 +82,20 @@ STATIC mp_obj_t mod_trezorcrypto_Sha1_digest(mp_obj_t self) { memcpy(&ctx, &(o->ctx), sizeof(SHA1_CTX)); sha1_Final(&ctx, (uint8_t *)hash.buf); memzero(&ctx, sizeof(SHA1_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha1_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha1_digest_obj, mod_trezorcrypto_Sha1_digest); -STATIC mp_obj_t mod_trezorcrypto_Sha1___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha1___del__(mp_obj_t self) { mp_obj_Sha1_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(SHA1_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha1___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha1___del___obj, mod_trezorcrypto_Sha1___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha1_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Sha1_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Sha1_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -106,12 +105,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha1_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(SHA1_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(SHA1_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha1_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha1_locals_dict, mod_trezorcrypto_Sha1_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Sha1_type = { - {&mp_type_type}, - .name = MP_QSTR_Sha1, - .make_new = mod_trezorcrypto_Sha1_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Sha1_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Sha1_type, + MP_QSTR_Sha1, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Sha1_make_new, + locals_dict, &mod_trezorcrypto_Sha1_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha256.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha256.h index a88dbcf037a..62e673f9785 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha256.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha256.h @@ -35,18 +35,17 @@ typedef struct _mp_obj_Sha256_t { SHA256_CTX ctx; } mp_obj_Sha256_t; -STATIC mp_obj_t mod_trezorcrypto_Sha256_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Sha256_update(mp_obj_t self, mp_obj_t data); /// def __init__(self, __data: StrOrBytes | None = None) -> None: /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha256_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Sha256_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Sha256_t *o = m_new_obj_with_finaliser(mp_obj_Sha256_t); - o->base.type = type; + mp_obj_Sha256_t *o = mp_obj_malloc_with_finaliser(mp_obj_Sha256_t, type); sha256_Init(&(o->ctx)); // constructor called with bytes/str as first parameter if (n_args == 1) { @@ -59,7 +58,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha256_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha256_update(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_Sha256_update(mp_obj_t self, mp_obj_t data) { mp_obj_Sha256_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(data, &msg, MP_BUFFER_READ); @@ -68,14 +67,14 @@ STATIC mp_obj_t mod_trezorcrypto_Sha256_update(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha256_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha256_update_obj, mod_trezorcrypto_Sha256_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha256_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha256_digest(mp_obj_t self) { mp_obj_Sha256_t *o = MP_OBJ_TO_PTR(self); vstr_t hash = {0}; vstr_init_len(&hash, SHA256_DIGEST_LENGTH); @@ -83,20 +82,20 @@ STATIC mp_obj_t mod_trezorcrypto_Sha256_digest(mp_obj_t self) { memcpy(&ctx, &(o->ctx), sizeof(SHA256_CTX)); sha256_Final(&ctx, (uint8_t *)hash.buf); memzero(&ctx, sizeof(SHA256_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha256_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha256_digest_obj, mod_trezorcrypto_Sha256_digest); -STATIC mp_obj_t mod_trezorcrypto_Sha256___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha256___del__(mp_obj_t self) { mp_obj_Sha256_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(SHA256_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha256___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha256___del___obj, mod_trezorcrypto_Sha256___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha256_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Sha256_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Sha256_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -106,12 +105,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha256_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(SHA256_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(SHA256_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha256_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha256_locals_dict, mod_trezorcrypto_Sha256_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Sha256_type = { - {&mp_type_type}, - .name = MP_QSTR_Sha256, - .make_new = mod_trezorcrypto_Sha256_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Sha256_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Sha256_type, + MP_QSTR_Sha256, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Sha256_make_new, + locals_dict, &mod_trezorcrypto_Sha256_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha3-256.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha3-256.h index 6e672c6d611..bb43a593e73 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha3-256.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha3-256.h @@ -36,7 +36,7 @@ typedef struct _mp_obj_Sha3_256_t { bool keccak; } mp_obj_Sha3_256_t; -STATIC mp_obj_t mod_trezorcrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data); /// def __init__( /// self, @@ -46,11 +46,11 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data); /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha3_256_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Sha3_256_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, true); - STATIC const mp_arg_t allowed_args[] = { + static const mp_arg_t allowed_args[] = { {MP_QSTR_data, MP_ARG_OBJ, {.u_obj = mp_const_none}}, {MP_QSTR_keccak, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_OBJ_NULL}}, }; @@ -58,8 +58,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_256_make_new(const mp_obj_type_t *type, mp_arg_parse_all_kw_array(n_args, n_kw, args, MP_ARRAY_SIZE(allowed_args), allowed_args, vals); - mp_obj_Sha3_256_t *o = m_new_obj_with_finaliser(mp_obj_Sha3_256_t); - o->base.type = type; + mp_obj_Sha3_256_t *o = mp_obj_malloc_with_finaliser(mp_obj_Sha3_256_t, type); o->keccak = 0; sha3_256_Init(&(o->ctx)); if (vals[1].u_obj != MP_OBJ_NULL) { @@ -76,7 +75,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_256_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data) { mp_obj_Sha3_256_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(data, &msg, MP_BUFFER_READ); @@ -85,14 +84,14 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha3_256_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha3_256_update_obj, mod_trezorcrypto_Sha3_256_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha3_256_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha3_256_digest(mp_obj_t self) { mp_obj_Sha3_256_t *o = MP_OBJ_TO_PTR(self); vstr_t hash = {0}; vstr_init_len(&hash, SHA3_256_DIGEST_LENGTH); @@ -104,37 +103,37 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_256_digest(mp_obj_t self) { sha3_Final(&ctx, (uint8_t *)hash.buf); } memzero(&ctx, sizeof(SHA3_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_256_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_256_digest_obj, mod_trezorcrypto_Sha3_256_digest); /// def copy(self) -> sha3_256: /// """ /// Returns the copy of the digest object with the current state /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha3_256_copy(size_t n_args, +static mp_obj_t mod_trezorcrypto_Sha3_256_copy(size_t n_args, const mp_obj_t *args) { mp_obj_Sha3_256_t *o = MP_OBJ_TO_PTR(args[0]); - mp_obj_Sha3_256_t *out = m_new_obj_with_finaliser(mp_obj_Sha3_256_t); - out->base.type = o->base.type; + mp_obj_Sha3_256_t *out = + mp_obj_malloc_with_finaliser(mp_obj_Sha3_256_t, o->base.type); out->keccak = o->keccak; memcpy(&(out->ctx), &(o->ctx), sizeof(SHA3_CTX)); return MP_OBJ_FROM_PTR(out); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_Sha3_256_copy_obj, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_Sha3_256_copy_obj, 1, 1, mod_trezorcrypto_Sha3_256_copy); -STATIC mp_obj_t mod_trezorcrypto_Sha3_256___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha3_256___del__(mp_obj_t self) { mp_obj_Sha3_256_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(SHA3_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_256___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_256___del___obj, mod_trezorcrypto_Sha3_256___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha3_256_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Sha3_256_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Sha3_256_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -146,12 +145,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha3_256_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(SHA3_256_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(SHA3_256_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha3_256_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha3_256_locals_dict, mod_trezorcrypto_Sha3_256_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Sha3_256_type = { - {&mp_type_type}, - .name = MP_QSTR_Sha3_256, - .make_new = mod_trezorcrypto_Sha3_256_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Sha3_256_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Sha3_256_type, + MP_QSTR_Sha3_256, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Sha3_256_make_new, + locals_dict, &mod_trezorcrypto_Sha3_256_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha3-512.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha3-512.h index b66e36827c8..42a40461095 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha3-512.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha3-512.h @@ -36,7 +36,7 @@ typedef struct _mp_obj_Sha3_512_t { bool keccak; } mp_obj_Sha3_512_t; -STATIC mp_obj_t mod_trezorcrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data); /// def __init__( /// self, @@ -46,11 +46,11 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data); /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha3_512_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Sha3_512_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, true); - STATIC const mp_arg_t allowed_args[] = { + static const mp_arg_t allowed_args[] = { {MP_QSTR_data, MP_ARG_OBJ, {.u_obj = mp_const_none}}, {MP_QSTR_keccak, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_OBJ_NULL}}, }; @@ -58,8 +58,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_512_make_new(const mp_obj_type_t *type, mp_arg_parse_all_kw_array(n_args, n_kw, args, MP_ARRAY_SIZE(allowed_args), allowed_args, vals); - mp_obj_Sha3_512_t *o = m_new_obj_with_finaliser(mp_obj_Sha3_512_t); - o->base.type = type; + mp_obj_Sha3_512_t *o = mp_obj_malloc_with_finaliser(mp_obj_Sha3_512_t, type); o->keccak = 0; sha3_512_Init(&(o->ctx)); if (vals[1].u_obj != MP_OBJ_NULL) { @@ -76,7 +75,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_512_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data) { mp_obj_Sha3_512_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(data, &msg, MP_BUFFER_READ); @@ -85,14 +84,14 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha3_512_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha3_512_update_obj, mod_trezorcrypto_Sha3_512_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha3_512_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha3_512_digest(mp_obj_t self) { mp_obj_Sha3_512_t *o = MP_OBJ_TO_PTR(self); vstr_t hash = {0}; vstr_init_len(&hash, SHA3_512_DIGEST_LENGTH); @@ -104,37 +103,37 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_512_digest(mp_obj_t self) { sha3_Final(&ctx, (uint8_t *)hash.buf); } memzero(&ctx, sizeof(SHA3_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_512_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_512_digest_obj, mod_trezorcrypto_Sha3_512_digest); /// def copy(self) -> sha3_512: /// """ /// Returns the copy of the digest object with the current state /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha3_512_copy(size_t n_args, +static mp_obj_t mod_trezorcrypto_Sha3_512_copy(size_t n_args, const mp_obj_t *args) { mp_obj_Sha3_512_t *o = MP_OBJ_TO_PTR(args[0]); - mp_obj_Sha3_512_t *out = m_new_obj_with_finaliser(mp_obj_Sha3_512_t); - out->base.type = o->base.type; + mp_obj_Sha3_512_t *out = + mp_obj_malloc_with_finaliser(mp_obj_Sha3_512_t, o->base.type); out->keccak = o->keccak; memcpy(&(out->ctx), &(o->ctx), sizeof(SHA3_CTX)); return MP_OBJ_FROM_PTR(out); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_Sha3_512_copy_obj, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorcrypto_Sha3_512_copy_obj, 1, 1, mod_trezorcrypto_Sha3_512_copy); -STATIC mp_obj_t mod_trezorcrypto_Sha3_512___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha3_512___del__(mp_obj_t self) { mp_obj_Sha3_512_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(SHA3_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_512___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_512___del___obj, mod_trezorcrypto_Sha3_512___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha3_512_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Sha3_512_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Sha3_512_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -146,12 +145,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha3_512_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(SHA3_512_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(SHA3_512_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha3_512_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha3_512_locals_dict, mod_trezorcrypto_Sha3_512_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Sha3_512_type = { - {&mp_type_type}, - .name = MP_QSTR_Sha3_512, - .make_new = mod_trezorcrypto_Sha3_512_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Sha3_512_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Sha3_512_type, + MP_QSTR_Sha3_512, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Sha3_512_make_new, + locals_dict, &mod_trezorcrypto_Sha3_512_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha512.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha512.h index 9c6ac8e41e4..173752cb836 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha512.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-sha512.h @@ -35,18 +35,17 @@ typedef struct _mp_obj_Sha512_t { SHA512_CTX ctx; } mp_obj_Sha512_t; -STATIC mp_obj_t mod_trezorcrypto_Sha512_update(mp_obj_t self, mp_obj_t data); +static mp_obj_t mod_trezorcrypto_Sha512_update(mp_obj_t self, mp_obj_t data); /// def __init__(self, __data: StrOrBytes | None = None) -> None: /// """ /// Creates a hash context object. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha512_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorcrypto_Sha512_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Sha512_t *o = m_new_obj_with_finaliser(mp_obj_Sha512_t); - o->base.type = type; + mp_obj_Sha512_t *o = mp_obj_malloc_with_finaliser(mp_obj_Sha512_t, type); sha512_Init(&(o->ctx)); if (n_args == 1) { mod_trezorcrypto_Sha512_update(MP_OBJ_FROM_PTR(o), args[0]); @@ -58,7 +57,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha512_make_new(const mp_obj_type_t *type, /// """ /// Update the hash context with hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha512_update(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorcrypto_Sha512_update(mp_obj_t self, mp_obj_t data) { mp_obj_Sha512_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t msg = {0}; mp_get_buffer_raise(data, &msg, MP_BUFFER_READ); @@ -67,14 +66,14 @@ STATIC mp_obj_t mod_trezorcrypto_Sha512_update(mp_obj_t self, mp_obj_t data) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha512_update_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_Sha512_update_obj, mod_trezorcrypto_Sha512_update); /// def digest(self) -> bytes: /// """ /// Returns the digest of hashed data. /// """ -STATIC mp_obj_t mod_trezorcrypto_Sha512_digest(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha512_digest(mp_obj_t self) { mp_obj_Sha512_t *o = MP_OBJ_TO_PTR(self); vstr_t hash = {0}; vstr_init_len(&hash, SHA512_DIGEST_LENGTH); @@ -82,20 +81,20 @@ STATIC mp_obj_t mod_trezorcrypto_Sha512_digest(mp_obj_t self) { memcpy(&ctx, &(o->ctx), sizeof(SHA512_CTX)); sha512_Final(&ctx, (uint8_t *)hash.buf); memzero(&ctx, sizeof(SHA512_CTX)); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &hash); + return mp_obj_new_bytes_from_vstr(&hash); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha512_digest_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha512_digest_obj, mod_trezorcrypto_Sha512_digest); -STATIC mp_obj_t mod_trezorcrypto_Sha512___del__(mp_obj_t self) { +static mp_obj_t mod_trezorcrypto_Sha512___del__(mp_obj_t self) { mp_obj_Sha512_t *o = MP_OBJ_TO_PTR(self); memzero(&(o->ctx), sizeof(SHA512_CTX)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha512___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha512___del___obj, mod_trezorcrypto_Sha512___del__); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha512_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_Sha512_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_trezorcrypto_Sha512_update_obj)}, {MP_ROM_QSTR(MP_QSTR_digest), @@ -105,12 +104,12 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_Sha512_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_block_size), MP_ROM_INT(SHA512_BLOCK_LENGTH)}, {MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_INT(SHA512_DIGEST_LENGTH)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha512_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_Sha512_locals_dict, mod_trezorcrypto_Sha512_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorcrypto_Sha512_type = { - {&mp_type_type}, - .name = MP_QSTR_Sha512, - .make_new = mod_trezorcrypto_Sha512_make_new, - .locals_dict = (void *)&mod_trezorcrypto_Sha512_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorcrypto_Sha512_type, + MP_QSTR_Sha512, MP_TYPE_FLAG_NONE, + make_new, mod_trezorcrypto_Sha512_make_new, + locals_dict, &mod_trezorcrypto_Sha512_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-shamir.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-shamir.h index 5a4e35b1283..153e0bc76f2 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-shamir.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-shamir.h @@ -76,20 +76,20 @@ mp_obj_t mod_trezorcrypto_shamir_interpolate(mp_obj_t shares, mp_obj_t x) { mp_raise_ValueError( MP_ERROR_TEXT("Share indices must be pairwise distinct.")); } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_shamir_interpolate_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_shamir_interpolate_obj, mod_trezorcrypto_shamir_interpolate); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_shamir_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_shamir_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_shamir)}, {MP_ROM_QSTR(MP_QSTR_interpolate), MP_ROM_PTR(&mod_trezorcrypto_shamir_interpolate_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_shamir_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_shamir_globals, mod_trezorcrypto_shamir_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_shamir_module = { +static const mp_obj_module_t mod_trezorcrypto_shamir_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_shamir_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-slip39.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-slip39.h index 587d2439556..a4e3b7a8fbc 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-slip39.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-slip39.h @@ -29,7 +29,7 @@ /// Finds index of given word. /// Raises ValueError if not found. /// """ -STATIC mp_obj_t mod_trezorcrypto_slip39_word_index(mp_obj_t _word) { +static mp_obj_t mod_trezorcrypto_slip39_word_index(mp_obj_t _word) { mp_buffer_info_t word = {0}; mp_get_buffer_raise(_word, &word, MP_BUFFER_READ); @@ -40,14 +40,14 @@ STATIC mp_obj_t mod_trezorcrypto_slip39_word_index(mp_obj_t _word) { } return mp_obj_new_int_from_uint(result); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_slip39_word_index_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_slip39_word_index_obj, mod_trezorcrypto_slip39_word_index); /// def get_word(index: int) -> str: /// """ /// Returns word on position 'index'. /// """ -STATIC mp_obj_t mod_trezorcrypto_slip39_get_word(mp_obj_t _index) { +static mp_obj_t mod_trezorcrypto_slip39_get_word(mp_obj_t _index) { uint16_t index = mp_obj_get_int(_index); const char *word = get_word(index); @@ -58,20 +58,20 @@ STATIC mp_obj_t mod_trezorcrypto_slip39_get_word(mp_obj_t _index) { return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)word, strlen(word)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_slip39_get_word_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_slip39_get_word_obj, mod_trezorcrypto_slip39_get_word); -STATIC const mp_rom_map_elem_t mod_trezorcrypto_slip39_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_slip39_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_slip39)}, {MP_ROM_QSTR(MP_QSTR_word_index), MP_ROM_PTR(&mod_trezorcrypto_slip39_word_index_obj)}, {MP_ROM_QSTR(MP_QSTR_get_word), MP_ROM_PTR(&mod_trezorcrypto_slip39_get_word_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_slip39_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_slip39_globals, mod_trezorcrypto_slip39_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_slip39_module = { +static const mp_obj_module_t mod_trezorcrypto_slip39_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_slip39_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-tropic.h b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-tropic.h index 308753978bb..142cbd301c8 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-tropic.h +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto-tropic.h @@ -43,7 +43,7 @@ MP_DEFINE_EXCEPTION(TropicError, Exception) /// """ /// Test the session by pinging the chip. /// """ -STATIC mp_obj_t mod_trezorcrypto_tropic_ping(mp_obj_t message) { +static mp_obj_t mod_trezorcrypto_tropic_ping(mp_obj_t message) { mp_buffer_info_t message_b = {0}; mp_get_buffer_raise(message, &message_b, MP_BUFFER_READ); @@ -58,9 +58,9 @@ STATIC mp_obj_t mod_trezorcrypto_tropic_ping(mp_obj_t message) { memcpy(result.buf, msg_in, message_b.len); - return mp_obj_new_str_from_vstr(&mp_type_str, &result); + return mp_obj_new_str_from_vstr(&result); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_ping_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_ping_obj, mod_trezorcrypto_tropic_ping); /// def key_generate( @@ -69,7 +69,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_ping_obj, /// """ /// Generate ECC key in the device's ECC key slot. /// """ -STATIC mp_obj_t mod_trezorcrypto_tropic_key_generate(mp_obj_t key_index) { +static mp_obj_t mod_trezorcrypto_tropic_key_generate(mp_obj_t key_index) { mp_int_t idx = mp_obj_get_int(key_index); if (idx < 0 || idx >= ECC_SLOT_COUNT) { mp_raise_ValueError(MP_ERROR_TEXT("Invalid index.")); @@ -83,7 +83,7 @@ STATIC mp_obj_t mod_trezorcrypto_tropic_key_generate(mp_obj_t key_index) { return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_key_generate_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_key_generate_obj, mod_trezorcrypto_tropic_key_generate); /// def sign( @@ -93,7 +93,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_key_generate_obj, /// """ /// Uses the private key at key_index to produce a signature of the digest. /// """ -STATIC mp_obj_t mod_trezorcrypto_tropic_sign(mp_obj_t key_index, +static mp_obj_t mod_trezorcrypto_tropic_sign(mp_obj_t key_index, mp_obj_t digest) { mp_int_t idx = mp_obj_get_int(key_index); if (idx < 0 || idx >= ECC_SLOT_COUNT) { @@ -115,9 +115,9 @@ STATIC mp_obj_t mod_trezorcrypto_tropic_sign(mp_obj_t key_index, } sig.len = sizeof(ed25519_signature); - return mp_obj_new_str_from_vstr(&mp_type_bytes, &sig); + return mp_obj_new_bytes_from_vstr(&sig); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_tropic_sign_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_tropic_sign_obj, mod_trezorcrypto_tropic_sign); static bool get_slot_range(int index, uint16_t *first_slot, @@ -141,7 +141,7 @@ static bool get_slot_range(int index, uint16_t *first_slot, /// """ /// Return the user data stored at the given index. /// """ -STATIC mp_obj_t mod_trezorcrypto_tropic_get_user_data(mp_obj_t index) { +static mp_obj_t mod_trezorcrypto_tropic_get_user_data(mp_obj_t index) { mp_int_t idx = mp_obj_get_int(index); uint16_t first_slot = 0; uint16_t slot_count = 0; @@ -165,9 +165,9 @@ STATIC mp_obj_t mod_trezorcrypto_tropic_get_user_data(mp_obj_t index) { } data.len = data_size; - return mp_obj_new_str_from_vstr(&mp_type_bytes, &data); + return mp_obj_new_bytes_from_vstr(&data); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_get_user_data_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_get_user_data_obj, mod_trezorcrypto_tropic_get_user_data); /// DEVICE_CERT_INDEX: int @@ -175,7 +175,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_tropic_get_user_data_obj, /// FIDO_CERT_INDEX: int /// FIDO_KEY_SLOT: int -STATIC const mp_rom_map_elem_t mod_trezorcrypto_tropic_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorcrypto_tropic_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_tropic)}, {MP_ROM_QSTR(MP_QSTR_DEVICE_CERT_INDEX), MP_ROM_INT(TROPIC_DEVICE_CERT_INDEX)}, @@ -189,10 +189,10 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_tropic_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_get_user_data), MP_ROM_PTR(&mod_trezorcrypto_tropic_get_user_data_obj)}, {MP_ROM_QSTR(MP_QSTR_TropicError), MP_ROM_PTR(&mp_type_TropicError)}}; -STATIC MP_DEFINE_CONST_DICT(mod_trezorcrypto_tropic_globals, +static MP_DEFINE_CONST_DICT(mod_trezorcrypto_tropic_globals, mod_trezorcrypto_tropic_globals_table); -STATIC const mp_obj_module_t mod_trezorcrypto_tropic_module = { +static const mp_obj_module_t mod_trezorcrypto_tropic_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorcrypto_tropic_globals, }; diff --git a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto.c b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto.c index 15d1c214fa3..82edf4e8a59 100644 --- a/core/embed/upymod/modtrezorcrypto/modtrezorcrypto.c +++ b/core/embed/upymod/modtrezorcrypto/modtrezorcrypto.c @@ -83,7 +83,7 @@ static void wrapped_ui_wait_callback(uint32_t current, uint32_t total) { MP_DEFINE_EXCEPTION(AuthenticationError, Exception) -STATIC const mp_rom_map_elem_t mp_module_trezorcrypto_globals_table[] = { +static const mp_rom_map_elem_t mp_module_trezorcrypto_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_trezorcrypto)}, {MP_ROM_QSTR(MP_QSTR_AuthenticationError), MP_ROM_PTR(&mp_type_AuthenticationError)}, @@ -157,7 +157,7 @@ STATIC const mp_rom_map_elem_t mp_module_trezorcrypto_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_mcu), MP_ROM_PTR(&mod_trezorcrypto_mcu_module)}, #endif }; -STATIC MP_DEFINE_CONST_DICT(mp_module_trezorcrypto_globals, +static MP_DEFINE_CONST_DICT(mp_module_trezorcrypto_globals, mp_module_trezorcrypto_globals_table); const mp_obj_module_t mp_module_trezorcrypto = { diff --git a/core/embed/upymod/modtrezorio/modtrezorio-fatfs.h b/core/embed/upymod/modtrezorio/modtrezorio-fatfs.h index 3efa1b33f4c..7ccbe2b3b2c 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-fatfs.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-fatfs.h @@ -129,7 +129,7 @@ DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff) { } } -STATIC mp_obj_t filinfo_to_tuple(const FILINFO *info) { +static mp_obj_t filinfo_to_tuple(const FILINFO *info) { mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(3, NULL)); tuple->items[0] = mp_obj_new_int_from_uint(info->fsize); char attrs[] = "-----"; @@ -149,7 +149,7 @@ STATIC mp_obj_t filinfo_to_tuple(const FILINFO *info) { attrs[4] = 'a'; } tuple->items[1] = mp_obj_new_str(attrs, 5); - tuple->items[2] = mp_obj_new_str(info->fname, strlen(info->fname)); + tuple->items[2] = mp_obj_new_str_from_cstr(info->fname); return MP_OBJ_FROM_PTR(tuple); } @@ -176,7 +176,7 @@ typedef struct _mp_obj_FatFSFile_t { /// """ /// Close an open file object /// """ -STATIC mp_obj_t mod_trezorio_FatFSFile___exit__(size_t n_args, +static mp_obj_t mod_trezorio_FatFSFile___exit__(size_t n_args, const mp_obj_t *args) { mp_obj_FatFSFile_t *o = MP_OBJ_TO_PTR(args[0]); FRESULT res = f_close(&(o->fp)); @@ -185,7 +185,7 @@ STATIC mp_obj_t mod_trezorio_FatFSFile___exit__(size_t n_args, } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_FatFSFile___exit___obj, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_FatFSFile___exit___obj, 4, 4, mod_trezorio_FatFSFile___exit__); @@ -193,7 +193,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_FatFSFile___exit___obj, /// """ /// Close an open file object /// """ -STATIC mp_obj_t mod_trezorio_FatFSFile_close(mp_obj_t self) { +static mp_obj_t mod_trezorio_FatFSFile_close(mp_obj_t self) { mp_obj_FatFSFile_t *o = MP_OBJ_TO_PTR(self); FRESULT res = f_close(&(o->fp)); if (res != FR_OK) { @@ -201,14 +201,14 @@ STATIC mp_obj_t mod_trezorio_FatFSFile_close(mp_obj_t self) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_FatFSFile_close_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_FatFSFile_close_obj, mod_trezorio_FatFSFile_close); /// def read(self, data: bytearray) -> int: /// """ /// Read data from the file /// """ -STATIC mp_obj_t mod_trezorio_FatFSFile_read(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorio_FatFSFile_read(mp_obj_t self, mp_obj_t data) { mp_obj_FatFSFile_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t buf = {0}; mp_get_buffer_raise(data, &buf, MP_BUFFER_WRITE); @@ -219,14 +219,14 @@ STATIC mp_obj_t mod_trezorio_FatFSFile_read(mp_obj_t self, mp_obj_t data) { } return mp_obj_new_int_from_uint(read); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_FatFSFile_read_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_FatFSFile_read_obj, mod_trezorio_FatFSFile_read); /// def write(self, data: AnyBytes) -> int: /// """ /// Write data to the file /// """ -STATIC mp_obj_t mod_trezorio_FatFSFile_write(mp_obj_t self, mp_obj_t data) { +static mp_obj_t mod_trezorio_FatFSFile_write(mp_obj_t self, mp_obj_t data) { mp_obj_FatFSFile_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t buf = {0}; mp_get_buffer_raise(data, &buf, MP_BUFFER_READ); @@ -241,14 +241,14 @@ STATIC mp_obj_t mod_trezorio_FatFSFile_write(mp_obj_t self, mp_obj_t data) { } return mp_obj_new_int_from_uint(written); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_FatFSFile_write_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_FatFSFile_write_obj, mod_trezorio_FatFSFile_write); /// def seek(self, offset: int) -> None: /// """ /// Move file pointer of the file object /// """ -STATIC mp_obj_t mod_trezorio_FatFSFile_seek(mp_obj_t self, mp_obj_t offset) { +static mp_obj_t mod_trezorio_FatFSFile_seek(mp_obj_t self, mp_obj_t offset) { mp_obj_FatFSFile_t *o = MP_OBJ_TO_PTR(self); FSIZE_t ofs = trezor_obj_get_uint(offset); FRESULT res = f_lseek(&(o->fp), ofs); @@ -257,14 +257,14 @@ STATIC mp_obj_t mod_trezorio_FatFSFile_seek(mp_obj_t self, mp_obj_t offset) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_FatFSFile_seek_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_FatFSFile_seek_obj, mod_trezorio_FatFSFile_seek); /// def truncate(self) -> None: /// """ /// Truncate the file /// """ -STATIC mp_obj_t mod_trezorio_FatFSFile_truncate(mp_obj_t self) { +static mp_obj_t mod_trezorio_FatFSFile_truncate(mp_obj_t self) { mp_obj_FatFSFile_t *o = MP_OBJ_TO_PTR(self); FRESULT res = f_truncate(&(o->fp)); if (res != FR_OK) { @@ -272,14 +272,14 @@ STATIC mp_obj_t mod_trezorio_FatFSFile_truncate(mp_obj_t self) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_FatFSFile_truncate_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_FatFSFile_truncate_obj, mod_trezorio_FatFSFile_truncate); /// def sync(self) -> None: /// """ /// Flush cached data of the writing file /// """ -STATIC mp_obj_t mod_trezorio_FatFSFile_sync(mp_obj_t self) { +static mp_obj_t mod_trezorio_FatFSFile_sync(mp_obj_t self) { mp_obj_FatFSFile_t *o = MP_OBJ_TO_PTR(self); FRESULT res = f_sync(&(o->fp)); if (res != FR_OK) { @@ -287,10 +287,10 @@ STATIC mp_obj_t mod_trezorio_FatFSFile_sync(mp_obj_t self) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_FatFSFile_sync_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_FatFSFile_sync_obj, mod_trezorio_FatFSFile_sync); -STATIC const mp_rom_map_elem_t mod_trezorio_FatFSFile_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorio_FatFSFile_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&mp_identity_obj)}, {MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&mod_trezorio_FatFSFile___exit___obj)}, @@ -302,14 +302,14 @@ STATIC const mp_rom_map_elem_t mod_trezorio_FatFSFile_locals_dict_table[] = { MP_ROM_PTR(&mod_trezorio_FatFSFile_truncate_obj)}, {MP_ROM_QSTR(MP_QSTR_sync), MP_ROM_PTR(&mod_trezorio_FatFSFile_sync_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_FatFSFile_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorio_FatFSFile_locals_dict, mod_trezorio_FatFSFile_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorio_FatFSFile_type = { - {&mp_type_type}, - .name = MP_QSTR_FatFSFile, - .locals_dict = (void *)&mod_trezorio_FatFSFile_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorio_FatFSFile_type, + MP_QSTR_FatFSFile, MP_TYPE_FLAG_NONE, + locals_dict, &mod_trezorio_FatFSFile_locals_dict); +// clang-format on /// class FatFSDir(Iterator[tuple[int, str, str]]): /// """ @@ -324,7 +324,7 @@ typedef struct _mp_obj_FatFSDir_t { /// """ /// Read an entry in the directory /// """ -STATIC mp_obj_t mod_trezorio_FatFSDir_iternext(mp_obj_t self) { +static mp_obj_t mod_trezorio_FatFSDir_iternext(mp_obj_t self) { mp_obj_FatFSDir_t *o = MP_OBJ_TO_PTR(self); FILINFO info = {0}; FRESULT res = f_readdir(&(o->dp), &info); @@ -338,15 +338,14 @@ STATIC mp_obj_t mod_trezorio_FatFSDir_iternext(mp_obj_t self) { } return filinfo_to_tuple(&info); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_FatFSDir_iternext_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_FatFSDir_iternext_obj, mod_trezorio_FatFSDir_iternext); -STATIC const mp_obj_type_t mod_trezorio_FatFSDir_type = { - {&mp_type_type}, - .name = MP_QSTR_FatFSDir, - .getiter = mp_identity_getiter, - .iternext = mod_trezorio_FatFSDir_iternext, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorio_FatFSDir_type, + MP_QSTR_FatFSDir, MP_TYPE_FLAG_ITER_IS_ITERNEXT, + iter, mod_trezorio_FatFSDir_iternext); +// clang-format on /// mock:global @@ -354,7 +353,7 @@ STATIC const mp_obj_type_t mod_trezorio_FatFSDir_type = { /// """ /// Open or create a file /// """ -STATIC mp_obj_t mod_trezorio_fatfs_open(mp_obj_t path, mp_obj_t flags) { +static mp_obj_t mod_trezorio_fatfs_open(mp_obj_t path, mp_obj_t flags) { FATFS_ONLY_MOUNTED; mp_buffer_info_t _path = {0}, _flags = {0}; mp_get_buffer_raise(path, &_path, MP_BUFFER_READ); @@ -390,14 +389,14 @@ STATIC mp_obj_t mod_trezorio_fatfs_open(mp_obj_t path, mp_obj_t flags) { f->fp = fp; return f; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_fatfs_open_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_fatfs_open_obj, mod_trezorio_fatfs_open); /// def listdir(path: str) -> FatFSDir: /// """ /// List a directory (return generator) /// """ -STATIC mp_obj_t mod_trezorio_fatfs_listdir(mp_obj_t path) { +static mp_obj_t mod_trezorio_fatfs_listdir(mp_obj_t path) { FATFS_ONLY_MOUNTED; mp_buffer_info_t _path = {0}; mp_get_buffer_raise(path, &_path, MP_BUFFER_READ); @@ -411,14 +410,14 @@ STATIC mp_obj_t mod_trezorio_fatfs_listdir(mp_obj_t path) { d->dp = dp; return d; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_fatfs_listdir_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_fatfs_listdir_obj, mod_trezorio_fatfs_listdir); /// def mkdir(path: str, exist_ok: bool=False) -> None: /// """ /// Create a sub directory /// """ -STATIC mp_obj_t mod_trezorio_fatfs_mkdir(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorio_fatfs_mkdir(size_t n_args, const mp_obj_t *args) { FATFS_ONLY_MOUNTED; mp_buffer_info_t path = {0}; mp_get_buffer_raise(args[0], &path, MP_BUFFER_READ); @@ -432,14 +431,14 @@ STATIC mp_obj_t mod_trezorio_fatfs_mkdir(size_t n_args, const mp_obj_t *args) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_fatfs_mkdir_obj, 1, 2, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_fatfs_mkdir_obj, 1, 2, mod_trezorio_fatfs_mkdir); /// def unlink(path: str) -> None: /// """ /// Delete an existing file or directory /// """ -STATIC mp_obj_t mod_trezorio_fatfs_unlink(mp_obj_t path) { +static mp_obj_t mod_trezorio_fatfs_unlink(mp_obj_t path) { FATFS_ONLY_MOUNTED; mp_buffer_info_t _path = {0}; mp_get_buffer_raise(path, &_path, MP_BUFFER_READ); @@ -449,14 +448,14 @@ STATIC mp_obj_t mod_trezorio_fatfs_unlink(mp_obj_t path) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_fatfs_unlink_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_fatfs_unlink_obj, mod_trezorio_fatfs_unlink); /// def stat(path: str) -> tuple[int, str, str]: /// """ /// Get file status /// """ -STATIC mp_obj_t mod_trezorio_fatfs_stat(mp_obj_t path) { +static mp_obj_t mod_trezorio_fatfs_stat(mp_obj_t path) { FATFS_ONLY_MOUNTED; mp_buffer_info_t _path = {0}; mp_get_buffer_raise(path, &_path, MP_BUFFER_READ); @@ -467,14 +466,14 @@ STATIC mp_obj_t mod_trezorio_fatfs_stat(mp_obj_t path) { } return filinfo_to_tuple(&info); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_fatfs_stat_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_fatfs_stat_obj, mod_trezorio_fatfs_stat); /// def rename(oldpath: str, newpath: str) -> None: /// """ /// Rename/Move a file or directory /// """ -STATIC mp_obj_t mod_trezorio_fatfs_rename(mp_obj_t oldpath, mp_obj_t newpath) { +static mp_obj_t mod_trezorio_fatfs_rename(mp_obj_t oldpath, mp_obj_t newpath) { FATFS_ONLY_MOUNTED; mp_buffer_info_t _oldpath = {0}, _newpath = {0}; mp_get_buffer_raise(oldpath, &_oldpath, MP_BUFFER_READ); @@ -485,14 +484,14 @@ STATIC mp_obj_t mod_trezorio_fatfs_rename(mp_obj_t oldpath, mp_obj_t newpath) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_fatfs_rename_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_fatfs_rename_obj, mod_trezorio_fatfs_rename); /// def mount() -> None: /// """ /// Mount the SD card filesystem. /// """ -STATIC mp_obj_t mod_trezorio_fatfs_mount() { +static mp_obj_t mod_trezorio_fatfs_mount() { FRESULT res = f_mount(&fs_instance, "", 1); if (res != FR_OK) { if (res == FR_NO_FILESYSTEM) { @@ -503,33 +502,33 @@ STATIC mp_obj_t mod_trezorio_fatfs_mount() { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_fatfs_mount_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_fatfs_mount_obj, mod_trezorio_fatfs_mount); /// def unmount() -> None: /// """ /// Unmount the SD card filesystem. /// """ -STATIC mp_obj_t mod_trezorio_fatfs_unmount() { +static mp_obj_t mod_trezorio_fatfs_unmount() { _fatfs_unmount_instance(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_fatfs_unmount_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_fatfs_unmount_obj, mod_trezorio_fatfs_unmount); /// def is_mounted() -> bool: /// """ /// Check if the filesystem is mounted. /// """ -STATIC mp_obj_t mod_trezorio_fatfs_is_mounted() { +static mp_obj_t mod_trezorio_fatfs_is_mounted() { return mp_obj_new_bool(_fatfs_instance_is_mounted()); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_fatfs_is_mounted_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_fatfs_is_mounted_obj, mod_trezorio_fatfs_is_mounted); -STATIC mp_obj_t ui_wait_callback = mp_const_none; +static mp_obj_t ui_wait_callback = mp_const_none; -STATIC void wrapped_ui_wait_callback(uint32_t current) { +static void wrapped_ui_wait_callback(uint32_t current) { if (mp_obj_is_callable(ui_wait_callback)) { mp_call_function_1_protected(ui_wait_callback, mp_obj_new_int(current)); } @@ -539,7 +538,7 @@ STATIC void wrapped_ui_wait_callback(uint32_t current) { /// """ /// Create a FAT volume on the SD card, /// """ -STATIC mp_obj_t mod_trezorio_fatfs_mkfs(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorio_fatfs_mkfs(size_t n_args, const mp_obj_t *args) { if (_fatfs_instance_is_mounted()) { FATFS_RAISE(FatFSError, FR_LOCKED); } @@ -562,14 +561,14 @@ STATIC mp_obj_t mod_trezorio_fatfs_mkfs(size_t n_args, const mp_obj_t *args) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_fatfs_mkfs_obj, 0, 1, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_fatfs_mkfs_obj, 0, 1, mod_trezorio_fatfs_mkfs); /// def setlabel(label: str) -> None: /// """ /// Set volume label /// """ -STATIC mp_obj_t mod_trezorio_fatfs_setlabel(mp_obj_t label) { +static mp_obj_t mod_trezorio_fatfs_setlabel(mp_obj_t label) { /* setlabel is marked as only-mounted, because "mounting" in ff.c terms means having parsed the FAT table, which is of course a prerequisite for setting label. */ @@ -582,10 +581,10 @@ STATIC mp_obj_t mod_trezorio_fatfs_setlabel(mp_obj_t label) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_fatfs_setlabel_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_fatfs_setlabel_obj, mod_trezorio_fatfs_setlabel); -STATIC const mp_rom_map_elem_t mod_trezorio_fatfs_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorio_fatfs_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_fatfs)}, {MP_ROM_QSTR(MP_QSTR_FatFSFile), MP_ROM_PTR(&mod_trezorio_FatFSFile_type)}, {MP_ROM_QSTR(MP_QSTR_FatFSDir), MP_ROM_PTR(&mod_trezorio_FatFSDir_type)}, @@ -633,10 +632,10 @@ STATIC const mp_rom_map_elem_t mod_trezorio_fatfs_globals_table[] = { FATFS_ROM_INT(FR_INVALID_PARAMETER)}, {MP_ROM_QSTR(MP_QSTR_FR_NO_SPACE), FATFS_ROM_INT(FR_NO_SPACE)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_fatfs_globals, +static MP_DEFINE_CONST_DICT(mod_trezorio_fatfs_globals, mod_trezorio_fatfs_globals_table); -STATIC const mp_obj_module_t mod_trezorio_fatfs_module = { +static const mp_obj_module_t mod_trezorio_fatfs_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorio_fatfs_globals, }; diff --git a/core/embed/upymod/modtrezorio/modtrezorio-haptic.h b/core/embed/upymod/modtrezorio/modtrezorio-haptic.h index 3e332f4eca6..e2f3311734e 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-haptic.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-haptic.h @@ -25,23 +25,23 @@ /// """ /// Enable/Disable the haptic feedback. /// """ -STATIC mp_obj_t mod_trezorio_haptic_set_enabled(mp_obj_t enable) { +static mp_obj_t mod_trezorio_haptic_set_enabled(mp_obj_t enable) { haptic_set_enabled(mp_obj_is_true(enable)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_haptic_set_enabled_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_haptic_set_enabled_obj, mod_trezorio_haptic_set_enabled); -STATIC const mp_rom_map_elem_t mod_trezorio_haptic_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorio_haptic_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_haptic)}, {MP_ROM_QSTR(MP_QSTR_haptic_set_enabled), MP_ROM_PTR(&mod_trezorio_haptic_set_enabled_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_haptic_globals, +static MP_DEFINE_CONST_DICT(mod_trezorio_haptic_globals, mod_trezorio_haptic_globals_table); -STATIC const mp_obj_module_t mod_trezorio_haptic_module = { +static const mp_obj_module_t mod_trezorio_haptic_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorio_haptic_globals, }; diff --git a/core/embed/upymod/modtrezorio/modtrezorio-ipc.h b/core/embed/upymod/modtrezorio/modtrezorio-ipc.h index 9a44ec6a14a..ace68a538a5 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-ipc.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-ipc.h @@ -27,7 +27,7 @@ /// """ /// Sends an IPC message to the specified remote task. /// """ -STATIC mp_obj_t mod_trezorio_ipc_send(mp_obj_t remote_obj, mp_obj_t fn_obj, +static mp_obj_t mod_trezorio_ipc_send(mp_obj_t remote_obj, mp_obj_t fn_obj, mp_obj_t data_obj) { mp_buffer_info_t bufinfo = {0}; mp_get_buffer_raise(data_obj, &bufinfo, MP_BUFFER_READ); @@ -41,7 +41,7 @@ STATIC mp_obj_t mod_trezorio_ipc_send(mp_obj_t remote_obj, mp_obj_t fn_obj, } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorio_ipc_send_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorio_ipc_send_obj, mod_trezorio_ipc_send); /// class IpcMessage: @@ -57,29 +57,29 @@ typedef struct _mp_obj_IpcMessage_t { /// """ /// Returns the function number. /// """ -STATIC mp_obj_t mod_trezorio_IpcMessage_fn(mp_obj_t self) { +static mp_obj_t mod_trezorio_IpcMessage_fn(mp_obj_t self) { mp_obj_IpcMessage_t *o = MP_OBJ_TO_PTR(self); return mp_obj_new_int_from_uint(o->message.fn); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_IpcMessage_fn_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_IpcMessage_fn_obj, mod_trezorio_IpcMessage_fn); /// def remote(self) -> int: /// """ /// Returns the remote task ID. /// """ -STATIC mp_obj_t mod_trezorio_IpcMessage_remote(mp_obj_t self) { +static mp_obj_t mod_trezorio_IpcMessage_remote(mp_obj_t self) { mp_obj_IpcMessage_t *o = MP_OBJ_TO_PTR(self); return MP_OBJ_NEW_SMALL_INT(o->message.remote); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_IpcMessage_remote_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_IpcMessage_remote_obj, mod_trezorio_IpcMessage_remote); /// def free(self) -> None: /// """ /// Frees the IPC message resources. /// """ -STATIC mp_obj_t mod_trezorio_IpcMessage_free(mp_obj_t self) { +static mp_obj_t mod_trezorio_IpcMessage_free(mp_obj_t self) { mp_obj_IpcMessage_t *o = MP_OBJ_TO_PTR(self); ipc_message_free(&o->message); @@ -87,33 +87,33 @@ STATIC mp_obj_t mod_trezorio_IpcMessage_free(mp_obj_t self) { return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_IpcMessage_free_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_IpcMessage_free_obj, mod_trezorio_IpcMessage_free); /// def data(self) -> bytes: /// """ /// Returns the IPC message data as bytes. /// """ -STATIC mp_obj_t mod_trezorio_IpcMessage_data(mp_obj_t self) { +static mp_obj_t mod_trezorio_IpcMessage_data(mp_obj_t self) { mp_obj_IpcMessage_t *o = MP_OBJ_TO_PTR(self); return mp_obj_new_bytes(o->message.data, o->message.size); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_IpcMessage_data_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_IpcMessage_data_obj, mod_trezorio_IpcMessage_data); -STATIC const mp_rom_map_elem_t mod_trezorio_IpcMessage_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorio_IpcMessage_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_remote), MP_ROM_PTR(&mod_trezorio_IpcMessage_remote_obj)}, {MP_ROM_QSTR(MP_QSTR_fn), MP_ROM_PTR(&mod_trezorio_IpcMessage_fn_obj)}, {MP_ROM_QSTR(MP_QSTR_data), MP_ROM_PTR(&mod_trezorio_IpcMessage_data_obj)}, {MP_ROM_QSTR(MP_QSTR_free), MP_ROM_PTR(&mod_trezorio_IpcMessage_free_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_IpcMessage_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorio_IpcMessage_locals_dict, mod_trezorio_IpcMessage_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorio_IpcMessage_type = { - {&mp_type_type}, - .name = MP_QSTR_IpcMessage, - .locals_dict = (void *)&mod_trezorio_IpcMessage_locals_dict, -}; +// clang-format off +static MP_DEFINE_CONST_OBJ_TYPE(mod_trezorio_IpcMessage_type, + MP_QSTR_IpcMessage, MP_TYPE_FLAG_NONE, + locals_dict, &mod_trezorio_IpcMessage_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorio/modtrezorio-pm.h b/core/embed/upymod/modtrezorio/modtrezorio-pm.h index 89f8d19aea2..623f7f69ccf 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-pm.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-pm.h @@ -46,7 +46,7 @@ /// Returns the state of charge (SoC) in percent (0-100). Raises /// RuntimeError on failure. /// """ -STATIC mp_obj_t mod_trezorio_pm_soc() { +static mp_obj_t mod_trezorio_pm_soc() { pm_state_t state = {0}; pm_status_t res = pm_get_state(&state); if (res != PM_OK) { @@ -55,7 +55,7 @@ STATIC mp_obj_t mod_trezorio_pm_soc() { } return mp_obj_new_int(state.soc); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_soc_obj, mod_trezorio_pm_soc); +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_soc_obj, mod_trezorio_pm_soc); /// def suspend() -> int: /// """ @@ -63,7 +63,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_soc_obj, mod_trezorio_pm_soc); /// failure. /// Wakeup flags: BUTTON=1, POWER=2, BLE=4, NFC=8, RTC=16, USB=32, TOUCH=64 /// """ -STATIC mp_obj_t mod_trezorio_pm_suspend() { +static mp_obj_t mod_trezorio_pm_suspend() { wakeup_flags_t wakeup_flags = 0; pm_status_t res = pm_suspend(&wakeup_flags); if (res != PM_OK) { @@ -71,21 +71,21 @@ STATIC mp_obj_t mod_trezorio_pm_suspend() { } return mp_obj_new_int_from_uint(wakeup_flags); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_suspend_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_suspend_obj, mod_trezorio_pm_suspend); /// def hibernate() -> None: /// """ /// Hibernates the device. Raises RuntimeError on failure. /// """ -STATIC mp_obj_t mod_trezorio_pm_hibernate() { +static mp_obj_t mod_trezorio_pm_hibernate() { pm_status_t res = pm_hibernate(); if (res != PM_OK) { mp_raise_msg(&mp_type_RuntimeError, MP_ERROR_TEXT("Failed to hibernate")); } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_hibernate_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_hibernate_obj, mod_trezorio_pm_hibernate); /// def is_usb_connected() -> bool: @@ -93,7 +93,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_hibernate_obj, /// Returns True if USB is connected, False otherwise. Raises RuntimeError /// on failure. /// """ -STATIC mp_obj_t mod_trezorio_pm_is_usb_connected() { +static mp_obj_t mod_trezorio_pm_is_usb_connected() { pm_state_t state; pm_status_t res = pm_get_state(&state); if (res != PM_OK) { @@ -102,7 +102,7 @@ STATIC mp_obj_t mod_trezorio_pm_is_usb_connected() { } return mp_obj_new_bool(state.usb_connected); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_is_usb_connected_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_is_usb_connected_obj, mod_trezorio_pm_is_usb_connected); /// def is_wireless_connected() -> bool: @@ -110,7 +110,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_is_usb_connected_obj, /// Returns True if Wireless power source is connected, False otherwise. /// Raises RuntimeError on failure. /// """ -STATIC mp_obj_t mod_trezorio_pm_is_wireless_connected() { +static mp_obj_t mod_trezorio_pm_is_wireless_connected() { pm_state_t state; pm_status_t res = pm_get_state(&state); if (res != PM_OK) { @@ -119,7 +119,7 @@ STATIC mp_obj_t mod_trezorio_pm_is_wireless_connected() { } return mp_obj_new_bool(state.wireless_connected); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_is_wireless_connected_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_is_wireless_connected_obj, mod_trezorio_pm_is_wireless_connected); #ifdef TREZOR_EMULATOR @@ -138,7 +138,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_is_wireless_connected_obj, /// Only available on emulator. Pass None to leave a field unchanged. /// Charging status and power status are derived from connection states. /// """ -STATIC mp_obj_t mod_trezorio_pm_set_emu_battery_state(size_t n_args, +static mp_obj_t mod_trezorio_pm_set_emu_battery_state(size_t n_args, const mp_obj_t* pos_args, mp_map_t* kw_args) { static const mp_arg_t allowed_args[] = { @@ -177,12 +177,12 @@ STATIC mp_obj_t mod_trezorio_pm_set_emu_battery_state(size_t n_args, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_trezorio_pm_set_emu_battery_state_obj, 0, +static MP_DEFINE_CONST_FUN_OBJ_KW(mod_trezorio_pm_set_emu_battery_state_obj, 0, mod_trezorio_pm_set_emu_battery_state); #endif #endif -STATIC const mp_rom_map_elem_t mod_trezorio_pm_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorio_pm_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_pm)}, {MP_ROM_QSTR(MP_QSTR_soc), MP_ROM_PTR(&mod_trezorio_pm_soc_obj)}, {MP_ROM_QSTR(MP_QSTR_suspend), MP_ROM_PTR(&mod_trezorio_pm_suspend_obj)}, @@ -222,10 +222,10 @@ STATIC const mp_rom_map_elem_t mod_trezorio_pm_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_EVENT_BATTERY_TEMP_JUMP_UPDATED), MP_ROM_INT(1 << 9)}, {MP_ROM_QSTR(MP_QSTR_EVENT_SOC_UPDATED), MP_ROM_INT(1 << 10)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_pm_globals, +static MP_DEFINE_CONST_DICT(mod_trezorio_pm_globals, mod_trezorio_pm_globals_table); -STATIC const mp_obj_module_t mod_trezorio_pm_module = { +static const mp_obj_module_t mod_trezorio_pm_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t*)&mod_trezorio_pm_globals, }; diff --git a/core/embed/upymod/modtrezorio/modtrezorio-poll.h b/core/embed/upymod/modtrezorio/modtrezorio-poll.h index f5f0e41b5ac..a649e9f672a 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-poll.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-poll.h @@ -87,7 +87,7 @@ static mp_obj_t parse_ble_event_data(const ble_event_t *event) { /// /// If timeout occurs, False is returned, True otherwise. /// """ -STATIC mp_obj_t mod_trezorio_poll(mp_obj_t ifaces, mp_obj_t list_ref, +static mp_obj_t mod_trezorio_poll(mp_obj_t ifaces, mp_obj_t list_ref, mp_obj_t timeout_ms) { mp_obj_list_t *ret = MP_OBJ_TO_PTR(list_ref); if (!MP_OBJ_IS_TYPE(list_ref, &mp_type_list) || ret->len < 2) { @@ -268,4 +268,4 @@ STATIC mp_obj_t mod_trezorio_poll(mp_obj_t ifaces, mp_obj_t list_ref, } } } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorio_poll_obj, mod_trezorio_poll); +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorio_poll_obj, mod_trezorio_poll); diff --git a/core/embed/upymod/modtrezorio/modtrezorio-rgb_led.h b/core/embed/upymod/modtrezorio/modtrezorio-rgb_led.h index 1489dbe7785..b0c44d0d289 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-rgb_led.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-rgb_led.h @@ -25,23 +25,23 @@ /// """ /// Enable/Disable the RGB LED. /// """ -STATIC mp_obj_t mod_trezorio_rgb_led_set_enabled(mp_obj_t enable) { +static mp_obj_t mod_trezorio_rgb_led_set_enabled(mp_obj_t enable) { rgb_led_set_enabled(mp_obj_is_true(enable)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_rgb_led_set_enabled_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_rgb_led_set_enabled_obj, mod_trezorio_rgb_led_set_enabled); -STATIC const mp_rom_map_elem_t mod_trezorio_rgb_led_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorio_rgb_led_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_rgb_led)}, {MP_ROM_QSTR(MP_QSTR_rgb_led_set_enabled), MP_ROM_PTR(&mod_trezorio_rgb_led_set_enabled_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_rgb_led_globals, +static MP_DEFINE_CONST_DICT(mod_trezorio_rgb_led_globals, mod_trezorio_rgb_led_globals_table); -STATIC const mp_obj_module_t mod_trezorio_rgb_led_module = { +static const mp_obj_module_t mod_trezorio_rgb_led_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorio_rgb_led_globals, }; diff --git a/core/embed/upymod/modtrezorio/modtrezorio-sdcard.h b/core/embed/upymod/modtrezorio/modtrezorio-sdcard.h index 3f10ff125ee..fba0fc3619d 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-sdcard.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-sdcard.h @@ -29,10 +29,10 @@ /// """ /// Returns True if SD card is detected, False otherwise. /// """ -STATIC mp_obj_t mod_trezorio_sdcard_is_present() { +static mp_obj_t mod_trezorio_sdcard_is_present() { return mp_obj_new_bool(sdcard_is_present()); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_is_present_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_is_present_obj, mod_trezorio_sdcard_is_present); /// def power_on() -> None: @@ -41,36 +41,36 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_is_present_obj, /// Raises OSError if the SD card cannot be powered on, e.g., when there /// is no SD card inserted. /// """ -STATIC mp_obj_t mod_trezorio_sdcard_power_on() { +static mp_obj_t mod_trezorio_sdcard_power_on() { if (sectrue != sdcard_power_on()) { mp_raise_OSError(MP_EIO); } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_power_on_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_power_on_obj, mod_trezorio_sdcard_power_on); /// def power_off() -> None: /// """ /// Power off the SD card interface. /// """ -STATIC mp_obj_t mod_trezorio_sdcard_power_off() { +static mp_obj_t mod_trezorio_sdcard_power_off() { /* XXX should this call happen inside sdcard_power_off()? */ _fatfs_unmount_instance(); sdcard_power_off(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_power_off_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_power_off_obj, mod_trezorio_sdcard_power_off); /// def capacity() -> int: /// """ /// Returns capacity of the SD card in bytes, or zero if not present. /// """ -STATIC mp_obj_t mod_trezorio_sdcard_capacity() { +static mp_obj_t mod_trezorio_sdcard_capacity() { return mp_obj_new_int_from_ull(sdcard_get_capacity_in_bytes()); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_capacity_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_capacity_obj, mod_trezorio_sdcard_capacity); /// def read(block_num: int, buf: bytearray) -> None: @@ -79,7 +79,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_capacity_obj, /// Number of bytes read is length of buf rounded down to multiply of /// SDCARD_BLOCK_SIZE. Returns True if in case of success, False otherwise. /// """ -STATIC mp_obj_t mod_trezorio_sdcard_read(mp_obj_t block_num, mp_obj_t buf) { +static mp_obj_t mod_trezorio_sdcard_read(mp_obj_t block_num, mp_obj_t buf) { uint32_t block = trezor_obj_get_uint(block_num); mp_buffer_info_t bufinfo = {0}; mp_get_buffer_raise(buf, &bufinfo, MP_BUFFER_WRITE); @@ -89,7 +89,7 @@ STATIC mp_obj_t mod_trezorio_sdcard_read(mp_obj_t block_num, mp_obj_t buf) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_sdcard_read_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_sdcard_read_obj, mod_trezorio_sdcard_read); /// def write(block_num: int, buf: AnyBytes) -> None: @@ -98,7 +98,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_sdcard_read_obj, /// Number of bytes written is length of buf rounded down to multiply of /// SDCARD_BLOCK_SIZE. Returns True if in case of success, False otherwise. /// """ -STATIC mp_obj_t mod_trezorio_sdcard_write(mp_obj_t block_num, mp_obj_t buf) { +static mp_obj_t mod_trezorio_sdcard_write(mp_obj_t block_num, mp_obj_t buf) { uint32_t block = trezor_obj_get_uint(block_num); mp_buffer_info_t bufinfo = {0}; mp_get_buffer_raise(buf, &bufinfo, MP_BUFFER_READ); @@ -108,10 +108,10 @@ STATIC mp_obj_t mod_trezorio_sdcard_write(mp_obj_t block_num, mp_obj_t buf) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_sdcard_write_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_sdcard_write_obj, mod_trezorio_sdcard_write); -STATIC const mp_rom_map_elem_t mod_trezorio_sdcard_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorio_sdcard_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sdcard)}, {MP_ROM_QSTR(MP_QSTR_is_present), @@ -126,10 +126,10 @@ STATIC const mp_rom_map_elem_t mod_trezorio_sdcard_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&mod_trezorio_sdcard_read_obj)}, {MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mod_trezorio_sdcard_write_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_sdcard_globals, +static MP_DEFINE_CONST_DICT(mod_trezorio_sdcard_globals, mod_trezorio_sdcard_globals_table); -STATIC const mp_obj_module_t mod_trezorio_sdcard_module = { +static const mp_obj_module_t mod_trezorio_sdcard_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorio_sdcard_globals, }; diff --git a/core/embed/upymod/modtrezorio/modtrezorio-touch.h b/core/embed/upymod/modtrezorio/modtrezorio-touch.h index 7c45012acec..e2d52faa099 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-touch.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-touch.h @@ -27,26 +27,26 @@ /// """ /// Enable/disable touch wakeup during suspend. /// """ -STATIC mp_obj_t mod_trezorio_touch_wakeup_set_enabled(mp_obj_t enable) { +static mp_obj_t mod_trezorio_touch_wakeup_set_enabled(mp_obj_t enable) { touch_wakeup_set_enabled(mp_obj_is_true(enable)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_touch_wakeup_set_enabled_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_touch_wakeup_set_enabled_obj, mod_trezorio_touch_wakeup_set_enabled); /// def touch_wakeup_get_enabled() -> bool: /// """ /// Return whether touch wakeup during suspend is enabled. /// """ -STATIC mp_obj_t mod_trezorio_touch_wakeup_get_enabled(void) { +static mp_obj_t mod_trezorio_touch_wakeup_get_enabled(void) { return mp_obj_new_bool(touch_wakeup_get_enabled()); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_touch_wakeup_get_enabled_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_touch_wakeup_get_enabled_obj, mod_trezorio_touch_wakeup_get_enabled); #endif // USE_TOUCH_WAKEUP -STATIC const mp_rom_map_elem_t mod_trezorio_touch_globals_table[] = { +static const mp_rom_map_elem_t mod_trezorio_touch_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_touch)}, #ifdef USE_TOUCH_WAKEUP {MP_ROM_QSTR(MP_QSTR_touch_wakeup_set_enabled), @@ -55,10 +55,10 @@ STATIC const mp_rom_map_elem_t mod_trezorio_touch_globals_table[] = { MP_ROM_PTR(&mod_trezorio_touch_wakeup_get_enabled_obj)}, #endif // USE_TOUCH_WAKEUP }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_touch_globals, +static MP_DEFINE_CONST_DICT(mod_trezorio_touch_globals, mod_trezorio_touch_globals_table); -STATIC const mp_obj_module_t mod_trezorio_touch_module = { +static const mp_obj_module_t mod_trezorio_touch_module = { .base = {&mp_type_module}, .globals = (mp_obj_dict_t *)&mod_trezorio_touch_globals, }; diff --git a/core/embed/upymod/modtrezorio/modtrezorio-usb-if.h b/core/embed/upymod/modtrezorio/modtrezorio-usb-if.h index f4ed0631f8b..19b56f5259c 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-usb-if.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-usb-if.h @@ -36,10 +36,10 @@ typedef struct _mp_obj_USBIF_t { /// ) -> None: /// """ /// """ -STATIC mp_obj_t mod_trezorio_USBIF_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorio_USBIF_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - STATIC const mp_arg_t allowed_args[] = { + static const mp_arg_t allowed_args[] = { {MP_QSTR_handle, MP_ARG_REQUIRED | MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0}}, @@ -63,18 +63,18 @@ STATIC mp_obj_t mod_trezorio_USBIF_make_new(const mp_obj_type_t *type, /// """ /// Returns the configured number of this interface. /// """ -STATIC mp_obj_t mod_trezorio_USBIF_iface_num(mp_obj_t self) { +static mp_obj_t mod_trezorio_USBIF_iface_num(mp_obj_t self) { mp_obj_USBIF_t *o = MP_OBJ_TO_PTR(self); return MP_OBJ_NEW_SMALL_INT(o->handle); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_USBIF_iface_num_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_USBIF_iface_num_obj, mod_trezorio_USBIF_iface_num); /// def write(self, msg: AnyBytes) -> int: /// """ /// Sends message using USB interface. /// """ -STATIC mp_obj_t mod_trezorio_USBIF_write(mp_obj_t self, mp_obj_t msg) { +static mp_obj_t mod_trezorio_USBIF_write(mp_obj_t self, mp_obj_t msg) { mp_obj_USBIF_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t buf = {0}; mp_get_buffer_raise(msg, &buf, MP_BUFFER_READ); @@ -91,14 +91,14 @@ STATIC mp_obj_t mod_trezorio_USBIF_write(mp_obj_t self, mp_obj_t msg) { return MP_OBJ_NEW_SMALL_INT(r); } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_USBIF_write_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_USBIF_write_obj, mod_trezorio_USBIF_write); /// def write_blocking(self, msg: AnyBytes, timeout_ms: int) -> int: /// """ /// Sends message using USB interface. /// """ -STATIC mp_obj_t mod_trezorio_USBIF_write_blocking(mp_obj_t self, mp_obj_t msg, +static mp_obj_t mod_trezorio_USBIF_write_blocking(mp_obj_t self, mp_obj_t msg, mp_obj_t timeout_ms) { mp_obj_USBIF_t *o = MP_OBJ_TO_PTR(self); mp_buffer_info_t buf = {0}; @@ -114,14 +114,14 @@ STATIC mp_obj_t mod_trezorio_USBIF_write_blocking(mp_obj_t self, mp_obj_t msg, return MP_OBJ_NEW_SMALL_INT(r); } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorio_USBIF_write_blocking_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorio_USBIF_write_blocking_obj, mod_trezorio_USBIF_write_blocking); /// def read(self, buf: bytearray, offset: int = 0) -> int: /// """ /// Reads message using USB interface /// """ -STATIC mp_obj_t mod_trezorio_USBIF_read(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorio_USBIF_read(size_t n_args, const mp_obj_t *args) { mp_obj_USBIF_t *o = MP_OBJ_TO_PTR(args[0]); mp_buffer_info_t buf = {0}; mp_get_buffer_raise(args[1], &buf, MP_BUFFER_WRITE); @@ -155,7 +155,7 @@ STATIC mp_obj_t mod_trezorio_USBIF_read(size_t n_args, const mp_obj_t *args) { return MP_OBJ_NEW_SMALL_INT(r); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_USBIF_read_obj, 2, 3, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_USBIF_read_obj, 2, 3, mod_trezorio_USBIF_read); /// RX_PACKET_LEN: ClassVar[int] @@ -164,7 +164,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_USBIF_read_obj, 2, 3, /// TX_PACKET_LEN: ClassVar[int] /// """Length of one USB TX packet.""" -STATIC const mp_rom_map_elem_t mod_trezorio_USBIF_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorio_USBIF_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_iface_num), MP_ROM_PTR(&mod_trezorio_USBIF_iface_num_obj)}, {MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mod_trezorio_USBIF_write_obj)}, @@ -174,12 +174,12 @@ STATIC const mp_rom_map_elem_t mod_trezorio_USBIF_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_RX_PACKET_LEN), MP_ROM_INT(USB_PACKET_LEN)}, {MP_ROM_QSTR(MP_QSTR_TX_PACKET_LEN), MP_ROM_INT(USB_PACKET_LEN)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_USBIF_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorio_USBIF_locals_dict, mod_trezorio_USBIF_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorio_USBIF_type = { - {&mp_type_type}, - .name = MP_QSTR_USBIF, - .make_new = mod_trezorio_USBIF_make_new, - .locals_dict = (void *)&mod_trezorio_USBIF_locals_dict, -}; +// clang-format off +MP_DEFINE_CONST_OBJ_TYPE(mod_trezorio_USBIF_type, + MP_QSTR_USBIF, MP_TYPE_FLAG_NONE, + make_new, mod_trezorio_USBIF_make_new, + locals_dict, &mod_trezorio_USBIF_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorio/modtrezorio-usb.h b/core/embed/upymod/modtrezorio/modtrezorio-usb.h index 77c6b564a32..ecd11a7603d 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio-usb.h +++ b/core/embed/upymod/modtrezorio/modtrezorio-usb.h @@ -46,11 +46,10 @@ static const char *get_0str(mp_obj_t o, size_t min_len, size_t max_len) { /// ) -> None: /// """ /// """ -STATIC mp_obj_t mod_trezorio_USB_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorio_USB_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - mp_obj_USB_t *o = m_new_obj_with_finaliser(mp_obj_USB_t); - o->base.type = type; + mp_obj_USB_t *o = mp_obj_malloc_with_finaliser(mp_obj_USB_t, type); return MP_OBJ_FROM_PTR(o); } @@ -59,7 +58,7 @@ STATIC mp_obj_t mod_trezorio_USB_make_new(const mp_obj_type_t *type, /// """ /// Initializes the USB stack. /// """ -STATIC mp_obj_t mod_trezorio_USB_open(mp_obj_t self, +static mp_obj_t mod_trezorio_USB_open(mp_obj_t self, mp_obj_t serial_number_obj) { const char *serial_number = get_0str(serial_number_obj, 0, USB_MAX_STR_SIZE); if (serial_number == NULL) { @@ -81,38 +80,38 @@ STATIC mp_obj_t mod_trezorio_USB_open(mp_obj_t self, return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_USB_open_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_USB_open_obj, mod_trezorio_USB_open); /// def close(self) -> None: /// """ /// Cleans up the USB stack. /// """ -STATIC mp_obj_t mod_trezorio_USB_close(mp_obj_t self) { +static mp_obj_t mod_trezorio_USB_close(mp_obj_t self) { usb_stop(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_USB_close_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_USB_close_obj, mod_trezorio_USB_close); -STATIC mp_obj_t mod_trezorio_USB___del__(mp_obj_t self) { +static mp_obj_t mod_trezorio_USB___del__(mp_obj_t self) { usb_stop(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_USB___del___obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_USB___del___obj, mod_trezorio_USB___del__); -STATIC const mp_rom_map_elem_t mod_trezorio_USB_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorio_USB_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mod_trezorio_USB_open_obj)}, {MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&mod_trezorio_USB_close_obj)}, {MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mod_trezorio_USB___del___obj)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_USB_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorio_USB_locals_dict, mod_trezorio_USB_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorio_USB_type = { - {&mp_type_type}, - .name = MP_QSTR_USB, - .make_new = mod_trezorio_USB_make_new, - .locals_dict = (void *)&mod_trezorio_USB_locals_dict, -}; +// clang-format off +MP_DEFINE_CONST_OBJ_TYPE(mod_trezorio_USB_type, + MP_QSTR_USB, MP_TYPE_FLAG_NONE, + make_new, mod_trezorio_USB_make_new, + locals_dict, &mod_trezorio_USB_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorio/modtrezorio.c b/core/embed/upymod/modtrezorio/modtrezorio.c index 8136d388c75..75db57a8114 100644 --- a/core/embed/upymod/modtrezorio/modtrezorio.c +++ b/core/embed/upymod/modtrezorio/modtrezorio.c @@ -103,7 +103,7 @@ uint32_t last_touch_sample_time = 0; /// USBIF_DEBUG: int # interface id of the USB debug interface /// USBIF_WEBAUTHN: int # interface id of the USB WebAuthn -STATIC const mp_rom_map_elem_t mp_module_trezorio_globals_table[] = { +static const mp_rom_map_elem_t mp_module_trezorio_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_trezorio)}, #ifdef USE_SD_CARD @@ -157,7 +157,7 @@ STATIC const mp_rom_map_elem_t mp_module_trezorio_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_USB_EVENT), MP_ROM_INT(SYSHANDLE_USB)}, }; -STATIC MP_DEFINE_CONST_DICT(mp_module_trezorio_globals, +static MP_DEFINE_CONST_DICT(mp_module_trezorio_globals, mp_module_trezorio_globals_table); const mp_obj_module_t mp_module_trezorio = { diff --git a/core/embed/upymod/modtrezorui/modtrezorui-display.h b/core/embed/upymod/modtrezorui/modtrezorui-display.h index 3b5b437cf21..f1bb36833c2 100644 --- a/core/embed/upymod/modtrezorui/modtrezorui-display.h +++ b/core/embed/upymod/modtrezorui/modtrezorui-display.h @@ -37,7 +37,7 @@ typedef struct _mp_obj_Display_t { /// """ /// Initialize the display. /// """ -STATIC mp_obj_t mod_trezorui_Display_make_new(const mp_obj_type_t *type, +static mp_obj_t mod_trezorui_Display_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 0, false); @@ -52,7 +52,7 @@ STATIC mp_obj_t mod_trezorui_Display_make_new(const mp_obj_type_t *type, /// Call without the degrees parameter to just perform the read of the /// value. /// """ -STATIC mp_obj_t mod_trezorui_Display_orientation(size_t n_args, +static mp_obj_t mod_trezorui_Display_orientation(size_t n_args, const mp_obj_t *args) { mp_int_t deg; if (n_args > 1) { @@ -66,7 +66,7 @@ STATIC mp_obj_t mod_trezorui_Display_orientation(size_t n_args, } return MP_OBJ_NEW_SMALL_INT(deg); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorui_Display_orientation_obj, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorui_Display_orientation_obj, 1, 2, mod_trezorui_Display_orientation); /// def record_start( @@ -76,7 +76,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorui_Display_orientation_obj, /// Starts screen recording with specified target directory and refresh /// index. /// """ -STATIC mp_obj_t mod_trezorui_Display_record_start(mp_obj_t self, +static mp_obj_t mod_trezorui_Display_record_start(mp_obj_t self, mp_obj_t target_directory, mp_obj_t refresh_index) { #ifdef TREZOR_EMULATOR @@ -87,23 +87,23 @@ STATIC mp_obj_t mod_trezorui_Display_record_start(mp_obj_t self, #endif return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorui_Display_record_start_obj, +static MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorui_Display_record_start_obj, mod_trezorui_Display_record_start); /// def record_stop(self) -> None: /// """ /// Stops screen recording. /// """ -STATIC mp_obj_t mod_trezorui_Display_record_stop(mp_obj_t self) { +static mp_obj_t mod_trezorui_Display_record_stop(mp_obj_t self) { #ifdef TREZOR_EMULATOR display_record_stop(); #endif return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorui_Display_record_stop_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorui_Display_record_stop_obj, mod_trezorui_Display_record_stop); -STATIC const mp_rom_map_elem_t mod_trezorui_Display_locals_dict_table[] = { +static const mp_rom_map_elem_t mod_trezorui_Display_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_orientation), MP_ROM_PTR(&mod_trezorui_Display_orientation_obj)}, {MP_ROM_QSTR(MP_QSTR_record_start), @@ -113,12 +113,12 @@ STATIC const mp_rom_map_elem_t mod_trezorui_Display_locals_dict_table[] = { {MP_ROM_QSTR(MP_QSTR_WIDTH), MP_ROM_INT(DISPLAY_RESX)}, {MP_ROM_QSTR(MP_QSTR_HEIGHT), MP_ROM_INT(DISPLAY_RESY)}, }; -STATIC MP_DEFINE_CONST_DICT(mod_trezorui_Display_locals_dict, +static MP_DEFINE_CONST_DICT(mod_trezorui_Display_locals_dict, mod_trezorui_Display_locals_dict_table); -STATIC const mp_obj_type_t mod_trezorui_Display_type = { - {&mp_type_type}, - .name = MP_QSTR_Display, - .make_new = mod_trezorui_Display_make_new, - .locals_dict = (void *)&mod_trezorui_Display_locals_dict, -}; +// clang-format off +MP_DEFINE_CONST_OBJ_TYPE(mod_trezorui_Display_type, + MP_QSTR_Display, MP_TYPE_FLAG_NONE, + make_new, mod_trezorui_Display_make_new, + locals_dict, &mod_trezorui_Display_locals_dict); +// clang-format on diff --git a/core/embed/upymod/modtrezorui/modtrezorui.c b/core/embed/upymod/modtrezorui/modtrezorui.c index a47314dd797..47d640d0b70 100644 --- a/core/embed/upymod/modtrezorui/modtrezorui.c +++ b/core/embed/upymod/modtrezorui/modtrezorui.c @@ -26,12 +26,12 @@ #include "../trezorobj.h" #include "modtrezorui-display.h" -STATIC const mp_rom_map_elem_t mp_module_trezorui_globals_table[] = { +static const mp_rom_map_elem_t mp_module_trezorui_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_trezorui)}, {MP_ROM_QSTR(MP_QSTR_Display), MP_ROM_PTR(&mod_trezorui_Display_type)}, }; -STATIC MP_DEFINE_CONST_DICT(mp_module_trezorui_globals, +static MP_DEFINE_CONST_DICT(mp_module_trezorui_globals, mp_module_trezorui_globals_table); const mp_obj_module_t mp_module_trezorui = { diff --git a/core/embed/upymod/modtrezorutils/modtrezorutils-meminfo.h b/core/embed/upymod/modtrezorutils/modtrezorutils-meminfo.h index b3b3e71f1c6..dceef2c8597 100644 --- a/core/embed/upymod/modtrezorutils/modtrezorutils-meminfo.h +++ b/core/embed/upymod/modtrezorutils/modtrezorutils-meminfo.h @@ -72,49 +72,50 @@ #define ATB_3_IS_FREE(a) (((a) & ATB_MASK_3) == 0) #define BLOCK_SHIFT(block) (2 * ((block) & (BLOCKS_PER_ATB - 1))) -#define ATB_GET_KIND(block) \ - ((MP_STATE_MEM(gc_alloc_table_start)[(block) / BLOCKS_PER_ATB] >> \ - BLOCK_SHIFT(block)) & \ +#define ATB_GET_KIND(block) \ + ((MP_STATE_MEM(area.gc_alloc_table_start)[(block) / BLOCKS_PER_ATB] >> \ + BLOCK_SHIFT(block)) & \ 3) #define ATB_ANY_TO_FREE(block) \ do { \ - MP_STATE_MEM(gc_alloc_table_start) \ + MP_STATE_MEM(area.gc_alloc_table_start) \ [(block) / BLOCKS_PER_ATB] &= (~(AT_MARK << BLOCK_SHIFT(block))); \ } while (0) #define ATB_FREE_TO_HEAD(block) \ do { \ - MP_STATE_MEM(gc_alloc_table_start) \ + MP_STATE_MEM(area.gc_alloc_table_start) \ [(block) / BLOCKS_PER_ATB] |= (AT_HEAD << BLOCK_SHIFT(block)); \ } while (0) #define ATB_FREE_TO_TAIL(block) \ do { \ - MP_STATE_MEM(gc_alloc_table_start) \ + MP_STATE_MEM(area.gc_alloc_table_start) \ [(block) / BLOCKS_PER_ATB] |= (AT_TAIL << BLOCK_SHIFT(block)); \ } while (0) #define ATB_HEAD_TO_MARK(block) \ do { \ - MP_STATE_MEM(gc_alloc_table_start) \ + MP_STATE_MEM(area.gc_alloc_table_start) \ [(block) / BLOCKS_PER_ATB] |= (AT_MARK << BLOCK_SHIFT(block)); \ } while (0) #define ATB_MARK_TO_HEAD(block) \ do { \ - MP_STATE_MEM(gc_alloc_table_start) \ + MP_STATE_MEM(area.gc_alloc_table_start) \ [(block) / BLOCKS_PER_ATB] &= (~(AT_TAIL << BLOCK_SHIFT(block))); \ } while (0) #define BLOCK_FROM_PTR(ptr) \ - (((byte *)(ptr) - MP_STATE_MEM(gc_pool_start)) / BYTES_PER_BLOCK) + (((byte *)(ptr) - MP_STATE_MEM(area.gc_pool_start)) / BYTES_PER_BLOCK) #define PTR_FROM_BLOCK(block) \ - (((block) * BYTES_PER_BLOCK + (uintptr_t)MP_STATE_MEM(gc_pool_start))) + (((block) * BYTES_PER_BLOCK + (uintptr_t)MP_STATE_MEM(area.gc_pool_start))) #define ATB_FROM_BLOCK(bl) ((bl) / BLOCKS_PER_ATB) // ptr should be of type void* -#define VERIFY_PTR(ptr) \ - (((uintptr_t)(ptr) & (BYTES_PER_BLOCK - 1)) == \ - 0 /* must be aligned on a block */ \ - && ptr >= (void *)MP_STATE_MEM( \ - gc_pool_start) /* must be above start of pool */ \ - && ptr < (void *)MP_STATE_MEM(gc_pool_end) /* must be below end of pool */ \ +#define VERIFY_PTR(ptr) \ + (((uintptr_t)(ptr) & (BYTES_PER_BLOCK - 1)) == \ + 0 /* must be aligned on a block */ \ + && ptr >= (void *)MP_STATE_MEM( \ + area.gc_pool_start) /* must be above start of pool */ \ + && ptr < (void *)MP_STATE_MEM( \ + area.gc_pool_end) /* must be below end of pool */ \ ) #define Q_GET_DATA(q) \ @@ -410,11 +411,14 @@ void dump_instance(FILE *out, const mp_obj_instance_t *obj) { void dump_type(FILE *out, const mp_obj_type_t *type) { print_type(out, "type", qstr_str(type->name), type, false); - fprintf(out, ",\n\"locals\": \"%p\"", type->locals_dict); - fprintf(out, ",\n\"parent\": \"%p\"},\n", type->parent); - - dump_value(out, type->parent); - dump_value(out, type->locals_dict); + // XXX 3ac8b5851e5f4dade465d52b91ed2ccc17851263 #7542 + fprintf(out, ",\n\"locals\": \"%p\"", + MP_OBJ_TYPE_GET_SLOT_OR_NULL(type, locals_dict)); + fprintf(out, ",\n\"parent\": \"%p\"},\n", + MP_OBJ_TYPE_GET_SLOT_OR_NULL(type, parent)); + + dump_value(out, MP_OBJ_TYPE_GET_SLOT_OR_NULL(type, parent)); + dump_value(out, MP_OBJ_TYPE_GET_SLOT_OR_NULL(type, locals_dict)); } void dump_list(FILE *out, const mp_obj_list_t *list) { @@ -456,7 +460,13 @@ typedef struct _mp_obj_set_t { mp_set_t set; } mp_obj_set_t; -bool is_set_or_frozenset(mp_const_obj_t o); +bool is_set_or_frozenset(mp_const_obj_t o) { + return mp_obj_is_type(o, &mp_type_set) +#if MICROPY_PY_BUILTINS_FROZENSET + || mp_obj_is_type(o, &mp_type_frozenset) +#endif + ; +} void dump_set(FILE *out, const mp_obj_set_t *set) { print_type(out, "set", NULL, set, false); @@ -482,7 +492,7 @@ void dump_set(FILE *out, const mp_obj_set_t *set) { void dump_protomsg(FILE *out, const mp_obj_protomsg_t *value) { mp_obj_t name[2] = {MP_OBJ_NULL, MP_OBJ_NULL}; mp_obj_type_t *type = protobuf_debug_msg_type(); - type->attr((mp_obj_t)value, MP_QSTR_MESSAGE_NAME, name); + MP_OBJ_TYPE_GET_SLOT(type, attr)((mp_obj_t)value, MP_QSTR_MESSAGE_NAME, name); print_type(out, "protomsg", NULL, value, false); fprintf(out, ",\n\"message_name\": "); @@ -494,7 +504,7 @@ void dump_protomsg(FILE *out, const mp_obj_protomsg_t *value) { void dump_protodef(FILE *out, const mp_obj_t *value) { mp_obj_t name[2] = {MP_OBJ_NULL, MP_OBJ_NULL}; mp_obj_type_t *type = protobuf_debug_msg_def_type(); - type->attr((mp_obj_t)value, MP_QSTR_MESSAGE_NAME, name); + MP_OBJ_TYPE_GET_SLOT(type, attr)((mp_obj_t)value, MP_QSTR_MESSAGE_NAME, name); print_type(out, "protodef", NULL, value, false); fprintf(out, ",\n\"message_name\": "); @@ -670,8 +680,8 @@ static void dump_meminfo_json(FILE *out) { #endif } fprintf(out, "\n[\n[" UINT_FMT ", " UINT_FMT ", " UINT_FMT "],\n", - (mp_uint_t)MP_STATE_MEM(gc_pool_start), - (mp_uint_t)MP_STATE_MEM(gc_pool_end), BYTES_PER_BLOCK); + (mp_uint_t)MP_STATE_MEM(area.gc_pool_start), + (mp_uint_t)MP_STATE_MEM(area.gc_pool_end), BYTES_PER_BLOCK); // void **ptrs = (void **)(void *)&mp_state_ctx; // size_t root_start = offsetof(mp_state_ctx_t, thread.dict_locals); @@ -706,11 +716,13 @@ static void dump_meminfo_json(FILE *out) { fprintf(out, "\"dict_main\",\n"); dump_value_opt(out, &MP_STATE_VM(dict_main), true); - fprintf(out, "\"mp_sys_path_obj\",\n"); - dump_value_opt(out, &MP_STATE_VM(mp_sys_path_obj), true); + fprintf(out, "\"mp_sys_path\",\n"); + dump_value_opt(out, &mp_sys_path, true); +#if MICROPY_PY_SYS_ARGV fprintf(out, "\"mp_sys_argv_obj\",\n"); dump_value_opt(out, &MP_STATE_VM(mp_sys_argv_obj), true); +#endif fprintf(out, "\"ui_wait_callback\",\n"); dump_value(out, MP_STATE_VM(trezorconfig_ui_wait_callback)); @@ -729,14 +741,14 @@ static void dump_meminfo_json(FILE *out) { fflush(out); } for (size_t block = 0; - block < MP_STATE_MEM(gc_alloc_table_byte_len) * BLOCKS_PER_ATB; + block < MP_STATE_MEM(area.gc_alloc_table_byte_len) * BLOCKS_PER_ATB; block++) { if (ATB_GET_KIND(block) == AT_MARK) { ATB_MARK_TO_HEAD(block); } } - gc_dump_alloc_table(); + gc_dump_alloc_table(&mp_plat_print); } /// def meminfo(filename: str | None) -> None: @@ -744,7 +756,7 @@ static void dump_meminfo_json(FILE *out) { /// Dumps map of micropython GC arena to a file. /// The JSON file can be decoded by analyze-memory-dump.py /// """ -STATIC mp_obj_t mod_trezorutils_meminfo(mp_obj_t filename) { +static mp_obj_t mod_trezorutils_meminfo(mp_obj_t filename) { size_t fn_len; FILE *out = (filename == mp_const_none) ? NULL @@ -753,7 +765,7 @@ STATIC mp_obj_t mod_trezorutils_meminfo(mp_obj_t filename) { dump_meminfo_json(out); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_meminfo_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_meminfo_obj, mod_trezorutils_meminfo); #define MEMINFO_DICT_ENTRIES \ diff --git a/core/embed/upymod/modtrezorutils/modtrezorutils.c b/core/embed/upymod/modtrezorutils/modtrezorutils.c index 4bc19857047..50300ce6907 100644 --- a/core/embed/upymod/modtrezorutils/modtrezorutils.c +++ b/core/embed/upymod/modtrezorutils/modtrezorutils.c @@ -23,6 +23,7 @@ #if MICROPY_OOM_CALLBACK #include #endif +#include "py/objmodule.h" #include "py/objstr.h" #include "py/runtime.h" @@ -77,7 +78,7 @@ /// (min_temp_milli_c, max_temp_milli_c, battery_errors, battery_cycles) /// or None if telemetry is not available. /// """ -STATIC mp_obj_t mod_trezorutils_telemetry_get(void) { +static mp_obj_t mod_trezorutils_telemetry_get(void) { telemetry_data_t data; if (!telemetry_get(&data)) { return mp_const_none; @@ -91,7 +92,7 @@ STATIC mp_obj_t mod_trezorutils_telemetry_get(void) { return mp_obj_new_tuple(4, tuple); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_telemetry_get_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_telemetry_get_obj, mod_trezorutils_telemetry_get); #endif @@ -101,7 +102,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_telemetry_get_obj, /// information in `pub`. Runs in constant time, corresponding to the /// length of `pub`. /// """ -STATIC mp_obj_t mod_trezorutils_consteq(mp_obj_t sec, mp_obj_t pub) { +static mp_obj_t mod_trezorutils_consteq(mp_obj_t sec, mp_obj_t pub) { mp_buffer_info_t secbuf = {0}; mp_get_buffer_raise(sec, &secbuf, MP_BUFFER_READ); mp_buffer_info_t pubbuf = {0}; @@ -124,7 +125,7 @@ STATIC mp_obj_t mod_trezorutils_consteq(mp_obj_t sec, mp_obj_t pub) { return mp_const_false; } } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorutils_consteq_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorutils_consteq_obj, mod_trezorutils_consteq); /// def memcpy( @@ -140,7 +141,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorutils_consteq_obj, /// copied bytes. If `n` is not specified, tries to copy /// as much as possible. /// """ -STATIC mp_obj_t mod_trezorutils_memcpy(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorutils_memcpy(size_t n_args, const mp_obj_t *args) { mp_arg_check_num(n_args, 0, 4, 5, false); mp_buffer_info_t dst = {0}; @@ -166,7 +167,7 @@ STATIC mp_obj_t mod_trezorutils_memcpy(size_t n_args, const mp_obj_t *args) { return mp_obj_new_int(ncpy); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_memcpy_obj, 4, 5, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_memcpy_obj, 4, 5, mod_trezorutils_memcpy); /// def memzero( @@ -175,20 +176,20 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_memcpy_obj, 4, 5, /// """ /// Zeroes all bytes at `dst`. /// """ -STATIC mp_obj_t mod_trezorutils_memzero(const mp_obj_t dst) { +static mp_obj_t mod_trezorutils_memzero(const mp_obj_t dst) { mp_buffer_info_t buf = {0}; mp_get_buffer_raise(dst, &buf, MP_BUFFER_WRITE); memzero(buf.buf, buf.len); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_memzero_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_memzero_obj, mod_trezorutils_memzero); /// def halt(msg: str | None = None) -> None: /// """ /// Halts execution. /// """ -STATIC mp_obj_t mod_trezorutils_halt(size_t n_args, const mp_obj_t *args) { +static mp_obj_t mod_trezorutils_halt(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t msg = {0}; if (n_args > 0 && mp_get_buffer(args[0], &msg, MP_BUFFER_READ)) { error_shutdown(msg.buf); @@ -197,7 +198,7 @@ STATIC mp_obj_t mod_trezorutils_halt(size_t n_args, const mp_obj_t *args) { } return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_halt_obj, 0, 1, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_halt_obj, 0, 1, mod_trezorutils_halt); /// def firmware_hash( @@ -208,7 +209,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_halt_obj, 0, 1, /// Computes the Blake2s hash of the firmware with an optional challenge as /// the key. /// """ -STATIC mp_obj_t mod_trezorutils_firmware_hash(size_t n_args, +static mp_obj_t mod_trezorutils_firmware_hash(size_t n_args, const mp_obj_t *args) { mp_buffer_info_t chal = {0}; if (n_args > 0 && args[0] != mp_const_none) { @@ -247,17 +248,17 @@ STATIC mp_obj_t mod_trezorutils_firmware_hash(size_t n_args, } } - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); + return mp_obj_new_bytes_from_vstr(&vstr); } -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_firmware_hash_obj, 0, +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_firmware_hash_obj, 0, 2, mod_trezorutils_firmware_hash); /// def firmware_vendor() -> str: /// """ /// Returns the firmware vendor string from the vendor header. /// """ -STATIC mp_obj_t mod_trezorutils_firmware_vendor(void) { +static mp_obj_t mod_trezorutils_firmware_vendor(void) { #ifdef TREZOR_EMULATOR return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)"EMULATOR", 8); #else @@ -269,7 +270,7 @@ STATIC mp_obj_t mod_trezorutils_firmware_vendor(void) { return mp_obj_new_str_copy(&mp_type_str, (byte *)vendor, strlen(vendor)); #endif } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_firmware_vendor_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_firmware_vendor_obj, mod_trezorutils_firmware_vendor); /// def delegated_identity(rotation_index: int) -> bytes: @@ -277,7 +278,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_firmware_vendor_obj, /// Returns the delegated identity key used for registration and space /// management at Quota Manager. /// """ -STATIC mp_obj_t mod_trezorutils_delegated_identity(mp_obj_t index) { +static mp_obj_t mod_trezorutils_delegated_identity(mp_obj_t index) { uint16_t rotation_index = trezor_obj_get_uint16(index); uint8_t private_key[ECDSA_PRIVATE_KEY_SIZE] = {0}; if (secret_key_delegated_identity(rotation_index, private_key) != sectrue) { @@ -286,46 +287,46 @@ STATIC mp_obj_t mod_trezorutils_delegated_identity(mp_obj_t index) { } return mp_obj_new_bytes(private_key, sizeof(private_key)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_delegated_identity_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_delegated_identity_obj, mod_trezorutils_delegated_identity); /// def unit_color() -> int | None: /// """ /// Returns the color of the unit. /// """ -STATIC mp_obj_t mod_trezorutils_unit_color(void) { +static mp_obj_t mod_trezorutils_unit_color(void) { if (!unit_properties()->color_is_valid) { return mp_const_none; } return mp_obj_new_int(unit_properties()->color); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_color_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_color_obj, mod_trezorutils_unit_color); /// def unit_btconly() -> bool | None: /// """ /// Returns True if the unit is BTConly. /// """ -STATIC mp_obj_t mod_trezorutils_unit_btconly(void) { +static mp_obj_t mod_trezorutils_unit_btconly(void) { if (!unit_properties()->btconly_is_valid) { return mp_const_none; } return unit_properties()->btconly ? mp_const_true : mp_const_false; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_btconly_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_btconly_obj, mod_trezorutils_unit_btconly); /// def unit_packaging() -> int | None: /// """ /// Returns the packaging version of the unit. /// """ -STATIC mp_obj_t mod_trezorutils_unit_packaging(void) { +static mp_obj_t mod_trezorutils_unit_packaging(void) { if (!unit_properties()->packaging_is_valid) { return mp_const_none; } return mp_obj_new_int(unit_properties()->packaging); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_packaging_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_packaging_obj, mod_trezorutils_unit_packaging); /// def unit_production_date() -> tuple[int, int, int] | None: @@ -333,7 +334,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_packaging_obj, /// Returns the unit production date as (year, month, day), or None if /// unavailable. /// """ -STATIC mp_obj_t mod_trezorutils_unit_production_date(void) { +static mp_obj_t mod_trezorutils_unit_production_date(void) { const unit_properties_t *props = unit_properties(); if (props == NULL) { return mp_const_none; @@ -354,7 +355,7 @@ STATIC mp_obj_t mod_trezorutils_unit_production_date(void) { items[2] = mp_obj_new_int(day); return mp_obj_new_tuple(3, items); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_production_date_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_production_date_obj, mod_trezorutils_unit_production_date); #if USE_SERIAL_NUMBER @@ -364,7 +365,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_production_date_obj, /// """ /// Returns unit serial number. /// """ -STATIC mp_obj_t mod_trezorutils_serial_number(void) { +static mp_obj_t mod_trezorutils_serial_number(void) { uint8_t device_sn[MAX_DEVICE_SN_SIZE] = {0}; size_t device_sn_size = 0; if (!unit_properties_get_sn(device_sn, MAX_DEVICE_SN_SIZE, &device_sn_size)) { @@ -373,7 +374,7 @@ STATIC mp_obj_t mod_trezorutils_serial_number(void) { } return mp_obj_new_str_copy(&mp_type_str, device_sn, device_sn_size); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_serial_number_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_serial_number_obj, mod_trezorutils_serial_number); #endif // USE_SERIAL_NUMBER @@ -382,10 +383,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_serial_number_obj, /// """ /// Returns True if SD card hot swapping is enabled /// """ -STATIC mp_obj_t mod_trezorutils_sd_hotswap_enabled(void) { +static mp_obj_t mod_trezorutils_sd_hotswap_enabled(void) { return unit_properties()->sd_hotswap_enabled ? mp_const_true : mp_const_false; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_sd_hotswap_enabled_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_sd_hotswap_enabled_obj, mod_trezorutils_sd_hotswap_enabled); /// def presize_module(mod: module, n: int): @@ -396,7 +397,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_sd_hotswap_enabled_obj, /// on the symbols defined in the file itself, but also on the number of /// submodules that will be inserted into the module's namespace. /// """ -STATIC mp_obj_t mod_trezorutils_presize_module(mp_obj_t mod, mp_obj_t n) { +static mp_obj_t mod_trezorutils_presize_module(mp_obj_t mod, mp_obj_t n) { if (!mp_obj_is_type(mod, &mp_type_module)) { mp_raise_TypeError(MP_ERROR_TEXT("expected module type")); } @@ -405,7 +406,7 @@ STATIC mp_obj_t mod_trezorutils_presize_module(mp_obj_t mod, mp_obj_t n) { mp_obj_dict_presize(globals, size); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorutils_presize_module_obj, +static MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorutils_presize_module_obj, mod_trezorutils_presize_module); #if !PYOPT @@ -414,18 +415,18 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorutils_presize_module_obj, /// """ /// Zero unused stack memory. /// """ -STATIC mp_obj_t mod_trezorutils_zero_unused_stack(void) { +static mp_obj_t mod_trezorutils_zero_unused_stack(void) { clear_unused_stack(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_zero_unused_stack_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_zero_unused_stack_obj, mod_trezorutils_zero_unused_stack); /// def estimate_unused_stack() -> int: /// """ /// Estimate unused stack size. /// """ -STATIC mp_obj_t mod_trezorutils_estimate_unused_stack(void) { +static mp_obj_t mod_trezorutils_estimate_unused_stack(void) { const uint8_t *stack_top = (const uint8_t *)MP_STATE_THREAD(stack_top); size_t stack_limit = MP_STATE_THREAD(stack_limit); @@ -438,14 +439,14 @@ STATIC mp_obj_t mod_trezorutils_estimate_unused_stack(void) { } return mp_obj_new_int_from_uint(offset); } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_estimate_unused_stack_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_estimate_unused_stack_obj, mod_trezorutils_estimate_unused_stack); #endif // LOG_STACK_USAGE #if MICROPY_OOM_CALLBACK static void gc_oom_callback(void) { - gc_dump_info(); + gc_dump_info(&mp_plat_print); #if BLOCK_ON_VCP dump_meminfo_json(NULL); // dump to stdout #endif @@ -456,11 +457,11 @@ static void gc_oom_callback(void) { /// """ /// Dump GC info in case of an OOM. /// """ -STATIC mp_obj_t mod_trezorutils_enable_oom_dump(void) { +static mp_obj_t mod_trezorutils_enable_oom_dump(void) { gc_set_oom_callback(gc_oom_callback); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_enable_oom_dump_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_enable_oom_dump_obj, mod_trezorutils_enable_oom_dump); #endif // MICROPY_OOM_CALLBACK @@ -471,12 +472,12 @@ static gc_info_t current_gc_info = {0}; /// """ /// Clear GC heap stats. /// """ -STATIC mp_obj_t mod_trezorutils_clear_gc_info() { +static mp_obj_t mod_trezorutils_clear_gc_info() { memzero(¤t_gc_info, sizeof(current_gc_info)); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_clear_gc_info_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_clear_gc_info_obj, mod_trezorutils_clear_gc_info); /// if __debug__: @@ -484,7 +485,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_clear_gc_info_obj, /// """ /// Get GC heap stats, updated by `update_gc_info`. /// """ -STATIC mp_obj_t mod_trezorutils_get_gc_info() { +static mp_obj_t mod_trezorutils_get_gc_info() { mp_obj_t result = mp_obj_new_dict(4); mp_obj_dict_store(result, MP_OBJ_NEW_QSTR(MP_QSTR_total), mp_obj_new_int_from_uint(current_gc_info.total)); @@ -497,7 +498,7 @@ STATIC mp_obj_t mod_trezorutils_get_gc_info() { MICROPY_BYTES_PER_GC_BLOCK)); return result; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_get_gc_info_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_get_gc_info_obj, mod_trezorutils_get_gc_info); /// if __debug__: @@ -507,7 +508,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_get_gc_info_obj, /// On emulator, also assert that free heap memory doesn't decrease. /// Enabled only for frozen debug builds. /// """ -STATIC mp_obj_t mod_trezorutils_update_gc_info() { +static mp_obj_t mod_trezorutils_update_gc_info() { #if MICROPY_MODULE_FROZEN_MPY #ifdef TREZOR_EMULATOR size_t prev_free = current_gc_info.free; @@ -517,7 +518,7 @@ STATIC mp_obj_t mod_trezorutils_update_gc_info() { // pointers (resulting in `gc_mark_subtree` false-positives). #ifdef TREZOR_EMULATOR if (prev_free > current_gc_info.free) { - gc_dump_info(); + gc_dump_info(&mp_plat_print); mp_raise_msg(&mp_type_AssertionError, MP_ERROR_TEXT("Free heap size decreased")); } @@ -525,7 +526,7 @@ STATIC mp_obj_t mod_trezorutils_update_gc_info() { #endif return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_update_gc_info_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_update_gc_info_obj, mod_trezorutils_update_gc_info); /// if __debug__: @@ -534,7 +535,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_update_gc_info_obj, /// Assert known sources for heap fragmentation. /// Enabled only for frozen debug builds. /// """ -STATIC mp_obj_t mod_trezorutils_check_heap_fragmentation(void) { +static mp_obj_t mod_trezorutils_check_heap_fragmentation(void) { #if MICROPY_MODULE_FROZEN_MPY mp_obj_dict_t *modules = &MP_STATE_VM(mp_loaded_modules_dict); if (modules->map.alloc > MICROPY_LOADED_MODULES_DICT_SIZE) { @@ -564,7 +565,7 @@ STATIC mp_obj_t mod_trezorutils_check_heap_fragmentation(void) { #endif // MICROPY_MODULE_FROZEN_MPY return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_check_heap_fragmentation_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_check_heap_fragmentation_obj, mod_trezorutils_check_heap_fragmentation); #endif // !PYOPT @@ -574,7 +575,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_check_heap_fragmentation_obj, /// """ /// Reboots to perform upgrade to FW with specified hash. /// """ -STATIC mp_obj_t mod_trezorutils_reboot_and_upgrade(mp_obj_t hash_obj) { +static mp_obj_t mod_trezorutils_reboot_and_upgrade(mp_obj_t hash_obj) { // Reboot and continue with the firmware upgrade mp_buffer_info_t hash = {0}; @@ -588,28 +589,28 @@ STATIC mp_obj_t mod_trezorutils_reboot_and_upgrade(mp_obj_t hash_obj) { return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_reboot_and_upgrade_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_reboot_and_upgrade_obj, mod_trezorutils_reboot_and_upgrade); /// def reboot_to_bootloader() -> None: /// """ /// Reboots the device and stay in bootloader. /// """ -STATIC mp_obj_t mod_trezorutils_reboot_to_bootloader(void) { +static mp_obj_t mod_trezorutils_reboot_to_bootloader(void) { // Reboot and stay in bootloader reboot_to_bootloader(); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_reboot_to_bootloader_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_reboot_to_bootloader_obj, mod_trezorutils_reboot_to_bootloader); /// def reboot() -> None: /// """ /// Reboots the device. /// """ -STATIC mp_obj_t mod_trezorutils_reboot(void) { +static mp_obj_t mod_trezorutils_reboot(void) { #ifdef USE_BLE ble_switch_off(); #endif @@ -623,7 +624,7 @@ STATIC mp_obj_t mod_trezorutils_reboot(void) { return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_reboot_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_reboot_obj, mod_trezorutils_reboot); /// VersionTuple = Tuple[int, int, int, int] @@ -638,7 +639,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_reboot_obj, /// def check_firmware_header(header : AnyBytes) -> FirmwareHeaderInfo: /// """Parses incoming firmware header and returns information about it.""" -STATIC mp_obj_t mod_trezorutils_check_firmware_header(mp_obj_t header) { +static mp_obj_t mod_trezorutils_check_firmware_header(mp_obj_t header) { mp_buffer_info_t header_buf = {0}; mp_get_buffer_raise(header, &header_buf, MP_BUFFER_READ); @@ -662,7 +663,7 @@ STATIC mp_obj_t mod_trezorutils_check_firmware_header(mp_obj_t header) { mp_raise_ValueError(MP_ERROR_TEXT("Invalid value.")); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_check_firmware_header_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_check_firmware_header_obj, mod_trezorutils_check_firmware_header); /// def bootloader_locked() -> bool | None: @@ -670,7 +671,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_check_firmware_header_obj, /// Returns True/False if the bootloader is locked/unlocked and None if /// the feature is not supported. /// """ -STATIC mp_obj_t mod_trezorutils_bootloader_locked() { +static mp_obj_t mod_trezorutils_bootloader_locked() { #if LOCKABLE_BOOTLOADER && defined USE_SECRET #ifdef TREZOR_EMULATOR return mp_const_true; @@ -682,14 +683,14 @@ STATIC mp_obj_t mod_trezorutils_bootloader_locked() { return mp_const_none; #endif } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_bootloader_locked_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_bootloader_locked_obj, mod_trezorutils_bootloader_locked); /// def notify_send(event: int) -> None: /// """ /// Sends a notification to host /// """ -STATIC mp_obj_t mod_trezorutils_notify_send(const mp_obj_t event) { +static mp_obj_t mod_trezorutils_notify_send(const mp_obj_t event) { mp_int_t value = mp_obj_get_int(event); if (value < 0) { mp_raise_ValueError(MP_ERROR_TEXT("Invalid event.")); @@ -697,7 +698,7 @@ STATIC mp_obj_t mod_trezorutils_notify_send(const mp_obj_t event) { notify_send((notification_event_t)value); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_notify_send_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_notify_send_obj, mod_trezorutils_notify_send); #ifdef USE_NRF @@ -705,7 +706,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_notify_send_obj, /// """ /// Reads version of nRF firmware /// """ -STATIC mp_obj_t mod_trezorutils_nrf_get_version(void) { +static mp_obj_t mod_trezorutils_nrf_get_version(void) { uint32_t version = nrf_get_version(); mp_obj_t nrf_version[4] = {mp_obj_new_int((version >> 24) & 0xff), @@ -718,7 +719,7 @@ STATIC mp_obj_t mod_trezorutils_nrf_get_version(void) { return version_tuple; } -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_nrf_get_version_obj, +static MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_nrf_get_version_obj, mod_trezorutils_nrf_get_version); #endif @@ -727,13 +728,13 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_nrf_get_version_obj, /// """ /// Sets filter string for syslog /// """ -STATIC mp_obj_t mod_trezorutils_set_log_filter(mp_obj_t filter) { +static mp_obj_t mod_trezorutils_set_log_filter(mp_obj_t filter) { mp_buffer_info_t filter_buf = {0}; mp_get_buffer_raise(filter, &filter_buf, MP_BUFFER_READ); syslog_set_filter(filter_buf.buf, filter_buf.len); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_set_log_filter_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_set_log_filter_obj, mod_trezorutils_set_log_filter); #endif @@ -741,7 +742,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_set_log_filter_obj, /// """ /// Returns SCM revision of the firmware. /// """ -STATIC mp_obj_t mod_trezorutil_get_scm_revision(mp_obj_t xor2) { +static mp_obj_t mod_trezorutil_get_scm_revision(mp_obj_t xor2) { // Why the revision ID is obfuscated: // // When a firmware update is loaded onto a fake Trezor device, @@ -779,31 +780,31 @@ STATIC mp_obj_t mod_trezorutil_get_scm_revision(mp_obj_t xor2) { return mp_obj_new_bytes(scm_revision, sizeof(scm_revision)); } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutil_get_scm_revision_obj, +static MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutil_get_scm_revision_obj, mod_trezorutil_get_scm_revision); -STATIC const mp_obj_str_t mod_trezorutils_model_name_obj = { +static const mp_obj_str_t mod_trezorutils_model_name_obj = { {&mp_type_str}, 0, sizeof(MODEL_NAME) - 1, (const byte *)MODEL_NAME}; -STATIC const mp_obj_str_t mod_trezorutils_full_name_obj = { +static const mp_obj_str_t mod_trezorutils_full_name_obj = { {&mp_type_str}, 0, sizeof(MODEL_FULL_NAME) - 1, (const byte *)MODEL_FULL_NAME}; -STATIC const mp_obj_str_t mod_trezorutils_model_usb_manufacturer_obj = { +static const mp_obj_str_t mod_trezorutils_model_usb_manufacturer_obj = { {&mp_type_str}, 0, sizeof(MODEL_USB_MANUFACTURER) - 1, (const byte *)MODEL_USB_MANUFACTURER}; -STATIC const mp_obj_str_t mod_trezorutils_model_usb_product_obj = { +static const mp_obj_str_t mod_trezorutils_model_usb_product_obj = { {&mp_type_str}, 0, sizeof(MODEL_USB_PRODUCT) - 1, (const byte *)MODEL_USB_PRODUCT}; -STATIC const mp_obj_tuple_t mod_trezorutils_version_obj = { +static const mp_obj_tuple_t mod_trezorutils_version_obj = { {&mp_type_tuple}, 4, {MP_OBJ_NEW_SMALL_INT(VERSION_MAJOR), MP_OBJ_NEW_SMALL_INT(VERSION_MINOR), @@ -896,7 +897,7 @@ STATIC const mp_obj_tuple_t mod_trezorutils_version_obj = { /// LOG_STACK_USAGE: bool /// """Whether the firmware should log estimated stack usage.""" -STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { +static const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_trezorutils)}, {MP_ROM_QSTR(MP_QSTR_consteq), MP_ROM_PTR(&mod_trezorutils_consteq_obj)}, {MP_ROM_QSTR(MP_QSTR_memcpy), MP_ROM_PTR(&mod_trezorutils_memcpy_obj)}, @@ -1127,7 +1128,7 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { #endif // PYOPT }; -STATIC MP_DEFINE_CONST_DICT(mp_module_trezorutils_globals, +static MP_DEFINE_CONST_DICT(mp_module_trezorutils_globals, mp_module_trezorutils_globals_table); const mp_obj_module_t mp_module_trezorutils = { diff --git a/core/embed/upymod/modutime.c b/core/embed/upymod/modutime.c index 956c8374477..627710f4f61 100644 --- a/core/embed/upymod/modutime.c +++ b/core/embed/upymod/modutime.c @@ -24,12 +24,12 @@ * THE SOFTWARE. */ -#include "extmod/utime_mphal.h" +#include "extmod/modtime.h" #include "shared/timeutils/timeutils.h" // copy of ports/stm32/modutime.c:time_localtime, without support // for getting current clock time (i.e., timestamp must always be provided) -STATIC mp_obj_t time_gmtime2000(mp_obj_t timestamp) { +static mp_obj_t time_gmtime2000(mp_obj_t timestamp) { mp_int_t seconds = mp_obj_get_int(timestamp); timeutils_struct_time_t tm; timeutils_seconds_since_2000_to_struct_time(seconds, &tm); @@ -48,21 +48,21 @@ STATIC mp_obj_t time_gmtime2000(mp_obj_t timestamp) { MP_DEFINE_CONST_FUN_OBJ_1(time_gmtime2000_obj, time_gmtime2000); -STATIC const mp_rom_map_elem_t time_module_globals_table[] = { +static const mp_rom_map_elem_t time_module_globals_table[] = { {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_utime)}, {MP_ROM_QSTR(MP_QSTR_gmtime2000), MP_ROM_PTR(&time_gmtime2000_obj)}, - {MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&mp_utime_sleep_obj)}, - {MP_ROM_QSTR(MP_QSTR_sleep_ms), MP_ROM_PTR(&mp_utime_sleep_ms_obj)}, - {MP_ROM_QSTR(MP_QSTR_sleep_us), MP_ROM_PTR(&mp_utime_sleep_us_obj)}, - {MP_ROM_QSTR(MP_QSTR_ticks_ms), MP_ROM_PTR(&mp_utime_ticks_ms_obj)}, - {MP_ROM_QSTR(MP_QSTR_ticks_us), MP_ROM_PTR(&mp_utime_ticks_us_obj)}, - {MP_ROM_QSTR(MP_QSTR_ticks_cpu), MP_ROM_PTR(&mp_utime_ticks_cpu_obj)}, - {MP_ROM_QSTR(MP_QSTR_ticks_add), MP_ROM_PTR(&mp_utime_ticks_add_obj)}, - {MP_ROM_QSTR(MP_QSTR_ticks_diff), MP_ROM_PTR(&mp_utime_ticks_diff_obj)}, + {MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&mp_time_sleep_obj)}, + {MP_ROM_QSTR(MP_QSTR_sleep_ms), MP_ROM_PTR(&mp_time_sleep_ms_obj)}, + {MP_ROM_QSTR(MP_QSTR_sleep_us), MP_ROM_PTR(&mp_time_sleep_us_obj)}, + {MP_ROM_QSTR(MP_QSTR_ticks_ms), MP_ROM_PTR(&mp_time_ticks_ms_obj)}, + {MP_ROM_QSTR(MP_QSTR_ticks_us), MP_ROM_PTR(&mp_time_ticks_us_obj)}, + {MP_ROM_QSTR(MP_QSTR_ticks_cpu), MP_ROM_PTR(&mp_time_ticks_cpu_obj)}, + {MP_ROM_QSTR(MP_QSTR_ticks_add), MP_ROM_PTR(&mp_time_ticks_add_obj)}, + {MP_ROM_QSTR(MP_QSTR_ticks_diff), MP_ROM_PTR(&mp_time_ticks_diff_obj)}, }; -STATIC MP_DEFINE_CONST_DICT(time_module_globals, time_module_globals_table); +static MP_DEFINE_CONST_DICT(time_module_globals, time_module_globals_table); const mp_obj_module_t mp_module_utime = { .base = {&mp_type_module}, diff --git a/core/embed/upymod/mpycross_include/mpconfigport.h b/core/embed/upymod/mpycross_include/mpconfigport.h index 899f602a0af..e889fa68699 100644 --- a/core/embed/upymod/mpycross_include/mpconfigport.h +++ b/core/embed/upymod/mpycross_include/mpconfigport.h @@ -28,6 +28,7 @@ #define MICROPY_ALLOC_PATH_MAX (PATH_MAX) #define MICROPY_PERSISTENT_CODE_LOAD (0) +#define MICROPY_PERSISTENT_CODE_LOAD_NATIVE (0) #define MICROPY_PERSISTENT_CODE_SAVE (1) #ifndef MICROPY_PERSISTENT_CODE_SAVE_FILE @@ -47,11 +48,16 @@ #define MICROPY_EMIT_XTENSA (1) #define MICROPY_EMIT_INLINE_XTENSA (1) #define MICROPY_EMIT_XTENSAWIN (1) +#define MICROPY_EMIT_RV32 (1) +#define MICROPY_EMIT_INLINE_RV32 (1) +#define MICROPY_EMIT_NATIVE_DEBUG (1) +#define MICROPY_EMIT_NATIVE_DEBUG_PRINTER (&mp_stdout_print) #define MICROPY_DYNAMIC_COMPILER (1) #define MICROPY_COMP_CONST_FOLDING (1) #define MICROPY_COMP_MODULE_CONST (1) #define MICROPY_COMP_CONST (1) +#define MICROPY_COMP_CONST_FLOAT (1) #define MICROPY_COMP_DOUBLE_TUPLE_ASSIGN (1) #define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (1) #define MICROPY_COMP_RETURN_IF_EXPR (1) @@ -76,6 +82,7 @@ #define MICROPY_USE_INTERNAL_PRINTF (0) #define MICROPY_PY_FSTRINGS (1) +#define MICROPY_PY_TSTRINGS (1) #define MICROPY_PY_BUILTINS_STR_UNICODE (1) #if !(defined(MICROPY_GCREGS_SETJMP) || defined(__x86_64__) || \ @@ -86,11 +93,12 @@ #define MICROPY_GCREGS_SETJMP (1) #endif -#define MICROPY_PY___FILE__ (0) +#define MICROPY_MODULE___FILE__ (0) #define MICROPY_PY_ARRAY (0) #define MICROPY_PY_ATTRTUPLE (0) #define MICROPY_PY_COLLECTIONS (0) -#define MICROPY_PY_MATH (0) +#define MICROPY_PY_MATH (MICROPY_COMP_CONST_FLOAT) +#define MICROPY_PY_MATH_CONSTANTS (MICROPY_COMP_CONST_FLOAT) #define MICROPY_PY_CMATH (0) #define MICROPY_PY_GC (0) #define MICROPY_PY_IO (0) @@ -98,23 +106,6 @@ // type definitions for the specific machine -#ifdef __LP64__ -typedef long mp_int_t; // must be pointer size -typedef unsigned long mp_uint_t; // must be pointer size -#elif defined(__MINGW32__) && defined(_WIN64) -#include -typedef __int64 mp_int_t; -typedef unsigned __int64 mp_uint_t; -#elif defined(_MSC_VER) && defined(_WIN64) -typedef __int64 mp_int_t; -typedef unsigned __int64 mp_uint_t; -#else -// These are definitions for machines where sizeof(int) == sizeof(void*), -// regardless for actual size. -typedef int mp_int_t; // must be pointer size -typedef unsigned int mp_uint_t; // must be pointer size -#endif - // Cannot include , as it may lead to symbol name clashes #if _FILE_OFFSET_BITS == 64 && !defined(__LP64__) typedef long long mp_off_t; @@ -125,7 +116,7 @@ typedef long mp_off_t; #define MP_PLAT_PRINT_STRN(str, len) (void)0 // We need to provide a declaration/definition of alloca() -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__NetBSD__) #include #elif defined(_WIN32) #include @@ -139,8 +130,9 @@ typedef long mp_off_t; #ifdef _MSC_VER #define MP_ENDIANNESS_LITTLE (1) -#define NORETURN __declspec(noreturn) +#define MP_NORETURN __declspec(noreturn) #define MP_NOINLINE __declspec(noinline) +#define MP_ALWAYSINLINE __forceinline #define MP_LIKELY(x) (x) #define MP_UNLIKELY(x) (x) #define MICROPY_PORT_CONSTANTS {MP_ROM_QSTR(MP_QSTR_dummy), MP_ROM_PTR(NULL)} @@ -169,3 +161,5 @@ typedef int ssize_t; typedef mp_off_t off_t; #endif + +extern const struct _mp_print_t mp_stdout_print; diff --git a/core/embed/upymod/trezorobj.h b/core/embed/upymod/trezorobj.h index 825f229df34..835d23705f1 100644 --- a/core/embed/upymod/trezorobj.h +++ b/core/embed/upymod/trezorobj.h @@ -30,10 +30,10 @@ // Casts int object into mp_int_t, without any conversions. Raises if object is // not int or if it does not fit into mp_int_t representation. static inline mp_int_t trezor_obj_get_int(mp_obj_t obj) { - if (MP_OBJ_IS_SMALL_INT(obj)) { + if (mp_obj_is_small_int(obj)) { mp_int_t i = MP_OBJ_SMALL_INT_VALUE(obj); return i; - } else if (MP_OBJ_IS_TYPE(obj, &mp_type_int)) { + } else if (mp_obj_is_exact_type(obj, &mp_type_int)) { mp_int_t i = 0; mp_obj_int_t *self = MP_OBJ_TO_PTR(obj); if (!mpz_as_int_checked(&self->mpz, &i)) { @@ -50,14 +50,14 @@ static inline mp_int_t trezor_obj_get_int(mp_obj_t obj) { // not int or if it does not fit into mp_uint_t representation (or is less than // 0). static inline mp_uint_t trezor_obj_get_uint(mp_obj_t obj) { - if (MP_OBJ_IS_SMALL_INT(obj)) { + if (mp_obj_is_small_int(obj)) { mp_int_t i = MP_OBJ_SMALL_INT_VALUE(obj); if (i < 0) { mp_raise_TypeError(MP_ERROR_TEXT("value is negative")); } mp_uint_t u = i; return u; - } else if (MP_OBJ_IS_TYPE(obj, &mp_type_int)) { + } else if (mp_obj_is_exact_type(obj, &mp_type_int)) { mp_uint_t u = 0; mp_obj_int_t *self = MP_OBJ_TO_PTR(obj); if (!mpz_as_uint_checked(&self->mpz, &u)) { @@ -89,20 +89,21 @@ static inline uint16_t trezor_obj_get_uint16(mp_obj_t obj) { } static inline uint64_t trezor_obj_get_uint64(mp_const_obj_t obj) { - if (MP_OBJ_IS_SMALL_INT(obj)) { + if (mp_obj_is_small_int(obj)) { mp_int_t i = MP_OBJ_SMALL_INT_VALUE(obj); if (i < 0) { mp_raise_TypeError(MP_ERROR_TEXT("value is negative")); } mp_uint_t u = i; return u; - } else if (MP_OBJ_IS_TYPE(obj, &mp_type_int)) { + } else if (mp_obj_is_exact_type(obj, &mp_type_int)) { uint64_t u = 0; mp_obj_int_t *self = MP_OBJ_TO_PTR(obj); if (self->mpz.neg != 0) { mp_raise_TypeError(MP_ERROR_TEXT("value is negative")); } - mpz_as_bytes(&self->mpz, MP_ENDIANNESS_BIG, sizeof(uint64_t), (byte *)&u); + mpz_as_bytes(&self->mpz, MP_ENDIANNESS_BIG, /*as_signed=*/false, + sizeof(uint64_t), (byte *)&u); return u; } else { mp_raise_TypeError(MP_ERROR_TEXT("value is not int")); diff --git a/core/mocks/generated/timeq.pyi b/core/mocks/generated/timeq.pyi new file mode 120000 index 00000000000..aa61762e5b8 --- /dev/null +++ b/core/mocks/generated/timeq.pyi @@ -0,0 +1 @@ +../timeq.pyi \ No newline at end of file diff --git a/core/mocks/generated/ubinascii.pyi b/core/mocks/generated/ubinascii.pyi deleted file mode 120000 index b129e0cecdc..00000000000 --- a/core/mocks/generated/ubinascii.pyi +++ /dev/null @@ -1 +0,0 @@ -../ubinascii.pyi \ No newline at end of file diff --git a/core/mocks/generated/uio.pyi b/core/mocks/generated/uio.pyi deleted file mode 120000 index ac036f48a5d..00000000000 --- a/core/mocks/generated/uio.pyi +++ /dev/null @@ -1 +0,0 @@ -../uio.pyi \ No newline at end of file diff --git a/core/mocks/generated/uos.pyi b/core/mocks/generated/uos.pyi deleted file mode 120000 index c5cae7aaa73..00000000000 --- a/core/mocks/generated/uos.pyi +++ /dev/null @@ -1 +0,0 @@ -../uos.pyi \ No newline at end of file diff --git a/core/mocks/generated/ustruct.pyi b/core/mocks/generated/ustruct.pyi deleted file mode 120000 index a3dbad3ef46..00000000000 --- a/core/mocks/generated/ustruct.pyi +++ /dev/null @@ -1 +0,0 @@ -../ustruct.pyi \ No newline at end of file diff --git a/core/mocks/generated/utimeq.pyi b/core/mocks/generated/utimeq.pyi deleted file mode 120000 index 248c18120a7..00000000000 --- a/core/mocks/generated/utimeq.pyi +++ /dev/null @@ -1 +0,0 @@ -../utimeq.pyi \ No newline at end of file diff --git a/core/mocks/generated/vfs.pyi b/core/mocks/generated/vfs.pyi new file mode 120000 index 00000000000..fa1093fe8a6 --- /dev/null +++ b/core/mocks/generated/vfs.pyi @@ -0,0 +1 @@ +../vfs.pyi \ No newline at end of file diff --git a/core/mocks/utimeq.pyi b/core/mocks/timeq.pyi similarity index 95% rename from core/mocks/utimeq.pyi rename to core/mocks/timeq.pyi index c18f5828aca..5d3287effc3 100644 --- a/core/mocks/utimeq.pyi +++ b/core/mocks/timeq.pyi @@ -1,6 +1,6 @@ from typing import * -class utimeq: +class timeq: def __init__(self, max_queue_size: int) -> None: ... def push(self, time: int, callback: Any, value: Any) -> None: ... def pop(self, entry: List[Any]) -> None: ... diff --git a/core/mocks/ubinascii.pyi b/core/mocks/ubinascii.pyi deleted file mode 100644 index 969d21dd3cc..00000000000 --- a/core/mocks/ubinascii.pyi +++ /dev/null @@ -1,7 +0,0 @@ -from buffer_types import AnyBytes, StrOrBytes - -def hexlify(data: AnyBytes, sep: AnyBytes = ...) -> bytes: ... -def unhexlify(data: StrOrBytes) -> bytes: ... -def a2b_base64(data: AnyBytes) -> bytes: ... -def b2a_base64(data: AnyBytes) -> bytes: ... -def crc32(data: AnyBytes, crc: int = ...) -> int: ... diff --git a/core/mocks/uio.pyi b/core/mocks/uio.pyi deleted file mode 100644 index 6cf1e651b38..00000000000 --- a/core/mocks/uio.pyi +++ /dev/null @@ -1,16 +0,0 @@ -class FileIO: - def __enter__(self) -> FileIO: ... - - def __exit__(*args) -> None: ... - - def write(self, data: bytes | str) -> int: ... - -class StringIO: - def __init__(self, _: int | str) -> None: ... - -class BytesIO: - def __init__(self, _: int | bytes) -> None: ... - def getvalue(self) -> bytes: ... - -def open(name: str, mode: str = ...) -> FileIO: - pass diff --git a/core/mocks/uos.pyi b/core/mocks/uos.pyi deleted file mode 100644 index 9fb4e3a85aa..00000000000 --- a/core/mocks/uos.pyi +++ /dev/null @@ -1 +0,0 @@ -def getenv(env: str) -> str: ... diff --git a/core/mocks/ustruct.pyi b/core/mocks/ustruct.pyi deleted file mode 100644 index 99821c2c3ec..00000000000 --- a/core/mocks/ustruct.pyi +++ /dev/null @@ -1,8 +0,0 @@ -from typing import * -from buffer_types import * - -def calcsize(fmt: str) -> int: ... -def pack(fmt: str, *args: Any) -> bytes: ... -def pack_into(fmt: str, buffer: AnyBuffer, offset: int, *args: Any) -> None: ... -def unpack(fmt: str, data: AnyBytes) -> Tuple: ... -def unpack_from(fmt: str, data: AnyBytes, offset: int = ...) -> Tuple: ... diff --git a/core/mocks/vfs.pyi b/core/mocks/vfs.pyi new file mode 100644 index 00000000000..f4ea6058b66 --- /dev/null +++ b/core/mocks/vfs.pyi @@ -0,0 +1,4 @@ +def mount(fsobj: Any = None, mount_point: str | None = None, *args: Any) -> list: ... + +class VfsPosix: + def __init__(root: Any = None) -> None: ... diff --git a/core/site_scons/site_tools/micropython/__init__.py b/core/site_scons/site_tools/micropython/__init__.py index d354404d088..53123440227 100644 --- a/core/site_scons/site_tools/micropython/__init__.py +++ b/core/site_scons/site_tools/micropython/__init__.py @@ -30,7 +30,7 @@ def generate(env): ) env["BUILDERS"]["CollectModules"] = SCons.Builder.Builder( - action="grep ^MP_REGISTER_MODULE $SOURCES > $TARGET" + action="grep -E '^MP_REGISTER(_EXTENSIBLE)?_MODULE' $SOURCES > $TARGET" # action="$CC -E $CCFLAGS_QSTR $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES" # " | $PYTHON $MODULECOL > $TARGET" ) @@ -43,6 +43,14 @@ def generate(env): action="$MAKECOMPRESSEDDATA $SOURCE > $TARGET", ) + env["BUILDERS"]["CollectRootPointers"] = SCons.Builder.Builder( + action="cat $SOURCES | sed -nr 's/.*(MP_REGISTER_ROOT_POINTER\\(.*\\);).*/\\1/p' > $TARGET", + ) + + env["BUILDERS"]["GenerateRootPointers"] = SCons.Builder.Builder( + action="$MAKEROOTPOINTERS $SOURCE > $TARGET" + ) + def generate_frozen_module(source, target, env, for_signature): target = str(target[0]) source = str(source[0]) diff --git a/core/src/apps/bitcoin/sign_tx/layout.py b/core/src/apps/bitcoin/sign_tx/layout.py index a4640709bc3..2f2b0ebc2ed 100644 --- a/core/src/apps/bitcoin/sign_tx/layout.py +++ b/core/src/apps/bitcoin/sign_tx/layout.py @@ -226,11 +226,9 @@ async def show_payment_request_details( async def confirm_replacement(title: str, txid: AnyBytes) -> None: - from ubinascii import hexlify - await layouts.confirm_replacement( title, - hexlify(txid).decode(), + txid.hex(), ) diff --git a/core/src/apps/bitcoin/sign_tx/omni.py b/core/src/apps/bitcoin/sign_tx/omni.py index 9e840b92f80..9aebe0d4994 100644 --- a/core/src/apps/bitcoin/sign_tx/omni.py +++ b/core/src/apps/bitcoin/sign_tx/omni.py @@ -20,7 +20,7 @@ def is_valid(data: AnyBytes) -> bool: def parse(data: AnyBytes) -> str: - from ustruct import unpack + from struct import unpack from trezor import TR from trezor.strings import format_amount, format_amount_unit diff --git a/core/src/apps/bitcoin/sign_tx/zcash_v4.py b/core/src/apps/bitcoin/sign_tx/zcash_v4.py index 3b69bfe2682..b036110bbf0 100644 --- a/core/src/apps/bitcoin/sign_tx/zcash_v4.py +++ b/core/src/apps/bitcoin/sign_tx/zcash_v4.py @@ -51,7 +51,7 @@ def hash143( coin: CoinInfo, hash_type: int, ) -> bytes: - import ustruct as struct + import struct from ..scripts import write_bip143_script_code_prefixed from ..writers import get_tx_hash, write_bytes_fixed diff --git a/core/src/apps/cardano/get_public_key.py b/core/src/apps/cardano/get_public_key.py index 1a4bb850135..f0726db8e19 100644 --- a/core/src/apps/cardano/get_public_key.py +++ b/core/src/apps/cardano/get_public_key.py @@ -1,5 +1,4 @@ from typing import TYPE_CHECKING -from ubinascii import hexlify from trezor import TR @@ -55,8 +54,8 @@ def _get_public_key( node = keychain.derive(derivation_path) - public_key = hexlify(derive_public_key(keychain, derivation_path)).decode() - chain_code = hexlify(node.chain_code()).decode() + public_key = derive_public_key(keychain, derivation_path).hex() + chain_code = node.chain_code().hex() xpub_key = public_key + chain_code node_type = HDNodeType( diff --git a/core/src/apps/common/cbor.py b/core/src/apps/common/cbor.py index 0db1ab27e7c..cd4ddcbc6a6 100644 --- a/core/src/apps/common/cbor.py +++ b/core/src/apps/common/cbor.py @@ -51,7 +51,7 @@ def _header(typ: int, l: int) -> bytes: - from ustruct import pack + from struct import pack if l < 24: return pack(">B", typ + l) diff --git a/core/src/apps/common/signverify.py b/core/src/apps/common/signverify.py index 2511aba6696..22874549a7f 100644 --- a/core/src/apps/common/signverify.py +++ b/core/src/apps/common/signverify.py @@ -29,12 +29,10 @@ def message_digest(coin: CoinInfo, message: AnyBytes) -> bytes: def decode_message(message: AnyBytes) -> str: - from ubinascii import hexlify - try: return bytes(message).decode() except UnicodeError: - return f"hex({hexlify(message).decode()})" + return f"hex({message.hex()})" def is_printable_ascii(bytestring: AnyBytes) -> bool: diff --git a/core/src/apps/ethereum/clear_signing.py b/core/src/apps/ethereum/clear_signing.py index c57d718f33b..ca100e73c2f 100644 --- a/core/src/apps/ethereum/clear_signing.py +++ b/core/src/apps/ethereum/clear_signing.py @@ -465,9 +465,7 @@ async def format( elif isinstance(value, str): return value, None, None elif isinstance(value, (bytes, bytearray)): - from ubinascii import hexlify - - return hexlify(value).decode(), None, None + return value.hex(), None, None elif isinstance(value, bool): return str(value), None, None elif isinstance(value, int): @@ -1251,8 +1249,6 @@ def callee_str() -> str: def raw_rows() -> list[DisplayedField]: """No subparsing. Show the callee and the raw hex blob.""" - from ubinascii import hexlify - to_label = TR.ethereum__subcall_to blob_label = field_definition.label if index is not None: @@ -1260,7 +1256,7 @@ def raw_rows() -> list[DisplayedField]: blob_label = f"({subcall}) {blob_label}" return [ ((to_label, callee_str(), None), None, None), - ((blob_label, hexlify(blob).decode(), None), None, None), + ((blob_label, blob.hex(), None), None, None), ] if nested: diff --git a/core/src/apps/ethereum/get_public_key.py b/core/src/apps/ethereum/get_public_key.py index c39061d3ed8..ea081d4f947 100644 --- a/core/src/apps/ethereum/get_public_key.py +++ b/core/src/apps/ethereum/get_public_key.py @@ -5,8 +5,6 @@ async def get_public_key(msg: EthereumGetPublicKey) -> EthereumPublicKey: - from ubinascii import hexlify - from trezor.messages import EthereumPublicKey, GetPublicKey from trezor.ui.layouts import show_pubkey @@ -17,6 +15,6 @@ async def get_public_key(msg: EthereumGetPublicKey) -> EthereumPublicKey: resp = await bitcoin_get_public_key.get_public_key(btc_pubkey_msg) if msg.show_display: - await show_pubkey(hexlify(resp.node.public_key).decode()) + await show_pubkey(resp.node.public_key.hex()) return EthereumPublicKey(node=resp.node, xpub=resp.xpub) diff --git a/core/src/apps/ethereum/helpers.py b/core/src/apps/ethereum/helpers.py index 5ce2c271760..b36f16ee09c 100644 --- a/core/src/apps/ethereum/helpers.py +++ b/core/src/apps/ethereum/helpers.py @@ -1,5 +1,4 @@ from typing import TYPE_CHECKING -from ubinascii import hexlify from trezor import TR @@ -36,7 +35,7 @@ def address_from_bytes( else: prefix = "" - address_hex = hexlify(address_bytes) + address_hex = address_bytes.hex().encode() writer = keccak256(prefix.encode()) writer.extend(address_hex) digest = writer.get_digest() @@ -60,17 +59,15 @@ def _maybe_upper(i: int) -> str: def bytes_from_address(address: str) -> bytes: - from ubinascii import unhexlify - from trezor import wire if len(address) == 40: - return unhexlify(address) + return bytes.fromhex(address) elif len(address) == 42: if address[0:2] not in ("0x", "0X"): raise wire.ProcessError("Ethereum: invalid beginning of an address") - return unhexlify(address[2:]) + return bytes.fromhex(address[2:]) elif len(address) == 0: return bytes() @@ -121,7 +118,7 @@ def get_type_name(field: EthereumFieldType) -> str: def decode_typed_data(data: AnyBytes, type_name: str) -> str: """Used by sign_typed_data module to show data to user.""" if type_name.startswith("bytes"): - return hexlify(data).decode() + return data.hex() elif type_name == "string": return bytes(data).decode() elif type_name == "address": diff --git a/core/src/apps/ethereum/layout.py b/core/src/apps/ethereum/layout.py index 38fe10bab2f..ba32de4a8b8 100644 --- a/core/src/apps/ethereum/layout.py +++ b/core/src/apps/ethereum/layout.py @@ -1,5 +1,4 @@ from typing import TYPE_CHECKING -from ubinascii import hexlify from trezor import TR from trezor.enums import ButtonRequestType @@ -290,7 +289,7 @@ async def require_confirm_vault_tx( account, account_path = get_account_and_path(address_n) extra_data_str: str | None = ( - "0x" + hexlify(extra_data).decode() if extra_data is not None else None + "0x" + extra_data.hex() if extra_data is not None else None ) await confirm_ethereum_vault_tx( @@ -402,11 +401,9 @@ def require_confirm_address( br_name: str | None = None, footer: str | None = None, ) -> Awaitable[None]: - from ubinascii import hexlify - from trezor.ui.layouts import confirm_address - address_hex = "0x" + hexlify(address_bytes).decode() + address_hex = "0x" + address_bytes.hex() return confirm_address( title or TR.ethereum__title_signing_address, address_hex, @@ -419,11 +416,9 @@ def require_confirm_address( async def confirm_message_hash(message_hash: bytes) -> None: - from ubinascii import hexlify - from trezor.ui.layouts import confirm_value - message_hash_hex = "0x" + hexlify(message_hash).decode() + message_hash_hex = "0x" + message_hash.hex() await confirm_value( TR.ethereum__title_confirm_message_hash, diff --git a/core/src/apps/ethereum/sc_constants.py.mako b/core/src/apps/ethereum/sc_constants.py.mako index 75839b19406..17f1f013d78 100644 --- a/core/src/apps/ethereum/sc_constants.py.mako +++ b/core/src/apps/ethereum/sc_constants.py.mako @@ -5,10 +5,8 @@ from typing import Iterator <% -from binascii import unhexlify - def fmt_addr(addr_hex: str) -> str: - data = "".join(f'\\x{b:02x}' for b in unhexlify(addr_hex)) + data = "".join(f'\\x{b:02x}' for b in bytes.fromhex(addr_hex)) return f'b"{data}"' diff --git a/core/src/apps/ethereum/staking.py b/core/src/apps/ethereum/staking.py index e02a168170e..94218296f1e 100644 --- a/core/src/apps/ethereum/staking.py +++ b/core/src/apps/ethereum/staking.py @@ -1,5 +1,4 @@ from typing import TYPE_CHECKING -from ubinascii import unhexlify from trezor.utils import BufferReader from trezor.wire import DataError @@ -13,18 +12,18 @@ from .keychain import MsgInSignTx -FUNC_SIG_STAKE = unhexlify("3a29dbae") -FUNC_SIG_UNSTAKE = unhexlify("76ec871c") -FUNC_SIG_CLAIM = unhexlify("33986ffa") +FUNC_SIG_STAKE = b"\x3a\x29\xdb\xae" +FUNC_SIG_UNSTAKE = b"\x76\xec\x87\x1c" +FUNC_SIG_CLAIM = b"\x33\x98\x6f\xfa" # addresses for pool (stake/unstake) and accounting (claim) operations ADDRESSES_POOL = ( - unhexlify("AFA848357154a6a624686b348303EF9a13F63264"), # Hoodi testnet - unhexlify("D523794C879D9eC028960a231F866758e405bE34"), # mainnet + b"\xaf\xa8\x48\x35\x71\x54\xa6\xa6\x24\x68\x6b\x34\x83\x03\xef\x9a\x13\xf6\x32\x64", # Hoodi testnet + b"\xd5\x23\x79\x4c\x87\x9d\x9e\xc0\x28\x96\x0a\x23\x1f\x86\x67\x58\xe4\x05\xbe\x34", # mainnet ) ADDRESSES_ACCOUNTING = ( - unhexlify("624087DD1904ab122A32878Ce9e933C7071F53B9"), # Hoodi testnet - unhexlify("7a7f0b3c23C23a31cFcb0c44709be70d4D545c6e"), # mainnet + b"\x62\x40\x87\xdd\x19\x04\xab\x12\x2a\x32\x87\x8c\xe9\xe9\x33\xc7\x07\x1f\x53\xb9", # Hoodi testnet + b"\x7a\x7f\x0b\x3c\x23\xc2\x3a\x31\xcf\xcb\x0c\x44\x70\x9b\xe7\x0d\x4d\x54\x5c\x6e", # mainnet ) diff --git a/core/src/apps/management/reboot_to_bootloader.py b/core/src/apps/management/reboot_to_bootloader.py index e712594da38..f62ced50cc2 100644 --- a/core/src/apps/management/reboot_to_bootloader.py +++ b/core/src/apps/management/reboot_to_bootloader.py @@ -13,8 +13,6 @@ async def install_upgrade(firmware_header: AnyBytes) -> AnyBytes: - from ubinascii import hexlify - from trezor import TR, utils, wire from trezor.ui.layouts import confirm_firmware_update @@ -38,7 +36,7 @@ async def install_upgrade(firmware_header: AnyBytes) -> AnyBytes: description=TR.reboot_to_bootloader__version_by_template.format( version_str, hdr.vendor ), - fingerprint=hexlify(hdr.fingerprint).decode(), + fingerprint=hdr.fingerprint.hex(), ) return hdr.hash diff --git a/core/src/apps/management/reset_device/layout.py b/core/src/apps/management/reset_device/layout.py index 802b3552ed0..40a6a8df665 100644 --- a/core/src/apps/management/reset_device/layout.py +++ b/core/src/apps/management/reset_device/layout.py @@ -28,7 +28,8 @@ async def _confirm_word( from trezor.ui.layouts.reset import select_word # remove duplicates - non_duplicates = list(set(share_words)) + # sort list to make UI tests independent on micropython hash function + non_duplicates = sorted(set(share_words)) # shuffle list random.shuffle(non_duplicates) # take top _NUM_OF_CHOICES words diff --git a/core/src/apps/misc/sign_identity.py b/core/src/apps/misc/sign_identity.py index 54c90c947f7..edbb0f15e6a 100644 --- a/core/src/apps/misc/sign_identity.py +++ b/core/src/apps/misc/sign_identity.py @@ -91,7 +91,7 @@ def serialize_identity_without_proto(identity: IdentityType) -> str: def get_identity_path(identity: str, index: int, num: int) -> Bip32Path: - from ustruct import pack, unpack + from struct import pack, unpack from apps.common.paths import HARDENED diff --git a/core/src/apps/nostr/sign_event.py b/core/src/apps/nostr/sign_event.py index d061a4de162..41141d82655 100644 --- a/core/src/apps/nostr/sign_event.py +++ b/core/src/apps/nostr/sign_event.py @@ -10,8 +10,6 @@ @auto_keychain(__name__) async def sign_event(msg: NostrSignEvent, keychain: Keychain) -> NostrEventSignature: - from ubinascii import hexlify - from trezor import TR from trezor.crypto.curve import bip340 from trezor.crypto.hashlib import sha256 @@ -46,7 +44,9 @@ async def sign_event(msg: NostrSignEvent, keychain: Keychain) -> NostrEventSigna ] await confirm_value(title, content, "", "nostr_sign_event", info_items=info_items) - serialized_event = f'[0,"{hexlify(pk).decode()}",{created_at},{kind},[{serialized_tags}],"{content}"]' + serialized_event = ( + f'[0,"{pk.hex()}",{created_at},{kind},[{serialized_tags}],"{content}"]' + ) event_id = sha256(serialized_event).digest() # The event signature is basically the signature of the event ID computed above diff --git a/core/src/apps/stellar/helpers.py b/core/src/apps/stellar/helpers.py index 1d877aaf141..189b8cf26d7 100644 --- a/core/src/apps/stellar/helpers.py +++ b/core/src/apps/stellar/helpers.py @@ -88,7 +88,7 @@ def _crc16_checksum(data: AnyBytes) -> bytes: Initial value changed to 0x0000 to match Stellar configuration. """ - import ustruct + import struct crc = 0x0000 polynomial = 0x1021 @@ -101,4 +101,4 @@ def _crc16_checksum(data: AnyBytes) -> bytes: if c15 ^ bit: crc ^= polynomial - return ustruct.pack(" str: elif t == StellarSCValType.SCV_BYTES: if val.bytes is None: raise DataError("Stellar: missing bytes value") - return "0x" + hexlify(val.bytes).decode() + return "0x" + val.bytes.hex() elif t == StellarSCValType.SCV_STRING: if val.string is None: raise DataError("Stellar: missing string value") @@ -404,7 +403,7 @@ def _format_sc_val(val: StellarSCVal) -> str: try: return f'"{_escape_str(bytes(val.string).decode())}"' except UnicodeError: - return "0x" + hexlify(val.string).decode() + return "0x" + val.string.hex() elif t == StellarSCValType.SCV_SYMBOL: if val.symbol is None: raise DataError("Stellar: missing symbol value") diff --git a/core/src/apps/stellar/operations/layout.py b/core/src/apps/stellar/operations/layout.py index 96b485331e6..e6fd66aa8e8 100644 --- a/core/src/apps/stellar/operations/layout.py +++ b/core/src/apps/stellar/operations/layout.py @@ -1,5 +1,4 @@ from typing import TYPE_CHECKING -from ubinascii import hexlify from trezor import TR from trezor.ui.layouts import ( @@ -381,7 +380,7 @@ async def confirm_set_options_op(op: StellarSetOptionsOp) -> None: async def confirm_claim_claimable_balance_op( op: StellarClaimClaimableBalanceOp, ) -> None: - balance_id = hexlify(op.balance_id).decode() + balance_id = op.balance_id.hex() await confirm_properties( "op_claim_claimable_balance", TR.stellar__claim_claimable_balance, diff --git a/core/src/apps/stellar/sign_tx.py b/core/src/apps/stellar/sign_tx.py index f694d7f0e24..ef24d4062f0 100644 --- a/core/src/apps/stellar/sign_tx.py +++ b/core/src/apps/stellar/sign_tx.py @@ -14,8 +14,6 @@ *[PATTERN], slip44_id=SLIP44_ID, curve=CURVE, slip21_namespaces=[[b"SLIP-0024"]] ) async def sign_tx(msg: StellarSignTx, keychain: Slip21Keychain) -> StellarSignedTx: - from ubinascii import hexlify - from trezor import TR from trezor.crypto.curve import ed25519 from trezor.crypto.hashlib import sha256 @@ -105,7 +103,7 @@ async def sign_tx(msg: StellarSignTx, keychain: Slip21Keychain) -> StellarSigned if msg.memo_hash is None: raise DataError("Stellar: Missing memo hash") writers.write_bytes_fixed(w, bytearray(msg.memo_hash), 32) - memo_confirm_text = hexlify(msg.memo_hash).decode() + memo_confirm_text = msg.memo_hash.hex() else: raise ProcessError("Stellar invalid memo type") diff --git a/core/src/apps/tron/sc_constants.py b/core/src/apps/tron/sc_constants.py index dd8d02053d3..964095eeff6 100644 --- a/core/src/apps/tron/sc_constants.py +++ b/core/src/apps/tron/sc_constants.py @@ -1,5 +1,4 @@ from micropython import const -from ubinascii import unhexlify # smart contract 'data' field lengths in bytes SC_FUNC_SIG_BYTES = const(4) @@ -10,5 +9,5 @@ # Known TRC-20/ERC-20 functions -SC_FUNC_SIG_TRANSFER = unhexlify("a9059cbb") -SC_FUNC_SIG_APPROVE = unhexlify("095ea7b3") +SC_FUNC_SIG_TRANSFER = b"\xa9\x05\x9c\xbb" +SC_FUNC_SIG_APPROVE = b"\x09\x5e\xa7\xb3" diff --git a/core/src/apps/webauthn/credential.py b/core/src/apps/webauthn/credential.py index 355ce7ede92..3ae76eeef23 100644 --- a/core/src/apps/webauthn/credential.py +++ b/core/src/apps/webauthn/credential.py @@ -1,7 +1,6 @@ -import ustruct +import struct from micropython import const from typing import TYPE_CHECKING -from ubinascii import hexlify import storage.device as storage_device from trezor import utils @@ -301,13 +300,13 @@ def account_name(self) -> str | None: elif self.user_display_name: return self.user_display_name elif self.user_id: - return hexlify(self.user_id).decode() + return self.user_id.hex() else: return None def _private_key(self) -> bytes: path = [HARDENED | 10022, HARDENED | int.from_bytes(self.id[:4], "big")] + [ - HARDENED | i for i in ustruct.unpack(">4L", self.id[-16:]) + HARDENED | i for i in struct.unpack(">4L", self.id[-16:]) ] node = seed.derive_node_without_passphrase(path, _CURVE_NAME[self.curve]) return node.private_key() @@ -424,7 +423,7 @@ def generate_key_handle(self) -> None: self.node = seed.derive_node_without_passphrase(nodepath, "nist256p1") # first half of keyhandle is keypath - keypath = ustruct.pack("<8L", *path) + keypath = struct.pack("<8L", *path) # second half of keyhandle is a hmac of rp_id_hash and keypath mac = hmac(hmac.SHA256, self.node.private_key(), self.rp_id_hash) @@ -439,8 +438,8 @@ def app_name(self) -> str: if app is not None: return app.label - start = hexlify(self.rp_id_hash[:4]).decode() - end = hexlify(self.rp_id_hash[-4:]).decode() + start = self.rp_id_hash[:4].hex() + end = self.rp_id_hash[-4:].hex() return f"{start}...{end}" @staticmethod @@ -473,7 +472,7 @@ def _node_from_key_handle( # unpack the keypath from the first half of keyhandle keypath = keyhandle[:32] - path = ustruct.unpack(pathformat, keypath) + path = struct.unpack(pathformat, keypath) # check high bit for hardened keys for i in path: diff --git a/core/src/apps/webauthn/fido2.py b/core/src/apps/webauthn/fido2.py index a579223e3e9..fb2a82b4065 100644 --- a/core/src/apps/webauthn/fido2.py +++ b/core/src/apps/webauthn/fido2.py @@ -1,5 +1,5 @@ +import struct import uctypes -import ustruct import utime from micropython import const from typing import TYPE_CHECKING @@ -1421,7 +1421,7 @@ def _msg_authenticate_sign( # get next counter ctr = cred.next_signature_counter() - ctrbuf = ustruct.pack(">L", ctr) + ctrbuf = struct.pack(">L", ctr) # sign the input data together with counter sig = cred.sign((rp_id_hash, flags, ctrbuf, challenge)) @@ -1437,15 +1437,15 @@ def _msg_authenticate_sign( def msg_error(cid: int, code: int) -> Cmd: - return Cmd(cid, _CMD_MSG, ustruct.pack(">H", code)) + return Cmd(cid, _CMD_MSG, struct.pack(">H", code)) def cmd_error(cid: int, code: int) -> Cmd: - return Cmd(cid, _CMD_ERROR, ustruct.pack(">B", code)) + return Cmd(cid, _CMD_ERROR, struct.pack(">B", code)) def cbor_error(cid: int, code: int) -> Cmd: - return Cmd(cid, _CMD_CBOR, ustruct.pack(">B", code)) + return Cmd(cid, _CMD_CBOR, struct.pack(">B", code)) def credentials_from_descriptor_list( diff --git a/core/src/prof/__main__.py b/core/src/prof/__main__.py index cc3240a3804..70dd8a3d6f6 100644 --- a/core/src/prof/__main__.py +++ b/core/src/prof/__main__.py @@ -1,10 +1,11 @@ import micropython import sys +import vfs +from io import open +from os import getenv from typing import TYPE_CHECKING, Any, Callable, TypeAlias import coveragedata -from uio import open -from uos import getenv if TYPE_CHECKING: from types import FrameType @@ -119,4 +120,7 @@ def trace_handler(frame: FrameType, event: str, _arg: Any) -> TraceFunction: import main # noqa: F401 finally: print("\n------------------ script exited ------------------") + # enable filesystem access for frozen emulator + if len(vfs.mount()) == 0: + vfs.mount(vfs.VfsPosix(), "/") __prof__.write_data() diff --git a/core/src/storage/device.py b/core/src/storage/device.py index 343de482668..29125fb30b3 100644 --- a/core/src/storage/device.py +++ b/core/src/storage/device.py @@ -103,12 +103,11 @@ def is_initialized() -> bool: def get_device_id() -> str: from trezorcrypto import random # avoid pulling in trezor.crypto - from ubinascii import hexlify dev_id = common.get(_NAMESPACE, DEVICE_ID, public=True) if not dev_id: # _new_device_id - new_dev_id_str = hexlify(random.bytes(12)).decode().upper() + new_dev_id_str = random.bytes(12).hex().upper() dev_id = new_dev_id_str.encode() common.set(_NAMESPACE, DEVICE_ID, dev_id, public=True) return dev_id.decode() diff --git a/core/src/trezor/crypto/base32.py b/core/src/trezor/crypto/base32.py index 49360665b17..ef4d5a368a0 100644 --- a/core/src/trezor/crypto/base32.py +++ b/core/src/trezor/crypto/base32.py @@ -14,7 +14,7 @@ def encode(s: AnyBytes) -> str: - from ustruct import unpack + from struct import unpack s = bytes(s) quanta, leftover = divmod(len(s), 5) @@ -58,8 +58,6 @@ def encode(s: AnyBytes) -> str: def decode(s: str) -> bytes: - from ubinascii import unhexlify - data = s.encode() _, leftover = divmod(len(data), 8) if leftover: @@ -85,11 +83,11 @@ def decode(s: str) -> bytes: acc += _b32rev[c] << shift shift -= 5 if shift < 0: - parts.append(unhexlify((f"{acc:010x}").encode())) + parts.append(bytes.fromhex(f"{acc:010x}")) acc = 0 shift = 35 # Process the last, partial quanta - last = unhexlify(bytes(f"{acc:010x}", "ascii")) + last = bytes.fromhex(f"{acc:010x}") if padchars == 0: last = b"" # No characters elif padchars == 1: diff --git a/core/src/trezor/loop.py b/core/src/trezor/loop.py index 95ba235a777..753a4e73a43 100644 --- a/core/src/trezor/loop.py +++ b/core/src/trezor/loop.py @@ -7,8 +7,8 @@ See `schedule`, `run`, and syscalls `sleep`, `wait`, `signal` and `race`. """ +import timeq import utime -import utimeq from typing import TYPE_CHECKING from trezor import io, log @@ -28,7 +28,7 @@ T = 0 # tasks scheduled for execution in the future -_queue = utimeq.utimeq(64) +_queue = timeq.timeq(64) # tasks paused on I/O _paused: dict[int, set[Task]] = {} diff --git a/core/src/trezor/utils.py b/core/src/trezor/utils.py index 0e49c436ffd..f8810d02f15 100644 --- a/core/src/trezor/utils.py +++ b/core/src/trezor/utils.py @@ -89,10 +89,10 @@ from trezorutils import estimate_unused_stack, zero_unused_stack # noqa: F401 if EMULATOR: - import uos + import os - DISABLE_ANIMATION = uos.getenv("TREZOR_DISABLE_ANIMATION") == "1" - LOG_MEMORY = uos.getenv("TREZOR_LOG_MEMORY") == "1" + DISABLE_ANIMATION = os.getenv("TREZOR_DISABLE_ANIMATION") == "1" + LOG_MEMORY = os.getenv("TREZOR_LOG_MEMORY") == "1" else: from trezorutils import DISABLE_ANIMATION @@ -236,14 +236,10 @@ def __init__(self, ctx: HashContext) -> None: self.data = "" def update(self, data: bytes) -> None: - from ubinascii import hexlify - self.ctx.update(data) - self.data += hexlify(data).decode() + " " + self.data += data.hex() + " " def digest(self) -> bytes: - from ubinascii import hexlify - from trezor import log digest = self.ctx.digest() @@ -251,7 +247,7 @@ def digest(self) -> bytes: __name__, "%s hash: %s, data: %s", self.ctx.__class__.__name__, - hexlify(digest).decode(), + digest.hex(), self.data, ) return digest @@ -410,9 +406,7 @@ def hexlify_if_bytes(data: str | bytes | bytearray | memoryview) -> str: if isinstance(data, str): return data elif isinstance(data, (bytes, bytearray, memoryview)): - from ubinascii import hexlify - - return hexlify(data).decode() + return data.hex() else: raise TypeError("Expected str, bytes, bytearray, or memoryview") diff --git a/core/src/trezor/wire/codec/codec_v1.py b/core/src/trezor/wire/codec/codec_v1.py index 610b58ab329..43e0fb67317 100644 --- a/core/src/trezor/wire/codec/codec_v1.py +++ b/core/src/trezor/wire/codec/codec_v1.py @@ -1,4 +1,4 @@ -import ustruct +import struct from micropython import const from typing import TYPE_CHECKING @@ -33,7 +33,7 @@ async def read_message( iface.read(report, 0) if report[0] != _REP_MARKER: raise CodecError("Invalid magic") - _, magic1, magic2, mtype, msize = ustruct.unpack(_REP_INIT, report) + _, magic1, magic2, mtype, msize = struct.unpack(_REP_INIT, report) if magic1 != _REP_MAGIC or magic2 != _REP_MAGIC: raise CodecError("Invalid magic") @@ -88,7 +88,7 @@ async def write_message(iface: WireInterface, mtype: int, mdata: AnyBytes) -> No # prepare the report buffer with header data report = bytearray(iface.TX_PACKET_LEN) repofs = _REP_INIT_DATA - ustruct.pack_into( + struct.pack_into( _REP_INIT, report, 0, _REP_MARKER, _REP_MAGIC, _REP_MAGIC, mtype, msize ) diff --git a/core/src/trezor/wire/thp/memory_manager.py b/core/src/trezor/wire/thp/memory_manager.py index 6b5eba54814..a8aa3d04cfe 100644 --- a/core/src/trezor/wire/thp/memory_manager.py +++ b/core/src/trezor/wire/thp/memory_manager.py @@ -1,6 +1,6 @@ from micropython import const +from struct import pack_into from typing import TYPE_CHECKING -from ustruct import pack_into from trezor import protobuf, wire from trezorthp import APP_HEADER_LEN, SEND_BUFFER_OVERHEAD diff --git a/core/src/trezor/wire/thp/pairing_context.py b/core/src/trezor/wire/thp/pairing_context.py index 38ccd449d56..bd0c5eea4d5 100644 --- a/core/src/trezor/wire/thp/pairing_context.py +++ b/core/src/trezor/wire/thp/pairing_context.py @@ -1,5 +1,4 @@ from typing import TYPE_CHECKING -from ubinascii import hexlify from trezor import loop, protobuf, workflow from trezor.wire import context, message_handler, protocol_common @@ -167,7 +166,7 @@ def _get_code_code_entry_str(self) -> str: def _get_code_qr_code_str(self) -> str: if self.code_qr_code is not None: - code_str = (hexlify(self.code_qr_code)).decode("utf-8") + code_str = self.code_qr_code.hex() if __debug__: log.debug( __name__, "code_qr_code_hexlified: %s", code_str, iface=self.iface diff --git a/core/tests/common.py b/core/tests/common.py index cbb67e85c85..f9c8ad39d28 100644 --- a/core/tests/common.py +++ b/core/tests/common.py @@ -1,6 +1,5 @@ import unittest # noqa: F401 from typing import Any, Awaitable -from ubinascii import hexlify, unhexlify # noqa: F401 from trezor import utils # noqa: F401 from trezor.wire import context diff --git a/core/tests/ethereum_common.py b/core/tests/ethereum_common.py index 407e0baad4f..7101d17dba0 100644 --- a/core/tests/ethereum_common.py +++ b/core/tests/ethereum_common.py @@ -1,5 +1,3 @@ -from ubinascii import unhexlify # noqa: F401 - from trezor import messages, protobuf from trezor.crypto import cosi from trezor.crypto.curve import ed25519 diff --git a/core/tests/test_apps.bitcoin.address.py b/core/tests/test_apps.bitcoin.address.py index a6ebbe413d5..70791905633 100644 --- a/core/tests/test_apps.bitcoin.address.py +++ b/core/tests/test_apps.bitcoin.address.py @@ -31,7 +31,7 @@ class TestAddress(unittest.TestCase): def test_p2wpkh_in_p2sh_address(self): coin = coins.by_name("Testnet") address = address_p2wpkh_in_p2sh( - unhexlify( + bytes.fromhex( "03a1af804ac108a8a51782198c2d034b28bf90c8803f5a53f76276fa69a4eae77f" ), coin, @@ -62,7 +62,7 @@ def test_p2wpkh_address(self): # test data from https://bc-2.jp/tools/bech32demo/index.html coin = coins.by_name("Testnet") address = address_p2wpkh( - unhexlify( + bytes.fromhex( "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" ), coin, @@ -73,7 +73,7 @@ def test_p2sh_address(self): coin = coins.by_name("Testnet") address = address_p2sh( - unhexlify("7a55d61848e77ca266e79a39bfc85c580a6426c9"), coin + bytes.fromhex("7a55d61848e77ca266e79a39bfc85c580a6426c9"), coin ) self.assertEqual(address, "2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp") @@ -81,7 +81,7 @@ def test_p2wsh_address(self): coin = coins.by_name("Testnet") # pubkey OP_CHECKSIG - script = unhexlify( + script = bytes.fromhex( "210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac" ) h = HashWriter(sha256()) @@ -97,7 +97,7 @@ def test_p2wsh_in_p2sh_address(self): # test data from Mastering Bitcoin address = _address_p2wsh_in_p2sh( - unhexlify( + bytes.fromhex( "9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73" ), coin, @@ -110,19 +110,19 @@ def test_multisig_address_p2sh(self): # # commented out because uncompressed public keys are not supported # coin = coins.by_name('Bitcoin') # pubkeys = [ - # unhexlify('04a882d414e478039cd5b52a92ffb13dd5e6bd4515497439dffd691a0f12af9575fa349b5694ed3155b136f09e63975a1700c9f4d4df849323dac06cf3bd6458cd'), - # unhexlify('046ce31db9bdd543e72fe3039a1f1c047dab87037c36a669ff90e28da1848f640de68c2fe913d363a51154a0c62d7adea1b822d05035077418267b1a1379790187'), - # unhexlify('0411ffd36c70776538d079fbae117dc38effafb33304af83ce4894589747aee1ef992f63280567f52f5ba870678b4ab4ff6c8ea600bd217870a8b4f1f09f3a8e83'), + # bytes.fromhex('04a882d414e478039cd5b52a92ffb13dd5e6bd4515497439dffd691a0f12af9575fa349b5694ed3155b136f09e63975a1700c9f4d4df849323dac06cf3bd6458cd'), + # bytes.fromhex('046ce31db9bdd543e72fe3039a1f1c047dab87037c36a669ff90e28da1848f640de68c2fe913d363a51154a0c62d7adea1b822d05035077418267b1a1379790187'), + # bytes.fromhex('0411ffd36c70776538d079fbae117dc38effafb33304af83ce4894589747aee1ef992f63280567f52f5ba870678b4ab4ff6c8ea600bd217870a8b4f1f09f3a8e83'), # ] # address = _address_multisig_p2sh(pubkeys, 2, coin.address_type_p2sh) # self.assertEqual(address, '347N1Thc213QqfYCz3PZkjoJpNv5b14kBd') coin = coins.by_name("Bitcoin") pubkeys = [ - unhexlify( + bytes.fromhex( "02fe6f0a5a297eb38c391581c4413e084773ea23954d93f7753db7dc0adc188b2f" ), - unhexlify( + bytes.fromhex( "02ff12471208c14bd580709cb2358d98975247d8765f92bc25eab3b2763ed605f8" ), ] @@ -138,10 +138,10 @@ def test_multisig_address_p2wsh_in_p2sh(self): # https://bitcoin.stackexchange.com/questions/62656/generate-a-p2sh-p2wsh-address-and-spend-output-sent-to-it coin = coins.by_name("Testnet") pubkeys = [ - unhexlify( + bytes.fromhex( "020b020e27e49f049eac10010506499a84e1d59a500cd3680e9ded580df9a107b0" ), - unhexlify( + bytes.fromhex( "0320ce424c6d61f352ccfea60d209651672cfb03b2dc77d1d64d3ba519aec756ae" ), ] @@ -343,7 +343,7 @@ def test_address_mac(self): for coin_name, address_n, address, mac in VECTORS: coin = coins.by_name(coin_name) - mac = unhexlify(mac) + mac = bytes.fromhex(mac) keychain = Keychain( seed, coin.curve_name, diff --git a/core/tests/test_apps.bitcoin.address_grs.py b/core/tests/test_apps.bitcoin.address_grs.py index 724e8f95b86..431963a27e1 100644 --- a/core/tests/test_apps.bitcoin.address_grs.py +++ b/core/tests/test_apps.bitcoin.address_grs.py @@ -74,7 +74,7 @@ def test_p2sh_address(self): coin = coins.by_name("Groestlcoin Testnet") address = address_p2sh( - unhexlify("7a55d61848e77ca266e79a39bfc85c580a6426c9"), coin + bytes.fromhex("7a55d61848e77ca266e79a39bfc85c580a6426c9"), coin ) self.assertEqual(address, "2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e") diff --git a/core/tests/test_apps.bitcoin.change_detector.py b/core/tests/test_apps.bitcoin.change_detector.py index 46193dbbb2f..4e22d1c5fe7 100644 --- a/core/tests/test_apps.bitcoin.change_detector.py +++ b/core/tests/test_apps.bitcoin.change_detector.py @@ -12,10 +12,10 @@ depth=2, fingerprint=50263508, child_num=0, - chain_code=unhexlify( + chain_code=bytes.fromhex( "8eb1f96a45dcb693dbad61f5184871d999127a37f1b0d4dae9964eaf3fb0e15b" ), - public_key=unhexlify( + public_key=bytes.fromhex( "03922315cd2d2d874e4c55add2e0ea41af9c2957f02c0abe0f55285d364a067b61" ), ) @@ -25,10 +25,10 @@ depth=2, fingerprint=50263508, child_num=1, - chain_code=unhexlify( + chain_code=bytes.fromhex( "acad50a7e52e44841d42bec6886df516974f8d366bc471a8515dfc69a6692700" ), - public_key=unhexlify( + public_key=bytes.fromhex( "02e6f3bf3093b45705e3d838490377e0d99eed911ca01990d1e94acd445dee59e8" ), ) @@ -38,10 +38,10 @@ depth=2, fingerprint=50263508, child_num=2, - chain_code=unhexlify( + chain_code=bytes.fromhex( "5204b124a264b0bbf86360e365f0c9a0cb6e3ea57dda97196af015d64ccfa6b1" ), - public_key=unhexlify( + public_key=bytes.fromhex( "021cd5d138ba442c7f8ee9a2b8f4e254dc599a57d42c69b7194074135a0ba82926" ), ) diff --git a/core/tests/test_apps.bitcoin.ownership_proof.py b/core/tests/test_apps.bitcoin.ownership_proof.py index efaab336d77..ab5688bdc43 100644 --- a/core/tests/test_apps.bitcoin.ownership_proof.py +++ b/core/tests/test_apps.bitcoin.ownership_proof.py @@ -40,7 +40,7 @@ def test_p2wpkh_gen_proof(self): ownership_id = ownership.get_identifier(script_pubkey, keychain) self.assertEqual( ownership_id, - unhexlify( + bytes.fromhex( "a122407efc198211c81af4450f40b235d54775efd934d16b9e31c6ce9bad5707" ), ) @@ -57,13 +57,13 @@ def test_p2wpkh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "3045022100c0dc28bb563fc5fea76cacff75dba9cb4122412faae01937cdebccfb065f9a7002202e980bfbd8a434a7fc4cd2ca49da476ce98ca097437f8159b1a386b41fcdfac5" ), ) self.assertEqual( proof, - unhexlify( + bytes.fromhex( "534c00190001a122407efc198211c81af4450f40b235d54775efd934d16b9e31c6ce9bad57070002483045022100c0dc28bb563fc5fea76cacff75dba9cb4122412faae01937cdebccfb065f9a7002202e980bfbd8a434a7fc4cd2ca49da476ce98ca097437f8159b1a386b41fcdfac50121032ef68318c8f6aaa0adec0199c69901f0db7d3485eb38d9ad235221dc3d61154b" ), ) @@ -92,7 +92,7 @@ def test_p2wpkh_in_p2sh_gen_proof(self): self.assertEqual( ownership_id, - unhexlify( + bytes.fromhex( "92caf0b8daf78f1d388dbbceaec34bd2dabc31b217e32343663667f6694a3f46" ), ) @@ -109,13 +109,13 @@ def test_p2wpkh_in_p2sh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "304402207f1003c59661ddf564af2e10d19ad8d6a1a47ad30e7052197d95fd65d186a67802205f0a804509980fec1b063554aadd8fb871d7c9fe934087cba2da09cbeff8531c" ), ) self.assertEqual( proof, - unhexlify( + bytes.fromhex( "534c0019010192caf0b8daf78f1d388dbbceaec34bd2dabc31b217e32343663667f6694a3f4617160014e0cffbee1925a411844f44c3b8d81365ab51d0360247304402207f1003c59661ddf564af2e10d19ad8d6a1a47ad30e7052197d95fd65d186a67802205f0a804509980fec1b063554aadd8fb871d7c9fe934087cba2da09cbeff8531c012103a961687895a78da9aef98eed8e1f2a3e91cfb69d2f3cf11cbd0bb1773d951928" ), ) @@ -143,7 +143,7 @@ def test_p2tr_gen_proof(self): ownership_id = ownership.get_identifier(script_pubkey, keychain) self.assertEqual( ownership_id, - unhexlify( + bytes.fromhex( "dc18066224b9e30e306303436dc18ab881c7266c13790350a3fe415e438135ec" ), ) @@ -160,13 +160,13 @@ def test_p2tr_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "647d6af883107a870417e808abe424882bd28ee04a28ba85a7e99400e1b9485075733695964c2a0fa02d4439ab80830e9566ccbd10f2597f5513eff9f03a0497" ), ) self.assertEqual( proof, - unhexlify( + bytes.fromhex( "534c00190001dc18066224b9e30e306303436dc18ab881c7266c13790350a3fe415e438135ec000140647d6af883107a870417e808abe424882bd28ee04a28ba85a7e99400e1b9485075733695964c2a0fa02d4439ab80830e9566ccbd10f2597f5513eff9f03a0497" ), ) @@ -194,7 +194,7 @@ def test_p2pkh_gen_proof(self): ownership_id = ownership.get_identifier(script_pubkey, keychain) self.assertEqual( ownership_id, - unhexlify( + bytes.fromhex( "ccc49ac5fede0efc80725fbda8b763d4e62a221c51cc5425076cffa7722c0bda" ), ) @@ -211,13 +211,13 @@ def test_p2pkh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "3045022100e818002d0a85438a7f2140503a6aa0a6af6002fa956d0101fd3db24e776e546f0220430fd59dc1498bc96ab6e71a4829b60224828cf1fc35edc98e0973db203ca3f0" ), ) self.assertEqual( proof, - unhexlify( + bytes.fromhex( "534c00190001ccc49ac5fede0efc80725fbda8b763d4e62a221c51cc5425076cffa7722c0bda6b483045022100e818002d0a85438a7f2140503a6aa0a6af6002fa956d0101fd3db24e776e546f0220430fd59dc1498bc96ab6e71a4829b60224828cf1fc35edc98e0973db203ca3f0012102f63159e21fbcb54221ec993def967ad2183a9c243c8bff6e7d60f4d5ed3b386500" ), ) @@ -240,8 +240,8 @@ def test_p2wpkh_verify_proof(self): commitment_data = b"" # Proof for "all all ... all" seed without passphrase. - script_pubkey = unhexlify("0014b2f771c370ccf219cd3059cda92bdf7f00cf2103") - proof = unhexlify( + script_pubkey = bytes.fromhex("0014b2f771c370ccf219cd3059cda92bdf7f00cf2103") + proof = bytes.fromhex( "534c00190001a122407efc198211c81af4450f40b235d54775efd934d16b9e31c6ce9bad57070002483045022100c0dc28bb563fc5fea76cacff75dba9cb4122412faae01937cdebccfb065f9a7002202e980bfbd8a434a7fc4cd2ca49da476ce98ca097437f8159b1a386b41fcdfac50121032ef68318c8f6aaa0adec0199c69901f0db7d3485eb38d9ad235221dc3d61154b" ) self.assertTrue( @@ -263,10 +263,10 @@ def test_p2tr_verify_proof(self): commitment_data = b"" # Proof for "all all ... all" seed without passphrase. - script_pubkey = unhexlify( + script_pubkey = bytes.fromhex( "51204102897557de0cafea0a8401ea5b59668eccb753e4b100aebe6a19609f3cc79f" ) - proof = unhexlify( + proof = bytes.fromhex( "534c00190001dc18066224b9e30e306303436dc18ab881c7266c13790350a3fe415e438135ec0001401b553e5b9cc787b531bbc78417aea901272b4ea905136a2babc4d6ca471549743b5e0e39ddc14e620b254e42faa7f6d5bd953e97aa231d764d21bc5a58e8b7d9" ) self.assertTrue( @@ -322,19 +322,19 @@ def test_p2wsh_gen_proof(self): ] self.assertEqual( ownership_ids[0], - unhexlify( + bytes.fromhex( "309c4ffec5c228cc836b51d572c0a730dbabd39df9f01862502ac9eabcdeb94a" ), ) self.assertEqual( ownership_ids[1], - unhexlify( + bytes.fromhex( "46307177b959c48bf2eb516e0463bb651aad388c7f8f597320df7854212fa344" ), ) self.assertEqual( ownership_ids[2], - unhexlify( + bytes.fromhex( "3892f9573e08cedff9160b243759520733a980fed45b131a8bba171317ae5d94" ), ) @@ -352,7 +352,7 @@ def test_p2wsh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "30450221009d8cd2d792633732b3a406ea86072e94c72c0d1ffb5ddde466993ee2142eeef502206fa9c6273ab35400ebf689028ebcf8d2031edb3326106339e92d499652dc4303" ), ) @@ -371,13 +371,13 @@ def test_p2wsh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "304402205fae1218bc4600ad6c28b6093e8f3757603681b024e60f1d92fca579bfce210b022011d6f1c6ef1c7f7601f635ed237dafc774386dd9f4be0aef85e3af3f095d8a92" ), ) self.assertEqual( proof, - unhexlify( + bytes.fromhex( "534c00190003309c4ffec5c228cc836b51d572c0a730dbabd39df9f01862502ac9eabcdeb94a46307177b959c48bf2eb516e0463bb651aad388c7f8f597320df7854212fa3443892f9573e08cedff9160b243759520733a980fed45b131a8bba171317ae5d940004004830450221009d8cd2d792633732b3a406ea86072e94c72c0d1ffb5ddde466993ee2142eeef502206fa9c6273ab35400ebf689028ebcf8d2031edb3326106339e92d499652dc43030147304402205fae1218bc4600ad6c28b6093e8f3757603681b024e60f1d92fca579bfce210b022011d6f1c6ef1c7f7601f635ed237dafc774386dd9f4be0aef85e3af3f095d8a9201695221032ef68318c8f6aaa0adec0199c69901f0db7d3485eb38d9ad235221dc3d61154b2103025324888e429ab8e3dbaf1f7802648b9cd01e9b418485c5fa4c1b9b5700e1a621033057150eb57e2b21d69866747f3d377e928f864fa88ecc5ddb1c0e501cce3f8153ae" ), ) @@ -425,7 +425,7 @@ def test_p2wsh_in_p2sh_gen_proof(self): ownership_ids = [b"\x00" * 32, b"\x01" * 32, b"\x02" * 32, ownership_id] self.assertEqual( ownership_id, - unhexlify( + bytes.fromhex( "66f99db388dfa7ae137f7bdb5f0004b4d6968014921cfaff1fec042e3bb83ae0" ), ) @@ -443,7 +443,7 @@ def test_p2wsh_in_p2sh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "30450221008c2c61ac2b50fd5f644baf5e8815b41caaf41d3b085d6e79c1ab38ab9ff4ef0702206742f837eddd4484ebf642e0bcb9621fe39165d3c9d62706bb01b2a8d854fb39" ), ) @@ -462,7 +462,7 @@ def test_p2wsh_in_p2sh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "304402200f5ec86b369f6a980a237944a1a06e6615afb147c6d84baf28cd1b8a58faf52702205614240e1582adeaa84685398a24d3678d0781371678b402b290ae3de3e058ee" ), ) @@ -481,13 +481,13 @@ def test_p2wsh_in_p2sh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "304402201ce53fcd797b6f5ceefa839817d6285551ff420457503ae2dab3f90ca1f6f2330220522f030423c22d5582c4f8fe243839031f584642ba5c085af712145d1e8146b7" ), ) self.assertEqual( proof, - unhexlify( + bytes.fromhex( "534c0019000400000000000000000000000000000000000000000000000000000000000000000101010101010101010101010101010101010101010101010101010101010101020202020202020202020202020202020202020202020202020202020202020266f99db388dfa7ae137f7bdb5f0004b4d6968014921cfaff1fec042e3bb83ae0232200208c256ed80a97a421656daa1468f6d4d43f475cb52ed79532d8bcb3155182981205004830450221008c2c61ac2b50fd5f644baf5e8815b41caaf41d3b085d6e79c1ab38ab9ff4ef0702206742f837eddd4484ebf642e0bcb9621fe39165d3c9d62706bb01b2a8d854fb390147304402200f5ec86b369f6a980a237944a1a06e6615afb147c6d84baf28cd1b8a58faf52702205614240e1582adeaa84685398a24d3678d0781371678b402b290ae3de3e058ee0147304402201ce53fcd797b6f5ceefa839817d6285551ff420457503ae2dab3f90ca1f6f2330220522f030423c22d5582c4f8fe243839031f584642ba5c085af712145d1e8146b701ad5321032922ce9b0b71ae2d2d8a7f239610ae8226e0fb8c0f445ec4c88cf9aa4787f44b21028373a1cdb9a1afbc67e57f75eeea1f53e7210ae8ec4b3441a5f2bc4a250b663c21028ab4c06e3ad19053b370eff097697d4cb6d3738712ebcdcdc27c58a5639ac3aa2103e3247fab300aeba459257e4605245f85378ecbfe092ca3bc55ec1259baa456f521023b0d8d97398d97c4dba10f788344abd4bd1058ad3959724d32079ad04bdbde8a55ae" ), ) @@ -535,7 +535,7 @@ def test_p2sh_gen_proof(self): ownership_ids = [b"\x00" * 32, ownership_id] self.assertEqual( ownership_id, - unhexlify( + bytes.fromhex( "ce4ee8298ad105c3495a1d2b620343133521ab34de2450deeb32eec39475fef4" ), ) @@ -553,7 +553,7 @@ def test_p2sh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "3044022058091b367ab67281963029435046abcb51057d143077a36737780a7cbcd6c1af02202f54147645b970c60b5b631b233ed93c15304294a4214b2c44b57db84815ca14" ), ) @@ -572,13 +572,13 @@ def test_p2sh_gen_proof(self): ) self.assertEqual( signature, - unhexlify( + bytes.fromhex( "304402200d8f270ea9a80678f266b3fbe6e4aa59aab46b440d8066dcf46fb46a4beaf58202201198d73e355158ebf532ca6527e28ea97b79594e016a65c7a0c68813c26271ff" ), ) self.assertEqual( proof, - unhexlify( + bytes.fromhex( "534c001900020000000000000000000000000000000000000000000000000000000000000000ce4ee8298ad105c3495a1d2b620343133521ab34de2450deeb32eec39475fef4d900473044022058091b367ab67281963029435046abcb51057d143077a36737780a7cbcd6c1af02202f54147645b970c60b5b631b233ed93c15304294a4214b2c44b57db84815ca140147304402200d8f270ea9a80678f266b3fbe6e4aa59aab46b440d8066dcf46fb46a4beaf58202201198d73e355158ebf532ca6527e28ea97b79594e016a65c7a0c68813c26271ff014752210203ed6187880ae932660086e55d4561a57952dd200aa3ed2aa66b73e5723a0ce7210360e7f32fd3c8dee27a166f6614c598929699ee66acdcbda5fb24571bf2ae1ca052ae00" ), ) diff --git a/core/tests/test_apps.bitcoin.segwit.bip143.native_p2wpkh.py b/core/tests/test_apps.bitcoin.segwit.bip143.native_p2wpkh.py index b93e7658020..e28bb392cc3 100644 --- a/core/tests/test_apps.bitcoin.segwit.bip143.native_p2wpkh.py +++ b/core/tests/test_apps.bitcoin.segwit.bip143.native_p2wpkh.py @@ -27,7 +27,7 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase): inp1 = TxInput( address_n=[0], # Trezor expects hash in reversed format - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "9f96ade4b41d5433f4eda31e1738ec2b36f6e7d1420d94a6af99801a88f7f7ff" ), prev_index=0, @@ -39,7 +39,7 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase): inp2 = TxInput( address_n=[1], # Trezor expects hash in reversed format - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "8ac60eb9575db5b2d987e29f301b5b819ea83a5c6579d282d189cc04b8e151ef" ), prev_index=1, @@ -70,8 +70,8 @@ def test_prevouts(self): sig_hasher.add_input(self.inp2, b"") prevouts_hash = get_tx_hash(sig_hasher.h_prevouts, double=coin.sign_hash_double) self.assertEqual( - hexlify(prevouts_hash), - b"96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37", + prevouts_hash.hex(), + "96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37", ) def test_sequence(self): @@ -83,8 +83,8 @@ def test_sequence(self): sig_hasher.h_sequences, double=coin.sign_hash_double ) self.assertEqual( - hexlify(sequence_hash), - b"52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b", + sequence_hash.hex(), + "52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b", ) def test_outputs(self): @@ -98,8 +98,8 @@ def test_outputs(self): outputs_hash = get_tx_hash(sig_hasher.h_outputs, double=coin.sign_hash_double) self.assertEqual( - hexlify(outputs_hash), - b"863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5", + outputs_hash.hex(), + "863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5", ) def test_preimage_testdata(self): @@ -127,8 +127,8 @@ def test_preimage_testdata(self): self.inp2, [node.public_key()], 1, self.tx, coin, SigHashType.SIGHASH_ALL ) self.assertEqual( - hexlify(result), - b"2fa3f1351618b2532228d7182d3221d95c21fd3d496e7e22e9ded873cf022a8b", + result.hex(), + "2fa3f1351618b2532228d7182d3221d95c21fd3d496e7e22e9ded873cf022a8b", ) diff --git a/core/tests/test_apps.bitcoin.segwit.bip143.p2wpkh_in_p2sh.py b/core/tests/test_apps.bitcoin.segwit.bip143.p2wpkh_in_p2sh.py index a5fcad4ebbd..4c6c549c3f3 100644 --- a/core/tests/test_apps.bitcoin.segwit.bip143.p2wpkh_in_p2sh.py +++ b/core/tests/test_apps.bitcoin.segwit.bip143.p2wpkh_in_p2sh.py @@ -27,7 +27,7 @@ class TestSegwitBip143(unittest.TestCase): inp1 = TxInput( address_n=[0], # Trezor expects hash in reversed format - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "77541aeb3c4dac9260b68f74f44c973081a9d4cb2ebe8038b2d70faa201b6bdb" ), prev_index=1, @@ -57,8 +57,8 @@ def test_bip143_prevouts(self): sig_hasher.add_input(self.inp1, b"") prevouts_hash = get_tx_hash(sig_hasher.h_prevouts, double=coin.sign_hash_double) self.assertEqual( - hexlify(prevouts_hash), - b"b0287b4a252ac05af83d2dcef00ba313af78a3e9c329afa216eb3aa2a7b4613a", + prevouts_hash.hex(), + "b0287b4a252ac05af83d2dcef00ba313af78a3e9c329afa216eb3aa2a7b4613a", ) def test_bip143_sequence(self): @@ -69,8 +69,8 @@ def test_bip143_sequence(self): sig_hasher.h_sequences, double=coin.sign_hash_double ) self.assertEqual( - hexlify(sequence_hash), - b"18606b350cd8bf565266bc352f0caddcf01e8fa789dd8a15386327cf8cabe198", + sequence_hash.hex(), + "18606b350cd8bf565266bc352f0caddcf01e8fa789dd8a15386327cf8cabe198", ) def test_bip143_outputs(self): @@ -84,8 +84,8 @@ def test_bip143_outputs(self): outputs_hash = get_tx_hash(sig_hasher.h_outputs, double=coin.sign_hash_double) self.assertEqual( - hexlify(outputs_hash), - b"de984f44532e2173ca0d64314fcefe6d30da6f8cf27bafa706da61df8a226c83", + outputs_hash.hex(), + "de984f44532e2173ca0d64314fcefe6d30da6f8cf27bafa706da61df8a226c83", ) def test_bip143_preimage_testdata(self): @@ -109,8 +109,8 @@ def test_bip143_preimage_testdata(self): self.inp1, [node.public_key()], 1, self.tx, coin, SigHashType.SIGHASH_ALL ) self.assertEqual( - hexlify(result), - b"6e28aca7041720995d4acf59bbda64eef5d6f23723d23f2e994757546674bbd9", + result.hex(), + "6e28aca7041720995d4acf59bbda64eef5d6f23723d23f2e994757546674bbd9", ) diff --git a/core/tests/test_apps.bitcoin.segwit.bip341.p2tr.py b/core/tests/test_apps.bitcoin.segwit.bip341.p2tr.py index bec4b1aa279..c39ab798b45 100644 --- a/core/tests/test_apps.bitcoin.segwit.bip341.p2tr.py +++ b/core/tests/test_apps.bitcoin.segwit.bip341.p2tr.py @@ -20,11 +20,11 @@ "inputs": [ TxInput( amount=420000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "9c4e333b5f116359b5f5578fe4a74c6f58b3bab9d28149a583da86f6bf0ce27d" ), prev_index=1, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "512053a1f6e454df1aa2776a2814a721372d6258050de330b3c6d10ee8f4e0dda343" ), script_type=InputScriptType.SPENDTAPROOT, @@ -32,11 +32,11 @@ ), TxInput( amount=462000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "99ddaf6d9b75447d5127e17312f6def68acba2d4f464d0e2ac93137bb5cab7d7" ), prev_index=0, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "5120147c9c57132f6e7ecddba9800bb0c4449251c92a1e60371ee77557b6620f3ea3" ), script_type=InputScriptType.SPENDTAPROOT, @@ -44,11 +44,11 @@ ), TxInput( amount=294000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "4218a419542757d960174457dc82e06b3613ac8ed2c528926833433883f5e1f8" ), prev_index=0, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914751e76e8199196d454941c45d1b3a323f1433bd688ac" ), script_type=InputScriptType.SPENDADDRESS, @@ -56,11 +56,11 @@ ), TxInput( amount=504000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "3b8504d63a84a0fd1043e7ec832adaeeb7382a6d3ca762b10cb363aa809168f0" ), prev_index=1, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "5120e4d810fd50586274face62b8a807eb9719cef49c04177cc6b76a9a4251d5450e" ), script_type=InputScriptType.SPENDTAPROOT, @@ -68,11 +68,11 @@ ), TxInput( amount=630000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "7a488f58881cecb2523690afcf22eb8892372bae018a125e1f006283a38c630c" ), prev_index=0, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "512091b64d5324723a985170e4dc5a0f84c041804f2cd12660fa5dec09fc21783605" ), script_type=InputScriptType.SPENDTAPROOT, @@ -80,21 +80,23 @@ ), TxInput( amount=378000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "50d0ac326d44a3a29358214139fecb8a7129aa2f2dbeb28e96aa6fc6bd496195" ), prev_index=0, - script_pubkey=unhexlify("00147dd65592d0ab2fe0d0257d571abf032cd9db93dc"), + script_pubkey=bytes.fromhex( + "00147dd65592d0ab2fe0d0257d571abf032cd9db93dc" + ), script_type=InputScriptType.SPENDWITNESS, sequence=0x00000000, ), TxInput( amount=672000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "3a013eb5a6a664585ddbc210e02147847cde7317c0ce4e056ee4f0f167a2ef81" ), prev_index=1, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "512075169f4001aa68f15bbed28b218df1d0a62cbbcf1188c6665110c293c907b831" ), script_type=InputScriptType.SPENDTAPROOT, @@ -102,11 +104,11 @@ ), TxInput( amount=546000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "eebd075c693d6823dd39fe11e3a6d1993fdec6109860937d50624a3c9c6690a6" ), prev_index=0, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "51200f63ca2c7639b9bb4be0465cc0aa3ee78a0761ba5f5f7d6ff8eab340f09da561" ), script_type=InputScriptType.SPENDTAPROOT, @@ -114,11 +116,11 @@ ), TxInput( amount=588000000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "9e667967d1eb839b9b0a1fd17b2f29e838ff0240a83c61f896844377f8b57a72" ), prev_index=1, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "5120053690babeabbb7850c32eead0acf8df990ced79f7a31e358fabf2658b4bc587" ), script_type=InputScriptType.SPENDTAPROOT, @@ -128,44 +130,44 @@ "outputs": [ PrevOutput( amount=1000000000, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a91406afd46bcdfd22ef94ac122aa11f241244a37ecc88ac" ), # 1cMh228HTCiwS8ZsaakH8A8wze1JR5ZsP ), PrevOutput( amount=3410000000, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "ac9a87f5594be208f8532db38cff670c450ed2fea8fcdefcc9a663f78bab962b" ), ), ], - "sha_amounts": unhexlify( + "sha_amounts": bytes.fromhex( "58a6964a4f5f8f0b642ded0a8a553be7622a719da71d1f5befcefcdee8e0fde6" ), - "sha_outputs": unhexlify( + "sha_outputs": bytes.fromhex( "a2e6dab7c1f0dcd297c8d61647fd17d821541ea69c3cc37dcbad7f90d4eb4bc5" ), - "sha_prevouts": unhexlify( + "sha_prevouts": bytes.fromhex( "2bd4d5a417902673919b2c209d14f8efaa285ede022a88d6a45edf4bdd43db11" ), - "sha_scriptpubkeys": unhexlify( + "sha_scriptpubkeys": bytes.fromhex( "26003c31f2f1786d22fcb3e1f690ddcdff53627a59f9219d5a2c77985a8930c0" ), - "sha_sequences": unhexlify( + "sha_sequences": bytes.fromhex( "18959c7221ab5ce9e26c3cd67b22c24f8baa54bac281d8e6b05e400e6c3a957e" ), "signature_hashes": [ { "index": 3, "hash_type": SigHashType.SIGHASH_ALL, - "result": unhexlify( + "result": bytes.fromhex( "6ffd256e108685b41831385f57eebf2fca041bc6b5e607ea11b3e03d4cf9d9ba" ), }, { "index": 4, "hash_type": SigHashType.SIGHASH_ALL_TAPROOT, - "result": unhexlify( + "result": bytes.fromhex( "9f90136737540ccc18707e1fd398ad222a1a7e4dd65cbfd22dbe4660191efa58" ), }, @@ -181,7 +183,7 @@ ), "inputs": [ TxInput( - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "8dcb562f365cfeb249be74e7865135cf035add604234fc0d8330b49bec92605f" ), prev_index=0, @@ -189,10 +191,12 @@ script_type=InputScriptType.SPENDWITNESS, multisig=None, sequence=0, - script_pubkey=unhexlify("0014196a5bea745288a7f947993c28e3a0f2108d2e0a"), + script_pubkey=bytes.fromhex( + "0014196a5bea745288a7f947993c28e3a0f2108d2e0a" + ), ), TxInput( - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "e1323b577ed0d216f4e52bf2b4c490710dfa0088dae3d15e8ba26ad792184361" ), prev_index=1, @@ -200,7 +204,7 @@ amount=600000000, # 6 btc script_type=InputScriptType.SPENDTAPROOT, sequence=0, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "512029d942d0408906b359397b6f87c5145814a9aefc8c396dd05efa8b5b73576bf2" ), ), @@ -208,31 +212,31 @@ "outputs": [ PrevOutput( amount=1000000000, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914682dfdbc97ab5c31300f36d3c12c6fd854b1b35a88ac" ), # 1AVrNUPAytZZbisNduCacWcEVJS6eGRvaa ), ], - "sha_amounts": unhexlify( + "sha_amounts": bytes.fromhex( "5733468db74734c00efa0b466bca091d8f1aab074af2538f36bd0a734a5940c5" ), - "sha_outputs": unhexlify( + "sha_outputs": bytes.fromhex( "8cdee56004a241f9c79cc55b7d79eaed04909d84660502a2d4e9c357c2047cf5" ), - "sha_prevouts": unhexlify( + "sha_prevouts": bytes.fromhex( "32553b113292dfa8216546e721388a6c19c76626ca65dc187e0348d6ed445f81" ), - "sha_scriptpubkeys": unhexlify( + "sha_scriptpubkeys": bytes.fromhex( "423cd73484fc5e3e0a623442846c279c2216f25a2f32d161fea6c5821a1adde7" ), - "sha_sequences": unhexlify( + "sha_sequences": bytes.fromhex( "af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc" ), "signature_hashes": [ { "index": 1, "hash_type": SigHashType.SIGHASH_ALL_TAPROOT, - "result": unhexlify( + "result": bytes.fromhex( "07333acfe6dce8196f1ad62b2e039a3d9f0b6627bf955be767c519c0f8789ff4" ), }, diff --git a/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh.py b/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh.py index 1c1ebc84440..26a94d65eda 100644 --- a/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh.py +++ b/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh.py @@ -47,7 +47,7 @@ def test_send_native_p2wpkh(self): # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], amount=12300000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "09144602765ce3dd8f4329445b20e3684e948709c5cdcaf12da3bb079c99448a" ), prev_index=0, @@ -59,19 +59,21 @@ def test_send_native_p2wpkh(self): version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0 ) pinp1 = PrevInput( - script_sig=unhexlify("160014d16b8c0680c61fc6ed2e407455715055e41052f5"), - prev_hash=unhexlify( + script_sig=bytes.fromhex("160014d16b8c0680c61fc6ed2e407455715055e41052f5"), + prev_hash=bytes.fromhex( "20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337" ), prev_index=0, sequence=4294967295, ) pout1 = PrevOutput( - script_pubkey=unhexlify("00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c"), + script_pubkey=bytes.fromhex("00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c"), amount=12300000, ) pout2 = PrevOutput( - script_pubkey=unhexlify("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"), + script_pubkey=bytes.fromhex( + "a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" + ), amount=111145789, ) @@ -170,7 +172,7 @@ def test_send_native_p2wpkh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -179,7 +181,7 @@ def test_send_native_p2wpkh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "8a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff02" ), ), @@ -190,7 +192,7 @@ def test_send_native_p2wpkh(self): details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987" ), signature_index=None, @@ -204,7 +206,7 @@ def test_send_native_p2wpkh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out2 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "a8386f0000000000160014d16b8c0680c61fc6ed2e407455715055e41052f5" ), signature_index=None, @@ -216,11 +218,11 @@ def test_send_native_p2wpkh(self): request_type=TXFINISHED, details=TxRequestDetailsType(), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "02483045022100a7ca8f097525f9044e64376dc0a0f5d4aeb8d15d66808ba97979a0475b06b66502200597c8ebcef63e047f9aeef1a8001d3560470cf896c12f6990eec4faec599b950121033add1f0e8e3c3136f7428dd4a4de1057380bd311f5b0856e2269170b4ffa65bf00000000" ), signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100a7ca8f097525f9044e64376dc0a0f5d4aeb8d15d66808ba97979a0475b06b66502200597c8ebcef63e047f9aeef1a8001d3560470cf896c12f6990eec4faec599b95" ), ), @@ -247,7 +249,7 @@ def test_send_native_p2wpkh_change(self): # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], amount=12300000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "09144602765ce3dd8f4329445b20e3684e948709c5cdcaf12da3bb079c99448a" ), prev_index=0, @@ -259,19 +261,21 @@ def test_send_native_p2wpkh_change(self): version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0 ) pinp1 = PrevInput( - script_sig=unhexlify("160014d16b8c0680c61fc6ed2e407455715055e41052f5"), - prev_hash=unhexlify( + script_sig=bytes.fromhex("160014d16b8c0680c61fc6ed2e407455715055e41052f5"), + prev_hash=bytes.fromhex( "20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337" ), prev_index=0, sequence=4294967295, ) pout1 = PrevOutput( - script_pubkey=unhexlify("00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c"), + script_pubkey=bytes.fromhex("00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c"), amount=12300000, ) pout2 = PrevOutput( - script_pubkey=unhexlify("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"), + script_pubkey=bytes.fromhex( + "a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" + ), amount=111145789, ) @@ -374,7 +378,7 @@ def test_send_native_p2wpkh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -383,7 +387,7 @@ def test_send_native_p2wpkh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "8a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff02" ), ), @@ -395,7 +399,7 @@ def test_send_native_p2wpkh_change(self): details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987" ), signature_index=None, @@ -409,7 +413,7 @@ def test_send_native_p2wpkh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out2 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "a8386f0000000000160014d16b8c0680c61fc6ed2e407455715055e41052f5" ), signature_index=None, @@ -421,11 +425,11 @@ def test_send_native_p2wpkh_change(self): request_type=TXFINISHED, details=TxRequestDetailsType(), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "02483045022100a7ca8f097525f9044e64376dc0a0f5d4aeb8d15d66808ba97979a0475b06b66502200597c8ebcef63e047f9aeef1a8001d3560470cf896c12f6990eec4faec599b950121033add1f0e8e3c3136f7428dd4a4de1057380bd311f5b0856e2269170b4ffa65bf00000000" ), signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100a7ca8f097525f9044e64376dc0a0f5d4aeb8d15d66808ba97979a0475b06b66502200597c8ebcef63e047f9aeef1a8001d3560470cf896c12f6990eec4faec599b95" ), ), @@ -452,7 +456,7 @@ def test_send_native_invalid_address(self): # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], amount=12300000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "09144602765ce3dd8f4329445b20e3684e948709c5cdcaf12da3bb079c99448a" ), prev_index=0, diff --git a/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh_grs.py b/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh_grs.py index a1b1ef683a1..c5e6e6957ec 100644 --- a/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh_grs.py +++ b/core/tests/test_apps.bitcoin.segwit.signtx.native_p2wpkh_grs.py @@ -48,7 +48,7 @@ def test_send_native_p2wpkh(self): # 84'/1'/0'/0/0" - tgrs1qkvwu9g3k2pdxewfqr7syz89r3gj557l3ued7ja address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], amount=12300000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1" ), prev_index=0, @@ -64,21 +64,21 @@ def test_send_native_p2wpkh(self): extra_data_len=0, ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "483045022100d9615361c044e91f6dd7bb4455f3ad686cd5a663d7800bb74c448b2706500ccb022026bed24b81a501e8398411c5a9a793741d9bfe39617d51c363dde0a84f44f4f9012102659a6eefcc72d6f2eff92e57095388b17db0b06034946ecd44120e5e7a830ff4" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "1c92508b38239e5c10b23fb46dcf765ee2f3a95b835edbf0943ec21b21711160" ), prev_index=1, sequence=4294967293, ) pout1 = PrevOutput( - script_pubkey=unhexlify("0014b31dc2a236505a6cb9201fa0411ca38a254a7bf1"), + script_pubkey=bytes.fromhex("0014b31dc2a236505a6cb9201fa0411ca38a254a7bf1"), amount=12300000, ) pout2 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a91438cc090e4a4b2e458c33fe35af1c5c0094699ac288ac" ), amount=9887699777, @@ -183,7 +183,7 @@ def test_send_native_p2wpkh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -192,7 +192,7 @@ def test_send_native_p2wpkh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02" ), ), @@ -203,7 +203,7 @@ def test_send_native_p2wpkh(self): details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987" ), signature_index=None, @@ -217,7 +217,7 @@ def test_send_native_p2wpkh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out2 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "a8386f0000000000160014cc8067093f6f843d6d3e22004a4290cd0c0f336b" ), signature_index=None, @@ -229,11 +229,11 @@ def test_send_native_p2wpkh(self): request_type=TXFINISHED, details=TxRequestDetailsType(), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "02483045022100ea8780bc1e60e14e945a80654a41748bbf1aa7d6f2e40a88d91dfc2de1f34bd10220181a474a3420444bd188501d8d270736e1e9fe379da9970de992ff445b0972e3012103adc58245cf28406af0ef5cc24b8afba7f1be6c72f279b642d85c48798685f862d9ed0900" ), signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100ea8780bc1e60e14e945a80654a41748bbf1aa7d6f2e40a88d91dfc2de1f34bd10220181a474a3420444bd188501d8d270736e1e9fe379da9970de992ff445b0972e3" ), ), @@ -260,7 +260,7 @@ def test_send_native_p2wpkh_change(self): # 84'/1'/0'/0/0" - tgrs1qkvwu9g3k2pdxewfqr7syz89r3gj557l3ued7ja address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], amount=12300000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1" ), prev_index=0, @@ -276,21 +276,21 @@ def test_send_native_p2wpkh_change(self): extra_data_len=0, ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "483045022100d9615361c044e91f6dd7bb4455f3ad686cd5a663d7800bb74c448b2706500ccb022026bed24b81a501e8398411c5a9a793741d9bfe39617d51c363dde0a84f44f4f9012102659a6eefcc72d6f2eff92e57095388b17db0b06034946ecd44120e5e7a830ff4" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "1c92508b38239e5c10b23fb46dcf765ee2f3a95b835edbf0943ec21b21711160" ), prev_index=1, sequence=4294967293, ) pout1 = PrevOutput( - script_pubkey=unhexlify("0014b31dc2a236505a6cb9201fa0411ca38a254a7bf1"), + script_pubkey=bytes.fromhex("0014b31dc2a236505a6cb9201fa0411ca38a254a7bf1"), amount=12300000, ) pout2 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a91438cc090e4a4b2e458c33fe35af1c5c0094699ac288ac" ), amount=9887699777, @@ -397,7 +397,7 @@ def test_send_native_p2wpkh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -406,7 +406,7 @@ def test_send_native_p2wpkh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02" ), ), @@ -418,7 +418,7 @@ def test_send_native_p2wpkh_change(self): details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987" ), signature_index=None, @@ -432,7 +432,7 @@ def test_send_native_p2wpkh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out2 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "a8386f0000000000160014cc8067093f6f843d6d3e22004a4290cd0c0f336b" ), signature_index=None, @@ -444,11 +444,11 @@ def test_send_native_p2wpkh_change(self): request_type=TXFINISHED, details=TxRequestDetailsType(), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "02483045022100ea8780bc1e60e14e945a80654a41748bbf1aa7d6f2e40a88d91dfc2de1f34bd10220181a474a3420444bd188501d8d270736e1e9fe379da9970de992ff445b0972e3012103adc58245cf28406af0ef5cc24b8afba7f1be6c72f279b642d85c48798685f862d9ed0900" ), signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100ea8780bc1e60e14e945a80654a41748bbf1aa7d6f2e40a88d91dfc2de1f34bd10220181a474a3420444bd188501d8d270736e1e9fe379da9970de992ff445b0972e3" ), ), diff --git a/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh.py b/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh.py index 289e7f75e3d..1e492d92954 100644 --- a/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh.py +++ b/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh.py @@ -47,7 +47,7 @@ def test_send_p2wpkh_in_p2sh(self): # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], amount=123456789, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337" ), prev_index=0, @@ -59,21 +59,23 @@ def test_send_p2wpkh_in_p2sh(self): version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0 ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a" ), prev_index=0, sequence=4294967295, ) pout1 = PrevOutput( - script_pubkey=unhexlify("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"), + script_pubkey=bytes.fromhex( + "a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" + ), amount=123456789, ) pout2 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac" ), amount=865519308, @@ -177,7 +179,7 @@ def test_send_p2wpkh_in_p2sh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -186,7 +188,7 @@ def test_send_p2wpkh_in_p2sh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02" ), ), @@ -197,7 +199,7 @@ def test_send_p2wpkh_in_p2sh(self): details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac" ), signature_index=None, @@ -211,7 +213,7 @@ def test_send_p2wpkh_in_p2sh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out2 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "3df39f060000000017a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" ), signature_index=None, @@ -223,11 +225,11 @@ def test_send_p2wpkh_in_p2sh(self): request_type=TXFINISHED, details=TxRequestDetailsType(), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "02483045022100ccd253bfdf8a5593cd7b6701370c531199f0f05a418cd547dfc7da3f21515f0f02203fa08a0753688871c220648f9edadbdb98af42e5d8269364a326572cf703895b012103e7bfe10708f715e8538c92d46ca50db6f657bbc455b7494e6a0303ccdb868b7900000000" ), signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100ccd253bfdf8a5593cd7b6701370c531199f0f05a418cd547dfc7da3f21515f0f02203fa08a0753688871c220648f9edadbdb98af42e5d8269364a326572cf703895b" ), ), @@ -254,7 +256,7 @@ def test_send_p2wpkh_in_p2sh_change(self): # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], amount=123456789, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337" ), prev_index=0, @@ -266,21 +268,23 @@ def test_send_p2wpkh_in_p2sh_change(self): version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0 ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a" ), prev_index=0, sequence=4294967295, ) pout1 = PrevOutput( - script_pubkey=unhexlify("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"), + script_pubkey=bytes.fromhex( + "a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" + ), amount=123456789, ) pout2 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac" ), amount=865519308, @@ -380,7 +384,7 @@ def test_send_p2wpkh_in_p2sh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -389,7 +393,7 @@ def test_send_p2wpkh_in_p2sh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02" ), ), @@ -401,7 +405,7 @@ def test_send_p2wpkh_in_p2sh_change(self): details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac" ), signature_index=None, @@ -415,7 +419,7 @@ def test_send_p2wpkh_in_p2sh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out2 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "3df39f060000000017a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" ), signature_index=None, @@ -427,11 +431,11 @@ def test_send_p2wpkh_in_p2sh_change(self): request_type=TXFINISHED, details=TxRequestDetailsType(), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "02483045022100ccd253bfdf8a5593cd7b6701370c531199f0f05a418cd547dfc7da3f21515f0f02203fa08a0753688871c220648f9edadbdb98af42e5d8269364a326572cf703895b012103e7bfe10708f715e8538c92d46ca50db6f657bbc455b7494e6a0303ccdb868b7900000000" ), signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100ccd253bfdf8a5593cd7b6701370c531199f0f05a418cd547dfc7da3f21515f0f02203fa08a0753688871c220648f9edadbdb98af42e5d8269364a326572cf703895b" ), ), @@ -458,7 +462,7 @@ def test_send_p2wpkh_in_p2sh_attack_amount(self): # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], amount=10, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337" ), prev_index=0, @@ -470,21 +474,23 @@ def test_send_p2wpkh_in_p2sh_attack_amount(self): version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0 ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a" ), prev_index=0, sequence=4294967295, ) pout1 = PrevOutput( - script_pubkey=unhexlify("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"), + script_pubkey=bytes.fromhex( + "a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" + ), amount=123456789, ) pout2 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac" ), amount=865519308, @@ -494,7 +500,7 @@ def test_send_p2wpkh_in_p2sh_attack_amount(self): # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], amount=9, # modified! - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337" ), prev_index=0, @@ -591,7 +597,7 @@ def test_send_p2wpkh_in_p2sh_attack_amount(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), ] diff --git a/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh_grs.py b/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh_grs.py index 4130cd4e6c4..c343798412e 100644 --- a/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh_grs.py +++ b/core/tests/test_apps.bitcoin.segwit.signtx.p2wpkh_in_p2sh_grs.py @@ -48,7 +48,7 @@ def test_send_p2wpkh_in_p2sh(self): # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7 address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], amount=123456789, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "09a48bce2f9d5c6e4f0cb9ea1b32d0891855e8acfe5334f9ebd72b9ad2de60cf" ), prev_index=0, @@ -64,21 +64,23 @@ def test_send_p2wpkh_in_p2sh(self): extra_data_len=0, ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "47304402201f8f57f708144c3a11da322546cb37bd385aa825d940c37e8016f0efd6ec3e9402202a41bc02c29e4f3f13efd4bededbcd4308a6393279111d614ee1f7635cf3e65701210371546a36bdf6bc82087301b3f6e759736dc8790150673d2e7e2715d2ad72f3a4" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1" ), prev_index=1, sequence=4294967294, ) pout1 = PrevOutput( - script_pubkey=unhexlify("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"), + script_pubkey=bytes.fromhex( + "a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" + ), amount=123456789, ) pout2 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a91435528b20e9a793cf2c3a1cf9cff1f2127ad377da88ac" ), amount=9764242764, @@ -188,7 +190,7 @@ def test_send_p2wpkh_in_p2sh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -197,7 +199,7 @@ def test_send_p2wpkh_in_p2sh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff02" ), ), @@ -208,7 +210,7 @@ def test_send_p2wpkh_in_p2sh(self): details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac" ), signature_index=None, @@ -222,7 +224,7 @@ def test_send_p2wpkh_in_p2sh(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out2 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "3df39f060000000017a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" ), signature_index=None, @@ -234,11 +236,11 @@ def test_send_p2wpkh_in_p2sh(self): request_type=TXFINISHED, details=TxRequestDetailsType(), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "02483045022100b7ce2972bcbc3a661fe320ba901e680913b2753fcb47055c9c6ba632fc4acf81022001c3cfd6c2fe92eb60f5176ce0f43707114dd7223da19c56f2df89c13c2fef80012103e7bfe10708f715e8538c92d46ca50db6f657bbc455b7494e6a0303ccdb868b7904ee0900" ), signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100b7ce2972bcbc3a661fe320ba901e680913b2753fcb47055c9c6ba632fc4acf81022001c3cfd6c2fe92eb60f5176ce0f43707114dd7223da19c56f2df89c13c2fef80" ), ), @@ -265,7 +267,7 @@ def test_send_p2wpkh_in_p2sh_change(self): # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7 address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], amount=123456789, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "09a48bce2f9d5c6e4f0cb9ea1b32d0891855e8acfe5334f9ebd72b9ad2de60cf" ), prev_index=0, @@ -281,21 +283,23 @@ def test_send_p2wpkh_in_p2sh_change(self): extra_data_len=0, ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "47304402201f8f57f708144c3a11da322546cb37bd385aa825d940c37e8016f0efd6ec3e9402202a41bc02c29e4f3f13efd4bededbcd4308a6393279111d614ee1f7635cf3e65701210371546a36bdf6bc82087301b3f6e759736dc8790150673d2e7e2715d2ad72f3a4" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1" ), prev_index=1, sequence=4294967294, ) pout1 = PrevOutput( - script_pubkey=unhexlify("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"), + script_pubkey=bytes.fromhex( + "a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" + ), amount=123456789, ) pout2 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a91435528b20e9a793cf2c3a1cf9cff1f2127ad377da88ac" ), amount=9764242764, @@ -401,7 +405,7 @@ def test_send_p2wpkh_in_p2sh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized header - serialized_tx=unhexlify("01000000000101"), + serialized_tx=bytes.fromhex("01000000000101"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -410,7 +414,7 @@ def test_send_p2wpkh_in_p2sh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff02" ), ), @@ -422,7 +426,7 @@ def test_send_p2wpkh_in_p2sh_change(self): details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac" ), signature_index=None, @@ -436,7 +440,7 @@ def test_send_p2wpkh_in_p2sh_change(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out2 - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "3df39f060000000017a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87" ), signature_index=None, @@ -448,11 +452,11 @@ def test_send_p2wpkh_in_p2sh_change(self): request_type=TXFINISHED, details=TxRequestDetailsType(), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "02483045022100b7ce2972bcbc3a661fe320ba901e680913b2753fcb47055c9c6ba632fc4acf81022001c3cfd6c2fe92eb60f5176ce0f43707114dd7223da19c56f2df89c13c2fef80012103e7bfe10708f715e8538c92d46ca50db6f657bbc455b7494e6a0303ccdb868b7904ee0900" ), signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100b7ce2972bcbc3a661fe320ba901e680913b2753fcb47055c9c6ba632fc4acf81022001c3cfd6c2fe92eb60f5176ce0f43707114dd7223da19c56f2df89c13c2fef80" ), ), diff --git a/core/tests/test_apps.bitcoin.sign_tx.writers.py b/core/tests/test_apps.bitcoin.sign_tx.writers.py index f2588bd5457..b412fdde900 100644 --- a/core/tests/test_apps.bitcoin.sign_tx.writers.py +++ b/core/tests/test_apps.bitcoin.sign_tx.writers.py @@ -12,7 +12,7 @@ def test_tx_input(self): inp = TxInput( address_n=[0], amount=390000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" ), prev_index=0, @@ -34,13 +34,13 @@ def test_tx_input_check(self): inp = TxInput( address_n=[0], amount=390000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" ), prev_index=0, script_type=InputScriptType.SPENDWITNESS, sequence=0xFFFFFFFF, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac" ), script_sig=b"0123456789", diff --git a/core/tests/test_apps.bitcoin.signtx.fee_threshold.py b/core/tests/test_apps.bitcoin.signtx.fee_threshold.py index b0ef6e57e71..8b0b27c2ada 100644 --- a/core/tests/test_apps.bitcoin.signtx.fee_threshold.py +++ b/core/tests/test_apps.bitcoin.signtx.fee_threshold.py @@ -48,18 +48,18 @@ def test_over_fee_threshold(self): coin_bitcoin = coins.by_name('Bitcoin') ptx1 = PrevTx(version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0) - pinp1 = PrevInput(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'), - prev_hash=unhexlify('c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf'), + pinp1 = PrevInput(script_sig=bytes.fromhex('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'), + prev_hash=bytes.fromhex('c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf'), prev_index=1) - pinp2 = PrevInput(script_sig=unhexlify('48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214'), - prev_hash=unhexlify('1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf'), + pinp2 = PrevInput(script_sig=bytes.fromhex('48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214'), + prev_hash=bytes.fromhex('1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf'), prev_index=1) - pout1 = PrevOutput(script_pubkey=unhexlify('76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac'), + pout1 = PrevOutput(script_pubkey=bytes.fromhex('76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac'), amount=390000) inp1 = TxInput(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e # amount=390000, - prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'), + prev_hash=bytes.fromhex('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'), prev_index=0, amount=None) out1 = TxOutput(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1', @@ -76,13 +76,13 @@ def test_over_fee_threshold(self): TxAckInput(tx=TxAckInputWrapper(input=inp1)), helpers.UiConfirmForeignAddress(address_n=inp1.address_n), True, - TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=bytes.fromhex('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), TxAckPrevMeta(tx=ptx1), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=bytes.fromhex('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), TxAckPrevInput(tx=TxAckPrevInputWrapper(input=pinp1)), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=bytes.fromhex('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), TxAckPrevInput(tx=TxAckPrevInputWrapper(input=pinp2)), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=bytes.fromhex('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), TxAckPrevOutput(tx=TxAckPrevOutputWrapper(output=pout1)), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), TxAckOutput(tx=TxAckOutputWrapper(output=out1)), @@ -114,27 +114,27 @@ def test_under_threshold(self): version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0 ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf" ), prev_index=1, sequence=0xFFFF_FFFF, ) pinp2 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf" ), prev_index=1, sequence=0xFFFF_FFFF, ) pout1 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac" ), amount=390000, @@ -143,7 +143,7 @@ def test_under_threshold(self): inp1 = TxInput( address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e amount=390000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" ), prev_index=0, @@ -201,7 +201,7 @@ def test_under_threshold(self): request_type=TXMETA, details=TxRequestDetailsType( request_index=None, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" ), ), @@ -212,7 +212,7 @@ def test_under_threshold(self): request_type=TXINPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" ), ), @@ -223,7 +223,7 @@ def test_under_threshold(self): request_type=TXINPUT, details=TxRequestDetailsType( request_index=1, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" ), ), @@ -234,7 +234,7 @@ def test_under_threshold(self): request_type=TXOUTPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" ), ), @@ -245,7 +245,7 @@ def test_under_threshold(self): request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify("0100000001") + serialized_tx=bytes.fromhex("0100000001") ), ), ] diff --git a/core/tests/test_apps.bitcoin.signtx.omni.py b/core/tests/test_apps.bitcoin.signtx.omni.py index b6893db4740..a04a5cc4d5f 100644 --- a/core/tests/test_apps.bitcoin.signtx.omni.py +++ b/core/tests/test_apps.bitcoin.signtx.omni.py @@ -16,7 +16,7 @@ def test_is_valid(self): "6f6d6e69000000000000001f0000000020c855": True, } for k, v in VECTORS.items(): - k = unhexlify(k) + k = bytes.fromhex(k) self.assertEqual(is_valid(k), v) def test_parse(self): @@ -28,7 +28,7 @@ def test_parse(self): "6f6d6e6901000000": "Unknown transaction", } for k, v in VECTORS.items(): - k = unhexlify(k) + k = bytes.fromhex(k) self.assertEqual(parse(k), v) diff --git a/core/tests/test_apps.bitcoin.signtx.py b/core/tests/test_apps.bitcoin.signtx.py index ec3ee4286a1..3c649add552 100644 --- a/core/tests/test_apps.bitcoin.signtx.py +++ b/core/tests/test_apps.bitcoin.signtx.py @@ -49,27 +49,27 @@ def test_one_one_fee(self): version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0 ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "47304402202df6c8885489be0fd52ed1f82c20b4c2c03e479369ea8439ed6233a3bb349ddd02207f749a00dd98d1aca699178d8fa954dc45b9faff33d3c9f03b81fa766061f2d70121038b60c00f69d78f2c5df84a24b30894c3700e4d6176a1f440461c8c69bf1f4262" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "468c0de3bf9dfcc4915354904108611db9547a16ec38a24bf6b240ccc946e0d3" ), prev_index=0, sequence=0xFFFF_FFFF, ) pinp2 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "483045022100b11b3804e9b5fbbad70532e550192b3bbdd65b51f30572638a5559a86600856702204b3bd50a847ddf66426c0f413b9e1a98388b0d36479e66ef37b2d53d9ad13d47012103d443712f673afafafc006ccb6e19220de7ae0c07c9832666103974293d04a93c" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "ebb32bba661e3dccb216acf593de26223f5f2c17f6a75634f2a0b581c4855fa0" ), prev_index=0, sequence=0xFFFF_FFFF, ) pout1 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914be145c9a7c131ad0c6c9b86f83748d660b42e2f488ac" ), amount=3_801_747, @@ -77,7 +77,7 @@ def test_one_one_fee(self): inp1 = TxInput( address_n=[44 | 0x80000000, 0 | 0x80000000, 0 | 0x80000000, 0, 10], - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "1f326f65768d55ef146efbb345bd87abe84ac7185726d0457a026fc347a26ef3" ), prev_index=0, @@ -137,7 +137,7 @@ def test_one_one_fee(self): request_type=TXMETA, details=TxRequestDetailsType( request_index=None, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "1f326f65768d55ef146efbb345bd87abe84ac7185726d0457a026fc347a26ef3" ), ), @@ -148,7 +148,7 @@ def test_one_one_fee(self): request_type=TXINPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "1f326f65768d55ef146efbb345bd87abe84ac7185726d0457a026fc347a26ef3" ), ), @@ -159,7 +159,7 @@ def test_one_one_fee(self): request_type=TXINPUT, details=TxRequestDetailsType( request_index=1, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "1f326f65768d55ef146efbb345bd87abe84ac7185726d0457a026fc347a26ef3" ), ), @@ -170,7 +170,7 @@ def test_one_one_fee(self): request_type=TXOUTPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "1f326f65768d55ef146efbb345bd87abe84ac7185726d0457a026fc347a26ef3" ), ), @@ -181,7 +181,7 @@ def test_one_one_fee(self): request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify("0100000001") + serialized_tx=bytes.fromhex("0100000001") ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -196,10 +196,10 @@ def test_one_one_fee(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100bebe58e7eac8170334f987d0f67032a2eddd0e2f378e002502ec88a69460ea460220040a8effc41167f5d5a5ffc77f37317d8125c7cd05f92d142e4d977f2f132c94" ), - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "f36ea247c36f027a45d0265718c74ae8ab87bd45b3fb6e14ef558d76656f321f000000006b483045022100bebe58e7eac8170334f987d0f67032a2eddd0e2f378e002502ec88a69460ea460220040a8effc41167f5d5a5ffc77f37317d8125c7cd05f92d142e4d977f2f132c940121038bac33bcdaeec5626e2f2c5680a9fdc5e551d4e1167f272825bea98e6158d4c8ffffffff01" ), ), @@ -211,7 +211,7 @@ def test_one_one_fee(self): serialized=TxRequestSerializedType( signature_index=None, signature=None, - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "433f3900000000001976a9145d48886f4e2aad3164e55e23a7a41b921646a33488ac00000000" ), ), diff --git a/core/tests/test_apps.bitcoin.signtx_decred.py b/core/tests/test_apps.bitcoin.signtx_decred.py index fda79355cf6..f090798d346 100644 --- a/core/tests/test_apps.bitcoin.signtx_decred.py +++ b/core/tests/test_apps.bitcoin.signtx_decred.py @@ -43,22 +43,26 @@ version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0 ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "47304402207d127d59a44187952d9d0de94ad34a19dd9a84beb124fd8a3fb439c862544d3202206618f321385c30bda96fb01ce03f70a269d78a301c0b0c2e3e3689dfae3f4733012102ae1f6b51086bd753f072f94eb8ffe6806d3570c088a3ede46c678b6ea47d1675" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "21012b08c5077036460e8f75bbc57beb11d7bc30e7ad224ad5e67d15bd086500" ), prev_index=2, sequence=0xFFFF_FFFF, ) pout1 = PrevOutput( - script_pubkey=unhexlify("76a914e4111051ae0349ab5589cf2b7e125c6da694a1a188ac"), + script_pubkey=bytes.fromhex( + "76a914e4111051ae0349ab5589cf2b7e125c6da694a1a188ac" + ), amount=153_185_001, decred_script_version=0, ) pout2 = PrevOutput( - script_pubkey=unhexlify("76a914dc1a98d791735eb9a8715a2a219c23680edcedad88ac"), + script_pubkey=bytes.fromhex( + "76a914dc1a98d791735eb9a8715a2a219c23680edcedad88ac" + ), amount=200_000_000, decred_script_version=0, ) @@ -72,7 +76,7 @@ class TestSignTxDecred(unittest.TestCase): def test_one_one_fee(self): inp1 = TxInput( address_n=[44 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), prev_index=1, @@ -103,7 +107,7 @@ def test_one_one_fee(self): request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify("0100000001") + serialized_tx=bytes.fromhex("0100000001") ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -111,7 +115,7 @@ def test_one_one_fee(self): request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "1064cbf0f0889b919ce083c82065612710b1a6adcdb3f15d7ffc5e6de2cd8a4d0100000000ffffffff01" ) ), @@ -134,7 +138,7 @@ def test_one_one_fee(self): request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "603bea0b0000000000001976a914819d291a2f7fbf770e784bfd78b5ce92c58e95ea88ac0000000000000000" ) ), @@ -144,7 +148,7 @@ def test_one_one_fee(self): request_type=TXMETA, details=TxRequestDetailsType( request_index=None, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), ), @@ -155,7 +159,7 @@ def test_one_one_fee(self): request_type=TXINPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), ), @@ -166,7 +170,7 @@ def test_one_one_fee(self): request_type=TXOUTPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), ), @@ -177,7 +181,7 @@ def test_one_one_fee(self): request_type=TXOUTPUT, details=TxRequestDetailsType( request_index=1, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), ), @@ -187,7 +191,7 @@ def test_one_one_fee(self): TxRequest( request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), - serialized=TxRequestSerializedType(serialized_tx=unhexlify("01")), + serialized=TxRequestSerializedType(serialized_tx=bytes.fromhex("01")), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), TxRequest( @@ -195,10 +199,10 @@ def test_one_one_fee(self): details=TxRequestDetailsType(request_index=None, tx_hash=None), serialized=TxRequestSerializedType( signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "304402205ea5a0aec7e405eb3c792165f103f61f8ef862e76a2b0146bec1082b243cfbff022061e307113d389b969313bbee2c9a149fad4afdf715e8bd78df579438ef692814" ), - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "00c2eb0b0000000000000000ffffffff6a47304402205ea5a0aec7e405eb3c792165f103f61f8ef862e76a2b0146bec1082b243cfbff022061e307113d389b969313bbee2c9a149fad4afdf715e8bd78df579438ef6928140121030e669acac1f280d1ddf441cd2ba5e97417bf2689e4bbec86df4f831bf9f7ffd0" ), ), @@ -226,7 +230,7 @@ def test_one_one_fee(self): def test_purchase_ticket(self): inp1 = TxInput( address_n=[44 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), prev_index=1, @@ -270,7 +274,7 @@ def test_purchase_ticket(self): request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify("0100000001") + serialized_tx=bytes.fromhex("0100000001") ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -278,7 +282,7 @@ def test_purchase_ticket(self): request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "1064cbf0f0889b919ce083c82065612710b1a6adcdb3f15d7ffc5e6de2cd8a4d0100000000ffffffff03" ) ), @@ -292,7 +296,7 @@ def test_purchase_ticket(self): request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "603bea0b0000000000001aba76a914819d291a2f7fbf770e784bfd78b5ce92c58e95ea88ac" ) ), @@ -302,7 +306,7 @@ def test_purchase_ticket(self): request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=2, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "00000000000000000000206a1edc1a98d791735eb9a8715a2a219c23680edcedad00c2eb0b000000000058" ) ), @@ -321,7 +325,7 @@ def test_purchase_ticket(self): request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "000000000000000000001abd76a914000000000000000000000000000000000000000088ac0000000000000000" ) ), @@ -331,7 +335,7 @@ def test_purchase_ticket(self): request_type=TXMETA, details=TxRequestDetailsType( request_index=None, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), ), @@ -342,7 +346,7 @@ def test_purchase_ticket(self): request_type=TXINPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), ), @@ -353,7 +357,7 @@ def test_purchase_ticket(self): request_type=TXOUTPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), ), @@ -364,7 +368,7 @@ def test_purchase_ticket(self): request_type=TXOUTPUT, details=TxRequestDetailsType( request_index=1, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "4d8acde26d5efc7f5df1b3cdada6b11027616520c883e09c919b88f0f0cb6410" ), ), @@ -374,7 +378,7 @@ def test_purchase_ticket(self): TxRequest( request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), - serialized=TxRequestSerializedType(serialized_tx=unhexlify("01")), + serialized=TxRequestSerializedType(serialized_tx=bytes.fromhex("01")), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), TxRequest( @@ -382,10 +386,10 @@ def test_purchase_ticket(self): details=TxRequestDetailsType(), serialized=TxRequestSerializedType( signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "3045022100b3a11ff4befcc035623de7665aaa76dacc9252e53aabf2a5d61238151e696532022004cbcc537c1d539e04c823140bac4524bdba09f528f5c4b76f3f1022b7dc0ad4" ), - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "00c2eb0b0000000000000000ffffffff6b483045022100b3a11ff4befcc035623de7665aaa76dacc9252e53aabf2a5d61238151e696532022004cbcc537c1d539e04c823140bac4524bdba09f528f5c4b76f3f1022b7dc0ad40121030e669acac1f280d1ddf441cd2ba5e97417bf2689e4bbec86df4f831bf9f7ffd0" ), ), diff --git a/core/tests/test_apps.bitcoin.signtx_grs.py b/core/tests/test_apps.bitcoin.signtx_grs.py index 15fe027f3d4..988cb4358d9 100644 --- a/core/tests/test_apps.bitcoin.signtx_grs.py +++ b/core/tests/test_apps.bitcoin.signtx_grs.py @@ -52,17 +52,17 @@ def test_one_one_fee(self): extra_data_len=0, ) pinp1 = PrevInput( - script_sig=unhexlify( + script_sig=bytes.fromhex( "48304502210096a287593b1212a188e778596eb8ecd4cc169b93a4d115226460d8e3deae431c02206c78ec09b3df977f04a6df5eb53181165c4ea5a0b35f826551349130f879d6b8012102cf5126ff54e38a80a919579d7091cafe24840eab1d30fe2b4d59bdd9d267cad8" ), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "7dc74a738c50c2ae1228ce9890841e5355fd6d7f2c1367e0a74403ab60db3224" ), prev_index=0, sequence=4294967294, ) pout1 = PrevOutput( - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914172b4e06e9b7881a48d2ee8062b495d0b2517fe888ac" ), amount=210016, @@ -76,7 +76,7 @@ def test_one_one_fee(self): 0, 2, ], # FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a" ), prev_index=0, @@ -131,7 +131,7 @@ def test_one_one_fee(self): request_type=TXMETA, details=TxRequestDetailsType( request_index=None, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a" ), ), @@ -142,7 +142,7 @@ def test_one_one_fee(self): request_type=TXINPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a" ), ), @@ -153,7 +153,7 @@ def test_one_one_fee(self): request_type=TXOUTPUT, details=TxRequestDetailsType( request_index=0, - tx_hash=unhexlify( + tx_hash=bytes.fromhex( "cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a" ), ), @@ -168,7 +168,7 @@ def test_one_one_fee(self): serialized=TxRequestSerializedType( signature_index=None, signature=None, - serialized_tx=unhexlify("0100000001"), + serialized_tx=bytes.fromhex("0100000001"), ), ), TxAckInput(tx=TxAckInputWrapper(input=inp1)), @@ -183,10 +183,10 @@ def test_one_one_fee(self): details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( signature_index=0, - signature=unhexlify( + signature=bytes.fromhex( "304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a74302368761" ), - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "4a9d1fdba915e0907ab02f04f88898863112a2b4fdcf872c7414588c47c874cb000000006a47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e67ffffffff01" ), ), @@ -198,7 +198,7 @@ def test_one_one_fee(self): serialized=TxRequestSerializedType( signature_index=None, signature=None, - serialized_tx=unhexlify( + serialized_tx=bytes.fromhex( "a0330300000000001976a914fe40329c95c5598ac60752a5310b320cb52d18e688ac00000000" ), ), diff --git a/core/tests/test_apps.bitcoin.txweight.py b/core/tests/test_apps.bitcoin.txweight.py index 229b5bd02f9..69342a9c376 100644 --- a/core/tests/test_apps.bitcoin.txweight.py +++ b/core/tests/test_apps.bitcoin.txweight.py @@ -22,7 +22,7 @@ def test_p2pkh_txweight(self): inp1 = TxInput( address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e # amount=390000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882" ), prev_index=0, @@ -58,7 +58,7 @@ def test_p2wpkh_in_p2sh_txweight(self): # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], amount=123456789, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337" ), prev_index=0, @@ -99,7 +99,7 @@ def test_native_p2wpkh_txweight(self): # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], amount=12300000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "09144602765ce3dd8f4329445b20e3684e948709c5cdcaf12da3bb079c99448a" ), prev_index=0, @@ -138,7 +138,7 @@ def test_taproot_txweight(self): inp1 = TxInput( address_n=[86 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], amount=4600, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "7956f1de3e7362b04115b64a31f0b6822c50dd6c08d78398f392a0ac3f0e357b" ), prev_index=1, @@ -185,7 +185,7 @@ def test_legacy_multisig_txweight(self): inp1 = TxInput( address_n=[48 | 0x80000000, 0 | 0x80000000, 1 | 0x80000000, 0, 0], amount=100000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "c6091adf4c0c23982a35899a6e58ae11e703eacd7954f588ed4b9cdefc4dba52" ), prev_index=1, @@ -232,7 +232,7 @@ def test_segwit_multisig_txweight(self): inp1 = TxInput( address_n=[49 | 0x80000000, 1 | 0x80000000, 1 | 0x80000000, 0, 0], - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "c9348040bbc2024e12dcb4a0b4806b0398646b91acf314da028c3f03dd0179fc" ), prev_index=1, @@ -260,7 +260,7 @@ def test_mixed_txweight(self): inp1 = TxInput( address_n=[49 | 0x80000000, 1 | 0x80000000, 1 | 0x80000000, 0, 0], amount=20000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "8c3ea7a10ab6d289119b722ec8c27b70c17c722334ced31a0370d782e4b6775d" ), prev_index=0, @@ -269,7 +269,7 @@ def test_mixed_txweight(self): inp2 = TxInput( address_n=[84 | 0x80000000, 1 | 0x80000000, 1 | 0x80000000, 0, 0], amount=15000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "7956f1de3e7362b04115b64a31f0b6822c50dd6c08d78398f392a0ac3f0e357b" ), prev_index=0, @@ -278,7 +278,7 @@ def test_mixed_txweight(self): inp3 = TxInput( address_n=[86 | 0x80000000, 1 | 0x80000000, 1 | 0x80000000, 0, 0], amount=4450, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "7956f1de3e7362b04115b64a31f0b6822c50dd6c08d78398f392a0ac3f0e357b" ), prev_index=0, @@ -287,7 +287,7 @@ def test_mixed_txweight(self): inp4 = TxInput( address_n=[44 | 0x80000000, 1 | 0x80000000, 1 | 0x80000000, 0, 0], amount=10000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "3ac32e90831d79385eee49d6030a2123cd9d009fe8ffc3d470af9a6a777a119b" ), prev_index=2, @@ -341,20 +341,20 @@ def test_external_txweight(self): inp1 = TxInput( amount=100000, - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "e5b7e21b5ba720e81efd6bfa9f854ababdcddc75a43bfa60bf0fe069cfd1bb8a" ), prev_index=0, script_type=InputScriptType.EXTERNAL, - script_pubkey=unhexlify("00149c02608d469160a92f40fdf8c6ccced029493088"), - ownership_proof=unhexlify( + script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"), + ownership_proof=bytes.fromhex( "534c001900016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c40002483045022100d4ad0374c922848c71d913fba59c81b9075e0d33e884d953f0c4b4806b8ffd0c022024740e6717a2b6a5aa03148c3a28b02c713b4e30fc8aeae67fa69eb20e8ddcd9012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d" ), ) inp2 = TxInput( address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "70f9871eb03a38405cfd7a01e0e1448678132d815e2c9f552ad83ae23969509e" ), prev_index=0, @@ -365,15 +365,15 @@ def test_external_txweight(self): inp3 = TxInput( # tb1qldlynaqp0hy4zc2aag3pkenzvxy65saesxw3wd # address_n=parse_path("m/84h/1h/0h/0/1"), - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "65b768dacccfb209eebd95a1fb80a04f1dd6a3abc6d7b41d5e9d9f91605b37d9" ), prev_index=0, amount=10000, script_type=InputScriptType.EXTERNAL, - script_pubkey=unhexlify("0014fb7e49f4017dc951615dea221b66626189aa43b9"), + script_pubkey=bytes.fromhex("0014fb7e49f4017dc951615dea221b66626189aa43b9"), script_sig=bytes(0), - witness=unhexlify( + witness=bytes.fromhex( "024730440220432ac60461de52713ad543cbb1484f7eca1a72c615d539b3f42f5668da4501d2022063786a6d6940a5c1ed9c2d2fd02cef90b6c01ddd84829c946561e15be6c0aae1012103dcf3bc936ecb2ec57b8f468050abce8c8756e75fd74273c9977744b1a0be7d03" ), ) diff --git a/core/tests/test_apps.bitcoin.zcash.zip243.py b/core/tests/test_apps.bitcoin.zcash.zip243.py index b6d1f48aee5..32d9aba1e0e 100644 --- a/core/tests/test_apps.bitcoin.zcash.zip243.py +++ b/core/tests/test_apps.bitcoin.zcash.zip243.py @@ -38,10 +38,10 @@ class TestZcashZip243(unittest.TestCase): "version": 4, "version_group_id": 0x892F2085, "branch_id": 0x76B809BB, - "prevouts_hash": b"bd4318eecf841a0cf01c2be532cf4bc3303e881e2aface159f1882f153152688", - "sequence_hash": b"9ac6a31952ff626bf5a0a30d3d8ac63a0d4298d33d7bc38854bfa5860695e30a", - "outputs_hash": b"d0cadf116b4441f5e1e17814908dee509ec262a79f3c88f7f3389e8200658992", - "preimage_hash": b"f8772c6ecf9d903698fb8c51cd7b99605af298478989945936935da65e064695", + "prevouts_hash": "bd4318eecf841a0cf01c2be532cf4bc3303e881e2aface159f1882f153152688", + "sequence_hash": "9ac6a31952ff626bf5a0a30d3d8ac63a0d4298d33d7bc38854bfa5860695e30a", + "outputs_hash": "d0cadf116b4441f5e1e17814908dee509ec262a79f3c88f7f3389e8200658992", + "preimage_hash": "f8772c6ecf9d903698fb8c51cd7b99605af298478989945936935da65e064695", }, { "expiry": 231041495, @@ -75,10 +75,10 @@ class TestZcashZip243(unittest.TestCase): "version": 4, "version_group_id": 0x892F2085, "branch_id": 0x76B809BB, - "prevouts_hash": b"8e286c6c0dde3119271c9c1398ef46614b0253c502b00a3691cec2e9047da35b", - "sequence_hash": b"58477fd9ecd5faf3e08159e0ab5fdaab66cab364d081498ddcef41de0af3624e", - "outputs_hash": b"c518797fc6f2c08fc22aa3f66122047b360e1db4df5c3feb28573c00cdf45fa1", - "preimage_hash": b"0eb47dc51d89cc52378fc182242f78ebd3609544a365d2270c23b4052f301025", + "prevouts_hash": "8e286c6c0dde3119271c9c1398ef46614b0253c502b00a3691cec2e9047da35b", + "sequence_hash": "58477fd9ecd5faf3e08159e0ab5fdaab66cab364d081498ddcef41de0af3624e", + "outputs_hash": "c518797fc6f2c08fc22aa3f66122047b360e1db4df5c3feb28573c00cdf45fa1", + "preimage_hash": "0eb47dc51d89cc52378fc182242f78ebd3609544a365d2270c23b4052f301025", }, { "expiry": 186996458, @@ -99,10 +99,10 @@ class TestZcashZip243(unittest.TestCase): "version": 4, "version_group_id": 0x892F2085, "branch_id": 0x76B809BB, - "prevouts_hash": b"445bc6328cd33b3c86259953dd674bded341ff1e1104dc21856919e9761036dd", - "sequence_hash": b"42e1d5c2636f165afaa954afa6d7a50779eb145e947bf668f1a40dd771c711fc", - "outputs_hash": b"869eda84eecf7257f9979a4848bbf52f4969a5736594ab7ba41452e7bb906824", - "preimage_hash": b"7f6b5439a64b20faf6f9f9460bc75c333c4799e9b04c80c26a79b8e801b8b6e1", + "prevouts_hash": "445bc6328cd33b3c86259953dd674bded341ff1e1104dc21856919e9761036dd", + "sequence_hash": "42e1d5c2636f165afaa954afa6d7a50779eb145e947bf668f1a40dd771c711fc", + "outputs_hash": "869eda84eecf7257f9979a4848bbf52f4969a5736594ab7ba41452e7bb906824", + "preimage_hash": "7f6b5439a64b20faf6f9f9460bc75c333c4799e9b04c80c26a79b8e801b8b6e1", }, { "expiry": 254788522, @@ -135,10 +135,10 @@ class TestZcashZip243(unittest.TestCase): "version": 4, "version_group_id": 0x892F2085, "branch_id": 0x76B809BB, - "prevouts_hash": b"509abdfafcc75265037f1ce6a4658ac9ecadd7b82378c3fbaeb48ab437ff6898", - "sequence_hash": b"2b13f671cd1a9aa04c1e250eef74a316d7d2b049360d20604514ddc2dfacfd23", - "outputs_hash": b"4f01b8785e80779290aa86c16b24952f9b7f8bc09da44e68f760ab1920ab8f2a", - "preimage_hash": b"46152b79ebeba4089d05724e33d4a5e6d6ea9e3a2fe777af6644318ba93a1ca0", + "prevouts_hash": "509abdfafcc75265037f1ce6a4658ac9ecadd7b82378c3fbaeb48ab437ff6898", + "sequence_hash": "2b13f671cd1a9aa04c1e250eef74a316d7d2b049360d20604514ddc2dfacfd23", + "outputs_hash": "4f01b8785e80779290aa86c16b24952f9b7f8bc09da44e68f760ab1920ab8f2a", + "preimage_hash": "46152b79ebeba4089d05724e33d4a5e6d6ea9e3a2fe777af6644318ba93a1ca0", }, # "Test vector 3" from https://github.com/zcash/zips/blob/master/zip-0243.rst { @@ -169,10 +169,10 @@ class TestZcashZip243(unittest.TestCase): "version": 4, "version_group_id": 0x892F2085, "branch_id": 0x76B809BB, - "prevouts_hash": b"fae31b8dec7b0b77e2c8d6b6eb0e7e4e55abc6574c26dd44464d9408a8e33f11", - "sequence_hash": b"6c80d37f12d89b6f17ff198723e7db1247c4811d1a695d74d930f99e98418790", - "outputs_hash": b"d2b04118469b7810a0d1cc59568320aad25a84f407ecac40b4f605a4e6868454", - "preimage_hash": b"6c210ce6417539d4aa9546f6184e33ca89224ac4559d2a9c4cf090b646692bd9", + "prevouts_hash": "fae31b8dec7b0b77e2c8d6b6eb0e7e4e55abc6574c26dd44464d9408a8e33f11", + "sequence_hash": "6c80d37f12d89b6f17ff198723e7db1247c4811d1a695d74d930f99e98418790", + "outputs_hash": "d2b04118469b7810a0d1cc59568320aad25a84f407ecac40b4f605a4e6868454", + "preimage_hash": "6c210ce6417539d4aa9546f6184e33ca89224ac4559d2a9c4cf090b646692bd9", }, ] @@ -196,7 +196,7 @@ def test_zip243(self): for i in v["inputs"]: txi = TxInput( amount=i["amount"], - prev_hash=unhexlify(i["prevout"][0]), + prev_hash=bytes.fromhex(i["prevout"][0]), prev_index=i["prevout"][1], script_type=i["script_type"], sequence=i["sequence"], @@ -206,28 +206,22 @@ def test_zip243(self): for o in v["outputs"]: txo = PrevOutput( amount=o["amount"], - script_pubkey=unhexlify(o["script_pubkey"]), + script_pubkey=bytes.fromhex(o["script_pubkey"]), ) zip243.add_output(txo, txo.script_pubkey) + self.assertEqual(get_tx_hash(zip243.h_prevouts).hex(), v["prevouts_hash"]) + self.assertEqual(get_tx_hash(zip243.h_sequence).hex(), v["sequence_hash"]) + self.assertEqual(get_tx_hash(zip243.h_outputs).hex(), v["outputs_hash"]) self.assertEqual( - hexlify(get_tx_hash(zip243.h_prevouts)), v["prevouts_hash"] - ) - self.assertEqual( - hexlify(get_tx_hash(zip243.h_sequence)), v["sequence_hash"] - ) - self.assertEqual(hexlify(get_tx_hash(zip243.h_outputs)), v["outputs_hash"]) - self.assertEqual( - hexlify( - zip243.hash143( - txi, - [unhexlify(i["pubkey"])], - 1, - tx, - coin, - SigHashType.SIGHASH_ALL, - ) - ), + zip243.hash143( + txi, + [bytes.fromhex(i["pubkey"])], + 1, + tx, + coin, + SigHashType.SIGHASH_ALL, + ).hex(), v["preimage_hash"], ) diff --git a/core/tests/test_apps.cardano.address.py b/core/tests/test_apps.cardano.address.py index 63dc5001da1..2591e28e4d1 100644 --- a/core/tests/test_apps.cardano.address.py +++ b/core/tests/test_apps.cardano.address.py @@ -61,22 +61,22 @@ def test_hardened_address_derivation_scheme(self): nodes = [ ( - b"3881a8de77d069001010d7f7d5211552e7d539b0e253add710367f95e528ed51", - b"9b77608b38e0a0c7861aa234557c81482f42aae2d17993a8ddaec1868fb04d60", - b"a938c8554ae04616cfaae7cd0eb557475082c4e910242ce774967e0bd7492408", - b"cbf6ab47c8eb1a0477fc40b25dbb6c4a99454edb97d6fe5acedd3e238ef46fe0", + "3881a8de77d069001010d7f7d5211552e7d539b0e253add710367f95e528ed51", + "9b77608b38e0a0c7861aa234557c81482f42aae2d17993a8ddaec1868fb04d60", + "a938c8554ae04616cfaae7cd0eb557475082c4e910242ce774967e0bd7492408", + "cbf6ab47c8eb1a0477fc40b25dbb6c4a99454edb97d6fe5acedd3e238ef46fe0", ), ( - b"3003aca659846540b9ed04f2b844f2d8ea964856ca38a7dffedef4f6e528ed51", - b"8844ccc81d633e1c7126f30c2524c1652617cf58da755014070215bf5070ba38", - b"be28c00ed6cb9b70310f78028f8e3a2db935baf482d84afa590b0b5b864571cc", - b"584b4631d752023a249e980779517280e6c0b3ac7a7f27c6e9456bfd228ca60b", + "3003aca659846540b9ed04f2b844f2d8ea964856ca38a7dffedef4f6e528ed51", + "8844ccc81d633e1c7126f30c2524c1652617cf58da755014070215bf5070ba38", + "be28c00ed6cb9b70310f78028f8e3a2db935baf482d84afa590b0b5b864571cc", + "584b4631d752023a249e980779517280e6c0b3ac7a7f27c6e9456bfd228ca60b", ), ( - b"68e4482add0a741e14c8f2306bf83206a623e3729dd24175915eedece428ed51", - b"3165a80c5efe846224d46a0427cdb2be4f31ea3585c51f4131faefc4328ad95a", - b"9a32499976ffb582daa9988dfc42a303de5ed00c320c929f496be3c6eb1cf405", - b"da07ca30a3d1c5fe3c34ce5fa197722446a646624a10bdf8889a4b9c347b2ef2", + "68e4482add0a741e14c8f2306bf83206a623e3729dd24175915eedece428ed51", + "3165a80c5efe846224d46a0427cdb2be4f31ea3585c51f4131faefc4328ad95a", + "9a32499976ffb582daa9988dfc42a303de5ed00c320c929f496be3c6eb1cf405", + "da07ca30a3d1c5fe3c34ce5fa197722446a646624a10bdf8889a4b9c347b2ef2", ), ] @@ -84,10 +84,10 @@ def test_hardened_address_derivation_scheme(self): n = self.keychain.derive( [0x80000000 | 44, 0x80000000 | 1815, 0x80000000, 0, 0x80000000 + i] ) - self.assertEqual(hexlify(n.private_key()), priv) - self.assertEqual(hexlify(n.private_key_ext()), ext) - self.assertEqual(hexlify(seed.remove_ed25519_prefix(n.public_key())), pub) - self.assertEqual(hexlify(n.chain_code()), chain) + self.assertEqual(n.private_key().hex(), priv) + self.assertEqual(n.private_key_ext().hex(), ext) + self.assertEqual(seed.remove_ed25519_prefix(n.public_key()).hex(), pub) + self.assertEqual(n.chain_code().hex(), chain) def test_non_hardened_address_derivation_scheme(self): addresses = [ @@ -112,22 +112,22 @@ def test_non_hardened_address_derivation_scheme(self): nodes = [ ( - b"d03ba81163fd55af97bd132bf651a0da5b5e6201b15b1caca60b0be8e028ed51", - b"493f44aa8d25fe0d3fe2935c76ea6b3e9e41c79e9dbcbe7131357c5aa1b6cac5", - b"b90fb812a2268e9569ff1172e8daed1da3dc7e72c7bded7c5bcb7282039f90d5", - b"fd8e71c1543de2cdc7f7623130c5f2cceb53549055fa1f5bc88199989e08cce7", + "d03ba81163fd55af97bd132bf651a0da5b5e6201b15b1caca60b0be8e028ed51", + "493f44aa8d25fe0d3fe2935c76ea6b3e9e41c79e9dbcbe7131357c5aa1b6cac5", + "b90fb812a2268e9569ff1172e8daed1da3dc7e72c7bded7c5bcb7282039f90d5", + "fd8e71c1543de2cdc7f7623130c5f2cceb53549055fa1f5bc88199989e08cce7", ), ( - b"08b6438c8dd49d34b71c8e914d6ac3184e5ab3dcc8af023d08503a7edf28ed51", - b"3fee605fdfaddc1ee2ea0b246b02c9abc54ad741054bc83943e8b21487b5a053", - b"89053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea", - b"26308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a635", + "08b6438c8dd49d34b71c8e914d6ac3184e5ab3dcc8af023d08503a7edf28ed51", + "3fee605fdfaddc1ee2ea0b246b02c9abc54ad741054bc83943e8b21487b5a053", + "89053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea", + "26308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a635", ), ( - b"088f0275bf4a1bd18f08d7ef06c6ddb6ce7e3dc415fb4e89fe21bf39e628ed51", - b"4c44563c7df519ea9b4d1801c1ab98b449db28b87f1c3837759c20f68c4c1e65", - b"52548cb98e6f46a592bdf7f3598a9abc0126c78dfa3f46d1894ee52a5213e833", - b"91af0668ee449e613e61bbb2482e5ddee1d9b15785727ec3e362c36861bff923", + "088f0275bf4a1bd18f08d7ef06c6ddb6ce7e3dc415fb4e89fe21bf39e628ed51", + "4c44563c7df519ea9b4d1801c1ab98b449db28b87f1c3837759c20f68c4c1e65", + "52548cb98e6f46a592bdf7f3598a9abc0126c78dfa3f46d1894ee52a5213e833", + "91af0668ee449e613e61bbb2482e5ddee1d9b15785727ec3e362c36861bff923", ), ] @@ -135,10 +135,10 @@ def test_non_hardened_address_derivation_scheme(self): n = self.keychain.derive( [0x80000000 | 44, 0x80000000 | 1815, 0x80000000, 0, i] ) - self.assertEqual(hexlify(n.private_key()), priv) - self.assertEqual(hexlify(n.private_key_ext()), ext) - self.assertEqual(hexlify(seed.remove_ed25519_prefix(n.public_key())), pub) - self.assertEqual(hexlify(n.chain_code()), chain) + self.assertEqual(n.private_key().hex(), priv) + self.assertEqual(n.private_key_ext().hex(), ext) + self.assertEqual(seed.remove_ed25519_prefix(n.public_key()).hex(), pub) + self.assertEqual(n.chain_code().hex(), chain) def test_root_address_derivation_scheme(self): # 44'/1815' @@ -157,17 +157,17 @@ def test_root_address_derivation_scheme(self): ) priv, ext, pub, chain = ( - b"204ec79cbb6502a141de60d274962010c7f1c94a2987b26506433184d228ed51", - b"975cdd1c8610b44701567f05934c45c8716064263ccfe72ed2167ccb705c09b6", - b"8c47ebce34234d04fd3dfbac33feaba6133e4e3d77c4b5ab18120ec6878ad4ce", - b"02ac67c59a8b0264724a635774ca2c242afa10d7ab70e2bf0a8f7d4bb10f1f7a", + "204ec79cbb6502a141de60d274962010c7f1c94a2987b26506433184d228ed51", + "975cdd1c8610b44701567f05934c45c8716064263ccfe72ed2167ccb705c09b6", + "8c47ebce34234d04fd3dfbac33feaba6133e4e3d77c4b5ab18120ec6878ad4ce", + "02ac67c59a8b0264724a635774ca2c242afa10d7ab70e2bf0a8f7d4bb10f1f7a", ) n = self.keychain.derive([0x80000000 | 44, 0x80000000 | 1815]) - self.assertEqual(hexlify(n.private_key()), priv) - self.assertEqual(hexlify(n.private_key_ext()), ext) - self.assertEqual(hexlify(seed.remove_ed25519_prefix(n.public_key())), pub) - self.assertEqual(hexlify(n.chain_code()), chain) + self.assertEqual(n.private_key().hex(), priv) + self.assertEqual(n.private_key_ext().hex(), ext) + self.assertEqual(seed.remove_ed25519_prefix(n.public_key()).hex(), pub) + self.assertEqual(n.chain_code().hex(), chain) def test_address_hash(self): data = [ @@ -203,17 +203,15 @@ def test_slip39_128(self): node = cardano.from_seed_slip23(master_secret) # Check root node. - root_priv = b"c0fe4a6973df4de06262693fc9186f71faf292960350882d49456bf108d13954" - root_ext = b"4064253ffefc4127489bce1b825a47329010c5afb4d21154ef949ef786204405" - root_pub = b"83e3ecaf57f90f022c45e10d1b8cb78499c30819515ad9a81ad82139fdb12a90" - root_chain = b"22c12755afdd192742613b3062069390743ea232bc1b366c8f41e37292af9305" + root_priv = "c0fe4a6973df4de06262693fc9186f71faf292960350882d49456bf108d13954" + root_ext = "4064253ffefc4127489bce1b825a47329010c5afb4d21154ef949ef786204405" + root_pub = "83e3ecaf57f90f022c45e10d1b8cb78499c30819515ad9a81ad82139fdb12a90" + root_chain = "22c12755afdd192742613b3062069390743ea232bc1b366c8f41e37292af9305" - self.assertEqual(hexlify(node.private_key()), root_priv) - self.assertEqual(hexlify(node.private_key_ext()), root_ext) - self.assertEqual( - hexlify(seed.remove_ed25519_prefix(node.public_key())), root_pub - ) - self.assertEqual(hexlify(node.chain_code()), root_chain) + self.assertEqual(node.private_key().hex(), root_priv) + self.assertEqual(node.private_key_ext().hex(), root_ext) + self.assertEqual(seed.remove_ed25519_prefix(node.public_key()).hex(), root_pub) + self.assertEqual(node.chain_code().hex(), root_chain) # Check derived nodes and addresses. keychain = Keychain(node) @@ -221,24 +219,24 @@ def test_slip39_128(self): nodes = [ ( "Ae2tdPwUPEYxF9NAMNdd3v2LZoMeWp7gCZiDb6bZzFQeeVASzoP7HC4V9s6", - b"e0acfe234aa6e1219ce7d3d8d91853e0808bab92ecb8a0ff0f345ff31ad13954", - b"ff89dc71365c4b67bb7bb75d566e65b8a95f16e4d70cce51c25937db15614530", - b"bc043d84b8b891d49890edb6aced6f2d78395f255c5b6aea8878b913f83e8579", - b"dc3f0d2b5cccb822335ef6213fd133f4ca934151ec44a6000aee43b8a101078c", + "e0acfe234aa6e1219ce7d3d8d91853e0808bab92ecb8a0ff0f345ff31ad13954", + "ff89dc71365c4b67bb7bb75d566e65b8a95f16e4d70cce51c25937db15614530", + "bc043d84b8b891d49890edb6aced6f2d78395f255c5b6aea8878b913f83e8579", + "dc3f0d2b5cccb822335ef6213fd133f4ca934151ec44a6000aee43b8a101078c", ), ( "Ae2tdPwUPEZ1TjYcvfkWAbiHtGVxv4byEHHZoSyQXjPJ362DifCe1ykgqgy", - b"d0ce3e7a6445bc91801319b9bbaf47fdfca9364257295fb13bc5046a20d13954", - b"c800359abdc875944754ae7368bab7ef75184d48816c368f5a28af4bcf1d1ee8", - b"24c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c", - b"6f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b", + "d0ce3e7a6445bc91801319b9bbaf47fdfca9364257295fb13bc5046a20d13954", + "c800359abdc875944754ae7368bab7ef75184d48816c368f5a28af4bcf1d1ee8", + "24c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c", + "6f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b", ), ( "Ae2tdPwUPEZGXmSbda1kBNfyhRQGRcQxJFdk7mhWZXAGnapyejv2b2U3aRb", - b"e8320644cce22a6e9fc33865fc5a598b1cda061c47a548aead3af4ed1cd13954", - b"9e2ece5d7fe8119cb76090009be926a84fc5d3b95855b5962ffe2f880836cf09", - b"831a63d381a8dab1e6e1ee991a4300fc70687aae5f97f4fcf92ed1b6c2bd99de", - b"672d6af4707aba201b7940231e83dd357f92f8851b3dfdc224ef311e1b64cdeb", + "e8320644cce22a6e9fc33865fc5a598b1cda061c47a548aead3af4ed1cd13954", + "9e2ece5d7fe8119cb76090009be926a84fc5d3b95855b5962ffe2f880836cf09", + "831a63d381a8dab1e6e1ee991a4300fc70687aae5f97f4fcf92ed1b6c2bd99de", + "672d6af4707aba201b7940231e83dd357f92f8851b3dfdc224ef311e1b64cdeb", ), ] @@ -256,10 +254,10 @@ def test_slip39_128(self): ) n = keychain.derive([0x80000000 | 44, 0x80000000 | 1815, 0x80000000, 0, i]) self.assertEqual(a, address) - self.assertEqual(hexlify(n.private_key()), priv) - self.assertEqual(hexlify(n.private_key_ext()), ext) - self.assertEqual(hexlify(seed.remove_ed25519_prefix(n.public_key())), pub) - self.assertEqual(hexlify(n.chain_code()), chain) + self.assertEqual(n.private_key().hex(), priv) + self.assertEqual(n.private_key_ext().hex(), ext) + self.assertEqual(seed.remove_ed25519_prefix(n.public_key()).hex(), pub) + self.assertEqual(n.chain_code().hex(), chain) def test_slip39_256(self): mnemonics = [ @@ -279,17 +277,15 @@ def test_slip39_256(self): node = cardano.from_seed_slip23(master_secret) # Check root node. - root_priv = b"90633724b5daf770a8b420b8658e7d8bc21e066b60ec8cd4d5730681cc294e4f" - root_ext = b"f9d99bf3cd9c7e12663e8646afa40cb3aecf15d91f2abc15d21056c6bccb3414" - root_pub = b"eea170f0ef97b59d22907cb429888029721ed67d3e7a1b56b81731086ab7db64" - root_chain = b"04f1de750b62725fcc1ae1b93ca4063acb53c486b959cadaa100ebd7828e5460" + root_priv = "90633724b5daf770a8b420b8658e7d8bc21e066b60ec8cd4d5730681cc294e4f" + root_ext = "f9d99bf3cd9c7e12663e8646afa40cb3aecf15d91f2abc15d21056c6bccb3414" + root_pub = "eea170f0ef97b59d22907cb429888029721ed67d3e7a1b56b81731086ab7db64" + root_chain = "04f1de750b62725fcc1ae1b93ca4063acb53c486b959cadaa100ebd7828e5460" - self.assertEqual(hexlify(node.private_key()), root_priv) - self.assertEqual(hexlify(node.private_key_ext()), root_ext) - self.assertEqual( - hexlify(seed.remove_ed25519_prefix(node.public_key())), root_pub - ) - self.assertEqual(hexlify(node.chain_code()), root_chain) + self.assertEqual(node.private_key().hex(), root_priv) + self.assertEqual(node.private_key_ext().hex(), root_ext) + self.assertEqual(seed.remove_ed25519_prefix(node.public_key()).hex(), root_pub) + self.assertEqual(node.chain_code().hex(), root_chain) # Check derived nodes and addresses. keychain = Keychain(node) @@ -297,24 +293,24 @@ def test_slip39_256(self): nodes = [ ( "Ae2tdPwUPEYyDD1C2FbVJFAE3FuAxLspfMYt29TJ1urnSKr57cVhEcioSCC", - b"38e8a4b17ca07b6a309f1cee83f87593e34a1fc3a289785ea451ef65df294e4f", - b"405d10ef71c2b0019250d11837de8db825d8556bf1e57f8866920af6d8c90002", - b"967a9a041ad1379e31c2c7f2aa4bc2b3f7769341c0ea89ccfb12a904f2e10877", - b"7b15d8d9006afe3cd7e04f375a1126a8c7c7c07c59a6f0c5b0310f4245f4edbb", + "38e8a4b17ca07b6a309f1cee83f87593e34a1fc3a289785ea451ef65df294e4f", + "405d10ef71c2b0019250d11837de8db825d8556bf1e57f8866920af6d8c90002", + "967a9a041ad1379e31c2c7f2aa4bc2b3f7769341c0ea89ccfb12a904f2e10877", + "7b15d8d9006afe3cd7e04f375a1126a8c7c7c07c59a6f0c5b0310f4245f4edbb", ), ( "Ae2tdPwUPEZHJGtyz47F6wD7qAegt1JNRJWuiE36QLvFzeqJPBZ2EBvhr8M", - b"a09f90e3f76a7bdb7f8721cc0c142dbd6398fd704b83455e123fa886dc294e4f", - b"917e4166bb404def9f12634e84ecbcb98afdea051ba7c38745e208178a9e9baf", - b"6f3805bbc1b7a75afa95dffec331671f3c4662800615e80d2ec1202a9d874c86", - b"44baf30fd549e6a1e05f99c2a2c8971aea8894ee8d9c5fc2c5ae6ee839a56b2d", + "a09f90e3f76a7bdb7f8721cc0c142dbd6398fd704b83455e123fa886dc294e4f", + "917e4166bb404def9f12634e84ecbcb98afdea051ba7c38745e208178a9e9baf", + "6f3805bbc1b7a75afa95dffec331671f3c4662800615e80d2ec1202a9d874c86", + "44baf30fd549e6a1e05f99c2a2c8971aea8894ee8d9c5fc2c5ae6ee839a56b2d", ), ( "Ae2tdPwUPEYxD9xNPBJTzYmtFVVWEPB6KW4TCDijQ4pDwU11wt5621PyCi4", - b"78dd824aea33bed5c1502d1a17f11a4adbe923aac1cd1f7ae98c9506db294e4f", - b"ddfe7f27e2894b983df773d8ac2a07973fc37ff36e93a2f2d71fb7327d4e18f4", - b"7f145b50ef07fb9accc40ee07a01fe93ceb6fa07d5a9f20fc3c8a48246dd4d02", - b"e67d2864614ada5eec8fb8ee1225a94a6fb0a1b3c347c854ec3037351c6a0fc7", + "78dd824aea33bed5c1502d1a17f11a4adbe923aac1cd1f7ae98c9506db294e4f", + "ddfe7f27e2894b983df773d8ac2a07973fc37ff36e93a2f2d71fb7327d4e18f4", + "7f145b50ef07fb9accc40ee07a01fe93ceb6fa07d5a9f20fc3c8a48246dd4d02", + "e67d2864614ada5eec8fb8ee1225a94a6fb0a1b3c347c854ec3037351c6a0fc7", ), ] @@ -332,10 +328,10 @@ def test_slip39_256(self): ) n = keychain.derive([0x80000000 | 44, 0x80000000 | 1815, 0x80000000, 0, i]) self.assertEqual(a, address) - self.assertEqual(hexlify(n.private_key()), priv) - self.assertEqual(hexlify(n.private_key_ext()), ext) - self.assertEqual(hexlify(seed.remove_ed25519_prefix(n.public_key())), pub) - self.assertEqual(hexlify(n.chain_code()), chain) + self.assertEqual(n.private_key().hex(), priv) + self.assertEqual(n.private_key_ext().hex(), ext) + self.assertEqual(seed.remove_ed25519_prefix(n.public_key()).hex(), pub) + self.assertEqual(n.chain_code().hex(), chain) def test_testnet_byron_address(self): addresses = [ @@ -371,7 +367,7 @@ def test_derive_address(self): "BASE_OWN_STAKING_KEY_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[1852 | HARDENED, 1815 | HARDENED, 4 | HARDENED, 0, 0], - staking_key_hash=unhexlify( + staking_key_hash=bytes.fromhex( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff" ), ), @@ -379,7 +375,7 @@ def test_derive_address(self): "BASE_FOREIGN_STAKING_KEY_HASH_ACCOUNT_4": CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[1852 | HARDENED, 1815 | HARDENED, 4 | HARDENED, 0, 0], - staking_key_hash=unhexlify( + staking_key_hash=bytes.fromhex( "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277" ), ), @@ -387,7 +383,7 @@ def test_derive_address(self): "BASE_FOREIGN_STAKING_KEY_HASH_ACCOUNT_0": CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], - staking_key_hash=unhexlify( + staking_key_hash=bytes.fromhex( "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277" ), ), @@ -400,23 +396,23 @@ def test_derive_address(self): 2, 0, ], - script_payment_hash=unhexlify( + script_payment_hash=bytes.fromhex( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), ), "BASE_KEY_SCRIPT_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.BASE_KEY_SCRIPT, address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], - script_staking_hash=unhexlify( + script_staking_hash=bytes.fromhex( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), "BASE_SCRIPT_SCRIPT_HASHES": CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_SCRIPT, - script_payment_hash=unhexlify( + script_payment_hash=bytes.fromhex( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), - script_staking_hash=unhexlify( + script_staking_hash=bytes.fromhex( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), @@ -439,7 +435,7 @@ def test_derive_address(self): certificate_pointer=CardanoBlockchainPointerType( block_index=24157, tx_index=177, certificate_index=42 ), - script_payment_hash=unhexlify( + script_payment_hash=bytes.fromhex( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), ), @@ -449,7 +445,7 @@ def test_derive_address(self): ), "ENTERPRISE_SCRIPT_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.ENTERPRISE_SCRIPT, - script_payment_hash=unhexlify( + script_payment_hash=bytes.fromhex( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), ), @@ -465,7 +461,7 @@ def test_derive_address(self): ), "REWARD_SCRIPT_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.REWARD_SCRIPT, - script_staking_hash=unhexlify( + script_staking_hash=bytes.fromhex( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), @@ -667,7 +663,7 @@ def test_validate_address_parameters(self): 2, 0, ], - staking_key_hash=unhexlify( + staking_key_hash=bytes.fromhex( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff" ), ), @@ -676,7 +672,7 @@ def test_validate_address_parameters(self): address_type=CardanoAddressType.BASE, address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], address_n_staking=None, - staking_key_hash=unhexlify( + staking_key_hash=bytes.fromhex( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8d" ), ), @@ -697,14 +693,14 @@ def test_validate_address_parameters(self): CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_KEY, script_payment_hash=None, - staking_key_hash=unhexlify( + staking_key_hash=bytes.fromhex( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8d" ), ), # base_script_key address - address_n_staking is not a staking path CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_KEY, - script_payment_hash=unhexlify( + script_payment_hash=bytes.fromhex( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), address_n_staking=[ @@ -725,14 +721,14 @@ def test_validate_address_parameters(self): CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_SCRIPT, script_payment_hash=None, - script_staking_hash=unhexlify( + script_staking_hash=bytes.fromhex( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), # base_script_script address - script_staking and script_staking_hash are None CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_SCRIPT, - script_payment_hash=unhexlify( + script_payment_hash=bytes.fromhex( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), script_staking_hash=None, @@ -746,7 +742,7 @@ def test_validate_address_parameters(self): # pointer_script address - pointer is None CardanoAddressParametersType( address_type=CardanoAddressType.POINTER_SCRIPT, - script_payment_hash=unhexlify( + script_payment_hash=bytes.fromhex( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), certificate_pointer=None, @@ -778,14 +774,14 @@ def test_validate_address_parameters(self): CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], - staking_key_hash=unhexlify( + staking_key_hash=bytes.fromhex( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff" ), ), CardanoAddressParametersType( address_type=CardanoAddressType.BASE_KEY_SCRIPT, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], - script_staking_hash=unhexlify( + script_staking_hash=bytes.fromhex( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), diff --git a/core/tests/test_apps.cardano.certificate.py b/core/tests/test_apps.cardano.certificate.py index 198d5e7444b..d14d2c23aff 100644 --- a/core/tests/test_apps.cardano.certificate.py +++ b/core/tests/test_apps.cardano.certificate.py @@ -27,13 +27,13 @@ def test_validate_certificate(self): ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -44,14 +44,14 @@ def test_validate_certificate(self): ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION_CONWAY, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), deposit=2000000, ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION_CONWAY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), deposit=2000000, @@ -59,25 +59,25 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_DELEGATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_DELEGATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), ), @@ -87,13 +87,13 @@ def test_validate_certificate(self): ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -104,14 +104,14 @@ def test_validate_certificate(self): ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), deposit=2000000, ), CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), deposit=2000000, @@ -119,10 +119,10 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_POOL_REGISTRATION, pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -137,38 +137,38 @@ def test_validate_certificate(self): ), CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.KEY_HASH, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), ), CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.SCRIPT_HASH, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), ), CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep(type=CardanoDRepType.ABSTAIN), ), CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep(type=CardanoDRepType.NO_CONFIDENCE), @@ -184,17 +184,17 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), # STAKE_REGISTRATION both script_hash and key_hash are set CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -202,7 +202,7 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), ), @@ -217,10 +217,10 @@ def test_validate_certificate(self): type=CardanoCertificateType.STAKE_REGISTRATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -241,7 +241,7 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION_CONWAY, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), deposit=2000000, @@ -249,10 +249,10 @@ def test_validate_certificate(self): # STAKE_REGISTRATION_CONWAY both script_hash and key_hash are set CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION_CONWAY, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), deposit=2000000, @@ -261,7 +261,7 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_REGISTRATION_CONWAY, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), deposit=2000000, @@ -276,10 +276,10 @@ def test_validate_certificate(self): type=CardanoCertificateType.STAKE_REGISTRATION_CONWAY, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -295,7 +295,7 @@ def test_validate_certificate(self): # STAKE_DELEGATION neither path or script_hash is set CardanoTxCertificate( type=CardanoCertificateType.STAKE_DELEGATION, - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), ), @@ -303,23 +303,23 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_DELEGATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), ), # STAKE_DELEGATION both script_hash and key_hash are set CardanoTxCertificate( type=CardanoCertificateType.STAKE_DELEGATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), ), @@ -327,14 +327,14 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_DELEGATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -354,17 +354,17 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), # STAKE_DEREGISTRATION both script_hash and key_hash are set CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -372,7 +372,7 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), ), @@ -387,10 +387,10 @@ def test_validate_certificate(self): type=CardanoCertificateType.STAKE_DEREGISTRATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -411,7 +411,7 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), deposit=2000000, @@ -419,10 +419,10 @@ def test_validate_certificate(self): # STAKE_DEREGISTRATION_CONWAY both script_hash and key_hash are set CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), deposit=2000000, @@ -431,7 +431,7 @@ def test_validate_certificate(self): CardanoTxCertificate( type=CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), deposit=2000000, @@ -446,10 +446,10 @@ def test_validate_certificate(self): type=CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -471,10 +471,10 @@ def test_validate_certificate(self): type=CardanoCertificateType.STAKE_POOL_REGISTRATION, path=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0], pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -489,14 +489,14 @@ def test_validate_certificate(self): # STAKE_POOL_REGISTRATION script hash is set CardanoTxCertificate( type=CardanoCertificateType.STAKE_POOL_REGISTRATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -511,14 +511,14 @@ def test_validate_certificate(self): # STAKE_POOL_REGISTRATION key hash is set CardanoTxCertificate( type=CardanoCertificateType.STAKE_POOL_REGISTRATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -533,17 +533,17 @@ def test_validate_certificate(self): # STAKE_POOL_REGISTRATION pool is set CardanoTxCertificate( type=CardanoCertificateType.STAKE_POOL_REGISTRATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - pool=unhexlify( + pool=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), pool_parameters=CardanoPoolParametersType( - pool_id=unhexlify( + pool_id=bytes.fromhex( "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" ), - vrf_key_hash=unhexlify( + vrf_key_hash=bytes.fromhex( "198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d0640" ), pledge=500000000, @@ -558,14 +558,14 @@ def test_validate_certificate(self): # VOTE_REGISTRATION missing drep CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), # VOTE_REGISTRATION missing key hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep(type=CardanoDRepType.KEY_HASH), @@ -573,7 +573,7 @@ def test_validate_certificate(self): # VOTE_REGISTRATION missing script hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep(type=CardanoDRepType.SCRIPT_HASH), @@ -581,12 +581,12 @@ def test_validate_certificate(self): # VOTE_REGISTRATION unexpected script hash set instead of key hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.KEY_HASH, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -594,12 +594,12 @@ def test_validate_certificate(self): # VOTE_REGISTRATION unexpected key hash set instead of script hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.SCRIPT_HASH, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -607,15 +607,15 @@ def test_validate_certificate(self): # VOTE_REGISTRATION key hash set but unexpected script hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.KEY_HASH, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -623,15 +623,15 @@ def test_validate_certificate(self): # VOTE_REGISTRATION script hash set but unexpected key hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.SCRIPT_HASH, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -639,12 +639,12 @@ def test_validate_certificate(self): # VOTE_REGISTRATION unexpected key hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.ABSTAIN, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -652,12 +652,12 @@ def test_validate_certificate(self): # VOTE_REGISTRATION unexpected key hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.NO_CONFIDENCE, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -665,12 +665,12 @@ def test_validate_certificate(self): # VOTE_REGISTRATION unexpected script hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.ABSTAIN, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -678,12 +678,12 @@ def test_validate_certificate(self): # VOTE_REGISTRATION unexpected script hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.NO_CONFIDENCE, - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -691,15 +691,15 @@ def test_validate_certificate(self): # VOTE_REGISTRATION unexpected script hash and key hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.ABSTAIN, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), @@ -707,15 +707,15 @@ def test_validate_certificate(self): # VOTE_REGISTRATION unexpected script hash and key hash CardanoTxCertificate( type=CardanoCertificateType.VOTE_DELEGATION, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), drep=CardanoDRep( type=CardanoDRepType.NO_CONFIDENCE, - key_hash=unhexlify( + key_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), - script_hash=unhexlify( + script_hash=bytes.fromhex( "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd" ), ), diff --git a/core/tests/test_apps.cardano.get_public_key.py b/core/tests/test_apps.cardano.get_public_key.py index be487b5d018..f5f55a8d660 100644 --- a/core/tests/test_apps.cardano.get_public_key.py +++ b/core/tests/test_apps.cardano.get_public_key.py @@ -34,25 +34,25 @@ def test_get_public_key_scheme_12_words(self): ] public_keys = [ - b"a938c8554ae04616cfaae7cd0eb557475082c4e910242ce774967e0bd7492408", - b"8c47ebce34234d04fd3dfbac33feaba6133e4e3d77c4b5ab18120ec6878ad4ce", - b"17cc0bf978756d0d5c76f931629036a810c61801b78beecb44555773d13e3791", - b"b90fb812a2268e9569ff1172e8daed1da3dc7e72c7bded7c5bcb7282039f90d5", - b"f698a764b23aa6667b1157fc4247c6a1b58c21a3865ac6a47a3590167a9e0211", - b"e9c46841be76e3be0289694fd5c7503c04f40e5b036abac200b98a9006cf6647", - b"6d225f078ca611f00d86cbfd8ba6c6ac7826721434eae6525686efb878b72370", - b"5d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c1", + "a938c8554ae04616cfaae7cd0eb557475082c4e910242ce774967e0bd7492408", + "8c47ebce34234d04fd3dfbac33feaba6133e4e3d77c4b5ab18120ec6878ad4ce", + "17cc0bf978756d0d5c76f931629036a810c61801b78beecb44555773d13e3791", + "b90fb812a2268e9569ff1172e8daed1da3dc7e72c7bded7c5bcb7282039f90d5", + "f698a764b23aa6667b1157fc4247c6a1b58c21a3865ac6a47a3590167a9e0211", + "e9c46841be76e3be0289694fd5c7503c04f40e5b036abac200b98a9006cf6647", + "6d225f078ca611f00d86cbfd8ba6c6ac7826721434eae6525686efb878b72370", + "5d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c1", ] chain_codes = [ - b"cbf6ab47c8eb1a0477fc40b25dbb6c4a99454edb97d6fe5acedd3e238ef46fe0", - b"02ac67c59a8b0264724a635774ca2c242afa10d7ab70e2bf0a8f7d4bb10f1f7a", - b"646ac4a6295326bae6831be05921edfbcb362de48dfd37b12e74c227dfad768d", - b"fd8e71c1543de2cdc7f7623130c5f2cceb53549055fa1f5bc88199989e08cce7", - b"13cfb6de37a568aae56cadac907e6469b121464fe1b70a10c213eaea2cbb6636", - b"58f3f46f4a93e7a4431e75b10af7497b747c3053cb7466ed53f4277e78a63c52", - b"f72b3c361381db2d88289440268c94c5e7467c9414375e6b63d03026750f3c66", - b"f123474e140a2c360b01f0fa66f2f22e2e965a5b07a80358cf75f77abbd66088", + "cbf6ab47c8eb1a0477fc40b25dbb6c4a99454edb97d6fe5acedd3e238ef46fe0", + "02ac67c59a8b0264724a635774ca2c242afa10d7ab70e2bf0a8f7d4bb10f1f7a", + "646ac4a6295326bae6831be05921edfbcb362de48dfd37b12e74c227dfad768d", + "fd8e71c1543de2cdc7f7623130c5f2cceb53549055fa1f5bc88199989e08cce7", + "13cfb6de37a568aae56cadac907e6469b121464fe1b70a10c213eaea2cbb6636", + "58f3f46f4a93e7a4431e75b10af7497b747c3053cb7466ed53f4277e78a63c52", + "f72b3c361381db2d88289440268c94c5e7467c9414375e6b63d03026750f3c66", + "f123474e140a2c360b01f0fa66f2f22e2e965a5b07a80358cf75f77abbd66088", ] xpub_keys = [ @@ -69,8 +69,8 @@ def test_get_public_key_scheme_12_words(self): for index, derivation_path in enumerate(derivation_paths): key = _get_public_key(keychain, derivation_path) - self.assertEqual(hexlify(key.node.public_key), public_keys[index]) - self.assertEqual(hexlify(key.node.chain_code), chain_codes[index]) + self.assertEqual(key.node.public_key.hex(), public_keys[index]) + self.assertEqual(key.node.chain_code.hex(), chain_codes[index]) self.assertEqual(key.xpub, xpub_keys[index]) def test_get_public_key_scheme_18_words(self): @@ -84,13 +84,13 @@ def test_get_public_key_scheme_18_words(self): ] public_keys = [ - b"82f12f1916c0c35a412291e72204f17f033b0b7edf148dfd7d75acd3975c9ac0", - b"d92d0590e76bbf0300112a9f283fba2f7f8af5cf1054d634b610d1e4f541df90", + "82f12f1916c0c35a412291e72204f17f033b0b7edf148dfd7d75acd3975c9ac0", + "d92d0590e76bbf0300112a9f283fba2f7f8af5cf1054d634b610d1e4f541df90", ] chain_codes = [ - b"974f9cd4336e23b976f934752026a2d4c32d2e23f0532f4f87152b45fa5ca81f", - b"352499ed19b47f2bc8c164b47df0d55f428cc8c12f96b7e65d7563114ddfd75b", + "974f9cd4336e23b976f934752026a2d4c32d2e23f0532f4f87152b45fa5ca81f", + "352499ed19b47f2bc8c164b47df0d55f428cc8c12f96b7e65d7563114ddfd75b", ] xpub_keys = [ @@ -101,8 +101,8 @@ def test_get_public_key_scheme_18_words(self): for index, derivation_path in enumerate(derivation_paths): key = _get_public_key(keychain, derivation_path) - self.assertEqual(hexlify(key.node.public_key), public_keys[index]) - self.assertEqual(hexlify(key.node.chain_code), chain_codes[index]) + self.assertEqual(key.node.public_key.hex(), public_keys[index]) + self.assertEqual(key.node.chain_code.hex(), chain_codes[index]) self.assertEqual(key.xpub, xpub_keys[index]) def test_get_public_key_scheme_24_words(self): @@ -116,13 +116,13 @@ def test_get_public_key_scheme_24_words(self): ] public_keys = [ - b"9d45d1e979bd0b942adb1896019c85d08fbc562f012775a1f72fc7be8fe9e4b6", - b"a85a339897354931d584f828f6d79d4227ed16f3468990687ab42f13a87c9ea8", + "9d45d1e979bd0b942adb1896019c85d08fbc562f012775a1f72fc7be8fe9e4b6", + "a85a339897354931d584f828f6d79d4227ed16f3468990687ab42f13a87c9ea8", ] chain_codes = [ - b"aad67fd6d620f7af88ad816a229de09cfacff3e28008a528759b2e2cf28d859a", - b"e6f844931e7e2ec724e6e62efde662ae2669355322dc3eb9b307bc1c8e75e219", + "aad67fd6d620f7af88ad816a229de09cfacff3e28008a528759b2e2cf28d859a", + "e6f844931e7e2ec724e6e62efde662ae2669355322dc3eb9b307bc1c8e75e219", ] xpub_keys = [ @@ -133,8 +133,8 @@ def test_get_public_key_scheme_24_words(self): for index, derivation_path in enumerate(derivation_paths): key = _get_public_key(keychain, derivation_path) - self.assertEqual(hexlify(key.node.public_key), public_keys[index]) - self.assertEqual(hexlify(key.node.chain_code), chain_codes[index]) + self.assertEqual(key.node.public_key.hex(), public_keys[index]) + self.assertEqual(key.node.chain_code.hex(), chain_codes[index]) self.assertEqual(key.xpub, xpub_keys[index]) def test_slip39_128(self): @@ -164,15 +164,15 @@ def test_slip39_128(self): ] public_keys = [ - b"bc043d84b8b891d49890edb6aced6f2d78395f255c5b6aea8878b913f83e8579", - b"24c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c", - b"831a63d381a8dab1e6e1ee991a4300fc70687aae5f97f4fcf92ed1b6c2bd99de", + "bc043d84b8b891d49890edb6aced6f2d78395f255c5b6aea8878b913f83e8579", + "24c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c", + "831a63d381a8dab1e6e1ee991a4300fc70687aae5f97f4fcf92ed1b6c2bd99de", ] chain_codes = [ - b"dc3f0d2b5cccb822335ef6213fd133f4ca934151ec44a6000aee43b8a101078c", - b"6f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b", - b"672d6af4707aba201b7940231e83dd357f92f8851b3dfdc224ef311e1b64cdeb", + "dc3f0d2b5cccb822335ef6213fd133f4ca934151ec44a6000aee43b8a101078c", + "6f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b", + "672d6af4707aba201b7940231e83dd357f92f8851b3dfdc224ef311e1b64cdeb", ] xpub_keys = [ @@ -184,8 +184,8 @@ def test_slip39_128(self): for index, derivation_path in enumerate(derivation_paths): key = _get_public_key(keychain, derivation_path) - self.assertEqual(hexlify(key.node.public_key), public_keys[index]) - self.assertEqual(hexlify(key.node.chain_code), chain_codes[index]) + self.assertEqual(key.node.public_key.hex(), public_keys[index]) + self.assertEqual(key.node.chain_code.hex(), chain_codes[index]) self.assertEqual(key.xpub, xpub_keys[index]) def test_slip39_256(self): @@ -215,15 +215,15 @@ def test_slip39_256(self): ] public_keys = [ - b"967a9a041ad1379e31c2c7f2aa4bc2b3f7769341c0ea89ccfb12a904f2e10877", - b"6f3805bbc1b7a75afa95dffec331671f3c4662800615e80d2ec1202a9d874c86", - b"7f145b50ef07fb9accc40ee07a01fe93ceb6fa07d5a9f20fc3c8a48246dd4d02", + "967a9a041ad1379e31c2c7f2aa4bc2b3f7769341c0ea89ccfb12a904f2e10877", + "6f3805bbc1b7a75afa95dffec331671f3c4662800615e80d2ec1202a9d874c86", + "7f145b50ef07fb9accc40ee07a01fe93ceb6fa07d5a9f20fc3c8a48246dd4d02", ] chain_codes = [ - b"7b15d8d9006afe3cd7e04f375a1126a8c7c7c07c59a6f0c5b0310f4245f4edbb", - b"44baf30fd549e6a1e05f99c2a2c8971aea8894ee8d9c5fc2c5ae6ee839a56b2d", - b"e67d2864614ada5eec8fb8ee1225a94a6fb0a1b3c347c854ec3037351c6a0fc7", + "7b15d8d9006afe3cd7e04f375a1126a8c7c7c07c59a6f0c5b0310f4245f4edbb", + "44baf30fd549e6a1e05f99c2a2c8971aea8894ee8d9c5fc2c5ae6ee839a56b2d", + "e67d2864614ada5eec8fb8ee1225a94a6fb0a1b3c347c854ec3037351c6a0fc7", ] xpub_keys = [ @@ -235,8 +235,8 @@ def test_slip39_256(self): for index, derivation_path in enumerate(derivation_paths): key = _get_public_key(keychain, derivation_path) - self.assertEqual(hexlify(key.node.public_key), public_keys[index]) - self.assertEqual(hexlify(key.node.chain_code), chain_codes[index]) + self.assertEqual(key.node.public_key.hex(), public_keys[index]) + self.assertEqual(key.node.chain_code.hex(), chain_codes[index]) self.assertEqual(key.xpub, xpub_keys[index]) diff --git a/core/tests/test_apps.cardano.native_script.py b/core/tests/test_apps.cardano.native_script.py index 5385d0ee16d..11038faffe1 100644 --- a/core/tests/test_apps.cardano.native_script.py +++ b/core/tests/test_apps.cardano.native_script.py @@ -18,11 +18,11 @@ [ CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "c4b9265645fde9536c0795adbcc5291767a0c61fd62448341d7e0386" ), ), - b"29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd", + "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd", ], # PUB_KEY with path [ @@ -30,7 +30,7 @@ type=CardanoNativeScriptType.PUB_KEY, key_path=[1854 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], ), - b"29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd", + "29fb5fd4aa8cadd6705acc8263cee0fc62edca5ac38db593fec2f9fd", ], # ALL [ @@ -43,13 +43,13 @@ ), CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "0241f2d196f52a92fbd2183d03b370c30b6960cfdeae364ffabac889" ), ), ], ), - b"af5c2ce476a6ede1c879f7b1909d6a0b96cb2081391712d4a355cef6", + "af5c2ce476a6ede1c879f7b1909d6a0b96cb2081391712d4a355cef6", ], # ALL with 1855 path [ @@ -62,18 +62,18 @@ ), CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "0241f2d196f52a92fbd2183d03b370c30b6960cfdeae364ffabac889" ), ), ], ), - b"fbf6672eb655c29b0f148fa1429be57c2174b067a7b3e3942e967fe8", + "fbf6672eb655c29b0f148fa1429be57c2174b067a7b3e3942e967fe8", ], # ALL scripts are empty [ CardanoNativeScript(type=CardanoNativeScriptType.ALL, scripts=[]), - b"d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf", + "d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf", ], # ANY [ @@ -86,18 +86,18 @@ ), CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "0241f2d196f52a92fbd2183d03b370c30b6960cfdeae364ffabac889" ), ), ], ), - b"d6428ec36719146b7b5fb3a2d5322ce702d32762b8c7eeeb797a20db", + "d6428ec36719146b7b5fb3a2d5322ce702d32762b8c7eeeb797a20db", ], # ANY scripts are empty [ CardanoNativeScript(type=CardanoNativeScriptType.ANY, scripts=[]), - b"52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528", + "52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528", ], # N OF K [ @@ -111,19 +111,19 @@ ), CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "0241f2d196f52a92fbd2183d03b370c30b6960cfdeae364ffabac889" ), ), CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "cecb1d427c4ae436d28cc0f8ae9bb37501a5b77bcc64cd1693e9ae20" ), ), ], ), - b"2b2b17fd18e18acae4601d4818a1dee00a917ff72e772fa8482e36c9", + "2b2b17fd18e18acae4601d4818a1dee00a917ff72e772fa8482e36c9", ], # N_OF_K scripts are empty [ @@ -132,7 +132,7 @@ required_signatures_count=0, scripts=[], ), - b"3530cc9ae7f2895111a99b7a02184dd7c0cea7424f1632d73951b1d7", + "3530cc9ae7f2895111a99b7a02184dd7c0cea7424f1632d73951b1d7", ], # INVALID BEFORE [ @@ -141,7 +141,7 @@ scripts=[ CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "c4b9265645fde9536c0795adbcc5291767a0c61fd62448341d7e0386" ), ), @@ -150,7 +150,7 @@ ), ], ), - b"c6262ef9bb2b1291c058d93b46dabf458e2d135f803f60713f84b0b7", + "c6262ef9bb2b1291c058d93b46dabf458e2d135f803f60713f84b0b7", ], # INVALID HEREAFTER [ @@ -159,7 +159,7 @@ scripts=[ CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "c4b9265645fde9536c0795adbcc5291767a0c61fd62448341d7e0386" ), ), @@ -169,7 +169,7 @@ ), ], ), - b"b12ac304f89f4cd4d23f59a2b90d2b2697f7540b8f470d6aa05851b5", + "b12ac304f89f4cd4d23f59a2b90d2b2697f7540b8f470d6aa05851b5", ], # NESTED SCRIPT [ @@ -178,7 +178,7 @@ scripts=[ CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "c4b9265645fde9536c0795adbcc5291767a0c61fd62448341d7e0386" ), ), @@ -201,7 +201,7 @@ ), CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "0241f2d196f52a92fbd2183d03b370c30b6960cfdeae364ffabac889" ), ), @@ -223,13 +223,13 @@ ), CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "0241f2d196f52a92fbd2183d03b370c30b6960cfdeae364ffabac889" ), ), CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "cecb1d427c4ae436d28cc0f8ae9bb37501a5b77bcc64cd1693e9ae20" ), ), @@ -244,7 +244,7 @@ ), ], ), - b"4a6b4288459bf34668c0b281f922691460caf0c7c09caee3a726c27a", + "4a6b4288459bf34668c0b281f922691460caf0c7c09caee3a726c27a", ], ] @@ -252,7 +252,7 @@ # PUB_KEY key_hash has invalid length CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "3a55d9f68255dfbefa1efd711f82d005fae1be2e145d616c90cf0f" ), ), @@ -272,7 +272,7 @@ scripts=[ CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "3a55d9f68255dfbefa1efd711f82d005fae1be2e145d616c90cf0fa9" ), ), @@ -285,7 +285,7 @@ scripts=[ CardanoNativeScript( type=CardanoNativeScriptType.PUB_KEY, - key_hash=unhexlify( + key_hash=bytes.fromhex( "3a55d9f68255dfbefa1efd711f82d005fae1be2e145d616c90cf0fa9" ), ), @@ -310,7 +310,7 @@ def test_get_native_script_hash(self): for script, expected_hash in VALID_NATIVE_SCRIPTS: actual_hash = get_native_script_hash(keychain, script) - self.assertEqual(hexlify(actual_hash), expected_hash) + self.assertEqual(actual_hash.hex(), expected_hash) def test_validate_native_script(self): for script, _ in VALID_NATIVE_SCRIPTS: diff --git a/core/tests/test_apps.cardano.seed.py b/core/tests/test_apps.cardano.seed.py index 94cec6fdc99..1e51cdd4e6c 100644 --- a/core/tests/test_apps.cardano.seed.py +++ b/core/tests/test_apps.cardano.seed.py @@ -31,21 +31,21 @@ def test_various_paths_at_once(self): ] public_keys = [ - b"badd2852ccda7492364be0f88f2ba0b78c5f2d7179a941f1d19f756112b66afa", - b"34377409140c061d76778626d43456880d5471c1cbade8c372cb6a3be9678072", - b"73fea80d424276ad0978d4fe5310e8bc2d485f5f6bb3bf87612989f112ad5a7d", - b"f626ab887eb5f40b502463ccf2ec5a7311676ee9e5d55c492059a366c0b4d4a1", - b"408ee7b2d1c84d7899dba07150fae88c5411974f1762cb659dd928db8aac206b", - b"86e8a3880767e1ed521a47de1e031d47f33d5a8095be467bffbbd3295e27258e", + "badd2852ccda7492364be0f88f2ba0b78c5f2d7179a941f1d19f756112b66afa", + "34377409140c061d76778626d43456880d5471c1cbade8c372cb6a3be9678072", + "73fea80d424276ad0978d4fe5310e8bc2d485f5f6bb3bf87612989f112ad5a7d", + "f626ab887eb5f40b502463ccf2ec5a7311676ee9e5d55c492059a366c0b4d4a1", + "408ee7b2d1c84d7899dba07150fae88c5411974f1762cb659dd928db8aac206b", + "86e8a3880767e1ed521a47de1e031d47f33d5a8095be467bffbbd3295e27258e", ] chain_codes = [ - b"e1c5d15875d3ed68667978af38fe3fe586511d87a784c0962a333c21e63a865d", - b"15c987276326a82defa4cb6762d43442f09e5dcbcc37fa0c58f24ae2dba3d3eb", - b"dd75e154da417becec55cdd249327454138f082110297d5e87ab25e15fad150f", - b"f7ab126f2884db9059fa09ca83be6b8bd0250426aeb62191bdd9861457b8bc91", - b"18d5c9d20c8d23bed068c9ff3a1126b940f0e537f9d94891828a999dda6fafd1", - b"580bba4bb0b9c56974e16a6998322a91e857e2fac28674404da993f6197fd29f", + "e1c5d15875d3ed68667978af38fe3fe586511d87a784c0962a333c21e63a865d", + "15c987276326a82defa4cb6762d43442f09e5dcbcc37fa0c58f24ae2dba3d3eb", + "dd75e154da417becec55cdd249327454138f082110297d5e87ab25e15fad150f", + "f7ab126f2884db9059fa09ca83be6b8bd0250426aeb62191bdd9861457b8bc91", + "18d5c9d20c8d23bed068c9ff3a1126b940f0e537f9d94891828a999dda6fafd1", + "580bba4bb0b9c56974e16a6998322a91e857e2fac28674404da993f6197fd29f", ] xpub_keys = [ @@ -60,8 +60,8 @@ def test_various_paths_at_once(self): for index, derivation_path in enumerate(derivation_paths): key = _get_public_key(keychain, derivation_path) - self.assertEqual(hexlify(key.node.public_key), public_keys[index]) - self.assertEqual(hexlify(key.node.chain_code), chain_codes[index]) + self.assertEqual(key.node.public_key.hex(), public_keys[index]) + self.assertEqual(key.node.chain_code.hex(), chain_codes[index]) self.assertEqual(key.xpub, xpub_keys[index]) @@ -75,7 +75,7 @@ def test_icarus(self): secret = cardano.derive_icarus(binary_mnemonic, "", False) self.assertEqual( - hexlify(secret).decode(), + secret.hex(), "c065afd2832cd8b087c4d9ab7011f481ee1e0721e78ea5dd609f3ab3f156d245" "d176bd8fd4ec60b4731c3918a2a72a0226c0cd119ec35b47e4d55884667f552a" "23f7fdcd4a10c6cd2c7393ac61d877873e248f417634aa3d812af327ffe9d620", @@ -85,7 +85,7 @@ def test_icarus(self): secret = cardano.derive_icarus(binary_mnemonic, "foo", False) self.assertEqual( - hexlify(secret).decode(), + secret.hex(), "70531039904019351e1afb361cd1b312a4d0565d4ff9f8062d38acf4b15cce41" "d7b5738d9c893feea55512a3004acb0d222c35d3e3d5cde943a15a9824cbac59" "443cf67e589614076ba01e354b1a432e0e6db3b59e37fc56b5fb0222970a010e", @@ -102,7 +102,7 @@ def test_icarus_trezor(self): binary_mnemonic = bip39.mnemonic_to_bits(mnemonic) secret = cardano.derive_icarus(binary_mnemonic, "", True) self.assertEqual( - hexlify(secret).decode(), + secret.hex(), "409bb7a2998ec48029c8d2956fabd043a368ccc9b5120e42dd8a5c7145d08f45" "e8e8664d06f62b4fc3bab0134778af27ddf059a4ad1eb0efefeedd8189bbfe00" "deb289c5cdc2cf8ccfa19aea63b28424a4b0045b4b762292d46b73aa1c5cc99a", @@ -113,7 +113,7 @@ def test_icarus_trezor(self): PASSPHRASE = "foo" secret = cardano.derive_icarus(binary_mnemonic, PASSPHRASE, True) self.assertEqual( - hexlify(secret).decode(), + secret.hex(), "c8ab7a160a66bfa7a118f553c4eebfe7444e36e449dac7d6eeae21f3bbaa9551" "8593025160068776a4d61c0efc4f698585bb59f1aebe93c58e1eaf557ab59502" "d9f68fbea3049bc2255d15fc63803e9c3dbb78abff2d53f8356794807d402568", diff --git a/core/tests/test_apps.cardano.utils.py b/core/tests/test_apps.cardano.utils.py index be4670260f0..ba8a45c1506 100644 --- a/core/tests/test_apps.cardano.utils.py +++ b/core/tests/test_apps.cardano.utils.py @@ -56,7 +56,8 @@ def test_format_asset_fingerprint(self): for params, expected in test_vectors: actual = format_asset_fingerprint( - policy_id=unhexlify(params[0]), asset_name_bytes=unhexlify(params[1]) + policy_id=bytes.fromhex(params[0]), + asset_name_bytes=bytes.fromhex(params[1]), ) self.assertEqual(actual, expected) diff --git a/core/tests/test_apps.common.cbor.py b/core/tests/test_apps.common.cbor.py index ae62d8e180d..e7ef7ae8dbe 100644 --- a/core/tests/test_apps.common.cbor.py +++ b/core/tests/test_apps.common.cbor.py @@ -26,7 +26,7 @@ def test_create_array_header(self): ((2**64) - 1, "9bffffffffffffffff"), ] for val, header_hex in test_vectors: - header = unhexlify(header_hex) + header = bytes.fromhex(header_hex) self.assertEqual(create_array_header(val), header) with self.assertRaises(NotImplementedError): @@ -42,7 +42,7 @@ def test_create_tagged_set_header(self): ((2**64) - 1, "d901029bffffffffffffffff"), ] for val, header_hex in test_vectors: - header = unhexlify(header_hex) + header = bytes.fromhex(header_hex) self.assertEqual(create_tagged_set_header(val), header) with self.assertRaises(NotImplementedError): @@ -58,7 +58,7 @@ def test_create_map_header(self): ((2**64) - 1, "bbffffffffffffffff"), ] for val, header_hex in test_vectors: - header = unhexlify(header_hex) + header = bytes.fromhex(header_hex) self.assertEqual(create_map_header(val), header) with self.assertRaises(NotImplementedError): @@ -74,7 +74,7 @@ def test_create_embedded_cbor_bytes_header(self): ((2**64) - 1, "d8185bffffffffffffffff"), ] for val, header_hex in test_vectors: - header = unhexlify(header_hex) + header = bytes.fromhex(header_hex) self.assertEqual(create_embedded_cbor_bytes_header(val), header) with self.assertRaises(NotImplementedError): @@ -105,7 +105,7 @@ def test_cbor_encoding(self): (-1000000000000, "3B000000E8D4A50FFF"), # binary strings (b"", "40"), - (unhexlify("01020304"), "4401020304"), + (bytes.fromhex("01020304"), "4401020304"), # text strings ("", "60"), ("Fun", "6346756e"), @@ -115,7 +115,7 @@ def test_cbor_encoding(self): ), # tags (Tagged(1, 1363896240), "c11a514b67b0"), - (Tagged(23, unhexlify("01020304")), "d74401020304"), + (Tagged(23, bytes.fromhex("01020304")), "d74401020304"), # arrays ([], "80"), ([1, 2, 3], "83010203"), @@ -142,7 +142,7 @@ def test_cbor_encoding(self): (None, "f6"), ] for val, encoded_hex in test_vectors: - encoded = unhexlify(encoded_hex) + encoded = bytes.fromhex(encoded_hex) self.assertEqual(encode(val), encoded) self.assertEqual(decode(encoded), val) @@ -161,7 +161,7 @@ def test_cbor_tuples(self): ] for val, encoded_hex in test_vectors: value_tuple = tuple(val) - encoded = unhexlify(encoded_hex) + encoded = bytes.fromhex(encoded_hex) self.assertEqual(encode(value_tuple), encoded) self.assertEqual(decode(encoded), val) @@ -180,7 +180,7 @@ def test_cbor_ordered_map(self): for key, value in val: ordered_map[key] = value - encoded = unhexlify(encoded_hex) + encoded = bytes.fromhex(encoded_hex) self.assertEqual(encode(ordered_map), encoded) self.assertEqual(decode(encoded), {k: v for k, v in val}) diff --git a/core/tests/test_apps.common.payment_request.py b/core/tests/test_apps.common.payment_request.py index c305d3caf56..1100afa8d01 100644 --- a/core/tests/test_apps.common.payment_request.py +++ b/core/tests/test_apps.common.payment_request.py @@ -80,7 +80,9 @@ def _get_request_without_memos() -> PaymentRequest: "e55efcc85de5ab52a57a8ecf675d8454d6204c98298f93faf71c668fec9340070" ) return PaymentRequest( - recipient_name="TEST Recipient", signature=unhexlify(debug_signature), memos=[] + recipient_name="TEST Recipient", + signature=bytes.fromhex(debug_signature), + memos=[], ) @@ -116,14 +118,14 @@ def _get_request_with_coin_purchase_memo() -> PaymentRequest: def _get_sell_payment_request(include_nonce=b"DEBUG NONCE") -> PaymentRequest: text_memo = TextMemo(text="text memo text") mac = "a7594205d318491c7335d460acfebadc3c862b803abfd5a0fcf7ea6082bff1dc" - refund_memo = RefundMemo(address="ADDRESS", mac=unhexlify(mac)) + refund_memo = RefundMemo(address="ADDRESS", mac=bytes.fromhex(mac)) debug_signature = ( "20a71af90876caf75f987c432d7769311e04e0cf23afb31279acdf5563a0154a2" "372a44d16c605b0710e9c7c93a0e9a382d946d99c43490edfcdf366bdbca5305c" ) return PaymentRequest( recipient_name="TEST Recipient", - signature=unhexlify(debug_signature), + signature=bytes.fromhex(debug_signature), nonce=include_nonce, memos=[ PaymentRequestMemo(text_memo=text_memo), @@ -140,12 +142,12 @@ def _get_coin_swap_request(include_nonce=b"DEBUG NONCE") -> PaymentRequest: "e4c26c0ee3666380476deff2ac3d1899e86a298d98e249302207ffd14e70a3030" ) coin_purchase_memo = CoinPurchaseMemo( - coin_type=0, amount="AMOUNT", address="ADDRESS", mac=unhexlify(mac) + coin_type=0, amount="AMOUNT", address="ADDRESS", mac=bytes.fromhex(mac) ) - refund_memo = RefundMemo(address="Refund address", mac=unhexlify(mac2)) + refund_memo = RefundMemo(address="Refund address", mac=bytes.fromhex(mac2)) return PaymentRequest( recipient_name="TEST Recipient", - signature=unhexlify(debug_signature), + signature=bytes.fromhex(debug_signature), nonce=include_nonce, memos=[ PaymentRequestMemo(coin_purchase_memo=coin_purchase_memo), diff --git a/core/tests/test_apps.common.seed.py b/core/tests/test_apps.common.seed.py index 37e82d214f4..ea1f4f64fca 100644 --- a/core/tests/test_apps.common.seed.py +++ b/core/tests/test_apps.common.seed.py @@ -17,22 +17,22 @@ def test_slip21(self): keychain = Keychain(seed, "", [], slip21_namespaces=[[b"SLIP-0021"]]) # Key(m) - KEY_M = unhexlify( - b"dbf12b44133eaab506a740f6565cc117228cbf1dd70635cfa8ddfdc9af734756" + KEY_M = bytes.fromhex( + "dbf12b44133eaab506a740f6565cc117228cbf1dd70635cfa8ddfdc9af734756" ) self.assertEqual(node1.key(), KEY_M) # Key(m/"SLIP-0021") - KEY_M_SLIP0021 = unhexlify( - b"1d065e3ac1bbe5c7fad32cf2305f7d709dc070d672044a19e610c77cdf33de0d" + KEY_M_SLIP0021 = bytes.fromhex( + "1d065e3ac1bbe5c7fad32cf2305f7d709dc070d672044a19e610c77cdf33de0d" ) node1.derive_path([b"SLIP-0021"]) self.assertEqual(node1.key(), KEY_M_SLIP0021) self.assertEqual(keychain.derive_slip21([b"SLIP-0021"]).key(), KEY_M_SLIP0021) # Key(m/"SLIP-0021"/"Master encryption key") - KEY_M_SLIP0021_MEK = unhexlify( - b"ea163130e35bbafdf5ddee97a17b39cef2be4b4f390180d65b54cf05c6a82fde" + KEY_M_SLIP0021_MEK = bytes.fromhex( + "ea163130e35bbafdf5ddee97a17b39cef2be4b4f390180d65b54cf05c6a82fde" ) node1.derive_path([b"Master encryption key"]) self.assertEqual(node1.key(), KEY_M_SLIP0021_MEK) @@ -42,8 +42,8 @@ def test_slip21(self): ) # Key(m/"SLIP-0021"/"Authentication key") - KEY_M_SLIP0021_AK = unhexlify( - b"47194e938ab24cc82bfa25f6486ed54bebe79c40ae2a5a32ea6db294d81861a6" + KEY_M_SLIP0021_AK = bytes.fromhex( + "47194e938ab24cc82bfa25f6486ed54bebe79c40ae2a5a32ea6db294d81861a6" ) node2.derive_path([b"SLIP-0021", b"Authentication key"]) self.assertEqual(node2.key(), KEY_M_SLIP0021_AK) diff --git a/core/tests/test_apps.eos.get_public_key.py b/core/tests/test_apps.eos.get_public_key.py index e07502d3429..e5c8d95b67a 100644 --- a/core/tests/test_apps.eos.get_public_key.py +++ b/core/tests/test_apps.eos.get_public_key.py @@ -30,10 +30,10 @@ def test_get_public_key_scheme(self): ] public_keys = [ - b"0315c358024ce46767102578947584c4342a6982b922d454f63588effa34597197", - b"029622eff7248c4d298fe28f2df19ee0d5f7674f678844e05c31d1a5632412869e", - b"02625f33c10399703e95e41bd5054beef3ab893dcc7df2bb9bdcee48359b29069d", - b"037c9b7d24d42589941cca3f4debc75b37c0e7b881e6eb00d2e674958debe3bbc3", + "0315c358024ce46767102578947584c4342a6982b922d454f63588effa34597197", + "029622eff7248c4d298fe28f2df19ee0d5f7674f678844e05c31d1a5632412869e", + "02625f33c10399703e95e41bd5054beef3ab893dcc7df2bb9bdcee48359b29069d", + "037c9b7d24d42589941cca3f4debc75b37c0e7b881e6eb00d2e674958debe3bbc3", ] wif_keys = [ @@ -48,7 +48,7 @@ def test_get_public_key_scheme(self): node.derive_path(path) wif, public_key = _get_public_key(node) - self.assertEqual(hexlify(public_key), public_keys[index]) + self.assertEqual(public_key.hex(), public_keys[index]) self.assertEqual(wif, wif_keys[index]) self.assertEqual(public_key_to_wif(public_key), wif_keys[index]) diff --git a/core/tests/test_apps.ethereum.clear_signing.py b/core/tests/test_apps.ethereum.clear_signing.py index dd5220d69dd..8ddc11e49a8 100644 --- a/core/tests/test_apps.ethereum.clear_signing.py +++ b/core/tests/test_apps.ethereum.clear_signing.py @@ -5,8 +5,6 @@ if not utils.BITCOIN_ONLY: - from ubinascii import hexlify - from ethereum_common import * from trezor.enums import EthereumERC7730FieldFormatterType as FT from trezor.messages import ( @@ -69,7 +67,7 @@ def to_bytes(v: int) -> bytes: class TestEthereumClearSigning(unittest.TestCase): def test_address_parsing_valid(self): addr_hex = "d8da6bf26964af9d7eed9e03e53415d37aa96045" - addr_bytes = unhexlify(addr_hex) + addr_bytes = bytes.fromhex(addr_hex) valid_payload = b"\x00" * 12 + addr_bytes data = memoryview(valid_payload) @@ -82,7 +80,7 @@ def test_address_parsing_valid(self): def test_address_parsing_invalid_padding(self): addr_hex = "d8da6bf26964af9d7eed9e03e53415d37aa96045" - addr_bytes = unhexlify(addr_hex) + addr_bytes = bytes.fromhex(addr_hex) invalid_payload = b"\x01" + b"\x00" * 11 + addr_bytes # dirty padding data = memoryview(invalid_payload) @@ -165,7 +163,7 @@ def test_static_struct_valid(self): is_dynamic=False, ) - addr_bytes = unhexlify("d8da6bf26964af9d7eed9e03e53415d37aa96045") + addr_bytes = bytes.fromhex("d8da6bf26964af9d7eed9e03e53415d37aa96045") u160_val = 2**160 - 1 bool_val = 1 @@ -186,7 +184,7 @@ def test_static_struct_uint160_overflow(self): is_dynamic=False, ) - addr_bytes = unhexlify("d8da6bf26964af9d7eed9e03e53415d37aa96045") + addr_bytes = bytes.fromhex("d8da6bf26964af9d7eed9e03e53415d37aa96045") overflow_u160 = 2**160 bool_val = 1 @@ -204,7 +202,7 @@ def test_static_struct_uint160_overflow(self): def test_dynamic_struct_valid(self): dynamic_struct = Tuple((parse_address, parse_string), is_dynamic=True) - addr = unhexlify("d8da6bf26964af9d7eed9e03e53415d37aa96045") + addr = bytes.fromhex("d8da6bf26964af9d7eed9e03e53415d37aa96045") # left padded with zeroes addr_bytes = b"\x00" * (32 - 20) + addr @@ -250,9 +248,9 @@ def test_dynamic_struct_out_of_bounds(self): def test_array_of_addresses_valid(self): address_array_parser = Array(Atomic(parse_address)) - addr1 = unhexlify("d8da6bf26964af9d7eed9e03e53415d37aa96045") + addr1 = bytes.fromhex("d8da6bf26964af9d7eed9e03e53415d37aa96045") addr1_bytes = b"\x00" * (32 - 20) + addr1 - addr2 = unhexlify("71c7656ec7ab88b098defb751b7401b5f6d8976f") + addr2 = bytes.fromhex("71c7656ec7ab88b098defb751b7401b5f6d8976f") addr2_bytes = b"\x00" * (32 - 20) + addr2 array_length = len([addr1, addr2]) @@ -276,13 +274,13 @@ def test_array_of_addresses_valid(self): def test_array_of_addresses_with_dirty_element(self): address_array_parser = Array(Atomic(parse_address)) - addr_valid_bytes = b"\x00" * 12 + unhexlify( + addr_valid_bytes = b"\x00" * 12 + bytes.fromhex( "d8da6bf26964af9d7eed9e03e53415d37aa96045" ) addr_dirty_bytes = ( b"\x01" + b"\x00" * 11 - + unhexlify("71c7656ec7ab88b098defb751b7401b5f6d8976f") + + bytes.fromhex("71c7656ec7ab88b098defb751b7401b5f6d8976f") ) payload = ( @@ -306,8 +304,8 @@ def test_array_of_dynamic_structs(self): ) ) - addr1 = unhexlify("d8da6bf26964af9d7eed9e03e53415d37aa96045") - addr2 = unhexlify("71c7656ec7ab88b098defb751b7401b5f6d8976f") + addr1 = bytes.fromhex("d8da6bf26964af9d7eed9e03e53415d37aa96045") + addr2 = bytes.fromhex("71c7656ec7ab88b098defb751b7401b5f6d8976f") text1 = "Hello first world!" text2 = "Hello second world!" @@ -358,10 +356,10 @@ def test_array_of_static_structs(self): ) ) - addr1 = unhexlify("6666666666666666666666666666666666666666") - addr2 = unhexlify("7777777777777777777777777777777777777777") - addr3 = unhexlify("8888888888888888888888888888888888888888") - addr4 = unhexlify("9999999999999999999999999999999999999999") + addr1 = bytes.fromhex("6666666666666666666666666666666666666666") + addr2 = bytes.fromhex("7777777777777777777777777777777777777777") + addr3 = bytes.fromhex("8888888888888888888888888888888888888888") + addr4 = bytes.fromhex("9999999999999999999999999999999999999999") def pad_addr(addr): return b"\x00" * (32 - 20) + addr @@ -786,8 +784,8 @@ class _Defs: network = make_eth_network() fmt = AddressNameFormatter() - addr1 = unhexlify("d8da6bf26964af9d7eed9e03e53415d37aa96045") - addr2 = unhexlify("71c7656ec7ab88b098defb751b7401b5f6d8976f") + addr1 = bytes.fromhex("d8da6bf26964af9d7eed9e03e53415d37aa96045") + addr2 = bytes.fromhex("71c7656ec7ab88b098defb751b7401b5f6d8976f") formatted, _, _ = await_result( _format_field_value(fmt, [addr1, addr2], None, _Defs(), None) @@ -803,7 +801,7 @@ class _Defs: def test_multi_value_token_amount(self): # Multi-value with TokenAmountFormatter: every element shares the one # (constant) token, rendered one amount-per-line. - token_addr = unhexlify("ae7ab96520de3a18e5e111b5eaab095312d7fe84") + token_addr = bytes.fromhex("ae7ab96520de3a18e5e111b5eaab095312d7fe84") class _Defs: network = make_eth_network() @@ -935,7 +933,7 @@ class _Defs: addr_hex = "d8da6bf26964af9d7eed9e03e53415d37aa96045" flags = (1 << 255) | (1 << 160) - packed_address = flags | int.from_bytes(unhexlify(addr_hex), "big") + packed_address = flags | int.from_bytes(bytes.fromhex(addr_hex), "big") display_format = DisplayFormat( binding_context=None, @@ -989,7 +987,7 @@ def test_slice_of_negative_int_rejected(self): def test_from_proto_token_amount_constant_token(self): # Regression test for `from_proto` # Might use a .proto binary blob in future. - token_addr = unhexlify("ae7ab96520de3a18e5e111b5eaab095312d7fe84") # stETH + token_addr = bytes.fromhex("ae7ab96520de3a18e5e111b5eaab095312d7fe84") # stETH info = EthereumERC7730FieldInfo( path=EthereumERC7730Path(path=[0]), label="Amount", @@ -1004,7 +1002,7 @@ def test_from_proto_token_amount_constant_token(self): def test_token_amount_constant_token_format(self): # The token is resolved from `defs` by the constant address, without # touching the calldata - so `path_walker` is never called (passed None). - token_addr = unhexlify("ae7ab96520de3a18e5e111b5eaab095312d7fe84") # stETH + token_addr = bytes.fromhex("ae7ab96520de3a18e5e111b5eaab095312d7fe84") # stETH class _Defs: network = make_eth_network() @@ -1030,10 +1028,10 @@ def test_token_amount_no_token_source_rejected(self): # --- `calldata` fields (nested invocations) --- TRANSFER_SIG = b"\xa9\x05\x9c\xbb" - RECIPIENT = unhexlify("d8da6bf26964af9d7eed9e03e53415d37aa96045") + RECIPIENT = bytes.fromhex("d8da6bf26964af9d7eed9e03e53415d37aa96045") # stETH: mapped to "Lido" in KNOWN_ADDRESSES, exercising the provider / # callee name resolution. Will be updated once those definitions are removed. - CALLEE = unhexlify("ae7ab96520de3a18e5e111b5eaab095312d7fe84") + CALLEE = bytes.fromhex("ae7ab96520de3a18e5e111b5eaab095312d7fe84") @staticmethod def _msg(**kwargs): @@ -1116,7 +1114,7 @@ def _assert_raw_fallback(self, fields, blob, callee_str="Lido"): # the fallback is two rows: the callee, then the raw hex blob self.assertEqual(len(fields), 2) self.assertEqual(fields[0][0][:2], ("Subcall to", callee_str)) - self.assertEqual(fields[1][0][:2], ("Wrapped call", hexlify(blob).decode())) + self.assertEqual(fields[1][0][:2], ("Wrapped call", blob.hex())) for _, token, token_address in fields: self.assertIsNone(token) self.assertIsNone(token_address) @@ -1175,7 +1173,7 @@ def test_calldata_nested_transfer(self): self.assertEqual(fields[1][0][:2], ("(Subcall) Intent", "Send")) (label, formatted, _), _, _ = fields[2] self.assertEqual(label, "(Subcall) To") - self.assertEqual(formatted.lower(), "0x" + hexlify(self.RECIPIENT).decode()) + self.assertEqual(formatted.lower(), "0x" + self.RECIPIENT.hex()) (label, formatted, _), token, token_address = fields[3] self.assertEqual(label, "(Subcall) Amount") self.assertEqual(formatted, "2 TST") @@ -1243,9 +1241,7 @@ def test_calldata_scalars_descriptor(self): if value is not None: self.assertEqual(got_value, value) recipient_value = fields[2][0][1] - self.assertEqual( - recipient_value.lower(), "0x" + hexlify(self.RECIPIENT).decode() - ) + self.assertEqual(recipient_value.lower(), "0x" + self.RECIPIENT.hex()) def test_calldata_no_inner_format_raw_fallback(self): # No built-in matches and definition requests are unsupported -> the @@ -1300,10 +1296,10 @@ def test_calldata_depth_capped_at_one(self): # the middle format's calldata field degraded to callee + raw hex (label, formatted, _), _, _ = fields[2] self.assertEqual(label, "(Subcall) Subcall to") - self.assertEqual(formatted.lower(), "0x" + hexlify(innermost_callee).decode()) + self.assertEqual(formatted.lower(), "0x" + innermost_callee.hex()) self.assertEqual( fields[3][0][:2], - ("(Subcall) Inner call", hexlify(innermost_blob).decode()), + ("(Subcall) Inner call", innermost_blob.hex()), ) # the transfer was never resolved: no third-level formatting happened self.assertFalse(any("Send" == f[0][1] for f in fields)) @@ -1356,7 +1352,7 @@ def format_for(path): override_callee=override, ) ) - self.assertEqual(fields[0][0][1], hexlify(override).decode()) + self.assertEqual(fields[0][0][1], override.hex()) for path in (ContainerPath.From, ContainerPath.Value): with self.assertRaises(InvalidFormatDefinition): @@ -1450,7 +1446,7 @@ def test_calldata_array_of_subcalls(self): self.assertEqual(group[1][0][:2], (prefix + "Intent", "Send")) (label, formatted, _), _, _ = group[2] self.assertEqual(label, prefix + "To") - self.assertEqual(formatted.lower(), "0x" + hexlify(self.RECIPIENT).decode()) + self.assertEqual(formatted.lower(), "0x" + self.RECIPIENT.hex()) (label, formatted, _), token, token_address = group[3] self.assertEqual(label, prefix + "Amount") self.assertEqual(formatted, "2 TST") @@ -1471,7 +1467,7 @@ def test_calldata_array_parallel_callees(self): self.assertEqual(fields[0][0][:2], ("(Subcall #1) Provider", "Lido")) (label, provider, _), _, _ = fields[4] self.assertEqual(label, "(Subcall #2) Provider") - self.assertEqual(provider.lower(), "0x" + hexlify(other_callee).decode()) + self.assertEqual(provider.lower(), "0x" + other_callee.hex()) # each subcall's token resolves via its own callee self.assertEqual(defs.token_requests, [self.CALLEE, other_callee]) @@ -1486,7 +1482,7 @@ def test_calldata_array_raw_fallback(self): self.assertEqual(fields[0][0][:2], ("(Subcall #1) To", "Lido")) self.assertEqual( fields[1][0][:2], - ("(Subcall #1) Wrapped call", hexlify(bad_blob).decode()), + ("(Subcall #1) Wrapped call", bad_blob.hex()), ) self.assertEqual(fields[2][0][:2], ("(Subcall #2) Provider", "Lido")) diff --git a/core/tests/test_apps.ethereum.clear_signing_definitions.py b/core/tests/test_apps.ethereum.clear_signing_definitions.py index d7c109c95a7..1033991c419 100644 --- a/core/tests/test_apps.ethereum.clear_signing_definitions.py +++ b/core/tests/test_apps.ethereum.clear_signing_definitions.py @@ -81,7 +81,7 @@ def test_func_sigs_match_solidity_signatures(self): self.assertIn( func_sig, expected, - msg=f"selector {hexlify(func_sig).decode()} (intent {display_format.intent}) matches no known Solidity signature", + msg=f"selector {func_sig.hex()} (intent {display_format.intent}) matches no known Solidity signature", ) seen.add(func_sig) diff --git a/core/tests/test_apps.ethereum.helpers.py b/core/tests/test_apps.ethereum.helpers.py index 95de8cc44ae..9d80004b8d8 100644 --- a/core/tests/test_apps.ethereum.helpers.py +++ b/core/tests/test_apps.ethereum.helpers.py @@ -22,7 +22,7 @@ def test_address_from_bytes_eip55(self): "0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb", ] for s in eip55: - b = unhexlify(s[2:]) + b = bytes.fromhex(s[2:]) h = address_from_bytes(b) self.assertEqual(h, s) @@ -43,13 +43,13 @@ def test_address_from_bytes_rskip60(self): n = make_eth_network(chain_id=30) for s in rskip60_chain_30: - b = unhexlify(s[2:]) + b = bytes.fromhex(s[2:]) h = address_from_bytes(b, n) self.assertEqual(h, s) n = make_eth_network(chain_id=31) for s in rskip60_chain_31: - b = unhexlify(s[2:]) + b = bytes.fromhex(s[2:]) h = address_from_bytes(b, n) self.assertEqual(h, s) diff --git a/core/tests/test_apps.ethereum.yielding.py b/core/tests/test_apps.ethereum.yielding.py index aa0ea0ccc42..99395f5c73a 100644 --- a/core/tests/test_apps.ethereum.yielding.py +++ b/core/tests/test_apps.ethereum.yielding.py @@ -34,7 +34,7 @@ def test_known_address(self): # https://etherscan.io/address/0x3ef3d8ba38ebe18db133cec108f4d14ce00dd9ae self.assertEqual( yielding._MERKL_XYZ_CLAIM_DISTRIBUTOR_ADDR, - unhexlify("3ef3d8ba38ebe18db133cec108f4d14ce00dd9ae"), + bytes.fromhex("3ef3d8ba38ebe18db133cec108f4d14ce00dd9ae"), ) diff --git a/core/tests/test_apps.ethereum.yielding_vaults.py b/core/tests/test_apps.ethereum.yielding_vaults.py index 0abfe28f766..d72bb06e52e 100644 --- a/core/tests/test_apps.ethereum.yielding_vaults.py +++ b/core/tests/test_apps.ethereum.yielding_vaults.py @@ -13,39 +13,39 @@ def test_known_vault_addresses(self): # route users to a wrong vault. self.assertEqual( yielding_vaults._TEST_SH_USDC_VAULT_ADDRESS, - unhexlify("a511d618cd0f9d7cad791009d7c5e3b19c9568da"), + bytes.fromhex("a511d618cd0f9d7cad791009d7c5e3b19c9568da"), ) # https://etherscan.io/address/0xde6c23E561F3e55846207EC45A91b777e0F7C889 self.assertEqual( yielding_vaults._SH_USDC_VAULT_ADDRESS, - unhexlify("de6c23e561f3e55846207ec45a91b777e0f7c889"), + bytes.fromhex("de6c23e561f3e55846207ec45a91b777e0f7c889"), ) # https://etherscan.io/address/0xE4DB1c5A1B709CE4d2adA6985D9D506e58F73829 self.assertEqual( yielding_vaults._SH_USDT_VAULT_ADDRESS, - unhexlify("e4db1c5a1b709ce4d2ada6985d9d506e58f73829"), + bytes.fromhex("e4db1c5a1b709ce4d2ada6985d9d506e58f73829"), ) # https://etherscan.io/address/0x704cFb08969048a8DFf298B214F959791d8Da509 self.assertEqual( yielding_vaults._SH_ETH_VAULT_ADDRESS, - unhexlify("704cfb08969048a8dff298b214f959791d8da509"), + bytes.fromhex("704cfb08969048a8dff298b214f959791d8da509"), ) def test_known_token_addresses(self): # https://etherscan.io/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 self.assertEqual( yielding_vaults._USDC_ADDRESS, - unhexlify("a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"), + bytes.fromhex("a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"), ) # https://etherscan.io/token/0xdAC17F958D2ee523a2206206994597C13D831ec7 self.assertEqual( yielding_vaults._USDT_ADDRESS, - unhexlify("dac17f958d2ee523a2206206994597c13d831ec7"), + bytes.fromhex("dac17f958d2ee523a2206206994597c13d831ec7"), ) # https://etherscan.io/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 self.assertEqual( yielding_vaults._WETH_ADDRESS, - unhexlify("c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"), + bytes.fromhex("c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"), ) diff --git a/core/tests/test_apps.evolu.check_evolu.py b/core/tests/test_apps.evolu.check_evolu.py index 8e8f4c4375b..0e81e74b0ef 100644 --- a/core/tests/test_apps.evolu.check_evolu.py +++ b/core/tests/test_apps.evolu.check_evolu.py @@ -7,7 +7,6 @@ class TestCheckEvoluCommandsRegistrationRequest(unittest.TestCase): def test_proof_sign_registration_request(self): from trezorutils import delegated_identity - from ubinascii import unhexlify from storage.device import get_delegated_identity_key_rotation_index from trezor.crypto.curve import nist256p1 @@ -22,7 +21,7 @@ def test_proof_sign_registration_request(self): sign_request_challenge: str = "1234" sign_request_size: int = 10 arguments = [ - unhexlify(sign_request_challenge), + bytes.fromhex(sign_request_challenge), sign_request_size.to_bytes(4, "big"), ] @@ -41,13 +40,11 @@ def test_proof_sign_registration_request(self): self.assertTrue(check_delegated_identity_proof(proof, header, arguments)) def test_proof_sign_registration_request_invalid_size(self): - from ubinascii import unhexlify - from trezor.wire import DataError from apps.evolu.sign_registration_request import _check_data - sign_request_challenge = unhexlify("1234") + sign_request_challenge = bytes.fromhex("1234") sign_request_size: int = 256**4 + 5 # invalid size with self.assertRaises(DataError): diff --git a/core/tests/test_apps.monero.bulletproof.py b/core/tests/test_apps.monero.bulletproof.py index 2035ddcae75..ebf00aeaf6a 100644 --- a/core/tests/test_apps.monero.bulletproof.py +++ b/core/tests/test_apps.monero.bulletproof.py @@ -23,8 +23,8 @@ def test_square_multiply(self): ) def test_dvct_skips(self): - z_sq = unhexlify( - b"e0408b528e9d35ccb8386b87f39b85c724740644f4db412483a8852cdb3ceb00" + z_sq = bytes.fromhex( + "e0408b528e9d35ccb8386b87f39b85c724740644f4db412483a8852cdb3ceb00" ) d_vct0 = bp.VctD(64, 8, z_sq, raw=True) d_vct1 = bp.VctD(64, 8, z_sq, raw=True) @@ -90,7 +90,7 @@ def test_dvct_skips(self): def test_pow_back_skips(self): MN = 128 - y = unhexlify( + y = bytes.fromhex( "60421950bee0aab949e63336db1eb9532dba6b4599c5cd9fb1dbde909114100e" ) y_sc = crypto.decodeint_into(None, y) @@ -144,11 +144,11 @@ def test_pow_back_skips(self): def test_bpp_bprime(self): N, M = 64, 4 MN = N * M - y = unhexlify( - b"60421950bee0aab949e63336db1eb9532dba6b4599c5cd9fb1dbde909114100e" + y = bytes.fromhex( + "60421950bee0aab949e63336db1eb9532dba6b4599c5cd9fb1dbde909114100e" ) - z = unhexlify( - b"e0408b528e9d35ccb8386b87f39b85c724740644f4db412483a8852cdb3ceb00" + z = bytes.fromhex( + "e0408b528e9d35ccb8386b87f39b85c724740644f4db412483a8852cdb3ceb00" ) zc = crypto.decodeint_into(None, z) z_sq = bp._sc_mul(None, z, z) @@ -199,64 +199,64 @@ def aR1_fnc(i, d): def bproof_plus_2(self): return BulletproofPlus( V=[ - unhexlify(b"e0dae61095ac728a15d4d9754f1f9f956c22d4fa2deee2c0ff1def031b083e02"), - unhexlify(b"5b424ecb1f8ea02351d324296a34a0608ecc104610feaad06e6002f61992bfe1"), + bytes.fromhex("e0dae61095ac728a15d4d9754f1f9f956c22d4fa2deee2c0ff1def031b083e02"), + bytes.fromhex("5b424ecb1f8ea02351d324296a34a0608ecc104610feaad06e6002f61992bfe1"), ], - A=unhexlify(b"6ae6f16a6b01cf494fb2cf368573365293f76c624cfc11152d648479238e9319"), - A1=unhexlify(b"33ad318a44df6f14a945e6d051911ab9a24841457d15d62bd1436fb3edc8a193"), - B=unhexlify(b"5f56531cb8e78dbb3450f1d599a6d4c7f5e4c04ee3e7015643c19a528bcbb109"), - - r1=unhexlify(b"40ad8a9c6b3bdd95c7fb8605e50135050e64f1ce29d1c4b37b1271e658354500"), - s1=unhexlify(b"aed959c770499134aaa7e099f566dac56ee12959d797b62a3d8d1037b790b806"), - d1=unhexlify(b"395a1e8d3df8e90e716fdeaa493090782c8db922337d09a36b50c1f02cd8e100"), - - L=[unhexlify(b"ed2d768bb9c8b5a9fa24c90b5831d3cceb3e78cef45eba90e52f89a2b3c859d2"), - unhexlify(b"7f25cc8e211783e9c1b80dd13ee286943da0ec07bd33291536639432758f6927"), - unhexlify(b"7bae3d31f4e2a6d78d74d2bcb6d0656e4222161423d635f7ce08805e96cec83e"), - unhexlify(b"c87f949f70cf569c4baa332612305733fd19a2262490c55ec88c16a68d7b5e7d"), - unhexlify(b"34d06caf0d02129ebcc8bf318da8f6a0ddfaf2c7cb85f4144726561cefc86dcd"), - unhexlify(b"ab3effd3a2706591774e013c76f5b8ece9e58abf7efc0a11b479f9d2a89d0c55"), - unhexlify(b"ebf8d34e6643533bf73b13d2dd56aeaf2113fb3017d39bc6db6a2f71bc1d53f1"), + A=bytes.fromhex("6ae6f16a6b01cf494fb2cf368573365293f76c624cfc11152d648479238e9319"), + A1=bytes.fromhex("33ad318a44df6f14a945e6d051911ab9a24841457d15d62bd1436fb3edc8a193"), + B=bytes.fromhex("5f56531cb8e78dbb3450f1d599a6d4c7f5e4c04ee3e7015643c19a528bcbb109"), + + r1=bytes.fromhex("40ad8a9c6b3bdd95c7fb8605e50135050e64f1ce29d1c4b37b1271e658354500"), + s1=bytes.fromhex("aed959c770499134aaa7e099f566dac56ee12959d797b62a3d8d1037b790b806"), + d1=bytes.fromhex("395a1e8d3df8e90e716fdeaa493090782c8db922337d09a36b50c1f02cd8e100"), + + L=[bytes.fromhex("ed2d768bb9c8b5a9fa24c90b5831d3cceb3e78cef45eba90e52f89a2b3c859d2"), + bytes.fromhex("7f25cc8e211783e9c1b80dd13ee286943da0ec07bd33291536639432758f6927"), + bytes.fromhex("7bae3d31f4e2a6d78d74d2bcb6d0656e4222161423d635f7ce08805e96cec83e"), + bytes.fromhex("c87f949f70cf569c4baa332612305733fd19a2262490c55ec88c16a68d7b5e7d"), + bytes.fromhex("34d06caf0d02129ebcc8bf318da8f6a0ddfaf2c7cb85f4144726561cefc86dcd"), + bytes.fromhex("ab3effd3a2706591774e013c76f5b8ece9e58abf7efc0a11b479f9d2a89d0c55"), + bytes.fromhex("ebf8d34e6643533bf73b13d2dd56aeaf2113fb3017d39bc6db6a2f71bc1d53f1"), ], - R=[unhexlify(b"27e146e61e88944246dcd90ddb4284923c7fdc6fd6a187ed2efa3dcb8c380346"), - unhexlify(b"fab99152d48d835b9a01cdbec46301db0f57ca091f6cbaa0b45c8498f18babe1"), - unhexlify(b"8467f87acd7be026a27ed798cca6cc1526b0f805ac534a9c5162a9cd75460011"), - unhexlify(b"f421fa4bda1dba042ca56c6bdce313dc8d18cee084d722af47447ce54b6ff8df"), - unhexlify(b"8dd5dabc0ad67c83f42668e96bf5ee6741bcd8e661eda1e8ce6a23d84cf0b5b5"), - unhexlify(b"fcf20a7775699b0456542930b2374b233fb3f8f79e1911428157631a20b3c3ad"), - unhexlify(b"66e477bd93dabb184e2738829320bf8e60f6b4b476ca0fbc1013af28e8de34c1"), + R=[bytes.fromhex("27e146e61e88944246dcd90ddb4284923c7fdc6fd6a187ed2efa3dcb8c380346"), + bytes.fromhex("fab99152d48d835b9a01cdbec46301db0f57ca091f6cbaa0b45c8498f18babe1"), + bytes.fromhex("8467f87acd7be026a27ed798cca6cc1526b0f805ac534a9c5162a9cd75460011"), + bytes.fromhex("f421fa4bda1dba042ca56c6bdce313dc8d18cee084d722af47447ce54b6ff8df"), + bytes.fromhex("8dd5dabc0ad67c83f42668e96bf5ee6741bcd8e661eda1e8ce6a23d84cf0b5b5"), + bytes.fromhex("fcf20a7775699b0456542930b2374b233fb3f8f79e1911428157631a20b3c3ad"), + bytes.fromhex("66e477bd93dabb184e2738829320bf8e60f6b4b476ca0fbc1013af28e8de34c1"), ], ) def bproof_plus_2_invalid(self): return BulletproofPlus( V=[ - unhexlify(b"e0dae61095ac728a15d4d9754f1f9f956c22d4fa2deee2c0ff1def031b083e02"), - unhexlify(b"5b424ecb1f8ea02351d324296a34a0608ecc104610feaad06e6002f61992bfe1"), + bytes.fromhex("e0dae61095ac728a15d4d9754f1f9f956c22d4fa2deee2c0ff1def031b083e02"), + bytes.fromhex("5b424ecb1f8ea02351d324296a34a0608ecc104610feaad06e6002f61992bfe1"), ], - A=unhexlify(b"6ae6f16a6b01cf494fb2cf368573365293f76c624cfc11152d648479238e9309"), - A1=unhexlify(b"33ad318a44df6f14a945e6d051911ab9a24841457d15d62bd1436fb3edc8a193"), - B=unhexlify(b"5f56531cb8e78dbb3450f1d599a6d4c7f5e4c04ee3e7015643c19a528bcbb109"), - - r1=unhexlify(b"40ad8a9c6b3bdd95c7fb8605e50135050e64f1ce29d1c4b37b1271e658354500"), - s1=unhexlify(b"aed959c770499134aaa7e099f566dac56ee12959d797b62a3d8d1037b790b806"), - d1=unhexlify(b"395a1e8d3df8e90e716fdeaa493090782c8db922337d09a36b50c1f02cd8e100"), - - L=[unhexlify(b"ed2d768bb9c8b5a9fa24c90b5831d3cceb3e78cef45eba90e52f89a2b3c859d2"), - unhexlify(b"7f25cc8e211783e9c1b80dd13ee286943da0ec07bd33291536639432758f6927"), - unhexlify(b"7bae3d31f4e2a6d78d74d2bcb6d0656e4222161423d635f7ce08805e96cec83e"), - unhexlify(b"c87f949f70cf569c4baa332612305733fd19a2262490c55ec88c16a68d7b5e7d"), - unhexlify(b"34d06caf0d02129ebcc8bf318da8f6a0ddfaf2c7cb85f4144726561cefc86dcd"), - unhexlify(b"ab3effd3a2706591774e013c76f5b8ece9e58abf7efc0a11b479f9d2a89d0c55"), - unhexlify(b"ebf8d34e6643533bf73b13d2dd56aeaf2113fb3017d39bc6db6a2f71bc1d53f1"), + A=bytes.fromhex("6ae6f16a6b01cf494fb2cf368573365293f76c624cfc11152d648479238e9309"), + A1=bytes.fromhex("33ad318a44df6f14a945e6d051911ab9a24841457d15d62bd1436fb3edc8a193"), + B=bytes.fromhex("5f56531cb8e78dbb3450f1d599a6d4c7f5e4c04ee3e7015643c19a528bcbb109"), + + r1=bytes.fromhex("40ad8a9c6b3bdd95c7fb8605e50135050e64f1ce29d1c4b37b1271e658354500"), + s1=bytes.fromhex("aed959c770499134aaa7e099f566dac56ee12959d797b62a3d8d1037b790b806"), + d1=bytes.fromhex("395a1e8d3df8e90e716fdeaa493090782c8db922337d09a36b50c1f02cd8e100"), + + L=[bytes.fromhex("ed2d768bb9c8b5a9fa24c90b5831d3cceb3e78cef45eba90e52f89a2b3c859d2"), + bytes.fromhex("7f25cc8e211783e9c1b80dd13ee286943da0ec07bd33291536639432758f6927"), + bytes.fromhex("7bae3d31f4e2a6d78d74d2bcb6d0656e4222161423d635f7ce08805e96cec83e"), + bytes.fromhex("c87f949f70cf569c4baa332612305733fd19a2262490c55ec88c16a68d7b5e7d"), + bytes.fromhex("34d06caf0d02129ebcc8bf318da8f6a0ddfaf2c7cb85f4144726561cefc86dcd"), + bytes.fromhex("ab3effd3a2706591774e013c76f5b8ece9e58abf7efc0a11b479f9d2a89d0c55"), + bytes.fromhex("ebf8d34e6643533bf73b13d2dd56aeaf2113fb3017d39bc6db6a2f71bc1d53f1"), ], - R=[unhexlify(b"27e146e61e88944246dcd90ddb4284923c7fdc6fd6a187ed2efa3dcb8c380346"), - unhexlify(b"fab99152d48d835b9a01cdbec46301db0f57ca091f6cbaa0b45c8498f18babe1"), - unhexlify(b"8467f87acd7be026a27ed798cca6cc1526b0f805ac534a9c5162a9cd75460011"), - unhexlify(b"f421fa4bda1dba042ca56c6bdce313dc8d18cee084d722af47447ce54b6ff8df"), - unhexlify(b"8dd5dabc0ad67c83f42668e96bf5ee6741bcd8e661eda1e8ce6a23d84cf0b5b5"), - unhexlify(b"fcf20a7775699b0456542930b2374b233fb3f8f79e1911428157631a20b3c3ad"), - unhexlify(b"66e477bd93dabb184e2738829320bf8e60f6b4b476ca0fbc1013af28e8de34c1"), + R=[bytes.fromhex("27e146e61e88944246dcd90ddb4284923c7fdc6fd6a187ed2efa3dcb8c380346"), + bytes.fromhex("fab99152d48d835b9a01cdbec46301db0f57ca091f6cbaa0b45c8498f18babe1"), + bytes.fromhex("8467f87acd7be026a27ed798cca6cc1526b0f805ac534a9c5162a9cd75460011"), + bytes.fromhex("f421fa4bda1dba042ca56c6bdce313dc8d18cee084d722af47447ce54b6ff8df"), + bytes.fromhex("8dd5dabc0ad67c83f42668e96bf5ee6741bcd8e661eda1e8ce6a23d84cf0b5b5"), + bytes.fromhex("fcf20a7775699b0456542930b2374b233fb3f8f79e1911428157631a20b3c3ad"), + bytes.fromhex("66e477bd93dabb184e2738829320bf8e60f6b4b476ca0fbc1013af28e8de34c1"), ], ) # fmt: on diff --git a/core/tests/test_apps.monero.clsag.py b/core/tests/test_apps.monero.clsag.py index c697fe4933b..931c1fd7d36 100644 --- a/core/tests/test_apps.monero.clsag.py +++ b/core/tests/test_apps.monero.clsag.py @@ -2,8 +2,6 @@ from common import * # isort:skip if not utils.BITCOIN_ONLY: - import ubinascii - from trezor.crypto import monero as tcry from trezor.crypto import random @@ -162,17 +160,15 @@ def gen_clsag_sig(self, ring_size=11, index=None): return msg, scalars, sc1, sI, sD, ring2, Cp def verify_monero_generated(self, clsag): - msg = ubinascii.unhexlify(clsag["msg"]) - sI = crypto_helpers.decodepoint(ubinascii.unhexlify(clsag["sI"])) - sD = crypto_helpers.decodepoint(ubinascii.unhexlify(clsag["sD"])) - sc1 = crypto_helpers.decodeint(ubinascii.unhexlify(clsag["sc1"])) - Cout = crypto_helpers.decodepoint(ubinascii.unhexlify(clsag["cout"])) - scalars = [ - crypto_helpers.decodeint(ubinascii.unhexlify(x)) for x in clsag["ss"] - ] + msg = bytes.fromhex(clsag["msg"]) + sI = crypto_helpers.decodepoint(bytes.fromhex(clsag["sI"])) + sD = crypto_helpers.decodepoint(bytes.fromhex(clsag["sD"])) + sc1 = crypto_helpers.decodeint(bytes.fromhex(clsag["sc1"])) + Cout = crypto_helpers.decodepoint(bytes.fromhex(clsag["cout"])) + scalars = [crypto_helpers.decodeint(bytes.fromhex(x)) for x in clsag["ss"]] ring = [] for e in clsag["ring"]: - ring.append(TmpKey(ubinascii.unhexlify(e[0]), ubinascii.unhexlify(e[1]))) + ring.append(TmpKey(bytes.fromhex(e[0]), bytes.fromhex(e[1]))) self.verify_clsag(msg, scalars, sc1, sI, sD, ring, Cout) diff --git a/core/tests/test_apps.monero.crypto.py b/core/tests/test_apps.monero.crypto.py index 9d98c80bc02..a92dbaee452 100644 --- a/core/tests/test_apps.monero.crypto.py +++ b/core/tests/test_apps.monero.crypto.py @@ -14,8 +14,8 @@ @unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin") class TestMoneroCrypto(unittest.TestCase): def test_encoding(self): - point = unhexlify( - b"2486224797d05cae3cba4be043be2db0df381f3f19cfa113f86ab38e3d8d2bd0" + point = bytes.fromhex( + "2486224797d05cae3cba4be043be2db0df381f3f19cfa113f86ab38e3d8d2bd0" ) self.assertEqual( point, crypto_helpers.encodepoint(crypto_helpers.decodepoint(point)) @@ -31,12 +31,12 @@ def test_encoding(self): def test_scalarmult_base(self): scalar = crypto_helpers.decodeint( - unhexlify( - b"a0eea49140a3b036da30eacf64bd9d56ce3ef68ba82ef13571ec511edbcf8303" + bytes.fromhex( + "a0eea49140a3b036da30eacf64bd9d56ce3ef68ba82ef13571ec511edbcf8303" ) ) - exp = unhexlify( - b"16bb4a3c44e2ced511fc0d4cd86b13b3af21efc99fb0356199fac489f2544c09" + exp = bytes.fromhex( + "16bb4a3c44e2ced511fc0d4cd86b13b3af21efc99fb0356199fac489f2544c09" ) res = crypto.scalarmult_base_into(None, scalar) @@ -44,12 +44,12 @@ def test_scalarmult_base(self): self.assertTrue(crypto.point_eq(crypto_helpers.decodepoint(exp), res)) scalar = crypto_helpers.decodeint( - unhexlify( - b"fd290dce39f781aebbdbd24584ed6d48bd300de19d9c3decfda0a6e2c6751d0f" + bytes.fromhex( + "fd290dce39f781aebbdbd24584ed6d48bd300de19d9c3decfda0a6e2c6751d0f" ) ) - exp = unhexlify( - b"123daf90fc26f13c6529e6b49bfed498995ac383ef19c0db6771143f24ba8dd5" + exp = bytes.fromhex( + "123daf90fc26f13c6529e6b49bfed498995ac383ef19c0db6771143f24ba8dd5" ) res = crypto.scalarmult_base_into(None, scalar) @@ -57,14 +57,14 @@ def test_scalarmult_base(self): self.assertTrue(crypto.point_eq(crypto_helpers.decodepoint(exp), res)) def test_scalarmult(self): - priv = unhexlify( - b"3482fb9735ef879fcae5ec7721b5d3646e155c4fb58d6cc11c732c9c9b76620a" + priv = bytes.fromhex( + "3482fb9735ef879fcae5ec7721b5d3646e155c4fb58d6cc11c732c9c9b76620a" ) - pub = unhexlify( - b"2486224797d05cae3cba4be043be2db0df381f3f19cfa113f86ab38e3d8d2bd0" + pub = bytes.fromhex( + "2486224797d05cae3cba4be043be2db0df381f3f19cfa113f86ab38e3d8d2bd0" ) - exp = unhexlify( - b"adcd1f5881f46f254900a03c654e71950a88a0236fa0a3a946c9b8daed6ef43d" + exp = bytes.fromhex( + "adcd1f5881f46f254900a03c654e71950a88a0236fa0a3a946c9b8daed6ef43d" ) res = crypto.scalarmult_into( @@ -74,49 +74,49 @@ def test_scalarmult(self): self.assertTrue(crypto.point_eq(crypto_helpers.decodepoint(exp), res)) def test_cn_fast_hash(self): - inp = unhexlify( - b"259ef2aba8feb473cf39058a0fe30b9ff6d245b42b6826687ebd6b63128aff6405" + inp = bytes.fromhex( + "259ef2aba8feb473cf39058a0fe30b9ff6d245b42b6826687ebd6b63128aff6405" ) res = crypto.fast_hash_into(None, inp) self.assertEqual( res, - unhexlify( - b"86db87b83fb1246efca5f3b0db09ce3fa4d605b0d10e6507cac253dd31a3ec16" + bytes.fromhex( + "86db87b83fb1246efca5f3b0db09ce3fa4d605b0d10e6507cac253dd31a3ec16" ), ) def test_hash_to_scalar(self): - inp = unhexlify( - b"259ef2aba8feb473cf39058a0fe30b9ff6d245b42b6826687ebd6b63128aff6405" + inp = bytes.fromhex( + "259ef2aba8feb473cf39058a0fe30b9ff6d245b42b6826687ebd6b63128aff6405" ) res = crypto.hash_to_scalar_into(None, inp) exp = crypto_helpers.decodeint( - unhexlify( - b"9907925b254e12162609fc0dfd0fef2aa4d605b0d10e6507cac253dd31a3ec06" + bytes.fromhex( + "9907925b254e12162609fc0dfd0fef2aa4d605b0d10e6507cac253dd31a3ec06" ) ) self.assertTrue(crypto.sc_eq(res, exp)) def test_hash_to_point(self): - data = unhexlify( - b"42f6835bf83114a1f5f6076fe79bdfa0bd67c74b88f127d54572d3910dd09201" + data = bytes.fromhex( + "42f6835bf83114a1f5f6076fe79bdfa0bd67c74b88f127d54572d3910dd09201" ) res = crypto.hash_to_point_into(None, data) res_p = crypto_helpers.encodepoint(res) self.assertEqual( res_p, - unhexlify( - b"54863a0464c008acc99cffb179bc6cf34eb1bbdf6c29f7a070a7c6376ae30ab5" + bytes.fromhex( + "54863a0464c008acc99cffb179bc6cf34eb1bbdf6c29f7a070a7c6376ae30ab5" ), ) def test_derivation_to_scalar(self): - derivation = unhexlify( - b"e720a09f2e3a0bbf4e4ba7ad93653bb296885510121f806acb2a5f9168fafa01" + derivation = bytes.fromhex( + "e720a09f2e3a0bbf4e4ba7ad93653bb296885510121f806acb2a5f9168fafa01" ) - scalar = unhexlify( - b"25d08763414c379aa9cf989cdcb3cadd36bd5193b500107d6bf5f921f18e470e" + scalar = bytes.fromhex( + "25d08763414c379aa9cf989cdcb3cadd36bd5193b500107d6bf5f921f18e470e" ) sc_int = crypto_helpers.derivation_to_scalar( @@ -126,17 +126,17 @@ def test_derivation_to_scalar(self): def test_generate_key_derivation(self): key_pub = crypto_helpers.decodepoint( - unhexlify( - b"7739c95d3298e2f87362dba9e0e0b3980a692ae8e2f16796b0e382098cd6bd83" + bytes.fromhex( + "7739c95d3298e2f87362dba9e0e0b3980a692ae8e2f16796b0e382098cd6bd83" ) ) key_priv = crypto_helpers.decodeint( - unhexlify( - b"3482fb9735ef879fcae5ec7721b5d3646e155c4fb58d6cc11c732c9c9b76620a" + bytes.fromhex( + "3482fb9735ef879fcae5ec7721b5d3646e155c4fb58d6cc11c732c9c9b76620a" ) ) - deriv_exp = unhexlify( - b"fa188a45a0e4daccc0e6d4f6f6858fd46392104be74183ec0047e7e9f4eaf739" + deriv_exp = bytes.fromhex( + "fa188a45a0e4daccc0e6d4f6f6858fd46392104be74183ec0047e7e9f4eaf739" ) self.assertEqual( @@ -147,43 +147,43 @@ def test_generate_key_derivation(self): ) def test_h(self): - H = unhexlify( - b"8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94" + H = bytes.fromhex( + "8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94" ) self.assertEqual(crypto_helpers.encodepoint(crypto.xmr_H()), H) def test_sc_inversion(self): res = crypto.Scalar() inp = crypto_helpers.decodeint( - unhexlify( - b"3482fb9735ef879fcae5ec7721b5d3646e155c4fb58d6cc11c732c9c9b76620a" + bytes.fromhex( + "3482fb9735ef879fcae5ec7721b5d3646e155c4fb58d6cc11c732c9c9b76620a" ) ) crypto.sc_inv_into(res, inp) self.assertEqual( - hexlify(crypto_helpers.encodeint(res)), - b"bcf365a551e6358f3f281a6241d4a25eded60230b60a1d48c67b51a85e33d70e", + crypto_helpers.encodeint(res).hex(), + "bcf365a551e6358f3f281a6241d4a25eded60230b60a1d48c67b51a85e33d70e", ) def test_addr_encode(self): addr_exp = "4LL9oSLmtpccfufTMvppY6JwXNouMBzSkbLYfpAV5Usx3skxNgYeYTRj5UzqtReoS44qo9mtmXCqY45DJ852K5Jv2bYXZKKQePHES9khPK" addr = tcry.xmr_base58_addr_encode_check( 19, - unhexlify( - b"eda9fe8dfcdd25d5430ea64229d04f6b41b2e5a1587c29cd499a63eb79d117113076a02b73d130fb904c9e91075fcd16f735c6850dfadb125eb826d96a113f098a125052fe6f3877" + bytes.fromhex( + "eda9fe8dfcdd25d5430ea64229d04f6b41b2e5a1587c29cd499a63eb79d117113076a02b73d130fb904c9e91075fcd16f735c6850dfadb125eb826d96a113f098a125052fe6f3877" ), ) addr2 = encode_addr( bytes([19]), - unhexlify( - b"eda9fe8dfcdd25d5430ea64229d04f6b41b2e5a1587c29cd499a63eb79d11711" + bytes.fromhex( + "eda9fe8dfcdd25d5430ea64229d04f6b41b2e5a1587c29cd499a63eb79d11711" ), - unhexlify( - b"3076a02b73d130fb904c9e91075fcd16f735c6850dfadb125eb826d96a113f09" + bytes.fromhex( + "3076a02b73d130fb904c9e91075fcd16f735c6850dfadb125eb826d96a113f09" ), - unhexlify(b"8a125052fe6f3877"), + bytes.fromhex("8a125052fe6f3877"), ) self.assertEqual(addr, addr_exp) @@ -192,11 +192,11 @@ def test_addr_encode(self): def test_wallet_addr(self): addr = encode_addr( net_version(), - unhexlify( - b"3bec484c5d7f0246af520aab550452b5b6013733feabebd681c4a60d457b7fc1" + bytes.fromhex( + "3bec484c5d7f0246af520aab550452b5b6013733feabebd681c4a60d457b7fc1" ), - unhexlify( - b"2d5918e31d3c003da3c778592c07b398ad6f961a67082a75fd49394d51e69bbe" + bytes.fromhex( + "2d5918e31d3c003da3c778592c07b398ad6f961a67082a75fd49394d51e69bbe" ), ) @@ -207,13 +207,13 @@ def test_wallet_addr(self): w = AccountCreds.new_wallet( crypto_helpers.decodeint( - unhexlify( - b"4ce88c168e0f5f8d6524f712d5f8d7d83233b1e7a2a60b5aba5206cc0ea2bc08" + bytes.fromhex( + "4ce88c168e0f5f8d6524f712d5f8d7d83233b1e7a2a60b5aba5206cc0ea2bc08" ) ), crypto_helpers.decodeint( - unhexlify( - b"f2644a3dd97d43e87887e74d1691d52baa0614206ad1b0c239ff4aa3b501750a" + bytes.fromhex( + "f2644a3dd97d43e87887e74d1691d52baa0614206ad1b0c239ff4aa3b501750a" ) ), network_type=MoneroNetworkType.TESTNET, @@ -225,13 +225,13 @@ def test_wallet_addr(self): def test_derive_subaddress_public_key(self): out_key = crypto_helpers.decodepoint( - unhexlify( - b"f4efc29da4ccd6bc6e81f52a6f47b2952966442a7efb49901cce06a7a3bef3e5" + bytes.fromhex( + "f4efc29da4ccd6bc6e81f52a6f47b2952966442a7efb49901cce06a7a3bef3e5" ) ) deriv = crypto_helpers.decodepoint( - unhexlify( - b"259ef2aba8feb473cf39058a0fe30b9ff6d245b42b6826687ebd6b63128aff64" + bytes.fromhex( + "259ef2aba8feb473cf39058a0fe30b9ff6d245b42b6826687ebd6b63128aff64" ) ) res = crypto_helpers.encodepoint( @@ -239,34 +239,34 @@ def test_derive_subaddress_public_key(self): ) self.assertEqual( res, - unhexlify( - b"5a10cca900ee47a7f412cd661b29f5ab356d6a1951884593bb170b5ec8b6f2e8" + bytes.fromhex( + "5a10cca900ee47a7f412cd661b29f5ab356d6a1951884593bb170b5ec8b6f2e8" ), ) def test_get_subaddress_secret_key(self): a = crypto_helpers.decodeint( - unhexlify( - b"4ce88c168e0f5f8d6524f712d5f8d7d83233b1e7a2a60b5aba5206cc0ea2bc08" + bytes.fromhex( + "4ce88c168e0f5f8d6524f712d5f8d7d83233b1e7a2a60b5aba5206cc0ea2bc08" ) ) m = monero.get_subaddress_secret_key(secret_key=a, major=0, minor=1) self.assertEqual( crypto_helpers.encodeint(m), - unhexlify( - b"b6ff4d689b95e3310efbf683850c075bcde46361923054e42ef30016b287ff0c" + bytes.fromhex( + "b6ff4d689b95e3310efbf683850c075bcde46361923054e42ef30016b287ff0c" ), ) def test_public_spend(self): - derivation = unhexlify( - b"e720a09f2e3a0bbf4e4ba7ad93653bb296885510121f806acb2a5f9168fafa01" + derivation = bytes.fromhex( + "e720a09f2e3a0bbf4e4ba7ad93653bb296885510121f806acb2a5f9168fafa01" ) - base = unhexlify( - b"7d996b0f2db6dbb5f2a086211f2399a4a7479b2c911af307fdc3f7f61a88cb0e" + base = bytes.fromhex( + "7d996b0f2db6dbb5f2a086211f2399a4a7479b2c911af307fdc3f7f61a88cb0e" ) - pkey_ex = unhexlify( - b"0846cae7405077b6b7800f0b932c10a186448370b6db318f8c9e13f781dab546" + pkey_ex = bytes.fromhex( + "0846cae7405077b6b7800f0b932c10a186448370b6db318f8c9e13f781dab546" ) pkey_comp = crypto_helpers.derive_public_key( @@ -279,17 +279,17 @@ def test_view_tags(self): test_vectors = [ ( - b"0fc47054f355ced4d67de73bfa12e4c78ff19089548fffa7d07a674741860f97", + "0fc47054f355ced4d67de73bfa12e4c78ff19089548fffa7d07a674741860f97", 0, b"\x76", ), ( - b"fe7770c4b076e95ddb8026affcfab39d31c7c4a2266e0e25e343bc4badc907d0", + "fe7770c4b076e95ddb8026affcfab39d31c7c4a2266e0e25e343bc4badc907d0", 15, b"\xeb", ), ( - b"ea9337d0ddf480abdc4fc56a0cb223702729cb230ae7b9de50243ad25ce90e8d", + "ea9337d0ddf480abdc4fc56a0cb223702729cb230ae7b9de50243ad25ce90e8d", 13, b"\x42", ), @@ -297,7 +297,8 @@ def test_view_tags(self): for key, idx, exp in test_vectors: self.assertEqual( - _derive_view_tags(crypto_helpers.decodepoint(unhexlify(key)), idx), exp + _derive_view_tags(crypto_helpers.decodepoint(bytes.fromhex(key)), idx), + exp, ) diff --git a/core/tests/test_apps.monero.proto.py b/core/tests/test_apps.monero.proto.py index 775eff5d6e4..3fd77702e1a 100644 --- a/core/tests/test_apps.monero.proto.py +++ b/core/tests/test_apps.monero.proto.py @@ -2,8 +2,6 @@ from common import * # isort:skip if not utils.BITCOIN_ONLY: - import ubinascii - from trezor.crypto import chacha20poly1305_decrypt, chacha20poly1305_encrypt from apps.monero.signing import offloading_keys, step_09_sign_input @@ -13,33 +11,33 @@ @unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin") class TestMoneroProto(unittest.TestCase): def test_sign_keys(self): - mst = ubinascii.unhexlify( - b"ca3bbe08a178a4508c3992a47ba775799e7626a365ed136e803fe5f2df2ce01c" + mst = bytes.fromhex( + "ca3bbe08a178a4508c3992a47ba775799e7626a365ed136e803fe5f2df2ce01c" ) self.assertEqual( offloading_keys.key_signature(mst, 0, True)[:12], - ubinascii.unhexlify(b"bb665d97ac7c77995578e352"), + bytes.fromhex("bb665d97ac7c77995578e352"), ) self.assertEqual( offloading_keys.key_signature(mst, 0, False), - ubinascii.unhexlify( - b"87bb70af81bb7325f73e8b962167579454d126ff8ee51472922d7c103fc60f5f" + bytes.fromhex( + "87bb70af81bb7325f73e8b962167579454d126ff8ee51472922d7c103fc60f5f" ), ) self.assertEqual( offloading_keys.key_signature(mst, 3, True)[:12], - ubinascii.unhexlify(b"b2ef8e4e4eec72ce3096622a"), + bytes.fromhex("b2ef8e4e4eec72ce3096622a"), ) self.assertEqual( offloading_keys.key_signature(mst, 3, False), - ubinascii.unhexlify( - b"e4331602a83a68c892a83693a1b961564048d9349111b85b8b4b52a1adcf36da" + bytes.fromhex( + "e4331602a83a68c892a83693a1b961564048d9349111b85b8b4b52a1adcf36da" ), ) def test_sig_seal(self): - mst = ubinascii.unhexlify( - b"ca3bbe08a178a4508c3992a47ba775799e7626a365ed136e803fe5f2df2ce01c" + mst = bytes.fromhex( + "ca3bbe08a178a4508c3992a47ba775799e7626a365ed136e803fe5f2df2ce01c" ) st = State() st.last_step = st.STEP_SIGN @@ -62,7 +60,7 @@ def test_sig_seal(self): "03da465e27f7feec31353cb668f0e8965391f983b06c0684b35b00af38533603", ] - mg_buff = [ubinascii.unhexlify(x) for x in mg_buff] + mg_buff = [bytes.fromhex(x) for x in mg_buff] mg_buff_b = list(mg_buff) mg_res = step_09_sign_input._protect_signature(st, mg_buff) diff --git a/core/tests/test_apps.nem.address.py b/core/tests/test_apps.nem.address.py index 0a00938bb85..824ebc12031 100644 --- a/core/tests/test_apps.nem.address.py +++ b/core/tests/test_apps.nem.address.py @@ -17,13 +17,13 @@ @unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin") class TestNemAddress(unittest.TestCase): def test_addresses(self): - pubkey = unhexlify( + pubkey = bytes.fromhex( "c5f54ba980fcbb657dbaaa42700539b207873e134d2375efeab5f1ab52f87844" ) address = nem.compute_address(pubkey, NEM_NETWORK_MAINNET) self.assertEqual(address, "NDD2CT6LQLIYQ56KIXI3ENTM6EK3D44P5JFXJ4R4") - pubkey = unhexlify( + pubkey = bytes.fromhex( "114171230ad6f8522a000cdc73fbc5c733b30bb71f2b146ccbdf34499f79a810" ) address = nem.compute_address(pubkey, NEM_NETWORK_MAINNET) diff --git a/core/tests/test_apps.nem.hdnode.py b/core/tests/test_apps.nem.hdnode.py index d6e79840c20..264cd63a40a 100644 --- a/core/tests/test_apps.nem.hdnode.py +++ b/core/tests/test_apps.nem.hdnode.py @@ -118,7 +118,7 @@ def test_addresses(self): ] for test in test_cases: - private_key = bytearray(reversed(unhexlify(test[0]))) + private_key = bytearray(reversed(bytes.fromhex(test[0]))) node = bip32.HDNode( depth=0, @@ -131,7 +131,7 @@ def test_addresses(self): self.assertEqual(node.nem_address(NEM_NETWORK_MAINNET), test[2]) # public key is prepended with 1, removing - self.assertEqual(node.public_key()[1:], unhexlify(test[1])) + self.assertEqual(node.public_key()[1:], bytes.fromhex(test[1])) def test_encryption(self): # test vectors from https://raw.githubusercontent.com/NemProject/nem-test-vectors/master/4.test-cipher.dat @@ -300,7 +300,7 @@ def test_encryption(self): ] for test in test_cases: - private_key = bytearray(reversed(unhexlify(test["private"]))) + private_key = bytearray(reversed(bytes.fromhex(test["private"]))) node = bip32.HDNode( depth=0, fingerprint=0, @@ -311,13 +311,13 @@ def test_encryption(self): ) encrypted = node.nem_encrypt( - unhexlify(test["public"]), - unhexlify(test["iv"]), - unhexlify(test["salt"]), - unhexlify(test["input"]), + bytes.fromhex(test["public"]), + bytes.fromhex(test["iv"]), + bytes.fromhex(test["salt"]), + bytes.fromhex(test["input"]), ) - self.assertEqual(encrypted, unhexlify(test["output"])) + self.assertEqual(encrypted, bytes.fromhex(test["output"])) if __name__ == "__main__": diff --git a/core/tests/test_apps.nem.mosaic_creation.py b/core/tests/test_apps.nem.mosaic_creation.py index 181d5e7a71e..fd66f78023e 100644 --- a/core/tests/test_apps.nem.mosaic_creation.py +++ b/core/tests/test_apps.nem.mosaic_creation.py @@ -45,20 +45,20 @@ def test_nem_transaction_mosaic_creation(self): t = serialize_mosaic_creation( m.transaction, m.mosaic_creation, - unhexlify( + bytes.fromhex( "994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd324" ), ) self.assertEqual( t, - unhexlify( + bytes.fromhex( "014000000100009870b4d60020000000994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd32400f36f060000000080c2d600de00000020000000994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd3241f0000001000000067696d72652e67616d65732e706f6e6707000000706164646c65731b000000506164646c657320666f722074686520626f6e672067616d652e0a04000000150000000c00000064697669736962696c69747901000000301a0000000d000000696e697469616c537570706c79050000003130303030190000000d000000737570706c794d757461626c650400000074727565180000000c0000007472616e7366657261626c650400000074727565000000002800000054424d4f534149434f443446353445453543444d523233434342474f414d3258534a4252354f4c4300743ba40b000000" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "68364353c29105e6d361ad1a42abbccbf419cfc7adb8b74c8f35d8f8bdaca3fa" ), ) @@ -89,14 +89,14 @@ def test_nem_transaction_mosaic_creation_with_levy(self): t = serialize_mosaic_creation( m.transaction, m.mosaic_creation, - unhexlify( + bytes.fromhex( "244fa194e2509ac0d2fbc18779c2618d8c2ebb61c16a3bcbebcf448c661ba8dc" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "b2f4a98113ff1f3a8f1e9d7197aa982545297fe0aa3fa6094af8031569953a55" ), ) @@ -126,19 +126,19 @@ def test_nem_transaction_mosaic_creation_with_levy(self): t = serialize_mosaic_creation( m.transaction, m.mosaic_creation, - unhexlify( + bytes.fromhex( "a1df5306355766bd2f9a64efdc089eb294be265987b3359093ae474c051d7d5a" ), ) self.assertEqual( t, - unhexlify( + bytes.fromhex( "0140000001000068ccaf200420000000a1df5306355766bd2f9a64efdc089eb294be265987b3359093ae474c051d7d5a002d3101000000004c0122040c01000020000000a1df5306355766bd2f9a64efdc089eb294be265987b3359093ae474c051d7d5a0f0000000300000064696d04000000636f696e0800000044494d20434f494e04000000150000000c00000064697669736962696c69747901000000361f0000000d000000696e697469616c537570706c790a000000393030303030303030301a0000000d000000737570706c794d757461626c650500000066616c7365180000000c0000007472616e7366657261626c6504000000747275654b00000002000000280000004e4347474c564f32473343554143564935474e58324b52424a5351434e3452444c325a574a3444500f0000000300000064696d04000000636f696e0a00000000000000280000004e424d4f534149434f443446353445453543444d523233434342474f414d325853495558365452530065cd1d00000000" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "e8dc14821dbea4831d9051f86158ef348001447968fc22c01644fdaf2bda75c6" ), ) @@ -172,20 +172,20 @@ def test_nem_transaction_mosaic_creation_with_description(self): t = serialize_mosaic_creation( m.transaction, m.mosaic_creation, - unhexlify( + bytes.fromhex( "58956ac77951622dc5f1c938affbf017c458e30e6b21ddb5783d38b302531f23" ), ) self.assertEqual( t, - unhexlify( + bytes.fromhex( "0140000001000068d2dd97012000000058956ac77951622dc5f1c938affbf017c458e30e6b21ddb5783d38b302531f2300f36f0600000000e2eb9701c80100002000000058956ac77951622dc5f1c938affbf017c458e30e6b21ddb5783d38b302531f2317000000060000006a61626f3338090000007265645f746f6b656e0c0100005468697320746f6b656e20697320746f2063656c656272617465207468652072656c65617365206f66204e616d6573706163657320616e64204d6f7361696373206f6e20746865204e454d2073797374656d2e205468697320746f6b656e207761732074686520666973742065766572206d6f736169632063726561746564206f74686572207468616e206e656d2e78656d2e20546865726520617265206f6e6c792031302c3030302052656420546f6b656e7320746861742077696c6c206576657220626520637265617465642e20497420686173206e6f206c65767920616e642063616e2062652074726164656420667265656c7920616d6f6e6720746869726420706172746965732e04000000150000000c00000064697669736962696c69747901000000321a0000000d000000696e697469616c537570706c790500000031303030301a0000000d000000737570706c794d757461626c650500000066616c7365180000000c0000007472616e7366657261626c65040000007472756500000000280000004e424d4f534149434f443446353445453543444d523233434342474f414d3258534955583654525300743ba40b000000" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "269c6fda657aba3053a0e5b138c075808cc20e244e1182d9b730798b60a1f77b" ), ) diff --git a/core/tests/test_apps.nem.mosaic_supply_change.py b/core/tests/test_apps.nem.mosaic_supply_change.py index 490a7a8a003..ec0a2f9cad4 100644 --- a/core/tests/test_apps.nem.mosaic_supply_change.py +++ b/core/tests/test_apps.nem.mosaic_supply_change.py @@ -29,14 +29,14 @@ def test_nem_transaction_create_mosaic_supply_change(self): t = serialize_mosaic_supply_change( m.transaction, m.supply_change, - unhexlify( + bytes.fromhex( "994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd324" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "33a50fdd4a54913643a580b2af08b9a5b51b7cee922bde380e84c573a7969c50" ), ) @@ -55,14 +55,14 @@ def test_nem_transaction_create_mosaic_supply_change(self): t = serialize_mosaic_supply_change( m.transaction, m.supply_change, - unhexlify( + bytes.fromhex( "84afa1bbc993b7f5536344914dde86141e61f8cbecaf8c9cefc07391f3287cf5" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "1ce8e8894d077a66ff22294b000825d090a60742ec407efd80eb8b19657704f2" ), ) @@ -81,14 +81,14 @@ def test_nem_transaction_create_mosaic_supply_change(self): t = serialize_mosaic_supply_change( m.transaction, m.supply_change, - unhexlify( + bytes.fromhex( "b7ccc27b21ba6cf5c699a8dc86ba6ba98950442597ff9fa30e0abe0f5f4dd05d" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "694e493e9576d2bcf60d85747e302ac2e1cc27783187947180d4275a713ff1ff" ), ) @@ -100,14 +100,14 @@ def test_nem_transaction_create_mosaic_supply_change(self): t = serialize_mosaic_supply_change( m.transaction, m.supply_change, - unhexlify( + bytes.fromhex( "75f001a8641e2ce5c4386883dda561399ed346177411b492a677b73899502f13" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "09836334e123970e068d5b411e4d1df54a3ead10acf1ad5935a2cdd9f9680185" ), ) diff --git a/core/tests/test_apps.nem.multisig.aggregate_modification.py b/core/tests/test_apps.nem.multisig.aggregate_modification.py index b2e225ef340..a2dd652271c 100644 --- a/core/tests/test_apps.nem.multisig.aggregate_modification.py +++ b/core/tests/test_apps.nem.multisig.aggregate_modification.py @@ -24,7 +24,7 @@ def test_nem_transaction_aggregate_modification(self): t = serialize_aggregate_modification( m.transaction, m.aggregate_modification, - unhexlify( + bytes.fromhex( "462ee976890916e54fa825d26bdd0235f5eb5b6a143c199ab0ae5ee9328e08ce" ), ) @@ -32,21 +32,21 @@ def test_nem_transaction_aggregate_modification(self): write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd324" ), ) write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "c54d6e33ed1446eedd7f7a80a588dd01857f723687a09200c1917d5524752f8b" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "6a55471b17159e5b6cd579c421e95a4e39d92e3f78b0a55ee337e785a601d3a2" ), ) @@ -56,7 +56,7 @@ def test_nem_transaction_aggregate_modification(self): t = serialize_aggregate_modification( m.transaction, m.aggregate_modification, - unhexlify( + bytes.fromhex( "f41b99320549741c5cce42d9e4bb836d98c50ed5415d0c3c2912d1bb50e6a0e5" ), ) @@ -64,42 +64,42 @@ def test_nem_transaction_aggregate_modification(self): write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "1fbdbdde28daf828245e4533765726f0b7790e0b7146e2ce205df3e86366980b" ), ) write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "f94e8702eb1943b23570b1b83be1b81536df35538978820e98bfce8f999e2d37" ), ) write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "826cedee421ff66e708858c17815fcd831a4bb68e3d8956299334e9e24380ba8" ), ) write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "719862cd7d0f4e875a6a0274c9a1738f38f40ad9944179006a54c34724c1274d" ), ) write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "43aa69177018fc3e2bdbeb259c81cddf24be50eef9c5386db51d82386c41475a" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "cc64ca69bfa95db2ff7ac1e21fe6d27ece189c603200ebc9778d8bb80ca25c3c" ), ) @@ -110,7 +110,7 @@ def test_nem_transaction_aggregate_modification_relative_change(self): t = serialize_aggregate_modification( m.transaction, m.aggregate_modification, - unhexlify( + bytes.fromhex( "6bf7849c1eec6a2002995cc457dc00c4e29bad5c88de63f51e42dfdcd7b2131d" ), ) @@ -118,28 +118,28 @@ def test_nem_transaction_aggregate_modification_relative_change(self): write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "5f53d076c8c3ec3110b98364bc423092c3ec2be2b1b3c40fd8ab68d54fa39295" ), ) write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "9eb199c2b4d406f64cb7aa5b2b0815264b56ba8fe44d558a6cb423a31a33c4c2" ), ) write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "94b2323dab23a3faba24fa6ddda0ece4fbb06acfedd74e76ad9fae38d006882b" ), ) write_cosignatory_modification( t, 1, - unhexlify( + bytes.fromhex( "d88c6ee2a2cd3929d0d76b6b14ecb549d21296ab196a2b3a4cb2536bcce32e87" ), ) @@ -147,7 +147,7 @@ def test_nem_transaction_aggregate_modification_relative_change(self): self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "1fbdae5ba753e68af270930413ae90f671eb8ab58988116684bac0abd5726584" ), ) diff --git a/core/tests/test_apps.nem.multisig.py b/core/tests/test_apps.nem.multisig.py index 3c02a8112ec..f5ae3764064 100644 --- a/core/tests/test_apps.nem.multisig.py +++ b/core/tests/test_apps.nem.multisig.py @@ -25,7 +25,7 @@ def test_nem_multisig(self): base_tx = serialize_aggregate_modification( m.transaction, m.aggregate_modification, - unhexlify( + bytes.fromhex( "abac2ee3d4aaa7a3bfb65261a00cc04c761521527dd3f2cf741e2815cbba83ac" ), ) @@ -33,14 +33,14 @@ def test_nem_multisig(self): write_cosignatory_modification( base_tx, 2, - unhexlify( + bytes.fromhex( "e6cff9b3725a91f31089c3acca0fac3e341c00b1c8c6e9578f66c4514509c3b3" ), ) m = _create_common_msg(NEM_NETWORK_TESTNET, 3939039, 6000000, 3960639) multisig = serialize_multisig( m, - unhexlify( + bytes.fromhex( "59d89076964742ef2a2089d26a5aa1d2c7a7bb052a46c1de159891e91ad3d76e" ), base_tx, @@ -48,18 +48,18 @@ def test_nem_multisig(self): self.assertEqual( multisig, - unhexlify( + bytes.fromhex( "0410000001000098df1a3c002000000059d89076964742ef2a2089d26a5aa1d2c7a7bb052a46c1de159891e91ad3d76e808d5b00000000003f6f3c006c0000000110000001000098df1a3c0020000000abac2ee3d4aaa7a3bfb65261a00cc04c761521527dd3f2cf741e2815cbba83ac0024f400000000003f6f3c0001000000280000000200000020000000e6cff9b3725a91f31089c3acca0fac3e341c00b1c8c6e9578f66c4514509c3b3" ), ) - address_pubkey = unhexlify( + address_pubkey = bytes.fromhex( "abac2ee3d4aaa7a3bfb65261a00cc04c761521527dd3f2cf741e2815cbba83ac" ) m = _create_common_msg(NEM_NETWORK_TESTNET, 3939891, 6000000, 3961491) multisig = serialize_multisig_signature( m, - unhexlify( + bytes.fromhex( "71cba4f2a28fd19f902ba40e9937994154d9eeaad0631d25d525ec37922567d4" ), base_tx, @@ -68,7 +68,7 @@ def test_nem_multisig(self): self.assertEqual( multisig, - unhexlify( + bytes.fromhex( "0210000001000098331e3c002000000071cba4f2a28fd19f902ba40e9937994154d9eeaad0631d25d525ec37922567d4808d5b000000000093723c0024000000200000008ec165580bdabfd31ce6007a1748ce5bdf30eab7a214743097de3bc822ac7e002800000054435258595551494d464137414f474c354c463359574c43375641424c59554d4a35414342554e4c" ), ) @@ -88,7 +88,7 @@ def test_nem_multisig_2(self): base_tx = serialize_provision_namespace( m.transaction, m.provision_namespace, - unhexlify( + bytes.fromhex( "a1df5306355766bd2f9a64efdc089eb294be265987b3359093ae474c051d7d5a" ), ) @@ -97,25 +97,25 @@ def test_nem_multisig_2(self): multisig = serialize_multisig( m, - unhexlify( + bytes.fromhex( "cfe58463f0eaebceb5d00717f8aead49171a5d7c08f6b1299bd534f11715acc9" ), base_tx, ) self.assertEqual( multisig, - unhexlify( + bytes.fromhex( "041000000100006800978a0320000000cfe58463f0eaebceb5d00717f8aead49171a5d7c08f6b1299bd534f11715acc9808d5b000000000080e88b037b000000012000000100006800978a0320000000a1df5306355766bd2f9a64efdc089eb294be265987b3359093ae474c051d7d5a002d31010000000080e88b03280000004e414d4553504143455748344d4b464d42435646455244504f4f5034464b374d54425844505a5a4100f2052a010000000300000064696dffffffff" ), ) m = _create_common_msg(NEM_NETWORK_MAINNET, 59414342, 6000000, 59500742) - address_pubkey = unhexlify( + address_pubkey = bytes.fromhex( "a1df5306355766bd2f9a64efdc089eb294be265987b3359093ae474c051d7d5a" ) multisig = serialize_multisig_signature( m, - unhexlify( + bytes.fromhex( "1b49b80203007117d034e45234ffcdf402c044aeef6dbb06351f346ca892bce2" ), base_tx, @@ -123,7 +123,7 @@ def test_nem_multisig_2(self): ) self.assertEqual( multisig, - unhexlify( + bytes.fromhex( "021000000100006846978a03200000001b49b80203007117d034e45234ffcdf402c044aeef6dbb06351f346ca892bce2808d5b0000000000c6e88b032400000020000000bfa2088f7720f89dd4664d650e321dabd02fab61b7355bc88a391a848a49786a280000004e4444524733554542354c5a5a5a4d445742453452544b5a4b37334a424850414957424843464d56" ), ) @@ -131,7 +131,7 @@ def test_nem_multisig_2(self): m = _create_common_msg(NEM_NETWORK_MAINNET, 59414381, 6000000, 59500781) multisig = serialize_multisig_signature( m, - unhexlify( + bytes.fromhex( "7ba4b39209f1b9846b098fe43f74381e43cb2882ccde780f558a63355840aa87" ), base_tx, @@ -139,7 +139,7 @@ def test_nem_multisig_2(self): ) self.assertEqual( multisig, - unhexlify( + bytes.fromhex( "02100000010000686d978a03200000007ba4b39209f1b9846b098fe43f74381e43cb2882ccde780f558a63355840aa87808d5b0000000000ede88b032400000020000000bfa2088f7720f89dd4664d650e321dabd02fab61b7355bc88a391a848a49786a280000004e4444524733554542354c5a5a5a4d445742453452544b5a4b37334a424850414957424843464d56" ), ) diff --git a/core/tests/test_apps.nem.namespace.py b/core/tests/test_apps.nem.namespace.py index 3d28b69f250..603c7c529d4 100644 --- a/core/tests/test_apps.nem.namespace.py +++ b/core/tests/test_apps.nem.namespace.py @@ -29,13 +29,13 @@ def test_create_provision_namespace(self): t = serialize_provision_namespace( m.transaction, m.provision_namespace, - unhexlify( + bytes.fromhex( "84afa1bbc993b7f5536344914dde86141e61f8cbecaf8c9cefc07391f3287cf5" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "f7cab28da57204d01a907c697836577a4ae755e6c9bac60dcc318494a22debb3" ), ) @@ -54,14 +54,14 @@ def test_create_provision_namespace(self): t = serialize_provision_namespace( m.transaction, m.provision_namespace, - unhexlify( + bytes.fromhex( "244fa194e2509ac0d2fbc18779c2618d8c2ebb61c16a3bcbebcf448c661ba8dc" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "7ddd5fe607e1bfb5606e0ac576024c318c8300d237273117d4db32a60c49524d" ), ) @@ -80,14 +80,14 @@ def test_create_provision_namespace(self): t = serialize_provision_namespace( m.transaction, m.provision_namespace, - unhexlify( + bytes.fromhex( "9f3c14f304309c8b72b2821339c4428793b1518bea72d58dd01f19d523518614" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "57071aad93ca125dc231dc02c07ad8610cd243d35068f9b36a7d231383907569" ), ) diff --git a/core/tests/test_apps.nem.transfer.py b/core/tests/test_apps.nem.transfer.py index c368b8f0eb9..1db7ece99c7 100644 --- a/core/tests/test_apps.nem.transfer.py +++ b/core/tests/test_apps.nem.transfer.py @@ -29,7 +29,7 @@ def test_create_transfer(self): t = serialize_transfer( m.transaction, m.transfer, - unhexlify( + bytes.fromhex( "e59ef184a612d4c3c4d89b5950eb57262c69862b2f96e59c5043bf41765c482f" ), None, @@ -37,13 +37,13 @@ def test_create_transfer(self): ) self.assertEqual( t, - unhexlify( + bytes.fromhex( "01010000010000980000000020000000e59ef184a612d4c3c4d89b5950eb57262c69862b2f96e59c5043bf41765c482f00000000000000000000000028000000544247494d52453453424652554a584d48374456463249425933364c324544575a3337475653433400203d88792d000000000000" ), ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "0acbf8df91e6a65dc56c56c43d65f31ff2a6a48d06fc66e78c7f3436faf3e74f" ), ) @@ -63,15 +63,15 @@ def test_create_transfer_with_payload(self): t = serialize_transfer( m.transaction, m.transfer, - unhexlify( + bytes.fromhex( "8d07f90fb4bbe7715fa327c926770166a11be2e494a970605f2e12557f66c9b9" ), - bytearray("Good luck!"), + b"Good luck!", False, ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "e90e98614c7598fbfa4db5411db1b331d157c2f86b558fb7c943d013ed9f71cb" ), ) @@ -91,17 +91,17 @@ def test_create_transfer_with_encrypted_payload(self): t = serialize_transfer( m.transaction, m.transfer, - unhexlify( + bytes.fromhex( "f85ab43dad059b9d2331ddacc384ad925d3467f03207182e01296bacfb242d01" ), - unhexlify( + bytes.fromhex( "4d9dcf9186967d30be93d6d5404ded22812dbbae7c3f0de501bcd7228cba45bded13000eec7b4c6215fc4d3588168c9218167cec98e6977359153a4132e050f594548e61e0dc61c153f0f53c5e65c595239c9eb7c4e7d48e0f4bb8b1dd2f5ddc" ), True, ) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "40e89160e6f83d37f7c82defc0afe2c1605ae8c919134570a51dd27ea1bb516c" ), ) @@ -122,16 +122,16 @@ def test_create_transfer_with_mosaic(self): t = serialize_transfer( m.transaction, m.transfer, - unhexlify( + bytes.fromhex( "994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd324" ), - bytearray("sending you 3 pairs of paddles\n"), + b"sending you 3 pairs of paddles\n", False, ) self.assertEqual( t, - unhexlify( + bytes.fromhex( "010100000200009824b9d60020000000994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd3248034900b0000000034c7d6002800000054424c4f4f44504c574f574d5a3254415258345246504f534f574c554c48584d524f424e32575849c0c62d000000000027000000010000001f00000073656e64696e6720796f752033207061697273206f6620706164646c65730a02000000" ), ) @@ -141,7 +141,7 @@ def test_create_transfer_with_mosaic(self): self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "3409d9ece28d6296d6d5e220a7e3cb8641a3fb235ffcbd20c95da64f003ace6c" ), ) @@ -160,17 +160,17 @@ def test_create_transfer_with_mosaic(self): t = serialize_transfer( m.transaction, m.transfer, - unhexlify( + bytes.fromhex( "f85ab43dad059b9d2331ddacc384ad925d3467f03207182e01296bacfb242d01" ), - bytearray("enjoy! :)"), + b"enjoy! :)", False, ) serialize_mosaic(t, "imre.g", "tokens", 1) self.assertEqual( hashlib.sha3_256(t, keccak=True).digest(), - unhexlify( + bytes.fromhex( "882dca18dcbe075e15e0ec5a1d7e6ccd69cc0f1309ffd3fde227bfbc107b3f6e" ), ) diff --git a/core/tests/test_apps.ripple.address.py b/core/tests/test_apps.ripple.address.py index c5cd1d73678..0cff512e492 100644 --- a/core/tests/test_apps.ripple.address.py +++ b/core/tests/test_apps.ripple.address.py @@ -9,21 +9,21 @@ class TestRippleAddress(unittest.TestCase): def test_pubkey_to_address(self): addr = address_from_public_key( - unhexlify( + bytes.fromhex( "ed9434799226374926eda3b54b1b461b4abf7237962eae18528fea67595397fa32" ) ) self.assertEqual(addr, "rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN") addr = address_from_public_key( - unhexlify( + bytes.fromhex( "03e2b079e9b09ae8916da8f5ee40cbda9578dbe7c820553fe4d5f872eec7b1fdd4" ) ) self.assertEqual(addr, "rhq549rEtUrJowuxQC2WsHNGLjAjBQdAe8") addr = address_from_public_key( - unhexlify( + bytes.fromhex( "0282ee731039929e97db6aec242002e9aa62cd62b989136df231f4bb9b8b7c7eb2" ) ) diff --git a/core/tests/test_apps.ripple.serializer.py b/core/tests/test_apps.ripple.serializer.py index 837820f0bea..46e91a093c1 100644 --- a/core/tests/test_apps.ripple.serializer.py +++ b/core/tests/test_apps.ripple.serializer.py @@ -26,7 +26,7 @@ def test_transactions(self): ) self.assertEqual( serialize(common, source_address, pubkey=None), - unhexlify( + bytes.fromhex( "120000240000000161400000000bebc20068400000000000000a811450f97a072f1c4357f1ad84566a609479d927c9428314550fc62003e785dc231a1058a05e56e3f09cf4e6" ), ) @@ -45,7 +45,7 @@ def test_transactions(self): ) self.assertEqual( serialize(common, source_address, pubkey=None), - unhexlify( + bytes.fromhex( "12000024000000636140000000000000016840000000000000638114550fc62003e785dc231a1058a05e56e3f09cf4e6831450f97a072f1c4357f1ad84566a609479d927c942" ), ) @@ -65,7 +65,7 @@ def test_transactions(self): ) self.assertEqual( serialize(common, source_address, pubkey=None), - unhexlify( + bytes.fromhex( "120000220000000024000000026140000000017d784068400000000000000a81145ccb151f6e9d603f394ae778acf10d3bece874f68314e851bbbe79e328e43d68f43445368133df5fba5a" ), ) @@ -86,7 +86,7 @@ def test_transactions(self): # 201b005ee9ba removed from the test vector because last ledger sequence is not supported self.assertEqual( serialize(common, source_address, pubkey=None), - unhexlify( + bytes.fromhex( "12000022000000002400000090614000000000030d4068400000000000000f8114aa1bd19d9e87be8069fdbf6843653c43837c03c6831467fe6ec28e0464dd24fb2d62a492aac697cfad02" ), ) @@ -108,7 +108,7 @@ def test_transactions(self): ) self.assertEqual( serialize(common, source_address, pubkey=None), - unhexlify( + bytes.fromhex( "120000220000000024000000012ef72d50ca6140000000017d784068400000000000000c8114e851bbbe79e328e43d68f43445368133df5fba5a831476dac5e814cd4aa74142c3ab45e69a900e637aa2" ), ) @@ -131,30 +131,30 @@ def test_transactions_for_signing(self): tx = serialize( common, source_address, - pubkey=unhexlify( + pubkey=bytes.fromhex( "ed5f5ac8b98974a3ca843326d9b88cebd0560177b973ee0b149f782cfaa06dc66a" ), ) network_prefix = helpers.HASH_TX_SIGN.to_bytes(4, "big") tx = network_prefix + tx - self.assertEqual(tx[0:4], unhexlify("53545800")) # signing prefix - self.assertEqual(tx[4:7], unhexlify("120000")) # transaction type - self.assertEqual(tx[7:12], unhexlify("2280000000")) # flags - self.assertEqual(tx[12:17], unhexlify("2400000001")) # sequence - self.assertEqual(tx[17:26], unhexlify("6140000000000003e8")) # amount - self.assertEqual(tx[26:35], unhexlify("68400000000000000a")) # fee + self.assertEqual(tx[0:4], bytes.fromhex("53545800")) # signing prefix + self.assertEqual(tx[4:7], bytes.fromhex("120000")) # transaction type + self.assertEqual(tx[7:12], bytes.fromhex("2280000000")) # flags + self.assertEqual(tx[12:17], bytes.fromhex("2400000001")) # sequence + self.assertEqual(tx[17:26], bytes.fromhex("6140000000000003e8")) # amount + self.assertEqual(tx[26:35], bytes.fromhex("68400000000000000a")) # fee self.assertEqual( tx[35:70], - unhexlify( + bytes.fromhex( "7321ed5f5ac8b98974a3ca843326d9b88cebd0560177b973ee0b149f782cfaa06dc66a" ), ) # signing pub key self.assertEqual( - tx[70:92], unhexlify("81145b812c9d57731e27a2da8b1830195f88ef32a3b6") + tx[70:92], bytes.fromhex("81145b812c9d57731e27a2da8b1830195f88ef32a3b6") ) # account self.assertEqual( - tx[92:114], unhexlify("8314b5f762798a53d543a014caf8b297cff8f2f937e8") + tx[92:114], bytes.fromhex("8314b5f762798a53d543a014caf8b297cff8f2f937e8") ) # destination self.assertEqual(len(tx[114:]), 0) # that's it diff --git a/core/tests/test_apps.solana.offchain_message.py b/core/tests/test_apps.solana.offchain_message.py index 8751eafb7bb..4a8ab91828d 100644 --- a/core/tests/test_apps.solana.offchain_message.py +++ b/core/tests/test_apps.solana.offchain_message.py @@ -1,6 +1,4 @@ # flake8: noqa: F403,F405 -from ubinascii import unhexlify - from trezor.crypto import base58 from trezor.wire import DataError @@ -58,7 +56,7 @@ def test_vectors(self): for vector in TEST_VECTORS: signers = [base58.decode(signer) for signer in vector["signers"]] serialized = self.serialize(signers, vector["message"]) - self.assertEqual(serialized, unhexlify(vector["hex"])) + self.assertEqual(serialized, bytes.fromhex(vector["hex"])) def test_signers_empty(self): with self.assertRaises(DataError): diff --git a/core/tests/test_apps.stellar.address.py b/core/tests/test_apps.stellar.address.py index 7717e65d780..e53ff2523d7 100644 --- a/core/tests/test_apps.stellar.address.py +++ b/core/tests/test_apps.stellar.address.py @@ -24,7 +24,7 @@ def test_address_to_pubkey(self): public_key_from_address( "GBOVKZBEM2YYLOCDCUXJ4IMRKHN4LCJAE7WEAEA2KF562XFAGDBOB64V" ), - unhexlify( + bytes.fromhex( "5d55642466b185b843152e9e219151dbc5892027ec40101a517bed5ca030c2e0" ), ) @@ -33,14 +33,14 @@ def test_address_to_pubkey(self): public_key_from_address( "GCN2K2HG53AWX2SP5UHRPMJUUHLJF2XBTGSXROTPWRGAYJCDDP63J2U6" ), - unhexlify( + bytes.fromhex( "9ba568e6eec16bea4fed0f17b134a1d692eae199a578ba6fb44c0c24431bfdb4" ), ) def test_pubkey_to_address(self): addr = address_from_public_key( - unhexlify( + bytes.fromhex( "5d55642466b185b843152e9e219151dbc5892027ec40101a517bed5ca030c2e0" ) ) @@ -49,7 +49,7 @@ def test_pubkey_to_address(self): ) addr = address_from_public_key( - unhexlify( + bytes.fromhex( "9ba568e6eec16bea4fed0f17b134a1d692eae199a578ba6fb44c0c24431bfdb4" ) ) @@ -58,21 +58,21 @@ def test_pubkey_to_address(self): ) def test_both(self): - pubkey = unhexlify( + pubkey = bytes.fromhex( "dfcc77d08588601702e02de2dc603f5c5281bea23baa894ae3b3b4778e5bbe40" ) self.assertEqual( public_key_from_address(address_from_public_key(pubkey)), pubkey ) - pubkey = unhexlify( + pubkey = bytes.fromhex( "53214e6155469c32fb882b1b1d94930d5445a78202867b7ddc6a33ad42ff4464" ) self.assertEqual( public_key_from_address(address_from_public_key(pubkey)), pubkey ) - pubkey = unhexlify( + pubkey = bytes.fromhex( "5ed4690134e5ef79b290ea1e7a4b8f3b6b3bcf287463c18bfe36baa030e7efbd" ) self.assertEqual( @@ -91,7 +91,7 @@ def test_invalid_address(self): # and decode_strkey(strkey) -> (version, data). def test_strkey_account(self): # ED25519 public key (G... address) - pubkey = unhexlify( + pubkey = bytes.fromhex( "3f0c34bf93ad0d9971d04ccc90f705511c838aad9734a4a2fb0d7a03fc7fe89a" ) strkey = "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ" @@ -100,7 +100,7 @@ def test_strkey_account(self): def test_strkey_contract(self): # contract address (C... address) - contract_hash = unhexlify( + contract_hash = bytes.fromhex( "3f0c34bf93ad0d9971d04ccc90f705511c838aad9734a4a2fb0d7a03fc7fe89a" ) strkey = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA" @@ -129,13 +129,13 @@ def test_strkey_muxed_account(self): "MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAEABLYI", ), ): - muxed_data = unhexlify(pubkey + muxed_id) + muxed_data = bytes.fromhex(pubkey + muxed_id) self.assertEqual(encode_strkey(STRKEY_MUXED_ACCOUNT, muxed_data), strkey) self.assertEqual(decode_strkey(strkey), (STRKEY_MUXED_ACCOUNT, muxed_data)) def test_strkey_claimable_balance(self): # claimable balance (B... address): 1 byte type (v0 = 0x00) + 32 bytes hash - balance_id = unhexlify( + balance_id = bytes.fromhex( "00" # type v0 "3f0c34bf93ad0d9971d04ccc90f705511c838aad9734a4a2fb0d7a03fc7fe89a" # hash ) @@ -145,7 +145,7 @@ def test_strkey_claimable_balance(self): def test_strkey_liquidity_pool(self): # liquidity pool (L... address): 32 bytes hash - pool_id = unhexlify( + pool_id = bytes.fromhex( "3f0c34bf93ad0d9971d04ccc90f705511c838aad9734a4a2fb0d7a03fc7fe89a" ) strkey = "LA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUPJN" diff --git a/core/tests/test_apps.stellar.writers.py b/core/tests/test_apps.stellar.writers.py index 82deca4a19c..5e655f70e49 100644 --- a/core/tests/test_apps.stellar.writers.py +++ b/core/tests/test_apps.stellar.writers.py @@ -24,7 +24,7 @@ def test_write_int32(self): for value, expected in TESTS: w = bytearray() write_int32(w, value) - self.assertEqual(w, unhexlify(expected), msg=f"write_int32({value})") + self.assertEqual(w, bytes.fromhex(expected), msg=f"write_int32({value})") def test_write_int32_out_of_range(self): TESTS = [ @@ -52,7 +52,7 @@ def test_write_int64(self): for value, expected in TESTS: w = bytearray() write_int64(w, value) - self.assertEqual(w, unhexlify(expected), msg=f"write_int64({value})") + self.assertEqual(w, bytes.fromhex(expected), msg=f"write_int64({value})") def test_write_int64_out_of_range(self): TESTS = [ diff --git a/core/tests/test_apps.tezos.address.py b/core/tests/test_apps.tezos.address.py index 748419e760b..27681a6c79d 100644 --- a/core/tests/test_apps.tezos.address.py +++ b/core/tests/test_apps.tezos.address.py @@ -14,19 +14,19 @@ def test_get_address_from_contract(self): contracts = [ TezosContractID( tag=TezosContractType.Implicit, - hash=unhexlify("0090ec585b4d5fa39b20213e46b232cc57a4cfab4b"), + hash=bytes.fromhex("0090ec585b4d5fa39b20213e46b232cc57a4cfab4b"), ), TezosContractID( tag=TezosContractType.Implicit, - hash=unhexlify("017dfb3fef44082eca8cd3eccebd77db44633ffc9e"), + hash=bytes.fromhex("017dfb3fef44082eca8cd3eccebd77db44633ffc9e"), ), TezosContractID( tag=TezosContractType.Implicit, - hash=unhexlify("02c1fc1b7e503825068ff4fe2f8916f98af981eab1"), + hash=bytes.fromhex("02c1fc1b7e503825068ff4fe2f8916f98af981eab1"), ), TezosContractID( tag=TezosContractType.Originated, - hash=unhexlify("65671dedc69669f066f45d586a2ecdeddacc95af00"), + hash=bytes.fromhex("65671dedc69669f066f45d586a2ecdeddacc95af00"), ), ] diff --git a/core/tests/test_apps.tezos.encode.py b/core/tests/test_apps.tezos.encode.py index ad9d15b7af4..fd654f39252 100644 --- a/core/tests/test_apps.tezos.encode.py +++ b/core/tests/test_apps.tezos.encode.py @@ -30,7 +30,7 @@ def test_tezos_encode_zarith(self): for i, o in zip(inputs, outputs): w = bytearray() _encode_zarith(w, i) - self.assertEqual(bytes(w), unhexlify(o)) + self.assertEqual(bytes(w), bytes.fromhex(o)) def test_tezos_encode_data_with_bool_prefix(self): w = bytearray() @@ -39,8 +39,8 @@ def test_tezos_encode_data_with_bool_prefix(self): data = "afffeb1dc3c0" w = bytearray() - _encode_data_with_bool_prefix(w, unhexlify(data), 6) - self.assertEqual(bytes(w), unhexlify("ff" + data)) + _encode_data_with_bool_prefix(w, bytes.fromhex(data), 6) + self.assertEqual(bytes(w), bytes.fromhex("ff" + data)) def test_tezos_encode_bool(self): w = bytearray() @@ -54,26 +54,26 @@ def test_tezos_encode_bool(self): def test_tezos_encode_contract_id(self): implicit = TezosContractID( tag=TezosContractType.Implicit, - hash=unhexlify("00101368afffeb1dc3c089facbbe23f5c30b787ce9"), + hash=bytes.fromhex("00101368afffeb1dc3c089facbbe23f5c30b787ce9"), ) w = bytearray() _encode_contract_id(w, implicit) self.assertEqual( - bytes(w), unhexlify("0000101368afffeb1dc3c089facbbe23f5c30b787ce9") + bytes(w), bytes.fromhex("0000101368afffeb1dc3c089facbbe23f5c30b787ce9") ) originated = TezosContractID( tag=TezosContractType.Originated, - hash=unhexlify("65671dedc69669f066f45d586a2ecdeddacc95af00"), + hash=bytes.fromhex("65671dedc69669f066f45d586a2ecdeddacc95af00"), ) w = bytearray() _encode_contract_id(w, originated) self.assertEqual( - bytes(w), unhexlify("0165671dedc69669f066f45d586a2ecdeddacc95af00") + bytes(w), bytes.fromhex("0165671dedc69669f066f45d586a2ecdeddacc95af00") ) def test_tezos_base58_encode_check(self): - pkh = unhexlify("101368afffeb1dc3c089facbbe23f5c30b787ce9") + pkh = bytes.fromhex("101368afffeb1dc3c089facbbe23f5c30b787ce9") self.assertEqual( base58_encode_check(pkh, prefix="tz1"), @@ -104,7 +104,7 @@ def test_tezos_encode_natural(self): for i, o in zip(inputs, outputs): w = bytearray() _encode_natural(w, i) - self.assertEqual(bytes(w), unhexlify(o)) + self.assertEqual(bytes(w), bytes.fromhex(o)) if __name__ == "__main__": diff --git a/core/tests/test_apps.tron.address.py b/core/tests/test_apps.tron.address.py index 136295750de..3e5b9b22c0f 100644 --- a/core/tests/test_apps.tron.address.py +++ b/core/tests/test_apps.tron.address.py @@ -15,21 +15,21 @@ def address_from_public_key(pubkey: bytes) -> str: class TestTronAddress(unittest.TestCase): def test_pubkey_to_address(self): addr = address_from_public_key( - unhexlify( + bytes.fromhex( "04aee772c640a56bfd434cc6c41b661467f0fac8ad922cd0d6f37a25a9faab506c9d687d8d4ad0957ca8a07b15db6b39ab2fa56cc81b49f2f92d44e1cdd2f4f266" ) ) self.assertEqual(addr, "TY72iA3SBtrds3QLYsS7LwYfkzXwAXCRWT") addr = address_from_public_key( - unhexlify( + bytes.fromhex( "041cc8ed55001c441a9ca7b42129f025f33ff30ea29dfe88fc9f8ad8826582c73b52d47c475c75da0cc9f64a6462ca57e70a8902a79cccc4e769cc0261c691ce4f" ) ) self.assertEqual(addr, "TVd6xm7E5vn9qnUQZbfoH5SAVZXZ15c4wC") addr = address_from_public_key( - unhexlify( + bytes.fromhex( "04d3df47d402249892f56295cf08cb70c2e37fc6b9eea01e1b163f4b5608f96c8449b3ea69541a33ff7961bb69af6f98bfca558fe53b9429de3fb8054d29f9c917" ) ) diff --git a/core/tests/test_apps.webauthn.credential.py b/core/tests/test_apps.webauthn.credential.py index d46ba163c88..09d7ebf58ca 100644 --- a/core/tests/test_apps.webauthn.credential.py +++ b/core/tests/test_apps.webauthn.credential.py @@ -23,40 +23,38 @@ def test_fido2_credential_decode(self): storage.device.is_initialized = lambda: True cred_id = ( - b"f1d0020013e65c865634ad8abddf7a66df56ae7d8c3afd356f76426801508b2e" - b"579bcb3496fe6396a6002e3cd6d80f6359dfa9961e24c544bfc2f26acec1b8d8" - b"78ba56727e1f6a7b5176c607552aea63a5abe5d826d69fab3063edfa0201d9a5" - b"1013d69eddb2eff37acdd5963f" + "f1d0020013e65c865634ad8abddf7a66df56ae7d8c3afd356f76426801508b2e" + "579bcb3496fe6396a6002e3cd6d80f6359dfa9961e24c544bfc2f26acec1b8d8" + "78ba56727e1f6a7b5176c607552aea63a5abe5d826d69fab3063edfa0201d9a5" + "1013d69eddb2eff37acdd5963f" ) rp_id = "example.com" rp_id_hash = sha256(rp_id).digest() - user_id = b"3082019330820138a0030201023082019330820138a003020102308201933082" + user_id = "3082019330820138a0030201023082019330820138a003020102308201933082" user_name = "johnpsmith@example.com" creation_time = 2 public_key = ( - b"a501020326200121582051f0d4c307bc737c90ac605c6279f7d01e451798aa7b" - b"74df550fdb43a7760c7c22582002b5107fef42094d00f52a9b1e90afb90e1b9d" - b"ecbf15a6f13d4f882de857e2f4" + "a501020326200121582051f0d4c307bc737c90ac605c6279f7d01e451798aa7b" + "74df550fdb43a7760c7c22582002b5107fef42094d00f52a9b1e90afb90e1b9d" + "ecbf15a6f13d4f882de857e2f4" ) - cred_random = ( - b"36a9b5d71c13ed54594474b54073af1fb03ea91cd056588909dae43ae2f35dbf" - ) + cred_random = "36a9b5d71c13ed54594474b54073af1fb03ea91cd056588909dae43ae2f35dbf" # Load credential. - cred = Fido2Credential.from_cred_id(unhexlify(cred_id), rp_id_hash) + cred = Fido2Credential.from_cred_id(bytes.fromhex(cred_id), rp_id_hash) self.assertIsNotNone(cred) # Check credential data. - self.assertEqual(hexlify(cred.id), cred_id) + self.assertEqual(cred.id.hex(), cred_id) self.assertEqual(cred.rp_id, rp_id) self.assertEqual(cred.rp_id_hash, rp_id_hash) - self.assertEqual(hexlify(cred.user_id), user_id) + self.assertEqual(cred.user_id.hex(), user_id) self.assertEqual(cred.user_name, user_name) self.assertEqual(cred.creation_time, creation_time) self.assertTrue(cred.hmac_secret) @@ -64,8 +62,8 @@ def test_fido2_credential_decode(self): self.assertIsNone(cred.user_display_name) # Check credential keys. - self.assertEqual(hexlify(cred.hmac_secret_key()), cred_random) - self.assertEqual(hexlify(cred.public_key()), public_key) + self.assertEqual(cred.hmac_secret_key().hex(), cred_random) + self.assertEqual(cred.public_key().hex(), public_key) def test_truncation(self): cred = Fido2Credential() diff --git a/core/tests/test_apps.zcash.f4jumble.py b/core/tests/test_apps.zcash.f4jumble.py index 215b64ffb7e..84a882392f1 100644 --- a/core/tests/test_apps.zcash.f4jumble.py +++ b/core/tests/test_apps.zcash.f4jumble.py @@ -10,42 +10,42 @@ def test_f4jumble(self): # source: https://github.com/zcash/librustzcash/blob/main/components/f4jumble/src/test_vectors.rs TEST_VECTORS = [ { - "jumbled": unhexlify( + "jumbled": bytes.fromhex( "0304d029141b995da5387c125970673504d6c764d91ea6c082123770c7139ccd88ee27368cd0c0921a0444c8e5858d22" ), - "normal": unhexlify( + "normal": bytes.fromhex( "5d7a8f739a2d9e945b0ce152a8049e294c4d6e66b164939daffa2ef6ee6921481cdd86b3cc4318d9614fc820905d042b" ), }, { - "jumbled": unhexlify( + "jumbled": bytes.fromhex( "5271fa3321f3adbcfb075196883d542b438ec6339176537daf859841fe6a56222bff76d1662b5509a9e1079e446eeedd2e683c31aae3ee1851d7954328526be1" ), - "normal": unhexlify( + "normal": bytes.fromhex( "b1ef9ca3f24988c7b3534201cfb1cd8dbf69b8250c18ef41294ca97993db546c1fe01f7e9c8e36d6a5e29d4e30a73594bf5098421c69378af1e40f64e125946f" ), }, { - "jumbled": unhexlify( + "jumbled": bytes.fromhex( "498cf1b1ba6f4577effe64151d67469adc30acc325e326207e7d78487085b4162669f82f02f9774c0cc26ae6e1a76f1e266c6a9a8a2f4ffe8d2d676b1ed71cc47195a3f19208998f7d8cdfc0b74d2a96364d733a62b4273c77d9828aa1fa061588a7c4c88dd3d3dde02239557acfaad35c55854f4541e1a1b3bc8c17076e7316" ), - "normal": unhexlify( + "normal": bytes.fromhex( "62c2fa7b2fecbcb64b6968912a6381ce3dc166d56a1d62f5a8d7551db5fd9313e8c7203d996af7d477083756d59af80d06a745f44ab023752cb5b406ed8985e18130ab33362697b0e4e4c763ccb8f676495c222f7fba1e31defa3d5a57efc2e1e9b01a035587d5fb1a38e01d94903d3c3e0ad3360c1d3710acd20b183e31d49f" ), }, { - "jumbled": unhexlify( + "jumbled": bytes.fromhex( "7508a3a146714f229db91b543e240633ed57853f6451c9db6d64c6e86af1b88b28704f608582c53c51ce7d5b8548827a971d2b98d41b7f6258655902440cd66ee11e84dbfac7d2a43696fd0468810a3d9637c3fa58e7d2d341ef250fa09b9fb71a78a41d389370138a55ea58fcde779d714a04e0d30e61dc2d8be0da61cd684509" ), - "normal": unhexlify( + "normal": bytes.fromhex( "25c9a138f49b1a537edcf04be34a9851a7af9db6990ed83dd64af3597c04323ea51b0052ad8084a8b9da948d320dadd64f5431e61ddf658d24ae67c22c8d1309131fc00fe7f235734276d38d47f1e191e00c7a1d48af046827591e9733a97fa6b679f3dc601d008285edcbdae69ce8fc1be4aac00ff2711ebd931de518856878f7" ), }, { - "jumbled": unhexlify( + "jumbled": bytes.fromhex( "5139912fe8b95492c12731995a0f4478dbeb81ec36653a21bc80d673f3c6a0feef70b6c566f9d34bb726c098648382d105afb19b2b8486b73cbd47a17a0d2d1fd593b14bb9826c5d114b850c6f0cf3083a6f61e38e42713a37ef7997ebd2b376c8a410d797b3932e5a6e39e726b2894ce79604b4ae3c00acaea3be2c1dfe697fa644755102cf9ad78794d0594585494fe38ab56fa6ef3271a68a33481015adf3944c115311421a7dc3ce73ef2abf47e18a6aca7f9dd25a85ce8dbd6f1ad89c8d" ), - "normal": unhexlify( + "normal": bytes.fromhex( "3476f21a482ec9378365c8f7393c94e2885315eb4671098b79535e790fe53e29fef2b3766697ac32b4f473f468a008e72389fc03880d780cb07fcfaabe3f1a84b27db59a4a153d882d2b2103596555ed9494c6ac893c49723833ec8926c1039586a7afcf4a0d9c731e985d99589c8bb838e8aaf745533ed9e8ae3a1cd074a51a20da8aba18d1dbebbc862ded42435e92476930d069896cff30eb414f727b89e001afa2fb8dc3436d75a4a6f26572504b192232ecb9f0c02411e52596bc5e9045" ), }, diff --git a/core/tests/test_apps.zcash.unified_addresses.py b/core/tests/test_apps.zcash.unified_addresses.py index 98f5110e3fa..c289cdab8a8 100644 --- a/core/tests/test_apps.zcash.unified_addresses.py +++ b/core/tests/test_apps.zcash.unified_addresses.py @@ -273,15 +273,15 @@ def __getattr__(self, name): def get_receivers(tv: ZcashTestVector): receivers = dict() if tv.p2pkh_bytes is not None: - receivers[P2PKH] = unhexlify(tv.p2pkh_bytes) + receivers[P2PKH] = bytes.fromhex(tv.p2pkh_bytes) if tv.p2sh_bytes is not None: - receivers[P2SH] = unhexlify(tv.p2sh_bytes) + receivers[P2SH] = bytes.fromhex(tv.p2sh_bytes) if tv.sapling_raw_addr is not None: - receivers[SAPLING] = unhexlify(tv.sapling_raw_addr) + receivers[SAPLING] = bytes.fromhex(tv.sapling_raw_addr) if tv.orchard_raw_addr is not None: - receivers[ORCHARD] = unhexlify(tv.orchard_raw_addr) + receivers[ORCHARD] = bytes.fromhex(tv.orchard_raw_addr) if tv.unknown_bytes is not None: - receivers[tv.unknown_typecode] = unhexlify(tv.unknown_bytes) + receivers[tv.unknown_typecode] = bytes.fromhex(tv.unknown_bytes) return receivers @@ -292,11 +292,11 @@ def test_encode_unified(self): for tv in map(ZcashTestVector, TESTVECTORS[2:]): receivers = get_receivers(tv) ua = unified_addresses.encode(receivers, COIN) - self.assertEqual(ua, unhexlify(tv.unified_addr).decode()) + self.assertEqual(ua, bytes.fromhex(tv.unified_addr).decode()) def test_decode_unified(self): for tv in map(ZcashTestVector, TESTVECTORS[2:]): - address = unhexlify(tv.unified_addr).decode() + address = bytes.fromhex(tv.unified_addr).decode() receivers = unified_addresses.decode(address, COIN) self.assertEqual(receivers, get_receivers(tv)) diff --git a/core/tests/test_apps.zcash.zip244.py b/core/tests/test_apps.zcash.zip244.py index b4947a14dd0..4cd49887438 100644 --- a/core/tests/test_apps.zcash.zip244.py +++ b/core/tests/test_apps.zcash.zip244.py @@ -43,7 +43,7 @@ def test_zcash_hasher(self): ) inputs = [ TxInput( - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "4f61d91843ccb386dd1c482169eef62efaaf9d9364b1666e4d4c299e04a852e1" ), prev_index=1569726664, @@ -51,12 +51,12 @@ def test_zcash_hasher(self): amount=1249971475008092, script_type=InputScriptType.SPENDADDRESS, sequence=0x8849F2A3, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a9149466817faf329208fc3c3ef42ce4513d22fc1f9b88ac" ), ), TxInput( - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "368e9c7e1fe01f6c54db9379a94c2941ef180c25b869bf8dcdb1cf014253b3c7" ), prev_index=2648876502, @@ -64,12 +64,12 @@ def test_zcash_hasher(self): amount=1353789347081201, script_type=InputScriptType.SPENDADDRESS, sequence=0x8A37691C, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a9142275979f97043edd9a6083ee27d136727ce5f42888ac" ), ), TxInput( - prev_hash=unhexlify( + prev_hash=bytes.fromhex( "f5621d6ad566c13dce81632a9168694bb6bcec2f7bfac2626f9425e1640fe4f1" ), prev_index=492165032, @@ -77,7 +77,7 @@ def test_zcash_hasher(self): amount=1672802384749611, script_type=InputScriptType.SPENDADDRESS, sequence=0x6A993D20, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914682c89bfc3940621bd4a4bfc349a79b46ce707e388ac" ), ), @@ -85,45 +85,45 @@ def test_zcash_hasher(self): outputs = [ PrevOutput( amount=865034086766210, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a9140d06a745f44ab023752cb5b406ed8985e18130ab88ac" ), ), PrevOutput( amount=2088955338922857, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a91463ccb8f676495c222f7fba1e31defa3d5a57efc288ac" ), ), PrevOutput( amount=1760123755646275, - script_pubkey=unhexlify( + script_pubkey=bytes.fromhex( "76a914fb1a38e01d94903d3c3e0ad3360c1d3710acd20b88ac" ), ), ] pubkeys = [ - unhexlify( + bytes.fromhex( "02ed9c769c787fda78a7da13764707d14217e74e26428b47a2a8fe6d5a0bc46196" ), - unhexlify( + bytes.fromhex( "0219ac5de9a45f76e7efede5259acd94bb047ab8e7cc60fe844cb32317072ebbf3" ), - unhexlify( + bytes.fromhex( "02829099a7cf1f617c956c0222e7b77ae331813d6a736eab3c5f6344d961843d39" ), ] - expected_txid = unhexlify( + expected_txid = bytes.fromhex( "c91d34ecc44484b07ee573f385d80e57e4e57571bb86aa6ec6c44d654123e4e9" ) expected_sighashes = [ - unhexlify( + bytes.fromhex( "4d82669c8c0e9b1f26d59bcb347212f2d044eeb839fce21e039d8bb082bbc343" ), - unhexlify( + bytes.fromhex( "2e2a27d78d117e28760d3c972f9614547ec57688c970f06c19c515cded6b030c" ), - unhexlify( + bytes.fromhex( "d0a92ffd4a4d262f5b84598bcfca741a42c17b8e9d26cf4fd87839df8f33e4ee" ), ] diff --git a/core/tests/test_trezor.crypto.aes.py b/core/tests/test_trezor.crypto.aes.py index 20957f89049..3287d136e63 100644 --- a/core/tests/test_trezor.crypto.aes.py +++ b/core/tests/test_trezor.crypto.aes.py @@ -9,11 +9,11 @@ class TestCryptoAes(unittest.TestCase): # test vectors from NIST Special Publication 800-38A (Appendix F) # https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-38a.pdf - iv = unhexlify("000102030405060708090a0b0c0d0e0f") - ctr = unhexlify("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff") - key128 = unhexlify("2b7e151628aed2a6abf7158809cf4f3c") - key192 = unhexlify("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b") - key256 = unhexlify( + iv = bytes.fromhex("000102030405060708090a0b0c0d0e0f") + ctr = bytes.fromhex("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff") + key128 = bytes.fromhex("2b7e151628aed2a6abf7158809cf4f3c") + key192 = bytes.fromhex("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b") + key256 = bytes.fromhex( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" ) @@ -44,7 +44,7 @@ def test_ecb(self): ctx1 = aes(aes.ECB, key) ctx2 = aes(aes.ECB, key) for plain, cipher in vec: - plain, cipher = unhexlify(plain), unhexlify(cipher) + plain, cipher = bytes.fromhex(plain), bytes.fromhex(cipher) e = ctx1.encrypt(plain) self.assertEqual(e, cipher) d = ctx2.decrypt(cipher) @@ -77,7 +77,7 @@ def test_cbc(self): ctx1 = aes(aes.CBC, key, self.iv) ctx2 = aes(aes.CBC, key, self.iv) for plain, cipher in vec: - plain, cipher = unhexlify(plain), unhexlify(cipher) + plain, cipher = bytes.fromhex(plain), bytes.fromhex(cipher) e = ctx1.encrypt(plain) self.assertEqual(e, cipher) d = ctx2.decrypt(cipher) @@ -110,7 +110,7 @@ def test_cfb(self): ctx1 = aes(aes.CFB, key, self.iv) ctx2 = aes(aes.CFB, key, self.iv) for plain, cipher in vec: - plain, cipher = unhexlify(plain), unhexlify(cipher) + plain, cipher = bytes.fromhex(plain), bytes.fromhex(cipher) e = ctx1.encrypt(plain) self.assertEqual(e, cipher) d = ctx2.decrypt(cipher) @@ -143,7 +143,7 @@ def test_ofb(self): ctx1 = aes(aes.OFB, key, self.iv) ctx2 = aes(aes.OFB, key, self.iv) for plain, cipher in vec: - plain, cipher = unhexlify(plain), unhexlify(cipher) + plain, cipher = bytes.fromhex(plain), bytes.fromhex(cipher) e = ctx1.encrypt(plain) self.assertEqual(e, cipher) d = ctx2.decrypt(cipher) @@ -176,7 +176,7 @@ def test_ctr(self): ctx1 = aes(aes.CTR, key, self.ctr) ctx2 = aes(aes.CTR, key, self.ctr) for plain, cipher in vec: - plain, cipher = unhexlify(plain), unhexlify(cipher) + plain, cipher = bytes.fromhex(plain), bytes.fromhex(cipher) e = ctx1.encrypt(plain) self.assertEqual(e, cipher) d = ctx2.decrypt(cipher) diff --git a/core/tests/test_trezor.crypto.aesgcm.py b/core/tests/test_trezor.crypto.aesgcm.py index 55a2f32dd7e..1fcbe1855ef 100644 --- a/core/tests/test_trezor.crypto.aesgcm.py +++ b/core/tests/test_trezor.crypto.aesgcm.py @@ -46,7 +46,7 @@ class TestCryptoAes(unittest.TestCase): def test_gcm(self): for vector in self.vectors: - key, iv, pt, aad, ct, tag = map(unhexlify, vector) + key, iv, pt, aad, ct, tag = map(bytes.fromhex, vector) # Test encryption. ctx = aesgcm_encrypt(key, iv) @@ -64,7 +64,7 @@ def test_gcm(self): def test_gcm_in_place(self): for vector in self.vectors: - key, iv, pt, aad, ct, tag = map(unhexlify, vector) + key, iv, pt, aad, ct, tag = map(bytes.fromhex, vector) buffer = bytearray(pt) # Test encryption. @@ -87,7 +87,7 @@ def test_gcm_in_place(self): def test_gcm_chunks(self): for vector in self.vectors: - key, iv, pt, aad, ct, tag = map(unhexlify, vector) + key, iv, pt, aad, ct, tag = map(bytes.fromhex, vector) chunk1 = len(pt) // 3 @@ -109,7 +109,7 @@ def test_gcm_chunks(self): def test_gcm_chunks_in_place(self): for vector in self.vectors: - key, iv, pt, aad, ct, tag = map(unhexlify, vector) + key, iv, pt, aad, ct, tag = map(bytes.fromhex, vector) buffer = bytearray(ct) chunk1_length = len(pt) // 3 chunk2_length = len(pt) - chunk1_length @@ -138,7 +138,7 @@ def test_gcm_chunks_in_place(self): def test_gcm_invalid_tag_len(self): for vector in self.vectors: - key, iv, pt, aad, ct, _tag = map(unhexlify, vector) + key, iv, pt, aad, ct, _tag = map(bytes.fromhex, vector) invalid_tags = [ b"", b"\x00", @@ -164,7 +164,7 @@ def test_gcm_invalid_tag_len(self): def test_gcm_invalid_tag(self): invalid_tag = b"\xab" * 16 for vector in self.vectors: - key, iv, pt, aad, ct, _ = map(unhexlify, vector) + key, iv, pt, aad, ct, _ = map(bytes.fromhex, vector) ctx = aesgcm_decrypt(key, iv) if aad: ctx.auth(aad) diff --git a/core/tests/test_trezor.crypto.base58.py b/core/tests/test_trezor.crypto.base58.py index 63903b8e006..c3f31f6d226 100644 --- a/core/tests/test_trezor.crypto.base58.py +++ b/core/tests/test_trezor.crypto.base58.py @@ -236,18 +236,18 @@ class TestCryptoBase58(unittest.TestCase): def test_decode_check(self): for a, b in self.vectors: - self.assertEqual(base58.decode_check(b), unhexlify(a)) + self.assertEqual(base58.decode_check(b), bytes.fromhex(a)) for a, b in self.vectors_graphene: self.assertEqual( - base58.decode_check(b, digestfunc=digestfunc_graphene), unhexlify(a) + base58.decode_check(b, digestfunc=digestfunc_graphene), bytes.fromhex(a) ) def test_encode_check(self): for a, b in self.vectors: - self.assertEqual(base58.encode_check(unhexlify(a)), b) + self.assertEqual(base58.encode_check(bytes.fromhex(a)), b) for a, b in self.vectors_graphene: self.assertEqual( - base58.encode_check(unhexlify(a), digestfunc=digestfunc_graphene), b + base58.encode_check(bytes.fromhex(a), digestfunc=digestfunc_graphene), b ) diff --git a/core/tests/test_trezor.crypto.bech32.py b/core/tests/test_trezor.crypto.bech32.py index f8bb4dbd7af..84d3532dc04 100644 --- a/core/tests/test_trezor.crypto.bech32.py +++ b/core/tests/test_trezor.crypto.bech32.py @@ -207,7 +207,7 @@ def test_valid_address(self): witver, witprog = bech32.decode(hrp, address) self.assertIsNotNone(witver) scriptpubkey = segwit_scriptpubkey(witver, witprog) - self.assertEqual(scriptpubkey, unhexlify(hexscript)) + self.assertEqual(scriptpubkey, bytes.fromhex(hexscript)) addr = bech32.encode(hrp, witver, witprog) self.assertEqual(address.lower(), addr) diff --git a/core/tests/test_trezor.crypto.bip32.py b/core/tests/test_trezor.crypto.bip32.py index 46f21544c82..4137532a30c 100644 --- a/core/tests/test_trezor.crypto.bip32.py +++ b/core/tests/test_trezor.crypto.bip32.py @@ -19,7 +19,7 @@ def test_from_seed_invalid(self): bip32.from_seed(bytearray(), c) with self.assertRaises(TypeError): bip32.from_seed(1, c) - s = unhexlify("000102030405060708090a0b0c0d0e0f") + s = bytes.fromhex("000102030405060708090a0b0c0d0e0f") with self.assertRaises(ValueError): bip32.from_seed(s, "") with self.assertRaises(ValueError): @@ -35,26 +35,26 @@ def test_secp256k1_vector_1_derive(self): # init m n = bip32.from_seed( - unhexlify("000102030405060708090a0b0c0d0e0f"), SECP256K1_NAME + bytes.fromhex("000102030405060708090a0b0c0d0e0f"), SECP256K1_NAME ) # [Chain m] self.assertEqual(n.fingerprint(), 0x00000000) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2" ), ) @@ -69,19 +69,19 @@ def test_secp256k1_vector_1_derive(self): self.assertEqual(n.fingerprint(), 0x3442193E) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56" ), ) @@ -96,19 +96,19 @@ def test_secp256k1_vector_1_derive(self): self.assertEqual(n.fingerprint(), 0x5C1BD648) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "2a7857631386ba23dacac34180dd1983734e444fdbf774041578e9b6adb37c19" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "3c6cb8d0f6a264c91ea8b5030fadaa8e538b020f0a387421a12de9319dc93368" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c" ), ) @@ -123,19 +123,19 @@ def test_secp256k1_vector_1_derive(self): self.assertEqual(n.fingerprint(), 0xBEF5A2F9) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "04466b9cc8e161e966409ca52986c584f07e9dc81f735db683c3ff6ec7b1503f" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "cbce0d719ecf7431d88e6a89fa1483e02e35092af60c042b1df2ff59fa424dca" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2" ), ) @@ -150,19 +150,19 @@ def test_secp256k1_vector_1_derive(self): self.assertEqual(n.fingerprint(), 0xEE7AB90C) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "cfb71883f01676f587d023cc53a35bc7f88f724b1f8c2892ac1275ac822a3edd" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "0f479245fb19a38a1954c5c7c0ebab2f9bdfd96a17563ef28a6a4b1a2a764ef4" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29" ), ) @@ -177,19 +177,19 @@ def test_secp256k1_vector_1_derive(self): self.assertEqual(n.fingerprint(), 0xD880D7D8) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "c783e67b921d2beb8f6b389cc646d7263b4145701dadd2161548a8b078e65e9e" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "471b76e389e528d6de6d816857e012c5455051cad6660850e58372a6c3e6e7c8" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011" ), ) @@ -205,7 +205,7 @@ def test_secp256k1_vector_2_derive(self): # init m n = bip32.from_seed( - unhexlify( + bytes.fromhex( "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542" ), SECP256K1_NAME, @@ -215,19 +215,19 @@ def test_secp256k1_vector_2_derive(self): self.assertEqual(n.fingerprint(), 0x00000000) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "60499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd9689" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "4b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "03cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7" ), ) @@ -242,19 +242,19 @@ def test_secp256k1_vector_2_derive(self): self.assertEqual(n.fingerprint(), 0xBD16BEE5) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "f0909affaa7ee7abe5dd4e100598d4dc53cd709d5a5c2cac40e7412f232f7c9c" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "abe74a98f6c7eabee0428f53798f0ab8aa1bd37873999041703c742f15ac7e1e" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea" ), ) @@ -269,19 +269,19 @@ def test_secp256k1_vector_2_derive(self): self.assertEqual(n.fingerprint(), 0x5A61FF8E) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "be17a268474a6bb9c61e1d720cf6215e2a88c5406c4aee7b38547f585c9a37d9" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "877c779ad9687164e9c2f4f0f4ff0340814392330693ce95a58fe18fd52e6e93" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "03c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b" ), ) @@ -296,19 +296,19 @@ def test_secp256k1_vector_2_derive(self): self.assertEqual(n.fingerprint(), 0xD8AB4937) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "f366f48f1ea9f2d1d3fe958c95ca84ea18e4c4ddb9366c336c927eb246fb38cb" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "704addf544a06e5ee4bea37098463c23613da32020d604506da8c0518e1da4b7" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9" ), ) @@ -323,19 +323,19 @@ def test_secp256k1_vector_2_derive(self): self.assertEqual(n.fingerprint(), 0x78412E3A) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "637807030d55d01f9a0cb3a7839515d796bd07706386a6eddf06cc29a65a0e29" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "f1c7c871a54a804afe328b4c83a1c33b8e5ff48f5087273f04efa83b247d6a2d" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "02d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0" ), ) @@ -350,19 +350,19 @@ def test_secp256k1_vector_2_derive(self): self.assertEqual(n.fingerprint(), 0x31A507B8) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c" ), ) @@ -378,7 +378,7 @@ def test_secp256k1_vector_1_derive_path(self): # init m m = bip32.from_seed( - unhexlify("000102030405060708090a0b0c0d0e0f"), SECP256K1_NAME + bytes.fromhex("000102030405060708090a0b0c0d0e0f"), SECP256K1_NAME ) # [Chain m] @@ -386,19 +386,19 @@ def test_secp256k1_vector_1_derive_path(self): self.assertEqual(n.fingerprint(), 0x00000000) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2" ), ) @@ -414,19 +414,19 @@ def test_secp256k1_vector_1_derive_path(self): self.assertEqual(n.fingerprint(), 0x3442193E) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56" ), ) @@ -442,19 +442,19 @@ def test_secp256k1_vector_1_derive_path(self): self.assertEqual(n.fingerprint(), 0x5C1BD648) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "2a7857631386ba23dacac34180dd1983734e444fdbf774041578e9b6adb37c19" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "3c6cb8d0f6a264c91ea8b5030fadaa8e538b020f0a387421a12de9319dc93368" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c" ), ) @@ -470,19 +470,19 @@ def test_secp256k1_vector_1_derive_path(self): self.assertEqual(n.fingerprint(), 0xBEF5A2F9) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "04466b9cc8e161e966409ca52986c584f07e9dc81f735db683c3ff6ec7b1503f" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "cbce0d719ecf7431d88e6a89fa1483e02e35092af60c042b1df2ff59fa424dca" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2" ), ) @@ -498,19 +498,19 @@ def test_secp256k1_vector_1_derive_path(self): self.assertEqual(n.fingerprint(), 0xEE7AB90C) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "cfb71883f01676f587d023cc53a35bc7f88f724b1f8c2892ac1275ac822a3edd" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "0f479245fb19a38a1954c5c7c0ebab2f9bdfd96a17563ef28a6a4b1a2a764ef4" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29" ), ) @@ -526,19 +526,19 @@ def test_secp256k1_vector_1_derive_path(self): self.assertEqual(n.fingerprint(), 0xD880D7D8) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "c783e67b921d2beb8f6b389cc646d7263b4145701dadd2161548a8b078e65e9e" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "471b76e389e528d6de6d816857e012c5455051cad6660850e58372a6c3e6e7c8" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011" ), ) @@ -554,7 +554,7 @@ def test_secp256k1_vector_2_derive_path(self): # init m m = bip32.from_seed( - unhexlify( + bytes.fromhex( "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542" ), SECP256K1_NAME, @@ -565,19 +565,19 @@ def test_secp256k1_vector_2_derive_path(self): self.assertEqual(n.fingerprint(), 0x00000000) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "60499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd9689" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "4b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "03cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7" ), ) @@ -593,19 +593,19 @@ def test_secp256k1_vector_2_derive_path(self): self.assertEqual(n.fingerprint(), 0xBD16BEE5) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "f0909affaa7ee7abe5dd4e100598d4dc53cd709d5a5c2cac40e7412f232f7c9c" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "abe74a98f6c7eabee0428f53798f0ab8aa1bd37873999041703c742f15ac7e1e" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea" ), ) @@ -621,19 +621,19 @@ def test_secp256k1_vector_2_derive_path(self): self.assertEqual(n.fingerprint(), 0x5A61FF8E) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "be17a268474a6bb9c61e1d720cf6215e2a88c5406c4aee7b38547f585c9a37d9" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "877c779ad9687164e9c2f4f0f4ff0340814392330693ce95a58fe18fd52e6e93" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "03c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b" ), ) @@ -649,19 +649,19 @@ def test_secp256k1_vector_2_derive_path(self): self.assertEqual(n.fingerprint(), 0xD8AB4937) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "f366f48f1ea9f2d1d3fe958c95ca84ea18e4c4ddb9366c336c927eb246fb38cb" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "704addf544a06e5ee4bea37098463c23613da32020d604506da8c0518e1da4b7" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9" ), ) @@ -677,19 +677,19 @@ def test_secp256k1_vector_2_derive_path(self): self.assertEqual(n.fingerprint(), 0x78412E3A) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "637807030d55d01f9a0cb3a7839515d796bd07706386a6eddf06cc29a65a0e29" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "f1c7c871a54a804afe328b4c83a1c33b8e5ff48f5087273f04efa83b247d6a2d" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "02d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0" ), ) @@ -705,19 +705,19 @@ def test_secp256k1_vector_2_derive_path(self): self.assertEqual(n.fingerprint(), 0x31A507B8) self.assertEqual( n.chain_code(), - unhexlify( + bytes.fromhex( "9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271" ), ) self.assertEqual( n.private_key(), - unhexlify( + bytes.fromhex( "bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23" ), ) self.assertEqual( n.public_key(), - unhexlify( + bytes.fromhex( "024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c" ), ) diff --git a/core/tests/test_trezor.crypto.bip39.py b/core/tests/test_trezor.crypto.bip39.py index 20a6f8d3aa9..57b25ba7285 100644 --- a/core/tests/test_trezor.crypto.bip39.py +++ b/core/tests/test_trezor.crypto.bip39.py @@ -129,8 +129,8 @@ def test_mnemonic(self): ), ] for d, m, s in v: - self.assertEqual(bip39.from_data(unhexlify(d)), m) - self.assertEqual(bip39.seed(m, "TREZOR"), unhexlify(s)) + self.assertEqual(bip39.from_data(bytes.fromhex(d)), m) + self.assertEqual(bip39.seed(m, "TREZOR"), bytes.fromhex(s)) def test_check_ok(self): v = [ diff --git a/core/tests/test_trezor.crypto.chacha20poly1305.py b/core/tests/test_trezor.crypto.chacha20poly1305.py index 1b42846c5e8..bcd263847bc 100644 --- a/core/tests/test_trezor.crypto.chacha20poly1305.py +++ b/core/tests/test_trezor.crypto.chacha20poly1305.py @@ -33,7 +33,7 @@ class TestCryptoChaCha20Poly1305(unittest.TestCase): def test_chacha20_encrypt(self): for vector in self.vectors: - plaintext, _, key, nonce, ciphertext, _ = map(unhexlify, vector) + plaintext, _, key, nonce, ciphertext, _ = map(bytes.fromhex, vector) ctx = chacha20poly1305_encrypt(key, nonce) out = ctx.encrypt(plaintext) @@ -41,14 +41,14 @@ def test_chacha20_encrypt(self): def test_chacha20_decrypt(self): for vector in self.vectors: - plaintext, _, key, nonce, ciphertext, _ = map(unhexlify, vector) + plaintext, _, key, nonce, ciphertext, _ = map(bytes.fromhex, vector) ctx = chacha20poly1305_decrypt(key, nonce) out = ctx.decrypt(ciphertext) self.assertEqual(out, plaintext) def test_chacha20poly1305_encrypt_mac(self): for vector in self.vectors: - plaintext, aad, key, nonce, ciphertext, tag = map(unhexlify, vector) + plaintext, aad, key, nonce, ciphertext, tag = map(bytes.fromhex, vector) ctx = chacha20poly1305_encrypt(key, nonce) ctx.auth(aad) @@ -59,7 +59,7 @@ def test_chacha20poly1305_encrypt_mac(self): def test_chacha20poly1305_decrypt_mac(self): for vector in self.vectors: - plaintext, aad, key, nonce, ciphertext, tag = map(unhexlify, vector) + plaintext, aad, key, nonce, ciphertext, tag = map(bytes.fromhex, vector) ctx = chacha20poly1305_decrypt(key, nonce) ctx.auth(aad) @@ -69,7 +69,7 @@ def test_chacha20poly1305_decrypt_mac(self): def test_chacha20poly1305_invalid_mac_len(self): for vector in self.vectors: - _, aad, key, nonce, ciphertext, _mac = map(unhexlify, vector) + _, aad, key, nonce, ciphertext, _mac = map(bytes.fromhex, vector) invalid_macs = [ b"", b"\x00", @@ -91,7 +91,7 @@ def test_chacha20poly1305_invalid_mac_len(self): def test_chacha20poly1305_invalid_mac(self): invalid_mac = b"\xab" * 16 for vector in self.vectors: - _, aad, key, nonce, ciphertext, _ = map(unhexlify, vector) + _, aad, key, nonce, ciphertext, _ = map(bytes.fromhex, vector) ctx = chacha20poly1305_decrypt(key, nonce) ctx.auth(aad) diff --git a/core/tests/test_trezor.crypto.crc.py b/core/tests/test_trezor.crypto.crc.py index a56bce4ebd7..cf97c76a90f 100644 --- a/core/tests/test_trezor.crypto.crc.py +++ b/core/tests/test_trezor.crypto.crc.py @@ -9,19 +9,19 @@ class TestCryptoCrc(unittest.TestCase): vectors_crc32 = [ ("123456789", 0xCBF43926), ( - unhexlify( + bytes.fromhex( "0000000000000000000000000000000000000000000000000000000000000000" ), 0x190A55AD, ), ( - unhexlify( + bytes.fromhex( "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" ), 0xFF6CAB0B, ), ( - unhexlify( + bytes.fromhex( "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F" ), 0x91267E8A, diff --git a/core/tests/test_trezor.crypto.curve.bip340.py b/core/tests/test_trezor.crypto.curve.bip340.py index f2596a7cd23..cca0f4b6fb4 100644 --- a/core/tests/test_trezor.crypto.curve.bip340.py +++ b/core/tests/test_trezor.crypto.curve.bip340.py @@ -38,7 +38,7 @@ def test_generate_secret(self): def test_publickey(self): for sk, pk in self.vectors: - pk_computed = hexlify(bip340.publickey(unhexlify(sk))).decode() + pk_computed = bip340.publickey(bytes.fromhex(sk)).hex() self.assertEqual(str(pk_computed).upper(), pk) def test_sign_verify_random(self): diff --git a/core/tests/test_trezor.crypto.curve.curve25519.py b/core/tests/test_trezor.crypto.curve.curve25519.py index 9a99eea4960..b90a50e0c24 100644 --- a/core/tests/test_trezor.crypto.curve.curve25519.py +++ b/core/tests/test_trezor.crypto.curve.curve25519.py @@ -22,8 +22,8 @@ def test_generate_secret(self): def test_multiply(self): for sk, pk, session in self.vectors: - session2 = curve25519.multiply(unhexlify(sk), unhexlify(pk)) - self.assertEqual(session2, unhexlify(session)) + session2 = curve25519.multiply(bytes.fromhex(sk), bytes.fromhex(pk)) + self.assertEqual(session2, bytes.fromhex(session)) def test_multiply_random(self): for _ in range(100): diff --git a/core/tests/test_trezor.crypto.curve.ed25519.py b/core/tests/test_trezor.crypto.curve.ed25519.py index db19c2747cd..41e57718afb 100644 --- a/core/tests/test_trezor.crypto.curve.ed25519.py +++ b/core/tests/test_trezor.crypto.curve.ed25519.py @@ -53,20 +53,20 @@ class TestCryptoEd25519(unittest.TestCase): def test_publickey(self): for sk, pk, _ in self.vectors: - pk2 = ed25519.publickey(unhexlify(sk)) - self.assertEqual(pk2, unhexlify(pk)) + pk2 = ed25519.publickey(bytes.fromhex(sk)) + self.assertEqual(pk2, bytes.fromhex(pk)) def test_sign(self): for sk, pk, sig in self.vectors: # msg = pk - sig2 = ed25519.sign(unhexlify(sk), unhexlify(pk)) - self.assertEqual(sig2, unhexlify(sig)) + sig2 = ed25519.sign(bytes.fromhex(sk), bytes.fromhex(pk)) + self.assertEqual(sig2, bytes.fromhex(sig)) def test_verify(self): for _, pk, sig in self.vectors: # msg = pk self.assertTrue( - ed25519.verify(unhexlify(pk), unhexlify(sig), unhexlify(pk)) + ed25519.verify(bytes.fromhex(pk), bytes.fromhex(sig), bytes.fromhex(pk)) ) pass diff --git a/core/tests/test_trezor.crypto.curve.nist256p1.py b/core/tests/test_trezor.crypto.curve.nist256p1.py index 0e893b34290..ac5e44a6f76 100644 --- a/core/tests/test_trezor.crypto.curve.nist256p1.py +++ b/core/tests/test_trezor.crypto.curve.nist256p1.py @@ -235,11 +235,9 @@ def test_publickey(self): if len(sk) < 64: sk = "0" * (64 - len(sk)) + sk pk = pk.lower() - pk65 = hexlify( - nist256p1.publickey(unhexlify(sk), False) - ).decode() # uncompressed + pk65 = nist256p1.publickey(bytes.fromhex(sk), False).hex() # uncompressed self.assertEqual(str(pk65), "04" + pk) - pk33 = hexlify(nist256p1.publickey(unhexlify(sk))).decode() + pk33 = nist256p1.publickey(bytes.fromhex(sk)).hex() if pk[-1] in "02468ace": self.assertEqual(pk33, "02" + pk[:64]) else: diff --git a/core/tests/test_trezor.crypto.curve.secp256k1.py b/core/tests/test_trezor.crypto.curve.secp256k1.py index 2075d8a9adc..231610adece 100644 --- a/core/tests/test_trezor.crypto.curve.secp256k1.py +++ b/core/tests/test_trezor.crypto.curve.secp256k1.py @@ -206,11 +206,9 @@ def test_publickey(self): if len(sk) < 64: sk = "0" * (64 - len(sk)) + sk pk = pk.lower() - pk65 = hexlify( - secp256k1.publickey(unhexlify(sk), False) - ).decode() # uncompressed + pk65 = secp256k1.publickey(bytes.fromhex(sk), False).hex() # uncompressed self.assertEqual(str(pk65), "04" + pk) - pk33 = hexlify(secp256k1.publickey(unhexlify(sk))).decode() + pk33 = secp256k1.publickey(bytes.fromhex(sk)).hex() if pk[-1] in "02468ace": self.assertEqual(pk33, "02" + pk[:64]) else: @@ -262,16 +260,16 @@ def test_ecdh(self): sk = hex(sk)[2:] if len(sk) < 64: sk = "0" * (64 - len(sk)) + sk - sk = unhexlify(sk) + sk = bytes.fromhex(sk) pk = pk.lower() pk33 = secp256k1.publickey(sk) pk65 = secp256k1.publickey(sk, False) - fixed_vector_hex = b"0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8" + fixed_vector_hex = "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8" fixed_vector1 = secp256k1.multiply(sk, pk65) fixed_vector2 = secp256k1.multiply(sk, pk33) self.assertEqual(fixed_vector1, fixed_vector2) - self.assertEqual(hexlify(fixed_vector1), fixed_vector_hex) + self.assertEqual(fixed_vector1.hex(), fixed_vector_hex) if __name__ == "__main__": diff --git a/core/tests/test_trezor.crypto.der.py b/core/tests/test_trezor.crypto.der.py index 948a3009592..f7dc70cb551 100644 --- a/core/tests/test_trezor.crypto.der.py +++ b/core/tests/test_trezor.crypto.der.py @@ -75,8 +75,8 @@ class TestCryptoDer(unittest.TestCase): def test_der_encode_decode_signature(self): for s, d in self.vectors_sig: - s = tuple(unhexlify(i) for i in s) - d = unhexlify(d) + s = tuple(bytes.fromhex(i) for i in s) + d = bytes.fromhex(d) sig = b"".join(s) d2 = der.encode_signature(sig) self.assertEqual(d2, d) diff --git a/core/tests/test_trezor.crypto.elligator2.py b/core/tests/test_trezor.crypto.elligator2.py index 11ecbf86159..b5e6dddf323 100644 --- a/core/tests/test_trezor.crypto.elligator2.py +++ b/core/tests/test_trezor.crypto.elligator2.py @@ -55,7 +55,7 @@ def test_map_to_curve25519(self): for input, output in vectors: self.assertEqual( - hexlify(elligator2.map_to_curve25519(unhexlify(input))).decode("ascii"), + elligator2.map_to_curve25519(bytes.fromhex(input)).hex(), output, ) diff --git a/core/tests/test_trezor.crypto.hashlib.blake256.py b/core/tests/test_trezor.crypto.hashlib.blake256.py index 4fe16160f12..94cafb0ef4f 100644 --- a/core/tests/test_trezor.crypto.hashlib.blake256.py +++ b/core/tests/test_trezor.crypto.hashlib.blake256.py @@ -81,14 +81,16 @@ class TestCryptoBlake256(unittest.TestCase): def test_digest(self): for b, d in self.vectors: - self.assertEqual(hashlib.blake256(unhexlify(b)).digest(), unhexlify(d)) + self.assertEqual( + hashlib.blake256(bytes.fromhex(b)).digest(), bytes.fromhex(d) + ) def test_update(self): for b, d in self.vectors: x = hashlib.blake256() - x.update(unhexlify(b)) - self.assertEqual(x.digest(), unhexlify(d)) + x.update(bytes.fromhex(b)) + self.assertEqual(x.digest(), bytes.fromhex(d)) def test_digest_multi(self): x = hashlib.blake256() diff --git a/core/tests/test_trezor.crypto.hashlib.blake2b.py b/core/tests/test_trezor.crypto.hashlib.blake2b.py index ce2fa038a07..9f70ecbcd89 100644 --- a/core/tests/test_trezor.crypto.hashlib.blake2b.py +++ b/core/tests/test_trezor.crypto.hashlib.blake2b.py @@ -35,58 +35,59 @@ class TestCryptoBlake2b(unittest.TestCase): ] def test_digest(self): - key = unhexlify( + key = bytes.fromhex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" ) for d, h in self.vectors: self.assertEqual( - hashlib.blake2b(data=unhexlify(d), key=key).digest(), unhexlify(h) + hashlib.blake2b(data=bytes.fromhex(d), key=key).digest(), + bytes.fromhex(h), ) def test_update(self): - key = unhexlify( + key = bytes.fromhex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" ) x = hashlib.blake2b(key=key) x.update(bytes(range(10))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "4fe181f54ad63a2983feaaf77d1e7235c2beb17fa328b6d9505bda327df19fc37f02c4b6f0368ce23147313a8e5738b5fa2a95b29de1c7f8264eb77b69f585cd" ), ) x.update(bytes(range(10, 30))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "c6dbc61dec6eaeac81e3d5f755203c8e220551534a0b2fd105a91889945a638550204f44093dd998c076205dffad703a0e5cd3c7f438a7e634cd59fededb539e" ), ) x.update(bytes(range(30, 80))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "fa1549c9796cd4d303dcf452c1fbd5744fd9b9b47003d920b92de34839d07ef2a29ded68f6fc9e6c45e071a2e48bd50c5084e96b657dd0404045a1ddefe282ed" ), ) x.update(bytes(range(80, 111))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "2620f687e8625f6a412460b42e2cef67634208ce10a0cbd4dff7044a41b7880077e9f8dc3b8d1216d3376a21e015b58fb279b521d83f9388c7382c8505590b9b" ), ) x.update(bytes(range(111, 127))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "76d2d819c92bce55fa8e092ab1bf9b9eab237a25267986cacf2b8ee14d214d730dc9a5aa2d7b596e86a1fd8fa0804c77402d2fcd45083688b218b1cdfa0dcbcb" ), ) x.update(bytes(range(127, 255))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e92484be1c1e73ba10906d5d1853db6a4106e0a7bf9800d373d6dee2d46d62ef2a461" ), ) diff --git a/core/tests/test_trezor.crypto.hashlib.blake2s.py b/core/tests/test_trezor.crypto.hashlib.blake2s.py index 91260b02838..c6cad0dea35 100644 --- a/core/tests/test_trezor.crypto.hashlib.blake2s.py +++ b/core/tests/test_trezor.crypto.hashlib.blake2s.py @@ -30,58 +30,58 @@ class TestCryptoBlake2s(unittest.TestCase): ] def test_digest(self): - key = unhexlify( + key = bytes.fromhex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ) for d, h in self.vectors: self.assertEqual( - hashlib.blake2s(unhexlify(d), key=key).digest(), unhexlify(h) + hashlib.blake2s(bytes.fromhex(d), key=key).digest(), bytes.fromhex(h) ) def test_update(self): - key = unhexlify( + key = bytes.fromhex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ) x = hashlib.blake2s(b"", key=key) x.update(bytes(range(10))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "f5c4b2ba1a00781b13aba0425242c69cb1552f3f71a9a3bb22b4a6b4277b46dd" ), ) x.update(bytes(range(10, 30))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "3ca989de10cfe609909472c8d35610805b2f977734cf652cc64b3bfc882d5d89" ), ) x.update(bytes(range(30, 80))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "30f3548370cfdceda5c37b569b6175e799eef1a62aaa943245ae7669c227a7b5" ), ) x.update(bytes(range(80, 111))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "9fe03bbe69ab1834f5219b0da88a08b30a66c5913f0151963c360560db0387b3" ), ) x.update(bytes(range(111, 127))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "ddbfea75cc467882eb3483ce5e2e756a4f4701b76b445519e89f22d60fa86e06" ), ) x.update(bytes(range(127, 255))) self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "3fb735061abc519dfe979e54c1ee5bfad0a9d858b3315bad34bde999efd724dd" ), ) diff --git a/core/tests/test_trezor.crypto.hashlib.groestl512.py b/core/tests/test_trezor.crypto.hashlib.groestl512.py index caad11c45ef..a519cfd3ffb 100644 --- a/core/tests/test_trezor.crypto.hashlib.groestl512.py +++ b/core/tests/test_trezor.crypto.hashlib.groestl512.py @@ -13,39 +13,39 @@ class TestCryptoGroestl512(unittest.TestCase): "6D3AD29D279110EEF3ADBD66DE2A0345A77BAEDE1557F5D099FCE0C03D6DC2BA8E6D4A6633DFBD66053C20FAA87D1A11F39A7FBE4A6C2F009801370308FC4AD8", ), ( - unhexlify("C1ECFDFC"), + bytes.fromhex("C1ECFDFC"), "4726D760203C1EAF847F6837C74C16ADCEF5B55EAD5768A7C13E21A33D0D7B740F52DE8C81356DA63DABA791DA6680AF015DEB81246550201F232822BB087CE5", ), ( - unhexlify("82E192E4043DDCD12ECF52969D0F807EED"), + bytes.fromhex("82E192E4043DDCD12ECF52969D0F807EED"), "8CD831960FE9726055F7B3693CC5639DB7D01EDDA045AE41E877853111C4CF53D26D5B4E135118571721C247ACA6607979A4DF73849D1477365F7DB0149FBC9F", ), ( - unhexlify( + bytes.fromhex( "F5961DFD2B1FFFFDA4FFBF30560C165BFEDAB8CE0BE525845DEB8DC61004B7DB38467205F5DCFB34A2ACFE96C0" ), "CE24486770D443B423274DD30AF746EA4080065393D13DF0535709E260CF14B033CCD190A9FA5F81705178EB656031A6F1465A5A993BE62BE8D43931950BD5DB", ), ( - unhexlify( + bytes.fromhex( "2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" ), "FF410B511135DBC0B8644C28EFA3EC632326FEB98E50EDC6390C441610D7C514ACDF0A61A0BF01AA9DC1F55D92E085248EBA1C24EE23978B4986AF41C13A6176", ), ( - unhexlify( + bytes.fromhex( "EECBB8FDFA4DA62170FD06727F697D81F83F601FF61E478105D3CB7502F2C89BF3E8F56EDD469D049807A38882A7EEFBC85FC9A950952E9FA84B8AFEBD3CE782D4DA598002827B1EB98882EA1F0A8F7AA9CE013A6E9BC462FB66C8D4A18DA21401E1B93356EB12F3725B6DB1684F2300A98B9A119E5D27FF704AFFB618E12708E77E6E5F34139A5A41131FD1D6336C272A8FC37080F041C71341BEE6AB550CB4A20A6DDB6A8E0299F2B14BC730C54B8B1C1C487B494BDCCFD3A53535AB2F231590BF2C4062FD2AD58F906A2D0D" ), "3AE2AABD659C5844C923FD171CA36431A7E606ECA52A21B96A0F5E8CD1FA24141BEDAADF58608781DFABC103FE929CD2EADE8D6FBD6185D4F4B855DCA610D7A0", ), ( - unhexlify( + bytes.fromhex( "724627916C50338643E6996F07877EAFD96BDF01DA7E991D4155B9BE1295EA7D21C9391F4C4A41C75F77E5D27389253393725F1427F57914B273AB862B9E31DABCE506E558720520D33352D119F699E784F9E548FF91BC35CA147042128709820D69A8287EA3257857615EB0321270E94B84F446942765CE882B191FAEE7E1C87E0F0BD4E0CD8A927703524B559B769CA4ECE1F6DBF313FDCF67C572EC4185C1A88E86EC11B6454B371980020F19633B6B95BD280E4FBCB0161E1A82470320CEC6ECFA25AC73D09F1536F286D3F9DACAFB2CD1D0CE72D64D197F5C7520B3CCB2FD74EB72664BA93853EF41EABF52F015DD591500D018DD162815CC993595B195" ), "F88E8E86FBE2200E90226A181E48348E06D1643270C079B8BDD3660E8D21CD0493C55051CBFA607B1CFACA2C5A2C9354CDD405C1D3AD1D8435B825884CC0559F", ), ( - unhexlify( + bytes.fromhex( "D0FF6E045F4B636F75A389799F314066644854821B6E7AE4047ADFDE2D0C0E02C250F0BE582BEC94011189B964A8AF430F5921ED9D9F4446E4C788515B89CA69E5F7CDFCCC9E83E8F9460145B43DDC41C07CC512B7E6FDD0E1E7AABA29A6C016CCB7BD54B145F3951EAB9BC4908F623E5A9B0C5B36056292540B79FD15C53457DC74A65FD773A34D6B313A056F79BC29A3FAC15F6A1446BFAEEAAFBAC8ECF8168DDE5F6AE6B6E579BD3CE74E7ABFADF361D0FD32D56586A8D2D4FF4CFDF8A750FAFDE4C2E9EB32B06847FA30B13CC273532D1A23C8257F80C60B8FA94FA976F534145CD61C41C0A511B62CADD5848CEFF643F83CE43F8E6969C5A559AFAD60E310599A34B2E5E029FBDDF2988FCE59269C7128A1FC79A74B154D8AA2850DCFDBF594684E74099E37882B440367C1DD3003F61CAFB46AC75D30E677AF54559A5DAB70C506CF61A9C35E0E56E1430746916DDEEC8D89B0C10DAA02C5D7E9F42621D2B312EAFFC9FF306297952A32D26C2148570AEC90501CA739CE5E689E7066D9580A4FC25E2023897C74C6856273133E1275A0D275DC5B75DB724CD12C9C01BB95AB5A227B7850020630506096878D289923177183EA9282A4C78EC212D2E898CB99D81A3364DF20927EE34D4475A5CF5CDB24088ED75B60201922E9C972D8556CA75F8274D15F3FB88A6B42C766DEF6B21329DEE7C457446DDE8C26405FE5D0309A04229F449E8490CF9000EE8DF400CB7C7EE831BD7059D24088FB42D61681CDE45050FCA78FF64D9C8D1F58B55F802FA5D2F2E723F3E4EED4338B060D31C8ACC46D26870BD45D0DE0798D48E32AAD1A6D4322E69F5E72309B9D7FA1F24BB1D63FF09ED47391C232497BF222C542A70975C8292D275197A4CA" ), "27AB9EA01D8FD80ED14990761ED6BC329DC842770F83FDD1CE95C0A074D6D7495C7C85297CC73F3A695377E4211F897F68C1A7F910F6BF440264FB63F120ABA2", @@ -54,19 +54,19 @@ class TestCryptoGroestl512(unittest.TestCase): def test_digest(self): for b, d in self.vectors: - self.assertEqual(hashlib.groestl512(b).digest(), unhexlify(d)) + self.assertEqual(hashlib.groestl512(b).digest(), bytes.fromhex(d)) def test_update(self): for b, d in self.vectors: x = hashlib.groestl512() x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) # Test from ExtremelyLongMsgKAT_512.txt, disabled by default because it resource-expensive # x = hashlib.groestl512() # for i in range(16777216): # x.update(b'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno') - # self.assertEqual(x.digest(), unhexlify('787C88460E5D09ABD7A98C050F3422BBFDBD36A74B05DE04B57A13FA3F36A570B8561580AB9DA4096CCD5111B5DE948F769D9D61833A6CE2B2F223061E688994')) + # self.assertEqual(x.digest(), bytes.fromhex('787C88460E5D09ABD7A98C050F3422BBFDBD36A74B05DE04B57A13FA3F36A570B8561580AB9DA4096CCD5111B5DE948F769D9D61833A6CE2B2F223061E688994')) def test_digest_multi(self): x = hashlib.groestl512() diff --git a/core/tests/test_trezor.crypto.hashlib.ripemd160.py b/core/tests/test_trezor.crypto.hashlib.ripemd160.py index 6ab0131eafd..2650818c703 100644 --- a/core/tests/test_trezor.crypto.hashlib.ripemd160.py +++ b/core/tests/test_trezor.crypto.hashlib.ripemd160.py @@ -29,19 +29,19 @@ class TestCryptoRipemd160(unittest.TestCase): def test_digest(self): for b, d in self.vectors: - self.assertEqual(hashlib.ripemd160(b).digest(), unhexlify(d)) + self.assertEqual(hashlib.ripemd160(b).digest(), bytes.fromhex(d)) def test_update(self): for b, d in self.vectors: x = hashlib.ripemd160() x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) x = hashlib.ripemd160() for _ in range(8): x.update(b"1234567890") self.assertEqual( - x.digest(), unhexlify("9b752e45573d4b39f4dbd3323cab82bf63326bfb") + x.digest(), bytes.fromhex("9b752e45573d4b39f4dbd3323cab82bf63326bfb") ) def test_digest_multi(self): diff --git a/core/tests/test_trezor.crypto.hashlib.sha1.py b/core/tests/test_trezor.crypto.hashlib.sha1.py index 04871c2e61a..5a290cbcc28 100644 --- a/core/tests/test_trezor.crypto.hashlib.sha1.py +++ b/core/tests/test_trezor.crypto.hashlib.sha1.py @@ -22,25 +22,25 @@ class TestCryptoSha1(unittest.TestCase): def test_digest(self): for b, d in self.vectors: - self.assertEqual(hashlib.sha1(b).digest(), unhexlify(d)) + self.assertEqual(hashlib.sha1(b).digest(), bytes.fromhex(d)) def test_update(self): for b, d in self.vectors: x = hashlib.sha1() x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) x = hashlib.sha1() for _ in range(1000000): x.update(b"a") self.assertEqual( - x.digest(), unhexlify("34aa973cd4c4daa4f61eeb2bdbad27316534016f") + x.digest(), bytes.fromhex("34aa973cd4c4daa4f61eeb2bdbad27316534016f") ) # x = hashlib.sha1() # for i in range(16777216): # x.update(b'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno') - # self.assertEqual(x.digest(), unhexlify('7789f0c9ef7bfc40d93311143dfbe69e2017f592')) + # self.assertEqual(x.digest(), bytes.fromhex('7789f0c9ef7bfc40d93311143dfbe69e2017f592')) def test_digest_multi(self): x = hashlib.sha1() diff --git a/core/tests/test_trezor.crypto.hashlib.sha256.py b/core/tests/test_trezor.crypto.hashlib.sha256.py index 928949a04d2..660a5b708b5 100644 --- a/core/tests/test_trezor.crypto.hashlib.sha256.py +++ b/core/tests/test_trezor.crypto.hashlib.sha256.py @@ -22,20 +22,20 @@ class TestCryptoSha256(unittest.TestCase): def test_digest(self): for b, d in self.vectors: - self.assertEqual(hashlib.sha256(b).digest(), unhexlify(d)) + self.assertEqual(hashlib.sha256(b).digest(), bytes.fromhex(d)) def test_update(self): for b, d in self.vectors: x = hashlib.sha256() x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) x = hashlib.sha256() for _ in range(1000000): x.update(b"a") self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0" ), ) @@ -43,7 +43,7 @@ def test_update(self): # x = hashlib.sha256() # for i in range(16777216): # x.update(b'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno') - # self.assertEqual(x.digest(), unhexlify('50e72a0e26442fe2552dc3938ac58658228c0cbfb1d2ca872ae435266fcd055e')) + # self.assertEqual(x.digest(), bytes.fromhex('50e72a0e26442fe2552dc3938ac58658228c0cbfb1d2ca872ae435266fcd055e')) def test_digest_multi(self): x = hashlib.sha256() diff --git a/core/tests/test_trezor.crypto.hashlib.sha3_256.py b/core/tests/test_trezor.crypto.hashlib.sha3_256.py index 4b7f990c0d4..cc5806c74a7 100644 --- a/core/tests/test_trezor.crypto.hashlib.sha3_256.py +++ b/core/tests/test_trezor.crypto.hashlib.sha3_256.py @@ -35,24 +35,26 @@ class TestCryptoSha3_256(unittest.TestCase): def test_digest(self): for b, d in self.vectors: - self.assertEqual(hashlib.sha3_256(b).digest(), unhexlify(d)) + self.assertEqual(hashlib.sha3_256(b).digest(), bytes.fromhex(d)) def test_digest_keccak(self): for b, d in self.vectors_keccak: - self.assertEqual(hashlib.sha3_256(b, keccak=True).digest(), unhexlify(d)) + self.assertEqual( + hashlib.sha3_256(b, keccak=True).digest(), bytes.fromhex(d) + ) def test_update(self): for b, d in self.vectors: x = hashlib.sha3_256() x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) x = hashlib.sha3_256() for _ in range(1000000): x.update(b"a") self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "5c8875ae474a3634ba4fd55ec85bffd661f32aca75c6d699d0cdcb6c115891c1" ), ) @@ -60,13 +62,13 @@ def test_update(self): # x = hashlib.sha3_256() # for i in range(16777216): # x.update(b'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno') - # self.assertEqual(x.digest(), unhexlify('ecbbc42cbf296603acb2c6bc0410ef4378bafb24b710357f12df607758b33e2b')) + # self.assertEqual(x.digest(), bytes.fromhex('ecbbc42cbf296603acb2c6bc0410ef4378bafb24b710357f12df607758b33e2b')) def test_update_keccak(self): for b, d in self.vectors_keccak: x = hashlib.sha3_256(keccak=True) x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) def test_digest_multi(self): x = hashlib.sha3_256() diff --git a/core/tests/test_trezor.crypto.hashlib.sha3_512.py b/core/tests/test_trezor.crypto.hashlib.sha3_512.py index 3c55ac70584..56d28e50c7d 100644 --- a/core/tests/test_trezor.crypto.hashlib.sha3_512.py +++ b/core/tests/test_trezor.crypto.hashlib.sha3_512.py @@ -47,24 +47,26 @@ class TestCryptoSha3_512(unittest.TestCase): def test_digest(self): for b, d in self.vectors: - self.assertEqual(hashlib.sha3_512(b).digest(), unhexlify(d)) + self.assertEqual(hashlib.sha3_512(b).digest(), bytes.fromhex(d)) def test_digest_keccak(self): for b, d in self.vectors_keccak: - self.assertEqual(hashlib.sha3_512(b, keccak=True).digest(), unhexlify(d)) + self.assertEqual( + hashlib.sha3_512(b, keccak=True).digest(), bytes.fromhex(d) + ) def test_update(self): for b, d in self.vectors: x = hashlib.sha3_512() x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) x = hashlib.sha3_512() for _ in range(1000000): x.update(b"a") self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "3c3a876da14034ab60627c077bb98f7e120a2a5370212dffb3385a18d4f38859ed311d0a9d5141ce9cc5c66ee689b266a8aa18ace8282a0e0db596c90b0a7b87" ), ) @@ -72,13 +74,13 @@ def test_update(self): # x = hashlib.sha3_512() # for i in range(16777216): # x.update(b'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno') - # self.assertEqual(x.digest(), unhexlify('235ffd53504ef836a1342b488f483b396eabbfe642cf78ee0d31feec788b23d0d18d5c339550dd5958a500d4b95363da1b5fa18affc1bab2292dc63b7d85097c')) + # self.assertEqual(x.digest(), bytes.fromhex('235ffd53504ef836a1342b488f483b396eabbfe642cf78ee0d31feec788b23d0d18d5c339550dd5958a500d4b95363da1b5fa18affc1bab2292dc63b7d85097c')) def test_update_keccak(self): for b, d in self.vectors_keccak: x = hashlib.sha3_512(keccak=True) x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) def test_digest_multi(self): x = hashlib.sha3_512() diff --git a/core/tests/test_trezor.crypto.hashlib.sha512.py b/core/tests/test_trezor.crypto.hashlib.sha512.py index 4a5c4209428..fea5dcd65f2 100644 --- a/core/tests/test_trezor.crypto.hashlib.sha512.py +++ b/core/tests/test_trezor.crypto.hashlib.sha512.py @@ -28,20 +28,20 @@ class TestCryptoSha512(unittest.TestCase): def test_digest(self): for b, d in self.vectors: - self.assertEqual(hashlib.sha512(b).digest(), unhexlify(d)) + self.assertEqual(hashlib.sha512(b).digest(), bytes.fromhex(d)) def test_update(self): for b, d in self.vectors: x = hashlib.sha512() x.update(b) - self.assertEqual(x.digest(), unhexlify(d)) + self.assertEqual(x.digest(), bytes.fromhex(d)) x = hashlib.sha512() for _ in range(1000000): x.update(b"a") self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b" ), ) @@ -49,7 +49,7 @@ def test_update(self): # x = hashlib.sha512() # for i in range(16777216): # x.update(b'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno') - # self.assertEqual(x.digest(), unhexlify('b47c933421ea2db149ad6e10fce6c7f93d0752380180ffd7f4629a712134831d77be6091b819ed352c2967a2e2d4fa5050723c9630691f1a05a7281dbe6c1086')) + # self.assertEqual(x.digest(), bytes.fromhex('b47c933421ea2db149ad6e10fce6c7f93d0752380180ffd7f4629a712134831d77be6091b819ed352c2967a2e2d4fa5050723c9630691f1a05a7281dbe6c1086')) def test_digest_multi(self): x = hashlib.sha512() diff --git a/core/tests/test_trezor.crypto.hmac.py b/core/tests/test_trezor.crypto.hmac.py index 4e27567df1c..9799cd0522a 100644 --- a/core/tests/test_trezor.crypto.hmac.py +++ b/core/tests/test_trezor.crypto.hmac.py @@ -15,13 +15,13 @@ def test_digest(self): msg = b"Hi There" self.assertEqual( hmac(hmac.SHA256, key, msg).digest(), - unhexlify( + bytes.fromhex( "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7" ), ) self.assertEqual( hmac(hmac.SHA512, key, msg).digest(), - unhexlify( + bytes.fromhex( "87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854" ), ) @@ -31,13 +31,13 @@ def test_digest(self): msg = b"what do ya want for nothing?" self.assertEqual( hmac(hmac.SHA256, key, msg).digest(), - unhexlify( + bytes.fromhex( "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843" ), ) self.assertEqual( hmac(hmac.SHA512, key, msg).digest(), - unhexlify( + bytes.fromhex( "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737" ), ) @@ -47,13 +47,13 @@ def test_digest(self): msg = b"\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" self.assertEqual( hmac(hmac.SHA256, key, msg).digest(), - unhexlify( + bytes.fromhex( "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe" ), ) self.assertEqual( hmac(hmac.SHA512, key, msg).digest(), - unhexlify( + bytes.fromhex( "fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb" ), ) @@ -63,13 +63,13 @@ def test_digest(self): msg = b"\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd" self.assertEqual( hmac(hmac.SHA256, key, msg).digest(), - unhexlify( + bytes.fromhex( "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b" ), ) self.assertEqual( hmac(hmac.SHA512, key, msg).digest(), - unhexlify( + bytes.fromhex( "b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd" ), ) @@ -79,13 +79,13 @@ def test_digest(self): msg = b"Test Using Larger Than Block-Size Key - Hash Key First" self.assertEqual( hmac(hmac.SHA256, key, msg).digest(), - unhexlify( + bytes.fromhex( "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54" ), ) self.assertEqual( hmac(hmac.SHA512, key, msg).digest(), - unhexlify( + bytes.fromhex( "80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598" ), ) @@ -95,13 +95,13 @@ def test_digest(self): msg = b"This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm." self.assertEqual( hmac(hmac.SHA256, key, msg).digest(), - unhexlify( + bytes.fromhex( "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2" ), ) self.assertEqual( hmac(hmac.SHA512, key, msg).digest(), - unhexlify( + bytes.fromhex( "e37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58" ), ) @@ -115,7 +115,7 @@ def test_update(self): x.update(b"\xdd") self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe" ), ) @@ -124,7 +124,7 @@ def test_update(self): x.update(b"\xdd") self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb" ), ) @@ -136,7 +136,7 @@ def test_update(self): x.update(b"\xcd") self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b" ), ) @@ -145,7 +145,7 @@ def test_update(self): x.update(b"\xcd") self.assertEqual( x.digest(), - unhexlify( + bytes.fromhex( "b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd" ), ) diff --git a/core/tests/test_trezor.crypto.pbkdf2.py b/core/tests/test_trezor.crypto.pbkdf2.py index fe7a349dc96..c96e3025614 100644 --- a/core/tests/test_trezor.crypto.pbkdf2.py +++ b/core/tests/test_trezor.crypto.pbkdf2.py @@ -14,21 +14,21 @@ def test_pbkdf2_hmac_sha256(self): dk = pbkdf2(pbkdf2.HMAC_SHA256, P, S, 1).key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b" ), ) dk = pbkdf2(pbkdf2.HMAC_SHA256, P, S, 2).key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43" ), ) dk = pbkdf2(pbkdf2.HMAC_SHA256, P, S, 4096).key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a" ), ) @@ -37,7 +37,7 @@ def test_pbkdf2_hmac_sha256(self): dk = pbkdf2(pbkdf2.HMAC_SHA256, P, S, 4096).key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1" ), ) @@ -50,7 +50,7 @@ def test_pbkdf2_hmac_sha256_update(self): dk = p.key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b" ), ) @@ -60,7 +60,7 @@ def test_pbkdf2_hmac_sha256_update(self): dk = p.key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43" ), ) @@ -70,7 +70,7 @@ def test_pbkdf2_hmac_sha256_update(self): dk = p.key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a" ), ) @@ -82,7 +82,7 @@ def test_pbkdf2_hmac_sha256_update(self): dk = p.key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1" ), ) @@ -95,21 +95,21 @@ def test_pbkdf2_hmac_sha512(self): dk = pbkdf2(pbkdf2.HMAC_SHA512, P, S, 1).key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce" ), ) dk = pbkdf2(pbkdf2.HMAC_SHA512, P, S, 2).key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4e" ), ) dk = pbkdf2(pbkdf2.HMAC_SHA512, P, S, 4096).key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5" ), ) @@ -118,7 +118,7 @@ def test_pbkdf2_hmac_sha512(self): dk = pbkdf2(pbkdf2.HMAC_SHA512, P, S, 4096).key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8" ), ) @@ -131,7 +131,7 @@ def test_pbkdf2_hmac_sha512_update(self): dk = p.key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce" ), ) @@ -141,7 +141,7 @@ def test_pbkdf2_hmac_sha512_update(self): dk = p.key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4e" ), ) @@ -151,7 +151,7 @@ def test_pbkdf2_hmac_sha512_update(self): dk = p.key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5" ), ) @@ -163,7 +163,7 @@ def test_pbkdf2_hmac_sha512_update(self): dk = p.key() self.assertEqual( dk, - unhexlify( + bytes.fromhex( "8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8" ), ) diff --git a/core/tests/test_trezor.crypto.random.py b/core/tests/test_trezor.crypto.random.py index 890f92cc705..f666a8760f2 100644 --- a/core/tests/test_trezor.crypto.random.py +++ b/core/tests/test_trezor.crypto.random.py @@ -31,8 +31,8 @@ def test_bytes_uniform(self): c[h] = 0 for _ in range(8): b = random.bytes(1000) - for h in hexlify(b): - c[chr(h)] += 1 + for h in b.hex(): + c[h] += 1 for h in "0123456789abcdef": self.assertAlmostEqual(c[h], 1000, delta=200) diff --git a/core/tests/test_trezor.crypto.rlp.py b/core/tests/test_trezor.crypto.rlp.py index be852e9f099..f20cecdc52f 100644 --- a/core/tests/test_trezor.crypto.rlp.py +++ b/core/tests/test_trezor.crypto.rlp.py @@ -128,7 +128,7 @@ class TestCryptoRlp(unittest.TestCase): def test_rlp_write(self): for i, o in self.vectors: - o = unhexlify(o) + o = bytes.fromhex(o) w = bytearray() rlp.write(w, i) self.assertEqual(w, o) diff --git a/core/tests/test_trezor.crypto.slip39.py b/core/tests/test_trezor.crypto.slip39.py index ff0d840b86d..3b6059e13f5 100644 --- a/core/tests/test_trezor.crypto.slip39.py +++ b/core/tests/test_trezor.crypto.slip39.py @@ -209,7 +209,7 @@ def test_vectors(self): identifier, extendable, exponent, ems = slip39.recover_ems(mnemonics) self.assertEqual( slip39.decrypt(ems, b"TREZOR", exponent, identifier, extendable), - unhexlify(secret), + bytes.fromhex(secret), ) else: with self.assertRaises(slip39.MnemonicError): diff --git a/core/tests/test_trezor.wire.codec.codec_v1.py b/core/tests/test_trezor.wire.codec.codec_v1.py index 08be380727a..46c5e305aa1 100644 --- a/core/tests/test_trezor.wire.codec.codec_v1.py +++ b/core/tests/test_trezor.wire.codec.codec_v1.py @@ -1,7 +1,7 @@ # flake8: noqa: F403,F405 from common import * # isort:skip -import ustruct +import struct from mock_wire_interface import MockHID from trezor import io @@ -11,11 +11,11 @@ MESSAGE_TYPE = 0x4242 -HEADER_PAYLOAD_LENGTH = MockHID.RX_PACKET_LEN - 3 - ustruct.calcsize(">HL") +HEADER_PAYLOAD_LENGTH = MockHID.RX_PACKET_LEN - 3 - struct.calcsize(">HL") def make_header(mtype, length): - return b"?##" + ustruct.pack(">HL", mtype, length) + return b"?##" + struct.pack(">HL", mtype, length) class TestWireCodecV1(unittest.TestCase): diff --git a/core/tests/test_trezor.wire.thp.cpace.py b/core/tests/test_trezor.wire.thp.cpace.py index 856214e2710..d0dafa2e9e5 100644 --- a/core/tests/test_trezor.wire.thp.cpace.py +++ b/core/tests/test_trezor.wire.thp.cpace.py @@ -58,15 +58,17 @@ class TestTrezorHostProtocolCPace(unittest.TestCase): def test_compute_shared_secret(self): ctx = cpace.Cpace(b"") - s = unhexlify( + s = bytes.fromhex( "af46e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449aff" ) ctx.trezor_private_key = s for _, input in self.vectors_raise: - self.assertRaises(ValueError, ctx.compute_shared_secret, unhexlify(input)) + self.assertRaises( + ValueError, ctx.compute_shared_secret, bytes.fromhex(input) + ) for _, input, expected_out in self.vectors_valid: - ctx.compute_shared_secret(unhexlify(input)) - self.assertEqual(hexlify(ctx.shared_secret).decode(), expected_out) + ctx.compute_shared_secret(bytes.fromhex(input)) + self.assertEqual(ctx.shared_secret.hex(), expected_out) if __name__ == "__main__": diff --git a/pyproject.toml b/pyproject.toml index 693e2dfca17..de76d314d39 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -91,16 +91,15 @@ profile = "black" extra_standard_library = [ "buffer_types", "micropython", - "ubinascii", - "ustruct", "uctypes", "utime", - "utimeq", + "timeq", "trezorio", "trezorui", "trezorutils", "trezorconfig", "trezorcrypto", + "vfs", ] known_first_party = ["trezorlib", "apps", "coin_info", "marketcap", "ui_tests"] known_third_party = ["trezor", "storage"] diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 197044f95a4..adc59fdfbaa 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -832,9 +832,9 @@ "T2T1_cs_test_autolock.py::test_dryrun_enter_word_slowly": "677c389b9942e8493ee39a20a0b768049d6427a021e04f242177d70b15403f66", "T2T1_cs_test_autolock.py::test_dryrun_locks_at_number_of_words": "943ddbe69e26b1f3fe13efa877bcd8bd4eee696ed9f4a361a19361dfa3846ee2", "T2T1_cs_test_autolock.py::test_dryrun_locks_at_word_entry": "38a2999fe6b43251b4f7742e5c2f6ec20ea80bc10fb8a8ab57a5d0ba56c0c3d3", -"T2T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "97aaa86002d43548fa83993c2584de078f109b5a1a323c585bd0bd51d1b044e9", -"T2T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "546f82ea7144bd5a3d602e5f2eeb059d12d34de1230c11232cbed6d2a19114c5", -"T2T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "1999284f316b63d79e8c9e59e19207c73b66106558c76672f895de6a8304c91c", +"T2T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "b69c51d81016092f1fe91300bd7f61a4f89397f638ccc7e8fc342598f471e2df", +"T2T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "a49e442247d1b8bb7f8b579bea2053db7e8168439d6d77d9b98e8719be4c5cfc", +"T2T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "527d45ba8c54d7fcedfc32620b186dd5bd1aa8b346f64868fd675f743128860e", "T2T1_cs_test_lock.py::test_hold_to_lock": "be7cc81f61429aaf460ef2f32d9d9591a1c3c565e71efb335d969fadd722881f", "T2T1_cs_test_passphrase_bde.py::test_cycle_through_last_character": "f3e9eb1d4c1702ec00c8dcdc611a114daa7c4677572db7ef7e4bcbf7f70da6cb", "T2T1_cs_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "a2bcd50f9224487b09e5f8ba713cb71bea763658cfbba84df8dc4468e3d85803", @@ -872,13 +872,13 @@ "T2T1_cs_test_recovery.py::test_recovery_cancel_number_of_words": "c93a0bc7cdad5e09a8231bfb455324de4cbdacda0792108bf9a7b19fc4a037e5", "T2T1_cs_test_recovery.py::test_recovery_slip39_basic": "4f27f9eb487d3b056d1556821be68683a78a81e6a260e8c956d375a4320fe201", "T2T1_cs_test_recovery.py::test_recovery_slip39_issue5306": "6c529386bebdb181c3dc08ae41bb87b1990c9a5696eea3472077e5f28f6ac5b6", -"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_device": "c9f3813cf8e6fc6742a3f2a84703dfadd117d85f35047bf120c715c73dd62b6b", -"T2T1_cs_test_reset_bip39.py::test_reset_bip39": "76edc506f94c450569906c9b6e22226ab9bd241adf6cd74eb5d2d728f604b5ff", -"T2T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "ecdd0d88f5900fcef2a377e2345057c5e90f3109dab7166129f85ba31297e6f8", -"T2T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "8c5c2513b201ec391db72c4f7ed431418e435d247b88d4fdc0472f73b0549e2a", -"T2T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "19aeeb0d8f4d9ecf84e6c54d635a6e8387fd36d638c34954c1dc99ab8b8681f8", -"T2T1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "feb30fdd2becd5035dce0b8c51adc69db627c59cedf99050fa79fc96a8258791", -"T2T1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "d5043b7f01a0820fe2d6f04fdd05b6bb5278fd8f377c9205b622ddb1c8d61283", +"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_device": "fe7cfbd6925138b3b9113a3bfa88657e72da61ce7227e66bcdc08328869b9210", +"T2T1_cs_test_reset_bip39.py::test_reset_bip39": "d6ad23bb608d5118d9209283e35663ba5dcf913eea72821ef0a46b0a5cbac8a8", +"T2T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "08e0cccaa49340b0493c77769329ec538913ecd1b997177f0d8a7eb6b3bb81b0", +"T2T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "b426a410bf3ccbdd632119d4d8e309674f9fa9982e976665038b7c28d8a94378", +"T2T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "cbd88238f1866014dba39939fe76f47b7c5193fcb400d236814e1892457679ca", +"T2T1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "e7fe3f5fa674cbf9aac49e08311e3a9626ae9ec9c60dd6fc706a407a253525f5", +"T2T1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "8d5249d7488534622f47c38dae511a4a583afdab55c3194fa7312f5f6dfa0862", "T2T1_de_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "7368fc31ae51f5a9836eb891a2eccc02f890952119dbab1b296b991f3abe2253", "T2T1_de_test_autolock.py::test_autolock_does_not_interrupt_signing": "7f33e8e411c8b55284bf3adb50d0060386c46b154ba84cf31b7f563208f1b11d", "T2T1_de_test_autolock.py::test_autolock_interrupts_passphrase": "6b532bd7be7e7b645d536ac73ac8b36c54894bf56cf3dfedeab633af631a64c1", @@ -887,9 +887,9 @@ "T2T1_de_test_autolock.py::test_dryrun_enter_word_slowly": "7e919c9b433283be555cc87a4397f0f9a3cc58ff4e9d2a160f7560780f05cbcb", "T2T1_de_test_autolock.py::test_dryrun_locks_at_number_of_words": "a994b23523614ee4e130ee8d257d6f58d232e6a35172b65ec2aa4be77ddcdef6", "T2T1_de_test_autolock.py::test_dryrun_locks_at_word_entry": "6eea3ff1200547015ff7f6dc55f631beb6a53cb0e3e957fda196b1a691446f4a", -"T2T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "4afda34ff36694c00c7d52039f77f874d858b3f9d463bc51304aa7e86b37a6a3", -"T2T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "6f8814325d2b8d9dd604418d4cc0c4be6b7e6e9d01a7622f113a02ec0967da3d", -"T2T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "542171fe5fdb0f36e6c9fe4b7f2575581570a478f4e0e441407ad9197fce1448", +"T2T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "20835daa335791b803283ebf21c6908240847d357aaa75f1948cb14f09391b8b", +"T2T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "7eafd496a6ad83fdd17d907a982b8b13cb05c955cedfe724a7afb6c1bc763e53", +"T2T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "fbabf7fb2536dd3afa56436a08d2a5003e7072726bd75e451965576e426e6ea3", "T2T1_de_test_lock.py::test_hold_to_lock": "b1e8398c2ce17c17a6f00070c0527b6767dfc34f72cde5112a2792afb7caee4a", "T2T1_de_test_passphrase_bde.py::test_cycle_through_last_character": "b6cba3fadde2ce0514526b37e6d6e3790b480713c6629e3145594a3c66f11e6e", "T2T1_de_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "0a237a74bfc9b1db3d317bf816c5adf21411e59f877c03d2c770d4c0b5bcfe0d", @@ -927,13 +927,13 @@ "T2T1_de_test_recovery.py::test_recovery_cancel_number_of_words": "55b3ad22c5b468ec88f2594bcfd36eb33873457a5f17f1ed00a88857bdc95ba7", "T2T1_de_test_recovery.py::test_recovery_slip39_basic": "01b1f865f8379ff66f87a0ae728cbc8e56b494dd7ea476d7c1ea0ce3846f9f1c", "T2T1_de_test_recovery.py::test_recovery_slip39_issue5306": "40016c973d405052eef54f2585d79bf58c851feb57c54b8abf886a0e9c1ac475", -"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_device": "9b29a203ff45696dd80651fc2f0752860ab3180d75d5ed5e882b1418fb4fd6f5", -"T2T1_de_test_reset_bip39.py::test_reset_bip39": "4ad41ecc061e542351479bf84c2244b742c531a46db851af4009d5eaa34f9489", -"T2T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "44f5a164371446c5285bf947e6986f97b746b4dd9093ca32622f4e9255de90a5", -"T2T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "1802da2c78b1f60c45690e1dfa803191f7ac5cabe3ca61aa94a99631abf18a2b", -"T2T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "3aeec0cf556fbd9494fef69a470f6a9b611ce08a9b88c181eea082285ee8a887", -"T2T1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "1321b8b493aea0987eb3dee32aed96aa4c12b67d0c347516ac6ec9777330c719", -"T2T1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "b6cb09139d396024c938ea30a5c5891e1bc6f02d12acd1985e4fa0f3e57be2fd", +"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_device": "d10ddd9f22230e6f6034c615921e5687dfa414a47cd2cbbee546f6e3a442fbe2", +"T2T1_de_test_reset_bip39.py::test_reset_bip39": "0f331fdede9549174d5d94829ad8433279a49cc3aeb16eb9d5360836ec45c24c", +"T2T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "bf4478dd992b1cdb6e3c1ade7f4d847e18e80378692724fc810e22806edb2a5d", +"T2T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "099c3d8e7d19a85a33953ab07d9fd4d3559c20c9915a558333c1de3d20ef62f5", +"T2T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "afdfb05968ded17664ded79b6e6fc9ca83ad488b002c6494e2b892e7f70f93c5", +"T2T1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "a5566f93fea9506a51b47b1e168d3d96ae1a664afb2f97a2bab067ca093b7619", +"T2T1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "3d2def9e366ba93550be4820cb53b16b31b03d009777a62b44c8e736a8b54d69", "T2T1_en_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "32701dde676bd0a234960150eda93dc888f71a9bb01dc16b0a2361d2af55e564", "T2T1_en_test_autolock.py::test_autolock_does_not_interrupt_signing": "8dd838b3f616945eeb5d15e60741dcc1fdda8b549bef67799faf3da7dcdecefc", "T2T1_en_test_autolock.py::test_autolock_interrupts_passphrase": "25c8049580840b007d8eb95e49ebda9657e11b25323f542dc38739b0a6c32c54", @@ -942,9 +942,9 @@ "T2T1_en_test_autolock.py::test_dryrun_enter_word_slowly": "b180199eadc4f4a26138671b08db171c0569e0e399d3be2f0e6dd237546f697b", "T2T1_en_test_autolock.py::test_dryrun_locks_at_number_of_words": "03804d3c7559d0c1ff91462e982cf22573c577013c8954fe954a3d146b8aec38", "T2T1_en_test_autolock.py::test_dryrun_locks_at_word_entry": "43ece7c42bef74232c2b2974c2aae65e6aa127321f21b5a3f982d555a5e98915", -"T2T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "1591ffbecb10eebecda268e693670887e79111a8bd22b12f382894b435bcebc0", -"T2T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "2effb32d59e1988a540ceb181858656c9e385beff3d490746270256caad06321", -"T2T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "3da7a82db168c3bd9ae4c953c291c3253734bb6ba79aa694decc82c7b4170470", +"T2T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "b08ccd5ba1767052b2852aac062d39c8e600e0301f0f9a05d9cc46ab3b64b501", +"T2T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "cfddd12892a751a93398d8c0d9bcd9c5e22af76d7b3607c6a4f7b2268c07d136", +"T2T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "3dc731a5c37d6bbb1fdf3ab0dd4e9e2b3f85e388d282c2b234ff4951a71635cd", "T2T1_en_test_lock.py::test_hold_to_lock": "0b8af13ed9617c60bd9a9a0af3f2a5e8bd6aac45b4aa02095ef5aa31414525c4", "T2T1_en_test_passphrase_bde.py::test_cycle_through_last_character": "39664383f651224563ed5f502cb65b7521d3361c9c5d84278a97e8089b35346b", "T2T1_en_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "22da61afdaa52632397202f2841f8ce2d8624ff01379da9d5b5673f44501898c", @@ -982,13 +982,13 @@ "T2T1_en_test_recovery.py::test_recovery_cancel_number_of_words": "c875c62a9ec6a483fe860324f1eb628f195d5c884458e462a6400488b1c29b5f", "T2T1_en_test_recovery.py::test_recovery_slip39_basic": "ddffd50945b48aa401365d4d82d3890852d28a650c6e0a2f5d2cbc7533366df8", "T2T1_en_test_recovery.py::test_recovery_slip39_issue5306": "e12b2eb8c8c66c6071697e089fc37de86940c1604be80feee25d1785c2cd400c", -"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_device": "91bdd4fbf7f0489cb71776cfd637d0072cdf953a584e8d5f4f38cab1fd99c1a3", -"T2T1_en_test_reset_bip39.py::test_reset_bip39": "ec1650457a73b9b8adbe3c09a39e3861ebdb86acd0b6b2382676f20971055458", -"T2T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "87415e9147381d9bc8632bc1714309066f2df9bd01f629082e7440b4ebf0a79d", -"T2T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "18bbdcdac6e57035d6ebacfabeb535e866c19829c7a8e5e19c6a68f98a934353", -"T2T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "a41a9a0b06cc1e582a95bd20936377c7a37e3c18fcb399d33e55f214e52365dd", -"T2T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "1e499491a5c94ce350d1815be00ba2fb5786c6c8e4823e805f07c6dcb0ece381", -"T2T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "1c20bd915fd7c8bbc85046e330b188b7fc5518ba7ce2f3a479ac8ea9019bad0b", +"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_device": "0257808085fefd7e9c21236893a9faf173fcf50d9ce303e132c6fc8b1c6b6881", +"T2T1_en_test_reset_bip39.py::test_reset_bip39": "4773baf5dff4c087418b2bad81f26cad2873ab94e0ebf84565d9806416e7e23b", +"T2T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "e8ffa9602806c276aad17e74d24abccf0b3f0bbd1c90ca9a9e16fc27739e3767", +"T2T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "872197f41fce8d4503010398b0cf6d631ddcd80f380fcc50b350546d7513dae7", +"T2T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "a16df694a7eca2c7e712b49e59c2753882d98f9fdcdc245306516eb776c4e928", +"T2T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "a61ddcb2b294d7af5fe8d575b0adff34cf3009f959006e1e0ab0be6e2517fda3", +"T2T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "54d452a5179fbcaa8fb34671aee64fd2694963f26977041e96c8a9c3bd24b470", "T2T1_es_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "48100caacb16bc93265270b5b5768808aeb40f7a10895f4be7c41f62905fb666", "T2T1_es_test_autolock.py::test_autolock_does_not_interrupt_signing": "ee9be166a6ee8688bb566801d8fe9093695d076109f5b7abc3f54d2d7520839c", "T2T1_es_test_autolock.py::test_autolock_interrupts_passphrase": "6ddcd7cbb2d14cf14e3affcd095e77d5766ea6db59d6b41cee49d67f517a956f", @@ -997,9 +997,9 @@ "T2T1_es_test_autolock.py::test_dryrun_enter_word_slowly": "9c6eb02ac048a819442b3e2976ae005d1f86ee5e39964e9b79c84d0160d900df", "T2T1_es_test_autolock.py::test_dryrun_locks_at_number_of_words": "df9e0ec4d7c93226f5925d2d3feb868ab07a57933233fa2169549431876c0b2e", "T2T1_es_test_autolock.py::test_dryrun_locks_at_word_entry": "77a91a03dee58364b59d4f3659883d1639c4e5c3ba66e3d4ddd972ad3ecc6650", -"T2T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "f517d321b4a9c8a3dbe8fa58843b6d5bfe3ce143b0420d2a627adf8d03112176", -"T2T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "065c85918e36fd1d31ba110583a6ae4c1c934ed57bc25e403be09d4198172082", -"T2T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "01d0f0c7a94006f3adb04d975a4193494c5e39f584a167fa529c1ba01ea70aa3", +"T2T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "132172a4c7e87a93847dea1d3c4a921dbe08ca27581cc5dfbdf269a027784496", +"T2T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "8b533aa0dd755620f429c4dcd62cf56cf9fddff7ea6c0daa31974d56c093fec6", +"T2T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "91a35e9407b6690b018ac9b9b4eb019a266818be142514dcdc28ea8dd59ccd8c", "T2T1_es_test_lock.py::test_hold_to_lock": "512b7436f7742307a1dc5134f2a63d9dfb16d68a5af94dede1a3218313469214", "T2T1_es_test_passphrase_bde.py::test_cycle_through_last_character": "09b03db9ca9bf141fb7eb4072dc9632725c5f0620d53a153286b1e0eba2207c1", "T2T1_es_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "9203112f701593cc127ae2d2de92e18866caddd15dbec7d10c20ccca9272acd2", @@ -1037,13 +1037,13 @@ "T2T1_es_test_recovery.py::test_recovery_cancel_number_of_words": "9b07676e78d6ffec3c54d1ca0153433c5ad093665af06c3e6d56e82be67d5016", "T2T1_es_test_recovery.py::test_recovery_slip39_basic": "565f8460ef4dba5cc1c73230d7247d40c7ce7f86e7334b5c29987ba8351a5118", "T2T1_es_test_recovery.py::test_recovery_slip39_issue5306": "3c02e01cb2674809b0d3c1f85587f1fa61ffb3820c3412a09b45cd70502db023", -"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_device": "2dbccb95747d5f408eb8ce24a75556c4125ad14832cf65cb5f942ed0320b8e46", -"T2T1_es_test_reset_bip39.py::test_reset_bip39": "acd5bf5f2a5d86e230242943c9693be5990bfd22fe0e48c7ce58c82bb8f82183", -"T2T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "b90df6efa2a5862f9df2d6a52c739f86e9f078fb27acb3c35d5db8bec4543f37", -"T2T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "c0032d74b4058b56c883f1cb35dd3946d028805bac6ad271fc80fd76cf1c49d4", -"T2T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "d40a530d3667f0c282a7c41842222d5a11dd730b60c7f2d659319856bc4d3bcc", -"T2T1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "25c279037a86c91733520dffaad1fa02fa19e24d594d16e1809b6d9d6a8a3cc6", -"T2T1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "7421a1f2871316b4a4a6dcf578d5d0c1f7297d3d378ba1af14ba24d7e748a949", +"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_device": "0bec436ffc173509b8d0bd733b05402205706dab65c61999d24d2dba4fae4763", +"T2T1_es_test_reset_bip39.py::test_reset_bip39": "e33c2602ef7246821da24174442531e05d4bbf7e16107902463dc1cc094b8a21", +"T2T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "8b31e9bbe28027092b8773898bb513abe0748a23f9f91828a42e5ab06e45d174", +"T2T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "5bb232252b647e13e40141fa997be361f1e5e49b9ee0c51775bc901ffcf74ca8", +"T2T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "67a40ada9b0598e37dc6675220caef8f1079ff13eb1c43f70df5c2f065970c17", +"T2T1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "d5b0758717937f5556e4df7383453734a3a2fec3fcffd8da77b0f761ccdb0d2f", +"T2T1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "c2e94437943e3239851d7b124f80ab720c91348745b553185bc9386acc3c4a1d", "T2T1_fr_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "aad4522b3e22bfe0dfbba1a56495fa30cba8d6dfbfac276493fec6575f1a212b", "T2T1_fr_test_autolock.py::test_autolock_does_not_interrupt_signing": "2fd3b74066b9c04e54128f1eddc1d943aee4b3138fdd6a9da415dbe2f66b1659", "T2T1_fr_test_autolock.py::test_autolock_interrupts_passphrase": "a7448d1cb6317612d3cfb414dde93e6fdcfc6855aaecea3aa9350b8844837a1d", @@ -1052,9 +1052,9 @@ "T2T1_fr_test_autolock.py::test_dryrun_enter_word_slowly": "df2a62b7ba80be42d87ee98a5cb96f946aebfaeec63a42ca8cb38e3640bb7119", "T2T1_fr_test_autolock.py::test_dryrun_locks_at_number_of_words": "83d189c5008b84b4feaee97c9c92493eb43f62c3b0e135d1426546d4a70b8c26", "T2T1_fr_test_autolock.py::test_dryrun_locks_at_word_entry": "d5f59250c072fc11cb4457a331d23bb854d27115c445632a4548439dc3a604b5", -"T2T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "60f8abc8d18cfece907a634643c2cdad65b31a4574b9b34c34dc99ec348e017a", -"T2T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "ed365b444afeb01728491ca9cb8d1f58ed753d988850f9c61d8d943e38e80b96", -"T2T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "5d36567666866c899ec6f0e50592034426936d8ccf9a641012fd4db6653baa3d", +"T2T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "e03d0751c742b01409f408cb86e315f884cec5b49a432de092ca1aaeed204441", +"T2T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "3305c611adf3c49607868091ea392e6e8184f93ed78bb4af2fd486f46398957a", +"T2T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "4768e34ccea686d736c446357e9ae565dcbb3ef8e8a1a999c7ccfd430733f7c7", "T2T1_fr_test_lock.py::test_hold_to_lock": "b8efdf370f93b94036e7fbd9733adc2e047e3875b91a3ee71a180345a3853609", "T2T1_fr_test_passphrase_bde.py::test_cycle_through_last_character": "cfff97ea4f16944f699d91a94178c71f23094610f0c4db52031f1be5811588cb", "T2T1_fr_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "56b050d7a22714349afcb24b168d51b28ca8838e0b19924c0008dd3023a31c08", @@ -1092,13 +1092,13 @@ "T2T1_fr_test_recovery.py::test_recovery_cancel_number_of_words": "283e55aecc5335bb5e005aaedd22601a58b06f92b2e7c01b69ecb4dd469fb67f", "T2T1_fr_test_recovery.py::test_recovery_slip39_basic": "20074256a30468e7ea6f0bfce8904917825bf57406eb4fe04ec27c23e4b92ab9", "T2T1_fr_test_recovery.py::test_recovery_slip39_issue5306": "ef84bf487c138b6842220f648062b2eb09fa58cc59c6fdf38278cc3aa0e95c15", -"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_device": "ee7807ea362ae962661c637a68c17364d5d6b5b9eb985b08ecefad0b21d1b299", -"T2T1_fr_test_reset_bip39.py::test_reset_bip39": "09e38547b000d2f9e1b89f913ea8c3883cf679f177f38c4f1e2d65f883777a1a", -"T2T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "ce7704d3992a5a7d15e713749c0bd54b4f896c96559ccd4cdafff7e2ea5924dc", -"T2T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "9b3e69b4c0af6f545b1c4690c650ebfb5f5fab56488f64a0a837c0b4d69e0113", -"T2T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "1eef9b85a325e9f7052b41314717036869645be2633b9f7dad925cd9179ae159", -"T2T1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "fc995062efec29c1e04095c3102379b4976cfc15c7ec460307778b49d9cab4b4", -"T2T1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "648b020230233c064881d691481856f3ef877456c1cb21c5f1a1c12c610429e2", +"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_device": "71e2dd29abf1cbd047e56066d0d59aa9b049c32d4f0bcabd1b71b23413364701", +"T2T1_fr_test_reset_bip39.py::test_reset_bip39": "6c64f60b942ba7a29d16063bc5f75c18812cfc8ef3183ccfcbbd743dede919ba", +"T2T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "9551bd63e3bc5b1105b610897c3fd716657b3da7a7cafcf65dd80ced08b351e7", +"T2T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "e2d48c7ba931540abdcc900ff38afd9f4e724ed6ef7d9cd7ae903c564c9ca88a", +"T2T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "fef59e6c46f09c0858023a8296e66473fce065d88d45704262fda7054483d714", +"T2T1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "ea341d659a2a06cef49c9cd98c44ea2817323488e01c39ef5750f5d0194044d7", +"T2T1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "469256963324f63dfc28f524e5c7f530f56d5314cffd2fae6d7e950c1962ce96", "T2T1_pt_test_autolock.py::test_autolock_does_not_interrupt_preauthorized": "ba5fd0fbda260716cc7935f606d1613beb777ff49598cf020e05668db25dd44b", "T2T1_pt_test_autolock.py::test_autolock_does_not_interrupt_signing": "81277e0dff00b13f4fca156642c2d478e5b104268bf866e4997daccf9b0afd43", "T2T1_pt_test_autolock.py::test_autolock_interrupts_passphrase": "605486a8cd33429e6870869cbb9e034b65958a28bb03a957d3a553ae788ea3b9", @@ -1107,9 +1107,9 @@ "T2T1_pt_test_autolock.py::test_dryrun_enter_word_slowly": "c8f7d682ce3d45373b9e5021eba2cc8c80e3c390a1da4e65767af953db929c9a", "T2T1_pt_test_autolock.py::test_dryrun_locks_at_number_of_words": "62722c3b76446e4b311a25d656db7bddddc205f8d8ed37fcc18b2a97bb96bc20", "T2T1_pt_test_autolock.py::test_dryrun_locks_at_word_entry": "106ce6155a7271c3512ae42ff469f26d24ec8ee1617735e7dc4a0ab06abf82f4", -"T2T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "949c40542dc928d54ed8b4747b806b01805410f1e8808f988a60bb8a8ab2893d", -"T2T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "8f49a1ea2efe6820f54382fcc882522d15d4ccf256376be47170c4d824d0b681", -"T2T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "5e2658639a0de55d793b875c78b2c1dc7bbe9522ecbe03d0fe7dba6997efd58e", +"T2T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "2900fa8956a742c5e0d4181681026ce971a8a7c5d3ccbaf790b38ef29ade472a", +"T2T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "6d04a34ff32ad7c19d991f508d0d6ca45b422cc49ebbe39aaa4983384d583cd6", +"T2T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "4bfe15b9c67e4b0d042c99cc8826535b8641585df27ce2977445f8c0f225a64e", "T2T1_pt_test_lock.py::test_hold_to_lock": "e49354ad084c785018db17c5ca63b2e49a677fc8bc0342e942501e6c8906fc35", "T2T1_pt_test_passphrase_bde.py::test_cycle_through_last_character": "810f98291d51f66cef09907dca810c21140413501aa72cec1ab335b917e380fc", "T2T1_pt_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "cc6f26e8c2aed00040fa898b83280ac5edfa90b514d9b2cb44238b9a94657aa8", @@ -1147,13 +1147,13 @@ "T2T1_pt_test_recovery.py::test_recovery_cancel_number_of_words": "f57b1cea1a8d167e1f73b617680b5597dd2e9a5170232d8aa3e56850f5da0a70", "T2T1_pt_test_recovery.py::test_recovery_slip39_basic": "69e0bff7cd4e376910728d7db962a9cf8ef5b7758cb25bffcd2646161258c887", "T2T1_pt_test_recovery.py::test_recovery_slip39_issue5306": "91cd38a9d25c5386cf436b2b4a650337e5fc3676a5702098d7cabc1fcb8de411", -"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_device": "7a09679f6c165671b7e9dd1c0471c87f24d73992a46afaca265a498292892f88", -"T2T1_pt_test_reset_bip39.py::test_reset_bip39": "5ec83784001c137f64127c7de5d40b34996e77dde7dc354d182eb69f9e42a842", -"T2T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "ba4c40537b916cf5f3580f70b2ae7d98c2546767b35c63d945030e5948016a3c", -"T2T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "63bf921259cb8ef956567fdae407a72d8dd824fe17e0d5e2ac16a1dfa1a6056c", -"T2T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "fedd9d1f6536a4829947b5a0a0ee86f39477aeae9a9ecb0e62322a60ba946e5d", -"T2T1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "31dbc74d4698468b3b5a18607ae18834872b11e5eb347607c99a011f7b432b0b", -"T2T1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "76b2f72b04d4142b92a53b60a34ba22c2ddbb15fc0e882c04c8a7a88c3e0822f" +"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_device": "7c2844d60efdc955b6cd03239a43c3f54ef4d613062782bee6f555a31e34f04b", +"T2T1_pt_test_reset_bip39.py::test_reset_bip39": "41b593e60a0e2a79a936c9e0b5f77d095a959ffd1f3c339d8143049c195de799", +"T2T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "e3e244d8a0c34aaf4c1ad7b589aefbe30b8dfb35d3dd17c5a9c701643765409b", +"T2T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "0f505bd599ea2aa2df393fb2ce6e7746ab46f2835ceb31463059f1e6ddff5381", +"T2T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "e45392505e807445f1a5375f0a5e0f3a41372ed922311b26ecc32f2eb0cad773", +"T2T1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "8e07045aa7caa48918b4882ff9d841e2161c538108fd3aa36293a1f3b58b4b9e", +"T2T1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "25fee7063507638cab79ca00ddcfe6c16efd55a268d8760f641ce4643f7c9cb5" }, "device_tests": { "T2T1_cs_bitcoin-test_authorize_coinjoin.py::test_cancel_authorization": "a0adbd4ba308e91267513d1b3e0847fd4022500c973a089436b8f6624351b2b2", @@ -2516,34 +2516,34 @@ "T2T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "4dbf0dcea3ff30d920bd275a8c8c25a6fc5ce33bc1b2407a69878cc582e92022", "T2T1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "2e1c882a7b4be9628a25a2517f5afb1b298486ae6b873a5f2e2f1790e8933c5f", "T2T1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "bd2fdf76fe3dcb7e0522de79a2199f45242f42f08a927e08a5c511346564af42", -"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "24001c9de3bc7dc0d001168d07b51c7adf265c44642836ab657ffe9d103f8022", -"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "2f706a3b8966cee9a6add3c9ca94049fa83c31e30ea3ecb163667f273f63b152", -"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "e14b1f59f1b3205ff019f3aff9bb20dc472afc14860de09a6d487add56b2fa30", -"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "66542a31b7e775ba7ba154e883a259d6449761a0d23c1b88755062f2aa1967af", -"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "20274a966a686e8a3ac9be0e8a3d0801ad7e51237519820d4b8a782134c9f787", -"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "516d2c04a148f4282925fc4646cf1a8aad8d50c4c141b3ee0af1e93f475a3ea0", +"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "7bf88eedbfa34e21180f09902900da1c28a75dcecdfb9b94ba529e87761ace35", +"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "7b39d487003680c04c29a0477ed09f2deac8071172c82365ba8b39744eb7a2ea", +"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "cbf08601f2ad03e28be60889c43e3b3dbfdceb4f24cc8b12e1a2e51299e27e79", +"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "a402aee845fe2a3308d7d6b252fbd2a0ffee9ed1715c6623096dcabc6fc8f5e6", +"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "fc3aaddd29fd7e1dac5552619c15f807ab062441b1c82ade03205113d0f52b43", +"T2T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "5e400d82a9839aaa09581e6a018eb401e63f1ca4157465bdde8cb28c3f9749a7", "T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "f2b80196c81ce473b7f24f16f6192ac76d9d2ca23fb0b40053c00d02b53d5111", "T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "21fd9c2dd3e5b1c30ebc4a3c54972eb0ac6c2dfb4929c4ac88802493449dc8d7", "T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "2864a3169bdff4a2ad204bc8313629cd1f7d9ea266e250bab9402fbea726da2f", "T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "21fd9c2dd3e5b1c30ebc4a3c54972eb0ac6c2dfb4929c4ac88802493449dc8d7", -"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "ce34194857a77910e84090cb441d752b40fc672ae4b9aed34e943357ddf9e59f", -"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "ce34194857a77910e84090cb441d752b40fc672ae4b9aed34e943357ddf9e59f", -"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "25a3f9ead745dda7e595788e985101091ca695700dc6b6eb6a5ba6fd76e9b4c2", -"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "25a3f9ead745dda7e595788e985101091ca695700dc6b6eb6a5ba6fd76e9b4c2", -"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "07ae40afa45d5b8cd8e99eb993c461caa9d7460b9569a3fb7eb587f6ecfe9115", -"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "9be2c7376911d5fa03f0c96a541a49fa293eb5abf3d8d0c3dc0edc934f50a4b8", -"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "bc4aff04fbf7f87c78fdccc6dbfba1da857a687cba90c77980cb9d492afa3c06", -"T2T1_cs_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "765e92e7247ed28419d29be17221b07fdbb7717c6fa1d6bfbee1ad2568b90922", -"T2T1_cs_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "8beafc3edef9ea70a1adfe0c54b8b4fd6e7da98fa7114c48b9ac8894e966daf7", -"T2T1_cs_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "5ac809c852237d799587a28f8a89102c3055113bda25d2fd7ffee7723902936c", -"T2T1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "0869bc557b3cbc492ff7e9dbc838053c27ce052457cf9a60fda45f7cdf5e756c", -"T2T1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "0869bc557b3cbc492ff7e9dbc838053c27ce052457cf9a60fda45f7cdf5e756c", -"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "12e86e1f373b944058ef16aaedf7d89c0d658b441a5ee96518b574b8f6c0008f", -"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "12e86e1f373b944058ef16aaedf7d89c0d658b441a5ee96518b574b8f6c0008f", -"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "5e173dca3878d29f8227b95819419f9479f14fd211cc2f9a42b98455bb93dd8e", -"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "5e173dca3878d29f8227b95819419f9479f14fd211cc2f9a42b98455bb93dd8e", -"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "9701baf1d4ba0f287729ffd2d9ddcc2cf7120c044ae1e0e1ce62ae09cdda1f9b", -"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "9701baf1d4ba0f287729ffd2d9ddcc2cf7120c044ae1e0e1ce62ae09cdda1f9b", +"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "ad5e162bb4076fb69f673ee0e432214a9d776a356d780ae3ee6092ae2e05794f", +"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "ad5e162bb4076fb69f673ee0e432214a9d776a356d780ae3ee6092ae2e05794f", +"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "e14c7e60c0b6cdce59bd9723e5c4fa6b512db7e6c6dc3d97f710e8cd6e39d096", +"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "e14c7e60c0b6cdce59bd9723e5c4fa6b512db7e6c6dc3d97f710e8cd6e39d096", +"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "f452c36c9c4664210a9892c752d94dd36f00fc8d6becd047780fd5e571796347", +"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "3ff0d819c0efac3beea2ce41f9792b0b8aca84aab3480edb3e78435a23fcf4c2", +"T2T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "ad42c87a3b400a77a22cef1ab942ed08f80ff7892d4ed69b5e4e5915f3a9c59e", +"T2T1_cs_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "3dd3ff763dea4920bc0f347ed18ebcb4643819706344919a8ed8b09b5013b529", +"T2T1_cs_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "17ec66847f50f16259661f1b1d906dd45c9b8004565783b610d93a9ff647f6d6", +"T2T1_cs_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "f3de3a8e2a4c45d0cf5cf98026a86f2cee309ab5fe0f85881bdf02e195cdc511", +"T2T1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "7cba22877bae97f3768c8d8f2a950407f68d0916d7324eeee90d27027ca49020", +"T2T1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "7cba22877bae97f3768c8d8f2a950407f68d0916d7324eeee90d27027ca49020", +"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "b54bf30b6c4f847c80af0a877d8c71b6478e34eb2eb6926fd8756f8d2f952d6e", +"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "b54bf30b6c4f847c80af0a877d8c71b6478e34eb2eb6926fd8756f8d2f952d6e", +"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "55158e139eef147d40a43a8843cc3dc26f58417c5a474935002b509f16463ba1", +"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "55158e139eef147d40a43a8843cc3dc26f58417c5a474935002b509f16463ba1", +"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "b578beb4b0593a275eac3d74529ff4ec0e6501208747c72b436fd3ba63066622", +"T2T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "b578beb4b0593a275eac3d74529ff4ec0e6501208747c72b436fd3ba63066622", "T2T1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "36d8f15b5a9904362e41f1704905e58c51d7aea76c263245d7a4c6e92ac1d146", "T2T1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "e46a0b446eaf6fb065e87030893939f3cdc31cac26c70a96eca6945376555443", "T2T1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "9ed40534882926ab800f9e6ed1956f9e2a70fb57a5c7ef9b45830ea01746046e", @@ -2808,24 +2808,24 @@ "T2T1_cs_test_msg_applysettings.py::test_set_brightness_negative": "f2b80196c81ce473b7f24f16f6192ac76d9d2ca23fb0b40053c00d02b53d5111", "T2T1_cs_test_msg_applysettings.py::test_set_label[empty]": "75195a23ac9dcfad80ac340d03d9e0bb6a5ad3a13533baf65cadf0966efc6e9f", "T2T1_cs_test_msg_applysettings.py::test_set_label[max_len]": "471b1d3739945a3544fd547ff97f589c9521e6c560b1b8aacf19c4b2062b4ee0", -"T2T1_cs_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "843b63695ec23132617035287a745e7606b10d7893f4bd7016aa53be33f04495", -"T2T1_cs_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "843b63695ec23132617035287a745e7606b10d7893f4bd7016aa53be33f04495", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "fd0d5f954fbe7214180c9c6171532a56c8440869e8e551f390cfab08d8944102", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "fd0d5f954fbe7214180c9c6171532a56c8440869e8e551f390cfab08d8944102", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "e264200a1cea9c24aaae63e261c2852cc38c069fa20479935b9db4c35ba17137", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "e264200a1cea9c24aaae63e261c2852cc38c069fa20479935b9db4c35ba17137", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "5749235c2e266fcb268b892e3f9cdf979c8a5a100f4b461ca845cdf051041687", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "5749235c2e266fcb268b892e3f9cdf979c8a5a100f4b461ca845cdf051041687", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "9e1ea691bbd4dc197957a23d63b4a6ea8efa1d22addd4691c782c7d4a0ae2ddd", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "9e1ea691bbd4dc197957a23d63b4a6ea8efa1d22addd4691c782c7d4a0ae2ddd", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "f5bd882fdef3d06ba5b7c16ea64af100bc1fd2e093c0c78eee679a34a48c8666", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "f5bd882fdef3d06ba5b7c16ea64af100bc1fd2e093c0c78eee679a34a48c8666", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "5c96d583b5b24533cfe2bbb6645b7dcde16cec76038b44bf441af9d3c9682a97", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "5c96d583b5b24533cfe2bbb6645b7dcde16cec76038b44bf441af9d3c9682a97", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "eb5f993785e8086d1ae807edb4a841f395b8036cb2f80b27d170d8b4a8482b6c", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "eb5f993785e8086d1ae807edb4a841f395b8036cb2f80b27d170d8b4a8482b6c", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "1805235abc77bad5ac7ded5313b8d29bbe77370e7c8fcfc99c431dbdc66ed955", -"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "1805235abc77bad5ac7ded5313b8d29bbe77370e7c8fcfc99c431dbdc66ed955", +"T2T1_cs_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "21b16ffd6ef525f663dd826110d19d63d5b5ffe02d6ac674639be4f07a75d816", +"T2T1_cs_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "21b16ffd6ef525f663dd826110d19d63d5b5ffe02d6ac674639be4f07a75d816", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "dbfb60547c8abb6e9ca02571ba1c09786f2bf173de574010ee174c8f74535b1c", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "dbfb60547c8abb6e9ca02571ba1c09786f2bf173de574010ee174c8f74535b1c", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "523af0ab4d3e57536bb14a4cb9d69a5360b7533a45b3d6b88adbf4283195e05e", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "523af0ab4d3e57536bb14a4cb9d69a5360b7533a45b3d6b88adbf4283195e05e", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "f63f614abb1f1372952156fac1a73397ce9341e99e2e877b0fe8862625fceeac", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "f63f614abb1f1372952156fac1a73397ce9341e99e2e877b0fe8862625fceeac", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "c89eb12f180bd208f4d43849c5ac4823017e25e0e78c19c908d50d247b1203df", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "c89eb12f180bd208f4d43849c5ac4823017e25e0e78c19c908d50d247b1203df", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "311b593781f16393d62b3fb660a27e41e9c13604117b93c354174c18b7b91e1f", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "311b593781f16393d62b3fb660a27e41e9c13604117b93c354174c18b7b91e1f", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "e80258208fe4da2694cf41f67a835244f71f930203d045d174c70196d6315bf0", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "e80258208fe4da2694cf41f67a835244f71f930203d045d174c70196d6315bf0", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "edf8f53b4cc654bb89803e129c9b15979bd5b058dd08618b40fa6d087b7c03b8", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "edf8f53b4cc654bb89803e129c9b15979bd5b058dd08618b40fa6d087b7c03b8", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "14440e7716ed26d1f8fc91591e6f957eef61d0ca9e165f02ca878652997b8b6c", +"T2T1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "14440e7716ed26d1f8fc91591e6f957eef61d0ca9e165f02ca878652997b8b6c", "T2T1_cs_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "59facbb56f9b5c76e14e2e2807514ecf9d29add6f9d19e3628c740c1820f6a48", "T2T1_cs_test_msg_backup_device.py::test_no_backup_fails[Display]": "09f010fd895eb9a86f3e6614144d3071b85342f052e5b6b7cb65a850c303bc32", "T2T1_cs_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "3a4a4d371a78a17fe49cd2b068be521e11ce560a57c5e27a62fb64dc5a1e4431", @@ -2841,9 +2841,9 @@ "T2T1_cs_test_msg_changepin_t2.py::test_set_failed": "c3bb6b0c53a498224c5e2a6a027a551f49029136117517a4dbd09d0688949abe", "T2T1_cs_test_msg_changepin_t2.py::test_set_pin": "7f1ebbaeddb8edb4db1d686c9c6da2a7786f5ef2d2b5790a1289de35ae190231", "T2T1_cs_test_msg_delayed_ack.py::test_abort": "8bb63c11c6147d3616042c9ae9117c520a66fa641f6a3aae61c64b4c67d89dea", -"T2T1_cs_test_msg_delayed_ack.py::test_backup_no_acks": "eb4fe183aa88d102d3040490c1efd7016763bfe3c3108484b956703884046dca", +"T2T1_cs_test_msg_delayed_ack.py::test_backup_no_acks": "81d255d5afa3d2e6745fa6ad40dea08b6067889b8e76d15aa988f451c99a1ce1", "T2T1_cs_test_msg_delayed_ack.py::test_delayed_ack": "8bb63c11c6147d3616042c9ae9117c520a66fa641f6a3aae61c64b4c67d89dea", -"T2T1_cs_test_msg_delayed_ack.py::test_setup_no_acks": "00f1e259289da785b5ee7b2b2ce02a31fcb5493129bfb21a3df81af26152aa19", +"T2T1_cs_test_msg_delayed_ack.py::test_setup_no_acks": "b8629503673b292f6cd7a982a71b162b984364569f5c5ab886a233397bf5e306", "T2T1_cs_test_msg_loaddevice.py::test_load_device_1": "0707d44828b5f6cc28194c242b7e7db9593c000900b86261b00e19d894eb9725", "T2T1_cs_test_msg_loaddevice.py::test_load_device_2": "0b842dab4aae4120317f946f3a8c2591464b1f2ce2d26e29b1ab68faa2c1986c", "T2T1_cs_test_msg_loaddevice.py::test_load_device_slip39_advanced": "0707d44828b5f6cc28194c242b7e7db9593c000900b86261b00e19d894eb9725", @@ -2881,10 +2881,10 @@ "T2T1_cs_test_protection_levels.py::test_unlocked": "881f3d3e2c416306d1e34d788e8b00d831d4d982051314678b4675c53072b75b", "T2T1_cs_test_protection_levels.py::test_verify_message_t2": "aceb94241663d5ff886c925deb38c4b6d746cfdd75d84c84329bc72c92241648", "T2T1_cs_test_protection_levels.py::test_wipe_device": "05d4a7742bcf9bdd985f0b612ad0bfdd7effb5f5d43c6b51d34fc2b0e7ad3b9c", -"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "9b967c9cee9208d464332d97f9fffce30769a310786db02ddc4abb427c5c3998", -"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "4a2efd14b377ce782c67e6d35dfeba44bf6ade442199a6834e381ff13a7ca535", -"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "4a2efd14b377ce782c67e6d35dfeba44bf6ade442199a6834e381ff13a7ca535", -"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "5176b35fd4f5829b8e4a7a1474ed506aa2f19da69e9dff565dcc9bbcdb1988a4", +"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "cd9b6d311b07b8a4e74b00c0ec960521f13705e92fd2f222d32cbed41ffb6e5f", +"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "d669920498477a936a841a44629ffb2b952075ab372feea70d578dac10ccd9d7", +"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "d669920498477a936a841a44629ffb2b952075ab372feea70d578dac10ccd9d7", +"T2T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "e6e1fdfeb8a629677f043d5728a38788d66fe8ea31c24aa05d08a46b361b0947", "T2T1_cs_test_sdcard.py::test_sd_format": "f3c7196f611ce24247dd4688112aceb38c3b9d4aa84df54e6944e92841307229", "T2T1_cs_test_sdcard.py::test_sd_no_format": "162e5753ca755b6a233dc04a261442a5126b64d6ea29ac69071aa1053425f044", "T2T1_cs_test_sdcard.py::test_sd_protect_lock[auto_lock]": "52c37bd8ba7bf6c2762f1d1a7343d8fc4e1d8c542306190065c86806ad02ee30", @@ -4346,34 +4346,34 @@ "T2T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "b3fab139bdfd4b18d939427955a47f905fb35e1597548ab36fb682801b36aa61", "T2T1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "fdffc0e9e1fdfce031720adc2c0d6a58884fcd8dea7aab23e91d4db9243189f6", "T2T1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "a999d1ff7e81ff0a798e8eebeaeb406f8d0155c798ded7fa9553dbec324bc560", -"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "058cb6c854a77d31df0417a782e13861a4bfd6c2aa16e332b84fae1ff5d90c1d", -"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "33421ff59092010305c360d2baaaeb7b323af1dfb7df3ce6fd308bc5f31ecb1a", -"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "e7c8f539a257dcdc0723ea7692cb917a881a534f638f9324c3b490c6bf8e454f", -"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "84e01b366d2e18366ba21a03b82075bbb80ca5430dd132be44260213402f57a3", -"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "c11852b223faa19dd0323c0f4d8d81e851dca4bb71ba11aac64c4db290e8f78d", -"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "40c3082496c792a4280066e837b18597ccf9ea4ae7958137c091b6043cc84377", +"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "533dbd532050ced6beb653da0b375c605aba12e24a020b31a2c707cc847e5588", +"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "782869f684d715b7a7bbd5cd1900b4b717a2e32694225fa3513b8e2c6213ce58", +"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "be8334befad6c0d3d7a87a57fa02731b5081dacf25526dff2d92d352bf33d9cd", +"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "f6349497aae0aebcaaaf05d259f6a3ef218200b889994299ffffdba01a470d6a", +"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "9022cf4d151a602f68bdc264a550d7ce8b9fc2323c2d77a5347a54a77927197c", +"T2T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "84219f8bf4c700373d6e13ca2c3e04b3bb6f5ed4d2fe14121f604a0dcf8d513c", "T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "efeaf51fe18b983e9b1a6947a939ad305a92e57798fe07110bb61c0f65755881", "T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "771b2c39945dfb841b7a1b19412f515ab7eb57f7462a29126d87eaed9c99b4d6", "T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "512ad513162ee1000584cb76721a4c0160e9eac38dc74befed4633af2d8e48c6", "T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "771b2c39945dfb841b7a1b19412f515ab7eb57f7462a29126d87eaed9c99b4d6", -"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "0c8f8167598aff1ebda8ef1f29d02def79aae95f5beb54a50a6d416d966a6273", -"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "0c8f8167598aff1ebda8ef1f29d02def79aae95f5beb54a50a6d416d966a6273", -"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "6700aff4dd56a21c655dc7957fce9e25bb122d80056c087dd5678e19a5e85ed2", -"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "6700aff4dd56a21c655dc7957fce9e25bb122d80056c087dd5678e19a5e85ed2", -"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "d34eac90a644705d7172e60d5458756ba040020eb43410ade0be728d618d005a", -"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "20386f058e081dd15b25fdaa5ae4ed28120ea2611f64fb9d5ff24fd446ce4a63", -"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "34006232f10ca30c3dda15ceeee6e4ee7b5f85f130228504be1592603ee386f5", -"T2T1_de_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "8de402325e1198e55caffd2100353a238d41d8fd99130dac56d0424aba7399d2", -"T2T1_de_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "937440ac788f259ee95547e5d1abe7708a3a428096fc3287ac9f34b8f0c630ec", -"T2T1_de_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "2f3ecf15e439e3067114c73440edfe1efe61be5c9481fe44c83c39019e2223fb", -"T2T1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "e04541b19ceb1cd49bfd8d51f6892d88da3effe1207a999237ffd9ec702c0318", -"T2T1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "e04541b19ceb1cd49bfd8d51f6892d88da3effe1207a999237ffd9ec702c0318", -"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "44ca4653f475283f7026ebf6b655b1b8362ad6c7eb2ae283511f107ba5cab81a", -"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "44ca4653f475283f7026ebf6b655b1b8362ad6c7eb2ae283511f107ba5cab81a", -"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "ff3579f5a1bbedf966111d459731a224822f39d245663175ac2bd17ffdb41acd", -"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "ff3579f5a1bbedf966111d459731a224822f39d245663175ac2bd17ffdb41acd", -"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "1443036b554b2c77a96cf6bc8a1dd52c883aaf089447368555080a2ed2662c79", -"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "1443036b554b2c77a96cf6bc8a1dd52c883aaf089447368555080a2ed2662c79", +"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "bd8df141ce94bc278280065a2bc92860a7442ec72b14e54a4d3148fea6fba15d", +"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "bd8df141ce94bc278280065a2bc92860a7442ec72b14e54a4d3148fea6fba15d", +"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "f0ba3178fc12c2840e9ac919ade7458a6c25094b80271887f809b86cea737601", +"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "f0ba3178fc12c2840e9ac919ade7458a6c25094b80271887f809b86cea737601", +"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "1c3c0adee412569b51ac5eb516c2ac7b54cdc395d8b96597ca4fcae1fb8e4bb1", +"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "97d37ddcc6bfdb49d4d16480a7bf943292d41dde88ba8cf4196cecdd4bcd464b", +"T2T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "33e318f595ac2cdfaf0177f4c4343f3015f853543107592a9af442986b1cd686", +"T2T1_de_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "752af75c5fadf9974f11983e75449cbb7fceb5eb6b93abd9a68f98f7b077afb4", +"T2T1_de_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "3e9da00f6475161f516527483b8f212d44c398099fcb4c314a213bafd171b07e", +"T2T1_de_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "942501b2973ed686da587386190fce983ef2d97930261e3a63d7164aa0cdb8c8", +"T2T1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "be03045a92cc07f55682f98bfae2c8bfc1bfe13f0e555db2adea71dae3e0fe58", +"T2T1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "be03045a92cc07f55682f98bfae2c8bfc1bfe13f0e555db2adea71dae3e0fe58", +"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "58635e59c88b6e74c7e68fdb7a29d4a6456c2265a4fa14cbecc3ff58bee2e455", +"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "58635e59c88b6e74c7e68fdb7a29d4a6456c2265a4fa14cbecc3ff58bee2e455", +"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "11857503f5bd9920418d07a404183f3f79d582c2b5414388cb5036b9e0249886", +"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "11857503f5bd9920418d07a404183f3f79d582c2b5414388cb5036b9e0249886", +"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "086c887e425ba93dbf063855c5647577b0d68ca485a23fe2b4c575d1e3671dd0", +"T2T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "086c887e425ba93dbf063855c5647577b0d68ca485a23fe2b4c575d1e3671dd0", "T2T1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "6f87a4643aac151259cb939dde89f370484e1b995d849b5ba7e971312bee4337", "T2T1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "9aae9a3940494c31d6b89d4c2c6f11b30e08ddcbdc54570711b3198cd3dabbb2", "T2T1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "922c451c0fd8f7593ae758a90ce6a4b1350fec6db59ec57b95486c5f615c8eda", @@ -4638,24 +4638,24 @@ "T2T1_de_test_msg_applysettings.py::test_set_brightness_negative": "efeaf51fe18b983e9b1a6947a939ad305a92e57798fe07110bb61c0f65755881", "T2T1_de_test_msg_applysettings.py::test_set_label[empty]": "ff0ea3a77d5aff19d7f8bf752a45b174ec4458aa38e123d7488d84bcd5c0effb", "T2T1_de_test_msg_applysettings.py::test_set_label[max_len]": "fba9e02ec52a4083fa7040de3b25b8c4e3e9b8ae6c64c62438fe34a3a0a99aa2", -"T2T1_de_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "a7f664e2030d94fcb289510b7f15ad70b21a55350d50b1788543f1f42ae31944", -"T2T1_de_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "a7f664e2030d94fcb289510b7f15ad70b21a55350d50b1788543f1f42ae31944", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "23ea93174b95a7ac1c7f28a7053892ecc6b908117fa7947cc9492f2feaa13d2c", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "23ea93174b95a7ac1c7f28a7053892ecc6b908117fa7947cc9492f2feaa13d2c", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "b72bd8bc0f78e7765806338f387e9103426d4ca3bcc704dcb227ce3c3ca01c5b", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "b72bd8bc0f78e7765806338f387e9103426d4ca3bcc704dcb227ce3c3ca01c5b", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "55c7c1f2bb0cc857829e6af75e4c5c8430c2ee99569ba17fd5ba102353f67ce7", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "55c7c1f2bb0cc857829e6af75e4c5c8430c2ee99569ba17fd5ba102353f67ce7", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "6dc64842e5bdcb4d0deb16ed1b1d99b37d49fcc68e78963d8765addbdd658620", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "6dc64842e5bdcb4d0deb16ed1b1d99b37d49fcc68e78963d8765addbdd658620", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "836c80f765abd6399c1d9f2bb729220c92c6364385b687dbd2331859aef036c3", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "836c80f765abd6399c1d9f2bb729220c92c6364385b687dbd2331859aef036c3", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "0e79f50ae7c4aa4a1817c2027e169f72cb74a946f5a48b5498a2a096e223fd40", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "0e79f50ae7c4aa4a1817c2027e169f72cb74a946f5a48b5498a2a096e223fd40", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "268d58edc5debbba7c70fa43e99d1c350f729efccd9f1e84355f982646dbf4cc", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "268d58edc5debbba7c70fa43e99d1c350f729efccd9f1e84355f982646dbf4cc", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "fd3d325a0e786a9db48d4f9547475fb8cf12022f8b3a453702fa5c5b3e175f53", -"T2T1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "fd3d325a0e786a9db48d4f9547475fb8cf12022f8b3a453702fa5c5b3e175f53", +"T2T1_de_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "1cfa476ddec53855e60c18899c2f8b6fabb1e1af261b07fb5c64519a96b4e953", +"T2T1_de_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "1cfa476ddec53855e60c18899c2f8b6fabb1e1af261b07fb5c64519a96b4e953", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "ca3b8e7bef0f91bee8d8371824a1aae900903191dae28b8a160e3007f3a90b1d", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "ca3b8e7bef0f91bee8d8371824a1aae900903191dae28b8a160e3007f3a90b1d", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "edb21407a6928396b11fa95d340d4449a43a4e51c472f752bea107baeda52616", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "edb21407a6928396b11fa95d340d4449a43a4e51c472f752bea107baeda52616", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "2413bee973e6e4b3592142dfbb538587453c77c5cb6216a4410ef23999f551ca", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "2413bee973e6e4b3592142dfbb538587453c77c5cb6216a4410ef23999f551ca", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "1b8351e1367c9af46063acf275487ffd0715f8a8e80c9ea1e89c0945c2253ea6", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "1b8351e1367c9af46063acf275487ffd0715f8a8e80c9ea1e89c0945c2253ea6", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "5c447960bbc7253eb8845b707dcb51cd7cd4745665d9883b9988cd0d3722a4bb", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "5c447960bbc7253eb8845b707dcb51cd7cd4745665d9883b9988cd0d3722a4bb", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "96f14de242beb8abe5464eec3e0b10a68dd2a23c94277a0715fddc33367ed118", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "96f14de242beb8abe5464eec3e0b10a68dd2a23c94277a0715fddc33367ed118", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "819749c73898b2711e3c97d818c83b41b3c042874bd724b84b142dc7cefba902", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "819749c73898b2711e3c97d818c83b41b3c042874bd724b84b142dc7cefba902", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "abefa3d44d8126746903cb49c0505fec60ae8efc80b99bd0d8edacbd1442883b", +"T2T1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "abefa3d44d8126746903cb49c0505fec60ae8efc80b99bd0d8edacbd1442883b", "T2T1_de_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "cbd1ec005c968c73c290d6bbb705f96c86f8c677967aad7ae16a7fb2fe4e8e6f", "T2T1_de_test_msg_backup_device.py::test_no_backup_fails[Display]": "cb107adad54818a6984dc86362e55b44b527344d1b2784ba9de1d3fccac25c85", "T2T1_de_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "dedf1c382e23e4a23d7e9e4aee65c0cfdb854f463adbf3416f493a8f6079c848", @@ -4671,9 +4671,9 @@ "T2T1_de_test_msg_changepin_t2.py::test_set_failed": "a69a0fa913d465d6de9f80e417df2a39b3d135223c4114fa1870cb01a1f9ab03", "T2T1_de_test_msg_changepin_t2.py::test_set_pin": "b144c9c4f4dd1ac346200916c2eaa557f9c80bfe1cdce33228a87b2224a69284", "T2T1_de_test_msg_delayed_ack.py::test_abort": "24de914bb860f1e171ca0c97fb42e015fd3da6d7dbe1489fe127d5c96a3bf2ae", -"T2T1_de_test_msg_delayed_ack.py::test_backup_no_acks": "4643d02c8f68d2ecbb0eb783de041a04bc7d6b3797a9a40297cba4586c3660d9", +"T2T1_de_test_msg_delayed_ack.py::test_backup_no_acks": "b662a08d4a3c146933607390dec69ee239277ae8e620104e053e6bf77b7b7628", "T2T1_de_test_msg_delayed_ack.py::test_delayed_ack": "24de914bb860f1e171ca0c97fb42e015fd3da6d7dbe1489fe127d5c96a3bf2ae", -"T2T1_de_test_msg_delayed_ack.py::test_setup_no_acks": "d48431d0c20a1819d9bd35fe0ca4183cb80b91d61e6def2f0761d072405d601c", +"T2T1_de_test_msg_delayed_ack.py::test_setup_no_acks": "299539e4d7030de588991dafcf4fe6dd597209fb453ca1bfddd5165ef157eb96", "T2T1_de_test_msg_loaddevice.py::test_load_device_1": "b58c9667ac7fd627cfdf9519fae20e00e05443352c31bebfba85ed3b12aa7351", "T2T1_de_test_msg_loaddevice.py::test_load_device_2": "5a60476c7c6298e0c042a5c723ebcd3463f487818919f8a0ab38d9ef9ae526f1", "T2T1_de_test_msg_loaddevice.py::test_load_device_slip39_advanced": "b58c9667ac7fd627cfdf9519fae20e00e05443352c31bebfba85ed3b12aa7351", @@ -4711,10 +4711,10 @@ "T2T1_de_test_protection_levels.py::test_unlocked": "d965f2ecdb4a405579b0bd9d53394a7674ef9ae088ac48460b2403bf523f444e", "T2T1_de_test_protection_levels.py::test_verify_message_t2": "8c092699d9e2c7624aabcf4547c021ff8370f5ee565590cd7e366aaeb675ada9", "T2T1_de_test_protection_levels.py::test_wipe_device": "729bea11cfa9ae20d2f58af954c43f5f4f3f0b3f294908871fab200e77fde321", -"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "aadc9a1c6c41fc482971a91d89fdd7af657d01cfd05f15555b068492b74370e4", -"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "880d73c017aa3b44b39684ec076b15e75d47f772e4f6508d40a6ac5372b9a06d", -"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "880d73c017aa3b44b39684ec076b15e75d47f772e4f6508d40a6ac5372b9a06d", -"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "e54ecf6f7c53400ee30087e8dfc0b444f75abc9d61e6eb0be41a9f55d5de9b59", +"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "0f0a6e87f7a7f65d7d0e0529c8bb1a269a9c48e523a99d5ca83230ad0c49adb1", +"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "e48bbbf44fef4d1af5e4a3a32056e4dc5c741f73f80a6c99bf9126cfc4e344d3", +"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "e48bbbf44fef4d1af5e4a3a32056e4dc5c741f73f80a6c99bf9126cfc4e344d3", +"T2T1_de_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "7860f45a8c071b5c4f9938cea5fc1e133361dccd11b88ebb61f1bc23adb1964e", "T2T1_de_test_sdcard.py::test_sd_format": "fa43729d76e607c3b1390956ce6e8139ce1d515c952cb940d5ac48d0246f80ea", "T2T1_de_test_sdcard.py::test_sd_no_format": "7711c3a58b6ac3a0d97703b4dcf7bde4bb7029866bd8961ec42ffc4cfbda0f75", "T2T1_de_test_sdcard.py::test_sd_protect_lock[auto_lock]": "867b0ce1b888756ca0dc9c31f3f8d22dd223c22a8a339477f8fde586babd9760", @@ -6176,34 +6176,34 @@ "T2T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "baa001a4423285cd3ddb20f40f4d15fa3289761f20353031d302ceeee5824d5d", "T2T1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "43a5511cc3f00f297bfd371e0d8effd74c3a088e7ab77076eb44391d515d2002", "T2T1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "b2e12f15f0fd2a8dd4d23ef0852eae0acd061d776ebb6a509b71dcbf2437c772", -"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "d67fdd104597802e3d88178fcb58b3281ffa543aeec865b7aa09ea39ca9b4ba2", -"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "a54b68ba7034dd49b2de36505605520981e9af8debbc98a2f8ef945c4f022343", -"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "21727bd7fa1a39d418e4f6a338f2f10ddd83623ba0b34e4f1ba7056a8dafee7e", -"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "4c5cfebe165e144b19447feea33a01d4dd43e2f03b0b639519534290a7a61235", -"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "71f8a9675a0af28550280b5bf844e61a92abdb9eb8d35d58e73b6675e113dfac", -"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "56cc6a233ae686dbb82f81fb37bbe10c14b0eef2c45d5637e73680a93042f5ea", +"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "3bde02b3e16f03c2820a1a25a37632eb7a7b5aaeee2863d01c3d3d98c69756f2", +"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "ae14bd2b9f911f9dfc0dee920f74bbd30fe60254faad59d877f211f126930326", +"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "98fea395ea81dd40bc501f183fbc48b06cdd8da9a6a3c158a4366ac18941850e", +"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "277755cae19af6ea856e5a767e2cff9512166cd5502ecb426e81ddb85693f933", +"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "66a8e7223be6c71e01529a2800043a4bf321427d8374fc41cb33f7d904bf23f7", +"T2T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "57187ef808bce454fe98e9a603da784499903ffe5bb185b0cc27c4cf70536c15", "T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "8aa7c68cd09e700e8c6903dcfc39c4a66214481c12c34dc56762829478399b79", "T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "7ab9b15c2c71b7353cd8201f3bf273ae1720ef8fd841829427afa18c996e0d4d", "T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "df7b18621e1a9cacb05b7ebedab5976ba3a02d356900ef28749fed011524c59f", "T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "7ab9b15c2c71b7353cd8201f3bf273ae1720ef8fd841829427afa18c996e0d4d", -"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "fd2f831b263475bcc59b7b84ceb8d292b57ba9c920e8d18d591423248ec50433", -"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "fd2f831b263475bcc59b7b84ceb8d292b57ba9c920e8d18d591423248ec50433", -"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "d8e8bc15853bf8ff6c05bc97958a6f8e100f3d99400cb292d37e9c173dfb7435", -"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "d8e8bc15853bf8ff6c05bc97958a6f8e100f3d99400cb292d37e9c173dfb7435", -"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "8213bdcd28581899860de14ba5bb03e3244b08b3811e5888dd8a093be8f77701", -"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "6ae16f37a515a9a247bb92c4df644058369cc10ea95ae036a268021562f4c858", -"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "fcfcf9383cab1242c8e670e38f0f9b9abefebc343c4ffc80759d17322f2dc771", -"T2T1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "cbb43f5932f81343db3fb5c8cedada6a023f1854f86ca4ee08bc705040a19eaa", -"T2T1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "0cb315af20a8b11995d0ba7cb54291d6db3c44c029c3dc83eadedde39584c6e8", -"T2T1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "901dad6856b676c303dedc9b10e19bad68e0bc3e9468fa10b60398f8370ad6e4", -"T2T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "b5aace4a7074ff2bbf22b87644530bb949d74eff05662c3bec0ba2928b5ddb12", -"T2T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "b5aace4a7074ff2bbf22b87644530bb949d74eff05662c3bec0ba2928b5ddb12", -"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "e872c2c6876a8063ba77f02a76aae596479096af42b9a00daa4cb440cb575018", -"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "e872c2c6876a8063ba77f02a76aae596479096af42b9a00daa4cb440cb575018", -"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "e73841e987535f44a43067a242b076a8388e20f8642f70342b47975b2accd420", -"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "e73841e987535f44a43067a242b076a8388e20f8642f70342b47975b2accd420", -"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "f98e92ec95bee98dfb977efd53e71eaef6ac47213656ada97f56ee58f802fe7b", -"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "f98e92ec95bee98dfb977efd53e71eaef6ac47213656ada97f56ee58f802fe7b", +"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "08ca82a70e631304668103f97021fe5f473e42f4e9eb3ceeeffa4f0f64deca16", +"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "08ca82a70e631304668103f97021fe5f473e42f4e9eb3ceeeffa4f0f64deca16", +"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "8c7d5a2a16a5c80aaf003d46813a4e4e9e0a75d3ea7299f3fdbf79a15993343b", +"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "8c7d5a2a16a5c80aaf003d46813a4e4e9e0a75d3ea7299f3fdbf79a15993343b", +"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "2a1f80429e66ba14feea925d243b85e7d9376be916481a9aa1c988fafbd5d55b", +"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "ded5e201cd2be6fdece11436cc4b7166acc39f997f4fab0343cda2d958b057fb", +"T2T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "24c722b37edb4d0f29674ee3c61e51d0b4395256d2e5602f281073594a1eb0df", +"T2T1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "a366d1c2790db0fd29c63859a5fb4af347251fa95128c0df4a17078a02706b4b", +"T2T1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "cb1f2cd526f48d97663b86b53a9762bc86cf46975a301d6d86addf2e7381197a", +"T2T1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "68d700c962e936e305a8167e9b31167465bbd858483ea5323b33c55bf8aa4019", +"T2T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "90bd344867f6c067f8b753c493fa12c1d79cd802a9eed2228d48e75a1ae9e763", +"T2T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "90bd344867f6c067f8b753c493fa12c1d79cd802a9eed2228d48e75a1ae9e763", +"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "fb7fd69702eccebaa8c9934a2b2774e80a79c2998593642b5139c4a5210f3814", +"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "fb7fd69702eccebaa8c9934a2b2774e80a79c2998593642b5139c4a5210f3814", +"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "e758192cbb59ae0790569904c1cd38c237372bf973e408600c038a21650a6ca2", +"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "e758192cbb59ae0790569904c1cd38c237372bf973e408600c038a21650a6ca2", +"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "56ece9c1766e57acc21a0aa9f52d225da7f71544d9045ecc5cdd4efa15e52313", +"T2T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "56ece9c1766e57acc21a0aa9f52d225da7f71544d9045ecc5cdd4efa15e52313", "T2T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "33d52f2589cb068cb1b86ba509a227659cec0b20707c875ea6561c977e06112e", "T2T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "a993bfcda273fedef3b3bd890d4e752bfac3a2ac0974d0736f85a6c62ceed267", "T2T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "e7edd1f1cbc26e23663eed486fdd374d92da0df6589b892325492425c243b532", @@ -6468,24 +6468,24 @@ "T2T1_en_test_msg_applysettings.py::test_set_brightness_negative": "8aa7c68cd09e700e8c6903dcfc39c4a66214481c12c34dc56762829478399b79", "T2T1_en_test_msg_applysettings.py::test_set_label[empty]": "628a9906a6f009a3666a35998b71caa2085623593e8672d9fcc335732fcb2d37", "T2T1_en_test_msg_applysettings.py::test_set_label[max_len]": "08181d6d327a1441f9be3418ebe25f2c7169ab561fccca86f738dd68ec256ec7", -"T2T1_en_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "c49a4143d0bbf27586fdd167b277d7c3909f274c5e3ac8038c2079a3fa224f6b", -"T2T1_en_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "c49a4143d0bbf27586fdd167b277d7c3909f274c5e3ac8038c2079a3fa224f6b", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "05b8703f3c7e9e54548c9a38a94f76f160c5699d3a3388523e86dda3b637200b", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "05b8703f3c7e9e54548c9a38a94f76f160c5699d3a3388523e86dda3b637200b", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "4275c73dbe88d089bcd8b8af38ecf64477198ddf995f03771ec6ba0d1bbb3851", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "4275c73dbe88d089bcd8b8af38ecf64477198ddf995f03771ec6ba0d1bbb3851", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "2e6e2e4fe1b684a800d74a7a4e2f0d22ccecad6f7f2b5635c3b5cd91727a9565", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "2e6e2e4fe1b684a800d74a7a4e2f0d22ccecad6f7f2b5635c3b5cd91727a9565", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "ef3a45281394fd41b8ffcc40724142cede85d0ce294ece33188d8370b51461aa", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "ef3a45281394fd41b8ffcc40724142cede85d0ce294ece33188d8370b51461aa", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "42a8b67a9dafa852af72bfbb174affba1cf006873077c35408eb33c21b70e835", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "42a8b67a9dafa852af72bfbb174affba1cf006873077c35408eb33c21b70e835", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "97a039ce474b2515d87bb748eb4b1987dc1af672ceef2ba3bf8214907d3ec970", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "97a039ce474b2515d87bb748eb4b1987dc1af672ceef2ba3bf8214907d3ec970", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "c06856494a14af75fa1b8313dcf641fc30cc3ba6e63509c9b188ca099c4368dc", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "c06856494a14af75fa1b8313dcf641fc30cc3ba6e63509c9b188ca099c4368dc", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "9c743e97ec888daf3a265a44c1e05d36c03c933539af8d29120997091477c776", -"T2T1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "9c743e97ec888daf3a265a44c1e05d36c03c933539af8d29120997091477c776", +"T2T1_en_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "30146ba5ff98bebea088ddc1263fdb6a1a0b848f78f396617d24baf362433d1b", +"T2T1_en_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "30146ba5ff98bebea088ddc1263fdb6a1a0b848f78f396617d24baf362433d1b", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "8a189bdaebbaa5791afac7d981af243fc4e4f7d966312585425c5873e492b148", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "8a189bdaebbaa5791afac7d981af243fc4e4f7d966312585425c5873e492b148", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "95ba61e64c4a311838e29f626e840a58aa98825f6476c0c5d4845a713a7894c1", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "95ba61e64c4a311838e29f626e840a58aa98825f6476c0c5d4845a713a7894c1", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "95c0d69ba4a27105d0cef0b0dc7cfeb1acb2f1b0dc80346f9bd7d69a800fd8c9", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "95c0d69ba4a27105d0cef0b0dc7cfeb1acb2f1b0dc80346f9bd7d69a800fd8c9", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "c3905c2b1491c3eb4445250a7f773c362dd001720be29069bea3430072a3f2e4", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "c3905c2b1491c3eb4445250a7f773c362dd001720be29069bea3430072a3f2e4", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "e6af35a6acb48b2ea7f8f41724e90617ce3e401a9ac248bcdf0426445f015f71", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "e6af35a6acb48b2ea7f8f41724e90617ce3e401a9ac248bcdf0426445f015f71", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "00c935fa1a9369f3b616ec5c4fe16a6e4fb7a39fa62c20ada96eecbd4593329f", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "00c935fa1a9369f3b616ec5c4fe16a6e4fb7a39fa62c20ada96eecbd4593329f", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "7c7ff52ab5b6c21e08ffa197c65e01f48115c6c7bbe19e4d308d2ff513e373e9", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "7c7ff52ab5b6c21e08ffa197c65e01f48115c6c7bbe19e4d308d2ff513e373e9", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "bbd0eec7258d3902fe661e6b6bb9691631b68f27ec5e7584312c454253acf321", +"T2T1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "bbd0eec7258d3902fe661e6b6bb9691631b68f27ec5e7584312c454253acf321", "T2T1_en_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "3106d22b3518e2cd671ba8ebc41c944068b72460a0ab6dfce61424cfa355f65e", "T2T1_en_test_msg_backup_device.py::test_no_backup_fails[Display]": "27354fec0c2803e9d46a3aef50a22cb6e6e5b4dfd8d788be63835ce513de5b4f", "T2T1_en_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "634f9f3e470cbd0d50ec07ae70dfabb69fe3b505ecb67ccb56f89d19580b05ba", @@ -6501,9 +6501,9 @@ "T2T1_en_test_msg_changepin_t2.py::test_set_failed": "e437fde2fea07f0deff2a429c4f12d3680762a1d1dd7463e7a211ca5c3436686", "T2T1_en_test_msg_changepin_t2.py::test_set_pin": "944bbaf7914a074f99fabc1744821689e22759a1c29d94695753148a4f07a69c", "T2T1_en_test_msg_delayed_ack.py::test_abort": "e65a3557c4f1d3ebd2e16c361b3851aa5c4f902ede28b60626fb48bdce714f28", -"T2T1_en_test_msg_delayed_ack.py::test_backup_no_acks": "b29dbaa021a4cc288b53ed9830c9291dc43219ae766be6557cefb29b75d92e4a", +"T2T1_en_test_msg_delayed_ack.py::test_backup_no_acks": "6f1624d09250ac72be9618d00f1b746cf433312ca973a02a6eec323a5b762d7c", "T2T1_en_test_msg_delayed_ack.py::test_delayed_ack": "e65a3557c4f1d3ebd2e16c361b3851aa5c4f902ede28b60626fb48bdce714f28", -"T2T1_en_test_msg_delayed_ack.py::test_setup_no_acks": "19307288dc82035be5cacf0fcaabe91b342b6f3284d1530349b781b1c7ae361f", +"T2T1_en_test_msg_delayed_ack.py::test_setup_no_acks": "7797ea097757fdf4838776b6be798f5e1088755e8703f2dd11b3880c9ee647d4", "T2T1_en_test_msg_loaddevice.py::test_load_device_1": "571d7a69e955b455ce947edbd90d7ae404afac736cddd02e17dfcc7830759117", "T2T1_en_test_msg_loaddevice.py::test_load_device_2": "a4bc906bbcb42d93a29b548e44ad82c91e09fa49b2423748328bb1d65b2a9c12", "T2T1_en_test_msg_loaddevice.py::test_load_device_slip39_advanced": "571d7a69e955b455ce947edbd90d7ae404afac736cddd02e17dfcc7830759117", @@ -6541,10 +6541,10 @@ "T2T1_en_test_protection_levels.py::test_unlocked": "7f0ae95ad6b7d0cad3b40d638b9d323d880640fd895a15b9be8cc7fa4d4649e0", "T2T1_en_test_protection_levels.py::test_verify_message_t2": "0080f1b013f28fe50c07b5752a9e8a0a994838c6bbfd70733f79b01c7d6ec0c0", "T2T1_en_test_protection_levels.py::test_wipe_device": "6bdbc57f1442f94a96f78c6052642547221ca08ff0f183eb8a74efb36710a681", -"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "0afa5d3f4cc00d434be413b9b82fdde70c44fbd51be44a78762df99b852fc862", -"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "67a3f7e6f1ea0cb971446cbf4fc09cefbd080d834297a623fd6551bf86f38fba", -"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "67a3f7e6f1ea0cb971446cbf4fc09cefbd080d834297a623fd6551bf86f38fba", -"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "da16bb7fec4650a98a7cf5f8517cab17fea64d399448f6225ec8ffccdb56149b", +"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "8173366a9d9600814c24214d79fabe92f3a6874c054f085ee9a13d97cb0b74e9", +"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "fbeaf527f0034fa64198cbb178a3a0340a74fada3dcbd664107f4ff310d15266", +"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "fbeaf527f0034fa64198cbb178a3a0340a74fada3dcbd664107f4ff310d15266", +"T2T1_en_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "a99db8d8e2995d0a1f238b84d9f4f78305ae4aa47ee685be36f6412cf37294a5", "T2T1_en_test_sdcard.py::test_sd_format": "1c0e37c8e38da56a979cf162475abeca84beb5095bd78024931bfd0163974327", "T2T1_en_test_sdcard.py::test_sd_no_format": "2723724828f549bfbdf0a5b7aa92b7df256e0eadb6b1f074fad824da8b398409", "T2T1_en_test_sdcard.py::test_sd_protect_lock[auto_lock]": "136227acaaef1c90cf7d1541fd406d589ed8f030f49300149c30d6dba932b09e", @@ -8024,34 +8024,34 @@ "T2T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "71a3db910b50cde0e2792e90db398b3e94c12bc8c793270b4e4c3542137669c4", "T2T1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "6dbcada6733ddf869e047e472e01430d88db5e274c9fd5ad4e644b8b02e79300", "T2T1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "3356469fbabe61757d7587f9641ca4dc5c14dc7f10f356d72545a0d9acb82467", -"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "382da9a9e0e76ef31f6a95ae8695e9158f9a6918204aaabf47581bd8d3150c10", -"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "99d90cc6f6da0019d8c1dca77638a369b836331a8c57756d1d641df6bd6d5538", -"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "5faffdedea44ae3d7c05ecddcccf90a2a2029e86e4a0b545a2b7864b2b66a5bf", -"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "e146b69c01f9ac528698ae6b045d6ec39a6904b8f3c3d646110a751dd86564e2", -"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "adf9e00e88895651c74fd63c6274919b80105e0c412d1e51466f33ef09cc326c", -"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "c1ea5698be4be45a30a7440d2760c025b9a7f74ecf2730fcc6183b181f533619", +"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "5d6fc4a189f821015e3560b3010fac90397b047c18d715343f8b50b9599ac508", +"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "3f8fae926f8608b3cac81e854739c983d4612c0c541f4e6d262143bd6166fc63", +"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "9177770cb45758cf3be208256e13d72242c874d0e8f56b8ef8521cd3e56ee412", +"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "9027c8de796d2b412dc5c4e43828dbb3ab11c78f5234ff8c770b6ad5f97ad4e4", +"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "d5181a66f8652585b43febc87a24542934cc7f76205f121b18207460a7c218d7", +"T2T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "e2f05cff1b244ce14ca39023c630d7382ee002c0e3c531e6ea2ff4ef9ad3f0ad", "T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "17d836396f272c01cafa175aa87b0c076aedf7698c935d1921c7d3d7e8911903", "T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "76301a89797012d189070184b85278278c058ea23856e7dfed34b81de2b25921", "T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "d75db248207dfd9cc002db41784f9a011a3379ece2a8b1048ae7ad618d1cc271", "T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "76301a89797012d189070184b85278278c058ea23856e7dfed34b81de2b25921", -"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "c9e6b26fd093c85366d87a87934f819e8e3703983cafbd6542e7f79f0f86018f", -"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "c9e6b26fd093c85366d87a87934f819e8e3703983cafbd6542e7f79f0f86018f", -"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "b06946d21a6ee555932bbeb167b54a9bfd5ee64459af8c1718bee32f273b8ecc", -"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "b06946d21a6ee555932bbeb167b54a9bfd5ee64459af8c1718bee32f273b8ecc", -"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "e83e7639ed48aae64b62dc4e87a84ad37520c1a14fecc6861441e0b335cb70bf", -"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "3148ad49fcb5a8d0556a86782f04a19613101334109b9a9aec13b92982cf4090", -"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "b96f021d8b6959cded3a232166efe5d249e73b3fc0c77eb8933faf7009721159", -"T2T1_es_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "c7f75f0edcc6244c2b8bb6da93aa10b5ccf4110753a666d86ee7f04a0d6082f8", -"T2T1_es_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "bf748add3a69f00a674c2c68e4cd9ebd2e4d98b957f69b62facf29f76f6f1b3a", -"T2T1_es_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "d13f5f84f896cf09e2213d92b05b5ee1abc0128b00315f987c6e4023f4d0ae5d", -"T2T1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "ff4e05fc12b97a987a534d4340143f5be15043d26cb0954ed11c74c0f9b78f35", -"T2T1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "ff4e05fc12b97a987a534d4340143f5be15043d26cb0954ed11c74c0f9b78f35", -"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "b951baae50e22cc7c7821862d439d01900f58dc6ab90f014a0f4348ff5408446", -"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "b951baae50e22cc7c7821862d439d01900f58dc6ab90f014a0f4348ff5408446", -"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "4e7ca604065a6ba56bd11a97ae140e1e2e7dde0d47d2088bf5748db6fe66ab79", -"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "4e7ca604065a6ba56bd11a97ae140e1e2e7dde0d47d2088bf5748db6fe66ab79", -"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "8a8f420f64f7d312981a6b16430e3af66dce8e400a0c10d8aeef4675495398d6", -"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "8a8f420f64f7d312981a6b16430e3af66dce8e400a0c10d8aeef4675495398d6", +"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "6a8ea582ce1150f2c2c8b9eb2381250355eaa27869445087e8c4daa813e7c6dd", +"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "6a8ea582ce1150f2c2c8b9eb2381250355eaa27869445087e8c4daa813e7c6dd", +"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "7e54acd153910817709169f6cbe7ba6bd5461db33edac5aab3fcb71ba8d08b74", +"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "7e54acd153910817709169f6cbe7ba6bd5461db33edac5aab3fcb71ba8d08b74", +"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "3a00371108bf55ff9363457264392681f31008e409f9fc0426b8bd3938fef2fc", +"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "17d915268ac30315fe6ac56aa361e83770217e96d38e7aed0bc7cba1c572266c", +"T2T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "0cfb96be9132fcfb8591ab747a27b93345bcdeed3bb377e3e1f9bc5cffbe0492", +"T2T1_es_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "abf923c54cc72dd4aaf1fe5734eaa0a5663ac2e50aa38626819f251e4ea35d68", +"T2T1_es_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "b71fbebe89b0a9f6a1f60484d80e6aeb6cf5686778c7fd478aa89c4f8c8c8844", +"T2T1_es_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "7eb3bd184a936d87f93c59e6fe50676c7a25a2308d2f7353d63cb1a3feb6b64e", +"T2T1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "c952b01eaa2267fa25defe9c777bcbc211307ec9b32c1decf15cab143bb01d49", +"T2T1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "c952b01eaa2267fa25defe9c777bcbc211307ec9b32c1decf15cab143bb01d49", +"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "a166d97ab40fdc3076046001940b903d56658e332293674246423cfc8740c9f5", +"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "a166d97ab40fdc3076046001940b903d56658e332293674246423cfc8740c9f5", +"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "5d538620108b6fd8ff75506cd500b865052eb3dc9a85642ecef9b5a64182cade", +"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "5d538620108b6fd8ff75506cd500b865052eb3dc9a85642ecef9b5a64182cade", +"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "9ce43394159760f88f0f58111965a7db20345c0f409c10583b3e3d75aa9511a8", +"T2T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "9ce43394159760f88f0f58111965a7db20345c0f409c10583b3e3d75aa9511a8", "T2T1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "03dd8d40f4e6791161350b9f147f3884d41c21a220547f9a44e6401d8fd63108", "T2T1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "71c4d4e873b3265293eabf343df3576e174baebd131ae73dcda26c567ca77e87", "T2T1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "d55561b0bb18c795b469b8b7f5950943bb43fd9b4bc5c3877d0f494e1f4fbe2b", @@ -8316,24 +8316,24 @@ "T2T1_es_test_msg_applysettings.py::test_set_brightness_negative": "17d836396f272c01cafa175aa87b0c076aedf7698c935d1921c7d3d7e8911903", "T2T1_es_test_msg_applysettings.py::test_set_label[empty]": "7fb1293d0d51648bc14fd894c523efac50d5d1a2844e6a689c5919bfe9d2b878", "T2T1_es_test_msg_applysettings.py::test_set_label[max_len]": "2e1197d8bd47a8bf7d784661d7bf790365b0a3b02b8a9f348abe40336338a122", -"T2T1_es_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "6e5816ed6d5144715443c4491c404b47e6ce0673994dcb37cbe3576c4a5c8b52", -"T2T1_es_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "6e5816ed6d5144715443c4491c404b47e6ce0673994dcb37cbe3576c4a5c8b52", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "4307e5ffe5edb4e72933c680fafa28d5fd39f3bf46fe3e6d3449c76cbbf714fb", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "4307e5ffe5edb4e72933c680fafa28d5fd39f3bf46fe3e6d3449c76cbbf714fb", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "683f9d150ed97ba42ff2484cd2d02a8f6ea43b91ef546f37822afb24275e61b6", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "683f9d150ed97ba42ff2484cd2d02a8f6ea43b91ef546f37822afb24275e61b6", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "1b2e36a19964c5a985c70d0aac7a562fffd426a78496bf540a4c3de242dea460", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "1b2e36a19964c5a985c70d0aac7a562fffd426a78496bf540a4c3de242dea460", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "2050287dc1371b015f6ef8a2a641661474296cd94edcbd6186ce3d8bf0ddc4cd", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "2050287dc1371b015f6ef8a2a641661474296cd94edcbd6186ce3d8bf0ddc4cd", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "e9b20bfb64675bc287db17149df669bc9d6c572a483859382070f3385fb78926", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "e9b20bfb64675bc287db17149df669bc9d6c572a483859382070f3385fb78926", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "fd26436315f4c8b9ad742a50e424fe9b24c0503cccb6a1e8de2e8cf685cc3d5e", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "fd26436315f4c8b9ad742a50e424fe9b24c0503cccb6a1e8de2e8cf685cc3d5e", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "7cc0b21d7ff6756b175bcc12f253bce5d81b848255cacd6c4977bd5445f8eeed", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "7cc0b21d7ff6756b175bcc12f253bce5d81b848255cacd6c4977bd5445f8eeed", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "eb969c8387be084cc2049666f5e8278fa588c71ef1ef32aab5b8c8f6f4c448aa", -"T2T1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "eb969c8387be084cc2049666f5e8278fa588c71ef1ef32aab5b8c8f6f4c448aa", +"T2T1_es_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "ed7aeab0c9dda9a8e0eebff625f8ab02b8c87e50e5c0b989ec20c2be52b30c1f", +"T2T1_es_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "ed7aeab0c9dda9a8e0eebff625f8ab02b8c87e50e5c0b989ec20c2be52b30c1f", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "c81dbef2e8d135f03c4050043d781b4dfd8fc7004e8d707db698145c78273232", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "c81dbef2e8d135f03c4050043d781b4dfd8fc7004e8d707db698145c78273232", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "bff12024c6fa76f60285369c72c7936d71ee6d4a6bd5d4c121ed2c4b86f944e7", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "bff12024c6fa76f60285369c72c7936d71ee6d4a6bd5d4c121ed2c4b86f944e7", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "90b902fac2c9de13e8bbeebeae70c36d6499582735c03e4a274b9cc82bf10ad8", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "90b902fac2c9de13e8bbeebeae70c36d6499582735c03e4a274b9cc82bf10ad8", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "c772daa1fe155df53c6b0f069cfcd6440d6c046fe159a0f6da27c612304c244b", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "c772daa1fe155df53c6b0f069cfcd6440d6c046fe159a0f6da27c612304c244b", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "2cb67bca2f50f0958cb06feef4f88eb7278c4fbd057d46eb79b3a4d85924c6b1", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "2cb67bca2f50f0958cb06feef4f88eb7278c4fbd057d46eb79b3a4d85924c6b1", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "9a3312c03969a4fbdb4df3d3844618e5f690e6f72611fa947df0096889f4c005", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "9a3312c03969a4fbdb4df3d3844618e5f690e6f72611fa947df0096889f4c005", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "498b7836b7235cb3396660c1cc93c9cb84535f021ad62cfe86d8ac45c16a1fe9", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "498b7836b7235cb3396660c1cc93c9cb84535f021ad62cfe86d8ac45c16a1fe9", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "f6c17208def15eb4298b576686a5bee9c9f8b07e65a777857349a6d9124b26e6", +"T2T1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "f6c17208def15eb4298b576686a5bee9c9f8b07e65a777857349a6d9124b26e6", "T2T1_es_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "4c4ecab1868b933593ceeacc7c00c8537b74c5a78fd0501cebea061075562c65", "T2T1_es_test_msg_backup_device.py::test_no_backup_fails[Display]": "7b8f07266dd89b51d94b32fb890876fdbce5646f8479c78051f20b9f4d311d42", "T2T1_es_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "a73ad6e3c6232cc6453066188c6187a9e79b1b6263cbeb328216e13a45ba5d0c", @@ -8349,9 +8349,9 @@ "T2T1_es_test_msg_changepin_t2.py::test_set_failed": "9f9f9b1af0479352d0ac66821edbac90bd6b5c0b84f62e728e2b9f3c1121582c", "T2T1_es_test_msg_changepin_t2.py::test_set_pin": "d51197152c6d0e14c4485de5d77815703dba6aab62c9089bd868949f648f0553", "T2T1_es_test_msg_delayed_ack.py::test_abort": "179ffbc4e0ac31fe8539db7e6156780e0c7fd02751b3b40447ca0256a3f8f307", -"T2T1_es_test_msg_delayed_ack.py::test_backup_no_acks": "d17bc7a4cfeb3c6fbe21042c2fcbf79105a787d8ec46574616da8a0019fab10e", +"T2T1_es_test_msg_delayed_ack.py::test_backup_no_acks": "a60f78cec48120ebf87f82bdf5ad94e6603976781a407e365ed573bc9d158996", "T2T1_es_test_msg_delayed_ack.py::test_delayed_ack": "179ffbc4e0ac31fe8539db7e6156780e0c7fd02751b3b40447ca0256a3f8f307", -"T2T1_es_test_msg_delayed_ack.py::test_setup_no_acks": "6bd75a6f6c0da5b1eeb5cbe0e2e6effcf7ea6cc00be68f27350d0352feb98b87", +"T2T1_es_test_msg_delayed_ack.py::test_setup_no_acks": "dee6196526fcdfb68aed58affa07d6d9bb5910dae5235eb29fd8d60b52f420c3", "T2T1_es_test_msg_loaddevice.py::test_load_device_1": "778ed8c1e736e385f67cbc254fb4328e0695eb019887a1227bbac993864f389a", "T2T1_es_test_msg_loaddevice.py::test_load_device_2": "58b99cbd42d23aaebbc8aa6c8c968ad08e33f4edadec955d3b1e21917580d026", "T2T1_es_test_msg_loaddevice.py::test_load_device_slip39_advanced": "778ed8c1e736e385f67cbc254fb4328e0695eb019887a1227bbac993864f389a", @@ -8389,10 +8389,10 @@ "T2T1_es_test_protection_levels.py::test_unlocked": "1cdccb565ec52bbb20f8a0f189b4ffdaa20a083be5083de87e89489ae9156500", "T2T1_es_test_protection_levels.py::test_verify_message_t2": "924d734af56b674a2f7914bbe3f287f4c1577397364226c28eb26ec39892678b", "T2T1_es_test_protection_levels.py::test_wipe_device": "2093dc26284bcf767937e5caa02418a79f8e952808f7ea47641a47869bdc05a9", -"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "a02213b3e16c5ea816381e3a05107cdf526b15a0faa68d7458cda9769646ab5e", -"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "61841fb22c6962bfa0c27936d0e06ffd9c54e350a856e73f83a3e52e7ab1cd58", -"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "61841fb22c6962bfa0c27936d0e06ffd9c54e350a856e73f83a3e52e7ab1cd58", -"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "21dabf54eab987e6e12e77ddca7936a599dbc4f527fb494d89fa7a8b51bce3bf", +"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "47f27985d5cb77830f37f936aec5b127e3eb4fd427466a6e3d4a568ee8ed6481", +"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "073f5433a5591fdc4c6e4e096e4cd24c1ade71f29e8bdbd78c63ae80c86a5d8a", +"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "073f5433a5591fdc4c6e4e096e4cd24c1ade71f29e8bdbd78c63ae80c86a5d8a", +"T2T1_es_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "5dd03c783bda57ea30ffec3c12ed15ca0e279a804bc6e810afaee1e6df965531", "T2T1_es_test_sdcard.py::test_sd_format": "87a00f8c368a651b1ecb7188e0c86e2fd7fb02e3ae69dfae365b27da6512bd50", "T2T1_es_test_sdcard.py::test_sd_no_format": "caa3381188b898aafd2af1d218c5ea4f2a45bb8ba38cd68272042f926a544fcf", "T2T1_es_test_sdcard.py::test_sd_protect_lock[auto_lock]": "199186a825f5beaedc887580b36fd7e39a508c085b53848a559cf76fdcebcad0", @@ -9854,34 +9854,34 @@ "T2T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "ba885461ae4bd4d8f8c5b6eed44dd204dc1fe7dc068a348c22fb5ac5da760ea8", "T2T1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "b158ed66ee43c2b52abea4f7c1544231c6aa6fb80e51d60da62a1d0c6179984a", "T2T1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "f08f51fa50ee570269dea3743b297b943d789d3bcad304800e07c9d74776b109", -"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "d4d76ea819ad259af2fd1e7a4ae6d4a3baeb048ac48ca53579f40a8ced5d4e04", -"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "733317659d6adafd489c7796d1b58481dc3522c98f2b81205786d9b2c668f292", -"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "2d7bf340a04a9e329dd96c02c0868108569a6f8707a7bf61182efee781977002", -"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "163d939eaa593a58e1b8c61c00b2324887cd03e7719641da6238419219a578f1", -"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "aa248daafd87ba8fd6d294f7c4a245d07a116fadb62164c5dbbc87e29bb06422", -"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "b9f503c1f381ffa1132776678f908a2a960c8e0c4af0c276182c81abf82b4fba", +"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "6470bd4dd51ad03bedcf4a9e9d53930943a71932719acfd0414d19a5cf3fa628", +"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "a2bb18d422ce5ee60e6ac362ce829076ff7cee6cc5730d8de47273e264a5e170", +"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "db4f1b365f62973ea25048fd41a08b6a3ae6460c1cb5825d0b210ab8bfbbb3bd", +"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "5f7aea8834322159b25aa724145f29d56274540048590cabffcb481e026a1028", +"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "6a3310d54bf5d5f8c890312f4e572ca8fa21a00cf6d9a8dfd38621c6f59d323e", +"T2T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "dcd41552f2783d673aa2a04acbf5c54bc1a45d0f66b25d9f0eaaff4882c3952c", "T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "7e5a99a4b6aad4cdf7a9f9aecf483faa381108ee2108efaba88f261e29ac1f8a", "T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "03714da593d57c2adbbb023d3ac0279257084ab515f2ec09aaa9ae1bfeee6f83", "T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "f5cc4f90565460604a0fa70c34907c2ead1ca35efd4d4bc99451adf0edcb5c2c", "T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "03714da593d57c2adbbb023d3ac0279257084ab515f2ec09aaa9ae1bfeee6f83", -"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "2a734f3f3b09c640d40d2f6f7e362670a3a8a24031a32eaadcb7a535a6ce1d21", -"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "2a734f3f3b09c640d40d2f6f7e362670a3a8a24031a32eaadcb7a535a6ce1d21", -"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "36c0352e62be50d0f07f615cf4c412148f36fac8c73a57fc48c41990949aac44", -"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "36c0352e62be50d0f07f615cf4c412148f36fac8c73a57fc48c41990949aac44", -"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "107359024ca978c895a2969d6dd6a782a7d20282111edbae2a2cacf68dee63df", -"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "262773bbb49033b6ee5e80bd50250b19af84127740188b9cd07e43cbb0fcc1a2", -"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "04c6925dad9bc8c0794d08c209419a5a4a9248b196f4b1a59c8a10f6eeffce46", -"T2T1_fr_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "9c47709dd83bc9b69ed5593e84945c7a715d4f58a195f2d5d8cc222cee8907d0", -"T2T1_fr_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "98a41783e2dbbfd7904c5a2353f755a6c3ed53e49cccd5ad08674bbd8a35406c", -"T2T1_fr_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "9253625f19b94143c3155c38245b5e899be44c8a72f6ff1dd97733fede60a8b6", -"T2T1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "6a17935049d37efda45779076d294ea584819e10966d77a6b15aeb1c4b7ff31f", -"T2T1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "6a17935049d37efda45779076d294ea584819e10966d77a6b15aeb1c4b7ff31f", -"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "ae89804b6df4f88ba93c9096ef29023d63a3ebf2cd89515871e3d6d5324a4212", -"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "ae89804b6df4f88ba93c9096ef29023d63a3ebf2cd89515871e3d6d5324a4212", -"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "7360c8affacee62186aa8534e487b6168830bcdbcf71a78cc15b53977799a21b", -"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "7360c8affacee62186aa8534e487b6168830bcdbcf71a78cc15b53977799a21b", -"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "51c95f06919949a926e5765e765ab1cbdd8eb7f681afa921c579153ecfefda0e", -"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "51c95f06919949a926e5765e765ab1cbdd8eb7f681afa921c579153ecfefda0e", +"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "81784aa387e862441569a2b5f288074550197f22e35feffabd89a1bd794d9271", +"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "81784aa387e862441569a2b5f288074550197f22e35feffabd89a1bd794d9271", +"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "b7602f901aef361fb4b3355270ecdbb418c7fcfb41730bf86dfa14d50a13843d", +"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "b7602f901aef361fb4b3355270ecdbb418c7fcfb41730bf86dfa14d50a13843d", +"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "827a8fd8fb4dd7e0cd22b713daaa6b154f48b3be6f350ccc091ac12a360b88d3", +"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "6d4664b1ddf62723eafcbfa15be36028429ac0074a94bc2dacb7e89e5cecaebd", +"T2T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "f06ab8d70e2e4734ba73e809b612af27a790d5ab94ffd4821ed6a3436486552a", +"T2T1_fr_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "2f10438e486796fe379099269a12aaf489603de2a21a85de8ce0bc3fd9f1cfed", +"T2T1_fr_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "277625c52193a30c47667c47537ebf0100965167650171be44f84cdc7a6fc3b4", +"T2T1_fr_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "da8f2452f72fd471502dece142d923f9e14c0629f3f4a037ddc0e14ebd2f9b63", +"T2T1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "aeed1fbc296f972a3e7ce0c4d17cb835608a14d0d5347d1d65e04d650427f9b3", +"T2T1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "aeed1fbc296f972a3e7ce0c4d17cb835608a14d0d5347d1d65e04d650427f9b3", +"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "ad942da205917f9a4e77f821e183453d78372478889858212d5c876c6ddd2949", +"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "ad942da205917f9a4e77f821e183453d78372478889858212d5c876c6ddd2949", +"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "f4fa3b9fbc607002a84bd5d5908071f35a799157d91a2d2410f4ef03cdcf62aa", +"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "f4fa3b9fbc607002a84bd5d5908071f35a799157d91a2d2410f4ef03cdcf62aa", +"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "4ad85279d8d34c4029528189306d2cd7f3a4cf05ac4e4f06693f8e3d3ba704ab", +"T2T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "4ad85279d8d34c4029528189306d2cd7f3a4cf05ac4e4f06693f8e3d3ba704ab", "T2T1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "cccdd9c4860e64d9823a695502a966aa68be4d44f209bf7c3b80e230f1c2f758", "T2T1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "5aef3b7a2f109fce2d691bb161e1da2515512b5c848b23d739ac6f34eb1e207b", "T2T1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "014645d4af07e95e5e6317c7dd59118c1099910978b5d074cd0d2facd22d3a6a", @@ -10146,24 +10146,24 @@ "T2T1_fr_test_msg_applysettings.py::test_set_brightness_negative": "7e5a99a4b6aad4cdf7a9f9aecf483faa381108ee2108efaba88f261e29ac1f8a", "T2T1_fr_test_msg_applysettings.py::test_set_label[empty]": "0581d88e5cb456602d66da0599c07940efba803af0166dcf9335e679299e3d4a", "T2T1_fr_test_msg_applysettings.py::test_set_label[max_len]": "98b67d8aae274f3fea20cf4ba2b0f7cc3a1002b8355a95066c83dc1865778275", -"T2T1_fr_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "2ab9c9a6c76b502caa19300c0c16a0088673fb212a7d600eeb892a0729e0bc71", -"T2T1_fr_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "2ab9c9a6c76b502caa19300c0c16a0088673fb212a7d600eeb892a0729e0bc71", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "dc511a8d8f8711d318c3a2b57920bbb1329924a7d4b08c5e0260f76ae54b60f6", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "dc511a8d8f8711d318c3a2b57920bbb1329924a7d4b08c5e0260f76ae54b60f6", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "ac9a4f64a307f364184ea5e0e3de727f86168e361413512d6de13694b9458ebf", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "ac9a4f64a307f364184ea5e0e3de727f86168e361413512d6de13694b9458ebf", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "62607b8c500731bb50d4c7f4a899496ea6b31211f823d69b7fbc8190e6270611", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "62607b8c500731bb50d4c7f4a899496ea6b31211f823d69b7fbc8190e6270611", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "2bc7fccca857f8a9530578e5e8e0fb75c78ce18bb75765a9c4c994f40b6bc911", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "2bc7fccca857f8a9530578e5e8e0fb75c78ce18bb75765a9c4c994f40b6bc911", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "f7baf52bbb5754688177e3ab30d741644e35882a6f816c605880733d61db501a", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "f7baf52bbb5754688177e3ab30d741644e35882a6f816c605880733d61db501a", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "f2e10cea1edc63fa3bdbd3952f4e5aee2c112bd483a721f81f66d586bfde7d5d", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "f2e10cea1edc63fa3bdbd3952f4e5aee2c112bd483a721f81f66d586bfde7d5d", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "ad703afc2a29edf85dc41547a0d9065672443bd6fc4fe1e0c65f4f765c7d4e3d", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "ad703afc2a29edf85dc41547a0d9065672443bd6fc4fe1e0c65f4f765c7d4e3d", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "10fe2e609b0dcc91ec88b62aa0d107b21c544ac49780fc64b8b8f493902644d8", -"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "10fe2e609b0dcc91ec88b62aa0d107b21c544ac49780fc64b8b8f493902644d8", +"T2T1_fr_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "72b1dc643743e2d5f2c70dafadb236eca691eb36d8bfbcb60584e1034bdaede3", +"T2T1_fr_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "72b1dc643743e2d5f2c70dafadb236eca691eb36d8bfbcb60584e1034bdaede3", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "f2d7b3ba30092023dc40db70454696420b674abac3515565c59e1105a1951995", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "f2d7b3ba30092023dc40db70454696420b674abac3515565c59e1105a1951995", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "372fc2aca455f69bd77e047dc9cab504e62899da818d28d1420fd3c09d53dda2", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "372fc2aca455f69bd77e047dc9cab504e62899da818d28d1420fd3c09d53dda2", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "21b743e874366cceeaaf3e4450f15cd57c84156770ed82c81a3850bef4c0aaf5", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "21b743e874366cceeaaf3e4450f15cd57c84156770ed82c81a3850bef4c0aaf5", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "127555e79ba4c36c458d1604ca8d7fbbf7314695948050b8459ad24995c0e861", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "127555e79ba4c36c458d1604ca8d7fbbf7314695948050b8459ad24995c0e861", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "ee7584fb9a52dd15338bf61f48a2cc3bba02f9f0a7786f6c32791706c78de3e5", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "ee7584fb9a52dd15338bf61f48a2cc3bba02f9f0a7786f6c32791706c78de3e5", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "1f4fbcf4bc731afefe8596e3183b01327f241851251cdb767c616f9039bc8823", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "1f4fbcf4bc731afefe8596e3183b01327f241851251cdb767c616f9039bc8823", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "02113d9f0e3871f593bf868ff960b9804ba662d01c9adf3b7aa8b0056b7958c6", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "02113d9f0e3871f593bf868ff960b9804ba662d01c9adf3b7aa8b0056b7958c6", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "89795da7da2abee8e41ca9a6f8d6868ff4bfa7caf5eb6863ea9af75571aaf640", +"T2T1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "89795da7da2abee8e41ca9a6f8d6868ff4bfa7caf5eb6863ea9af75571aaf640", "T2T1_fr_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "55a13f5fea4196e85805604581edd8154fc36ea4da3f0005dbe9b0707f8b38f7", "T2T1_fr_test_msg_backup_device.py::test_no_backup_fails[Display]": "d16ace837401a2bd0b3aba02959723f7aaaaa82a92d5d9e9a58bab25b0db7f6b", "T2T1_fr_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "acbbf8192bb107730bb7b4d7ed36c464d42776aa1ab41d354f81615059a81fe8", @@ -10179,9 +10179,9 @@ "T2T1_fr_test_msg_changepin_t2.py::test_set_failed": "1697dbe814e1e74caf4162478aeb6434b2b5510c698dcdd0941c4b50f4135e32", "T2T1_fr_test_msg_changepin_t2.py::test_set_pin": "82dd0cb1a91c0f8fadf1a391a8d91df3a0b67731aefd6081bbfc2ac1a3bc3eca", "T2T1_fr_test_msg_delayed_ack.py::test_abort": "6e606ade5212289a9177f587110144f5398878007f28014e040e29c45abfa749", -"T2T1_fr_test_msg_delayed_ack.py::test_backup_no_acks": "a33a2daa50a6f3f915e9da4d72b3c6724dd6956d2b28acd05d0a7588014c4000", +"T2T1_fr_test_msg_delayed_ack.py::test_backup_no_acks": "6b9d80ed2ee69c485b14185eaae7801d6c694fd2b0c76dfeb8b27bfefa233d65", "T2T1_fr_test_msg_delayed_ack.py::test_delayed_ack": "6e606ade5212289a9177f587110144f5398878007f28014e040e29c45abfa749", -"T2T1_fr_test_msg_delayed_ack.py::test_setup_no_acks": "117efce6cb34b542230648df4c4422497b5ee3e72ebb4b00eebac21d8ab5f3ac", +"T2T1_fr_test_msg_delayed_ack.py::test_setup_no_acks": "ab25e47e4a77664f1144809112705b6376c725584f908063b43b8d5fa5080300", "T2T1_fr_test_msg_loaddevice.py::test_load_device_1": "3a564051444030a02950a089ef9c3093f8875da5a9b48988b698f8c5e641f2d5", "T2T1_fr_test_msg_loaddevice.py::test_load_device_2": "95a7c9f05230fd14b529ed7b17e259bbd820e6cfa92dd5836e421c35b87054f5", "T2T1_fr_test_msg_loaddevice.py::test_load_device_slip39_advanced": "3a564051444030a02950a089ef9c3093f8875da5a9b48988b698f8c5e641f2d5", @@ -10219,10 +10219,10 @@ "T2T1_fr_test_protection_levels.py::test_unlocked": "77bea3ffea7fffa792192d997614d7a170f2d7e7ae5e3d0a6a51caf05bbb327c", "T2T1_fr_test_protection_levels.py::test_verify_message_t2": "24d6cffd74f27c9243c53fc60d44b550cada6218d6b5d84e2d3281a22c87b797", "T2T1_fr_test_protection_levels.py::test_wipe_device": "6b0c82b66d52745baee7d960c30ee57a63f1c4098263a53a9849f6551b33d2d4", -"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "5f9b0cd16599bc3ced5fc3bff04d218c0abb16ec89682a5c4d4bb0423fdec2dd", -"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "00f88e52d82a94dd2f731d3d7f20c1aae874fff55e6717e2248d3bf9973cbbfb", -"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "00f88e52d82a94dd2f731d3d7f20c1aae874fff55e6717e2248d3bf9973cbbfb", -"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "ae864a4ab950cff568267665ce6c5ea428db6696b3fe2044cd241186446b9b8f", +"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "a040f9a446eb4e7e298671739dbb37384aedd19535e9d98ba25543eb41dd9069", +"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "7a6ebf9fced3fa203febc14cd87d52d15d7e350c090fb43e3205b6f762b3239c", +"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "7a6ebf9fced3fa203febc14cd87d52d15d7e350c090fb43e3205b6f762b3239c", +"T2T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "da9af6937dfd0f0d3a3df8277efc8b80f32000c1e77bbbd2b32be28dbf30258d", "T2T1_fr_test_sdcard.py::test_sd_format": "ce8d163d8d9d7652b630d6a0d97d3854693d2e8b9a7bab36e0f6bdf9d7964569", "T2T1_fr_test_sdcard.py::test_sd_no_format": "465bced83168bf8f98d45bcfd8f5a8dc51ef924ed0d5c3bf646ae1606fab4ccc", "T2T1_fr_test_sdcard.py::test_sd_protect_lock[auto_lock]": "d899e674b9986ac2c2eb8a35abd3d44b7e1076db832ba99e1d967dab2111e047", @@ -11684,34 +11684,34 @@ "T2T1_pt_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "94523c332136b0520360938191698998ee6d629b3f4a628415b350b2fbaf324c", "T2T1_pt_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "73fd8ad61a4f3837c7df61b859dd8163f5f3e2a77793b47710755cd5ff7d33ce", "T2T1_pt_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "001cda5da750492f6a482a642a522d2e6b21bc26770c6e44cd469b9b1dbceb85", -"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "e19d09095c17cffcbd4a7734c21538e3a13ae24fbe2f7b75c65e9b3a6e38ef08", -"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "28ecd7c962d261a05171464bc96a09c326dcadd04f6719cccf691ad1fc9b3beb", -"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "ea4580c556c0767a0a89017ebfb7e447ecf7f9a3ecc969071183894c181afecc", -"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "a0e2b9748eceab304502cf2c5bde7fcdadfe2379c6a55b2abb313b77a8f820ed", -"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "a3e0a1d0b0ca39530b1bc5b555df5c768c12aa1784c5f835bf55273d3e26c7d0", -"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "f6b9b64aa3a5621c6f42f7e57b06096d665376c08bac8411aa709193bcca86bd", +"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "211475e2a82f7a98f544e658787209c44e2c0895e042e4fcc73159bb4a17198e", +"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "6e0756ab23fefe6583520336651901a6ebc0d885060fa7c321cf0d6f539fd812", +"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "2de26b7f0d8677e32ee266844c93d745ceb2a1dd2ff77818505b7ac39776fb86", +"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "3f1384b4ec4a17802bcfa9cd12c1081d9c6720fdaae4dc7b2b9a406ab57c5ffb", +"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "02c5780e22c0297b78c5b36553ee3155f16a3ddc259e3b8c87b7cc67d33fa748", +"T2T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "d884a16c64818eaa9e7e9afc73f4a1305230a44063c0a1dfd42d7d99d048cf61", "T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "020b255e04b59e53d2aa87ae960038f4538d350de28df15a1ac41b376e9d04f2", "T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "b1e8f5cdcd2056f7da5d4dcae9bbaaf9a5dd25213c678c36ba00e2d17995769e", "T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "9345a044a923d37e26e310ebb7b29bd998f47fbad640953815330eed42d79059", "T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "b1e8f5cdcd2056f7da5d4dcae9bbaaf9a5dd25213c678c36ba00e2d17995769e", -"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "3068b784a14a7a17c67e3e5ab4c906b5a25fc4fc2573b5d416ad7a6cd6883bc3", -"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "3068b784a14a7a17c67e3e5ab4c906b5a25fc4fc2573b5d416ad7a6cd6883bc3", -"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "8b122ad3821e0005d633a6d77125f7aca85877562f21bacc5388bd4e53a77ae7", -"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "8b122ad3821e0005d633a6d77125f7aca85877562f21bacc5388bd4e53a77ae7", -"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "3fee63286ed692cee4180a733c990f308aa7e874d8643b1ba8f1ff35871c55f3", -"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "663af6f47e307169d72659159fd3b6e2f9fd57baf18357778840d6b8fe084b6a", -"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "3bbda0efa953d982069fd0256f2aab1651c8a44c8697b8a256583b41f7ff63c8", -"T2T1_pt_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "3eccc7a8b15eb7fc121a66153535dd1c907d97cadb5e56e14a6a4803c8deffae", -"T2T1_pt_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "a92df77931eb395b71a947b25c2ef9885541cf817a6937b5a4cc0ceed85304db", -"T2T1_pt_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "7042b559c19083415d859220eef0f839b1f3f56ffd8ac04e32d098e51be7bdc1", -"T2T1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "33223ed96268685441f5de331c4608006465bf809bdeed1f7ca3f9b15c33bfa9", -"T2T1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "33223ed96268685441f5de331c4608006465bf809bdeed1f7ca3f9b15c33bfa9", -"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "73b8d085b38fc4622e467b9f941d4610d22ed2ae9728652a1350486870b21244", -"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "73b8d085b38fc4622e467b9f941d4610d22ed2ae9728652a1350486870b21244", -"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "17b8e14bf8bd222db46e3bd38d5300726385466e2d724644221d7f32881d401d", -"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "17b8e14bf8bd222db46e3bd38d5300726385466e2d724644221d7f32881d401d", -"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "c060a210c7b73dfec2776c4899661aa495db9b0cbee2f9d06ba496553f2af302", -"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "c060a210c7b73dfec2776c4899661aa495db9b0cbee2f9d06ba496553f2af302", +"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "e8b199adf20e192c2a6914f1b1d35e5dd5192d51c591d3fcc489dfbccfc3f668", +"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "e8b199adf20e192c2a6914f1b1d35e5dd5192d51c591d3fcc489dfbccfc3f668", +"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "b243686abe691f2d6e329eec27946690eb0dd9196c1aec1de51cae0349e11144", +"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "b243686abe691f2d6e329eec27946690eb0dd9196c1aec1de51cae0349e11144", +"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "6278fde7b27c140bdc9a06438c49d18dc9f3a56c6d71f7dd31418c01728ed313", +"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "b6667948bafb170ed402c625709ea17abee6e681650200591802088fb5ca949d", +"T2T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "1ae4591042bc847f0a9b28dbf880f6de035b42051d8344c27e16d88ff1cba6e2", +"T2T1_pt_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "9aae617eb4b4272ce03600a67993a170cb5790a618be27d9fa88d18be23fd2af", +"T2T1_pt_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "2ffc61e55975b1317390860a4bc885e8d96a8aa11028303c687d4ab80a8993e1", +"T2T1_pt_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "be2b22bbd82b2df4991a4112fc461bfdf49a713048838176e7e901d9a3e108b8", +"T2T1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "45cfd0b3ebb8176e7265aaa9a05cf773bd8eb0a38a9c0a9f1639f5a75d84b8c2", +"T2T1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "45cfd0b3ebb8176e7265aaa9a05cf773bd8eb0a38a9c0a9f1639f5a75d84b8c2", +"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "3dafd0cfc53dc0ddab6fa599b55578e3a2e7260acb1879605b83e877d91ae6bb", +"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "3dafd0cfc53dc0ddab6fa599b55578e3a2e7260acb1879605b83e877d91ae6bb", +"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "bb1f81697b624fb3a1fa2d9f29a136edf85a64ad98d7e4aa156e19121b80df17", +"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "bb1f81697b624fb3a1fa2d9f29a136edf85a64ad98d7e4aa156e19121b80df17", +"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "f84d1f762d61425a62e549204f7961753cbbd4624db6dc7bd26c297012490efb", +"T2T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "f84d1f762d61425a62e549204f7961753cbbd4624db6dc7bd26c297012490efb", "T2T1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "15e12f26657abbf90d3d742a550b0474df403a477cea5a212652f9790a09b31a", "T2T1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "6b793d94f00e47b835cc540dfab52efa4e4001d1f9f59c9fa0345ec51e2ee2ef", "T2T1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "0dfad14b40b48fcd81c3ad42d799f9baafba83d6fb70a01ccf13b35e0d737728", @@ -11976,24 +11976,24 @@ "T2T1_pt_test_msg_applysettings.py::test_set_brightness_negative": "020b255e04b59e53d2aa87ae960038f4538d350de28df15a1ac41b376e9d04f2", "T2T1_pt_test_msg_applysettings.py::test_set_label[empty]": "1d33c0e1a0032a8b55a3833cf77d754d71aa4901100681f01ca72aadacb643cf", "T2T1_pt_test_msg_applysettings.py::test_set_label[max_len]": "3cb2311e5d96ae123028fc20e0663095560749254ad4a109d482fc71eb093888", -"T2T1_pt_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "b5943968aaba779bc364e38e3d115ee1d3f024e8b6d1e20bff8b35b9c228c7eb", -"T2T1_pt_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "b5943968aaba779bc364e38e3d115ee1d3f024e8b6d1e20bff8b35b9c228c7eb", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "730868b08fd1266eadaad393468eaa00951f831d861040efc79e144f85b799c4", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "730868b08fd1266eadaad393468eaa00951f831d861040efc79e144f85b799c4", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "1fcae1a6f12080fbf106c4c62a9c207c36adc1d96efa7ad2eb6986c26e70b1ea", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "1fcae1a6f12080fbf106c4c62a9c207c36adc1d96efa7ad2eb6986c26e70b1ea", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "11b86d846547268bffa15fee1a029cbb1ff3f901df620efc44140de52c537108", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "11b86d846547268bffa15fee1a029cbb1ff3f901df620efc44140de52c537108", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "c6baf3839fd12fafda7cae456caccd67d321ad8825d50f157b8d04586fb72c66", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "c6baf3839fd12fafda7cae456caccd67d321ad8825d50f157b8d04586fb72c66", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "dec65fe082302cfedafa667cf09b4b06e58d9c3a83c13ac3b89d362fc510349e", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "dec65fe082302cfedafa667cf09b4b06e58d9c3a83c13ac3b89d362fc510349e", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "3838e88ab5880a94aa37a8e7c271a21b5cd81bdc7d1b6e495b7229135cbf170a", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "3838e88ab5880a94aa37a8e7c271a21b5cd81bdc7d1b6e495b7229135cbf170a", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "edb076f3684216401b06c5bcc50d538cf1ca4bb0384c510116cdbf8080eac03b", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "edb076f3684216401b06c5bcc50d538cf1ca4bb0384c510116cdbf8080eac03b", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "45b6af564324c485dbea43cc64987d4a14669ea845707a35f67701d332da0263", -"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "45b6af564324c485dbea43cc64987d4a14669ea845707a35f67701d332da0263", +"T2T1_pt_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "685ce195708b6a3b491f66db183d7ebc236e7d29ef3812a225611f7b76c85aac", +"T2T1_pt_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "685ce195708b6a3b491f66db183d7ebc236e7d29ef3812a225611f7b76c85aac", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "5e8fd96e5cec314b3c4a8daf0f691afb364982cff2b5f3012dfe06b3cf3a70ff", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "5e8fd96e5cec314b3c4a8daf0f691afb364982cff2b5f3012dfe06b3cf3a70ff", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "89243cbff8ae3b2c375243a9fe471608bd27e903b24e4e90843600ab8febc4b7", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "89243cbff8ae3b2c375243a9fe471608bd27e903b24e4e90843600ab8febc4b7", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "7272409211d3943ab5ef114516f457cf60e29b8d71599a4bf99fbeb92b273ec8", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "7272409211d3943ab5ef114516f457cf60e29b8d71599a4bf99fbeb92b273ec8", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "fbb6147ef492ed937ea8251615962a2e0ee19f5beee796bf9cd88d634bd6e12e", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "fbb6147ef492ed937ea8251615962a2e0ee19f5beee796bf9cd88d634bd6e12e", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "35d2460280b26cbbb909ed9b89955de64c24721323b1c18d6108896fe05c08ab", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "35d2460280b26cbbb909ed9b89955de64c24721323b1c18d6108896fe05c08ab", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "b07c4bc89c550811c1e1f9c39bf1a46430f82ae947379f35baee8143cefa6458", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "b07c4bc89c550811c1e1f9c39bf1a46430f82ae947379f35baee8143cefa6458", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "55aa146802c985acc7c70c47b97c6385b062d777da45428cb62a9d51f7fac002", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "55aa146802c985acc7c70c47b97c6385b062d777da45428cb62a9d51f7fac002", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "4e6c65f87b431c8b56a04eb47ea7b35ce89282852e7b283435ce563105cf156b", +"T2T1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "4e6c65f87b431c8b56a04eb47ea7b35ce89282852e7b283435ce563105cf156b", "T2T1_pt_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "599a443d46c6ed90a42443ca584559d2834e85110a827652c895e368f4e8970c", "T2T1_pt_test_msg_backup_device.py::test_no_backup_fails[Display]": "4f307e86a1054d1f8f445e105b461f5195288b49d61b05c6f90de8471ab4d6ac", "T2T1_pt_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "f58b84a305794115a3e3d08e16423588fda04a028f03237a152726198418859f", @@ -12009,9 +12009,9 @@ "T2T1_pt_test_msg_changepin_t2.py::test_set_failed": "0dfd2310effc3596d52313851757a41b588c621d6e6e67354c7ebed42b4d0daa", "T2T1_pt_test_msg_changepin_t2.py::test_set_pin": "e55c4b8449b29ff5772e8938466233e6897e1a3f6f0e136778c24303ff2236a5", "T2T1_pt_test_msg_delayed_ack.py::test_abort": "73f74edf5ab8e75ddce36400168b9c20ef060de149d13f57fac4fcda6421bbfb", -"T2T1_pt_test_msg_delayed_ack.py::test_backup_no_acks": "dc69e280ce79717d3b70fccf3971626969e065f31bae6ae373e56acb3b7e5230", +"T2T1_pt_test_msg_delayed_ack.py::test_backup_no_acks": "9e0de04b3ad9b396faee6a4daed07a3f10a486328373043fe15ab6e91f38d984", "T2T1_pt_test_msg_delayed_ack.py::test_delayed_ack": "73f74edf5ab8e75ddce36400168b9c20ef060de149d13f57fac4fcda6421bbfb", -"T2T1_pt_test_msg_delayed_ack.py::test_setup_no_acks": "1a5228c4a2a5b0d7a57d59c928417e5ffe70ba49fba648f97a3b812c88944e1c", +"T2T1_pt_test_msg_delayed_ack.py::test_setup_no_acks": "c6df540feada2e6bb3f752d000d09b38422ab3a490ce2022732ce86f1781b890", "T2T1_pt_test_msg_loaddevice.py::test_load_device_1": "fcdb7d6428f3d784b712a6c08b17045035b9bf5fa927654b99a0a1b78d877872", "T2T1_pt_test_msg_loaddevice.py::test_load_device_2": "4d1baf35772681467ce93524dee188500116f3fd1832e69f12ff5ec63fbcbac9", "T2T1_pt_test_msg_loaddevice.py::test_load_device_slip39_advanced": "fcdb7d6428f3d784b712a6c08b17045035b9bf5fa927654b99a0a1b78d877872", @@ -12049,10 +12049,10 @@ "T2T1_pt_test_protection_levels.py::test_unlocked": "bcd65e8bdb42f5a9313177831a88314aed9809e6512b051cea487b055e58bcb5", "T2T1_pt_test_protection_levels.py::test_verify_message_t2": "2af558e1c49f3fc84988d4b927b85eeb3ced0c57649c984901965702d96f2335", "T2T1_pt_test_protection_levels.py::test_wipe_device": "5d0639af34e803f9f22b1c7138b519b90ecd564a53763ce5a76b0152f515853e", -"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "8c33aee5f83cf13b1a09fffe1b9087d9a1048333f2cbe4614df2a6af1b1d23f6", -"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "c29f0677fdb2c139d1bb79003d7c3f7b67d4244ec14f94144101f2410b9cf638", -"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "c29f0677fdb2c139d1bb79003d7c3f7b67d4244ec14f94144101f2410b9cf638", -"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "ad3cb21c40ea8b215002de7fbdbf9ed56fea08c4c671cbc59f4763f3741bb869", +"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "ec05fa320663b2d339f81d189a7bd1a4012c42b70c5495afbdf473d281860687", +"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "88d70c88ccdb58847eac9da22a84e8dd702b3ee6be171968b7b827b9fac3f8c3", +"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "88d70c88ccdb58847eac9da22a84e8dd702b3ee6be171968b7b827b9fac3f8c3", +"T2T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "3ba5c9cc5c11fbd205f82f1f6a8112ee09353f3317f397056524711573fa99d9", "T2T1_pt_test_sdcard.py::test_sd_format": "d0bd45c207748bde0f9abb907a7c29dd6e5b2d3c705736974e3edffa7bab07b1", "T2T1_pt_test_sdcard.py::test_sd_no_format": "4b4710abc107b9dda7b35d2b58e8e549e4332c00694b191aa7f6001992e63c2f", "T2T1_pt_test_sdcard.py::test_sd_protect_lock[auto_lock]": "96153a6368fbcae78b3fc1cae65b6966736bed4edda3983a0b310693516fcd78", @@ -12176,9 +12176,9 @@ "T3B1_cs_test_autolock.py::test_dryrun_enter_word_slowly": "697f7afceeba22bb66d9ef37cfee962107bcb8e5fd9e334ffa5e1947ce0d12f8", "T3B1_cs_test_autolock.py::test_dryrun_locks_at_number_of_words": "daa84cae3996c2b16d2db05b3fabf79314bf0b6945739bfd746943cee3844fcb", "T3B1_cs_test_autolock.py::test_dryrun_locks_at_word_entry": "68f1a6cbc01118f4957ab627c37286acc6fdc1823372194f64bc33cdf03e917c", -"T3B1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "e22d8196006e6943289a2b3becd4d30d3c66ac26ac7b3a59f1ba99e784f0053e", -"T3B1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "8933dbf8722b6acf1d18c8b446e68b3943db7f3a0710ca0bcdf6b0cd7c489328", -"T3B1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "089e7bd676e9e536d4b2744584d98d8126a3b1ba8023ba286f2be7029c398f43", +"T3B1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "8f39d0d20728dd7c42ba892169cf385150397335aabacc53fad040d773b3d910", +"T3B1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "9a5cbfd594762af99f03e520f7a99360b6cc58026b9947626f44144f3e9dcde9", +"T3B1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "e63c4f8765d8ae1a52a5b97a1ae5ef694170dd3e800eda116821f3ba923c4725", "T3B1_cs_test_lock.py::test_hold_to_lock": "69a7237d339b4a809408910e866cabdfb6f5eba9476f32d513a8256d7c0e1dff", "T3B1_cs_test_passphrase_caesar.py::test_cancel": "b85928f59e9ee93eb3717f52ae4bc1f5b4001ec60c3261827f03cae4cbda8be5", "T3B1_cs_test_passphrase_caesar.py::test_passphrase_delete": "204990e76060905dfb9fbd7a191339ad310eab237f77cb236755ad76482bce72", @@ -12206,13 +12206,13 @@ "T3B1_cs_test_recovery.py::test_recovery_cancel_issue4613": "6a80304cdac99bbf7126e503a570e23af33bcc4c6d7b7daf50f2162709f617ef", "T3B1_cs_test_recovery.py::test_recovery_cancel_number_of_words": "92b35c5002f2ed618d710593008ba35d94661d7a272c8a3588a81cbb38d7b805", "T3B1_cs_test_recovery.py::test_recovery_slip39_basic": "3323713d5a9b8fd53dfdaca9cdd3a147fe50337eb3467bf43db4efabe4d46f77", -"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_device": "c6132d3025312cc0bd716e76dc19a0dbadda249ea5a71374fc89c81141cf12d1", -"T3B1_cs_test_reset_bip39.py::test_reset_bip39": "26ae44dea4815ed5faf06ccad8363634e52f066a4ef506b59743dd585b687461", -"T3B1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "66caf0fa6702f8cb789e1c98cb706a46ba6de627ef5613e718309dd93dc6908f", -"T3B1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "aae0c6979311a06809a5af1b8184e277d44e8845ceae0858a3161793ecb1e9ed", -"T3B1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "6f3e62c8e0b11dd9f3489d68d1a8e4a868e648443031b9061595b60ddb94c273", -"T3B1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "a45d85d22afd40778eb4a285df78dd5de89d04788c8b6ffc453b2d52d22ebedb", -"T3B1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "6c2fddc6d350142c7ffad54f6832df6f95ea404bf802bad024b42beddb9bae70", +"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_device": "2be19a69aeed8e31edfc6c1f4830adc7e66d9508cfa0d66fa50b03876a057966", +"T3B1_cs_test_reset_bip39.py::test_reset_bip39": "433711b188e245625cb65bdac62f35ba452c88315fd258abbf0fe34140f9fa28", +"T3B1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "725ba700d88206896833e33127958bc5262383fca29113760d8329ea66dc28d8", +"T3B1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "96482d4665c130a767e330a09bd0fe478ebacfae1753a6e51a6a5d16df60a934", +"T3B1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "900f8f5fa6db4d09eb4b9f3f09155c4edfd78e985d8b1c1826a837f565af7b90", +"T3B1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "6c07f3a9345112cae61b9d5e51bf2a20dfd4da72c5e1f1ded36cfe48011987cc", +"T3B1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "a0b5edd2d2707f436ebf0fa62ba99cdd53da2cd8e3b6c530f2621786fdf01ffa", "T3B1_cs_test_tutorial_caesar.py::test_tutorial_again_and_skip": "09f6c29ecf72bbadfa9abccbd8122bada8618da5daa823ce1cd727134e7c15d9", "T3B1_cs_test_tutorial_caesar.py::test_tutorial_finish": "a6574ad56c716d1365a295ea4c3bd7cc91fadc47e1f5dfa54a7b0c6364816b52", "T3B1_cs_test_tutorial_caesar.py::test_tutorial_skip": "aed2cc0c89a635742d049729e99643537235a9422b7076b4ad52d690264a191a", @@ -12224,9 +12224,9 @@ "T3B1_de_test_autolock.py::test_dryrun_enter_word_slowly": "16fd63da6d5b89171dc68de8a5869318383138d534e36ae3feaa4db1fa955112", "T3B1_de_test_autolock.py::test_dryrun_locks_at_number_of_words": "1e6bb949aae685bfa9cbb92bd0871b58647f8a95b06790f0b1a47054ee616e4a", "T3B1_de_test_autolock.py::test_dryrun_locks_at_word_entry": "e3c343c241d683471480e42aa94e3d72935a65ab6fc620811d127575c419d240", -"T3B1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "0a54dbb1eccb5fb226f4e5ac3fbc37f8b6157b93d38be532fc8aff2c2b9c5595", -"T3B1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "387e9ab5cf55a4bea29728895a698be5065ae6a0c839d20e147cd7c2f895e96a", -"T3B1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "d8b102b0d8d54485f6cc8f42c47dd5e39ee8365494dd49f52b133d776f4ad6be", +"T3B1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "f9e5ff6d28be3f58f13b3c489f17525414665236bde5d25ff50d18920b242d6e", +"T3B1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "f4f4de049fe0b38185466a5d84bdfbc5afb2342847ccc5df61de24ac421b7e32", +"T3B1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "cb4b833d2cb01413c810fede4acfa807cbc8e56ce4ae959be3dfacd65112300b", "T3B1_de_test_lock.py::test_hold_to_lock": "844e05f1b7573ae33f704f6b9c96b30a248425739f63249869aa51cb4d31219e", "T3B1_de_test_passphrase_caesar.py::test_cancel": "397ae31e784cdc13ad1f4ce51df6ea7cd6b5810e61a2581c949fd582e28f0eca", "T3B1_de_test_passphrase_caesar.py::test_passphrase_delete": "11bf5cf347a7d79501bd1202eaa17eb879b0083da2dad6ea8456cb70fd19b8f7", @@ -12254,13 +12254,13 @@ "T3B1_de_test_recovery.py::test_recovery_cancel_issue4613": "bf68273c556ace9e83a0af9f79c91dc9616d8cab26b2c5f0526d3141dc0c7d81", "T3B1_de_test_recovery.py::test_recovery_cancel_number_of_words": "da695c2984838d67eb97c8b7780b4e8804a570b0a11633e0a6b87e402f64f742", "T3B1_de_test_recovery.py::test_recovery_slip39_basic": "73a632df286f9b50619b7af6a115f86cb0bb982dffad7eff0b0af237eba88e0a", -"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_device": "8d81c700a8b2ccf735ff47fdda95b6430b2d554515677b1980a09fffdedd3549", -"T3B1_de_test_reset_bip39.py::test_reset_bip39": "fc18f707d58a21ef228e6d921a65b02efb131212bdc9e0bf5ebb61a228347a2e", -"T3B1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "d4bf8040915d66b777cb24de58dfb686fe32b7e5cf6456253f29b1b74db54803", -"T3B1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "ad8b6e6a15883f1a2126d87d27d336eed9f708b0c1bb3f9d60bf71c8f096513f", -"T3B1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "baa7057daf236d724eb6eaa3c547129056053aa4f866f17b75f9e880f3ef128c", -"T3B1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "7e1925ae5f5d4d59a64313209e447c1acbff7b4ee0d9306d071ec03e4269e39d", -"T3B1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "3479f3fd98bedf7ab408089034e39bb48f6396b261642a0b6d09ff3d67ecd670", +"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_device": "1fc8bdd4ba3175258ae4a4f1361ad881a71ed745443179035aff1159d822e0a7", +"T3B1_de_test_reset_bip39.py::test_reset_bip39": "ed6674f78da3354662b2fdf1709c31a6115d743a4c96618f3bccd0fc647a63b9", +"T3B1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "3d3c037b2a738a9079ff30903b97e18e6cd248bc5cd0db586d154f48c2b733ae", +"T3B1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "312015c2865b2ba81182cd9c2c02cf65060f031cad998e1f719f12a2996c5111", +"T3B1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "673b56ca4ce21f5043606f855fed8a89f4a56602412858cc5a40f3e0fc7d57cd", +"T3B1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "6100e2efb8c7d95b675f38b001ac5ba43ee342901c10ccad37678b100735f5cf", +"T3B1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "3d03a2608f00a5573fe51b1404f455b1928a82cebda0239cad914cef45072e19", "T3B1_de_test_tutorial_caesar.py::test_tutorial_again_and_skip": "3a0b7aa4822523e11b13feac23cbc6fd6730e7836c8a6ed7d061dfd585a52b6e", "T3B1_de_test_tutorial_caesar.py::test_tutorial_finish": "46d4679e081c733687b015ec59e29fee9a55c46028270fd37a52b483f081293d", "T3B1_de_test_tutorial_caesar.py::test_tutorial_skip": "73bdb4887cda260e693c2daf0402a5f320651affc3342b2408058f3e5e33d38a", @@ -12274,9 +12274,9 @@ "T3B1_en_test_autolock.py::test_dryrun_enter_word_slowly": "977d48ecfa74d1a7501910e5608b7d3209516082239d8dd70f5063518ba6bf43", "T3B1_en_test_autolock.py::test_dryrun_locks_at_number_of_words": "0cee170bbe8a66b4709457c8e5b7f78b5dbea4247aacc3cefd6c3be41e0aed87", "T3B1_en_test_autolock.py::test_dryrun_locks_at_word_entry": "022cf931952dff5aa5ee2b0da833ee1060577c498c3d639fb62f6ce39b50cd95", -"T3B1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "deb552190504e012c8eb6d27629b3059331dacf95c7dfd97530b54adb616a7c8", -"T3B1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "dcab09d135877b43a41dde613b721ee98d7350e2e2f1457ccb1d106ca6291254", -"T3B1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "4223ddef779df21cf306213d9856f0d095255ae96ae7f5319b4ece1ea440413c", +"T3B1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "bca7c46d0cc94e3b86d87a9c760d8c95dfeb6611bf672471d5aa4805731e406e", +"T3B1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "e8d4d88c8c2e2ab897e7a296de7d4ec54c802c86a8faf65a97ecdc422a575186", +"T3B1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "e76b1fa04360931121e0bb50147f91ae2b9481f800fcc0ec1bd8df79293e455c", "T3B1_en_test_lock.py::test_hold_to_lock": "f2a4d5d83b19c04a235003137ff5f1b35ba36b36971dcc82d2911039753380b9", "T3B1_en_test_passphrase_caesar.py::test_cancel": "01a843febf11800dcec1efc1fbde99ef83dc654816a3e2fb8d80188eb6b89f53", "T3B1_en_test_passphrase_caesar.py::test_passphrase_delete": "ec6468b03b6e424688596167bf19fc6db1fadbca381e2d9ee1272f0ff13fbbc4", @@ -12304,13 +12304,13 @@ "T3B1_en_test_recovery.py::test_recovery_cancel_issue4613": "2b9c9188fcde9ce82c2fcaaf918e9e1b755e0999f30a332c1b6eaa4891cef845", "T3B1_en_test_recovery.py::test_recovery_cancel_number_of_words": "b56656c8f2f31d96cc371a7a54cdaa6c4501905ecedce251e9e06cae308173a2", "T3B1_en_test_recovery.py::test_recovery_slip39_basic": "eca12dbbb83a1b76bfee74a2315344c4de92620781597b6125c867bbfa81b391", -"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_device": "fa62364e7cf538ec33061fbb4c531bdb7dc460253f9b8d195d7ab2ffb885c992", -"T3B1_en_test_reset_bip39.py::test_reset_bip39": "ff7753a6a5c1afe46dfea1ed41a2dd63fec4a4fab82fce68e2ffa18d0915b625", -"T3B1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "6f5d8dba20cafa82bb0da1309d6a2597215d23873e303bad672142b1dbb4c5b4", -"T3B1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "e5f538df2e438fbf56ed15a334c5ec86f811fcddeea2a44fcdaf0caadc64a52a", -"T3B1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "8c7a6b3ac9a6011fcbe7212f4edbe1d786b267ec892d959e45ee0e38bcbb805b", -"T3B1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "d7e5615d747f375d9fd7fdd50019970813bbe8d85a0dc8d739287a8176b4d8a2", -"T3B1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "f0a4a91fa92b8a4a94ff53bdada54c94bcef24b1a9e0b53841ad083467914c67", +"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_device": "5d470fd46b992dec26b3e0beb9086b646be6acb54cd6385bc68d3104affde2f7", +"T3B1_en_test_reset_bip39.py::test_reset_bip39": "cb40bbb32e2d5e4040bc36053a2ca2207d4b3d95c06fc8e276c3b113bc9f7625", +"T3B1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "cc4a55070b643f1cdf5cdd37a58ab49969c865138e2d71622f4d8f34fd9d5b46", +"T3B1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "c7fed665d2978fd4df363316243ff70d198fb2edc381393a39a364b38dc5dae5", +"T3B1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "b775ecdbe51bffd24bfe7367cfe15d3334d9a4e66f746a5d6c838da701288d33", +"T3B1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "bc94958cbb10c0668a6fc7b962b9e78c7c40951e3933cf5c19e73305b652f3f8", +"T3B1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "5e630bb6354e4502780d67d38086d358ab9561d630ce83d6e50d80560fc80093", "T3B1_en_test_tutorial_caesar.py::test_tutorial_again_and_skip": "3b222e024b64b14bc0cdf38ad14e0893f577e4dd5971a4596e51f772b838b250", "T3B1_en_test_tutorial_caesar.py::test_tutorial_finish": "cd123234604a7ac5909fddf166c41d678682b245b266ba12dace3466495d3e9d", "T3B1_en_test_tutorial_caesar.py::test_tutorial_skip": "17cc0f156c9930392316710f2ded598151f292238ca947a844c3963b9ad496d7", @@ -12322,9 +12322,9 @@ "T3B1_es_test_autolock.py::test_dryrun_enter_word_slowly": "d2ecef3f044edcfbaf27cddcdbbc3dbaa9a58f8e7e368f0572310948e12199b9", "T3B1_es_test_autolock.py::test_dryrun_locks_at_number_of_words": "cef67fc37ed7e6438bb6a194be51a842d2e3452e0493c5d439dfe176b623bb49", "T3B1_es_test_autolock.py::test_dryrun_locks_at_word_entry": "456810bc44bc40fd4640b9db3aef697b49885deb5ba60cd80e8e98bd0f73663f", -"T3B1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "6113859df665d3996fd81a9133324f527de03659a59b2ce368af3f6b214c6309", -"T3B1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "67bc291381e1b58cd9b6727576703767bad092eb3af83af278e696243b060e54", -"T3B1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "77326dbf48bd835c8b344f76fd8cc2520bf3437a74027510ddf065e08430d977", +"T3B1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "6510c4eeab743a6821bab8263eaecb56a1dc0c32657e455d90ecfc238978b2f9", +"T3B1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "71191318564565331f227b14f31af5d12a34a43bbf56fb29758abc43fe155a2e", +"T3B1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "6b6d63968321e4b0d912f8e6bb7bb42318e0ddd1391c296c4301ced9a2819324", "T3B1_es_test_lock.py::test_hold_to_lock": "961e19c3036036bf544d069e441423b341d2794ef40f4d879859513a4b767064", "T3B1_es_test_passphrase_caesar.py::test_cancel": "cd00765c5a833325d3f8ae271868fc682e63113326eb6d3587176a57a1c79a42", "T3B1_es_test_passphrase_caesar.py::test_passphrase_delete": "3849295a230da483ce18f9c7588fd5c722fcd3cb856d6a885fd511b118663bce", @@ -12352,13 +12352,13 @@ "T3B1_es_test_recovery.py::test_recovery_cancel_issue4613": "30a2b3cd9008fd973191873d0849b2d7d9920fe5fa9bc89a10ae926aa748d5dd", "T3B1_es_test_recovery.py::test_recovery_cancel_number_of_words": "ab790956bd59092375f1f901f1ebf1da64e1b2c6ff0a61bf60a9b9b56964a278", "T3B1_es_test_recovery.py::test_recovery_slip39_basic": "752a3c93d42f93d169025555193ef6ed62acdd1f45318120c72eb1162325abfb", -"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_device": "2d06818d56e867439c2a1a731d87a0b50e17c3761cf79c4eb78769e05090f9f2", -"T3B1_es_test_reset_bip39.py::test_reset_bip39": "e822ac7d483d41000397f7ab4273551306bba059cc1fd5aa83579a0db06686f0", -"T3B1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "4eceae0ecc067ab743fccc9f7cd43ca3d34c98a7a694ca7e2cc15fd99a2e91e7", -"T3B1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "ccb1b8bfa9e24a2df4d051dda83a4ba63132214f85effb3178ac2992eb368a81", -"T3B1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "12b203f717b8144127f4bf03ef5c950a92d665655a3c161c02afcf72a22663f7", -"T3B1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "69ffc3373ddf8cc4568cc6d4c9282d7239986c79d3d421dc79000bfa3c107cbd", -"T3B1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "ab2e63ec2de8be3081824557fe5f186c5d40c88b2a01074ff013762a2138ef09", +"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_device": "6df8fff6db4755f15196c91d4363c3eec2f9914426c7d18d81df48c8c00eae7e", +"T3B1_es_test_reset_bip39.py::test_reset_bip39": "47c961e41e2a6339d5ae97fe652ecfffd5c90ff87651150c3700f115aaf67473", +"T3B1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "2944e0bf0d1f4fb381b0656dcc877ba7e11ffe01bc2ded4995f1adcaff6454f3", +"T3B1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "0e29f3e21f92af1edf1abf125f047f2c566569f250f1eb15a823ddf40d433f19", +"T3B1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "f921e3c05c4b8b8c5b9ba49d621a5b9345fc0c295d6220a9b0332354f88d264b", +"T3B1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "47872f32e24d24ecf2e98ec6a6cd01c1e4348f8d946202e350e500b1634afec6", +"T3B1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "fb8a7bb300963fbed9cc1a46171327afe482527349c05faec6108b36879b4886", "T3B1_es_test_tutorial_caesar.py::test_tutorial_again_and_skip": "c74f0342daba8eb2fb731fa2446e166c99c2040aaf6cd2c8ed845caf4a838068", "T3B1_es_test_tutorial_caesar.py::test_tutorial_finish": "a316b68d70e2a58604ec6b1bb3a192b191b02b826b49dc235d4f097aa18328a9", "T3B1_es_test_tutorial_caesar.py::test_tutorial_skip": "1d856cb65ddc91b9272356c0a327ba41bf510126a6d99eb73366d8ccbf009323", @@ -12370,9 +12370,9 @@ "T3B1_fr_test_autolock.py::test_dryrun_enter_word_slowly": "b4332f068f92c2933bb22e47f05f546c1a49bce903e04a87d6c3988f2536c7d7", "T3B1_fr_test_autolock.py::test_dryrun_locks_at_number_of_words": "3dcf5bead7b5904268e7f971aa22e94d7def7b128c9cd7205ff1dff83500d832", "T3B1_fr_test_autolock.py::test_dryrun_locks_at_word_entry": "f4033c666c064ed82cf0c8b87023a3ea078990046f5f26571c245c35bfea9412", -"T3B1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "d5d5df36ce85015dde41da154a3f5d4aa909129bcdada8e9df656531b99b1e61", -"T3B1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "8d1dda9ceaf0845c0bd46f10f2be66b54a3c9e90c25ce562b8b0d7245f6e2a10", -"T3B1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "81452d121b198ad1269ba059b2c7ff88104e63f8b9a06fef495f7aa57be7edc2", +"T3B1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "315fbeb78e12afdf6995df6acb0d64b1f053c807cfeff67ac5c86a196a8aa9e0", +"T3B1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "dab65e39c33d80c05d4272e1330eb05df0020e682de7e24f8946071a6b5e1c50", +"T3B1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "b53f1e4bbd6c717bf833ade94c086136c17df72e17a5846ddabccc074b3196b9", "T3B1_fr_test_lock.py::test_hold_to_lock": "48a5e7f546f76f4aa321c118c005f6c8d493ea976a3d1890f4d50938b48bd83a", "T3B1_fr_test_passphrase_caesar.py::test_cancel": "8410ca7efec30e708c65a59637a1dc097f4055b09f1a9933b81e39eacd839636", "T3B1_fr_test_passphrase_caesar.py::test_passphrase_delete": "46c17fc1070c5a25c5b4982b8bacfa00cbfea63500bd35e2dfa20d90d998ec36", @@ -12400,13 +12400,13 @@ "T3B1_fr_test_recovery.py::test_recovery_cancel_issue4613": "fd681a05c3f7f4e5b2b864c4ebaf03c3363274de140f6b6e25a83e308fe57750", "T3B1_fr_test_recovery.py::test_recovery_cancel_number_of_words": "02935305bd5327c2ac127d4fc47d712c8ca11710c23286717121e89f72dee91e", "T3B1_fr_test_recovery.py::test_recovery_slip39_basic": "e45508a86ab7a6b7c4d3cfd238c9a6ec34f067bde01dd8bff4f4b6676a295557", -"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_device": "ef80d38b8cee6f0aed085b7c719ff6630eb536dbd5f9978001015f37470bd479", -"T3B1_fr_test_reset_bip39.py::test_reset_bip39": "5602ed29ca73320410add93d61b8a9a3cdc75cc7f082feb93f0a5cf2372842b7", -"T3B1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "eaac9682c5fa5e55b30eb970c69735811c6cffff45ee671f312bcd47086c52b8", -"T3B1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "17f7fe1284abc6e0bc72a1e60172ba5c07ac2252a4d6dae2323c0b7bfac73b8e", -"T3B1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "66e2c462b22c554726fd52d7c96851b0af0cad48a2921b2fb7ef596776a6310c", -"T3B1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "86a15bbb7f2dabfa6abda6507ff6daf671d4222fac720961cb0fd17acd9639d4", -"T3B1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "ce42812b7b30e4da87de55cf8ad88549b638f7b24d0866e48c3013e695d78dec", +"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_device": "a514315e28fc15836cf5dd57d66dce13a978cba5bcd05499d6f175243ead3e58", +"T3B1_fr_test_reset_bip39.py::test_reset_bip39": "fb09c501aa404c3b322009167c2fad43b22727d653743273e38c15e09da7ebf5", +"T3B1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "92d55be1440b466e9208ef9ff47321991a55dec782e702ea1c704a48fecea177", +"T3B1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "2ecc7558c6aab64a5a9c086e278ca2d631ca8745cfb78a4c904ec03fd2298de9", +"T3B1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "da1e99d92746f43ed7120c27a2a14cf9d3660731ff5258cf039a128d50cfc918", +"T3B1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "4ad641745750674b12035ccbbe811ac5ed8f4085a01cda9a9cf203547a9fe4cb", +"T3B1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "91fbc3936d83bd47f2a6c0d990fa6053fc842f5e5eb91bf55b609fd356003210", "T3B1_fr_test_tutorial_caesar.py::test_tutorial_again_and_skip": "10016444632b1b3307b3112fc427b9e375a7dc6f3ddb597792b9eaa2a8f77d04", "T3B1_fr_test_tutorial_caesar.py::test_tutorial_finish": "66c572d7a13ae34ba33a71b2044b329c24ab970cb83a604bcbf3496c77f01d92", "T3B1_fr_test_tutorial_caesar.py::test_tutorial_skip": "8d7d6a963cb548b43d2d1b334e271f9213c9c2402227916603b80c88aa2dca06", @@ -12418,9 +12418,9 @@ "T3B1_pt_test_autolock.py::test_dryrun_enter_word_slowly": "008ed0515b6e8d19d0bf9d9af337055393aba02e46f969663e5378a31a1721d6", "T3B1_pt_test_autolock.py::test_dryrun_locks_at_number_of_words": "0fe359aa88e1b5b2e74b1904e699b5b33381fd814307d810905f74a281e7969a", "T3B1_pt_test_autolock.py::test_dryrun_locks_at_word_entry": "1a97778e67617794708b7cf2a73cb839cb1d943b3fee109cee9a312f591f0e73", -"T3B1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "0e316da35ac0d38e5131fbecaa3f00b8ab7313f2081f5d26fedeb5882a63201a", -"T3B1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "2d642c6ba532404100f608bc5b15cde8fbb8061e753e2d28a9e0f0ed52b4d35b", -"T3B1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "e5504b884bdd5297f09f96be1254f36aa91cb4f8cd941e9a8b47ade37a924852", +"T3B1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "7b560d1da596c3159adfb86252fd4ce377fcb7db6d784c83d0f25ae1fe556694", +"T3B1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "0d7af095bb76effbeb518a65ad08ba5684fad3f0949d530a8b69d2bd064b98e9", +"T3B1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "0caf96b7954da5799d104227d060220898c62d0aed9c43244533fd74e35e3e5e", "T3B1_pt_test_lock.py::test_hold_to_lock": "ad9e5244e7c030049ac8541cc227b51df078988d5aeb5a80ceda9a78e7350e79", "T3B1_pt_test_passphrase_caesar.py::test_cancel": "861555ae1b8e9e70c6cb80975d7db4ae674403a305218c84f77e25f2aae852c9", "T3B1_pt_test_passphrase_caesar.py::test_passphrase_delete": "997b332af83bc3dcd0c5bbef6410ff5b6f41a36a6f8a6afdfbbd0558cc55f60b", @@ -12448,13 +12448,13 @@ "T3B1_pt_test_recovery.py::test_recovery_cancel_issue4613": "a5ba1cfae03b43ac1d362df1186f0ac208d8d38bb48f590f4e67eb876706ca71", "T3B1_pt_test_recovery.py::test_recovery_cancel_number_of_words": "c04f23e9a1b9d4d11f729a6435865a77ef8b335ad4421de5f74e77b91d3a8726", "T3B1_pt_test_recovery.py::test_recovery_slip39_basic": "9d6b0cc10e89209c30142e2bbc8cb6a7506f870c7043d0630bb021c10d50de06", -"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_device": "564c6ac212bed04609c80869dd927fc8d1667884ee1a73239bce09dec7260b2d", -"T3B1_pt_test_reset_bip39.py::test_reset_bip39": "96e41e115fcd6935e6c79787961808093e669c39bc5e7970df01be0a61265e56", -"T3B1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "f7f128385ceff356716041fe80082f2284fe0f5518ead513a0998e3ad8928b3d", -"T3B1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "c85c9e7105bd86f120d3de058cba5351ca35d0463e9df57a8a29af2056e4e2b2", -"T3B1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "0b7add244534f968fa1742444895d32713640388e6d7febde366e563712def31", -"T3B1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "18d43f470355e884a1eb0986eeb95c1b068d21566d7833920914a8d986f68063", -"T3B1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "f66189bd903c49a9675bb24f0334ab8d2432e027c582e2e1fa9f6f7fa1176fcf", +"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_device": "92d92a298bd005359d9f55f6bc80465e33139e01dcd8b9191c0aa074c87e32f5", +"T3B1_pt_test_reset_bip39.py::test_reset_bip39": "7eb3be495a28ed464345890a7851aa7df5dc27c84967f444b3425aebd70b83d8", +"T3B1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "02a1a3e354d38dcaff905e5246f2322a4584157f48a206c0452a8359568afd87", +"T3B1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "25be5bf2c6ab710796557aa8ca5d91b6a3a88a7e905954fbd14e6d588f48d8e4", +"T3B1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "08b1258d53b8a9e91b31a33d4db7a01d8594dca599f481c4555c808051d5ab55", +"T3B1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "e2e86724d2e10a1d7718be1f5bae5957ae2ea7e35fcc69c980dfcd9385ef7443", +"T3B1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "943aacbb13da9d89dfa33a00937eb6bd4b3b905ca2905499d451767383568bb2", "T3B1_pt_test_tutorial_caesar.py::test_tutorial_again_and_skip": "e078eb888df8c5b3e1fc39186bc8b7e4026a4203bba7527865b7174ceaecb3d5", "T3B1_pt_test_tutorial_caesar.py::test_tutorial_finish": "5111b5ebc25d9468ce920ff9ba7b6afdc88d2881e119475aae413bc034c11fa9", "T3B1_pt_test_tutorial_caesar.py::test_tutorial_skip": "f301138b2eb72f823dc2c5692f7d14e3ebb4945a6b650e9e8f8afb11a21e8a4c" @@ -13754,34 +13754,34 @@ "T3B1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "53f1d91bff33e629e2d690c8b351dd7b7eeae77df05e3714d622913be0423fa6", "T3B1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "88172f3e1efa18885f0fd1e95687d339ab9881d9162a9b59fda60613d83a6a69", "T3B1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "4fce8a4efdba878a097e5243a60756ebe4a6ad268a25027d249b7f24f6378084", -"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "2e738832b18e0f3ad8590e95625fcb9d0155afff4d08cd32b290befd806143cb", -"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "1711420e9485ecacd3e5858352e06528fbf3967ece66e43fb3c77b976c885176", -"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "e6d6d16ae3f9bf82d11b5e2a0cbebf3e76ccb8e08f8778ef3f564fed20be21c6", -"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "9c13ff5e5038eb5e4e448f018e595403719b82a74ac0043a6bbe1440e9b19ec8", -"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "846bd910d1d6010a32da1a642ea63ab46a2ff6c08dc67ac843e462d6717563dc", -"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "4ad5a90a656b34ed566c997d55f6f83c64a9bf50dc0c6353d6dab7ab2e652cdd", +"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "1ba142a79825df35d88dca27c2b028faaa8a8921b43bb8ddac229a3aadcd2956", +"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "8e3413d760e212f49dee12041e16cc39aa411473375ee6ef48bd1a1d9efa38c1", +"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "4020b9362f9f4ebcdb0bb6379701b5864c40005aa16cf9e5ad7dd85d1f199132", +"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "19c7e992a180c4232717605f705c16728af688cf9fec06481c26b82803e71a92", +"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "7414bb6c4d481dc9f304f04c8288ab21d0f9c1bb093239e6bd28d93fc1eadb83", +"T3B1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "c92e22024fb4bd6df65f88c8f677fc3605a98b87a1099b07cc85502de37a64d6", "T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb", "T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "8ffdadad2dbbd8da641b1d1d20616215eb39a0094d820ec0ee6bbb67f8db50f2", "T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "b948440aa5cb953bfe65f86cb40dad86365172961db6e12cb0084878550d4357", "T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "8ffdadad2dbbd8da641b1d1d20616215eb39a0094d820ec0ee6bbb67f8db50f2", -"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "a1be9a9d52ce8a06134719a0a15ac4e15b19df3c857a174bb6468774274461d4", -"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "a1be9a9d52ce8a06134719a0a15ac4e15b19df3c857a174bb6468774274461d4", -"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "7945ba7c4fe2e7509856cb992eb126032c2f33639e673b782982ace8cddef0c7", -"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "7945ba7c4fe2e7509856cb992eb126032c2f33639e673b782982ace8cddef0c7", -"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "980f3d1ddb092ad5eb294161d31d6951251a1c11806f217268bf748438fae36a", -"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "11c3a4d7dc33153d2f67dedd9fc1ef53c179416d150390dc7b65aae6d81006d5", -"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "1c373f81f0742c26960a47c53444a41be1bdcd4b3a43f4229ea6f527b0c78c30", -"T3B1_cs_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "68ce45ecae7037e880418dc308e00aa47439e52eaef3921f6f3299e177627d6e", -"T3B1_cs_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "7e7eb773a82c1ce6aebd38c44fc7be16f26ba42c66bdcdec9696cdc7dc9840b4", -"T3B1_cs_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "828506062abcd6b6ce4ec8dcf4abf1c4794c2e1ebd450bbf364aa6ab438bb0e5", -"T3B1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "2a3aeea7593e7af30aae3f24008856b6ef704c2ad53451e63d6f79d5c9d3207b", -"T3B1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "2a3aeea7593e7af30aae3f24008856b6ef704c2ad53451e63d6f79d5c9d3207b", -"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "63e95abb0b97f90b5961ee3887d24601528c9cc38e1b4553afd7b028abcfcac0", -"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "63e95abb0b97f90b5961ee3887d24601528c9cc38e1b4553afd7b028abcfcac0", -"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "a271a3b62f760520ea97cad722731a0093098aa8ef19b3f64cc2d1a5caccef10", -"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "a271a3b62f760520ea97cad722731a0093098aa8ef19b3f64cc2d1a5caccef10", -"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "2e2d00ba2a605f7ec2a41755f83cd41d7257295e063af8a04978e2a5952bc8e0", -"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "2e2d00ba2a605f7ec2a41755f83cd41d7257295e063af8a04978e2a5952bc8e0", +"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "51be938a3da722abcf43d063675d89260bc5e07d8c0725c0795cb2fa57ccb6ae", +"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "51be938a3da722abcf43d063675d89260bc5e07d8c0725c0795cb2fa57ccb6ae", +"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "dcd17b69ce8bf9c95994f28831030ae8c382a19b9e4d1812f9d8f23730401ac4", +"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "dcd17b69ce8bf9c95994f28831030ae8c382a19b9e4d1812f9d8f23730401ac4", +"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "b9f8e02a58919fb4d44a0941c9356ca5d07a697919afd6357d12fe9161b8706a", +"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "2c6d4e06ccffdd672b6684ecdfc80302d39c0bdf7b43bd492c4751f2e85edf28", +"T3B1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "81a44a2bb35aeea1bfbe298b62a835c5cc54ba49cac673cfc9058e7b42f55e6d", +"T3B1_cs_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "8f4fdd15fe3c25b6117bc289db20b9004957e31c3623592f1092c2e6bcb5088c", +"T3B1_cs_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "ca1207d7e4fc9668ce399ce2d4e1b4b4516f173a8e5d95c507491f232360a1ed", +"T3B1_cs_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "87e6ad255ff6943f55b8da8672c4ae1537221a4bf4c90f5f8f51d6c257a2b29c", +"T3B1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "ece903055535786f596256254666751b44df70f0df87d1ba9bd772185478cc35", +"T3B1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "ece903055535786f596256254666751b44df70f0df87d1ba9bd772185478cc35", +"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "762b02e2d12c5d6ba730d8d1e5f9406a7836bd4e8ab535c2fc456f2b08613b26", +"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "762b02e2d12c5d6ba730d8d1e5f9406a7836bd4e8ab535c2fc456f2b08613b26", +"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "b0104a18d00524fa52d6166104e7f6797e926c66a51c1b028f08db3a7c5d41b2", +"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "b0104a18d00524fa52d6166104e7f6797e926c66a51c1b028f08db3a7c5d41b2", +"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "b4305568bba854feaf03a1d5a78889a5352b57c2281f83ca9feb10a694a328ae", +"T3B1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "b4305568bba854feaf03a1d5a78889a5352b57c2281f83ca9feb10a694a328ae", "T3B1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "127a5ffb76264d4c779a84d13084afc70b72e03781b7cd482cdde2de8d86fdd3", "T3B1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "b19934e1098ab49e3e7f286479a3d6c324e8f44625643fddf8a408d10cb14d86", "T3B1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "aed7f714651fea6aa43c23820311e09caf5fd51c9951cb92bf3d709c39ab4739", @@ -14059,24 +14059,24 @@ "T3B1_cs_test_msg_applysettings.py::test_safety_checks": "b0a4fd6f61717d93124baebd635bc147a5c77fd32b63ea6c920619a23ed65553", "T3B1_cs_test_msg_applysettings.py::test_set_label[empty]": "1efcaf8e45cc0e2a23394bda2cef8c0360f34a97f882eedd75355ecf065a8fa8", "T3B1_cs_test_msg_applysettings.py::test_set_label[max_len]": "bc3a2c96e9a47873d2782215835a903f760e61bc16d4e09cc6a7caf50ff0661c", -"T3B1_cs_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "c67a6fd1106f8c37054f634a9876dec8cf8f6cc24c5550f6d90244ec87f7c284", -"T3B1_cs_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "c67a6fd1106f8c37054f634a9876dec8cf8f6cc24c5550f6d90244ec87f7c284", +"T3B1_cs_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "c48253a43cd81e1518a2d755bd267180908e7b418c37b8149505afac286eff1a", +"T3B1_cs_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "c48253a43cd81e1518a2d755bd267180908e7b418c37b8149505afac286eff1a", "T3B1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "868e40d5b1ea56f5f2a32a2013bcb53739f6b8ca37d2f094e6035257df9c9d79", "T3B1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "868e40d5b1ea56f5f2a32a2013bcb53739f6b8ca37d2f094e6035257df9c9d79", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "721686a8930d4ad702f1108756d78d38f7aafe85f00c7ef244be7a0475b6ebd6", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "721686a8930d4ad702f1108756d78d38f7aafe85f00c7ef244be7a0475b6ebd6", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "c937b6ad0720cf42e1f188de804da4461da4a4d245631159a10234c0cbdc7b9b", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "c937b6ad0720cf42e1f188de804da4461da4a4d245631159a10234c0cbdc7b9b", "T3B1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "868e40d5b1ea56f5f2a32a2013bcb53739f6b8ca37d2f094e6035257df9c9d79", "T3B1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "868e40d5b1ea56f5f2a32a2013bcb53739f6b8ca37d2f094e6035257df9c9d79", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "3652de8d17d94a41f415569915b2a62e4c037d71ed89a56d25b904c8878779f5", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "3652de8d17d94a41f415569915b2a62e4c037d71ed89a56d25b904c8878779f5", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "0c696e026b7deeb3340e3abf65e8b5daf8d08ead9c99826b4761e4ae6f1d7948", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "0c696e026b7deeb3340e3abf65e8b5daf8d08ead9c99826b4761e4ae6f1d7948", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "3d4a8efb9aa33f27036c48a6832ea86fb9c49dd7f1a8f673e558e27ac794fddb", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "3d4a8efb9aa33f27036c48a6832ea86fb9c49dd7f1a8f673e558e27ac794fddb", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "be0fb178d27d247b3339e4e09adb8d963500315f98bf171d27f94979c0499bc3", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "be0fb178d27d247b3339e4e09adb8d963500315f98bf171d27f94979c0499bc3", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "1e0e7905a0282a29ddc196103205baeebeb2b83aee05ae08fdf0ccfbb3216c3e", -"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "1e0e7905a0282a29ddc196103205baeebeb2b83aee05ae08fdf0ccfbb3216c3e", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "857b1557ee4117ada0ec3ee91f601590a65e1dbcf69ad0c42bd96a1587598466", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "857b1557ee4117ada0ec3ee91f601590a65e1dbcf69ad0c42bd96a1587598466", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "49ad700e32b672932c75216066d51fc90b4d17332c10e1c019e9a02e9eac92c8", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "49ad700e32b672932c75216066d51fc90b4d17332c10e1c019e9a02e9eac92c8", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "fd8e4467f112874bc78e6d35b55c63bae713080fd7fb6eefd3f7eb7a47e60a0a", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "fd8e4467f112874bc78e6d35b55c63bae713080fd7fb6eefd3f7eb7a47e60a0a", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "eecc1ea9a397028d7f90f08bbc8446df19c0b6cd4f39b19ee1ebd790374bb197", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "eecc1ea9a397028d7f90f08bbc8446df19c0b6cd4f39b19ee1ebd790374bb197", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "d72d169ac83d3a52664773053e3cae11d99754e01f227031045f4709f2c3e418", +"T3B1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "d72d169ac83d3a52664773053e3cae11d99754e01f227031045f4709f2c3e418", "T3B1_cs_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "ace068b01463f528042318ce4f5020896165cb1e9c4591701eb0886bf9cee66d", "T3B1_cs_test_msg_backup_device.py::test_no_backup_fails[Display]": "e52c36f49e880d487d87c1b62653dd5bcdd1a4e429ee48ce715cb30b02f45c10", "T3B1_cs_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "f3712564e887a3c71fb6cb5181cf2848836780daaf764c30f70b6d7f826e4715", @@ -14092,9 +14092,9 @@ "T3B1_cs_test_msg_changepin_t2.py::test_set_failed": "0daa88d925e5f1bae6c82eea58b37bfcd7fc79d05e3908bd4c6b2bc041277555", "T3B1_cs_test_msg_changepin_t2.py::test_set_pin": "2119d757b194f0b8eb323058d54fb42d80fc28b0c66534b2506356e14ccff87b", "T3B1_cs_test_msg_delayed_ack.py::test_abort": "6adf6e0d18aca57deb059a8e169665c3446bb31113482de9ef40b820855de14e", -"T3B1_cs_test_msg_delayed_ack.py::test_backup_no_acks": "3a1f428f94ea45bb10b282895635883e183811a660c9662b5d59cb8d124fc553", +"T3B1_cs_test_msg_delayed_ack.py::test_backup_no_acks": "b887c36d3fd02c24c5f65d2a8c7ff5757e745773938bdb3949aeeb79578a9e60", "T3B1_cs_test_msg_delayed_ack.py::test_delayed_ack": "6adf6e0d18aca57deb059a8e169665c3446bb31113482de9ef40b820855de14e", -"T3B1_cs_test_msg_delayed_ack.py::test_setup_no_acks": "afcda86a8ac037a5c3fcb9bbe27354682f33d5a40b3a2e46f9bc1fe00c746e1f", +"T3B1_cs_test_msg_delayed_ack.py::test_setup_no_acks": "d65c4b3719bcfc1b9859eb6ae197205891b69e07b24aa7cbd99c04fc9e43fcb8", "T3B1_cs_test_msg_loaddevice.py::test_load_device_1": "395da2ad7a03390efa3f9f21e7613a196bdda1eab10461061ae32c922ed9187c", "T3B1_cs_test_msg_loaddevice.py::test_load_device_2": "bfe94980aa8fcebbf48d1b6bfbfc2ea0da06219255957b323b7cee3925d78c99", "T3B1_cs_test_msg_loaddevice.py::test_load_device_slip39_advanced": "395da2ad7a03390efa3f9f21e7613a196bdda1eab10461061ae32c922ed9187c", @@ -14130,10 +14130,10 @@ "T3B1_cs_test_protection_levels.py::test_unlocked": "f56cfb8e571ab4669404df6ab6580666fc61b16fb18f828db1b77327a981bb10", "T3B1_cs_test_protection_levels.py::test_verify_message_t2": "6eb270f0e2666b532e41682616b9a875468fc562598c2665c83f76b97195ba52", "T3B1_cs_test_protection_levels.py::test_wipe_device": "0240676768f4181aeef51f184f3700af8ede5507f3db7a95d5e73ddd5f11c212", -"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "53251a0e809b68e01c9708a6b75e92207b1794738e02daa7805ae8e7af15217d", -"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "46ffee06a8781d26df886025a1e55e7de42968448c4393d2eed0b32e29ae9e31", -"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "46ffee06a8781d26df886025a1e55e7de42968448c4393d2eed0b32e29ae9e31", -"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "24ee90cb7f20617c40cfb731809ed7f8895fc2d5e8e49db21ae293394f4298f8", +"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "7fcbf2e734bf55f5ad73a9892ff3191e33aa5486816cc5abcaf8b28bcdb0334a", +"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "38f52dee480df2e283cd4ee67e6247b2b0b218a1821152d5d2f027829c419f8c", +"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "38f52dee480df2e283cd4ee67e6247b2b0b218a1821152d5d2f027829c419f8c", +"T3B1_cs_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "6da9397543469bf421c958b4f4fbd3fdd783997a7abbb87b1be121ca7eac6dd4", "T3B1_cs_test_session.py::test_cannot_resume_ended_session": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb", "T3B1_cs_test_session.py::test_clear_session": "6d2ad7555cfa4f93b760e88e7e4c64ea227b91910c03b8480d2e5e4ae007046e", "T3B1_cs_test_session.py::test_derive_cardano_empty_session": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb", @@ -15523,34 +15523,34 @@ "T3B1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "96d0bc09df7ab349fc9ddcb6b97cc44eb2e4ed17e47ba27a1901aa973ccee79f", "T3B1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "66508c6b7bee7ca45cb81bfb45a2f450ccc5717f65e7d329be8e0b4cfbcfafb5", "T3B1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "997fc6d37a3d39b363972f7f230d5561bb3eb6cddcee85189b5d9bc9d27d2065", -"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "31bd2d5762c060a0b9310615e2300e66b4a36530686de4f94be42b9b485a666b", -"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "c343d4b8805af2c9ce42478727ecf8e2df0d5468a607de42f614a563a8a3b542", -"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "f2016bf240e67694e53392a78c9603bf49fc6d603ba64da8db6de284184b4aaf", -"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "b5e4f736f75760fe87b3a650b2610919637b32a1571cedb62131be8bb129ce32", -"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "655026220908b11eee1b0b6232fa1d92e64e0cf8511d077678deca85b14f65c2", -"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "3d564639477527f8aaca210feed3beb2842d83f5b8623a25ddee12bc61e23483", +"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "be1929fa1a8c6ded490c60a2a1afe39d0bd54bff84cf47ce70928737b1f912ee", +"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "39b7e13835a86d3f3491356bbfe2d0d99558c967952a0fa56eaf4178514a4f32", +"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "e9a730cfa26660fa5ca44476f1f869b7799a85b2858b5a2d233386273cec0c28", +"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "eedbad764d9f1b41a21d698b8704ec485d5aba8990629065b1a9c778c121a6ca", +"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "32b1900cd60e1c0f3ca507ee31764fb4d24c027ea44503d6571a58695b70d3bf", +"T3B1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "600656293c1fefadc1662fac49c576390ae83179f5a21a7f1d519fb15322fe57", "T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde", "T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "cf1dce4b86a13213a545c9b1d5207986fa83e5ac2ce2f89650918bd7ad0f538e", "T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "5557766f28052a7d7383cf57c1e7dadae6dcbacd137dad9b1f71b4abf130f80d", "T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "cf1dce4b86a13213a545c9b1d5207986fa83e5ac2ce2f89650918bd7ad0f538e", -"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "4c9f9619a4ec9486060703853d84a6bd605d43b47a28c69524a96e237c151e11", -"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "4c9f9619a4ec9486060703853d84a6bd605d43b47a28c69524a96e237c151e11", -"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "90db284bd0e97680addeb4647ef784b64c0a32b052c6895c60e419873621e5ba", -"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "90db284bd0e97680addeb4647ef784b64c0a32b052c6895c60e419873621e5ba", -"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "92647e173ebd46258ac5bd20646bb53bf21421abd2f61ee68449b2dd5a1c143e", -"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "806cc05a952fc972a6262bbb5eecd42c85a4209cecfbad11a5be4613e69a8f49", -"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "e892a2194b9d396e3543428c486e2f30f378358850569a568b1be21f7919ed6c", -"T3B1_de_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "76c9e48326785021b6e37d3585c9f0d4e7eee616f82d573ac05399b3146824fc", -"T3B1_de_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "dffaa3d03fb9d73f921f9f16ba767d466bfc7ab2ffa830dea5f42c81b640ec67", -"T3B1_de_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "fa9086fe320b200029f8015e0170e66b1820c821155be70a472c6454fa293f92", -"T3B1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "248c78e05e33c5d4c8207fcc809f9596d2e05dbb923c581d2e3f42c3297436fa", -"T3B1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "248c78e05e33c5d4c8207fcc809f9596d2e05dbb923c581d2e3f42c3297436fa", -"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "713dfed34f7c7f5bed111f4f4119d3461bc613c1847930e0d576e826c00b1471", -"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "713dfed34f7c7f5bed111f4f4119d3461bc613c1847930e0d576e826c00b1471", -"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "4fb4a045be045d10d266a269e527fe980ed22a67bd0dadd919da05fbdb673564", -"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "4fb4a045be045d10d266a269e527fe980ed22a67bd0dadd919da05fbdb673564", -"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "9fd18d99e40932f93c81a6caf02bc647e1d00b1435d0ad30ed58ef60dea4eb8c", -"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "9fd18d99e40932f93c81a6caf02bc647e1d00b1435d0ad30ed58ef60dea4eb8c", +"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "06daf3d741446fee88d9ff7ac32e4dbc55250037afac11cc8ac45f195792b44e", +"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "06daf3d741446fee88d9ff7ac32e4dbc55250037afac11cc8ac45f195792b44e", +"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "eb3ff01937ea2fe7ab1e5406866a508b57bc8b50036ef11560a18b5eee82f4ca", +"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "eb3ff01937ea2fe7ab1e5406866a508b57bc8b50036ef11560a18b5eee82f4ca", +"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "04eb6278948f81e6da47849c279e8999a5086ad5251725fb29997a24635ebbe3", +"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "cb7748585900f19ff84fed7066ea84f9d529d5a1cae3feeda5afe5ffe4e07414", +"T3B1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "298099527e27daf6576937b529796bd8a9b5158a4fa224762c1b27aea60335bc", +"T3B1_de_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "27a12bc86ca9b4e019f442ee21c1666ee497ba8bb0e5adb6fd15c4b86531760a", +"T3B1_de_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "c88d02bc23c6c9e05d7de60b77bced976401e28ab49cc0e8b7d10bb5e1c9edf9", +"T3B1_de_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "d4c3be7eb54ecbf835c9cea5322ac72293962912b14c44efece797464202399a", +"T3B1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "14b3dcf619e47a5e1715e7fe186f0981cd565dd0a9e4663ff3b6a595e90721ed", +"T3B1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "14b3dcf619e47a5e1715e7fe186f0981cd565dd0a9e4663ff3b6a595e90721ed", +"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "2ac234772fa838e2f9b47a492f47671e82156df34e8fed9c4e81909d07fb1972", +"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "2ac234772fa838e2f9b47a492f47671e82156df34e8fed9c4e81909d07fb1972", +"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "38b818d6dfc2fb7302f4b0d8815fff97eefc8488f5721566f2fb441e8ae57eb8", +"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "38b818d6dfc2fb7302f4b0d8815fff97eefc8488f5721566f2fb441e8ae57eb8", +"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "e10086db9e8ef3ea3b115d6ee721f07cedb65ed7a4f456ed13cc18074bf2b9e9", +"T3B1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "e10086db9e8ef3ea3b115d6ee721f07cedb65ed7a4f456ed13cc18074bf2b9e9", "T3B1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "b77095b59b31a0006d3645e4f0c02ed59fa4bf2b7c30b44a066f1e3aa7343ed6", "T3B1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "629b865cfa6af2dcc2bc542b04b94aadddd491e8e2c42d864ebd40520a12fa67", "T3B1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "7d04cbe8df43e7682c2835dded486a1b8849fb712d899d5cd56e7b3a104a790b", @@ -15828,24 +15828,24 @@ "T3B1_de_test_msg_applysettings.py::test_safety_checks": "ea2c33d270aaabf7023776a599efe8710814a1bd891023bb906af0b42a35fdbe", "T3B1_de_test_msg_applysettings.py::test_set_label[empty]": "119469596feb7f436ac2a736d5dfad554e7f63344119384069d3bba80bbd7343", "T3B1_de_test_msg_applysettings.py::test_set_label[max_len]": "2ac6ab7d4ad09a8adb6bd7995fb9395dd08031aed8e80bc010d066392407da5b", -"T3B1_de_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "599caff7f441c63179b2092c967279be37a961482ce1676a32a70418f9f57cd2", -"T3B1_de_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "599caff7f441c63179b2092c967279be37a961482ce1676a32a70418f9f57cd2", +"T3B1_de_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "d3bfa5155e6ab1e48b8622fbf86dc01912ed058130da722e8f079955c396697d", +"T3B1_de_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "d3bfa5155e6ab1e48b8622fbf86dc01912ed058130da722e8f079955c396697d", "T3B1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "254b38ef5b6c6fea91460e132192d5228bd8e3a33cb3a3316bf80e4e819817dc", "T3B1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "254b38ef5b6c6fea91460e132192d5228bd8e3a33cb3a3316bf80e4e819817dc", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "dbc5594d5684654d7d447c5a38f9b219874338c420d918510ae20804636ca028", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "dbc5594d5684654d7d447c5a38f9b219874338c420d918510ae20804636ca028", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "bd0ccf42d811136b1de5be24b8ecd93bef160ae03d45af6b3b9660b30334e217", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "bd0ccf42d811136b1de5be24b8ecd93bef160ae03d45af6b3b9660b30334e217", "T3B1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "254b38ef5b6c6fea91460e132192d5228bd8e3a33cb3a3316bf80e4e819817dc", "T3B1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "254b38ef5b6c6fea91460e132192d5228bd8e3a33cb3a3316bf80e4e819817dc", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "9a5a90b3dccf4f6990932490492e46f1da0e9f26fe3bfdc59fdd418a32d82a22", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "9a5a90b3dccf4f6990932490492e46f1da0e9f26fe3bfdc59fdd418a32d82a22", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "02d5d14d64412822aeb0c1d612ec3542f2017e86074a9a9621713799193bfe05", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "02d5d14d64412822aeb0c1d612ec3542f2017e86074a9a9621713799193bfe05", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "2289b0d1880cea089c63bc54e582c9d374f87391313d63a6009253c76f3bfd6a", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "2289b0d1880cea089c63bc54e582c9d374f87391313d63a6009253c76f3bfd6a", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "9713d07ccf647d26b110b705f3ed5651f9d6aaceb73256fa6f1bef2a54f0bac7", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "9713d07ccf647d26b110b705f3ed5651f9d6aaceb73256fa6f1bef2a54f0bac7", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "75958d95de76213cf3af0683dd314ca8305af6711bc8796a864f760ad8aba42c", -"T3B1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "75958d95de76213cf3af0683dd314ca8305af6711bc8796a864f760ad8aba42c", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "2750bb89931ad966996e440114be04ea941679f1c6d29d4d235914b744cf4337", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "2750bb89931ad966996e440114be04ea941679f1c6d29d4d235914b744cf4337", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "14bc5207d62f54f4c6ede351aa05b8e69850f7b4d8d4ec386a0bd1b9cb7c2a25", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "14bc5207d62f54f4c6ede351aa05b8e69850f7b4d8d4ec386a0bd1b9cb7c2a25", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "a9b1a38e98e2394ce407f1d6fd1dbce2b3e40fe56cb8aa8f4cfb7e4fea10c38c", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "a9b1a38e98e2394ce407f1d6fd1dbce2b3e40fe56cb8aa8f4cfb7e4fea10c38c", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "78e70e979a7622e2f446b94add999ce08d0e3ec4fbdfc7dae4165ad642d638c2", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "78e70e979a7622e2f446b94add999ce08d0e3ec4fbdfc7dae4165ad642d638c2", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "e7d93e678bae5a4487e87ce25f25050e74e7816e0c44d267bfe2e9131b13914e", +"T3B1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "e7d93e678bae5a4487e87ce25f25050e74e7816e0c44d267bfe2e9131b13914e", "T3B1_de_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "025f1aa62a94702b54b57efe9fc4f6f12c1cdf410639c57c8e8553258c847839", "T3B1_de_test_msg_backup_device.py::test_no_backup_fails[Display]": "7ef033bb57fc60c67d8bcca430291af08f49b47d09827b57f94636e65d12d224", "T3B1_de_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "4c7a1168e41dbd7a521b5d135c19881c5d8ea0c5c305ca71275fdfd496552674", @@ -15861,9 +15861,9 @@ "T3B1_de_test_msg_changepin_t2.py::test_set_failed": "4465b216cf1caab02cba78797e5d9ec98569ea8e384bf5a6e8f741ca84e4c298", "T3B1_de_test_msg_changepin_t2.py::test_set_pin": "2176d1a55ee35849aa3a75bb8934bdcd0910e71c7972e128c3920427200eeda8", "T3B1_de_test_msg_delayed_ack.py::test_abort": "2cafb11e63d53e6835e008b2c0e38dbb5ff792ffe6e9f113f6a25191eecb7264", -"T3B1_de_test_msg_delayed_ack.py::test_backup_no_acks": "79eb62c0ad5fb8135acfbda735690e1c1ad2f0811a939f56af6445f1d7e567ee", +"T3B1_de_test_msg_delayed_ack.py::test_backup_no_acks": "f8465651d2d8a446307b13bc0c95680c24043a7b007593e8f990242c20cfc6d7", "T3B1_de_test_msg_delayed_ack.py::test_delayed_ack": "2cafb11e63d53e6835e008b2c0e38dbb5ff792ffe6e9f113f6a25191eecb7264", -"T3B1_de_test_msg_delayed_ack.py::test_setup_no_acks": "ff42ec9e79a17e2b513f79cfe7572d8545016796e26e23362193344d3eee2149", +"T3B1_de_test_msg_delayed_ack.py::test_setup_no_acks": "ed858a960511aec5197e86a09a2ff676e6108a4bb4d482869e515d01eff17556", "T3B1_de_test_msg_loaddevice.py::test_load_device_1": "beaab1bbce478e8e7081e2617ead0f3c345315b0938842f65745f395f9706604", "T3B1_de_test_msg_loaddevice.py::test_load_device_2": "2fd2f6866b5292ff4be26dcf535fc35024c2ab960b1343233eb6777f7e329fca", "T3B1_de_test_msg_loaddevice.py::test_load_device_slip39_advanced": "beaab1bbce478e8e7081e2617ead0f3c345315b0938842f65745f395f9706604", @@ -15899,10 +15899,10 @@ "T3B1_de_test_protection_levels.py::test_unlocked": "472c59187d5fafccce4e4e35c670fe698f61c91bb3af88bb8d4c4c1a25b7454d", "T3B1_de_test_protection_levels.py::test_verify_message_t2": "f242c4b7f6d04cae87968697eca25299b910c195774e8d267b1221ee4fdfd5e6", "T3B1_de_test_protection_levels.py::test_wipe_device": "64c53dc153840f2ed4277ba96c614eae3b23e9bb5ac164681febbd4b209ff9ab", -"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "9b32b570c6c0d69b4e609ac5f03dc981527326e486fc3ef0841a150ee71cd4c9", -"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "e7d74dea8d4ba32e469a9762fcd4ba7923ea00e6a72261f15aa8a99d511e4005", -"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "e7d74dea8d4ba32e469a9762fcd4ba7923ea00e6a72261f15aa8a99d511e4005", -"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "5290bf7264203241cc7b1be3db6cbe8bc78a8076ea6aa3e3f1da249fabdb811c", +"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "107d91a2b13c93d27d5f3ef6778f5ead4d841b7f2411713167bf8da169fe193a", +"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "8d4bcfdec492c0dffe40aa4bd04d2e414d1bf7b19b91936119099aa9bc500593", +"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "8d4bcfdec492c0dffe40aa4bd04d2e414d1bf7b19b91936119099aa9bc500593", +"T3B1_de_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "a925fb970ea631bdad4f1c360fa637e516dd9feacea6b1fceb111142290ca4a3", "T3B1_de_test_session.py::test_cannot_resume_ended_session": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde", "T3B1_de_test_session.py::test_clear_session": "3611bf9e527e7eba8ced88b856eaf17ed63a630db8bfc1a6e7dc6a5796dd5e2b", "T3B1_de_test_session.py::test_derive_cardano_empty_session": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde", @@ -17292,34 +17292,34 @@ "T3B1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "e8f62bc3af7bdf998cec98681735b13eff8398d17a47189d0436a988bf2850c7", "T3B1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "50bd69798ea98f5e7f222a7dc2576d6ba896008955ea3fac3e8a6b323bdf1c53", "T3B1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "f2f409b48ed48847e7f95cec95b633654d151bf94f9f806fc3b812afa758a561", -"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "b88e213c5883b8b8939fa26251ad83248716a16e6d00b11d0589bb7e15869f07", -"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "a2a50c06aac999fd774633d2c7bf114be0fb55b295c78c780b20e0097b61d091", -"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "7891b590c7f541b04367206f6e1abe2c4407cccc3e1ed56e8f5997b67de2f0a5", -"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "2f23b5708987da7f8adb0ca2a13c3124375a5154422cd31beac9a488435ca91e", -"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "3cae5a0ade4e7370801fe09be699fe14f871b1773dde9b7f3b9afd608661ab32", -"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "3061473f59f33240bc014c74973b776489895b58d8b35ec413bd87b6c77f0339", +"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "2c9ec7b7fde965bbcf1be1c0a474bd381b6f0dd726a3fadf99ee1fccbec2d390", +"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "b62880a9671536f499932721a58630c8d3239c7735daf5dadfcfb252c8fd3213", +"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "84935fc8a37cb3e3f83cf761057dd70ac6a333cd7f03e9b5c19ab6b749b67b19", +"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "76e7294bc70cafe8a4b2bdd0c02078334e80a23e9a4b20bd6b008a4bcf74fdf1", +"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "ba47e078d4519e13f39bc14f40825d3b131f25f8e9e34e35be2fa1efa51b43e0", +"T3B1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "ba1ade7cd46e9993f0e6721c9c246372235757b615d7c9c02310c88e72212d80", "T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596", "T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "5405190d95ef5eebdac4783e1c199cb1cf45b7dfb6ef1d38ab356bf9b676f7ed", "T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "7573e5fdcf90b4fd4e1f14aec29d40d05eff1599f6143dd92589e0ba5f1cd1b9", "T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "5405190d95ef5eebdac4783e1c199cb1cf45b7dfb6ef1d38ab356bf9b676f7ed", -"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "4abfc8e31cb723066ec189aff1944b5705a860ceb4d0dc2279a9e3c156a95ef8", -"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "4abfc8e31cb723066ec189aff1944b5705a860ceb4d0dc2279a9e3c156a95ef8", -"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "6a87245acbfcc0edc5c98035416a747dc279fb5a48bf23ab59981308656af133", -"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "6a87245acbfcc0edc5c98035416a747dc279fb5a48bf23ab59981308656af133", -"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "9e3afdbda574a89666c3844815a48ffb52626c83e0871b89130844dbf3d912b8", -"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "532946b8d9b2c0d7403d7c209e1342a6bb56327769f0c7e67c779a633afd20db", -"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "dfebacc6e66c6df6be4989ae80666f314de58d48ed243692088e637dae0705db", -"T3B1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "67f0d272b63d4cc0fa08d963afce63ca49fc004348df162f783368ba38c2e748", -"T3B1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "d2a3452d5dcd4eeae1654a665b269a053182f3b7bb7593bda83d52895bc73bb4", -"T3B1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "40e8ef83f8136405e1de3afc00182124013bcff51fdb411ed5dc2b86708bffd8", -"T3B1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "074acefbe9f39129771889b6a4b0884b2de0dcd65b3f9a129b838dbde0302a89", -"T3B1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "074acefbe9f39129771889b6a4b0884b2de0dcd65b3f9a129b838dbde0302a89", -"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "33e19293a71f331c677b47ed23eb85782ed52392d07a0c41ef40622b5923cf8f", -"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "33e19293a71f331c677b47ed23eb85782ed52392d07a0c41ef40622b5923cf8f", -"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "e223c0e310bb816a208e92478b116d237831320075622075b965e12c21b65544", -"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "e223c0e310bb816a208e92478b116d237831320075622075b965e12c21b65544", -"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "3aa25f606d964244326606a6ad46702916d3dfbe46c9a1fc5fa26742b0fb1860", -"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "3aa25f606d964244326606a6ad46702916d3dfbe46c9a1fc5fa26742b0fb1860", +"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "f3a3af4dc52e38f8c10e39e2a650a21151ebedee292351c093dcce1659d194ac", +"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "f3a3af4dc52e38f8c10e39e2a650a21151ebedee292351c093dcce1659d194ac", +"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "7e2e16e49b8aefa3d677b2c9c4b21fbb8ac880cbee74d9326905ff1630d6fcf3", +"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "7e2e16e49b8aefa3d677b2c9c4b21fbb8ac880cbee74d9326905ff1630d6fcf3", +"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "a6dbd381fb8ceb126f817228d303e1e2613aa5c2764d911874c717ab36cd251a", +"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "eef559a4442e3e148c28630e44c84fdcb1587b361827956204f57f348119fbaa", +"T3B1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "3cca7c4aa66c2ff2ca751eba6f06e3c6073a471c2eebc0689578fb44533474fd", +"T3B1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "a9ff404884569350e130560e811d8aa34117e753776ab568e15ca4f99287cb84", +"T3B1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "d7e2356db085e1a0e9d0ab1be66ff79aef080ac8f00cc2da714dbb25797110fe", +"T3B1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "7e76ae282d27ad73b7d64cb42f53bf69324029ffaf2192b8ddc6ba4112193a77", +"T3B1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "ce95b341f8d4fd13dfb7f5714e3695da9f4218148461415b719871b0f433f2ea", +"T3B1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "ce95b341f8d4fd13dfb7f5714e3695da9f4218148461415b719871b0f433f2ea", +"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "3f61db831e67e518fffa0f03b990762af04e262bfa76d87e51f0e154107247e3", +"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "3f61db831e67e518fffa0f03b990762af04e262bfa76d87e51f0e154107247e3", +"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "617a8b72624c2b6d847572f98e35a7c8be0fc5eaf38af248be8f0fc3a0f6403f", +"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "617a8b72624c2b6d847572f98e35a7c8be0fc5eaf38af248be8f0fc3a0f6403f", +"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "922fba149a3051fbb2d8e2a94c04305592dcb2f50217809f7cf5614367d37c81", +"T3B1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "922fba149a3051fbb2d8e2a94c04305592dcb2f50217809f7cf5614367d37c81", "T3B1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "467be98fc1563466b63747097017bab05f283e8f685bae98043bf9caadf2adf9", "T3B1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "07fe720f2c2ecdaafac8b72e26e393aeb6f7ef0f9e72b3d1ce76c4e640a954be", "T3B1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "af343cbe91c4a9fef5ac24feef5b091130380707c55a8659d6ffa1dccdfa896b", @@ -17597,24 +17597,24 @@ "T3B1_en_test_msg_applysettings.py::test_safety_checks": "a6d992dd20fa98a95f5ce9d5b0330d54fe74f386dd203db0b2034e7301ec7038", "T3B1_en_test_msg_applysettings.py::test_set_label[empty]": "4212e27bf4a188b9687ca5c02d3643f23955c36d1b12f859b90d875b63c47751", "T3B1_en_test_msg_applysettings.py::test_set_label[max_len]": "80fcf3fc6d9f76d74e8ce47ee4f4d0867a6ac32a6551685a833d0ade324ce190", -"T3B1_en_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "a6d4c598a718ddc116afb26fa4445135328ec8a61f834d3c84f8ddb7d18f4994", -"T3B1_en_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "a6d4c598a718ddc116afb26fa4445135328ec8a61f834d3c84f8ddb7d18f4994", +"T3B1_en_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "b181b96415000faae290408a46b8a2520bb03e021060cd621737c077d8b979ed", +"T3B1_en_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "b181b96415000faae290408a46b8a2520bb03e021060cd621737c077d8b979ed", "T3B1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "e6a99b6fda271dc96d9d5c7c496524f0142e4d02527e3097b21f427d25b50b2d", "T3B1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "e6a99b6fda271dc96d9d5c7c496524f0142e4d02527e3097b21f427d25b50b2d", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "cdf4cf89ba81fa2e245ed292082ea948f10e6ed51efc45d33527acc8fe82cadb", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "cdf4cf89ba81fa2e245ed292082ea948f10e6ed51efc45d33527acc8fe82cadb", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "b392b00e1abb48ac7f394734384e1d0a567446e7cc9832bd2c8c84ecc5b0ac55", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "b392b00e1abb48ac7f394734384e1d0a567446e7cc9832bd2c8c84ecc5b0ac55", "T3B1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "e6a99b6fda271dc96d9d5c7c496524f0142e4d02527e3097b21f427d25b50b2d", "T3B1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "e6a99b6fda271dc96d9d5c7c496524f0142e4d02527e3097b21f427d25b50b2d", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "82654e87f295cc0071dcb88cfb9e696628e24e37aaa1848cd98638793833fda6", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "82654e87f295cc0071dcb88cfb9e696628e24e37aaa1848cd98638793833fda6", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "6dcea1879742e5eae33dbc5099bf9aac7b6b68464a9f06ed8efd3039288b31da", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "6dcea1879742e5eae33dbc5099bf9aac7b6b68464a9f06ed8efd3039288b31da", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "40a4a06c9196922a484800efe098eec6be86118163d5c9c38089220f0d9eba3a", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "40a4a06c9196922a484800efe098eec6be86118163d5c9c38089220f0d9eba3a", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "5bf32049a938ad3221fae05b9ac6606494bf31a14a14e46caff6aeb314fe79b8", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "5bf32049a938ad3221fae05b9ac6606494bf31a14a14e46caff6aeb314fe79b8", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "54b6c05e545210771584303f80fcb6f8760f3413a6f82785cde7697840b4738a", -"T3B1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "54b6c05e545210771584303f80fcb6f8760f3413a6f82785cde7697840b4738a", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "ec6d91f670d5f6363680688ce28cae8a5d66a0f7fde520a56c0475931cd2bff8", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "ec6d91f670d5f6363680688ce28cae8a5d66a0f7fde520a56c0475931cd2bff8", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "980f43ab5295a067bf0d6ce39b98201f0bfb23dcc3623c522ae19a40274fb885", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "980f43ab5295a067bf0d6ce39b98201f0bfb23dcc3623c522ae19a40274fb885", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "4594803dd1b69c3d4685893bf22fb16dea3b56d7a4ed46491663cbc8e8c877ac", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "4594803dd1b69c3d4685893bf22fb16dea3b56d7a4ed46491663cbc8e8c877ac", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "1abca5e916998cf434e346174e1d073100a58a4aec900c887f9befe34d7cbd7c", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "1abca5e916998cf434e346174e1d073100a58a4aec900c887f9befe34d7cbd7c", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "defcab96fc50591bc38794f5fe070738f6c644dabed73107e5b75fe38cf14100", +"T3B1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "defcab96fc50591bc38794f5fe070738f6c644dabed73107e5b75fe38cf14100", "T3B1_en_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "7cbb759dcca46c3cbca4845d1f717c732c9ff79111db125d74235d3c33ede8cd", "T3B1_en_test_msg_backup_device.py::test_no_backup_fails[Display]": "54344b55b5e4df4843b8508830f10321cad111192232fedc05fd3c6fd33c2951", "T3B1_en_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "98aadf032bc184a8ff51fc56a735a8b4c9e767e5d3c0a80aa47e9dababe6dfaf", @@ -17630,9 +17630,9 @@ "T3B1_en_test_msg_changepin_t2.py::test_set_failed": "326b2d556644f06cab06dfaf72b3da703b9b0d003e67a5b842569bf92972fa64", "T3B1_en_test_msg_changepin_t2.py::test_set_pin": "0c2e421774b2e90c4b2e029017ea3a65b138717ba9bfd6a02112adbcfaca266d", "T3B1_en_test_msg_delayed_ack.py::test_abort": "5eb2fa358b8e0a199b48e9ab34dd41d4c40ba87355c17c4a61d97c026abb3027", -"T3B1_en_test_msg_delayed_ack.py::test_backup_no_acks": "0f32bf4a43f3620a346b8907bb7ca3b1ec034e757667503cbf37cdc2ef1ba150", +"T3B1_en_test_msg_delayed_ack.py::test_backup_no_acks": "77f441b491bc4abc9eab04f7c78bd6406c25e62c5289ac98e65714319e51d510", "T3B1_en_test_msg_delayed_ack.py::test_delayed_ack": "5eb2fa358b8e0a199b48e9ab34dd41d4c40ba87355c17c4a61d97c026abb3027", -"T3B1_en_test_msg_delayed_ack.py::test_setup_no_acks": "5b4fea9fc530b2a0c6c9bf5bc980fbd7f1cd2e5da7d4cfdfa3be868e28472ab5", +"T3B1_en_test_msg_delayed_ack.py::test_setup_no_acks": "dc798a707cf881651ad30721a230e325080744a89a14a305a390db8f0a109136", "T3B1_en_test_msg_loaddevice.py::test_load_device_1": "d5b26ad520e0a3b0010356dd85a854aeff2770dc9d5a807037248eb433c32f53", "T3B1_en_test_msg_loaddevice.py::test_load_device_2": "01f804470023bc2c686b13425098a3f16bcc081fb3337ced64b916a51c6d09e7", "T3B1_en_test_msg_loaddevice.py::test_load_device_slip39_advanced": "d5b26ad520e0a3b0010356dd85a854aeff2770dc9d5a807037248eb433c32f53", @@ -17668,10 +17668,10 @@ "T3B1_en_test_protection_levels.py::test_unlocked": "da37880e17049cad50f2ef7e3375bb2140fd7efc8c0f979381016b4997031532", "T3B1_en_test_protection_levels.py::test_verify_message_t2": "27732702d8241c1b650280db1019fb061b446ef67c2d3cb72a4887587c7eb20d", "T3B1_en_test_protection_levels.py::test_wipe_device": "44a95969711c9fb85e9f8458ba5ba9fc4d3f65280f4c39172cead0f88dada438", -"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "3edacc362e507e4c25e932e56e62f53d0229d77b4bbd44ee08a9f3a056418956", -"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "88fd7c70dd66f47c2f0650ce1209507c9b87c741b4fa278a32228628dca2f150", -"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "88fd7c70dd66f47c2f0650ce1209507c9b87c741b4fa278a32228628dca2f150", -"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "b0b2e4cc027910b29f9b0a891a91564acd7e5cee1bf19718ca47c3016abdbd73", +"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "72c71c8ea4bd15080a9f1d3159cb4773c8c73c45cc9932f7b9b434f05652fc35", +"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "472b44753a1024cd445a703e449f305e44b7899bec09e1d9273f99562c2056e6", +"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "472b44753a1024cd445a703e449f305e44b7899bec09e1d9273f99562c2056e6", +"T3B1_en_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "9a671296bf37357e9c32b52279ff5c5444363f74ef50d077446708640c936b3c", "T3B1_en_test_session.py::test_cannot_resume_ended_session": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596", "T3B1_en_test_session.py::test_clear_session": "32e62ad94fbb31db7986b17265b8817c1a5c42fd4acfa0c3d88c2781e390a5a0", "T3B1_en_test_session.py::test_derive_cardano_empty_session": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596", @@ -19061,34 +19061,34 @@ "T3B1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "c2d99c0eaa6cbaf91f1ad49f25af24d853febcf04dd432f96022e5a4d0fb4157", "T3B1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "fd8026e4d8efa86d5ccffed77e00e060c96af68fd94b7e246faeea15f7b5eb6b", "T3B1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "6af2c6c60fc7eb1b84c3ad8f113fa5360511bd5a7dd29ae9f89668e696f9656c", -"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "8c7dd562252dad0eaa0daccb52d5c91a6c85e2df1faa41573bbe1cc0682a9b76", -"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "40e4975be6154e050f05cdf6363079aab224321d3b9b2edd3e0351cef34bcd13", -"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "acdbc1ccc34e53ab5ec6457db50a876bebac3a9b05de11b4d33692ce670aff69", -"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "71de89d4d9648afc20e6132b64dc52f13e3459d3ae0d9319638037f2c9454ef0", -"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "5c7a6cd8ad8c84518bd264954d96a6a68ce7f021a0029d67ce2b95e9f684f856", -"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "3b8bcdccf855f2b9ecc805c1a005c45e84bed0356ab5460b3862507ab62eef25", +"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "364100a10cf53cf622d5691e600d0812bc8ded6470cbefe434cb7c59d28876e9", +"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "964a5122b612ddb43ea82146fd2394838e467ffe5c87fd5c1cedf62e331b4a4c", +"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "89297ab82c5876cb4c80fed7266f337cca206e7db68da4c0e0804cc5e97a5dcd", +"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "5bd598038e240350826b3eb704ebc1a974565299964d1cfff5650ec99daf29cb", +"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "58ec04912f664dafb09228f1b82f170a52a309e26ae025fe5aa393721f80551f", +"T3B1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "baa6f70918cadd168b76a9becbdae7ccdd79900f507da3b901848405e6d1c160", "T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8", "T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "698f6b0e948bdd2569994a669eaa1d5b096f440c6cac0671114e3bb168cecd2f", "T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "a2975bbda815201675f5d4f81b1aa1d1a0c350386f3cc42fe3af894ca28e3cb1", "T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "698f6b0e948bdd2569994a669eaa1d5b096f440c6cac0671114e3bb168cecd2f", -"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "2f103cf84c00808592e844c450949dcc40826d19f18fed2626d2d7863e0a257d", -"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "2f103cf84c00808592e844c450949dcc40826d19f18fed2626d2d7863e0a257d", -"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "fc91c5383a5eb51a1643bbd368acfdb5a8d101708b5dca2dd24956d3ebf73a2f", -"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "fc91c5383a5eb51a1643bbd368acfdb5a8d101708b5dca2dd24956d3ebf73a2f", -"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "150eb1251dace7fe6116ef8a637cbe1449fcf755422d0012197bdceb703d7e01", -"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "3873135a969ed6c9a2322820bec90ba83f0cf67f40ed1a0094cfba8412308d8e", -"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "7ce8f7df75b18498fe148ee3e6310b856dcdb920ec0af8877b411210fe447f08", -"T3B1_es_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "055c8e29b1b5e181d34c9842cacfe923d2cef351d63e7c0ea5292b4a8aa82002", -"T3B1_es_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "a2f52510fda51d56e82d293c0ab97d127be7a10ef0aa162270482eeaba12bc5e", -"T3B1_es_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "1636f75907d4fae5a5f36b6a24ceba46de23e31e8d9b8f596f8d0f3abec9c1d1", -"T3B1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "59995f0793b205900f885c5c2caa020b25682d5cd9e9d3f2dd1f1a1889c5c60c", -"T3B1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "59995f0793b205900f885c5c2caa020b25682d5cd9e9d3f2dd1f1a1889c5c60c", -"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "6d25893af1a257ad458064a61bdee4bfe9cf0e5e205cac4e3b19c79d9a0813e3", -"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "6d25893af1a257ad458064a61bdee4bfe9cf0e5e205cac4e3b19c79d9a0813e3", -"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "94669eefa284b3ce1517c5c409d417b2ee4f8ba06316f25082d52c30e29d303f", -"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "94669eefa284b3ce1517c5c409d417b2ee4f8ba06316f25082d52c30e29d303f", -"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "4f282f417755d2b0f49f6a869118200ed7a6d4c124bd2da0583543609fdd72b8", -"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "4f282f417755d2b0f49f6a869118200ed7a6d4c124bd2da0583543609fdd72b8", +"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "1ff34a1ffa80013fa09f2ae52064e09bdc08ab12900dab401b877c94e92a84b8", +"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "1ff34a1ffa80013fa09f2ae52064e09bdc08ab12900dab401b877c94e92a84b8", +"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "8e473a032e5624407256cfb1de2ef5afde7e0db09814c39546fde312410474f6", +"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "8e473a032e5624407256cfb1de2ef5afde7e0db09814c39546fde312410474f6", +"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "7a0b28bfefe0283732ed0a7c473cb73ca08d31acfcbf6bb2f66f3be7ad1ad26d", +"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "7edddde5e04093c2a500db4a3653a4570cd2c00f395c0c4aa2608edeb452b4d9", +"T3B1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "0452acc1ab93bb97f1287a1d04a303497df8b54844175686d649683e87bc36a7", +"T3B1_es_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "673ab724554c0ec464895f932beb1dda8710f74d8f6efbaf89328abb257f64fc", +"T3B1_es_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "4f6f97d4fbf789bf7ef503eb0a2785d49b6a9eab9f053b3d33b5b4b543eae833", +"T3B1_es_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "3056981648c2b890ad815f23cd298526a8de7b11ae25201895fd14d816a43fed", +"T3B1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "b117ca397f2f3e2f40ea3662097c5ba88f95e1bb52fac63bb5b124e292cd45d0", +"T3B1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "b117ca397f2f3e2f40ea3662097c5ba88f95e1bb52fac63bb5b124e292cd45d0", +"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "d7dee0ff379b4bf02fcb18ccf1d2b92bd750baaff0e63770fcd2f1de0d047efd", +"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "d7dee0ff379b4bf02fcb18ccf1d2b92bd750baaff0e63770fcd2f1de0d047efd", +"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "f2bb3bf656a1b2cfe4b8ba3d19f5ae19220ae362172987404746ce52f9bcd83b", +"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "f2bb3bf656a1b2cfe4b8ba3d19f5ae19220ae362172987404746ce52f9bcd83b", +"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "84e56e796ea5dcb81caafc303c1fa37675e302b474e31faf33ee4fdef45fbbba", +"T3B1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "84e56e796ea5dcb81caafc303c1fa37675e302b474e31faf33ee4fdef45fbbba", "T3B1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "45c2074656067680af556b35638986873ec418fe409aaed019b181113afafd81", "T3B1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "0c17abb7947a702a8fc435aed480c6f5f189982eefd3e83c6d87b69dc8e267fa", "T3B1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "c500b0a31ff6c65119670c8e78f3103c17dba76c2355f75921dbc4a6dc2d352a", @@ -19366,24 +19366,24 @@ "T3B1_es_test_msg_applysettings.py::test_safety_checks": "f092045ae168a15d87272f2ff857079686102e8f7cf5941d386cfc4a4e17c5d7", "T3B1_es_test_msg_applysettings.py::test_set_label[empty]": "7fad45012f522a3596f87f343be82bb7193ab673dffcb81f2fdecec4790078e5", "T3B1_es_test_msg_applysettings.py::test_set_label[max_len]": "2ac3e4f4a4c324cd8ce8ae41c56c2bedbf4c591f19cf648162df94a089b2e368", -"T3B1_es_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "eb37c24bb9a8722cb5107af49afbe21624d29ffd90531a6edda97f04f566ce09", -"T3B1_es_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "eb37c24bb9a8722cb5107af49afbe21624d29ffd90531a6edda97f04f566ce09", +"T3B1_es_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "7d505b6f63d47ce63776096455f890dda7725161d355c7bff9891bc2c9eeda0a", +"T3B1_es_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "7d505b6f63d47ce63776096455f890dda7725161d355c7bff9891bc2c9eeda0a", "T3B1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "bbcc34746646af9523aad35e853d3d8e316e078f7b5b10a385a5e999fee3e9bc", "T3B1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "bbcc34746646af9523aad35e853d3d8e316e078f7b5b10a385a5e999fee3e9bc", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "b6259dd33838293e5b3b0ea27561edd3c63dd89afcc14b193a13c3ae0dc2f411", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "b6259dd33838293e5b3b0ea27561edd3c63dd89afcc14b193a13c3ae0dc2f411", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "bae58c7938cd7e8920a211fe1ea11b17af93eeb87b91681c177a6ec5c0a0c913", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "bae58c7938cd7e8920a211fe1ea11b17af93eeb87b91681c177a6ec5c0a0c913", "T3B1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "bbcc34746646af9523aad35e853d3d8e316e078f7b5b10a385a5e999fee3e9bc", "T3B1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "bbcc34746646af9523aad35e853d3d8e316e078f7b5b10a385a5e999fee3e9bc", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "ea6920e27801cedaa902638e21aade6c7444cf502a4b6b8d7528de392fa4b922", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "ea6920e27801cedaa902638e21aade6c7444cf502a4b6b8d7528de392fa4b922", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "d4d99d025762d4aa34378511aeff79364aed810e5092a642755f763d51c13bc5", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "d4d99d025762d4aa34378511aeff79364aed810e5092a642755f763d51c13bc5", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "0e93ebb5ad934b30c14acc1f70db5ae6ea338ebbb4e39e92a7e8c585a5463196", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "0e93ebb5ad934b30c14acc1f70db5ae6ea338ebbb4e39e92a7e8c585a5463196", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "9f887ad06766fc391f077831fdc34792db4d160ac045e6f910ebcfd35a32af8a", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "9f887ad06766fc391f077831fdc34792db4d160ac045e6f910ebcfd35a32af8a", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "29640f46eaa891ab254878ac2f2068473d2d6a9817ec7f1c3c99cc9a89b70301", -"T3B1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "29640f46eaa891ab254878ac2f2068473d2d6a9817ec7f1c3c99cc9a89b70301", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "a69bf4116de8528a98ef9494ab5cf914d7fea63215ab28d6799e5a274947648b", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "a69bf4116de8528a98ef9494ab5cf914d7fea63215ab28d6799e5a274947648b", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "0f3ecdb6e19deea9bcabb03bb9212312cdd177133410ee24adf0db7fe3b79d05", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "0f3ecdb6e19deea9bcabb03bb9212312cdd177133410ee24adf0db7fe3b79d05", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "b378bbfdaec0065628fca1954ae93a9a33fcba0bd43fff1c5bae7a57a5607eac", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "b378bbfdaec0065628fca1954ae93a9a33fcba0bd43fff1c5bae7a57a5607eac", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "d613dc9a538939ba70aa740ebd69d82e58fb29fbf15b8db2b86ca8bb4c994114", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "d613dc9a538939ba70aa740ebd69d82e58fb29fbf15b8db2b86ca8bb4c994114", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "e56cc7cced3a535d8491e68b1aeca59cbe4542e5274a41db13878192038fdee9", +"T3B1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "e56cc7cced3a535d8491e68b1aeca59cbe4542e5274a41db13878192038fdee9", "T3B1_es_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "bc18081d448de3ea3663e8a550685ad0ff3ed8c80374a920ad115dfc8e11f880", "T3B1_es_test_msg_backup_device.py::test_no_backup_fails[Display]": "2ebbaa14141421b3db4470c4cb20f53e0187de22ac6c761eb145fb2a75df3065", "T3B1_es_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "c6fee12fe403fae11c19dcec90c7c342c29931c12566f26f6e4e408bc1acc81b", @@ -19399,9 +19399,9 @@ "T3B1_es_test_msg_changepin_t2.py::test_set_failed": "516325e60aa8183199c2a47f40453e1e4017a576e220e45df585944b1e90c725", "T3B1_es_test_msg_changepin_t2.py::test_set_pin": "4a75f32e5c715811a2d3a2b0ac63c616d49a3d448ba5592e0f63f820da732b4e", "T3B1_es_test_msg_delayed_ack.py::test_abort": "8f04fba14deabb8f580e844593e98664b219b0791c6c2d4c3faa0cea5af11c2b", -"T3B1_es_test_msg_delayed_ack.py::test_backup_no_acks": "c07988af68a2ba8b76da611e64fb7874d5dffe7cabf6b50889d7fd372610eafa", +"T3B1_es_test_msg_delayed_ack.py::test_backup_no_acks": "0c850b5872829d947fd8832bcffd03368911a2b20701d7930ef22538e98d76f8", "T3B1_es_test_msg_delayed_ack.py::test_delayed_ack": "8f04fba14deabb8f580e844593e98664b219b0791c6c2d4c3faa0cea5af11c2b", -"T3B1_es_test_msg_delayed_ack.py::test_setup_no_acks": "e3da4ceb1f0a3e4843cff6eca34222b9a877d857b7bcd7b2946f32752f456431", +"T3B1_es_test_msg_delayed_ack.py::test_setup_no_acks": "f2e34e0e9db953cda9c8ee5410309e55048080ebe22eb8e2a50d96d7c74a07e7", "T3B1_es_test_msg_loaddevice.py::test_load_device_1": "bc8149277f84f118118b67d6d03f9a77470526310aeb84331655045d93bf405f", "T3B1_es_test_msg_loaddevice.py::test_load_device_2": "d5919b12a5f9c4b587cf3fd285fb1c906158c2af602470f5c57fdeb361266e62", "T3B1_es_test_msg_loaddevice.py::test_load_device_slip39_advanced": "bc8149277f84f118118b67d6d03f9a77470526310aeb84331655045d93bf405f", @@ -19437,10 +19437,10 @@ "T3B1_es_test_protection_levels.py::test_unlocked": "028cf2fab5103bf07096e035ff7f2ded6f30bd9c99ce58d13508766155763be5", "T3B1_es_test_protection_levels.py::test_verify_message_t2": "b9753d36d1b75301b9eb544b50ad269c0e0871923cf72af3cc798c4d83a1c815", "T3B1_es_test_protection_levels.py::test_wipe_device": "406b7ad4d9e74b5a6a8724e4360ae28a9d9612f7782783564f3be6d193624c95", -"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "dda34bf20a28f4a13ff1cea8b9063d2b06c09fbedb4757b98cafee8a66fe0454", -"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "83cceed7a349ccad79e13983569e03d511a83c4e97f5c0413f0fee59fda0f7de", -"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "83cceed7a349ccad79e13983569e03d511a83c4e97f5c0413f0fee59fda0f7de", -"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "a594333b86c5eef5b1e235c51c07ce1f541cba221f9a970d2e2c5df163e8027f", +"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "a420fec4b7480c73df50e591f2731e9f650ad95f726b242c42af4658a66fc7fa", +"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "c5fabfb7c35de26cab5d3e565a6ed6d3d5ce610da38b2dabf994b05a0b515017", +"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "c5fabfb7c35de26cab5d3e565a6ed6d3d5ce610da38b2dabf994b05a0b515017", +"T3B1_es_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "6929c6d7867612ef87bef9498117d2968be6cdd2bfb8a82fe4750a35b4bffd80", "T3B1_es_test_session.py::test_cannot_resume_ended_session": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8", "T3B1_es_test_session.py::test_clear_session": "4c3638d57df740ffa994ee0481d66f51e34fe30d3771b78e0e36c7bace38d13e", "T3B1_es_test_session.py::test_derive_cardano_empty_session": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8", @@ -20830,34 +20830,34 @@ "T3B1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "3968a081a3e5592665f1dc40e9fe9d7b6269afcaef17ddc7738de28a9c17d7a9", "T3B1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "d8649c0a6ff0dd81bd875265beca3555b1012c2c51b6a009391142e6bd3adef1", "T3B1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "991409d9accb80a77958f9a31d977b50209ce1c52b72d6fb683ae5abe39dfce6", -"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "d20c1016a83db148efa6f39c51e1707dc33b8ef50500d5978376d0267754dd46", -"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "f7db5e926f852088f6790f9d7caba5a8e498cc9da0c48679478938b38a06cd16", -"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "1587cc023de3d8aa563d50e7e5b3fc5faefa2e002c1da88d535f9b66656ad17a", -"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "176fb91aefcd34e84ad2d5f6836fb6afada35e7dd8816d069351f2b564d00689", -"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "731c765644ce469b1acc04f6d4e4ac0a4448d41b60da779c4be390b62d942b96", -"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "d82425fa2c5e418f759ba43491f755e0d1bbd84c076e554b65d77f0c458bda16", +"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "151b68e4e3f3b6154bc4ae67ad4f0a95b6282e0ef19021945d94a2df83ce7922", +"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "504af8c11a488e03476b78764fd0abcfa29c5d014dea9a86657205aead666e42", +"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "be1a8cf986d8345edf5ca3d2b350c2972ff673e2ccd100ddd22a4c9254f0e0c5", +"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "3aefe4fa165a5545d394bc9d959ae6ef3f9c7d3570c5d728e3dedeedc71b2a7d", +"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "ea798e9d80cbf35e03ca14b1bb20b379237dfa66298cfe1baac56dad638572cf", +"T3B1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "84f6254a0c54af52bde8d1ddc551e3a19b90adb4048c6227002d1a318be89fac", "T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42", "T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "6c4d6d6c296a2969bd835824f9dd1331d82c65b78d12e1800ed3b9f0fbac03ff", "T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "9697ea23059bec59c78f96ce525e1ebf266965f318d36c9d704f74caeab91f7b", "T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "6c4d6d6c296a2969bd835824f9dd1331d82c65b78d12e1800ed3b9f0fbac03ff", -"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "6f018b8054b0526d2383aa6bfcfe7d421d4a48f67d90dda398622f9b9e5dc122", -"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "6f018b8054b0526d2383aa6bfcfe7d421d4a48f67d90dda398622f9b9e5dc122", -"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "d0f72a6069f71d09abe507459addfab86602ac21417d186211a1c69884b5528c", -"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "d0f72a6069f71d09abe507459addfab86602ac21417d186211a1c69884b5528c", -"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "ef4e9e3792cabc1906ab77d677434e894d21e8fdf893779d33f934d29edbf76e", -"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "fdb178812418bf41aa404b41355bea581f745f7e909e71c2319d8ed341a5fbbb", -"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "9422549b30d9d7f9e3fcb90089f88bfa2b5d8632bfc73c82e14b06e7e01221c7", -"T3B1_fr_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "9014cabe98a73bea18fb8b76b3edbc239e85f99fa4c792222261889ede9b0289", -"T3B1_fr_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "cfa5d81376335799b877c4a723a6cf4cd68a809764a297e3ac644f4bdfc1f151", -"T3B1_fr_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "1bca0a7e930cf1d70bdc45f05ccf879e3392f34ce83c989521394a2c635e9f9d", -"T3B1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "6a4cfaf1cdfee6919b03304b9f8517730b9af1e2ab22c8ec96cf1b0a16df0708", -"T3B1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "6a4cfaf1cdfee6919b03304b9f8517730b9af1e2ab22c8ec96cf1b0a16df0708", -"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "c53241db4b6dbb9153e6628b0f444e8656db8de92a96fd577dc40c213f253265", -"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "c53241db4b6dbb9153e6628b0f444e8656db8de92a96fd577dc40c213f253265", -"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "42597c92b21a64e5ba4095bdd496c79221465a3f04940be5f8e2009c2b6bef2d", -"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "42597c92b21a64e5ba4095bdd496c79221465a3f04940be5f8e2009c2b6bef2d", -"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "c7e5024d9176ab016c24ddf8ac188cff0a7a4b3e092db99e9a7a37d60e69463e", -"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "c7e5024d9176ab016c24ddf8ac188cff0a7a4b3e092db99e9a7a37d60e69463e", +"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "b8917b68223a8ef6339ef05ac44173f6183c8f0455272e3c22fff1b2d88dbeb0", +"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "b8917b68223a8ef6339ef05ac44173f6183c8f0455272e3c22fff1b2d88dbeb0", +"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "2ff46ef986b486d8b28645b51386f04a3b3f83736a0863eafb49a3eeb9681c6f", +"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "2ff46ef986b486d8b28645b51386f04a3b3f83736a0863eafb49a3eeb9681c6f", +"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "00db56fa47c67d29a867fd4fa90bb5abf4a29ec08b530a4f979a242abc245f80", +"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "b1390471679d6d3d6b69e4e335be91269106a2a05aeb517555f853d7502733a6", +"T3B1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "4267313232de00170b31c646a3579983209a56fe95ed89a8ee4c110119a0b8ff", +"T3B1_fr_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "9469e4e552f4e54aa580a30e5b00e3230bc9196042e1cdef8469c6945ac1b26b", +"T3B1_fr_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "3b2ce1942e6967af31137a5f2b824ce5f71d25588500474d9bde21b2003487af", +"T3B1_fr_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "6446c78803e021499c381ef79ae793e1e86630e2e1365f91e841dfbcc90a6ed7", +"T3B1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "9182fb32f8b12fe8b750a77392eb0f61c3e569f1221398d0715e8c31b4cf501e", +"T3B1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "9182fb32f8b12fe8b750a77392eb0f61c3e569f1221398d0715e8c31b4cf501e", +"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "281acae9309237b1f75a4cb4160365f61fb56b2edb1e892d975e837d18944c4d", +"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "281acae9309237b1f75a4cb4160365f61fb56b2edb1e892d975e837d18944c4d", +"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "7ba36e0178a2e97ff9e40cd5693deacebf359b6df77a1c495bad4da901232f9e", +"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "7ba36e0178a2e97ff9e40cd5693deacebf359b6df77a1c495bad4da901232f9e", +"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "d31783a6bf7a02ece38610389fff96b9d84597ac990250cb455b97cce5e3c7df", +"T3B1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "d31783a6bf7a02ece38610389fff96b9d84597ac990250cb455b97cce5e3c7df", "T3B1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "56f3ff560d0954998353e9370a544286defd67870321d1de6ae617232fea941b", "T3B1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "f71aac1f5c79db1fcdbca1d8e699522d1ebbb3a5ac2c4fe8ab6c1685695b86cd", "T3B1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "2e887fcdc39fb76569234ea95a6daac60dbd9cce153f1085366c1ee607e33449", @@ -21135,24 +21135,24 @@ "T3B1_fr_test_msg_applysettings.py::test_safety_checks": "610762fddc8bf077fcdf0ab9d628cc0546ce4defe5f69a55e7dfa3a64bf10dc0", "T3B1_fr_test_msg_applysettings.py::test_set_label[empty]": "d09e57bd3f6124a982b8e6d49fa6d205de240d046eec731e367eef3fb3f31cc4", "T3B1_fr_test_msg_applysettings.py::test_set_label[max_len]": "98feedd5334b47b416466f0b6daaa939eece8348c4fe82ea0541c560ae01bbf0", -"T3B1_fr_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "6396b68d49123c34226caa7e0e35e9f210cdeca6bcfab0f477ae3d45e1f35815", -"T3B1_fr_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "6396b68d49123c34226caa7e0e35e9f210cdeca6bcfab0f477ae3d45e1f35815", +"T3B1_fr_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "27c2c235993279011bbcc32b8cb4fbcace4094de1ea82b33e3e8aa8d2f95baa3", +"T3B1_fr_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "27c2c235993279011bbcc32b8cb4fbcace4094de1ea82b33e3e8aa8d2f95baa3", "T3B1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "86c2b363b94d0dbdb4a5bdb77101437c72a1ced26822c0e5160fa5378555cbda", "T3B1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "86c2b363b94d0dbdb4a5bdb77101437c72a1ced26822c0e5160fa5378555cbda", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "227d1525cea21b3d25b2d789d0ca30c5e1e231bce3a14ef843bd666ece7df25b", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "227d1525cea21b3d25b2d789d0ca30c5e1e231bce3a14ef843bd666ece7df25b", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "7103f30f7fd1b3f11c25d092e141b7fd5fc2c312b812613aa01a61c3c3874e54", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "7103f30f7fd1b3f11c25d092e141b7fd5fc2c312b812613aa01a61c3c3874e54", "T3B1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "86c2b363b94d0dbdb4a5bdb77101437c72a1ced26822c0e5160fa5378555cbda", "T3B1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "86c2b363b94d0dbdb4a5bdb77101437c72a1ced26822c0e5160fa5378555cbda", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "7818416e4f3487c721c622c276dfdf1772bef0de5b88390cc7d89bbf0bb81269", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "7818416e4f3487c721c622c276dfdf1772bef0de5b88390cc7d89bbf0bb81269", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "2eb5ae817cc5e08dcca90b56a33a73defe024607f9f62d388c87b6b69864a2f0", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "2eb5ae817cc5e08dcca90b56a33a73defe024607f9f62d388c87b6b69864a2f0", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "208922b840a45bd8c7440042ce2b6c6c0c5801adec1ce8f54b2dfa02341c6977", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "208922b840a45bd8c7440042ce2b6c6c0c5801adec1ce8f54b2dfa02341c6977", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "92f5402a8b2f351796728deff6289c54b9bb7d789e4092001438e805567d6644", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "92f5402a8b2f351796728deff6289c54b9bb7d789e4092001438e805567d6644", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "4d3ac30f74bfed10113e3d65fe1b5de2372e1f4c3ab3a27c23a514a59fbde82f", -"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "4d3ac30f74bfed10113e3d65fe1b5de2372e1f4c3ab3a27c23a514a59fbde82f", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "26605e05db3c0b65499d2130cc8329318f706a28b6e3e0cfe3a8e2923867e57a", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "26605e05db3c0b65499d2130cc8329318f706a28b6e3e0cfe3a8e2923867e57a", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "46ef8aed5ddc7801c5ef672aa9496515e92b7f0811f0b4286e0b00ee622a58ad", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "46ef8aed5ddc7801c5ef672aa9496515e92b7f0811f0b4286e0b00ee622a58ad", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "f456776b5faff15f6e4f08c823a80510485451e92255f33289c1dc3d7260c764", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "f456776b5faff15f6e4f08c823a80510485451e92255f33289c1dc3d7260c764", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "29a1494cf7b48bf2f97b8d56c9931c9f6e523ea69e0efa3dd4ef50c8bf39d34a", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "29a1494cf7b48bf2f97b8d56c9931c9f6e523ea69e0efa3dd4ef50c8bf39d34a", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "0661c65dd945eda6046c00a1e3f4b3ba0fc3ffcfddc4c70a6c557a95e7a1431f", +"T3B1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "0661c65dd945eda6046c00a1e3f4b3ba0fc3ffcfddc4c70a6c557a95e7a1431f", "T3B1_fr_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "ba762111d8ab7d4055f6bc2c3757d5a32f1e0f2271b8dd8a62eb02ad46b652a6", "T3B1_fr_test_msg_backup_device.py::test_no_backup_fails[Display]": "255bc9fe0134fce1ea9201b6297647ed6fb8d8da9587f69aaa5e2821dce663af", "T3B1_fr_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "b20a92a6cc9f5c7e715582d56cf9ad24fb80d26106cbbfeb5a69c03a2f84327e", @@ -21168,9 +21168,9 @@ "T3B1_fr_test_msg_changepin_t2.py::test_set_failed": "33826cbcc49a2ba6ca6416377c6d9e564943589ca5fe02716a13cfca2e4823b1", "T3B1_fr_test_msg_changepin_t2.py::test_set_pin": "b5819208902a89d64ee050dc8afa22dd893657304c8e0d2f22afb06bef39cd96", "T3B1_fr_test_msg_delayed_ack.py::test_abort": "ad7668ad01e42d7d306aaf6a04ed9bd8e36932d3151789ed41f4ed040b7dc669", -"T3B1_fr_test_msg_delayed_ack.py::test_backup_no_acks": "091690efdd824ceadf2770ff583db63511708f159b304cf19da9a747486c0b4f", +"T3B1_fr_test_msg_delayed_ack.py::test_backup_no_acks": "7c9bf4de47e71a33624bff7a2555de730d555e694428224332ff2ed2a1056a58", "T3B1_fr_test_msg_delayed_ack.py::test_delayed_ack": "ad7668ad01e42d7d306aaf6a04ed9bd8e36932d3151789ed41f4ed040b7dc669", -"T3B1_fr_test_msg_delayed_ack.py::test_setup_no_acks": "23e3eb38abf292b1cb1302db12188ce95aaea7d830769954816b37eb3f03cc90", +"T3B1_fr_test_msg_delayed_ack.py::test_setup_no_acks": "3066b007a726b1082990b90ea6ab8e0a29ff464e2d5f051f23ae0136a00f950c", "T3B1_fr_test_msg_loaddevice.py::test_load_device_1": "982abff236aa825f7ab056a3fcfe90e5ab8960a5560ec4027840a4310a8d6870", "T3B1_fr_test_msg_loaddevice.py::test_load_device_2": "76b5967628f6a9b3498de573e1faabc15df16665649392911825a7d14f5de099", "T3B1_fr_test_msg_loaddevice.py::test_load_device_slip39_advanced": "982abff236aa825f7ab056a3fcfe90e5ab8960a5560ec4027840a4310a8d6870", @@ -21206,10 +21206,10 @@ "T3B1_fr_test_protection_levels.py::test_unlocked": "73219b24139727feba4a0e790917e0081ce2463a32be54c9b2ef79ceb939af7b", "T3B1_fr_test_protection_levels.py::test_verify_message_t2": "0eebdd7c7bab7089339d452537899c557d2e7cb7b49157b0d671e14972d95aa6", "T3B1_fr_test_protection_levels.py::test_wipe_device": "4ac60cd835f6c3a31238f0bc2ec8a0f5a1945ee3144dcb227caa07145f2ba0cc", -"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "05c5f794571e8facaf29c1082318f51e771334891116f87293671bb5fdf50146", -"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "e4d6ed194af3a4ab97c3be0f166e39d0b1cdc86f4fcc4fa28bbc97fbba15b3ea", -"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "e4d6ed194af3a4ab97c3be0f166e39d0b1cdc86f4fcc4fa28bbc97fbba15b3ea", -"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "fbbf5fbd6066e46c833cb444d74ccc22c5338bbf9d222c218a58d213655b0298", +"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "4c007895d4d68f8fa3b20b1b21bb5ca64b791eed5a349a4a53c8ecfe8521aeaa", +"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "1f2318b18ae4585249442dc1e5aaefdd89fe0005ae7a2467db7a8819a21e5216", +"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "1f2318b18ae4585249442dc1e5aaefdd89fe0005ae7a2467db7a8819a21e5216", +"T3B1_fr_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "3d1b86209bca4569bfaac001018dc9bcf90f39db447e5dd468732d014021ca7f", "T3B1_fr_test_session.py::test_cannot_resume_ended_session": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42", "T3B1_fr_test_session.py::test_clear_session": "73591257bebdf50490ac7d31677fed017c1164f02e464b29e723bc4ceedc5f8c", "T3B1_fr_test_session.py::test_derive_cardano_empty_session": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42", @@ -22599,34 +22599,34 @@ "T3B1_pt_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "45b0cce50c1eb2c80bc05c67911d7d4f421318599f2195c22f8087246591e419", "T3B1_pt_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "a5c8a9c34cc940fbea4fe3a9ae0d4a2e6184d1337a7ddc97de2132a9e065c593", "T3B1_pt_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "66b311b02d71c638f1565b4267f83b931d269d21031f34e00ccd1f3b7dc274b5", -"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "5354d60a9a52b39969530b3743661dd8d1b3b44afed1db6f42b269a048f0e57a", -"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "c552e07d64ce7f60c77aaf93f8eb1c7f7cb942c04cf1a6e5e69e1ec8baa6c8fd", -"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "3732abb234804047f596b5df026e0f9caf8a09c30dd94ae0fab5d211f3cef1f0", -"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "ee05e0b25c36d7cd5ddb4d937c021a2227c8b12b4d3d3d3e49f14aaf934e1471", -"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "8d68633c28196e6c27faeaef0903ccafadbcc8565db56c98085e320b992aabd9", -"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "685669c5240f7f4d8f4b7dea94089fcab096eef0ca7d3a4f985a9cc5c3c6bdee", +"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "1a0b90f1a726f4047071d65024a9d58f6b2c5af79f6171d4d78b203fd48a509e", +"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "7c3f6f4c5a5f6e119dbb40d782f995b4bb2e2dab9ca97c903a24521d34271f2f", +"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "cd545110fc4bb7cb6ce28dc8eb64fd1879bdd1dc3f25bd325f1079a2f419a268", +"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "a6dd89cde01a21f9ca09084809482aa46f4e0b72166424046f55991e2aa6d1a6", +"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "fc585800daa26af6753dc412c3b05063a2b077b6183768b693a4ca1a47c5d76b", +"T3B1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "79f37902bbf26dc9691fc93459a4aa43d68bb971497b5f2c1f534b5946b7c1f5", "T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121", "T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "168098e10d3bb1238171a8e03cf148aaddab28dc3ff95d36f0b582a9f4584919", "T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "15a580e7c7033eca5b72ac44728db03cc2737de72f76c89a50c1dd92213d2ff2", "T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "168098e10d3bb1238171a8e03cf148aaddab28dc3ff95d36f0b582a9f4584919", -"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "bec4ea2a91d8026b65abeb9b3a29b85a1e7016f1fe568d562b14fffc0765f810", -"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "bec4ea2a91d8026b65abeb9b3a29b85a1e7016f1fe568d562b14fffc0765f810", -"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "8560df48355ed9377e9b5c9ef2d2106cb89eccc72df7b7dc6ba00d80ae7b1e31", -"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "8560df48355ed9377e9b5c9ef2d2106cb89eccc72df7b7dc6ba00d80ae7b1e31", -"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "d6c4fca3e0680a4effc597d9be2a5b87d6ba3913caca5cf1d3a78ee7ed0f692c", -"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "087b7f5d2773634d0d39b08430673312f6afc5f0a4dc33c07b59591722976c91", -"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "8439106a2eb34921e7a18887653f0c6a2f4793b6b08630fcfa97833ae70e65a3", -"T3B1_pt_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "ccc57a174884670e64a7665a8fa6ba76a2c167fac9eb6031d84c2cd7e1c16998", -"T3B1_pt_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "c465f5f547210c0df65ff4e266a12c9ad238c3f12628ddb7d4b21289f780c574", -"T3B1_pt_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "0537da4820bc7fd51627b5ccda9d9797998eb2e3ff3acd5fe731771ccb3970cd", -"T3B1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "8f396ee696a6b6963866be44a73229bcbefbe2bf77ce18d76209f20eeedee3ef", -"T3B1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "8f396ee696a6b6963866be44a73229bcbefbe2bf77ce18d76209f20eeedee3ef", -"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "5186560fbd94c612d8ed3a99e94edeee6bdedcbc4dabf4d0f05097ee61ae38a6", -"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "5186560fbd94c612d8ed3a99e94edeee6bdedcbc4dabf4d0f05097ee61ae38a6", -"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "a36ff6646f1d18de22f0fa056509317f25dc7e0ca8d531ef0cef4410a6836454", -"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "a36ff6646f1d18de22f0fa056509317f25dc7e0ca8d531ef0cef4410a6836454", -"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "37fc2e8a61aa053404c4dc3b65530c97fb9a9ba0ec3a2b0adc3045530647601f", -"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "37fc2e8a61aa053404c4dc3b65530c97fb9a9ba0ec3a2b0adc3045530647601f", +"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "dc9cf03106f89929983961e57d440b08b01fdcf03962015fd2e3b631d11cdf48", +"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "dc9cf03106f89929983961e57d440b08b01fdcf03962015fd2e3b631d11cdf48", +"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "3158daca9cd3520624159d701b7a4741eca68cba92845ba3f302cb9e8fc67552", +"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "3158daca9cd3520624159d701b7a4741eca68cba92845ba3f302cb9e8fc67552", +"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "f9b18eececde54b11cc6eaee82aff9ddd72d695e498dcf668a16ab02a311d392", +"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "5b5077e0b021507a172d82aecfcca7b1edb6be6e4c6a15aafa595f2656ca96af", +"T3B1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "4290efefbdb3dc10c03248fb23166b6121e87b54f246f137a1abf51ae84bbf21", +"T3B1_pt_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "60a988af73303c9f01c4db4312273d5a94890c992fa57a7b5700fb19acb8033b", +"T3B1_pt_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "7ade4bc53d8fc91f812701c528f24dd229a1be589d589819254deb76220537f5", +"T3B1_pt_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "68cfb22d4c022599c19970935ea8243ddc2263cd2f5dfa2b8482d7ce92b75151", +"T3B1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "07faa7fad62b0dfb12ba6d59fa4cfb460161de24b80159141fe9f36f8d60629e", +"T3B1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "07faa7fad62b0dfb12ba6d59fa4cfb460161de24b80159141fe9f36f8d60629e", +"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "d9d00a85ed19749af56901924bbc69d486d89a6b9b2def07aac2912660bd1d5c", +"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "d9d00a85ed19749af56901924bbc69d486d89a6b9b2def07aac2912660bd1d5c", +"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "55fca8b466c66226190e8598de3e9a028319aba6e0c7da5817c1ce9b8f302601", +"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "55fca8b466c66226190e8598de3e9a028319aba6e0c7da5817c1ce9b8f302601", +"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "c0fb67e6af097389b8a5889f62667fbfff7da6a5338100812b6499cbd205082c", +"T3B1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "c0fb67e6af097389b8a5889f62667fbfff7da6a5338100812b6499cbd205082c", "T3B1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "1ae9f3ec91b5312aa601958d6765de082977b55450fe5000d4fc9a7855a73e37", "T3B1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "43a242e60515a5e1513f58c77de7291cf84d4cb0901ae8276ebf5c94bb7fa64f", "T3B1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "df686e92037819993f28b570311408e55d56f49c28932542c55d73ba43eb1a22", @@ -22904,24 +22904,24 @@ "T3B1_pt_test_msg_applysettings.py::test_safety_checks": "eaca6ff72f01bbb69aa756aef751dffa5932ff4ba7daa9a9cd0ce51348699f73", "T3B1_pt_test_msg_applysettings.py::test_set_label[empty]": "324317451eec57d18c3af087d09f61bf7c2c96c40ed3da68f10b3806f0ecbc86", "T3B1_pt_test_msg_applysettings.py::test_set_label[max_len]": "8f734b6dd57cbc9ecefab0da7884119ff22c52453db547b00b697f5450e5d886", -"T3B1_pt_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "e7494e62b645d17f113bde06e2281fa12cb67bf94c6a27b7cbbbeb0eba7db943", -"T3B1_pt_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "e7494e62b645d17f113bde06e2281fa12cb67bf94c6a27b7cbbbeb0eba7db943", +"T3B1_pt_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "c2a1173f7ad6dc4ba643312e75ab06464a508d5c1cf8c5c333ad080455b8c3a4", +"T3B1_pt_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "c2a1173f7ad6dc4ba643312e75ab06464a508d5c1cf8c5c333ad080455b8c3a4", "T3B1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "198c3f6fabb78a2b1604148954bef44032315d17d89f49bec8d7e4dd94919917", "T3B1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "198c3f6fabb78a2b1604148954bef44032315d17d89f49bec8d7e4dd94919917", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "c00a1654651302c512fbc3c520905d6f42912316f35c2dd04f018d482891891e", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "c00a1654651302c512fbc3c520905d6f42912316f35c2dd04f018d482891891e", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "1dbd64ebf928f43b53078d3069faeec75a8bb3dc3bcb7abd5d2c59ad0c529129", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "1dbd64ebf928f43b53078d3069faeec75a8bb3dc3bcb7abd5d2c59ad0c529129", "T3B1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "198c3f6fabb78a2b1604148954bef44032315d17d89f49bec8d7e4dd94919917", "T3B1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "198c3f6fabb78a2b1604148954bef44032315d17d89f49bec8d7e4dd94919917", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "93cd517a29a61d9203ee4c0af2091f3e1e9d004b67906c355f5e0a1fffef41e5", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "93cd517a29a61d9203ee4c0af2091f3e1e9d004b67906c355f5e0a1fffef41e5", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "d49b995fc06f250ed1560690237f8030af0f1a9dc90e6183c46db244af0e017e", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "d49b995fc06f250ed1560690237f8030af0f1a9dc90e6183c46db244af0e017e", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "58a7ae6b69093b934cfec8486d26984ff4ed2d89125772e37d899c85a7c47989", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "58a7ae6b69093b934cfec8486d26984ff4ed2d89125772e37d899c85a7c47989", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "455057e919d190fd43fe9619ea3aed03140d875617119a5f03d90c65205212d3", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "455057e919d190fd43fe9619ea3aed03140d875617119a5f03d90c65205212d3", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "9b410abc71b49a1151634814a6944f8bd79d382ef7e48d8e97a2fb8942f84fe6", -"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "9b410abc71b49a1151634814a6944f8bd79d382ef7e48d8e97a2fb8942f84fe6", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "bcf488d243d59c01b584f8f7d238941a8737dfae16e8b348614200d3a7d7af22", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "bcf488d243d59c01b584f8f7d238941a8737dfae16e8b348614200d3a7d7af22", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "8288b7deb608157074c9d12b24527e4040b6321d1a41b45af98703bb7813b438", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "8288b7deb608157074c9d12b24527e4040b6321d1a41b45af98703bb7813b438", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "c6b4e58885d3db1fcaa7a5b134cb326000e43846cf57d122894ba1e900eb691c", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "c6b4e58885d3db1fcaa7a5b134cb326000e43846cf57d122894ba1e900eb691c", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "ba8f642a6302ae6fdd62a1806d6ce388321fec56f8d8fe5f6a996281eedaeea3", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "ba8f642a6302ae6fdd62a1806d6ce388321fec56f8d8fe5f6a996281eedaeea3", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "7ec317abef5621e5f0e70b5b25ad83018142eeeda606dbf1a9d1eee30ee02ca6", +"T3B1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "7ec317abef5621e5f0e70b5b25ad83018142eeeda606dbf1a9d1eee30ee02ca6", "T3B1_pt_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "787e825134e7f31b172d27dfcc6303b90a1e8e267f07749a61ca3e66ad32f364", "T3B1_pt_test_msg_backup_device.py::test_no_backup_fails[Display]": "5dd9f56b3ec686ba737406e7027ed3cf75f3fab6d2a90ad7ed6498fc43b36d93", "T3B1_pt_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "99c1087adfb1ee4a69d075eb8c3a1ae5e7bb639fbf4074a915b9980e25059eb6", @@ -22937,9 +22937,9 @@ "T3B1_pt_test_msg_changepin_t2.py::test_set_failed": "048ace4cb8f784e163c84c61f1d8a79db615bdd55490a17a514be8b14e858ea9", "T3B1_pt_test_msg_changepin_t2.py::test_set_pin": "4826648e8ff41165d3e4853aa790eaecf4b48da8385eb9d404469f2835a40684", "T3B1_pt_test_msg_delayed_ack.py::test_abort": "e08a3c673f7454ed5b0ab5fca8bfec8df2de31729a0219bf3aa73097d27701b8", -"T3B1_pt_test_msg_delayed_ack.py::test_backup_no_acks": "df30539c0e36370dd5cdf534a90ee46edab8d3e9643aa0478f284c487c581366", +"T3B1_pt_test_msg_delayed_ack.py::test_backup_no_acks": "ad91a8d66d376deefa4d1e3702c1ca3327e20726f39fb146c93eb0a586d3dd3b", "T3B1_pt_test_msg_delayed_ack.py::test_delayed_ack": "e08a3c673f7454ed5b0ab5fca8bfec8df2de31729a0219bf3aa73097d27701b8", -"T3B1_pt_test_msg_delayed_ack.py::test_setup_no_acks": "743a912680e49bc6e11d31dd983721e514b30245e2160a5232efbf89e3cf883b", +"T3B1_pt_test_msg_delayed_ack.py::test_setup_no_acks": "ecd73ee35bc88226462691299d67e699742fcef2e17a3ccb03606584300ec26e", "T3B1_pt_test_msg_loaddevice.py::test_load_device_1": "b07e79311356a704ec852f782364740243f34c410b37487ab125a4dbdb2482d1", "T3B1_pt_test_msg_loaddevice.py::test_load_device_2": "bab2d06f903c60cbf5a48549f5aaddccd940e4bd3887d0f078d2cabc7823fd1f", "T3B1_pt_test_msg_loaddevice.py::test_load_device_slip39_advanced": "b07e79311356a704ec852f782364740243f34c410b37487ab125a4dbdb2482d1", @@ -22975,10 +22975,10 @@ "T3B1_pt_test_protection_levels.py::test_unlocked": "1bc43f9d1bb22a8b97b016b617c1399196da73befe638cd747c1835fb3d7e828", "T3B1_pt_test_protection_levels.py::test_verify_message_t2": "72170d5750867a7dfc7b1988da7c21baad308899a93bbc911ea38244b77dbe22", "T3B1_pt_test_protection_levels.py::test_wipe_device": "e6bbee228bbbe164788b4fc23643557b41a2c542d8821d16bc9deafab47bad45", -"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "4bf3bf7ffe7bf5927db5425bb7dd3bf33e66d342f8fab49872709494a8789907", -"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "2ad7ad5730df6c16dc29ac5f7b401f49b6d126bfc3d14e853d7aced1b294a1ba", -"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "2ad7ad5730df6c16dc29ac5f7b401f49b6d126bfc3d14e853d7aced1b294a1ba", -"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "66053f44d0b85ce61e912d3feb72f087499777a009516f2b329bfe9451af6613", +"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "5fff93e08fe4dfc25a488d6bfd760cd32dd8e233a658bde2ba7f2b451f347642", +"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "eb5d2aa12cd871f2075fbff87cb17ed1ba1d8fbf4a439dbdc226bac6cf8a80d1", +"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "eb5d2aa12cd871f2075fbff87cb17ed1ba1d8fbf4a439dbdc226bac6cf8a80d1", +"T3B1_pt_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "294f2f80892a413b114b017b9a8f088ae2de0d86c6ca416b98d737d35678a73a", "T3B1_pt_test_session.py::test_cannot_resume_ended_session": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121", "T3B1_pt_test_session.py::test_clear_session": "01f031dbead1f83b2aaf4857d144209ee203244c62607681c5eec39a5b8288af", "T3B1_pt_test_session.py::test_derive_cardano_empty_session": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121", @@ -23096,9 +23096,9 @@ "T3T1_cs_test_autolock.py::test_dryrun_enter_word_slowly": "7b64b1bb6a10290e20394814e001d1c1c44d48cf83af82d0adb39a4a1663a430", "T3T1_cs_test_autolock.py::test_dryrun_locks_at_number_of_words": "d2bff043d662dbb691a10ce8512b1b06b1414c3b3d67bb8a840a867e4e351eb5", "T3T1_cs_test_autolock.py::test_dryrun_locks_at_word_entry": "7a9a1229bf9b94692a9953f48f6425a49e07e3ce1da7494a9dd060171e61778f", -"T3T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "fa4234ec601403ac7efaf14f7a3613bdaa041290321a4c1e582d2924bd5ca6c0", -"T3T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "70bfbb5e3a2d3119464af48311b1fed9f43516e4dc5a699b311087befb2286aa", -"T3T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "ef67ec639811345fe3a90bd33a8e09fe547eaa0846998ddf5481196e2d30e232", +"T3T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "fbb963ee50e3586f6f95c1564d6e7e9840b328db1e157a38405b724ba4366afd", +"T3T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "f4fb91c9124b25e5d98bf5d18062edadb77d7dc009c34436cc14d09d0dbc9a9d", +"T3T1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "04e204fd4250b05454df70a51350163d6c5c0be38c9d7e70e73f86caaff5445f", "T3T1_cs_test_lock.py::test_hold_to_lock": "cebf5470a9dbd9f744d4c7916c9607f2a93e512b018dbcbc95be4ac6ad4f1cbf", "T3T1_cs_test_passphrase_bde.py::test_cycle_through_last_character": "8f2665d3971fcde6bd5b3d9ae268e7682c1e0482922cd7f323f52ce6dc72e959", "T3T1_cs_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "b42d227824291796ec7a59939d80ce2c5dba3a7d44d0ea88473861eac1e660e1", @@ -23136,13 +23136,13 @@ "T3T1_cs_test_recovery.py::test_recovery_cancel_number_of_words": "13603cdeac7835c04d752712eab66223e9efec5ebc3753d3f7cf4faf428ffc5a", "T3T1_cs_test_recovery.py::test_recovery_slip39_basic": "5664fc4ab25e9742e3723f5e8307404005d907831fe91801f9ee88334a88aa21", "T3T1_cs_test_recovery.py::test_recovery_slip39_issue5306": "ae410962913975b68039e0f69ef861fec2d806780b5698079aef0303490292da", -"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_device": "ee7a01112d59c3f8383d579eecf25043c573ab5403c38934d71db48d2d667827", -"T3T1_cs_test_reset_bip39.py::test_reset_bip39": "a17f369ed5bfea0c44cdc9cfb54b2d9405b84cb04e3e3d56f9cac0c4fa0ee0f3", -"T3T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "dc847b5895eb6b0be3244bce2d203bb0c303c0ea984c64e6ae1a9c7f9af98bb9", -"T3T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "197ddc2d65aa566171a2ded815dded7375e7dcf867fb2b95a04864860db67224", -"T3T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "1940199fe192b0412c950ad2b7154ed34f7ac1b65704bd294fe4e55008e42145", -"T3T1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "2d03d8e5648ebb0b659b1c8f1e0f89389a0a3ee7b499e1dd943832161e430055", -"T3T1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "bd076ff33f2ab098e593b239a29461353e82e2473852e39b40a14d2f230d95d3", +"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_device": "e3db99b9f961242cc981672c794a3e9c967de6691067894cdc35fb5b9531c559", +"T3T1_cs_test_reset_bip39.py::test_reset_bip39": "599f440da6d6077d9230768d49c5cef9f1a6bc9cc7f36f38316b2bf82538b827", +"T3T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "a10bbf4342afcfd11ca38a23652e838cba9962b5fb24476a69a9a75c3c360360", +"T3T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "c36a8d3a68ac0285997631b70ce77df4d0314b9064be0b072277673e95c687c9", +"T3T1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "2bf895f796ebb008bfab3a859e0369dfaf7e02eb39b25de7bf426117d7f54b09", +"T3T1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "88de64169fcd9936b5f515e85a714ab7a3770cbb534a672209b53f3581bad693", +"T3T1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "18851f9a43d5afb70f9e20e73bbabb1717dc9f1713d8ee5f078ad29b37385d57", "T3T1_cs_test_tutorial_delizia.py::test_tutorial_ignore_menu": "4bfb8568b763ff87654647500de3ad1374fa0988df08478c53f28a5d94ea9cd6", "T3T1_cs_test_tutorial_delizia.py::test_tutorial_menu_exit": "c09adfad71cd99959cd2ce9b62eeeb7cf8a1ae17526cf72d13cbfb0f05417447", "T3T1_cs_test_tutorial_delizia.py::test_tutorial_menu_funfact": "84230bdb1b4cce77d04d6239af400540f4d6423d01fa644f409dc43dd3a448a6", @@ -23156,9 +23156,9 @@ "T3T1_de_test_autolock.py::test_dryrun_enter_word_slowly": "370e57393bb4948667e221cc983670f5b3711575c9b317754bf9e1c3d25d7d33", "T3T1_de_test_autolock.py::test_dryrun_locks_at_number_of_words": "56bfb726e19da17f0d696ef6c06dd0e105f081eaf6ff7f79cd9c9e253ff700a8", "T3T1_de_test_autolock.py::test_dryrun_locks_at_word_entry": "cdef85930147f988d539ac818f0a7a1b5078f93092160198b237a6b0bbeb4a42", -"T3T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "183414264ad53baf04023374906383a34a69b57a053c6225aa8c258fa817f139", -"T3T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "2ac5e28a3e72dc945bf5740e60e0569e1710572cc62fdf663b1ab8e1907b696e", -"T3T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "b66667ade2bab6c5afc998ef800d56b16929d6aef01f9592059652b4e6497221", +"T3T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "060058d1f03c4ac0206867762da4dadf61fe14b9ce2fb8cc3a98545753aa20ed", +"T3T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "28a01d709ed098d99400ecc4caf0b1d13161c9057b3113053043b0819d02255d", +"T3T1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "c9b3069210cce692fbad5c2c362ce6b5e2a0ce525097f52405fbc6a46975bf79", "T3T1_de_test_lock.py::test_hold_to_lock": "d550f56c192eee18e6c88ed5422936b1b5982b4a6b09a21b7e6ed12f230a5f25", "T3T1_de_test_passphrase_bde.py::test_cycle_through_last_character": "13d9f5060a627bbe46d5c7e9bf953ce3394f48d31e643a20f88dcda4cdf54719", "T3T1_de_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "46bd9eb02fcb8fbe1741445429e65b3ba4026f95f833bfabc2f56ae1b5cc2817", @@ -23196,13 +23196,13 @@ "T3T1_de_test_recovery.py::test_recovery_cancel_number_of_words": "bea7ebb568e83f677358731ee4c26d02c7eed798a5cf0851093369c23a3f604f", "T3T1_de_test_recovery.py::test_recovery_slip39_basic": "f0da9981309e3e353abcea17fb0f7a90c4bc899fa877fa454a8f453ca227588e", "T3T1_de_test_recovery.py::test_recovery_slip39_issue5306": "7dc0b94b549845b8f9a88a3ecbef793365cc6cbce1d4d8dfe4a6397d6c84f6e2", -"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_device": "bd8ae8a0966a9ea78c95259a7449d6b1919893ab6cad98e55b1f09c96a96b3eb", -"T3T1_de_test_reset_bip39.py::test_reset_bip39": "525965c29276f8c1ca41f73e6db596bb4c6b2516dd803808f29f29414187e008", -"T3T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "4148f10f425fba7a86c376bc4c9030a338be63eadb757fef47991128635bfa96", -"T3T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "cf6485d683fd6c4b5ced46bcf5a38a5a869c58ffe72bc0a113bf141cba6611c4", -"T3T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "99ebc746501fbd66c83429a82d621df502a5158a8cc5e898978f85a66df39a02", -"T3T1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "626c4d3b5497789e2c1b1fb1db283beb9856f530a260ddfe6947dd3b9b715500", -"T3T1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "3d5ede6116ec0e002e5e150b58da8b5394486bb0a0ef4204f8da7874987c3e8d", +"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_device": "f65de3b265f81000453c537770b04bac70a661092157f092cdff24a15880dad1", +"T3T1_de_test_reset_bip39.py::test_reset_bip39": "369c473c157e0bd93d2b803ba3e4ac88bbfc70fea008672d2f6fb45cb4fd40a0", +"T3T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "4d569e1cc719f60d4ea0e3e1088a8787840a2d69bee5910888566618b1826289", +"T3T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "2542151729cab1cd021a663655300ab5dbd89b05e47ac94f40391c043f4f0d54", +"T3T1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "0f2fddada9ba05076567bc5dedb41ef7146a983115dcfc74605f2ba28dabf42a", +"T3T1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "dcd3c23b43cb63f6d24a227c7d16925ccd3359786a252a1622bdd6aa991ef2bf", +"T3T1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "9dd2cb2f65c5f256823c8b840c4dc321d3d977f44a0d60e440783b40635c5676", "T3T1_de_test_tutorial_delizia.py::test_tutorial_ignore_menu": "4a8d67661b7d98bd404b650a8b0e6db44f173206e5862ebf747f013e4b229fdc", "T3T1_de_test_tutorial_delizia.py::test_tutorial_menu_exit": "6cb5c624cd638c11beab98248caa483de8a8cc9abdbd5d9161aa45462de4bf99", "T3T1_de_test_tutorial_delizia.py::test_tutorial_menu_funfact": "fc68823315c49016e1f31cb205df29af88649c5ba6a2da7b3d5101101856249b", @@ -23216,9 +23216,9 @@ "T3T1_en_test_autolock.py::test_dryrun_enter_word_slowly": "9526feaf8aa56b584e5fb74cc626f96ad953e0c41c0275a94a7693b646039860", "T3T1_en_test_autolock.py::test_dryrun_locks_at_number_of_words": "d07a7489796d3e84c7a991bac07de90a107fee1f2172c75134df8e97f905b4c0", "T3T1_en_test_autolock.py::test_dryrun_locks_at_word_entry": "0d1ee8f0b905052933787e2e010d78f3f885b62abd674f23b4ec88146ac65768", -"T3T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "7d9f1913f85c57a71ee7989254e2e3d3c177eb966a06e3ea9a24359bb21b7aeb", -"T3T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "5d6c2a1347c8cc856116466943a7468238eb300f4540c4ac9ec238b5fb6ee84d", -"T3T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "c30454833172f336c28eb29ebba0e17dda9700a5ff6b5b9f10fe05aeeaddce30", +"T3T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "209c8bd8cf4af66da748cf666089b0be7a8fedcfba1dee6dad072962d0303f3b", +"T3T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "7888b03f5a59759596d1cdbf99251abb5f91c307ac7522179824b930c6880dad", +"T3T1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "727b5238422b379bc94b4b9191ce2510d23d1959b38890befd816d9c2a62bb32", "T3T1_en_test_lock.py::test_hold_to_lock": "f26fa6e0a3ba2cb603b92ac8a1b342c140e0d08d6813943fedcfe7a6f214365a", "T3T1_en_test_passphrase_bde.py::test_cycle_through_last_character": "3a11829a07e2d0a120a9962af89305895b912bfa1a309a7eb4187efc9e87bc69", "T3T1_en_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "7f1debe8da6ef368c73f29148664683ab9e5bd019c47d2afce12b8ae6f250af9", @@ -23256,13 +23256,13 @@ "T3T1_en_test_recovery.py::test_recovery_cancel_number_of_words": "488839d82e57dc778d6ba53fc8d1015a3e859d5e6e112554c5d1f8efea57fea9", "T3T1_en_test_recovery.py::test_recovery_slip39_basic": "87205a0eb073e3b091424f4019d3427113515081afabc8d60b69ddd65f8221b3", "T3T1_en_test_recovery.py::test_recovery_slip39_issue5306": "b2a726440dc451cfc1a89105f6c3c72294d6512eb3f5baa98ef848ca3ebc394a", -"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_device": "193bb51ac3eace05dafe526846889d95f8a59633065b1501b41dcf55894417ef", -"T3T1_en_test_reset_bip39.py::test_reset_bip39": "ed48d52541d13060df9eecf5da280594a7c2533bca108b4043c8b0427be62aba", -"T3T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "e4946dcebed859c3777c28c959db86fc31bdaec9cb328908d3c6f7b17f85bbfd", -"T3T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "970d309cb1883b56c4bcecc62571addbcdf9b95dc8614a669aa74eef5ec9c05d", -"T3T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "198f9e2ff6a0657c1be37f7ef682061d1913b42f136d097ebb748ec9e8eb3a62", -"T3T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "3c342839be041864b1b124b0bc4c130d2e03b99fd8322992a8b367be07c755b1", -"T3T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "19f4736f409da3149b0c6d25c1f78d9d8bc247267dca6bc3db583f6832fb0729", +"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_device": "7904929c13b81f1bc2b140b477d3df466541a60e50852293a4690831429b988f", +"T3T1_en_test_reset_bip39.py::test_reset_bip39": "00efba970ce16925aacf60ea56982d5e18807d80c8f00b5a3aeb2440f61d46b4", +"T3T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "5880191340be0b3e82374ea6871a2e2414b28f50e499616975d6edcf33c28a71", +"T3T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "a9fca1cac296f22dc9a0d5a9cb10d4bfacbd428547af7ecb3cbf89c50f5df539", +"T3T1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "baa8e148ef8f69e5d4ae942986d229f40e0f18cef4d18d16bc9be4cbf6d37442", +"T3T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "066e0a964bc1f42718c8e884bce62029cfcfcb0921a615790eac7f4399f8977a", +"T3T1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "9bdef3232df73395ac748338f1acc5b67d72817d81773c619c1fd70814ea8433", "T3T1_en_test_tutorial_delizia.py::test_tutorial_ignore_menu": "92baa3eea5efb8e12837a992bb26ea49452a584c79415fecdbce1bcfe7532440", "T3T1_en_test_tutorial_delizia.py::test_tutorial_menu_exit": "c28a20fece461959cb08f90b4013a56c7c4537740685bf372a3375f1d29ee644", "T3T1_en_test_tutorial_delizia.py::test_tutorial_menu_funfact": "4df0575fb66c7e627d44ddccbb89490fb7ac0ba15cc2606d84d93d4f5f925d51", @@ -23276,9 +23276,9 @@ "T3T1_es_test_autolock.py::test_dryrun_enter_word_slowly": "0910e963f22be886632de1a30e41a04af635c0251e8fd97a206cc5a6fa83f9af", "T3T1_es_test_autolock.py::test_dryrun_locks_at_number_of_words": "7eeaf42d13c061c28a2fe099f1e74dab35a52e192ae4065f2254c3ecae65d45b", "T3T1_es_test_autolock.py::test_dryrun_locks_at_word_entry": "7d306da33f21bf028da7dae71a679fba13c2dfb550d64cc0034128fc70ade49c", -"T3T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "eed914205627d2667dd1ae5fdcaaf24a5f3e4a7916dc7d2d661ed3492a793037", -"T3T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "f5636abf63a74e66630ff93e1ce444d4ee1065b7ebfdfb46c309a2f8ab13b1b1", -"T3T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "ab287320f092ed2436c224197c9ee85e3cab5dd938bec96f60eade09a8491155", +"T3T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "557de9eb35f102c0379e5705478e81ffd5599ff8584b75e9abeb1f1c02a0f04a", +"T3T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "ec3b2725d3a9aca087c29de7aa4856c856262c7ad87fbda89618302ff4ddbf71", +"T3T1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "14f442c8cc509efa52421bbb791f3d41e0e115bb92ee121e72fbaa7f081e5645", "T3T1_es_test_lock.py::test_hold_to_lock": "6cd5e8bbce124b755ccca61a9541061df3ce424bdd966e9e45d6e12cde73efb1", "T3T1_es_test_passphrase_bde.py::test_cycle_through_last_character": "ac326259140948e204b9504e89a5916aa995585385d0a7c0134a3e0af72f6c8b", "T3T1_es_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "4a1b6b9d89acc3079b966ebfe167f00ef9972ebe224f722d22cc8fb49cbb8a48", @@ -23316,13 +23316,13 @@ "T3T1_es_test_recovery.py::test_recovery_cancel_number_of_words": "b6d909ea8bd2f14dcc46a4c2265b30fa87c26af399105ffcf354518bfa8b5fc6", "T3T1_es_test_recovery.py::test_recovery_slip39_basic": "d2ac8181c8aed3a81c4eefde96e6e80d00935789570c88abf7427bf6f344b78d", "T3T1_es_test_recovery.py::test_recovery_slip39_issue5306": "3095c686729e4beea0399ca59a4096c826e6c374306cb54848258454cd22f03d", -"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_device": "663a10b58c2c3400386804de4dade584340ba5615193daf368f2a79624bbb2bc", -"T3T1_es_test_reset_bip39.py::test_reset_bip39": "2860a483f22cc6474572710bc1aaf7220dff698fe79c7374dd89cb1b1c7a52ec", -"T3T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "4938d7c879d6d1e7c5100d26a7da52e6c37ec9bfdc0e4cc7f97049154cf231f8", -"T3T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "d226c630e932357d4a4f3f84c5719e8ecd716999cc246295778c0d4f8eefd319", -"T3T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "b93423806c66597280dcbed76343137921ac5d9e6ec0fc4af46ab34997da8d1b", -"T3T1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "bf49d208d72af693ecb20f319f65b161d7cf827d49ee6c2322b9b11f9df2d499", -"T3T1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "a3af41e3b5d230f962fcb05f702983494c87eb15359988ddbd62a705921a05b0", +"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_device": "55ab7d4efb3c319bf5f56b5415b781e49d142fb27de75736091d1e79a69c6fc8", +"T3T1_es_test_reset_bip39.py::test_reset_bip39": "6276adfe6e2d61b3c77f9a0cfca65545630c6e2321f600849825b031e0a31f50", +"T3T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "4387b251b969a4754c2a93c310c1c9a95b510fcca184882c2cbe2c17dcc5eed8", +"T3T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "128c9b524901c501dce770ae0c42bfe21e938a9b2e3953c1cd7f44a0f6aec766", +"T3T1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "77b6903effbbd11430824e8befb32a7aff6343b2b8a530a05f35935be9692b7e", +"T3T1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "14f96a68f0bac0744472dc5c6841df0ecca14b3139d7d754e49b4316b5d2a640", +"T3T1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "676aea731795f877cfd9f3b345071b221eb56ee5db5bc756ac55ec53d8ad46ff", "T3T1_es_test_tutorial_delizia.py::test_tutorial_ignore_menu": "3c3f83380326f4afd2f612a63f18c6a6bc9875be29aea5b55ae8c2628447ad74", "T3T1_es_test_tutorial_delizia.py::test_tutorial_menu_exit": "72f4da1e44e6918006da698768a4d8fedbd4ad36a9445a4a8a947b220155f0f2", "T3T1_es_test_tutorial_delizia.py::test_tutorial_menu_funfact": "a5039c095f8aee7f02f8968166d166998d42164a782a306a39cec2292f10f152", @@ -23336,9 +23336,9 @@ "T3T1_fr_test_autolock.py::test_dryrun_enter_word_slowly": "296541a3d59e6f113346551c907005a3c741b0e7f0f2c4045e9038aaff469253", "T3T1_fr_test_autolock.py::test_dryrun_locks_at_number_of_words": "fe8e4498fa77d55e19cf2089a135fc3877725aef25ca9eae70feebe456f1c90f", "T3T1_fr_test_autolock.py::test_dryrun_locks_at_word_entry": "3c536ac6856a6fcfa6153b6c7acb2776bdde41204af1cbafda011f3d3443c2fd", -"T3T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "55f87bcb0ccdda386484a39735355c24a52727827b58227603f97e8937bb49a7", -"T3T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "7fef83bd89f3467a742d98c73746ed0fc44eeb72c7fdf1f4c262e667dd2ebc3b", -"T3T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "4fa682b9e6e630a38b3e33b749be6460f1b1ca409df19eec38778475c89440d1", +"T3T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "43af94344464e9e2446e28ea58aa5a0753f3f7483c0d629eac55554f31a5571f", +"T3T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "a07aa66ccd7c4df2cfcadf7176adf8bac9e538d9d3b93b32e8bd8b1d20c18261", +"T3T1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "fec1f3dd2c01fe445163f0c79eaab8c822cb1d91b1d347b049122040696535d2", "T3T1_fr_test_lock.py::test_hold_to_lock": "c9d780ab9d5fa8e58e45aa420a493b4f28e9ffbf79b19061ab6c1e7f2c694b79", "T3T1_fr_test_passphrase_bde.py::test_cycle_through_last_character": "fbaf9d74a119f213dd06f140f04fc5b8254584496514e5d24490ad8df892b6f3", "T3T1_fr_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "6ae43319cd12fa60851f8e9332c69846112a091827e6244e750517e3829c05ab", @@ -23376,13 +23376,13 @@ "T3T1_fr_test_recovery.py::test_recovery_cancel_number_of_words": "49a45a92521691eb0df48497ba1396e84cec637b62405a3f444bf7312f7e31e1", "T3T1_fr_test_recovery.py::test_recovery_slip39_basic": "61542985e59d0dcb2429588c475f14345873cf2ea2d288831d6195c48681fb5a", "T3T1_fr_test_recovery.py::test_recovery_slip39_issue5306": "ba5ea6ba31a7590a33b4a871f49522f1ee5603304ae6d4d2fa1f876986a6a004", -"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_device": "91ee00b701409f3927f3ffd23900cdb7b8d61742a114752eeba968533398ad30", -"T3T1_fr_test_reset_bip39.py::test_reset_bip39": "83c1ec2d5d4bf29d555671734b3dfab4df6cee9169f50dc542af91318c2c19a2", -"T3T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "f4b8683312ad240bb260e0253ad5dfdd5e56e069cbc557558e410a960bd44cb8", -"T3T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "c576c9695a75c52eaae863e63e47695d8267e6e94abf551968e978112efbcc7a", -"T3T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "9499f081b5dc6e03ea82e450568fa2e85424832ecd816dca5309e56562f32428", -"T3T1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "a8ab7d5c274f3473ba26ac4b560f36a8043a41e1793677307872d0c7d552f08d", -"T3T1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "8b6e06cf8add183013633d5a49ea7bdd84ae72cb6618c04fe47a4c429d7904eb", +"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_device": "d4e54516abfe520cfa44a3bf16e2ceeca6a4102f8ec3749eac4fb4f80d5ff2f2", +"T3T1_fr_test_reset_bip39.py::test_reset_bip39": "c4fe0bd953db9910be2c1dc5ceef94b1a87a11e88f1dcc02186e1a95d5d25c8d", +"T3T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "6cc91fe1b4f622720a96232c155ad68b7fba4156885855b09bb7100707952ff3", +"T3T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "35028a1c4f69f3fb46b6b828ea86de23634aba397408930be8b1bb9543ed435c", +"T3T1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "dcbb0fb9bb89589318238691f0635d83dfcc97064ae43b5222c0ca2d74bf8ba1", +"T3T1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "1d7bbbe18abacf93e98d584271df0a8360b28df731ce9e0e603b4cab776882ca", +"T3T1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "cce271d09ed406b6977726bc5cb23d7fa887edefc2846728b47d64b28d910d3d", "T3T1_fr_test_tutorial_delizia.py::test_tutorial_ignore_menu": "72b2aedaf87099db5131aefa51e7c24739b35a35f0c0d13ad4cec2ed9cab061f", "T3T1_fr_test_tutorial_delizia.py::test_tutorial_menu_exit": "5135e320141d2dfb88cd519b63207a24a6256ca4dfa36c37efdd11b51d561531", "T3T1_fr_test_tutorial_delizia.py::test_tutorial_menu_funfact": "92caa374fce88db7b1b0c1b5c12f120f4b173b8da6cb736b5cd6b8e892c17210", @@ -23396,9 +23396,9 @@ "T3T1_pt_test_autolock.py::test_dryrun_enter_word_slowly": "52348f85d77442980013420f281652686d54f634cae801fd60dbe2de82d84d39", "T3T1_pt_test_autolock.py::test_dryrun_locks_at_number_of_words": "39ae2a70520ef19eb072180858f184078eadf48ece7dc7847246d3415125a265", "T3T1_pt_test_autolock.py::test_dryrun_locks_at_word_entry": "71b95eac9f1027ef4bfc6eaba41848b1e1549c770207b400d638b8e3e3933528", -"T3T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "4e4cca3741a7f877baf570cbf879ae00a4590a8d42e56c87245c795c3c14647b", -"T3T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "d44510d1a362b49b7f579d72bd3660815255e06b5dfdef2a8a64356f03297740", -"T3T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "9ad42a95e1e698112f1f590e44d3c1be11e3b48ee529e0d3da9a9851adb7e4d5", +"T3T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "8051dfc1a3cf2912d7c53ff0471a9e9bfa1d4c048ee22b7f61e6434f51241096", +"T3T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "70fc8f92aa9089df1a9d8c0970ea9386e42ab8ccc46d54cc9b0a5fa1ab6db13d", +"T3T1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "e47037b0c467e4afa5f613d9790e0143539f3218763f437e6bc1a5586e810c5b", "T3T1_pt_test_lock.py::test_hold_to_lock": "a506f6049840b2a93f86151bf76125da2325a67e847ba3aeb94ea064e995d6b6", "T3T1_pt_test_passphrase_bde.py::test_cycle_through_last_character": "76d1749eb4487555158486ddd4f75efb046c0f156f74561b2ff5265b4be4cd82", "T3T1_pt_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "237ecf31eacb748820171dd0b71385c60a6507fb71224ac29a03c95210e16ac1", @@ -23436,13 +23436,13 @@ "T3T1_pt_test_recovery.py::test_recovery_cancel_number_of_words": "0e8229cb321f8a20895ba92319cc5feda9920cabb57852f2947d6f7f162ae4a1", "T3T1_pt_test_recovery.py::test_recovery_slip39_basic": "ea7b695978a7b6a8db5e953cb7c2bc64c22442692d00da689495c44466d082a2", "T3T1_pt_test_recovery.py::test_recovery_slip39_issue5306": "de74ee8187cf94c4438122f8a2ceddb9782a7b750309adab5c3685ff0253e10d", -"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_device": "9621928ceb28375da18798ea308180754d292d4598f2d838a10dd72964785b64", -"T3T1_pt_test_reset_bip39.py::test_reset_bip39": "24f2199ae4b0b8788e26c5a936e462d94d1f9e773d68d34ec182aa7e4951699f", -"T3T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "5be896776dc4763ff33701b79f2ec8584db7b481a266591fbf2c384bb0c178ad", -"T3T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "cb0ebe2abc5039a3f8d1107ce711f72a4a7202188d671fbdf458b5aa6ba2907b", -"T3T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "84e45253a44cb496895dd4fe61287b46a36b573f3051a631b75415404d780c3e", -"T3T1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "cffcef5a4e36a37f55016fa6bcafdd13507882debb55012b2057ea0224395535", -"T3T1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "fc2b299e24d6faf8240f81abe79452c1752797b7e5c9dca273d416b48e660f4f", +"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_device": "e1cd58638701d9178dafbe709af026e1204d8cd6add969857e7d9bbf7ee4b710", +"T3T1_pt_test_reset_bip39.py::test_reset_bip39": "958ca1c793b144c776dbc31e05decdba51470596159ef91b4805b25fdbd899cc", +"T3T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "d0e50013425cf896922bb30d87ab0be14c6c065788d226bde4461d96c7db0e25", +"T3T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "75a8a2ade8bb1b746712bc7f456fd7404678a21c9cfb9e0550824694e877b2f7", +"T3T1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "a2fae335d3bc0d6d8a376b5944ddc5655c31b236175256baf4a1603e94eb3381", +"T3T1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "4b266d14fbae6d9aede49b5e2c065b5022b56666351f9f8e4e6d60a7a0592b82", +"T3T1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "279a9371eacaa78d3e82e7f13f6ed30c42e31c5c1a69cb6826845d9999d47925", "T3T1_pt_test_tutorial_delizia.py::test_tutorial_ignore_menu": "053eb2d6aa361034dd19a8e25c5a62333f10cc483c79e9993d551d6bd40ea850", "T3T1_pt_test_tutorial_delizia.py::test_tutorial_menu_exit": "c2b550872a95a7190ea68bfb20aebec2b1ba6b7cd6db068a45f617f03f095a90", "T3T1_pt_test_tutorial_delizia.py::test_tutorial_menu_funfact": "268e2c69b118c09afb1e375b2c2bb4a6c004539c0f48451dbd8014c2406fca8c", @@ -24765,34 +24765,34 @@ "T3T1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "a3509110f59e971fb839fb0cf0e10e71d02bc06f14075279eed993fd99c58e7c", "T3T1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "2cd8c44e4ab81ba22fbae14ec381e668ef1dac2174ddfee17130772643c0a517", "T3T1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "38f9f4da72582c7a0f86f03e990b78a1bd57365ac667b1c62289419587debc7b", -"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "e519356afcb094d5ecb6e7216f39e07c77ae2c3905b94187c9ca1a34a45c34be", -"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "7852d0ca91da9ccf27bcc166a2e5d6d98dc363452d3dce9b3780b6c2b5560f4f", -"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "b3fdec361c75b099375f821023884fc4f93e2f2b6a82494bbdd5a788ae66b51f", -"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "60ec8274cf195f8070d48d09b3af5206084fa868f75987c234ff41ae8bbac89e", -"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "ea3ec169d50ed8172601ee29afc07b0731e0162d17aa95bec3c86299f213218e", -"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "41659f98f2966077201520a928ea39ca37dff452b26edb95aeef44d798cce479", +"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "9545650fe786f2173becf8685cf61e0d4c57f677f58d712bac9e19b914049998", +"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "a9e39ed4dc74ec59a5e0af033483a1814a32c38c240397944d54a8c7939378e0", +"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "26c23caa331648774416ad7841d9d3c2a8314ad6050f067677ad1844f7aed13a", +"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "c3dc57a00386f42a79595c01fa672d66245ae700fd4e3483d403808ee0fa913b", +"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "8ba48891b8442b53707f92824add6056dbbf2490e90270465ea53a1a75c5708c", +"T3T1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "6f231b8ff8092599ee2e918060d762c4a694d48163ffc4f60f85f8281647cbeb", "T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "9c20243bc5dacf2442af5a8778b66a0ab7cb978e11c02fec371f109fbc9d55f6", "T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "497f609dfbfc50d18ca062835e0d7840bfbf2e8b566081485219dc1a0b1257c0", "T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "ac01233d7ac932ad92255117bfe3e60a3bde3dd25e7459868198e5afe7f83081", "T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "497f609dfbfc50d18ca062835e0d7840bfbf2e8b566081485219dc1a0b1257c0", -"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "4a49221c5f3b50cc1dd10791cabc0e974dca6ae21832080a682a0ea6b4c58bec", -"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "4a49221c5f3b50cc1dd10791cabc0e974dca6ae21832080a682a0ea6b4c58bec", -"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "c6d20cbb8bd1bb4e5c83b2ad3198b40af32b10586a28c4e05511210d02a2d092", -"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "c6d20cbb8bd1bb4e5c83b2ad3198b40af32b10586a28c4e05511210d02a2d092", -"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "a4f6b6f9aec819df0f79d4aa3a7837a65d3d2091b3c78da0a785a58c41a8e133", -"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "99885ed5a968616a82fe7b612eb0566df5bd7ed53a6e94ce9289b70aee31faf1", -"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "390325d6cc33861efd9e7a9c78e2849c5e3bbcb26bc52792fad7b658feac67ab", -"T3T1_cs_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "3dad89dd481a3eeb0ddbc73463cba072b27fed243587644b0d923b74963a846c", -"T3T1_cs_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "b0230d0f976daeb79cb58a9991466fcb97fa3e5b4fdbdf6e729eeed4930278f3", -"T3T1_cs_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "c652bff50c9d23c9fcc2cfb193876834d858dea0e01e61192c2f9699bc3a765f", -"T3T1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "ccccb2893ab24e54b9fb762b8216202977bb6961a43b253abfe97ae0c6f55e4a", -"T3T1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "ccccb2893ab24e54b9fb762b8216202977bb6961a43b253abfe97ae0c6f55e4a", -"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "ca7c68bb4f7cf03339be63f2d9697bb81229f86319cff5a5559117d908b8b85d", -"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "ca7c68bb4f7cf03339be63f2d9697bb81229f86319cff5a5559117d908b8b85d", -"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "fffb52f1e4bc2f6b688f45cdd0b5db998591a59837b31897a737756cf7847a60", -"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "fffb52f1e4bc2f6b688f45cdd0b5db998591a59837b31897a737756cf7847a60", -"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "798fdd8481decdf8be4db0d30ce6f3d0f1f05a4eb1625d7c3acd906b2bc24fcf", -"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "798fdd8481decdf8be4db0d30ce6f3d0f1f05a4eb1625d7c3acd906b2bc24fcf", +"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "46ae5eb068b72d7f8438794c865899544e9aa899ed13bc0abc0c67cfccacd697", +"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "46ae5eb068b72d7f8438794c865899544e9aa899ed13bc0abc0c67cfccacd697", +"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "d7716620be0733959c0e82c5f1302c40edaf9f850d909381c832dda0090462c4", +"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "d7716620be0733959c0e82c5f1302c40edaf9f850d909381c832dda0090462c4", +"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "f5891cabe8f3c5056fc3872796692180145f0213b3b8f8b59132781810a08ed8", +"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "616a0a39557e33b215ba0ed4a477799c5f0713d9d3d8f2f8cacba764bb7e5795", +"T3T1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "f04e4b48614230d0cfc8e27cdffeefc23921cb6166b7ec20d285fe67a8399693", +"T3T1_cs_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "d8c4f4fe43a3da835f61db2005ddaf1a6389c7554527288f629bf6efd3579e96", +"T3T1_cs_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "26c89eb7873dfc7698a6df66fa62bb4eecf93eca8d1ed65dccd76159c9715bf7", +"T3T1_cs_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "2b0539ee554e791d34e986613e3261c3948e1042da6910411c7c9d5caa60c7b9", +"T3T1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "9db727049ab4b8b8a5296771f03503add92501cdc5c50cf2fb00135349bbdba5", +"T3T1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "9db727049ab4b8b8a5296771f03503add92501cdc5c50cf2fb00135349bbdba5", +"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "9468bb036fa221d88458b7a7befd24183d5ff23e1f6a2178bf5bbaf2c63e9897", +"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "9468bb036fa221d88458b7a7befd24183d5ff23e1f6a2178bf5bbaf2c63e9897", +"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "b826de23a7a2117909001f819310370897e4a8e01d8f444a5e543287941cd2ed", +"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "b826de23a7a2117909001f819310370897e4a8e01d8f444a5e543287941cd2ed", +"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "cb4276400ca5a39ad37d88d3215ea3f299352e67f4934acbbec2db05834e5fee", +"T3T1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "cb4276400ca5a39ad37d88d3215ea3f299352e67f4934acbbec2db05834e5fee", "T3T1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "2464f593a9db9884774b7b8c962869d9dfa797f139c2a5d825f57b066a9b5215", "T3T1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "c4b51822ef776a30401c856430bb5d0f70a113abf58f66e00839859f248eb7ff", "T3T1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "b43ce152fbb13106969b81781ae3d88b5db5ae9e3bbc3cc61da50ba8dbd39991", @@ -25074,24 +25074,24 @@ "T3T1_cs_test_msg_applysettings.py::test_set_brightness_negative": "9c20243bc5dacf2442af5a8778b66a0ab7cb978e11c02fec371f109fbc9d55f6", "T3T1_cs_test_msg_applysettings.py::test_set_label[empty]": "dddb2fdeedccaa9ebe602539774a8e335e1cd19be84925fc9305235ae7bcf750", "T3T1_cs_test_msg_applysettings.py::test_set_label[max_len]": "f0027733792f8fd4c1b781e3302be5888a878b27694367d7d5e04421c6371ae2", -"T3T1_cs_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "fc6caa693f58e4e83665636e6eaa28c1ce71999db3181e76bf5d8ab491e501eb", -"T3T1_cs_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "fc6caa693f58e4e83665636e6eaa28c1ce71999db3181e76bf5d8ab491e501eb", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "e9dbc506cb650bcce96cab73a4f3f0cf4fa30466e16b4e9991fcf5dccc078b2b", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "e9dbc506cb650bcce96cab73a4f3f0cf4fa30466e16b4e9991fcf5dccc078b2b", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "76486cc51de91c922248f628668cb0269238935ca0c1dd4a1acaa143264bb3a3", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "76486cc51de91c922248f628668cb0269238935ca0c1dd4a1acaa143264bb3a3", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "92e1d719479b8490fe59bb2116bb0cc9da9b4597de42e96f459f487a4f8c9cec", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "92e1d719479b8490fe59bb2116bb0cc9da9b4597de42e96f459f487a4f8c9cec", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "43a831cffd6572e9df6e7c14a1c47c88742514fcea3b6419817d0bc312d90500", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "43a831cffd6572e9df6e7c14a1c47c88742514fcea3b6419817d0bc312d90500", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "194201ca5d952bf776761368faba7694524b8af2f68b193f380c74f395e91d94", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "194201ca5d952bf776761368faba7694524b8af2f68b193f380c74f395e91d94", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "4c7e1a394a004a5288c1c77bd180ee6a8ac3656369a628ab3829fa49413c9fea", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "4c7e1a394a004a5288c1c77bd180ee6a8ac3656369a628ab3829fa49413c9fea", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "e1028d4e948bd1cacab57f66aabe66602b1d5b94ab0fd9ea2444b7754027a4db", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "e1028d4e948bd1cacab57f66aabe66602b1d5b94ab0fd9ea2444b7754027a4db", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "8c9aa3a90923ce2802e0153a3e42a41088312c70c53fb0432a8f4ce9b5bdc987", -"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "8c9aa3a90923ce2802e0153a3e42a41088312c70c53fb0432a8f4ce9b5bdc987", +"T3T1_cs_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "2fc5405604d63af085e3854608a03f882ad381eec1ffaa42ec380ee06cfe394b", +"T3T1_cs_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "2fc5405604d63af085e3854608a03f882ad381eec1ffaa42ec380ee06cfe394b", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "34eb982ebd495c8d3aa5b8123747942ee8f1d6a3803e66ac573eb36c783cad8b", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "34eb982ebd495c8d3aa5b8123747942ee8f1d6a3803e66ac573eb36c783cad8b", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "2a4b77726254e40505846db9ab969f33252d0adf64697ce1202d9cdf09725250", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "2a4b77726254e40505846db9ab969f33252d0adf64697ce1202d9cdf09725250", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "1f13f30808a2d40016240b67a770d350d7900f94fe6b3eb9ee74736859826818", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "1f13f30808a2d40016240b67a770d350d7900f94fe6b3eb9ee74736859826818", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "52b5bc50eb6f1b17adbd9888fc4ea7aa7bb61e4287053ba19694a3e3522d2033", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "52b5bc50eb6f1b17adbd9888fc4ea7aa7bb61e4287053ba19694a3e3522d2033", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "6f004cc5eee5cb2ad374024bc8d84fffd07f66ab09d5f94a9c3d887a41621620", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "6f004cc5eee5cb2ad374024bc8d84fffd07f66ab09d5f94a9c3d887a41621620", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "ae73fd62f71f8a8dae2e5d24a967bb421a67cd17bdfdbc20c71a547d101e4c5e", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "ae73fd62f71f8a8dae2e5d24a967bb421a67cd17bdfdbc20c71a547d101e4c5e", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "7b38892dfa15eb2f4b35f6429cf3ace7ebeef84f6e18bd9291add1dbbdd54af7", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "7b38892dfa15eb2f4b35f6429cf3ace7ebeef84f6e18bd9291add1dbbdd54af7", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "4427f44aef8da38fa8ca0b69cf8e39ae6255261f43437a3b4104c87396477ac2", +"T3T1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "4427f44aef8da38fa8ca0b69cf8e39ae6255261f43437a3b4104c87396477ac2", "T3T1_cs_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "bfe65f3fc95c95e7e9e8c3deb08e796d63e94758d58b4364efa82b005b621548", "T3T1_cs_test_msg_backup_device.py::test_no_backup_fails[Display]": "d6e69188e7fb274f96317533a3c554b107af12d56d33fad1b5d61c312a96b4ec", "T3T1_cs_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "cecabdfbec8c8b43be82c50e5c1933c609e13ca0b28af1d735295ee9ad7e5202", @@ -25108,9 +25108,9 @@ "T3T1_cs_test_msg_changepin_t2.py::test_set_failed": "d7981effd30767342e55952057c6dd705f36bb6702cb5fb3f7cd2715e7eaa3a6", "T3T1_cs_test_msg_changepin_t2.py::test_set_pin": "1648a470ea3f75dc7ab45d69af7fae4884ee3c2a4a000b67770437dd4108ef66", "T3T1_cs_test_msg_delayed_ack.py::test_abort": "986cfe149221869e9a25149a0af1ee3debcab430208ad2bfc2c70db379965f10", -"T3T1_cs_test_msg_delayed_ack.py::test_backup_no_acks": "2a77f83f3a21cfee26dbff3cbc6050fd6fd6721b8f5a28db5cf7952043801092", +"T3T1_cs_test_msg_delayed_ack.py::test_backup_no_acks": "c8a5e3fc77d6e7bf6de6324a68bc309a7f6c9e6b4a617a30a8da6c922a0d3833", "T3T1_cs_test_msg_delayed_ack.py::test_delayed_ack": "986cfe149221869e9a25149a0af1ee3debcab430208ad2bfc2c70db379965f10", -"T3T1_cs_test_msg_delayed_ack.py::test_setup_no_acks": "954a7f5d3023cb2855ce03feab36ce0b37e48b7fd929737090daf3a18fc8a01c", +"T3T1_cs_test_msg_delayed_ack.py::test_setup_no_acks": "10379fd1f0fe389569b01d6d7df02a37043789855c7f5b5a7842562ca0973c3a", "T3T1_cs_test_msg_loaddevice.py::test_load_device_1": "384332a6661a50c84c6eb5639ed46af5ad62b778ec3386eac831696380b267b1", "T3T1_cs_test_msg_loaddevice.py::test_load_device_2": "37aa86304c082615953f42dca761a056127a83d2e03e9ba049eaebeea6202b89", "T3T1_cs_test_msg_loaddevice.py::test_load_device_slip39_advanced": "384332a6661a50c84c6eb5639ed46af5ad62b778ec3386eac831696380b267b1", @@ -25149,10 +25149,10 @@ "T3T1_cs_test_protection_levels.py::test_unlocked": "59d5d47ecd8f7832e4bd4b85c28670bb6627fda42a0b246db62b570bb1670123", "T3T1_cs_test_protection_levels.py::test_verify_message_t2": "deaf5f895ce63bf6d8c8326023bcb4c53f5bd5b1d0f3f9f2adb8ddf26f83d171", "T3T1_cs_test_protection_levels.py::test_wipe_device": "70a6096a3d71a5731129325913249e64b0b3251168f306015d9cfd0caeba60f5", -"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "c7842391f709efd570901fc735ebea9e836dd00eee9b20d08e116530ca626452", -"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "64eed7356c5fd889ab155b8f82ff5e29adefe2617473e426f948027e0b169352", -"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "64eed7356c5fd889ab155b8f82ff5e29adefe2617473e426f948027e0b169352", -"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "75efa06218a85dfd65f847ff15059f003904334ab510382321331b0d5196594a", +"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "0e8a466353b6234d50f427bd18d792dd0a741bb4e43d1dea9d820971140dee27", +"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "950a07725e66e30ae8495435af3547029e9488b0d017b4e5125014dc123414e4", +"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "950a07725e66e30ae8495435af3547029e9488b0d017b4e5125014dc123414e4", +"T3T1_cs_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "8ebc3b9093796ea1768e76e396945cd51a215a0ef8897ca073d6b5c3937faafc", "T3T1_cs_test_sdcard.py::test_sd_format": "dbdfa7d822e99020ac92c5fd0f6b0ef3c8ff99d6ac9e5530394f422b2797d1b9", "T3T1_cs_test_sdcard.py::test_sd_no_format": "051854e6ef881cc7ae9f5d85de77ecc9e45f805f4a2dac12c9e51eb6e464f5e1", "T3T1_cs_test_sdcard.py::test_sd_protect_lock[auto_lock]": "eaa0f33ed66b751916d5269d411476e00bf7be5a762143f3384a34e72fb1b67c", @@ -26569,34 +26569,34 @@ "T3T1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "c1f80360eb37acc0398a309f8489c89350a33ad47ab1d26ad63c317a545bf7e1", "T3T1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "2c26b6f9d790801bfc9855bedd529c4c3699af42d40f008de7aaf2d33b33e57f", "T3T1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "5f4728036f8637aefb011750c6940e1acf14663477e91f62e858f83bf1b1dadc", -"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "6741b4d2e43287b97507c9f447703f1fb4f3e58e72d03062cafbfa508d815b1c", -"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "7d745acaebfc04a91208798ce93dc70c4916ad5669147db72ec2d344f9d4030a", -"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "de285f01c020764ac32cd00ec8b07b50e5a67dc1f6bd62f118fdaa3c9b253a9c", -"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "1867bcf8b52578f577e842a067cd39f729f4a83e7a94941e8069d66d824206b5", -"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "a773402a19cf4af1b5bc57d3820eaf58c3fea090e5c362d2f3b0b87109faeda3", -"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "d43b81a7d64daba411ea7e170246879d8f8fcfa89187912c0544323e641ae342", +"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "604202339386f5f7478c9003446f2baadd54b14b35c4f181080ef3bd84026f6f", +"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "b59b9d5f5f849e5b360bbe4da560331a4b2e00c74e646494645dd96e80f81611", +"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "93b779b9e5ff6ca287fe7711a2438dead7c96adf4075b3b1238f48dfe7ee39c2", +"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "8e6cdabb6e29e4e546960502618d7dc6f5323176151f9df8fb1be0981e836001", +"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "eed3ecbabe07c0cf42609c3c0df43d21161c640de2d854ba3cd3f0986e5ea113", +"T3T1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "1522abd4913320b02505e20763740fea953667c4f993d10aca889e3347669d1a", "T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "68c146f13417be0845fee20b1d8de4a05e0844608c2efb3cfae9f573be39f0c4", "T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "791616229c1d667b6a9ded945f004c0b39d1a9a7e44202cab8d5b55fd51fb9ed", "T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "45a97819bbf7278ff87c35d83d963b260a559ac0d566a85cec625006ca29f3c7", "T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "791616229c1d667b6a9ded945f004c0b39d1a9a7e44202cab8d5b55fd51fb9ed", -"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "1cf2476eaa2a942e74c5128ae8e1e023462939a08c62ac9b282ba4d98b64715e", -"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "1cf2476eaa2a942e74c5128ae8e1e023462939a08c62ac9b282ba4d98b64715e", -"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "0e33bb3a58ae31c92d59eda08779e2f5762f29ee1e3acf6731351c03a8083443", -"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "0e33bb3a58ae31c92d59eda08779e2f5762f29ee1e3acf6731351c03a8083443", -"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "0cc406a15d65776a50a88c271c735dbee0df5b33b46edcba80bd62c02a7612e1", -"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "1a40c9117166a17c1bb59dd2907be85e610686e431421ef03be71c115a708ced", -"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "d65998980dfea3715d2569569297035476ba163f3e718e8f9f86040b54e42244", -"T3T1_de_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "743817ff65e95e983707a61c4cc0f588b330acef908bba9e371133b883f3f293", -"T3T1_de_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "eb21640d5c38f283dbdaa931b6123abd06c491f77c7a27d612371d538a67ef92", -"T3T1_de_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "1ccd2765fa167b89e031b0f95dde4679d1dc8eced5f4df288dac01457a17be3a", -"T3T1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "d0c127c6fb9ea8e8011e6d635c416f0f0392c4528ebfe0ad3100b42fbee7a56e", -"T3T1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "d0c127c6fb9ea8e8011e6d635c416f0f0392c4528ebfe0ad3100b42fbee7a56e", -"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "fe1742ffe3512b6f3e53ccb031b2dbaa1f4c52bdd7d51fec2877e2f8f65858de", -"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "fe1742ffe3512b6f3e53ccb031b2dbaa1f4c52bdd7d51fec2877e2f8f65858de", -"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "fe94f6e76613f268376b7dff9aef9c3954e7063f35f60c7749a53b35035426c5", -"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "fe94f6e76613f268376b7dff9aef9c3954e7063f35f60c7749a53b35035426c5", -"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "eb0e67adac1fd3fa7a2c2992cb5c06914e56ad0336567de285e60f4e3cdf44e9", -"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "eb0e67adac1fd3fa7a2c2992cb5c06914e56ad0336567de285e60f4e3cdf44e9", +"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "ce3e26c8e485a5527ebf9615d91e7faf8a0424c5e9365ddf80c36520df7df317", +"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "ce3e26c8e485a5527ebf9615d91e7faf8a0424c5e9365ddf80c36520df7df317", +"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "6441912364a4a658fbbfd7517102ca425aff22b223ca2294b12d83a021b8d1d0", +"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "6441912364a4a658fbbfd7517102ca425aff22b223ca2294b12d83a021b8d1d0", +"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "bf2471b9664f150091ffe1f2cfc185bd284d6dfccec852025f368a954758c5ab", +"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "dc83fb419ddd419e1daf8169e51025475577229fe4f05fe6738d157b9a9adb57", +"T3T1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "bd1685ba7aa8b29d3f326d8bc7b48217fb18c6948818cf61a450fe48a7491e3e", +"T3T1_de_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "332e65adfe0ecc59a228e42f341519102aa4a460e1397d4c415b8e2b109cc6c7", +"T3T1_de_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "18b8287b16cc6ebee6d6d4464c89b2f861e3bdfb00b6caff1e65630592f7cc0a", +"T3T1_de_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "718189a3d02ee6ac6eb7902eb25d4a30516e90e0395c50165ab12c68eac3ddd1", +"T3T1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "4f8a8e44f7dc5e0688c5572497b6364a72d2953f2cf96897e811214c6eda422c", +"T3T1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "4f8a8e44f7dc5e0688c5572497b6364a72d2953f2cf96897e811214c6eda422c", +"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "c273f404260d5ffdf636cd9afe330ae22b5b79063368cd4a8334db239dd2aa40", +"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "c273f404260d5ffdf636cd9afe330ae22b5b79063368cd4a8334db239dd2aa40", +"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "48cefe77ea6023227664f620c6856722372b1ae4b35b3c196bff77d5805c2d98", +"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "48cefe77ea6023227664f620c6856722372b1ae4b35b3c196bff77d5805c2d98", +"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "176d8597a9bffa9094d4944e64aee9ff4916eb52b8967fc7aafafe6b79c08629", +"T3T1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "176d8597a9bffa9094d4944e64aee9ff4916eb52b8967fc7aafafe6b79c08629", "T3T1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "95b6441fb9503e8f5470cd69301e8114f4698ba8aa0f4c4aeb97586cb8537698", "T3T1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "f14f038227f8d49c406911b492261492b3536401ff396e18f4b9dd464a1c0b78", "T3T1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "a0f47a22ad32c57a4a3b2c790ce27c8802cfc90bba618728784af17b5eee4ed2", @@ -26878,24 +26878,24 @@ "T3T1_de_test_msg_applysettings.py::test_set_brightness_negative": "68c146f13417be0845fee20b1d8de4a05e0844608c2efb3cfae9f573be39f0c4", "T3T1_de_test_msg_applysettings.py::test_set_label[empty]": "dfd804c32a4139b92e2583f7bcd4cce287f03376632aa828269c192d15ef6c44", "T3T1_de_test_msg_applysettings.py::test_set_label[max_len]": "d8f8586ee5109090f87b9b6ec24de30a15a2d501e3e6aa2b3bfca201c8f9adec", -"T3T1_de_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "2d8e8c81b1ed471da854bf6929135ecd3952af48aef7d5f84ff01f1694cdab8d", -"T3T1_de_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "2d8e8c81b1ed471da854bf6929135ecd3952af48aef7d5f84ff01f1694cdab8d", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "3bd003af4d0132a2d463dd916f07225e3df6473473c56e13c75883bbcea865f9", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "3bd003af4d0132a2d463dd916f07225e3df6473473c56e13c75883bbcea865f9", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "37ae0b752f7d2b559237878e4681abad53d4a64ba94dfff2abd3011fde6a4565", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "37ae0b752f7d2b559237878e4681abad53d4a64ba94dfff2abd3011fde6a4565", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "5ca48599c6a5107251327b76777879bf000bee063a1e372706deab6584399bc0", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "5ca48599c6a5107251327b76777879bf000bee063a1e372706deab6584399bc0", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "691ff02f82c39ba5ed623fddaaceedf90df96a0e368057e594fb4354565dbe76", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "691ff02f82c39ba5ed623fddaaceedf90df96a0e368057e594fb4354565dbe76", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "302be1c7755287a1e02f1d14324ba75f8a93a2354b4bbdd4e9491fd106b76b7d", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "302be1c7755287a1e02f1d14324ba75f8a93a2354b4bbdd4e9491fd106b76b7d", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "bfc63ab0398d5aee40e8d94d147618195fdc9857303789742d880f51c56611d6", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "bfc63ab0398d5aee40e8d94d147618195fdc9857303789742d880f51c56611d6", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "bff1081693c45d852f1f166d92a59d928d34d4f5946c16ca947f060d812c9502", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "bff1081693c45d852f1f166d92a59d928d34d4f5946c16ca947f060d812c9502", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "dcd6772f7439dbd3d28cc50b66f4258a1e21a29603fbed92786da94bdd8d2647", -"T3T1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "dcd6772f7439dbd3d28cc50b66f4258a1e21a29603fbed92786da94bdd8d2647", +"T3T1_de_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "2942b84785d8971701711e6ecd75179813b8de0151b978c6dcce6776489124bb", +"T3T1_de_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "2942b84785d8971701711e6ecd75179813b8de0151b978c6dcce6776489124bb", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "97d6e726d6ad4d82fae46f3cf731d2bfd88f6b30d5f65c6019081f2b7403d191", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "97d6e726d6ad4d82fae46f3cf731d2bfd88f6b30d5f65c6019081f2b7403d191", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "1397b4ec22056d927b1221e1979d3f8bb163056c15bbb280ee078f554b3c7607", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "1397b4ec22056d927b1221e1979d3f8bb163056c15bbb280ee078f554b3c7607", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "31c01f65297437ed37e9ee151eb660d2a302ed0cb19fa2e192ad4c08cd331bcb", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "31c01f65297437ed37e9ee151eb660d2a302ed0cb19fa2e192ad4c08cd331bcb", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "b5ff4a2c02e2ad5fe4e820db32c703e1fbf42b5d9ad0a2f375ff8a3c8516203e", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "b5ff4a2c02e2ad5fe4e820db32c703e1fbf42b5d9ad0a2f375ff8a3c8516203e", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "697382c6c01649864072338a719ce417c9ac0d59f6ff8ea2040c4afb093cc5db", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "697382c6c01649864072338a719ce417c9ac0d59f6ff8ea2040c4afb093cc5db", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "33b6dc595e5cb7317ceb67e2c2f52779f0d3e756097f71ae3fce6835deba6771", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "33b6dc595e5cb7317ceb67e2c2f52779f0d3e756097f71ae3fce6835deba6771", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "3f8d68846f10fb2b765b5e3bd1f6c3325de3d0998a6c6409bc430ce8bc5a66b5", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "3f8d68846f10fb2b765b5e3bd1f6c3325de3d0998a6c6409bc430ce8bc5a66b5", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "1d33bb6e943ca15f27673ff4a8163d48723c244504574b7d27e8ca410d6e335a", +"T3T1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "1d33bb6e943ca15f27673ff4a8163d48723c244504574b7d27e8ca410d6e335a", "T3T1_de_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "d56a640705b67db747108d006d17e159527c56a3c56a35a02bd70589ade4ffb6", "T3T1_de_test_msg_backup_device.py::test_no_backup_fails[Display]": "6b5867f59cdd883ef0534847207ddc19a750ed5dc4ba27dbd918f58f0e419962", "T3T1_de_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "d578066b9cb0140ff3f96b1c559d286021c97dd90ca198999580db951f1697c8", @@ -26912,9 +26912,9 @@ "T3T1_de_test_msg_changepin_t2.py::test_set_failed": "1e5f94e38eca11782f264cae70334d2d13318046584cb89202baa91cb0684a82", "T3T1_de_test_msg_changepin_t2.py::test_set_pin": "7c79d70d6f8de8fcd9401e297f5395f686716f81af4090b15fb5c8b4924bddae", "T3T1_de_test_msg_delayed_ack.py::test_abort": "b0c46a8875ee39bd9d7e178ad4a1d762a013bdf740ffe2c71d280a6f4cac9964", -"T3T1_de_test_msg_delayed_ack.py::test_backup_no_acks": "ae9695bbb8b013916c928a6f8e7f05e34e7297aece974ca1eb4eb7843fd5a7ea", +"T3T1_de_test_msg_delayed_ack.py::test_backup_no_acks": "cd29996bb3f9ef0c4eaa37efb5cf72069436bc31dd355a1ca5564316e84af63e", "T3T1_de_test_msg_delayed_ack.py::test_delayed_ack": "b0c46a8875ee39bd9d7e178ad4a1d762a013bdf740ffe2c71d280a6f4cac9964", -"T3T1_de_test_msg_delayed_ack.py::test_setup_no_acks": "24d153dd05c759a0358f7d6763ccbc962dda87d6668087ff79c6b6aaf76cc400", +"T3T1_de_test_msg_delayed_ack.py::test_setup_no_acks": "9c50b612db818ea5e5e34c9382a1bff1bad8a8e23cd7352353a9d5385117a711", "T3T1_de_test_msg_loaddevice.py::test_load_device_1": "e0fa49033791cbedf9a51cc7cd8cecbfa6af0a5ec1d7a2050e8107c383defb5a", "T3T1_de_test_msg_loaddevice.py::test_load_device_2": "096e6d484da3e3b0c9388654e5f343428e1063a7f73584317fe498f5e1c1d7f5", "T3T1_de_test_msg_loaddevice.py::test_load_device_slip39_advanced": "e0fa49033791cbedf9a51cc7cd8cecbfa6af0a5ec1d7a2050e8107c383defb5a", @@ -26953,10 +26953,10 @@ "T3T1_de_test_protection_levels.py::test_unlocked": "7b444070358cba79c844c1c1c429aae80e2af24430d3a3aea4658b193785daa5", "T3T1_de_test_protection_levels.py::test_verify_message_t2": "7b05b8b4213bb600852c4948e639123fc071cb2c9715daa03b3f874a55913859", "T3T1_de_test_protection_levels.py::test_wipe_device": "84fc6094f9934c509d7bfe59c70c6541218e48bffd03d1ce331b107a44e4d49b", -"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "654dd190a5d454bfc77db54394cedfa7d74174bd9035ce77babf087080fd2fa9", -"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "44268e4cbf5e1054751bb99b8bd950ac5b6379e704b6cb9e04a25d3500a7f7e5", -"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "44268e4cbf5e1054751bb99b8bd950ac5b6379e704b6cb9e04a25d3500a7f7e5", -"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "174a3cc5a2508e27043ae08e95eb8132f8108e028f4d0350dd3563095dff7110", +"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "2216d2bc9702228d11c6fbde855fb395ec0aef5b38a35f744810e2c7008adc22", +"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "7070ae195169eb6a0c9651a864184fb7739c1d083deabd0f41f2b1976224eb23", +"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "7070ae195169eb6a0c9651a864184fb7739c1d083deabd0f41f2b1976224eb23", +"T3T1_de_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "d622233494649ca0c9b1b6a6414db981fe88057cf808894b6d45f9ea7647b4fc", "T3T1_de_test_sdcard.py::test_sd_format": "834f7ec68e573ef3d2d8cbf71d9f6b93696b80555a4d217835bee22dedec865a", "T3T1_de_test_sdcard.py::test_sd_no_format": "11d7e0781b5a6c0ccf48bdda86806907e94f11639827bc198912323cff1b18e6", "T3T1_de_test_sdcard.py::test_sd_protect_lock[auto_lock]": "b8ab497065213c10ef2e1dff175041d91dad6fbb84afe5a6cf9372910a9913b8", @@ -28373,34 +28373,34 @@ "T3T1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "08fd5bdade429f2cdc74eac74eaea3c0ce5771ca6ac1546b84ae3edc38243ffa", "T3T1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "94aafc91bcd675d1e3e555c5197566270c51da999961434023a360b9fbc50901", "T3T1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "e64f6c1bffab1b27b0ca74171900b55c9a586ae835fbc7a6a4508d397c9342d0", -"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "786fb545b43be259bf647aaeb38e1860b1c150332266d8c2f136bfe396b2608f", -"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "aa03ac113877000e9baec05318ed6b544754778f31fb326ea709651d66c68d4d", -"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "7e95194d55853e53233dc34832bbd901e6841c639c074ba4dc3c32374c0579d2", -"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "fea4faabd87aa7914b841cbe85e2a1cdcaafd5226ba22a46522eeba178351370", -"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "45ed6c8dbeefe2076f9ebb1431b47548eda02d6485108de3d84ced0c8d70ef2f", -"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "6834038a095d66295b062c7b4ca9f4425e0d218719039fcec9ae41eafb4af65d", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "d200e1543b39038d4e87252f753112c03fb4b3df80a0a7f25de49c3b84ac7502", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "4a919d2075e589724a1cabddc8fd6a7dafba8caf05ff4c42e5f2d462de93d4e5", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "fdbb1a3c945bfe50f1b5ce4fa81bfa51b3929cdb73ee1339244675f24df32f4a", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "d15d690da90ec755d9915f9ed929474931e89272a22234d087aa1ab239af368f", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "9b035c41f92bc20bea6897be216872797388d4d8b8a4534895a6bceb31c822d0", +"T3T1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "2e384627afafb3c8125534b0ebe6879c5ea0fb25fe1b44e3a415e1f4b339d11c", "T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "0064e8a52b9bff0c2a31432fa781b800afb21e8910d60f303671bdfc8d8425fc", "T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "5336136eeaa51563b4796135d438c3a7e8e51c7e0dcb223894df322a30a222ea", "T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "7b5fb22b304d7be58de633faa3d31a1d66bbe894bed0b19762a2f106301767ae", "T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "5336136eeaa51563b4796135d438c3a7e8e51c7e0dcb223894df322a30a222ea", -"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "2d0cc7546dd9f6423510554300ee33421df1f67ad339f7cd811ff4ba172fb6d4", -"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "2d0cc7546dd9f6423510554300ee33421df1f67ad339f7cd811ff4ba172fb6d4", -"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "550376c65f6f44f1e36e2b46143901ec4c1f8aeee3871559a85ada6f6a923e94", -"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "550376c65f6f44f1e36e2b46143901ec4c1f8aeee3871559a85ada6f6a923e94", -"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "94021156526bc4af6790e27fae01382eefd663264831fde24ceff5c85840c2dc", -"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "6a14582535639a2996843c505654a6eb50f3b355bf367b5a3059acbf21207a2d", -"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "8c44c92969b1844934e4e3a9a905be2787031bb9d13fe2e3e984c99154ab5a86", -"T3T1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "961d04e03e7b0d0223d84e640ca34e8d4f7e2ad70c08db5819532028dd35dac1", -"T3T1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "76dcbb2f948a85a98d51b2011edcb956f83c9d668865f09829dcebe7db5f2898", -"T3T1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "fae980e00f7b79fe480631f0b5a5d6faa152c799a26a710de3e221fb9e50b450", -"T3T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "1ea6fdad5445f6523c9835035fbe23c6eb0d88f287073a9368150cc09644c21b", -"T3T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "1ea6fdad5445f6523c9835035fbe23c6eb0d88f287073a9368150cc09644c21b", -"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "bba55ebcf37dc6c5f0472eed893ea984d002b526d11bbf54c801d8bcb91c4eb2", -"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "bba55ebcf37dc6c5f0472eed893ea984d002b526d11bbf54c801d8bcb91c4eb2", -"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "650354b29ee4cc2a79460274180a994300450fda1248f2c8ee1269c930034e6b", -"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "650354b29ee4cc2a79460274180a994300450fda1248f2c8ee1269c930034e6b", -"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "2b42f4307deadfc62bb1f33fe58236b7065db47d25984327d34b8c3ae3418fc2", -"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "2b42f4307deadfc62bb1f33fe58236b7065db47d25984327d34b8c3ae3418fc2", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "d3061516b41564feaaf9e74396bc5319ba3e23bba040e053cdcb2b9d904e0703", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "d3061516b41564feaaf9e74396bc5319ba3e23bba040e053cdcb2b9d904e0703", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "c115ab8d6759eb6470be7fd2e40de55167d46f0bb9128a6a49dc53cc2de40754", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "c115ab8d6759eb6470be7fd2e40de55167d46f0bb9128a6a49dc53cc2de40754", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "886fb0045df00b4a33c8248e6cdaa7f918ac17e13467f945c5662cb2ed85f118", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "7c3e274bbf1ada6d55415cc57f96572deee24345deecd49509320ffcef90aae7", +"T3T1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "c68bfdeddf1d2b62a5ead14479ca0e55cb2c29c10a9b6caf53d9c7fcdd06990d", +"T3T1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "70ff1a3d294224e2a9f1c32cc2ea4010695d2722ba81361349384820c6919b1b", +"T3T1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "d28865c12b42a645b00bf87b3e19baaf28e4c8fe44351f1d4a1818238d17ed3c", +"T3T1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "bd020800d0df4d260275584aae9e3a217e1bafd6648a99020e55dd5a4a50ab31", +"T3T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "5d17f06123ce94dd6ea4e3b2249dc5f5a8c9b44f485b09120e1a4a9d97fdc47f", +"T3T1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "5d17f06123ce94dd6ea4e3b2249dc5f5a8c9b44f485b09120e1a4a9d97fdc47f", +"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "fe98f85b588655d631494956792505fafcd2882166490a8ad0754f702f7184a1", +"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "fe98f85b588655d631494956792505fafcd2882166490a8ad0754f702f7184a1", +"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "f9d118087ed2420bc57f831bdc5d412d0a8563c6c6b879390c92a9ae0df87009", +"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "f9d118087ed2420bc57f831bdc5d412d0a8563c6c6b879390c92a9ae0df87009", +"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "ae9624cfb5fd6ffed9b0eb4216c9422609143bb39af0de2e9e7a4a0958e39ef3", +"T3T1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "ae9624cfb5fd6ffed9b0eb4216c9422609143bb39af0de2e9e7a4a0958e39ef3", "T3T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "853834754a9872d8006f9cd3e892ae166ca245e2c4c9344b96a92717d40c7e23", "T3T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "45b703560d401a4948caf15daa24eef1bef45082752082e06b98cad9d9ada0ed", "T3T1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "3b2419d806472f9c0c2e0b038d027719492b3d614d22dd9f62b6dc3b8343ccba", @@ -28682,24 +28682,24 @@ "T3T1_en_test_msg_applysettings.py::test_set_brightness_negative": "0064e8a52b9bff0c2a31432fa781b800afb21e8910d60f303671bdfc8d8425fc", "T3T1_en_test_msg_applysettings.py::test_set_label[empty]": "9db081602bd168cdb194b1c2839305ab9cf66fccea5424668b07e843586f495f", "T3T1_en_test_msg_applysettings.py::test_set_label[max_len]": "1ab607f9d2a5c15140e66e1e51ca9ce19f20a3573ac7cc4d89ceaeaa622db040", -"T3T1_en_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "6b372dd2ad7a64c415f2cc7310d9841843726ad3fa350fd18da82ad374258347", -"T3T1_en_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "6b372dd2ad7a64c415f2cc7310d9841843726ad3fa350fd18da82ad374258347", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "2d183800be79f204b7d968d2fb495ed9ec26fa60e470620e4bf9ae905773546f", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "2d183800be79f204b7d968d2fb495ed9ec26fa60e470620e4bf9ae905773546f", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "a92b0d4d6fa63435371b50d86ec90d6af1af0b552f65228a4cf0ce91126a95df", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "a92b0d4d6fa63435371b50d86ec90d6af1af0b552f65228a4cf0ce91126a95df", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "6711dedca13b341562f9dedd3f80bc1124bf6884ee1b9460d5beca705cfaaa2b", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "6711dedca13b341562f9dedd3f80bc1124bf6884ee1b9460d5beca705cfaaa2b", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "d44941d3935793291d0239bcc803ab293ab3af85757f32cc2101e9859de49eb8", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "d44941d3935793291d0239bcc803ab293ab3af85757f32cc2101e9859de49eb8", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "0aacffc086a3b64c481ea984212c766c578488c0f542aee28d217f3344305bb4", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "0aacffc086a3b64c481ea984212c766c578488c0f542aee28d217f3344305bb4", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "0bd2c1a66939c95853c67031c51d32b0cd726003acb1f1f1c4c7942f8f57344f", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "0bd2c1a66939c95853c67031c51d32b0cd726003acb1f1f1c4c7942f8f57344f", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "c7a78d559c006a0b1dea01fd9db7e53bd52ace475752021579aa7af56a761791", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "c7a78d559c006a0b1dea01fd9db7e53bd52ace475752021579aa7af56a761791", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "8abf8af3f4574a970d442b855512eabff01dde0f3fcc27de7dab63feb556f486", -"T3T1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "8abf8af3f4574a970d442b855512eabff01dde0f3fcc27de7dab63feb556f486", +"T3T1_en_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "78d823817cf5c51d1025e2629253c8e4ded48bef00e2b4ae6e7f3dac6b83320a", +"T3T1_en_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "78d823817cf5c51d1025e2629253c8e4ded48bef00e2b4ae6e7f3dac6b83320a", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "7218304114f5f42a347dbc6644f83336d755c1d45fc065f9a994533eb7c38196", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "7218304114f5f42a347dbc6644f83336d755c1d45fc065f9a994533eb7c38196", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "248af9b0cd715bfc555d452d0e712877911854e05baaa8f02ff261dcdc59cbf3", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "248af9b0cd715bfc555d452d0e712877911854e05baaa8f02ff261dcdc59cbf3", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "940378ea04049474c121ed191fd006ecf41d757184194195f26c5481673c5c37", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "940378ea04049474c121ed191fd006ecf41d757184194195f26c5481673c5c37", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "2363481ad2e2de72788e445442918bb8eae7e34a64f306f0c5731103c5ae0430", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "2363481ad2e2de72788e445442918bb8eae7e34a64f306f0c5731103c5ae0430", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "f278cd2fc1095dca43bbe98471932571a4dff487f3972c8e6cf3a222fd04f411", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "f278cd2fc1095dca43bbe98471932571a4dff487f3972c8e6cf3a222fd04f411", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "fc7299fede6e223ab2a9771e9429237f80e424211df735d4bed7069e2ab91caa", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "fc7299fede6e223ab2a9771e9429237f80e424211df735d4bed7069e2ab91caa", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "012550676fd05d19215d8d1692ff16bedb0f98d8f8a2c44b291fa9c71a5ed741", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "012550676fd05d19215d8d1692ff16bedb0f98d8f8a2c44b291fa9c71a5ed741", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "d57820c0b7170008bf902e26171f9438a6b561fb69c24fc7b7823dbe43ebf4c1", +"T3T1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "d57820c0b7170008bf902e26171f9438a6b561fb69c24fc7b7823dbe43ebf4c1", "T3T1_en_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "b3de26886fa9066a692e730de7b5e9d5da3c397e230354f0927c77179426163f", "T3T1_en_test_msg_backup_device.py::test_no_backup_fails[Display]": "365368aab9f2864feaa56ca19319131e06e3db4856b79417a42e7b0385c3ca37", "T3T1_en_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "c73e0cf4edbee7958079fb275e3dd0a9196420a67e47b29b64e7df184f134d8a", @@ -28716,9 +28716,9 @@ "T3T1_en_test_msg_changepin_t2.py::test_set_failed": "fd0d3f63cb81c4e1e0cee3b02dc18e0fa846e8bf392b4af4d81913e82b223c3f", "T3T1_en_test_msg_changepin_t2.py::test_set_pin": "999b46a983bc5244c53b831ee2cb51c8b5b59219d98fd84f44de3ba17ed3b72b", "T3T1_en_test_msg_delayed_ack.py::test_abort": "a609953f7ce56226eb94d3569126a1e641cb3773f16479baf3ba6492c36171fa", -"T3T1_en_test_msg_delayed_ack.py::test_backup_no_acks": "3e895b72553d2337383c656a6cbca2634b1b42d7dd47b1c2e16ad9d1bc13240b", +"T3T1_en_test_msg_delayed_ack.py::test_backup_no_acks": "98c6f0b7696ca3eb42e9d45f4f3b75525acdb245225b65cc359cba521b8b21eb", "T3T1_en_test_msg_delayed_ack.py::test_delayed_ack": "a609953f7ce56226eb94d3569126a1e641cb3773f16479baf3ba6492c36171fa", -"T3T1_en_test_msg_delayed_ack.py::test_setup_no_acks": "737db43ddfb08f4b2330a4c3726f354f9d26e4073aea3a380cb97a3349ab7c82", +"T3T1_en_test_msg_delayed_ack.py::test_setup_no_acks": "0f2f3f93b2fdefd4ba17daab2d5f6e96a7231638bee9691f2eabcc09156677e0", "T3T1_en_test_msg_loaddevice.py::test_load_device_1": "a1629d90e08f23a83dec1f47b0992bafea1ca1adb4f72b18ce4263e796e65109", "T3T1_en_test_msg_loaddevice.py::test_load_device_2": "6d691085eed4ef2a73ea0c514965ca7290160e9797f48922d4dba7e7243bcc35", "T3T1_en_test_msg_loaddevice.py::test_load_device_slip39_advanced": "a1629d90e08f23a83dec1f47b0992bafea1ca1adb4f72b18ce4263e796e65109", @@ -28757,10 +28757,10 @@ "T3T1_en_test_protection_levels.py::test_unlocked": "a8a2c71d62d18c17aadbf38e93f65b4f32056d334c7785f5ad8579788badfc81", "T3T1_en_test_protection_levels.py::test_verify_message_t2": "cd6e174cd4a79710947e2f9847b4e9f87a14628f69a6e793ba4cdd042fd32320", "T3T1_en_test_protection_levels.py::test_wipe_device": "2499a48f54880cb72e39a194f4079fe1d207755eac59a16d03e3b72f45a80fc8", -"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "5876a224bf22c14bbc838e2abdb969e37499b9ab5d2373150b17f04afb03f263", -"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "44392722f1c4acc53caf2abf89913d0563a40ff958a0fc4ae1f8ba6ba0718ac9", -"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "44392722f1c4acc53caf2abf89913d0563a40ff958a0fc4ae1f8ba6ba0718ac9", -"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "1f985d01dd2154514ab24ac042b250ed1678778f00582c25791cccf2bc73dbfe", +"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "23f2cf9d6a4a5ca8cd27299e1da58c7d6511682d53bbed607fc2a0d293d40aa4", +"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "5d1f39ed39f85dbc7f3469768f8a33e04d7d601eccba7cc2108361a5974a7a66", +"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "5d1f39ed39f85dbc7f3469768f8a33e04d7d601eccba7cc2108361a5974a7a66", +"T3T1_en_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "1a69ae6f00d0bf406b811e77df691e766291641782cda324c60b9e86cbd0eb98", "T3T1_en_test_sdcard.py::test_sd_format": "9a8c4fd7b59dbb24350131fb0476daf59794522931b7f7fd9010e1453c5690aa", "T3T1_en_test_sdcard.py::test_sd_no_format": "0edc58610ac21bb7fb8027bbd5b91ffb331363cda3f716b3f41d59a98946c1db", "T3T1_en_test_sdcard.py::test_sd_protect_lock[auto_lock]": "c435b24560b53f265bb8e1e782e6e41393c8c1d591d3fd645dd90e87b2399207", @@ -30177,34 +30177,34 @@ "T3T1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "1c0325ddd3d44630124079ff759276e3e8b85365ce17c945a6c942cefab48ef1", "T3T1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "853586a737bef984be45f08b45d333bcd14dfa0ccd39f86658f405ea2703ccbb", "T3T1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "886cba857f1ef2c900f741be0bfdf7facafd5040dc9a90a9bc0d673d81604ed3", -"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "86d0dfb53fb1dc5cbf3d2436bac6e7d61a18fab4d5ea414fbf92ecd740315749", -"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "b4682da45178b14eb4715072fbd090e76b91db1e065417a0e6206341202cdd91", -"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "223e82d4ecf850034dbccd9308a53c5b1ee33ee1aa5292fe517b01cdd6d016a3", -"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "a0b5720c4a6cd8338332cd3d9fbb65ce92173e2d3367e4570fb2af26aa3deb57", -"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "8334b9e9e64b46b6a70de1c46cf5797bd438ea160e6f59e73ed1196db0fc57a2", -"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "5a3eb8c98904a549642bf9eb17047af4fc2f6566b3a1808f4d3d00431972e79e", +"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "e1cae8267e6a8ac464446a848ef3c458f5470cdecec9f0184d86cc6cdcbf44bd", +"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "38d6ee00301fb37954d55bf7e879a806134da0b9ddc815e8f4654d3605cc668b", +"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "0d907c6273352332dc85d1707f284071017799f976b20b5135bb4067ed8fed23", +"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "8c772a0855f33b4f3633c8490804cdcd71727b1caa2920fb61b2a5c96a4947a5", +"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "a8786debb451364462f36561c31e570430e34a0c20a71d6136c657d9bb55e48a", +"T3T1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "d3730f8c8136b26dca9cc2a57615810e4576e9da9c5f16c96888de56f24d2937", "T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "41b9c9e85d64891dcfd03d675df77c533f035a2d191b161144d00afab69a589d", "T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "9a652d51a6d359b74868532abf85952fc24bc0c2f093371c87897d968ab3a8db", "T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "6104fb036413cc12b78ab52197fbb5642b72e5bf6b9884464b1b0b806de2f3ca", "T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "9a652d51a6d359b74868532abf85952fc24bc0c2f093371c87897d968ab3a8db", -"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "ac9233996de67eb86d29cad9f9290373ba91987e9c8101d728caa9626dd02db2", -"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "ac9233996de67eb86d29cad9f9290373ba91987e9c8101d728caa9626dd02db2", -"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "1f78a5bb526d3236c9d6445f2a963dc720d8b8f6faac89b4a7e0be078b983ff5", -"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "1f78a5bb526d3236c9d6445f2a963dc720d8b8f6faac89b4a7e0be078b983ff5", -"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "097c30ac5985f3104b129f57cf30ebb50ea292085d5586b49c4114f6efde51c8", -"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "ad0e106481ef9a9e4d3546d19a1243effa683887b910dd81844188be086457d4", -"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "0e63260bfabf9d25a6d1e92e3a040e841826606f9aaa9a4cbbcd006fa0994fd7", -"T3T1_es_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "de864311c0a59afa65546bd5d7eed98df674200cac6bb98ce6ce564cfa375908", -"T3T1_es_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "cc7e341e7b5d11af1ef85ff3efcb4c90569e7af8b990d64e0278e03793e7751e", -"T3T1_es_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "2276c233d0830311123ca431854d5178db296e8ef7443c840de27322dae45081", -"T3T1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "dc9fec14a86e59977a5074447e48e0d6b05e928c48ce348cc5968af951303fc8", -"T3T1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "dc9fec14a86e59977a5074447e48e0d6b05e928c48ce348cc5968af951303fc8", -"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "b6eab92ff694ba08db5836a85cd2cd6343fdb3b103f9479cc1e7df826203d6ff", -"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "b6eab92ff694ba08db5836a85cd2cd6343fdb3b103f9479cc1e7df826203d6ff", -"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "e8dac07d2289a46a20184c13872f50e561503ac4e0f443d00061e8ffc9c110a9", -"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "e8dac07d2289a46a20184c13872f50e561503ac4e0f443d00061e8ffc9c110a9", -"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "f88ea1bd8d00f61a978ada92de535e3d1c113ec49260e846a990b17c29616cc9", -"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "f88ea1bd8d00f61a978ada92de535e3d1c113ec49260e846a990b17c29616cc9", +"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "5299277edc228413251d86bb15373da8e9bf79392eb66ac4f7d54940380491b0", +"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "5299277edc228413251d86bb15373da8e9bf79392eb66ac4f7d54940380491b0", +"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "e331568072ecc7292b609dc1104b6bac105554fa48b498de42d5533ce3788b2c", +"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "e331568072ecc7292b609dc1104b6bac105554fa48b498de42d5533ce3788b2c", +"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "c85e88b1a4215c51d840ef8eefaeb15f6744aa13b09756f7cc226c12e757ecfc", +"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "d682a8a855f585c5d0209bcf7d9c9a3af65c5c05bfaa0aeb0b6d30d2e16e83cf", +"T3T1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "2a754768cae5e84807efacb0eafd1ee6f5f44c8c68b665c9a04704b373dc6d07", +"T3T1_es_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "aa90e0e1de049ee590cf6fc029c2463cb8bc88a13ee98c417884dce2ed086e2b", +"T3T1_es_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "272ab2caccd8ef4269c9fbeaea6ac71f6becd0e9c6a3c03b747e668aad9e898a", +"T3T1_es_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "ca02ac9d9054e0b676eceb2128a7c0e9cbd272e2b224a6eb90788a14e483ed67", +"T3T1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "442857bb23919140f866cd911d4f8b8ebf385f03cd85d645e0f368762356b8e2", +"T3T1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "442857bb23919140f866cd911d4f8b8ebf385f03cd85d645e0f368762356b8e2", +"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "b39c7dba7056c8b5911f3f4cb8e9cdcae2f188f86f23d1f703b8aa9a554d79f9", +"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "b39c7dba7056c8b5911f3f4cb8e9cdcae2f188f86f23d1f703b8aa9a554d79f9", +"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "41b185f59b6dc42dcac9dd02400622e3e9f5968f317aed10ec54d4a6c99a4980", +"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "41b185f59b6dc42dcac9dd02400622e3e9f5968f317aed10ec54d4a6c99a4980", +"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "9ecc9791777c1636b85e7329f77615ed3c3d449b46da7fa8abe29154ea04e8e3", +"T3T1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "9ecc9791777c1636b85e7329f77615ed3c3d449b46da7fa8abe29154ea04e8e3", "T3T1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "cf84d1cabd76e89916d1b1e6540cbafdb6005743ec32a35736810b6f96018ede", "T3T1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "7ceff5e6ecab34d77189b01dbd67ca7ed3dab9fa001ee07b96cec0530e37880d", "T3T1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "df53f2f699242ef8e21a07b93b5248953dbbf5ed0afac50f69edcf256d79e31e", @@ -30486,24 +30486,24 @@ "T3T1_es_test_msg_applysettings.py::test_set_brightness_negative": "41b9c9e85d64891dcfd03d675df77c533f035a2d191b161144d00afab69a589d", "T3T1_es_test_msg_applysettings.py::test_set_label[empty]": "bd55146875c3a9151ce100fe91f88000f9f9e91c642d1116f0fe4a171ea3bb65", "T3T1_es_test_msg_applysettings.py::test_set_label[max_len]": "c744dd82650c5b9f06c055c1e81b992870385b7308f6ed9f7d2f691bd3a7fd53", -"T3T1_es_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "2c7d1bc98fddefbbf5fd753c3cd6bce0ce4b917f355139002e8b456dff5ed757", -"T3T1_es_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "2c7d1bc98fddefbbf5fd753c3cd6bce0ce4b917f355139002e8b456dff5ed757", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "ee24da049dfa95a05699e65e25329b24212cd4a5a1d3faeafc28cdc66ebc9c1f", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "ee24da049dfa95a05699e65e25329b24212cd4a5a1d3faeafc28cdc66ebc9c1f", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "b3d51c91ff17be2b154469875fb8bddbdef47d1555b39a8703798df3c582e36b", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "b3d51c91ff17be2b154469875fb8bddbdef47d1555b39a8703798df3c582e36b", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "e489d686ec3b40c61d4c71fcabebb3861156e7fc7ccd53721462f7120559f4f0", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "e489d686ec3b40c61d4c71fcabebb3861156e7fc7ccd53721462f7120559f4f0", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "9047d392f081163f26ce29ce06986f62deff570a72825b48051d7915c546ec9e", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "9047d392f081163f26ce29ce06986f62deff570a72825b48051d7915c546ec9e", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "b906cb338afdc9d8d883176b446642d6a0b2b13294f63ad19c3361d3b17ff6c3", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "b906cb338afdc9d8d883176b446642d6a0b2b13294f63ad19c3361d3b17ff6c3", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "e25438878e9c7b5f3471f85cf2d720b2a8e41897f9aece042fc058dc42f0e483", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "e25438878e9c7b5f3471f85cf2d720b2a8e41897f9aece042fc058dc42f0e483", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "8172990183e120f040a27156608aca2337feb27048a122b9d83efe512827b8bd", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "8172990183e120f040a27156608aca2337feb27048a122b9d83efe512827b8bd", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "ed0cf517d707e1e9c737b57dbd9fe4e7b97cc7e3ac4e1d999aa3cd5ea17a6965", -"T3T1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "ed0cf517d707e1e9c737b57dbd9fe4e7b97cc7e3ac4e1d999aa3cd5ea17a6965", +"T3T1_es_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "a3d9782e0ef8c423d41bb13562907144760caaff89fefba577521a195b31bde6", +"T3T1_es_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "a3d9782e0ef8c423d41bb13562907144760caaff89fefba577521a195b31bde6", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "8ab30c8bb848da4ec5b1fedd19626e0da195915ab748b3a97700321e0ffe3cf1", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "8ab30c8bb848da4ec5b1fedd19626e0da195915ab748b3a97700321e0ffe3cf1", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "a240ac368ff24248e2e77bab743fa778438a5c323f85356998bb81ba594ea506", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "a240ac368ff24248e2e77bab743fa778438a5c323f85356998bb81ba594ea506", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "e7f487876198504a0716b60c98934226e8ae44f3ff172d29b8c6200c732c6b49", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "e7f487876198504a0716b60c98934226e8ae44f3ff172d29b8c6200c732c6b49", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "20b45f04851851e9a5e751d103f7eab4bbe5e8647adc62a0e517a14c17936c9b", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "20b45f04851851e9a5e751d103f7eab4bbe5e8647adc62a0e517a14c17936c9b", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "e4192dae4a7fcb49200d527097f83f845bd020ace98cfba01ea50d9412b22c1a", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "e4192dae4a7fcb49200d527097f83f845bd020ace98cfba01ea50d9412b22c1a", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "13444833aab63809135bf74e2c4754ac085d633ddab38e7416503b6342d32825", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "13444833aab63809135bf74e2c4754ac085d633ddab38e7416503b6342d32825", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "5816fa3a34fa580bfeafd1c10bcda4f846fa3b21a6ee33e279ad5983151dc402", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "5816fa3a34fa580bfeafd1c10bcda4f846fa3b21a6ee33e279ad5983151dc402", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "a5ed761c8806292c14aae7adee8167acf83f2beaf905520aeef551cba4ba31bd", +"T3T1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "a5ed761c8806292c14aae7adee8167acf83f2beaf905520aeef551cba4ba31bd", "T3T1_es_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "8f31fe537535e46f2d480c427702dd6993c945723baf193d107e4d67467089ea", "T3T1_es_test_msg_backup_device.py::test_no_backup_fails[Display]": "f55fb0c130872f66c54ee0c2ab5e2ad956e99b80025397dd6f4dadb0c75aca35", "T3T1_es_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "4b109f227dd3f8ef877a6df61a44be30701270415c2af2882475dd4d280d4f29", @@ -30520,9 +30520,9 @@ "T3T1_es_test_msg_changepin_t2.py::test_set_failed": "1f9867fdcc785617d04852d699d2a969bd4a52684d636ba2de0208a3a38dc810", "T3T1_es_test_msg_changepin_t2.py::test_set_pin": "89fa5b4512d5b951cb62186689cf5ccdcc4b985ac73d2d0a07b9d9257a3f9ffc", "T3T1_es_test_msg_delayed_ack.py::test_abort": "c550cc0b7312fe1e228db69155afe444bda182513222753b81ee1a347c1a2906", -"T3T1_es_test_msg_delayed_ack.py::test_backup_no_acks": "da689993586083b69c9140f172e8c0b1a22e98231ceb46c9d5e00e33647480ba", +"T3T1_es_test_msg_delayed_ack.py::test_backup_no_acks": "6c387f1ed882b2aaf9684d234e85b29eac460ab959e605f657b239bc843d4c13", "T3T1_es_test_msg_delayed_ack.py::test_delayed_ack": "c550cc0b7312fe1e228db69155afe444bda182513222753b81ee1a347c1a2906", -"T3T1_es_test_msg_delayed_ack.py::test_setup_no_acks": "5052f45237fcc5454324fed6a318f35f5b968f7ad7432b708eadd300a0d3edd2", +"T3T1_es_test_msg_delayed_ack.py::test_setup_no_acks": "5f3b54fa2a51630b9dd3b71a0334fb65acf5e99aa725f61bce1cfec05440feb4", "T3T1_es_test_msg_loaddevice.py::test_load_device_1": "903a8c8fa9cebdf4f562562e3c6b282ad5e96a3793904d53741db44cd5abeb1a", "T3T1_es_test_msg_loaddevice.py::test_load_device_2": "352f2ee22d8d3564687967d2b8cb3d1d242a0d2425e06e78941a2dd3453721aa", "T3T1_es_test_msg_loaddevice.py::test_load_device_slip39_advanced": "903a8c8fa9cebdf4f562562e3c6b282ad5e96a3793904d53741db44cd5abeb1a", @@ -30561,10 +30561,10 @@ "T3T1_es_test_protection_levels.py::test_unlocked": "217fdc50761ac4c0f313f4bc233016b4d3e5592361176811de242183b5dc2cbb", "T3T1_es_test_protection_levels.py::test_verify_message_t2": "9cadbe0a00bd5f3af4b8770853b358b77707eaf34a32015b66a7930035ca44c6", "T3T1_es_test_protection_levels.py::test_wipe_device": "2331ea6eb31f59f3b7c8f53d41f275a3cf6ccf13234c925c8b7559b9265d6218", -"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "ac8193ffa8d5b96500167c891ab9b1184e17767592c6c50af4d153258684eaa7", -"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "ea1ef710468e929f627bff834333d5e4968ee920ec78f9e438e237a55d1d9475", -"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "ea1ef710468e929f627bff834333d5e4968ee920ec78f9e438e237a55d1d9475", -"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "d090b30ddc5f1930eea9c57502137a18f5b60cfff1cc76d8c3480fb45b143633", +"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "13c9c3480e01b02604d14c18b86276a9a0d48c9c1729766abd5b3a0358ddbfc8", +"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "ffd2e5d4f96cdf19ab63c707ff6a103efc26964e7bee9e541457437ec78c0109", +"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "ffd2e5d4f96cdf19ab63c707ff6a103efc26964e7bee9e541457437ec78c0109", +"T3T1_es_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "61ce2b9b111af118f02a9b1dd7d2292e1c0f4f02878c9945119d99971c003231", "T3T1_es_test_sdcard.py::test_sd_format": "275e533b5f4d04b30162e19c319d79ec974a17977518e3a99add1547cda1a518", "T3T1_es_test_sdcard.py::test_sd_no_format": "a2dcce6910f79e146cdd8cac69dbcf4b661fff74b50c6d80abbcd0c4b0d52b1d", "T3T1_es_test_sdcard.py::test_sd_protect_lock[auto_lock]": "b50b2404d8e8d1d25ff2911f25460a57cc664b98aaf55a66ece0055555813b14", @@ -31981,34 +31981,34 @@ "T3T1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "d56b3d54623d24c1aaa879ac5192fc43b25dfaaf79e738604adfb528441bab3f", "T3T1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "01e821be719d8f8448fde901c79ad8bc668f70e8b04b0c475cd98c852d7aaf0e", "T3T1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "141b9c3d5f9aaf86106f33dc9b85757c435802c5c55dab3d29c014c6479e26d8", -"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "3c25a385100077cfeb0b9ff7744080b22f76f34e3427514655af32f4b07d4ad5", -"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "9961df10337186ed0c2a5a04880cb1e9da2fe7e5bb874d29553625b09d19348c", -"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "f596b0aaf3c8e8306ed21d0aca75cc33fe02eddafdae4cc6cd8efcadaf8fe0dd", -"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "f0ffcc8be2b0763bad12355d6bf036dc6c79a2dafaf6ca73b100dead1870fa1a", -"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "2bac4d3988da2f6b01cdcba183ddb2d474977acf959a061087d21bb867fe9cb6", -"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "306d5348ead47199ddec69fbf724a8d92265bcce2f35ce3a8b651bfcef76eb7a", +"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "ab635daf7b4e4b85d18dc525678aa0c48e2e3cc3a47ab9409286a223f15e1a10", +"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "4a7be372532a4f84785929b25e375268e7612c768800bd305db0bf2b14225d88", +"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "5e2a53cf5f9121ca8ccaee6bfbeb620369aeeb1a8a067417a57780f75b88bedb", +"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "be2b9470c3bdf68a2ddbef5e4361968f5dde01d7d09c04d9d6bf254fba29c5eb", +"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "241fbeffbe604aaaa495652aa6ad7304538cbb7f9baab196ec217f2cce3edcff", +"T3T1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "62e74ce4fa8a1852b959299cf9915a63dafdabba6c01a01ff69513bb7faa4c92", "T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "116c64aa168d12181b7a5317677ddf135d739fdac22d38ff08571dc3301c2f47", "T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "15ca8f2fabfb1ebb2329062a6d306e4b5ca978c001f3a75dc4f34efd4080ee4f", "T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "8da2e6378395b5302ee49776eac9b1095ae19d0d9aeecc7f53972145b980d7a2", "T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "15ca8f2fabfb1ebb2329062a6d306e4b5ca978c001f3a75dc4f34efd4080ee4f", -"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "5dcaf3e10ef666cd7f6f0573baea52c67f4037def4bf54e94007ae1ff1434321", -"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "5dcaf3e10ef666cd7f6f0573baea52c67f4037def4bf54e94007ae1ff1434321", -"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "10386ef19dfb060c896938074c16f77a4459c4c81dc99c0180f19f8de47dd7a9", -"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "10386ef19dfb060c896938074c16f77a4459c4c81dc99c0180f19f8de47dd7a9", -"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "c865897a561892fb4bf7adc9a9eb958d7523982f5d1dc8e3c5284ee4b6f23d97", -"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "f79b9de503707f27012758208cdaeeeab3016df17249d1eaf83b8f61ef2231fa", -"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "2ec88e2a42ae4f986681683c2ae2eaebd6ce71dc111b6e580541cb52b9df4fb6", -"T3T1_fr_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "73eb42a35957f924b1f66f7ad85a504a06ba5d858f6b711a5417313496c4881a", -"T3T1_fr_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "8864fc33053251b7214b100da685607158422f5d1f9ae98a88c5c1013e18b32e", -"T3T1_fr_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "08c5d7008eb06033c16048e2767fc2bf8ee71f916e565ef5965e00a84e405924", -"T3T1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "8b25129338b88d464943bb1bc5b713f07c417b7a5a43846a3f21609db958119e", -"T3T1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "8b25129338b88d464943bb1bc5b713f07c417b7a5a43846a3f21609db958119e", -"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "ec0d8722f6930f83bad56f195eca81d0bb0e65014d2d88a31960059d520b2e3e", -"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "ec0d8722f6930f83bad56f195eca81d0bb0e65014d2d88a31960059d520b2e3e", -"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "9d83a670a7901311f80ddc89faeea7b41d7d37663a3b79e8e2e025b99cd19ca2", -"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "9d83a670a7901311f80ddc89faeea7b41d7d37663a3b79e8e2e025b99cd19ca2", -"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "ad37bcf8b11cf5e2dd68f6b49f50b928a1457085f988427781433369ca6c952d", -"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "ad37bcf8b11cf5e2dd68f6b49f50b928a1457085f988427781433369ca6c952d", +"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "84c09d65d578ec4ec66267f0041cb8eb01c1e118985a6c0ca1d905e5568c9c9d", +"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "84c09d65d578ec4ec66267f0041cb8eb01c1e118985a6c0ca1d905e5568c9c9d", +"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "c48cd612d42481ddd79193ee02a8227f00fb4c87f20abdc72ff03b0d6dd971cd", +"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "c48cd612d42481ddd79193ee02a8227f00fb4c87f20abdc72ff03b0d6dd971cd", +"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "14063dccc1df9a2692e3eb492afa82b433e70015d51a1cbb5f8e2a0370ce3eb0", +"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "4e541c2faf4fd08e6b8b0f5856e47f26cda2992644178613a9c2625c4e721fa2", +"T3T1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "a880575689b5ec54b90f82ada8981f9cedb3840e38555006878efbd8a35f841c", +"T3T1_fr_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "6e0c9ed2aec6ff22c3e8e1f13a88b2d9162ae446f3e3bc001b1afb51dd27619c", +"T3T1_fr_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "8a6b665a435beab3a1c0638c76c70f72c5d3ba9c362bfbe74ab87c498b78dce0", +"T3T1_fr_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "637018d16226ac4c52c89161694fb0ece88d0f9c35052480d152c555d9864567", +"T3T1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "b46d6c913090ab9549e3e3cd58a679e87195307d7207ccf71cd3bef40b4e0198", +"T3T1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "b46d6c913090ab9549e3e3cd58a679e87195307d7207ccf71cd3bef40b4e0198", +"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "4b89652ca0da5d0dfbbbf76fdac9df03ddb5f8124185097d9aacefc8a1d0f788", +"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "4b89652ca0da5d0dfbbbf76fdac9df03ddb5f8124185097d9aacefc8a1d0f788", +"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "194d534f557419b3c81bb97e1c734b5a951f7cf11fe801b73b9569c9310a41d9", +"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "194d534f557419b3c81bb97e1c734b5a951f7cf11fe801b73b9569c9310a41d9", +"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "c9d8e149ffb4921cfbdab31c1e61e135b66aee8e21863c1853d335d4f631fc0e", +"T3T1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "c9d8e149ffb4921cfbdab31c1e61e135b66aee8e21863c1853d335d4f631fc0e", "T3T1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "67a50f9d9a08d42bd2fbf882f827213999112ee669cb042f454742f8f51265a8", "T3T1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "513f441aef57262caf9a771c4c4fa4898feb3f748b02cef8286c96ccc0919123", "T3T1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "ba02327b6d77566fca8e331560692e8b3ca86cf6131dcd9d6cfb7ffc431c4ef5", @@ -32290,24 +32290,24 @@ "T3T1_fr_test_msg_applysettings.py::test_set_brightness_negative": "116c64aa168d12181b7a5317677ddf135d739fdac22d38ff08571dc3301c2f47", "T3T1_fr_test_msg_applysettings.py::test_set_label[empty]": "0dc213e6853fccb5ac9232c189bf734d9011f7e648be1eef97779604fae104f5", "T3T1_fr_test_msg_applysettings.py::test_set_label[max_len]": "535a0b910267cceaad20c5b80ddde90f2ab20217afad06848a024c03e5c0017b", -"T3T1_fr_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "ad9ae6ec7665d9a4a79f9966b7a161a011a86520552d93b33fc22fbfd5f8ca6b", -"T3T1_fr_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "ad9ae6ec7665d9a4a79f9966b7a161a011a86520552d93b33fc22fbfd5f8ca6b", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "9a7b686e62b36d8973f7b1737cd81a58ba4dae79948de75c01606a8907c1d734", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "9a7b686e62b36d8973f7b1737cd81a58ba4dae79948de75c01606a8907c1d734", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "25354f64dec8831911161701d24b932492e3f8d058cec855626c172b9fa955b1", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "25354f64dec8831911161701d24b932492e3f8d058cec855626c172b9fa955b1", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "c3509653556318da27f450e4e28f7d15ed0c6634b5b19c0d5295d30c8daffa4f", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "c3509653556318da27f450e4e28f7d15ed0c6634b5b19c0d5295d30c8daffa4f", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "51896410703f53d9c7a62e0a350f84cfa22bd4fba223e7370b3f2ce70201d757", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "51896410703f53d9c7a62e0a350f84cfa22bd4fba223e7370b3f2ce70201d757", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "6eac2955efdcee796f5e803c5696bcdeb461c11f849db9ebee59ded96db331cb", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "6eac2955efdcee796f5e803c5696bcdeb461c11f849db9ebee59ded96db331cb", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "7af4bab8ad220aba689c3182bb7fe9a944c0c37cbfcd31558c02f47248545874", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "7af4bab8ad220aba689c3182bb7fe9a944c0c37cbfcd31558c02f47248545874", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "ec306fb0546265f851576eb53e0b6a0962e410e48fc6e5351b17cd64eee55384", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "ec306fb0546265f851576eb53e0b6a0962e410e48fc6e5351b17cd64eee55384", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "aef31de665c2816eabedd0b587a02fd06f1068e438cf06d7848ad61374fd1521", -"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "aef31de665c2816eabedd0b587a02fd06f1068e438cf06d7848ad61374fd1521", +"T3T1_fr_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "a6df968e229d174fccd877858410d714e0e0dfd692577380a13e6488beed0180", +"T3T1_fr_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "a6df968e229d174fccd877858410d714e0e0dfd692577380a13e6488beed0180", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "330a40c781541f92c328c1f025deedb0e7c999a6bb48a6b23a187208e8e4f24a", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "330a40c781541f92c328c1f025deedb0e7c999a6bb48a6b23a187208e8e4f24a", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "85fbb5f3e44900bb45cf6ff020e507625b6825ebd5c5b3efec8f4ce99071eacd", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "85fbb5f3e44900bb45cf6ff020e507625b6825ebd5c5b3efec8f4ce99071eacd", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "99a9c53638cd531876fe875d39dbd94ecd58932a4a40a7bdebb528a7e9031e96", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "99a9c53638cd531876fe875d39dbd94ecd58932a4a40a7bdebb528a7e9031e96", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "41ec6712518bc8bb2837293d2fc26f93911091c36c30b59fa4cab0b13f01fb14", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "41ec6712518bc8bb2837293d2fc26f93911091c36c30b59fa4cab0b13f01fb14", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "8b84566fa7877c0ec5aaefc645bc397cdafcdb0360c2779c2e7f9b5401ba2254", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "8b84566fa7877c0ec5aaefc645bc397cdafcdb0360c2779c2e7f9b5401ba2254", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "fe8c25ae931f9de307082459e65b2c224412e4c5411cd8464f2c293cea06aa53", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "fe8c25ae931f9de307082459e65b2c224412e4c5411cd8464f2c293cea06aa53", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "2831169eae62ae10e6587cdfba00b36fbcd8c7eb0e95f0efbe55c4c8d01746f6", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "2831169eae62ae10e6587cdfba00b36fbcd8c7eb0e95f0efbe55c4c8d01746f6", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "66ce2a12d6a68759dfb75f75d49e37abc890dda8c3f23dd412dc991365da9cf9", +"T3T1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "66ce2a12d6a68759dfb75f75d49e37abc890dda8c3f23dd412dc991365da9cf9", "T3T1_fr_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "c5baac120c08fa77e07e84125f59005ee1d889a9ced072cd2776bab814e8be0b", "T3T1_fr_test_msg_backup_device.py::test_no_backup_fails[Display]": "c1bb02c3387591aae6a716b626804eb0387b30f373a28fd4778ace249e292461", "T3T1_fr_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "4a26acddc4401ade5637e7b46a02fd3df18b4a9e69d3f4d360b1481671717bdc", @@ -32324,9 +32324,9 @@ "T3T1_fr_test_msg_changepin_t2.py::test_set_failed": "23c181291943c3ac0fa14314b5fd9f0ed127abab3010ddd0647b822d620f5bd9", "T3T1_fr_test_msg_changepin_t2.py::test_set_pin": "113694b9bc40f85d627548a33d6f9fee8007eb2f801ccbc0ca2dbec21f754771", "T3T1_fr_test_msg_delayed_ack.py::test_abort": "5b12d2e7c4e22f2b9f47e62b5283e37d258bbc10da77177acf8460517607357d", -"T3T1_fr_test_msg_delayed_ack.py::test_backup_no_acks": "8b06d06a97d7efba0d088460f17ed33a724eac5d5b0cebb70649e0a4cc9ab723", +"T3T1_fr_test_msg_delayed_ack.py::test_backup_no_acks": "9afc02895f89d82063d3d8c7ee62b9d1191388ab218b45792ab4a83f9b106b04", "T3T1_fr_test_msg_delayed_ack.py::test_delayed_ack": "5b12d2e7c4e22f2b9f47e62b5283e37d258bbc10da77177acf8460517607357d", -"T3T1_fr_test_msg_delayed_ack.py::test_setup_no_acks": "0b5633058b2991a944917d136cf814ca1f9a72a893524d3dbd727d8642951669", +"T3T1_fr_test_msg_delayed_ack.py::test_setup_no_acks": "11f80de188ce752bed835ebbb73a4d12e52aefa83b818cbba20c166b5ac78fdc", "T3T1_fr_test_msg_loaddevice.py::test_load_device_1": "f3ae4e0f370f44911586a9414c0ba33d592eac32c00aa5895cf05af519e8c9c8", "T3T1_fr_test_msg_loaddevice.py::test_load_device_2": "efe2d23443acedb1ce6217feb1995cbc6aad927c00b8b510cfcc3d689a9d91e1", "T3T1_fr_test_msg_loaddevice.py::test_load_device_slip39_advanced": "f3ae4e0f370f44911586a9414c0ba33d592eac32c00aa5895cf05af519e8c9c8", @@ -32365,10 +32365,10 @@ "T3T1_fr_test_protection_levels.py::test_unlocked": "85e08a4f21b62a9bda50d8d81a9531dd96092f471fb3ff004157e027f4cb0078", "T3T1_fr_test_protection_levels.py::test_verify_message_t2": "b0ee1914fc3a62ab04339d30d70f54f4c35cc93ea14865d918e6daf12cd43a50", "T3T1_fr_test_protection_levels.py::test_wipe_device": "22cb0e4820ce454795e445cf899ff6aa5b7f41d922b6eb1069f72c0ffa7ca5f1", -"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "38b9ef8436362eb19d3e1e3c6a202e254510cb3bc6ff9cc66ccdee0867a080fe", -"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "8ddb4998fa284243463ad24f3235df6552cbb31f8e85aecba519e71864463aa4", -"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "8ddb4998fa284243463ad24f3235df6552cbb31f8e85aecba519e71864463aa4", -"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "4f8590de1b88cafdd8fb5b4d7368ba69c3da06ba11009de83fad8dffb9744c35", +"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "334dcb3683560fbfb38d6a07e67c1ba4ca5d5a1ad7a544b074a265466a8705d0", +"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "bb15ad302e4138d209a2e86f499c59a52f3c1d999dd5813cb852f1cdbcb2023a", +"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "bb15ad302e4138d209a2e86f499c59a52f3c1d999dd5813cb852f1cdbcb2023a", +"T3T1_fr_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "a2f41660926753aebf3b795da9bb287228fe1cd1079f101dd4d8d3f75ae9d0ca", "T3T1_fr_test_sdcard.py::test_sd_format": "cdcb7a7a03f480fba795b2304eb7ae1d826bcdda3e8f79c1aa4519a67ca6b009", "T3T1_fr_test_sdcard.py::test_sd_no_format": "6ae3bfd66bf3f54137f12adc6006212df440368a1b8df9c667dad814b449a7e5", "T3T1_fr_test_sdcard.py::test_sd_protect_lock[auto_lock]": "7c702ba7c12de4936a6cda26cf07f8b49c07151f37dc03eb61d4d2b44bbe2a9c", @@ -33785,34 +33785,34 @@ "T3T1_pt_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "977a52540cfbbec3a90c3d834f84e5f1842e29578c9eccc06a5c30ea4465c962", "T3T1_pt_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "9fe0964f3cc3a3d4086b073627db5cbbf6f26f569d697c101dd4e863c762037f", "T3T1_pt_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "0b97f557aece5e7e0b15eff1bb40adabea5a10b3d111fb548351f82ba8c23a03", -"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "3cc0e7ddcb048448254f01739c4d5dfd27ac1f5166fc4ff8db0cbebdc185a5e5", -"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "eb3f0d01c704d751ada386fd95077753926328a815735f8059323b9c90a4d7ff", -"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "f613b9fbd451c7b2fac3a2a6ea3244ec122d635711ae5d5b161486a88993efee", -"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "caccc2b0b739e98c4997265af6503afa096a92d69286e38dbde92cd5855d71de", -"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "41ce2cfa2670e629ddebf979f3d01f3539f200d1caebfe9ddaa09e16bf9acc23", -"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "de42fa6b4e7a3018891fbc35c223df73623404972858fad3978ffcb06c64d1df", +"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "d648774fe32bbfb1642d2740f1ccafc8d869baaf1bd948ee03be172a704f5a3a", +"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "abd1993a56a53431fb487ac2e41ef4ea6913093faca402eb3f7fecf411c54a17", +"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "03f17c9b2be9c964d7b4057864dc8081ad6c9a0a9b2d7ec01d624da2153b478a", +"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "f4a86b101bf627bed4880f2d7dff4bf056c402575a8dae6f0df1e21e5eb4fb87", +"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "0f9fb894c7d7dac622d557f5f982013b0c45dd3a118131089f0c166731049eb3", +"T3T1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "de507ffd534e293c8498b9fb93bab834bb0471d8fc4b7d19142699244577e707", "T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "14256cd1b801d1b67a37de1198d61a80d342f39e5c5d6fa991ec7fb526d683be", "T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "9440046e733005fb8e749b0f151c53fb2fdcaafeb841fd79b014bf1b95fb6cf3", "T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "5360c750125217b9c534aed36cbff677dcbd10dbe7b7abe46394b7a9b02ddfda", "T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "9440046e733005fb8e749b0f151c53fb2fdcaafeb841fd79b014bf1b95fb6cf3", -"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "3481aec530d66087565b2ec36772ac90d84f43fd1446dd33b59491d61804743d", -"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "3481aec530d66087565b2ec36772ac90d84f43fd1446dd33b59491d61804743d", -"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "f954cfe266c3769dff1600993c85c9337f9cd9b4580dab690d829b0347ed9547", -"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "f954cfe266c3769dff1600993c85c9337f9cd9b4580dab690d829b0347ed9547", -"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "9eccc925fc0ebceeb50d2cf9f67eb3416d87c52d7893bc9f71722fdbcb622b6d", -"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "c22adac70b0aa6224374f7cf6c3d1d0ed9606ee4a3164a6d9cc90d940eb28f77", -"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "e3a47bdd0052d69853f15b4a8468b5a42e74d8bbc8d82bea239f2cf7feaaddf1", -"T3T1_pt_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "4f42b261ee12b0f358b9f591a0b2ace62f7b7ebfd38a98af6a03af5190eb60b1", -"T3T1_pt_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "f8ac1dc0a0028363facc1df660ad8e4b8c342c324f1033173416896993540291", -"T3T1_pt_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "b5dc82ce0034089daba5b97260376b17b1be06208a4b2bbfafb96d45388e3dbb", -"T3T1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "59eaf8c835a78bbd8c2055e00b04a726f55afb0dc5ef512c69932ae6515cd402", -"T3T1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "59eaf8c835a78bbd8c2055e00b04a726f55afb0dc5ef512c69932ae6515cd402", -"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "2a270c7351dde4189c50b64f1ebbd3c9010675565dfea2560c0fb53da795aa18", -"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "2a270c7351dde4189c50b64f1ebbd3c9010675565dfea2560c0fb53da795aa18", -"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "8f24e66330771565e3c35e4f043a023d7a7e846edbbdac446f54eb6565a5881f", -"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "8f24e66330771565e3c35e4f043a023d7a7e846edbbdac446f54eb6565a5881f", -"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "d8496f00a4f8d9dc1f7c16dd5798d826ac3696b7c06f7d5d676ee814863e5654", -"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "d8496f00a4f8d9dc1f7c16dd5798d826ac3696b7c06f7d5d676ee814863e5654", +"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "02ca12759799790b2b586ea27d78ffd521a7d7e35c1f6d0f51cad2158882f5a2", +"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "02ca12759799790b2b586ea27d78ffd521a7d7e35c1f6d0f51cad2158882f5a2", +"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "51b8e8c01f86a132fe705d2c0518b91c6ea6006cd267ee0851b3631567234a50", +"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "51b8e8c01f86a132fe705d2c0518b91c6ea6006cd267ee0851b3631567234a50", +"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "6a68a5c201daddf8fbf7271fdba68f3459f7bcfb5040d9a926ea1aa3a25b79e9", +"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "e35addfebf73ab96bf0040ec3feecade7947d5d525c358d5a681c65e137639e7", +"T3T1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "b4199acc120296849452cd1e5fe1d980a0197a13eac107314c921de299c86c6b", +"T3T1_pt_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "fe8234d0a839717271b5ba5e39a33bcdec909e23b688bdc4fc4cd5e469410325", +"T3T1_pt_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "2b8d69c07168641ae5b57499355161430cb971579a866863a740023e6f059119", +"T3T1_pt_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "666c31bc39d3b547e35d87c45ad39ce2daf64b2b8b3e37376a38e3e7ebb2bcd1", +"T3T1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "41e2dd19610f52060118b48fce0260d89b5c537129f1ea6c5b1aca02adf49e7c", +"T3T1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "41e2dd19610f52060118b48fce0260d89b5c537129f1ea6c5b1aca02adf49e7c", +"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "4441b985ebfff0d2b1bb2586823a0f7f2a1a399232417ac4efd680f0e2acd82e", +"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "4441b985ebfff0d2b1bb2586823a0f7f2a1a399232417ac4efd680f0e2acd82e", +"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "1f5ec044e2c5ca85031b7b6cd29e06742939410d7f0efc2ead741958bfb87768", +"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "1f5ec044e2c5ca85031b7b6cd29e06742939410d7f0efc2ead741958bfb87768", +"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "a8575b067b220cb2d34374c7f0c516cf1375fc931a172f9a95fe7121522452e0", +"T3T1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "a8575b067b220cb2d34374c7f0c516cf1375fc931a172f9a95fe7121522452e0", "T3T1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "7942d2a0ace4d62d9f44694113c0d2e81402f5eaf3a92ac8397bad34e7010b08", "T3T1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "36e8dfc05317b06e0d15376ec53556a0d06f29ed4a24c3676adc774ea1b0215d", "T3T1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "923c9a9912215c861857aa01ad9a5422a3120eae29c33f576e050da5e8d17698", @@ -34094,24 +34094,24 @@ "T3T1_pt_test_msg_applysettings.py::test_set_brightness_negative": "14256cd1b801d1b67a37de1198d61a80d342f39e5c5d6fa991ec7fb526d683be", "T3T1_pt_test_msg_applysettings.py::test_set_label[empty]": "b9e24f39152500d7f5defa59483a6a55e0a31e3af7e9c4821e03b13ae573c18e", "T3T1_pt_test_msg_applysettings.py::test_set_label[max_len]": "3df2568bd3090959085d51bafac9091d0b9b5f5d25a0f3a9d28321132dd399a4", -"T3T1_pt_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "911796eda5c6990bbcc06c6efc8d2fcff985063a779b0dc468565d0be8ae439c", -"T3T1_pt_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "911796eda5c6990bbcc06c6efc8d2fcff985063a779b0dc468565d0be8ae439c", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "3204ea21d413254b485e1543d0c4bfe9d6f96ca9c2e65c2be5b13f96363ba985", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "3204ea21d413254b485e1543d0c4bfe9d6f96ca9c2e65c2be5b13f96363ba985", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "db40ac7a2c27c82a8cc8fae77e9bf8909a25da10617e783c8908e71101adccf3", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "db40ac7a2c27c82a8cc8fae77e9bf8909a25da10617e783c8908e71101adccf3", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "849edbb62c62d733f40f28ec9513769760f62f3364c0c1a76ebb388e6d88dc81", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "849edbb62c62d733f40f28ec9513769760f62f3364c0c1a76ebb388e6d88dc81", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "657dc4964e5e176a39400d1d30dbbf0e5646a8bdd4d4bc850013800dc78b1ed6", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "657dc4964e5e176a39400d1d30dbbf0e5646a8bdd4d4bc850013800dc78b1ed6", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "96e29dfb405df7edfe650f79e88cbad4383958a65d6b7bfbbb52eef9224c5532", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "96e29dfb405df7edfe650f79e88cbad4383958a65d6b7bfbbb52eef9224c5532", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "5e8f4822cbfe18229da51804b7fb0c6a5d260e5e837223075e132c486a4e5525", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "5e8f4822cbfe18229da51804b7fb0c6a5d260e5e837223075e132c486a4e5525", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "c246ddb4dadcb40c043634c67fb57a2c0d64b62d9c25393463e3d889d52c957b", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "c246ddb4dadcb40c043634c67fb57a2c0d64b62d9c25393463e3d889d52c957b", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "9c68451a1db35c807edac2fca59e78e7dec1cb94cd06b6746304651ff19945f9", -"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "9c68451a1db35c807edac2fca59e78e7dec1cb94cd06b6746304651ff19945f9", +"T3T1_pt_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "9ff4acda570ce60ef345edc00848d5d3c1c0671bdb49072ec9fa7ae5aee4072d", +"T3T1_pt_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "9ff4acda570ce60ef345edc00848d5d3c1c0671bdb49072ec9fa7ae5aee4072d", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "7ef096183f8ed59bc78573c7faa6b4c7a23ed12d74725ca152fd7b2e200d08cb", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "7ef096183f8ed59bc78573c7faa6b4c7a23ed12d74725ca152fd7b2e200d08cb", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "5d4e0e4923188ab3c744e399d3aa0cba322c574ea06e07ffe8be911175fde410", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "5d4e0e4923188ab3c744e399d3aa0cba322c574ea06e07ffe8be911175fde410", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "ffd5ceb647b4d6ec9c3e21a6c8e87e1433d771e7f0000ce36c9ba506a2393ecd", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "ffd5ceb647b4d6ec9c3e21a6c8e87e1433d771e7f0000ce36c9ba506a2393ecd", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "6f78adf4895f250233326647c0088b717c75bd0ae2431d0699157c844fe6c87f", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "6f78adf4895f250233326647c0088b717c75bd0ae2431d0699157c844fe6c87f", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "9bb8ae13ab778668eff05aeabe5e408f657a11739b12d074d8235acae3817114", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "9bb8ae13ab778668eff05aeabe5e408f657a11739b12d074d8235acae3817114", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "24f4d9a55a5b166ec7ca5f3618ef1b84a68e30ee8de3aa819b18355308f82d45", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "24f4d9a55a5b166ec7ca5f3618ef1b84a68e30ee8de3aa819b18355308f82d45", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "a8cfada9684b8aac85a98692e2a7d607e182a826a20a69e6f2a82c9a1172dddf", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "a8cfada9684b8aac85a98692e2a7d607e182a826a20a69e6f2a82c9a1172dddf", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "c6a0748327d6196edd95e5bf9879b58564c6414a48d10479e013193619f7f636", +"T3T1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "c6a0748327d6196edd95e5bf9879b58564c6414a48d10479e013193619f7f636", "T3T1_pt_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "d36bbc38d519dcf2ed59be6a3dd6a7bcd1c8ce93b59c43564023dbe0fa438c0a", "T3T1_pt_test_msg_backup_device.py::test_no_backup_fails[Display]": "6f53ccc99738549ec1371615ca113ebfdf87f68a0fb1a8b9d94b35cff8f1fdfd", "T3T1_pt_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "59db3d368b690f76cd282db597534219fc739cbee2c1cfe13fb0f1c8dd5bc705", @@ -34128,9 +34128,9 @@ "T3T1_pt_test_msg_changepin_t2.py::test_set_failed": "a61a5976db163edf04b15529e34e5410c7e6307c72a8ae585017d2a3cdeb503b", "T3T1_pt_test_msg_changepin_t2.py::test_set_pin": "41f71e64303a4f6f52b1f6bd2cb4b3b9ec2b1b48d79db652d49260a8c97aac05", "T3T1_pt_test_msg_delayed_ack.py::test_abort": "d471fa18f7b875cfff32127655b4e9af33b4f44f302930e0a993b8772d9bfcb2", -"T3T1_pt_test_msg_delayed_ack.py::test_backup_no_acks": "90661a6e46a2079d2750f5ed293defac2dac3e1b4b77579efb0812eb945b5817", +"T3T1_pt_test_msg_delayed_ack.py::test_backup_no_acks": "13f9dde9d1d4e2dbb182d2f6813e7cc8adf4069d343ea3b4ff6726fe497bd321", "T3T1_pt_test_msg_delayed_ack.py::test_delayed_ack": "d471fa18f7b875cfff32127655b4e9af33b4f44f302930e0a993b8772d9bfcb2", -"T3T1_pt_test_msg_delayed_ack.py::test_setup_no_acks": "d883ff2a67370435a1b198146d221e7130cc47225d47754be7c07bba4b2da91e", +"T3T1_pt_test_msg_delayed_ack.py::test_setup_no_acks": "4deb35234ebf60617d598b06b161c8f32738d1a468c353ed1808f56f76ac9cd1", "T3T1_pt_test_msg_loaddevice.py::test_load_device_1": "dbf40bef0e75d366e0d9735d56b48a62b5a17a5b849cb120ecf5ee806fa4fcd1", "T3T1_pt_test_msg_loaddevice.py::test_load_device_2": "7f945981f9bfe1d9540b046e1a1c50e8420fe91a8f1648c4b98d4bd9f376c546", "T3T1_pt_test_msg_loaddevice.py::test_load_device_slip39_advanced": "dbf40bef0e75d366e0d9735d56b48a62b5a17a5b849cb120ecf5ee806fa4fcd1", @@ -34169,10 +34169,10 @@ "T3T1_pt_test_protection_levels.py::test_unlocked": "68da8cdf8f682bf173b422ea2bd587c7df498654c3b7b74f3711ff8119636c6a", "T3T1_pt_test_protection_levels.py::test_verify_message_t2": "effd741af01efee0db5031a183f48a6d794a567d520bc89906e8be4503e53476", "T3T1_pt_test_protection_levels.py::test_wipe_device": "1a69299e6d37b98ee7963c45fd6ac04342dc7a80434e956508811f5efd19ab8f", -"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "83227ea67456f8c2ffd7c7162cbdcc2a2e2214d3585f7d6b569d9df737c87bb5", -"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "587f5fc34a96a446e73cfb8ed23a6a1af6120513796678dd99f1da4e4ae196b4", -"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "587f5fc34a96a446e73cfb8ed23a6a1af6120513796678dd99f1da4e4ae196b4", -"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "bcf3db828b015b432e384676248beede6a5795330a7bdf177d585b65f72e5346", +"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "ddf301e278b4d40d4a651977b22fdbdfdfcecf80c1f86e04442385aac8387ed1", +"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "546f329f943c4a0ea2d201e616f055d2cb52a4259704a8021703cc9bed10f0bb", +"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "546f329f943c4a0ea2d201e616f055d2cb52a4259704a8021703cc9bed10f0bb", +"T3T1_pt_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "310e8d81899e61e69af5bb9fc5a6ad7bf5c78327f40ed80e31bc3958ce1aae8b", "T3T1_pt_test_sdcard.py::test_sd_format": "937491bdd358f401f45d53eb4594e72a8c2e36fe2681bf3243289cd1929d2126", "T3T1_pt_test_sdcard.py::test_sd_no_format": "bd8ed58679176a0996aa426b5f289407f2dce9c499f6b56668f089e908259b24", "T3T1_pt_test_sdcard.py::test_sd_protect_lock[auto_lock]": "bff8437b904482e6ff7c6a2819f3170ff8effbc8ba837142a3110c06455a1dce", @@ -34341,9 +34341,9 @@ "T3W1_cs_test_autolock.py::test_dryrun_enter_word_slowly": "1084b7f5d0d6946a302a12472f31c5b6256fcb0d4a77895553b4e9424aee2586", "T3W1_cs_test_autolock.py::test_dryrun_locks_at_number_of_words": "a01a864a4a56ce4f3ccd70e713348ed0af3d54fb3e1569add829ae8791c3bf42", "T3W1_cs_test_autolock.py::test_dryrun_locks_at_word_entry": "790b1eee0c983c106f204cbfeec3292f11b23a0473cecfc16bab2e3fc57f7e39", -"T3W1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "ead4434a25e0d3f87f3ab3966475d4f87dd7cf166006b6dcff8756026e455fa8", -"T3W1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "5e5b8d5e7a051acba4193c3c35b2ae8334ba77b8c800219b4e4334ac0fe4327d", -"T3W1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "1f1e34b15ebe2a5db2f7a785a4b1b501605e4ccb39e088d3ff66e658a085b91c", +"T3W1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "077e5f908258b5d0128c936865f831906acd6a85d509ccf02d647952b4aaf2a6", +"T3W1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "825d66fd7b375fe680a49be2926030a42daf93c2997900294867c49ffa66a6f8", +"T3W1_cs_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "2f50230b0cf60b6b4814559a7b07fca033ead3a919cba07a34e1cc6879e9c54f", "T3W1_cs_test_passphrase_bde.py::test_cycle_through_last_character": "2ae35f198bd5cf29de2267251a4aab2cd370e63b5e42217836acd6ce6ba7ce41", "T3W1_cs_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "f57ec9035a6b710a5502483839b1eb4cfc3d0b044a31c9eb6a63191510d08eb6", "T3W1_cs_test_passphrase_bde.py::test_passphrase_delete": "f4e075e0bcd0acf389131056a2a99758e76ae0bdae209e2b61f1ed0219f11ba1", @@ -34381,13 +34381,13 @@ "T3W1_cs_test_recovery.py::test_recovery_slip39_basic": "a6c93ad5ff2179184119c3bcb3f403f4e04bc632fbcfe12027ff94a42f3109f5", "T3W1_cs_test_recovery.py::test_recovery_slip39_issue5306": "766b9b90a8445b3d6557dd53268ee7de0a434ccce708fd70cf51d8669d2be3b5", "T3W1_cs_test_recovery.py::test_recovery_slip39_reenter_second": "4309808443d56a90170a82937543e8b080f3a4e15726b59b1df9d4d3c3bb3c37", -"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_device": "98681e9b2ebd87c11f9fef143f4a28591db5d2db34d21849db2ba03d73b3d6af", -"T3W1_cs_test_reset_bip39.py::test_reset_bip39": "abf598151f446163b8372f058d70d6e571824e9a9fed2bad20eb9421d4b062fe", -"T3W1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "c4f6ba647c5a75a8e2ed3096e5eac6ca5cd6320b32cd96671b11d7fadb3ef37f", -"T3W1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "58eca9b3c4a4de5d6f92f421afab5c3743c5896a8e06ea141c84e437addbb1e9", -"T3W1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "d4c81a26e32bb812c148e943033c3388134b4d7847e30c72a8461ae7fce0d8cb", -"T3W1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "d35d013c367ebb7470a1d25d6a9709432c8000c8be2314ca53bf68f5a096178c", -"T3W1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "215b81a3848518fe35860cd53c4e8eb83ddcf1df71da049c5b6b9502492bd60a", +"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_device": "9c4b5a2297e12cf684088160e3094f4818b4a25674cd1c8524db4f6b0cce903d", +"T3W1_cs_test_reset_bip39.py::test_reset_bip39": "41e93d102e12cc4556c779952010c813794a7214220081b7873f8380ddee78ef", +"T3W1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "8fdb03c11ac315a73d1129df5f964ce12283d88c69e4756947ab02840b0330a7", +"T3W1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "ba5e210254d0eb37b09d2eb9593dd15e60fe71288133247bfbfa0a1fbd1f9ff9", +"T3W1_cs_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "da6cf0c5bdf62276cc65a8dc6f071725feb15ed9637b6cc850bfe9f6bc00dabe", +"T3W1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "e37eae0c92b0221f75e23ceacbaac9cde3546eb9a7a492a010fed1152d5586e0", +"T3W1_cs_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "83ebbdb375d0c0d0a561c0dc311cc5fb9e9ae704ccccdbcc0b797b9765c012d6", "T3W1_cs_test_tutorial_eckhart.py::test_tutorial_cancel_from_confirm_menu": "da9e22b6ec5d5eb03975a863be799edeeaa4170611a74191c298e9bae92e5256", "T3W1_cs_test_tutorial_eckhart.py::test_tutorial_cancel_from_main_menu": "8ed7a3cf89a37a1f8993ade3f5b867c266d8608dc0f42d965a1b1f9b6b99529e", "T3W1_cs_test_tutorial_eckhart.py::test_tutorial_full_completion": "3ba76b845c5de02609af054e5456afaf4bef100e5138e9f46418207bf9481a0b", @@ -34447,9 +34447,9 @@ "T3W1_de_test_autolock.py::test_dryrun_enter_word_slowly": "fb80399f6f100c899eb5611bd545d78c7103675913a2843cc20cfbf9836af94a", "T3W1_de_test_autolock.py::test_dryrun_locks_at_number_of_words": "29f8280a1394ccf0968d021f1a10bbb93136e9bc91a49262da7c018e774543c2", "T3W1_de_test_autolock.py::test_dryrun_locks_at_word_entry": "eb63ff5fd20c1f0c5f6bc6878a34599fdae525f9a883620915a7f26b28824c24", -"T3W1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "3808fad6c5dfb2d557371dd03ff368fd6678b2a7b527de080c5eb5fdf74f16cc", -"T3W1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "db4c7228712b7ecccf25edea1903bc2443a3f498985a63a6e11f7174bcad8f27", -"T3W1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "7d518590db592be05473372eb1aa58e53fe6ec263d10b55ee0b2f0ffcd3a157e", +"T3W1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "e1174e38a775990f41d1dc1f3721c053d0c8f7c2a1610cd2ffef5becfe6dfff2", +"T3W1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "fd88add5a11e423f0ecf609fb49566fb6f0939cb9e85d1ab251a0f8f1fc128e1", +"T3W1_de_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "11759b33bcfcaf6faa61969e19ad553730fd695d5194841e56882e7fddd5061d", "T3W1_de_test_passphrase_bde.py::test_cycle_through_last_character": "5c42c6253579f3d1e553c5e0ca29b8f38fe2c6c3e281b2db3e2eb46f489dbe77", "T3W1_de_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "00b1a1966fae0539358d36a17d1c86f99e65bcd6ee2d76f7769a4fd741e86abc", "T3W1_de_test_passphrase_bde.py::test_passphrase_delete": "5776c8ebd31082ca8df293201f8fc7cbe584de0b72492bdfebc6bc9edfd8ea1f", @@ -34487,13 +34487,13 @@ "T3W1_de_test_recovery.py::test_recovery_slip39_basic": "fa4277c9645f3759873ded84df4839bb9825b1c4f55fd3383e6cadca82d5a935", "T3W1_de_test_recovery.py::test_recovery_slip39_issue5306": "792e109d17e19052cc5e4d508a70c8f249670f3d37e1b574aed4f5afcdaf5c25", "T3W1_de_test_recovery.py::test_recovery_slip39_reenter_second": "1eddb830f89aa3f8b1b587ace2f7d90621a9de81b8c7f130bbb5fa61a3eaf166", -"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_device": "6629190b3550237d9bccfe1aec204e04d0811b076c921fb821194bb1aa9bb966", -"T3W1_de_test_reset_bip39.py::test_reset_bip39": "b7e920f5aef1af6d25ec047c6c1878c5d6286cb704411cc81dfb18734fe7c3b7", -"T3W1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "2f1a1910c97295c9486328c63d3a1a32bc711920716d2f175f281f0d108e8da1", -"T3W1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "76f0cf35add58fefedccd7cc198e992751e357d18a68e680cc12ce6cc18cfb68", -"T3W1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "e330cb9c9b88385c0fb062a8509bd1f43da33eb8bb295e7066761764277890e3", -"T3W1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "d0686715d0d1d82b239c97836a6406fbd7ec9304e60760eb8f94283de8d21143", -"T3W1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "00c2fc9add19ca14dbefc671f0b6929b30ca90dc8eace9aee5c4978a0ee43bea", +"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_device": "cc683d6981431bd2be0ebc558ee9aa65ed5f972e27381e33b57dadc28dd9dbd1", +"T3W1_de_test_reset_bip39.py::test_reset_bip39": "e37aff1dbd1d7079a4cefd08ad940a674b01e3de186c6c25e263a36723fd7739", +"T3W1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "78035f7095fa2dd13d0cffebf1301507475eec79d6000e171cc2577a081d1e25", +"T3W1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "0e9338505028167ac3e01cbd264644a0df99a4bd79f4bffc0588297bf84a4104", +"T3W1_de_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "70bd4d7f9aaa80a302f4b010c8a29e6e3ecb67cdb5b5ca653f837bc33fc4cb5b", +"T3W1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "9ccac7ff3b2ffb1a7b41f8cd0d1e0d74173d1b5c6d45bdb9f80161a18368b9d4", +"T3W1_de_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "313a9d0befd5c2b465165ceec974270a9863c3dfc0a8b8881611263f3fa1cb22", "T3W1_de_test_tutorial_eckhart.py::test_tutorial_cancel_from_confirm_menu": "0d409fe07aa6418d4f9d7d860fdbd354066bf84219683c0fe574ece9e80fafce", "T3W1_de_test_tutorial_eckhart.py::test_tutorial_cancel_from_main_menu": "9739c0dc87eebd478d9ee117cc532e4ac7f941025c79092ec70915a7e8021561", "T3W1_de_test_tutorial_eckhart.py::test_tutorial_full_completion": "c2b7824f94dffe31869dac9af9997b2eb0b539b0ca070ec0ad79a7f8af77eebb", @@ -34553,9 +34553,9 @@ "T3W1_en_test_autolock.py::test_dryrun_enter_word_slowly": "a6af3598a11f4faded366d71edb9516b163f5d90d79ba9d3501c769851b6090b", "T3W1_en_test_autolock.py::test_dryrun_locks_at_number_of_words": "618929594f3754d87dbcc7b0a613e25eabb85c4cc718d4aaf42554e8d2c45c97", "T3W1_en_test_autolock.py::test_dryrun_locks_at_word_entry": "eb385fe53a78a226357fbc426e2e369a14dc4a60efe52c8fe77fd0160667fcad", -"T3W1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "f1a7aa7f1238cb7148db3be3f33de2133b8141c39cb910f62a2148106421c327", -"T3W1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "32c9ac0f08570c88cde99e28c44ea1cdca0105c5f038c25efadd37fe21f3929b", -"T3W1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "c682b22a1bfb345c5eb7911323e2d34326a1a4dc7070c1ba3916f636bd5d0c87", +"T3W1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "8e0b1b8c31c8737a58c26274a9c43e2186e81208429ab28747e00dfedcb88d74", +"T3W1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "c3dda114045cf49595f32122d798e4b2fc8e65147d4be0eeaf7de78fb5c3adfa", +"T3W1_en_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "f5dfc5510cba3e2319538168940e11b8ecf48f79d4f62dc026c39322232b4bf4", "T3W1_en_test_passphrase_bde.py::test_cycle_through_last_character": "549f5df01a778aa16ce89954174e9859c3ad17d1ca5b2ad6fd1dfd147b51459b", "T3W1_en_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "367501fb01bad68d4731d341169be7ecba72a5392c3f736400aa8671d72e90ce", "T3W1_en_test_passphrase_bde.py::test_passphrase_delete": "caba4c2ad317cf3c305165a318bb9d957bf4cbd3cd90035567885e542af85485", @@ -34593,13 +34593,13 @@ "T3W1_en_test_recovery.py::test_recovery_slip39_basic": "2fb68b5695b6a0f6a4ce0e1c439418be296818bcae6170e4902d34537ff09687", "T3W1_en_test_recovery.py::test_recovery_slip39_issue5306": "fae3303a452f339e980bccd0d3dd32d56b23adcc367beba2e0a2a5ebd37c5476", "T3W1_en_test_recovery.py::test_recovery_slip39_reenter_second": "5784d28ac5de004539ee5ad4c90c845f9dc517a3813531f9fef719c116588f98", -"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_device": "20d505240482b91b97d6e3aa72a05222641a3b7d8388686c4406dddde60d2a98", -"T3W1_en_test_reset_bip39.py::test_reset_bip39": "c2a074c40115ae1fd4be3ff38521887028d80c6aa755cee511ef51c2c9aa656c", -"T3W1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "d84a8fe8d494810ba71883fdf220eb3ddaf3d003afc3ac2efe5cb056963185fc", -"T3W1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "e30a475e36d64877210cde59f9f0b9b6ee04ce088ac4c78f1ce987aee576ac40", -"T3W1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "ac48a3610a874dd1de9aa9fb22d4bc41ffb8a2b98fb7924ee258bba0ee609d57", -"T3W1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "dc213a9a92970e39812f72877c8b1f265e6fc05831a51ea7d8d2b01c380c787a", -"T3W1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "838f78adf061c9422a8546037066519d831912d4a10e017f8a6c5f857b04ef68", +"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_device": "c519e1fdd484560840f9fd8299b06f2657d152f8e81b34df81266f1f5ff3c8f8", +"T3W1_en_test_reset_bip39.py::test_reset_bip39": "570c411d4d77b7f823ff0748f17a0fe0377c9756718137afebb4cfdf23fa083e", +"T3W1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "d9b0a579f75f55680d8e1ff1cdb1ecc98c4f07e7e613651e1b664ce9bd769f59", +"T3W1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "e0812f46c31fecf8f3162228bb0de3a7465a667b7085713cfbd872f99e497817", +"T3W1_en_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "d430f847c6c5afc0d8d7556d52316b5f8b727b390c8cbdb39c6b7d8ed4b93b19", +"T3W1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "401ce4c3afbc4437adcfa21f06386ce8b5dba6bd79a8604a8b878e39d8802ee8", +"T3W1_en_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "697d7f198fe158fec87758b96d2323b6c29bb3e7dd67d15f82919d9076285a6d", "T3W1_en_test_tutorial_eckhart.py::test_tutorial_cancel_from_confirm_menu": "2b59c30dbcf32ecce592e89e22d2f56d703c30b5fc0de34a016445cebf7e9db9", "T3W1_en_test_tutorial_eckhart.py::test_tutorial_cancel_from_main_menu": "ac0e8d064afd1c6a578e9efc39cfc4edce0c5dc3dcd890cdabdc3d361e43f701", "T3W1_en_test_tutorial_eckhart.py::test_tutorial_full_completion": "e19bc074dddd20706a80bb360865212eca5af4d0e11fdc1b8a772a48bf876365", @@ -34659,9 +34659,9 @@ "T3W1_es_test_autolock.py::test_dryrun_enter_word_slowly": "b68e38ce2933164c02408820361cfe41bc0c6042bbc3094911bf0175fae5326e", "T3W1_es_test_autolock.py::test_dryrun_locks_at_number_of_words": "d0350d24fb42c67db05d114c3d16d2c25c07822f5bc7eeaf3ade6509d2874d9b", "T3W1_es_test_autolock.py::test_dryrun_locks_at_word_entry": "9859a69d0def78484f69e9af0b26404a9b4df3c365025b364a43bed8f6d1dead", -"T3W1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "8c48d90b04e142295ed1464adf7ac849ca956f7c06300e1d3349f65e9d3fd895", -"T3W1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "57b8f7644812009ff399f9b34edc624470f5493338f5cec2df3cb90591a7747a", -"T3W1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "766b23e9fb65daef5684c492f2d641321932bd4af7e9c712162430a33b1f312d", +"T3W1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "e1bdde7783b5e48225a9d7ee0e3e57a93a55c8e1c4dfa5267483a8073b0ac3cf", +"T3W1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "29a9450737a64843810da81ad2d91a7931e58609be4a35d07312490f31df3ef0", +"T3W1_es_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "def32a43fa61f7adeb227a617d76d857de94ef313f40b2520327657c63dc0a60", "T3W1_es_test_passphrase_bde.py::test_cycle_through_last_character": "20217d07ca69b5c5e16711eaddc3e31ebd35efb203acf96c1b97ca692e4cfdf2", "T3W1_es_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "bbfce6bd4a4d4d0e018c9103f02da541d429c521ff9761708c34e4ac1bbb08f5", "T3W1_es_test_passphrase_bde.py::test_passphrase_delete": "c8f4249c1f8b50f1364fb3b595fe8f5c6809217d7331451bbd3ed29e3dbf6566", @@ -34699,13 +34699,13 @@ "T3W1_es_test_recovery.py::test_recovery_slip39_basic": "8aa9ffa80ee7c7e382a9b1b03a90abbe0e2f98c1a81ff2079b6c79d525e7ca00", "T3W1_es_test_recovery.py::test_recovery_slip39_issue5306": "d4f685a6b83c6b5619795a3870431b0e2f0e37a672da21c34c684ef3d2fb3c1d", "T3W1_es_test_recovery.py::test_recovery_slip39_reenter_second": "07270e697e5bea5d5e4f9ab2faa4b424a9a31fd2ebb30c2b0db7f4d1008ab449", -"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_device": "60ff454f75983f74a7867285c314d5413fe0439b473c85bcd72a371e59d64380", -"T3W1_es_test_reset_bip39.py::test_reset_bip39": "3b10978c9e0e620d82c0ac073726c0bb4c3a1f6cf720ef6ea3fb9517e5de050b", -"T3W1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "4f82be36e7114635322c3a06b7c268bca76474f07c4ff265fcf697ed7080a1ef", -"T3W1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "1653f10132ceef9ccf11f84a38f6091d804264c6371c4b6a27a63ef3f23a81c0", -"T3W1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "28f527f6412f8ebf203fdf5aaa95d789694ff237ecbc1b0b3bbfd77cc55dfa91", -"T3W1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "b40c2775ab5e2aa5eb5146d1e1aa2b5db5fc62e6227cce6283805d42f55fc605", -"T3W1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "32c009975b45e922937b73f4d3eb586e223d594891c8ac8211200db12f2db6b5", +"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_device": "e88f811ba46a547bc033c2c67c12d4132fb5af58265ec04b0cc15c610ddc7b3b", +"T3W1_es_test_reset_bip39.py::test_reset_bip39": "6fa0bbf690ed83a72733a591969bd6c12e9ef8e5ef4fb99410730f6d5105ab72", +"T3W1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "e908771462c09b77a61e2abbee679b0040e04d48c1669b8108bb31e576233484", +"T3W1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "951b42262519a5e0a94046460dd8624cde3b1e0cf4495efcb75ebf628e60814b", +"T3W1_es_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "552d0403381f4e1cd6ef11088c817b185fb9833be141a0f46bc0f68f1a2022f1", +"T3W1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "65fd271d7fc42ffd79d5404de6fa20ad16270d599f4d6d685714b5585739d327", +"T3W1_es_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "dae4031bdb1f733465130f19800189d3bc51f8d9308e559a0fcc11ca43341b46", "T3W1_es_test_tutorial_eckhart.py::test_tutorial_cancel_from_confirm_menu": "6e1b3ccf5a622448388513e20fd2e6ead1fe2ec079d585df3e43b90addd8ec38", "T3W1_es_test_tutorial_eckhart.py::test_tutorial_cancel_from_main_menu": "5e4a8990c8d14aad98bae7e7af8ce56327745bee81abf33a754d5b5c1e07f989", "T3W1_es_test_tutorial_eckhart.py::test_tutorial_full_completion": "5f4a12d0a96cb7853b3100b4137dda48c99bca998d988b4f180d95a2a7b5c8b5", @@ -34765,9 +34765,9 @@ "T3W1_fr_test_autolock.py::test_dryrun_enter_word_slowly": "a373eef79f79c4db9cf186e9c2f7d50f41bad2698dbb7af6a9f3165754a3f0f3", "T3W1_fr_test_autolock.py::test_dryrun_locks_at_number_of_words": "ee73cddd0f8dac60813b0ceb1c91ad3645817c8ff885a38817de52ddc444b8ad", "T3W1_fr_test_autolock.py::test_dryrun_locks_at_word_entry": "af74ad577310c57975b06b745f6adfb9a32bfdb716ea93bc6b6149259b23b5ed", -"T3W1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "0ea19479d323853d215b13d6b6509dc708c933b6c94e75a6f69735a03746969b", -"T3W1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "fbd57b3c8de310b3a0627f85e7b872f21701ca744400048a44e938e99298ea0f", -"T3W1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "3378a477ecef4dba6ee54c601cc76a34fe1f00a91b1985f22bcbb040a3f56237", +"T3W1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "6ac6678f888d6bff981231896b887da193709781bbd14b51ce389494a41105e2", +"T3W1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "de00e8006c5144cb4fd7ee06160244144f3ab0342e1a4d7832692265fdd30b8d", +"T3W1_fr_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "825867a3ab37bc8e58dffe2ef8a2b8a4512e7daea2242a1e1c7864d71e8a2189", "T3W1_fr_test_passphrase_bde.py::test_cycle_through_last_character": "f4b12e3357078db56e9625214a67ab61308a2baea59b8b379e163255d38a5b72", "T3W1_fr_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "b44c5a76f105050f9f376eb43422f69a883dd7e7bcc5fa8c740ea93445e2c9aa", "T3W1_fr_test_passphrase_bde.py::test_passphrase_delete": "719347dae2f86bbf51616fa7e4ecdcc504ad1f429c7abf87d1441b3a965eaf98", @@ -34805,13 +34805,13 @@ "T3W1_fr_test_recovery.py::test_recovery_slip39_basic": "091b23169ea0c50b641304c82dfc8a974c0afe1e99e4a54ca919db80048f124d", "T3W1_fr_test_recovery.py::test_recovery_slip39_issue5306": "4c0795adb77296fe4fd0c2d922b7cd9a171a9171458ccf0c42f8adb550375f56", "T3W1_fr_test_recovery.py::test_recovery_slip39_reenter_second": "b8ef7704254413cca31bd3408928ea26f665e7577a9f2ddb5195fcef31d4e714", -"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_device": "9d3dac95ed08d63b14d693ff27abd858575714c98a5ae90cb61db64384615047", -"T3W1_fr_test_reset_bip39.py::test_reset_bip39": "a8a0dd80352ccf3fdde2c18f12cae08ee2864f08414094695812305f2d461ba2", -"T3W1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "3fbec840ee95dd1e95268e3ce6cb2e1b915d0a3d65115986cf9409d227971b48", -"T3W1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "0103130d64ee73b5c5629192ec5afd3887e8bef26e847d7a976ba3e02e580cd6", -"T3W1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "a3936d12c71a8a56b2d0a65cb58ae659edbde1b853ad8fd2e9b54ea7f116a417", -"T3W1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "195b815d43128ef4ccf15a73bd5be6af14c05ff7614979a9572c4fa75089ef4d", -"T3W1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "f5ec8e6d2d1d396f9050e8b62a0a4c2b4497cb25be9802844534adffe7ad6052", +"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_device": "3a409490bec3f2be428d033d9866b9cf4584d0bf063ec7731253eaf2116c1774", +"T3W1_fr_test_reset_bip39.py::test_reset_bip39": "95baf3a5327424b8517214b8c04f07c473521af2be76640991b82d054b6860c3", +"T3W1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "da4f93b931689f5a3f2b8ab72a06abd29dc3b4d8517ec67d577491f39b2f6e4d", +"T3W1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "9ad54859bce4cfef3c9ef08320e58fb71c6298a060b91a2f7fa1ab7a7ccdf54a", +"T3W1_fr_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "61c459f07f50ecd14fcae48ded781bad11d1560430a98c0155316c2dab1e911d", +"T3W1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "4dd75871741dc406ca39fd406774dfb2ed6cf61e4c200f5770e2ceb4018f827a", +"T3W1_fr_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "0a621cd7495b1bc0432511e0cdcc2f0fa66c9a781538432c1496214a67fb6654", "T3W1_fr_test_tutorial_eckhart.py::test_tutorial_cancel_from_confirm_menu": "c49e12e7781d1ad4c27be872b89ba2b2925f7ccd4dc778efc736b27e8eaebe61", "T3W1_fr_test_tutorial_eckhart.py::test_tutorial_cancel_from_main_menu": "83b32a5c5efa2b0f246d43da7205a0ada4daf768ddcd536d44ea8f9e138fd9f9", "T3W1_fr_test_tutorial_eckhart.py::test_tutorial_full_completion": "c278dc23111743019bdee508e96693050e6359ae2fd9871bb182fb4cd23afd41", @@ -34871,9 +34871,9 @@ "T3W1_pt_test_autolock.py::test_dryrun_enter_word_slowly": "67cf19d14f52593206f4d4d91aa181a0024f0afdb8767daa5c0a8db6e832d566", "T3W1_pt_test_autolock.py::test_dryrun_locks_at_number_of_words": "4e6a31f73c766f8eb0f08e1d444aceed849e14089fed37d3cea8adb684639c2e", "T3W1_pt_test_autolock.py::test_dryrun_locks_at_word_entry": "79ff25edb91ee857ca7b5cc4bb96ce494af8393b08fc0c13a5563fe693949385", -"T3W1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "28363f1da1c30e9fdfed6fb65ccf139f06e4f169d5b10174c5a3ae1148de033c", -"T3W1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "61df05ba5fba546829002e5e6cbcfde292753fc1135ada741c71d97b7567a5be", -"T3W1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "ea18c620f4acb7faff1ef600104c11cfdbbe3b51f60f738cf67a971034e790d0", +"T3W1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[1of1]": "07a828ae5645ec7c1336fe37a1119eec5ccbf0f77fd5d9f2d011fced244df474", +"T3W1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[2of3]": "b77067338020513f3bf79510083be67055b0cf1662c63541482475e119766c99", +"T3W1_pt_test_backup_slip39_custom.py::test_backup_slip39_custom[5of5]": "218236a54851f4c1c351ea3ba5be46f22b857d1d4fc3e100f32fde56b36b77a8", "T3W1_pt_test_passphrase_bde.py::test_cycle_through_last_character": "3f9195dd09487238b204a1f8dcaa7c148b4c65c5996b955d7d8dba5cb7cfdab1", "T3W1_pt_test_passphrase_bde.py::test_passphrase_click_same_button_many_times": "f9f5a25ef5e4b9c252cc9eba44500f6f6b52a27093621917f189f5aee8473a2a", "T3W1_pt_test_passphrase_bde.py::test_passphrase_delete": "355737ee1cc1a4db193e37006598c5df2caf44f27aa2ec5c98560c7825222a71", @@ -34911,13 +34911,13 @@ "T3W1_pt_test_recovery.py::test_recovery_slip39_basic": "f5ffcc288316590fe2713221f8aea1a71423d1446d09d69578691d4ddb8c6d68", "T3W1_pt_test_recovery.py::test_recovery_slip39_issue5306": "09bdeea864ec06272b970c252d9a98fa85f4e99b9930066d6d9b90f2412d37c8", "T3W1_pt_test_recovery.py::test_recovery_slip39_reenter_second": "f2d4035f84bdfab94e9cd68bc55db76dcfabdabb81d7f5ce288d6be061eb6757", -"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_device": "847917fa9e1adb7c7182abb4a69aa8880d417a3ba20b00ef570f8d9438d0f51a", -"T3W1_pt_test_reset_bip39.py::test_reset_bip39": "eb97b4956abc09b5d4a05dc52bbbdd9844047f3fd94a1e95e349f3fb2c0e3f07", -"T3W1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "6b45819e26f785889b31aa1590b050e542e4ab74c32af916db8e327b96bb4421", -"T3W1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "86e652afa8953194015a68b123f3728c400434a7b6506da08d6b9bb0b04e2943", -"T3W1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "8d8b1beec624d3ac352ffbac8560d3372873f588d023c76c84858edaae2573dd", -"T3W1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "9021b36535cb322eb090cecad77336e38678a22972472d9b6b8e12bcc73500e2", -"T3W1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "e615988f0a07e9ec4a0a129905959aae59fcf802eacb3e332521cbe45b7311ef", +"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_device": "360544577755ac9330f32e368e2979a29da540b7fb7dc0943db226f487c6eaba", +"T3W1_pt_test_reset_bip39.py::test_reset_bip39": "3fe9bccf3131747ac7f25277e368fd9e34e769bc563337da369ea8c630dcea3d", +"T3W1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[16of16]": "0d90ffd5dcd0a18c6520c6e0271a91d7df6255555127f8ac53d67282d2443e9c", +"T3W1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[2of2]": "65f17e2649e5a636395a6dc092a6852f1f7599eaaa02f57b7a459f511560a11c", +"T3W1_pt_test_reset_slip39_advanced.py::test_reset_slip39_advanced[small-16of16]": "3306fd481faab344cf16f1ab78730635ffcb5d85ab2ea9e4a908e75c6777dcc1", +"T3W1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[16of16]": "663a6c3f74ab755abbaa7d56a61eccd18f219120cdaad901a302aaeffedacb39", +"T3W1_pt_test_reset_slip39_basic.py::test_reset_slip39_basic[1of1]": "80339a214969191df6e382f511e29198bd66f0b9de03e99b37fa9a85d6660553", "T3W1_pt_test_tutorial_eckhart.py::test_tutorial_cancel_from_confirm_menu": "f56b278cef9507e2e2fec7b07eff99b4889ed0f4b89685cbf47baeb0a32af4c2", "T3W1_pt_test_tutorial_eckhart.py::test_tutorial_cancel_from_main_menu": "87e86fa6e8ea26bc4695c31ff88d570a0ff9cf26793e96fa70f0665c8e30accb", "T3W1_pt_test_tutorial_eckhart.py::test_tutorial_full_completion": "80b31ec4bdfe368d0dadf22b0a17b04b7a4ab8f1d586c41fda2d223fbbae204d", @@ -36244,34 +36244,34 @@ "T3W1_cs_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "ff75e5868851f32c702aaaed1c15f939203e47d3303c850a2e0c959a6419fd0b", "T3W1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "04fc74f65ec264e2da0c0f447e71c8b8e243334c361988081aaa17a22b615aba", "T3W1_cs_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "23bafad04253323812ae5fa1084fe43a83fc1b4caece9d49edfddb7c4a5fd196", -"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "0beb94188b92cec2ffe9ab6c9b18fd72a45916a4c98a0da9a22b3a089583d7e9", -"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "b3fe58e3e23af85a8c82aa592d9e24304819cb12846ca891430bcb7a5413fd5b", -"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "ede1138c45e087da41d5aafafef35e8b4ca5674250bf730dc8efa52f2d41706c", -"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "641e57a73906d037748f1c6aa1ef6862ce24c2e054be1e9da1b2b839084db8f3", -"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "23e5d7424b90f0b978a4a485e34cf4b20aa29c15df8eca4e9721bcf50b655095", -"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "96750a5405eb1eb4169ae211789ed0521ec72e377bfab328edfaab25df687235", +"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "c238e88af2aea9efc7033d88d7d84f0246eacba7f8bafd6dc1996913327f7ff9", +"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "a1935c877e366638cb06e45bc032aeaee02286eb6dbe0f9b8d49fcd835808e7e", +"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "70fd0ea58b2b658873a95a4aa4838111bd03fb47475fea7007d82423fec32c22", +"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "ca6a1b9e0cef734bc82459723f2f3f58c666dfb49abfd47e37a894413a7c63ee", +"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "18ce62111d6186d4398a7249aca8e0ab7adb2ac401d62ff1a8a24d09597af8d9", +"T3W1_cs_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "b5c9ca2ecb678cd0fa6654079b089680ba560da1e96cf2ade2f4806182b12d72", "T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "2b06a6c36a96faaad9d1237b47e37374c5452331ad8fa3738accbd2e09ec1500", "T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "1989841313e656d3c980bdcbbcf6a50865686d7f904224c273fd04c40cb85f36", "T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "7f5efd4639ae8105a2c4907b22336a74ed94a5cbccf91f6818d67c57f610b6b4", "T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "1989841313e656d3c980bdcbbcf6a50865686d7f904224c273fd04c40cb85f36", -"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "1d59c6a38e6f69fd1449f9ff8552781afd01acc5424eb75890b5e3bbee19b92d", -"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "1d59c6a38e6f69fd1449f9ff8552781afd01acc5424eb75890b5e3bbee19b92d", -"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "f3776b5726998c1c3f978a45227ab0c626300127f16bf233ee654be313820d3e", -"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "f3776b5726998c1c3f978a45227ab0c626300127f16bf233ee654be313820d3e", -"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "cd6eea83fbc11f49a6cfe470bb3e9d972fa148779758299d6724cab20a0c2e69", -"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "0c1c22b2a57d07973fa686b882e2ce91ab48143291a0e20a02f4dc6237126808", -"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "03cfcdd943fadb4a46c4b8a71100378e103814df976031f6c168e30c7ab0e89e", -"T3W1_cs_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "d1a44614160341f921dfc24cb5e5cb081a0df4b8c686fae0a1c1e7e6f98ce2f1", -"T3W1_cs_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "8403443743ef9b002b67977686787b3ce2e1e598eed0f9dea6306e740ba24368", -"T3W1_cs_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "1b7df438fc83ebc2d9912e50b1329375bb4c3532cc14fdf1a7f5f95c81c9070e", -"T3W1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "3676502ec88b49062bb569f303122e1d76a6d1d5f0dfed81b70ad62e1374c80c", -"T3W1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "3676502ec88b49062bb569f303122e1d76a6d1d5f0dfed81b70ad62e1374c80c", -"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "5d793fdd73f508a54f114999256702d8d8243f4a120fc0f0cb71894744abfc40", -"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "5d793fdd73f508a54f114999256702d8d8243f4a120fc0f0cb71894744abfc40", -"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "3a1327a2d14f5de52451701337947956877394ca63d3e4025b7a2eef475d37fa", -"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "3a1327a2d14f5de52451701337947956877394ca63d3e4025b7a2eef475d37fa", -"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "0aeadc1cffdd6f6128ca87fb98a4b18177d2043ec8d3d34cc68a22bc141e785b", -"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "0aeadc1cffdd6f6128ca87fb98a4b18177d2043ec8d3d34cc68a22bc141e785b", +"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "8d6238c96c91e2fb07c1a30bb13b474f57b70cd787c6902ec45ad4d94f115d28", +"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "8d6238c96c91e2fb07c1a30bb13b474f57b70cd787c6902ec45ad4d94f115d28", +"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "039abfc8341ae93da903cecf449132ee56fef7f09d4b4daab787a1714a9acb32", +"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "039abfc8341ae93da903cecf449132ee56fef7f09d4b4daab787a1714a9acb32", +"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "815cbf5bbcc236ce1cfddd82098a87fae2fd6edb136bb3b812c5fe36ca339479", +"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "b2423d0dc1908e7a17a6f40d71eb1d757eb244368ff0a7d9c8138c9cae7680e6", +"T3W1_cs_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "084c72f93ce2ba1d2a48c8f5a9b6535b9c598fa2b7f6a2bec786f98faad72aea", +"T3W1_cs_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "11b4d947e56329672a771cd8826ac93ad55fb965d033228438e513611a884c52", +"T3W1_cs_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "90c67128fb0dc0f110ecbdb92544bb9d1692a5c3ce0a4259b2401ee89b764684", +"T3W1_cs_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "32469dab7703d4124a90d70e6bb7153cf39adb0d80bfe6c925ff7dd419d411a5", +"T3W1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "5e579d7576d9c14dafd56f67799f13d9be650a435cc69dcd088a75442b366a60", +"T3W1_cs_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "5e579d7576d9c14dafd56f67799f13d9be650a435cc69dcd088a75442b366a60", +"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "ffd66d163861441f98ddf15c06d63f4b8ed7f2eb4298c9670f28294c086bd7b5", +"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "ffd66d163861441f98ddf15c06d63f4b8ed7f2eb4298c9670f28294c086bd7b5", +"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "a0ba81b2ac3902751704ba3e1f103e2f9418a42bfce2ce597f364f1f6c8d7a8c", +"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "a0ba81b2ac3902751704ba3e1f103e2f9418a42bfce2ce597f364f1f6c8d7a8c", +"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "aeedf25307a104ab10be42dcadc7d0d389ae0d7393e86b4ab59054420539c313", +"T3W1_cs_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "aeedf25307a104ab10be42dcadc7d0d389ae0d7393e86b4ab59054420539c313", "T3W1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "6b7e985f2fc82d9aace0093cf21502a6bd52b0d1db535736e7f02bc106d9026b", "T3W1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "e0b94a0644fd52bd96f8bfad24a2f4a823cff0cd3b4cbc689f3c8f6180522c3e", "T3W1_cs_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "10a194092c84f64a2cd0c8fc8dde4c0fa31ffb2160ff33b47eb76a0cc7d9b118", @@ -36574,24 +36574,24 @@ "T3W1_cs_test_msg_applysettings.py::test_set_brightness_negative": "2b06a6c36a96faaad9d1237b47e37374c5452331ad8fa3738accbd2e09ec1500", "T3W1_cs_test_msg_applysettings.py::test_set_label[empty]": "6b7fe60ec696a3c1a425e28cc48bd5285b32ef220ad2a610994ab487e03f4ffb", "T3W1_cs_test_msg_applysettings.py::test_set_label[max_len]": "9bb9502b9bda2bfb29cea655daf0c4e4fd73f0617bfb54cfef3bd057df1ddf89", -"T3W1_cs_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "f973584241cf89463ff78a9913f62b53279aa283eab64f11be76271f8155f272", -"T3W1_cs_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "f973584241cf89463ff78a9913f62b53279aa283eab64f11be76271f8155f272", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "0eab4351884203e59b7c7271112addab4f0476ee664f58b8938fbf4f364bee9c", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "0eab4351884203e59b7c7271112addab4f0476ee664f58b8938fbf4f364bee9c", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "b2bec2e13bacb9f0f0e45eca85c1fb86db347d3b31da299d7b5922de4ad67152", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "b2bec2e13bacb9f0f0e45eca85c1fb86db347d3b31da299d7b5922de4ad67152", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "d915150afdd1942380075e60531a9be83450e9db9553d4795e55d2475bc3d2b3", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "d915150afdd1942380075e60531a9be83450e9db9553d4795e55d2475bc3d2b3", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "559b7806fdccea7e202869161a6c5e4e0c64130e81e20e2221eb37feb596ccb8", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "559b7806fdccea7e202869161a6c5e4e0c64130e81e20e2221eb37feb596ccb8", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "2820e3dcd6edad8b59f09172c1ffd9ad182740ee0b03cb1e1c4d9757493db150", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "2820e3dcd6edad8b59f09172c1ffd9ad182740ee0b03cb1e1c4d9757493db150", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "b8c4e7a5455481d4fe8ce563fc4dfd8e6f366a7f2c0d08be3518741de3f838eb", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "b8c4e7a5455481d4fe8ce563fc4dfd8e6f366a7f2c0d08be3518741de3f838eb", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "c15491216896fd02c5200b364e433a382148d1b5f356dfb9a3184c0727ecdd4b", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "c15491216896fd02c5200b364e433a382148d1b5f356dfb9a3184c0727ecdd4b", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "b8f9acfbf8c4778d7ccd9b03abe735089b7065e9d0b4428c1cfd53e96893cff3", -"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "b8f9acfbf8c4778d7ccd9b03abe735089b7065e9d0b4428c1cfd53e96893cff3", +"T3W1_cs_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "9e4175ea767460ca79eb50ddb51f1630bb74432d247dd0d93a13d70d17a36232", +"T3W1_cs_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "9e4175ea767460ca79eb50ddb51f1630bb74432d247dd0d93a13d70d17a36232", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "a4b77f28089e142827c570df70a7c1eac0a5d5a88d559064bc654604a832d399", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "a4b77f28089e142827c570df70a7c1eac0a5d5a88d559064bc654604a832d399", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "d5a20017d7c184249da75abd0bf3c0e2b6e9f68156b07c3ed1a8216f8621b49d", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "d5a20017d7c184249da75abd0bf3c0e2b6e9f68156b07c3ed1a8216f8621b49d", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "ae6a93567075b5acfc11af7b38973f62717155b4f6aecf12f13ebf661229ab72", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "ae6a93567075b5acfc11af7b38973f62717155b4f6aecf12f13ebf661229ab72", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "74d263cab9d17420e46d1428a1cb9da7da164b200227a5611e3cfb4c5ea10fcc", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "74d263cab9d17420e46d1428a1cb9da7da164b200227a5611e3cfb4c5ea10fcc", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "cdeafa356c02bfc25eee95eb19e58be18edbeab301188c7a576064a481db3279", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "cdeafa356c02bfc25eee95eb19e58be18edbeab301188c7a576064a481db3279", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "de1e2e9f74d70f941626ffca07660dc05638da88adca69be6d5fc192b412c367", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "de1e2e9f74d70f941626ffca07660dc05638da88adca69be6d5fc192b412c367", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "13c58ba3bcdf1985091f6e2ca00ec7586ad41b57925f124663775ee966308803", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "13c58ba3bcdf1985091f6e2ca00ec7586ad41b57925f124663775ee966308803", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "f5793c3d8628f9e42261f05700f669529bb2a23fb9456069c44e62c143b83ef2", +"T3W1_cs_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "f5793c3d8628f9e42261f05700f669529bb2a23fb9456069c44e62c143b83ef2", "T3W1_cs_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "b76f41e70b1a7034a4bee339e9acca407235c8f7b6a11fe84619128837a5f42d", "T3W1_cs_test_msg_backup_device.py::test_no_backup_fails[Display]": "d3b1c8ee4fc3b1132ea0256b3c7c6fa0c3c7955deaaaa4311201ea377e71afa9", "T3W1_cs_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "a7c9ea54461bf4ecb9e25e2956d696335264b55a518c687e8807497ff939794e", @@ -36608,9 +36608,9 @@ "T3W1_cs_test_msg_changepin_t2.py::test_set_failed": "780e172d0e3d55891df8315570c1d9a803a99b5120fc26252c621d81e6dcea04", "T3W1_cs_test_msg_changepin_t2.py::test_set_pin": "2af4ad9dfd3160aa0556d39227c07ebbd865a8a4ddaf70e2aeeb1895c555c4d3", "T3W1_cs_test_msg_delayed_ack.py::test_abort": "05378c21bb2ab9ac85686bfec1e97d26b953788340d833b0aa270e7d15bd3dfd", -"T3W1_cs_test_msg_delayed_ack.py::test_backup_no_acks": "0344d900cba47d2b90a83506c20c662026fdc7982f1d1ca530446b61cd4997a2", +"T3W1_cs_test_msg_delayed_ack.py::test_backup_no_acks": "b5d2b103db01893964887c1a1a91ff790346401900f590a7f81f39a5e27d369e", "T3W1_cs_test_msg_delayed_ack.py::test_delayed_ack": "05378c21bb2ab9ac85686bfec1e97d26b953788340d833b0aa270e7d15bd3dfd", -"T3W1_cs_test_msg_delayed_ack.py::test_setup_no_acks": "3d25cdfbded9a6540f2f2fec9bf3e02f195ce0da3ac1f87b0ad4ed9d2175413f", +"T3W1_cs_test_msg_delayed_ack.py::test_setup_no_acks": "afce6abaf51e728753b342bfb5a371099cde34257d7bdacc389de0fda5ff6983", "T3W1_cs_test_msg_loaddevice.py::test_load_device_1": "09046576a9d1deff7bdd0ead716e05878cb7c49779351cb75533fdaf979c46ce", "T3W1_cs_test_msg_loaddevice.py::test_load_device_2": "62be0b048b0c18497e5ebdaed64d04fd0de3fe2795b3c9dc4570b792324655cd", "T3W1_cs_test_msg_loaddevice.py::test_load_device_slip39_advanced": "09046576a9d1deff7bdd0ead716e05878cb7c49779351cb75533fdaf979c46ce", @@ -36645,10 +36645,10 @@ "T3W1_cs_test_protection_levels.py::test_unlocked": "c697351cc2bf274b804d48999444611e5bceba62803a0a05263cb222399383e5", "T3W1_cs_test_protection_levels.py::test_verify_message_t2": "6cd993cf64a3464c5adfd6f2ed6825df1346738bdd8f3048849d731dd16c4dfc", "T3W1_cs_test_protection_levels.py::test_wipe_device": "232c9cd3740e4faa2fc33d040c0d0f952aacab21f1f76e82e300be619d55b7b6", -"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "0bfbe1d831303f8b52cdd52957dd797c573c917093b8b594b197c7f19209c19a", -"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "7c9a9ed82f55e56379d13ce240fcfc6fe2323dd0803b98535cef22ab8d46f709", -"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "7c9a9ed82f55e56379d13ce240fcfc6fe2323dd0803b98535cef22ab8d46f709", -"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "cb1d57b8d6889913ceb24fb15441287e95efebb9c847e480b611ecab384e9d5a", +"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "e2b77f8c31df5a6d20a2f50dfc67df1ddf16451ce68161246b20ed7567143d7c", +"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "5724a41487b12dd957af9c9532062ee3b0d3a79d3af7ba71bf76c481cede3c77", +"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "5724a41487b12dd957af9c9532062ee3b0d3a79d3af7ba71bf76c481cede3c77", +"T3W1_cs_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "a157595c2fb91e2bef11456369448d45f951e2dcbc1dedb28dc853ec29272aa4", "T3W1_cs_test_serialnumber.py::test_cancel": "29283fbada5370e48815433cd11070416e965901141095c08f3b7c3c9e724aa4", "T3W1_cs_test_serialnumber.py::test_same": "5160f0cdc797f06170f714a1980d2a667b6223e2c2375b228211c107d8ddc072", "T3W1_cs_test_session.py::test_clear_session": "ff333805e840dea1105cb1550f6699b553b9d28bd2cd506853ad0b0eb3b32d12", @@ -38083,34 +38083,34 @@ "T3W1_de_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "6de5b8718202b986fbb29c36abbc03e86f60449ab3912040c00fa5db55415c90", "T3W1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "7d33528ce1895f8d4c5fbec68d6d6af4efc41b9c2dd4407d5b3e6c1ac9f7c564", "T3W1_de_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "915b732a00b8b6206bf4ae89875716a8705182c18d46caa744a33c6e296dde45", -"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "310b5a87a4166a7528c788b4301bd3e82a62aa029c14840ded150f3d3857d3cc", -"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "29b84a111d1047bafe1f334c8ec7ac4c71a244714bdd7465bd003454ea39f814", -"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "94dadb3c08f4a21c9e470538f1fd36e5b70282b3f97c5fe8be54c6c25920c78d", -"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "f48f50afa5e42902c68e3e885a16a8564c3744888c0cfe98537ce9329cb6bdef", -"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "b54ffe87aabdd441968f6b3bb40b0aee9dd62c3c29c9f2ae6fe58321c05b126b", -"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "b09a0b9a3d6181ece59f7e32c95733d72f3644f8f96c160483525c263aa425c9", +"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "e7712c3b9e12d6c7c109117c0b2af4b6cc19edc78e8e2ed7d460f660fd573fc1", +"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "5f7e3ab02949993ada6bebd8ed3f9e603cf3d9ede0e89edf6b9e694620056373", +"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "555121ecef0459984b889ba7394854a7668d89ec6bec4c566117db7fc4b8d2ac", +"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "8f2139fb8b17e7eef849cb42de252fc6f7cf0cc4e040e485e39e1fca777463d7", +"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "9ae253d60b819bd098650645d6f58c158c62a4a5e7670c463193338b1cd1654d", +"T3W1_de_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "e129d8a4b2249def5c713a40a7b73beb59bd2dd8639de346050e1e5680cad6f1", "T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "32c06c9f4ef6d91d183e5480b273a0aec9bd56572528ddbfb70b7cd609cbef50", "T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "def3dfde3c2e0a7f50888d6e180aebbc3528014de6dc3444c1eea97d2bb0fc2d", "T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "9ca85e7bd541adef8c82c56f698c0e479b30c1c12a9f77746049cad765d00ea3", "T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "def3dfde3c2e0a7f50888d6e180aebbc3528014de6dc3444c1eea97d2bb0fc2d", -"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "adf00342b5a42b2781675b7bb0936d341ea48a3a590822b9a774adbc5462a3e2", -"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "adf00342b5a42b2781675b7bb0936d341ea48a3a590822b9a774adbc5462a3e2", -"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "e3e668da7f3afebb1d29948812692e28ef0262e6e23db5347bf32935881a8e33", -"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "e3e668da7f3afebb1d29948812692e28ef0262e6e23db5347bf32935881a8e33", -"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "10cf27fa1647d0d6a20656e32959dff0745da0d709a28cc79461baf49ed81dab", -"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "0ae3fc1014f6544cc7c586eaf0784fae65be6c459a39171a0049505bdd0b8da4", -"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "041fe5b84961dafb1bec26e5e64abee3a424b86b75c5fac3fd845f1289cf4e5f", -"T3W1_de_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "f65fd7ae1d0a4914a37249087462aa449c6da5a902b170f8ca1fd9e4599a69a7", -"T3W1_de_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "c9525f7cebee7ec42d7f001a01d5499a277e8e00a1f4470ee74077d9d104c026", -"T3W1_de_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "66ebb9977c5d3fb4caa9af0e4238b3bf2a7692f351aac6b3fdac2ccb5ec2919a", -"T3W1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "c59d2a94ae5d89a9d764ecac2517eb03667f72c80254ec9061ad5f7fb17be8e9", -"T3W1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "c59d2a94ae5d89a9d764ecac2517eb03667f72c80254ec9061ad5f7fb17be8e9", -"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "3d6f7e253b687b2828ef64cddc4498267b95e558f8375073b2a2b31ad6105d34", -"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "3d6f7e253b687b2828ef64cddc4498267b95e558f8375073b2a2b31ad6105d34", -"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "31549a1c809a2a40b59d079061a029a84c694b5cbd3661198d1e91e4e2cfeb00", -"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "31549a1c809a2a40b59d079061a029a84c694b5cbd3661198d1e91e4e2cfeb00", -"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "f69dba756da01de186cb3a6c8795eaa01eda2dfe3699ea1e36a78e0cb058a883", -"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "f69dba756da01de186cb3a6c8795eaa01eda2dfe3699ea1e36a78e0cb058a883", +"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "cf985274db9767f8203e8371e3878da05def4e6b98a43912d3933365c0db1885", +"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "cf985274db9767f8203e8371e3878da05def4e6b98a43912d3933365c0db1885", +"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "a44067f66833620187ef5a250a787b0a8e8762a8c8a64cac3d0fd9c7332de6ce", +"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "a44067f66833620187ef5a250a787b0a8e8762a8c8a64cac3d0fd9c7332de6ce", +"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "f4970ef093bf3a44e848a6f8e0469dc21c9599affb5431b4b2df8b4c55811c15", +"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "02c1f241f3ce89cc9530b9d9e3198150db8ea98ad214596b93ee3e87f33f7b8e", +"T3W1_de_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "72e576e4a35c9d9a4a69641b75a220da25c7b354ae7656011f647c8b73e9cfc2", +"T3W1_de_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "2c80c91482351f762fcc8abe90ca2fa27b7437b39556df9a4a7264444c0fa196", +"T3W1_de_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "38e87da9cac2e65e8e616d74f8b17d6829d259e9a09f5eace305794a45e2601c", +"T3W1_de_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "357e53fbe32c8b30c26ba1112fa70f787add1aa8cd619bade6baafe233ce7e95", +"T3W1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "f2ae423a103f8c65e935ca14c533504e4e928d059deccf72eec8f3d1462da281", +"T3W1_de_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "f2ae423a103f8c65e935ca14c533504e4e928d059deccf72eec8f3d1462da281", +"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "43cf046d12aca63c02992de3fcda8d4c41b2b13b418c6964222844265a95c6c9", +"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "43cf046d12aca63c02992de3fcda8d4c41b2b13b418c6964222844265a95c6c9", +"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "92c1cc77a67e67861200cbce5d8f62908a26c49161ba868557e11a7cc372f0b1", +"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "92c1cc77a67e67861200cbce5d8f62908a26c49161ba868557e11a7cc372f0b1", +"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "70f99bec79eb19af8f3fef92fc4db150dd22343021c742c350270847904e7b9a", +"T3W1_de_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "70f99bec79eb19af8f3fef92fc4db150dd22343021c742c350270847904e7b9a", "T3W1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "761f533ce9ab32c197ad06940958a29d01dcc6220ff539e9426defc9aa5d8137", "T3W1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "0b9e0e0f564ed3ced95ba70bd54147fbdf10e3620be28317a9ee803631614f8d", "T3W1_de_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "203543dba69c70d85a823836a613c1fbd67240445538a5e533bc6f07fe85c0f0", @@ -38413,24 +38413,24 @@ "T3W1_de_test_msg_applysettings.py::test_set_brightness_negative": "32c06c9f4ef6d91d183e5480b273a0aec9bd56572528ddbfb70b7cd609cbef50", "T3W1_de_test_msg_applysettings.py::test_set_label[empty]": "39b2d2be53c24b75d9b230215b1bd000524118cd72781dd9a680bfa00105d6ed", "T3W1_de_test_msg_applysettings.py::test_set_label[max_len]": "07cd64b9d8c20a456bc76cb4ac2c664efa716d917ac9d78f86ad0084e89f969e", -"T3W1_de_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "77e76d0b498dbd48ed7186bea2d4b9b8ab383c1fd23be4398631a673f4de2146", -"T3W1_de_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "77e76d0b498dbd48ed7186bea2d4b9b8ab383c1fd23be4398631a673f4de2146", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "1809eb5e21bac49f2457c723456562d7c53202c9d504d7435a525396d59ac703", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "1809eb5e21bac49f2457c723456562d7c53202c9d504d7435a525396d59ac703", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "262e9b32ff38afcd98d451fe07bcb3f25ec5322182897afc71f8cb750c3a398c", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "262e9b32ff38afcd98d451fe07bcb3f25ec5322182897afc71f8cb750c3a398c", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "e96e0ed1a5dc9c308abfb4db57ae809abf588c99a5083d8aa8614509c8b42543", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "e96e0ed1a5dc9c308abfb4db57ae809abf588c99a5083d8aa8614509c8b42543", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "8ac6bee5a3721701fbdb8cff3c1531f9dbf5a8db3755879c07c727c50930332f", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "8ac6bee5a3721701fbdb8cff3c1531f9dbf5a8db3755879c07c727c50930332f", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "c81eb3b597b9f5836291b6bfe0c7af95d67520b83d70206e9ac9f4327cc29942", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "c81eb3b597b9f5836291b6bfe0c7af95d67520b83d70206e9ac9f4327cc29942", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "e7c469b7b04208b44865e4cec0010fd2ba8d0d86eaa07342b63b85ac8926c8f2", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "e7c469b7b04208b44865e4cec0010fd2ba8d0d86eaa07342b63b85ac8926c8f2", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "8e2bcdfed05d849c7fb3da687fcfce263c07e6fc8fe119721e6d865c165b9ac9", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "8e2bcdfed05d849c7fb3da687fcfce263c07e6fc8fe119721e6d865c165b9ac9", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "66817a554fcf4c83eb4f92e5537312fedc9ca08ac89cd473f4b754fe0f4d39cb", -"T3W1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "66817a554fcf4c83eb4f92e5537312fedc9ca08ac89cd473f4b754fe0f4d39cb", +"T3W1_de_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "2a5ad9b357eb76afdd6570a1b6c402687347c80859897dba59736793af2db076", +"T3W1_de_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "2a5ad9b357eb76afdd6570a1b6c402687347c80859897dba59736793af2db076", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "f36520c8964df00194e1e17b8a77f7d1ce552dfdc7d5c8b74b4d1001e20894ff", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "f36520c8964df00194e1e17b8a77f7d1ce552dfdc7d5c8b74b4d1001e20894ff", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "5cfcc5de07a2e14a5c6fd013bc8de8833bdeda17094b51d00a294f85defd1fcd", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "5cfcc5de07a2e14a5c6fd013bc8de8833bdeda17094b51d00a294f85defd1fcd", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "4a1fa5b22fee3abcf13ed59c0934d48999ad0b7a68a87c3bc12bf10ef77c0ae6", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "4a1fa5b22fee3abcf13ed59c0934d48999ad0b7a68a87c3bc12bf10ef77c0ae6", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "6d8fea520b9bfb877e0d2a533f76e000f2edd875a8d8b5023d342a98ddf0b6ef", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "6d8fea520b9bfb877e0d2a533f76e000f2edd875a8d8b5023d342a98ddf0b6ef", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "c6745aab38dc180a02063c7dff5cb98fe3babe973b04f66be9b6c067dae66e5c", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "c6745aab38dc180a02063c7dff5cb98fe3babe973b04f66be9b6c067dae66e5c", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "78c107177bacc0e4b0518dc35c0b3010ff5f91616f24bda41ee34358902b02fb", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "78c107177bacc0e4b0518dc35c0b3010ff5f91616f24bda41ee34358902b02fb", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "9ef15e3f2982d44d48a8c8c18713e081d0516a3650a56231797c011b9f6fbf2c", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "9ef15e3f2982d44d48a8c8c18713e081d0516a3650a56231797c011b9f6fbf2c", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "770ce09ea7cc721529516fc3a22afface05ee052d487cd129dcd52fdb2862b9d", +"T3W1_de_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "770ce09ea7cc721529516fc3a22afface05ee052d487cd129dcd52fdb2862b9d", "T3W1_de_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "9ee18a1a51e90428bfd366b019e4ea005e6b67c478e30cba211529dccf716ac5", "T3W1_de_test_msg_backup_device.py::test_no_backup_fails[Display]": "c112b56ed07896f2ac69cf8a5ed783235c8ec511e20c07fa87a97511c14142e5", "T3W1_de_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "0987a1fb3b4d6670e739765a2f3651c7aa56bcc94b5bea97007ee5bc48cb0b55", @@ -38447,9 +38447,9 @@ "T3W1_de_test_msg_changepin_t2.py::test_set_failed": "d79784f25f39694e1a723270e1d43fae5559a674fefb9afee3c4b8d97fe996e5", "T3W1_de_test_msg_changepin_t2.py::test_set_pin": "824e1b1a7448df3124c46c63e8d4267d52613691eae1e2cff8e031d0623774f7", "T3W1_de_test_msg_delayed_ack.py::test_abort": "056dc226e91b45a8e9013f52a49d7893278b27a14b6bc4989195b4bd2fa2d7a0", -"T3W1_de_test_msg_delayed_ack.py::test_backup_no_acks": "25a2a979c4a2301884e0b648ba5eac16b4dfb55ca32f0de1b7f10d059bc148ae", +"T3W1_de_test_msg_delayed_ack.py::test_backup_no_acks": "30435b3e0321237b3adb8585243bd570d5c72c3ec48552f71acd461f3272fb43", "T3W1_de_test_msg_delayed_ack.py::test_delayed_ack": "056dc226e91b45a8e9013f52a49d7893278b27a14b6bc4989195b4bd2fa2d7a0", -"T3W1_de_test_msg_delayed_ack.py::test_setup_no_acks": "61a56fe4b6d7e7c9be2d4c784e3d354ef8851f32215e9a06924fe91c5d691d0c", +"T3W1_de_test_msg_delayed_ack.py::test_setup_no_acks": "d0864f4fe0d6b4b877e0c139579f1b65b144daf88f01289bf006bf0dc462c142", "T3W1_de_test_msg_loaddevice.py::test_load_device_1": "df54e5db857373c6e0882450897ec35f58d6ded555039cb562e6c5a30a2f671d", "T3W1_de_test_msg_loaddevice.py::test_load_device_2": "5ea27f4419d097e64c16ab0044f61d6b942453439a11edde7711a4fcbc26c773", "T3W1_de_test_msg_loaddevice.py::test_load_device_slip39_advanced": "df54e5db857373c6e0882450897ec35f58d6ded555039cb562e6c5a30a2f671d", @@ -38484,10 +38484,10 @@ "T3W1_de_test_protection_levels.py::test_unlocked": "2941ff0065848977097cf5ebd68f3b92a0f94141ffe8082797df822739495e0d", "T3W1_de_test_protection_levels.py::test_verify_message_t2": "02fb8320584a711f4e2058684db043a1ebff3e477c1325ba824d658bf4fc72fe", "T3W1_de_test_protection_levels.py::test_wipe_device": "79901d42aadbc874e6d253cbbf7924907acd91526fa5942dbe5f5d6c9bbab279", -"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "dfa187d520e3b348a01abc2e0ec59910c4642dbb9a8627170916dfbeb985a8a0", -"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "db9cb3ec5dbafcb82b38063a0aef8697fd732e685a54e949862ff9deb427a07d", -"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "db9cb3ec5dbafcb82b38063a0aef8697fd732e685a54e949862ff9deb427a07d", -"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "099cdddf0d3349c825c5614990c8cda527bebbd06a23f9b605f8c8109751ef76", +"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "5eb23de8cd321a5843e81216c362ac7d77123984976bd3bffca1fee78f2e3f34", +"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "24201b937bc7a7b652b482f9a77598ab93e3950449a602fbb8717928b68581b4", +"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "24201b937bc7a7b652b482f9a77598ab93e3950449a602fbb8717928b68581b4", +"T3W1_de_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "602b124511a972d0694857ab060a46f951abb3f1b9a325d95c45bc3bc2f99e0a", "T3W1_de_test_serialnumber.py::test_cancel": "d50fe993c7c73eb77eab2912eaffaa7cddb3ef5bd578f47b0ada8aae35bd6856", "T3W1_de_test_serialnumber.py::test_same": "6e317ad779810799e7c4fc582c084fdb331e8c26eb51bb3146eb4c20f8b06a04", "T3W1_de_test_session.py::test_clear_session": "cb9f9bfda6af9dd18c3c43d1a7a826c819c4666b983c265aa3232bf9790cbfea", @@ -39922,34 +39922,34 @@ "T3W1_en_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "29d0da80b8875ee3e5e7328cdf3181a58783039684278c0dfee9a1f536434ed2", "T3W1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "527cdb4090eb4266ba6b0cdb73f73e336ceed10dfbd288e36105a6343fa57ffe", "T3W1_en_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "1563392ccd0da8d6163a76c7c00ec9b61440bf5eb73746fa9be4682243d21073", -"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "016fdb868d15b79f07281ad60ad108fe0e011cf412d7c1e08c93e58b9c6a3eb3", -"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "ea305af5ca8d60a4aaa1580168d5e85b91946e227e73f8b2aab3b76fec8bb7aa", -"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "df61da9314eb79ae086c03e32a8e65f2d62e1c92be7dac3ee5e419326ba865a9", -"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "fb6e11287585132d5b80ee6c349226e1dcd8e666b595fbd0d0d12d98f5f7ed05", -"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "6d42a77864e914290961a60bdff6e341807d2ed63c18e2d7cb015e7e9855c54f", -"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "bcb98e2526ce5bd4eb02edb3cd69d3937599eda81d3743b8777aa7ea6494c03b", +"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "ab9495443e0016408818e2b1947d27ca97a7154ccaa33eb54714e99300cec603", +"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "5adb07c11b09221ec22208cc23734f3144ad6d689563f1d6d42dc21962e1f4c4", +"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "24f816eb115f1096ba4cd71a1960b77720b7e7e16dc64311bcf466516b243af8", +"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "7bd2b044d06d338ecc0e877de736db1a5b83fb0a0dd9490ff22a6ff298986cd5", +"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "adb07c9232ccd20f41b4b8764877538ebe811651dbe64634186e76c8db4b1fdf", +"T3W1_en_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "2c28238fcd0f5d4f16ee2d3516bafb875e1e4d1e416f7002655da4c9053ef8f3", "T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "90812f196e8c35dc7f35cb5a9a0e553c8fc6a610812d85b9f166e90b3f1c8b59", "T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "64c637f77f70878c2564e08de2e18e796e47100c48851e2c5c3bd27087f6cc0a", "T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "c99ff7ebe61b2f3268a43acee57fe1ea31b92929c8bebb4b54e1cae0c52a8f76", "T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "64c637f77f70878c2564e08de2e18e796e47100c48851e2c5c3bd27087f6cc0a", -"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "a359f7d3423cce0f854636908bb988adf65d49fca5f97479a1b4fa4a26a4e9ac", -"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "a359f7d3423cce0f854636908bb988adf65d49fca5f97479a1b4fa4a26a4e9ac", -"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "9a46d33ef106a5efa776125dfe32c9526a6043ea600f9215bd893003b4dd0fa2", -"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "9a46d33ef106a5efa776125dfe32c9526a6043ea600f9215bd893003b4dd0fa2", -"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "fba920937d1222cf4b1f690b93dbc77101739c5d8e2f92d4f82320aeb18a771b", -"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "6d5ce1ed47a839b22e351b4de6f2068670a223881c1de7f0f1204f2b3050e1f5", -"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "c9212100a6acedc533813ddf9ca9d22a06946f724b75e273a464d816710b4be7", -"T3W1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "69e2dbe3baebe0e76c3346d4e5f183bcdf7aa34a4047fc14d0782c2bfc66b33d", -"T3W1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "3500955722e0bf69de91030f88b13e217c293e2000af93f118102b129a5b53ce", -"T3W1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "b1a73b02d021b45fdd2347a5f906237675d181ad75dade74a1b4f40d4c420514", -"T3W1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "6bddcf42c1c68ba4821a8844ab7d545d57b616564e137d6ead8d0cdf124a46dc", -"T3W1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "6bddcf42c1c68ba4821a8844ab7d545d57b616564e137d6ead8d0cdf124a46dc", -"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "88067b06b5c955dae9390f171a9c52d8e2b6567351e2272158df8d839c37a7b6", -"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "88067b06b5c955dae9390f171a9c52d8e2b6567351e2272158df8d839c37a7b6", -"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "31292c4c8855e98cf1018c8bdbc2c1374dd42da9d30c27f568e184b31090e3f1", -"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "31292c4c8855e98cf1018c8bdbc2c1374dd42da9d30c27f568e184b31090e3f1", -"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "bb089661c274a67bb5dfff8cd85151d4bb0cba00f409d23ec107d9c06e7bc481", -"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "bb089661c274a67bb5dfff8cd85151d4bb0cba00f409d23ec107d9c06e7bc481", +"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "8534ee8aa6585454b04c043df7729fa55ba354b7ad83dc2ca546fb2302b7cdcd", +"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "8534ee8aa6585454b04c043df7729fa55ba354b7ad83dc2ca546fb2302b7cdcd", +"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "e76c0f520c3bb5bf23ba1ed00079a11dd4b041a096d51059d0491a31898d3245", +"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "e76c0f520c3bb5bf23ba1ed00079a11dd4b041a096d51059d0491a31898d3245", +"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "eb7eb2ea86418f508b20a5797a1d51954af36b5cc3891312c6b3db7ae6494b59", +"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "3a1631191ad382f860e2fdc3ffdbccea5d19821b86cba70a3c8da087b93c8565", +"T3W1_en_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "a1b420c95c97a7ad54849b236489795927f2cb17dd7613c77ce8501c5e7583ba", +"T3W1_en_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "291cda170a0b729e032ab5ad7b158438cce5969872a189fe09efdd3aa7f176a6", +"T3W1_en_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "7c35fe121abb35a6b12fa863394f2225e0e784f757fa96e4ffcfbabd20551bcb", +"T3W1_en_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "d0ed5234a26d74e5f8feab99d27c1c08d3f29f6f12e6bd3b976343de6696c65b", +"T3W1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "b39cae725ed185a7a4897b9e8ca2694600440a4c0e64ed652dae72794fd0454d", +"T3W1_en_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "b39cae725ed185a7a4897b9e8ca2694600440a4c0e64ed652dae72794fd0454d", +"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "ebf1fb67039b5e5a213d4a99edb2a991cbf4a218d237143352af81476c0892da", +"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "ebf1fb67039b5e5a213d4a99edb2a991cbf4a218d237143352af81476c0892da", +"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "0ee39d61ffe3eb8fb7b84b3c93a4b00f9f5f83162a4bdfd9e3cbc8f07098f941", +"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "0ee39d61ffe3eb8fb7b84b3c93a4b00f9f5f83162a4bdfd9e3cbc8f07098f941", +"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "b827f02c2cebe1e1995b11e30d4ce9a7721c690c1cb9ff935f04f1dc6652fe40", +"T3W1_en_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "b827f02c2cebe1e1995b11e30d4ce9a7721c690c1cb9ff935f04f1dc6652fe40", "T3W1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "2c13da7599a2e6a67fbadac5883009e336170f2f0a974413cc3d5882cded9080", "T3W1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "b92affa8d346b930dde0e52a3bf4838673abe83008d75478e4d86ce84af8867a", "T3W1_en_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "5d03b2ef49cf6616da91a39c63638e25dcd629d01167877db6f26cac1839f7ad", @@ -40252,24 +40252,24 @@ "T3W1_en_test_msg_applysettings.py::test_set_brightness_negative": "90812f196e8c35dc7f35cb5a9a0e553c8fc6a610812d85b9f166e90b3f1c8b59", "T3W1_en_test_msg_applysettings.py::test_set_label[empty]": "911657c027283e163c85d6b1e2c8ab4a9be66d0dccd8657fc919ad1902cf3c39", "T3W1_en_test_msg_applysettings.py::test_set_label[max_len]": "09da9ea56201b0c328997c9b1296af61177a5971955b785a006286358b7d5127", -"T3W1_en_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "aee5ba68292d116b9effec617693aada49bb66eb50849839f73b2344271b5202", -"T3W1_en_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "aee5ba68292d116b9effec617693aada49bb66eb50849839f73b2344271b5202", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "e02cf1bef3a0b920bc3b1bad58869c2fac950478105318d8798a06d6d183ebc6", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "e02cf1bef3a0b920bc3b1bad58869c2fac950478105318d8798a06d6d183ebc6", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "97a7d695bf5aff354d7940ec5a03d89cb77a2faa1c6c11dff53a899c544d8a45", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "97a7d695bf5aff354d7940ec5a03d89cb77a2faa1c6c11dff53a899c544d8a45", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "7e2c69e029313f04e2645089fd768c05163ce9023131941ea96d3f54a4e45fa5", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "7e2c69e029313f04e2645089fd768c05163ce9023131941ea96d3f54a4e45fa5", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "c67d55c53bf132c00f426431d0398c350c58c6a4fa49c996f3b45de20fabc001", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "c67d55c53bf132c00f426431d0398c350c58c6a4fa49c996f3b45de20fabc001", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "a40473e625a280c4807a6116be0eab24a62455c703764a5834ce92db216afeeb", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "a40473e625a280c4807a6116be0eab24a62455c703764a5834ce92db216afeeb", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "ff9fa09fe8b137190c8dab16b29b519531af8d1f97f80a518610998d98e1547a", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "ff9fa09fe8b137190c8dab16b29b519531af8d1f97f80a518610998d98e1547a", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "78af1a95e114462ec72361b27420b8890c6826446d4395ad9378d9fb73e80281", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "78af1a95e114462ec72361b27420b8890c6826446d4395ad9378d9fb73e80281", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "907e40d0c74f1a286ba83e8677b77fb0d9639a6280d849dcbdd8da11b93ad6c2", -"T3W1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "907e40d0c74f1a286ba83e8677b77fb0d9639a6280d849dcbdd8da11b93ad6c2", +"T3W1_en_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "2f218453d1c94ef8db9813f1d7ff29cf10b9e7dc5fff45de181cae616c6db771", +"T3W1_en_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "2f218453d1c94ef8db9813f1d7ff29cf10b9e7dc5fff45de181cae616c6db771", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "d4f935b00a3c6064ebd33178c636ea26da3cdab58a41f999f3d3bec476cdfbf5", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "d4f935b00a3c6064ebd33178c636ea26da3cdab58a41f999f3d3bec476cdfbf5", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "6dffe163012be18f7fe07bcaee742b74b3e02d104675e3cec9f37ac509ad239b", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "6dffe163012be18f7fe07bcaee742b74b3e02d104675e3cec9f37ac509ad239b", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "a0f371b59cfc1831ab8f6cbfc6b01a85112e8b0da609b95f4f21a519ef00aee2", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "a0f371b59cfc1831ab8f6cbfc6b01a85112e8b0da609b95f4f21a519ef00aee2", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "ef15b214472c8490870a077fce30d2eab315b04bd04db3a97da1488e731c80bb", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "ef15b214472c8490870a077fce30d2eab315b04bd04db3a97da1488e731c80bb", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "ff841e42cb6bf6bb00f5490faa584b78f2dd1541cc4bb886aafd4af5dad3cb08", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "ff841e42cb6bf6bb00f5490faa584b78f2dd1541cc4bb886aafd4af5dad3cb08", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "95f7e4a992050f193a02a0f8b4234550ef35afee1f7301609b404b4c6239d68d", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "95f7e4a992050f193a02a0f8b4234550ef35afee1f7301609b404b4c6239d68d", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "c4e54dbda5cc12fece501c0b180eea1817de49b358963a7a415bbdc42ffa3cf6", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "c4e54dbda5cc12fece501c0b180eea1817de49b358963a7a415bbdc42ffa3cf6", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "69445e570e80640229d8c226512a7d3c769ecc157da67e66ef29e8742a3eb515", +"T3W1_en_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "69445e570e80640229d8c226512a7d3c769ecc157da67e66ef29e8742a3eb515", "T3W1_en_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "cd47873afb0e8231dc98afcf6d9ad9f80878b37dc078a65497b0fcf6e3a669e2", "T3W1_en_test_msg_backup_device.py::test_no_backup_fails[Display]": "b120b6a914412ad038de0ebae75e1d3b58fc348f26d6254f6cfcb60a229c95a4", "T3W1_en_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "8b5fd7946c9c5218c2aebbb12cc78b734fed3e76b9ca070a7124973ef391ad59", @@ -40286,9 +40286,9 @@ "T3W1_en_test_msg_changepin_t2.py::test_set_failed": "eb562c9dae8fb623488cddc6c242b2e2c532dfe9c080bb86b2959049e589f89a", "T3W1_en_test_msg_changepin_t2.py::test_set_pin": "2d01e9102afd3aca2a0749230b156828b11a4996fe52c49fce40a6fa071e3fd9", "T3W1_en_test_msg_delayed_ack.py::test_abort": "78a1810e94b2870feff593e6fe5c1a7fe71077573400180956de31cd3e303b2b", -"T3W1_en_test_msg_delayed_ack.py::test_backup_no_acks": "983ad6a9fcb91896f7321a0f87a40a663ffcfb7859add9021ad57ce80a07d0fe", +"T3W1_en_test_msg_delayed_ack.py::test_backup_no_acks": "af572336f97b399f513ae7404b324e4533be5d62266abbf03eaa009e00cab563", "T3W1_en_test_msg_delayed_ack.py::test_delayed_ack": "78a1810e94b2870feff593e6fe5c1a7fe71077573400180956de31cd3e303b2b", -"T3W1_en_test_msg_delayed_ack.py::test_setup_no_acks": "17d293a730e193157d7e53091016930d2b65f0a2c3ec0b4fa704bc76dd68ea3b", +"T3W1_en_test_msg_delayed_ack.py::test_setup_no_acks": "d5870b4d38a0db998539d563e07020036eda834b3ee7d336dcb08ae2a91de5e1", "T3W1_en_test_msg_loaddevice.py::test_load_device_1": "6f931fe0947718c1a506348a9f8f4d3f8255b6240803cd0e2e36b8e4a26147a4", "T3W1_en_test_msg_loaddevice.py::test_load_device_2": "7ad122ad47c99d25489e8dd291d85f9032c1aebcb6afd876bfe0ab5e868b0472", "T3W1_en_test_msg_loaddevice.py::test_load_device_slip39_advanced": "6f931fe0947718c1a506348a9f8f4d3f8255b6240803cd0e2e36b8e4a26147a4", @@ -40323,10 +40323,10 @@ "T3W1_en_test_protection_levels.py::test_unlocked": "3a12bd0346756ba61ea33ac6d37a900d125b235944b225b143cb13e51ab676d6", "T3W1_en_test_protection_levels.py::test_verify_message_t2": "ae647b87358a37b18e1ae9210b5995d32f1ec7650b2e4a824d20454af6bf0fc3", "T3W1_en_test_protection_levels.py::test_wipe_device": "5f69916576b65e4d352455d955251122b5d0dad8ecf55ee053983de7d42028d7", -"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "5c5e338cdadaeab2961cc0c8359d9c1cd6b3dc3133c899b8696e8b40189b425a", -"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "052f2574715d34a3cb5ff21374ef876979d54adbc98a2475a07b0da46dfea609", -"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "052f2574715d34a3cb5ff21374ef876979d54adbc98a2475a07b0da46dfea609", -"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "7a25697af0f53a26995799b84b4786ed806d47d55e3cc801b9134a28ba2c69e3", +"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "51a19b09f09f6a0d801834038e31aec6fe968fb07024e4d18692725380df5963", +"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "183772d3aa3c0dda485a5b8065e31910f410d02d36b7584d8214b8b64c96d263", +"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "183772d3aa3c0dda485a5b8065e31910f410d02d36b7584d8214b8b64c96d263", +"T3W1_en_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "6c702df5546811d9640354353c37b4fa60cff1a41f6a692dd4e50ca403fab6c2", "T3W1_en_test_serialnumber.py::test_cancel": "8f3ba246d05b9b084027bdff7da34b7f867632e413e36f3a2cfef703a3f50e63", "T3W1_en_test_serialnumber.py::test_same": "0ca28c86b20a8b4aab5ba2406d3796461aa538e3bf0ed297cfbca1a215ca6164", "T3W1_en_test_session.py::test_clear_session": "e2d0124ba07c71ac846340a1cd04f1718f030b1128124708c171515dd4c8a293", @@ -41761,34 +41761,34 @@ "T3W1_es_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "64c5906c9d8cce883654d69ad632ffadd0abd129b686683fdca736b355a59424", "T3W1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "4bd54b11d70f6039772dcc9990d9ccc609f53a36e8bed73b9339f939510e33fd", "T3W1_es_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "64c2f68c68387d6b72ccebe90398065984dbcc4dc1f1a772493d570371a88399", -"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "213db5dd0090c18728e5a0a1703e9785b2acf443ff8562fac2119e9704c48318", -"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "5a7315dfb6d1625ba0f9ac503c6c75957bec6400ec895127a3d5ef99c7570f40", -"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "79b987c5f001ac7b1af9d37c0a2d22d2e0860334ed30e6f9e3b4e141c8b012ef", -"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "7f3469fd15f5de943076137286071d93d2f7aca73dc20e79823f3361d859777b", -"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "2180efa1edd529644c1ea8a5aa5a337951e45f93fc1a448d8c012d71ef5621ec", -"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "bc83070c82b6297e7110c7e5062515520901b42575cc6ca7df0402d3fff97556", +"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "5ea8486b95827c2c5ef1ddb89f360f61eee0c29787daadbc105903ba9f1eae5d", +"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "99aacc2dc22f8c90bcc89d8bcdb46f2d8675c9c3770f96552d17530197883f63", +"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "85677ea13e3c3334eac61e0e06091067df965fb88365b9c23813a083139c97c9", +"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "ccc1c33a1e3fa5135a83b3bf2ac7a2773911ea5f12f529ffb2d7141f02f78735", +"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "a2cc828ec5a0301c836a7aed25f89623f5ca552b379fbb84f1e6c33a514d7264", +"T3W1_es_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "2c5077a4a244bcafdb8a49446c4960cf58ec7707192c229e0af593c39930e195", "T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "ddbd1412a9f69aea1c41c375a2ec0647411a0e487ec5c1ee55e24505dfc34e29", "T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "c61239df4c656b9fc394000829bb97b45f7b851ed6ee02863afddf9263e27844", "T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "0c8ad624d6049084d20046967c4ca9c7889f691e229b85e6623ed085773c0e02", "T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "c61239df4c656b9fc394000829bb97b45f7b851ed6ee02863afddf9263e27844", -"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "1fdae176652c61d156755432d1ba6b3271da33a2c2d3ddd0cfb6f06bab30fbfc", -"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "1fdae176652c61d156755432d1ba6b3271da33a2c2d3ddd0cfb6f06bab30fbfc", -"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "4bb66b482d58cebdebaa69e31dd53be8ff961d651ff54728f71f3276fed01bb8", -"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "4bb66b482d58cebdebaa69e31dd53be8ff961d651ff54728f71f3276fed01bb8", -"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "5509255cbba893446d9db08bd04d8dabdb26a474a53c645ab0933bd214dbe9b9", -"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "272f00312febcb18657ecbf31a8cb69d72c71ccc76f920e9722c154b7dedb50b", -"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "d4682929b4c0310a79129e53251c2a11c4fff1564a744dcbee9ef1f1d01d52da", -"T3W1_es_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "431a7eaee1746042f625d528d5810ae892567f950e3ef9ce52c633b844276cf1", -"T3W1_es_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "bb6688fb64352042b4bf43dd88d92f56d478fed22419e110f60850970abd85f9", -"T3W1_es_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "aa23eb25ec3852b3a9725b82c1aaf817fb60bfa531720c70b7df233ca51431c9", -"T3W1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "8371bf15346b4d722d56260b8a0ed0c64e1531588c4d5d9795a243e60ac340b2", -"T3W1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "8371bf15346b4d722d56260b8a0ed0c64e1531588c4d5d9795a243e60ac340b2", -"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "c4c0d843ebd22445b5dde823eb2ddf3f2aae3cc858d8a3655e7d790fdfc3c510", -"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "c4c0d843ebd22445b5dde823eb2ddf3f2aae3cc858d8a3655e7d790fdfc3c510", -"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "aab21510aa0c1ccbc080e54cec5953261a287611f84262e1636e8554ad4fc3dc", -"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "aab21510aa0c1ccbc080e54cec5953261a287611f84262e1636e8554ad4fc3dc", -"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "95dde10a5b6ca0633fb56bd87cbd6ff5a6affb3be05624c59b3bdc496be044f0", -"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "95dde10a5b6ca0633fb56bd87cbd6ff5a6affb3be05624c59b3bdc496be044f0", +"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "92109d11eb7c6332312fc524706c7b78f0313fa91f07b5c4c6680f1e714f760d", +"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "92109d11eb7c6332312fc524706c7b78f0313fa91f07b5c4c6680f1e714f760d", +"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "758f54833062fb1506650bceee58b8f6176766cebaeb49fdab2089e64d880a3e", +"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "758f54833062fb1506650bceee58b8f6176766cebaeb49fdab2089e64d880a3e", +"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "6f16c46cf1b35e4aa55bab5031e3027443c97f61bf2c7bc48adb8c7ad07aa5d1", +"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "0d0959b9fc47f6de5fb23e6e7be8dd5c570f41b9af4e8a29743bb50ca0533733", +"T3W1_es_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "6c800b2edb8c7adc249f78a8d41130e105e9cddf0bc2f7e514af6e86c7d01030", +"T3W1_es_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "85d8124c15f467f3fb7ad17687248499a33bc617b55975b0c4db8587ddf4aa59", +"T3W1_es_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "39afd05f6acf02b1a751e8daccffffb03c4624db9b04503c8abfe00b073a8b60", +"T3W1_es_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "cdd6dafa1a4db00fe94fecedce188ed3296e87729001d2f227bcb9b365733b1b", +"T3W1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "eee7f351c53dd81fb1cd0915dbee0bf29ae815af1a1c3f005ada9269f88950e2", +"T3W1_es_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "eee7f351c53dd81fb1cd0915dbee0bf29ae815af1a1c3f005ada9269f88950e2", +"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "e62d872699bcd9ed0271773ea8eedad5a6fa18d75323484a09e2cea4de3de6cb", +"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "e62d872699bcd9ed0271773ea8eedad5a6fa18d75323484a09e2cea4de3de6cb", +"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "ff6272d9ff60dc3d00c39fd6fba724218e1b0cd64fb54b1e8356b154e2b46e9b", +"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "ff6272d9ff60dc3d00c39fd6fba724218e1b0cd64fb54b1e8356b154e2b46e9b", +"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "5420923c849c644da658bab543d4208f7966b465f134ce48d080fe1a706b5d50", +"T3W1_es_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "5420923c849c644da658bab543d4208f7966b465f134ce48d080fe1a706b5d50", "T3W1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "3c0bf855598218371978b1b628ed78ef58f44b304449ac1e938c7a52d36f2623", "T3W1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "d67a88016d8edc336e254d4b20bd22bc25f95074dd0678245eceba16f4382376", "T3W1_es_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "53390b8b3d7536aa5f2c0169612316c496420d16ed83f4ff1052eef4b05844a0", @@ -42091,24 +42091,24 @@ "T3W1_es_test_msg_applysettings.py::test_set_brightness_negative": "ddbd1412a9f69aea1c41c375a2ec0647411a0e487ec5c1ee55e24505dfc34e29", "T3W1_es_test_msg_applysettings.py::test_set_label[empty]": "7a51625c1a53970c42494cb7d7498149e76e710cc3110071e1e8afbf7f370091", "T3W1_es_test_msg_applysettings.py::test_set_label[max_len]": "8a7833bcad6a5323e006e132e54064ae6d3946a72d2caec96e3e48a6019a2cb0", -"T3W1_es_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "cd35705925823e642e6c5a19b2c1b8ad971c0d6dd6715e2b051c23e057ae6d66", -"T3W1_es_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "cd35705925823e642e6c5a19b2c1b8ad971c0d6dd6715e2b051c23e057ae6d66", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "058d4e31c4c9abe2184ee2cf521a92f58be92345f560b53e4cbd9416658d0959", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "058d4e31c4c9abe2184ee2cf521a92f58be92345f560b53e4cbd9416658d0959", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "7895ac6dc97408052ebd6468a7521422a9a715d620c1d589edfcc525b275f31f", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "7895ac6dc97408052ebd6468a7521422a9a715d620c1d589edfcc525b275f31f", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "81d67505f93e73d7ff2c011f6e7ca4716a16767f02184e94810163b181292772", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "81d67505f93e73d7ff2c011f6e7ca4716a16767f02184e94810163b181292772", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "d8ebbab8baa73314a3a5fd81c9992c349dd9799cb50a9c3a61477a5d70a941cf", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "d8ebbab8baa73314a3a5fd81c9992c349dd9799cb50a9c3a61477a5d70a941cf", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "43965c7561030416f9978f6502f5836275cadae84ad808d469452aa314490f6c", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "43965c7561030416f9978f6502f5836275cadae84ad808d469452aa314490f6c", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "2bed8c1ce09b8bec0a7f0248f51455d073c406ac8d9af4086f8039e59c0cf8fd", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "2bed8c1ce09b8bec0a7f0248f51455d073c406ac8d9af4086f8039e59c0cf8fd", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "310d18e3643dfbc412324d39fb782e49f45b6ff690e1a2ba3a5d79fc87c2cc00", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "310d18e3643dfbc412324d39fb782e49f45b6ff690e1a2ba3a5d79fc87c2cc00", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "12442664d8def85fdc15a134b159e677ad39e6a0de290dfb789cd56511d315ab", -"T3W1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "12442664d8def85fdc15a134b159e677ad39e6a0de290dfb789cd56511d315ab", +"T3W1_es_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "a3bd2d4dfc4030cba749ac8de7ed36a1ffdd90e096549ab66358e14b8fb4effe", +"T3W1_es_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "a3bd2d4dfc4030cba749ac8de7ed36a1ffdd90e096549ab66358e14b8fb4effe", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "7ed06632aabb4992595aa99862bd2f78cf2d791935347d9469b4af1873e0e211", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "7ed06632aabb4992595aa99862bd2f78cf2d791935347d9469b4af1873e0e211", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "8695bba48b643e07d69e7a411a47e9945a598b12000b2e7398fd976b9344969c", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "8695bba48b643e07d69e7a411a47e9945a598b12000b2e7398fd976b9344969c", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "f5b364160b629a83c8bd36cc5d3a1892e41dea3adc511800f0afcf8a540529f7", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "f5b364160b629a83c8bd36cc5d3a1892e41dea3adc511800f0afcf8a540529f7", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "d87f65b6a60851c818fb22d3cbfa3a46e31e98f5e71a2f8b4dc9419a7ccdce2d", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "d87f65b6a60851c818fb22d3cbfa3a46e31e98f5e71a2f8b4dc9419a7ccdce2d", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "5f018d10351b8b368b0f309be9ec1f00b613944e9421efdce250af9c129a3195", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "5f018d10351b8b368b0f309be9ec1f00b613944e9421efdce250af9c129a3195", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "bf09bc86248a8d42f49a20f2a7d427285b100519d1bb52c9b26544ecb35e51cd", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "bf09bc86248a8d42f49a20f2a7d427285b100519d1bb52c9b26544ecb35e51cd", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "9e8614cc5e21db91114f305ffbab92687c574dbd864e81d44788c4772bc7da32", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "9e8614cc5e21db91114f305ffbab92687c574dbd864e81d44788c4772bc7da32", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "a4f403e82b689c0c48d78636d83018799f16624ee294aefd97b7661f93c64cf9", +"T3W1_es_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "a4f403e82b689c0c48d78636d83018799f16624ee294aefd97b7661f93c64cf9", "T3W1_es_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "493a5e69685f6487757dcd424aeec4f43409a4793718145622f0827ca6bd12e8", "T3W1_es_test_msg_backup_device.py::test_no_backup_fails[Display]": "ee342d1baa6c0d4392473cba41e44accf3a72593f6b6d4d36e2307cd44e028a5", "T3W1_es_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "5b8e716140f01abe95b31e0ce2d9ee6f98ec33f818aedb83026cb41e067e4dc6", @@ -42125,9 +42125,9 @@ "T3W1_es_test_msg_changepin_t2.py::test_set_failed": "3bb9f4432353d54282d0d6b5679f2a8f5b2c609dfb984444d13e89fbef95ec2e", "T3W1_es_test_msg_changepin_t2.py::test_set_pin": "85527b34344980dd2568bc79df26cdb29b59a1d7513389a4666bd1ef53c58104", "T3W1_es_test_msg_delayed_ack.py::test_abort": "c9e457071e60238c5a70a37bb00a1971def465ed8353ce7a8e2d3e36eadfe340", -"T3W1_es_test_msg_delayed_ack.py::test_backup_no_acks": "f54817439890ac72f3db8c0dd355abc9ed056c33d20b07315a003b0f0e8f8b0e", +"T3W1_es_test_msg_delayed_ack.py::test_backup_no_acks": "69e7991620a64eeeb71f9e980341434d3afead3b7fb95b09d0df135390b40566", "T3W1_es_test_msg_delayed_ack.py::test_delayed_ack": "c9e457071e60238c5a70a37bb00a1971def465ed8353ce7a8e2d3e36eadfe340", -"T3W1_es_test_msg_delayed_ack.py::test_setup_no_acks": "75145cbdab76f466d13f3d4e3dfd687453e4592ab5dcbf59d1795aeacf565e42", +"T3W1_es_test_msg_delayed_ack.py::test_setup_no_acks": "c6749ac9c4d45d770c56c6c6a534ddeb37130d909602cc96ef2e93689f7f5f41", "T3W1_es_test_msg_loaddevice.py::test_load_device_1": "cbfdc13aadc99e5c7975562e8769b14f0d7887bded5ea1b21c6580c473a3bf4d", "T3W1_es_test_msg_loaddevice.py::test_load_device_2": "39c30a65ae11e2966771c50fe8eb463ec5a914bf9d08ad6fe608321b1643dbd0", "T3W1_es_test_msg_loaddevice.py::test_load_device_slip39_advanced": "cbfdc13aadc99e5c7975562e8769b14f0d7887bded5ea1b21c6580c473a3bf4d", @@ -42162,10 +42162,10 @@ "T3W1_es_test_protection_levels.py::test_unlocked": "1ffa36b2ed5efe44329b85a7cd755651fea910e36ac70645f172cd64eb37a0a1", "T3W1_es_test_protection_levels.py::test_verify_message_t2": "732e4eee2b4a802cca8a7fdb4d0fbddbe5c2897dbf6d22acda51fdb638b7a5f3", "T3W1_es_test_protection_levels.py::test_wipe_device": "88f2aa0391e8874062773dc2cd1d8fe58287869d003e2b27e296de8fcece64e2", -"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "48a66355f3b4fb5d5d08060a6f8a5cf7bccbd5033cedd69dac75185b7e91cce0", -"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "d2f98f4767e3c6b5ac1118b4482e868255da6307ecba30229ee08b92cf15a94b", -"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "d2f98f4767e3c6b5ac1118b4482e868255da6307ecba30229ee08b92cf15a94b", -"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "71b07b4f8a9f4f34b5b64e3a096dd52ec77a606adaad2843de41d1c5600de458", +"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "5fe190de1653d0f8e11609181e3dda800f5df42f0f24ba2bdf4f27b512d564a4", +"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "54311665a0fcbe0ed67d2aa8f7c2369031cb15af2c6e5fb565686df70ee0484a", +"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "54311665a0fcbe0ed67d2aa8f7c2369031cb15af2c6e5fb565686df70ee0484a", +"T3W1_es_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "f93bd8c76a7db5bc9ea075acd87d540c85e0f598fe0e3d803890b86ed9e7785c", "T3W1_es_test_serialnumber.py::test_cancel": "d890b16a9efa36aaead51e83be1b8bd98ba1d2b7dfd580c5fca6cf2b1834e23c", "T3W1_es_test_serialnumber.py::test_same": "81df66b8d01c782b82368fa5b176948410eef4b1f26f9d4b493c2c2c95784680", "T3W1_es_test_session.py::test_clear_session": "13f95fffbb185b8b670cd948579d8691f4684c7ca80b6769a0edaa8d42a6640e", @@ -43600,34 +43600,34 @@ "T3W1_fr_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "6fefa985eb420e56776e413338a7c486a74dcc4ce488756d436e291ae92bc436", "T3W1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "90b7adca35af7c8b5909c623d1986228c16112813c028e804038543b5703cfc6", "T3W1_fr_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "ff8a554cd1086b02656b6780f6a0bb779448582b39c7a338c6627b13c0623aaa", -"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "ff3244c1f69f2c2c9323791dc929adad02488ba725c22efb4c7e3a2fe687c59c", -"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "6b020d0a836dd35bd61f2ea2580ed92dce16af58f50139b88b7613fd8f631d3a", -"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "a1c8d4502217c098ea3ebea1ecd4dba477b84be0d759a7a62150cdbcf28fde3c", -"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "619031d02a0b6c8a365f75fb2c2c2939d8871d00c4e5ba4b1066f2182353cb49", -"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "4ad9338acabb9aea88273f4de06066927035bb033901d72d94523f9b67df02df", -"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "2807a65298c5ab1c11c4fbbff1281dcf094ef6fad1f2b654a5e79924534e0a0d", +"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "0434d88f772aca8101823aa2f05e9443d1ad1ba1a6fd157cd3c5a43efcd2cfe1", +"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "34f0caec07d4c73f555c8b088cf530a1eeded63d7d7c29abce260383237d2056", +"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "2d5d57d6a20c9151b600845e7afca1304317ccec369beaabfb61d7f9396f4f84", +"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "4dbc9f4b7b660c1262374faeccb5d0c8bc265331fae48cef4015727ea4cbdefe", +"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "aea919103afb160eb39996572ba18f938ee469131a369fea360d09fd6aa37b4d", +"T3W1_fr_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "69ff2ceee6cd9890e543384011c9dc7928767111d20396e48b51511c3afc1cc8", "T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "a392ca1dea666647fb2d6edfcd90e4e3cad6ab0e294ca85cda7db478214a6a81", "T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "9312b84c88aadbb15dd01b8313fff93df428a27c8d0483ab641b1bcb5d1e903b", "T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "2f8d87b5c3bc7eaa51b69c7a47f9147c9dc7879c69b8a78c5b5f4318b3792998", "T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "9312b84c88aadbb15dd01b8313fff93df428a27c8d0483ab641b1bcb5d1e903b", -"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "4b7787ec16f031f0d6a663c74b188e02fb54be4d766f5ef2743a0d36be4a723a", -"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "4b7787ec16f031f0d6a663c74b188e02fb54be4d766f5ef2743a0d36be4a723a", -"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "17f451f3f6480d116ec187775bcdfed4215f14553417f6974a896361e3506263", -"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "17f451f3f6480d116ec187775bcdfed4215f14553417f6974a896361e3506263", -"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "d4c76f3502eec074cfd3384755661626ff85b372bb0a5dcd6b8ab2b8e58be17b", -"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "1740c70b0fbf795cd7209d1c42e2e9712db15a925a54b06bc8fab7910fa77bf4", -"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "fbc1a2452d9f322c739f9a9f806da864c6bde80850f96d0d4abe0e409c122d1d", -"T3W1_fr_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "925ab8210e4b7e4663a3c97ac8dbe5f69a8416e6bf6d8ce8c5125696d86cff38", -"T3W1_fr_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "9858e4d7bca1ae5a908cc95d2c802fedad9220ed98ad28567bec8d191648d575", -"T3W1_fr_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "fd0d8ee3aa374abd12c4e165094c342ca7b5281a514715b9a19d1194a54cb867", -"T3W1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "c5c834521c513ec0895ee11cbd38a7a1ab835ff02c9ab8f006dafe952bafb8d5", -"T3W1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "c5c834521c513ec0895ee11cbd38a7a1ab835ff02c9ab8f006dafe952bafb8d5", -"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "3c3cec0b0eae530c0ebb81ddd87f71671568ebc119572f8483a6c0ae88a9a17e", -"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "3c3cec0b0eae530c0ebb81ddd87f71671568ebc119572f8483a6c0ae88a9a17e", -"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "ec50804e9d0e961edbc429ca6d6d9cf01c0b866fb461d1acba03744654b066fa", -"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "ec50804e9d0e961edbc429ca6d6d9cf01c0b866fb461d1acba03744654b066fa", -"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "5475947d416d0d7844f86e1b902d9a970e9f23022c6b3f565696c8f87c0828b6", -"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "5475947d416d0d7844f86e1b902d9a970e9f23022c6b3f565696c8f87c0828b6", +"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "11eb5e33bb78618c3184d78ef385d59390b50f23e5a5637ef61c62dcc78367d1", +"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "11eb5e33bb78618c3184d78ef385d59390b50f23e5a5637ef61c62dcc78367d1", +"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "9f6f661aa2415ccd2cae89fa5fc9cf152075e95e97efd1750ba2a6d40fd1d8a9", +"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "9f6f661aa2415ccd2cae89fa5fc9cf152075e95e97efd1750ba2a6d40fd1d8a9", +"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "f1f14f80b2d093021fcdec8bf0723016dac0dc6e03516d15009998051edf58ee", +"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "417a28da7bb98aec63d1c3212329e8ebaae90ed4ceaa9f64baa323f7a3dbd01e", +"T3W1_fr_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "3d173dcfdcfbe4997290910b973f85b14ead9cd2815cc9ac81153d2558e54f6b", +"T3W1_fr_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "50d0f098263cbaeaaed987797d295b9b0b562333458e848d858b8e80dcb908f7", +"T3W1_fr_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "84c51dd2539c159fc3ce7cdd2653f23ad8ac88f35a0d8fdc1b838e48f3bc56a5", +"T3W1_fr_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "dfa340346fe336b15a9c100fb4519b533973a901a6e4fa829a6cd60ee9249df4", +"T3W1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "4fb79934990ad3b7e7818761bf535890152dde86bf8d743a7d050b605c508d5b", +"T3W1_fr_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "4fb79934990ad3b7e7818761bf535890152dde86bf8d743a7d050b605c508d5b", +"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "5f06efb8e89be03796c91e27e82142f05597712558ed08b828b63cb8236af426", +"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "5f06efb8e89be03796c91e27e82142f05597712558ed08b828b63cb8236af426", +"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "984addd9595e27e0ed2809ee9e71913d1b9887bb8627eda2c9768e87df126a2b", +"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "984addd9595e27e0ed2809ee9e71913d1b9887bb8627eda2c9768e87df126a2b", +"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "262c420bbb6a9926f849dc783f580cfc048244328dc7636ed735fef68e3d5028", +"T3W1_fr_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "262c420bbb6a9926f849dc783f580cfc048244328dc7636ed735fef68e3d5028", "T3W1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "ad176bf0ea3b3695bc1b2fd7a149760d2ea8165a97fcb9f9e278e80943099b91", "T3W1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "9e60943c63cb679eeff9b8addfe1ddc285cf0e38f5b259aed661b89be23d4a1f", "T3W1_fr_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "6fc1c1d2bef1dcb9929facf5576242df37938aa99ec98e308f0f4dda48d35fac", @@ -43930,24 +43930,24 @@ "T3W1_fr_test_msg_applysettings.py::test_set_brightness_negative": "a392ca1dea666647fb2d6edfcd90e4e3cad6ab0e294ca85cda7db478214a6a81", "T3W1_fr_test_msg_applysettings.py::test_set_label[empty]": "8a1f26776605e18a6b15aaef757de7557a1d04fd1115cbcdb360ac71856e060c", "T3W1_fr_test_msg_applysettings.py::test_set_label[max_len]": "d6d266b5be5e05b0d1b72729b4dbcd082a11a47c6dc75147ccd22fb7f27571dd", -"T3W1_fr_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "f6c8e9aa53d8378c9b05dbc07e75e7db3d1ac7b9edf80bae7ddc8bca8eef5c37", -"T3W1_fr_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "f6c8e9aa53d8378c9b05dbc07e75e7db3d1ac7b9edf80bae7ddc8bca8eef5c37", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "ebe806157ca96f7d3066619c6ba65c4f1f728d60034252d997ffe708fc06f538", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "ebe806157ca96f7d3066619c6ba65c4f1f728d60034252d997ffe708fc06f538", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "0f2a85a5a93dfac36ed35d25937a61cac27267dbada6158f45f9e5f0fb218fa3", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "0f2a85a5a93dfac36ed35d25937a61cac27267dbada6158f45f9e5f0fb218fa3", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "2c5758c9b1105f7bba552a941f06ff62cfba67223eaec89c414b9f41fd66ce23", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "2c5758c9b1105f7bba552a941f06ff62cfba67223eaec89c414b9f41fd66ce23", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "f6ab85b4336bb2cf71bcae84c5efac1deeba26cc76dc2556c75f9769bce1d0f1", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "f6ab85b4336bb2cf71bcae84c5efac1deeba26cc76dc2556c75f9769bce1d0f1", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "3637cfadae64447e25479e2145e53b44fd0e3730f23b23516c262e0ce1ac71f0", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "3637cfadae64447e25479e2145e53b44fd0e3730f23b23516c262e0ce1ac71f0", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "9b5faf71b73c88b638ce32ccfbce574481e1a82986d3bd50bfd28ed4c823a13a", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "9b5faf71b73c88b638ce32ccfbce574481e1a82986d3bd50bfd28ed4c823a13a", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "254f36ccb21fcef052810e885c409f6f6b73113c12e8f473b0598573e65eee79", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "254f36ccb21fcef052810e885c409f6f6b73113c12e8f473b0598573e65eee79", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "718fb92ac5be39ae22278961e5e36a6e20eb449bd82c19ad3866de9c0edbb68d", -"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "718fb92ac5be39ae22278961e5e36a6e20eb449bd82c19ad3866de9c0edbb68d", +"T3W1_fr_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "8e6e8256a29685577e469f40694a1f70ac039e34196e16629a6990dd2d438eb5", +"T3W1_fr_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "8e6e8256a29685577e469f40694a1f70ac039e34196e16629a6990dd2d438eb5", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "fa752df8766f1f3d54abc96a9fab1000a1c504e2386c60b12d347d0ee17b4a98", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "fa752df8766f1f3d54abc96a9fab1000a1c504e2386c60b12d347d0ee17b4a98", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "11777ebb9cc4d60396232a5b15b149e3ea3da4784419f845c93830c8c675b762", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "11777ebb9cc4d60396232a5b15b149e3ea3da4784419f845c93830c8c675b762", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "7aa6baffd0b23aac1a3acfd8b4462c8231d569e599c919288b4ac330916b48e8", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "7aa6baffd0b23aac1a3acfd8b4462c8231d569e599c919288b4ac330916b48e8", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "56069b427ec3387b2d63cdfa9ddbf0401697f57052c7d11bf3ae0b140c32e287", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "56069b427ec3387b2d63cdfa9ddbf0401697f57052c7d11bf3ae0b140c32e287", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "1df0b15d8949211ccf21d8a3e4bd69503cf171b415fe07e47835de0199018e6e", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "1df0b15d8949211ccf21d8a3e4bd69503cf171b415fe07e47835de0199018e6e", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "45aa7bfab602373198006ec950c368559ed6fa2fabd5029e4d6c655533cad54d", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "45aa7bfab602373198006ec950c368559ed6fa2fabd5029e4d6c655533cad54d", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "dbae80d3ee3eda16a41c6acebd5504e0589a2cbb542ae60ae3913a9c0d627d41", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "dbae80d3ee3eda16a41c6acebd5504e0589a2cbb542ae60ae3913a9c0d627d41", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "4acffba7b2c44987c9d513f935fc0948e6b25934d831b2cae5fa1f12f14cc40b", +"T3W1_fr_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "4acffba7b2c44987c9d513f935fc0948e6b25934d831b2cae5fa1f12f14cc40b", "T3W1_fr_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "12ad1b9bb8194506620a1e8bbc9342be2b023b4d1eecdcfe5d9f43b567a31eb9", "T3W1_fr_test_msg_backup_device.py::test_no_backup_fails[Display]": "39d760337d1d96d0cc0d2ec3b62b52c551aa64feb9256e709fa552736ac99806", "T3W1_fr_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "286dd2cc6446d5e5f7f90fcf39fdbddc684cc3dbb0e41214cc4e21aa9536f745", @@ -43964,9 +43964,9 @@ "T3W1_fr_test_msg_changepin_t2.py::test_set_failed": "b3aec32067fb4d75043c667162e13ac8f0bae691434636ca936dd3909b124e0f", "T3W1_fr_test_msg_changepin_t2.py::test_set_pin": "92366729eed6eda1377c37da3d59d5996cedd4c7dff8141799c4a67f63502978", "T3W1_fr_test_msg_delayed_ack.py::test_abort": "a672d252b0d6c3099b57456ca2c10ca1fa798019b3e3e38d635b9c8b8396f6a6", -"T3W1_fr_test_msg_delayed_ack.py::test_backup_no_acks": "4e13d2343e7bc4dcb4d485a2191e170f39add695a9832fed348d95ef07c4caeb", +"T3W1_fr_test_msg_delayed_ack.py::test_backup_no_acks": "af5dac1205ae2d47325b197a8b147d953d43dd387ca5fb895e295cf10a11a06c", "T3W1_fr_test_msg_delayed_ack.py::test_delayed_ack": "a672d252b0d6c3099b57456ca2c10ca1fa798019b3e3e38d635b9c8b8396f6a6", -"T3W1_fr_test_msg_delayed_ack.py::test_setup_no_acks": "86c658ea5cdcc27518ba692b91f0daedc5c5410c92fe03aa8665d111de1f6a81", +"T3W1_fr_test_msg_delayed_ack.py::test_setup_no_acks": "b893afd7af1f1e45f7352ab5be57891fe1107941a73a3e9391b504ea8c0470d6", "T3W1_fr_test_msg_loaddevice.py::test_load_device_1": "e1f191b3c0b8dd0c5eac06084d965ebe0c82513c490afb83d2b1b8a33bf11e5b", "T3W1_fr_test_msg_loaddevice.py::test_load_device_2": "9d2371885ad664be52562459650ad24b51402e26e1acd8a69cb24214842309bc", "T3W1_fr_test_msg_loaddevice.py::test_load_device_slip39_advanced": "e1f191b3c0b8dd0c5eac06084d965ebe0c82513c490afb83d2b1b8a33bf11e5b", @@ -44001,10 +44001,10 @@ "T3W1_fr_test_protection_levels.py::test_unlocked": "f73424c640797226f3cf3d93f6ad58fde9a9a1147ad7d604ec49596ffed16f89", "T3W1_fr_test_protection_levels.py::test_verify_message_t2": "da591dce9a6e46f698ba9cbe88b3740c15a5f39af3fa49fdb7a178b42e58773c", "T3W1_fr_test_protection_levels.py::test_wipe_device": "a952e041f4cbf5382313d12bfad450c008db3bb0b08efd99a162d0a7c524a203", -"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "5e0d9707626c792ee074f023d15e7cf7439a91a0ad396c0657f87911d0477c99", -"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "e7a916bdb7277ca9d3c2e0fd1e3856c360e651eb4ffaf4b1dd7b327059755e50", -"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "e7a916bdb7277ca9d3c2e0fd1e3856c360e651eb4ffaf4b1dd7b327059755e50", -"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "65886e35ee0d990832f6366705d40bc4e591f1aa45e2814140c7dee1b5f4a37d", +"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "858c54ad629b714a71a80350f5fb7492ce2abd8154da6b19234853154b77b685", +"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "c79f0c1eaef37e4297bad98c3f28e8c4d9e024907a896df3fe014b61dc04a043", +"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "c79f0c1eaef37e4297bad98c3f28e8c4d9e024907a896df3fe014b61dc04a043", +"T3W1_fr_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "1f15021d3466191216da31f95b7fb004472d617b5fc5b97b5fb18b3a852ce85e", "T3W1_fr_test_serialnumber.py::test_cancel": "7132356d521f88ff9c16edeb34b499f85c27106c4b52d2cef968cce87bf3a3db", "T3W1_fr_test_serialnumber.py::test_same": "5705ae30b7811adfce0c8c56a32198527ff7c320a80966aeae2198f99bda6b50", "T3W1_fr_test_session.py::test_clear_session": "85c873780390e04869d32a5c7a8b07d997d3f5db111ba45debebbd0579e0aa7d", @@ -45444,34 +45444,34 @@ "T3W1_pt_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "6279305f1cda2197cfb0082d1dbabc56a4b175955d1c8ce89d363a2e05f15f34", "T3W1_pt_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun[Display]": "b7b1a5907284e428e3b66addd8cf5e5591314ba34dadcdd30c9a000271eb9dca", "T3W1_pt_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun[Display]": "e951790f5aee31e9fb0c6aea2b986a4d297109c0774cd7742f6b51a99cc73af0", -"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "f9b3c65240c5f8e95f47df98cad512e231180383ae50962ee4dd3bf16a5b775f", -"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "39501d6e4c53202440a792f8f0c7f7c43630069e6120358132377f7d64435df7", -"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "93938ab6615127dd608567bac507b5b33129d17184acc0f83183ac3f5f61994b", -"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "4f107986ae404c87b68a345cd3cb62291aaf011a109d53ef001cd04e6acd5905", -"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "d8652ce2c84bbfa10787b8db7de814388db3ab5ef1e3100643432fa2847fec31", -"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "1b66eda60aaff49d16a46ee0a32ac89e6c96d747b82b8d7d358bd6f6637c185b", +"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Bip39-backu-b86ee80b": "31f5a89fd4fdbf517e7eb8799a6bbbb63dfe140741beca7cef8d7c624d1fc169", +"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Adva-ad86bb51": "b981a95495a99b6b8b20b5a3080a5c7183aa0cad2fe26248807c8f4e9bc331be", +"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_manual[Display-BackupType.Slip39_Basi-a506aa60": "dc36e809f98e568ec254174aa5b404cbe05ea5c74abfa0583fed8124985317c6", +"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Bip39-backup_f-c9bf60d2": "f02d75dd1bc2377bb828531c0e99fcbd7846bb44745d1daac04f268a6c6adde3", +"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Advance-14f66ed1": "4dcd5e49f24c1f4f941564caa5c7946e501276db9f852cca6062f225672be56f", +"T3W1_pt_reset_recovery-test_reset_backup.py::test_skip_backup_msg[Display-BackupType.Slip39_Basic_E-38f118f4": "c6af28b2c8517e7bfc12cb60664216c2b40c0a1e503b045d4017ea243a4be697", "T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "6fb22dca4b252028ed3f91db1fb746e30d12aece0a74e1bcc4abef605a3a9026", "T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_entropy_check": "f7ef8f684b808c777606c044082713602a39bbd3071c8b46e4620eaafd31beb1", "T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "7353c232d8c2d4f946f475a52a0d35432718640a98cc24d7df0889822dcc489d", "T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_no_entropy_check": "f7ef8f684b808c777606c044082713602a39bbd3071c8b46e4620eaafd31beb1", -"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "5cc1ffefe8f8624d4c811ab259cdd0c26878fc19318e57cd2a2ccf5f6e559d65", -"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "5cc1ffefe8f8624d4c811ab259cdd0c26878fc19318e57cd2a2ccf5f6e559d65", -"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "988791d88c94c8e36b930f2c18f3183ddf0710c58c59de4f5ee2360c426e7331", -"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "988791d88c94c8e36b930f2c18f3183ddf0710c58c59de4f5ee2360c426e7331", -"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "e6a9ea999cc9cc6886f0604da1b981254e738315239fa4714edfeb2d6489284a", -"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "a698bf393e89917e966540566571094e9fb5189cafcc23de6d1f647e35842469", -"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "14a0c1e270dd160d923078c15a84f9565972971cc0899f24f826a00ccfa8af51", -"T3W1_pt_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "5ffd75e28a9609f797c49260b4ecfc6e31b4ae4eff95a4c36e24f9b7a9f78f3f", -"T3W1_pt_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "448d6f2e25394e3842681073baac72470c185de63ae946e0af7484e3823def60", -"T3W1_pt_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "4e974372e630b8c2872a885d31b67eff365517c1f3842ab3619bdf27b1880110", -"T3W1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "dee62af9cf7aa1b7d259ae96c1a4dbd686e94aba2cf8a41b665f3bed1e75f843", -"T3W1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "dee62af9cf7aa1b7d259ae96c1a4dbd686e94aba2cf8a41b665f3bed1e75f843", -"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "073cca331ed36d7cc3a4545b87a7de8c8b4a54a6578f5f73c44b755188d47aa2", -"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "073cca331ed36d7cc3a4545b87a7de8c8b4a54a6578f5f73c44b755188d47aa2", -"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "14c3a210e15f5a93c5a528336945b25aabe5781fefe05c2886f3600c3ed42dc8", -"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "14c3a210e15f5a93c5a528336945b25aabe5781fefe05c2886f3600c3ed42dc8", -"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "71975f166b6dcb87457b01dbb20eda7db74daff5096e2f115ab9560d7a59d6c4", -"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "71975f166b6dcb87457b01dbb20eda7db74daff5096e2f115ab9560d7a59d6c4", +"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[_try_to_cancel]": "381142b023b73149c247d4e7d4d227e3cb94ca0677117f54916c050fe34587ed", +"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device[normal]": "381142b023b73149c247d4e7d4d227e3cb94ca0677117f54916c050fe34587ed", +"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[_try_to_cancel]": "75fbdff47e2e664194cdf08d3ddc0a5258cb380061ff43ba7612717dcf3b5d01", +"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192[normal]": "75fbdff47e2e664194cdf08d3ddc0a5258cb380061ff43ba7612717dcf3b5d01", +"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "6fc517b731d0085f1384efff6bd2d7e9426476d9957e24595863832a53363b8e", +"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_entropy_check": "4b6c174a69ecd6d47db5865f5973f587dc02ab9608da1d8b09af9d24a77155a8", +"T3W1_pt_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "c36ae705eb8e20f3bdad42a4203e80880b0535aa80a661762a540ff9f0470d30", +"T3W1_pt_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery[Display]": "ff330748311c4d7f744939d6cad08924b915ade5a4205edfe904213e44da6f00", +"T3W1_pt_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery[Display]": "b29a511aae555b1bf165aad9a1f746f9c2953efa1ef4e5a49e9b85f04f8a6d61", +"T3W1_pt_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery[Display]": "67815dcb19f8463cf831048fa17893e6172c289588e7c92b40b11d9a3903b360", +"T3W1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-_tr-18d84664": "7fa1c7014319e332bdd650ae46cd1601ff8b57087013d5250d5c9029b817ec10", +"T3W1_pt_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced[Display-normal]": "7fa1c7014319e332bdd650ae46cd1601ff8b57087013d5250d5c9029b817ec10", +"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-_try_to_cancel]": "2c05bc5636d3b12dd94aac1655ad044abf5c7460287decaa230542106029a158", +"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic[Display-normal]": "2c05bc5636d3b12dd94aac1655ad044abf5c7460287decaa230542106029a158", +"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-_try_-613691e1": "c095351c7f6492636dec4b07b25059f2f5ecbea550712c9bc06442fd8c545fd8", +"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256[Display-normal]": "c095351c7f6492636dec4b07b25059f2f5ecbea550712c9bc06442fd8c545fd8", +"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-_try_to_cancel]": "52e0882f81a57b23612aa01b40d6cd42ae169b3182fa6e23ba2cc11ad4672064", +"T3W1_pt_reset_recovery-test_reset_slip39_basic.py::test_reset_entropy_check[Display-normal]": "52e0882f81a57b23612aa01b40d6cd42ae169b3182fa6e23ba2cc11ad4672064", "T3W1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-0-rNaqKtKrMSwpwZSzRckPf-3321e5d1": "582278eb1c4966aeb58b61f78c8a9796a9db2cf69a1029716512d1a4de6ad091", "T3W1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-0h-0-1-rBKz5MC2iXdoS3XgnNSYm-fd75b415": "1ce7e508692425ea045be31a76d37eeb0e0c21d193d8dd1e5a1fb9d252b51e1c", "T3W1_pt_ripple-test_get_address.py::test_ripple_get_address[m-44h-144h-1h-0-0-rJX2KwzaLJDyFhhtXKi3h-af5daf0f": "f6e055d60836becccc6c9604c5543ac41529baaba433febb523427b8e77afb90", @@ -45774,24 +45774,24 @@ "T3W1_pt_test_msg_applysettings.py::test_set_brightness_negative": "6fb22dca4b252028ed3f91db1fb746e30d12aece0a74e1bcc4abef605a3a9026", "T3W1_pt_test_msg_applysettings.py::test_set_label[empty]": "7d2f29c7a75f40e1eda59723105b834b20bb4d4e76370c654f793c8915129ee4", "T3W1_pt_test_msg_applysettings.py::test_set_label[max_len]": "0f881d86f7cc6d7404a906fad9b1c14203fbc7a443afa36c42c3615ed816b23b", -"T3W1_pt_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "f98252264d36d8ed0156d7a07d33c350cc8ba7b94be67fb95466c1634b24aa6b", -"T3W1_pt_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "f98252264d36d8ed0156d7a07d33c350cc8ba7b94be67fb95466c1634b24aa6b", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "4a1b6a1ab959965214f78fe34dec942b6f5dfb9a702cdc2c09eb6e9ac32838e0", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "4a1b6a1ab959965214f78fe34dec942b6f5dfb9a702cdc2c09eb6e9ac32838e0", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "a0fc295c2d60ba45ec0ab2f30f6c8c4eebf5c9ac7b80840fa289bf76dcf55895", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "a0fc295c2d60ba45ec0ab2f30f6c8c4eebf5c9ac7b80840fa289bf76dcf55895", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "dd4e1956e1371842b1471f24b7468b70eef4e52a65128ed61d45b4488b8cb280", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "dd4e1956e1371842b1471f24b7468b70eef4e52a65128ed61d45b4488b8cb280", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "1e492fc721cc77bc3f939373b40e4940aac91e82334ab95d432879f5a4171c52", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "1e492fc721cc77bc3f939373b40e4940aac91e82334ab95d432879f5a4171c52", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "78936a41cd2736549d27f0da44d06e236056b968eb2d55725c35421f29723e86", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "78936a41cd2736549d27f0da44d06e236056b968eb2d55725c35421f29723e86", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "463097eee59e0aa3f5b41b2fc7f465bc04dceb12c443e5d46afb2941e1af7c2d", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "463097eee59e0aa3f5b41b2fc7f465bc04dceb12c443e5d46afb2941e1af7c2d", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "3b1456b668c13b5c66b65c14f4a4d4804ee515a9005498368f38f7e52834d687", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "3b1456b668c13b5c66b65c14f4a4d4804ee515a9005498368f38f7e52834d687", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "2b26ea86dad7f67cce289038b5df92d679b51f0049e582d6401a47dff38b06be", -"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "2b26ea86dad7f67cce289038b5df92d679b51f0049e582d6401a47dff38b06be", +"T3W1_pt_test_msg_backup_device.py::test_backup_bip39[Display-_try_to_cancel]": "12f68aa8e3e0d6b0079ddffddabc65698bc9f6b9718022d80ae802f25e3c6d90", +"T3W1_pt_test_msg_backup_device.py::test_backup_bip39[Display-normal]": "12f68aa8e3e0d6b0079ddffddabc65698bc9f6b9718022d80ae802f25e3c6d90", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info__try_to_cancel]": "8189ab6f9ad9cb27bf89e33c1cd43f68e5bdcb4876f5a1dcabaa88573c9bd0c5", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-click_info_normal]": "8189ab6f9ad9cb27bf89e33c1cd43f68e5bdcb4876f5a1dcabaa88573c9bd0c5", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info__try_to_cancel]": "a04ba48b7ed22259ab700c25bd24da119bd6e35a934cf675f34c2c52edab03ff", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_advanced[Display-no_click_info_normal]": "a04ba48b7ed22259ab700c25bd24da119bd6e35a934cf675f34c2c52edab03ff", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info__try_to_cancel]": "b0ffe18f7a1bffe1d7aca6c364482e1e1878bc2282c8ad99d7544d0f772c2178", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-click_info_normal]": "b0ffe18f7a1bffe1d7aca6c364482e1e1878bc2282c8ad99d7544d0f772c2178", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info__try_to_cancel]": "de637e9d020b89bd53deded7699e0f08bd6ceeba52a4cdd5efd7ed95305720a8", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_basic[Display-no_click_info_normal]": "de637e9d020b89bd53deded7699e0f08bd6ceeba52a4cdd5efd7ed95305720a8", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1__try_to_cancel]": "8942d531854b6cb0ad1555c013244a649ce30b10b64fd0f06be083efccf508af", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-1_of_1_normal]": "8942d531854b6cb0ad1555c013244a649ce30b10b64fd0f06be083efccf508af", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2__try_to_cancel]": "fac89562b8fa33b1c5bb5a88516e450de1a61b1f53d4313141eebc3d037329aa", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-2_of_2_normal]": "fac89562b8fa33b1c5bb5a88516e450de1a61b1f53d4313141eebc3d037329aa", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5__try_to_cancel]": "7ef984f032c3836ba10d3acd0da121ab9bedadf6982604b828984c3b56fcfae1", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_custom[Display-3_of_5_normal]": "7ef984f032c3836ba10d3acd0da121ab9bedadf6982604b828984c3b56fcfae1", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-_try_to_cancel]": "a4cc74ecc7477abddbc077001824647924042e6f47b5b3152d5840a3b18a19e3", +"T3W1_pt_test_msg_backup_device.py::test_backup_slip39_single[Display-normal]": "a4cc74ecc7477abddbc077001824647924042e6f47b5b3152d5840a3b18a19e3", "T3W1_pt_test_msg_backup_device.py::test_interrupt_backup_fails[Display]": "3c5d424e84ef8f2214e4115a322431e8eb880090a6399537711ff8ba43a8e273", "T3W1_pt_test_msg_backup_device.py::test_no_backup_fails[Display]": "0c8c98f3c30dd77e5fbdf075a8404ec412ea60ecad5f9881486a579b10457089", "T3W1_pt_test_msg_change_wipe_code_t2.py::test_set_remove_pin_without_removing_wipe_code": "13aea0b2245279af809067790aa908bfe743087dcf66c39d180fc2a657e8095c", @@ -45808,9 +45808,9 @@ "T3W1_pt_test_msg_changepin_t2.py::test_set_failed": "f951cf81d11040b91c269dd10bc2dace18ecf5b338f9ddb91175535edb677d16", "T3W1_pt_test_msg_changepin_t2.py::test_set_pin": "9824660f239d5ea582ab26a94e7fbe0f0723be37c47dc91c291de42f2d52748c", "T3W1_pt_test_msg_delayed_ack.py::test_abort": "e55759a65ed21f3253bd3f46aa56e790d6861f8872c7f266b05115a411a5f9e8", -"T3W1_pt_test_msg_delayed_ack.py::test_backup_no_acks": "1ffa2ff16af829ef2dc8517eb4c1f07983a7d939e182f874dbbb19a391a0eff4", +"T3W1_pt_test_msg_delayed_ack.py::test_backup_no_acks": "5d44434c0ef37ce82fe942d7dda878793c5818ab0b1ebb371970ba2d5e284779", "T3W1_pt_test_msg_delayed_ack.py::test_delayed_ack": "e55759a65ed21f3253bd3f46aa56e790d6861f8872c7f266b05115a411a5f9e8", -"T3W1_pt_test_msg_delayed_ack.py::test_setup_no_acks": "712ce5608a30dffbe4d7fc897162201a09896fecac28686bea97e8034b01d8ff", +"T3W1_pt_test_msg_delayed_ack.py::test_setup_no_acks": "ffe4de4cb3b2bd9ca3af93f3611629f06094b1084beae8a4b99e07ce44ef007f", "T3W1_pt_test_msg_loaddevice.py::test_load_device_1": "9dc9fde959991be082dca8af40bd6ab1986e465ae766ee3cd6afe4129956c5a4", "T3W1_pt_test_msg_loaddevice.py::test_load_device_2": "aaab3c615b189e9c96db35030d6f166b07e021aa98dd6f215cd96796a5e3ad10", "T3W1_pt_test_msg_loaddevice.py::test_load_device_slip39_advanced": "9dc9fde959991be082dca8af40bd6ab1986e465ae766ee3cd6afe4129956c5a4", @@ -45845,10 +45845,10 @@ "T3W1_pt_test_protection_levels.py::test_unlocked": "9b742f1bb3165390fa0b910fd1b16b19e808183832e0959bded1846b8d1b2a0a", "T3W1_pt_test_protection_levels.py::test_verify_message_t2": "a7a858870200653f43a01287020361e34bcb49681911e621a1af4efa433bd5a8", "T3W1_pt_test_protection_levels.py::test_wipe_device": "c658bd88ee9dce49678fe99a293dba8b8c24ae35e5603ce428c22c693f21a71e", -"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "8301921190a29489d6cd1850a891ba4e5ce0b8a78484b0b2dc8143c93abb331c", -"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "829d162781e86579e8d4525361b19fdf1975c5fae5a34de47b8a45d91558d3ae", -"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "829d162781e86579e8d4525361b19fdf1975c5fae5a34de47b8a45d91558d3ae", -"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "4334421dbc6c36d7d932efc061da16d3fe6b99c628375afdff3fbb9100fcee66", +"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_host[Display]": "7a02db3253b95f77e8c76e43764b17d1f22b5c880f88a201f0a96088e3de69c7", +"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_host_cancel[Display]": "e1040b0f489a443aa43d997345803a59ce5043c96973f799e915149e17aa0f85", +"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_host_send_disallowed_message[Display]": "e1040b0f489a443aa43d997345803a59ce5043c96973f799e915149e17aa0f85", +"T3W1_pt_test_repeated_backup.py::test_repeated_backup_via_host_upgrade_single[Display]": "89d8637de883ee9330d545e8592b5498616b43542928829e93fabec493c32104", "T3W1_pt_test_serialnumber.py::test_cancel": "e2fb5ea3716bee46f6d1f2127b56b226e7da5676ebc9139f2f75e2998c418da0", "T3W1_pt_test_serialnumber.py::test_same": "d3072365b650f06d93bc75883ee5a69d8da044d80e1332fd37a0ceabb04f4ff4", "T3W1_pt_test_session.py::test_clear_session": "3616cc0670ff2887489107e8ed572f49c75bb8b0dde7f2417c85a26d93709116", diff --git a/vendor/micropython b/vendor/micropython index f5ec033a280..709dcbdf31f 160000 --- a/vendor/micropython +++ b/vendor/micropython @@ -1 +1 @@ -Subproject commit f5ec033a28017a0b698e28c908abff0efd598607 +Subproject commit 709dcbdf31f3fbcb00de252de9129704467154a4