diff --git a/common/protob/messages-management.proto b/common/protob/messages-management.proto index e2c084175..b0e623310 100644 --- a/common/protob/messages-management.proto +++ b/common/protob/messages-management.proto @@ -133,6 +133,7 @@ message Features { optional uint32 homescreen_height = 48; // homescreen height in pixels optional bool bootloader_locked = 49; // bootloader is locked optional bool language_version_matches = 50 [default=true]; // translation blob version matches firmware version + optional uint32 unit_packaging = 51; // unit/device packaging version } /** diff --git a/core/embed/bootloader/messages.c b/core/embed/bootloader/messages.c index 12e027502..b15f317bc 100644 --- a/core/embed/bootloader/messages.c +++ b/core/embed/bootloader/messages.c @@ -314,6 +314,7 @@ static void send_msg_features(uint8_t iface_num, } if (unit_variant_present()) { MSG_SEND_ASSIGN_VALUE(unit_color, unit_variant_get_color()); + MSG_SEND_ASSIGN_VALUE(unit_packaging, unit_variant_get_packaging()); MSG_SEND_ASSIGN_VALUE(unit_btconly, unit_variant_get_btconly()); } diff --git a/core/embed/bootloader/protob/messages.pb.h b/core/embed/bootloader/protob/messages.pb.h index 563cebcaf..c623b94cf 100644 --- a/core/embed/bootloader/protob/messages.pb.h +++ b/core/embed/bootloader/protob/messages.pb.h @@ -105,6 +105,8 @@ typedef struct _Features { bool unit_btconly; bool has_bootloader_locked; bool bootloader_locked; + bool has_unit_packaging; + uint32_t unit_packaging; } Features; typedef struct _FirmwareErase { @@ -156,7 +158,7 @@ extern "C" { /* Initializer values for message structs */ #define Initialize_init_default {0} #define GetFeatures_init_default {0} -#define Features_init_default {false, "", 0, 0, 0, false, 0, false, "", false, "", false, "", false, 0, false, {0, {0}}, false, 0, false, "", false, 0, false, 0, false, 0, false, "", false, "", false, 0, false, 0, false, 0} +#define Features_init_default {false, "", 0, 0, 0, false, 0, false, "", false, "", false, "", false, 0, false, {0, {0}}, false, 0, false, "", false, 0, false, 0, false, 0, false, "", false, "", false, 0, false, 0, false, 0, false, 0} #define Ping_init_default {false, ""} #define Success_init_default {false, ""} #define Failure_init_default {false, _FailureType_MIN, false, ""} @@ -168,7 +170,7 @@ extern "C" { #define UnlockBootloader_init_default {0} #define Initialize_init_zero {0} #define GetFeatures_init_zero {0} -#define Features_init_zero {false, "", 0, 0, 0, false, 0, false, "", false, "", false, "", false, 0, false, {0, {0}}, false, 0, false, "", false, 0, false, 0, false, 0, false, "", false, "", false, 0, false, 0, false, 0} +#define Features_init_zero {false, "", 0, 0, 0, false, 0, false, "", false, "", false, "", false, 0, false, {0, {0}}, false, 0, false, "", false, 0, false, 0, false, 0, false, "", false, "", false, 0, false, 0, false, 0, false, 0} #define Ping_init_zero {false, ""} #define Success_init_zero {false, ""} #define Failure_init_zero {false, _FailureType_MIN, false, ""} @@ -203,6 +205,7 @@ extern "C" { #define Features_unit_color_tag 45 #define Features_unit_btconly_tag 46 #define Features_bootloader_locked_tag 49 +#define Features_unit_packaging_tag 51 #define FirmwareErase_length_tag 1 #define FirmwareRequest_offset_tag 1 #define FirmwareRequest_length_tag 2 @@ -242,7 +245,8 @@ X(a, STATIC, OPTIONAL, STRING, fw_vendor, 25) \ X(a, STATIC, OPTIONAL, STRING, internal_model, 44) \ X(a, STATIC, OPTIONAL, UINT32, unit_color, 45) \ X(a, STATIC, OPTIONAL, BOOL, unit_btconly, 46) \ -X(a, STATIC, OPTIONAL, BOOL, bootloader_locked, 49) +X(a, STATIC, OPTIONAL, BOOL, bootloader_locked, 49) \ +X(a, STATIC, OPTIONAL, UINT32, unit_packaging, 51) #define Features_CALLBACK NULL #define Features_DEFAULT NULL @@ -326,7 +330,7 @@ extern const pb_msgdesc_t UnlockBootloader_msg; #define ButtonAck_size 0 #define ButtonRequest_size 2 #define Failure_size 260 -#define Features_size 490 +#define Features_size 497 #define FirmwareErase_size 6 #define FirmwareRequest_size 12 #define GetFeatures_size 0 diff --git a/core/embed/bootloader/protob/messages.proto b/core/embed/bootloader/protob/messages.proto index bfe08db48..0442c4141 100644 --- a/core/embed/bootloader/protob/messages.proto +++ b/core/embed/bootloader/protob/messages.proto @@ -62,6 +62,7 @@ message Features { optional uint32 unit_color = 45; // color of the unit/device optional bool unit_btconly = 46; // unit/device is intended as bitcoin only optional bool bootloader_locked = 49; // bootloader is locked + optional uint32 unit_packaging = 51; // unit/device packaging version } /** diff --git a/core/embed/extmod/modtrezorutils/modtrezorutils.c b/core/embed/extmod/modtrezorutils/modtrezorutils.c index 2cde2041a..004f6941a 100644 --- a/core/embed/extmod/modtrezorutils/modtrezorutils.c +++ b/core/embed/extmod/modtrezorutils/modtrezorutils.c @@ -253,6 +253,19 @@ STATIC mp_obj_t mod_trezorutils_unit_btconly(void) { STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_btconly_obj, mod_trezorutils_unit_btconly); +/// def unit_packaging() -> int | None: +/// """ +/// Returns the packaging version of the unit. +/// """ +STATIC mp_obj_t mod_trezorutils_unit_packaging(void) { + if (!unit_variant_present()) { + return mp_const_none; + } + return mp_obj_new_int(unit_variant_get_packaging()); +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_unit_packaging_obj, + mod_trezorutils_unit_packaging); + /// def sd_hotswap_enabled() -> bool: /// """ /// Returns True if SD card hot swapping is enabled @@ -423,6 +436,8 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { MP_ROM_PTR(&mod_trezorutils_bootloader_locked_obj)}, {MP_ROM_QSTR(MP_QSTR_unit_color), MP_ROM_PTR(&mod_trezorutils_unit_color_obj)}, + {MP_ROM_QSTR(MP_QSTR_unit_packaging), + MP_ROM_PTR(&mod_trezorutils_unit_packaging_obj)}, {MP_ROM_QSTR(MP_QSTR_unit_btconly), MP_ROM_PTR(&mod_trezorutils_unit_btconly_obj)}, {MP_ROM_QSTR(MP_QSTR_sd_hotswap_enabled), diff --git a/core/embed/lib/unit_variant.c b/core/embed/lib/unit_variant.c index 2a2bb4d76..e062284de 100644 --- a/core/embed/lib/unit_variant.c +++ b/core/embed/lib/unit_variant.c @@ -6,6 +6,7 @@ #include TREZOR_BOARD static uint8_t unit_variant_color = 0; +static uint8_t unit_variant_packaging = 0; static bool unit_variant_btconly = false; static bool unit_variant_ok = false; @@ -14,6 +15,7 @@ static int16_t unit_variant_build_year = -1; static void unit_variant_0x01(const uint8_t *data) { unit_variant_color = data[1]; unit_variant_btconly = data[2] == 1; + unit_variant_packaging = data[3]; unit_variant_ok = true; } @@ -69,6 +71,8 @@ void unit_variant_init(void) { uint8_t unit_variant_get_color(void) { return unit_variant_color; } +uint8_t unit_variant_get_packaging(void) { return unit_variant_packaging; } + bool unit_variant_get_btconly(void) { return unit_variant_btconly; } bool unit_variant_present(void) { return unit_variant_ok; } diff --git a/core/embed/lib/unit_variant.h b/core/embed/lib/unit_variant.h index 72915a8a3..3d08974e7 100644 --- a/core/embed/lib/unit_variant.h +++ b/core/embed/lib/unit_variant.h @@ -7,6 +7,7 @@ void unit_variant_init(void); bool unit_variant_present(void); uint8_t unit_variant_get_color(void); +uint8_t unit_variant_get_packaging(void); bool unit_variant_get_btconly(void); bool unit_variant_is_sd_hotswap_enabled(void); diff --git a/core/mocks/generated/trezorutils.pyi b/core/mocks/generated/trezorutils.pyi index 94dc4d6de..faabdad69 100644 --- a/core/mocks/generated/trezorutils.pyi +++ b/core/mocks/generated/trezorutils.pyi @@ -74,6 +74,13 @@ def unit_btconly() -> bool | None: """ +# extmod/modtrezorutils/modtrezorutils.c +def unit_packaging() -> int | None: + """ + Returns the packaging version of the unit. + """ + + # extmod/modtrezorutils/modtrezorutils.c def sd_hotswap_enabled() -> bool: """ diff --git a/core/src/apps/base.py b/core/src/apps/base.py index 4ba716ce4..057ffa8dc 100644 --- a/core/src/apps/base.py +++ b/core/src/apps/base.py @@ -88,6 +88,7 @@ def get_features() -> Features: homescreen_height=HEIGHT, unit_color=utils.unit_color(), unit_btconly=utils.unit_btconly(), + unit_packaging=utils.unit_packaging(), bootloader_locked=utils.bootloader_locked(), ) diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py index 1ca0b322e..a4d6b4ee2 100644 --- a/core/src/trezor/messages.py +++ b/core/src/trezor/messages.py @@ -2137,6 +2137,7 @@ if TYPE_CHECKING: homescreen_height: "int | None" bootloader_locked: "bool | None" language_version_matches: "bool" + unit_packaging: "int | None" def __init__( self, @@ -2188,6 +2189,7 @@ if TYPE_CHECKING: homescreen_height: "int | None" = None, bootloader_locked: "bool | None" = None, language_version_matches: "bool | None" = None, + unit_packaging: "int | None" = None, ) -> None: pass diff --git a/core/src/trezor/utils.py b/core/src/trezor/utils.py index 15eec59f7..0768d845c 100644 --- a/core/src/trezor/utils.py +++ b/core/src/trezor/utils.py @@ -23,6 +23,7 @@ from trezorutils import ( # noqa: F401 sd_hotswap_enabled, unit_btconly, unit_color, + unit_packaging, ) from typing import TYPE_CHECKING diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py index a8ae02096..d52619a5e 100644 --- a/python/src/trezorlib/messages.py +++ b/python/src/trezorlib/messages.py @@ -3218,6 +3218,7 @@ class Features(protobuf.MessageType): 48: protobuf.Field("homescreen_height", "uint32", repeated=False, required=False, default=None), 49: protobuf.Field("bootloader_locked", "bool", repeated=False, required=False, default=None), 50: protobuf.Field("language_version_matches", "bool", repeated=False, required=False, default=True), + 51: protobuf.Field("unit_packaging", "uint32", repeated=False, required=False, default=None), } def __init__( @@ -3271,6 +3272,7 @@ class Features(protobuf.MessageType): homescreen_height: Optional["int"] = None, bootloader_locked: Optional["bool"] = None, language_version_matches: Optional["bool"] = True, + unit_packaging: Optional["int"] = None, ) -> None: self.capabilities: Sequence["Capability"] = capabilities if capabilities is not None else [] self.major_version = major_version @@ -3320,6 +3322,7 @@ class Features(protobuf.MessageType): self.homescreen_height = homescreen_height self.bootloader_locked = bootloader_locked self.language_version_matches = language_version_matches + self.unit_packaging = unit_packaging class LockDevice(protobuf.MessageType): diff --git a/rust/trezor-client/src/protos/generated/messages_management.rs b/rust/trezor-client/src/protos/generated/messages_management.rs index c163b5ea7..250be1e14 100644 --- a/rust/trezor-client/src/protos/generated/messages_management.rs +++ b/rust/trezor-client/src/protos/generated/messages_management.rs @@ -1,5 +1,5 @@ // This file is generated by rust-protobuf 3.3.0. Do not edit -// .proto file is parsed by protoc 3.19.6 +// .proto file is parsed by protoc 3.20.1 // @generated // https://github.com/rust-lang/rust-clippy/issues/702 @@ -460,6 +460,8 @@ pub struct Features { pub bootloader_locked: ::std::option::Option, // @@protoc_insertion_point(field:hw.trezor.messages.management.Features.language_version_matches) pub language_version_matches: ::std::option::Option, + // @@protoc_insertion_point(field:hw.trezor.messages.management.Features.unit_packaging) + pub unit_packaging: ::std::option::Option, // special fields // @@protoc_insertion_point(special_field:hw.trezor.messages.management.Features.special_fields) pub special_fields: ::protobuf::SpecialFields, @@ -1548,8 +1550,27 @@ impl Features { self.language_version_matches = ::std::option::Option::Some(v); } + // optional uint32 unit_packaging = 51; + + pub fn unit_packaging(&self) -> u32 { + self.unit_packaging.unwrap_or(0) + } + + pub fn clear_unit_packaging(&mut self) { + self.unit_packaging = ::std::option::Option::None; + } + + pub fn has_unit_packaging(&self) -> bool { + self.unit_packaging.is_some() + } + + // Param is passed by value, moved + pub fn set_unit_packaging(&mut self, v: u32) { + self.unit_packaging = ::std::option::Option::Some(v); + } + fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData { - let mut fields = ::std::vec::Vec::with_capacity(48); + let mut fields = ::std::vec::Vec::with_capacity(49); let mut oneofs = ::std::vec::Vec::with_capacity(0); fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>( "vendor", @@ -1791,6 +1812,11 @@ impl Features { |m: &Features| { &m.language_version_matches }, |m: &mut Features| { &mut m.language_version_matches }, )); + fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>( + "unit_packaging", + |m: &Features| { &m.unit_packaging }, + |m: &mut Features| { &mut m.unit_packaging }, + )); ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::( "Features", fields, @@ -1965,6 +1991,9 @@ impl ::protobuf::Message for Features { 400 => { self.language_version_matches = ::std::option::Option::Some(is.read_bool()?); }, + 408 => { + self.unit_packaging = ::std::option::Option::Some(is.read_uint32()?); + }, tag => { ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?; }, @@ -2121,6 +2150,9 @@ impl ::protobuf::Message for Features { if let Some(v) = self.language_version_matches { my_size += 2 + 1; } + if let Some(v) = self.unit_packaging { + my_size += ::protobuf::rt::uint32_size(51, 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 @@ -2271,6 +2303,9 @@ impl ::protobuf::Message for Features { if let Some(v) = self.language_version_matches { os.write_bool(50, v)?; } + if let Some(v) = self.unit_packaging { + os.write_uint32(51, v)?; + } os.write_unknown_fields(self.special_fields.unknown_fields())?; ::std::result::Result::Ok(()) } @@ -2336,6 +2371,7 @@ impl ::protobuf::Message for Features { self.homescreen_height = ::std::option::Option::None; self.bootloader_locked = ::std::option::Option::None; self.language_version_matches = ::std::option::Option::None; + self.unit_packaging = ::std::option::Option::None; self.special_fields.clear(); } @@ -2389,6 +2425,7 @@ impl ::protobuf::Message for Features { homescreen_height: ::std::option::Option::None, bootloader_locked: ::std::option::Option::None, language_version_matches: ::std::option::Option::None, + unit_packaging: ::std::option::Option::None, special_fields: ::protobuf::SpecialFields::new(), }; &instance @@ -10311,7 +10348,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x0emessages.proto\"\x80\x01\n\nInitialize\x12\x1d\n\nsession_id\x18\x01\ \x20\x01(\x0cR\tsessionId\x12,\n\x10_skip_passphrase\x18\x02\x20\x01(\ \x08R\x0eSkipPassphraseB\x02\x18\x01\x12%\n\x0ederive_cardano\x18\x03\ - \x20\x01(\x08R\rderiveCardano\"\r\n\x0bGetFeatures\"\xd3\x13\n\x08Featur\ + \x20\x01(\x08R\rderiveCardano\"\r\n\x0bGetFeatures\"\xfa\x13\n\x08Featur\ es\x12\x16\n\x06vendor\x18\x01\x20\x01(\tR\x06vendor\x12#\n\rmajor_versi\ on\x18\x02\x20\x02(\rR\x0cmajorVersion\x12#\n\rminor_version\x18\x03\x20\ \x02(\rR\x0cminorVersion\x12#\n\rpatch_version\x18\x04\x20\x02(\rR\x0cpa\ @@ -10355,110 +10392,111 @@ static file_descriptor_proto_data: &'static [u8] = b"\ n_width\x18/\x20\x01(\rR\x0fhomescreenWidth\x12+\n\x11homescreen_height\ \x180\x20\x01(\rR\x10homescreenHeight\x12+\n\x11bootloader_locked\x181\ \x20\x01(\x08R\x10bootloaderLocked\x12>\n\x18language_version_matches\ - \x182\x20\x01(\x08:\x04trueR\x16languageVersionMatches\"\x84\x04\n\nCapa\ - bility\x12\x1c\n\x12Capability_Bitcoin\x10\x01\x1a\x04\x80\xa6\x1d\x01\ - \x12\x1b\n\x17Capability_Bitcoin_like\x10\x02\x12\x16\n\x12Capability_Bi\ - nance\x10\x03\x12\x16\n\x12Capability_Cardano\x10\x04\x12\x1b\n\x11Capab\ - ility_Crypto\x10\x05\x1a\x04\x80\xa6\x1d\x01\x12\x12\n\x0eCapability_EOS\ - \x10\x06\x12\x17\n\x13Capability_Ethereum\x10\x07\x12\x17\n\x0fCapabilit\ - y_Lisk\x10\x08\x1a\x02\x08\x01\x12\x15\n\x11Capability_Monero\x10\t\x12\ - \x12\n\x0eCapability_NEM\x10\n\x12\x15\n\x11Capability_Ripple\x10\x0b\ - \x12\x16\n\x12Capability_Stellar\x10\x0c\x12\x14\n\x10Capability_Tezos\ - \x10\r\x12\x12\n\x0eCapability_U2F\x10\x0e\x12\x1b\n\x11Capability_Shami\ - r\x10\x0f\x1a\x04\x80\xa6\x1d\x01\x12!\n\x17Capability_ShamirGroups\x10\ - \x10\x1a\x04\x80\xa6\x1d\x01\x12$\n\x1aCapability_PassphraseEntry\x10\ - \x11\x1a\x04\x80\xa6\x1d\x01\x12\x15\n\x11Capability_Solana\x10\x12\x12!\ - \n\x17Capability_Translations\x10\x13\x1a\x04\x80\xa6\x1d\x01\x1a\x04\ - \xc8\xf3\x18\x01\"\x0c\n\nLockDevice\"&\n\x07SetBusy\x12\x1b\n\texpiry_m\ - s\x18\x01\x20\x01(\rR\x08expiryMs\"\x0c\n\nEndSession\"\x9b\x04\n\rApply\ - Settings\x12\x1e\n\x08language\x18\x01\x20\x01(\tR\x08languageB\x02\x18\ - \x01\x12\x14\n\x05label\x18\x02\x20\x01(\tR\x05label\x12%\n\x0euse_passp\ - hrase\x18\x03\x20\x01(\x08R\rusePassphrase\x12\x1e\n\nhomescreen\x18\x04\ - \x20\x01(\x0cR\nhomescreen\x120\n\x12_passphrase_source\x18\x05\x20\x01(\ - \rR\x10PassphraseSourceB\x02\x18\x01\x12+\n\x12auto_lock_delay_ms\x18\ - \x06\x20\x01(\rR\x0fautoLockDelayMs\x12)\n\x10display_rotation\x18\x07\ - \x20\x01(\rR\x0fdisplayRotation\x12=\n\x1bpassphrase_always_on_device\ - \x18\x08\x20\x01(\x08R\x18passphraseAlwaysOnDevice\x12T\n\rsafety_checks\ - \x18\t\x20\x01(\x0e2/.hw.trezor.messages.management.SafetyCheckLevelR\ - \x0csafetyChecks\x123\n\x15experimental_features\x18\n\x20\x01(\x08R\x14\ - experimentalFeatures\x129\n\x19hide_passphrase_from_host\x18\x0b\x20\x01\ - (\x08R\x16hidePassphraseFromHost\"T\n\x0eChangeLanguage\x12\x1f\n\x0bdat\ - a_length\x18\x01\x20\x02(\rR\ndataLength\x12!\n\x0cshow_display\x18\x02\ - \x20\x01(\x08R\x0bshowDisplay\"Z\n\x16TranslationDataRequest\x12\x1f\n\ - \x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\x12\x1f\n\x0bdata_offset\ - \x18\x02\x20\x02(\rR\ndataOffset\"3\n\x12TranslationDataAck\x12\x1d\n\nd\ - ata_chunk\x18\x01\x20\x02(\x0cR\tdataChunk\"\"\n\nApplyFlags\x12\x14\n\ - \x05flags\x18\x01\x20\x02(\rR\x05flags\"#\n\tChangePin\x12\x16\n\x06remo\ - ve\x18\x01\x20\x01(\x08R\x06remove\"(\n\x0eChangeWipeCode\x12\x16\n\x06r\ - emove\x18\x01\x20\x01(\x08R\x06remove\"\xaa\x01\n\tSdProtect\x12]\n\tope\ - ration\x18\x01\x20\x02(\x0e2?.hw.trezor.messages.management.SdProtect.Sd\ - ProtectOperationTypeR\toperation\">\n\x16SdProtectOperationType\x12\x0b\ - \n\x07DISABLE\x10\0\x12\n\n\x06ENABLE\x10\x01\x12\x0b\n\x07REFRESH\x10\ - \x02\"O\n\x04Ping\x12\x1a\n\x07message\x18\x01\x20\x01(\t:\0R\x07message\ - \x12+\n\x11button_protection\x18\x02\x20\x01(\x08R\x10buttonProtection\"\ - \x08\n\x06Cancel\"\x20\n\nGetEntropy\x12\x12\n\x04size\x18\x01\x20\x02(\ - \rR\x04size\"#\n\x07Entropy\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\ - \x07entropy\"/\n\x0fGetFirmwareHash\x12\x1c\n\tchallenge\x18\x01\x20\x01\ - (\x0cR\tchallenge\"\"\n\x0cFirmwareHash\x12\x12\n\x04hash\x18\x01\x20\ - \x02(\x0cR\x04hash\"2\n\x12AuthenticateDevice\x12\x1c\n\tchallenge\x18\ - \x01\x20\x02(\x0cR\tchallenge\"U\n\x11AuthenticityProof\x12\"\n\x0ccerti\ - ficates\x18\x01\x20\x03(\x0cR\x0ccertificates\x12\x1c\n\tsignature\x18\ - \x02\x20\x02(\x0cR\tsignature\"\x0c\n\nWipeDevice\"\xad\x02\n\nLoadDevic\ - e\x12\x1c\n\tmnemonics\x18\x01\x20\x03(\tR\tmnemonics\x12\x10\n\x03pin\ - \x18\x03\x20\x01(\tR\x03pin\x123\n\x15passphrase_protection\x18\x04\x20\ - \x01(\x08R\x14passphraseProtection\x12\x1e\n\x08language\x18\x05\x20\x01\ - (\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05\ - label\x12#\n\rskip_checksum\x18\x07\x20\x01(\x08R\x0cskipChecksum\x12\ - \x1f\n\x0bu2f_counter\x18\x08\x20\x01(\rR\nu2fCounter\x12!\n\x0cneeds_ba\ - ckup\x18\t\x20\x01(\x08R\x0bneedsBackup\x12\x1b\n\tno_backup\x18\n\x20\ - \x01(\x08R\x08noBackup\"\x99\x03\n\x0bResetDevice\x12%\n\x0edisplay_rand\ - om\x18\x01\x20\x01(\x08R\rdisplayRandom\x12\x1f\n\x08strength\x18\x02\ - \x20\x01(\r:\x03256R\x08strength\x123\n\x15passphrase_protection\x18\x03\ - \x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_protection\x18\x04\ - \x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\ - \x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05labe\ - l\x12\x1f\n\x0bu2f_counter\x18\x07\x20\x01(\rR\nu2fCounter\x12\x1f\n\x0b\ - skip_backup\x18\x08\x20\x01(\x08R\nskipBackup\x12\x1b\n\tno_backup\x18\t\ - \x20\x01(\x08R\x08noBackup\x12Q\n\x0bbackup_type\x18\n\x20\x01(\x0e2).hw\ - .trezor.messages.management.BackupType:\x05Bip39R\nbackupType\"\x0e\n\ - \x0cBackupDevice\"\x10\n\x0eEntropyRequest\"&\n\nEntropyAck\x12\x18\n\ - \x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"\xd8\x03\n\x0eRecoveryDevi\ - ce\x12\x1d\n\nword_count\x18\x01\x20\x01(\rR\twordCount\x123\n\x15passph\ - rase_protection\x18\x02\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0e\ - pin_protection\x18\x03\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08languag\ - e\x18\x04\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\ - \x05\x20\x01(\tR\x05label\x12)\n\x10enforce_wordlist\x18\x06\x20\x01(\ - \x08R\x0fenforceWordlist\x12T\n\x04type\x18\x08\x20\x01(\x0e2@.hw.trezor\ - .messages.management.RecoveryDevice.RecoveryDeviceTypeR\x04type\x12\x1f\ - \n\x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\x12\x17\n\x07dry_run\x18\ - \n\x20\x01(\x08R\x06dryRun\"Z\n\x12RecoveryDeviceType\x12%\n!RecoveryDev\ - iceType_ScrambledWords\x10\0\x12\x1d\n\x19RecoveryDeviceType_Matrix\x10\ - \x01\"\xc5\x01\n\x0bWordRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw\ - .trezor.messages.management.WordRequest.WordRequestTypeR\x04type\"f\n\ - \x0fWordRequestType\x12\x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\ - \x17WordRequestType_Matrix9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\ - \x10\x02\"\x1d\n\x07WordAck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\x04wor\ - d\"0\n\rSetU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fC\ - ounter\"\x13\n\x11GetNextU2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0b\ - u2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\ - \x16\n\x14PreauthorizedRequest\"\x15\n\x13CancelAuthorization\"\x9a\x02\ - \n\x12RebootToBootloader\x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.h\ - w.trezor.messages.management.RebootToBootloader.BootCommand:\rSTOP_AND_W\ - AITR\x0bbootCommand\x12'\n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0ef\ - irmwareHeader\x123\n\x14language_data_length\x18\x03\x20\x01(\r:\x010R\ - \x12languageDataLength\"5\n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\ - \0\x12\x13\n\x0fINSTALL_UPGRADE\x10\x01\"\x10\n\x08GetNonce:\x04\x88\xb2\ - \x19\x01\"#\n\x05Nonce\x12\x14\n\x05nonce\x18\x01\x20\x02(\x0cR\x05nonce\ - :\x04\x88\xb2\x19\x01\";\n\nUnlockPath\x12\x1b\n\taddress_n\x18\x01\x20\ - \x03(\rR\x08addressN\x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"'\n\ - \x13UnlockedPathRequest\x12\x10\n\x03mac\x18\x01\x20\x01(\x0cR\x03mac\"\ - \x14\n\x12ShowDeviceTutorial\"\x12\n\x10UnlockBootloader*>\n\nBackupType\ - \x12\t\n\x05Bip39\x10\0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\x0fS\ - lip39_Advanced\x10\x02*G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\0\ - \x12\x10\n\x0cPromptAlways\x10\x01\x12\x15\n\x11PromptTemporarily\x10\ - \x02*0\n\x10HomescreenFormat\x12\x08\n\x04Toif\x10\x01\x12\x08\n\x04Jpeg\ - \x10\x02\x12\x08\n\x04ToiG\x10\x03BB\n#com.satoshilabs.trezor.lib.protob\ - ufB\x17TrezorMessageManagement\x80\xa6\x1d\x01\ + \x182\x20\x01(\x08:\x04trueR\x16languageVersionMatches\x12%\n\x0eunit_pa\ + ckaging\x183\x20\x01(\rR\runitPackaging\"\x84\x04\n\nCapability\x12\x1c\ + \n\x12Capability_Bitcoin\x10\x01\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x17Ca\ + pability_Bitcoin_like\x10\x02\x12\x16\n\x12Capability_Binance\x10\x03\ + \x12\x16\n\x12Capability_Cardano\x10\x04\x12\x1b\n\x11Capability_Crypto\ + \x10\x05\x1a\x04\x80\xa6\x1d\x01\x12\x12\n\x0eCapability_EOS\x10\x06\x12\ + \x17\n\x13Capability_Ethereum\x10\x07\x12\x17\n\x0fCapability_Lisk\x10\ + \x08\x1a\x02\x08\x01\x12\x15\n\x11Capability_Monero\x10\t\x12\x12\n\x0eC\ + apability_NEM\x10\n\x12\x15\n\x11Capability_Ripple\x10\x0b\x12\x16\n\x12\ + Capability_Stellar\x10\x0c\x12\x14\n\x10Capability_Tezos\x10\r\x12\x12\n\ + \x0eCapability_U2F\x10\x0e\x12\x1b\n\x11Capability_Shamir\x10\x0f\x1a\ + \x04\x80\xa6\x1d\x01\x12!\n\x17Capability_ShamirGroups\x10\x10\x1a\x04\ + \x80\xa6\x1d\x01\x12$\n\x1aCapability_PassphraseEntry\x10\x11\x1a\x04\ + \x80\xa6\x1d\x01\x12\x15\n\x11Capability_Solana\x10\x12\x12!\n\x17Capabi\ + lity_Translations\x10\x13\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\ + \x01\"\x0c\n\nLockDevice\"&\n\x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\ + \x20\x01(\rR\x08expiryMs\"\x0c\n\nEndSession\"\x9b\x04\n\rApplySettings\ + \x12\x1e\n\x08language\x18\x01\x20\x01(\tR\x08languageB\x02\x18\x01\x12\ + \x14\n\x05label\x18\x02\x20\x01(\tR\x05label\x12%\n\x0euse_passphrase\ + \x18\x03\x20\x01(\x08R\rusePassphrase\x12\x1e\n\nhomescreen\x18\x04\x20\ + \x01(\x0cR\nhomescreen\x120\n\x12_passphrase_source\x18\x05\x20\x01(\rR\ + \x10PassphraseSourceB\x02\x18\x01\x12+\n\x12auto_lock_delay_ms\x18\x06\ + \x20\x01(\rR\x0fautoLockDelayMs\x12)\n\x10display_rotation\x18\x07\x20\ + \x01(\rR\x0fdisplayRotation\x12=\n\x1bpassphrase_always_on_device\x18\ + \x08\x20\x01(\x08R\x18passphraseAlwaysOnDevice\x12T\n\rsafety_checks\x18\ + \t\x20\x01(\x0e2/.hw.trezor.messages.management.SafetyCheckLevelR\x0csaf\ + etyChecks\x123\n\x15experimental_features\x18\n\x20\x01(\x08R\x14experim\ + entalFeatures\x129\n\x19hide_passphrase_from_host\x18\x0b\x20\x01(\x08R\ + \x16hidePassphraseFromHost\"T\n\x0eChangeLanguage\x12\x1f\n\x0bdata_leng\ + th\x18\x01\x20\x02(\rR\ndataLength\x12!\n\x0cshow_display\x18\x02\x20\ + \x01(\x08R\x0bshowDisplay\"Z\n\x16TranslationDataRequest\x12\x1f\n\x0bda\ + ta_length\x18\x01\x20\x02(\rR\ndataLength\x12\x1f\n\x0bdata_offset\x18\ + \x02\x20\x02(\rR\ndataOffset\"3\n\x12TranslationDataAck\x12\x1d\n\ndata_\ + chunk\x18\x01\x20\x02(\x0cR\tdataChunk\"\"\n\nApplyFlags\x12\x14\n\x05fl\ + ags\x18\x01\x20\x02(\rR\x05flags\"#\n\tChangePin\x12\x16\n\x06remove\x18\ + \x01\x20\x01(\x08R\x06remove\"(\n\x0eChangeWipeCode\x12\x16\n\x06remove\ + \x18\x01\x20\x01(\x08R\x06remove\"\xaa\x01\n\tSdProtect\x12]\n\toperatio\ + n\x18\x01\x20\x02(\x0e2?.hw.trezor.messages.management.SdProtect.SdProte\ + ctOperationTypeR\toperation\">\n\x16SdProtectOperationType\x12\x0b\n\x07\ + DISABLE\x10\0\x12\n\n\x06ENABLE\x10\x01\x12\x0b\n\x07REFRESH\x10\x02\"O\ + \n\x04Ping\x12\x1a\n\x07message\x18\x01\x20\x01(\t:\0R\x07message\x12+\n\ + \x11button_protection\x18\x02\x20\x01(\x08R\x10buttonProtection\"\x08\n\ + \x06Cancel\"\x20\n\nGetEntropy\x12\x12\n\x04size\x18\x01\x20\x02(\rR\x04\ + size\"#\n\x07Entropy\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entro\ + py\"/\n\x0fGetFirmwareHash\x12\x1c\n\tchallenge\x18\x01\x20\x01(\x0cR\tc\ + hallenge\"\"\n\x0cFirmwareHash\x12\x12\n\x04hash\x18\x01\x20\x02(\x0cR\ + \x04hash\"2\n\x12AuthenticateDevice\x12\x1c\n\tchallenge\x18\x01\x20\x02\ + (\x0cR\tchallenge\"U\n\x11AuthenticityProof\x12\"\n\x0ccertificates\x18\ + \x01\x20\x03(\x0cR\x0ccertificates\x12\x1c\n\tsignature\x18\x02\x20\x02(\ + \x0cR\tsignature\"\x0c\n\nWipeDevice\"\xad\x02\n\nLoadDevice\x12\x1c\n\t\ + mnemonics\x18\x01\x20\x03(\tR\tmnemonics\x12\x10\n\x03pin\x18\x03\x20\ + \x01(\tR\x03pin\x123\n\x15passphrase_protection\x18\x04\x20\x01(\x08R\ + \x14passphraseProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08la\ + nguageB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12#\ + \n\rskip_checksum\x18\x07\x20\x01(\x08R\x0cskipChecksum\x12\x1f\n\x0bu2f\ + _counter\x18\x08\x20\x01(\rR\nu2fCounter\x12!\n\x0cneeds_backup\x18\t\ + \x20\x01(\x08R\x0bneedsBackup\x12\x1b\n\tno_backup\x18\n\x20\x01(\x08R\ + \x08noBackup\"\x99\x03\n\x0bResetDevice\x12%\n\x0edisplay_random\x18\x01\ + \x20\x01(\x08R\rdisplayRandom\x12\x1f\n\x08strength\x18\x02\x20\x01(\r:\ + \x03256R\x08strength\x123\n\x15passphrase_protection\x18\x03\x20\x01(\ + \x08R\x14passphraseProtection\x12%\n\x0epin_protection\x18\x04\x20\x01(\ + \x08R\rpinProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08langua\ + geB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12\x1f\ + \n\x0bu2f_counter\x18\x07\x20\x01(\rR\nu2fCounter\x12\x1f\n\x0bskip_back\ + up\x18\x08\x20\x01(\x08R\nskipBackup\x12\x1b\n\tno_backup\x18\t\x20\x01(\ + \x08R\x08noBackup\x12Q\n\x0bbackup_type\x18\n\x20\x01(\x0e2).hw.trezor.m\ + essages.management.BackupType:\x05Bip39R\nbackupType\"\x0e\n\x0cBackupDe\ + vice\"\x10\n\x0eEntropyRequest\"&\n\nEntropyAck\x12\x18\n\x07entropy\x18\ + \x01\x20\x02(\x0cR\x07entropy\"\xd8\x03\n\x0eRecoveryDevice\x12\x1d\n\nw\ + ord_count\x18\x01\x20\x01(\rR\twordCount\x123\n\x15passphrase_protection\ + \x18\x02\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_protection\ + \x18\x03\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\x04\x20\ + \x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x05\x20\x01(\tR\ + \x05label\x12)\n\x10enforce_wordlist\x18\x06\x20\x01(\x08R\x0fenforceWor\ + dlist\x12T\n\x04type\x18\x08\x20\x01(\x0e2@.hw.trezor.messages.managemen\ + t.RecoveryDevice.RecoveryDeviceTypeR\x04type\x12\x1f\n\x0bu2f_counter\ + \x18\t\x20\x01(\rR\nu2fCounter\x12\x17\n\x07dry_run\x18\n\x20\x01(\x08R\ + \x06dryRun\"Z\n\x12RecoveryDeviceType\x12%\n!RecoveryDeviceType_Scramble\ + dWords\x10\0\x12\x1d\n\x19RecoveryDeviceType_Matrix\x10\x01\"\xc5\x01\n\ + \x0bWordRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw.trezor.messages\ + .management.WordRequest.WordRequestTypeR\x04type\"f\n\x0fWordRequestType\ + \x12\x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\x17WordRequestType_M\ + atrix9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\x10\x02\"\x1d\n\x07W\ + ordAck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\x04word\"0\n\rSetU2FCounter\ + \x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x13\n\x11Get\ + NextU2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\ + \x20\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\x16\n\x14Preauthor\ + izedRequest\"\x15\n\x13CancelAuthorization\"\x9a\x02\n\x12RebootToBootlo\ + ader\x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.hw.trezor.messages.ma\ + nagement.RebootToBootloader.BootCommand:\rSTOP_AND_WAITR\x0bbootCommand\ + \x12'\n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0efirmwareHeader\x123\ + \n\x14language_data_length\x18\x03\x20\x01(\r:\x010R\x12languageDataLeng\ + th\"5\n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\x0fINSTA\ + LL_UPGRADE\x10\x01\"\x10\n\x08GetNonce:\x04\x88\xb2\x19\x01\"#\n\x05Nonc\ + e\x12\x14\n\x05nonce\x18\x01\x20\x02(\x0cR\x05nonce:\x04\x88\xb2\x19\x01\ + \";\n\nUnlockPath\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\ + \x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"'\n\x13UnlockedPathReque\ + st\x12\x10\n\x03mac\x18\x01\x20\x01(\x0cR\x03mac\"\x14\n\x12ShowDeviceTu\ + torial\"\x12\n\x10UnlockBootloader*>\n\nBackupType\x12\t\n\x05Bip39\x10\ + \0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advanced\x10\ + \x02*G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPrompt\ + Always\x10\x01\x12\x15\n\x11PromptTemporarily\x10\x02*0\n\x10HomescreenF\ + ormat\x12\x08\n\x04Toif\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\x04T\ + oiG\x10\x03BB\n#com.satoshilabs.trezor.lib.protobufB\x17TrezorMessageMan\ + agement\x80\xa6\x1d\x01\ "; /// `FileDescriptorProto` object which was a source for this generated file