X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fkey.cpp;h=2232324453b8e7dc8dc465dc9fab8cfe0d921eb0;hb=4a6759691d71bf2a7d2a0a9e4710f0887e66ab02;hp=1012915c1ef6bdacc7707c8862fd083603999863;hpb=fbd44e84d5841867d36d295d4f347fd5e55d293f;p=novacoin.git diff --git a/src/key.cpp b/src/key.cpp index 1012915..2232324 100644 --- a/src/key.cpp +++ b/src/key.cpp @@ -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 vchPubKeyL = L.GetPubKey().Raw(); - std::vector 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 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 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 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 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 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 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 @@ -1186,7 +1202,7 @@ void CKey::EncryptData(const std::vector& data, std::vector& data, std::vector& encrypted, std::vector& data) @@ -1218,7 +1234,7 @@ void CKey::DecryptData(const std::vector& encrypted, std::vector< decrypted = ecies_decrypt(ctx, cryptogram, &length, error); cryptogram_free(cryptogram); - free(ctx); + delete ctx; if (decrypted == NULL) { throw key_error(std::string("Error in decryption: %s") + error); @@ -1227,4 +1243,4 @@ void CKey::DecryptData(const std::vector& encrypted, std::vector< data.resize(length); memcpy(&data[0], decrypted, length); free(decrypted); -} +} \ No newline at end of file