diff --git a/src/keystore.h b/src/keystore.h --- a/src/keystore.h +++ b/src/keystore.h @@ -64,33 +64,9 @@ public: bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey) override; bool GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const override; - bool HaveKey(const CKeyID &address) const override { - bool result; - { - LOCK(cs_KeyStore); - result = (mapKeys.count(address) > 0); - } - return result; - } - std::set GetKeys() const override { - LOCK(cs_KeyStore); - std::set set_address; - for (const auto &mi : mapKeys) { - set_address.insert(mi.first); - } - return set_address; - } - bool GetKey(const CKeyID &address, CKey &keyOut) const override { - { - LOCK(cs_KeyStore); - KeyMap::const_iterator mi = mapKeys.find(address); - if (mi != mapKeys.end()) { - keyOut = mi->second; - return true; - } - } - return false; - } + bool HaveKey(const CKeyID &address) const override; + std::set GetKeys() const override; + bool GetKey(const CKeyID &address, CKey &keyOut) const override; virtual bool AddCScript(const CScript &redeemScript) override; virtual bool HaveCScript(const CScriptID &hash) const override; virtual bool GetCScript(const CScriptID &hash, diff --git a/src/keystore.cpp b/src/keystore.cpp --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -35,6 +35,32 @@ return true; } +bool CBasicKeyStore::HaveKey(const CKeyID &address) const { + LOCK(cs_KeyStore); + return mapKeys.count(address) > 0; +} + +std::set CBasicKeyStore::GetKeys() const { + LOCK(cs_KeyStore); + std::set set_address; + for (const auto &mi : mapKeys) { + set_address.insert(mi.first); + } + return set_address; +} + +bool CBasicKeyStore::GetKey(const CKeyID &address, CKey &keyOut) const { + { + LOCK(cs_KeyStore); + KeyMap::const_iterator mi = mapKeys.find(address); + if (mi != mapKeys.end()) { + keyOut = mi->second; + return true; + } + } + return false; +} + bool CBasicKeyStore::AddCScript(const CScript &redeemScript) { if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE) return error("CBasicKeyStore::AddCScript(): redeemScripts > %i bytes " diff --git a/src/wallet/crypter.h b/src/wallet/crypter.h --- a/src/wallet/crypter.h +++ b/src/wallet/crypter.h @@ -141,43 +141,16 @@ : fUseCrypto(false), fDecryptionThoroughlyChecked(false) {} bool IsCrypted() const { return fUseCrypto; } - - bool IsLocked() const { - if (!IsCrypted()) return false; - bool result; - { - LOCK(cs_KeyStore); - result = vMasterKey.empty(); - } - return result; - } - + bool IsLocked() const; bool Lock(); virtual bool AddCryptedKey(const CPubKey &vchPubKey, const std::vector &vchCryptedSecret); bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey) override; - bool HaveKey(const CKeyID &address) const override { - LOCK(cs_KeyStore); - if (!IsCrypted()) { - return CBasicKeyStore::HaveKey(address); - } - - return mapCryptedKeys.count(address) > 0; - } + bool HaveKey(const CKeyID &address) const override; bool GetKey(const CKeyID &address, CKey &keyOut) const override; bool GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const override; - std::set GetKeys() const override { - LOCK(cs_KeyStore); - if (!IsCrypted()) { - return CBasicKeyStore::GetKeys(); - } - std::set set_address; - for (const auto &mi : mapCryptedKeys) { - set_address.insert(mi.first); - } - return set_address; - } + std::set GetKeys() const override; /** * Wallet status (encrypted, locked) changed. diff --git a/src/wallet/crypter.cpp b/src/wallet/crypter.cpp --- a/src/wallet/crypter.cpp +++ b/src/wallet/crypter.cpp @@ -151,6 +151,18 @@ return true; } +bool CCryptoKeyStore::IsLocked() const { + if (!IsCrypted()) { + return false; + } + bool result; + { + LOCK(cs_KeyStore); + result = vMasterKey.empty(); + } + return result; +} + bool CCryptoKeyStore::Lock() { if (!SetCrypted()) return false; @@ -225,6 +237,14 @@ return true; } +bool CCryptoKeyStore::HaveKey(const CKeyID &address) const { + LOCK(cs_KeyStore); + if (!IsCrypted()) { + return CBasicKeyStore::HaveKey(address); + } + return mapCryptedKeys.count(address) > 0; +} + bool CCryptoKeyStore::GetKey(const CKeyID &address, CKey &keyOut) const { { LOCK(cs_KeyStore); @@ -258,6 +278,18 @@ return false; } +std::set CCryptoKeyStore::GetKeys() const { + LOCK(cs_KeyStore); + if (!IsCrypted()) { + return CBasicKeyStore::GetKeys(); + } + std::set set_address; + for (const auto &mi : mapCryptedKeys) { + set_address.insert(mi.first); + } + return set_address; +} + bool CCryptoKeyStore::EncryptKeys(CKeyingMaterial &vMasterKeyIn) { { LOCK(cs_KeyStore);