LCOV - code coverage report
Current view: top level - src/script - sign.h (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 6 7 85.7 %
Date: 2015-10-12 22:39:14 Functions: 1 10 10.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2009-2010 Satoshi Nakamoto
       2             : // Copyright (c) 2009-2014 The Bitcoin Core developers
       3             : // Distributed under the MIT software license, see the accompanying
       4             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       5             : 
       6             : #ifndef BITCOIN_SCRIPT_SIGN_H
       7             : #define BITCOIN_SCRIPT_SIGN_H
       8             : 
       9             : #include "script/interpreter.h"
      10             : 
      11             : class CKeyID;
      12             : class CKeyStore;
      13             : class CScript;
      14             : class CTransaction;
      15             : 
      16             : struct CMutableTransaction;
      17             : 
      18             : /** Virtual base class for signature creators. */
      19             : class BaseSignatureCreator {
      20             : protected:
      21             :     const CKeyStore* keystore;
      22             : 
      23             : public:
      24         923 :     BaseSignatureCreator(const CKeyStore* keystoreIn) : keystore(keystoreIn) {}
      25           0 :     const CKeyStore& KeyStore() const { return *keystore; };
      26         923 :     virtual ~BaseSignatureCreator() {}
      27             :     virtual const BaseSignatureChecker& Checker() const =0;
      28             : 
      29             :     /** Create a singular (non-script) signature. */
      30             :     virtual bool CreateSig(std::vector<unsigned char>& vchSig, const CKeyID& keyid, const CScript& scriptCode) const =0;
      31             : };
      32             : 
      33             : /** A signature creator for transactions. */
      34        2205 : class TransactionSignatureCreator : public BaseSignatureCreator {
      35             :     const CTransaction* txTo;
      36             :     unsigned int nIn;
      37             :     int nHashType;
      38             :     const TransactionSignatureChecker checker;
      39             : 
      40             : public:
      41             :     TransactionSignatureCreator(const CKeyStore* keystoreIn, const CTransaction* txToIn, unsigned int nInIn, int nHashTypeIn=SIGHASH_ALL);
      42         730 :     const BaseSignatureChecker& Checker() const { return checker; }
      43             :     bool CreateSig(std::vector<unsigned char>& vchSig, const CKeyID& keyid, const CScript& scriptCode) const;
      44             : };
      45             : 
      46             : /** A signature creator that just produces 72-byte empty signatyres. */
      47         376 : class DummySignatureCreator : public BaseSignatureCreator {
      48             : public:
      49         376 :     DummySignatureCreator(const CKeyStore* keystoreIn) : BaseSignatureCreator(keystoreIn) {}
      50             :     const BaseSignatureChecker& Checker() const;
      51             :     bool CreateSig(std::vector<unsigned char>& vchSig, const CKeyID& keyid, const CScript& scriptCode) const;
      52             : };
      53             : 
      54             : /** Produce a script signature using a generic signature creator. */
      55             : bool ProduceSignature(const BaseSignatureCreator& creator, const CScript& scriptPubKey, CScript& scriptSig);
      56             : 
      57             : /** Produce a script signature for a transaction. */
      58             : bool SignSignature(const CKeyStore& keystore, const CScript& fromPubKey, CMutableTransaction& txTo, unsigned int nIn, int nHashType=SIGHASH_ALL);
      59             : bool SignSignature(const CKeyStore& keystore, const CTransaction& txFrom, CMutableTransaction& txTo, unsigned int nIn, int nHashType=SIGHASH_ALL);
      60             : 
      61             : /** Combine two script signatures using a generic signature checker, intelligently, possibly with OP_0 placeholders. */
      62             : CScript CombineSignatures(const CScript& scriptPubKey, const BaseSignatureChecker& checker, const CScript& scriptSig1, const CScript& scriptSig2);
      63             : 
      64             : /** Combine two script signatures on transactions. */
      65             : CScript CombineSignatures(const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, const CScript& scriptSig1, const CScript& scriptSig2);
      66             : 
      67             : #endif // BITCOIN_SCRIPT_SIGN_H

Generated by: LCOV version 1.11