|
|
@ -1,5 +1,5 @@ |
|
|
|
// Copyright (c) 2011-2013 The Bitcoin Core developers
|
|
|
|
// Copyright (c) 2011-2014 The Bitcoin Core developers
|
|
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
|
|
|
|
#include "data/script_invalid.json.h" |
|
|
|
#include "data/script_invalid.json.h" |
|
|
@ -171,12 +171,14 @@ public: |
|
|
|
|
|
|
|
|
|
|
|
TestBuilder& Add(const CScript& script) |
|
|
|
TestBuilder& Add(const CScript& script) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
DoPush(); |
|
|
|
spendTx.vin[0].scriptSig += script; |
|
|
|
spendTx.vin[0].scriptSig += script; |
|
|
|
return *this; |
|
|
|
return *this; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TestBuilder& Num(int num) |
|
|
|
TestBuilder& Num(int num) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
DoPush(); |
|
|
|
spendTx.vin[0].scriptSig << CScriptNum(num); |
|
|
|
spendTx.vin[0].scriptSig << CScriptNum(num); |
|
|
|
return *this; |
|
|
|
return *this; |
|
|
|
} |
|
|
|
} |
|
|
@ -402,6 +404,23 @@ BOOST_AUTO_TEST_CASE(script_build) |
|
|
|
"3-of-3 NOT with invalid sig with nonzero dummy", SCRIPT_VERIFY_NULLDUMMY |
|
|
|
"3-of-3 NOT with invalid sig with nonzero dummy", SCRIPT_VERIFY_NULLDUMMY |
|
|
|
).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(keys.key2).DamagePush(10)); |
|
|
|
).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(keys.key2).DamagePush(10)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
good.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToByteVector(keys.pubkey1C) << OP_2 << OP_CHECKMULTISIG, |
|
|
|
|
|
|
|
"2-of-2 with two identical keys and sigs pushed using OP_DUP but no SIGPUSHONLY", 0 |
|
|
|
|
|
|
|
).Num(0).PushSig(keys.key1).Add(CScript() << OP_DUP)); |
|
|
|
|
|
|
|
bad.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToByteVector(keys.pubkey1C) << OP_2 << OP_CHECKMULTISIG, |
|
|
|
|
|
|
|
"2-of-2 with two identical keys and sigs pushed using OP_DUP", SCRIPT_VERIFY_SIGPUSHONLY |
|
|
|
|
|
|
|
).Num(0).PushSig(keys.key1).Add(CScript() << OP_DUP)); |
|
|
|
|
|
|
|
bad.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, |
|
|
|
|
|
|
|
"P2SH(P2PK) with non-push scriptSig but no SIGPUSHONLY", 0 |
|
|
|
|
|
|
|
).PushSig(keys.key2).PushRedeem()); |
|
|
|
|
|
|
|
bad.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, |
|
|
|
|
|
|
|
"P2SH(P2PK) with non-push scriptSig", SCRIPT_VERIFY_SIGPUSHONLY |
|
|
|
|
|
|
|
).PushSig(keys.key2).PushRedeem()); |
|
|
|
|
|
|
|
good.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToByteVector(keys.pubkey1C) << OP_2 << OP_CHECKMULTISIG, |
|
|
|
|
|
|
|
"2-of-2 with two identical keys and sigs pushed", SCRIPT_VERIFY_SIGPUSHONLY |
|
|
|
|
|
|
|
).Num(0).PushSig(keys.key1).PushSig(keys.key1)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::map<std::string, Array> tests_good; |
|
|
|
std::map<std::string, Array> tests_good; |
|
|
|
std::map<std::string, Array> tests_bad; |
|
|
|
std::map<std::string, Array> tests_bad; |
|
|
|
|
|
|
|
|
|
|
|