diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2013-06-20 01:13:55 +0200 |
---|---|---|
committer | Pieter Wuille <pieter.wuille@gmail.com> | 2013-06-20 01:31:18 +0200 |
commit | 4addb2c066e157f479fdbae902b3d568f2432fd0 (patch) | |
tree | a2fbaf1a181fbac619166fcc75eb7102a172d73f /src/walletdb.h | |
parent | 25dbb928600b2c65bc20ce026c5f9cf1fb457d60 (diff) |
Refactor keytime/metadata and wallet encryption bugfix
Refactor keytime:
* Key metadata is kept in a CWallet::mapKeyMetadata (std::map<CKeyId,CKeyMetadata>).
* When generating a new key, time is put in that map, and new key is written.
* AddKeyPubKey and AddCryptedKey do not take a creation time argument, but instead
pull it from that map, if it exists there.
Bugfix:
* AddKeyPubKey and AddCryptedKey in CWallet didn't override the CKeyStore
definition anymore. This is fixed, as they no longed need the nCreationTime
argument now.
Also a few related other changes:
* Metadata can be overwritten.
* Only GenerateNewKey calls GetTime(), as it's the only place where we know for
sure a key was not constructed earlier.
* When the nTimeFirstKey is known to be inaccurate, it is set to the value 1
(instead of 0, which would mean unknown).
* Use CPubKey instead of std::vector<unsigned char> where possible.
Diffstat (limited to 'src/walletdb.h')
-rw-r--r-- | src/walletdb.h | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/walletdb.h b/src/walletdb.h index 287361b33d..4dfa35d82a 100644 --- a/src/walletdb.h +++ b/src/walletdb.h @@ -30,7 +30,7 @@ class CKeyMetadata public: static const int CURRENT_VERSION=1; int nVersion; - int64 nCreateTime; + int64 nCreateTime; // 0 means unknown CKeyMetadata() { @@ -52,7 +52,7 @@ public: void SetNull() { nVersion = CKeyMetadata::CURRENT_VERSION; - nCreateTime = GetTime(); + nCreateTime = 0; } }; @@ -84,13 +84,12 @@ public: } bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, - int64 nCreateTime) + const CKeyMetadata &keyMeta) { nWalletDBUpdated++; - CKeyMetadata keyMeta(nCreateTime); if (!Write(std::make_pair(std::string("keymeta"), vchPubKey), - keyMeta, false)) + keyMeta)) return false; return Write(std::make_pair(std::string("key"), vchPubKey), vchPrivKey, false); @@ -98,14 +97,13 @@ public: bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector<unsigned char>& vchCryptedSecret, - int64 nCreateTime) + const CKeyMetadata &keyMeta) { const bool fEraseUnencryptedKey = true; nWalletDBUpdated++; - CKeyMetadata keyMeta(nCreateTime); if (!Write(std::make_pair(std::string("keymeta"), vchPubKey), - keyMeta, false)) + keyMeta)) return false; if (!Write(std::make_pair(std::string("ckey"), vchPubKey), vchCryptedSecret, false)) |