]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Allow unknown digest types [#625]
authorBob Halley <halley@dnspython.org>
Mon, 20 Dec 2021 21:06:15 +0000 (13:06 -0800)
committerBob Halley <halley@dnspython.org>
Mon, 20 Dec 2021 21:08:41 +0000 (13:08 -0800)
(cherry picked from commit d2b4a140d6da9d2d60570152a2507d96614b1326)

dns/rdtypes/dsbase.py
tests/test_dnssec.py

index 403e9371a701404703de70456b368ebe60021c0c..0c2e7471b10ab2f37c7469fb2d000d8871f0b8a0 100644 (file)
@@ -46,14 +46,12 @@ class DSBase(dns.rdata.Rdata):
         self.algorithm = dns.dnssec.Algorithm.make(algorithm)
         self.digest_type = self._as_uint8(digest_type)
         self.digest = self._as_bytes(digest)
-
         try:
             if len(self.digest) != self._digest_length_by_type[self.digest_type]:
                 raise ValueError('digest length inconsistent with digest type')
         except KeyError:
             if self.digest_type == 0:  # reserved, RFC 3658 Sec. 2.4
                 raise ValueError('digest type 0 is reserved')
-            raise ValueError('unknown digest type')
 
     def to_text(self, origin=None, relativize=True, **kw):
         kw = kw.copy()
index b018b8623e2d6f053f077259c6f9bbe9a27c96bf..12651d7df22ed84a7b9cb4f9721604797c36932f 100644 (file)
@@ -497,18 +497,19 @@ class DNSSECMakeDSTestCase(unittest.TestCase):
             with self.assertRaises(dns.dnssec.UnsupportedAlgorithm):
                 ds = dns.dnssec.make_ds(abs_example, example_sep_key, algorithm)
 
-    def testInvalidDigestType(self):  # type: () -> None
-        digest_type_errors = {
-            (dns.rdatatype.DS, 0): 'digest type 0 is reserved',
-            (dns.rdatatype.DS, 5): 'unknown digest type',
-            (dns.rdatatype.CDS, 5): 'unknown digest type',
-        }
-        for (rdtype, digest_type), msg in digest_type_errors.items():
-            with self.assertRaises(dns.exception.SyntaxError) as cm:
-                dns.rdata.from_text(dns.rdataclass.IN,
-                                    rdtype,
-                                    f'18673 3 {digest_type} 71b71d4f3e11bbd71b4eff12cde69f7f9215bbe7')
-            self.assertEqual(msg, str(cm.exception))
+    def testReservedDigestType(self):  # type: () -> None
+        with self.assertRaises(dns.exception.SyntaxError) as cm:
+            dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.DS,
+                                f'18673 3 0 71b71d4f3e11bbd71b4eff12cde69f7f9215bbe7')
+        self.assertEqual('digest type 0 is reserved', str(cm.exception))
+
+    def testUnknownDigestType(self):  # type: () -> None
+        digest_types = [dns.rdatatype.DS, dns.rdatatype.CDS]
+        for rdtype in digest_types:
+            rd = dns.rdata.from_text(dns.rdataclass.IN, rdtype,
+                                     f'18673 3 5 71b71d4f3e11bbd71b4eff12cde69f7f9215bbe7')
+            self.assertEqual(rd.digest_type, 5)
+            self.assertEqual(rd.digest, bytes.fromhex('71b71d4f3e11bbd71b4eff12cde69f7f9215bbe7'))
 
     def testInvalidDigestLength(self):  # type: () -> None
         test_records = []