39 const std::string &sig,
40 const std::string &data,
41 const std::string &digest)
44 EVP_MD_CTX *md_ctx =
nullptr;
45 EVP_PKEY *pkey =
nullptr;
53 EVP_MD_CTX_free(md_ctx);
57 dig = EVP_get_digestbyname(digest.c_str());
59 throw Exception(
"OpenSSLSign::verify: unknown digest: " + digest);
62 pkey = X509_get_pubkey(cert.
obj());
64 throw Exception(
"OpenSSLSign::verify: no public key");
72 catch (
const std::exception &e)
74 throw Exception(std::string(
"OpenSSLSign::verify: base64 decode error on signature: ") + e.what());
78 md_ctx = EVP_MD_CTX_new();
81 EVP_VerifyInit(md_ctx, dig);
82 EVP_VerifyUpdate(md_ctx, data.c_str(), data.length());
83 if (EVP_VerifyFinal(md_ctx, binsig.
c_data(), numeric_cast<unsigned int>(binsig.
length()), pkey) != 1)