From 0dbd8a24bb030045156811da4213a1a2a60528a2 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 31 Mar 2017 21:34:00 -0400 Subject: [PATCH] verify signature in DER format --- src/key.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/key.cpp b/src/key.cpp index 6ad95be..ab0a159 100644 --- a/src/key.cpp +++ b/src/key.cpp @@ -159,12 +159,15 @@ public: bool Verify(const uint256 &hash, const std::vector& vchSig) { + // decode from DER + ECDSA_SIG *sig = nullptr; + auto p = &vchSig[0]; + d2i_ECDSA_SIG (&sig, &p, vchSig.size()); const EC_POINT * pub = EC_KEY_get0_public_key(pkey); BIGNUM * d = BN_bin2bn (hash.begin (), 32, nullptr); - BIGNUM * r = BN_bin2bn (&vchSig[0], 32, NULL); - BIGNUM * s = BN_bin2bn (&vchSig[32], 32, NULL); - bool ret = i2p::crypto::GetGOSTR3410Curve (i2p::crypto::eGOSTR3410CryptoProA)->Verify (pub, d, r, s); - BN_free (d); BN_free (r); BN_free (s); + bool ret = i2p::crypto::GetGOSTR3410Curve (i2p::crypto::eGOSTR3410CryptoProA)->Verify (pub, d, sig->r, sig->s); + BN_free (d); + ECDSA_SIG_free(sig); return ret; }