diff --git a/src/test/data/script_tests.json b/src/test/data/script_tests.json --- a/src/test/data/script_tests.json +++ b/src/test/data/script_tests.json @@ -1440,6 +1440,34 @@ ["0x27 0x302402107777777777777777777777777777777702108777777777777777777777777777777701", "0 CHECKSIG NOT", "DERSIG", "SIG_DER", "Negative S is incorrectly encoded for DERSIG"], ["Automatically generated test cases"], +[ + "0x47 0x30440220647a83507454f15f85f7e24de6e70c9d7b1d4020c71d0e53f4412425487e1dde022015737290670b4ab17b6783697a88ddd581c2d9c9efe26a59ac213076fc67f53021 0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", + "DUP HASH160 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5 EQUALVERIFY CHECKSIG", + "", + "OK", + "P2PKH" +], +[ + "0x47 0x30440220647a83507454f15f85f7e24de6e70c9d7b1d4020c71d0e53f4412425487e1dde022015737290670b4ab17b6783697a88ddd581c2d9c9efe26a59ac213076fc67f53021 0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", + "DUP HASH160 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5 EQUALVERIFY CHECKSIG", + "STRICTENC", + "SIG_HASHTYPE", + "P2PKH" +], +[ + "0x47 0x304402200874e1681429dcddb8a1b6f573cb450692d08b41ab2078190dbb95478dc9ce3602206964f027a39cfdcbf7af62190db04406357a3017f7e82193ef3df4aff3cd87da21 0x43 0x41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac", + "HASH160 0x14 0x49ba2f86705b5dcd48d93b750f03289db3b8ce21 EQUAL", + "P2SH", + "OK", + "P2SH(P2PK)" +], +[ + "0x47 0x304402200874e1681429dcddb8a1b6f573cb450692d08b41ab2078190dbb95478dc9ce3602206964f027a39cfdcbf7af62190db04406357a3017f7e82193ef3df4aff3cd87da21 0x43 0x41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac", + "HASH160 0x14 0x49ba2f86705b5dcd48d93b750f03289db3b8ce21 EQUAL", + "P2SH,STRICTENC", + "SIG_HASHTYPE", + "P2SH(P2PK)" +], [ "0x47 0x304402200a5c6163f07b8d3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001", "0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG", 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 @@ -415,6 +415,39 @@ std::vector tests; + // Generate P2PKH tests for invalid SigHashType + tests.push_back( + TestBuilder(CScript() << OP_DUP << OP_HASH160 + << ToByteVector(keys.pubkey0.GetID()) + << OP_EQUALVERIFY << OP_CHECKSIG, + "P2PKH", 0) + .PushSig(keys.key0, SigHashType(0x21), 32, 32, Amount(0), 0) + .Push(keys.pubkey0)); + tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 + << ToByteVector(keys.pubkey0.GetID()) + << OP_EQUALVERIFY << OP_CHECKSIG, + "P2PKH", SCRIPT_VERIFY_STRICTENC) + .PushSig(keys.key0, SigHashType(0x21), 32, 32, + Amount(0), SCRIPT_VERIFY_STRICTENC) + .Push(keys.pubkey0) + // Should fail for STRICTENC + .ScriptError(SCRIPT_ERR_SIG_HASHTYPE)); + + // Generate P2SH tests for invalid SigHashType + tests.push_back( + TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, + "P2SH(P2PK)", SCRIPT_VERIFY_P2SH, true) + .PushSig(keys.key1, SigHashType(0x21)) + .PushRedeem()); + tests.push_back( + TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, + "P2SH(P2PK)", SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, + true) + .PushSig(keys.key1, SigHashType(0x21)) + .PushRedeem() + // Should fail for STRICTENC + .ScriptError(SCRIPT_ERR_SIG_HASHTYPE)); + tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, "P2PK", 0)