class SHADigest
{
public:
- SHADigest(unsigned int bits)
+ SHADigest(unsigned int bits) :
+ mdctx(std::unique_ptr<EVP_MD_CTX, void (*)(EVP_MD_CTX*)>(EVP_MD_CTX_new(), EVP_MD_CTX_free))
{
- mdctx = EVP_MD_CTX_new();
if (mdctx == nullptr) {
throw std::runtime_error("SHADigest: EVP_MD_CTX_new failed");
}
default:
throw std::runtime_error("SHADigest: unsupported size");
}
- if (EVP_DigestInit_ex(mdctx, md, NULL) == 0) {
+ if (EVP_DigestInit_ex(mdctx.get(), md, NULL) == 0) {
throw std::runtime_error("SHADigest: init error");
}
}
~SHADigest()
{
// No free of md needed afaik
- if (mdctx != nullptr) {
- EVP_MD_CTX_free(mdctx);
- }
}
void process(const std::string& msg)
{
- if (EVP_DigestUpdate(mdctx, msg.data(), msg.size()) == 0) {
+ if (EVP_DigestUpdate(mdctx.get(), msg.data(), msg.size()) == 0) {
throw std::runtime_error("SHADigest: update error");
}
}
std::string md_value;
md_value.resize(EVP_MD_size(md));
unsigned int md_len;
- if (EVP_DigestFinal_ex(mdctx, reinterpret_cast<unsigned char*>(md_value.data()), &md_len) == 0) {
+ if (EVP_DigestFinal_ex(mdctx.get(), reinterpret_cast<unsigned char*>(md_value.data()), &md_len) == 0) {
throw std::runtime_error("SHADigest: finalize error");
}
if (md_len != md_value.size()) {
}
private:
- EVP_MD_CTX* mdctx{nullptr};
+ std::unique_ptr<EVP_MD_CTX, void (*)(EVP_MD_CTX*)> mdctx;
const EVP_MD* md;
};
}
pdns::zonemdVerify(z, zpt, validationDone, validationOK);
}
catch (const PDNSException& e) {
- cerr << e.reason << endl;
BOOST_CHECK(ex);
}
catch (const std::exception& e) {
- cerr << e.what() << endl;
BOOST_CHECK(ex);
}