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 @@ -1909,6 +1909,34 @@ "SIG_HASHTYPE", "P2PK with undefined hashtype" ], +[ + "0x47 0x30440220647a83507454f15f85f7e24de6e70c9d7b1d4020c71d0e53f4412425487e1dde022015737290670b4ab17b6783697a88ddd581c2d9c9efe26a59ac213076fc67f53021 0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", + "DUP HASH160 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5 EQUALVERIFY CHECKSIG", + "", + "OK", + "P2PKH with invalid sighashtype" +], +[ + "0x47 0x30440220647a83507454f15f85f7e24de6e70c9d7b1d4020c71d0e53f4412425487e1dde022015737290670b4ab17b6783697a88ddd581c2d9c9efe26a59ac213076fc67f53021 0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", + "DUP HASH160 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5 EQUALVERIFY CHECKSIG", + "STRICTENC", + "SIG_HASHTYPE", + "P2PKH with invalid sighashtype and STRICTENC" +], +[ + "0x47 0x304402200874e1681429dcddb8a1b6f573cb450692d08b41ab2078190dbb95478dc9ce3602206964f027a39cfdcbf7af62190db04406357a3017f7e82193ef3df4aff3cd87da21 0x43 0x41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac", + "HASH160 0x14 0x49ba2f86705b5dcd48d93b750f03289db3b8ce21 EQUAL", + "P2SH", + "OK", + "P2SH(P2PK) with invalid sighashtype" +], +[ + "0x47 0x304402200874e1681429dcddb8a1b6f573cb450692d08b41ab2078190dbb95478dc9ce3602206964f027a39cfdcbf7af62190db04406357a3017f7e82193ef3df4aff3cd87da21 0x43 0x41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac", + "HASH160 0x14 0x49ba2f86705b5dcd48d93b750f03289db3b8ce21 EQUAL", + "P2SH,STRICTENC", + "SIG_HASHTYPE", + "P2SH(P2PK) with invalid sighashtype and STRICTENC" +], [ "0x47 0x304402207409b5b320296e5e2136a7b281a7f803028ca4ca44e2b83eebd46932677725de02202d4eea1c8d3c98e6f42614f54764e6e5e6542e213eb4d079737e9a8b6e9812ec05", "0x41 0x048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf CHECKSIG NOT", 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 @@ -875,6 +875,42 @@ "P2PK with undefined hashtype", SCRIPT_VERIFY_STRICTENC) .PushSig(keys.key1, SigHashType(5)) .ScriptError(SCRIPT_ERR_SIG_HASHTYPE)); + + // Generate P2PKH tests for invalid SigHashType + tests.push_back( + TestBuilder(CScript() << OP_DUP << OP_HASH160 + << ToByteVector(keys.pubkey0.GetID()) + << OP_EQUALVERIFY << OP_CHECKSIG, + "P2PKH with invalid sighashtype", 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 with invalid sighashtype and STRICTENC", + 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) with invalid sighashtype", SCRIPT_VERIFY_P2SH, + true) + .PushSig(keys.key1, SigHashType(0x21)) + .PushRedeem()); + tests.push_back( + TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, + "P2SH(P2PK) with invalid sighashtype and STRICTENC", + 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.pubkey1) << OP_CHECKSIG << OP_NOT,