aboutsummaryrefslogtreecommitdiff
path: root/src/keystore.h
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2011-07-11 21:30:40 +0200
committerPieter Wuille <sipa@ulyssis.org>2011-12-17 21:49:47 +0100
commit93db3fceac1bfe274bc0fd906428a20e709e2da5 (patch)
treebcf91d8c05f2b5044de557c1ef8f832528bb0de0 /src/keystore.h
parent4c6e22953ef8ae0764576993088ec83d729d18f8 (diff)
downloadbitcoin-93db3fceac1bfe274bc0fd906428a20e709e2da5.tar.xz
Add GetSecret() and GetKeys() to CKeyStore
Diffstat (limited to 'src/keystore.h')
-rw-r--r--src/keystore.h59
1 files changed, 49 insertions, 10 deletions
diff --git a/src/keystore.h b/src/keystore.h
index 4d889146fc..3b91de6fb4 100644
--- a/src/keystore.h
+++ b/src/keystore.h
@@ -19,17 +19,28 @@ public:
// Check whether a key corresponding to a given address is present in the store.
virtual bool HaveKey(const CBitcoinAddress &address) const =0;
-
- // Retrieve a key corresponding to a given address from the store.
- // Return true if succesful.
- virtual bool GetKey(const CBitcoinAddress &address, CKey& keyOut) const =0;
-
- // Retrieve only the public key corresponding to a given address.
- // This may succeed even if GetKey fails (e.g., encrypted wallets)
+ virtual bool GetKey(const CBitcoinAddress &address, CKey& keyOut) const
+ {
+ CSecret vchSecret;
+ if (!GetSecret(address, vchSecret))
+ return false;
+ if (!keyOut.SetSecret(vchSecret))
+ return false;
+ return true;
+ }
+ virtual void GetKeys(std::set<CBitcoinAddress> &setAddress) const =0;
virtual bool GetPubKey(const CBitcoinAddress &address, std::vector<unsigned char>& vchPubKeyOut) const;
// Generate a new key, and add it to the store
virtual std::vector<unsigned char> GenerateNewKey();
+ virtual bool GetSecret(const CBitcoinAddress &address, CSecret& vchSecret) const
+ {
+ CKey key;
+ if (!GetKey(address, key))
+ return false;
+ vchSecret = key.GetSecret();
+ return true;
+ }
};
typedef std::map<CBitcoinAddress, CSecret> KeyMap;
@@ -49,14 +60,27 @@ public:
result = (mapKeys.count(address) > 0);
return result;
}
- bool GetKey(const CBitcoinAddress &address, CKey& keyOut) const
+ void GetKeys(std::set<CBitcoinAddress> &setAddress) const
+ {
+ setAddress.clear();
+ CRITICAL_BLOCK(cs_KeyStore)
+ {
+ KeyMap::const_iterator mi = mapKeys.begin();
+ while (mi != mapKeys.end())
+ {
+ setAddress.insert((*mi).first);
+ mi++;
+ }
+ }
+ }
+ bool GetSecret(const CBitcoinAddress &address, CSecret &vchSecret) const
{
CRITICAL_BLOCK(cs_KeyStore)
{
KeyMap::const_iterator mi = mapKeys.find(address);
if (mi != mapKeys.end())
{
- keyOut.SetSecret((*mi).second);
+ vchSecret = (*mi).second;
return true;
}
}
@@ -131,8 +155,23 @@ public:
}
return false;
}
- bool GetKey(const CBitcoinAddress &address, CKey& keyOut) const;
+ bool GetSecret(const CBitcoinAddress &address, CSecret& vchSecret) const;
bool GetPubKey(const CBitcoinAddress &address, std::vector<unsigned char>& vchPubKeyOut) const;
+ void GetKeys(std::set<CBitcoinAddress> &setAddress) const
+ {
+ if (!IsCrypted())
+ {
+ CBasicKeyStore::GetKeys(setAddress);
+ return;
+ }
+ setAddress.clear();
+ CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin();
+ while (mi != mapCryptedKeys.end())
+ {
+ setAddress.insert((*mi).first);
+ mi++;
+ }
+ }
};
#endif