RPC: In addition to public key pairs, adjustmalleablepubkey method now understands...
[novacoin.git] / src / key.cpp
index 45270a0..355d6dd 100644 (file)
@@ -334,32 +334,12 @@ CSecret CKey::GetSecret(bool &fCompressed) const
 bool CKey::WritePEM(BIO *streamObj, const SecureString &strPassKey) const // dumppem 4KJLA99FyqMMhjjDe7KnRXK4sjtv9cCtNS /tmp/test.pem 123
 {
     EVP_PKEY *evpKey = EVP_PKEY_new();
-    bool result = true;
+    if (!EVP_PKEY_assign_EC_KEY(evpKey, pkey))
+        return error("CKey::WritePEM() : Error initializing EVP_PKEY instance.");
+    if(!PEM_write_bio_PKCS8PrivateKey(streamObj, evpKey, EVP_aes_256_cbc(), (char *)&strPassKey[0], strPassKey.size(), NULL, NULL))
+        return error("CKey::WritePEM() : Error writing private key data to stream object");
 
-    do
-    {
-        if (!EVP_PKEY_assign_EC_KEY(evpKey, pkey))
-        {
-            result = error("CKey::WritePEM() : Error initializing EVP_PKEY instance.");
-            break;
-        }
-
-        if(!PEM_write_bio_PKCS8PrivateKey(streamObj, evpKey, EVP_aes_256_cbc(), (char *)&strPassKey[0], strPassKey.size(), NULL, NULL))
-        {
-            result = error("CKey::WritePEM() : Error writing private key data to stream object");
-            break;
-        }
-
-        if(!PEM_write_bio_PUBKEY(streamObj, evpKey))
-        {
-            result = error("CKey::WritePEM() : Error writing public key data to stream object");
-            break;
-        }
-    }
-    while(false);
-
-    EVP_PKEY_free(evpKey);
-    return result;
+    return true;
 }
 
 CSecret CKey::GetSecret() const
@@ -781,6 +761,8 @@ bool CMalleablePubKey::SetString(const std::string& strMalleablePubKey)
     if (!DecodeBase58Check(strMalleablePubKey, vchTemp)) {
         throw key_error("CMalleablePubKey::SetString() : Provided key data seems corrupted.");
     }
+    if (vchTemp.size() != 68)
+        return false;
 
     CDataStream ssKey(vchTemp, SER_NETWORK, PROTOCOL_VERSION);
     ssKey >> *this;
@@ -1048,7 +1030,8 @@ bool CMalleableKey::SetString(const std::string& strMutableKey)
     if (!DecodeBase58Check(strMutableKey, vchTemp)) {
         throw key_error("CMalleableKey::SetString() : Provided key data seems corrupted.");
     }
-
+    if (vchTemp.size() != 66)
+        return false;
     CDataStream ssKey(vchTemp, SER_NETWORK, PROTOCOL_VERSION);
     ssKey >> *this;
 
@@ -1192,6 +1175,9 @@ bool CMalleableKeyView::SetString(const std::string& strMutableKey)
         throw key_error("CMalleableKeyView::SetString() : Provided key data seems corrupted.");
     }
 
+    if (vchTemp.size() != 67)
+        return false;
+
     CDataStream ssKey(vchTemp, SER_NETWORK, PROTOCOL_VERSION);
     ssKey >> *this;