Master Core  v0.0.9 - 2abfd2849db8ba7a83957c64eb976b406713c123
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
keystore.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2013 The Bitcoin developers
3 // Distributed under the MIT/X11 software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_KEYSTORE_H
7 #define BITCOIN_KEYSTORE_H
8 
9 #include "key.h"
10 #include "sync.h"
11 
12 #include <boost/signals2/signal.hpp>
13 
14 class CScript;
15 
17 class CKeyStore
18 {
19 protected:
21 
22 public:
23  virtual ~CKeyStore() {}
24 
25  // Add a key to the store.
26  virtual bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey) =0;
27  virtual bool AddKey(const CKey &key);
28 
29  // Check whether a key corresponding to a given address is present in the store.
30  virtual bool HaveKey(const CKeyID &address) const =0;
31  virtual bool GetKey(const CKeyID &address, CKey& keyOut) const =0;
32  virtual void GetKeys(std::set<CKeyID> &setAddress) const =0;
33  virtual bool GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const;
34 
35  // Support for BIP 0013 : see https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki
36  virtual bool AddCScript(const CScript& redeemScript) =0;
37  virtual bool HaveCScript(const CScriptID &hash) const =0;
38  virtual bool GetCScript(const CScriptID &hash, CScript& redeemScriptOut) const =0;
39 };
40 
41 typedef std::map<CKeyID, CKey> KeyMap;
42 typedef std::map<CScriptID, CScript > ScriptMap;
43 
45 class CBasicKeyStore : public CKeyStore
46 {
47 protected:
50 
51 public:
52  bool AddKeyPubKey(const CKey& key, const CPubKey &pubkey);
53  bool HaveKey(const CKeyID &address) const
54  {
55  bool result;
56  {
58  result = (mapKeys.count(address) > 0);
59  }
60  return result;
61  }
62  void GetKeys(std::set<CKeyID> &setAddress) const
63  {
64  setAddress.clear();
65  {
67  KeyMap::const_iterator mi = mapKeys.begin();
68  while (mi != mapKeys.end())
69  {
70  setAddress.insert((*mi).first);
71  mi++;
72  }
73  }
74  }
75  bool GetKey(const CKeyID &address, CKey &keyOut) const
76  {
77  {
79  KeyMap::const_iterator mi = mapKeys.find(address);
80  if (mi != mapKeys.end())
81  {
82  keyOut = mi->second;
83  return true;
84  }
85  }
86  return false;
87  }
88  virtual bool AddCScript(const CScript& redeemScript);
89  virtual bool HaveCScript(const CScriptID &hash) const;
90  virtual bool GetCScript(const CScriptID &hash, CScript& redeemScriptOut) const;
91 };
92 
93 typedef std::vector<unsigned char, secure_allocator<unsigned char> > CKeyingMaterial;
94 typedef std::map<CKeyID, std::pair<CPubKey, std::vector<unsigned char> > > CryptedKeyMap;
95 
96 #endif
CCriticalSection cs_KeyStore
Definition: keystore.h:20
virtual bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey)=0
void GetKeys(std::set< CKeyID > &setAddress) const
Definition: keystore.h:62
std::map< CScriptID, CScript > ScriptMap
Definition: keystore.h:42
bool HaveKey(const CKeyID &address) const
Definition: keystore.h:53
std::vector< unsigned char, secure_allocator< unsigned char > > CKeyingMaterial
Definition: keystore.h:93
std::map< CKeyID, std::pair< CPubKey, std::vector< unsigned char > > > CryptedKeyMap
Definition: keystore.h:94
bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey)
Definition: keystore.cpp:27
virtual bool AddCScript(const CScript &redeemScript)=0
virtual bool HaveCScript(const CScriptID &hash) const =0
virtual bool AddCScript(const CScript &redeemScript)
Definition: keystore.cpp:34
bool GetKey(const CKeyID &address, CKey &keyOut) const
Definition: keystore.h:75
virtual bool GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const
Definition: keystore.cpp:14
#define LOCK(cs)
Definition: sync.h:156
virtual bool HaveKey(const CKeyID &address) const =0
An encapsulated public key.
Definition: key.h:42
ScriptMap mapScripts
Definition: keystore.h:49
virtual bool GetKey(const CKeyID &address, CKey &keyOut) const =0
virtual bool AddKey(const CKey &key)
Definition: keystore.cpp:23
KeyMap mapKeys
Definition: keystore.h:48
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:401
A virtual base class for key stores.
Definition: keystore.h:17
A reference to a CKey: the Hash160 of its serialized public key.
Definition: key.h:26
virtual bool GetCScript(const CScriptID &hash, CScript &redeemScriptOut) const
Definition: keystore.cpp:50
virtual ~CKeyStore()
Definition: keystore.h:23
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: key.h:34
virtual void GetKeys(std::set< CKeyID > &setAddress) const =0
An encapsulated private key.
Definition: key.h:179
std::map< CKeyID, CKey > KeyMap
Definition: keystore.h:41
Basic key store, that keeps keys in an address->secret map.
Definition: keystore.h:45
virtual bool HaveCScript(const CScriptID &hash) const
Definition: keystore.cpp:44
virtual bool GetCScript(const CScriptID &hash, CScript &redeemScriptOut) const =0