Do not break backward compatibility during wallet encryption

This commit is contained in:
Jonas Schnelli
2017-03-27 09:51:55 +02:00
parent 1df08d1580
commit 9382f0425e
2 changed files with 12 additions and 4 deletions

View File

@@ -639,7 +639,9 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
if (IsHDEnabled()) {
CKey key;
CPubKey masterPubKey = GenerateNewHDMasterKey();
if (!SetHDMasterKey(masterPubKey))
// preserve the old chains version to not break backward compatibility
CHDChain oldChain = GetHDChain();
if (!SetHDMasterKey(masterPubKey, &oldChain))
return false;
}
@@ -1306,13 +1308,17 @@ CPubKey CWallet::GenerateNewHDMasterKey()
return pubkey;
}
bool CWallet::SetHDMasterKey(const CPubKey& pubkey)
bool CWallet::SetHDMasterKey(const CPubKey& pubkey, CHDChain *possibleOldChain)
{
LOCK(cs_wallet);
// store the keyid (hash160) together with
// the child index counter in the database
// as a hdchain object
CHDChain newHdChain;
if (possibleOldChain) {
// preserve the old chains version
newHdChain.nVersion = possibleOldChain->nVersion;
}
newHdChain.masterKeyID = pubkey.GetID();
SetHDChain(newHdChain, false);