Full checking of all loaded keys

This commit is contained in:
Pieter Wuille 2012-01-26 19:26:34 +01:00
parent 4c932cca6f
commit 91f43a33f8
2 changed files with 15 additions and 1 deletions

View file

@ -862,7 +862,7 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
ssValue >> pkey; ssValue >> pkey;
key.SetPubKey(vchPubKey); key.SetPubKey(vchPubKey);
key.SetPrivKey(pkey); key.SetPrivKey(pkey);
if (key.GetPubKey() != vchPubKey) if (key.GetPubKey() != vchPubKey || !key.IsValid())
return DB_CORRUPT; return DB_CORRUPT;
} }
else else
@ -871,6 +871,8 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
ssValue >> wkey; ssValue >> wkey;
key.SetPubKey(vchPubKey); key.SetPubKey(vchPubKey);
key.SetPrivKey(wkey.vchPrivKey); key.SetPrivKey(wkey.vchPrivKey);
if (key.GetPubKey() != vchPubKey || !key.IsValid())
return DB_CORRUPT;
} }
if (!pwallet->LoadKey(key)) if (!pwallet->LoadKey(key))
return DB_CORRUPT; return DB_CORRUPT;

View file

@ -307,6 +307,18 @@ public:
return false; return false;
return true; return true;
} }
bool IsValid()
{
if (!fSet)
return false;
bool fCompr;
CSecret secret = GetSecret(fCompr);
CKey key2;
key2.SetSecret(secret, fCompr);
return GetPubKey() == key2.GetPubKey();
}
}; };
#endif #endif