syntax = "proto2"; /** * Messages for TREZOR communication */ // Sugar for easier handling in Java option java_package = "com.satoshilabs.trezor.lib.protobuf"; option java_outer_classname = "TrezorMessage"; import "google/protobuf/descriptor.proto"; /** * Options for specifying message direction and type of wire (normal/debug) */ extend google.protobuf.EnumValueOptions { optional bool wire_in = 50002; // message can be transmitted via wire from PC to TREZOR optional bool wire_out = 50003; // message can be transmitted via wire from TREZOR to PC optional bool wire_debug_in = 50004; // message can be transmitted via debug wire from PC to TREZOR optional bool wire_debug_out = 50005; // message can be transmitted via debug wire from TREZOR to PC optional bool wire_tiny = 50006; // message is handled by TREZOR when the USB stack is in tiny mode optional bool wire_bootloader = 50007; // message is only handled by TREZOR Bootloader optional bool wire_no_fsm = 50008; // message is not handled by TREZOR unless the USB stack is in tiny mode } /** * Mapping between TREZOR wire identifier (uint) and a protobuf message */ enum MessageType { // Management MessageType_Initialize = 0 [(wire_in) = true, (wire_tiny) = true]; MessageType_Ping = 1 [(wire_in) = true]; MessageType_Success = 2 [(wire_out) = true]; MessageType_Failure = 3 [(wire_out) = true]; MessageType_ChangePin = 4 [(wire_in) = true]; MessageType_WipeDevice = 5 [(wire_in) = true]; MessageType_GetEntropy = 9 [(wire_in) = true]; MessageType_Entropy = 10 [(wire_out) = true]; MessageType_LoadDevice = 13 [(wire_in) = true]; MessageType_ResetDevice = 14 [(wire_in) = true]; MessageType_Features = 17 [(wire_out) = true]; MessageType_PinMatrixRequest = 18 [(wire_out) = true]; MessageType_PinMatrixAck = 19 [(wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; MessageType_Cancel = 20 [(wire_in) = true, (wire_tiny) = true]; MessageType_ClearSession = 24 [(wire_in) = true]; MessageType_ApplySettings = 25 [(wire_in) = true]; MessageType_ButtonRequest = 26 [(wire_out) = true]; MessageType_ButtonAck = 27 [(wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; MessageType_ApplyFlags = 28 [(wire_in) = true]; MessageType_BackupDevice = 34 [(wire_in) = true]; MessageType_EntropyRequest = 35 [(wire_out) = true]; MessageType_EntropyAck = 36 [(wire_in) = true]; MessageType_PassphraseRequest = 41 [(wire_out) = true]; MessageType_PassphraseAck = 42 [(wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; MessageType_PassphraseStateRequest = 77 [(wire_out) = true]; MessageType_PassphraseStateAck = 78 [(wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; MessageType_RecoveryDevice = 45 [(wire_in) = true]; MessageType_WordRequest = 46 [(wire_out) = true]; MessageType_WordAck = 47 [(wire_in) = true]; MessageType_GetFeatures = 55 [(wire_in) = true]; MessageType_SetU2FCounter = 63 [(wire_in) = true]; // Bootloader MessageType_FirmwareErase = 6 [(wire_in) = true, (wire_bootloader) = true]; MessageType_FirmwareUpload = 7 [(wire_in) = true, (wire_bootloader) = true]; MessageType_FirmwareRequest = 8 [(wire_out) = true, (wire_bootloader) = true]; MessageType_SelfTest = 32 [(wire_in) = true, (wire_bootloader) = true]; // Bitcoin MessageType_GetPublicKey = 11 [(wire_in) = true]; MessageType_PublicKey = 12 [(wire_out) = true]; MessageType_SignTx = 15 [(wire_in) = true]; MessageType_TxRequest = 21 [(wire_out) = true]; MessageType_TxAck = 22 [(wire_in) = true]; MessageType_GetAddress = 29 [(wire_in) = true]; MessageType_Address = 30 [(wire_out) = true]; MessageType_SignMessage = 38 [(wire_in) = true]; MessageType_VerifyMessage = 39 [(wire_in) = true]; MessageType_MessageSignature = 40 [(wire_out) = true]; // Crypto MessageType_CipherKeyValue = 23 [(wire_in) = true]; MessageType_CipheredKeyValue = 48 [(wire_out) = true]; MessageType_SignIdentity = 53 [(wire_in) = true]; MessageType_SignedIdentity = 54 [(wire_out) = true]; MessageType_GetECDHSessionKey = 61 [(wire_in) = true]; MessageType_ECDHSessionKey = 62 [(wire_out) = true]; MessageType_CosiCommit = 71 [(wire_in) = true]; MessageType_CosiCommitment = 72 [(wire_out) = true]; MessageType_CosiSign = 73 [(wire_in) = true]; MessageType_CosiSignature = 74 [(wire_out) = true]; // Debug MessageType_DebugLinkDecision = 100 [(wire_debug_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; MessageType_DebugLinkGetState = 101 [(wire_debug_in) = true, (wire_tiny) = true]; MessageType_DebugLinkState = 102 [(wire_debug_out) = true]; MessageType_DebugLinkStop = 103 [(wire_debug_in) = true]; MessageType_DebugLinkLog = 104 [(wire_debug_out) = true]; MessageType_DebugLinkMemoryRead = 110 [(wire_debug_in) = true]; MessageType_DebugLinkMemory = 111 [(wire_debug_out) = true]; MessageType_DebugLinkMemoryWrite = 112 [(wire_debug_in) = true]; MessageType_DebugLinkFlashErase = 113 [(wire_debug_in) = true]; // Ethereum MessageType_EthereumGetAddress = 56 [(wire_in) = true]; MessageType_EthereumAddress = 57 [(wire_out) = true]; MessageType_EthereumSignTx = 58 [(wire_in) = true]; MessageType_EthereumTxRequest = 59 [(wire_out) = true]; MessageType_EthereumTxAck = 60 [(wire_in) = true]; MessageType_EthereumSignMessage = 64 [(wire_in) = true]; MessageType_EthereumVerifyMessage = 65 [(wire_in) = true]; MessageType_EthereumMessageSignature = 66 [(wire_out) = true]; // NEM MessageType_NEMGetAddress = 67 [(wire_in) = true]; MessageType_NEMAddress = 68 [(wire_out) = true]; MessageType_NEMSignTx = 69 [(wire_in) = true]; MessageType_NEMSignedTx = 70 [(wire_out) = true]; MessageType_NEMDecryptMessage = 75 [(wire_in) = true]; MessageType_NEMDecryptedMessage = 76 [(wire_out) = true]; // Lisk MessageType_LiskGetAddress = 114 [(wire_in) = true]; MessageType_LiskAddress = 115 [(wire_out) = true]; MessageType_LiskSignTx = 116 [(wire_in) = true]; MessageType_LiskSignedTx = 117 [(wire_out) = true]; MessageType_LiskSignMessage = 118 [(wire_in) = true]; MessageType_LiskMessageSignature = 119 [(wire_out) = true]; MessageType_LiskVerifyMessage = 120 [(wire_in) = true]; MessageType_LiskGetPublicKey = 121 [(wire_in) = true]; MessageType_LiskPublicKey = 122 [(wire_out) = true]; // Tezos MessageType_TezosGetAddress = 150 [(wire_in) = true]; MessageType_TezosAddress = 151 [(wire_out) = true]; MessageType_TezosSignTx = 152 [(wire_in) = true]; MessageType_TezosSignedTx = 153 [(wire_out) = true]; MessageType_TezosGetPublicKey = 154 [(wire_in) = true]; MessageType_TezosPublicKey = 155 [(wire_out) = true]; // Stellar MessageType_StellarGetPublicKey = 200 [(wire_in) = true]; MessageType_StellarPublicKey = 201 [(wire_out) = true]; MessageType_StellarSignTx = 202 [(wire_in) = true]; MessageType_StellarTxOpRequest = 203 [(wire_out) = true]; MessageType_StellarGetAddress = 207 [(wire_in) = true]; MessageType_StellarAddress = 208 [(wire_out) = true]; MessageType_StellarCreateAccountOp = 210 [(wire_in) = true]; MessageType_StellarPaymentOp = 211 [(wire_in) = true]; MessageType_StellarPathPaymentOp = 212 [(wire_in) = true]; MessageType_StellarManageOfferOp = 213 [(wire_in) = true]; MessageType_StellarCreatePassiveOfferOp = 214 [(wire_in) = true]; MessageType_StellarSetOptionsOp = 215 [(wire_in) = true]; MessageType_StellarChangeTrustOp = 216 [(wire_in) = true]; MessageType_StellarAllowTrustOp = 217 [(wire_in) = true]; MessageType_StellarAccountMergeOp = 218 [(wire_in) = true]; // Omitted: inflation is not a supported operation, would be 219 MessageType_StellarManageDataOp = 220 [(wire_in) = true]; MessageType_StellarBumpSequenceOp = 221 [(wire_in) = true]; MessageType_StellarSignedTx = 230 [(wire_out) = true]; // Cardano MessageType_CardanoSignMessage = 300 [(wire_in) = true]; MessageType_CardanoMessageSignature = 301 [(wire_out) = true]; MessageType_CardanoVerifyMessage = 302 [(wire_in) = true]; MessageType_CardanoSignTransaction = 303 [(wire_in) = true]; MessageType_CardanoTxRequest = 304 [(wire_out) = true]; MessageType_CardanoGetPublicKey = 305 [(wire_in) = true]; MessageType_CardanoPublicKey = 306 [(wire_out) = true]; MessageType_CardanoGetAddress = 307 [(wire_in) = true]; MessageType_CardanoAddress = 308 [(wire_out) = true]; MessageType_CardanoTxAck = 309 [(wire_in) = true]; MessageType_CardanoSignedTransaction = 310 [(wire_out) = true]; }