get rid of mapPubKeys
Make CKeyStore's interface work on uint160's instead of pubkeys, so no separate global mapPubKeys is necessary anymore.
This commit is contained in:
@@ -12,12 +12,13 @@ public:
|
||||
mutable CCriticalSection cs_KeyStore;
|
||||
|
||||
virtual bool AddKey(const CKey& key) =0;
|
||||
virtual bool HaveKey(const std::vector<unsigned char> &vchPubKey) const =0;
|
||||
virtual bool GetPrivKey(const std::vector<unsigned char> &vchPubKey, CKey& keyOut) const =0;
|
||||
virtual bool HaveKey(const uint160 &hashAddress) const =0;
|
||||
virtual bool GetKey(const uint160 &hashAddress, CKey& keyOut) const =0;
|
||||
virtual bool GetPubKey(const uint160 &hashAddress, std::vector<unsigned char>& vchPubKeyOut) const;
|
||||
virtual std::vector<unsigned char> GenerateNewKey();
|
||||
};
|
||||
|
||||
typedef std::map<std::vector<unsigned char>, CPrivKey> KeyMap;
|
||||
typedef std::map<uint160, CSecret> KeyMap;
|
||||
|
||||
class CBasicKeyStore : public CKeyStore
|
||||
{
|
||||
@@ -26,26 +27,28 @@ protected:
|
||||
|
||||
public:
|
||||
bool AddKey(const CKey& key);
|
||||
bool HaveKey(const std::vector<unsigned char> &vchPubKey) const
|
||||
bool HaveKey(const uint160 &hashAddress) const
|
||||
{
|
||||
return (mapKeys.count(vchPubKey) > 0);
|
||||
return (mapKeys.count(hashAddress) > 0);
|
||||
}
|
||||
bool GetPrivKey(const std::vector<unsigned char> &vchPubKey, CKey& keyOut) const
|
||||
bool GetKey(const uint160 &hashAddress, CKey& keyOut) const
|
||||
{
|
||||
std::map<std::vector<unsigned char>, CPrivKey>::const_iterator mi = mapKeys.find(vchPubKey);
|
||||
KeyMap::const_iterator mi = mapKeys.find(hashAddress);
|
||||
if (mi != mapKeys.end())
|
||||
{
|
||||
keyOut.SetPrivKey((*mi).second);
|
||||
keyOut.SetSecret((*mi).second);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::map<uint160, std::pair<std::vector<unsigned char>, std::vector<unsigned char> > > CryptedKeyMap;
|
||||
|
||||
class CCryptoKeyStore : public CBasicKeyStore
|
||||
{
|
||||
private:
|
||||
std::map<std::vector<unsigned char>, std::vector<unsigned char> > mapCryptedKeys;
|
||||
CryptedKeyMap mapCryptedKeys;
|
||||
|
||||
CKeyingMaterial vMasterKey;
|
||||
|
||||
@@ -103,13 +106,14 @@ public:
|
||||
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
|
||||
bool HaveKey(const uint160 &hashAddress) const
|
||||
{
|
||||
if (!IsCrypted())
|
||||
return CBasicKeyStore::HaveKey(vchPubKey);
|
||||
return mapCryptedKeys.count(vchPubKey) > 0;
|
||||
return CBasicKeyStore::HaveKey(hashAddress);
|
||||
return mapCryptedKeys.count(hashAddress) > 0;
|
||||
}
|
||||
bool GetPrivKey(const std::vector<unsigned char> &vchPubKey, CKey& keyOut) const;
|
||||
bool GetKey(const uint160 &hashAddress, CKey& keyOut) const;
|
||||
bool GetPubKey(const uint160 &hashAddress, std::vector<unsigned char>& vchPubKeyOut) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user