diff options
author | Bob Halley <halley@dnspython.org> | 2021-12-20 13:06:15 -0800 |
---|---|---|
committer | Bob Halley <halley@dnspython.org> | 2021-12-20 13:08:41 -0800 |
commit | 72348d4698a8f8b209fbdf9e72738904ad31b930 (patch) | |
tree | 670ca7b96a351335d281c3be367fb2da54870cf4 | |
parent | 701169f45853cc7651a680a979679d046db409aa (diff) | |
download | dnspython-72348d4698a8f8b209fbdf9e72738904ad31b930.tar.gz |
Allow unknown digest types [#625]
(cherry picked from commit d2b4a140d6da9d2d60570152a2507d96614b1326)
-rw-r--r-- | dns/rdtypes/dsbase.py | 2 | ||||
-rw-r--r-- | tests/test_dnssec.py | 25 |
2 files changed, 13 insertions, 14 deletions
diff --git a/dns/rdtypes/dsbase.py b/dns/rdtypes/dsbase.py index 403e937..0c2e747 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 b018b86..12651d7 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 = [] |