PRCYCoin  2.0.0.7rc1
P2P Digital Currency
keystore.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2014 The Bitcoin 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_KEYSTORE_H
7 #define BITCOIN_KEYSTORE_H
8 
9 #include "key.h"
10 #include "hdchain.h"
11 #include "pubkey.h"
12 #include "sync.h"
13 
14 #include <boost/signals2/signal.hpp>
15 #include <boost/variant.hpp>
16 
17 class CScript;
18 class CScriptID;
19 
21 class CKeyStore
22 {
23 protected:
25 
26 public:
27  virtual ~CKeyStore() {}
28 
30  virtual bool AddKeyPubKey(const CKey& key, const CPubKey& pubkey) = 0;
31  virtual bool AddKey(const CKey& key);
32 
34  virtual bool HaveKey(const CKeyID& address) const = 0;
35  virtual bool GetKey(const CKeyID& address, CKey& keyOut) const = 0;
36  virtual void GetKeys(std::set<CKeyID>& setAddress) const = 0;
37  virtual bool GetPubKey(const CKeyID& address, CPubKey& vchPubKeyOut) const;
38 
40  virtual bool AddCScript(const CScript& redeemScript) = 0;
41  virtual bool HaveCScript(const CScriptID& hash) const = 0;
42  virtual bool GetCScript(const CScriptID& hash, CScript& redeemScriptOut) const = 0;
43 
45  virtual bool AddWatchOnly(const CScript& dest) = 0;
46  virtual bool RemoveWatchOnly(const CScript& dest) = 0;
47  virtual bool HaveWatchOnly(const CScript& dest) const = 0;
48  virtual bool HaveWatchOnly() const = 0;
49 };
50 
51 typedef std::map<CKeyID, CKey> KeyMap;
52 typedef std::map<CScriptID, CScript> ScriptMap;
53 typedef std::set<CScript> WatchOnlySet;
54 typedef std::set<CScript> MultiSigScriptSet;
55 
57 class CBasicKeyStore : public CKeyStore
58 {
59 protected:
65 
66 public:
67  bool AddKeyPubKey(const CKey& key, const CPubKey& pubkey);
68  bool HaveKey(const CKeyID& address) const
69  {
70  bool result;
71  {
73  result = (mapKeys.count(address) > 0);
74  }
75  return result;
76  }
77  void GetKeys(std::set<CKeyID>& setAddress) const
78  {
79  setAddress.clear();
80  {
82  KeyMap::const_iterator mi = mapKeys.begin();
83  while (mi != mapKeys.end()) {
84  setAddress.insert((*mi).first);
85  mi++;
86  }
87  }
88  }
89  bool GetKey(const CKeyID& address, CKey& keyOut) const
90  {
91  {
93  KeyMap::const_iterator mi = mapKeys.find(address);
94  if (mi != mapKeys.end()) {
95  keyOut = mi->second;
96  return true;
97  }
98  }
99  return false;
100  }
101  virtual bool AddCScript(const CScript& redeemScript);
102  virtual bool HaveCScript(const CScriptID& hash) const;
103  virtual bool GetCScript(const CScriptID& hash, CScript& redeemScriptOut) const;
104 
105  virtual bool AddWatchOnly(const CScript& dest);
106  virtual bool RemoveWatchOnly(const CScript& dest);
107  virtual bool HaveWatchOnly(const CScript& dest) const;
108  virtual bool HaveWatchOnly() const;
109 };
110 
111 typedef std::vector<unsigned char, secure_allocator<unsigned char> > CKeyingMaterial;
112 typedef std::map<CKeyID, std::pair<CPubKey, std::vector<unsigned char> > > CryptedKeyMap;
113 
114 #endif // BITCOIN_KEYSTORE_H
CKeyingMaterial
std::vector< unsigned char, secure_allocator< unsigned char > > CKeyingMaterial
Definition: keystore.h:111
CKeyStore
A virtual base class for key stores.
Definition: keystore.h:21
CBasicKeyStore::GetKeys
void GetKeys(std::set< CKeyID > &setAddress) const
Definition: keystore.h:77
KeyMap
std::map< CKeyID, CKey > KeyMap
Definition: keystore.h:51
sync.h
CKeyStore::AddKeyPubKey
virtual bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey)=0
Add a key to the store.
CBasicKeyStore::HaveKey
bool HaveKey(const CKeyID &address) const
Check whether a key corresponding to a given address is present in the store.
Definition: keystore.h:68
AnnotatedMixin< std::recursive_mutex >
CKeyStore::GetPubKey
virtual bool GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const
Definition: keystore.cpp:13
CKeyID
A reference to a CKey: the Hash160 of its serialized public key.
Definition: pubkey.h:29
CKeyStore::HaveWatchOnly
virtual bool HaveWatchOnly() const =0
CKeyStore::HaveCScript
virtual bool HaveCScript(const CScriptID &hash) const =0
pubkey.h
CKeyStore::cs_KeyStore
RecursiveMutex cs_KeyStore
Definition: keystore.h:24
MultiSigScriptSet
std::set< CScript > MultiSigScriptSet
Definition: keystore.h:54
CKeyStore::~CKeyStore
virtual ~CKeyStore()
Definition: keystore.h:27
CBasicKeyStore::GetKey
bool GetKey(const CKeyID &address, CKey &keyOut) const
Definition: keystore.h:89
CKeyStore::GetCScript
virtual bool GetCScript(const CScriptID &hash, CScript &redeemScriptOut) const =0
CBasicKeyStore::RemoveWatchOnly
virtual bool RemoveWatchOnly(const CScript &dest)
Definition: keystore.cpp:68
CBasicKeyStore::setWatchOnly
WatchOnlySet setWatchOnly
Definition: keystore.h:62
CBasicKeyStore::AddKeyPubKey
bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey)
Add a key to the store.
Definition: keystore.cpp:27
CBasicKeyStore::hdChain
CHDChain hdChain
Definition: keystore.h:64
CBasicKeyStore::AddCScript
virtual bool AddCScript(const CScript &redeemScript)
Support for BIP 0013 : see https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki.
Definition: keystore.cpp:34
WatchOnlySet
std::set< CScript > WatchOnlySet
Definition: keystore.h:53
CryptedKeyMap
std::map< CKeyID, std::pair< CPubKey, std::vector< unsigned char > > > CryptedKeyMap
Definition: keystore.h:112
CKeyStore::HaveKey
virtual bool HaveKey(const CKeyID &address) const =0
Check whether a key corresponding to a given address is present in the store.
CScript
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:363
CBasicKeyStore::GetCScript
virtual bool GetCScript(const CScriptID &hash, CScript &redeemScriptOut) const
Definition: keystore.cpp:50
key.h
CKeyStore::GetKey
virtual bool GetKey(const CKeyID &address, CKey &keyOut) const =0
CPubKey
An encapsulated public key.
Definition: pubkey.h:37
CKey
An encapsulated private key.
Definition: key.h:39
CKeyStore::AddKey
virtual bool AddKey(const CKey &key)
Definition: keystore.cpp:22
CHDChain
Definition: hdchain.h:11
LOCK
#define LOCK(cs)
Definition: sync.h:182
CBasicKeyStore::mapScripts
ScriptMap mapScripts
Definition: keystore.h:61
key
CKey key
Definition: bip38tooldialog.cpp:173
CKeyStore::AddCScript
virtual bool AddCScript(const CScript &redeemScript)=0
Support for BIP 0013 : see https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki.
CBasicKeyStore::AddWatchOnly
virtual bool AddWatchOnly(const CScript &dest)
Support for Watch-only addresses.
Definition: keystore.cpp:61
hdchain.h
CKeyStore::AddWatchOnly
virtual bool AddWatchOnly(const CScript &dest)=0
Support for Watch-only addresses.
CBasicKeyStore
Basic key store, that keeps keys in an address->secret map.
Definition: keystore.h:57
CBasicKeyStore::HaveCScript
virtual bool HaveCScript(const CScriptID &hash) const
Definition: keystore.cpp:44
ScriptMap
std::map< CScriptID, CScript > ScriptMap
Definition: keystore.h:52
CBasicKeyStore::mapKeys
KeyMap mapKeys
Definition: keystore.h:60
CBasicKeyStore::HaveWatchOnly
virtual bool HaveWatchOnly() const
Definition: keystore.cpp:81
CBasicKeyStore::setMultiSig
MultiSigScriptSet setMultiSig
Definition: keystore.h:63
CScriptID
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: standard.h:20
CKeyStore::GetKeys
virtual void GetKeys(std::set< CKeyID > &setAddress) const =0
CKeyStore::RemoveWatchOnly
virtual bool RemoveWatchOnly(const CScript &dest)=0