mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-21 15:50:07 +01:00
script/sign: signing support for Miniscripts with hash preimage challenges
Preimages must be externally provided (typically, via a PSBT).
This commit is contained in:
@@ -1191,7 +1191,8 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
|
||||
BOOST_CHECK(combined.scriptSig.empty());
|
||||
|
||||
// Single signature case:
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL)); // changes scriptSig
|
||||
SignatureData dummy;
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL, dummy)); // changes scriptSig
|
||||
scriptSig = DataFromTransaction(txTo, 0, txFrom.vout[0]);
|
||||
combined = CombineSignatures(txFrom.vout[0], txTo, scriptSig, empty);
|
||||
BOOST_CHECK(combined.scriptSig == scriptSig.scriptSig);
|
||||
@@ -1199,7 +1200,8 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
|
||||
BOOST_CHECK(combined.scriptSig == scriptSig.scriptSig);
|
||||
SignatureData scriptSigCopy = scriptSig;
|
||||
// Signing again will give a different, valid signature:
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL));
|
||||
SignatureData dummy_b;
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL, dummy_b));
|
||||
scriptSig = DataFromTransaction(txTo, 0, txFrom.vout[0]);
|
||||
combined = CombineSignatures(txFrom.vout[0], txTo, scriptSigCopy, scriptSig);
|
||||
BOOST_CHECK(combined.scriptSig == scriptSigCopy.scriptSig || combined.scriptSig == scriptSig.scriptSig);
|
||||
@@ -1208,14 +1210,16 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
|
||||
CScript pkSingle; pkSingle << ToByteVector(keys[0].GetPubKey()) << OP_CHECKSIG;
|
||||
BOOST_CHECK(keystore.AddCScript(pkSingle));
|
||||
scriptPubKey = GetScriptForDestination(ScriptHash(pkSingle));
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL));
|
||||
SignatureData dummy_c;
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL, dummy_c));
|
||||
scriptSig = DataFromTransaction(txTo, 0, txFrom.vout[0]);
|
||||
combined = CombineSignatures(txFrom.vout[0], txTo, scriptSig, empty);
|
||||
BOOST_CHECK(combined.scriptSig == scriptSig.scriptSig);
|
||||
combined = CombineSignatures(txFrom.vout[0], txTo, empty, scriptSig);
|
||||
BOOST_CHECK(combined.scriptSig == scriptSig.scriptSig);
|
||||
scriptSigCopy = scriptSig;
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL));
|
||||
SignatureData dummy_d;
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL, dummy_d));
|
||||
scriptSig = DataFromTransaction(txTo, 0, txFrom.vout[0]);
|
||||
combined = CombineSignatures(txFrom.vout[0], txTo, scriptSigCopy, scriptSig);
|
||||
BOOST_CHECK(combined.scriptSig == scriptSigCopy.scriptSig || combined.scriptSig == scriptSig.scriptSig);
|
||||
@@ -1223,7 +1227,8 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
|
||||
// Hardest case: Multisig 2-of-3
|
||||
scriptPubKey = GetScriptForMultisig(2, pubkeys);
|
||||
BOOST_CHECK(keystore.AddCScript(scriptPubKey));
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL));
|
||||
SignatureData dummy_e;
|
||||
BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL, dummy_e));
|
||||
scriptSig = DataFromTransaction(txTo, 0, txFrom.vout[0]);
|
||||
combined = CombineSignatures(txFrom.vout[0], txTo, scriptSig, empty);
|
||||
BOOST_CHECK(combined.scriptSig == scriptSig.scriptSig);
|
||||
|
||||
Reference in New Issue
Block a user