chore(core): add auto_lock_delay_battery_ms to Feature messages
What changed, and why it matters
This commit simply exposes a new device setting in the information message the hardware wallet reports to connected computers. It adds a field called auto_lock_delay_battery_ms to the Features message across the protocol definition and generated code for Python, Rust, and the device firmware. There is no change to security logic, no bug fix, and no behavior change beyond reporting the value.
No security action required. This is a benign feature-exposure change. Reviewers may optionally verify that the new field is read-only and that ApplySettings already validates the value before storage.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch adds an optional uint32 field auto_lock_delay_battery_ms (field number 57) to the Features protobuf message in messages-management.proto and regenerates bindings in core/src/trezor/messages.py, python/src/trezorlib/messages.py, and rust/trezor-client/src/protos/generated/messages_management.rs. In core/src/apps/base.py, get_features() now populates this field from storage_device.get_autolock_delay_battery_ms() when USE_POWER_MANAGER is enabled. The ApplySettings message already had an auto_lock_delay_battery_ms field (field 15), so this commit only exposes the stored setting in the read-only Features response. No logic governing the auto-lock behavior is modified.
Changed components
common/protob/messages-management.protocore/src/apps/base.pycore/src/trezor/messages.pypython/src/trezorlib/messages.pyrust/trezor-client/src/protos/generated/messages_management.rsInspect captured patch +183 / −134
diff --git a/common/protob/messages-management.proto b/common/protob/messages-management.proto
index d161bcac0..84e0919db 100644
--- a/common/protob/messages-management.proto
+++ b/common/protob/messages-management.proto
@@ -128,6 +128,7 @@ message Features {
optional uint32 optiga_sec = 54; // Optiga's security event counter.
optional uint32 soc = 55; // Battery state of charge (0 - 100%)
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
enum BackupAvailability {
/// Device is already backed up, or a previous backup has failed.
diff --git a/core/src/apps/base.py b/core/src/apps/base.py
index 0872cbb29..e7a9531f2 100644
--- a/core/src/apps/base.py
+++ b/core/src/apps/base.py
@@ -222,6 +222,11 @@ def get_features() -> Features:
f.experimental_features = storage_device.get_experimental_features()
f.hide_passphrase_from_host = storage_device.get_hide_passphrase_from_host()
+ if utils.USE_POWER_MANAGER:
+ f.auto_lock_delay_battery_ms = (
+ storage_device.get_autolock_delay_battery_ms()
+ )
+
return f
diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py
index 56a5aabd1..fd6e07d48 100644
--- a/core/src/trezor/messages.py
+++ b/core/src/trezor/messages.py
@@ -2087,6 +2087,7 @@ if TYPE_CHECKING:
optiga_sec: "int | None"
soc: "int | None"
firmware_corrupted: "bool | None"
+ auto_lock_delay_battery_ms: "int | None"
def __init__(
self,
@@ -2144,6 +2145,7 @@ if TYPE_CHECKING:
optiga_sec: "int | None" = None,
soc: "int | None" = None,
firmware_corrupted: "bool | None" = None,
+ auto_lock_delay_battery_ms: "int | None" = None,
) -> None:
pass
diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py
index 0ca6b2b8e..f187e887d 100644
--- a/python/src/trezorlib/messages.py
+++ b/python/src/trezorlib/messages.py
@@ -3240,6 +3240,7 @@ class Features(protobuf.MessageType):
54: protobuf.Field("optiga_sec", "uint32", repeated=False, required=False, default=None),
55: protobuf.Field("soc", "uint32", repeated=False, required=False, default=None),
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),
}
def __init__(
@@ -3299,6 +3300,7 @@ class Features(protobuf.MessageType):
optiga_sec: Optional["int"] = None,
soc: Optional["int"] = None,
firmware_corrupted: Optional["bool"] = None,
+ auto_lock_delay_battery_ms: Optional["int"] = None,
) -> None:
self.capabilities: Sequence["Capability"] = capabilities if capabilities is not None else []
self.major_version = major_version
@@ -3354,6 +3356,7 @@ class Features(protobuf.MessageType):
self.optiga_sec = optiga_sec
self.soc = soc
self.firmware_corrupted = firmware_corrupted
+ self.auto_lock_delay_battery_ms = auto_lock_delay_battery_ms
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 3216c6104..b331882f6 100644
--- a/rust/trezor-client/src/protos/generated/messages_management.rs
+++ b/rust/trezor-client/src/protos/generated/messages_management.rs
@@ -471,6 +471,8 @@ pub struct Features {
pub soc: ::std::option::Option<u32>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.firmware_corrupted)
pub firmware_corrupted: ::std::option::Option<bool>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.management.Features.auto_lock_delay_battery_ms)
+ pub auto_lock_delay_battery_ms: ::std::option::Option<u32>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.Features.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@@ -1685,8 +1687,27 @@ impl Features {
self.firmware_corrupted = ::std::option::Option::Some(v);
}
+ // optional uint32 auto_lock_delay_battery_ms = 57;
+
+ pub fn auto_lock_delay_battery_ms(&self) -> u32 {
+ self.auto_lock_delay_battery_ms.unwrap_or(0)
+ }
+
+ pub fn clear_auto_lock_delay_battery_ms(&mut self) {
+ self.auto_lock_delay_battery_ms = ::std::option::Option::None;
+ }
+
+ pub fn has_auto_lock_delay_battery_ms(&self) -> bool {
+ self.auto_lock_delay_battery_ms.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_auto_lock_delay_battery_ms(&mut self, v: u32) {
+ self.auto_lock_delay_battery_ms = ::std::option::Option::Some(v);
+ }
+
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
- let mut fields = ::std::vec::Vec::with_capacity(54);
+ let mut fields = ::std::vec::Vec::with_capacity(55);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"vendor",
@@ -1958,6 +1979,11 @@ impl Features {
|m: &Features| { &m.firmware_corrupted },
|m: &mut Features| { &mut m.firmware_corrupted },
));
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "auto_lock_delay_battery_ms",
+ |m: &Features| { &m.auto_lock_delay_battery_ms },
+ |m: &mut Features| { &mut m.auto_lock_delay_battery_ms },
+ ));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Features>(
"Features",
fields,
@@ -2150,6 +2176,9 @@ impl ::protobuf::Message for Features {
448 => {
self.firmware_corrupted = ::std::option::Option::Some(is.read_bool()?);
},
+ 456 => {
+ self.auto_lock_delay_battery_ms = ::std::option::Option::Some(is.read_uint32()?);
+ },
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@@ -2324,6 +2353,9 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.firmware_corrupted {
my_size += 2 + 1;
}
+ if let Some(v) = self.auto_lock_delay_battery_ms {
+ my_size += ::protobuf::rt::uint32_size(57, 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
@@ -2492,6 +2524,9 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.firmware_corrupted {
os.write_bool(56, v)?;
}
+ if let Some(v) = self.auto_lock_delay_battery_ms {
+ os.write_uint32(57, v)?;
+ }
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@@ -2563,6 +2598,7 @@ impl ::protobuf::Message for Features {
self.optiga_sec = ::std::option::Option::None;
self.soc = ::std::option::Option::None;
self.firmware_corrupted = ::std::option::Option::None;
+ self.auto_lock_delay_battery_ms = ::std::option::Option::None;
self.special_fields.clear();
}
@@ -2622,6 +2658,7 @@ impl ::protobuf::Message for Features {
optiga_sec: ::std::option::Option::None,
soc: ::std::option::Option::None,
firmware_corrupted: ::std::option::Option::None,
+ auto_lock_delay_battery_ms: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@@ -11796,7 +11833,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\"\xfb\x18\n\x08Featur\
+ \x20\x01(\x08R\rderiveCardano\"\r\n\x0bGetFeatures\"\xb7\x19\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\
@@ -11848,138 +11885,139 @@ static file_descriptor_proto_data: &'static [u8] = b"\
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\"C\n\x12BackupAvailabi\
- lity\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\nCa\
- pability\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\x12\x1f\n\
- \x15Capability_Brightness\x10\x14\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x11C\
- apability_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\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x02\x20\x01\
- (\tR\x05label\x12%\n\x0euse_passphrase\x18\x03\x20\x01(\x08R\rusePassphr\
- ase\x12\x1e\n\nhomescreen\x18\x04\x20\x01(\x0cR\nhomescreen\x120\n\x12_p\
- assphrase_source\x18\x05\x20\x01(\rR\x10PassphraseSourceB\x02\x18\x01\
- \x12+\n\x12auto_lock_delay_ms\x18\x06\x20\x01(\rR\x0fautoLockDelayMs\x12\
- Y\n\x10display_rotation\x18\x07\x20\x01(\x0e2..hw.trezor.messages.manage\
- ment.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.SafetyCheckLev\
- elR\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_feedback\x18\r\x20\
- \x01(\x08R\x0ehapticFeedback\x12+\n\x11homescreen_length\x18\x0e\x20\x01\
- (\rR\x10homescreenLength\x12:\n\x1aauto_lock_delay_battery_ms\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\x0bdata_offset\
- \x18\x02\x20\x02(\rR\ndataOffset\"-\n\x0cDataChunkAck\x12\x1d\n\ndata_ch\
- unk\x18\x01\x20\x02(\x0cR\tdataChunk\"\"\n\nApplyFlags\x12\x14\n\x05flag\
- s\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\"\xcb\x01\n\x11AuthenticityProof\x12/\n\x13optiga_cert\
- ificates\x18\x01\x20\x03(\x0cR\x12optigaCertificates\x12)\n\x10optiga_si\
- gnature\x18\x02\x20\x02(\x0cR\x0foptigaSignature\x12/\n\x13tropic_certif\
- icates\x18\x03\x20\x03(\x0cR\x12tropicCertificates\x12)\n\x10tropic_sign\
- ature\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_protec\
- tion\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\x0cski\
- pChecksum\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_back\
- up\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\"\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\x02(\x0cR\x03mac\"\x14\n\x12ShowDeviceTutorial\"\x12\n\x10U\
- nlockBootloader\"%\n\rSetBrightness\x12\x14\n\x05value\x18\x01\x20\x01(\
- \rR\x05value*\x99\x01\n\nBackupType\x12\t\n\x05Bip39\x10\0\x12\x10\n\x0c\
- Slip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advanced\x10\x02\x12\x1c\n\x18S\
- lip39_Single_Extendable\x10\x03\x12\x1b\n\x17Slip39_Basic_Extendable\x10\
- \x04\x12\x1e\n\x1aSlip39_Advanced_Extendable\x10\x05*G\n\x10SafetyCheckL\
- evel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPromptAlways\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\x04We\
- st\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\x14Unlock\
- RepeatedBackup\x10\x02BB\n#com.satoshilabs.trezor.lib.protobufB\x17Trezo\
- rMessageManagement\x80\xa6\x1d\x01\
+ corrupted\x188\x20\x01(\x08R\x11firmwareCorrupted\x12:\n\x1aauto_lock_de\
+ lay_battery_ms\x189\x20\x01(\rR\x16autoLockDelayBatteryMs\"C\n\x12Backup\
+ Availability\x12\x10\n\x0cNotAvailable\x10\0\x12\x0c\n\x08Required\x10\
+ \x01\x12\r\n\tAvailable\x10\x02\"7\n\x0eRecoveryStatus\x12\x0b\n\x07Noth\
+ ing\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\x12C\
+ apability_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\x11Capabilit\
+ y_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\x10Cap\
+ ability_Tezos\x10\r\x12\x12\n\x0eCapability_U2F\x10\x0e\x12\x1b\n\x11Cap\
+ ability_Shamir\x10\x0f\x1a\x04\x80\xa6\x1d\x01\x12!\n\x17Capability_Sham\
+ irGroups\x10\x10\x1a\x04\x80\xa6\x1d\x01\x12$\n\x1aCapability_Passphrase\
+ Entry\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\
+ \x0eCapability_BLE\x10\x16\x1a\x04\x80\xa6\x1d\x01\x12\x18\n\x0eCapabili\
+ ty_NFC\x10\x17\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\x0c\n\n\
+ LockDevice\"&\n\x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\x20\x01(\rR\x08e\
+ xpiryMs\"\x0c\n\nEndSession\"\xdd\x05\n\rApplySettings\x12\x1e\n\x08lang\
+ uage\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\x0fautoLoc\
+ kDelayMs\x12Y\n\x10display_rotation\x18\x07\x20\x01(\x0e2..hw.trezor.mes\
+ sages.management.DisplayRotationR\x0fdisplayRotation\x12=\n\x1bpassphras\
+ e_always_on_device\x18\x08\x20\x01(\x08R\x18passphraseAlwaysOnDevice\x12\
+ T\n\rsafety_checks\x18\t\x20\x01(\x0e2/.hw.trezor.messages.management.Sa\
+ fetyCheckLevelR\x0csafetyChecks\x123\n\x15experimental_features\x18\n\
+ \x20\x01(\x08R\x14experimentalFeatures\x129\n\x19hide_passphrase_from_ho\
+ st\x18\x0b\x20\x01(\x08R\x16hidePassphraseFromHost\x12'\n\x0fhaptic_feed\
+ back\x18\r\x20\x01(\x08R\x0ehapticFeedback\x12+\n\x11homescreen_length\
+ \x18\x0e\x20\x01(\rR\x10homescreenLength\x12:\n\x1aauto_lock_delay_batte\
+ ry_ms\x18\x0f\x20\x01(\rR\x16autoLockDelayBatteryMs\"T\n\x0eChangeLangua\
+ ge\x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\x12!\n\x0csh\
+ ow_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\"\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\x02(\x0cR\x03mac\"\x14\n\x12ShowDeviceTuto\
+ rial\"\x12\n\x10UnlockBootloader\"%\n\rSetBrightness\x12\x14\n\x05value\
+ \x18\x01\x20\x01(\rR\x05value*\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\x17Slip\
+ 39_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 15/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.