MCPcopy Create free account
hub / github.com/ElementsProject/elements / CheckSchnorrSignature

Method CheckSchnorrSignature

src/script/interpreter.cpp:3014–3039  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3012
3013template <class T>
3014bool GenericTransactionSignatureChecker<T>::CheckSchnorrSignature(Span<const unsigned char> sig, Span<const unsigned char> pubkey_in, SigVersion sigversion, ScriptExecutionData& execdata, ScriptError* serror) const
3015{
3016 assert(sigversion == SigVersion::TAPROOT || sigversion == SigVersion::TAPSCRIPT);
3017 // Schnorr signatures have 32-byte public keys. The caller is responsible for enforcing this.
3018 assert(pubkey_in.size() == 32);
3019 // Note that in Tapscript evaluation, empty signatures are treated specially (invalid signature that does not
3020 // abort script execution). This is implemented in EvalChecksigTapscript, which won't invoke
3021 // CheckSchnorrSignature in that case. In other contexts, they are invalid like every other signature with
3022 // size different from 64 or 65.
3023 if (sig.size() != 64 && sig.size() != 65) return set_error(serror, SCRIPT_ERR_SCHNORR_SIG_SIZE);
3024
3025 XOnlyPubKey pubkey{pubkey_in};
3026
3027 uint8_t hashtype = SIGHASH_DEFAULT;
3028 if (sig.size() == 65) {
3029 hashtype = SpanPopBack(sig);
3030 if (hashtype == SIGHASH_DEFAULT) return set_error(serror, SCRIPT_ERR_SCHNORR_SIG_HASHTYPE);
3031 }
3032 uint256 sighash;
3033 if (!this->txdata) return HandleMissingData(m_mdb);
3034 if (!SignatureHashSchnorr(sighash, execdata, *txTo, nIn, hashtype, sigversion, *this->txdata, m_mdb)) {
3035 return set_error(serror, SCRIPT_ERR_SCHNORR_SIG_HASHTYPE);
3036 }
3037 if (!VerifySchnorrSignature(sig, pubkey, sighash)) return set_error(serror, SCRIPT_ERR_SCHNORR_SIG);
3038 return true;
3039}
3040
3041template <class T>
3042bool GenericTransactionSignatureChecker<T>::CheckLockTime(const CScriptNum& nLockTime) const

Callers 2

EvalChecksigTapscriptFunction · 0.45
VerifyWitnessProgramFunction · 0.45

Calls 4

HandleMissingDataFunction · 0.85
SignatureHashSchnorrFunction · 0.85
set_errorFunction · 0.70
sizeMethod · 0.45

Tested by

no test coverage detected