diff --git a/common/protob/messages-debug.proto b/common/protob/messages-debug.proto index 3727b6243f..4841fd4564 100644 --- a/common/protob/messages-debug.proto +++ b/common/protob/messages-debug.proto @@ -235,3 +235,28 @@ message DebugLinkResetDebugEvents { */ message DebugLinkOptigaSetSecMax { } + + +/** + * Request: Get GC heap information. + * @start + * @next DebugLinkGcInfo + */ +message DebugLinkGetGcInfo { +} + +/** + * Response: GC heap information details. + * @end + */ +message DebugLinkGcInfo { + repeated DebugLinkGcInfoItem items = 1; + + /** + * Key-value pair. + */ + message DebugLinkGcInfoItem { + required string name = 1; + required uint64 value = 2; + } +} diff --git a/common/protob/messages.proto b/common/protob/messages.proto index 4dbb66f9ad..f56013b6ac 100644 --- a/common/protob/messages.proto +++ b/common/protob/messages.proto @@ -136,6 +136,8 @@ enum MessageType { MessageType_DebugLinkWatchLayout = 9006 [(bitcoin_only) = true, (wire_debug_in) = true]; MessageType_DebugLinkResetDebugEvents = 9007 [(bitcoin_only) = true, (wire_debug_in) = true]; MessageType_DebugLinkOptigaSetSecMax = 9008 [(bitcoin_only) = true, (wire_debug_in) = true]; + MessageType_DebugLinkGetGcInfo = 9009 [(bitcoin_only) = true, (wire_debug_in) = true]; + MessageType_DebugLinkGcInfo = 9010 [(bitcoin_only) = true, (wire_debug_out) = true]; // Ethereum MessageType_EthereumGetPublicKey = 450 [(wire_in) = true]; diff --git a/core/embed/upymod/modtrezorutils/modtrezorutils.c b/core/embed/upymod/modtrezorutils/modtrezorutils.c index 260d780e6a..f380e73526 100644 --- a/core/embed/upymod/modtrezorutils/modtrezorutils.c +++ b/core/embed/upymod/modtrezorutils/modtrezorutils.c @@ -40,6 +40,7 @@ #include #include #include "blake2s.h" +#include "memzero.h" #if !defined(TREZOR_EMULATOR) #include @@ -333,31 +334,69 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_enable_oom_dump_obj, mod_trezorutils_enable_oom_dump); #endif // MICROPY_OOM_CALLBACK +static gc_info_t current_gc_info = {0}; + /// if __debug__: -/// def check_free_heap(previous: int) -> int: +/// def clear_gc_info() -> None: /// """ -/// Assert that free heap memory doesn't decrease. -/// Returns current free heap memory (in bytes). +/// Clear GC heap stats. +/// """ +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, + mod_trezorutils_clear_gc_info); + +/// if __debug__: +/// def get_gc_info() -> dict[str, int]: +/// """ +/// Get GC heap stats, updated by `update_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)); + mp_obj_dict_store(result, MP_OBJ_NEW_QSTR(MP_QSTR_used), + mp_obj_new_int_from_uint(current_gc_info.used)); + mp_obj_dict_store(result, MP_OBJ_NEW_QSTR(MP_QSTR_free), + mp_obj_new_int_from_uint(current_gc_info.free)); + mp_obj_dict_store(result, MP_OBJ_NEW_QSTR(MP_QSTR_max_free), + mp_obj_new_int_from_uint(current_gc_info.max_free * + MICROPY_BYTES_PER_GC_BLOCK)); + return result; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_get_gc_info_obj, + mod_trezorutils_get_gc_info); + +/// if __debug__: +/// def update_gc_info() -> None: +/// """ +/// Update current GC heap statistics. +/// On emulator, also assert that free heap memory doesn't decrease. /// Enabled only for frozen debug builds. /// """ -STATIC mp_obj_t mod_trezorutils_check_free_heap(mp_obj_t arg) { - mp_uint_t free_heap = trezor_obj_get_uint(arg); -#if MICROPY_MODULE_FROZEN_MPY && defined(TREZOR_EMULATOR) +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; +#endif + gc_info(¤t_gc_info); // Currently, it may misdetect on-heap buffers' data as valid heap // pointers (resulting in `gc_mark_subtree` false-positives). - gc_info_t info; - gc_info(&info); - if (free_heap > info.free) { +#ifdef TREZOR_EMULATOR + if (prev_free > current_gc_info.free) { gc_dump_info(); mp_raise_msg(&mp_type_AssertionError, MP_ERROR_TEXT("Free heap size decreased")); } - free_heap = info.free; // current free heap #endif - return mp_obj_new_int_from_uint(free_heap); +#endif + return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorutils_check_free_heap_obj, - mod_trezorutils_check_free_heap); +STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_update_gc_info_obj, + mod_trezorutils_update_gc_info); /// if __debug__: /// def check_heap_fragmentation() -> None: @@ -615,8 +654,12 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_enable_oom_dump), MP_ROM_PTR(&mod_trezorutils_enable_oom_dump_obj)}, #endif - {MP_ROM_QSTR(MP_QSTR_check_free_heap), - MP_ROM_PTR(&mod_trezorutils_check_free_heap_obj)}, + {MP_ROM_QSTR(MP_QSTR_clear_gc_info), + MP_ROM_PTR(&mod_trezorutils_clear_gc_info_obj)}, + {MP_ROM_QSTR(MP_QSTR_get_gc_info), + MP_ROM_PTR(&mod_trezorutils_get_gc_info_obj)}, + {MP_ROM_QSTR(MP_QSTR_update_gc_info), + MP_ROM_PTR(&mod_trezorutils_update_gc_info_obj)}, {MP_ROM_QSTR(MP_QSTR_check_heap_fragmentation), MP_ROM_PTR(&mod_trezorutils_check_heap_fragmentation_obj)}, #endif diff --git a/core/mocks/generated/trezorutils.pyi b/core/mocks/generated/trezorutils.pyi index a023f2e07c..a1765da8b4 100644 --- a/core/mocks/generated/trezorutils.pyi +++ b/core/mocks/generated/trezorutils.pyi @@ -116,10 +116,20 @@ if __debug__: Dump GC info in case of an OOM. """ if __debug__: - def check_free_heap(previous: int) -> int: + def clear_gc_info() -> None: """ - Assert that free heap memory doesn't decrease. - Returns current free heap memory (in bytes). + Clear GC heap stats. + """ +if __debug__: + def get_gc_info() -> dict[str, int]: + """ + Get GC heap stats, updated by `update_gc_info`. + """ +if __debug__: + def update_gc_info() -> None: + """ + Update current GC heap statistics. + On emulator, also assert that free heap memory doesn't decrease. Enabled only for frozen debug builds. """ if __debug__: diff --git a/core/src/apps/debug/__init__.py b/core/src/apps/debug/__init__.py index fc3f8919ad..64032d6325 100644 --- a/core/src/apps/debug/__init__.py +++ b/core/src/apps/debug/__init__.py @@ -22,6 +22,8 @@ if __debug__: from trezor.messages import ( DebugLinkDecision, DebugLinkEraseSdCard, + DebugLinkGcInfo, + DebugLinkGetGcInfo, DebugLinkGetState, DebugLinkOptigaSetSecMax, DebugLinkRecordScreen, @@ -362,6 +364,18 @@ if __debug__: else: raise wire.UnexpectedMessage("Optiga not supported") + async def dispatch_DebugLinkGetGcInfo( + msg: DebugLinkGetGcInfo, + ) -> DebugLinkGcInfo: + from trezor.messages import DebugLinkGcInfo, DebugLinkGcInfoItem + + return DebugLinkGcInfo( + items=[ + DebugLinkGcInfoItem(name=name, value=value) + for name, value in utils.get_gc_info().items() + ] + ) + async def _no_op(_msg: Any) -> Success: return Success() @@ -439,6 +453,7 @@ if __debug__: MessageType.DebugLinkOptigaSetSecMax: dispatch_DebugLinkOptigaSetSecMax, MessageType.DebugLinkWatchLayout: _no_op, MessageType.DebugLinkResetDebugEvents: _no_op, + MessageType.DebugLinkGetGcInfo: dispatch_DebugLinkGetGcInfo, } def boot() -> None: diff --git a/core/src/trezor/enums/MessageType.py b/core/src/trezor/enums/MessageType.py index 508ab62145..f17ddbd35f 100644 --- a/core/src/trezor/enums/MessageType.py +++ b/core/src/trezor/enums/MessageType.py @@ -103,6 +103,8 @@ if __debug__: DebugLinkWatchLayout = 9006 DebugLinkResetDebugEvents = 9007 DebugLinkOptigaSetSecMax = 9008 + DebugLinkGetGcInfo = 9009 + DebugLinkGcInfo = 9010 if not utils.BITCOIN_ONLY: SetU2FCounter = 63 GetNextU2FCounter = 80 diff --git a/core/src/trezor/enums/__init__.py b/core/src/trezor/enums/__init__.py index 9e45237cb5..c862a73f6b 100644 --- a/core/src/trezor/enums/__init__.py +++ b/core/src/trezor/enums/__init__.py @@ -435,6 +435,8 @@ if TYPE_CHECKING: DebugLinkWatchLayout = 9006 DebugLinkResetDebugEvents = 9007 DebugLinkOptigaSetSecMax = 9008 + DebugLinkGetGcInfo = 9009 + DebugLinkGcInfo = 9010 EthereumGetPublicKey = 450 EthereumPublicKey = 451 EthereumGetAddress = 56 diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py index c4a4c796f8..304156af24 100644 --- a/core/src/trezor/messages.py +++ b/core/src/trezor/messages.py @@ -2861,6 +2861,42 @@ if TYPE_CHECKING: def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkOptigaSetSecMax"]: return isinstance(msg, cls) + class DebugLinkGetGcInfo(protobuf.MessageType): + + @classmethod + def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkGetGcInfo"]: + return isinstance(msg, cls) + + class DebugLinkGcInfo(protobuf.MessageType): + items: "list[DebugLinkGcInfoItem]" + + def __init__( + self, + *, + items: "list[DebugLinkGcInfoItem] | None" = None, + ) -> None: + pass + + @classmethod + def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkGcInfo"]: + return isinstance(msg, cls) + + class DebugLinkGcInfoItem(protobuf.MessageType): + name: "str" + value: "int" + + def __init__( + self, + *, + name: "str", + value: "int", + ) -> None: + pass + + @classmethod + def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkGcInfoItem"]: + return isinstance(msg, cls) + class EthereumNetworkInfo(protobuf.MessageType): chain_id: "int" symbol: "str" diff --git a/core/src/trezor/utils.py b/core/src/trezor/utils.py index c4953166f1..7759e1d537 100644 --- a/core/src/trezor/utils.py +++ b/core/src/trezor/utils.py @@ -38,7 +38,13 @@ from trezorutils import ( # noqa: F401 from typing import TYPE_CHECKING if __debug__: - from trezorutils import LOG_STACK_USAGE, check_free_heap, check_heap_fragmentation + from trezorutils import get_gc_info # noqa: F401 + from trezorutils import ( + LOG_STACK_USAGE, + check_heap_fragmentation, + clear_gc_info, + update_gc_info, + ) if LOG_STACK_USAGE: from trezorutils import estimate_unused_stack, zero_unused_stack # noqa: F401 @@ -95,8 +101,7 @@ def unimport_end(mods: set[str], collect: bool = True) -> None: class unimport: def __init__(self) -> None: self.mods: set[str] | None = None - if __debug__: - self.free_heap = 0 + clear_gc_info() def __enter__(self) -> None: self.mods = unimport_begin() @@ -108,11 +113,11 @@ class unimport: self.mods = None gc.collect() - # If an exception is being handled here, `check_free_heap()` will fail - # (since the exception survives `gc.collect()` call above). + # If an exception is being handled here, `update_gc_info()` internal assertion + # will fail (since the exception survives `gc.collect()` call above). # So we prefer to skip the check, in order to preserve the exception. if __debug__ and exc_type is None: - self.free_heap = check_free_heap(self.free_heap) + update_gc_info() if __debug__: diff --git a/legacy/firmware/protob/Makefile b/legacy/firmware/protob/Makefile index a1c246ff1b..c732d22dd0 100644 --- a/legacy/firmware/protob/Makefile +++ b/legacy/firmware/protob/Makefile @@ -3,6 +3,7 @@ Q := @ endif SKIPPED_MESSAGES := Cardano DebugMonero Eos Monero Ontology Ripple SdProtect Tezos WebAuthn \ + DebugLinkGetGcInfo DebugLinkGcInfoItem DebugLinkGcInfo \ DebugLinkRecordScreen DebugLinkEraseSdCard DebugLinkWatchLayout \ DebugLinkLayout DebugLinkResetDebugEvents GetNonce \ TxAckInput TxAckOutput TxAckPrev TxAckPaymentRequest \ diff --git a/python/src/trezorlib/debuglink.py b/python/src/trezorlib/debuglink.py index 03d983c67c..2c5c7b1022 100644 --- a/python/src/trezorlib/debuglink.py +++ b/python/src/trezorlib/debuglink.py @@ -481,6 +481,7 @@ class DebugLink: self.waiting_for_layout_change = False self.input_wait_type = DebugWaitType.IMMEDIATE + self.prev_gc_info: dict[str, int] = {} @property def legacy_ui(self) -> bool: @@ -497,6 +498,11 @@ class DebugLink: """Differences in waiting for Global Layout objects.""" return self.version >= (2, 8, 6) + @property + def has_gc_info(self) -> bool: + """Supports DebugLinkGetGcInfo RPC.""" + return self.version >= (2, 8, 11) + @property def responds_to_debuglink_in_usb_tiny(self) -> bool: """Whether a Trezor One can respond to DebugLinkGetState while waiting @@ -845,6 +851,21 @@ class DebugLink: im.save(img_location) self.t1_screenshot_counter += 1 + def check_gc_info(self): + """Fetch GC heap information and check for leaks.""" + if not self.has_gc_info: + return + + resp = self._call(messages.DebugLinkGetGcInfo()) + while not isinstance(resp, messages.DebugLinkGcInfo): + resp = self._read() + + info = dict(sorted((item.name, item.value) for item in resp.items)) + if self.prev_gc_info: + # Free heap memory should not decrease + assert info["free"] >= self.prev_gc_info["free"] + self.prev_gc_info = info + del _make_input_func diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py index 6f47d48345..22231afdd9 100644 --- a/python/src/trezorlib/messages.py +++ b/python/src/trezorlib/messages.py @@ -485,6 +485,8 @@ class MessageType(IntEnum): DebugLinkWatchLayout = 9006 DebugLinkResetDebugEvents = 9007 DebugLinkOptigaSetSecMax = 9008 + DebugLinkGetGcInfo = 9009 + DebugLinkGcInfo = 9010 EthereumGetPublicKey = 450 EthereumPublicKey = 451 EthereumGetAddress = 56 @@ -4094,6 +4096,41 @@ class DebugLinkOptigaSetSecMax(protobuf.MessageType): MESSAGE_WIRE_TYPE = 9008 +class DebugLinkGetGcInfo(protobuf.MessageType): + MESSAGE_WIRE_TYPE = 9009 + + +class DebugLinkGcInfo(protobuf.MessageType): + MESSAGE_WIRE_TYPE = 9010 + FIELDS = { + 1: protobuf.Field("items", "DebugLinkGcInfoItem", repeated=True, required=False, default=None), + } + + def __init__( + self, + *, + items: Optional[Sequence["DebugLinkGcInfoItem"]] = None, + ) -> None: + self.items: Sequence["DebugLinkGcInfoItem"] = items if items is not None else [] + + +class DebugLinkGcInfoItem(protobuf.MessageType): + MESSAGE_WIRE_TYPE = None + FIELDS = { + 1: protobuf.Field("name", "string", repeated=False, required=True), + 2: protobuf.Field("value", "uint64", repeated=False, required=True), + } + + def __init__( + self, + *, + name: "str", + value: "int", + ) -> None: + self.name = name + self.value = value + + class EthereumNetworkInfo(protobuf.MessageType): MESSAGE_WIRE_TYPE = None FIELDS = { diff --git a/rust/trezor-client/src/messages/generated.rs b/rust/trezor-client/src/messages/generated.rs index 67e026775d..368f9811f9 100644 --- a/rust/trezor-client/src/messages/generated.rs +++ b/rust/trezor-client/src/messages/generated.rs @@ -83,6 +83,8 @@ trezor_message_impl! { DebugLinkWatchLayout => MessageType_DebugLinkWatchLayout, DebugLinkResetDebugEvents => MessageType_DebugLinkResetDebugEvents, DebugLinkOptigaSetSecMax => MessageType_DebugLinkOptigaSetSecMax, + DebugLinkGetGcInfo => MessageType_DebugLinkGetGcInfo, + DebugLinkGcInfo => MessageType_DebugLinkGcInfo, BenchmarkListNames => MessageType_BenchmarkListNames, BenchmarkNames => MessageType_BenchmarkNames, BenchmarkRun => MessageType_BenchmarkRun, diff --git a/rust/trezor-client/src/protos/generated/messages.rs b/rust/trezor-client/src/protos/generated/messages.rs index 03d256b5ae..86ac5ed61f 100644 --- a/rust/trezor-client/src/protos/generated/messages.rs +++ b/rust/trezor-client/src/protos/generated/messages.rs @@ -227,6 +227,10 @@ pub enum MessageType { MessageType_DebugLinkResetDebugEvents = 9007, // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkOptigaSetSecMax) MessageType_DebugLinkOptigaSetSecMax = 9008, + // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkGetGcInfo) + MessageType_DebugLinkGetGcInfo = 9009, + // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkGcInfo) + MessageType_DebugLinkGcInfo = 9010, // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EthereumGetPublicKey) MessageType_EthereumGetPublicKey = 450, // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EthereumPublicKey) @@ -622,6 +626,8 @@ impl ::protobuf::Enum for MessageType { 9006 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout), 9007 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents), 9008 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkOptigaSetSecMax), + 9009 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkGetGcInfo), + 9010 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkGcInfo), 450 => ::std::option::Option::Some(MessageType::MessageType_EthereumGetPublicKey), 451 => ::std::option::Option::Some(MessageType::MessageType_EthereumPublicKey), 56 => ::std::option::Option::Some(MessageType::MessageType_EthereumGetAddress), @@ -870,6 +876,8 @@ impl ::protobuf::Enum for MessageType { "MessageType_DebugLinkWatchLayout" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout), "MessageType_DebugLinkResetDebugEvents" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents), "MessageType_DebugLinkOptigaSetSecMax" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkOptigaSetSecMax), + "MessageType_DebugLinkGetGcInfo" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkGetGcInfo), + "MessageType_DebugLinkGcInfo" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkGcInfo), "MessageType_EthereumGetPublicKey" => ::std::option::Option::Some(MessageType::MessageType_EthereumGetPublicKey), "MessageType_EthereumPublicKey" => ::std::option::Option::Some(MessageType::MessageType_EthereumPublicKey), "MessageType_EthereumGetAddress" => ::std::option::Option::Some(MessageType::MessageType_EthereumGetAddress), @@ -1117,6 +1125,8 @@ impl ::protobuf::Enum for MessageType { MessageType::MessageType_DebugLinkWatchLayout, MessageType::MessageType_DebugLinkResetDebugEvents, MessageType::MessageType_DebugLinkOptigaSetSecMax, + MessageType::MessageType_DebugLinkGetGcInfo, + MessageType::MessageType_DebugLinkGcInfo, MessageType::MessageType_EthereumGetPublicKey, MessageType::MessageType_EthereumPublicKey, MessageType::MessageType_EthereumGetAddress, @@ -1370,148 +1380,150 @@ impl ::protobuf::EnumFull for MessageType { MessageType::MessageType_DebugLinkWatchLayout => 97, MessageType::MessageType_DebugLinkResetDebugEvents => 98, MessageType::MessageType_DebugLinkOptigaSetSecMax => 99, - MessageType::MessageType_EthereumGetPublicKey => 100, - MessageType::MessageType_EthereumPublicKey => 101, - MessageType::MessageType_EthereumGetAddress => 102, - MessageType::MessageType_EthereumAddress => 103, - MessageType::MessageType_EthereumSignTx => 104, - MessageType::MessageType_EthereumSignTxEIP1559 => 105, - MessageType::MessageType_EthereumTxRequest => 106, - MessageType::MessageType_EthereumTxAck => 107, - MessageType::MessageType_EthereumSignMessage => 108, - MessageType::MessageType_EthereumVerifyMessage => 109, - MessageType::MessageType_EthereumMessageSignature => 110, - MessageType::MessageType_EthereumSignTypedData => 111, - MessageType::MessageType_EthereumTypedDataStructRequest => 112, - MessageType::MessageType_EthereumTypedDataStructAck => 113, - MessageType::MessageType_EthereumTypedDataValueRequest => 114, - MessageType::MessageType_EthereumTypedDataValueAck => 115, - MessageType::MessageType_EthereumTypedDataSignature => 116, - MessageType::MessageType_EthereumSignTypedHash => 117, - MessageType::MessageType_NEMGetAddress => 118, - MessageType::MessageType_NEMAddress => 119, - MessageType::MessageType_NEMSignTx => 120, - MessageType::MessageType_NEMSignedTx => 121, - MessageType::MessageType_NEMDecryptMessage => 122, - MessageType::MessageType_NEMDecryptedMessage => 123, - MessageType::MessageType_TezosGetAddress => 124, - MessageType::MessageType_TezosAddress => 125, - MessageType::MessageType_TezosSignTx => 126, - MessageType::MessageType_TezosSignedTx => 127, - MessageType::MessageType_TezosGetPublicKey => 128, - MessageType::MessageType_TezosPublicKey => 129, - MessageType::MessageType_StellarSignTx => 130, - MessageType::MessageType_StellarTxOpRequest => 131, - MessageType::MessageType_StellarGetAddress => 132, - MessageType::MessageType_StellarAddress => 133, - MessageType::MessageType_StellarCreateAccountOp => 134, - MessageType::MessageType_StellarPaymentOp => 135, - MessageType::MessageType_StellarPathPaymentStrictReceiveOp => 136, - MessageType::MessageType_StellarManageSellOfferOp => 137, - MessageType::MessageType_StellarCreatePassiveSellOfferOp => 138, - MessageType::MessageType_StellarSetOptionsOp => 139, - MessageType::MessageType_StellarChangeTrustOp => 140, - MessageType::MessageType_StellarAllowTrustOp => 141, - MessageType::MessageType_StellarAccountMergeOp => 142, - MessageType::MessageType_StellarManageDataOp => 143, - MessageType::MessageType_StellarBumpSequenceOp => 144, - MessageType::MessageType_StellarManageBuyOfferOp => 145, - MessageType::MessageType_StellarPathPaymentStrictSendOp => 146, - MessageType::MessageType_StellarClaimClaimableBalanceOp => 147, - MessageType::MessageType_StellarSignedTx => 148, - MessageType::MessageType_CardanoGetPublicKey => 149, - MessageType::MessageType_CardanoPublicKey => 150, - MessageType::MessageType_CardanoGetAddress => 151, - MessageType::MessageType_CardanoAddress => 152, - MessageType::MessageType_CardanoTxItemAck => 153, - MessageType::MessageType_CardanoTxAuxiliaryDataSupplement => 154, - MessageType::MessageType_CardanoTxWitnessRequest => 155, - MessageType::MessageType_CardanoTxWitnessResponse => 156, - MessageType::MessageType_CardanoTxHostAck => 157, - MessageType::MessageType_CardanoTxBodyHash => 158, - MessageType::MessageType_CardanoSignTxFinished => 159, - MessageType::MessageType_CardanoSignTxInit => 160, - MessageType::MessageType_CardanoTxInput => 161, - MessageType::MessageType_CardanoTxOutput => 162, - MessageType::MessageType_CardanoAssetGroup => 163, - MessageType::MessageType_CardanoToken => 164, - MessageType::MessageType_CardanoTxCertificate => 165, - MessageType::MessageType_CardanoTxWithdrawal => 166, - MessageType::MessageType_CardanoTxAuxiliaryData => 167, - MessageType::MessageType_CardanoPoolOwner => 168, - MessageType::MessageType_CardanoPoolRelayParameters => 169, - MessageType::MessageType_CardanoGetNativeScriptHash => 170, - MessageType::MessageType_CardanoNativeScriptHash => 171, - MessageType::MessageType_CardanoTxMint => 172, - MessageType::MessageType_CardanoTxCollateralInput => 173, - MessageType::MessageType_CardanoTxRequiredSigner => 174, - MessageType::MessageType_CardanoTxInlineDatumChunk => 175, - MessageType::MessageType_CardanoTxReferenceScriptChunk => 176, - MessageType::MessageType_CardanoTxReferenceInput => 177, - MessageType::MessageType_RippleGetAddress => 178, - MessageType::MessageType_RippleAddress => 179, - MessageType::MessageType_RippleSignTx => 180, - MessageType::MessageType_RippleSignedTx => 181, - MessageType::MessageType_MoneroTransactionInitRequest => 182, - MessageType::MessageType_MoneroTransactionInitAck => 183, - MessageType::MessageType_MoneroTransactionSetInputRequest => 184, - MessageType::MessageType_MoneroTransactionSetInputAck => 185, - MessageType::MessageType_MoneroTransactionInputViniRequest => 186, - MessageType::MessageType_MoneroTransactionInputViniAck => 187, - MessageType::MessageType_MoneroTransactionAllInputsSetRequest => 188, - MessageType::MessageType_MoneroTransactionAllInputsSetAck => 189, - MessageType::MessageType_MoneroTransactionSetOutputRequest => 190, - MessageType::MessageType_MoneroTransactionSetOutputAck => 191, - MessageType::MessageType_MoneroTransactionAllOutSetRequest => 192, - MessageType::MessageType_MoneroTransactionAllOutSetAck => 193, - MessageType::MessageType_MoneroTransactionSignInputRequest => 194, - MessageType::MessageType_MoneroTransactionSignInputAck => 195, - MessageType::MessageType_MoneroTransactionFinalRequest => 196, - MessageType::MessageType_MoneroTransactionFinalAck => 197, - MessageType::MessageType_MoneroKeyImageExportInitRequest => 198, - MessageType::MessageType_MoneroKeyImageExportInitAck => 199, - MessageType::MessageType_MoneroKeyImageSyncStepRequest => 200, - MessageType::MessageType_MoneroKeyImageSyncStepAck => 201, - MessageType::MessageType_MoneroKeyImageSyncFinalRequest => 202, - MessageType::MessageType_MoneroKeyImageSyncFinalAck => 203, - MessageType::MessageType_MoneroGetAddress => 204, - MessageType::MessageType_MoneroAddress => 205, - MessageType::MessageType_MoneroGetWatchKey => 206, - MessageType::MessageType_MoneroWatchKey => 207, - MessageType::MessageType_DebugMoneroDiagRequest => 208, - MessageType::MessageType_DebugMoneroDiagAck => 209, - MessageType::MessageType_MoneroGetTxKeyRequest => 210, - MessageType::MessageType_MoneroGetTxKeyAck => 211, - MessageType::MessageType_MoneroLiveRefreshStartRequest => 212, - MessageType::MessageType_MoneroLiveRefreshStartAck => 213, - MessageType::MessageType_MoneroLiveRefreshStepRequest => 214, - MessageType::MessageType_MoneroLiveRefreshStepAck => 215, - MessageType::MessageType_MoneroLiveRefreshFinalRequest => 216, - MessageType::MessageType_MoneroLiveRefreshFinalAck => 217, - MessageType::MessageType_EosGetPublicKey => 218, - MessageType::MessageType_EosPublicKey => 219, - MessageType::MessageType_EosSignTx => 220, - MessageType::MessageType_EosTxActionRequest => 221, - MessageType::MessageType_EosTxActionAck => 222, - MessageType::MessageType_EosSignedTx => 223, - MessageType::MessageType_WebAuthnListResidentCredentials => 224, - MessageType::MessageType_WebAuthnCredentials => 225, - MessageType::MessageType_WebAuthnAddResidentCredential => 226, - MessageType::MessageType_WebAuthnRemoveResidentCredential => 227, - MessageType::MessageType_SolanaGetPublicKey => 228, - MessageType::MessageType_SolanaPublicKey => 229, - MessageType::MessageType_SolanaGetAddress => 230, - MessageType::MessageType_SolanaAddress => 231, - MessageType::MessageType_SolanaSignTx => 232, - MessageType::MessageType_SolanaTxSignature => 233, - MessageType::MessageType_NostrGetPubkey => 234, - MessageType::MessageType_NostrPubkey => 235, - MessageType::MessageType_NostrSignEvent => 236, - MessageType::MessageType_NostrEventSignature => 237, - MessageType::MessageType_BenchmarkListNames => 238, - MessageType::MessageType_BenchmarkNames => 239, - MessageType::MessageType_BenchmarkRun => 240, - MessageType::MessageType_BenchmarkResult => 241, + MessageType::MessageType_DebugLinkGetGcInfo => 100, + MessageType::MessageType_DebugLinkGcInfo => 101, + MessageType::MessageType_EthereumGetPublicKey => 102, + MessageType::MessageType_EthereumPublicKey => 103, + MessageType::MessageType_EthereumGetAddress => 104, + MessageType::MessageType_EthereumAddress => 105, + MessageType::MessageType_EthereumSignTx => 106, + MessageType::MessageType_EthereumSignTxEIP1559 => 107, + MessageType::MessageType_EthereumTxRequest => 108, + MessageType::MessageType_EthereumTxAck => 109, + MessageType::MessageType_EthereumSignMessage => 110, + MessageType::MessageType_EthereumVerifyMessage => 111, + MessageType::MessageType_EthereumMessageSignature => 112, + MessageType::MessageType_EthereumSignTypedData => 113, + MessageType::MessageType_EthereumTypedDataStructRequest => 114, + MessageType::MessageType_EthereumTypedDataStructAck => 115, + MessageType::MessageType_EthereumTypedDataValueRequest => 116, + MessageType::MessageType_EthereumTypedDataValueAck => 117, + MessageType::MessageType_EthereumTypedDataSignature => 118, + MessageType::MessageType_EthereumSignTypedHash => 119, + MessageType::MessageType_NEMGetAddress => 120, + MessageType::MessageType_NEMAddress => 121, + MessageType::MessageType_NEMSignTx => 122, + MessageType::MessageType_NEMSignedTx => 123, + MessageType::MessageType_NEMDecryptMessage => 124, + MessageType::MessageType_NEMDecryptedMessage => 125, + MessageType::MessageType_TezosGetAddress => 126, + MessageType::MessageType_TezosAddress => 127, + MessageType::MessageType_TezosSignTx => 128, + MessageType::MessageType_TezosSignedTx => 129, + MessageType::MessageType_TezosGetPublicKey => 130, + MessageType::MessageType_TezosPublicKey => 131, + MessageType::MessageType_StellarSignTx => 132, + MessageType::MessageType_StellarTxOpRequest => 133, + MessageType::MessageType_StellarGetAddress => 134, + MessageType::MessageType_StellarAddress => 135, + MessageType::MessageType_StellarCreateAccountOp => 136, + MessageType::MessageType_StellarPaymentOp => 137, + MessageType::MessageType_StellarPathPaymentStrictReceiveOp => 138, + MessageType::MessageType_StellarManageSellOfferOp => 139, + MessageType::MessageType_StellarCreatePassiveSellOfferOp => 140, + MessageType::MessageType_StellarSetOptionsOp => 141, + MessageType::MessageType_StellarChangeTrustOp => 142, + MessageType::MessageType_StellarAllowTrustOp => 143, + MessageType::MessageType_StellarAccountMergeOp => 144, + MessageType::MessageType_StellarManageDataOp => 145, + MessageType::MessageType_StellarBumpSequenceOp => 146, + MessageType::MessageType_StellarManageBuyOfferOp => 147, + MessageType::MessageType_StellarPathPaymentStrictSendOp => 148, + MessageType::MessageType_StellarClaimClaimableBalanceOp => 149, + MessageType::MessageType_StellarSignedTx => 150, + MessageType::MessageType_CardanoGetPublicKey => 151, + MessageType::MessageType_CardanoPublicKey => 152, + MessageType::MessageType_CardanoGetAddress => 153, + MessageType::MessageType_CardanoAddress => 154, + MessageType::MessageType_CardanoTxItemAck => 155, + MessageType::MessageType_CardanoTxAuxiliaryDataSupplement => 156, + MessageType::MessageType_CardanoTxWitnessRequest => 157, + MessageType::MessageType_CardanoTxWitnessResponse => 158, + MessageType::MessageType_CardanoTxHostAck => 159, + MessageType::MessageType_CardanoTxBodyHash => 160, + MessageType::MessageType_CardanoSignTxFinished => 161, + MessageType::MessageType_CardanoSignTxInit => 162, + MessageType::MessageType_CardanoTxInput => 163, + MessageType::MessageType_CardanoTxOutput => 164, + MessageType::MessageType_CardanoAssetGroup => 165, + MessageType::MessageType_CardanoToken => 166, + MessageType::MessageType_CardanoTxCertificate => 167, + MessageType::MessageType_CardanoTxWithdrawal => 168, + MessageType::MessageType_CardanoTxAuxiliaryData => 169, + MessageType::MessageType_CardanoPoolOwner => 170, + MessageType::MessageType_CardanoPoolRelayParameters => 171, + MessageType::MessageType_CardanoGetNativeScriptHash => 172, + MessageType::MessageType_CardanoNativeScriptHash => 173, + MessageType::MessageType_CardanoTxMint => 174, + MessageType::MessageType_CardanoTxCollateralInput => 175, + MessageType::MessageType_CardanoTxRequiredSigner => 176, + MessageType::MessageType_CardanoTxInlineDatumChunk => 177, + MessageType::MessageType_CardanoTxReferenceScriptChunk => 178, + MessageType::MessageType_CardanoTxReferenceInput => 179, + MessageType::MessageType_RippleGetAddress => 180, + MessageType::MessageType_RippleAddress => 181, + MessageType::MessageType_RippleSignTx => 182, + MessageType::MessageType_RippleSignedTx => 183, + MessageType::MessageType_MoneroTransactionInitRequest => 184, + MessageType::MessageType_MoneroTransactionInitAck => 185, + MessageType::MessageType_MoneroTransactionSetInputRequest => 186, + MessageType::MessageType_MoneroTransactionSetInputAck => 187, + MessageType::MessageType_MoneroTransactionInputViniRequest => 188, + MessageType::MessageType_MoneroTransactionInputViniAck => 189, + MessageType::MessageType_MoneroTransactionAllInputsSetRequest => 190, + MessageType::MessageType_MoneroTransactionAllInputsSetAck => 191, + MessageType::MessageType_MoneroTransactionSetOutputRequest => 192, + MessageType::MessageType_MoneroTransactionSetOutputAck => 193, + MessageType::MessageType_MoneroTransactionAllOutSetRequest => 194, + MessageType::MessageType_MoneroTransactionAllOutSetAck => 195, + MessageType::MessageType_MoneroTransactionSignInputRequest => 196, + MessageType::MessageType_MoneroTransactionSignInputAck => 197, + MessageType::MessageType_MoneroTransactionFinalRequest => 198, + MessageType::MessageType_MoneroTransactionFinalAck => 199, + MessageType::MessageType_MoneroKeyImageExportInitRequest => 200, + MessageType::MessageType_MoneroKeyImageExportInitAck => 201, + MessageType::MessageType_MoneroKeyImageSyncStepRequest => 202, + MessageType::MessageType_MoneroKeyImageSyncStepAck => 203, + MessageType::MessageType_MoneroKeyImageSyncFinalRequest => 204, + MessageType::MessageType_MoneroKeyImageSyncFinalAck => 205, + MessageType::MessageType_MoneroGetAddress => 206, + MessageType::MessageType_MoneroAddress => 207, + MessageType::MessageType_MoneroGetWatchKey => 208, + MessageType::MessageType_MoneroWatchKey => 209, + MessageType::MessageType_DebugMoneroDiagRequest => 210, + MessageType::MessageType_DebugMoneroDiagAck => 211, + MessageType::MessageType_MoneroGetTxKeyRequest => 212, + MessageType::MessageType_MoneroGetTxKeyAck => 213, + MessageType::MessageType_MoneroLiveRefreshStartRequest => 214, + MessageType::MessageType_MoneroLiveRefreshStartAck => 215, + MessageType::MessageType_MoneroLiveRefreshStepRequest => 216, + MessageType::MessageType_MoneroLiveRefreshStepAck => 217, + MessageType::MessageType_MoneroLiveRefreshFinalRequest => 218, + MessageType::MessageType_MoneroLiveRefreshFinalAck => 219, + MessageType::MessageType_EosGetPublicKey => 220, + MessageType::MessageType_EosPublicKey => 221, + MessageType::MessageType_EosSignTx => 222, + MessageType::MessageType_EosTxActionRequest => 223, + MessageType::MessageType_EosTxActionAck => 224, + MessageType::MessageType_EosSignedTx => 225, + MessageType::MessageType_WebAuthnListResidentCredentials => 226, + MessageType::MessageType_WebAuthnCredentials => 227, + MessageType::MessageType_WebAuthnAddResidentCredential => 228, + MessageType::MessageType_WebAuthnRemoveResidentCredential => 229, + MessageType::MessageType_SolanaGetPublicKey => 230, + MessageType::MessageType_SolanaPublicKey => 231, + MessageType::MessageType_SolanaGetAddress => 232, + MessageType::MessageType_SolanaAddress => 233, + MessageType::MessageType_SolanaSignTx => 234, + MessageType::MessageType_SolanaTxSignature => 235, + MessageType::MessageType_NostrGetPubkey => 236, + MessageType::MessageType_NostrPubkey => 237, + MessageType::MessageType_NostrSignEvent => 238, + MessageType::MessageType_NostrEventSignature => 239, + MessageType::MessageType_BenchmarkListNames => 240, + MessageType::MessageType_BenchmarkNames => 241, + MessageType::MessageType_BenchmarkRun => 242, + MessageType::MessageType_BenchmarkResult => 243, }; Self::enum_descriptor().value_by_index(index) } @@ -1530,7 +1542,7 @@ impl MessageType { } static file_descriptor_proto_data: &'static [u8] = b"\ - \n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\roptions.proto*\x8fT\ + \n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\roptions.proto*\xeaT\ \n\x0bMessageType\x12(\n\x16MessageType_Initialize\x10\0\x1a\x0c\x80\xa6\ \x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\x10MessageType_Ping\ \x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12%\n\x13MessageType_S\ @@ -1651,166 +1663,168 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x1d\x01\xa0\xb5\x18\x01\x124\n%MessageType_DebugLinkResetDebugEvents\ \x10\xafF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x123\n$MessageType_Deb\ ugLinkOptigaSetSecMax\x10\xb0F\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\ - \x12+\n\x20MessageType_EthereumGetPublicKey\x10\xc2\x03\x1a\x04\x90\xb5\ - \x18\x01\x12(\n\x1dMessageType_EthereumPublicKey\x10\xc3\x03\x1a\x04\x98\ - \xb5\x18\x01\x12(\n\x1eMessageType_EthereumGetAddress\x108\x1a\x04\x90\ - \xb5\x18\x01\x12%\n\x1bMessageType_EthereumAddress\x109\x1a\x04\x98\xb5\ - \x18\x01\x12$\n\x1aMessageType_EthereumSignTx\x10:\x1a\x04\x90\xb5\x18\ - \x01\x12,\n!MessageType_EthereumSignTxEIP1559\x10\xc4\x03\x1a\x04\x90\ - \xb5\x18\x01\x12'\n\x1dMessageType_EthereumTxRequest\x10;\x1a\x04\x98\ - \xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\x10<\x1a\x04\x90\xb5\ - \x18\x01\x12)\n\x1fMessageType_EthereumSignMessage\x10@\x1a\x04\x90\xb5\ - \x18\x01\x12+\n!MessageType_EthereumVerifyMessage\x10A\x1a\x04\x90\xb5\ - \x18\x01\x12.\n$MessageType_EthereumMessageSignature\x10B\x1a\x04\x98\ - \xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedData\x10\xd0\x03\x1a\ - \x04\x90\xb5\x18\x01\x125\n*MessageType_EthereumTypedDataStructRequest\ - \x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&MessageType_EthereumTypedDat\ - aStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_Ethere\ - umTypedDataValueRequest\x10\xd3\x03\x1a\x04\x98\xb5\x18\x01\x120\n%Messa\ - geType_EthereumTypedDataValueAck\x10\xd4\x03\x1a\x04\x90\xb5\x18\x01\x12\ - 1\n&MessageType_EthereumTypedDataSignature\x10\xd5\x03\x1a\x04\x98\xb5\ - \x18\x01\x12,\n!MessageType_EthereumSignTypedHash\x10\xd6\x03\x1a\x04\ - \x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGetAddress\x10C\x1a\x04\x90\ - \xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\x10D\x1a\x04\x98\xb5\ - \x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\x1a\x04\x90\xb5\x18\x01\ - \x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\x98\xb5\x18\x01\x12'\n\ - \x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\x90\xb5\x18\x01\x12)\n\ - \x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\x98\xb5\x18\x01\x12&\n\ - \x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\x04\x90\xb5\x18\x01\x12#\ - \n\x18MessageType_TezosAddress\x10\x97\x01\x1a\x04\x98\xb5\x18\x01\x12\"\ - \n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\x04\x90\xb5\x18\x01\x12$\n\ - \x19MessageType_TezosSignedTx\x10\x99\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\ - \x1dMessageType_TezosGetPublicKey\x10\x9a\x01\x1a\x04\x90\xb5\x18\x01\ - \x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\x01\x1a\x04\x98\xb5\x18\ - \x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\x01\x1a\x04\x90\xb5\x18\ - \x01\x12)\n\x1eMessageType_StellarTxOpRequest\x10\xcb\x01\x1a\x04\x98\ - \xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAddress\x10\xcf\x01\x1a\x04\ - \x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAddress\x10\xd0\x01\x1a\ - \x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCreateAccountOp\x10\xd2\ - \x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_StellarPaymentOp\x10\ - \xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_StellarPathPaymentSt\ - rictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12/\n$MessageType_Ste\ - llarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\x01\x126\n+Message\ - Type_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\x04\x90\xb5\x18\x01\ - \x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\x01\x1a\x04\x90\xb5\ - \x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\x10\xd8\x01\x1a\x04\ - \x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowTrustOp\x10\xd9\x01\ - \x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAccountMergeOp\x10\ - \xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarManageData\ - Op\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarBumpSeq\ - uenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_StellarMa\ - nageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_St\ - ellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\x18\x01\x125\n*\ - MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\x1a\x04\x90\xb5\ - \x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\x01\x1a\x04\x98\ - \xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\x10\xb1\x02\x1a\ - \x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublicKey\x10\xb2\x02\ - \x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGetAddress\x10\xb3\ - \x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoAddress\x10\ - \xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_CardanoTxItemAck\ - \x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_CardanoTxAuxilia\ - ryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#MessageType_\ - CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\x12/\n$Messa\ - geType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\x18\x01\x12'\ - \n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\xb5\x18\x01\ - \x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\x98\xb5\x18\ - \x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\x1a\x04\x98\ - \xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\x02\x1a\x04\ - \x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\xc1\x02\x1a\ - \x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\x10\xc2\x02\ - \x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetGroup\x10\xc3\ - \x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoToken\x10\xc4\ - \x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxCertificate\ - \x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_CardanoTxWith\ - drawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType_CardanoTx\ - AuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_\ - CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&MessageType_\ - CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Me\ - ssageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\x04\x90\xb5\x18\x01\ - \x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\x02\x1a\x04\x98\xb5\ - \x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\x02\x1a\x04\x90\xb5\ - \x18\x01\x12/\n$MessageType_CardanoTxCollateralInput\x10\xcd\x02\x1a\x04\ - \x90\xb5\x18\x01\x12.\n#MessageType_CardanoTxRequiredSigner\x10\xce\x02\ - \x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_CardanoTxInlineDatumChunk\ - \x10\xcf\x02\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_CardanoTxReferen\ - ceScriptChunk\x10\xd0\x02\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_Car\ - danoTxReferenceInput\x10\xd1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessa\ - geType_RippleGetAddress\x10\x90\x03\x1a\x04\x90\xb5\x18\x01\x12$\n\x19Me\ - ssageType_RippleAddress\x10\x91\x03\x1a\x04\x98\xb5\x18\x01\x12#\n\x18Me\ - ssageType_RippleSignTx\x10\x92\x03\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMes\ - sageType_RippleSignedTx\x10\x93\x03\x1a\x04\x90\xb5\x18\x01\x123\n(Messa\ - geType_MoneroTransactionInitRequest\x10\xf5\x03\x1a\x04\x98\xb5\x18\x01\ - \x12/\n$MessageType_MoneroTransactionInitAck\x10\xf6\x03\x1a\x04\x98\xb5\ - \x18\x01\x127\n,MessageType_MoneroTransactionSetInputRequest\x10\xf7\x03\ - \x1a\x04\x98\xb5\x18\x01\x123\n(MessageType_MoneroTransactionSetInputAck\ - \x10\xf8\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactio\ - nInputViniRequest\x10\xfb\x03\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType\ - _MoneroTransactionInputViniAck\x10\xfc\x03\x1a\x04\x98\xb5\x18\x01\x12;\ - \n0MessageType_MoneroTransactionAllInputsSetRequest\x10\xfd\x03\x1a\x04\ - \x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionAllInputsSetAck\x10\ - \xfe\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactionSet\ - OutputRequest\x10\xff\x03\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_Mon\ - eroTransactionSetOutputAck\x10\x80\x04\x1a\x04\x98\xb5\x18\x01\x128\n-Me\ - ssageType_MoneroTransactionAllOutSetRequest\x10\x81\x04\x1a\x04\x98\xb5\ - \x18\x01\x124\n)MessageType_MoneroTransactionAllOutSetAck\x10\x82\x04\ - \x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactionSignInputRe\ - quest\x10\x83\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroTrans\ - actionSignInputAck\x10\x84\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageTyp\ - e_MoneroTransactionFinalRequest\x10\x85\x04\x1a\x04\x98\xb5\x18\x01\x120\ - \n%MessageType_MoneroTransactionFinalAck\x10\x86\x04\x1a\x04\x98\xb5\x18\ - \x01\x126\n+MessageType_MoneroKeyImageExportInitRequest\x10\x92\x04\x1a\ - \x04\x98\xb5\x18\x01\x122\n'MessageType_MoneroKeyImageExportInitAck\x10\ - \x93\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroKeyImageSyncSt\ - epRequest\x10\x94\x04\x1a\x04\x98\xb5\x18\x01\x120\n%MessageType_MoneroK\ - eyImageSyncStepAck\x10\x95\x04\x1a\x04\x98\xb5\x18\x01\x125\n*MessageTyp\ - e_MoneroKeyImageSyncFinalRequest\x10\x96\x04\x1a\x04\x98\xb5\x18\x01\x12\ - 1\n&MessageType_MoneroKeyImageSyncFinalAck\x10\x97\x04\x1a\x04\x98\xb5\ - \x18\x01\x12'\n\x1cMessageType_MoneroGetAddress\x10\x9c\x04\x1a\x04\x90\ - \xb5\x18\x01\x12$\n\x19MessageType_MoneroAddress\x10\x9d\x04\x1a\x04\x98\ - \xb5\x18\x01\x12(\n\x1dMessageType_MoneroGetWatchKey\x10\x9e\x04\x1a\x04\ - \x90\xb5\x18\x01\x12%\n\x1aMessageType_MoneroWatchKey\x10\x9f\x04\x1a\ - \x04\x98\xb5\x18\x01\x12-\n\"MessageType_DebugMoneroDiagRequest\x10\xa2\ - \x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_DebugMoneroDiagAck\ - \x10\xa3\x04\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_MoneroGetTxKeyRe\ - quest\x10\xa6\x04\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_MoneroGe\ - tTxKeyAck\x10\xa7\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroL\ - iveRefreshStartRequest\x10\xa8\x04\x1a\x04\x90\xb5\x18\x01\x120\n%Messag\ - eType_MoneroLiveRefreshStartAck\x10\xa9\x04\x1a\x04\x98\xb5\x18\x01\x123\ - \n(MessageType_MoneroLiveRefreshStepRequest\x10\xaa\x04\x1a\x04\x90\xb5\ - \x18\x01\x12/\n$MessageType_MoneroLiveRefreshStepAck\x10\xab\x04\x1a\x04\ - \x98\xb5\x18\x01\x124\n)MessageType_MoneroLiveRefreshFinalRequest\x10\ - \xac\x04\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_MoneroLiveRefreshFin\ - alAck\x10\xad\x04\x1a\x04\x98\xb5\x18\x01\x12&\n\x1bMessageType_EosGetPu\ - blicKey\x10\xd8\x04\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_EosPub\ - licKey\x10\xd9\x04\x1a\x04\x98\xb5\x18\x01\x12\x20\n\x15MessageType_EosS\ - ignTx\x10\xda\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_EosTxAct\ - ionRequest\x10\xdb\x04\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMessageType_Eos\ - TxActionAck\x10\xdc\x04\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17MessageType_E\ - osSignedTx\x10\xdd\x04\x1a\x04\x98\xb5\x18\x01\x126\n+MessageType_WebAut\ - hnListResidentCredentials\x10\xa0\x06\x1a\x04\x90\xb5\x18\x01\x12*\n\x1f\ - MessageType_WebAuthnCredentials\x10\xa1\x06\x1a\x04\x98\xb5\x18\x01\x124\ - \n)MessageType_WebAuthnAddResidentCredential\x10\xa2\x06\x1a\x04\x90\xb5\ - \x18\x01\x127\n,MessageType_WebAuthnRemoveResidentCredential\x10\xa3\x06\ - \x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_SolanaGetPublicKey\x10\ - \x84\x07\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_SolanaPublicKey\ - \x10\x85\x07\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_SolanaGetAddr\ - ess\x10\x86\x07\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_SolanaAddr\ - ess\x10\x87\x07\x1a\x04\x98\xb5\x18\x01\x12#\n\x18MessageType_SolanaSign\ - Tx\x10\x88\x07\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_SolanaTxSig\ - nature\x10\x89\x07\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMessageType_NostrGe\ - tPubkey\x10\xd1\x0f\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17MessageType_Nostr\ - Pubkey\x10\xd2\x0f\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMessageType_NostrSi\ - gnEvent\x10\xd3\x0f\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_NostrE\ - ventSignature\x10\xd4\x0f\x1a\x04\x98\xb5\x18\x01\x12)\n\x1eMessageType_\ - BenchmarkListNames\x10\x8cG\x1a\x04\x80\xa6\x1d\x01\x12%\n\x1aMessageTyp\ - e_BenchmarkNames\x10\x8dG\x1a\x04\x80\xa6\x1d\x01\x12#\n\x18MessageType_\ - BenchmarkRun\x10\x8eG\x1a\x04\x80\xa6\x1d\x01\x12&\n\x1bMessageType_Benc\ - hmarkResult\x10\x8fG\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\ - \x04\x08Z\x10\\\"\x04\x08G\x10J\"\x04\x08r\x10z\"\x06\x08\xdb\x01\x10\ - \xdb\x01\"\x06\x08\xe0\x01\x10\xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\ - \x06\x08\xb5\x02\x10\xb8\x02\"\x06\x08\xbc\x05\x10\xc5\x05\"\x06\x08\xe8\ - \x07\x10\xcb\x08B8\n#com.satoshilabs.trezor.lib.protobufB\rTrezorMessage\ - \x80\xa6\x1d\x01\ + \x12-\n\x1eMessageType_DebugLinkGetGcInfo\x10\xb1F\x1a\x08\x80\xa6\x1d\ + \x01\xa0\xb5\x18\x01\x12*\n\x1bMessageType_DebugLinkGcInfo\x10\xb2F\x1a\ + \x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12+\n\x20MessageType_EthereumGetPu\ + blicKey\x10\xc2\x03\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_Ethere\ + umPublicKey\x10\xc3\x03\x1a\x04\x98\xb5\x18\x01\x12(\n\x1eMessageType_Et\ + hereumGetAddress\x108\x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMessageType_Ethe\ + reumAddress\x109\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_EthereumS\ + ignTx\x10:\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_EthereumSignTxEIP1\ + 559\x10\xc4\x03\x1a\x04\x90\xb5\x18\x01\x12'\n\x1dMessageType_EthereumTx\ + Request\x10;\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\ + \x10<\x1a\x04\x90\xb5\x18\x01\x12)\n\x1fMessageType_EthereumSignMessage\ + \x10@\x1a\x04\x90\xb5\x18\x01\x12+\n!MessageType_EthereumVerifyMessage\ + \x10A\x1a\x04\x90\xb5\x18\x01\x12.\n$MessageType_EthereumMessageSignatur\ + e\x10B\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedData\ + \x10\xd0\x03\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_EthereumTypedDat\ + aStructRequest\x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&MessageType_Et\ + hereumTypedDataStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\x124\n)Mess\ + ageType_EthereumTypedDataValueRequest\x10\xd3\x03\x1a\x04\x98\xb5\x18\ + \x01\x120\n%MessageType_EthereumTypedDataValueAck\x10\xd4\x03\x1a\x04\ + \x90\xb5\x18\x01\x121\n&MessageType_EthereumTypedDataSignature\x10\xd5\ + \x03\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedHash\ + \x10\xd6\x03\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGetAddress\ + \x10C\x1a\x04\x90\xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\x10D\ + \x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\x1a\x04\ + \x90\xb5\x18\x01\x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\x98\xb5\ + \x18\x01\x12'\n\x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\x90\xb5\ + \x18\x01\x12)\n\x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\x98\xb5\ + \x18\x01\x12&\n\x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\x04\x90\ + \xb5\x18\x01\x12#\n\x18MessageType_TezosAddress\x10\x97\x01\x1a\x04\x98\ + \xb5\x18\x01\x12\"\n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\x04\x90\ + \xb5\x18\x01\x12$\n\x19MessageType_TezosSignedTx\x10\x99\x01\x1a\x04\x98\ + \xb5\x18\x01\x12(\n\x1dMessageType_TezosGetPublicKey\x10\x9a\x01\x1a\x04\ + \x90\xb5\x18\x01\x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\x01\x1a\ + \x04\x98\xb5\x18\x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\x01\x1a\ + \x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_StellarTxOpRequest\x10\xcb\ + \x01\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAddress\x10\ + \xcf\x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAddress\ + \x10\xd0\x01\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCreateAc\ + countOp\x10\xd2\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_Stella\ + rPaymentOp\x10\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_Stella\ + rPathPaymentStrictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12/\n$M\ + essageType_StellarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\x01\ + \x126\n+MessageType_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\x04\ + \x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\x01\ + \x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\x10\ + \xd8\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowTrust\ + Op\x10\xd9\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAccount\ + MergeOp\x10\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Stella\ + rManageDataOp\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_Ste\ + llarBumpSequenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageTyp\ + e_StellarManageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n*Mes\ + sageType_StellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\x18\ + \x01\x125\n*MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\x1a\ + \x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\x01\ + \x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\x10\ + \xb1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublicKey\ + \x10\xb2\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGetAdd\ + ress\x10\xb3\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoAd\ + dress\x10\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_CardanoT\ + xItemAck\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_CardanoT\ + xAuxiliaryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#Mess\ + ageType_CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\x12/\ + \n$MessageType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\x18\ + \x01\x12'\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\xb5\ + \x18\x01\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\x98\ + \xb5\x18\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\x1a\ + \x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\x02\ + \x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\xc1\ + \x02\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\x10\ + \xc2\x02\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetGroup\ + \x10\xc3\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoToken\ + \x10\xc4\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxCert\ + ificate\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Cardan\ + oTxWithdrawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType_Ca\ + rdanoTxAuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessa\ + geType_CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Messa\ + geType_CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\ + \x121\n&MessageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\x04\x90\ + \xb5\x18\x01\x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\x02\x1a\ + \x04\x98\xb5\x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\x02\x1a\ + \x04\x90\xb5\x18\x01\x12/\n$MessageType_CardanoTxCollateralInput\x10\xcd\ + \x02\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_CardanoTxRequiredSigner\ + \x10\xce\x02\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_CardanoTxInlineD\ + atumChunk\x10\xcf\x02\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_Cardano\ + TxReferenceScriptChunk\x10\xd0\x02\x1a\x04\x90\xb5\x18\x01\x12.\n#Messag\ + eType_CardanoTxReferenceInput\x10\xd1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\ + \x1cMessageType_RippleGetAddress\x10\x90\x03\x1a\x04\x90\xb5\x18\x01\x12\ + $\n\x19MessageType_RippleAddress\x10\x91\x03\x1a\x04\x98\xb5\x18\x01\x12\ + #\n\x18MessageType_RippleSignTx\x10\x92\x03\x1a\x04\x90\xb5\x18\x01\x12%\ + \n\x1aMessageType_RippleSignedTx\x10\x93\x03\x1a\x04\x90\xb5\x18\x01\x12\ + 3\n(MessageType_MoneroTransactionInitRequest\x10\xf5\x03\x1a\x04\x98\xb5\ + \x18\x01\x12/\n$MessageType_MoneroTransactionInitAck\x10\xf6\x03\x1a\x04\ + \x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionSetInputRequest\x10\ + \xf7\x03\x1a\x04\x98\xb5\x18\x01\x123\n(MessageType_MoneroTransactionSet\ + InputAck\x10\xf8\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTr\ + ansactionInputViniRequest\x10\xfb\x03\x1a\x04\x98\xb5\x18\x01\x124\n)Mes\ + sageType_MoneroTransactionInputViniAck\x10\xfc\x03\x1a\x04\x98\xb5\x18\ + \x01\x12;\n0MessageType_MoneroTransactionAllInputsSetRequest\x10\xfd\x03\ + \x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionAllInputsSe\ + tAck\x10\xfe\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransa\ + ctionSetOutputRequest\x10\xff\x03\x1a\x04\x98\xb5\x18\x01\x124\n)Message\ + Type_MoneroTransactionSetOutputAck\x10\x80\x04\x1a\x04\x98\xb5\x18\x01\ + \x128\n-MessageType_MoneroTransactionAllOutSetRequest\x10\x81\x04\x1a\ + \x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroTransactionAllOutSetAck\ + \x10\x82\x04\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactio\ + nSignInputRequest\x10\x83\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType\ + _MoneroTransactionSignInputAck\x10\x84\x04\x1a\x04\x98\xb5\x18\x01\x124\ + \n)MessageType_MoneroTransactionFinalRequest\x10\x85\x04\x1a\x04\x98\xb5\ + \x18\x01\x120\n%MessageType_MoneroTransactionFinalAck\x10\x86\x04\x1a\ + \x04\x98\xb5\x18\x01\x126\n+MessageType_MoneroKeyImageExportInitRequest\ + \x10\x92\x04\x1a\x04\x98\xb5\x18\x01\x122\n'MessageType_MoneroKeyImageEx\ + portInitAck\x10\x93\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_Moner\ + oKeyImageSyncStepRequest\x10\x94\x04\x1a\x04\x98\xb5\x18\x01\x120\n%Mess\ + ageType_MoneroKeyImageSyncStepAck\x10\x95\x04\x1a\x04\x98\xb5\x18\x01\ + \x125\n*MessageType_MoneroKeyImageSyncFinalRequest\x10\x96\x04\x1a\x04\ + \x98\xb5\x18\x01\x121\n&MessageType_MoneroKeyImageSyncFinalAck\x10\x97\ + \x04\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_MoneroGetAddress\x10\ + \x9c\x04\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_MoneroAddress\x10\ + \x9d\x04\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_MoneroGetWatchKey\ + \x10\x9e\x04\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_MoneroWatchKe\ + y\x10\x9f\x04\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_DebugMoneroDia\ + gRequest\x10\xa2\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_Debug\ + MoneroDiagAck\x10\xa3\x04\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_Mon\ + eroGetTxKeyRequest\x10\xa6\x04\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessage\ + Type_MoneroGetTxKeyAck\x10\xa7\x04\x1a\x04\x98\xb5\x18\x01\x124\n)Messag\ + eType_MoneroLiveRefreshStartRequest\x10\xa8\x04\x1a\x04\x90\xb5\x18\x01\ + \x120\n%MessageType_MoneroLiveRefreshStartAck\x10\xa9\x04\x1a\x04\x98\ + \xb5\x18\x01\x123\n(MessageType_MoneroLiveRefreshStepRequest\x10\xaa\x04\ + \x1a\x04\x90\xb5\x18\x01\x12/\n$MessageType_MoneroLiveRefreshStepAck\x10\ + \xab\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroLiveRefreshFin\ + alRequest\x10\xac\x04\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_MoneroL\ + iveRefreshFinalAck\x10\xad\x04\x1a\x04\x98\xb5\x18\x01\x12&\n\x1bMessage\ + Type_EosGetPublicKey\x10\xd8\x04\x1a\x04\x90\xb5\x18\x01\x12#\n\x18Messa\ + geType_EosPublicKey\x10\xd9\x04\x1a\x04\x98\xb5\x18\x01\x12\x20\n\x15Mes\ + sageType_EosSignTx\x10\xda\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessage\ + Type_EosTxActionRequest\x10\xdb\x04\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMe\ + ssageType_EosTxActionAck\x10\xdc\x04\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17\ + MessageType_EosSignedTx\x10\xdd\x04\x1a\x04\x98\xb5\x18\x01\x126\n+Messa\ + geType_WebAuthnListResidentCredentials\x10\xa0\x06\x1a\x04\x90\xb5\x18\ + \x01\x12*\n\x1fMessageType_WebAuthnCredentials\x10\xa1\x06\x1a\x04\x98\ + \xb5\x18\x01\x124\n)MessageType_WebAuthnAddResidentCredential\x10\xa2\ + \x06\x1a\x04\x90\xb5\x18\x01\x127\n,MessageType_WebAuthnRemoveResidentCr\ + edential\x10\xa3\x06\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_Solan\ + aGetPublicKey\x10\x84\x07\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_\ + SolanaPublicKey\x10\x85\x07\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageTyp\ + e_SolanaGetAddress\x10\x86\x07\x1a\x04\x90\xb5\x18\x01\x12$\n\x19Message\ + Type_SolanaAddress\x10\x87\x07\x1a\x04\x98\xb5\x18\x01\x12#\n\x18Message\ + Type_SolanaSignTx\x10\x88\x07\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageT\ + ype_SolanaTxSignature\x10\x89\x07\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMess\ + ageType_NostrGetPubkey\x10\xd1\x0f\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17Me\ + ssageType_NostrPubkey\x10\xd2\x0f\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMess\ + ageType_NostrSignEvent\x10\xd3\x0f\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMes\ + sageType_NostrEventSignature\x10\xd4\x0f\x1a\x04\x98\xb5\x18\x01\x12)\n\ + \x1eMessageType_BenchmarkListNames\x10\x8cG\x1a\x04\x80\xa6\x1d\x01\x12%\ + \n\x1aMessageType_BenchmarkNames\x10\x8dG\x1a\x04\x80\xa6\x1d\x01\x12#\n\ + \x18MessageType_BenchmarkRun\x10\x8eG\x1a\x04\x80\xa6\x1d\x01\x12&\n\x1b\ + MessageType_BenchmarkResult\x10\x8fG\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\ + \xf3\x18\x01\"\x04\x08Z\x10\\\"\x04\x08G\x10J\"\x04\x08r\x10z\"\x06\x08\ + \xdb\x01\x10\xdb\x01\"\x06\x08\xe0\x01\x10\xe0\x01\"\x06\x08\xac\x02\x10\ + \xb0\x02\"\x06\x08\xb5\x02\x10\xb8\x02\"\x06\x08\xbc\x05\x10\xc5\x05\"\ + \x06\x08\xe8\x07\x10\xcb\x08B8\n#com.satoshilabs.trezor.lib.protobufB\rT\ + rezorMessage\x80\xa6\x1d\x01\ "; /// `FileDescriptorProto` object which was a source for this generated file diff --git a/rust/trezor-client/src/protos/generated/messages_debug.rs b/rust/trezor-client/src/protos/generated/messages_debug.rs index a0ae25dfa5..6e73f9cf43 100644 --- a/rust/trezor-client/src/protos/generated/messages_debug.rs +++ b/rust/trezor-client/src/protos/generated/messages_debug.rs @@ -3666,6 +3666,441 @@ impl ::protobuf::reflect::ProtobufValue for DebugLinkOptigaSetSecMax { type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage; } +// @@protoc_insertion_point(message:hw.trezor.messages.debug.DebugLinkGetGcInfo) +#[derive(PartialEq,Clone,Default,Debug)] +pub struct DebugLinkGetGcInfo { + // special fields + // @@protoc_insertion_point(special_field:hw.trezor.messages.debug.DebugLinkGetGcInfo.special_fields) + pub special_fields: ::protobuf::SpecialFields, +} + +impl<'a> ::std::default::Default for &'a DebugLinkGetGcInfo { + fn default() -> &'a DebugLinkGetGcInfo { + ::default_instance() + } +} + +impl DebugLinkGetGcInfo { + pub fn new() -> DebugLinkGetGcInfo { + ::std::default::Default::default() + } + + fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData { + let mut fields = ::std::vec::Vec::with_capacity(0); + let mut oneofs = ::std::vec::Vec::with_capacity(0); + ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::( + "DebugLinkGetGcInfo", + fields, + oneofs, + ) + } +} + +impl ::protobuf::Message for DebugLinkGetGcInfo { + const NAME: &'static str = "DebugLinkGetGcInfo"; + + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> { + while let Some(tag) = is.read_raw_tag_or_eof()? { + match tag { + tag => { + ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u64 { + let mut my_size = 0; + my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields()); + self.special_fields.cached_size().set(my_size as u32); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> { + os.write_unknown_fields(self.special_fields.unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn special_fields(&self) -> &::protobuf::SpecialFields { + &self.special_fields + } + + fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields { + &mut self.special_fields + } + + fn new() -> DebugLinkGetGcInfo { + DebugLinkGetGcInfo::new() + } + + fn clear(&mut self) { + self.special_fields.clear(); + } + + fn default_instance() -> &'static DebugLinkGetGcInfo { + static instance: DebugLinkGetGcInfo = DebugLinkGetGcInfo { + special_fields: ::protobuf::SpecialFields::new(), + }; + &instance + } +} + +impl ::protobuf::MessageFull for DebugLinkGetGcInfo { + fn descriptor() -> ::protobuf::reflect::MessageDescriptor { + static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new(); + descriptor.get(|| file_descriptor().message_by_package_relative_name("DebugLinkGetGcInfo").unwrap()).clone() + } +} + +impl ::std::fmt::Display for DebugLinkGetGcInfo { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for DebugLinkGetGcInfo { + type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage; +} + +// @@protoc_insertion_point(message:hw.trezor.messages.debug.DebugLinkGcInfo) +#[derive(PartialEq,Clone,Default,Debug)] +pub struct DebugLinkGcInfo { + // message fields + // @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkGcInfo.items) + pub items: ::std::vec::Vec, + // special fields + // @@protoc_insertion_point(special_field:hw.trezor.messages.debug.DebugLinkGcInfo.special_fields) + pub special_fields: ::protobuf::SpecialFields, +} + +impl<'a> ::std::default::Default for &'a DebugLinkGcInfo { + fn default() -> &'a DebugLinkGcInfo { + ::default_instance() + } +} + +impl DebugLinkGcInfo { + pub fn new() -> DebugLinkGcInfo { + ::std::default::Default::default() + } + + fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData { + let mut fields = ::std::vec::Vec::with_capacity(1); + let mut oneofs = ::std::vec::Vec::with_capacity(0); + fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>( + "items", + |m: &DebugLinkGcInfo| { &m.items }, + |m: &mut DebugLinkGcInfo| { &mut m.items }, + )); + ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::( + "DebugLinkGcInfo", + fields, + oneofs, + ) + } +} + +impl ::protobuf::Message for DebugLinkGcInfo { + const NAME: &'static str = "DebugLinkGcInfo"; + + fn is_initialized(&self) -> bool { + for v in &self.items { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> { + while let Some(tag) = is.read_raw_tag_or_eof()? { + match tag { + 10 => { + self.items.push(is.read_message()?); + }, + tag => { + ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u64 { + let mut my_size = 0; + for value in &self.items { + let len = value.compute_size(); + my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len; + }; + my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields()); + self.special_fields.cached_size().set(my_size as u32); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> { + for v in &self.items { + ::protobuf::rt::write_message_field_with_cached_size(1, v, os)?; + }; + os.write_unknown_fields(self.special_fields.unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn special_fields(&self) -> &::protobuf::SpecialFields { + &self.special_fields + } + + fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields { + &mut self.special_fields + } + + fn new() -> DebugLinkGcInfo { + DebugLinkGcInfo::new() + } + + fn clear(&mut self) { + self.items.clear(); + self.special_fields.clear(); + } + + fn default_instance() -> &'static DebugLinkGcInfo { + static instance: DebugLinkGcInfo = DebugLinkGcInfo { + items: ::std::vec::Vec::new(), + special_fields: ::protobuf::SpecialFields::new(), + }; + &instance + } +} + +impl ::protobuf::MessageFull for DebugLinkGcInfo { + fn descriptor() -> ::protobuf::reflect::MessageDescriptor { + static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new(); + descriptor.get(|| file_descriptor().message_by_package_relative_name("DebugLinkGcInfo").unwrap()).clone() + } +} + +impl ::std::fmt::Display for DebugLinkGcInfo { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for DebugLinkGcInfo { + type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage; +} + +/// Nested message and enums of message `DebugLinkGcInfo` +pub mod debug_link_gc_info { + // @@protoc_insertion_point(message:hw.trezor.messages.debug.DebugLinkGcInfo.DebugLinkGcInfoItem) + #[derive(PartialEq,Clone,Default,Debug)] + pub struct DebugLinkGcInfoItem { + // message fields + // @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkGcInfo.DebugLinkGcInfoItem.name) + pub name: ::std::option::Option<::std::string::String>, + // @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkGcInfo.DebugLinkGcInfoItem.value) + pub value: ::std::option::Option, + // special fields + // @@protoc_insertion_point(special_field:hw.trezor.messages.debug.DebugLinkGcInfo.DebugLinkGcInfoItem.special_fields) + pub special_fields: ::protobuf::SpecialFields, + } + + impl<'a> ::std::default::Default for &'a DebugLinkGcInfoItem { + fn default() -> &'a DebugLinkGcInfoItem { + ::default_instance() + } + } + + impl DebugLinkGcInfoItem { + pub fn new() -> DebugLinkGcInfoItem { + ::std::default::Default::default() + } + + // required string name = 1; + + pub fn name(&self) -> &str { + match self.name.as_ref() { + Some(v) => v, + None => "", + } + } + + pub fn clear_name(&mut self) { + self.name = ::std::option::Option::None; + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = ::std::option::Option::Some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name = ::std::option::Option::Some(::std::string::String::new()); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // required uint64 value = 2; + + pub fn value(&self) -> u64 { + self.value.unwrap_or(0) + } + + pub fn clear_value(&mut self) { + self.value = ::std::option::Option::None; + } + + pub fn has_value(&self) -> bool { + self.value.is_some() + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: u64) { + self.value = ::std::option::Option::Some(v); + } + + pub(in super) fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData { + let mut fields = ::std::vec::Vec::with_capacity(2); + let mut oneofs = ::std::vec::Vec::with_capacity(0); + fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>( + "name", + |m: &DebugLinkGcInfoItem| { &m.name }, + |m: &mut DebugLinkGcInfoItem| { &mut m.name }, + )); + fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>( + "value", + |m: &DebugLinkGcInfoItem| { &m.value }, + |m: &mut DebugLinkGcInfoItem| { &mut m.value }, + )); + ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::( + "DebugLinkGcInfo.DebugLinkGcInfoItem", + fields, + oneofs, + ) + } + } + + impl ::protobuf::Message for DebugLinkGcInfoItem { + const NAME: &'static str = "DebugLinkGcInfoItem"; + + fn is_initialized(&self) -> bool { + if self.name.is_none() { + return false; + } + if self.value.is_none() { + return false; + } + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> { + while let Some(tag) = is.read_raw_tag_or_eof()? { + match tag { + 10 => { + self.name = ::std::option::Option::Some(is.read_string()?); + }, + 16 => { + self.value = ::std::option::Option::Some(is.read_uint64()?); + }, + tag => { + ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u64 { + let mut my_size = 0; + if let Some(v) = self.name.as_ref() { + my_size += ::protobuf::rt::string_size(1, &v); + } + if let Some(v) = self.value { + my_size += ::protobuf::rt::uint64_size(2, v); + } + my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields()); + self.special_fields.cached_size().set(my_size as u32); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> { + if let Some(v) = self.name.as_ref() { + os.write_string(1, v)?; + } + if let Some(v) = self.value { + os.write_uint64(2, v)?; + } + os.write_unknown_fields(self.special_fields.unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn special_fields(&self) -> &::protobuf::SpecialFields { + &self.special_fields + } + + fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields { + &mut self.special_fields + } + + fn new() -> DebugLinkGcInfoItem { + DebugLinkGcInfoItem::new() + } + + fn clear(&mut self) { + self.name = ::std::option::Option::None; + self.value = ::std::option::Option::None; + self.special_fields.clear(); + } + + fn default_instance() -> &'static DebugLinkGcInfoItem { + static instance: DebugLinkGcInfoItem = DebugLinkGcInfoItem { + name: ::std::option::Option::None, + value: ::std::option::Option::None, + special_fields: ::protobuf::SpecialFields::new(), + }; + &instance + } + } + + impl ::protobuf::MessageFull for DebugLinkGcInfoItem { + fn descriptor() -> ::protobuf::reflect::MessageDescriptor { + static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new(); + descriptor.get(|| super::file_descriptor().message_by_package_relative_name("DebugLinkGcInfo.DebugLinkGcInfoItem").unwrap()).clone() + } + } + + impl ::std::fmt::Display for DebugLinkGcInfoItem { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } + } + + impl ::protobuf::reflect::ProtobufValue for DebugLinkGcInfoItem { + type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage; + } +} + static file_descriptor_proto_data: &'static [u8] = b"\ \n\x14messages-debug.proto\x12\x18hw.trezor.messages.debug\x1a\x15messag\ es-common.proto\x1a\x19messages-management.proto\x1a\roptions.proto\"\ @@ -3718,8 +4153,13 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x01(\rR\x06sector\".\n\x14DebugLinkEraseSdCard\x12\x16\n\x06format\x18\ \x01\x20\x01(\x08R\x06format\"0\n\x14DebugLinkWatchLayout\x12\x14\n\x05w\ atch\x18\x01\x20\x01(\x08R\x05watch:\x02\x18\x01\"\x1f\n\x19DebugLinkRes\ - etDebugEvents:\x02\x18\x01\"\x1a\n\x18DebugLinkOptigaSetSecMaxB=\n#com.s\ - atoshilabs.trezor.lib.protobufB\x12TrezorMessageDebug\x80\xa6\x1d\x01\ + etDebugEvents:\x02\x18\x01\"\x1a\n\x18DebugLinkOptigaSetSecMax\"\x14\n\ + \x12DebugLinkGetGcInfo\"\xa7\x01\n\x0fDebugLinkGcInfo\x12S\n\x05items\ + \x18\x01\x20\x03(\x0b2=.hw.trezor.messages.debug.DebugLinkGcInfo.DebugLi\ + nkGcInfoItemR\x05items\x1a?\n\x13DebugLinkGcInfoItem\x12\x12\n\x04name\ + \x18\x01\x20\x02(\tR\x04name\x12\x14\n\x05value\x18\x02\x20\x02(\x04R\ + \x05valueB=\n#com.satoshilabs.trezor.lib.protobufB\x12TrezorMessageDebug\ + \x80\xa6\x1d\x01\ "; /// `FileDescriptorProto` object which was a source for this generated file @@ -3740,7 +4180,7 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor { deps.push(super::messages_common::file_descriptor().clone()); deps.push(super::messages_management::file_descriptor().clone()); deps.push(super::options::file_descriptor().clone()); - let mut messages = ::std::vec::Vec::with_capacity(16); + let mut messages = ::std::vec::Vec::with_capacity(19); messages.push(DebugLinkDecision::generated_message_descriptor_data()); messages.push(DebugLinkLayout::generated_message_descriptor_data()); messages.push(DebugLinkReseedRandom::generated_message_descriptor_data()); @@ -3757,6 +4197,9 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor { messages.push(DebugLinkWatchLayout::generated_message_descriptor_data()); messages.push(DebugLinkResetDebugEvents::generated_message_descriptor_data()); messages.push(DebugLinkOptigaSetSecMax::generated_message_descriptor_data()); + messages.push(DebugLinkGetGcInfo::generated_message_descriptor_data()); + messages.push(DebugLinkGcInfo::generated_message_descriptor_data()); + messages.push(debug_link_gc_info::DebugLinkGcInfoItem::generated_message_descriptor_data()); let mut enums = ::std::vec::Vec::with_capacity(4); enums.push(debug_link_decision::DebugSwipeDirection::generated_enum_descriptor_data()); enums.push(debug_link_decision::DebugButton::generated_enum_descriptor_data()); diff --git a/tests/conftest.py b/tests/conftest.py index 12ed8ed3f1..3d683e8b60 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -313,6 +313,9 @@ def client( # Resetting all the debug events to not be influenced by previous test _raw_client.debug.reset_debug_events() + # Make sure there are no GC leaks from previous tests + _raw_client.debug.check_gc_info() + if test_ui: # we need to reseed before the wipe _raw_client.debug.reseed(0) @@ -370,6 +373,9 @@ def client( with ui_tests.screen_recording(_raw_client, request): yield _raw_client finally: + # Make sure there are no GC leaks from this test + _raw_client.debug.check_gc_info() + _raw_client.close() diff --git a/tests/device_tests/test_debuglink.py b/tests/device_tests/test_debuglink.py index 747613db12..26fcf1e29b 100644 --- a/tests/device_tests/test_debuglink.py +++ b/tests/device_tests/test_debuglink.py @@ -92,3 +92,12 @@ def test_softlock_instability(client: Client): # If the device actually called config.unlock(), it would use additional randomness. # That is undesirable. Assert that the returned entropy is still the same. assert misc.get_entropy(client, 16) == entropy_after_wipe + + +@pytest.mark.models("core") +def test_gc_info(client: Client): + client.debug.check_gc_info() + gc_info = client.debug.prev_gc_info + assert gc_info["free"] + gc_info["used"] == gc_info["total"] + assert gc_info["free"] >= 0.5 * gc_info["total"] + assert gc_info["max_free"] >= 0.5 * gc_info["total"] diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index f1558a304b..0f55d77e22 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -2399,6 +2399,7 @@ "T2T1_cs_test_cancel.py::test_cancel_message_via_initialize[message0]": "192ab5c3d87834d4f26d2a4696288984c33ad65045d40fdda9f89cc58c5b7895", "T2T1_cs_test_cancel.py::test_cancel_message_via_initialize[message1]": "59f123fbce3d11932aae87de4a1736b3a116416804dbebc4ddbb1c20b083a3c0", "T2T1_cs_test_cancel.py::test_cancel_on_paginated": "0a19c0af520104b7851a834f0fa334be14a42d1d17f02a5bef6439890ac89646", +"T2T1_cs_test_debuglink.py::test_gc_info": "32d380b2c0942f8a2ab6a32e0e4c8a2ad2ab6750ee39c6fa4d4f0bacf59a4b7c", "T2T1_cs_test_debuglink.py::test_softlock_instability": "926558b36f31a1bfa4723a22b2faf1d6bf91561c4a39e2c10b21164ea07167da", "T2T1_cs_test_firmware_hash.py::test_firmware_hash_emu": "287eb5bf75044941242fe4326fd3c2f92687d7d229c8c43334f188c8d0fecaa5", "T2T1_cs_test_firmware_hash.py::test_firmware_hash_hw": "32d380b2c0942f8a2ab6a32e0e4c8a2ad2ab6750ee39c6fa4d4f0bacf59a4b7c", @@ -3877,6 +3878,7 @@ "T2T1_de_test_cancel.py::test_cancel_message_via_initialize[message0]": "981754c833dd90ed5fc83f1371c42918934b715d737884927322b9102341f3a8", "T2T1_de_test_cancel.py::test_cancel_message_via_initialize[message1]": "f42046d347547b103e63cdbfc9099ced85a22209d50fbc8cd4f90212e02163f2", "T2T1_de_test_cancel.py::test_cancel_on_paginated": "40740ac190932ecf5c8167b9ee9474e5860054b1b0f0684ee7fa3db22e26514c", +"T2T1_de_test_debuglink.py::test_gc_info": "a3edf3ced8fa1fa6b9f67f869a28bc880ce5e214b0adfaf839cd867875845912", "T2T1_de_test_debuglink.py::test_softlock_instability": "0b0fadfb6b6d39b2ea37bc09396b373fc7386a81cffd2ce893b346c019304ee3", "T2T1_de_test_firmware_hash.py::test_firmware_hash_emu": "c97b08ab7252cc9a06e6ffd6945be3272bfa0e58a0716b9a4c98884ecdf42bad", "T2T1_de_test_firmware_hash.py::test_firmware_hash_hw": "a3edf3ced8fa1fa6b9f67f869a28bc880ce5e214b0adfaf839cd867875845912", @@ -5355,6 +5357,7 @@ "T2T1_en_test_cancel.py::test_cancel_message_via_initialize[message0]": "6c42efb29e5a843dd3322ab7e9f8a4ddd0eae2d6d25935c7f4c30cc657c8d936", "T2T1_en_test_cancel.py::test_cancel_message_via_initialize[message1]": "6b509c6baf3516715969ba97d41a5e157419928f52624e19603b0a8807d8d971", "T2T1_en_test_cancel.py::test_cancel_on_paginated": "42db3f4ad5a4e377c57c8907a91cefec4cc4fa4265877f8592f9c338b73f1524", +"T2T1_en_test_debuglink.py::test_gc_info": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", "T2T1_en_test_debuglink.py::test_softlock_instability": "c7698dcc8b2f0130b284be731c11988f8b1ecd829eeeea958a32565e0fe50ca7", "T2T1_en_test_firmware_hash.py::test_firmware_hash_emu": "7a5f7b57930abc99b37db9aac7cb353638d42eeede5c7d6a3a754bac633f57f3", "T2T1_en_test_firmware_hash.py::test_firmware_hash_hw": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", @@ -6851,6 +6854,7 @@ "T2T1_es_test_cancel.py::test_cancel_message_via_initialize[message0]": "7bcec383a62fc12a0611da344b442e518a8260413d5c257494558b09d9d406ad", "T2T1_es_test_cancel.py::test_cancel_message_via_initialize[message1]": "d7e9f16326e3bf62980b0ba169f6d149d27ba870755ce950624cd570e54e273a", "T2T1_es_test_cancel.py::test_cancel_on_paginated": "ea94399ccda1508fc0622d1dc2775689dbedb701e84784b84077398940501c10", +"T2T1_es_test_debuglink.py::test_gc_info": "1775658fa541fff7933453c1d346449c492079a39341e07135ac9e7662b3bbd3", "T2T1_es_test_debuglink.py::test_softlock_instability": "0a174dd4d9b39afcb18a18955c768822dc3112555d91166e3cec3bc8a8210e62", "T2T1_es_test_firmware_hash.py::test_firmware_hash_emu": "3ebf5eba08a5fb9ba2c605b3304e47fae91cc6544517e5a2f22930c38be44216", "T2T1_es_test_firmware_hash.py::test_firmware_hash_hw": "1775658fa541fff7933453c1d346449c492079a39341e07135ac9e7662b3bbd3", @@ -8329,6 +8333,7 @@ "T2T1_fr_test_cancel.py::test_cancel_message_via_initialize[message0]": "ef6d4ca69c34cec4e0c114983fc54e58652c8343a140ba60bd107b56f0ec85e2", "T2T1_fr_test_cancel.py::test_cancel_message_via_initialize[message1]": "27978c7cddb9077711645bc08cc7c43d2467dac6b26d56a41a4346d50f20786f", "T2T1_fr_test_cancel.py::test_cancel_on_paginated": "5ac10eb64f453b81430ef9cce7783fe1ddb04590b3ce36355b221ebbee3f4c83", +"T2T1_fr_test_debuglink.py::test_gc_info": "94d3ba1cba15b836e6ebc48ab307aeea71275ef2d9849aaabc8e883df555ce3f", "T2T1_fr_test_debuglink.py::test_softlock_instability": "ce49de033982931a1756234463697fa7686aab43f6076945503fe24e14da9012", "T2T1_fr_test_firmware_hash.py::test_firmware_hash_emu": "a54e247a35a3503a24bca28c3935b7755aa13f6129258b2e71771d9d7b6a0d90", "T2T1_fr_test_firmware_hash.py::test_firmware_hash_hw": "94d3ba1cba15b836e6ebc48ab307aeea71275ef2d9849aaabc8e883df555ce3f", @@ -9807,6 +9812,7 @@ "T2T1_pt_test_cancel.py::test_cancel_message_via_initialize[message0]": "540ebc170b89900eeee33eda4140db7aafccdc8e08bf2172dd7ee386875de2e8", "T2T1_pt_test_cancel.py::test_cancel_message_via_initialize[message1]": "99f4de0897948405616f2ab8b4719890c44459fd2d30327358a96bd9685f0f6a", "T2T1_pt_test_cancel.py::test_cancel_on_paginated": "350501346a59780671b8404c9c9efb0d69b1eac3d7267b52dd20804b375808a7", +"T2T1_pt_test_debuglink.py::test_gc_info": "e9e80e1bfd347b598699a7a84deb8932eff90fc5fb8b56771453e06fe3c4c216", "T2T1_pt_test_debuglink.py::test_softlock_instability": "be814e5b9207a407f3dbaa2fbf1fb83ffd7b645c3b69b784199b121b82b2a350", "T2T1_pt_test_firmware_hash.py::test_firmware_hash_emu": "285d7ced5a629cdd3098907a8fdecbd043e715611acacdbbd57ee3c0dd24c194", "T2T1_pt_test_firmware_hash.py::test_firmware_hash_hw": "e9e80e1bfd347b598699a7a84deb8932eff90fc5fb8b56771453e06fe3c4c216", @@ -11520,6 +11526,7 @@ "T3B1_cs_test_cancel.py::test_cancel_message_via_initialize[message0]": "ca19c00ab3c36c71d4b7b4a0bc8fd439b2c27dcd72a6518eeed9478b8c7bedf0", "T3B1_cs_test_cancel.py::test_cancel_message_via_initialize[message1]": "235e1e51728cb7b63db44e9b6acd8991d41cc484b31b7080471d28cc6bfa8cc3", "T3B1_cs_test_cancel.py::test_cancel_on_paginated": "4d9b1743622052312dc5de782f72ca2836d3748f1cb97909985ea8af08d02af7", +"T3B1_cs_test_debuglink.py::test_gc_info": "92840d4624bb07440bb1ab5cb4b57251c9950388accbc8334a9a7d609ededb01", "T3B1_cs_test_debuglink.py::test_softlock_instability": "4ed9a94aeee179869a59ede99b6b6b0b5f1cfbc03b29a9f6a26f6128702a7c9c", "T3B1_cs_test_firmware_hash.py::test_firmware_hash_emu": "5b79181fbf2587080248983cf9445ce963f9ecd2d673e53100993217597bb9c0", "T3B1_cs_test_firmware_hash.py::test_firmware_hash_hw": "92840d4624bb07440bb1ab5cb4b57251c9950388accbc8334a9a7d609ededb01", @@ -12917,6 +12924,7 @@ "T3B1_de_test_cancel.py::test_cancel_message_via_initialize[message0]": "631b5ea29f47a268dd54f4de025426cfcd8a1c52d1c62fd8353c1c594f66e2f3", "T3B1_de_test_cancel.py::test_cancel_message_via_initialize[message1]": "5e56f0b343dafa221fc38dbc9b1d652a469f5fc88a77031c3723800013dc1d50", "T3B1_de_test_cancel.py::test_cancel_on_paginated": "440cc13e6215df114217976e13cde9ac4fc91811dc0a4d0f6f5e16fd376d8baf", +"T3B1_de_test_debuglink.py::test_gc_info": "c92ee4e050daadcfc7cc95657b00deed76bb463d486eefcc66455bdbe60faa33", "T3B1_de_test_debuglink.py::test_softlock_instability": "38aeff1545192c030b2ea27378bd800dc66ff84cf39aa5a4a6aa5d396561b591", "T3B1_de_test_firmware_hash.py::test_firmware_hash_emu": "605c7dc4e32815499a6c4029a1109a429177f608efce9e7f44c88e8f5e7628e3", "T3B1_de_test_firmware_hash.py::test_firmware_hash_hw": "c92ee4e050daadcfc7cc95657b00deed76bb463d486eefcc66455bdbe60faa33", @@ -14314,6 +14322,7 @@ "T3B1_en_test_cancel.py::test_cancel_message_via_initialize[message0]": "c09ec39402dbbb6919240948758b49c92bac461790b8b185d6ee32a7ad62ddec", "T3B1_en_test_cancel.py::test_cancel_message_via_initialize[message1]": "575f44edfeab04d7a1b677cd0194259981edf43a0e598bc40ce3cc8cdc8d65d7", "T3B1_en_test_cancel.py::test_cancel_on_paginated": "0b0e488d2cf38ce63f6257b66fce5bd53caa8fa50a3c611ce0cf805ed18c8888", +"T3B1_en_test_debuglink.py::test_gc_info": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", "T3B1_en_test_debuglink.py::test_softlock_instability": "41244d3c80d7381f3f81528d339f5c9c04e65e5f3c92399d94230a3732dc05a3", "T3B1_en_test_firmware_hash.py::test_firmware_hash_emu": "db0f817babbc80656cd9aad6b9fffa8d1ad8b9f33764acf537c3e200d0f5340e", "T3B1_en_test_firmware_hash.py::test_firmware_hash_hw": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", @@ -15711,6 +15720,7 @@ "T3B1_es_test_cancel.py::test_cancel_message_via_initialize[message0]": "1c713b58d351410f84dc4a70049be1a5481d2a49d362886a2c0d8b4665e13fea", "T3B1_es_test_cancel.py::test_cancel_message_via_initialize[message1]": "a2632c95e9c92e6b4fd1a2f9cb7bddfba991c0391dc6c4febc1fa4ec4e0d433d", "T3B1_es_test_cancel.py::test_cancel_on_paginated": "67bf086ca7571bffea73d3aff230ad99fa4d9bb234a908d724bcd21065d359c1", +"T3B1_es_test_debuglink.py::test_gc_info": "211e7c3419bd48ceefc570971fc522f809b39614563be948fd1e545366506dee", "T3B1_es_test_debuglink.py::test_softlock_instability": "c6dc2bcc37d51ffb253a3058798ba67699cb5aed19ddee8709b36782acc01c18", "T3B1_es_test_firmware_hash.py::test_firmware_hash_emu": "2f310fd2086bd82d0d7cbcd32d6123d01c3d9472b42707b66df96ea932c39812", "T3B1_es_test_firmware_hash.py::test_firmware_hash_hw": "211e7c3419bd48ceefc570971fc522f809b39614563be948fd1e545366506dee", @@ -17108,6 +17118,7 @@ "T3B1_fr_test_cancel.py::test_cancel_message_via_initialize[message0]": "fd8b9b8712478bb97aee81defe0fe76c7f45a7f0bc3d9cdcc90d6307fc7f0bea", "T3B1_fr_test_cancel.py::test_cancel_message_via_initialize[message1]": "e02c0298754c88ca26f81328b28a63957b251b4475273578d76fdd2dbf088fae", "T3B1_fr_test_cancel.py::test_cancel_on_paginated": "cc10b5f955a55f7cb1c823b618ea8eef638a7314f7aaa14229f946013e8b5a59", +"T3B1_fr_test_debuglink.py::test_gc_info": "35c9c9529c59ca5c386ac05856f7452f26cde732203b5b61ec9321230b52df89", "T3B1_fr_test_debuglink.py::test_softlock_instability": "15b04fffe59e048d6ce34e08e010da3f3f5e5de944277ecdccc12e16a8ff22b8", "T3B1_fr_test_firmware_hash.py::test_firmware_hash_emu": "942d507c7835412f30c5cde1e3eff43ceedb21a5d918db4d88f025468f4c7c40", "T3B1_fr_test_firmware_hash.py::test_firmware_hash_hw": "35c9c9529c59ca5c386ac05856f7452f26cde732203b5b61ec9321230b52df89", @@ -18505,6 +18516,7 @@ "T3B1_pt_test_cancel.py::test_cancel_message_via_initialize[message0]": "b33f0d8da262e3603a5302f34ca914a05773133549c96cb00164a8400f31f55b", "T3B1_pt_test_cancel.py::test_cancel_message_via_initialize[message1]": "a3a2fdacd5ea31cd53e1fa0fcd81c05c1a9bf899c5387963adad5187c353b421", "T3B1_pt_test_cancel.py::test_cancel_on_paginated": "53a60752e5bcfd843c4b1f8acc6bfa00b44051d8803df6c3826ee2d28ee6ceb7", +"T3B1_pt_test_debuglink.py::test_gc_info": "6ba5ca7223cd8ad675e081407f186acdfc8420304eea96de0fde5eda45ef0a57", "T3B1_pt_test_debuglink.py::test_softlock_instability": "335ba877e904b503087cee10e8385075e2e1d9c1838acb7aa502e6dea69749e7", "T3B1_pt_test_firmware_hash.py::test_firmware_hash_emu": "c7338dbbdd8e060190e08c733532b50849ced040a5d39fc8e271e381be28c6ee", "T3B1_pt_test_firmware_hash.py::test_firmware_hash_hw": "6ba5ca7223cd8ad675e081407f186acdfc8420304eea96de0fde5eda45ef0a57", @@ -20280,6 +20292,7 @@ "T3T1_cs_test_cancel.py::test_cancel_message_via_initialize[message0]": "b7248c186ab42e3ee0a6ec72d123ecf734e049c9215fcfdbc9a8a0ee8b19780e", "T3T1_cs_test_cancel.py::test_cancel_message_via_initialize[message1]": "94f17ae18e67ffab2e527e293bbe1acac13ee04f319680b4144237ba8390cd5e", "T3T1_cs_test_cancel.py::test_cancel_on_paginated": "9635c020ce75c542c83b913948696b37570ccd6b6c873e719e570dd4f8a45d76", +"T3T1_cs_test_debuglink.py::test_gc_info": "592adf9c06f8f39132298b46037dd524fac99e58237a0c023197bf47df67d632", "T3T1_cs_test_debuglink.py::test_softlock_instability": "a094fbf9ad43478bb714f06639640a9908d8e43dcf888a65c4c9df07ab4848b4", "T3T1_cs_test_firmware_hash.py::test_firmware_hash_emu": "e12b5deb5ebfbca733d2dfe5a9dfca2057218160406d3ac1efe7577d4bfbe0ef", "T3T1_cs_test_firmware_hash.py::test_firmware_hash_hw": "592adf9c06f8f39132298b46037dd524fac99e58237a0c023197bf47df67d632", @@ -21703,6 +21716,7 @@ "T3T1_de_test_cancel.py::test_cancel_message_via_initialize[message0]": "8cfe2e7a0d0042e0c958737dff70d79b137d74ee3c4d1964407a82e53f141000", "T3T1_de_test_cancel.py::test_cancel_message_via_initialize[message1]": "bf1a41df717b75b0469c1f69fb032dc3bae9e8053fd7fe222bdedca96e029b1e", "T3T1_de_test_cancel.py::test_cancel_on_paginated": "7e1bc885ed2d19b277e53de305cdf2b1ab8f8bb11c9ed6c7cc8c760e0dc6eb92", +"T3T1_de_test_debuglink.py::test_gc_info": "f2fcbbd7ad83aff9adc0ee97fe98e7272d8bcfcc4a023798e2ab1c9895fda70f", "T3T1_de_test_debuglink.py::test_softlock_instability": "aa64ab8bc77f3cbecdf79ce5e71da089eb40cd0e1425d4f6a8cbfd69f702ca82", "T3T1_de_test_firmware_hash.py::test_firmware_hash_emu": "6979228f4e622ed9707824b93845c65449082e70bbb2667a30e20e64ce6dcdbf", "T3T1_de_test_firmware_hash.py::test_firmware_hash_hw": "f2fcbbd7ad83aff9adc0ee97fe98e7272d8bcfcc4a023798e2ab1c9895fda70f", @@ -23126,6 +23140,7 @@ "T3T1_en_test_cancel.py::test_cancel_message_via_initialize[message0]": "7e7a7a9dfc166a4bb182aa5ee17e335880ab434743407fcdbeb1176e50a3ffcf", "T3T1_en_test_cancel.py::test_cancel_message_via_initialize[message1]": "249b921dc0ebbab0d07671eb67adcdf7a75f131c9e35cf4f0c73fe33c6be228a", "T3T1_en_test_cancel.py::test_cancel_on_paginated": "23a5635d6b152cf7ae6b9e9f6ec619ce7c8fbcd4c280874c0913e72c39f576a8", +"T3T1_en_test_debuglink.py::test_gc_info": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", "T3T1_en_test_debuglink.py::test_softlock_instability": "de35851a07286ff09502bb02bb3e8a48128cab95dc4543fe3db02c3901f8ede3", "T3T1_en_test_firmware_hash.py::test_firmware_hash_emu": "4b7f8b4ff77698fe3c0f5532df8c79c3bbd8a9eed3c81d96f0ebccb2d9aebc6e", "T3T1_en_test_firmware_hash.py::test_firmware_hash_hw": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", @@ -24549,6 +24564,7 @@ "T3T1_es_test_cancel.py::test_cancel_message_via_initialize[message0]": "29e9d8265f78881ffdecd6fc097d22934c67d46e69f2982d80eb2098e0ddaa29", "T3T1_es_test_cancel.py::test_cancel_message_via_initialize[message1]": "1a65f7d2a1a0db8cbaabeb7133c4ba7ca0fdd3820032b3626cfa5f80ee0098b1", "T3T1_es_test_cancel.py::test_cancel_on_paginated": "5eaa0bc8f5cd57e1606497d8ad3c30a5eb7e428236cf8a8d30c8980232112036", +"T3T1_es_test_debuglink.py::test_gc_info": "c568b82943d9f63ad6b29b7dee6f5ed9dca78fc9610d4fa7f12bb8a061a6882a", "T3T1_es_test_debuglink.py::test_softlock_instability": "0fe9ef103f5187b8e093ba941930a391985cbbe8f8f2ecb57d5d34550f5f3b82", "T3T1_es_test_firmware_hash.py::test_firmware_hash_emu": "d3e6b64e5fedbc33120f37b976ee1115960a92fa0b75d70fa20e2f41033d5a2c", "T3T1_es_test_firmware_hash.py::test_firmware_hash_hw": "c568b82943d9f63ad6b29b7dee6f5ed9dca78fc9610d4fa7f12bb8a061a6882a", @@ -25972,6 +25988,7 @@ "T3T1_fr_test_cancel.py::test_cancel_message_via_initialize[message0]": "9394ca80465362731186d19ecd0d76b7f12694dc63a23dda6cae456a6179e98d", "T3T1_fr_test_cancel.py::test_cancel_message_via_initialize[message1]": "82af554d82f449d634a65656506ad571d387a296344cd85377eb78b3644d1010", "T3T1_fr_test_cancel.py::test_cancel_on_paginated": "2831f7f8c7751a349958d3e9be7caef90dedc9db45bb9c456a985cbf1562beaa", +"T3T1_fr_test_debuglink.py::test_gc_info": "c4dffa9195d175f9bc4a23e9e0f80b92f7c6687128918a5a70c14b4a6e7e3694", "T3T1_fr_test_debuglink.py::test_softlock_instability": "58d926ca1a6355b21730ef641ea7c0b4dbf034c86e46aed6d8c1da617575b639", "T3T1_fr_test_firmware_hash.py::test_firmware_hash_emu": "486264e66f4865f98b499b01635ae39a148a006eeb93e6aceb8b068726b1b41c", "T3T1_fr_test_firmware_hash.py::test_firmware_hash_hw": "c4dffa9195d175f9bc4a23e9e0f80b92f7c6687128918a5a70c14b4a6e7e3694", @@ -27395,6 +27412,7 @@ "T3T1_pt_test_cancel.py::test_cancel_message_via_initialize[message0]": "525c0b05be731daf3eff1ae9ee675e44abf24a50fac5d7d08de5e42d5803fa0b", "T3T1_pt_test_cancel.py::test_cancel_message_via_initialize[message1]": "5cfea4da989c7218a955debaf9ac1e34a0abeab698a1f5298205e943dbfec115", "T3T1_pt_test_cancel.py::test_cancel_on_paginated": "100d1492d392b8f7eea86ea85a1a8945cc966a3d28e4e94d3b35ee0e454cf5f0", +"T3T1_pt_test_debuglink.py::test_gc_info": "c15216b8aa033bd81f0a8fb6415c6728320b0c30fe3150eeb8a1749ae0a1a83c", "T3T1_pt_test_debuglink.py::test_softlock_instability": "ff1b88a02f1e9713972de8d783a4ed662758e63604f0014b407f29a8f1bd33f7", "T3T1_pt_test_firmware_hash.py::test_firmware_hash_emu": "5f5082f24cb853e361beda2fbb2df95491543cb5dd7a98c635c9dfc4e779db60", "T3T1_pt_test_firmware_hash.py::test_firmware_hash_hw": "c15216b8aa033bd81f0a8fb6415c6728320b0c30fe3150eeb8a1749ae0a1a83c", @@ -29147,6 +29165,7 @@ "T3W1_cs_test_cancel.py::test_cancel_message_via_initialize[message0]": "b3729ec7e7d501f5fb2f2f3c19341d130b12a973856d7471cb518a28dc48d17c", "T3W1_cs_test_cancel.py::test_cancel_message_via_initialize[message1]": "a73d6439601e005ef1c0acd34e4359b22e1ef81830464740f0f77cf9173b7d90", "T3W1_cs_test_cancel.py::test_cancel_on_paginated": "1afb74e83a323cb7d45c11e7f4fe5b3e831f2d8acc846794e05c68675b094caf", +"T3W1_cs_test_debuglink.py::test_gc_info": "a91b2ef93e22407126f6b154760efe9865c0eb94ca3ed8cd11c60815f8d845e4", "T3W1_cs_test_debuglink.py::test_softlock_instability": "ea2c97f2c266133f65d9af1223bee0dba6e24e453caefb2185cbf1635731fa9c", "T3W1_cs_test_firmware_hash.py::test_firmware_hash_emu": "4059084ea51449ce9b33ac2c3dcc846d56d39b7bf40be7a068c567a85b67ee6b", "T3W1_cs_test_firmware_hash.py::test_firmware_hash_hw": "a91b2ef93e22407126f6b154760efe9865c0eb94ca3ed8cd11c60815f8d845e4", @@ -30563,6 +30582,7 @@ "T3W1_de_test_cancel.py::test_cancel_message_via_initialize[message0]": "b4fe9ae162d5887708f0e7d9a87517dc0028cc63aa4589243107b0a8851f92dc", "T3W1_de_test_cancel.py::test_cancel_message_via_initialize[message1]": "17921f96d89feb086e81e9c18e58143c1d1ebb276c1d78c3f72afa955f80c9f6", "T3W1_de_test_cancel.py::test_cancel_on_paginated": "2809b5c2abc0eebf20a3eb7713667c981c3d595100cfa563650aebbe61ab2fea", +"T3W1_de_test_debuglink.py::test_gc_info": "c402aebce59d93f939380d41fc13fa05f99020f2f5ce4acbeb3ae8f58beabdc0", "T3W1_de_test_debuglink.py::test_softlock_instability": "57177be82bb85cb4544d32204aeede7d2921dd8c3533104f4def9d97f339d740", "T3W1_de_test_firmware_hash.py::test_firmware_hash_emu": "4f843516e5803110eec2794d834040577a245c781a06b603d7e9c2a019b2fcf3", "T3W1_de_test_firmware_hash.py::test_firmware_hash_hw": "c402aebce59d93f939380d41fc13fa05f99020f2f5ce4acbeb3ae8f58beabdc0", @@ -31979,6 +31999,7 @@ "T3W1_en_test_cancel.py::test_cancel_message_via_initialize[message0]": "a95305c826c54f5f1883d4a87407516e38a1920cbafbc34ba3999d5c54e678d5", "T3W1_en_test_cancel.py::test_cancel_message_via_initialize[message1]": "2ebcaa46a75f3afc1dc2c9df42f54506d84909dcae2929a01c4de26ce5ae2e6e", "T3W1_en_test_cancel.py::test_cancel_on_paginated": "8ca540c133cfa33c879f357f0c18f00bc48cbfb4002836e82c4cb2812f01e947", +"T3W1_en_test_debuglink.py::test_gc_info": "a5bf877c22babe3784771f360eeb5b2b8c448b17e12d0a915479f968247010ed", "T3W1_en_test_debuglink.py::test_softlock_instability": "d115d25ee5bc92ea73f8d73e3aa75db274251e118515ddcbca7c6f42df65f219", "T3W1_en_test_firmware_hash.py::test_firmware_hash_emu": "3c1c9a2b7bae65e3070bb6ad527fe146bf0c23f4f7bd8c14c2c4a7b0707d65bc", "T3W1_en_test_firmware_hash.py::test_firmware_hash_hw": "a5bf877c22babe3784771f360eeb5b2b8c448b17e12d0a915479f968247010ed", @@ -33395,6 +33416,7 @@ "T3W1_es_test_cancel.py::test_cancel_message_via_initialize[message0]": "431ba6a2327769eafc31e5a8271be19c2435af437a9844f775b2d80fd5d08bcd", "T3W1_es_test_cancel.py::test_cancel_message_via_initialize[message1]": "cd807409d431dee3e4bb8a320c1516b63b12d2d8d3a44c8b54a8d4f1de22cc11", "T3W1_es_test_cancel.py::test_cancel_on_paginated": "966f1c6df3f359de62a90a9547f5041e7de13acdde8ac65f8828d0cbee5a0088", +"T3W1_es_test_debuglink.py::test_gc_info": "2889aea00f3e57b1977186660d1e15b1226507108c6a1a4cb625d6151f93002f", "T3W1_es_test_debuglink.py::test_softlock_instability": "40261d461792227e2f86ac43445617164fb376f69980443345dc75dac770a021", "T3W1_es_test_firmware_hash.py::test_firmware_hash_emu": "40b5b39390ded953d307945d8aae61516c53e9efc112f16013a1950093ea78a0", "T3W1_es_test_firmware_hash.py::test_firmware_hash_hw": "2889aea00f3e57b1977186660d1e15b1226507108c6a1a4cb625d6151f93002f", @@ -34811,6 +34833,7 @@ "T3W1_fr_test_cancel.py::test_cancel_message_via_initialize[message0]": "1f178f36e387d983259337b49b5d82bed9281df89fcd37f6d424bf3b6dc66dea", "T3W1_fr_test_cancel.py::test_cancel_message_via_initialize[message1]": "f12cee5f9d7423d55c774be4cf4ff342d89278669335a3b07543777e940fdb37", "T3W1_fr_test_cancel.py::test_cancel_on_paginated": "8743c45a14eb40227901bc74595fb1481ad7db700a58b8a181158627ec015a0f", +"T3W1_fr_test_debuglink.py::test_gc_info": "7dec10fe48983f7c9a0ab7ae5e70a7c414a657fe8466e229d5de59277c1174ee", "T3W1_fr_test_debuglink.py::test_softlock_instability": "916b9d4b9f0fae8cf27c8ee4deec4fdfd0007494d4c09b2b1108d48e3494449f", "T3W1_fr_test_firmware_hash.py::test_firmware_hash_emu": "7e00a6c618fdb7fd4d3bc37ee28bdff457db65890389b1addc0ad8258e728221", "T3W1_fr_test_firmware_hash.py::test_firmware_hash_hw": "7dec10fe48983f7c9a0ab7ae5e70a7c414a657fe8466e229d5de59277c1174ee", @@ -36227,6 +36250,7 @@ "T3W1_pt_test_cancel.py::test_cancel_message_via_initialize[message0]": "935a54dc757d60a3ab7d072a4e91f54bc62f71b24f7197fe28962fac5df30379", "T3W1_pt_test_cancel.py::test_cancel_message_via_initialize[message1]": "a7421ebf27b5eb08b383769637ed6490a4210c95b9defb2b00467c1b3cc12883", "T3W1_pt_test_cancel.py::test_cancel_on_paginated": "6f9e4a16c263983876be8f5d9d2bf881267122bd57648292ddc48a0db272832a", +"T3W1_pt_test_debuglink.py::test_gc_info": "08ddbb6ef426932f807732f3aa7f7d5bac4f18858d97d60d98cdaedd9d365d1e", "T3W1_pt_test_debuglink.py::test_softlock_instability": "47e429517d8af13133686bbebfd415c2730dbafacbd06924626e966b0b5d732b", "T3W1_pt_test_firmware_hash.py::test_firmware_hash_emu": "99fb9e4e82a28761c66c5c70bafaa29106a5e3386b8dba7ebf693a23c92152fd", "T3W1_pt_test_firmware_hash.py::test_firmware_hash_hw": "08ddbb6ef426932f807732f3aa7f7d5bac4f18858d97d60d98cdaedd9d365d1e",