From f2e4e85afcf7f78f6657e76d08430fae813b554d Mon Sep 17 00:00:00 2001 From: Fred Morcos Date: Mon, 22 Jan 2024 15:19:13 +0100 Subject: [PATCH] Cleanup pdns/digests.hh --- .not-formatted | 1 - pdns/digests.hh | 46 +++++++++++++++++++++++------------------ pdns/dnssecsigner.cc | 4 ++-- pdns/test-digests_hh.cc | 4 ++-- 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/.not-formatted b/.not-formatted index ecf20a0344f5..9667e5829e37 100644 --- a/.not-formatted +++ b/.not-formatted @@ -29,7 +29,6 @@ ./pdns/dbdnsseckeeper.cc ./pdns/delaypipe.cc ./pdns/delaypipe.hh -./pdns/digests.hh ./pdns/distributor.hh ./pdns/dns.cc ./pdns/dns.hh diff --git a/pdns/digests.hh b/pdns/digests.hh index 14a926c368e5..29a00145e825 100644 --- a/pdns/digests.hh +++ b/pdns/digests.hh @@ -21,61 +21,67 @@ */ #pragma once +#include "config.h" +#include #include #include #include -inline std::string pdns_hash(const EVP_MD * md, const std::string& input) +namespace pdns +{ +inline std::string hash(const EVP_MD* messageDigest, const std::string& input) { #if defined(HAVE_EVP_MD_CTX_NEW) && defined(HAVE_EVP_MD_CTX_FREE) - auto mdctx = std::unique_ptr(EVP_MD_CTX_new(), EVP_MD_CTX_free); + auto mdctx = std::unique_ptr(EVP_MD_CTX_new(), EVP_MD_CTX_free); #else - auto mdctx = std::unique_ptr(EVP_MD_CTX_create(), EVP_MD_CTX_destroy); + auto mdctx = std::unique_ptr(EVP_MD_CTX_create(), EVP_MD_CTX_destroy); #endif if (!mdctx) { - throw std::runtime_error(std::string(EVP_MD_name(md)) + " context initialization failed"); + throw std::runtime_error(std::string(EVP_MD_name(messageDigest)) + " context initialization failed"); } - if (EVP_DigestInit_ex(mdctx.get(), md, nullptr) != 1) { - throw std::runtime_error(std::string(EVP_MD_name(md)) + " EVP initialization failed"); + if (EVP_DigestInit_ex(mdctx.get(), messageDigest, nullptr) != 1) { + throw std::runtime_error(std::string(EVP_MD_name(messageDigest)) + " EVP initialization failed"); } if (EVP_DigestUpdate(mdctx.get(), input.data(), input.size()) != 1) { - throw std::runtime_error(std::string(EVP_MD_name(md)) + " EVP update failed"); + throw std::runtime_error(std::string(EVP_MD_name(messageDigest)) + " EVP update failed"); } - unsigned int written; + unsigned int written = 0; std::string result; - result.resize(EVP_MD_size(md)); + result.resize(EVP_MD_size(messageDigest)); - if (EVP_DigestFinal_ex(mdctx.get(), const_cast(reinterpret_cast(result.c_str())), &written) != 1) { - throw std::runtime_error(std::string(EVP_MD_name(md)) + " EVP final failed"); + // NOLINTNEXTLINE(*-cast): Using OpenSSL C APIs. + if (EVP_DigestFinal_ex(mdctx.get(), const_cast(reinterpret_cast(result.c_str())), &written) != 1) { + throw std::runtime_error(std::string(EVP_MD_name(messageDigest)) + " EVP final failed"); } if (written != result.size()) { - throw std::runtime_error(std::string(EVP_MD_name(md)) + " EVP final wrote " + std::to_string(written) + ", expected " + std::to_string(result.size())); + throw std::runtime_error(std::string(EVP_MD_name(messageDigest)) + " EVP final wrote " + std::to_string(written) + ", expected " + std::to_string(result.size())); } return result; } -inline std::string pdns_md5(const std::string& input) +inline std::string md5(const std::string& input) { - const auto md = EVP_md5(); - if (md == nullptr) { + const auto* const messageDigest = EVP_md5(); + if (messageDigest == nullptr) { throw std::runtime_error("The MD5 digest is not available via the OpenSSL EVP interface"); } - return pdns_hash(md, input); + return pdns::hash(messageDigest, input); } -inline std::string pdns_sha1(const std::string& input) +inline std::string sha1(const std::string& input) { - const auto md = EVP_sha1(); - if (md == nullptr) { + const auto* const messageDigest = EVP_sha1(); + if (messageDigest == nullptr) { throw std::runtime_error("The SHA1 digest is not available via the OpenSSL EVP interface"); } - return pdns_hash(md, input); + return pdns::hash(messageDigest, input); +} } diff --git a/pdns/dnssecsigner.cc b/pdns/dnssecsigner.cc index 24489e2b4fb0..e7fd007ffc05 100644 --- a/pdns/dnssecsigner.cc +++ b/pdns/dnssecsigner.cc @@ -45,10 +45,10 @@ AtomicCounter* g_signatureCount; static std::string getLookupKeyFromMessage(const std::string& msg) { try { - return pdns_md5(msg); + return pdns::md5(msg); } catch(const std::runtime_error& e) { - return pdns_sha1(msg); + return pdns::sha1(msg); } } diff --git a/pdns/test-digests_hh.cc b/pdns/test-digests_hh.cc index a22bfa8c7b29..61b6ff61619f 100644 --- a/pdns/test-digests_hh.cc +++ b/pdns/test-digests_hh.cc @@ -19,7 +19,7 @@ BOOST_AUTO_TEST_SUITE(test_digests_hh) BOOST_AUTO_TEST_CASE(test_pdns_md5sum) { std::string result = "a3 24 8c e3 1a 88 a6 40 e6 30 73 98 57 6d 06 9e "; - std::string sum = pdns_md5("a quick brown fox jumped over the lazy dog"); + std::string sum = pdns::md5("a quick brown fox jumped over the lazy dog"); BOOST_CHECK_EQUAL(makeHexDump(sum), result); } @@ -27,7 +27,7 @@ BOOST_AUTO_TEST_CASE(test_pdns_md5sum) BOOST_AUTO_TEST_CASE(test_pdns_sha1sum) { std::string result = "b9 37 10 0d c9 57 b3 86 d9 cb 77 fc 90 c0 18 22 fd eb 6e 7f "; - std::string sum = pdns_sha1("a quick brown fox jumped over the lazy dog"); + std::string sum = pdns::sha1("a quick brown fox jumped over the lazy dog"); BOOST_CHECK_EQUAL(makeHexDump(sum), result); }