2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-09-02 15:05:16 +00:00

[2387] Add DNSKEY support in wire data generator

Also convert some existing DNSKEY test data to use wire data generated
from spec files.
This commit is contained in:
Mukund Sivaraman
2013-04-01 16:19:57 +05:30
parent ea89361128
commit 8117b69a1c
10 changed files with 89 additions and 49 deletions

View File

@@ -325,7 +325,7 @@ What you are expected to do is as follows:
examples.
"""
import configparser, re, time, socket, sys
import configparser, re, time, socket, sys, base64
from datetime import datetime
from optparse import OptionParser
@@ -413,6 +413,11 @@ def encode_string(name, len=None):
return '%0.*x' % (len * 2, name)
return ''.join(['%02x' % ord(ch) for ch in name])
def encode_bytes(name, len=None):
if type(name) is int and len is not None:
return '%0.*x' % (len * 2, name)
return ''.join(['%02x' % ch for ch in name])
def count_namelabels(name):
if name == '.': # special case
return 0
@@ -888,6 +893,42 @@ class AFSDB(RR):
f.write('# SUBTYPE=%d SERVER=%s\n' % (self.subtype, self.server))
f.write('%04x %s\n' % (self.subtype, server_wire))
class DNSKEY(RR):
'''Implements rendering DNSKEY RDATA in the test data format.
Configurable parameters are as follows (see code below for the
default values):
- flags (16-bit int): The flags field.
- protocol (8-bit int): The protocol field.
- algorithm (8-bit int): The algorithm field.
- digest (string): The key digest field.
'''
flags = 257
protocol = 3
algorithm = 5
digest = 'AAECAwQFBgcICQoLDA0ODw=='
def dump(self, f):
decoded_digest = base64.b64decode(bytes(self.digest, 'ascii'))
if self.rdlen is None:
self.rdlen = 4 + len(decoded_digest)
else:
self.rdlen = int(self.rdlen)
self.dump_header(f, self.rdlen)
f.write('# FLAGS=%d\n' % (self.flags))
f.write('%04x\n' % (self.flags))
f.write('# PROTOCOL=%d\n' % (self.protocol))
f.write('%02x\n' % (self.protocol))
f.write('# ALGORITHM=%d\n' % (self.algorithm))
f.write('%02x\n' % (self.algorithm))
f.write('# DIGEST=%s\n' % (self.digest))
f.write('%s\n' % (encode_bytes(decoded_digest)))
class NSECBASE(RR):
'''Implements rendering NSEC/NSEC3 type bitmaps commonly used for
these RRs. The NSEC and NSEC3 classes will be inherited from this