chore(common): add options to THP messages
What changed, and why it matters
This commit is a routine metadata update for Trezor's protocol-buffer message definitions. It adds directional labels (wire_in/wire_out) and a bitcoin-only flag to a set of Trezor-Host Protocol (THP) pairing and credential messages, plus regenerates the matching Rust code. There is no change to actual message handling logic, cryptography, or device behavior.
No security action required. Treat as normal build/codegen maintenance.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff only touches .proto enum definitions and their generated Rust descriptors. It annotates ThpMessageType values with (wire_in)=true or (wire_out)=true and, where already present, keeps (bitcoin_only)=true. The generated messages.rs and messages_thp.rs files are updated to embed the new protobuf options in their serialized file descriptors. No runtime parsing, validation, state machine, or cryptographic code is modified.
Changed components
common/protob/messages-thp.protocommon/protob/messages.protorust/trezor-client/src/protos/generated/messages.rsrust/trezor-client/src/protos/generated/messages_thp.rsInspect captured patch +95 / −87
diff --git a/common/protob/messages-thp.proto b/common/protob/messages-thp.proto
index 361c8c51..e3fe7e4b 100644
--- a/common/protob/messages-thp.proto
+++ b/common/protob/messages-thp.proto
@@ -15,6 +15,7 @@ option (include_in_bitcoin_only) = true;
*/
enum ThpMessageType {
option (wire_enum) = true;
+
reserved 0 to 19; // values reserved by other messages, see messages.proto
ThpMessageType_Cancel = 20;
reserved 21 to 25;
@@ -23,27 +24,27 @@ enum ThpMessageType {
reserved 28 to 999;
reserved 1000; // MessageType_ThpCreateNewSession
reserved 1001 to 1007; // never appeared in a release, reserved for future use
- ThpMessageType_ThpPairingRequest = 1008;
- ThpMessageType_ThpPairingRequestApproved = 1009;
- ThpMessageType_ThpSelectMethod = 1010;
- ThpMessageType_ThpPairingPreparationsFinished = 1011;
+ ThpMessageType_ThpPairingRequest = 1008 [(wire_in) = true];
+ ThpMessageType_ThpPairingRequestApproved = 1009 [(wire_out) = true];
+ ThpMessageType_ThpSelectMethod = 1010 [(wire_in) = true];
+ ThpMessageType_ThpPairingPreparationsFinished = 1011 [(wire_out) = true];
reserved 1012 to 1015; // never appeared in a release, reserved for future use
- ThpMessageType_ThpCredentialRequest = 1016;
- ThpMessageType_ThpCredentialResponse = 1017;
- ThpMessageType_ThpEndRequest = 1018;
- ThpMessageType_ThpEndResponse = 1019;
+ ThpMessageType_ThpCredentialRequest = 1016 [(wire_in) = true, (bitcoin_only) = true];
+ ThpMessageType_ThpCredentialResponse = 1017 [(wire_out) = true, (bitcoin_only) = true];
+ ThpMessageType_ThpEndRequest = 1018 [(wire_in) = true];
+ ThpMessageType_ThpEndResponse = 1019 [(wire_out) = true];
reserved 1020 to 1023; // never appeared in a release, reserved for future use
- ThpMessageType_ThpCodeEntryCommitment = 1024;
- ThpMessageType_ThpCodeEntryChallenge = 1025;
- ThpMessageType_ThpCodeEntryCpaceTrezor = 1026;
- ThpMessageType_ThpCodeEntryCpaceHostTag = 1027;
- ThpMessageType_ThpCodeEntrySecret = 1028;
+ ThpMessageType_ThpCodeEntryCommitment = 1024 [(wire_out) = true];
+ ThpMessageType_ThpCodeEntryChallenge = 1025 [(wire_in) = true];
+ ThpMessageType_ThpCodeEntryCpaceTrezor = 1026 [(wire_out) = true];
+ ThpMessageType_ThpCodeEntryCpaceHostTag = 1027 [(wire_in) = true];
+ ThpMessageType_ThpCodeEntrySecret = 1028 [(wire_out) = true];
reserved 1029 to 1031; // never appeared in a release, reserved for future use
- ThpMessageType_ThpQrCodeTag = 1032;
- ThpMessageType_ThpQrCodeSecret = 1033;
+ ThpMessageType_ThpQrCodeTag = 1032 [(wire_in) = true];
+ ThpMessageType_ThpQrCodeSecret = 1033 [(wire_out) = true];
reserved 1034 to 1039; // never appeared in a release, reserved for future use
- ThpMessageType_ThpNfcTagHost = 1040;
- ThpMessageType_ThpNfcTagTrezor = 1041;
+ ThpMessageType_ThpNfcTagHost = 1040 [(wire_in) = true];
+ ThpMessageType_ThpNfcTagTrezor = 1041 [(wire_out) = true];
reserved 1042 to 1099; // never appeared in a release, reserved for future use
reserved 1100 to 2147483647; // values reserved by other messages, see messages.proto
}
diff --git a/common/protob/messages.proto b/common/protob/messages.proto
index 68f0f679..6ffe7ec9 100644
--- a/common/protob/messages.proto
+++ b/common/protob/messages.proto
@@ -336,10 +336,10 @@ enum MessageType {
MessageType_SolanaTxSignature = 905 [(wire_out) = true];
// THP
- MessageType_ThpCreateNewSession = 1000 [(bitcoin_only) = true];
+ MessageType_ThpCreateNewSession = 1000 [(wire_in) = true, (bitcoin_only) = true];
reserved 1001 to 1015; // see ThpMessageType in messages-thp.proto
- MessageType_ThpCredentialRequest = 1016 [(bitcoin_only) = true];
- MessageType_ThpCredentialResponse = 1017 [(bitcoin_only) = true];
+ MessageType_ThpCredentialRequest = 1016 [(wire_in) = true, (bitcoin_only) = true];
+ MessageType_ThpCredentialResponse = 1017 [(wire_out) = true, (bitcoin_only) = true];
reserved 1018 to 1099; // see ThpMessageType in messages-thp.proto
// Nostr
diff --git a/rust/trezor-client/src/protos/generated/messages.rs b/rust/trezor-client/src/protos/generated/messages.rs
index 83a88cf9..fec3c95e 100644
--- a/rust/trezor-client/src/protos/generated/messages.rs
+++ b/rust/trezor-client/src/protos/generated/messages.rs
@@ -1776,7 +1776,7 @@ impl MessageType {
}
static file_descriptor_proto_data: &'static [u8] = b"\
- \n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\roptions.proto*\x9dc\
+ \n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\roptions.proto*\xa9c\
\n\x0bMessageType\x12(\n\x16MessageType_Initialize\x10\0\x1a\x0c\x80\xa6\
\x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\x10MessageType_Ping\
\x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12%\n\x13MessageType_S\
@@ -2064,49 +2064,50 @@ static file_descriptor_proto_data: &'static [u8] = b"\
dress\x10\x86\x07\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_SolanaAd\
dress\x10\x87\x07\x1a\x04\x98\xb5\x18\x01\x12#\n\x18MessageType_SolanaSi\
gnTx\x10\x88\x07\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_SolanaTxS\
- ignature\x10\x89\x07\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_ThpCr\
- eateNewSession\x10\xe8\x07\x1a\x04\x80\xa6\x1d\x01\x12+\n\x20MessageType\
- _ThpCredentialRequest\x10\xf8\x07\x1a\x04\x80\xa6\x1d\x01\x12,\n!Message\
- Type_ThpCredentialResponse\x10\xf9\x07\x1a\x04\x80\xa6\x1d\x01\x12%\n\
- \x1aMessageType_NostrGetPubkey\x10\xd1\x0f\x1a\x04\x90\xb5\x18\x01\x12\"\
- \n\x17MessageType_NostrPubkey\x10\xd2\x0f\x1a\x04\x98\xb5\x18\x01\x12%\n\
- \x1aMessageType_NostrSignEvent\x10\xd3\x0f\x1a\x04\x90\xb5\x18\x01\x12*\
- \n\x1fMessageType_NostrEventSignature\x10\xd4\x0f\x1a\x04\x98\xb5\x18\
- \x01\x12'\n\x18MessageType_EvoluGetNode\x10\xb4\x10\x1a\x08\x80\xa6\x1d\
- \x01\x90\xb5\x18\x01\x12$\n\x15MessageType_EvoluNode\x10\xb5\x10\x1a\x08\
- \x80\xa6\x1d\x01\x98\xb5\x18\x01\x127\n(MessageType_EvoluSignRegistratio\
- nRequest\x10\xb6\x10\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x123\n$Mess\
- ageType_EvoluRegistrationRequest\x10\xb7\x10\x1a\x08\x80\xa6\x1d\x01\x98\
- \xb5\x18\x01\x127\n(MessageType_EvoluGetDelegatedIdentityKey\x10\xb8\x10\
- \x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x124\n%MessageType_EvoluDelegat\
- edIdentityKey\x10\xb9\x10\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12/\n\
- \x20MessageType_EvoluIndexManagement\x10\xba\x10\x1a\x08\x80\xa6\x1d\x01\
- \x90\xb5\x18\x01\x127\n(MessageType_EvoluIndexManagementResponse\x10\xbb\
- \x10\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12%\n\x1aMessageType_TronG\
- etAddress\x10\x98\x11\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17MessageType_Tro\
- nAddress\x10\x99\x11\x1a\x04\x98\xb5\x18\x01\x12!\n\x16MessageType_TronS\
- ignTx\x10\x9a\x11\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_TronSign\
- ature\x10\x9b\x11\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_TronCont\
- ractRequest\x10\x9c\x11\x1a\x04\x98\xb5\x18\x01\x12+\n\x20MessageType_Tr\
- onTransferContract\x10\x9d\x11\x1a\x04\x90\xb5\x18\x01\x12/\n$MessageTyp\
- e_TronTriggerSmartContract\x10\x9e\x11\x1a\x04\x90\xb5\x18\x01\x122\n'Me\
- ssageType_TronFreezeBalanceV2Contract\x10\x9f\x11\x1a\x04\x90\xb5\x18\
- \x01\x124\n)MessageType_TronUnfreezeBalanceV2Contract\x10\xa0\x11\x1a\
- \x04\x90\xb5\x18\x01\x12+\n\x20MessageType_TronWithdrawUnfreeze\x10\xa1\
- \x11\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_TronVoteWitnessContract\
- \x10\xa2\x11\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_BenchmarkList\
- Names\x10\x8cG\x1a\x04\x80\xa6\x1d\x01\x12%\n\x1aMessageType_BenchmarkNa\
- mes\x10\x8dG\x1a\x04\x80\xa6\x1d\x01\x12#\n\x18MessageType_BenchmarkRun\
- \x10\x8eG\x1a\x04\x80\xa6\x1d\x01\x12&\n\x1bMessageType_BenchmarkResult\
- \x10\x8fG\x1a\x04\x80\xa6\x1d\x01\x12'\n\x18MessageType_TelemetryGet\x10\
- \xcc\x08\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x15MessageType_T\
- elemetry\x10\xcd\x08\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x1a\x08\xc8\
- \xf3\x18\x01\xd0\xf3\x18\x01\"\x04\x08Z\x10\\\"\x04\x08G\x10J\"\x04\x08r\
- \x10z\"\x05\x08{\x10\x95\x01\"\x06\x08\xdb\x01\x10\xdb\x01\"\x06\x08\xe0\
- \x01\x10\xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\x06\x08\xb5\x02\x10\xb8\
- \x02\"\x06\x08\xbc\x05\x10\xc5\x05\"\x06\x08\xe9\x07\x10\xf7\x07\"\x06\
- \x08\xfa\x07\x10\xcb\x08B8\n#com.satoshilabs.trezor.lib.protobufB\rTrezo\
- rMessage\x80\xa6\x1d\x01\
+ ignature\x10\x89\x07\x1a\x04\x98\xb5\x18\x01\x12.\n\x1fMessageType_ThpCr\
+ eateNewSession\x10\xe8\x07\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12/\
+ \n\x20MessageType_ThpCredentialRequest\x10\xf8\x07\x1a\x08\x80\xa6\x1d\
+ \x01\x90\xb5\x18\x01\x120\n!MessageType_ThpCredentialResponse\x10\xf9\
+ \x07\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12%\n\x1aMessageType_Nostr\
+ GetPubkey\x10\xd1\x0f\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17MessageType_Nos\
+ trPubkey\x10\xd2\x0f\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMessageType_Nostr\
+ SignEvent\x10\xd3\x0f\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Nost\
+ rEventSignature\x10\xd4\x0f\x1a\x04\x98\xb5\x18\x01\x12'\n\x18MessageTyp\
+ e_EvoluGetNode\x10\xb4\x10\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\
+ \n\x15MessageType_EvoluNode\x10\xb5\x10\x1a\x08\x80\xa6\x1d\x01\x98\xb5\
+ \x18\x01\x127\n(MessageType_EvoluSignRegistrationRequest\x10\xb6\x10\x1a\
+ \x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x123\n$MessageType_EvoluRegistratio\
+ nRequest\x10\xb7\x10\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x127\n(Mess\
+ ageType_EvoluGetDelegatedIdentityKey\x10\xb8\x10\x1a\x08\x80\xa6\x1d\x01\
+ \x90\xb5\x18\x01\x124\n%MessageType_EvoluDelegatedIdentityKey\x10\xb9\
+ \x10\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12/\n\x20MessageType_Evolu\
+ IndexManagement\x10\xba\x10\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x127\
+ \n(MessageType_EvoluIndexManagementResponse\x10\xbb\x10\x1a\x08\x80\xa6\
+ \x1d\x01\x98\xb5\x18\x01\x12%\n\x1aMessageType_TronGetAddress\x10\x98\
+ \x11\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17MessageType_TronAddress\x10\x99\
+ \x11\x1a\x04\x98\xb5\x18\x01\x12!\n\x16MessageType_TronSignTx\x10\x9a\
+ \x11\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_TronSignature\x10\x9b\
+ \x11\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_TronContractRequest\
+ \x10\x9c\x11\x1a\x04\x98\xb5\x18\x01\x12+\n\x20MessageType_TronTransferC\
+ ontract\x10\x9d\x11\x1a\x04\x90\xb5\x18\x01\x12/\n$MessageType_TronTrigg\
+ erSmartContract\x10\x9e\x11\x1a\x04\x90\xb5\x18\x01\x122\n'MessageType_T\
+ ronFreezeBalanceV2Contract\x10\x9f\x11\x1a\x04\x90\xb5\x18\x01\x124\n)Me\
+ ssageType_TronUnfreezeBalanceV2Contract\x10\xa0\x11\x1a\x04\x90\xb5\x18\
+ \x01\x12+\n\x20MessageType_TronWithdrawUnfreeze\x10\xa1\x11\x1a\x04\x90\
+ \xb5\x18\x01\x12.\n#MessageType_TronVoteWitnessContract\x10\xa2\x11\x1a\
+ \x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_BenchmarkListNames\x10\x8cG\
+ \x1a\x04\x80\xa6\x1d\x01\x12%\n\x1aMessageType_BenchmarkNames\x10\x8dG\
+ \x1a\x04\x80\xa6\x1d\x01\x12#\n\x18MessageType_BenchmarkRun\x10\x8eG\x1a\
+ \x04\x80\xa6\x1d\x01\x12&\n\x1bMessageType_BenchmarkResult\x10\x8fG\x1a\
+ \x04\x80\xa6\x1d\x01\x12'\n\x18MessageType_TelemetryGet\x10\xcc\x08\x1a\
+ \x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x15MessageType_Telemetry\x10\
+ \xcd\x08\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x1a\x08\xc8\xf3\x18\x01\
+ \xd0\xf3\x18\x01\"\x04\x08Z\x10\\\"\x04\x08G\x10J\"\x04\x08r\x10z\"\x05\
+ \x08{\x10\x95\x01\"\x06\x08\xdb\x01\x10\xdb\x01\"\x06\x08\xe0\x01\x10\
+ \xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\x06\x08\xb5\x02\x10\xb8\x02\"\
+ \x06\x08\xbc\x05\x10\xc5\x05\"\x06\x08\xe9\x07\x10\xf7\x07\"\x06\x08\xfa\
+ \x07\x10\xcb\x08B8\n#com.satoshilabs.trezor.lib.protobufB\rTrezorMessage\
+ \x80\xa6\x1d\x01\
";
/// `FileDescriptorProto` object which was a source for this generated file
diff --git a/rust/trezor-client/src/protos/generated/messages_thp.rs b/rust/trezor-client/src/protos/generated/messages_thp.rs
index 67c7c7dd..00e6cbb9 100644
--- a/rust/trezor-client/src/protos/generated/messages_thp.rs
+++ b/rust/trezor-client/src/protos/generated/messages_thp.rs
@@ -4805,30 +4805,36 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x13ThpPairedCacheEntry\x12\x19\n\x08mac_addr\x18\x01\x20\x02(\x0cR\
\x07macAddr\x12\x1b\n\thost_name\x18\x02\x20\x02(\tR\x08hostName\x12\x19\
\n\x08app_name\x18\x03\x20\x02(\tR\x07appName:\x04\x98\xb2\x19\x01:\x04\
- \x98\xb2\x19\x01*\xfb\x06\n\x0eThpMessageType\x12\x19\n\x15ThpMessageTyp\
+ \x98\xb2\x19\x01*\xe9\x07\n\x0eThpMessageType\x12\x19\n\x15ThpMessageTyp\
e_Cancel\x10\x14\x12\x20\n\x1cThpMessageType_ButtonRequest\x10\x1a\x12\
- \x1c\n\x18ThpMessageType_ButtonAck\x10\x1b\x12%\n\x20ThpMessageType_ThpP\
- airingRequest\x10\xf0\x07\x12-\n(ThpMessageType_ThpPairingRequestApprove\
- d\x10\xf1\x07\x12#\n\x1eThpMessageType_ThpSelectMethod\x10\xf2\x07\x122\
- \n-ThpMessageType_ThpPairingPreparationsFinished\x10\xf3\x07\x12(\n#ThpM\
- essageType_ThpCredentialRequest\x10\xf8\x07\x12)\n$ThpMessageType_ThpCre\
- dentialResponse\x10\xf9\x07\x12!\n\x1cThpMessageType_ThpEndRequest\x10\
- \xfa\x07\x12\"\n\x1dThpMessageType_ThpEndResponse\x10\xfb\x07\x12*\n%Thp\
- MessageType_ThpCodeEntryCommitment\x10\x80\x08\x12)\n$ThpMessageType_Thp\
- CodeEntryChallenge\x10\x81\x08\x12+\n&ThpMessageType_ThpCodeEntryCpaceTr\
- ezor\x10\x82\x08\x12,\n'ThpMessageType_ThpCodeEntryCpaceHostTag\x10\x83\
- \x08\x12&\n!ThpMessageType_ThpCodeEntrySecret\x10\x84\x08\x12\x20\n\x1bT\
- hpMessageType_ThpQrCodeTag\x10\x88\x08\x12#\n\x1eThpMessageType_ThpQrCod\
- eSecret\x10\x89\x08\x12!\n\x1cThpMessageType_ThpNfcTagHost\x10\x90\x08\
- \x12#\n\x1eThpMessageType_ThpNfcTagTrezor\x10\x91\x08\x1a\x04\xd0\xf3\
- \x18\x01\"\x04\x08\0\x10\x13\"\x04\x08\x15\x10\x19\"\x05\x08\x1c\x10\xe7\
- \x07\"\x06\x08\xe8\x07\x10\xe8\x07\"\x06\x08\xe9\x07\x10\xef\x07\"\x06\
- \x08\xf4\x07\x10\xf7\x07\"\x06\x08\xfc\x07\x10\xff\x07\"\x06\x08\x85\x08\
- \x10\x87\x08\"\x06\x08\x8a\x08\x10\x8f\x08\"\x06\x08\x92\x08\x10\xcb\x08\
- \"\t\x08\xcc\x08\x10\xff\xff\xff\xff\x07*G\n\x10ThpPairingMethod\x12\x0f\
- \n\x0bSkipPairing\x10\x01\x12\r\n\tCodeEntry\x10\x02\x12\n\n\x06QrCode\
- \x10\x03\x12\x07\n\x03NFC\x10\x04B;\n#com.satoshilabs.trezor.lib.protobu\
- fB\x10TrezorMessageThp\x80\xa6\x1d\x01\
+ \x1c\n\x18ThpMessageType_ButtonAck\x10\x1b\x12+\n\x20ThpMessageType_ThpP\
+ airingRequest\x10\xf0\x07\x1a\x04\x90\xb5\x18\x01\x123\n(ThpMessageType_\
+ ThpPairingRequestApproved\x10\xf1\x07\x1a\x04\x98\xb5\x18\x01\x12)\n\x1e\
+ ThpMessageType_ThpSelectMethod\x10\xf2\x07\x1a\x04\x90\xb5\x18\x01\x128\
+ \n-ThpMessageType_ThpPairingPreparationsFinished\x10\xf3\x07\x1a\x04\x98\
+ \xb5\x18\x01\x122\n#ThpMessageType_ThpCredentialRequest\x10\xf8\x07\x1a\
+ \x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x123\n$ThpMessageType_ThpCredential\
+ Response\x10\xf9\x07\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12'\n\x1cT\
+ hpMessageType_ThpEndRequest\x10\xfa\x07\x1a\x04\x90\xb5\x18\x01\x12(\n\
+ \x1dThpMessageType_ThpEndResponse\x10\xfb\x07\x1a\x04\x98\xb5\x18\x01\
+ \x120\n%ThpMessageType_ThpCodeEntryCommitment\x10\x80\x08\x1a\x04\x98\
+ \xb5\x18\x01\x12/\n$ThpMessageType_ThpCodeEntryChallenge\x10\x81\x08\x1a\
+ \x04\x90\xb5\x18\x01\x121\n&ThpMessageType_ThpCodeEntryCpaceTrezor\x10\
+ \x82\x08\x1a\x04\x98\xb5\x18\x01\x122\n'ThpMessageType_ThpCodeEntryCpace\
+ HostTag\x10\x83\x08\x1a\x04\x90\xb5\x18\x01\x12,\n!ThpMessageType_ThpCod\
+ eEntrySecret\x10\x84\x08\x1a\x04\x98\xb5\x18\x01\x12&\n\x1bThpMessageTyp\
+ e_ThpQrCodeTag\x10\x88\x08\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eThpMessageT\
+ ype_ThpQrCodeSecret\x10\x89\x08\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cThpMes\
+ sageType_ThpNfcTagHost\x10\x90\x08\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eThp\
+ MessageType_ThpNfcTagTrezor\x10\x91\x08\x1a\x04\x98\xb5\x18\x01\x1a\x04\
+ \xd0\xf3\x18\x01\"\x04\x08\0\x10\x13\"\x04\x08\x15\x10\x19\"\x05\x08\x1c\
+ \x10\xe7\x07\"\x06\x08\xe8\x07\x10\xe8\x07\"\x06\x08\xe9\x07\x10\xef\x07\
+ \"\x06\x08\xf4\x07\x10\xf7\x07\"\x06\x08\xfc\x07\x10\xff\x07\"\x06\x08\
+ \x85\x08\x10\x87\x08\"\x06\x08\x8a\x08\x10\x8f\x08\"\x06\x08\x92\x08\x10\
+ \xcb\x08\"\t\x08\xcc\x08\x10\xff\xff\xff\xff\x07*G\n\x10ThpPairingMethod\
+ \x12\x0f\n\x0bSkipPairing\x10\x01\x12\r\n\tCodeEntry\x10\x02\x12\n\n\x06\
+ QrCode\x10\x03\x12\x07\n\x03NFC\x10\x04B;\n#com.satoshilabs.trezor.lib.p\
+ rotobufB\x10TrezorMessageThp\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.