feat(core): send build version in features
What changed, and why it matters
This commit adds a new 'build version' number to the information a Trezor device reports about itself when asked. It is a feature addition that exposes more version detail to host software and users. There is no indication in the commit that it fixes a security bug or introduces a vulnerability.
No security action required. Treat as a normal feature commit. Ensure downstream clients handle the new optional fields gracefully.
Security signals we found
No security-relevant signals present in the diff
Additive protobuf schema change only
Read-only version metadata exposure
Evidence from the diff
The change extends the Features protobuf message with two optional uint32 fields: build_version (tag 61) and fw_build (tag 62). It updates the bootloader C code, core Python app, and generated bindings for Python and Rust so the running firmware and, when in bootloader mode, the installed firmware report their build number alongside major/minor/patch. The change is additive, read-only, and does not alter access control, cryptography, or parsing logic beyond adding new optional fields.
Changed components
common/protob/messages-management.protocore/embed/projects/bootloader/protob/protob.ccore/src/apps/base.pycore/src/trezor/messages.pypython/src/trezorlib/messages.pyrust/trezor-client/src/protos/generated/messages_management.rsInspect captured patch +294 / −191
diff --git a/common/protob/messages-management.proto b/common/protob/messages-management.proto
index fd3063ae..8d037caf 100644
--- a/common/protob/messages-management.proto
+++ b/common/protob/messages-management.proto
@@ -77,6 +77,7 @@ message Features {
required uint32 major_version = 2; // major version of the firmware/bootloader, e.g. 1
required uint32 minor_version = 3; // minor version of the firmware/bootloader, e.g. 0
required uint32 patch_version = 4; // patch version of the firmware/bootloader, e.g. 0
+ optional uint32 build_version = 61; // build version of the firmware/bootloader, e.g. 0
optional bool bootloader_mode = 5; // is device in bootloader mode?
optional string device_id = 6; // device's unique identifier
optional bool pin_protection = 7; // is device protected by PIN?
@@ -96,6 +97,7 @@ message Features {
optional uint32 fw_major = 22; // reported firmware version if in bootloader mode
optional uint32 fw_minor = 23; // reported firmware version if in bootloader mode
optional uint32 fw_patch = 24; // reported firmware version if in bootloader mode
+ optional uint32 fw_build = 62; // reported firmware version if in bootloader mode
optional string fw_vendor = 25; // reported firmware vendor if in bootloader mode
// optional bytes fw_vendor_keys = 26; // obsoleted, use fw_vendor
optional bool unfinished_backup = 27; // report unfinished backup (equals to Storage.unfinished_backup)
diff --git a/core/.changelog.d/6225.added b/core/.changelog.d/6225.added
new file mode 100644
index 00000000..dde50494
--- /dev/null
+++ b/core/.changelog.d/6225.added
@@ -0,0 +1 @@
+Added version build number to Features message.
diff --git a/core/embed/projects/bootloader/.changelog.d/6225.added b/core/embed/projects/bootloader/.changelog.d/6225.added
new file mode 100644
index 00000000..dde50494
--- /dev/null
+++ b/core/embed/projects/bootloader/.changelog.d/6225.added
@@ -0,0 +1 @@
+Added version build number to Features message.
diff --git a/core/embed/projects/bootloader/protob/pb/messages.pb.h b/core/embed/projects/bootloader/protob/pb/messages.pb.h
index 8771ea54..c7b1bd9e 100644
--- a/core/embed/projects/bootloader/protob/pb/messages.pb.h
+++ b/core/embed/projects/bootloader/protob/pb/messages.pb.h
@@ -100,6 +100,10 @@ typedef struct _Features {
bool usb_connected;
bool has_wireless_connected;
bool wireless_connected;
+ bool has_build_version;
+ uint32_t build_version;
+ bool has_fw_build;
+ uint32_t fw_build;
} Features;
typedef struct _Ping {
@@ -187,7 +191,7 @@ extern "C" {
#define Initialize_init_default {0}
#define GetFeatures_init_default {0}
#define WipeDevice_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, false, 0, false, 0, 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, false, 0, false, 0, 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, ""}
@@ -200,7 +204,7 @@ extern "C" {
#define Initialize_init_zero {0}
#define GetFeatures_init_zero {0}
#define WipeDevice_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, false, 0, false, 0, 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, false, 0, false, 0, 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, ""}
@@ -237,6 +241,8 @@ extern "C" {
#define Features_firmware_corrupted_tag 56
#define Features_usb_connected_tag 59
#define Features_wireless_connected_tag 60
+#define Features_build_version_tag 61
+#define Features_fw_build_tag 62
#define Ping_message_tag 1
#define Success_message_tag 1
#define Failure_code_tag 1
@@ -289,7 +295,9 @@ X(a, STATIC, OPTIONAL, UINT32, unit_packaging, 51) \
X(a, STATIC, OPTIONAL, UINT32, soc, 55) \
X(a, STATIC, OPTIONAL, BOOL, firmware_corrupted, 56) \
X(a, STATIC, OPTIONAL, BOOL, usb_connected, 59) \
-X(a, STATIC, OPTIONAL, BOOL, wireless_connected, 60)
+X(a, STATIC, OPTIONAL, BOOL, wireless_connected, 60) \
+X(a, STATIC, OPTIONAL, UINT32, build_version, 61) \
+X(a, STATIC, OPTIONAL, UINT32, fw_build, 62)
#define Features_CALLBACK NULL
#define Features_DEFAULT NULL
@@ -375,7 +383,7 @@ extern const pb_msgdesc_t UnlockBootloader_msg;
#define ButtonAck_size 0
#define ButtonRequest_size 2
#define Failure_size 260
-#define Features_size 513
+#define Features_size 527
#define FirmwareErase_size 6
#define FirmwareRequest_size 12
#define GetFeatures_size 0
diff --git a/core/embed/projects/bootloader/protob/pb/messages.proto b/core/embed/projects/bootloader/protob/pb/messages.proto
index 36e2625e..7060cc55 100644
--- a/core/embed/projects/bootloader/protob/pb/messages.proto
+++ b/core/embed/projects/bootloader/protob/pb/messages.proto
@@ -54,6 +54,7 @@ message Features {
required uint32 major_version = 2; // major version of the firmware/bootloader, e.g. 1
required uint32 minor_version = 3; // minor version of the firmware/bootloader, e.g. 0
required uint32 patch_version = 4; // patch version of the firmware/bootloader, e.g. 0
+ optional uint32 build_version = 61; // build version of the firmware/bootloader, e.g. 0
optional bool bootloader_mode = 5; // is device in bootloader mode?
optional string device_id = 6; // device's unique identifier
optional string language = 9; // device language
@@ -65,6 +66,7 @@ message Features {
optional uint32 fw_major = 22; // reported firmware version if in bootloader mode
optional uint32 fw_minor = 23; // reported firmware version if in bootloader mode
optional uint32 fw_patch = 24; // reported firmware version if in bootloader mode
+ optional uint32 fw_build = 62; // reported firmware version if in bootloader mode
optional string fw_vendor = 25; // reported firmware vendor if in bootloader mode
// optional bytes fw_vendor_keys = 26; // obsoleted, use fw_vendor
optional string internal_model = 44; // internal model name
diff --git a/core/embed/projects/bootloader/protob/protob.c b/core/embed/projects/bootloader/protob/protob.c
index 55622550..89d472c3 100644
--- a/core/embed/projects/bootloader/protob/protob.c
+++ b/core/embed/projects/bootloader/protob/protob.c
@@ -111,6 +111,7 @@ secbool send_msg_features(protob_io_t *iface, const fw_info_t *fw) {
MSG_SEND_ASSIGN_REQUIRED_VALUE(major_version, VERSION_MAJOR);
MSG_SEND_ASSIGN_REQUIRED_VALUE(minor_version, VERSION_MINOR);
MSG_SEND_ASSIGN_REQUIRED_VALUE(patch_version, VERSION_PATCH);
+ MSG_SEND_ASSIGN_VALUE(build_version, VERSION_BUILD);
MSG_SEND_ASSIGN_VALUE(bootloader_mode, true);
MSG_SEND_ASSIGN_STRING(model, MODEL_NAME);
MSG_SEND_ASSIGN_STRING(internal_model, MODEL_INTERNAL_NAME);
@@ -119,6 +120,7 @@ secbool send_msg_features(protob_io_t *iface, const fw_info_t *fw) {
MSG_SEND_ASSIGN_VALUE(fw_major, (fw->hdr->version & 0xFF));
MSG_SEND_ASSIGN_VALUE(fw_minor, ((fw->hdr->version >> 8) & 0xFF));
MSG_SEND_ASSIGN_VALUE(fw_patch, ((fw->hdr->version >> 16) & 0xFF));
+ MSG_SEND_ASSIGN_VALUE(fw_build, ((fw->hdr->version >> 24) & 0xFF));
MSG_SEND_ASSIGN_STRING_LEN(fw_vendor, fw->vhdr.vstr, fw->vhdr.vstr_len);
MSG_SEND_ASSIGN_VALUE(firmware_corrupted, sectrue != fw->firmware_present);
} else {
diff --git a/core/src/apps/base.py b/core/src/apps/base.py
index 8292fec4..2032d132 100644
--- a/core/src/apps/base.py
+++ b/core/src/apps/base.py
@@ -76,7 +76,7 @@ def get_features() -> Features:
from apps.common import backup, mnemonic, safety_checks
- v_major, v_minor, v_patch, _v_build = utils.VERSION
+ v_major, v_minor, v_patch, v_build = utils.VERSION
f = Features(
vendor="trezor.io",
@@ -86,6 +86,7 @@ def get_features() -> Features:
major_version=v_major,
minor_version=v_minor,
patch_version=v_patch,
+ build_version=v_build,
revision=utils.SCM_REVISION,
model=utils.MODEL,
internal_model=utils.INTERNAL_MODEL,
diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py
index b0fdaa2c..71b1a331 100644
--- a/core/src/trezor/messages.py
+++ b/core/src/trezor/messages.py
@@ -2038,6 +2038,7 @@ if TYPE_CHECKING:
major_version: "int"
minor_version: "int"
patch_version: "int"
+ build_version: "int | None"
bootloader_mode: "bool | None"
device_id: "str | None"
pin_protection: "bool | None"
@@ -2056,6 +2057,7 @@ if TYPE_CHECKING:
fw_major: "int | None"
fw_minor: "int | None"
fw_patch: "int | None"
+ fw_build: "int | None"
fw_vendor: "str | None"
unfinished_backup: "bool | None"
no_backup: "bool | None"
@@ -2100,6 +2102,7 @@ if TYPE_CHECKING:
patch_version: "int",
capabilities: "list[Capability] | None" = None,
vendor: "str | None" = None,
+ build_version: "int | None" = None,
bootloader_mode: "bool | None" = None,
device_id: "str | None" = None,
pin_protection: "bool | None" = None,
@@ -2118,6 +2121,7 @@ if TYPE_CHECKING:
fw_major: "int | None" = None,
fw_minor: "int | None" = None,
fw_patch: "int | None" = None,
+ fw_build: "int | None" = None,
fw_vendor: "str | None" = None,
unfinished_backup: "bool | None" = None,
no_backup: "bool | None" = None,
diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py
index 9d01be3a..f9a023d5 100644
--- a/python/src/trezorlib/messages.py
+++ b/python/src/trezorlib/messages.py
@@ -3198,6 +3198,7 @@ class Features(protobuf.MessageType):
2: protobuf.Field("major_version", "uint32", repeated=False, required=True),
3: protobuf.Field("minor_version", "uint32", repeated=False, required=True),
4: protobuf.Field("patch_version", "uint32", repeated=False, required=True),
+ 61: protobuf.Field("build_version", "uint32", repeated=False, required=False, default=None),
5: protobuf.Field("bootloader_mode", "bool", repeated=False, required=False, default=None),
6: protobuf.Field("device_id", "string", repeated=False, required=False, default=None),
7: protobuf.Field("pin_protection", "bool", repeated=False, required=False, default=None),
@@ -3217,6 +3218,7 @@ class Features(protobuf.MessageType):
22: protobuf.Field("fw_major", "uint32", repeated=False, required=False, default=None),
23: protobuf.Field("fw_minor", "uint32", repeated=False, required=False, default=None),
24: protobuf.Field("fw_patch", "uint32", repeated=False, required=False, default=None),
+ 62: protobuf.Field("fw_build", "uint32", repeated=False, required=False, default=None),
25: protobuf.Field("fw_vendor", "string", repeated=False, required=False, default=None),
27: protobuf.Field("unfinished_backup", "bool", repeated=False, required=False, default=None),
28: protobuf.Field("no_backup", "bool", repeated=False, required=False, default=None),
@@ -3262,6 +3264,7 @@ class Features(protobuf.MessageType):
patch_version: "int",
capabilities: Optional[Sequence["Capability"]] = None,
vendor: Optional["str"] = None,
+ build_version: Optional["int"] = None,
bootloader_mode: Optional["bool"] = None,
device_id: Optional["str"] = None,
pin_protection: Optional["bool"] = None,
@@ -3281,6 +3284,7 @@ class Features(protobuf.MessageType):
fw_major: Optional["int"] = None,
fw_minor: Optional["int"] = None,
fw_patch: Optional["int"] = None,
+ fw_build: Optional["int"] = None,
fw_vendor: Optional["str"] = None,
unfinished_backup: Optional["bool"] = None,
no_backup: Optional["bool"] = None,
@@ -3321,6 +3325,7 @@ class Features(protobuf.MessageType):
self.minor_version = minor_version
self.patch_version = patch_version
self.vendor = vendor
+ self.build_version = build_version
self.bootloader_mode = bootloader_mode
self.device_id = device_id
self.pin_protection = pin_protection
@@ -3340,6 +3345,7 @@ class Features(protobuf.MessageType):
self.fw_major = fw_major
self.fw_minor = fw_minor
self.fw_patch = fw_patch
+ self.fw_build = fw_build
self.fw_vendor = fw_vendor
self.unfinished_backup = unfinished_backup
self.no_backup = no_backup
diff --git a/rust/trezor-client/src/protos/generated/messages_management.rs b/rust/trezor-client/src/protos/generated/messages_management.rs
index c645ff65..357f5851 100644
--- a/rust/trezor-client/src/protos/generated/messages_management.rs
+++ b/rust/trezor-client/src/protos/generated/messages_management.rs
@@ -371,6 +371,8 @@ pub struct Features {
pub minor_version: ::std::option::Option<u32>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.patch_version)
pub patch_version: ::std::option::Option<u32>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.management.Features.build_version)
+ pub build_version: ::std::option::Option<u32>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.bootloader_mode)
pub bootloader_mode: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.device_id)
@@ -409,6 +411,8 @@ pub struct Features {
pub fw_minor: ::std::option::Option<u32>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.fw_patch)
pub fw_patch: ::std::option::Option<u32>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.management.Features.fw_build)
+ pub fw_build: ::std::option::Option<u32>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.fw_vendor)
pub fw_vendor: ::std::option::Option<::std::string::String>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.unfinished_backup)
@@ -588,6 +592,25 @@ impl Features {
self.patch_version = ::std::option::Option::Some(v);
}
+ // optional uint32 build_version = 61;
+
+ pub fn build_version(&self) -> u32 {
+ self.build_version.unwrap_or(0)
+ }
+
+ pub fn clear_build_version(&mut self) {
+ self.build_version = ::std::option::Option::None;
+ }
+
+ pub fn has_build_version(&self) -> bool {
+ self.build_version.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_build_version(&mut self, v: u32) {
+ self.build_version = ::std::option::Option::Some(v);
+ }
+
// optional bool bootloader_mode = 5;
pub fn bootloader_mode(&self) -> bool {
@@ -1054,6 +1077,25 @@ impl Features {
self.fw_patch = ::std::option::Option::Some(v);
}
+ // optional uint32 fw_build = 62;
+
+ pub fn fw_build(&self) -> u32 {
+ self.fw_build.unwrap_or(0)
+ }
+
+ pub fn clear_fw_build(&mut self) {
+ self.fw_build = ::std::option::Option::None;
+ }
+
+ pub fn has_fw_build(&self) -> bool {
+ self.fw_build.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_fw_build(&mut self, v: u32) {
+ self.fw_build = ::std::option::Option::Some(v);
+ }
+
// optional string fw_vendor = 25;
pub fn fw_vendor(&self) -> &str {
@@ -1770,7 +1812,7 @@ impl Features {
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
- let mut fields = ::std::vec::Vec::with_capacity(58);
+ let mut fields = ::std::vec::Vec::with_capacity(60);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"vendor",
@@ -1792,6 +1834,11 @@ impl Features {
|m: &Features| { &m.patch_version },
|m: &mut Features| { &mut m.patch_version },
));
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "build_version",
+ |m: &Features| { &m.build_version },
+ |m: &mut Features| { &mut m.build_version },
+ ));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"bootloader_mode",
|m: &Features| { &m.bootloader_mode },
@@ -1887,6 +1934,11 @@ impl Features {
|m: &Features| { &m.fw_patch },
|m: &mut Features| { &mut m.fw_patch },
));
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "fw_build",
+ |m: &Features| { &m.fw_build },
+ |m: &mut Features| { &mut m.fw_build },
+ ));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"fw_vendor",
|m: &Features| { &m.fw_vendor },
@@ -2101,6 +2153,9 @@ impl ::protobuf::Message for Features {
32 => {
self.patch_version = ::std::option::Option::Some(is.read_uint32()?);
},
+ 488 => {
+ self.build_version = ::std::option::Option::Some(is.read_uint32()?);
+ },
40 => {
self.bootloader_mode = ::std::option::Option::Some(is.read_bool()?);
},
@@ -2158,6 +2213,9 @@ impl ::protobuf::Message for Features {
192 => {
self.fw_patch = ::std::option::Option::Some(is.read_uint32()?);
},
+ 496 => {
+ self.fw_build = ::std::option::Option::Some(is.read_uint32()?);
+ },
202 => {
self.fw_vendor = ::std::option::Option::Some(is.read_string()?);
},
@@ -2290,6 +2348,9 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.patch_version {
my_size += ::protobuf::rt::uint32_size(4, v);
}
+ if let Some(v) = self.build_version {
+ my_size += ::protobuf::rt::uint32_size(61, v);
+ }
if let Some(v) = self.bootloader_mode {
my_size += 1 + 1;
}
@@ -2347,6 +2408,9 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.fw_patch {
my_size += ::protobuf::rt::uint32_size(24, v);
}
+ if let Some(v) = self.fw_build {
+ my_size += ::protobuf::rt::uint32_size(62, v);
+ }
if let Some(v) = self.fw_vendor.as_ref() {
my_size += ::protobuf::rt::string_size(25, &v);
}
@@ -2470,6 +2534,9 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.patch_version {
os.write_uint32(4, v)?;
}
+ if let Some(v) = self.build_version {
+ os.write_uint32(61, v)?;
+ }
if let Some(v) = self.bootloader_mode {
os.write_bool(5, v)?;
}
@@ -2527,6 +2594,9 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.fw_patch {
os.write_uint32(24, v)?;
}
+ if let Some(v) = self.fw_build {
+ os.write_uint32(62, v)?;
+ }
if let Some(v) = self.fw_vendor.as_ref() {
os.write_string(25, v)?;
}
@@ -2653,6 +2723,7 @@ impl ::protobuf::Message for Features {
self.major_version = ::std::option::Option::None;
self.minor_version = ::std::option::Option::None;
self.patch_version = ::std::option::Option::None;
+ self.build_version = ::std::option::Option::None;
self.bootloader_mode = ::std::option::Option::None;
self.device_id = ::std::option::Option::None;
self.pin_protection = ::std::option::Option::None;
@@ -2672,6 +2743,7 @@ impl ::protobuf::Message for Features {
self.fw_major = ::std::option::Option::None;
self.fw_minor = ::std::option::Option::None;
self.fw_patch = ::std::option::Option::None;
+ self.fw_build = ::std::option::Option::None;
self.fw_vendor = ::std::option::Option::None;
self.unfinished_backup = ::std::option::Option::None;
self.no_backup = ::std::option::Option::None;
@@ -2716,6 +2788,7 @@ impl ::protobuf::Message for Features {
major_version: ::std::option::Option::None,
minor_version: ::std::option::Option::None,
patch_version: ::std::option::Option::None,
+ build_version: ::std::option::Option::None,
bootloader_mode: ::std::option::Option::None,
device_id: ::std::option::Option::None,
pin_protection: ::std::option::Option::None,
@@ -2735,6 +2808,7 @@ impl ::protobuf::Message for Features {
fw_major: ::std::option::Option::None,
fw_minor: ::std::option::Option::None,
fw_patch: ::std::option::Option::None,
+ fw_build: ::std::option::Option::None,
fw_vendor: ::std::option::Option::None,
unfinished_backup: ::std::option::Option::None,
no_backup: ::std::option::Option::None,
@@ -12208,194 +12282,196 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\roptions.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\"\x9d\x1a\n\x08Featur\
+ \x20\x01(\x08R\rderiveCardano\"\r\n\x0bGetFeatures\"\xdd\x1a\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\
- tchVersion\x12'\n\x0fbootloader_mode\x18\x05\x20\x01(\x08R\x0ebootloader\
- Mode\x12\x1b\n\tdevice_id\x18\x06\x20\x01(\tR\x08deviceId\x12%\n\x0epin_\
- protection\x18\x07\x20\x01(\x08R\rpinProtection\x123\n\x15passphrase_pro\
- tection\x18\x08\x20\x01(\x08R\x14passphraseProtection\x12\x1a\n\x08langu\
- age\x18\t\x20\x01(\tR\x08language\x12\x14\n\x05label\x18\n\x20\x01(\tR\
- \x05label\x12\x20\n\x0binitialized\x18\x0c\x20\x01(\x08R\x0binitialized\
- \x12\x1a\n\x08revision\x18\r\x20\x01(\x0cR\x08revision\x12'\n\x0fbootloa\
- der_hash\x18\x0e\x20\x01(\x0cR\x0ebootloaderHash\x12\x1a\n\x08imported\
- \x18\x0f\x20\x01(\x08R\x08imported\x12\x1a\n\x08unlocked\x18\x10\x20\x01\
- (\x08R\x08unlocked\x120\n\x12_passphrase_cached\x18\x11\x20\x01(\x08R\
- \x10PassphraseCachedB\x02\x18\x01\x12)\n\x10firmware_present\x18\x12\x20\
- \x01(\x08R\x0ffirmwarePresent\x12k\n\x13backup_availability\x18\x13\x20\
- \x01(\x0e2:.hw.trezor.messages.management.Features.BackupAvailabilityR\
- \x12backupAvailability\x12\x14\n\x05flags\x18\x14\x20\x01(\rR\x05flags\
- \x12\x14\n\x05model\x18\x15\x20\x01(\tR\x05model\x12\x19\n\x08fw_major\
- \x18\x16\x20\x01(\rR\x07fwMajor\x12\x19\n\x08fw_minor\x18\x17\x20\x01(\r\
- R\x07fwMinor\x12\x19\n\x08fw_patch\x18\x18\x20\x01(\rR\x07fwPatch\x12\
- \x1b\n\tfw_vendor\x18\x19\x20\x01(\tR\x08fwVendor\x12+\n\x11unfinished_b\
- ackup\x18\x1b\x20\x01(\x08R\x10unfinishedBackup\x12\x1b\n\tno_backup\x18\
- \x1c\x20\x01(\x08R\x08noBackup\x12_\n\x0frecovery_status\x18\x1d\x20\x01\
- (\x0e26.hw.trezor.messages.management.Features.RecoveryStatusR\x0erecove\
- ryStatus\x12V\n\x0ccapabilities\x18\x1e\x20\x03(\x0e22.hw.trezor.message\
- s.management.Features.CapabilityR\x0ccapabilities\x12J\n\x0bbackup_type\
- \x18\x1f\x20\x01(\x0e2).hw.trezor.messages.management.BackupTypeR\nbacku\
- pType\x12&\n\x0fsd_card_present\x18\x20\x20\x01(\x08R\rsdCardPresent\x12\
- #\n\rsd_protection\x18!\x20\x01(\x08R\x0csdProtection\x120\n\x14wipe_cod\
- e_protection\x18\"\x20\x01(\x08R\x12wipeCodeProtection\x12\x1d\n\nsessio\
- n_id\x18#\x20\x01(\x0cR\tsessionId\x12=\n\x1bpassphrase_always_on_device\
- \x18$\x20\x01(\x08R\x18passphraseAlwaysOnDevice\x12T\n\rsafety_checks\
- \x18%\x20\x01(\x0e2/.hw.trezor.messages.management.SafetyCheckLevelR\x0c\
- safetyChecks\x12+\n\x12auto_lock_delay_ms\x18&\x20\x01(\rR\x0fautoLockDe\
- layMs\x12Y\n\x10display_rotation\x18'\x20\x01(\x0e2..hw.trezor.messages.\
- management.DisplayRotationR\x0fdisplayRotation\x123\n\x15experimental_fe\
- atures\x18(\x20\x01(\x08R\x14experimentalFeatures\x12\x12\n\x04busy\x18)\
- \x20\x01(\x08R\x04busy\x12\\\n\x11homescreen_format\x18*\x20\x01(\x0e2/.\
- hw.trezor.messages.management.HomescreenFormatR\x10homescreenFormat\x129\
- \n\x19hide_passphrase_from_host\x18+\x20\x01(\x08R\x16hidePassphraseFrom\
- Host\x12%\n\x0einternal_model\x18,\x20\x01(\tR\rinternalModel\x12\x1d\n\
- \nunit_color\x18-\x20\x01(\rR\tunitColor\x12!\n\x0cunit_btconly\x18.\x20\
- \x01(\x08R\x0bunitBtconly\x12)\n\x10homescreen_width\x18/\x20\x01(\rR\
- \x0fhomescreenWidth\x12+\n\x11homescreen_height\x180\x20\x01(\rR\x10home\
- screenHeight\x12+\n\x11bootloader_locked\x181\x20\x01(\x08R\x10bootloade\
- rLocked\x12>\n\x18language_version_matches\x182\x20\x01(\x08:\x04trueR\
- \x16languageVersionMatches\x12%\n\x0eunit_packaging\x183\x20\x01(\rR\run\
- itPackaging\x12'\n\x0fhaptic_feedback\x184\x20\x01(\x08R\x0ehapticFeedba\
- ck\x12P\n\rrecovery_type\x185\x20\x01(\x0e2+.hw.trezor.messages.manageme\
- nt.RecoveryTypeR\x0crecoveryType\x12\x1d\n\noptiga_sec\x186\x20\x01(\rR\
- \toptigaSec\x12\x10\n\x03soc\x187\x20\x01(\rR\x03soc\x12-\n\x12firmware_\
- corrupted\x188\x20\x01(\x08R\x11firmwareCorrupted\x12:\n\x1aauto_lock_de\
- lay_battery_ms\x189\x20\x01(\rR\x16autoLockDelayBatteryMs\x12\x10\n\x03l\
- ed\x18:\x20\x01(\x08R\x03led\x12#\n\rusb_connected\x18;\x20\x01(\x08R\
- \x0cusbConnected\x12-\n\x12wireless_connected\x18<\x20\x01(\x08R\x11wire\
- lessConnected\"C\n\x12BackupAvailability\x12\x10\n\x0cNotAvailable\x10\0\
- \x12\x0c\n\x08Required\x10\x01\x12\r\n\tAvailable\x10\x02\"7\n\x0eRecove\
- ryStatus\x12\x0b\n\x07Nothing\x10\0\x12\x0c\n\x08Recovery\x10\x01\x12\n\
- \n\x06Backup\x10\x02\"\xf6\x04\n\nCapability\x12\x1c\n\x12Capability_Bit\
- coin\x10\x01\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x17Capability_Bitcoin_lik\
- e\x10\x02\x12\x16\n\x12Capability_Binance\x10\x03\x12\x16\n\x12Capabilit\
- y_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_Eth\
- ereum\x10\x07\x12\x17\n\x0fCapability_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_Shamir\x10\x0f\x1a\x04\x80\xa6\x1d\x01\x12!\
- \n\x17Capability_ShamirGroups\x10\x10\x1a\x04\x80\xa6\x1d\x01\x12$\n\x1a\
- Capability_PassphraseEntry\x10\x11\x1a\x04\x80\xa6\x1d\x01\x12\x15\n\x11\
- Capability_Solana\x10\x12\x12!\n\x17Capability_Translations\x10\x13\x1a\
- \x04\x80\xa6\x1d\x01\x12\x1f\n\x15Capability_Brightness\x10\x14\x1a\x04\
- \x80\xa6\x1d\x01\x12\x1b\n\x11Capability_Haptic\x10\x15\x1a\x04\x80\xa6\
- \x1d\x01\x12\x18\n\x0eCapability_BLE\x10\x16\x1a\x04\x80\xa6\x1d\x01\x12\
- \x18\n\x0eCapability_NFC\x10\x17\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\"\xdd\x05\n\rApplySetti\
- ngs\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_passphras\
- e\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\x12Y\n\x10display_rotation\x18\x07\x20\
- \x01(\x0e2..hw.trezor.messages.management.DisplayRotationR\x0fdisplayRot\
- ation\x12=\n\x1bpassphrase_always_on_device\x18\x08\x20\x01(\x08R\x18pas\
- sphraseAlwaysOnDevice\x12T\n\rsafety_checks\x18\t\x20\x01(\x0e2/.hw.trez\
- or.messages.management.SafetyCheckLevelR\x0csafetyChecks\x123\n\x15exper\
- imental_features\x18\n\x20\x01(\x08R\x14experimentalFeatures\x129\n\x19h\
- ide_passphrase_from_host\x18\x0b\x20\x01(\x08R\x16hidePassphraseFromHost\
- \x12'\n\x0fhaptic_feedback\x18\r\x20\x01(\x08R\x0ehapticFeedback\x12+\n\
- \x11homescreen_length\x18\x0e\x20\x01(\rR\x10homescreenLength\x12:\n\x1a\
- auto_lock_delay_battery_ms\x18\x0f\x20\x01(\rR\x16autoLockDelayBatteryMs\
- \"T\n\x0eChangeLanguage\x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\nda\
- taLength\x12!\n\x0cshow_display\x18\x02\x20\x01(\x08R\x0bshowDisplay\"T\
- \n\x10DataChunkRequest\x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\ndat\
- aLength\x12\x1f\n\x0bdata_offset\x18\x02\x20\x02(\rR\ndataOffset\"-\n\
- \x0cDataChunkAck\x12\x1d\n\ndata_chunk\x18\x01\x20\x02(\x0cR\tdataChunk\
- \"\"\n\nApplyFlags\x12\x14\n\x05flags\x18\x01\x20\x02(\rR\x05flags\"#\n\
- \tChangePin\x12\x16\n\x06remove\x18\x01\x20\x01(\x08R\x06remove\"(\n\x0e\
- ChangeWipeCode\x12\x16\n\x06remove\x18\x01\x20\x01(\x08R\x06remove\"\xaa\
- \x01\n\tSdProtect\x12]\n\toperation\x18\x01\x20\x02(\x0e2?.hw.trezor.mes\
- sages.management.SdProtect.SdProtectOperationTypeR\toperation\">\n\x16Sd\
- ProtectOperationType\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\x07\
- entropy\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\"\xcb\x01\n\x11Au\
- thenticityProof\x12/\n\x13optiga_certificates\x18\x01\x20\x03(\x0cR\x12o\
- ptigaCertificates\x12)\n\x10optiga_signature\x18\x02\x20\x02(\x0cR\x0fop\
- tigaSignature\x12/\n\x13tropic_certificates\x18\x03\x20\x03(\x0cR\x12tro\
- picCertificates\x12)\n\x10tropic_signature\x18\x04\x20\x01(\x0cR\x0ftrop\
- icSignature\"\x0c\n\nWipeDevice\"\xad\x02\n\nLoadDevice\x12\x1c\n\tmnemo\
- nics\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\x14passphr\
- aseProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08languageB\x02\
- \x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12#\n\rskip_ch\
- ecksum\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\x08noBacku\
- p\"\x9d\x03\n\x0bResetDevice\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\x12#\n\rentropy_che\
- ck\x18\x0b\x20\x01(\x08R\x0centropyCheckJ\x04\x08\x01\x10\x02\"\xe5\x01\
- \n\x0cBackupDevice\x12'\n\x0fgroup_threshold\x18\x01\x20\x01(\rR\x0egrou\
- pThreshold\x12O\n\x06groups\x18\x02\x20\x03(\x0b27.hw.trezor.messages.ma\
- nagement.BackupDevice.Slip39GroupR\x06groups\x1a[\n\x0bSlip39Group\x12)\
- \n\x10member_threshold\x18\x01\x20\x02(\rR\x0fmemberThreshold\x12!\n\x0c\
- member_count\x18\x02\x20\x02(\rR\x0bmemberCount\"b\n\x0eEntropyRequest\
- \x12-\n\x12entropy_commitment\x18\x01\x20\x01(\x0cR\x11entropyCommitment\
- \x12!\n\x0cprev_entropy\x18\x02\x20\x01(\x0cR\x0bprevEntropy\"&\n\nEntro\
- pyAck\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"\x13\n\x11E\
- ntropyCheckReady\"5\n\x14EntropyCheckContinue\x12\x1d\n\x06finish\x18\
- \x01\x20\x01(\x08:\x05falseR\x06finish\"\x8d\x04\n\x0eRecoveryDevice\x12\
- \x1d\n\nword_count\x18\x01\x20\x01(\rR\twordCount\x123\n\x15passphrase_p\
- rotection\x18\x02\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_pr\
- otection\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\x0fen\
- forceWordlist\x12j\n\x0cinput_method\x18\x08\x20\x01(\x0e2G.hw.trezor.me\
- ssages.management.RecoveryDevice.RecoveryDeviceInputMethodR\x0binputMeth\
- od\x12\x1f\n\x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\x12O\n\x04type\
- \x18\n\x20\x01(\x0e2+.hw.trezor.messages.management.RecoveryType:\x0eNor\
- malRecoveryR\x04type\";\n\x19RecoveryDeviceInputMethod\x12\x12\n\x0eScra\
- mbledWords\x10\0\x12\n\n\x06Matrix\x10\x01J\x04\x08\x07\x10\x08\"\xc5\
- \x01\n\x0bWordRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw.trezor.me\
- ssages.management.WordRequest.WordRequestTypeR\x04type\"f\n\x0fWordReque\
- stType\x12\x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\x17WordRequest\
- Type_Matrix9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\x10\x02\"\x1d\
- \n\x07WordAck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\x04word\"0\n\rSetU2F\
- Counter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x13\n\
- \x11GetNextU2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0bu2f_counter\
- \x18\x01\x20\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\x16\n\x14P\
- reauthorizedRequest\"\x15\n\x13CancelAuthorization\"\x9a\x02\n\x12Reboot\
- ToBootloader\x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.hw.trezor.mes\
- sages.management.RebootToBootloader.BootCommand:\rSTOP_AND_WAITR\x0bboot\
- Command\x12'\n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0efirmwareHeade\
- r\x123\n\x14language_data_length\x18\x03\x20\x01(\r:\x010R\x12languageDa\
- taLength\"5\n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\
- \x0fINSTALL_UPGRADE\x10\x01\"\n\n\x08GetNonce\"\x1d\n\x05Nonce\x12\x14\n\
- \x05nonce\x18\x01\x20\x02(\x0cR\x05nonce\";\n\nUnlockPath\x12\x1b\n\tadd\
- ress_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\
- \x02(\x0cR\x03mac\"\x14\n\x12ShowDeviceTutorial\"\x12\n\x10UnlockBootloa\
- der\"%\n\rSetBrightness\x12\x14\n\x05value\x18\x01\x20\x01(\rR\x05value\
- \"\x11\n\x0fGetSerialNumber\"3\n\x0cSerialNumber\x12#\n\rserial_number\
- \x18\x01\x20\x02(\tR\x0cserialNumber*\x99\x01\n\nBackupType\x12\t\n\x05B\
- ip39\x10\0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advance\
- d\x10\x02\x12\x1c\n\x18Slip39_Single_Extendable\x10\x03\x12\x1b\n\x17Sli\
- p39_Basic_Extendable\x10\x04\x12\x1e\n\x1aSlip39_Advanced_Extendable\x10\
- \x05*G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPrompt\
- Always\x10\x01\x12\x15\n\x11PromptTemporarily\x10\x02*=\n\x0fDisplayRota\
- tion\x12\t\n\x05North\x10\0\x12\x08\n\x04East\x10Z\x12\n\n\x05South\x10\
- \xb4\x01\x12\t\n\x04West\x10\x8e\x02*0\n\x10HomescreenFormat\x12\x08\n\
- \x04Toif\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\x04ToiG\x10\x03*H\n\
- \x0cRecoveryType\x12\x12\n\x0eNormalRecovery\x10\0\x12\n\n\x06DryRun\x10\
- \x01\x12\x18\n\x14UnlockRepeatedBackup\x10\x02BB\n#com.satoshilabs.trezo\
- r.lib.protobufB\x17TrezorMessageManagement\x80\xa6\x1d\x01\
+ tchVersion\x12#\n\rbuild_version\x18=\x20\x01(\rR\x0cbuildVersion\x12'\n\
+ \x0fbootloader_mode\x18\x05\x20\x01(\x08R\x0ebootloaderMode\x12\x1b\n\td\
+ evice_id\x18\x06\x20\x01(\tR\x08deviceId\x12%\n\x0epin_protection\x18\
+ \x07\x20\x01(\x08R\rpinProtection\x123\n\x15passphrase_protection\x18\
+ \x08\x20\x01(\x08R\x14passphraseProtection\x12\x1a\n\x08language\x18\t\
+ \x20\x01(\tR\x08language\x12\x14\n\x05label\x18\n\x20\x01(\tR\x05label\
+ \x12\x20\n\x0binitialized\x18\x0c\x20\x01(\x08R\x0binitialized\x12\x1a\n\
+ \x08revision\x18\r\x20\x01(\x0cR\x08revision\x12'\n\x0fbootloader_hash\
+ \x18\x0e\x20\x01(\x0cR\x0ebootloaderHash\x12\x1a\n\x08imported\x18\x0f\
+ \x20\x01(\x08R\x08imported\x12\x1a\n\x08unlocked\x18\x10\x20\x01(\x08R\
+ \x08unlocked\x120\n\x12_passphrase_cached\x18\x11\x20\x01(\x08R\x10Passp\
+ hraseCachedB\x02\x18\x01\x12)\n\x10firmware_present\x18\x12\x20\x01(\x08\
+ R\x0ffirmwarePresent\x12k\n\x13backup_availability\x18\x13\x20\x01(\x0e2\
+ :.hw.trezor.messages.management.Features.BackupAvailabilityR\x12backupAv\
+ ailability\x12\x14\n\x05flags\x18\x14\x20\x01(\rR\x05flags\x12\x14\n\x05\
+ model\x18\x15\x20\x01(\tR\x05model\x12\x19\n\x08fw_major\x18\x16\x20\x01\
+ (\rR\x07fwMajor\x12\x19\n\x08fw_minor\x18\x17\x20\x01(\rR\x07fwMinor\x12\
+ \x19\n\x08fw_patch\x18\x18\x20\x01(\rR\x07fwPatch\x12\x19\n\x08fw_build\
+ \x18>\x20\x01(\rR\x07fwBuild\x12\x1b\n\tfw_vendor\x18\x19\x20\x01(\tR\
+ \x08fwVendor\x12+\n\x11unfinished_backup\x18\x1b\x20\x01(\x08R\x10unfini\
+ shedBackup\x12\x1b\n\tno_backup\x18\x1c\x20\x01(\x08R\x08noBackup\x12_\n\
+ \x0frecovery_status\x18\x1d\x20\x01(\x0e26.hw.trezor.messages.management\
+ .Features.RecoveryStatusR\x0erecoveryStatus\x12V\n\x0ccapabilities\x18\
+ \x1e\x20\x03(\x0e22.hw.trezor.messages.management.Features.CapabilityR\
+ \x0ccapabilities\x12J\n\x0bbackup_type\x18\x1f\x20\x01(\x0e2).hw.trezor.\
+ messages.management.BackupTypeR\nbackupType\x12&\n\x0fsd_card_present\
+ \x18\x20\x20\x01(\x08R\rsdCardPresent\x12#\n\rsd_protection\x18!\x20\x01\
+ (\x08R\x0csdProtection\x120\n\x14wipe_code_protection\x18\"\x20\x01(\x08\
+ R\x12wipeCodeProtection\x12\x1d\n\nsession_id\x18#\x20\x01(\x0cR\tsessio\
+ nId\x12=\n\x1bpassphrase_always_on_device\x18$\x20\x01(\x08R\x18passphra\
+ seAlwaysOnDevice\x12T\n\rsafety_checks\x18%\x20\x01(\x0e2/.hw.trezor.mes\
+ sages.management.SafetyCheckLevelR\x0csafetyChecks\x12+\n\x12auto_lock_d\
+ elay_ms\x18&\x20\x01(\rR\x0fautoLockDelayMs\x12Y\n\x10display_rotation\
+ \x18'\x20\x01(\x0e2..hw.trezor.messages.management.DisplayRotationR\x0fd\
+ isplayRotation\x123\n\x15experimental_features\x18(\x20\x01(\x08R\x14exp\
+ erimentalFeatures\x12\x12\n\x04busy\x18)\x20\x01(\x08R\x04busy\x12\\\n\
+ \x11homescreen_format\x18*\x20\x01(\x0e2/.hw.trezor.messages.management.\
+ HomescreenFormatR\x10homescreenFormat\x129\n\x19hide_passphrase_from_hos\
+ t\x18+\x20\x01(\x08R\x16hidePassphraseFromHost\x12%\n\x0einternal_model\
+ \x18,\x20\x01(\tR\rinternalModel\x12\x1d\n\nunit_color\x18-\x20\x01(\rR\
+ \tunitColor\x12!\n\x0cunit_btconly\x18.\x20\x01(\x08R\x0bunitBtconly\x12\
+ )\n\x10homescreen_width\x18/\x20\x01(\rR\x0fhomescreenWidth\x12+\n\x11ho\
+ mescreen_height\x180\x20\x01(\rR\x10homescreenHeight\x12+\n\x11bootloade\
+ r_locked\x181\x20\x01(\x08R\x10bootloaderLocked\x12>\n\x18language_versi\
+ on_matches\x182\x20\x01(\x08:\x04trueR\x16languageVersionMatches\x12%\n\
+ \x0eunit_packaging\x183\x20\x01(\rR\runitPackaging\x12'\n\x0fhaptic_feed\
+ back\x184\x20\x01(\x08R\x0ehapticFeedback\x12P\n\rrecovery_type\x185\x20\
+ \x01(\x0e2+.hw.trezor.messages.management.RecoveryTypeR\x0crecoveryType\
+ \x12\x1d\n\noptiga_sec\x186\x20\x01(\rR\toptigaSec\x12\x10\n\x03soc\x187\
+ \x20\x01(\rR\x03soc\x12-\n\x12firmware_corrupted\x188\x20\x01(\x08R\x11f\
+ irmwareCorrupted\x12:\n\x1aauto_lock_delay_battery_ms\x189\x20\x01(\rR\
+ \x16autoLockDelayBatteryMs\x12\x10\n\x03led\x18:\x20\x01(\x08R\x03led\
+ \x12#\n\rusb_connected\x18;\x20\x01(\x08R\x0cusbConnected\x12-\n\x12wire\
+ less_connected\x18<\x20\x01(\x08R\x11wirelessConnected\"C\n\x12BackupAva\
+ ilability\x12\x10\n\x0cNotAvailable\x10\0\x12\x0c\n\x08Required\x10\x01\
+ \x12\r\n\tAvailable\x10\x02\"7\n\x0eRecoveryStatus\x12\x0b\n\x07Nothing\
+ \x10\0\x12\x0c\n\x08Recovery\x10\x01\x12\n\n\x06Backup\x10\x02\"\xf6\x04\
+ \n\nCapability\x12\x1c\n\x12Capability_Bitcoin\x10\x01\x1a\x04\x80\xa6\
+ \x1d\x01\x12\x1b\n\x17Capability_Bitcoin_like\x10\x02\x12\x16\n\x12Capab\
+ ility_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\x0eCapab\
+ ility_EOS\x10\x06\x12\x17\n\x13Capability_Ethereum\x10\x07\x12\x17\n\x0f\
+ Capability_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\
+ _Shamir\x10\x0f\x1a\x04\x80\xa6\x1d\x01\x12!\n\x17Capability_ShamirGroup\
+ s\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\x12\
+ \x1f\n\x15Capability_Brightness\x10\x14\x1a\x04\x80\xa6\x1d\x01\x12\x1b\
+ \n\x11Capability_Haptic\x10\x15\x1a\x04\x80\xa6\x1d\x01\x12\x18\n\x0eCap\
+ ability_BLE\x10\x16\x1a\x04\x80\xa6\x1d\x01\x12\x18\n\x0eCapability_NFC\
+ \x10\x17\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\x0c\n\nLockDe\
+ vice\"&\n\x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\x20\x01(\rR\x08expiryM\
+ s\"\x0c\n\nEndSession\"\xdd\x05\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\rus\
+ ePassphrase\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\x0fautoLockDel\
+ ayMs\x12Y\n\x10display_rotation\x18\x07\x20\x01(\x0e2..hw.trezor.message\
+ s.management.DisplayRotationR\x0fdisplayRotation\x12=\n\x1bpassphrase_al\
+ ways_on_device\x18\x08\x20\x01(\x08R\x18passphraseAlwaysOnDevice\x12T\n\
+ \rsafety_checks\x18\t\x20\x01(\x0e2/.hw.trezor.messages.management.Safet\
+ yCheckLevelR\x0csafetyChecks\x123\n\x15experimental_features\x18\n\x20\
+ \x01(\x08R\x14experimentalFeatures\x129\n\x19hide_passphrase_from_host\
+ \x18\x0b\x20\x01(\x08R\x16hidePassphraseFromHost\x12'\n\x0fhaptic_feedba\
+ ck\x18\r\x20\x01(\x08R\x0ehapticFeedback\x12+\n\x11homescreen_length\x18\
+ \x0e\x20\x01(\rR\x10homescreenLength\x12:\n\x1aauto_lock_delay_battery_m\
+ s\x18\x0f\x20\x01(\rR\x16autoLockDelayBatteryMs\"T\n\x0eChangeLanguage\
+ \x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\x12!\n\x0cshow\
+ _display\x18\x02\x20\x01(\x08R\x0bshowDisplay\"T\n\x10DataChunkRequest\
+ \x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\x12\x1f\n\x0bd\
+ ata_offset\x18\x02\x20\x02(\rR\ndataOffset\"-\n\x0cDataChunkAck\x12\x1d\
+ \n\ndata_chunk\x18\x01\x20\x02(\x0cR\tdataChunk\"\"\n\nApplyFlags\x12\
+ \x14\n\x05flags\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\toperation\x18\x01\x20\x02(\x0e2?.hw.trezor.messages.management.\
+ SdProtect.SdProtectOperationTypeR\toperation\">\n\x16SdProtectOperationT\
+ ype\x12\x0b\n\x07DISABLE\x10\0\x12\n\n\x06ENABLE\x10\x01\x12\x0b\n\x07RE\
+ FRESH\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\x10buttonP\
+ rotection\"\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\x04has\
+ h\x18\x01\x20\x02(\x0cR\x04hash\"2\n\x12AuthenticateDevice\x12\x1c\n\tch\
+ allenge\x18\x01\x20\x02(\x0cR\tchallenge\"\xcb\x01\n\x11AuthenticityProo\
+ f\x12/\n\x13optiga_certificates\x18\x01\x20\x03(\x0cR\x12optigaCertifica\
+ tes\x12)\n\x10optiga_signature\x18\x02\x20\x02(\x0cR\x0foptigaSignature\
+ \x12/\n\x13tropic_certificates\x18\x03\x20\x03(\x0cR\x12tropicCertificat\
+ es\x12)\n\x10tropic_signature\x18\x04\x20\x01(\x0cR\x0ftropicSignature\"\
+ \x0c\n\nWipeDevice\"\xad\x02\n\nLoadDevice\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\x14passphraseProtectio\
+ n\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08languageB\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\x0bneeds\
+ Backup\x12\x1b\n\tno_backup\x18\n\x20\x01(\x08R\x08noBackup\"\x9d\x03\n\
+ \x0bResetDevice\x12\x1f\n\x08strength\x18\x02\x20\x01(\r:\x03256R\x08str\
+ ength\x123\n\x15passphrase_protection\x18\x03\x20\x01(\x08R\x14passphras\
+ eProtection\x12%\n\x0epin_protection\x18\x04\x20\x01(\x08R\rpinProtectio\
+ n\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08languageB\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_backup\x18\x08\x20\
+ \x01(\x08R\nskipBackup\x12\x1b\n\tno_backup\x18\t\x20\x01(\x08R\x08noBac\
+ kup\x12Q\n\x0bbackup_type\x18\n\x20\x01(\x0e2).hw.trezor.messages.manage\
+ ment.BackupType:\x05Bip39R\nbackupType\x12#\n\rentropy_check\x18\x0b\x20\
+ \x01(\x08R\x0centropyCheckJ\x04\x08\x01\x10\x02\"\xe5\x01\n\x0cBackupDev\
+ ice\x12'\n\x0fgroup_threshold\x18\x01\x20\x01(\rR\x0egroupThreshold\x12O\
+ \n\x06groups\x18\x02\x20\x03(\x0b27.hw.trezor.messages.management.Backup\
+ Device.Slip39GroupR\x06groups\x1a[\n\x0bSlip39Group\x12)\n\x10member_thr\
+ eshold\x18\x01\x20\x02(\rR\x0fmemberThreshold\x12!\n\x0cmember_count\x18\
+ \x02\x20\x02(\rR\x0bmemberCount\"b\n\x0eEntropyRequest\x12-\n\x12entropy\
+ _commitment\x18\x01\x20\x01(\x0cR\x11entropyCommitment\x12!\n\x0cprev_en\
+ tropy\x18\x02\x20\x01(\x0cR\x0bprevEntropy\"&\n\nEntropyAck\x12\x18\n\
+ \x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"\x13\n\x11EntropyCheckRead\
+ y\"5\n\x14EntropyCheckContinue\x12\x1d\n\x06finish\x18\x01\x20\x01(\x08:\
+ \x05falseR\x06finish\"\x8d\x04\n\x0eRecoveryDevice\x12\x1d\n\nword_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\x05labe\
+ l\x12)\n\x10enforce_wordlist\x18\x06\x20\x01(\x08R\x0fenforceWordlist\
+ \x12j\n\x0cinput_method\x18\x08\x20\x01(\x0e2G.hw.trezor.messages.manage\
+ ment.RecoveryDevice.RecoveryDeviceInputMethodR\x0binputMethod\x12\x1f\n\
+ \x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\x12O\n\x04type\x18\n\x20\
+ \x01(\x0e2+.hw.trezor.messages.management.RecoveryType:\x0eNormalRecover\
+ yR\x04type\";\n\x19RecoveryDeviceInputMethod\x12\x12\n\x0eScrambledWords\
+ \x10\0\x12\n\n\x06Matrix\x10\x01J\x04\x08\x07\x10\x08\"\xc5\x01\n\x0bWor\
+ dRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw.trezor.messages.manage\
+ ment.WordRequest.WordRequestTypeR\x04type\"f\n\x0fWordRequestType\x12\
+ \x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\x17WordRequestType_Matri\
+ x9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\x10\x02\"\x1d\n\x07WordA\
+ ck\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\x11GetNext\
+ U2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\
+ \x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\x16\n\x14Preauthorized\
+ Request\"\x15\n\x13CancelAuthorization\"\x9a\x02\n\x12RebootToBootloader\
+ \x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.hw.trezor.messages.manage\
+ ment.RebootToBootloader.BootCommand:\rSTOP_AND_WAITR\x0bbootCommand\x12'\
+ \n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0efirmwareHeader\x123\n\x14\
+ language_data_length\x18\x03\x20\x01(\r:\x010R\x12languageDataLength\"5\
+ \n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\x0fINSTALL_UP\
+ GRADE\x10\x01\"\n\n\x08GetNonce\"\x1d\n\x05Nonce\x12\x14\n\x05nonce\x18\
+ \x01\x20\x02(\x0cR\x05nonce\";\n\nUnlockPath\x12\x1b\n\taddress_n\x18\
+ \x01\x20\x03(\rR\x08addressN\x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03m\
+ ac\"'\n\x13UnlockedPathRequest\x12\x10\n\x03mac\x18\x01\x20\x02(\x0cR\
+ \x03mac\"\x14\n\x12ShowDeviceTutorial\"\x12\n\x10UnlockBootloader\"%\n\r\
+ SetBrightness\x12\x14\n\x05value\x18\x01\x20\x01(\rR\x05value\"\x11\n\
+ \x0fGetSerialNumber\"3\n\x0cSerialNumber\x12#\n\rserial_number\x18\x01\
+ \x20\x02(\tR\x0cserialNumber*\x99\x01\n\nBackupType\x12\t\n\x05Bip39\x10\
+ \0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advanced\x10\
+ \x02\x12\x1c\n\x18Slip39_Single_Extendable\x10\x03\x12\x1b\n\x17Slip39_B\
+ asic_Extendable\x10\x04\x12\x1e\n\x1aSlip39_Advanced_Extendable\x10\x05*\
+ G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPromptAlway\
+ s\x10\x01\x12\x15\n\x11PromptTemporarily\x10\x02*=\n\x0fDisplayRotation\
+ \x12\t\n\x05North\x10\0\x12\x08\n\x04East\x10Z\x12\n\n\x05South\x10\xb4\
+ \x01\x12\t\n\x04West\x10\x8e\x02*0\n\x10HomescreenFormat\x12\x08\n\x04To\
+ if\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\x04ToiG\x10\x03*H\n\x0cRe\
+ coveryType\x12\x12\n\x0eNormalRecovery\x10\0\x12\n\n\x06DryRun\x10\x01\
+ \x12\x18\n\x14UnlockRepeatedBackup\x10\x02BB\n#com.satoshilabs.trezor.li\
+ b.protobufB\x17TrezorMessageManagement\x80\xa6\x1d\x01\
";
/// `FileDescriptorProto` object which was a source for this generated file
Why this scored 19/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.