1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-17 21:22:10 +00:00

feat(core): Add unit packaging variant field to Features.

[no changelog]
This commit is contained in:
Andrew Kozlik 2024-04-11 16:35:50 +02:00 committed by matejcik
parent d349c44a58
commit 27f54eec9c
13 changed files with 189 additions and 110 deletions

View File

@ -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
}
/**

View File

@ -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());
}

View File

@ -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

View File

@ -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
}
/**

View File

@ -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),

View File

@ -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; }

View File

@ -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);

View File

@ -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:
"""

View File

@ -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(),
)

View File

@ -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

View File

@ -23,6 +23,7 @@ from trezorutils import ( # noqa: F401
sd_hotswap_enabled,
unit_btconly,
unit_color,
unit_packaging,
)
from typing import TYPE_CHECKING

View File

@ -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):

View File

@ -460,6 +460,8 @@ pub struct Features {
pub bootloader_locked: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.language_version_matches)
pub language_version_matches: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.unit_packaging)
pub unit_packaging: ::std::option::Option<u32>,
// 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>(
"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