Changeset View
Changeset View
Standalone View
Standalone View
src/script/sign.h
Show All 20 Lines | |||||
public: | public: | ||||
virtual ~SigningProvider() {} | virtual ~SigningProvider() {} | ||||
virtual bool GetCScript(const CScriptID &scriptid, | virtual bool GetCScript(const CScriptID &scriptid, | ||||
CScript &script) const = 0; | CScript &script) const = 0; | ||||
virtual bool GetPubKey(const CKeyID &address, CPubKey &pubkey) const = 0; | virtual bool GetPubKey(const CKeyID &address, CPubKey &pubkey) const = 0; | ||||
virtual bool GetKey(const CKeyID &address, CKey &key) const = 0; | virtual bool GetKey(const CKeyID &address, CKey &key) const = 0; | ||||
}; | }; | ||||
/** Virtual base class for signature creators. */ | /** Interface for signature creators. */ | ||||
class BaseSignatureCreator { | class BaseSignatureCreator { | ||||
protected: | |||||
const SigningProvider *m_provider; | |||||
public: | public: | ||||
explicit BaseSignatureCreator(const SigningProvider *provider) | |||||
: m_provider(provider) {} | |||||
const SigningProvider &Provider() const { return *m_provider; } | |||||
virtual ~BaseSignatureCreator() {} | virtual ~BaseSignatureCreator() {} | ||||
virtual const BaseSignatureChecker &Checker() const = 0; | virtual const BaseSignatureChecker &Checker() const = 0; | ||||
/** Create a singular (non-script) signature. */ | /** Create a singular (non-script) signature. */ | ||||
virtual bool CreateSig(std::vector<uint8_t> &vchSig, const CKeyID &keyid, | virtual bool CreateSig(const SigningProvider &provider, | ||||
std::vector<uint8_t> &vchSig, const CKeyID &keyid, | |||||
const CScript &scriptCode) const = 0; | const CScript &scriptCode) const = 0; | ||||
}; | }; | ||||
/** A signature creator for transactions. */ | /** A signature creator for transactions. */ | ||||
class TransactionSignatureCreator : public BaseSignatureCreator { | class TransactionSignatureCreator : public BaseSignatureCreator { | ||||
const CTransaction *txTo; | const CTransaction *txTo; | ||||
unsigned int nIn; | unsigned int nIn; | ||||
Amount amount; | Amount amount; | ||||
SigHashType sigHashType; | SigHashType sigHashType; | ||||
const TransactionSignatureChecker checker; | const TransactionSignatureChecker checker; | ||||
public: | public: | ||||
TransactionSignatureCreator(const SigningProvider *provider, | TransactionSignatureCreator(const CTransaction *txToIn, unsigned int nInIn, | ||||
const CTransaction *txToIn, unsigned int nInIn, | |||||
const Amount amountIn, | const Amount amountIn, | ||||
SigHashType sigHashTypeIn = SigHashType()); | SigHashType sigHashTypeIn = SigHashType()); | ||||
const BaseSignatureChecker &Checker() const override { return checker; } | const BaseSignatureChecker &Checker() const override { return checker; } | ||||
bool CreateSig(std::vector<uint8_t> &vchSig, const CKeyID &keyid, | bool CreateSig(const SigningProvider &provider, | ||||
std::vector<uint8_t> &vchSig, const CKeyID &keyid, | |||||
const CScript &scriptCode) const override; | const CScript &scriptCode) const override; | ||||
}; | }; | ||||
class MutableTransactionSignatureCreator : public TransactionSignatureCreator { | class MutableTransactionSignatureCreator : public TransactionSignatureCreator { | ||||
CTransaction tx; | CTransaction tx; | ||||
public: | public: | ||||
MutableTransactionSignatureCreator(const SigningProvider *provider, | MutableTransactionSignatureCreator(const CMutableTransaction *txToIn, | ||||
const CMutableTransaction *txToIn, | |||||
unsigned int nInIn, | unsigned int nInIn, | ||||
const Amount amountIn, | const Amount amountIn, | ||||
SigHashType sigHashTypeIn) | SigHashType sigHashTypeIn) | ||||
: TransactionSignatureCreator(provider, &tx, nInIn, amountIn, | : TransactionSignatureCreator(&tx, nInIn, amountIn, sigHashTypeIn), | ||||
sigHashTypeIn), | |||||
tx(*txToIn) {} | tx(*txToIn) {} | ||||
}; | }; | ||||
/** A signature creator that just produces 72-byte empty signatures. */ | /** A signature creator that just produces 72-byte empty signatures. */ | ||||
class DummySignatureCreator : public BaseSignatureCreator { | extern const BaseSignatureCreator &DUMMY_SIGNATURE_CREATOR; | ||||
public: | |||||
explicit DummySignatureCreator(const SigningProvider *provider) | |||||
: BaseSignatureCreator(provider) {} | |||||
const BaseSignatureChecker &Checker() const override; | |||||
bool CreateSig(std::vector<uint8_t> &vchSig, const CKeyID &keyid, | |||||
const CScript &scriptCode) const override; | |||||
}; | |||||
struct SignatureData { | struct SignatureData { | ||||
CScript scriptSig; | CScript scriptSig; | ||||
SignatureData() {} | SignatureData() {} | ||||
explicit SignatureData(const CScript &script) : scriptSig(script) {} | explicit SignatureData(const CScript &script) : scriptSig(script) {} | ||||
}; | }; | ||||
/** Produce a script signature using a generic signature creator. */ | /** Produce a script signature using a generic signature creator. */ | ||||
bool ProduceSignature(const BaseSignatureCreator &creator, | bool ProduceSignature(const SigningProvider &provider, | ||||
const BaseSignatureCreator &creator, | |||||
const CScript &scriptPubKey, SignatureData &sigdata); | const CScript &scriptPubKey, SignatureData &sigdata); | ||||
/** Produce a script signature for a transaction. */ | /** Produce a script signature for a transaction. */ | ||||
bool SignSignature(const SigningProvider &provider, const CScript &fromPubKey, | bool SignSignature(const SigningProvider &provider, const CScript &fromPubKey, | ||||
CMutableTransaction &txTo, unsigned int nIn, | CMutableTransaction &txTo, unsigned int nIn, | ||||
const Amount amount, SigHashType sigHashType); | const Amount amount, SigHashType sigHashType); | ||||
bool SignSignature(const SigningProvider &provider, const CTransaction &txFrom, | bool SignSignature(const SigningProvider &provider, const CTransaction &txFrom, | ||||
CMutableTransaction &txTo, unsigned int nIn, | CMutableTransaction &txTo, unsigned int nIn, | ||||
Show All 17 Lines |