protobuf files cleanup

This commit is contained in:
Pavol Rusnak 2013-10-24 19:29:11 +02:00
parent 817cd6ea86
commit ed0813682c
2 changed files with 107 additions and 106 deletions

View File

@ -1,8 +1,8 @@
/* /*
This file describes Protocol buffers messages for bitcoin hardware wallet devices. Messages for TREZOR communication
Author: Marek Palatinus <slush@satoshilabs.com> Author: Marek Palatinus <slush@satoshilabs.com>
Version: 0.5 Version: 0.5
*/ */
@ -12,45 +12,45 @@ import "google/protobuf/descriptor.proto";
Mapping between Trezor wire identifier (int) and protobuf message Mapping between Trezor wire identifier (int) and protobuf message
*/ */
enum MessageType { enum MessageType {
MessageType_Initialize = 0; MessageType_Initialize = 0;
MessageType_Ping = 1; MessageType_Ping = 1;
MessageType_Success = 2; MessageType_Success = 2;
MessageType_Failure = 3; MessageType_Failure = 3;
MessageType_ChangePin = 4; MessageType_ChangePin = 4;
MessageType_WipeDevice = 5; MessageType_WipeDevice = 5;
MessageType_FirmwareErase = 6; MessageType_FirmwareErase = 6;
MessageType_FirmwareUpload = 7; MessageType_FirmwareUpload = 7;
MessageType_GetEntropy = 9; MessageType_GetEntropy = 9;
MessageType_Entropy = 10; MessageType_Entropy = 10;
MessageType_GetMasterPublicKey = 11; MessageType_GetMasterPublicKey = 11;
MessageType_MasterPublicKey = 12; MessageType_MasterPublicKey = 12;
MessageType_LoadDevice = 13; MessageType_LoadDevice = 13;
MessageType_ResetDevice = 14; MessageType_ResetDevice = 14;
MessageType_SignTx = 15; MessageType_SignTx = 15;
MessageType_SimpleSignTx = 16; MessageType_SimpleSignTx = 16;
MessageType_Features = 17; MessageType_Features = 17;
MessageType_PinMatrixRequest = 18; MessageType_PinMatrixRequest = 18;
MessageType_PinMatrixAck = 19; MessageType_PinMatrixAck = 19;
MessageType_PinMatrixCancel = 20; MessageType_PinMatrixCancel = 20;
MessageType_TxRequest = 21; MessageType_TxRequest = 21;
MessageType_TxInput = 23; MessageType_TxInput = 23;
MessageType_TxOutput = 24; MessageType_TxOutput = 24;
MessageType_ApplySettings = 25; MessageType_ApplySettings = 25;
MessageType_ButtonRequest = 26; MessageType_ButtonRequest = 26;
MessageType_ButtonAck = 27; MessageType_ButtonAck = 27;
MessageType_ButtonCancel = 28; MessageType_ButtonCancel = 28;
MessageType_GetAddress = 29; MessageType_GetAddress = 29;
MessageType_Address = 30; MessageType_Address = 30;
MessageType_SettingsType = 31; MessageType_SettingsType = 31;
MessageType_XprvType = 32; MessageType_XprvType = 32;
MessageType_CoinType = 33; MessageType_CoinType = 33;
MessageType_XpubType = 34; MessageType_XpubType = 34;
MessageType_EntropyRequest = 35; MessageType_EntropyRequest = 35;
MessageType_EntropyAck = 36; MessageType_EntropyAck = 36;
MessageType_DebugLinkDecision = 100; MessageType_DebugLinkDecision = 100;
MessageType_DebugLinkGetState = 101; MessageType_DebugLinkGetState = 101;
MessageType_DebugLinkState = 102; MessageType_DebugLinkState = 102;
MessageType_DebugLinkStop = 103; MessageType_DebugLinkStop = 103;
} }
// Such option indicates that the message field has binary payload // Such option indicates that the message field has binary payload
@ -75,16 +75,16 @@ enum FailureType {
Failure_FirmwareError = 99; Failure_FirmwareError = 99;
} }
// Specifies which script will be used for given transaction output. // Specifies which script will be used for given transaction output.
enum ScriptType { enum ScriptType {
PAYTOADDRESS = 0; PAYTOADDRESS = 0;
PAYTOSCRIPTHASH = 1; PAYTOSCRIPTHASH = 1;
} }
// Specifies which kind of information is required by transaction signing process // Specifies which kind of information is required by transaction signing process
enum RequestType { enum RequestType {
TXINPUT = 0; TXINPUT = 0;
TXOUTPUT = 1; TXOUTPUT = 1;
} }
// Structure for BIP32-encoded node // Structure for BIP32-encoded node
@ -116,7 +116,7 @@ message CoinType {
} }
message SettingsType { message SettingsType {
optional bytes language = 1; // Trezor uses 'english' as default optional bytes language = 1; // Trezor uses 'english' as default
optional CoinType coin = 2; optional CoinType coin = 2;
optional bytes label = 3; // Human readable wallet name optional bytes label = 3; // Human readable wallet name
} }
@ -134,15 +134,15 @@ message Initialize {
// Response object for Initialize. // Response object for Initialize.
message Features { message Features {
optional bytes vendor = 1; // Name of the manufacturer, e.g. "bitcointrezor.com" optional bytes vendor = 1; // Name of the manufacturer, e.g. "bitcointrezor.com"
optional uint32 major_version = 2; // Major version of the device, e.g. 1 optional uint32 major_version = 2; // Major version of the device, e.g. 1
optional uint32 minor_version = 3; // Minor version of the device, e.g. 0 optional uint32 minor_version = 3; // Minor version of the device, e.g. 0
optional uint32 bugfix_version = 4; optional uint32 bugfix_version = 4;
optional bool bootloader_mode = 5; optional bool bootloader_mode = 5;
optional SettingsType settings = 6; // User-level settings of the device optional SettingsType settings = 6; // User-level settings of the device
optional bytes device_id = 7 [(binary) = true]; // Device's unique identifier optional bytes device_id = 7 [(binary) = true]; // Device's unique identifier
optional bytes mpk_hash = 8 [(binary) = true]; // Hash of master public key (sha256(XpubType.public_key).digest()) optional bytes mpk_hash = 8 [(binary) = true]; // Hash of master public key (sha256(XpubType.public_key).digest())
optional bool pin_protection = 9; // True if Trezor is covered by PIN optional bool pin_protection = 9; // True if Trezor is covered by PIN
} }
// Overwrites only filled fields of the structure // Overwrites only filled fields of the structure
@ -155,25 +155,25 @@ message ApplySettings {
// Starts workflow for setting/changing the PIN // Starts workflow for setting/changing the PIN
// Response: ButtonRequest, PinMatrixRequest // Response: ButtonRequest, PinMatrixRequest
message ChangePin { message ChangePin {
optional bool remove = 1; // Set True if want to remove PIN protection optional bool remove = 1; // Set True if want to remove PIN protection
} }
// Test if device is live, device will send back the message on success // Test if device is live, device will send back the message on success
// //
// Response: None or Success // Response: None or Success
message Ping { message Ping {
optional bytes message = 1; // Message will be sent back in Success message optional bytes message = 1; // Message will be sent back in Success message
} }
// Response object defining success of the previous request // Response object defining success of the previous request
message Success { message Success {
optional bytes message = 1; // May contain human readable description of the action or request-specific payload optional bytes message = 1; // May contain human readable description of the action or request-specific payload
} }
// Response object defining failure of the previous request // Response object defining failure of the previous request
message Failure { message Failure {
optional FailureType code = 1; // May contain computer-readable definition of the error state optional FailureType code = 1; // May contain computer-readable definition of the error state
optional bytes message = 2; // May contain human-readable message of the error state optional bytes message = 2; // May contain human-readable message of the error state
} }
// Message can be sent by the *device* as a resopnse to any request. // Message can be sent by the *device* as a resopnse to any request.
@ -190,18 +190,18 @@ message ButtonAck {
// Computer want to cancel current action (don't wait to HW button press) // Computer want to cancel current action (don't wait to HW button press)
message ButtonCancel { message ButtonCancel {
} }
// Message can be sent by the *device* as a response to any request. // Message can be sent by the *device* as a response to any request.
// Message asks computer to send back PinMatrixAck with the password encoded in pin matrix scheme. // Message asks computer to send back PinMatrixAck with the password encoded in pin matrix scheme.
// //
// Response: PinMatrixAck, PinMatrixCancel // Response: PinMatrixAck, PinMatrixCancel
message PinMatrixRequest { message PinMatrixRequest {
optional bytes message = 1; // Human readable message optional bytes message = 1; // Human readable message
} }
// Message is sent by the computer as a response to PinMatrixRequest previously sent by the device. // Message is sent by the computer as a response to PinMatrixRequest previously sent by the device.
message PinMatrixAck { message PinMatrixAck {
required bytes pin = 1; // User must write down the password for accessing the device. required bytes pin = 1; // User must write down the password for accessing the device.
} }
// Message is sent as a response to PinMatrixRequest by the computer, asking the device to cancel // Message is sent as a response to PinMatrixRequest by the computer, asking the device to cancel
@ -214,12 +214,12 @@ message PinMatrixCancel {
// //
// Response: PinMatrixRequest, Entropy, Failure // Response: PinMatrixRequest, Entropy, Failure
message GetEntropy { message GetEntropy {
required uint32 size = 1; // Size of randomly generated buffer required uint32 size = 1; // Size of randomly generated buffer
} }
// Response to GetEntropy request contains random data generated by internal HRNG. // Response to GetEntropy request contains random data generated by internal HRNG.
message Entropy { message Entropy {
required bytes entropy = 1 [(binary) = true]; // Stream of generated bytes required bytes entropy = 1 [(binary) = true]; // Stream of generated bytes
} }
// Ask device for it's current master public key. This may be used for generating // Ask device for it's current master public key. This may be used for generating
@ -232,15 +232,15 @@ message GetMasterPublicKey {
// Contains master public key derived from device's seed. // Contains master public key derived from device's seed.
message MasterPublicKey { message MasterPublicKey {
required XpubType mpk = 1; // BIP32 node public key + chaincode required XpubType mpk = 1; // BIP32 node public key + chaincode
} }
message GetAddress { message GetAddress {
repeated uint32 address_n = 1; // Parameter for address generation algorithm to derive the address from the master public key repeated uint32 address_n = 1; // Parameter for address generation algorithm to derive the address from the master public key
} }
message Address { message Address {
required bytes address = 1; // Bitcoin address in base58 encoding corresponding to GetAddress(n) call required bytes address = 1; // Bitcoin address in base58 encoding corresponding to GetAddress(n) call
} }
// Request device to wipe all sensitive data and settings. // Request device to wipe all sensitive data and settings.
@ -254,22 +254,23 @@ message WipeDevice {
// //
// Response: Success, ButtonRequest, PinMatrixRequest, Failure // Response: Success, ButtonRequest, PinMatrixRequest, Failure
message LoadDevice { message LoadDevice {
optional bytes seed = 1; // Seed encoded as a mnemonic (12 english words) optional bytes seed = 1; // Seed encoded as a mnemonic (12 english words)
optional XprvType xprv = 2; optional XprvType xprv = 2;
optional bytes pin = 3; // Set PIN protection for important actions optional bytes pin = 3; // Set PIN protection for important actions
} }
// Request device to do full-reset, to generate new seed // Request device to do full-reset, to generate new seed
// and ask user for new settings (PIN). // and ask user for new settings (PIN).
// Workflow is splitted into ResetDevice/EntropyRequest to be sure // Workflow is splitted into ResetDevice/EntropyRequest to be sure
// that entropy provided by device isn't calculated on base of computer provided // that entropy provided by device isn't calculated on base of computer provided
// entropy. // entropy.
//
// //
//
// Response: EntropyRequest, PinMatrixRequest, Failure // Response: EntropyRequest, PinMatrixRequest, Failure
message ResetDevice { message ResetDevice {
optional bool display_random = 1; // If set, displays entropy generated by the device used optional bool display_random = 1; // If set, displays entropy generated by the device used
// for generating the seed *before* asking for additional entropy from computer // for generating the seed *before* asking
// for additional entropy from computer
} }
// Asks for additional Entropy from host computer // Asks for additional Entropy from host computer
@ -290,15 +291,15 @@ message EntropyAck {
// //
// Response: TxRequest, PinMatrixRequest, Failure // Response: TxRequest, PinMatrixRequest, Failure
message SignTx { message SignTx {
required uint32 outputs_count = 3; // Count of outputs of the transaction required uint32 outputs_count = 3; // Count of outputs of the transaction
required uint32 inputs_count = 5; // Count of inputs of the transaction required uint32 inputs_count = 5; // Count of inputs of the transaction
} }
// Request a simplified workflow of signing. // Request a simplified workflow of signing.
// This method doesn't support streaming, // This method doesn't support streaming,
// so there may be hardware limits // so there may be hardware limits
// in number of inputs and outputs. // in number of inputs and outputs.
// //
// This simplified workflow should not be used // This simplified workflow should not be used
// in production, it is designed mainly for debug purposes. // in production, it is designed mainly for debug purposes.
// //
@ -307,42 +308,42 @@ message SignTx {
// //
// Response: Success, PinMatrixRequest, Failure // Response: Success, PinMatrixRequest, Failure
message SimpleSignTx { message SimpleSignTx {
repeated TxInput inputs = 1; repeated TxInput inputs = 1;
repeated TxOutput outputs = 2; repeated TxOutput outputs = 2;
} }
// Sent by the device as a response for SignTx. Device asks for information for signing transaction. // Sent by the device as a response for SignTx. Device asks for information for signing transaction.
// If request_index is set, device asks for TxInput/TxOutput message (depends on request_type) // If request_index is set, device asks for TxInput/TxOutput message (depends on request_type)
// with details of index's input. // with details of index's input.
// If signed_index is set, 'signature' contains signed input of signed_index's input. // If signed_index is set, 'signature' contains signed input of signed_index's input.
message TxRequest { message TxRequest {
optional int32 request_index = 1; // If >=0, device expects TxInput/TxOutput message from the computer optional int32 request_index = 1; // If >=0, device expects TxInput/TxOutput message from the computer
optional RequestType request_type = 2; // Ask for TxInput or TxOutput? optional RequestType request_type = 2; // Ask for TxInput or TxOutput?
optional int32 signed_index = 3; // If >=0, 'signature' contains signed input of this input optional int32 signed_index = 3; // If >=0, 'signature' contains signed input of this input
optional bytes signature = 4 [(binary) = true]; // If signed_index>=0, represent signature of the signed_index input optional bytes signature = 4 [(binary) = true]; // If signed_index>=0, represent signature of the signed_index input
optional bytes serialized_tx = 5 [(binary) = true]; // Part of serialized and signed transaction optional bytes serialized_tx = 5 [(binary) = true]; // Part of serialized and signed transaction
} }
// Transaction onput for SignTx workflow. It is response to TxRequest message sent by device. // Transaction onput for SignTx workflow. It is response to TxRequest message sent by device.
// //
// Response: TxRequest, Failure // Response: TxRequest, Failure
message TxInput { message TxInput {
required uint32 index = 1; // Position of input in proposed transaction required uint32 index = 1; // Position of input in proposed transaction
repeated uint32 address_n = 2; // Parameter for address generation algorithm to derive the address from the master public key repeated uint32 address_n = 2; // Parameter for address generation algorithm to derive the address from the master public key
required uint64 amount = 3; // Amount to spend in satoshis. The rest will be used for transaction fees required uint64 amount = 3; // Amount to spend in satoshis. The rest will be used for transaction fees
required bytes prev_hash = 4 [(binary) = true]; // Hash of previous transaction output to spend by this input required bytes prev_hash = 4 [(binary) = true]; // Hash of previous transaction output to spend by this input
required uint32 prev_index = 5; // Index of previous output to spend required uint32 prev_index = 5; // Index of previous output to spend
optional bytes script_sig = 6 [(binary) = true]; // Script signature optional bytes script_sig = 6 [(binary) = true]; // Script signature
} }
// Transaction output for SignTx workflow. It is response to TxRequest message sent by the device. // Transaction output for SignTx workflow. It is response to TxRequest message sent by the device.
message TxOutput { message TxOutput {
required uint32 index = 1; // Position of output in proposed transaction required uint32 index = 1; // Position of output in proposed transaction
required bytes address = 2; // Target bitcoin address in base58 encoding required bytes address = 2; // Target bitcoin address in base58 encoding
repeated uint32 address_n = 3; // Has higher priority than "address". If the output is to myself, specify parameter for address generation algorithm. repeated uint32 address_n = 3; // Has higher priority than "address". If the output is to myself, specify parameter for address generation algorithm.
required uint64 amount = 4; // Amount to send in satoshis required uint64 amount = 4; // Amount to send in satoshis
required ScriptType script_type = 5;// Select output script type required ScriptType script_type = 5; // Select output script type
repeated bytes script_args = 6 [(binary) = true]; // Provide additional parameters for the script (its script-depended) repeated bytes script_args = 6 [(binary) = true]; // Provide additional parameters for the script (its script-depended)
} }
// **************************************************************************** // ****************************************************************************
@ -354,7 +355,7 @@ message FirmwareErase {
} }
message FirmwareUpload { message FirmwareUpload {
required bytes payload = 1 [(binary) = true]; // Firmware to flash into device required bytes payload = 1 [(binary) = true]; // Firmware to flash into device
} }
// **************************************************************************** // ****************************************************************************
@ -367,7 +368,7 @@ message FirmwareUpload {
// //
// Response: Success // Response: Success
message DebugLinkDecision { message DebugLinkDecision {
required bool yes_no = 1; // True for "confirm", False for "cancel" required bool yes_no = 1; // True for "confirm", False for "cancel"
} }
// When sent over debug link connection, computer asks for some internal information of the device. // When sent over debug link connection, computer asks for some internal information of the device.
@ -383,10 +384,10 @@ message DebugLinkGetState {
// Response object reflecting device's current state. It can be received only over debug link connection. // Response object reflecting device's current state. It can be received only over debug link connection.
message DebugLinkState { message DebugLinkState {
optional bytes layout = 1 [(binary) = true]; // Raw buffer of display optional bytes layout = 1 [(binary) = true]; // Raw buffer of display
optional bytes pin = 2; // Current PIN, blank if PIN is not set/enabled optional bytes pin = 2; // Current PIN, blank if PIN is not set/enabled
optional bytes matrix = 3; // Current PIN matrix optional bytes matrix = 3; // Current PIN matrix
optional bytes seed = 4; // Current seed (in mnemonic format) optional bytes seed = 4; // Current seed (in mnemonic format)
// optional bytes state = 5 [(binary) = true]; // optional bytes state = 5 [(binary) = true];
} }