109inline std::string
verifySignature(std::string_view publicKeyPem, std::string_view signaturePem, std::string_view data)
111 auto error = std::string();
114 auto derSignature = std::pair<std::unique_ptr<std::uint8_t[]>, std::uint32_t>();
119 BIO *
const keyBio = BIO_new_mem_buf(publicKeyPem.data(),
static_cast<int>(publicKeyPem.size()));
124 EVP_PKEY *
const publicKey = PEM_read_bio_PUBKEY(keyBio,
nullptr,
nullptr,
nullptr);
130 EVP_MD_CTX *
const mdCtx = EVP_MD_CTX_new();
132 EVP_PKEY_free(publicKey);
136 if (EVP_DigestVerifyInit(mdCtx,
nullptr, EVP_sha256(),
nullptr, publicKey) != 1) {
138 }
else if (EVP_DigestVerifyUpdate(mdCtx, data.data(), data.size()) != 1) {
141 switch (EVP_DigestVerifyFinal(mdCtx, derSignature.first.get(), derSignature.second)) {
143 error =
"incorrect signature";
153 EVP_MD_CTX_free(mdCtx);
154 EVP_PKEY_free(publicKey);
std::string parsePemSignature(std::string_view pemSignature, std::pair< std::unique_ptr< std::uint8_t[]>, std::uint32_t > &decodedSignature)
Converts PEM-encoded signature into DER-encoded signature.
std::string verifySignature(std::string_view publicKeyPem, std::string_view signaturePem, std::string_view data)
Verifies data with the specified public key publicKeyPem and signature signaturePem.
CPP_UTILITIES_EXPORT std::pair< std::unique_ptr< std::uint8_t[]>, std::uint32_t > decodeBase64(const char *encodedStr, const std::uint32_t strSize)
Decodes the specified Base64 encoded string.