aboutsummaryrefslogtreecommitdiff
path: root/src/script/interpreter.h
diff options
context:
space:
mode:
authorPieter Wuille <pieter@wuille.net>2020-09-11 14:33:30 -0700
committerPieter Wuille <pieter@wuille.net>2020-10-12 17:15:40 -0700
commit0664f5fe1f77f08d235aa3750b59428257b0b91d (patch)
treefe5078625aa3e9b7cf34b51e6eb66e8fccf0d74f /src/script/interpreter.h
parent5de246ca8159dcffaa4c136a60c8bfed2028e2ee (diff)
downloadbitcoin-0664f5fe1f77f08d235aa3750b59428257b0b91d.tar.xz
Support for Schnorr signatures and integration in SignatureCheckers (BIP 340)
This enables the schnorrsig module in libsecp256k1, adds the relevant types and functions to src/pubkey, as well as in higher-level `SignatureChecker` classes. The (verification side of the) BIP340 test vectors is also added.
Diffstat (limited to 'src/script/interpreter.h')
-rw-r--r--src/script/interpreter.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/script/interpreter.h b/src/script/interpreter.h
index b739528f0f..e54243c8f0 100644
--- a/src/script/interpreter.h
+++ b/src/script/interpreter.h
@@ -7,12 +7,14 @@
#define BITCOIN_SCRIPT_INTERPRETER_H
#include <script/script_error.h>
+#include <span.h>
#include <primitives/transaction.h>
#include <vector>
#include <stdint.h>
class CPubKey;
+class XOnlyPubKey;
class CScript;
class CTransaction;
class CTxOut;
@@ -176,6 +178,11 @@ public:
return false;
}
+ virtual bool CheckSchnorrSignature(Span<const unsigned char> sig, Span<const unsigned char> pubkey, SigVersion sigversion, ScriptError* serror = nullptr) const
+ {
+ return false;
+ }
+
virtual bool CheckLockTime(const CScriptNum& nLockTime) const
{
return false;
@@ -200,11 +207,13 @@ private:
protected:
virtual bool VerifyECDSASignature(const std::vector<unsigned char>& vchSig, const CPubKey& vchPubKey, const uint256& sighash) const;
+ virtual bool VerifySchnorrSignature(Span<const unsigned char> sig, const XOnlyPubKey& pubkey, const uint256& sighash) const;
public:
GenericTransactionSignatureChecker(const T* txToIn, unsigned int nInIn, const CAmount& amountIn) : txTo(txToIn), nIn(nInIn), amount(amountIn), txdata(nullptr) {}
GenericTransactionSignatureChecker(const T* txToIn, unsigned int nInIn, const CAmount& amountIn, const PrecomputedTransactionData& txdataIn) : txTo(txToIn), nIn(nInIn), amount(amountIn), txdata(&txdataIn) {}
bool CheckECDSASignature(const std::vector<unsigned char>& scriptSig, const std::vector<unsigned char>& vchPubKey, const CScript& scriptCode, SigVersion sigversion) const override;
+ bool CheckSchnorrSignature(Span<const unsigned char> sig, Span<const unsigned char> pubkey, SigVersion sigversion, ScriptError* serror = nullptr) const override;
bool CheckLockTime(const CScriptNum& nLockTime) const override;
bool CheckSequence(const CScriptNum& nSequence) const override;
};