Use CBitcoinAddress ti store change destination
[novacoin.git] / src / key.cpp
index 1012915..49868b8 100644 (file)
@@ -812,7 +812,7 @@ bool CMalleableKey::SetSecrets(const CSecret &pvchSecretL, const CSecret &pvchSe
     CKey keyL(pvchSecretL);
     CKey keyH(pvchSecretH);
 
-    if (!keyL.IsValid() || !keyL.IsValid())
+    if (!keyL.IsValid() || !keyH.IsValid())
         return false;
 
     vchSecretL = pvchSecretL;
@@ -823,14 +823,8 @@ bool CMalleableKey::SetSecrets(const CSecret &pvchSecretL, const CSecret &pvchSe
 
 CMalleablePubKey CMalleableKey::GetMalleablePubKey() const
 {
-    CKey L, H;
-    L.SetSecret(vchSecretL, true);
-    H.SetSecret(vchSecretH, true);
-
-    std::vector<unsigned char> vchPubKeyL = L.GetPubKey().Raw();
-    std::vector<unsigned char> vchPubKeyH = H.GetPubKey().Raw();
-
-    return CMalleablePubKey(vchPubKeyL, vchPubKeyH);
+    CKey L(vchSecretL), H(vchSecretH);
+    return CMalleablePubKey(L.GetPubKey().Raw(), H.GetPubKey().Raw());
 }
 
 // Check ownership
@@ -841,35 +835,40 @@ bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVa
     }
 
     if (!R.IsValid()) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : R is invalid");
+        printf("CMalleableKey::CheckKeyVariant() : R is invalid");
+        return false;
     }
 
     if (!vchPubKeyVariant.IsValid()) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : public key variant is invalid");
+        printf("CMalleableKey::CheckKeyVariant() : public key variant is invalid");
+        return false;
     }
 
     CPoint point_R;
     if (!point_R.setPubKey(R)) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode R value");
+        printf("CMalleableKey::CheckKeyVariant() : Unable to decode R value");
+        return false;
     }
 
-    CKey H;
-    H.SetSecret(vchSecretH, true);
+    CKey H(vchSecretH);
     std::vector<unsigned char> vchPubKeyH = H.GetPubKey().Raw();
 
     CPoint point_H;
     if (!point_H.setPubKey(vchPubKeyH)) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode H value");
+        printf("CMalleableKey::CheckKeyVariant() : Unable to decode H value");
+        return false;
     }
 
     CPoint point_P;
     if (!point_P.setPubKey(vchPubKeyVariant)) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode P value");
+        printf("CMalleableKey::CheckKeyVariant() : Unable to decode P value");
+        return false;
     }
 
     // Infinity points are senseless
     if (point_P.IsInfinity()) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : P is infinity");
+        printf("CMalleableKey::CheckKeyVariant() : P is infinity");
+        return false;
     }
 
     CBigNum bnl;
@@ -879,7 +878,8 @@ bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVa
 
     std::vector<unsigned char> vchRl;
     if (!point_R.getBytes(vchRl)) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Unable to convert Rl value");
+        printf("CMalleableKey::CheckKeyVariant() : Unable to convert Rl value");
+        return false;
     }
 
     // Calculate Hash(R*l)
@@ -892,7 +892,8 @@ bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVa
 
     // Infinity points are senseless
     if (point_Ps.IsInfinity()) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Ps is infinity");
+        printf("CMalleableKey::CheckKeyVariant() : Ps is infinity");
+        return false;
     }
 
     // Check ownership
@@ -911,35 +912,40 @@ bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVa
     }
 
     if (!R.IsValid()) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : R is invalid");
+        printf("CMalleableKey::CheckKeyVariant() : R is invalid");
+        return false;
     }
 
     if (!vchPubKeyVariant.IsValid()) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : public key variant is invalid");
+        printf("CMalleableKey::CheckKeyVariant() : public key variant is invalid");
+        return false;
     }
 
     CPoint point_R;
     if (!point_R.setPubKey(R)) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode R value");
+        printf("CMalleableKey::CheckKeyVariant() : Unable to decode R value");
+        return false;
     }
 
-    CKey H;
-    H.SetSecret(vchSecretH, true);
+    CKey H(vchSecretH);
     std::vector<unsigned char> vchPubKeyH = H.GetPubKey().Raw();
 
     CPoint point_H;
     if (!point_H.setPubKey(vchPubKeyH)) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode H value");
+        printf("CMalleableKey::CheckKeyVariant() : Unable to decode H value");
+        return false;
     }
 
     CPoint point_P;
     if (!point_P.setPubKey(vchPubKeyVariant)) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode P value");
+        printf("CMalleableKey::CheckKeyVariant() : Unable to decode P value");
+        return false;
     }
 
     // Infinity points are senseless
     if (point_P.IsInfinity()) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : P is infinity");
+        printf("CMalleableKey::CheckKeyVariant() : P is infinity");
+        return false;
     }
 
     CBigNum bnl;
@@ -949,7 +955,8 @@ bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVa
 
     std::vector<unsigned char> vchRl;
     if (!point_R.getBytes(vchRl)) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Unable to convert Rl value");
+        printf("CMalleableKey::CheckKeyVariant() : Unable to convert Rl value");
+        return false;
     }
 
     // Calculate Hash(R*l)
@@ -962,7 +969,8 @@ bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVa
 
     // Infinity points are senseless
     if (point_Ps.IsInfinity()) {
-        throw key_error("CMalleableKey::CheckKeyVariant() : Ps is infinity");
+        printf("CMalleableKey::CheckKeyVariant() : Ps is infinity");
+        return false;
     }
 
     // Check ownership
@@ -978,7 +986,7 @@ bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVa
     CBigNum bnp = bnHash + bnh;
 
     std::vector<unsigned char> vchp = bnp.getBytes();
-    privKeyVariant.SetSecret(CSecret(vchp.begin(), vchp.end()), true);
+    privKeyVariant.SetSecret(CSecret(vchp.begin(), vchp.end()));
 
     return true;
 }
@@ -1027,13 +1035,11 @@ CMalleableKeyView::CMalleableKeyView(const CMalleableKey &b)
         throw key_error("CMalleableKeyView::CMalleableKeyView() : L size must be 32 bytes");
 
     if (b.vchSecretH.size() != 32)
-        throw key_error("CMalleableKeyView::CMalleableKeyView() : L size must be 32 bytes");
+        throw key_error("CMalleableKeyView::CMalleableKeyView() : H size must be 32 bytes");
 
     vchSecretL = b.vchSecretL;
 
-    CKey H;
-    H.SetSecret(b.vchSecretH, true);
-
+    CKey H(b.vchSecretH);
     vchPubKeyH = H.GetPubKey().Raw();
 }
 
@@ -1047,8 +1053,7 @@ CMalleableKeyView& CMalleableKeyView::operator=(const CMalleableKey &b)
 {
     vchSecretL = b.vchSecretL;
 
-    CKey H;
-    H.SetSecret(b.vchSecretH, true);
+    CKey H(b.vchSecretH);
     vchPubKeyH = H.GetPubKey().Raw();
 
     return (*this);
@@ -1060,40 +1065,49 @@ CMalleableKeyView::~CMalleableKeyView()
 
 CMalleablePubKey CMalleableKeyView::GetMalleablePubKey() const
 {
-    CKey keyL;
-    keyL.SetSecret(vchSecretL, true);
+    CKey keyL(vchSecretL);
     return CMalleablePubKey(keyL.GetPubKey(), vchPubKeyH);
 }
 
 // Check ownership
 bool CMalleableKeyView::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant) const
 {
+    if (!IsValid()) {
+        throw key_error("CMalleableKeyView::CheckKeyVariant() : Attempting to run on invalid view object.");
+    }
+
     if (!R.IsValid()) {
-        throw key_error("CMalleableKeyView::CheckKeyVariant() : R is invalid");
+        printf("CMalleableKeyView::CheckKeyVariant() : R is invalid");
+        return false;
     }
 
     if (!vchPubKeyVariant.IsValid()) {
-        throw key_error("CMalleableKeyView::CheckKeyVariant() : public key variant is invalid");
+        printf("CMalleableKeyView::CheckKeyVariant() : public key variant is invalid");
+        return false;
     }
 
     CPoint point_R;
     if (!point_R.setPubKey(R)) {
-        throw key_error("CMalleableKeyView::CheckKeyVariant() : Unable to decode R value");
+        printf("CMalleableKeyView::CheckKeyVariant() : Unable to decode R value");
+        return false;
     }
 
     CPoint point_H;
     if (!point_H.setPubKey(vchPubKeyH)) {
-        throw key_error("CMalleableKeyView::CheckKeyVariant() : Unable to decode H value");
+        printf("CMalleableKeyView::CheckKeyVariant() : Unable to decode H value");
+        return false;
     }
 
     CPoint point_P;
     if (!point_P.setPubKey(vchPubKeyVariant)) {
-        throw key_error("CMalleableKeyView::CheckKeyVariant() : Unable to decode P value");
+        printf("CMalleableKeyView::CheckKeyVariant() : Unable to decode P value");
+        return false;
     }
 
     // Infinity points are senseless
     if (point_P.IsInfinity()) {
-        throw key_error("CMalleableKeyView::CheckKeyVariant() : P is infinity");
+        printf("CMalleableKeyView::CheckKeyVariant() : P is infinity");
+        return false;
     }
 
     CBigNum bnl;
@@ -1103,7 +1117,8 @@ bool CMalleableKeyView::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubK
 
     std::vector<unsigned char> vchRl;
     if (!point_R.getBytes(vchRl)) {
-        throw key_error("CMalleableKeyView::CheckKeyVariant() : Unable to convert Rl value");
+        printf("CMalleableKeyView::CheckKeyVariant() : Unable to convert Rl value");
+        return false;
     }
 
     // Calculate Hash(R*l)
@@ -1116,7 +1131,8 @@ bool CMalleableKeyView::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubK
 
     // Infinity points are senseless
     if (point_Ps.IsInfinity()) {
-        throw key_error("CMalleableKeyView::CheckKeyVariant() : Ps is infinity");
+        printf("CMalleableKeyView::CheckKeyVariant() : Ps is infinity");
+        return false;
     }
 
     // Check ownership