aboutsummaryrefslogtreecommitdiff
path: root/src/keystore.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/keystore.h')
-rw-r--r--src/keystore.h46
1 files changed, 24 insertions, 22 deletions
diff --git a/src/keystore.h b/src/keystore.h
index 4095535493..8d445befea 100644
--- a/src/keystore.h
+++ b/src/keystore.h
@@ -4,7 +4,7 @@
#ifndef BITCOIN_KEYSTORE_H
#define BITCOIN_KEYSTORE_H
-typedef std::vector<unsigned char, secure_allocator<unsigned char> > CMasterKey;
+#include "crypter.h"
class CKeyStore
{
@@ -17,10 +17,12 @@ public:
virtual std::vector<unsigned char> GenerateNewKey();
};
+typedef std::map<std::vector<unsigned char>, CPrivKey> KeyMap;
+
class CBasicKeyStore : public CKeyStore
{
protected:
- std::map<std::vector<unsigned char>, CPrivKey> mapKeys;
+ KeyMap mapKeys;
public:
bool AddKey(const CKey& key);
@@ -45,18 +47,13 @@ class CCryptoKeyStore : public CBasicKeyStore
private:
std::map<std::vector<unsigned char>, std::vector<unsigned char> > mapCryptedKeys;
- CMasterKey vMasterKey;
+ CKeyingMaterial vMasterKey;
// if fUseCrypto is true, mapKeys must be empty
// if fUseCrypto is false, vMasterKey must be empty
bool fUseCrypto;
protected:
- bool IsCrypted() const
- {
- return fUseCrypto;
- }
-
bool SetCrypted()
{
if (fUseCrypto)
@@ -64,27 +61,26 @@ protected:
if (!mapKeys.empty())
return false;
fUseCrypto = true;
+ return true;
}
// will encrypt previously unencrypted keys
- bool GenerateMasterKey();
+ bool EncryptKeys(CKeyingMaterial& vMasterKeyIn);
- bool GetMasterKey(CMasterKey &vMasterKeyOut) const
- {
- if (!IsCrypted())
- return false;
- if (IsLocked())
- return false;
- vMasterKeyOut = vMasterKey;
- return true;
- }
- bool Unlock(const CMasterKey& vMasterKeyIn);
+ bool Unlock(const CKeyingMaterial& vMasterKeyIn);
public:
+ mutable CCriticalSection cs_vMasterKey; //No guarantees master key wont get locked before you can use it, so lock this first
+
CCryptoKeyStore() : fUseCrypto(false)
{
}
+ bool IsCrypted() const
+ {
+ return fUseCrypto;
+ }
+
bool IsLocked() const
{
if (!IsCrypted())
@@ -94,12 +90,18 @@ public:
bool Lock()
{
- if (!SetCrypted())
- return false;
- vMasterKey.clear();
+ CRITICAL_BLOCK(cs_vMasterKey)
+ {
+ if (!SetCrypted())
+ return false;
+
+ vMasterKey.clear();
+ }
+ return true;
}
virtual bool AddCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret);
+ std::vector<unsigned char> GenerateNewKey();
bool AddKey(const CKey& key);
bool HaveKey(const std::vector<unsigned char> &vchPubKey) const
{