]> Git Repo - VerusCoin.git/blame - src/script/sign.h
Merge pull request #97 from miketout/dev
[VerusCoin.git] / src / script / sign.h
CommitLineData
e088d65a 1// Copyright (c) 2009-2010 Satoshi Nakamoto
f914f1a7 2// Copyright (c) 2009-2014 The Bitcoin Core developers
2d79bba3 3// Distributed under the MIT software license, see the accompanying
bc909a7a 4// file COPYING or https://www.opensource.org/licenses/mit-license.php .
e088d65a 5
84738627
PJ
6#ifndef BITCOIN_SCRIPT_SIGN_H
7#define BITCOIN_SCRIPT_SIGN_H
e088d65a 8
9#include "script/interpreter.h"
10
8a727a26 11class CKey;
18051c7f 12class CKeyID;
e088d65a 13class CKeyStore;
14class CScript;
15class CTransaction;
2d79bba3 16
e088d65a 17struct CMutableTransaction;
18
18051c7f
PW
19/** Virtual base class for signature creators. */
20class BaseSignatureCreator {
21protected:
22 const CKeyStore* keystore;
23
24public:
25 BaseSignatureCreator(const CKeyStore* keystoreIn) : keystore(keystoreIn) {}
11f4f605 26 const bool IsKeystoreValid() const { return keystore != NULL; }
27 const CKeyStore& KeyStore() const { return *keystore; }
18051c7f
PW
28 virtual ~BaseSignatureCreator() {}
29 virtual const BaseSignatureChecker& Checker() const =0;
30
31 /** Create a singular (non-script) signature. */
8a727a26 32 virtual bool CreateSig(std::vector<unsigned char>& vchSig,
33 const CKeyID& keyid,
34 const CScript& scriptCode,
35 uint32_t consensusBranchId,
36 CKey *key = NULL,
37 void *extraData = NULL) const = 0;
18051c7f
PW
38};
39
40/** A signature creator for transactions. */
41class TransactionSignatureCreator : public BaseSignatureCreator {
42 const CTransaction* txTo;
43 unsigned int nIn;
44 int nHashType;
c86a1cb8 45 CAmount amount;
18051c7f
PW
46 const TransactionSignatureChecker checker;
47
48public:
c86a1cb8 49 TransactionSignatureCreator(const CKeyStore* keystoreIn, const CTransaction* txToIn, unsigned int nInIn, const CAmount& amountIn, int nHashTypeIn=SIGHASH_ALL);
a4f9bc97 50 TransactionSignatureCreator(const CKeyStore* keystoreIn, const CTransaction* txToIn, unsigned int nInIn, const CAmount& amountIn, const CScript &scriptPubKey, uint32_t spendHeight=INT32_MAX, int nHashTypeIn=SIGHASH_ALL);
18051c7f 51 const BaseSignatureChecker& Checker() const { return checker; }
8a727a26 52 bool CreateSig(std::vector<unsigned char>& vchSig, const CKeyID& keyid, const CScript& scriptCode, uint32_t consensusBranchId, CKey *key = NULL, void *extraData = NULL) const;
157a5d0d
PW
53};
54
55class MutableTransactionSignatureCreator : public TransactionSignatureCreator {
56 CTransaction tx;
57
58public:
a4f9bc97 59 MutableTransactionSignatureCreator(const CKeyStore* keystoreIn, const CMutableTransaction* txToIn, unsigned int nInIn, const CAmount& amount, const CScript &scriptPubKey, uint32_t spendHeight=INT32_MAX, int nHashTypeIn=SIGHASH_ALL)
60 : TransactionSignatureCreator(keystoreIn, &tx, nInIn, amount, scriptPubKey, spendHeight, nHashTypeIn), tx(*txToIn) {}
18051c7f
PW
61};
62
c938fb1f 63/** A signature creator that just produces 72-byte empty signatures. */
18e804a9
PW
64class DummySignatureCreator : public BaseSignatureCreator {
65public:
66 DummySignatureCreator(const CKeyStore* keystoreIn) : BaseSignatureCreator(keystoreIn) {}
67 const BaseSignatureChecker& Checker() const;
8a727a26 68 bool CreateSig(std::vector<unsigned char>& vchSig, const CKeyID& keyid, const CScript& scriptCode, uint32_t consensusBranchId, CKey *key = NULL, void *extraData = NULL) const;
157a5d0d
PW
69};
70
71struct SignatureData {
72 CScript scriptSig;
157a5d0d
PW
73
74 SignatureData() {}
75 explicit SignatureData(const CScript& script) : scriptSig(script) {}
18e804a9
PW
76};
77
18051c7f 78/** Produce a script signature using a generic signature creator. */
be126699 79bool ProduceSignature(const BaseSignatureCreator& creator, const CScript& scriptPubKey, SignatureData& sigdata, uint32_t consensusBranchId);
18051c7f
PW
80
81/** Produce a script signature for a transaction. */
d55e5e77
JG
82bool SignSignature(
83 const CKeyStore &keystore,
84 const CScript& fromPubKey,
85 CMutableTransaction& txTo,
86 unsigned int nIn,
87 const CAmount& amount,
88 int nHashType,
89 uint32_t consensusBranchId);
90bool SignSignature(
91 const CKeyStore& keystore,
92 const CTransaction& txFrom,
93 CMutableTransaction& txTo,
94 unsigned int nIn,
95 int nHashType,
96 uint32_t consensusBranchId);
e088d65a 97
18051c7f 98/** Combine two script signatures using a generic signature checker, intelligently, possibly with OP_0 placeholders. */
d55e5e77
JG
99SignatureData CombineSignatures(
100 const CScript& scriptPubKey,
101 const BaseSignatureChecker& checker,
102 const SignatureData& scriptSig1,
103 const SignatureData& scriptSig2,
104 uint32_t consensusBranchId);
18051c7f 105
157a5d0d
PW
106/** Extract signature data from a transaction, and insert it. */
107SignatureData DataFromTransaction(const CMutableTransaction& tx, unsigned int nIn);
108void UpdateTransaction(CMutableTransaction& tx, unsigned int nIn, const SignatureData& data);
e088d65a 109
84738627 110#endif // BITCOIN_SCRIPT_SIGN_H
This page took 0.190067 seconds and 4 git commands to generate.