Skip to content

Commit 6965456

Browse files
committed
Introduce DeferringSignatureChecker and inherit with SignatureExtractor
Introduces a DeferringSignatureChecker which simply takes a BaseSignatureChecker and passes through everything. SignatureExtractorChecker now subclasses DeferringSignatureChecker. This allows for all BaseSignatureChecker functions to be implemented for SignatureExtractorChecker, while allowing for future signature checkers which opreate similarly to SignatureExtractorChecker.
1 parent e9c037b commit 6965456

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

src/script/interpreter.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,34 @@ class GenericTransactionSignatureChecker : public BaseSignatureChecker
272272
using TransactionSignatureChecker = GenericTransactionSignatureChecker<CTransaction>;
273273
using MutableTransactionSignatureChecker = GenericTransactionSignatureChecker<CMutableTransaction>;
274274

275+
class DeferringSignatureChecker : public BaseSignatureChecker
276+
{
277+
protected:
278+
BaseSignatureChecker& m_checker;
279+
280+
public:
281+
DeferringSignatureChecker(BaseSignatureChecker& checker) : m_checker(checker) {}
282+
283+
bool CheckECDSASignature(const std::vector<unsigned char>& scriptSig, const std::vector<unsigned char>& vchPubKey, const CScript& scriptCode, SigVersion sigversion) const override
284+
{
285+
return m_checker.CheckECDSASignature(scriptSig, vchPubKey, scriptCode, sigversion);
286+
}
287+
288+
bool CheckSchnorrSignature(Span<const unsigned char> sig, Span<const unsigned char> pubkey, SigVersion sigversion, const ScriptExecutionData& execdata, ScriptError* serror = nullptr) const override
289+
{
290+
return m_checker.CheckSchnorrSignature(sig, pubkey, sigversion, execdata, serror);
291+
}
292+
293+
bool CheckLockTime(const CScriptNum& nLockTime) const override
294+
{
295+
return m_checker.CheckLockTime(nLockTime);
296+
}
297+
bool CheckSequence(const CScriptNum& nSequence) const override
298+
{
299+
return m_checker.CheckSequence(nSequence);
300+
}
301+
};
302+
275303
bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript& script, unsigned int flags, const BaseSignatureChecker& checker, SigVersion sigversion, ScriptExecutionData& execdata, ScriptError* error = nullptr);
276304
bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript& script, unsigned int flags, const BaseSignatureChecker& checker, SigVersion sigversion, ScriptError* error = nullptr);
277305
bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CScriptWitness* witness, unsigned int flags, const BaseSignatureChecker& checker, ScriptError* serror = nullptr);

src/script/sign.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,17 +250,17 @@ bool ProduceSignature(const SigningProvider& provider, const BaseSignatureCreato
250250
}
251251

252252
namespace {
253-
class SignatureExtractorChecker final : public BaseSignatureChecker
253+
class SignatureExtractorChecker final : public DeferringSignatureChecker
254254
{
255255
private:
256256
SignatureData& sigdata;
257-
BaseSignatureChecker& checker;
258257

259258
public:
260-
SignatureExtractorChecker(SignatureData& sigdata, BaseSignatureChecker& checker) : sigdata(sigdata), checker(checker) {}
259+
SignatureExtractorChecker(SignatureData& sigdata, BaseSignatureChecker& checker) : DeferringSignatureChecker(checker), sigdata(sigdata) {}
260+
261261
bool CheckECDSASignature(const std::vector<unsigned char>& scriptSig, const std::vector<unsigned char>& vchPubKey, const CScript& scriptCode, SigVersion sigversion) const override
262262
{
263-
if (checker.CheckECDSASignature(scriptSig, vchPubKey, scriptCode, sigversion)) {
263+
if (m_checker.CheckECDSASignature(scriptSig, vchPubKey, scriptCode, sigversion)) {
264264
CPubKey pubkey(vchPubKey);
265265
sigdata.signatures.emplace(pubkey.GetID(), SigPair(pubkey, scriptSig));
266266
return true;

0 commit comments

Comments
 (0)