mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-11 15:48:05 +00:00
Merge pull request #4670
a35b55b
Dont run full check every time we decrypt wallet. (Matt Corallo)1e21c17
Make CCryptoKeyStore::Unlock check all keys. (Gregory Maxwell)
This commit is contained in:
commit
dd2819701a
@ -152,6 +152,8 @@ bool CCryptoKeyStore::Unlock(const CKeyingMaterial& vMasterKeyIn)
|
|||||||
if (!SetCrypted())
|
if (!SetCrypted())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
bool keyPass = false;
|
||||||
|
bool keyFail = false;
|
||||||
CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin();
|
CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin();
|
||||||
for (; mi != mapCryptedKeys.end(); ++mi)
|
for (; mi != mapCryptedKeys.end(); ++mi)
|
||||||
{
|
{
|
||||||
@ -159,16 +161,35 @@ bool CCryptoKeyStore::Unlock(const CKeyingMaterial& vMasterKeyIn)
|
|||||||
const std::vector<unsigned char> &vchCryptedSecret = (*mi).second.second;
|
const std::vector<unsigned char> &vchCryptedSecret = (*mi).second.second;
|
||||||
CKeyingMaterial vchSecret;
|
CKeyingMaterial vchSecret;
|
||||||
if(!DecryptSecret(vMasterKeyIn, vchCryptedSecret, vchPubKey.GetHash(), vchSecret))
|
if(!DecryptSecret(vMasterKeyIn, vchCryptedSecret, vchPubKey.GetHash(), vchSecret))
|
||||||
return false;
|
{
|
||||||
|
keyFail = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (vchSecret.size() != 32)
|
if (vchSecret.size() != 32)
|
||||||
return false;
|
{
|
||||||
|
keyFail = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
CKey key;
|
CKey key;
|
||||||
key.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed());
|
key.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed());
|
||||||
if (key.GetPubKey() == vchPubKey)
|
if (key.GetPubKey() != vchPubKey)
|
||||||
|
{
|
||||||
|
keyFail = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
keyPass = true;
|
||||||
|
if (fDecryptionThoroughlyChecked)
|
||||||
break;
|
break;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
if (keyPass && keyFail)
|
||||||
|
{
|
||||||
|
LogPrintf("The wallet is probably corrupted: Some keys decrypt but not all.");
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
if (keyFail || !keyPass)
|
||||||
|
return false;
|
||||||
vMasterKey = vMasterKeyIn;
|
vMasterKey = vMasterKeyIn;
|
||||||
|
fDecryptionThoroughlyChecked = true;
|
||||||
}
|
}
|
||||||
NotifyStatusChanged(this);
|
NotifyStatusChanged(this);
|
||||||
return true;
|
return true;
|
||||||
|
@ -121,6 +121,9 @@ private:
|
|||||||
// if fUseCrypto is false, vMasterKey must be empty
|
// if fUseCrypto is false, vMasterKey must be empty
|
||||||
bool fUseCrypto;
|
bool fUseCrypto;
|
||||||
|
|
||||||
|
// keeps track of whether Unlock has run a thourough check before
|
||||||
|
bool fDecryptionThoroughlyChecked;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool SetCrypted();
|
bool SetCrypted();
|
||||||
|
|
||||||
@ -130,7 +133,7 @@ protected:
|
|||||||
bool Unlock(const CKeyingMaterial& vMasterKeyIn);
|
bool Unlock(const CKeyingMaterial& vMasterKeyIn);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CCryptoKeyStore() : fUseCrypto(false)
|
CCryptoKeyStore() : fUseCrypto(false), fDecryptionThoroughlyChecked(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user