X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fkey.cpp;fp=src%2Fkey.cpp;h=2c3a8498f510f610989085b611a4c2a33c472cf1;hp=6657ffd70b328e6f47edd79722a99bedbf5ad7b6;hb=b53a9002dadbb1887bebd7bc7bdb5468a29f4ebf;hpb=19847a92ce7bce098db17e9966db115782cce075 diff --git a/src/key.cpp b/src/key.cpp index 6657ffd..2c3a849 100644 --- a/src/key.cpp +++ b/src/key.cpp @@ -463,20 +463,17 @@ bool CPubKey::SetCompactSignature(uint256 hash, const std::vector ECDSA_SIG *sig = ECDSA_SIG_new(); BN_bin2bn(&vchSig[1],32,sig->r); BN_bin2bn(&vchSig[33],32,sig->s); - + bool fSuccessful = false; EC_KEY* pkey = EC_KEY_new_by_curve_name(NID_secp256k1); if (nV >= 31) { nV -= 4; EC_KEY_set_conv_form(pkey, POINT_CONVERSION_COMPRESSED); } - do { if (ECDSA_SIG_recover_key_GFp(pkey, sig, (unsigned char*)&hash, sizeof(hash), nV - 27, 0) != 1) break; - ECDSA_SIG_free(sig); - int nSize = i2o_ECPublicKey(pkey, NULL); if (!nSize) break; @@ -485,13 +482,14 @@ bool CPubKey::SetCompactSignature(uint256 hash, const std::vector if (i2o_ECPublicKey(pkey, &pbegin) != nSize) break; Set(vchPubKey.begin(), vchPubKey.end()); - return IsValid(); + fSuccessful = IsValid(); } while (false); - ECDSA_SIG_free(sig); - Invalidate(); - return false; + EC_KEY_free(pkey); + if (!fSuccessful) + Invalidate(); + return fSuccessful; } bool CPubKey::Verify(const uint256 &hash, const std::vector& vchSig) const