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 @@ -6,6 +6,63 @@ ["correct prevout hash), using the given scriptSig. All nLockTimes are 0, all"], ["nSequences are max."], +[ + "0x47 0x304402203ab2b55f3f034dda5466422c6e4d967ddd8d83cc97daedb22268a948743b382d02204a0163c8c8d84bdc7f5d62100f9617a1f635aaeac15c11a704042abdc43dbd9b01 0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", + "DUP HASH160 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5 EQUALVERIFY CHECKSIG", + "", + "OK", + "P2PKH" +], +[ + "0x47 0x304402203ab2b55f3f034dda5466422c6e4d967ddd8d83cc97daedb22268a948743b382d02204a0163c8c8d84bdc7f5d62100f9617a1f635aaeac15c11a704042abdc43dbd9b01 0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", + "DUP HASH160 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5 EQUALVERIFY CHECKSIG", + "STRICTENC", + "OK", + "P2PKH" +], +[ + "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 0x3044022034a0c7b4ed4038c9a5257b0fee9fe63469664110099f845149a038bef99fb4da022022c766361a9e3b952916857186cd73714adc9380a2ba10e9b83de5915e7b9cdb01 0x43 0x41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac", + "HASH160 0x14 0x49ba2f86705b5dcd48d93b750f03289db3b8ce21 EQUAL", + "P2SH", + "OK", + "P2SH(P2PK)" +], +[ + "0x47 0x3044022034a0c7b4ed4038c9a5257b0fee9fe63469664110099f845149a038bef99fb4da022022c766361a9e3b952916857186cd73714adc9380a2ba10e9b83de5915e7b9cdb01 0x43 0x41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac", + "HASH160 0x14 0x49ba2f86705b5dcd48d93b750f03289db3b8ce21 EQUAL", + "P2SH,STRICTENC", + "OK", + "P2SH(P2PK)" +], +[ + "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)" +], + ["", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "Test the test: we should have an empty stack after scriptSig evaluation"], [" ", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK", "and multiple spaces should not change that."], [" ", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "OK"], 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,66 @@ std::vector tests; + // Generate P2PKH tests for valid SigHashType + tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 + << ToByteVector(keys.pubkey0.GetID()) + << OP_EQUALVERIFY << OP_CHECKSIG, + "P2PKH", 0) + .PushSig(keys.key0, SigHashType(), 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(), 32, 32, Amount(0), + SCRIPT_VERIFY_STRICTENC) + .Push(keys.pubkey0)); + + // 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) + .ScriptError(SCRIPT_ERR_SIG_HASHTYPE)); // Should fail for STRICTENC + + // Generate P2SH tests for valid SigHashType + tests.push_back( + TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, + "P2SH(P2PK)", SCRIPT_VERIFY_P2SH, true) + .PushSig(keys.key1, SigHashType()) + .PushRedeem()); + tests.push_back( + TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, + "P2SH(P2PK)", SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, + true) + .PushSig(keys.key1, SigHashType()) + .PushRedeem()); + + // 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() + .ScriptError(SCRIPT_ERR_SIG_HASHTYPE)); // Should fail for STRICTENC + tests.push_back( TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, "P2PK", 0)