From: Kees Monshouwer Date: Thu, 28 Nov 2013 07:56:06 +0000 (+0100) Subject: cleanup hmac calculation functions X-Git-Tag: rec-3.6.0-rc1~328^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6a54db92bb6229d0a41701d1f9e067c6229e7912;p=pdns cleanup hmac calculation functions --- diff --git a/pdns/dnssecinfra.cc b/pdns/dnssecinfra.cc index 24753d9e3..85fb5ada9 100644 --- a/pdns/dnssecinfra.cc +++ b/pdns/dnssecinfra.cc @@ -9,11 +9,11 @@ #include #include "dnssecinfra.hh" #include "dnsseckeeper.hh" +#include #include #include // for 'operator+=()' #include #include "base64.hh" -#include "md5.hh" #include "sha.hh" #include "namespaces.hh" using namespace boost::assign; @@ -421,35 +421,15 @@ void decodeDERIntegerSequence(const std::string& input, vector& output) } } -string calculateMD5HMAC(const std::string& key_, const std::string& text) +string calculateMD5HMAC(const std::string& key, const std::string& text) { - unsigned char key[64] = {0}; - key_.copy((char*)key,64); - unsigned char keyIpad[64]; - unsigned char keyOpad[64]; - - //~ cerr<<"Key: "<(key.c_str()), key.size(), reinterpret_cast(text.c_str()), text.size(), hash); + res.assign(reinterpret_cast(hash), 16); - return md5_2.get(); + return res; } string calculateSHAHMAC(const std::string& key, const std::string& text, TSIGHashEnum hasher) @@ -460,46 +440,31 @@ string calculateSHAHMAC(const std::string& key, const std::string& text, TSIGHas switch(hasher) { case TSIG_SHA1: { - sha1_context ctx; - sha1_hmac_starts(&ctx, reinterpret_cast(key.c_str()), key.size()); - sha1_hmac_update(&ctx, reinterpret_cast(text.c_str()), text.size()); - sha1_hmac_finish(&ctx, hash); + sha1_hmac(reinterpret_cast(key.c_str()), key.size(), reinterpret_cast(text.c_str()), text.size(), hash); res.assign(reinterpret_cast(hash), 20); break; }; case TSIG_SHA224: { - sha2_context ctx; - sha2_hmac_starts(&ctx, reinterpret_cast(key.c_str()), key.size(), 1); - sha2_hmac_update(&ctx, reinterpret_cast(text.c_str()), text.size()); - sha2_hmac_finish(&ctx, hash); + sha2_hmac(reinterpret_cast(key.c_str()), key.size(), reinterpret_cast(text.c_str()), text.size(), hash, 1); res.assign(reinterpret_cast(hash), 28); break; }; case TSIG_SHA256: { - sha2_context ctx; - sha2_hmac_starts(&ctx, reinterpret_cast(key.c_str()), key.size(), 0); - sha2_hmac_update(&ctx, reinterpret_cast(text.c_str()), text.size()); - sha2_hmac_finish(&ctx, hash); + sha2_hmac(reinterpret_cast(key.c_str()), key.size(), reinterpret_cast(text.c_str()), text.size(), hash, 0); res.assign(reinterpret_cast(hash), 32); break; }; case TSIG_SHA384: { - sha4_context ctx; - sha4_hmac_starts(&ctx, reinterpret_cast(key.c_str()), key.size(), 1); - sha4_hmac_update(&ctx, reinterpret_cast(text.c_str()), text.size()); - sha4_hmac_finish(&ctx, hash); + sha4_hmac(reinterpret_cast(key.c_str()), key.size(), reinterpret_cast(text.c_str()), text.size(), hash, 1); res.assign(reinterpret_cast(hash), 48); break; }; case TSIG_SHA512: { - sha4_context ctx; - sha4_hmac_starts(&ctx, reinterpret_cast(key.c_str()), key.size(), 0); - sha4_hmac_update(&ctx, reinterpret_cast(text.c_str()), text.size()); - sha4_hmac_finish(&ctx, hash); + sha4_hmac(reinterpret_cast(key.c_str()), key.size(), reinterpret_cast(text.c_str()), text.size(), hash, 0); res.assign(reinterpret_cast(hash), 64); break; }; @@ -510,12 +475,12 @@ string calculateSHAHMAC(const std::string& key, const std::string& text, TSIGHas return res; } -string calculateHMAC(const std::string& key_, const std::string& text, TSIGHashEnum hash) { - if (hash == TSIG_MD5) return calculateMD5HMAC(key_, text); - +string calculateHMAC(const std::string& key, const std::string& text, TSIGHashEnum hash) { + if (hash == TSIG_MD5) return calculateMD5HMAC(key, text); + // add other algorithms here - return calculateSHAHMAC(key_, text, hash); + return calculateSHAHMAC(key, text, hash); } string makeTSIGMessageFromTSIGPacket(const string& opacket, unsigned int tsigOffset, const string& keyname, const TSIGRecordContent& trc, const string& previous, bool timersonly, unsigned int dnsHeaderOffset) diff --git a/pdns/dnssecinfra.hh b/pdns/dnssecinfra.hh index cc8746d3a..96362a44c 100644 --- a/pdns/dnssecinfra.hh +++ b/pdns/dnssecinfra.hh @@ -130,9 +130,9 @@ void addRRSigs(DNSSECKeeper& dk, DNSBackend& db, const std::set #include -class MD5Summer -{ -public: - MD5Summer() { md5_starts(&d_context); }; - void feed(const std::string &str) { feed(str.c_str(), str.length()); } - void feed(const char* ptr, size_t len) { md5_update(&d_context, reinterpret_cast(ptr), len); }; - const std::string get() const { - md5_context ctx2; - unsigned char result[16] = {0}; - ctx2=d_context; - md5_finish(&ctx2, result); - return std::string(result, result + sizeof result); - }; -private: - MD5Summer(const MD5Summer&); - MD5Summer& operator=(const MD5Summer&); - - md5_context d_context; -}; - inline std::string pdns_md5sum(const std::string& input) { unsigned char result[16] = {0}; diff --git a/pdns/test-md5_hh.cc b/pdns/test-md5_hh.cc index 08960d330..132ff44b2 100644 --- a/pdns/test-md5_hh.cc +++ b/pdns/test-md5_hh.cc @@ -10,28 +10,6 @@ using namespace boost; BOOST_AUTO_TEST_SUITE(test_md5_hh) -BOOST_AUTO_TEST_CASE(test_md5summer) -{ - std::string result = "a3 24 8c e3 1a 88 a6 40 e6 30 73 98 57 6d 06 9e "; - std::vector cases = boost::assign::list_of - ("a ") - ("quick ") - ("brown ") - ("fox ") - ("jumped ") - ("over ") - ("the ") - ("lazy ") - ("dog"); - - MD5Summer s; - BOOST_FOREACH(std::string item, cases) { - s.feed(item); - } - - BOOST_CHECK_EQUAL(makeHexDump(s.get()), result); -} - 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 ";