From edc83f6417f70f35539776cce6cdceb9d896a41b Mon Sep 17 00:00:00 2001 From: CryptoManiac Date: Fri, 4 Mar 2016 20:44:08 +0300 Subject: [PATCH] Store only the second half of private key pair. --- src/keystore.cpp | 2 +- src/keystore.h | 11 +++++++---- src/walletdb.cpp | 8 ++++---- src/walletdb.h | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/keystore.cpp b/src/keystore.cpp index fdbecba..451f7ea 100644 --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -33,7 +33,7 @@ bool CBasicKeyStore::AddMalleableKey(const CMalleableKey& mKey) { { LOCK(cs_KeyStore); - mapMalleableKeys[CMalleableKeyView(mKey)] = mKey; + mapMalleableKeys[CMalleableKeyView(mKey)] = mKey.GetSecretH(); } return true; } diff --git a/src/keystore.h b/src/keystore.h index fa4f33c..d4ac615 100644 --- a/src/keystore.h +++ b/src/keystore.h @@ -78,7 +78,7 @@ public: typedef std::map > KeyMap; typedef std::map ScriptMap; typedef std::set WatchOnlySet; -typedef std::map MalleableKeyMap; +typedef std::map MalleableKeyMap; /** Basic key store, that keeps keys in an address->secret map */ class CBasicKeyStore : public CKeyStore @@ -100,7 +100,7 @@ public: MalleableKeyMap::const_iterator mi = mapMalleableKeys.find(keyView); if (mi != mapMalleableKeys.end()) { - mKey = mi->second; + mKey = mi->first.GetMalleableKey(mi->second); return true; } } @@ -183,8 +183,11 @@ public: LOCK(cs_KeyStore); for (MalleableKeyMap::const_iterator mi = mapMalleableKeys.begin(); mi != mapMalleableKeys.end(); mi++) { - if (mi->second.CheckKeyVariant(R, pubKeyVariant, privKey)) - return true; + if (mi->first.CheckKeyVariant(R, pubKeyVariant)) + { + CMalleableKey mKey = mi->first.GetMalleableKey(mi->second); + return mKey.CheckKeyVariant(R, pubKeyVariant, privKey); + } } } return false; diff --git a/src/walletdb.cpp b/src/walletdb.cpp index 64168ee..2fe59ce 100644 --- a/src/walletdb.cpp +++ b/src/walletdb.cpp @@ -306,14 +306,14 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, { string strKey, strKeyView; - CMalleableKey mKey; + CSecret vchSecret; CMalleableKeyView keyView; ssKey >> strKeyView; - ssValue >> strKey; - keyView.SetString(strKeyView); - mKey.SetString(strKey); + ssValue >> vchSecret; + + CMalleableKey mKey = keyView.GetMalleableKey(vchSecret); if (mKey.IsNull()) { diff --git a/src/walletdb.h b/src/walletdb.h index fe2b225..64a2d9f 100644 --- a/src/walletdb.h +++ b/src/walletdb.h @@ -101,7 +101,7 @@ public: if(!Write(std::make_pair(std::string("malmeta"), keyView.ToString()), keyMeta)) return false; - if(!Write(std::make_pair(std::string("malpair"), keyView.ToString()), malleableKey.ToString(), false)) + if(!Write(std::make_pair(std::string("malpair"), keyView.ToString()), malleableKey.GetSecretH(), false)) return false; return true; -- 1.7.1