diff --git a/firmware/fsm.c b/firmware/fsm.c index 59a9bdb4e..d86134ca8 100644 --- a/firmware/fsm.c +++ b/firmware/fsm.c @@ -606,7 +606,7 @@ void fsm_msgEncryptMessage(EncryptMessage *msg) return; } curve_point pubkey; - if ((msg->pubkey.size != 33 && msg->pubkey.size != 65) || ecdsa_read_pubkey(msg->pubkey.bytes, &pubkey) == 0) { + if (msg->pubkey.size != 33 || ecdsa_read_pubkey(msg->pubkey.bytes, &pubkey) == 0) { fsm_sendFailure(FailureType_Failure_SyntaxError, "Invalid public key provided"); return; } diff --git a/firmware/protob/messages.options b/firmware/protob/messages.options index 25df542fd..542ff906f 100644 --- a/firmware/protob/messages.options +++ b/firmware/protob/messages.options @@ -58,7 +58,7 @@ VerifyMessage.message max_size:1024 MessageSignature.address max_size:35 MessageSignature.signature max_size:65 -EncryptMessage.pubkey max_size:65 +EncryptMessage.pubkey max_size:33 EncryptMessage.message max_size:1024 EncryptMessage.address_n max_count:8 EncryptMessage.coin_name max_size:17 diff --git a/firmware/protob/messages.pb.h b/firmware/protob/messages.pb.h index ef6a02fa7..c9ad776c8 100644 --- a/firmware/protob/messages.pb.h +++ b/firmware/protob/messages.pb.h @@ -227,7 +227,7 @@ typedef struct _DecryptedMessage { char address[35]; } DecryptedMessage; -typedef PB_BYTES_ARRAY_T(65) EncryptMessage_pubkey_t; +typedef PB_BYTES_ARRAY_T(33) EncryptMessage_pubkey_t; typedef PB_BYTES_ARRAY_T(1024) EncryptMessage_message_t; @@ -828,7 +828,7 @@ extern const pb_field_t DebugLinkLog_fields[4]; #define SignMessage_size 1094 #define VerifyMessage_size 1131 #define MessageSignature_size 104 -#define EncryptMessage_size 1163 +#define EncryptMessage_size 1131 #define EncryptedMessage_size 1168 #define DecryptMessage_size 1216 #define DecryptedMessage_size 1064 diff --git a/firmware/protob/types.options b/firmware/protob/types.options index 747eb75a3..8832018ba 100644 --- a/firmware/protob/types.options +++ b/firmware/protob/types.options @@ -7,7 +7,7 @@ CoinType.coin_shortcut max_size:9 TxInputType.address_n max_count:8 TxInputType.prev_hash max_size:32 -TxInputType.script_sig max_size:520 +TxInputType.script_sig max_size:1650 TxOutputType.address max_size:35 TxOutputType.address_n max_count:8 @@ -20,8 +20,8 @@ TransactionType.outputs max_count:1 TxRequestDetailsType.tx_hash max_size:32 -TxRequestSerializedType.signature max_size:80 -TxRequestSerializedType.serialized_tx max_size:1024 +TxRequestSerializedType.signature max_size:73 +TxRequestSerializedType.serialized_tx max_size:2048 -MultisigRedeemScriptType.pubkeys max_count:5 max_size:65 -MultisigRedeemScriptType.signatures max_count:4 max_size:80 +MultisigRedeemScriptType.pubkeys max_count:15 max_size:33 +MultisigRedeemScriptType.signatures max_count:15 max_size:73 diff --git a/firmware/protob/types.pb.h b/firmware/protob/types.pb.h index 11df556d6..d8c4ffbcc 100644 --- a/firmware/protob/types.pb.h +++ b/firmware/protob/types.pb.h @@ -93,15 +93,15 @@ typedef struct _HDNodeType { HDNodeType_public_key_t public_key; } HDNodeType; -typedef PB_BYTES_ARRAY_T(65) MultisigRedeemScriptType_pubkeys_t; +typedef PB_BYTES_ARRAY_T(33) MultisigRedeemScriptType_pubkeys_t; -typedef PB_BYTES_ARRAY_T(80) MultisigRedeemScriptType_signatures_t; +typedef PB_BYTES_ARRAY_T(73) MultisigRedeemScriptType_signatures_t; typedef struct _MultisigRedeemScriptType { pb_size_t pubkeys_count; - MultisigRedeemScriptType_pubkeys_t pubkeys[5]; + MultisigRedeemScriptType_pubkeys_t pubkeys[15]; pb_size_t signatures_count; - MultisigRedeemScriptType_signatures_t signatures[4]; + MultisigRedeemScriptType_signatures_t signatures[15]; bool has_m; uint32_t m; } MultisigRedeemScriptType; @@ -131,9 +131,9 @@ typedef struct _TxRequestDetailsType { TxRequestDetailsType_tx_hash_t tx_hash; } TxRequestDetailsType; -typedef PB_BYTES_ARRAY_T(80) TxRequestSerializedType_signature_t; +typedef PB_BYTES_ARRAY_T(73) TxRequestSerializedType_signature_t; -typedef PB_BYTES_ARRAY_T(1024) TxRequestSerializedType_serialized_tx_t; +typedef PB_BYTES_ARRAY_T(2048) TxRequestSerializedType_serialized_tx_t; typedef struct _TxRequestSerializedType { bool has_signature_index; @@ -146,7 +146,7 @@ typedef struct _TxRequestSerializedType { typedef PB_BYTES_ARRAY_T(32) TxInputType_prev_hash_t; -typedef PB_BYTES_ARRAY_T(520) TxInputType_script_sig_t; +typedef PB_BYTES_ARRAY_T(1650) TxInputType_script_sig_t; typedef struct _TxInputType { pb_size_t address_n_count; @@ -193,7 +193,7 @@ extern const InputScriptType TxInputType_script_type_default; /* Initializer values for message structs */ #define HDNodeType_init_default {0, 0, 0, {0, {0}}, false, {0, {0}}, false, {0, {0}}} #define CoinType_init_default {false, "", false, "", false, 0, false, 0} -#define MultisigRedeemScriptType_init_default {0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, false, 0} +#define MultisigRedeemScriptType_init_default {0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, false, 0} #define TxInputType_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, {0}}, 0, false, {0, {0}}, false, 4294967295u, false, InputScriptType_SPENDADDRESS, false, MultisigRedeemScriptType_init_default} #define TxOutputType_init_default {false, "", 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, (OutputScriptType)0} #define TxOutputBinType_init_default {0, {0, {0}}} @@ -202,7 +202,7 @@ extern const InputScriptType TxInputType_script_type_default; #define TxRequestSerializedType_init_default {false, 0, false, {0, {0}}, false, {0, {0}}} #define HDNodeType_init_zero {0, 0, 0, {0, {0}}, false, {0, {0}}, false, {0, {0}}} #define CoinType_init_zero {false, "", false, "", false, 0, false, 0} -#define MultisigRedeemScriptType_init_zero {0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, false, 0} +#define MultisigRedeemScriptType_init_zero {0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, false, 0} #define TxInputType_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, {0}}, 0, false, {0, {0}}, false, 0, false, (InputScriptType)0, false, MultisigRedeemScriptType_init_zero} #define TxOutputType_init_zero {false, "", 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, (OutputScriptType)0} #define TxOutputBinType_init_zero {0, {0, {0}}} @@ -268,13 +268,13 @@ extern const pb_field_t TxRequestSerializedType_fields[4]; /* Maximum encoded size of messages (where known) */ #define HDNodeType_size 121 #define CoinType_size 47 -#define MultisigRedeemScriptType_size 669 -#define TxInputType_size 1295 +#define MultisigRedeemScriptType_size 1656 +#define TxInputType_size 3412 #define TxOutputType_size 102 #define TxOutputBinType_size 534 -#define TransactionType_size 1963 +#define TransactionType_size 4080 #define TxRequestDetailsType_size 40 -#define TxRequestSerializedType_size 1115 +#define TxRequestSerializedType_size 2132 #ifdef __cplusplus } /* extern "C" */ diff --git a/firmware/transaction.c b/firmware/transaction.c index 34c730e7d..63be253ce 100644 --- a/firmware/transaction.c +++ b/firmware/transaction.c @@ -136,8 +136,8 @@ uint32_t compile_script_multisig(const MultisigRedeemScriptType *multisig, uint8 if (!multisig->has_m) return 0; uint32_t m = multisig->m; uint32_t n = multisig->pubkeys_count; - if (m < 2 || m > 3) return 0; - if (n < 2 || n > 3) return 0; + if (m < 1 || m > 15) return 0; + if (n < 1 || n > 15) return 0; uint32_t i, r = 0; if (out) { out[r] = 0x50 + m; r++; @@ -165,8 +165,8 @@ uint32_t compile_script_multisig_hash(const MultisigRedeemScriptType *multisig, if (!multisig->has_m) return 0; uint32_t m = multisig->m; uint32_t n = multisig->pubkeys_count; - if (m < 2 || m > 3) return 0; - if (n < 2 || n > 3) return 0; + if (m < 1 || m > 15) return 0; + if (n < 1 || n > 15) return 0; SHA256_CTX ctx; sha256_Init(&ctx);