summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2021-12-20 13:06:15 -0800
committerBob Halley <halley@dnspython.org>2021-12-20 13:08:41 -0800
commit72348d4698a8f8b209fbdf9e72738904ad31b930 (patch)
tree670ca7b96a351335d281c3be367fb2da54870cf4
parent701169f45853cc7651a680a979679d046db409aa (diff)
downloaddnspython-72348d4698a8f8b209fbdf9e72738904ad31b930.tar.gz
Allow unknown digest types [#625]
(cherry picked from commit d2b4a140d6da9d2d60570152a2507d96614b1326)
-rw-r--r--dns/rdtypes/dsbase.py2
-rw-r--r--tests/test_dnssec.py25
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 = []