]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Add a unit test directly testing hashQNameWithSalt()
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 27 Jan 2021 21:27:42 +0000 (22:27 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 29 Jan 2021 11:12:51 +0000 (12:12 +0100)
pdns/dnssecinfra.cc
pdns/test-signers.cc

index 110f5f1dfaa71fc2f8f1e05abd3b0893864a702a..d57a13ae6f0c950ae771eb5a1a423de18df109b6 100644 (file)
@@ -491,6 +491,7 @@ string hashQNameWithSalt(const NSEC3PARAMRecordContent& ns3prc, const DNSName& q
 
 string hashQNameWithSalt(const std::string& salt, unsigned int iterations, const DNSName& qname)
 {
+  // rfc5155 section 5
   unsigned int times = iterations;
   unsigned char hash[SHA_DIGEST_LENGTH];
   string toHash(qname.toDNSStringLC() + salt);
index a2f9626d1dcdbd2d1b752c88006768723ded8ae6..3d6872309f8d183f4bd0071eb09c35d9943753ce 100644 (file)
@@ -8,10 +8,12 @@
 
 #include <boost/tuple/tuple.hpp>
 
+#include "base32.hh"
 #include "base64.hh"
 #include "dnsseckeeper.hh"
 #include "dnssecinfra.hh"
 #include "misc.hh"
+
 BOOST_AUTO_TEST_SUITE(test_signers)
 
 static const std::string message = "Very good, young padawan.";
@@ -256,4 +258,29 @@ BOOST_AUTO_TEST_CASE(test_ed448_signer) {
 }
 #endif /* defined(HAVE_LIBDECAF) || defined(HAVE_LIBCRYPTO_ED448) */
 
+BOOST_AUTO_TEST_CASE(test_hash_qname_with_salt) {
+  const unsigned char salt[] = { 0xaa, 0xbb, 0xcc, 0xdd };
+  const unsigned int iterations{12};
+  const std::vector<std::pair<std::string, std::string>> namesToHashes = {
+    // rfc5155 appendix A
+    { "example", "0p9mhaveqvm6t7vbl5lop2u3t2rp3tom" },
+    { "a.example", "35mthgpgcu1qg68fab165klnsnk3dpvl" },
+    { "ai.example", "gjeqe526plbf1g8mklp59enfd789njgi" },
+    { "ns1.example", "2t7b4g4vsa5smi47k61mv5bv1a22bojr" },
+    { "ns2.example", "q04jkcevqvmu85r014c7dkba38o0ji5r" },
+    { "w.example", "k8udemvp1j2f7eg6jebps17vp3n8i58h" },
+    { "*.w.example", "r53bq7cc2uvmubfu5ocmm6pers9tk9en" },
+    { "x.w.example", "b4um86eghhds6nea196smvmlo4ors995" },
+    { "y.w.example", "ji6neoaepv8b5o6k4ev33abha8ht9fgc" },
+    { "x.y.w.example", "2vptu5timamqttgl4luu9kg21e0aor3s" },
+    { "xx.example", "t644ebqk9bibcna874givr6joj62mlhv" },
+    { "2t7b4g4vsa5smi47k61mv5bv1a22bojr.example", "kohar7mbb8dc2ce8a9qvl8hon4k53uhi" },
+  };
+
+  for (const auto& [name, expectedHash] : namesToHashes) {
+    auto hash = hashQNameWithSalt(std::string(reinterpret_cast<const char*>(salt), sizeof(salt)), iterations, DNSName(name));
+    BOOST_CHECK_EQUAL(toBase32Hex(hash), expectedHash);
+  }
+}
+
 BOOST_AUTO_TEST_SUITE_END()