feat(core): notify host on power status change using internal notification system
What changed, and why it matters
This commit adds a way for the Trezor device to tell the connected computer or phone when its power source changes (for example, when USB is plugged in or a wireless charger is placed nearby). It also exposes two new status flags, usb_connected and wireless_connected, in the device's feature report. There is no direct security fix here; it is a feature that improves real-time status reporting.
No immediate security action is required. Reviewers may want to confirm that the new notification is rate-limited or debounced to avoid event flooding, and that host software handles the new Features fields gracefully. Consider whether exposing precise power-source state has any privacy implications for users.
Security signals we found
New notification event NOTIFY_POWER_STATUS_CHANGE added to sys/notify.h
Power monitoring driver now calls notify_send() on USB/wireless state transitions
Features message extended with usb_connected and wireless_connected optional booleans
Bootloader Features response now includes power-source state
No changes to authentication, cryptography, memory allocation, or trust boundaries
Evidence from the diff
The change extends the Trezor protocol’s Features message with two optional boolean fields: usb_connected (tag 59) and wireless_connected (tag 60). It wires the existing power-manager state into the bootloader’s Features response and into MicroPython’s trezorio.pm module via a new is_wireless_connected() function. A new notification event, NOTIFY_POWER_STATUS_CHANGE, is emitted from the STM32U5 power-monitoring code whenever the USB or wireless power state transitions. The generated protobuf bindings for C, Python, and Rust are updated accordingly. No logic for handling secrets, authentication, or memory safety is modified.
Changed components
core/embed/sys/power_manager/stm32u5/power_monitoring.ccore/embed/sys/notify/inc/sys/notify.hcore/embed/upymod/modtrezorio/modtrezorio-pm.hcore/src/apps/base.pycommon/protob/messages-management.protocore/embed/projects/bootloader/protob/protob.cpython/src/trezorlib/messages.pyrust/trezor-client/src/protos/generated/messages_management.rsInspect captured patch +275 / −140
diff --git a/common/protob/messages-management.proto b/common/protob/messages-management.proto
index 36f7e930..fd3063ae 100644
--- a/common/protob/messages-management.proto
+++ b/common/protob/messages-management.proto
@@ -130,6 +130,8 @@ message Features {
optional bool firmware_corrupted = 56; // true if the firmware is corrupted
optional uint32 auto_lock_delay_battery_ms = 57; // number of milliseconds after which the battery-powered device locks itself
optional bool led = 58; // RGB LED settings
+ optional bool usb_connected = 59; // USB connected
+ optional bool wireless_connected = 60; // Wireless charger connected
enum BackupAvailability {
/// Device is already backed up, or a previous backup has failed.
diff --git a/core/embed/projects/bootloader/protob/pb/messages.pb.h b/core/embed/projects/bootloader/protob/pb/messages.pb.h
index c1a43013..8771ea54 100644
--- a/core/embed/projects/bootloader/protob/pb/messages.pb.h
+++ b/core/embed/projects/bootloader/protob/pb/messages.pb.h
@@ -96,6 +96,10 @@ typedef struct _Features {
uint32_t soc;
bool has_firmware_corrupted;
bool firmware_corrupted;
+ bool has_usb_connected;
+ bool usb_connected;
+ bool has_wireless_connected;
+ bool wireless_connected;
} Features;
typedef struct _Ping {
@@ -183,7 +187,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}
+#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 Ping_init_default {false, ""}
#define Success_init_default {false, ""}
#define Failure_init_default {false, _FailureType_MIN, false, ""}
@@ -196,7 +200,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}
+#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 Ping_init_zero {false, ""}
#define Success_init_zero {false, ""}
#define Failure_init_zero {false, _FailureType_MIN, false, ""}
@@ -231,6 +235,8 @@ extern "C" {
#define Features_unit_packaging_tag 51
#define Features_soc_tag 55
#define Features_firmware_corrupted_tag 56
+#define Features_usb_connected_tag 59
+#define Features_wireless_connected_tag 60
#define Ping_message_tag 1
#define Success_message_tag 1
#define Failure_code_tag 1
@@ -281,7 +287,9 @@ X(a, STATIC, OPTIONAL, BOOL, unit_btconly, 46) \
X(a, STATIC, OPTIONAL, BOOL, bootloader_locked, 49) \
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, firmware_corrupted, 56) \
+X(a, STATIC, OPTIONAL, BOOL, usb_connected, 59) \
+X(a, STATIC, OPTIONAL, BOOL, wireless_connected, 60)
#define Features_CALLBACK NULL
#define Features_DEFAULT NULL
@@ -367,7 +375,7 @@ extern const pb_msgdesc_t UnlockBootloader_msg;
#define ButtonAck_size 0
#define ButtonRequest_size 2
#define Failure_size 260
-#define Features_size 507
+#define Features_size 513
#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 e68dc8bb..36e2625e 100644
--- a/core/embed/projects/bootloader/protob/pb/messages.proto
+++ b/core/embed/projects/bootloader/protob/pb/messages.proto
@@ -74,6 +74,8 @@ message Features {
optional uint32 unit_packaging = 51; // unit/device packaging version
optional uint32 soc = 55; // Battery state of charge (0 - 100%)
optional bool firmware_corrupted = 56; // is firmware corrupted?
+ optional bool usb_connected = 59; // USB connected
+ optional bool wireless_connected = 60; // Wireless charger connected
}
/**
diff --git a/core/embed/projects/bootloader/protob/protob.c b/core/embed/projects/bootloader/protob/protob.c
index 5b11f121..5e470ab8 100644
--- a/core/embed/projects/bootloader/protob/protob.c
+++ b/core/embed/projects/bootloader/protob/protob.c
@@ -144,6 +144,8 @@ secbool send_msg_features(protob_io_t *iface, const fw_info_t *fw) {
pm_state_t state = {0};
if (PM_OK == pm_get_state(&state)) {
MSG_SEND_ASSIGN_VALUE(soc, state.soc);
+ MSG_SEND_ASSIGN_VALUE(usb_connected, state.usb_connected);
+ MSG_SEND_ASSIGN_VALUE(wireless_connected, state.wireless_connected);
}
#endif
diff --git a/core/embed/sys/notify/inc/sys/notify.h b/core/embed/sys/notify/inc/sys/notify.h
index 6c792a4f..c074ec04 100644
--- a/core/embed/sys/notify/inc/sys/notify.h
+++ b/core/embed/sys/notify/inc/sys/notify.h
@@ -50,7 +50,9 @@ typedef enum {
6, /**< Device soft-unlocked (e.g., after successful pin entry) */
NOTIFY_PIN_CHANGE = 7, /**< Pin changed on the device */
NOTIFY_WIPE = 8, /**< Factory reset (wipe) invoked */
- NOTIFY_UNPAIR = 9 /**< BLE bonding for current connection deleted */
+ NOTIFY_UNPAIR = 9, /**< BLE bonding for current connection deleted */
+ NOTIFY_POWER_STATUS_CHANGE =
+ 10, /**< Power status changed, i.e. charging started */
// Additional notification types can be added here as needed
} notification_event_t;
diff --git a/core/embed/sys/power_manager/stm32u5/power_monitoring.c b/core/embed/sys/power_manager/stm32u5/power_monitoring.c
index 170e48b1..e4cca84b 100644
--- a/core/embed/sys/power_manager/stm32u5/power_monitoring.c
+++ b/core/embed/sys/power_manager/stm32u5/power_monitoring.c
@@ -20,6 +20,7 @@
#include <sys/backup_ram.h>
#include <sys/irq.h>
+#include <sys/notify.h>
#include <sys/pmic.h>
#include <sys/systick.h>
#include <trezor_rtl.h>
@@ -291,10 +292,12 @@ static void pm_parse_power_source_state(pm_driver_t* drv) {
if (drv->pmic_data.usb_status != 0x0) {
if (!drv->usb_connected) {
drv->usb_connected = true;
+ notify_send(NOTIFY_POWER_STATUS_CHANGE);
}
} else {
if (drv->usb_connected) {
drv->usb_connected = false;
+ notify_send(NOTIFY_POWER_STATUS_CHANGE);
}
}
@@ -302,10 +305,12 @@ static void pm_parse_power_source_state(pm_driver_t* drv) {
if (drv->wireless_data.vout_ready) {
if (!drv->wireless_connected) {
drv->wireless_connected = true;
+ notify_send(NOTIFY_POWER_STATUS_CHANGE);
}
} else {
if (drv->wireless_connected) {
drv->wireless_connected = false;
+ notify_send(NOTIFY_POWER_STATUS_CHANGE);
}
}
diff --git a/core/embed/upymod/modtrezorio/modtrezorio-pm.h b/core/embed/upymod/modtrezorio/modtrezorio-pm.h
index 36466a57..a05eb657 100644
--- a/core/embed/upymod/modtrezorio/modtrezorio-pm.h
+++ b/core/embed/upymod/modtrezorio/modtrezorio-pm.h
@@ -100,6 +100,23 @@ STATIC mp_obj_t mod_trezorio_pm_is_usb_connected() {
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_is_usb_connected_obj,
mod_trezorio_pm_is_usb_connected);
+/// def is_wireless_connected() -> bool:
+/// """
+/// Returns True if Wireless power source is connected, False otherwise.
+/// Raises RuntimeError on failure.
+/// """
+STATIC mp_obj_t mod_trezorio_pm_is_wireless_connected() {
+ pm_state_t state;
+ pm_status_t res = pm_get_state(&state);
+ if (res != PM_OK) {
+ mp_raise_msg(&mp_type_RuntimeError,
+ MP_ERROR_TEXT("Failed to get power manager report"));
+ }
+ return mp_obj_new_bool(state.wireless_connected);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_pm_is_wireless_connected_obj,
+ mod_trezorio_pm_is_wireless_connected);
+
STATIC const mp_rom_map_elem_t mod_trezorio_pm_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_pm)},
{MP_ROM_QSTR(MP_QSTR_soc), MP_ROM_PTR(&mod_trezorio_pm_soc_obj)},
@@ -108,6 +125,8 @@ STATIC const mp_rom_map_elem_t mod_trezorio_pm_globals_table[] = {
MP_ROM_PTR(&mod_trezorio_pm_hibernate_obj)},
{MP_ROM_QSTR(MP_QSTR_is_usb_connected),
MP_ROM_PTR(&mod_trezorio_pm_is_usb_connected_obj)},
+ {MP_ROM_QSTR(MP_QSTR_is_wireless_connected),
+ MP_ROM_PTR(&mod_trezorio_pm_is_wireless_connected_obj)},
// Wakeup flag constants
{MP_ROM_QSTR(MP_QSTR_WAKEUP_FLAG_BUTTON), MP_ROM_INT(WAKEUP_FLAG_BUTTON)},
diff --git a/core/mocks/generated/trezorio/pm.pyi b/core/mocks/generated/trezorio/pm.pyi
index 0916cfae..f5225a41 100644
--- a/core/mocks/generated/trezorio/pm.pyi
+++ b/core/mocks/generated/trezorio/pm.pyi
@@ -46,3 +46,11 @@ def is_usb_connected() -> bool:
Returns True if USB is connected, False otherwise. Raises RuntimeError
on failure.
"""
+
+
+# upymod/modtrezorio/modtrezorio-pm.h
+def is_wireless_connected() -> bool:
+ """
+ Returns True if Wireless power source is connected, False otherwise.
+ Raises RuntimeError on failure.
+ """
diff --git a/core/src/apps/base.py b/core/src/apps/base.py
index 1173ac37..8292fec4 100644
--- a/core/src/apps/base.py
+++ b/core/src/apps/base.py
@@ -180,6 +180,8 @@ def get_features() -> Features:
from trezorio import pm
f.soc = pm.soc()
+ f.wireless_connected = pm.is_wireless_connected()
+ f.usb_connected = pm.is_usb_connected()
# private fields:
if config.is_unlocked():
diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py
index 60553825..0354c5af 100644
--- a/core/src/trezor/messages.py
+++ b/core/src/trezor/messages.py
@@ -2089,6 +2089,8 @@ if TYPE_CHECKING:
firmware_corrupted: "bool | None"
auto_lock_delay_battery_ms: "int | None"
led: "bool | None"
+ usb_connected: "bool | None"
+ wireless_connected: "bool | None"
def __init__(
self,
@@ -2148,6 +2150,8 @@ if TYPE_CHECKING:
firmware_corrupted: "bool | None" = None,
auto_lock_delay_battery_ms: "int | None" = None,
led: "bool | None" = None,
+ usb_connected: "bool | None" = None,
+ wireless_connected: "bool | None" = None,
) -> None:
pass
diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py
index a8ba007f..e38ff863 100644
--- a/python/src/trezorlib/messages.py
+++ b/python/src/trezorlib/messages.py
@@ -3244,6 +3244,8 @@ class Features(protobuf.MessageType):
56: protobuf.Field("firmware_corrupted", "bool", repeated=False, required=False, default=None),
57: protobuf.Field("auto_lock_delay_battery_ms", "uint32", repeated=False, required=False, default=None),
58: protobuf.Field("led", "bool", repeated=False, required=False, default=None),
+ 59: protobuf.Field("usb_connected", "bool", repeated=False, required=False, default=None),
+ 60: protobuf.Field("wireless_connected", "bool", repeated=False, required=False, default=None),
}
def __init__(
@@ -3305,6 +3307,8 @@ class Features(protobuf.MessageType):
firmware_corrupted: Optional["bool"] = None,
auto_lock_delay_battery_ms: Optional["int"] = None,
led: Optional["bool"] = None,
+ usb_connected: Optional["bool"] = None,
+ wireless_connected: Optional["bool"] = None,
) -> None:
self.capabilities: Sequence["Capability"] = capabilities if capabilities is not None else []
self.major_version = major_version
@@ -3362,6 +3366,8 @@ class Features(protobuf.MessageType):
self.firmware_corrupted = firmware_corrupted
self.auto_lock_delay_battery_ms = auto_lock_delay_battery_ms
self.led = led
+ self.usb_connected = usb_connected
+ self.wireless_connected = wireless_connected
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 52c4a903..c645ff65 100644
--- a/rust/trezor-client/src/protos/generated/messages_management.rs
+++ b/rust/trezor-client/src/protos/generated/messages_management.rs
@@ -475,6 +475,10 @@ pub struct Features {
pub auto_lock_delay_battery_ms: ::std::option::Option<u32>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.led)
pub led: ::std::option::Option<bool>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.management.Features.usb_connected)
+ pub usb_connected: ::std::option::Option<bool>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.management.Features.wireless_connected)
+ pub wireless_connected: ::std::option::Option<bool>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.Features.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@@ -1727,8 +1731,46 @@ impl Features {
self.led = ::std::option::Option::Some(v);
}
+ // optional bool usb_connected = 59;
+
+ pub fn usb_connected(&self) -> bool {
+ self.usb_connected.unwrap_or(false)
+ }
+
+ pub fn clear_usb_connected(&mut self) {
+ self.usb_connected = ::std::option::Option::None;
+ }
+
+ pub fn has_usb_connected(&self) -> bool {
+ self.usb_connected.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_usb_connected(&mut self, v: bool) {
+ self.usb_connected = ::std::option::Option::Some(v);
+ }
+
+ // optional bool wireless_connected = 60;
+
+ pub fn wireless_connected(&self) -> bool {
+ self.wireless_connected.unwrap_or(false)
+ }
+
+ pub fn clear_wireless_connected(&mut self) {
+ self.wireless_connected = ::std::option::Option::None;
+ }
+
+ pub fn has_wireless_connected(&self) -> bool {
+ self.wireless_connected.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_wireless_connected(&mut self, v: bool) {
+ self.wireless_connected = ::std::option::Option::Some(v);
+ }
+
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
- let mut fields = ::std::vec::Vec::with_capacity(56);
+ let mut fields = ::std::vec::Vec::with_capacity(58);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"vendor",
@@ -2010,6 +2052,16 @@ impl Features {
|m: &Features| { &m.led },
|m: &mut Features| { &mut m.led },
));
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "usb_connected",
+ |m: &Features| { &m.usb_connected },
+ |m: &mut Features| { &mut m.usb_connected },
+ ));
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "wireless_connected",
+ |m: &Features| { &m.wireless_connected },
+ |m: &mut Features| { &mut m.wireless_connected },
+ ));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Features>(
"Features",
fields,
@@ -2208,6 +2260,12 @@ impl ::protobuf::Message for Features {
464 => {
self.led = ::std::option::Option::Some(is.read_bool()?);
},
+ 472 => {
+ self.usb_connected = ::std::option::Option::Some(is.read_bool()?);
+ },
+ 480 => {
+ self.wireless_connected = ::std::option::Option::Some(is.read_bool()?);
+ },
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@@ -2388,6 +2446,12 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.led {
my_size += 2 + 1;
}
+ if let Some(v) = self.usb_connected {
+ my_size += 2 + 1;
+ }
+ if let Some(v) = self.wireless_connected {
+ my_size += 2 + 1;
+ }
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
@@ -2562,6 +2626,12 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.led {
os.write_bool(58, v)?;
}
+ if let Some(v) = self.usb_connected {
+ os.write_bool(59, v)?;
+ }
+ if let Some(v) = self.wireless_connected {
+ os.write_bool(60, v)?;
+ }
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@@ -2635,6 +2705,8 @@ impl ::protobuf::Message for Features {
self.firmware_corrupted = ::std::option::Option::None;
self.auto_lock_delay_battery_ms = ::std::option::Option::None;
self.led = ::std::option::Option::None;
+ self.usb_connected = ::std::option::Option::None;
+ self.wireless_connected = ::std::option::Option::None;
self.special_fields.clear();
}
@@ -2696,6 +2768,8 @@ impl ::protobuf::Message for Features {
firmware_corrupted: ::std::option::Option::None,
auto_lock_delay_battery_ms: ::std::option::Option::None,
led: ::std::option::Option::None,
+ usb_connected: ::std::option::Option::None,
+ wireless_connected: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@@ -12134,7 +12208,7 @@ 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\"\xc9\x19\n\x08Featur\
+ \x20\x01(\x08R\rderiveCardano\"\r\n\x0bGetFeatures\"\x9d\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\
@@ -12188,139 +12262,140 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\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\"C\n\x12BackupAvailability\x12\x10\n\x0cNot\
- Available\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\x12\
- Capability_Bitcoin\x10\x01\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x17Capabili\
- ty_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\x0eCapabilit\
- y_NEM\x10\n\x12\x15\n\x11Capability_Ripple\x10\x0b\x12\x16\n\x12Capabili\
- ty_Stellar\x10\x0c\x12\x14\n\x10Capability_Tezos\x10\r\x12\x12\n\x0eCapa\
- bility_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\x17Capability_Tra\
- nslations\x10\x13\x1a\x04\x80\xa6\x1d\x01\x12\x1f\n\x15Capability_Bright\
- ness\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\rApplySettings\x12\x1e\n\x08language\x18\x01\x20\x01(\tR\x08langu\
- ageB\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\nhomes\
- creen\x18\x04\x20\x01(\x0cR\nhomescreen\x120\n\x12_passphrase_source\x18\
- \x05\x20\x01(\rR\x10PassphraseSourceB\x02\x18\x01\x12+\n\x12auto_lock_de\
- lay_ms\x18\x06\x20\x01(\rR\x0fautoLockDelayMs\x12Y\n\x10display_rotation\
- \x18\x07\x20\x01(\x0e2..hw.trezor.messages.management.DisplayRotationR\
- \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\x0csafetyChe\
- cks\x123\n\x15experimental_features\x18\n\x20\x01(\x08R\x14experimentalF\
- eatures\x129\n\x19hide_passphrase_from_host\x18\x0b\x20\x01(\x08R\x16hid\
- ePassphraseFromHost\x12'\n\x0fhaptic_feedback\x18\r\x20\x01(\x08R\x0ehap\
- ticFeedback\x12+\n\x11homescreen_length\x18\x0e\x20\x01(\rR\x10homescree\
- nLength\x12:\n\x1aauto_lock_delay_battery_ms\x18\x0f\x20\x01(\rR\x16auto\
- LockDelayBatteryMs\"T\n\x0eChangeLanguage\x12\x1f\n\x0bdata_length\x18\
- \x01\x20\x02(\rR\ndataLength\x12!\n\x0cshow_display\x18\x02\x20\x01(\x08\
- R\x0bshowDisplay\"T\n\x10DataChunkRequest\x12\x1f\n\x0bdata_length\x18\
- \x01\x20\x02(\rR\ndataLength\x12\x1f\n\x0bdata_offset\x18\x02\x20\x02(\r\
- R\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\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_pro\
- tection\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\tchalleng\
- e\"\"\n\x0cFirmwareHash\x12\x12\n\x04hash\x18\x01\x20\x02(\x0cR\x04hash\
- \"2\n\x12AuthenticateDevice\x12\x1c\n\tchallenge\x18\x01\x20\x02(\x0cR\t\
- challenge\"\xcb\x01\n\x11AuthenticityProof\x12/\n\x13optiga_certificates\
- \x18\x01\x20\x03(\x0cR\x12optigaCertificates\x12)\n\x10optiga_signature\
- \x18\x02\x20\x02(\x0cR\x0foptigaSignature\x12/\n\x13tropic_certificates\
- \x18\x03\x20\x03(\x0cR\x12tropicCertificates\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\x14passphraseProtection\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\x0cskipChe\
- cksum\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\"\x9d\x03\n\x0bResetDevice\x12\x1f\n\
- \x08strength\x18\x02\x20\x01(\r:\x03256R\x08strength\x123\n\x15passphras\
- e_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\x05label\x12\x1f\n\x0bu2f_counter\x18\x07\x20\x01(\rR\nu2fC\
- ounter\x12\x1f\n\x0bskip_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:\x05Bip39\
- R\nbackupType\x12#\n\rentropy_check\x18\x0b\x20\x01(\x08R\x0centropyChec\
- kJ\x04\x08\x01\x10\x02\"\xe5\x01\n\x0cBackupDevice\x12'\n\x0fgroup_thres\
- hold\x18\x01\x20\x01(\rR\x0egroupThreshold\x12O\n\x06groups\x18\x02\x20\
- \x03(\x0b27.hw.trezor.messages.management.BackupDevice.Slip39GroupR\x06g\
- roups\x1a[\n\x0bSlip39Group\x12)\n\x10member_threshold\x18\x01\x20\x02(\
- \rR\x0fmemberThreshold\x12!\n\x0cmember_count\x18\x02\x20\x02(\rR\x0bmem\
- berCount\"b\n\x0eEntropyRequest\x12-\n\x12entropy_commitment\x18\x01\x20\
- \x01(\x0cR\x11entropyCommitment\x12!\n\x0cprev_entropy\x18\x02\x20\x01(\
- \x0cR\x0bprevEntropy\"&\n\nEntropyAck\x12\x18\n\x07entropy\x18\x01\x20\
- \x02(\x0cR\x07entropy\"\x13\n\x11EntropyCheckReady\"5\n\x14EntropyCheckC\
- ontinue\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\t\
- wordCount\x123\n\x15passphrase_protection\x18\x02\x20\x01(\x08R\x14passp\
- hraseProtection\x12%\n\x0epin_protection\x18\x03\x20\x01(\x08R\rpinProte\
- ction\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_wordl\
- ist\x18\x06\x20\x01(\x08R\x0fenforceWordlist\x12j\n\x0cinput_method\x18\
- \x08\x20\x01(\x0e2G.hw.trezor.messages.management.RecoveryDevice.Recover\
- yDeviceInputMethodR\x0binputMethod\x12\x1f\n\x0bu2f_counter\x18\t\x20\
- \x01(\rR\nu2fCounter\x12O\n\x04type\x18\n\x20\x01(\x0e2+.hw.trezor.messa\
- ges.management.RecoveryType:\x0eNormalRecoveryR\x04type\";\n\x19Recovery\
- DeviceInputMethod\x12\x12\n\x0eScrambledWords\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.messages.management.WordRequest.WordRe\
- questTypeR\x04type\"f\n\x0fWordRequestType\x12\x19\n\x15WordRequestType_\
- Plain\x10\0\x12\x1b\n\x17WordRequestType_Matrix9\x10\x01\x12\x1b\n\x17Wo\
- rdRequestType_Matrix6\x10\x02\"\x1d\n\x07WordAck\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\x11GetNextU2FCounter\"1\n\x0eNe\
- xtU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\
- \x11\n\x0fDoPreauthorized\"\x16\n\x14PreauthorizedRequest\"\x15\n\x13Can\
- celAuthorization\"\x9a\x02\n\x12RebootToBootloader\x12o\n\x0cboot_comman\
- d\x18\x01\x20\x01(\x0e2=.hw.trezor.messages.management.RebootToBootloade\
- r.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\x12languageDataLength\"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\taddress_n\x18\x01\x20\x03(\rR\x08a\
- ddressN\x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"'\n\x13UnlockedPa\
- thRequest\x12\x10\n\x03mac\x18\x01\x20\x02(\x0cR\x03mac\"\x14\n\x12ShowD\
- eviceTutorial\"\x12\n\x10UnlockBootloader\"%\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\x0cserialNumb\
- er*\x99\x01\n\nBackupType\x12\t\n\x05Bip39\x10\0\x12\x10\n\x0cSlip39_Bas\
- ic\x10\x01\x12\x13\n\x0fSlip39_Advanced\x10\x02\x12\x1c\n\x18Slip39_Sing\
- le_Extendable\x10\x03\x12\x1b\n\x17Slip39_Basic_Extendable\x10\x04\x12\
- \x1e\n\x1aSlip39_Advanced_Extendable\x10\x05*G\n\x10SafetyCheckLevel\x12\
- \n\n\x06Strict\x10\0\x12\x10\n\x0cPromptAlways\x10\x01\x12\x15\n\x11Prom\
- ptTemporarily\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\x04Toif\x10\x01\x12\x08\n\x04Jpeg\
- \x10\x02\x12\x08\n\x04ToiG\x10\x03*H\n\x0cRecoveryType\x12\x12\n\x0eNorm\
- alRecovery\x10\0\x12\n\n\x06DryRun\x10\x01\x12\x18\n\x14UnlockRepeatedBa\
- ckup\x10\x02BB\n#com.satoshilabs.trezor.lib.protobufB\x17TrezorMessageMa\
- nagement\x80\xa6\x1d\x01\
+ 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\
";
/// `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.