Changeset View
Changeset View
Standalone View
Standalone View
src/test/script_tests.cpp
Show First 20 Lines • Show All 1,643 Lines • ▼ Show 20 Lines | |||||
// Test all six CHECK*SIG* opcodes with Schnorr signatures. | // Test all six CHECK*SIG* opcodes with Schnorr signatures. | ||||
// - Schnorr/ECDSA signatures with varying flags SCHNORR / STRICTENC. | // - Schnorr/ECDSA signatures with varying flags SCHNORR / STRICTENC. | ||||
// - test with different key / mismatching key | // - test with different key / mismatching key | ||||
// CHECKSIG and Schnorr | // CHECKSIG and Schnorr | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | ||||
"CHECKSIG Schnorr w/ neither STRICTENC,SCHNORR", 0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_EVAL_FALSE)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | |||||
"CHECKSIG ECDSA w/ neither STRICTENC,SCHNORR", 0) | "CHECKSIG ECDSA w/ neither STRICTENC,SCHNORR", 0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | ||||
"CHECKSIG Schnorr w/ SCHNORR", SCRIPT_ENABLE_SCHNORR) | "CHECKSIG Schnorr w/ SCHNORR", SCRIPT_ENABLE_SCHNORR) | ||||
.PushSigSchnorr(keys.key0)); | .PushSigSchnorr(keys.key0)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | ||||
"CHECKSIG ECDSA w/ SCHNORR", SCRIPT_ENABLE_SCHNORR) | "CHECKSIG ECDSA w/ SCHNORR", SCRIPT_ENABLE_SCHNORR) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | ||||
"CHECKSIG Schnorr w/ STRICTENC", SCRIPT_VERIFY_STRICTENC) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_SIG_DER)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | |||||
"CHECKSIG ECDSA w/ STRICTENC", SCRIPT_VERIFY_STRICTENC) | "CHECKSIG ECDSA w/ STRICTENC", SCRIPT_VERIFY_STRICTENC) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | ||||
"CHECKSIG Schnorr w/ STRICTENC,SCHNORR", | "CHECKSIG Schnorr w/ STRICTENC,SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.PushSigSchnorr(keys.key0)); | .PushSigSchnorr(keys.key0)); | ||||
tests.push_back( | tests.push_back( | ||||
Show All 11 Lines | tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | ||||
"CHECKSIG Schnorr mismatched key", | "CHECKSIG Schnorr mismatched key", | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.PushSigSchnorr(keys.key1)); | .PushSigSchnorr(keys.key1)); | ||||
// CHECKSIGVERIFY and Schnorr | // CHECKSIGVERIFY and Schnorr | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIGVERIFY | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIGVERIFY | ||||
<< OP_1, | << OP_1, | ||||
"CHECKSIGVERIFY Schnorr w/ neither STRICTENC,SCHNORR", 0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_CHECKSIGVERIFY)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIGVERIFY | |||||
<< OP_1, | |||||
"CHECKSIGVERIFY ECDSA w/ neither STRICTENC,SCHNORR", 0) | "CHECKSIGVERIFY ECDSA w/ neither STRICTENC,SCHNORR", 0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKSIGVERIFY << OP_1, | << OP_CHECKSIGVERIFY << OP_1, | ||||
"CHECKSIGVERIFY Schnorr w/ SCHNORR", | "CHECKSIGVERIFY Schnorr w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.PushSigSchnorr(keys.key0)); | .PushSigSchnorr(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKSIGVERIFY << OP_1, | << OP_CHECKSIGVERIFY << OP_1, | ||||
"CHECKSIGVERIFY ECDSA w/ SCHNORR", | "CHECKSIGVERIFY ECDSA w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKSIGVERIFY << OP_1, | << OP_CHECKSIGVERIFY << OP_1, | ||||
"CHECKSIGVERIFY Schnorr w/ STRICTENC", | |||||
SCRIPT_VERIFY_STRICTENC) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_SIG_DER)); | |||||
tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | |||||
<< OP_CHECKSIGVERIFY << OP_1, | |||||
"CHECKSIGVERIFY ECDSA w/ STRICTENC", | "CHECKSIGVERIFY ECDSA w/ STRICTENC", | ||||
SCRIPT_VERIFY_STRICTENC) | SCRIPT_VERIFY_STRICTENC) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKSIGVERIFY << OP_1, | << OP_CHECKSIGVERIFY << OP_1, | ||||
"CHECKSIGVERIFY Schnorr w/ STRICTENC,SCHNORR", | "CHECKSIGVERIFY Schnorr w/ STRICTENC,SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.PushSigSchnorr(keys.key0)); | .PushSigSchnorr(keys.key0)); | ||||
Show All 13 Lines | tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.PushSigSchnorr(keys.key1) | .PushSigSchnorr(keys.key1) | ||||
.ScriptError(SCRIPT_ERR_CHECKSIGVERIFY)); | .ScriptError(SCRIPT_ERR_CHECKSIGVERIFY)); | ||||
// CHECKDATASIG and Schnorr | // CHECKDATASIG and Schnorr | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIG, | << OP_CHECKDATASIG, | ||||
"CHECKDATASIG Schnorr w/ neither STRICTENC,SCHNORR", 0) | |||||
.PushDataSigSchnorr(keys.key0, {}) | |||||
.ScriptError(SCRIPT_ERR_EVAL_FALSE)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | |||||
<< OP_CHECKDATASIG, | |||||
"CHECKDATASIG ECDSA w/ neither STRICTENC,SCHNORR", 0) | "CHECKDATASIG ECDSA w/ neither STRICTENC,SCHNORR", 0) | ||||
.PushDataSigECDSA(keys.key0, {})); | .PushDataSigECDSA(keys.key0, {})); | ||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIG, | << OP_CHECKDATASIG, | ||||
"CHECKDATASIG Schnorr w/ SCHNORR", | "CHECKDATASIG Schnorr w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.PushDataSigSchnorr(keys.key0, {})); | .PushDataSigSchnorr(keys.key0, {})); | ||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIG, | << OP_CHECKDATASIG, | ||||
"CHECKDATASIG ECDSA w/ SCHNORR", | "CHECKDATASIG ECDSA w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.PushDataSigECDSA(keys.key0, {})); | .PushDataSigECDSA(keys.key0, {})); | ||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIG, | << OP_CHECKDATASIG, | ||||
"CHECKDATASIG Schnorr w/ STRICTENC", | |||||
SCRIPT_VERIFY_STRICTENC) | |||||
.PushDataSigSchnorr(keys.key0, {}) | |||||
.ScriptError(SCRIPT_ERR_SIG_DER)); | |||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | |||||
<< OP_CHECKDATASIG, | |||||
"CHECKDATASIG ECDSA w/ STRICTENC", | "CHECKDATASIG ECDSA w/ STRICTENC", | ||||
SCRIPT_VERIFY_STRICTENC) | SCRIPT_VERIFY_STRICTENC) | ||||
.PushDataSigECDSA(keys.key0, {})); | .PushDataSigECDSA(keys.key0, {})); | ||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIG, | << OP_CHECKDATASIG, | ||||
"CHECKDATASIG Schnorr w/ STRICTENC,SCHNORR", | "CHECKDATASIG Schnorr w/ STRICTENC,SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.PushDataSigSchnorr(keys.key0, {})); | .PushDataSigSchnorr(keys.key0, {})); | ||||
Show All 22 Lines | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey1) | ||||
"CHECKDATASIG Schnorr wrong message", | "CHECKDATASIG Schnorr wrong message", | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.PushDataSigSchnorr(keys.key1, {1})); | .PushDataSigSchnorr(keys.key1, {1})); | ||||
// CHECKDATASIGVERIFY and Schnorr | // CHECKDATASIGVERIFY and Schnorr | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIGVERIFY << OP_1, | << OP_CHECKDATASIGVERIFY << OP_1, | ||||
"CHECKDATASIGVERIFY Schnorr w/ neither STRICTENC,SCHNORR", | |||||
0) | |||||
.PushDataSigSchnorr(keys.key0, {}) | |||||
.ScriptError(SCRIPT_ERR_CHECKDATASIGVERIFY)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | |||||
<< OP_CHECKDATASIGVERIFY << OP_1, | |||||
"CHECKDATASIGVERIFY ECDSA w/ neither STRICTENC,SCHNORR", 0) | "CHECKDATASIGVERIFY ECDSA w/ neither STRICTENC,SCHNORR", 0) | ||||
.PushDataSigECDSA(keys.key0, {})); | .PushDataSigECDSA(keys.key0, {})); | ||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIGVERIFY << OP_1, | << OP_CHECKDATASIGVERIFY << OP_1, | ||||
"CHECKDATASIGVERIFY Schnorr w/ SCHNORR", | "CHECKDATASIGVERIFY Schnorr w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.PushDataSigSchnorr(keys.key0, {})); | .PushDataSigSchnorr(keys.key0, {})); | ||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIGVERIFY << OP_1, | << OP_CHECKDATASIGVERIFY << OP_1, | ||||
"CHECKDATASIGVERIFY ECDSA w/ SCHNORR", | "CHECKDATASIGVERIFY ECDSA w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.PushDataSigECDSA(keys.key0, {})); | .PushDataSigECDSA(keys.key0, {})); | ||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIGVERIFY << OP_1, | << OP_CHECKDATASIGVERIFY << OP_1, | ||||
"CHECKDATASIGVERIFY Schnorr w/ STRICTENC", | |||||
SCRIPT_VERIFY_STRICTENC) | |||||
.PushDataSigSchnorr(keys.key0, {}) | |||||
.ScriptError(SCRIPT_ERR_SIG_DER)); | |||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | |||||
<< OP_CHECKDATASIGVERIFY << OP_1, | |||||
"CHECKDATASIGVERIFY ECDSA w/ STRICTENC", | "CHECKDATASIGVERIFY ECDSA w/ STRICTENC", | ||||
SCRIPT_VERIFY_STRICTENC) | SCRIPT_VERIFY_STRICTENC) | ||||
.PushDataSigECDSA(keys.key0, {})); | .PushDataSigECDSA(keys.key0, {})); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0) | ||||
<< OP_CHECKDATASIGVERIFY << OP_1, | << OP_CHECKDATASIGVERIFY << OP_1, | ||||
"CHECKDATASIGVERIFY Schnorr w/ STRICTENC,SCHNORR", | "CHECKDATASIGVERIFY Schnorr w/ STRICTENC,SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
Show All 25 Lines | tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey1) | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.PushDataSigSchnorr(keys.key1, {1}) | .PushDataSigSchnorr(keys.key1, {1}) | ||||
.ScriptError(SCRIPT_ERR_CHECKDATASIGVERIFY)); | .ScriptError(SCRIPT_ERR_CHECKDATASIGVERIFY)); | ||||
// CHECKMULTISIG 1-of-1 and Schnorr | // CHECKMULTISIG 1-of-1 and Schnorr | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | ||||
<< OP_CHECKMULTISIG, | << OP_CHECKMULTISIG, | ||||
"CHECKMULTISIG Schnorr w/ neither STRICTENC,SCHNORR", 0) | |||||
.Num(0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_EVAL_FALSE)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | |||||
<< OP_CHECKMULTISIG, | |||||
"CHECKMULTISIG ECDSA w/ neither STRICTENC,SCHNORR", 0) | "CHECKMULTISIG ECDSA w/ neither STRICTENC,SCHNORR", 0) | ||||
.Num(0) | .Num(0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | ||||
<< OP_1 << OP_CHECKMULTISIG, | << OP_1 << OP_CHECKMULTISIG, | ||||
"CHECKMULTISIG Schnorr w/ SCHNORR", | "CHECKMULTISIG Schnorr w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.Num(0) | .Num(0) | ||||
.PushSigSchnorr(keys.key0) | .PushSigSchnorr(keys.key0) | ||||
.ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | .ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | ||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | ||||
<< OP_1 << OP_CHECKMULTISIG, | << OP_1 << OP_CHECKMULTISIG, | ||||
"CHECKMULTISIG ECDSA w/ SCHNORR", | "CHECKMULTISIG ECDSA w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.Num(0) | .Num(0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | ||||
<< OP_1 << OP_CHECKMULTISIG, | << OP_1 << OP_CHECKMULTISIG, | ||||
"CHECKMULTISIG Schnorr w/ STRICTENC", | |||||
SCRIPT_VERIFY_STRICTENC) | |||||
.Num(0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_SIG_DER)); | |||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | |||||
<< OP_1 << OP_CHECKMULTISIG, | |||||
"CHECKMULTISIG ECDSA w/ STRICTENC", | "CHECKMULTISIG ECDSA w/ STRICTENC", | ||||
SCRIPT_VERIFY_STRICTENC) | SCRIPT_VERIFY_STRICTENC) | ||||
.Num(0) | .Num(0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | ||||
<< OP_1 << OP_CHECKMULTISIG, | << OP_1 << OP_CHECKMULTISIG, | ||||
"CHECKMULTISIG Schnorr w/ STRICTENC,SCHNORR", | "CHECKMULTISIG Schnorr w/ STRICTENC,SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.Num(0) | .Num(0) | ||||
.PushSigSchnorr(keys.key0) | .PushSigSchnorr(keys.key0) | ||||
.ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | .ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | ||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | ||||
<< OP_1 << OP_CHECKMULTISIG, | << OP_1 << OP_CHECKMULTISIG, | ||||
"CHECKMULTISIG ECDSA w/ STRICTENC,SCHNORR", | "CHECKMULTISIG ECDSA w/ STRICTENC,SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | SCRIPT_ENABLE_SCHNORR | SCRIPT_VERIFY_STRICTENC) | ||||
.Num(0) | .Num(0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
// Test multisig with multiple Schnorr signatures | // Test multisig with multiple Schnorr signatures | ||||
tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) | tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) | ||||
<< ToByteVector(keys.pubkey1C) | << ToByteVector(keys.pubkey1C) | ||||
<< ToByteVector(keys.pubkey2C) << OP_3 | << ToByteVector(keys.pubkey2C) << OP_3 | ||||
<< OP_CHECKMULTISIG, | << OP_CHECKMULTISIG, | ||||
"Schnorr 3-of-3 without SCHNORR flag", 0) | |||||
.Num(0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2) | |||||
.ScriptError(SCRIPT_ERR_EVAL_FALSE)); | |||||
tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"Schnorr 3-of-3 with SCHNORR flag", | "Schnorr 3-of-3 with SCHNORR flag", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.Num(0) | .Num(0) | ||||
.PushSigSchnorr(keys.key0) | .PushSigSchnorr(keys.key0) | ||||
.PushSigSchnorr(keys.key1) | .PushSigSchnorr(keys.key1) | ||||
.PushSigSchnorr(keys.key2) | .PushSigSchnorr(keys.key2) | ||||
.ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | .ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | ||||
tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) | tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) | ||||
<< ToByteVector(keys.pubkey1C) | << ToByteVector(keys.pubkey1C) | ||||
<< ToByteVector(keys.pubkey2C) << OP_3 | << ToByteVector(keys.pubkey2C) << OP_3 | ||||
<< OP_CHECKMULTISIG, | << OP_CHECKMULTISIG, | ||||
"Schnorr-ECDSA-mixed 3-of-3 with SCHNORR flag", | "Schnorr-ECDSA-mixed 3-of-3 with SCHNORR flag", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.Num(0) | .Num(0) | ||||
.PushSigECDSA(keys.key0) | .PushSigECDSA(keys.key0) | ||||
.PushSigECDSA(keys.key1) | .PushSigECDSA(keys.key1) | ||||
.PushSigSchnorr(keys.key2) | .PushSigSchnorr(keys.key2) | ||||
.ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | .ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | ||||
// CHECKMULTISIGVERIFY 1-of-1 and Schnorr | // CHECKMULTISIGVERIFY 1-of-1 and Schnorr | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | ||||
<< OP_CHECKMULTISIGVERIFY << OP_1, | << OP_CHECKMULTISIGVERIFY << OP_1, | ||||
"CHECKMULTISIGVERIFY Schnorr w/ neither STRICTENC,SCHNORR", | |||||
0) | |||||
.Num(0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_CHECKMULTISIGVERIFY)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | |||||
<< OP_CHECKMULTISIGVERIFY << OP_1, | |||||
"CHECKMULTISIGVERIFY ECDSA w/ neither STRICTENC,SCHNORR", 0) | "CHECKMULTISIGVERIFY ECDSA w/ neither STRICTENC,SCHNORR", 0) | ||||
.Num(0) | .Num(0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() | tests.push_back(TestBuilder(CScript() | ||||
<< OP_1 << ToByteVector(keys.pubkey0) | << OP_1 << ToByteVector(keys.pubkey0) | ||||
<< OP_1 << OP_CHECKMULTISIGVERIFY << OP_1, | << OP_1 << OP_CHECKMULTISIGVERIFY << OP_1, | ||||
"CHECKMULTISIGVERIFY Schnorr w/ SCHNORR", | "CHECKMULTISIGVERIFY Schnorr w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.Num(0) | .Num(0) | ||||
.PushSigSchnorr(keys.key0) | .PushSigSchnorr(keys.key0) | ||||
.ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | .ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | ||||
tests.push_back(TestBuilder(CScript() | tests.push_back(TestBuilder(CScript() | ||||
<< OP_1 << ToByteVector(keys.pubkey0) | << OP_1 << ToByteVector(keys.pubkey0) | ||||
<< OP_1 << OP_CHECKMULTISIGVERIFY << OP_1, | << OP_1 << OP_CHECKMULTISIGVERIFY << OP_1, | ||||
"CHECKMULTISIGVERIFY ECDSA w/ SCHNORR", | "CHECKMULTISIGVERIFY ECDSA w/ SCHNORR", | ||||
SCRIPT_ENABLE_SCHNORR) | SCRIPT_ENABLE_SCHNORR) | ||||
.Num(0) | .Num(0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back(TestBuilder(CScript() | tests.push_back(TestBuilder(CScript() | ||||
<< OP_1 << ToByteVector(keys.pubkey0) | << OP_1 << ToByteVector(keys.pubkey0) | ||||
<< OP_1 << OP_CHECKMULTISIGVERIFY << OP_1, | << OP_1 << OP_CHECKMULTISIGVERIFY << OP_1, | ||||
"CHECKMULTISIGVERIFY Schnorr w/ STRICTENC", | |||||
SCRIPT_VERIFY_STRICTENC) | |||||
.Num(0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_SIG_DER)); | |||||
tests.push_back(TestBuilder(CScript() | |||||
<< OP_1 << ToByteVector(keys.pubkey0) | |||||
<< OP_1 << OP_CHECKMULTISIGVERIFY << OP_1, | |||||
"CHECKMULTISIGVERIFY ECDSA w/ STRICTENC", | "CHECKMULTISIGVERIFY ECDSA w/ STRICTENC", | ||||
SCRIPT_VERIFY_STRICTENC) | SCRIPT_VERIFY_STRICTENC) | ||||
.Num(0) | .Num(0) | ||||
.PushSigECDSA(keys.key0)); | .PushSigECDSA(keys.key0)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | ||||
<< OP_CHECKMULTISIGVERIFY << OP_1, | << OP_CHECKMULTISIGVERIFY << OP_1, | ||||
"CHECKMULTISIGVERIFY Schnorr w/ STRICTENC,SCHNORR", | "CHECKMULTISIGVERIFY Schnorr w/ STRICTENC,SCHNORR", | ||||
▲ Show 20 Lines • Show All 340 Lines • ▼ Show 20 Lines | tests.push_back( | ||||
TestBuilder( | TestBuilder( | ||||
CScript() << OP_CHECKSIG, | CScript() << OP_CHECKSIG, | ||||
"recovered-pubkey CHECKSIG with 63-byte DER; schnorrflag", | "recovered-pubkey CHECKSIG with 63-byte DER; schnorrflag", | ||||
SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SCHNORR) | SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SCHNORR) | ||||
.PushECDSASigFromParts(rdata, sdata) | .PushECDSASigFromParts(rdata, sdata) | ||||
.PushECDSARecoveredPubKey(rdata, sdata)); | .PushECDSARecoveredPubKey(rdata, sdata)); | ||||
} | } | ||||
{ | { | ||||
// 64-byte ECDSA sig works before schnorr flag activation, but | // 64-byte ECDSA sig does not work. | ||||
// not after. | |||||
std::vector<uint8_t> rdata = ParseHex( | std::vector<uint8_t> rdata = ParseHex( | ||||
"776879206d757374207765207375666665722077697468206563647361"); | "776879206d757374207765207375666665722077697468206563647361"); | ||||
std::vector<uint8_t> sdata(58 - rdata.size(), 33); | std::vector<uint8_t> sdata(58 - rdata.size(), 33); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << OP_CHECKSIG, | |||||
"recovered-pubkey CHECKSIG with 64-byte DER", | |||||
SCRIPT_VERIFY_STRICTENC) | |||||
.PushECDSASigFromParts(rdata, sdata) | |||||
.PushECDSARecoveredPubKey(rdata, sdata)); | |||||
tests.push_back( | |||||
TestBuilder( | TestBuilder( | ||||
CScript() << OP_CHECKSIG, | CScript() << OP_CHECKSIG, | ||||
"recovered-pubkey CHECKSIG with 64-byte DER; schnorrflag", | "recovered-pubkey CHECKSIG with 64-byte DER; schnorrflag", | ||||
SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SCHNORR) | SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SCHNORR) | ||||
.PushECDSASigFromParts(rdata, sdata) | .PushECDSASigFromParts(rdata, sdata) | ||||
.PushECDSARecoveredPubKey(rdata, sdata) | .PushECDSARecoveredPubKey(rdata, sdata) | ||||
.ScriptError(SCRIPT_ERR_EVAL_FALSE)); | .ScriptError(SCRIPT_ERR_EVAL_FALSE)); | ||||
} | } | ||||
Show All 16 Lines | tests.push_back( | ||||
.PushECDSARecoveredPubKey(rdata, sdata)); | .PushECDSARecoveredPubKey(rdata, sdata)); | ||||
} | } | ||||
{ | { | ||||
// Try 64-byte ECDSA sig again, in multisig. | // Try 64-byte ECDSA sig again, in multisig. | ||||
std::vector<uint8_t> rdata = ParseHex( | std::vector<uint8_t> rdata = ParseHex( | ||||
"776879206d757374207765207375666665722077697468206563647361"); | "776879206d757374207765207375666665722077697468206563647361"); | ||||
std::vector<uint8_t> sdata(58 - rdata.size(), 33); | std::vector<uint8_t> sdata(58 - rdata.size(), 33); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() | |||||
<< OP_1 << OP_SWAP << OP_1 << OP_CHECKMULTISIG, | |||||
"recovered-pubkey CHECKMULTISIG with 64-byte DER", | |||||
SCRIPT_VERIFY_STRICTENC) | |||||
.Num(0) | |||||
.PushECDSASigFromParts(rdata, sdata) | |||||
.PushECDSARecoveredPubKey(rdata, sdata)); | |||||
tests.push_back( | |||||
TestBuilder( | TestBuilder( | ||||
CScript() << OP_1 << OP_SWAP << OP_1 << OP_CHECKMULTISIG, | CScript() << OP_1 << OP_SWAP << OP_1 << OP_CHECKMULTISIG, | ||||
"recovered-pubkey CHECKMULTISIG with 64-byte DER; schnorrflag", | "recovered-pubkey CHECKMULTISIG with 64-byte DER; schnorrflag", | ||||
SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SCHNORR) | SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SCHNORR) | ||||
.Num(0) | .Num(0) | ||||
.PushECDSASigFromParts(rdata, sdata) | .PushECDSASigFromParts(rdata, sdata) | ||||
.PushECDSARecoveredPubKey(rdata, sdata) | .PushECDSARecoveredPubKey(rdata, sdata) | ||||
.ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | .ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | ||||
▲ Show 20 Lines • Show All 813 Lines • Show Last 20 Lines |