mirror of
https://github.com/dashpay/dash.git
synced 2024-12-29 05:49:11 +01:00
Avoid reading the old hd master key during wallet encryption
This makes SetHDMasterKey responsible for maintinaing the CHDChain version instead of always creating it with the latest version and making EncryptWallet responsible for keeping the version from changing.
This commit is contained in:
parent
f34cdcbd80
commit
185c7f08be
@ -637,12 +637,9 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
|
|||||||
|
|
||||||
// if we are using HD, replace the HD master key (seed) with a new one
|
// if we are using HD, replace the HD master key (seed) with a new one
|
||||||
if (IsHDEnabled()) {
|
if (IsHDEnabled()) {
|
||||||
CKey key;
|
if (!SetHDMasterKey(GenerateNewHDMasterKey())) {
|
||||||
CPubKey masterPubKey = GenerateNewHDMasterKey();
|
|
||||||
// preserve the old chains version to not break backward compatibility
|
|
||||||
CHDChain oldChain = GetHDChain();
|
|
||||||
if (!SetHDMasterKey(masterPubKey, &oldChain))
|
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NewKeyPool();
|
NewKeyPool();
|
||||||
@ -1308,17 +1305,14 @@ CPubKey CWallet::GenerateNewHDMasterKey()
|
|||||||
return pubkey;
|
return pubkey;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWallet::SetHDMasterKey(const CPubKey& pubkey, CHDChain *possibleOldChain)
|
bool CWallet::SetHDMasterKey(const CPubKey& pubkey)
|
||||||
{
|
{
|
||||||
LOCK(cs_wallet);
|
LOCK(cs_wallet);
|
||||||
// store the keyid (hash160) together with
|
// store the keyid (hash160) together with
|
||||||
// the child index counter in the database
|
// the child index counter in the database
|
||||||
// as a hdchain object
|
// as a hdchain object
|
||||||
CHDChain newHdChain;
|
CHDChain newHdChain;
|
||||||
if (possibleOldChain) {
|
newHdChain.nVersion = CanSupportFeature(FEATURE_HD_SPLIT) ? CHDChain::VERSION_HD_CHAIN_SPLIT : CHDChain::VERSION_HD_BASE;
|
||||||
// preserve the old chains version
|
|
||||||
newHdChain.nVersion = possibleOldChain->nVersion;
|
|
||||||
}
|
|
||||||
newHdChain.masterKeyID = pubkey.GetID();
|
newHdChain.masterKeyID = pubkey.GetID();
|
||||||
SetHDChain(newHdChain, false);
|
SetHDChain(newHdChain, false);
|
||||||
|
|
||||||
|
@ -1056,9 +1056,10 @@ public:
|
|||||||
CPubKey GenerateNewHDMasterKey();
|
CPubKey GenerateNewHDMasterKey();
|
||||||
|
|
||||||
/* Set the current HD master key (will reset the chain child index counters)
|
/* Set the current HD master key (will reset the chain child index counters)
|
||||||
If possibleOldChain is provided, the parameters from the old chain (version)
|
Sets the master key's version based on the current wallet version (so the
|
||||||
will be preserved. */
|
caller must ensure the current wallet version is correct before calling
|
||||||
bool SetHDMasterKey(const CPubKey& key, CHDChain *possibleOldChain = nullptr);
|
this function). */
|
||||||
|
bool SetHDMasterKey(const CPubKey& key);
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A key allocated from the key pool. */
|
/** A key allocated from the key pool. */
|
||||||
|
Loading…
Reference in New Issue
Block a user