Browse Source

Merge #10115: Avoid reading the old hd master key during wallet encryption

185c7f0 Avoid reading the old hd master key during wallet encryption (Matt Corallo)

Tree-SHA512: b744e8490c0e948355bb77b2695902bb99f89a68af46aa2be9120bd2ccf3c340eb8a56340fec117f9a935192298028945c9b18120ee6b8b23e7da8ffdb635745
tags/v0.15.1
Wladimir J. van der Laan 4 years ago
parent
commit
d3dce0eb67
No account linked to committer's email address
2 changed files with 8 additions and 13 deletions
  1. 4
    10
      src/wallet/wallet.cpp
  2. 4
    3
      src/wallet/wallet.h

+ 4
- 10
src/wallet/wallet.cpp View File

@@ -621,12 +621,9 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)

// if we are using HD, replace the HD master key (seed) with a new one
if (IsHDEnabled()) {
CKey key;
CPubKey masterPubKey = GenerateNewHDMasterKey();
// preserve the old chains version to not break backward compatibility
CHDChain oldChain = GetHDChain();
if (!SetHDMasterKey(masterPubKey, &oldChain))
if (!SetHDMasterKey(GenerateNewHDMasterKey())) {
return false;
}
}

NewKeyPool();
@@ -1324,17 +1321,14 @@ CPubKey CWallet::GenerateNewHDMasterKey()
return pubkey;
}

bool CWallet::SetHDMasterKey(const CPubKey& pubkey, CHDChain *possibleOldChain)
bool CWallet::SetHDMasterKey(const CPubKey& pubkey)
{
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.nVersion = CanSupportFeature(FEATURE_HD_SPLIT) ? CHDChain::VERSION_HD_CHAIN_SPLIT : CHDChain::VERSION_HD_BASE;
newHdChain.masterKeyID = pubkey.GetID();
SetHDChain(newHdChain, false);


+ 4
- 3
src/wallet/wallet.h View File

@@ -1100,9 +1100,10 @@ public:
CPubKey GenerateNewHDMasterKey();
/* Set the current HD master key (will reset the chain child index counters)
If possibleOldChain is provided, the parameters from the old chain (version)
will be preserved. */
bool SetHDMasterKey(const CPubKey& key, CHDChain *possibleOldChain = nullptr);
Sets the master key's version based on the current wallet version (so the
caller must ensure the current wallet version is correct before calling
this function). */
bool SetHDMasterKey(const CPubKey& key);
};

/** A key allocated from the key pool. */

Loading…
Cancel
Save