diff options
author | Russell O'Connor <roconnor@blockstream.io> | 2022-08-19 10:40:28 -0400 |
---|---|---|
committer | Russell O'Connor <roconnor@blockstream.io> | 2022-11-21 12:38:53 -0500 |
commit | 8e3fc9942729716e95907008fcf36eee758c3a6a (patch) | |
tree | 1e8159c95b604cfc35ed80de1286b9d54abe4538 /src/script/sign.cpp | |
parent | 60a00889b02cdb67ac20328af7477ff55ecd8e46 (diff) | |
download | bitcoin-8e3fc9942729716e95907008fcf36eee758c3a6a.tar.xz |
Do not use CScript for tapleaf scripts until the tapleaf version is known
Prevents use of CScript methods until the tapleaf is known to be a tapscript.
Diffstat (limited to 'src/script/sign.cpp')
-rw-r--r-- | src/script/sign.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 0d74a661a5..53377560e8 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -169,13 +169,14 @@ static bool CreateTaprootScriptSig(const BaseSignatureCreator& creator, Signatur return false; } -static bool SignTaprootScript(const SigningProvider& provider, const BaseSignatureCreator& creator, SignatureData& sigdata, int leaf_version, const CScript& script, std::vector<valtype>& result) +static bool SignTaprootScript(const SigningProvider& provider, const BaseSignatureCreator& creator, SignatureData& sigdata, int leaf_version, Span<const unsigned char> script_bytes, std::vector<valtype>& result) { // Only BIP342 tapscript signing is supported for now. if (leaf_version != TAPROOT_LEAF_TAPSCRIPT) return false; SigVersion sigversion = SigVersion::TAPSCRIPT; - uint256 leaf_hash = (HashWriter{HASHER_TAPLEAF} << uint8_t(leaf_version) << script).GetSHA256(); + uint256 leaf_hash = ComputeTapleafHash(leaf_version, script_bytes); + CScript script = CScript(script_bytes.begin(), script_bytes.end()); // <xonly pubkey> OP_CHECKSIG if (script.size() == 34 && script[33] == OP_CHECKSIG && script[0] == 0x20) { |