Anoncoin  0.9.4
P2P Digital Currency
keystore.cpp
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2013 The Bitcoin developers
3 // Copyright (c) 2013-2014 The Anoncoin Core developers
4 // Distributed under the MIT/X11 software license, see the accompanying
5 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
6 
7 #include "keystore.h"
8 
9 #include "crypter.h"
10 #include "key.h"
11 #include "script.h"
12 
13 #include <boost/foreach.hpp>
14 
15 bool CKeyStore::GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const
16 {
17  CKey key;
18  if (!GetKey(address, key))
19  return false;
20  vchPubKeyOut = key.GetPubKey();
21  return true;
22 }
23 
24 bool CKeyStore::AddKey(const CKey &key) {
25  return AddKeyPubKey(key, key.GetPubKey());
26 }
27 
28 bool CBasicKeyStore::AddKeyPubKey(const CKey& key, const CPubKey &pubkey)
29 {
31  mapKeys[pubkey.GetID()] = key;
32  return true;
33 }
34 
35 bool CBasicKeyStore::AddCScript(const CScript& redeemScript)
36 {
37  if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE)
38  return error("CBasicKeyStore::AddCScript() : redeemScripts > %i bytes are invalid", MAX_SCRIPT_ELEMENT_SIZE);
39 
41  mapScripts[redeemScript.GetID()] = redeemScript;
42  return true;
43 }
44 
45 bool CBasicKeyStore::HaveCScript(const CScriptID& hash) const
46 {
48  return mapScripts.count(hash) > 0;
49 }
50 
51 bool CBasicKeyStore::GetCScript(const CScriptID &hash, CScript& redeemScriptOut) const
52 {
54  ScriptMap::const_iterator mi = mapScripts.find(hash);
55  if (mi != mapScripts.end())
56  {
57  redeemScriptOut = (*mi).second;
58  return true;
59  }
60  return false;
61 }
62 
64 {
66  setWatchOnly.insert(dest);
67  return true;
68 }
69 
71 {
73  setWatchOnly.erase(dest);
74  return true;
75 }
76 
77 bool CBasicKeyStore::HaveWatchOnly(const CScript &dest) const
78 {
80  return setWatchOnly.count(dest) > 0;
81 }
82 
84 {
86  return (!setWatchOnly.empty());
87 }
CCriticalSection cs_KeyStore
Definition: keystore.h:31
virtual bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey)=0
virtual bool HaveWatchOnly() const
Definition: keystore.cpp:83
bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey)
Definition: keystore.cpp:28
virtual bool AddCScript(const CScript &redeemScript)
Definition: keystore.cpp:35
virtual bool GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const
Definition: keystore.cpp:15
CPubKey GetPubKey() const
Definition: key.cpp:397
#define LOCK(cs)
Definition: sync.h:157
An encapsulated public key.
Definition: key.h:43
ScriptMap mapScripts
Definition: keystore.h:67
virtual bool GetKey(const CKeyID &address, CKey &keyOut) const =0
virtual bool RemoveWatchOnly(const CScript &dest)
Definition: keystore.cpp:70
WatchOnlySet setWatchOnly
Definition: keystore.h:68
virtual bool AddKey(const CKey &key)
Definition: keystore.cpp:24
KeyMap mapKeys
Definition: keystore.h:66
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:413
A reference to a CKey: the Hash160 of its serialized public key.
Definition: key.h:27
CScriptID GetID() const
Definition: script.h:720
virtual bool GetCScript(const CScriptID &hash, CScript &redeemScriptOut) const
Definition: keystore.cpp:51
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: key.h:35
An encapsulated private key.
Definition: key.h:180
CKeyID GetID() const
Definition: key.h:132
virtual bool HaveCScript(const CScriptID &hash) const
Definition: keystore.cpp:45
virtual bool AddWatchOnly(const CScript &dest)
Definition: keystore.cpp:63