6 #ifndef BITCOIN_SCRIPT_SIGN_H 7 #define BITCOIN_SCRIPT_SIGN_H 9 #include <boost/optional.hpp> 54 typedef std::pair<CPubKey, std::vector<unsigned char>>
SigPair;
80 template<
typename Stream,
typename...
X>
88 template<
typename Stream,
typename...
X>
92 size_t remaining_before = s.size();
94 size_t remaining_after = s.size();
95 if (remaining_after + expected_size != remaining_before) {
96 throw std::ios_base::failure(
"Size of value was not the stated size");
101 template<
typename Stream>
106 throw std::ios_base::failure(
"Size of key was not the expected size for the type BIP32 keypath");
110 if (!pubkey.IsFullyValid()) {
111 throw std::ios_base::failure(
"Invalid pubkey");
113 if (hd_keypaths.count(pubkey) > 0) {
114 throw std::ios_base::failure(
"Duplicate Key, pubkey derivation path already provided");
119 if (value_len % 4 || value_len == 0) {
120 throw std::ios_base::failure(
"Invalid length for HD key path");
125 for (
unsigned int i = 4; i < value_len; i +=
sizeof(
uint32_t)) {
128 keypath.
path.push_back(index);
132 hd_keypaths.emplace(pubkey, std::move(keypath));
136 template<
typename Stream>
139 for (
auto keypath_pair : hd_keypaths) {
140 if (!keypath_pair.first.IsValid()) {
141 throw std::ios_base::failure(
"Invalid CPubKey being serialized");
145 s << keypath_pair.second.fingerprint;
146 for (
const auto& path : keypath_pair.second.path) {
172 #endif // BITCOIN_SCRIPT_SIGN_H bool IsSegWitOutput(const SigningProvider &provider, const CScript &script)
Definition: sign.cpp:451
bool IsSolvable(const SigningProvider &provider, const CScript &script)
Definition: sign.cpp:432
Definition: transaction.h:366
CScript witness_script
The witnessScript (if any) for the input. witnessScripts are used in P2WSH outputs.
Definition: sign.h:64
Definition: transaction.h:63
void SerializeToVector(Stream &s, const X &... args)
Definition: sign.h:81
uint64_t ReadCompactSize(Stream &is)
Definition: serialize.h:289
CScript redeem_script
The redeemScript (if any) for the input.
Definition: sign.h:63
void WriteCompactSize(CSizeComputer &os, uint64_t nSize)
Definition: serialize.h:986
SignatureData DataFromTransaction(const CMutableTransaction &tx, unsigned int nIn, const CTxOut &txout)
Definition: sign.cpp:284
Definition: interpreter.h:166
std::vector< CKeyID > missing_sigs
KeyIDs of pubkeys for signatures which could not be found.
Definition: sign.h:69
unsigned int nIn
Definition: sign.h:38
const BaseSignatureCreator & DUMMY_SIGNATURE_CREATOR
Definition: sign.cpp:429
Definition: interpreter.h:24
SignatureData(const CScript &script)
Definition: sign.h:74
const CMutableTransaction * txTo
Definition: sign.h:37
static constexpr unsigned int COMPRESSED_PUBLIC_KEY_SIZE
Definition: pubkey.h:37
unsigned char uint8_t
Definition: stdint.h:19
constexpr Span< A > MakeSpan(A(&a)[N])
Definition: span.h:55
void DeserializeHDKeypaths(Stream &s, const std::vector< unsigned char > &key, std::map< CPubKey, KeyOriginInfo > &hd_keypaths)
Definition: sign.h:102
void UnserializeMany(Stream &s)
Definition: serialize.h:957
void UnserializeFromVector(Stream &s, X &... args)
Definition: sign.h:89
bool witness
Stores whether the input this SigData corresponds to is a witness input.
Definition: sign.h:61
bool ProduceSignature(const SigningProvider &provider, const BaseSignatureCreator &creator, const CScript &scriptPubKey, SignatureData &sigdata)
Definition: sign.cpp:191
int64_t CAmount
Definition: amount.h:12
CAmount amount
Definition: sign.h:40
args
Definition: filter-lcov.py:10
virtual bool CreateSig(const SigningProvider &provider, std::vector< unsigned char > &vchSig, const CKeyID &keyid, const CScript &scriptCode, SigVersion sigversion) const =0
void UpdateInput(CTxIn &input, const SignatureData &data)
Definition: sign.cpp:349
std::vector< uint32_t > path
Definition: keyorigin.h:15
static constexpr unsigned int PUBLIC_KEY_SIZE
Definition: pubkey.h:36
Definition: signingprovider.h:18
Definition: transaction.h:270
unsigned int uint32_t
Definition: stdint.h:21
void MergeSignatureData(SignatureData sigdata)
Definition: sign.cpp:355
unsigned long long uint64_t
Definition: stdint.h:22
virtual ~BaseSignatureCreator()
Definition: sign.h:28
std::pair< CPubKey, std::vector< unsigned char > > SigPair
Definition: sign.h:54
bool complete
Stores whether the scriptSig and scriptWitness are complete.
Definition: sign.h:60
const BaseSignatureCreator & DUMMY_MAXIMUM_SIGNATURE_CREATOR
Definition: sign.cpp:430
void SerializeMany(Stream &s)
Definition: serialize.h:945
bool CreateSig(const SigningProvider &provider, std::vector< unsigned char > &vchSig, const CKeyID &keyid, const CScript &scriptCode, SigVersion sigversion) const override
Definition: sign.cpp:19
MutableTransactionSignatureCreator(const CMutableTransaction *txToIn, unsigned int nInIn, const CAmount &amountIn, int nHashTypeIn=SIGHASH_ALL)
Definition: sign.cpp:17
std::map< CKeyID, SigPair > signatures
BIP 174 style partial signatures for the input. May contain all signatures necessary for producing a ...
Definition: sign.h:66
#define X(name)
Definition: net.cpp:493
Definition: keyorigin.h:12
std::vector< uint8_t > data
Definition: bech32.cpp:10
Definition: uint256.h:121
const MutableTransactionSignatureChecker checker
Definition: sign.h:41
Definition: interpreter.h:144
std::vector< CKeyID > missing_pubkeys
KeyIDs of pubkeys which could not be found.
Definition: sign.h:68
const BaseSignatureChecker & Checker() const override
Definition: sign.h:45
bool SignSignature(const SigningProvider &provider, const CScript &fromPubKey, CMutableTransaction &txTo, unsigned int nIn, const CAmount &amount, int nHashType)
Definition: sign.cpp:371
CScriptWitness scriptWitness
The scriptWitness of an input. Contains complete signatures or the traditional partial signatures for...
Definition: sign.h:65
void SerializeHDKeypaths(Stream &s, const std::map< CPubKey, KeyOriginInfo > &hd_keypaths, uint8_t type)
Definition: sign.h:137
std::map< CKeyID, std::pair< CPubKey, KeyOriginInfo > > misc_pubkeys
Definition: sign.h:67
Definition: standard.h:22
virtual const BaseSignatureChecker & Checker() const =0
size_t GetSerializeSizeMany(int nVersion, const T &... t)
Definition: serialize.h:998
Definition: uint256.h:110
uint256 missing_witness_script
SHA256 of the missing witnessScript (if any)
Definition: sign.h:71
uint160 missing_redeem_script
ScriptID of the missing redeemScript (if any)
Definition: sign.h:70
CScript scriptSig
The scriptSig of an input. Contains complete signatures or the traditional partial signatures format.
Definition: sign.h:62
int nHashType
Definition: sign.h:39
SignatureData()
Definition: sign.h:73
unsigned char fingerprint[4]
First 32 bits of the Hash160 of the public key at the root of the path.
Definition: keyorigin.h:14
SigVersion
Definition: interpreter.h:131
Definition: transaction.h:133