6 #ifndef BITCOIN_SCRIPT_SIGN_H 7 #define BITCOIN_SCRIPT_SIGN_H 55 typedef std::pair<CPubKey, std::vector<unsigned char>>
SigPair;
61 bool complete =
false;
81 template<
typename Stream,
typename...
X>
89 template<
typename Stream,
typename...
X>
93 size_t remaining_before = s.size();
95 size_t remaining_after = s.size();
96 if (remaining_after + expected_size != remaining_before) {
97 throw std::ios_base::failure(
"Size of value was not the stated size");
102 template<
typename Stream>
103 void DeserializeHDKeypaths(Stream& s,
const std::vector<unsigned char>& key, std::map<CPubKey, KeyOriginInfo>& hd_keypaths)
107 throw std::ios_base::failure(
"Size of key was not the expected size for the type BIP32 keypath");
110 CPubKey pubkey(key.begin() + 1, key.end());
111 if (!pubkey.IsFullyValid()) {
112 throw std::ios_base::failure(
"Invalid pubkey");
114 if (hd_keypaths.count(pubkey) > 0) {
115 throw std::ios_base::failure(
"Duplicate Key, pubkey derivation path already provided");
120 if (value_len % 4 || value_len == 0) {
121 throw std::ios_base::failure(
"Invalid length for HD key path");
126 for (
unsigned int i = 4; i < value_len; i +=
sizeof(uint32_t)) {
129 keypath.
path.push_back(index);
133 hd_keypaths.emplace(pubkey, std::move(keypath));
137 template<
typename Stream>
140 for (
auto keypath_pair : hd_keypaths) {
141 if (!keypath_pair.first.IsValid()) {
142 throw std::ios_base::failure(
"Invalid CPubKey being serialized");
145 WriteCompactSize(s, (keypath_pair.second.path.size() + 1) *
sizeof(uint32_t));
146 s << keypath_pair.second.fingerprint;
147 for (
const auto& path : keypath_pair.second.path) {
176 #endif // BITCOIN_SCRIPT_SIGN_H bool IsSegWitOutput(const SigningProvider &provider, const CScript &script)
Check whether a scriptPubKey is known to be segwit.
bool IsSolvable(const SigningProvider &provider, const CScript &script)
unsigned char fingerprint[4]
First 32 bits of the Hash160 of the public key at the root of the path.
static constexpr unsigned int SIZE
secp256k1:
CScript witness_script
The witnessScript (if any) for the input. witnessScripts are used in P2WSH outputs.
void SerializeToVector(Stream &s, const X &... args)
virtual bool CreateSig(const SigningProvider &provider, std::vector< unsigned char > &vchSig, const CKeyID &keyid, const CScript &scriptCode, SigVersion sigversion) const =0
Create a singular (non-script) signature.
uint64_t ReadCompactSize(Stream &is, bool range_check=true)
Decode a CompactSize-encoded variable-length integer.
void WriteCompactSize(CSizeComputer &os, uint64_t nSize)
const MutableTransactionSignatureChecker checker
SignatureData DataFromTransaction(const CMutableTransaction &tx, unsigned int nIn, const CTxOut &txout)
Extract signature data from a transaction input, and insert it.
CScript scriptSig
The scriptSig of an input. Contains complete signatures or the traditional partial signatures format...
std::vector< CKeyID > missing_sigs
KeyIDs of pubkeys for signatures which could not be found.
const BaseSignatureCreator & DUMMY_SIGNATURE_CREATOR
A signature creator that just produces 71-byte empty signatures.
Interface for signature creators.
std::vector< CKeyID > missing_pubkeys
KeyIDs of pubkeys which could not be found.
const BaseSignatureChecker & Checker() const override
std::map< CKeyID, std::pair< CPubKey, KeyOriginInfo > > misc_pubkeys
A signature creator for transactions.
uint256 missing_witness_script
SHA256 of the missing witnessScript (if any)
void DeserializeHDKeypaths(Stream &s, const std::vector< unsigned char > &key, std::map< CPubKey, KeyOriginInfo > &hd_keypaths)
void UnserializeMany(Stream &s)
void UnserializeFromVector(Stream &s, X &... args)
bool ProduceSignature(const SigningProvider &provider, const BaseSignatureCreator &creator, const CScript &scriptPubKey, SignatureData &sigdata)
Produce a script signature using a generic signature creator.
int64_t CAmount
Amount in satoshis (Can be negative)
SignatureData(const CScript &script)
void UpdateInput(CTxIn &input, const SignatureData &data)
uint160 missing_redeem_script
ScriptID of the missing redeemScript (if any)
static constexpr unsigned int COMPRESSED_SIZE
An input of a transaction.
An encapsulated public key.
std::pair< CPubKey, std::vector< unsigned char > > SigPair
An output of a transaction.
const BaseSignatureCreator & DUMMY_MAXIMUM_SIGNATURE_CREATOR
A signature creator that just produces 72-byte empty signatures.
void SerializeMany(Stream &s)
CScriptWitness scriptWitness
The scriptWitness of an input. Contains complete signatures or the traditional partial signatures for...
An interface to be implemented by keystores that support signing.
bool SignSignature(const SigningProvider &provider, const CScript &fromPubKey, CMutableTransaction &txTo, unsigned int nIn, const CAmount &amount, int nHashType)
Produce a script signature for a transaction.
void SerializeHDKeypaths(Stream &s, const std::map< CPubKey, KeyOriginInfo > &hd_keypaths, uint8_t type)
virtual ~BaseSignatureCreator()
Serialized script, used inside transaction inputs and outputs.
A reference to a CKey: the Hash160 of its serialized public key.
size_t GetSerializeSizeMany(int nVersion, const T &... t)
A reference to a CScript: the Hash160 of its serialization (see script.h)
A mutable version of CTransaction.
An encapsulated private key.
The basic transaction that is broadcasted on the network and contained in blocks. ...
std::vector< uint32_t > path
CScript redeem_script
The redeemScript (if any) for the input.
std::map< CKeyID, SigPair > signatures
BIP 174 style partial signatures for the input. May contain all signatures necessary for producing a ...
virtual const BaseSignatureChecker & Checker() const =0
const CMutableTransaction * txTo
bool SignTransaction(CMutableTransaction &mtx, const SigningProvider *provider, const std::map< COutPoint, Coin > &coins, int sighash, std::map< int, std::string > &input_errors)
Sign the CMutableTransaction.
Span< A > constexpr MakeSpan(A(&a)[N])
MakeSpan for arrays: