Changeset View
Changeset View
Standalone View
Standalone View
src/script/sign.cpp
Show First 20 Lines • Show All 225 Lines • ▼ Show 20 Lines | bool ProduceSignature(const SigningProvider &provider, | ||||
// Test solution | // Test solution | ||||
sigdata.complete = | sigdata.complete = | ||||
solved && VerifyScript(sigdata.scriptSig, fromPubKey, | solved && VerifyScript(sigdata.scriptSig, fromPubKey, | ||||
STANDARD_SCRIPT_VERIFY_FLAGS, creator.Checker()); | STANDARD_SCRIPT_VERIFY_FLAGS, creator.Checker()); | ||||
return sigdata.complete; | return sigdata.complete; | ||||
} | } | ||||
namespace { | |||||
class SignatureExtractorChecker final : public BaseSignatureChecker { | class SignatureExtractorChecker final : public BaseSignatureChecker { | ||||
private: | private: | ||||
SignatureData &sigdata; | SignatureData &sigdata; | ||||
BaseSignatureChecker &checker; | BaseSignatureChecker &checker; | ||||
public: | public: | ||||
SignatureExtractorChecker(SignatureData &sigdata_, | SignatureExtractorChecker(SignatureData &sigdata_, | ||||
BaseSignatureChecker &checker_) | BaseSignatureChecker &checker_) | ||||
: sigdata(sigdata_), checker(checker_) {} | : sigdata(sigdata_), checker(checker_) {} | ||||
bool CheckSig(const std::vector<uint8_t> &scriptSig, | bool CheckSig(const std::vector<uint8_t> &scriptSig, | ||||
const std::vector<uint8_t> &vchPubKey, | const std::vector<uint8_t> &vchPubKey, | ||||
const CScript &scriptCode, uint32_t flags) const override; | const CScript &scriptCode, uint32_t flags) const override { | ||||
}; | |||||
bool SignatureExtractorChecker::CheckSig(const std::vector<uint8_t> &scriptSig, | |||||
const std::vector<uint8_t> &vchPubKey, | |||||
const CScript &scriptCode, | |||||
uint32_t flags) const { | |||||
if (checker.CheckSig(scriptSig, vchPubKey, scriptCode, flags)) { | if (checker.CheckSig(scriptSig, vchPubKey, scriptCode, flags)) { | ||||
CPubKey pubkey(vchPubKey); | CPubKey pubkey(vchPubKey); | ||||
sigdata.signatures.emplace(pubkey.GetID(), SigPair(pubkey, scriptSig)); | |||||
sigdata.signatures.emplace(pubkey.GetID(), | |||||
SigPair(pubkey, scriptSig)); | |||||
return true; | return true; | ||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
}; | |||||
namespace { | |||||
struct Stacks { | struct Stacks { | ||||
std::vector<valtype> script; | std::vector<valtype> script; | ||||
Stacks() = delete; | Stacks() = delete; | ||||
Stacks(const Stacks &) = delete; | Stacks(const Stacks &) = delete; | ||||
explicit Stacks(const SignatureData &data) { | explicit Stacks(const SignatureData &data) { | ||||
if (data.scriptSig.IsPushOnly()) { | if (data.scriptSig.IsPushOnly()) { | ||||
EvalScript(script, data.scriptSig, SCRIPT_VERIFY_NONE, | EvalScript(script, data.scriptSig, SCRIPT_VERIFY_NONE, | ||||
▲ Show 20 Lines • Show All 173 Lines • Show Last 20 Lines |