From 8abfd0ae5df18eb8268fd5de44c1ed665d3a99f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Vejpustek?= Date: Wed, 13 Nov 2024 15:06:22 +0100 Subject: [PATCH] feat(legacy): do not support sortedmulti on legacy [no changelog] --- legacy/firmware/transaction.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/legacy/firmware/transaction.c b/legacy/firmware/transaction.c index a259d74cc7..8659dbf4b9 100644 --- a/legacy/firmware/transaction.c +++ b/legacy/firmware/transaction.c @@ -25,6 +25,8 @@ #include "crypto.h" #include "debug.h" #include "ecdsa.h" +#include "fsm.h" +#include "gettext.h" #include "layout2.h" #include "memzero.h" #include "messages.pb.h" @@ -362,6 +364,11 @@ uint32_t compile_script_sig(uint32_t address_type, const uint8_t *pubkeyhash, uint32_t compile_script_multisig(const CoinInfo *coin, const MultisigRedeemScriptType *multisig, uint8_t *out) { + if (multisig->pubkeys_order != MultisigPubkeysOrder_PRESERVED) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Sortedmulti is not supported")); + return 0; + } const uint32_t m = multisig->m; const uint32_t n = cryptoMultisigPubkeyCount(multisig); if (m < 1 || m > 15) return 0; @@ -391,6 +398,12 @@ uint32_t compile_script_multisig(const CoinInfo *coin, uint32_t compile_script_multisig_hash(const CoinInfo *coin, const MultisigRedeemScriptType *multisig, uint8_t *hash) { + if (multisig->pubkeys_order != MultisigPubkeysOrder_PRESERVED) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Sortedmulti is not supported")); + return 0; + } + const uint32_t m = multisig->m; const uint32_t n = cryptoMultisigPubkeyCount(multisig); if (m < 1 || m > 15) return 0; @@ -436,6 +449,11 @@ uint32_t serialize_script_sig(const uint8_t *signature, uint32_t signature_len, uint32_t serialize_script_multisig(const CoinInfo *coin, const MultisigRedeemScriptType *multisig, uint8_t sighash, uint8_t *out) { + if (multisig->pubkeys_order != MultisigPubkeysOrder_PRESERVED) { + fsm_sendFailure(FailureType_Failure_DataError, + _("Sortedmulti is not supported")); + return 0; + } uint32_t r = 0; #if !BITCOIN_ONLY if (!coin->decred) {