Skip to content

Commit 137a60c

Browse files
committed
set multisig_fp_mismatch when non-multisig input is encountered
1 parent 399d4d3 commit 137a60c

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

firmware/messages.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ enum {
281281
void msg_process(char type, uint16_t msg_id, const pb_field_t *fields, uint8_t *msg_raw, uint32_t msg_size)
282282
{
283283
static uint8_t msg_data[MSG_IN_SIZE];
284+
memset(msg_data, 0, sizeof(msg_data));
284285
pb_istream_t stream = pb_istream_from_buffer(msg_raw, msg_size);
285286
bool status = pb_decode(&stream, fields, msg_data);
286287
if (status) {

firmware/signing.c

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -279,26 +279,29 @@ void signing_txack(TransactionType *tx)
279279
case STAGE_REQUEST_1_INPUT:
280280
/* compute multisig fingerprint */
281281
/* (if all input share the same fingerprint, outputs having the same fingerprint will be considered as change outputs) */
282-
if (tx->inputs[0].script_type == InputScriptType_SPENDMULTISIG &&
283-
tx->inputs[0].has_multisig && !multisig_fp_mismatch) {
284-
if (multisig_fp_set) {
285-
uint8_t h[32];
286-
if (cryptoMultisigFingerprint(&(tx->inputs[0].multisig), h) == 0) {
287-
fsm_sendFailure(FailureType_Failure_Other, "Error computing multisig fingeprint");
288-
signing_abort();
289-
return;
290-
}
291-
if (memcmp(multisig_fp, h, 32) != 0) {
292-
multisig_fp_mismatch = true;
293-
}
294-
} else {
295-
if (cryptoMultisigFingerprint(&(tx->inputs[0].multisig), multisig_fp) == 0) {
296-
fsm_sendFailure(FailureType_Failure_Other, "Error computing multisig fingeprint");
297-
signing_abort();
298-
return;
282+
if (tx->inputs[0].script_type == InputScriptType_SPENDMULTISIG) {
283+
if (tx->inputs[0].has_multisig && !multisig_fp_mismatch) {
284+
if (multisig_fp_set) {
285+
uint8_t h[32];
286+
if (cryptoMultisigFingerprint(&(tx->inputs[0].multisig), h) == 0) {
287+
fsm_sendFailure(FailureType_Failure_Other, "Error computing multisig fingeprint");
288+
signing_abort();
289+
return;
290+
}
291+
if (memcmp(multisig_fp, h, 32) != 0) {
292+
multisig_fp_mismatch = true;
293+
}
294+
} else {
295+
if (cryptoMultisigFingerprint(&(tx->inputs[0].multisig), multisig_fp) == 0) {
296+
fsm_sendFailure(FailureType_Failure_Other, "Error computing multisig fingeprint");
297+
signing_abort();
298+
return;
299+
}
300+
multisig_fp_set = true;
299301
}
300-
multisig_fp_set = true;
301302
}
303+
} else { // InputScriptType_SPENDADDRESS
304+
multisig_fp_mismatch = true;
302305
}
303306
sha256_Update(&tc, (const uint8_t *)tx->inputs, sizeof(TxInputType));
304307
memcpy(&input, tx->inputs, sizeof(TxInputType));

0 commit comments

Comments
 (0)