From: Remi Gacogne Date: Thu, 28 Jan 2021 09:36:28 +0000 (+0100) Subject: Add more unit tests directly testing hashQNameWithSalt() X-Git-Tag: dnsdist-1.6.0-alpha1^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0503c8fa1dbaa586e6882394d4a2721d983e00ba;p=thirdparty%2Fpdns.git Add more unit tests directly testing hashQNameWithSalt() --- diff --git a/pdns/test-signers.cc b/pdns/test-signers.cc index 3d6872309f..6302462b88 100644 --- a/pdns/test-signers.cc +++ b/pdns/test-signers.cc @@ -259,27 +259,74 @@ 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> 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(salt), sizeof(salt)), iterations, DNSName(name)); - BOOST_CHECK_EQUAL(toBase32Hex(hash), expectedHash); + const unsigned char salt[] = { 0xaa, 0xbb, 0xcc, 0xdd }; + const unsigned int iterations{12}; + const std::vector> namesToHashes = { + { "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(salt), sizeof(salt)), iterations, DNSName(name)); + BOOST_CHECK_EQUAL(toBase32Hex(hash), expectedHash); + } + } + + { + /* no additional iterations, very short salt */ + const unsigned char salt[] = { 0xFF }; + const unsigned int iterations{0}; + const std::vector> namesToHashes = { + { "example", "s9dp8o2l6jgqgg26ecobtjooe7p019cs" }, + }; + + for (const auto& [name, expectedHash] : namesToHashes) { + auto hash = hashQNameWithSalt(std::string(reinterpret_cast(salt), sizeof(salt)), iterations, DNSName(name)); + BOOST_CHECK_EQUAL(toBase32Hex(hash), expectedHash); + } + } + + { + /* only one iteration */ + const unsigned char salt[] = { 0xaa, 0xbb, 0xcc, 0xdd }; + const unsigned int iterations{1}; + const std::vector> namesToHashes = { + { "example", "ulddquehrj5jpf50ga76vgqr1oq40133" }, + }; + + for (const auto& [name, expectedHash] : namesToHashes) { + auto hash = hashQNameWithSalt(std::string(reinterpret_cast(salt), sizeof(salt)), iterations, DNSName(name)); + BOOST_CHECK_EQUAL(toBase32Hex(hash), expectedHash); + } + } + + { + /* 65535 iterations, long salt */ + unsigned char salt[255]; + for (unsigned char idx = 0; idx < 255; idx++) { + salt[idx] = idx; + }; + const unsigned int iterations{65535}; + const std::vector> namesToHashes = { + { "example", "no95j4cfile8avstr7bn4aj9he18trri" }, + }; + + for (const auto& [name, expectedHash] : namesToHashes) { + auto hash = hashQNameWithSalt(std::string(reinterpret_cast(salt), sizeof(salt)), iterations, DNSName(name)); + BOOST_CHECK_EQUAL(toBase32Hex(hash), expectedHash); + } } }