From ad6fc7b5a76bfa2dc5667282e8831fb29de342f9 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Fri, 20 Feb 2015 19:01:45 +0100 Subject: [PATCH] update protobuf --- firmware/protob/messages.options | 7 ++++ firmware/protob/messages.pb.c | 16 ++++++++- firmware/protob/messages.pb.h | 59 +++++++++++++++++++++++++++++--- firmware/protob/types.options | 6 ++++ firmware/protob/types.pb.c | 13 ++++++- firmware/protob/types.pb.h | 26 ++++++++++++++ trezor-common | 2 +- 7 files changed, 121 insertions(+), 8 deletions(-) diff --git a/firmware/protob/messages.options b/firmware/protob/messages.options index 64a5431..cc66922 100644 --- a/firmware/protob/messages.options +++ b/firmware/protob/messages.options @@ -86,6 +86,13 @@ EstimateTxSize.coin_name max_size:17 SignTx.coin_name max_size:17 +SignIdentity.challenge_hidden max_size:64 +SignIdentity.challenge_visual max_size:64 + +SignedIdentity.address max_size:36 +SignedIdentity.public_key max_size:33 +SignedIdentity.signature max_size:65 + # not used in firmware SimpleSignTx.inputs max_count:0 SimpleSignTx.outputs max_count:0 diff --git a/firmware/protob/messages.pb.c b/firmware/protob/messages.pb.c index 874ebd0..3e4e41b 100644 --- a/firmware/protob/messages.pb.c +++ b/firmware/protob/messages.pb.c @@ -298,6 +298,20 @@ const pb_field_t TxAck_fields[2] = { PB_LAST_FIELD }; +const pb_field_t SignIdentity_fields[4] = { + PB_FIELD2( 1, MESSAGE , OPTIONAL, STATIC , FIRST, SignIdentity, identity, identity, &IdentityType_fields), + PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, SignIdentity, challenge_hidden, identity, 0), + PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, SignIdentity, challenge_visual, challenge_hidden, 0), + PB_LAST_FIELD +}; + +const pb_field_t SignedIdentity_fields[4] = { + PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, SignedIdentity, address, address, 0), + PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, SignedIdentity, public_key, address, 0), + PB_FIELD2( 3, BYTES , OPTIONAL, STATIC , OTHER, SignedIdentity, signature, public_key, 0), + PB_LAST_FIELD +}; + const pb_field_t FirmwareErase_fields[1] = { PB_LAST_FIELD }; @@ -351,7 +365,7 @@ const pb_field_t DebugLinkLog_fields[4] = { * numbers or field sizes that are larger than what can fit in 8 or 16 bit * field descriptors. */ -STATIC_ASSERT((pb_membersize(Features, coins[0]) < 65536 && pb_membersize(PublicKey, node) < 65536 && pb_membersize(GetAddress, multisig) < 65536 && pb_membersize(LoadDevice, node) < 65536 && pb_membersize(SimpleSignTx, inputs[0]) < 65536 && pb_membersize(SimpleSignTx, outputs[0]) < 65536 && pb_membersize(SimpleSignTx, transactions[0]) < 65536 && pb_membersize(TxRequest, details) < 65536 && pb_membersize(TxRequest, serialized) < 65536 && pb_membersize(TxAck, tx) < 65536 && pb_membersize(DebugLinkState, node) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_Initialize_Features_ClearSession_ApplySettings_ChangePin_Ping_Success_Failure_ButtonRequest_ButtonAck_PinMatrixRequest_PinMatrixAck_Cancel_PassphraseRequest_PassphraseAck_GetEntropy_Entropy_GetPublicKey_PublicKey_GetAddress_Address_WipeDevice_LoadDevice_ResetDevice_EntropyRequest_EntropyAck_RecoveryDevice_WordRequest_WordAck_SignMessage_VerifyMessage_MessageSignature_EncryptMessage_EncryptedMessage_DecryptMessage_DecryptedMessage_CipherKeyValue_CipheredKeyValue_EstimateTxSize_TxSize_SignTx_SimpleSignTx_TxRequest_TxAck_FirmwareErase_FirmwareUpload_DebugLinkDecision_DebugLinkGetState_DebugLinkState_DebugLinkStop_DebugLinkLog) +STATIC_ASSERT((pb_membersize(Features, coins[0]) < 65536 && pb_membersize(PublicKey, node) < 65536 && pb_membersize(GetAddress, multisig) < 65536 && pb_membersize(LoadDevice, node) < 65536 && pb_membersize(SimpleSignTx, inputs[0]) < 65536 && pb_membersize(SimpleSignTx, outputs[0]) < 65536 && pb_membersize(SimpleSignTx, transactions[0]) < 65536 && pb_membersize(TxRequest, details) < 65536 && pb_membersize(TxRequest, serialized) < 65536 && pb_membersize(TxAck, tx) < 65536 && pb_membersize(SignIdentity, identity) < 65536 && pb_membersize(DebugLinkState, node) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_Initialize_Features_ClearSession_ApplySettings_ChangePin_Ping_Success_Failure_ButtonRequest_ButtonAck_PinMatrixRequest_PinMatrixAck_Cancel_PassphraseRequest_PassphraseAck_GetEntropy_Entropy_GetPublicKey_PublicKey_GetAddress_Address_WipeDevice_LoadDevice_ResetDevice_EntropyRequest_EntropyAck_RecoveryDevice_WordRequest_WordAck_SignMessage_VerifyMessage_MessageSignature_EncryptMessage_EncryptedMessage_DecryptMessage_DecryptedMessage_CipherKeyValue_CipheredKeyValue_EstimateTxSize_TxSize_SignTx_SimpleSignTx_TxRequest_TxAck_SignIdentity_SignedIdentity_FirmwareErase_FirmwareUpload_DebugLinkDecision_DebugLinkGetState_DebugLinkState_DebugLinkStop_DebugLinkLog) #endif #if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) diff --git a/firmware/protob/messages.pb.h b/firmware/protob/messages.pb.h index cec27de..50b2fd8 100644 --- a/firmware/protob/messages.pb.h +++ b/firmware/protob/messages.pb.h @@ -35,7 +35,6 @@ typedef enum _MessageType { MessageType_MessageType_TxRequest = 21, MessageType_MessageType_TxAck = 22, MessageType_MessageType_CipherKeyValue = 23, - MessageType_MessageType_CipheredKeyValue = 48, MessageType_MessageType_ClearSession = 24, MessageType_MessageType_ApplySettings = 25, MessageType_MessageType_ButtonRequest = 26, @@ -47,10 +46,6 @@ typedef enum _MessageType { MessageType_MessageType_SignMessage = 38, MessageType_MessageType_VerifyMessage = 39, MessageType_MessageType_MessageSignature = 40, - MessageType_MessageType_EncryptMessage = 49, - MessageType_MessageType_EncryptedMessage = 50, - MessageType_MessageType_DecryptMessage = 51, - MessageType_MessageType_DecryptedMessage = 52, MessageType_MessageType_PassphraseRequest = 41, MessageType_MessageType_PassphraseAck = 42, MessageType_MessageType_EstimateTxSize = 43, @@ -58,6 +53,13 @@ typedef enum _MessageType { MessageType_MessageType_RecoveryDevice = 45, MessageType_MessageType_WordRequest = 46, MessageType_MessageType_WordAck = 47, + MessageType_MessageType_CipheredKeyValue = 48, + MessageType_MessageType_EncryptMessage = 49, + MessageType_MessageType_EncryptedMessage = 50, + MessageType_MessageType_DecryptMessage = 51, + MessageType_MessageType_DecryptedMessage = 52, + MessageType_MessageType_SignIdentity = 53, + MessageType_MessageType_SignedIdentity = 54, MessageType_MessageType_DebugLinkDecision = 100, MessageType_MessageType_DebugLinkGetState = 101, MessageType_MessageType_DebugLinkState = 102, @@ -497,6 +499,20 @@ typedef struct _ResetDevice { char label[33]; } ResetDevice; +typedef struct { + size_t size; + uint8_t bytes[64]; +} SignIdentity_challenge_hidden_t; + +typedef struct _SignIdentity { + bool has_identity; + IdentityType identity; + bool has_challenge_hidden; + SignIdentity_challenge_hidden_t challenge_hidden; + bool has_challenge_visual; + char challenge_visual[64]; +} SignIdentity; + typedef struct { size_t size; uint8_t bytes[1024]; @@ -517,6 +533,25 @@ typedef struct _SignTx { char coin_name[17]; } SignTx; +typedef struct { + size_t size; + uint8_t bytes[33]; +} SignedIdentity_public_key_t; + +typedef struct { + size_t size; + uint8_t bytes[65]; +} SignedIdentity_signature_t; + +typedef struct _SignedIdentity { + bool has_address; + char address[36]; + bool has_public_key; + SignedIdentity_public_key_t public_key; + bool has_signature; + SignedIdentity_signature_t signature; +} SignedIdentity; + typedef struct _SimpleSignTx { size_t inputs_count; TxInputType inputs[0]; @@ -632,6 +667,8 @@ extern const char SimpleSignTx_coin_name_default[17]; #define SimpleSignTx_init_default {0, {}, 0, {}, 0, {}, false, "Bitcoin"} #define TxRequest_init_default {false, (RequestType)0, false, TxRequestDetailsType_init_default, false, TxRequestSerializedType_init_default} #define TxAck_init_default {false, TransactionType_init_default} +#define SignIdentity_init_default {false, IdentityType_init_default, false, {0, {0}}, false, ""} +#define SignedIdentity_init_default {false, "", false, {0, {0}}, false, {0, {0}}} #define FirmwareErase_init_default {0} #define FirmwareUpload_init_default {{0, {0}}} #define DebugLinkDecision_init_default {0} @@ -683,6 +720,8 @@ extern const char SimpleSignTx_coin_name_default[17]; #define SimpleSignTx_init_zero {0, {}, 0, {}, 0, {}, false, ""} #define TxRequest_init_zero {false, (RequestType)0, false, TxRequestDetailsType_init_zero, false, TxRequestSerializedType_init_zero} #define TxAck_init_zero {false, TransactionType_init_zero} +#define SignIdentity_init_zero {false, IdentityType_init_zero, false, {0, {0}}, false, ""} +#define SignedIdentity_init_zero {false, "", false, {0, {0}}, false, {0, {0}}} #define FirmwareErase_init_zero {0} #define FirmwareUpload_init_zero {{0, {0}}} #define DebugLinkDecision_init_zero {0} @@ -794,12 +833,18 @@ extern const char SimpleSignTx_coin_name_default[17]; #define ResetDevice_pin_protection_tag 4 #define ResetDevice_language_tag 5 #define ResetDevice_label_tag 6 +#define SignIdentity_identity_tag 1 +#define SignIdentity_challenge_hidden_tag 2 +#define SignIdentity_challenge_visual_tag 3 #define SignMessage_address_n_tag 1 #define SignMessage_message_tag 2 #define SignMessage_coin_name_tag 3 #define SignTx_outputs_count_tag 1 #define SignTx_inputs_count_tag 2 #define SignTx_coin_name_tag 3 +#define SignedIdentity_address_tag 1 +#define SignedIdentity_public_key_tag 2 +#define SignedIdentity_signature_tag 3 #define SimpleSignTx_inputs_tag 1 #define SimpleSignTx_outputs_tag 2 #define SimpleSignTx_transactions_tag 3 @@ -860,6 +905,8 @@ extern const pb_field_t SignTx_fields[4]; extern const pb_field_t SimpleSignTx_fields[5]; extern const pb_field_t TxRequest_fields[4]; extern const pb_field_t TxAck_fields[2]; +extern const pb_field_t SignIdentity_fields[4]; +extern const pb_field_t SignedIdentity_fields[4]; extern const pb_field_t FirmwareErase_fields[1]; extern const pb_field_t FirmwareUpload_fields[2]; extern const pb_field_t DebugLinkDecision_fields[2]; @@ -913,6 +960,8 @@ extern const pb_field_t DebugLinkLog_fields[4]; #define SimpleSignTx_size (19 + 0*TxInputType_size + 0*TxOutputType_size + 0*TransactionType_size) #define TxRequest_size (18 + TxRequestDetailsType_size + TxRequestSerializedType_size) #define TxAck_size (6 + TransactionType_size) +#define SignIdentity_size (138 + IdentityType_size) +#define SignedIdentity_size 140 #define FirmwareErase_size 0 #define FirmwareUpload_size 2 #define DebugLinkDecision_size 2 diff --git a/firmware/protob/types.options b/firmware/protob/types.options index c1a4c53..9fa6c9d 100644 --- a/firmware/protob/types.options +++ b/firmware/protob/types.options @@ -28,3 +28,9 @@ TxRequestSerializedType.serialized_tx max_size:2048 MultisigRedeemScriptType.pubkeys max_count:15 MultisigRedeemScriptType.signatures max_count:15 max_size:73 + +IdentityType.proto max_size:9 +IdentityType.user max_size:64 +IdentityType.host max_size:64 +IdentityType.port max_size:6 +IdentityType.path max_size:256 diff --git a/firmware/protob/types.pb.c b/firmware/protob/types.pb.c index 8dca6cf..c45448f 100644 --- a/firmware/protob/types.pb.c +++ b/firmware/protob/types.pb.c @@ -7,6 +7,7 @@ const uint32_t CoinType_address_type_default = 0u; const uint32_t CoinType_address_type_p2sh_default = 5u; const uint32_t TxInputType_sequence_default = 4294967295u; const InputScriptType TxInputType_script_type_default = InputScriptType_SPENDADDRESS; +const uint32_t IdentityType_index_default = 0u; const pb_field_t HDNodeType_fields[7] = { @@ -92,6 +93,16 @@ const pb_field_t TxRequestSerializedType_fields[4] = { PB_LAST_FIELD }; +const pb_field_t IdentityType_fields[7] = { + PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, IdentityType, proto, proto, 0), + PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, IdentityType, user, proto, 0), + PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, IdentityType, host, user, 0), + PB_FIELD2( 4, STRING , OPTIONAL, STATIC , OTHER, IdentityType, port, host, 0), + PB_FIELD2( 5, STRING , OPTIONAL, STATIC , OTHER, IdentityType, path, port, 0), + PB_FIELD2( 6, UINT32 , OPTIONAL, STATIC , OTHER, IdentityType, index, path, &IdentityType_index_default), + PB_LAST_FIELD +}; + typedef struct { bool wire_in; } wire_in_struct; @@ -154,7 +165,7 @@ const pb_extension_type_t wire_debug_out = { * numbers or field sizes that are larger than what can fit in 8 or 16 bit * field descriptors. */ -STATIC_ASSERT((pb_membersize(HDNodePathType, node) < 65536 && pb_membersize(MultisigRedeemScriptType, pubkeys[0]) < 65536 && pb_membersize(TxInputType, multisig) < 65536 && pb_membersize(TxOutputType, multisig) < 65536 && pb_membersize(TransactionType, inputs[0]) < 65536 && pb_membersize(TransactionType, bin_outputs[0]) < 65536 && pb_membersize(TransactionType, outputs[0]) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_HDNodeType_HDNodePathType_CoinType_MultisigRedeemScriptType_TxInputType_TxOutputType_TxOutputBinType_TransactionType_TxRequestDetailsType_TxRequestSerializedType) +STATIC_ASSERT((pb_membersize(HDNodePathType, node) < 65536 && pb_membersize(MultisigRedeemScriptType, pubkeys[0]) < 65536 && pb_membersize(TxInputType, multisig) < 65536 && pb_membersize(TxOutputType, multisig) < 65536 && pb_membersize(TransactionType, inputs[0]) < 65536 && pb_membersize(TransactionType, bin_outputs[0]) < 65536 && pb_membersize(TransactionType, outputs[0]) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_HDNodeType_HDNodePathType_CoinType_MultisigRedeemScriptType_TxInputType_TxOutputType_TxOutputBinType_TransactionType_TxRequestDetailsType_TxRequestSerializedType_IdentityType) #endif #if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) diff --git a/firmware/protob/types.pb.h b/firmware/protob/types.pb.h index 177df7b..f31812d 100644 --- a/firmware/protob/types.pb.h +++ b/firmware/protob/types.pb.h @@ -102,6 +102,21 @@ typedef struct _HDNodeType { HDNodeType_public_key_t public_key; } HDNodeType; +typedef struct _IdentityType { + bool has_proto; + char proto[9]; + bool has_user; + char user[64]; + bool has_host; + char host[64]; + bool has_port; + char port[6]; + bool has_path; + char path[256]; + bool has_index; + uint32_t index; +} IdentityType; + typedef struct { size_t size; uint8_t bytes[520]; @@ -234,6 +249,7 @@ extern const uint32_t CoinType_address_type_default; extern const uint32_t CoinType_address_type_p2sh_default; extern const uint32_t TxInputType_sequence_default; extern const InputScriptType TxInputType_script_type_default; +extern const uint32_t IdentityType_index_default; /* Initializer values for message structs */ #define HDNodeType_init_default {0, 0, 0, {0, {0}}, false, {0, {0}}, false, {0, {0}}} @@ -246,6 +262,7 @@ extern const InputScriptType TxInputType_script_type_default; #define TransactionType_init_default {false, 0, 0, {TxInputType_init_default}, 0, {TxOutputBinType_init_default}, false, 0, 0, {TxOutputType_init_default}, false, 0, false, 0} #define TxRequestDetailsType_init_default {false, 0, false, {0, {0}}} #define TxRequestSerializedType_init_default {false, 0, false, {0, {0}}, false, {0, {0}}} +#define IdentityType_init_default {false, "", false, "", false, "", false, "", false, "", false, 0u} #define HDNodeType_init_zero {0, 0, 0, {0, {0}}, false, {0, {0}}, false, {0, {0}}} #define HDNodePathType_init_zero {HDNodeType_init_zero, 0, {0, 0, 0, 0, 0, 0, 0, 0}} #define CoinType_init_zero {false, "", false, "", false, 0, false, 0, false, 0} @@ -256,6 +273,7 @@ extern const InputScriptType TxInputType_script_type_default; #define TransactionType_init_zero {false, 0, 0, {TxInputType_init_zero}, 0, {TxOutputBinType_init_zero}, false, 0, 0, {TxOutputType_init_zero}, false, 0, false, 0} #define TxRequestDetailsType_init_zero {false, 0, false, {0, {0}}} #define TxRequestSerializedType_init_zero {false, 0, false, {0, {0}}, false, {0, {0}}} +#define IdentityType_init_zero {false, "", false, "", false, "", false, "", false, "", false, 0} /* Field tags (for use in manual encoding/decoding) */ #define CoinType_coin_name_tag 1 @@ -269,6 +287,12 @@ extern const InputScriptType TxInputType_script_type_default; #define HDNodeType_chain_code_tag 4 #define HDNodeType_private_key_tag 5 #define HDNodeType_public_key_tag 6 +#define IdentityType_proto_tag 1 +#define IdentityType_user_tag 2 +#define IdentityType_host_tag 3 +#define IdentityType_port_tag 4 +#define IdentityType_path_tag 5 +#define IdentityType_index_tag 6 #define TxOutputBinType_amount_tag 1 #define TxOutputBinType_script_pubkey_tag 2 #define TxRequestDetailsType_request_index_tag 1 @@ -317,6 +341,7 @@ extern const pb_field_t TxOutputBinType_fields[3]; extern const pb_field_t TransactionType_fields[8]; extern const pb_field_t TxRequestDetailsType_fields[3]; extern const pb_field_t TxRequestSerializedType_fields[4]; +extern const pb_field_t IdentityType_fields[7]; /* Maximum encoded size of messages (where known) */ #define HDNodeType_size 121 @@ -329,6 +354,7 @@ extern const pb_field_t TxRequestSerializedType_fields[4]; #define TransactionType_size 9993 #define TxRequestDetailsType_size 40 #define TxRequestSerializedType_size 2132 +#define IdentityType_size 416 #ifdef __cplusplus } /* extern "C" */ diff --git a/trezor-common b/trezor-common index 201b66a..69d476a 160000 --- a/trezor-common +++ b/trezor-common @@ -1 +1 @@ -Subproject commit 201b66a559567031f74621615884946c8bf1e837 +Subproject commit 69d476a3ba10c40209dd26789876b265cf03f384