From: Bob Halley Date: Mon, 20 Dec 2021 21:06:15 +0000 (-0800) Subject: Allow unknown digest types [#625] X-Git-Tag: v2.2.0rc1~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=72348d4698a8f8b209fbdf9e72738904ad31b930;p=thirdparty%2Fdnspython.git Allow unknown digest types [#625] (cherry picked from commit d2b4a140d6da9d2d60570152a2507d96614b1326) --- diff --git a/dns/rdtypes/dsbase.py b/dns/rdtypes/dsbase.py index 403e9371..0c2e7471 100644 --- a/dns/rdtypes/dsbase.py +++ b/dns/rdtypes/dsbase.py @@ -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() diff --git a/tests/test_dnssec.py b/tests/test_dnssec.py index b018b862..12651d7d 100644 --- a/tests/test_dnssec.py +++ b/tests/test_dnssec.py @@ -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 = []