Store only the second half of private key pair.
authorCryptoManiac <balthazar@yandex.ru>
Fri, 4 Mar 2016 17:44:08 +0000 (20:44 +0300)
committerCryptoManiac <balthazar@yandex.ru>
Fri, 4 Mar 2016 17:44:08 +0000 (20:44 +0300)
src/keystore.cpp
src/keystore.h
src/walletdb.cpp
src/walletdb.h

index fdbecba..451f7ea 100644 (file)
@@ -33,7 +33,7 @@ bool CBasicKeyStore::AddMalleableKey(const CMalleableKey& mKey)
 {
     {
         LOCK(cs_KeyStore);
-        mapMalleableKeys[CMalleableKeyView(mKey)] = mKey;
+        mapMalleableKeys[CMalleableKeyView(mKey)] = mKey.GetSecretH();
     }
     return true;
 }
index fa4f33c..d4ac615 100644 (file)
@@ -78,7 +78,7 @@ public:
 typedef std::map<CKeyID, std::pair<CSecret, bool> > KeyMap;
 typedef std::map<CScriptID, CScript > ScriptMap;
 typedef std::set<CScript> WatchOnlySet;
-typedef std::map<CMalleableKeyView, CMalleableKey> MalleableKeyMap;
+typedef std::map<CMalleableKeyView, CSecret> 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;
index 64168ee..2fe59ce 100644 (file)
@@ -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())
             {
index fe2b225..64a2d9f 100644 (file)
@@ -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;