diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -309,11 +309,11 @@ return *this; } - TestBuilder &PushSig(const CKey &key, int nHashType = SIGHASH_ALL, + TestBuilder &PushSig(const CKey &key, + SigHashType sigHashType = SigHashType(), unsigned int lenR = 32, unsigned int lenS = 32, Amount amount = Amount(0)) { - uint256 hash = - SignatureHash(script, spendTx, 0, SigHashType(nHashType), amount); + uint256 hash = SignatureHash(script, spendTx, 0, sigHashType, amount); std::vector vchSig, r, s; uint32_t iter = 0; do { @@ -329,7 +329,7 @@ vchSig[5 + vchSig[3]]); } while (lenR != r.size() || lenS != s.size()); - vchSig.push_back(static_cast(nHashType)); + vchSig.push_back(static_cast(sigHashType.getRawSigHashType())); DoPush(vchSig); return *this; } @@ -446,11 +446,11 @@ tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, "P2PK anyonecanpay", 0) - .PushSig(keys.key1, SIGHASH_ALL | SIGHASH_ANYONECANPAY)); + .PushSig(keys.key1, SigHashType().withAnyoneCanPay(true))); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, "P2PK anyonecanpay marked with normal hashtype", 0) - .PushSig(keys.key1, SIGHASH_ALL | SIGHASH_ANYONECANPAY) + .PushSig(keys.key1, SigHashType().withAnyoneCanPay(true)) .EditPush(70, "81", "01") .ScriptError(SCRIPT_ERR_EVAL_FALSE)); @@ -535,50 +535,50 @@ tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, "P2PK with too much R padding but no DERSIG", 0) - .PushSig(keys.key1, SIGHASH_ALL, 31, 32) + .PushSig(keys.key1, SigHashType(), 31, 32) .EditPush(1, "43021F", "44022000")); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, "P2PK with too much R padding", SCRIPT_VERIFY_DERSIG) - .PushSig(keys.key1, SIGHASH_ALL, 31, 32) + .PushSig(keys.key1, SigHashType(), 31, 32) .EditPush(1, "43021F", "44022000") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, "P2PK with too much S padding but no DERSIG", 0) - .PushSig(keys.key1, SIGHASH_ALL) + .PushSig(keys.key1) .EditPush(1, "44", "45") .EditPush(37, "20", "2100")); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, "P2PK with too much S padding", SCRIPT_VERIFY_DERSIG) - .PushSig(keys.key1, SIGHASH_ALL) + .PushSig(keys.key1) .EditPush(1, "44", "45") .EditPush(37, "20", "2100") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, "P2PK with too little R padding but no DERSIG", 0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220")); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, "P2PK with too little R padding", SCRIPT_VERIFY_DERSIG) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back( TestBuilder( CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG << OP_NOT, "P2PK NOT with bad sig with too much R padding but no DERSIG", 0) - .PushSig(keys.key2, SIGHASH_ALL, 31, 32) + .PushSig(keys.key2, SigHashType(), 31, 32) .EditPush(1, "43021F", "44022000") .DamagePush(10)); tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG << OP_NOT, "P2PK NOT with bad sig with too much R padding", SCRIPT_VERIFY_DERSIG) - .PushSig(keys.key2, SIGHASH_ALL, 31, 32) + .PushSig(keys.key2, SigHashType(), 31, 32) .EditPush(1, "43021F", "44022000") .DamagePush(10) .ScriptError(SCRIPT_ERR_SIG_DER)); @@ -586,39 +586,39 @@ TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG << OP_NOT, "P2PK NOT with too much R padding but no DERSIG", 0) - .PushSig(keys.key2, SIGHASH_ALL, 31, 32) + .PushSig(keys.key2, SigHashType(), 31, 32) .EditPush(1, "43021F", "44022000") .ScriptError(SCRIPT_ERR_EVAL_FALSE)); tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG << OP_NOT, "P2PK NOT with too much R padding", SCRIPT_VERIFY_DERSIG) - .PushSig(keys.key2, SIGHASH_ALL, 31, 32) + .PushSig(keys.key2, SigHashType(), 31, 32) .EditPush(1, "43021F", "44022000") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, "BIP66 example 1, without DERSIG", 0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220")); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, "BIP66 example 1, with DERSIG", SCRIPT_VERIFY_DERSIG) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG << OP_NOT, "BIP66 example 2, without DERSIG", 0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .ScriptError(SCRIPT_ERR_EVAL_FALSE)); tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG << OP_NOT, "BIP66 example 2, with DERSIG", SCRIPT_VERIFY_DERSIG) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back( @@ -665,7 +665,7 @@ << OP_CHECKMULTISIG, "BIP66 example 7, without DERSIG", 0) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .PushSig(keys.key2)); tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) @@ -674,7 +674,7 @@ "BIP66 example 7, with DERSIG", SCRIPT_VERIFY_DERSIG) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .PushSig(keys.key2) .ScriptError(SCRIPT_ERR_SIG_DER)); @@ -683,7 +683,7 @@ << OP_CHECKMULTISIG << OP_NOT, "BIP66 example 8, without DERSIG", 0) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .PushSig(keys.key2) .ScriptError(SCRIPT_ERR_EVAL_FALSE)); @@ -693,7 +693,7 @@ "BIP66 example 8, with DERSIG", SCRIPT_VERIFY_DERSIG) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .PushSig(keys.key2) .ScriptError(SCRIPT_ERR_SIG_DER)); @@ -703,7 +703,7 @@ "BIP66 example 9, without DERSIG", 0) .Num(0) .Num(0) - .PushSig(keys.key2, SIGHASH_ALL, 33, 32) + .PushSig(keys.key2, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .ScriptError(SCRIPT_ERR_EVAL_FALSE)); tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) @@ -713,7 +713,7 @@ SCRIPT_VERIFY_DERSIG) .Num(0) .Num(0) - .PushSig(keys.key2, SIGHASH_ALL, 33, 32) + .PushSig(keys.key2, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) @@ -722,7 +722,7 @@ "BIP66 example 10, without DERSIG", 0) .Num(0) .Num(0) - .PushSig(keys.key2, SIGHASH_ALL, 33, 32) + .PushSig(keys.key2, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220")); tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToByteVector(keys.pubkey2C) << OP_2 @@ -731,7 +731,7 @@ SCRIPT_VERIFY_DERSIG) .Num(0) .Num(0) - .PushSig(keys.key2, SIGHASH_ALL, 33, 32) + .PushSig(keys.key2, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) @@ -739,7 +739,7 @@ << OP_CHECKMULTISIG, "BIP66 example 11, without DERSIG", 0) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .Num(0) .ScriptError(SCRIPT_ERR_EVAL_FALSE)); @@ -749,7 +749,7 @@ "BIP66 example 11, with DERSIG", SCRIPT_VERIFY_DERSIG) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .Num(0) .ScriptError(SCRIPT_ERR_EVAL_FALSE)); @@ -758,7 +758,7 @@ << OP_CHECKMULTISIG << OP_NOT, "BIP66 example 12, without DERSIG", 0) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .Num(0)); tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) @@ -767,64 +767,64 @@ "BIP66 example 12, with DERSIG", SCRIPT_VERIFY_DERSIG) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL, 33, 32) + .PushSig(keys.key1, SigHashType(), 33, 32) .EditPush(1, "45022100", "440220") .Num(0)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, "P2PK with multi-byte hashtype, without DERSIG", 0) - .PushSig(keys.key2, SIGHASH_ALL) + .PushSig(keys.key2) .EditPush(70, "01", "0101")); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, "P2PK with multi-byte hashtype, with DERSIG", SCRIPT_VERIFY_DERSIG) - .PushSig(keys.key2, SIGHASH_ALL) + .PushSig(keys.key2) .EditPush(70, "01", "0101") .ScriptError(SCRIPT_ERR_SIG_DER)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, "P2PK with high S but no LOW_S", 0) - .PushSig(keys.key2, SIGHASH_ALL, 32, 33)); + .PushSig(keys.key2, SigHashType(), 32, 33)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, "P2PK with high S", SCRIPT_VERIFY_LOW_S) - .PushSig(keys.key2, SIGHASH_ALL, 32, 33) + .PushSig(keys.key2, SigHashType(), 32, 33) .ScriptError(SCRIPT_ERR_SIG_HIGH_S)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG, "P2PK with hybrid pubkey but no STRICTENC", 0) - .PushSig(keys.key0, SIGHASH_ALL)); + .PushSig(keys.key0)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG, "P2PK with hybrid pubkey", SCRIPT_VERIFY_STRICTENC) - .PushSig(keys.key0, SIGHASH_ALL) + .PushSig(keys.key0, SigHashType()) .ScriptError(SCRIPT_ERR_PUBKEYTYPE)); tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG << OP_NOT, "P2PK NOT with hybrid pubkey but no STRICTENC", 0) - .PushSig(keys.key0, SIGHASH_ALL) + .PushSig(keys.key0) .ScriptError(SCRIPT_ERR_EVAL_FALSE)); tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG << OP_NOT, "P2PK NOT with hybrid pubkey", SCRIPT_VERIFY_STRICTENC) - .PushSig(keys.key0, SIGHASH_ALL) + .PushSig(keys.key0) .ScriptError(SCRIPT_ERR_PUBKEYTYPE)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG << OP_NOT, "P2PK NOT with invalid hybrid pubkey but no STRICTENC", 0) - .PushSig(keys.key0, SIGHASH_ALL) + .PushSig(keys.key0) .DamagePush(10)); tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG << OP_NOT, "P2PK NOT with invalid hybrid pubkey", SCRIPT_VERIFY_STRICTENC) - .PushSig(keys.key0, SIGHASH_ALL) + .PushSig(keys.key0) .DamagePush(10) .ScriptError(SCRIPT_ERR_PUBKEYTYPE)); tests.push_back( @@ -834,45 +834,45 @@ "1-of-2 with the second 1 hybrid pubkey and no STRICTENC", 0) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL)); + .PushSig(keys.key1)); tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0H) << ToByteVector(keys.pubkey1C) << OP_2 << OP_CHECKMULTISIG, "1-of-2 with the second 1 hybrid pubkey", SCRIPT_VERIFY_STRICTENC) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL)); + .PushSig(keys.key1)); tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToByteVector(keys.pubkey0H) << OP_2 << OP_CHECKMULTISIG, "1-of-2 with the first 1 hybrid pubkey", SCRIPT_VERIFY_STRICTENC) .Num(0) - .PushSig(keys.key1, SIGHASH_ALL) + .PushSig(keys.key1) .ScriptError(SCRIPT_ERR_PUBKEYTYPE)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, "P2PK with undefined hashtype but no STRICTENC", 0) - .PushSig(keys.key1, 5)); + .PushSig(keys.key1, SigHashType(5))); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, "P2PK with undefined hashtype", SCRIPT_VERIFY_STRICTENC) - .PushSig(keys.key1, 5) + .PushSig(keys.key1, SigHashType(5)) .ScriptError(SCRIPT_ERR_SIG_HASHTYPE)); tests.push_back( TestBuilder( CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG << OP_NOT, "P2PK NOT with invalid sig and undefined hashtype but no STRICTENC", 0) - .PushSig(keys.key1, 5) + .PushSig(keys.key1, SigHashType(5)) .DamagePush(10)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG << OP_NOT, "P2PK NOT with invalid sig and undefined hashtype", SCRIPT_VERIFY_STRICTENC) - .PushSig(keys.key1, 5) + .PushSig(keys.key1, SigHashType(5)) .DamagePush(10) .ScriptError(SCRIPT_ERR_SIG_HASHTYPE)); @@ -1020,21 +1020,21 @@ TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, "P2PK FORKID", SCRIPT_ENABLE_SIGHASH_FORKID, false, TEST_AMOUNT) - .PushSig(keys.key0, SIGHASH_ALL | SIGHASH_FORKID, 32, 32, + .PushSig(keys.key0, SigHashType().withForkId(true), 32, 32, TEST_AMOUNT)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, "P2PK INVALID AMOUNT", SCRIPT_ENABLE_SIGHASH_FORKID, false, TEST_AMOUNT) - .PushSig(keys.key0, SIGHASH_ALL | SIGHASH_FORKID, 32, 32, + .PushSig(keys.key0, SigHashType().withForkId(true), 32, 32, TEST_AMOUNT + Amount(1)) .ScriptError(SCRIPT_ERR_EVAL_FALSE)); tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, "P2PK INVALID FORKID", SCRIPT_VERIFY_STRICTENC, false, TEST_AMOUNT) - .PushSig(keys.key0, SIGHASH_ALL | SIGHASH_FORKID, 32, 32, + .PushSig(keys.key0, SigHashType().withForkId(true), 32, 32, TEST_AMOUNT) .ScriptError(SCRIPT_ERR_ILLEGAL_FORKID));