Current File : /home/mmdealscpanel/yummmdeals.com/rdtypes.tar
nsbase.py000064400000005443150401434760006403 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""NS-like base classes."""

from io import BytesIO

import dns.exception
import dns.rdata
import dns.name


class NSBase(dns.rdata.Rdata):

    """Base class for rdata that is like an NS record.

    @ivar target: the target name of the rdata
    @type target: dns.name.Name object"""

    __slots__ = ['target']

    def __init__(self, rdclass, rdtype, target):
        super(NSBase, self).__init__(rdclass, rdtype)
        self.target = target

    def to_text(self, origin=None, relativize=True, **kw):
        target = self.target.choose_relativity(origin, relativize)
        return str(target)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        target = tok.get_name()
        target = target.choose_relativity(origin, relativize)
        tok.get_eol()
        return cls(rdclass, rdtype, target)

    def to_wire(self, file, compress=None, origin=None):
        self.target.to_wire(file, compress, origin)

    def to_digestable(self, origin=None):
        return self.target.to_digestable(origin)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (target, cused) = dns.name.from_wire(wire[: current + rdlen],
                                             current)
        if cused != rdlen:
            raise dns.exception.FormError
        if origin is not None:
            target = target.relativize(origin)
        return cls(rdclass, rdtype, target)

    def choose_relativity(self, origin=None, relativize=True):
        self.target = self.target.choose_relativity(origin, relativize)


class UncompressedNS(NSBase):

    """Base class for rdata that is like an NS record, but whose name
    is not compressed when convert to DNS wire format, and whose
    digestable form is not downcased."""

    def to_wire(self, file, compress=None, origin=None):
        super(UncompressedNS, self).to_wire(file, None, origin)

    def to_digestable(self, origin=None):
        f = BytesIO()
        self.to_wire(f, None, origin)
        return f.getvalue()
__init__.py000064400000001577150401434760006673 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""DNS rdata type classes"""

__all__ = [
    'ANY',
    'IN',
    'euibase',
    'mxbase',
    'nsbase',
]
IN/APL.py000064400000012164150401434760006050 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct
import binascii

import dns.exception
import dns.inet
import dns.rdata
import dns.tokenizer
from dns._compat import xrange


class APLItem(object):

    """An APL list item.

    @ivar family: the address family (IANA address family registry)
    @type family: int
    @ivar negation: is this item negated?
    @type negation: bool
    @ivar address: the address
    @type address: string
    @ivar prefix: the prefix length
    @type prefix: int
    """

    __slots__ = ['family', 'negation', 'address', 'prefix']

    def __init__(self, family, negation, address, prefix):
        self.family = family
        self.negation = negation
        self.address = address
        self.prefix = prefix

    def __str__(self):
        if self.negation:
            return "!%d:%s/%s" % (self.family, self.address, self.prefix)
        else:
            return "%d:%s/%s" % (self.family, self.address, self.prefix)

    def to_wire(self, file):
        if self.family == 1:
            address = dns.inet.inet_pton(dns.inet.AF_INET, self.address)
        elif self.family == 2:
            address = dns.inet.inet_pton(dns.inet.AF_INET6, self.address)
        else:
            address = binascii.unhexlify(self.address)
        #
        # Truncate least significant zero bytes.
        #
        last = 0
        for i in xrange(len(address) - 1, -1, -1):
            if address[i] != chr(0):
                last = i + 1
                break
        address = address[0: last]
        l = len(address)
        assert l < 128
        if self.negation:
            l |= 0x80
        header = struct.pack('!HBB', self.family, self.prefix, l)
        file.write(header)
        file.write(address)


class APL(dns.rdata.Rdata):

    """APL record.

    @ivar items: a list of APL items
    @type items: list of APL_Item
    @see: RFC 3123"""

    __slots__ = ['items']

    def __init__(self, rdclass, rdtype, items):
        super(APL, self).__init__(rdclass, rdtype)
        self.items = items

    def to_text(self, origin=None, relativize=True, **kw):
        return ' '.join(map(str, self.items))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        items = []
        while 1:
            token = tok.get().unescape()
            if token.is_eol_or_eof():
                break
            item = token.value
            if item[0] == '!':
                negation = True
                item = item[1:]
            else:
                negation = False
            (family, rest) = item.split(':', 1)
            family = int(family)
            (address, prefix) = rest.split('/', 1)
            prefix = int(prefix)
            item = APLItem(family, negation, address, prefix)
            items.append(item)

        return cls(rdclass, rdtype, items)

    def to_wire(self, file, compress=None, origin=None):
        for item in self.items:
            item.to_wire(file)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        items = []
        while 1:
            if rdlen == 0:
                break
            if rdlen < 4:
                raise dns.exception.FormError
            header = struct.unpack('!HBB', wire[current: current + 4])
            afdlen = header[2]
            if afdlen > 127:
                negation = True
                afdlen -= 128
            else:
                negation = False
            current += 4
            rdlen -= 4
            if rdlen < afdlen:
                raise dns.exception.FormError
            address = wire[current: current + afdlen].unwrap()
            l = len(address)
            if header[0] == 1:
                if l < 4:
                    address += '\x00' * (4 - l)
                address = dns.inet.inet_ntop(dns.inet.AF_INET, address)
            elif header[0] == 2:
                if l < 16:
                    address += '\x00' * (16 - l)
                address = dns.inet.inet_ntop(dns.inet.AF_INET6, address)
            else:
                #
                # This isn't really right according to the RFC, but it
                # seems better than throwing an exception
                #
                address = address.encode('hex_codec')
            current += afdlen
            rdlen -= afdlen
            item = APLItem(header[0], negation, address, header[1])
            items.append(item)
        return cls(rdclass, rdtype, items)
IN/__init__.py000064400000001705150401434770007173 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""Class IN rdata type classes."""

__all__ = [
    'A',
    'AAAA',
    'APL',
    'DHCID',
    'KX',
    'NAPTR',
    'NSAP',
    'NSAP_PTR',
    'PX',
    'SRV',
    'WKS',
]
IN/DHCID.py000064400000003743150401434770006253 0ustar00# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import base64

import dns.exception


class DHCID(dns.rdata.Rdata):

    """DHCID record

    @ivar data: the data (the content of the RR is opaque as far as the
    DNS is concerned)
    @type data: string
    @see: RFC 4701"""

    __slots__ = ['data']

    def __init__(self, rdclass, rdtype, data):
        super(DHCID, self).__init__(rdclass, rdtype)
        self.data = data

    def to_text(self, origin=None, relativize=True, **kw):
        return dns.rdata._base64ify(self.data)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        chunks = []
        while 1:
            t = tok.get().unescape()
            if t.is_eol_or_eof():
                break
            if not t.is_identifier():
                raise dns.exception.SyntaxError
            chunks.append(t.value.encode())
        b64 = b''.join(chunks)
        data = base64.b64decode(b64)
        return cls(rdclass, rdtype, data)

    def to_wire(self, file, compress=None, origin=None):
        file.write(self.data)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        data = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, data)
IN/NSAP_PTR.py000064400000001575150401434770006727 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.nsbase


class NSAP_PTR(dns.rdtypes.nsbase.UncompressedNS):

    """NSAP-PTR record"""
IN/IPSECKEY.py000064400000013061150401435000006631 0ustar00# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct
import base64

import dns.exception
import dns.inet
import dns.name


class IPSECKEY(dns.rdata.Rdata):

    """IPSECKEY record

    @ivar precedence: the precedence for this key data
    @type precedence: int
    @ivar gateway_type: the gateway type
    @type gateway_type: int
    @ivar algorithm: the algorithm to use
    @type algorithm: int
    @ivar gateway: the public key
    @type gateway: None, IPv4 address, IPV6 address, or domain name
    @ivar key: the public key
    @type key: string
    @see: RFC 4025"""

    __slots__ = ['precedence', 'gateway_type', 'algorithm', 'gateway', 'key']

    def __init__(self, rdclass, rdtype, precedence, gateway_type, algorithm,
                 gateway, key):
        super(IPSECKEY, self).__init__(rdclass, rdtype)
        if gateway_type == 0:
            if gateway != '.' and gateway is not None:
                raise SyntaxError('invalid gateway for gateway type 0')
            gateway = None
        elif gateway_type == 1:
            # check that it's OK
            dns.inet.inet_pton(dns.inet.AF_INET, gateway)
        elif gateway_type == 2:
            # check that it's OK
            dns.inet.inet_pton(dns.inet.AF_INET6, gateway)
        elif gateway_type == 3:
            pass
        else:
            raise SyntaxError(
                'invalid IPSECKEY gateway type: %d' % gateway_type)
        self.precedence = precedence
        self.gateway_type = gateway_type
        self.algorithm = algorithm
        self.gateway = gateway
        self.key = key

    def to_text(self, origin=None, relativize=True, **kw):
        if self.gateway_type == 0:
            gateway = '.'
        elif self.gateway_type == 1:
            gateway = self.gateway
        elif self.gateway_type == 2:
            gateway = self.gateway
        elif self.gateway_type == 3:
            gateway = str(self.gateway.choose_relativity(origin, relativize))
        else:
            raise ValueError('invalid gateway type')
        return '%d %d %d %s %s' % (self.precedence, self.gateway_type,
                                   self.algorithm, gateway,
                                   dns.rdata._base64ify(self.key))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        precedence = tok.get_uint8()
        gateway_type = tok.get_uint8()
        algorithm = tok.get_uint8()
        if gateway_type == 3:
            gateway = tok.get_name().choose_relativity(origin, relativize)
        else:
            gateway = tok.get_string()
        chunks = []
        while 1:
            t = tok.get().unescape()
            if t.is_eol_or_eof():
                break
            if not t.is_identifier():
                raise dns.exception.SyntaxError
            chunks.append(t.value.encode())
        b64 = b''.join(chunks)
        key = base64.b64decode(b64)
        return cls(rdclass, rdtype, precedence, gateway_type, algorithm,
                   gateway, key)

    def to_wire(self, file, compress=None, origin=None):
        header = struct.pack("!BBB", self.precedence, self.gateway_type,
                             self.algorithm)
        file.write(header)
        if self.gateway_type == 0:
            pass
        elif self.gateway_type == 1:
            file.write(dns.inet.inet_pton(dns.inet.AF_INET, self.gateway))
        elif self.gateway_type == 2:
            file.write(dns.inet.inet_pton(dns.inet.AF_INET6, self.gateway))
        elif self.gateway_type == 3:
            self.gateway.to_wire(file, None, origin)
        else:
            raise ValueError('invalid gateway type')
        file.write(self.key)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        if rdlen < 3:
            raise dns.exception.FormError
        header = struct.unpack('!BBB', wire[current: current + 3])
        gateway_type = header[1]
        current += 3
        rdlen -= 3
        if gateway_type == 0:
            gateway = None
        elif gateway_type == 1:
            gateway = dns.inet.inet_ntop(dns.inet.AF_INET,
                                         wire[current: current + 4])
            current += 4
            rdlen -= 4
        elif gateway_type == 2:
            gateway = dns.inet.inet_ntop(dns.inet.AF_INET6,
                                         wire[current: current + 16])
            current += 16
            rdlen -= 16
        elif gateway_type == 3:
            (gateway, cused) = dns.name.from_wire(wire[: current + rdlen],
                                                  current)
            current += cused
            rdlen -= cused
        else:
            raise dns.exception.FormError('invalid IPSECKEY gateway type')
        key = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, header[0], gateway_type, header[2],
                   gateway, key)
IN/__pycache__/NSAP_PTR.cpython-36.opt-1.pyc000064400000000562150401435000014130 0ustar003

�b�W}�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�NSAP_PTRzNSAP-PTR recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/NSAP_PTR.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZUncompressedNSrrrrr�<module>sIN/__pycache__/KX.cpython-36.opt-1.pyc000064400000000540150401435010013161 0ustar003

�b�Wq�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�KXz	KX recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/KX.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedMXrrrrr�<module>sIN/__pycache__/NSAP.cpython-36.opt-1.pyc000064400000003262150401435010013404 0ustar003

�b�W�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�NSAPzTNSAP record.

    @ivar address: a NASP
    @type address: string
    @see: RFC 1706�addresscstt|�j||�||_dS)N)�superr�__init__r)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/NSAP.pyr!sz
NSAP.__init__NTcKsdtj|j�j�S)Nz0x%s)�binasciiZhexlifyr�decode)r�origin�
relativize�kwr
r
r�to_text%szNSAP.to_textcCsv|j�}|j�|dd�dkr,tjjd��|dd�jdd�}t|�ddkr\tjjd��tj|j	��}||||�S)Nr�Z0xzstring does not start with 0x�.�zhexstring has odd length)
Z
get_stringZget_eol�dnsZ	exception�SyntaxError�replace�lenrZ	unhexlify�encode)�clsrr�tokrrrr
r
r�	from_text(szNSAP.from_textcCs|j|j�dS)N)�writer)r�file�compressrr
r
r�to_wire4szNSAP.to_wirecCs ||||�j�}||||�S)N)Zunwrap)rrrZwireZcurrentZrdlenrrr
r
r�	from_wire7szNSAP.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr r!�
__classcell__r
r
)r	rrs

r)rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZrdataZRdatarr
r
r
r�<module>sIN/__pycache__/APL.cpython-36.pyc000064400000007331150401435020012322 0ustar003

�b�Wt�@sdddlZddlZddlZddlZddlZddlZddlmZGdd�de	�Z
Gdd�dejj�Z
dS)�N)�xrangec@s4eZdZdZddddgZdd�Zdd	�Zd
d�ZdS)
�APLItema'An APL list item.

    @ivar family: the address family (IANA address family registry)
    @type family: int
    @ivar negation: is this item negated?
    @type negation: bool
    @ivar address: the address
    @type address: string
    @ivar prefix: the prefix length
    @type prefix: int
    �family�negation�address�prefixcCs||_||_||_||_dS)N)rrrr)�selfrrrr�r	�/usr/lib/python3.6/APL.py�__init__*szAPLItem.__init__cCs2|jrd|j|j|jfSd|j|j|jfSdS)Nz	!%d:%s/%sz%d:%s/%s)rrrr)rr	r	r
�__str__0szAPLItem.__str__cCs�|jdkr tjjtjj|j�}n,|jdkr@tjjtjj|j�}ntj|j�}d}x6t	t
|�ddd�D]}||td�krf|d}PqfW|d|�}t
|�}|dks�t�|j
r�|dO}tjd|j|j|�}|j|�|j|�dS)N��r�z!HBB���r)r�dns�inetZ	inet_pton�AF_INETr�AF_INET6�binasciiZ	unhexlifyr�len�chr�AssertionErrorr�struct�packr�write)r�filerZlast�i�l�headerr	r	r
�to_wire6s$


zAPLItem.to_wireN)�__name__�
__module__�__qualname__�__doc__�	__slots__rrr r	r	r	r
rs
rcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�APLzfAPL record.

    @ivar items: a list of APL items
    @type items: list of APL_Item
    @see: RFC 3123�itemscstt|�j||�||_dS)N)�superr&rr')r�rdclass�rdtyper')�	__class__r	r
rYszAPL.__init__NTcKsdjtt|j��S)N� )�join�map�strr')r�origin�
relativize�kwr	r	r
�to_text]szAPL.to_textcCs�g}x�|j�j�}|j�rP|j}|ddkr@d}	|dd�}nd}	|jdd�\}
}t|
�}
|jdd�\}}
t|
�}
t|
|	||
�}|j|�qW||||�S)Nr�!Tr
F�:�/)�getZunescapeZ
is_eol_or_eof�value�split�intr�append)�clsr)r*�tokr0r1r'�token�itemrr�restrrr	r	r
�	from_text`s"z
APL.from_textcCsx|jD]}|j|�qWdS)N)r'r )rr�compressr0r?r	r	r
r vszAPL.to_wirecCsTg}�x@|dkrP|dkr"tjj�tjd|||d��}|d}	|	dkrXd}
|	d8}	nd}
|d7}|d8}||	kr|tjj�||||	�j�}t|�}|dd	kr�|dkr�|d
d|7}tjjtjj	|�}nD|ddk�r
|dkr�|d
d|7}tjjtjj
|�}n
|jd�}||	7}||	8}t|d|
||d	�}
|j
|
�qW||||�S)
Nr�z!HBBr�TrFr
���	hex_codec)rZ	exceptionZ	FormErrorr�unpackZunwraprrZ	inet_ntoprr�encoderr;)r<r)r*ZwireZcurrentZrdlenr0r'rZafdlenrrrr?r	r	r
�	from_wirezs@

z
APL.from_wire)NT)NT)NN)N)r!r"r#r$r%rr3�classmethodrAr rJ�
__classcell__r	r	)r+r
r&Os

r&)rrZ
dns.exceptionrZdns.inetZ	dns.rdataZ
dns.tokenizerZdns._compatr�objectrZrdataZRdatar&r	r	r	r
�<module>s5IN/__pycache__/SRV.cpython-36.pyc000064400000004363150401435030012363 0ustar003

�b�W��@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsfeZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
ddd�Z�ZS)�SRVaSRV record

    @ivar priority: the priority
    @type priority: int
    @ivar weight: the weight
    @type weight: int
    @ivar port: the port of the service
    @type port: int
    @ivar target: the target host
    @type target: dns.name.Name object
    @see: RFC 2782�priority�weight�port�targetcs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__��/usr/lib/python3.6/SRV.pyr's
zSRV.__init__NTcKs$|jj||�}d|j|j|j|fS)Nz%d %d %d %s)r�choose_relativityrrr)r	�origin�
relativize�kwrr
r
r�to_text.szSRV.to_textc
CsH|j�}|j�}|j�}|jd�}	|	j||�}	|j�|||||||	�S)N)Z
get_uint16Zget_namerZget_eol)
�clsr
r�tokrrrrrrr
r
r�	from_text3s
z
SRV.from_textcCs4tjd|j|j|j�}|j|�|jj|||�dS)Nz!HHH)�struct�packrrr�writer�to_wire)r	�file�compressrZ
three_intsr
r
rr=s
zSRV.to_wirecCs�tjd|||d��\}}}	|d7}|d8}tjj|d||�|�\}
}||kr\tjj�|dk	rn|
j|�}
||||||	|
�S)Nz!HHH�)r�unpack�dns�name�	from_wireZ	exceptionZ	FormErrorr)rr
rZwireZcurrentZrdlenrrrrrZcusedr
r
rr!Bs

z
SRV.from_wirecCs|jj||�|_dS)N)rr)r	rrr
r
rrPszSRV.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr!r�
__classcell__r
r
)rrrs
	

r)rZ
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarr
r
r
r�<module>sIN/__pycache__/NAPTR.cpython-36.pyc000064400000006354150401435030012577 0ustar003

�b�Wv�@sXddlZddlZddlZddlZddlmZmZdd�Zdd�Z	Gdd�dej
j�ZdS)	�N)�xrange�	text_typecCs4t|�}|dkst�|jtjd|��|j|�dS)N�z!B)�len�AssertionError�write�struct�pack)�file�s�l�r
�/usr/lib/python3.6/NAPTR.py�
_write_stringsrcCst|t�r|j�S|S)N)�
isinstancer�encode)�valuer
r
r�	_sanitizes
rcsjeZdZdZddddddgZ�fdd	�Zddd
�Zeddd��Zddd�Z	eddd��Z
ddd�Z�ZS)�NAPTRa}NAPTR record

    @ivar order: order
    @type order: int
    @ivar preference: preference
    @type preference: int
    @ivar flags: flags
    @type flags: string
    @ivar service: service
    @type service: string
    @ivar regexp: regular expression
    @type regexp: string
    @ivar replacement: replacement name
    @type replacement: dns.name.Name object
    @see: RFC 3403�order�
preference�flags�service�regexp�replacementc		sFtt|�j||�t|�|_t|�|_t|�|_||_||_||_	dS)N)
�superr�__init__rrrrrrr)	�self�rdclass�rdtyperrrrrr)�	__class__r
rr:s


zNAPTR.__init__NTcKsD|jj||�}d|j|jtjj|j�tjj|j�tjj|j	�|fS)Nz%d %d "%s" "%s" "%s" %s)
r�choose_relativityrr�dns�rdataZ	_escapifyrrr)r�origin�
relativize�kwrr
r
r�to_textDsz
NAPTR.to_textc	CsZ|j�}|j�}|j�}|j�}	|j�}
|j�}|j||�}|j�|||||||	|
|�S)N)Z
get_uint16Z
get_stringZget_namer!Zget_eol)�clsrr�tokr$r%rrrrrrr
r
r�	from_textMszNAPTR.from_textcCsTtjd|j|j�}|j|�t||j�t||j�t||j�|j	j
|||�dS)Nz!HH)rr	rrrrrrrr�to_wire)rr
�compressr$Ztwo_intsr
r
rr+Zs
z
NAPTR.to_wirec	Cstjd|||d��\}}|d7}|d8}g}	xntd�D]b}
||}|d7}|d8}||ksf|dkrntjj�||||�j�}||7}||8}|	j|�q:Wtjj	|d||�|�\}
}||kr�tjj�|dk	r�|
j
|�}
||||||	d|	d|	d|
�S)Nz!HH���r�)r�unpackrr"Z	exceptionZ	FormErrorZunwrap�append�name�	from_wirer%)r(rrZwireZcurrentZrdlenr$rrZstrings�irrrZcusedr
r
rr4bs,

zNAPTR.from_wirecCs|jj||�|_dS)N)rr!)rr$r%r
r
rr!{szNAPTR.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr'�classmethodr*r+r4r!�
__classcell__r
r
)r rr%s


	
r)
rZ
dns.exceptionr"Zdns.nameZ	dns.rdataZdns._compatrrrrr#ZRdatarr
r
r
r�<module>sIN/__pycache__/IPSECKEY.cpython-36.pyc000064400000007032150401435040013122 0ustar003

�b�W1�@s@ddlZddlZddlZddlZddlZGdd�dejj�ZdS)�Ncs^eZdZdZdddddgZ�fdd�Zddd�Zedd
d��Zddd�Z	eddd��Z
�ZS)�IPSECKEYa�IPSECKEY record

    @ivar precedence: the precedence for this key data
    @type precedence: int
    @ivar gateway_type: the gateway type
    @type gateway_type: int
    @ivar algorithm: the algorithm to use
    @type algorithm: int
    @ivar gateway: the public key
    @type gateway: None, IPv4 address, IPV6 address, or domain name
    @ivar key: the public key
    @type key: string
    @see: RFC 4025�
precedence�gateway_type�	algorithm�gateway�keycs�tt|�j||�|dkr8|dkr2|dk	r2td��d}nN|dkrTtjjtjj|�n2|dkrptjjtjj|�n|dkrzntd|��||_	||_
||_||_||_
dS)Nr�.z"invalid gateway for gateway type 0���z!invalid IPSECKEY gateway type: %d)�superr�__init__�SyntaxError�dns�inet�	inet_pton�AF_INET�AF_INET6rrrrr)�self�rdclass�rdtyperrrrr)�	__class__��/usr/lib/python3.6/IPSECKEY.pyr
*s$
zIPSECKEY.__init__NTcKs||jdkrd}nJ|jdkr"|j}n8|jdkr4|j}n&|jdkrRt|jj||��}ntd��d|j|j|j|tjj	|j
�fS)Nrrr	r
rzinvalid gateway typez%d %d %d %s %s)rr�str�choose_relativity�
ValueErrorrrr�rdataZ
_base64ifyr)r�origin�
relativize�kwrrrr�to_textBs




zIPSECKEY.to_textcCs�|j�}|j�}|j�}|dkr2|j�j||�}	n|j�}	g}
x:|j�j�}|j�rVP|j�sftj	j
�|
j|jj
��q@Wdj|
�}tj|�}
|||||||	|
�S)Nr�)Z	get_uint8Zget_namerZ
get_string�getZunescapeZ
is_eol_or_eofZ
is_identifierr�	exceptionr�append�value�encode�join�base64Z	b64decode)�clsrr�tokrrrrrrZchunks�tZb64rrrr�	from_textQs$

zIPSECKEY.from_textcCs�tjd|j|j|j�}|j|�|jdkr,np|jdkrR|jtjjtjj	|j
��nJ|jdkrx|jtjjtjj|j
��n$|jdkr�|j
j|d|�nt
d��|j|j�dS)Nz!BBBrr	r
rzinvalid gateway type)�struct�packrrr�writerrrrrr�to_wirerr)r�file�compressr�headerrrrr1gs




zIPSECKEY.to_wirecCs2|dkrtjj�tjd|||d��}|d}|d7}|d8}|dkrNd}	n�|dkr�tjjtjj|||d��}	|d7}|d8}n||dkr�tjjtjj|||d��}	|d7}|d8}nD|dkr�tj	j
|d||�|�\}	}
||
7}||
8}ntjjd��||||�j�}||||d||d|	|�S)	Nrz!BBBr	r�r
�zinvalid IPSECKEY gateway type)rr$Z	FormErrorr.�unpackrZ	inet_ntoprr�name�	from_wireZunwrap)r*rrZwireZcurrentZrdlenrr4rrZcusedrrrrr9ws6



zIPSECKEY.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r
r!�classmethodr-r1r9�
__classcell__rr)rrrs

r)	r.r)Z
dns.exceptionrZdns.inetZdns.namerZRdatarrrrr�<module>s
IN/__pycache__/NSAP_PTR.cpython-36.pyc000064400000000562150401435050013176 0ustar003

�b�W}�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�NSAP_PTRzNSAP-PTR recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/NSAP_PTR.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZUncompressedNSrrrrr�<module>sIN/__pycache__/NSAP.cpython-36.pyc000064400000003262150401435050012451 0ustar003

�b�W�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�NSAPzTNSAP record.

    @ivar address: a NASP
    @type address: string
    @see: RFC 1706�addresscstt|�j||�||_dS)N)�superr�__init__r)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/NSAP.pyr!sz
NSAP.__init__NTcKsdtj|j�j�S)Nz0x%s)�binasciiZhexlifyr�decode)r�origin�
relativize�kwr
r
r�to_text%szNSAP.to_textcCsv|j�}|j�|dd�dkr,tjjd��|dd�jdd�}t|�ddkr\tjjd��tj|j	��}||||�S)Nr�Z0xzstring does not start with 0x�.�zhexstring has odd length)
Z
get_stringZget_eol�dnsZ	exception�SyntaxError�replace�lenrZ	unhexlify�encode)�clsrr�tokrrrr
r
r�	from_text(szNSAP.from_textcCs|j|j�dS)N)�writer)r�file�compressrr
r
r�to_wire4szNSAP.to_wirecCs ||||�j�}||||�S)N)Zunwrap)rrrZwireZcurrentZrdlenrrr
r
r�	from_wire7szNSAP.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr r!�
__classcell__r
r
)r	rrs

r)rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZrdataZRdatarr
r
r
r�<module>sIN/__pycache__/NAPTR.cpython-36.opt-1.pyc000064400000006311150401435050013531 0ustar003

�b�Wv�@sXddlZddlZddlZddlZddlmZmZdd�Zdd�Z	Gdd�dej
j�ZdS)	�N)�xrange�	text_typecCs(t|�}|jtjd|��|j|�dS)Nz!B)�len�write�struct�pack)�file�s�l�r�/usr/lib/python3.6/NAPTR.py�
_write_stringsr
cCst|t�r|j�S|S)N)�
isinstancer�encode)�valuerrr�	_sanitizes
rcsjeZdZdZddddddgZ�fdd	�Zddd
�Zeddd��Zddd�Z	eddd��Z
ddd�Z�ZS)�NAPTRa}NAPTR record

    @ivar order: order
    @type order: int
    @ivar preference: preference
    @type preference: int
    @ivar flags: flags
    @type flags: string
    @ivar service: service
    @type service: string
    @ivar regexp: regular expression
    @type regexp: string
    @ivar replacement: replacement name
    @type replacement: dns.name.Name object
    @see: RFC 3403�order�
preference�flags�service�regexp�replacementc		sFtt|�j||�t|�|_t|�|_t|�|_||_||_||_	dS)N)
�superr�__init__rrrrrrr)	�self�rdclass�rdtyperrrrrr)�	__class__rrr:s


zNAPTR.__init__NTcKsD|jj||�}d|j|jtjj|j�tjj|j�tjj|j	�|fS)Nz%d %d "%s" "%s" "%s" %s)
r�choose_relativityrr�dns�rdataZ	_escapifyrrr)r�origin�
relativize�kwrrrr�to_textDsz
NAPTR.to_textc	CsZ|j�}|j�}|j�}|j�}	|j�}
|j�}|j||�}|j�|||||||	|
|�S)N)Z
get_uint16Z
get_stringZget_namerZget_eol)�clsrr�tokr"r#rrrrrrrrr�	from_textMszNAPTR.from_textcCsTtjd|j|j�}|j|�t||j�t||j�t||j�|j	j
|||�dS)Nz!HH)rrrrrr
rrrr�to_wire)rr�compressr"Ztwo_intsrrrr)Zs
z
NAPTR.to_wirec	Cstjd|||d��\}}|d7}|d8}g}	xntd�D]b}
||}|d7}|d8}||ksf|dkrntjj�||||�j�}||7}||8}|	j|�q:Wtjj	|d||�|�\}
}||kr�tjj�|dk	r�|
j
|�}
||||||	d|	d|	d|
�S)Nz!HH���r�)r�unpackrr Z	exceptionZ	FormErrorZunwrap�append�name�	from_wirer#)r&rrZwireZcurrentZrdlenr"rrZstrings�ir
r	rZcusedrrrr2bs,

zNAPTR.from_wirecCs|jj||�|_dS)N)rr)rr"r#rrrr{szNAPTR.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr%�classmethodr(r)r2r�
__classcell__rr)rrr%s


	
r)
rZ
dns.exceptionr Zdns.nameZ	dns.rdataZdns._compatrrr
rr!ZRdatarrrrr�<module>sIN/__pycache__/AAAA.cpython-36.pyc000064400000003037150401435050012373 0ustar003

�b�W��@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�AAAAzhAAAA record.

    @ivar address: an IPv6 address
    @type address: string (in the standard IPv6 format)�addresscs.tt|�j||�tjjtjj|�||_dS)N)�superr�__init__�dns�inet�	inet_pton�AF_INET6r)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/AAAA.pyrsz
AAAA.__init__NTcKs|jS)N)r)r
�origin�
relativize�kwrrr�to_text%szAAAA.to_textcCs|j�}|j�||||�S)N)Zget_identifierZget_eol)�clsrr�tokrrrrrr�	from_text(szAAAA.from_textcCs|jtjjtjj|j��dS)N)�writerrrr	r)r
�file�compressrrrr�to_wire.szAAAA.to_wirecCs*tjjtjj||||��}||||�S)N)rrZ	inet_ntopr	)rrrZwireZcurrentZrdlenrrrrr�	from_wire1szAAAA.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr�
__classcell__rr)r
rrs

r)Z
dns.exceptionrZdns.inetZ	dns.rdataZ
dns.tokenizerZrdataZRdatarrrrr�<module>sIN/__pycache__/PX.cpython-36.pyc000064400000004441150401435060012240 0ustar003

�b�WB
�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsdeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
ddd�Z�ZS)�PXz�PX record.

    @ivar preference: the preference value
    @type preference: int
    @ivar map822: the map822 name
    @type map822: dns.name.Name object
    @ivar mapx400: the mapx400 name
    @type mapx400: dns.name.Name object
    @see: RFC 2163�
preference�map822�mapx400cs(tt|�j||�||_||_||_dS)N)�superr�__init__rrr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/PX.pyr%szPX.__init__NTcKs,|jj||�}|jj||�}d|j||fS)Nz%d %s %s)r�choose_relativityrr)r�origin�
relativize�kwrrrrr
�to_text+sz
PX.to_textc	CsJ|j�}|j�}|j||�}|jd�}|j||�}|j�||||||�S)N)Z
get_uint16Zget_namerZget_eol)	�clsr	r
�tokrrrrrrrr
�	from_text0s
zPX.from_textcCs<tjd|j�}|j|�|jj|d|�|jj|d|�dS)Nz!H)�struct�packr�writer�to_wirer)r�file�compressrZprefrrr
r:s
z
PX.to_wirecCs�tjd|||d��\}|d7}|d8}tjj|d||�|�\}}	|	|krXtjj�||	7}||	8}|dk	rz|j|�}tjj|d||�|�\}
}	|	|kr�tjj�|dk	r�|
j|�}
||||||
�S)Nz!H�)r�unpack�dns�name�	from_wireZ	exceptionZ	FormErrorr)rr	r
ZwireZcurrentZrdlenrrrZcusedrrrr
r @s$



zPX.from_wirecCs$|jj||�|_|jj||�|_dS)N)rrr)rrrrrr
rUszPX.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr r�
__classcell__rr)rr
rs


	
r)rZ
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarrrrr
�<module>sIN/__pycache__/AAAA.cpython-36.opt-1.pyc000064400000003037150401435060013333 0ustar003

�b�W��@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�AAAAzhAAAA record.

    @ivar address: an IPv6 address
    @type address: string (in the standard IPv6 format)�addresscs.tt|�j||�tjjtjj|�||_dS)N)�superr�__init__�dns�inet�	inet_pton�AF_INET6r)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/AAAA.pyrsz
AAAA.__init__NTcKs|jS)N)r)r
�origin�
relativize�kwrrr�to_text%szAAAA.to_textcCs|j�}|j�||||�S)N)Zget_identifierZget_eol)�clsrr�tokrrrrrr�	from_text(szAAAA.from_textcCs|jtjjtjj|j��dS)N)�writerrrr	r)r
�file�compressrrrr�to_wire.szAAAA.to_wirecCs*tjjtjj||||��}||||�S)N)rrZ	inet_ntopr	)rrrZwireZcurrentZrdlenrrrrr�	from_wire1szAAAA.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr�
__classcell__rr)r
rrs

r)Z
dns.exceptionrZdns.inetZ	dns.rdataZ
dns.tokenizerZrdataZRdatarrrrr�<module>sIN/__pycache__/WKS.cpython-36.pyc000064400000005276150401435060012364 0ustar003

�b�W��@sXddlZddlZddlZddlZddlmZejd�Zejd�Z	Gdd�dej
j�ZdS)�N)�xrange�tcp�udpcsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�WKSz�WKS record

    @ivar address: the address
    @type address: string
    @ivar protocol: the protocol
    @type protocol: int
    @ivar bitmap: the bitmap
    @type bitmap: string
    @see: RFC 1035�address�protocol�bitmapcs>tt|�j||�||_||_t|t�s4t|�|_n||_dS)N)�superr�__init__rr�
isinstance�	bytearrayr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/WKS.pyr
)s
zWKS.__init__NTc	Kszg}xXtdt|j��D]D}|j|}x4tdd�D]&}|d|?@r0|jt|d|��q0WqWdj|�}d|j|j|fS)Nr��� z%s %d %s)r�lenr�append�str�joinrr)	r
�origin�
relativize�kw�bits�iZbyte�j�textrrr�to_text2s

zWKS.to_textcCs|j�}|j�}|j�r"t|�}n
tj|�}t�}x�|j�j�}	|	j�rJP|	j	j�r`t|	j	�}
n8|t
krx|tkrxtd��|t
kr�d}nd}tj
|	j	|�}
|
d}t|�}
|
|dkr�x t|
|d�D]}|jd�q�W||d|
d?B||<q4Wtjj|�}||||||�S)Nzprotocol must be TCP or UDPrrr�rr)Z
get_string�isdigit�int�socket�getprotobynamer�getZunescapeZ
is_eol_or_eof�value�
_proto_udp�
_proto_tcp�NotImplementedErrorZ
getservbynamerrr�dns�rdataZ_truncate_bitmap)�clsrr�tokrrrrr�tokenZservZ
protocol_textr�lrrrr�	from_text<s4


z
WKS.from_textcCs<|jtjj|j��tjd|j�}|j|�|j|j�dS)Nz!B)	�writer,�ipv4Z	inet_atonr�struct�packrr)r
�file�compressrrrrr�to_wire\s
zWKS.to_wirec
Csjtjj|||d��}tjd||d|d��\}|d7}|d8}||||�j�}	||||||	�S)N�z!B�)r,r4Z	inet_ntoar5�unpackZunwrap)
r.rrZwireZcurrentZrdlenrrrrrrr�	from_wirebsz
WKS.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r
r!�classmethodr2r9r=�
__classcell__rr)rrrs

	


r)
r%r5Zdns.ipv4r,Z	dns.rdataZdns._compatrr&r*r)r-ZRdatarrrrr�<module>s

IN/__pycache__/IPSECKEY.cpython-36.opt-1.pyc000064400000007032150401435060014063 0ustar003

�b�W1�@s@ddlZddlZddlZddlZddlZGdd�dejj�ZdS)�Ncs^eZdZdZdddddgZ�fdd�Zddd�Zedd
d��Zddd�Z	eddd��Z
�ZS)�IPSECKEYa�IPSECKEY record

    @ivar precedence: the precedence for this key data
    @type precedence: int
    @ivar gateway_type: the gateway type
    @type gateway_type: int
    @ivar algorithm: the algorithm to use
    @type algorithm: int
    @ivar gateway: the public key
    @type gateway: None, IPv4 address, IPV6 address, or domain name
    @ivar key: the public key
    @type key: string
    @see: RFC 4025�
precedence�gateway_type�	algorithm�gateway�keycs�tt|�j||�|dkr8|dkr2|dk	r2td��d}nN|dkrTtjjtjj|�n2|dkrptjjtjj|�n|dkrzntd|��||_	||_
||_||_||_
dS)Nr�.z"invalid gateway for gateway type 0���z!invalid IPSECKEY gateway type: %d)�superr�__init__�SyntaxError�dns�inet�	inet_pton�AF_INET�AF_INET6rrrrr)�self�rdclass�rdtyperrrrr)�	__class__��/usr/lib/python3.6/IPSECKEY.pyr
*s$
zIPSECKEY.__init__NTcKs||jdkrd}nJ|jdkr"|j}n8|jdkr4|j}n&|jdkrRt|jj||��}ntd��d|j|j|j|tjj	|j
�fS)Nrrr	r
rzinvalid gateway typez%d %d %d %s %s)rr�str�choose_relativity�
ValueErrorrrr�rdataZ
_base64ifyr)r�origin�
relativize�kwrrrr�to_textBs




zIPSECKEY.to_textcCs�|j�}|j�}|j�}|dkr2|j�j||�}	n|j�}	g}
x:|j�j�}|j�rVP|j�sftj	j
�|
j|jj
��q@Wdj|
�}tj|�}
|||||||	|
�S)Nr�)Z	get_uint8Zget_namerZ
get_string�getZunescapeZ
is_eol_or_eofZ
is_identifierr�	exceptionr�append�value�encode�join�base64Z	b64decode)�clsrr�tokrrrrrrZchunks�tZb64rrrr�	from_textQs$

zIPSECKEY.from_textcCs�tjd|j|j|j�}|j|�|jdkr,np|jdkrR|jtjjtjj	|j
��nJ|jdkrx|jtjjtjj|j
��n$|jdkr�|j
j|d|�nt
d��|j|j�dS)Nz!BBBrr	r
rzinvalid gateway type)�struct�packrrr�writerrrrrr�to_wirerr)r�file�compressr�headerrrrr1gs




zIPSECKEY.to_wirecCs2|dkrtjj�tjd|||d��}|d}|d7}|d8}|dkrNd}	n�|dkr�tjjtjj|||d��}	|d7}|d8}n||dkr�tjjtjj|||d��}	|d7}|d8}nD|dkr�tj	j
|d||�|�\}	}
||
7}||
8}ntjjd��||||�j�}||||d||d|	|�S)	Nrz!BBBr	r�r
�zinvalid IPSECKEY gateway type)rr$Z	FormErrorr.�unpackrZ	inet_ntoprr�name�	from_wireZunwrap)r*rrZwireZcurrentZrdlenrr4rrZcusedrrrrr9ws6



zIPSECKEY.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r
r!�classmethodr-r1r9�
__classcell__rr)rrrs

r)	r.r)Z
dns.exceptionrZdns.inetZdns.namerZRdatarrrrr�<module>s
IN/__pycache__/APL.cpython-36.opt-1.pyc000064400000007273150401435060013272 0ustar003

�b�Wt�@sdddlZddlZddlZddlZddlZddlZddlmZGdd�de	�Z
Gdd�dejj�Z
dS)�N)�xrangec@s4eZdZdZddddgZdd�Zdd	�Zd
d�ZdS)
�APLItema'An APL list item.

    @ivar family: the address family (IANA address family registry)
    @type family: int
    @ivar negation: is this item negated?
    @type negation: bool
    @ivar address: the address
    @type address: string
    @ivar prefix: the prefix length
    @type prefix: int
    �family�negation�address�prefixcCs||_||_||_||_dS)N)rrrr)�selfrrrr�r	�/usr/lib/python3.6/APL.py�__init__*szAPLItem.__init__cCs2|jrd|j|j|jfSd|j|j|jfSdS)Nz	!%d:%s/%sz%d:%s/%s)rrrr)rr	r	r
�__str__0szAPLItem.__str__cCs�|jdkr tjjtjj|j�}n,|jdkr@tjjtjj|j�}ntj|j�}d}x6t	t
|�ddd�D]}||td�krf|d}PqfW|d|�}t
|�}|jr�|dO}t
jd|j|j|�}|j|�|j|�dS)N��r�z!HBB���r)r�dns�inetZ	inet_pton�AF_INETr�AF_INET6�binasciiZ	unhexlifyr�len�chrr�struct�packr�write)r�filerZlast�i�l�headerr	r	r
�to_wire6s"


zAPLItem.to_wireN)�__name__�
__module__�__qualname__�__doc__�	__slots__rrrr	r	r	r
rs
rcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�APLzfAPL record.

    @ivar items: a list of APL items
    @type items: list of APL_Item
    @see: RFC 3123�itemscstt|�j||�||_dS)N)�superr%rr&)r�rdclass�rdtyper&)�	__class__r	r
rYszAPL.__init__NTcKsdjtt|j��S)N� )�join�map�strr&)r�origin�
relativize�kwr	r	r
�to_text]szAPL.to_textcCs�g}x�|j�j�}|j�rP|j}|ddkr@d}	|dd�}nd}	|jdd�\}
}t|
�}
|jdd�\}}
t|
�}
t|
|	||
�}|j|�qW||||�S)Nr�!Tr
F�:�/)�getZunescapeZ
is_eol_or_eof�value�split�intr�append)�clsr(r)�tokr/r0r&�token�itemrr�restrrr	r	r
�	from_text`s"z
APL.from_textcCsx|jD]}|j|�qWdS)N)r&r)rr�compressr/r>r	r	r
rvszAPL.to_wirecCsTg}�x@|dkrP|dkr"tjj�tjd|||d��}|d}	|	dkrXd}
|	d8}	nd}
|d7}|d8}||	kr|tjj�||||	�j�}t|�}|dd	kr�|dkr�|d
d|7}tjjtjj	|�}nD|ddk�r
|dkr�|d
d|7}tjjtjj
|�}n
|jd�}||	7}||	8}t|d|
||d	�}
|j
|
�qW||||�S)
Nr�z!HBBr�TrFr
���	hex_codec)rZ	exceptionZ	FormErrorr�unpackZunwraprrZ	inet_ntoprr�encoderr:)r;r(r)ZwireZcurrentZrdlenr/r&rZafdlenrrrr>r	r	r
�	from_wirezs@

z
APL.from_wire)NT)NT)NN)N)r r!r"r#r$rr2�classmethodr@rrI�
__classcell__r	r	)r*r
r%Os

r%)rrZ
dns.exceptionrZdns.inetZ	dns.rdataZ
dns.tokenizerZdns._compatr�objectrZrdataZRdatar%r	r	r	r
�<module>s5IN/__pycache__/KX.cpython-36.pyc000064400000000540150401435070012230 0ustar003

�b�Wq�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�KXz	KX recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/KX.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedMXrrrrr�<module>sIN/__pycache__/WKS.cpython-36.opt-1.pyc000064400000005276150401435070013324 0ustar003

�b�W��@sXddlZddlZddlZddlZddlmZejd�Zejd�Z	Gdd�dej
j�ZdS)�N)�xrange�tcp�udpcsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�WKSz�WKS record

    @ivar address: the address
    @type address: string
    @ivar protocol: the protocol
    @type protocol: int
    @ivar bitmap: the bitmap
    @type bitmap: string
    @see: RFC 1035�address�protocol�bitmapcs>tt|�j||�||_||_t|t�s4t|�|_n||_dS)N)�superr�__init__rr�
isinstance�	bytearrayr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/WKS.pyr
)s
zWKS.__init__NTc	Kszg}xXtdt|j��D]D}|j|}x4tdd�D]&}|d|?@r0|jt|d|��q0WqWdj|�}d|j|j|fS)Nr��� z%s %d %s)r�lenr�append�str�joinrr)	r
�origin�
relativize�kw�bits�iZbyte�j�textrrr�to_text2s

zWKS.to_textcCs|j�}|j�}|j�r"t|�}n
tj|�}t�}x�|j�j�}	|	j�rJP|	j	j�r`t|	j	�}
n8|t
krx|tkrxtd��|t
kr�d}nd}tj
|	j	|�}
|
d}t|�}
|
|dkr�x t|
|d�D]}|jd�q�W||d|
d?B||<q4Wtjj|�}||||||�S)Nzprotocol must be TCP or UDPrrr�rr)Z
get_string�isdigit�int�socket�getprotobynamer�getZunescapeZ
is_eol_or_eof�value�
_proto_udp�
_proto_tcp�NotImplementedErrorZ
getservbynamerrr�dns�rdataZ_truncate_bitmap)�clsrr�tokrrrrr�tokenZservZ
protocol_textr�lrrrr�	from_text<s4


z
WKS.from_textcCs<|jtjj|j��tjd|j�}|j|�|j|j�dS)Nz!B)	�writer,�ipv4Z	inet_atonr�struct�packrr)r
�file�compressrrrrr�to_wire\s
zWKS.to_wirec
Csjtjj|||d��}tjd||d|d��\}|d7}|d8}||||�j�}	||||||	�S)N�z!B�)r,r4Z	inet_ntoar5�unpackZunwrap)
r.rrZwireZcurrentZrdlenrrrrrrr�	from_wirebsz
WKS.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r
r!�classmethodr2r9r=�
__classcell__rr)rrrs

	


r)
r%r5Zdns.ipv4r,Z	dns.rdataZdns._compatrr&r*r)r-ZRdatarrrrr�<module>s

IN/__pycache__/A.cpython-36.opt-1.pyc000064400000002764150401435070013037 0ustar003

�b�W=�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�AznA record.

    @ivar address: an IPv4 address
    @type address: string (in the standard "dotted quad" format)�addresscs(tt|�j||�tjj|�||_dS)N)�superr�__init__�dns�ipv4�	inet_atonr)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/A.pyrsz
A.__init__NTcKs|jS)N)r)r	�origin�
relativize�kwr
r
r�to_text%sz	A.to_textcCs|j�}|j�||||�S)N)Zget_identifierZget_eol)�clsr
r�tokrrrr
r
r�	from_text(szA.from_textcCs|jtjj|j��dS)N)�writerrrr)r	�file�compressrr
r
r�to_wire.sz	A.to_wirecCs(tjj||||��j�}||||�S)N)rrZ	inet_ntoa�decode)rr
rZwireZcurrentZrdlenrrr
r
r�	from_wire1szA.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr�
__classcell__r
r
)rrrs

r)Z
dns.exceptionrZdns.ipv4Z	dns.rdataZ
dns.tokenizerZrdataZRdatarr
r
r
r�<module>sIN/__pycache__/A.cpython-36.pyc000064400000002764150401435070012100 0ustar003

�b�W=�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�AznA record.

    @ivar address: an IPv4 address
    @type address: string (in the standard "dotted quad" format)�addresscs(tt|�j||�tjj|�||_dS)N)�superr�__init__�dns�ipv4�	inet_atonr)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/A.pyrsz
A.__init__NTcKs|jS)N)r)r	�origin�
relativize�kwr
r
r�to_text%sz	A.to_textcCs|j�}|j�||||�S)N)Zget_identifierZget_eol)�clsr
r�tokrrrr
r
r�	from_text(szA.from_textcCs|jtjj|j��dS)N)�writerrrr)r	�file�compressrr
r
r�to_wire.sz	A.to_wirecCs(tjj||||��j�}||||�S)N)rrZ	inet_ntoa�decode)rr
rZwireZcurrentZrdlenrrr
r
r�	from_wire1szA.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr�
__classcell__r
r
)rrrs

r)Z
dns.exceptionrZdns.ipv4Z	dns.rdataZ
dns.tokenizerZrdataZRdatarr
r
r
r�<module>sIN/__pycache__/__init__.cpython-36.pyc000064400000000420150401435070013442 0ustar003

�b�W��@s"dZddddddddd	d
dgZdS)
zClass IN rdata type classes.�AZAAAAZAPLZDHCIDZKXZNAPTRZNSAPZNSAP_PTRZPXZSRVZWKSN)�__doc__�__all__�rr�/usr/lib/python3.6/__init__.py�<module>sIN/__pycache__/__init__.cpython-36.opt-1.pyc000064400000000420150401435070014401 0ustar003

�b�W��@s"dZddddddddd	d
dgZdS)
zClass IN rdata type classes.�AZAAAAZAPLZDHCIDZKXZNAPTRZNSAPZNSAP_PTRZPXZSRVZWKSN)�__doc__�__all__�rr�/usr/lib/python3.6/__init__.py�<module>sIN/__pycache__/SRV.cpython-36.opt-1.pyc000064400000004363150401435070013326 0ustar003

�b�W��@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsfeZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
ddd�Z�ZS)�SRVaSRV record

    @ivar priority: the priority
    @type priority: int
    @ivar weight: the weight
    @type weight: int
    @ivar port: the port of the service
    @type port: int
    @ivar target: the target host
    @type target: dns.name.Name object
    @see: RFC 2782�priority�weight�port�targetcs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__��/usr/lib/python3.6/SRV.pyr's
zSRV.__init__NTcKs$|jj||�}d|j|j|j|fS)Nz%d %d %d %s)r�choose_relativityrrr)r	�origin�
relativize�kwrr
r
r�to_text.szSRV.to_textc
CsH|j�}|j�}|j�}|jd�}	|	j||�}	|j�|||||||	�S)N)Z
get_uint16Zget_namerZget_eol)
�clsr
r�tokrrrrrrr
r
r�	from_text3s
z
SRV.from_textcCs4tjd|j|j|j�}|j|�|jj|||�dS)Nz!HHH)�struct�packrrr�writer�to_wire)r	�file�compressrZ
three_intsr
r
rr=s
zSRV.to_wirecCs�tjd|||d��\}}}	|d7}|d8}tjj|d||�|�\}
}||kr\tjj�|dk	rn|
j|�}
||||||	|
�S)Nz!HHH�)r�unpack�dns�name�	from_wireZ	exceptionZ	FormErrorr)rr
rZwireZcurrentZrdlenrrrrrZcusedr
r
rr!Bs

z
SRV.from_wirecCs|jj||�|_dS)N)rr)r	rrr
r
rrPszSRV.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr!r�
__classcell__r
r
)rrrs
	

r)rZ
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarr
r
r
r�<module>sIN/__pycache__/DHCID.cpython-36.pyc000064400000003221150401435070012520 0ustar003

�b�W��@s(ddlZddlZGdd�dejj�ZdS)�NcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�DHCIDz�DHCID record

    @ivar data: the data (the content of the RR is opaque as far as the
    DNS is concerned)
    @type data: string
    @see: RFC 4701�datacstt|�j||�||_dS)N)�superr�__init__r)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/DHCID.pyr szDHCID.__init__NTcKstjj|j�S)N)�dns�rdataZ
_base64ifyr)r�origin�
relativize�kwr
r
r�to_text$sz
DHCID.to_textc
Cs`g}x:|j�j�}|j�rP|j�s,tjj�|j|jj	��qWdj
|�}tj|�}	||||	�S)N�)
�getZunescapeZ
is_eol_or_eofZ
is_identifierrZ	exception�SyntaxError�append�value�encode�join�base64Z	b64decode)
�clsrr�tokrrZchunks�tZb64rr
r
r�	from_text's

zDHCID.from_textcCs|j|j�dS)N)�writer)r�file�compressrr
r
r�to_wire5sz
DHCID.to_wirecCs ||||�j�}||||�S)N)Zunwrap)rrrZwireZcurrentZrdlenrrr
r
r�	from_wire8szDHCID.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr!r"�
__classcell__r
r
)r	rrs

r)rZ
dns.exceptionrr
ZRdatarr
r
r
r�<module>sIN/__pycache__/DHCID.cpython-36.opt-1.pyc000064400000003221150401435070013457 0ustar003

�b�W��@s(ddlZddlZGdd�dejj�ZdS)�NcsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�DHCIDz�DHCID record

    @ivar data: the data (the content of the RR is opaque as far as the
    DNS is concerned)
    @type data: string
    @see: RFC 4701�datacstt|�j||�||_dS)N)�superr�__init__r)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/DHCID.pyr szDHCID.__init__NTcKstjj|j�S)N)�dns�rdataZ
_base64ifyr)r�origin�
relativize�kwr
r
r�to_text$sz
DHCID.to_textc
Cs`g}x:|j�j�}|j�rP|j�s,tjj�|j|jj	��qWdj
|�}tj|�}	||||	�S)N�)
�getZunescapeZ
is_eol_or_eofZ
is_identifierrZ	exception�SyntaxError�append�value�encode�join�base64Z	b64decode)
�clsrr�tokrrZchunks�tZb64rr
r
r�	from_text's

zDHCID.from_textcCs|j|j�dS)N)�writer)r�file�compressrr
r
r�to_wire5sz
DHCID.to_wirecCs ||||�j�}||||�S)N)Zunwrap)rrrZwireZcurrentZrdlenrrr
r
r�	from_wire8szDHCID.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr!r"�
__classcell__r
r
)r	rrs

r)rZ
dns.exceptionrr
ZRdatarr
r
r
r�<module>sIN/__pycache__/PX.cpython-36.opt-1.pyc000064400000004441150401435070013200 0ustar003

�b�WB
�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsdeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
ddd�Z�ZS)�PXz�PX record.

    @ivar preference: the preference value
    @type preference: int
    @ivar map822: the map822 name
    @type map822: dns.name.Name object
    @ivar mapx400: the mapx400 name
    @type mapx400: dns.name.Name object
    @see: RFC 2163�
preference�map822�mapx400cs(tt|�j||�||_||_||_dS)N)�superr�__init__rrr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/PX.pyr%szPX.__init__NTcKs,|jj||�}|jj||�}d|j||fS)Nz%d %s %s)r�choose_relativityrr)r�origin�
relativize�kwrrrrr
�to_text+sz
PX.to_textc	CsJ|j�}|j�}|j||�}|jd�}|j||�}|j�||||||�S)N)Z
get_uint16Zget_namerZget_eol)	�clsr	r
�tokrrrrrrrr
�	from_text0s
zPX.from_textcCs<tjd|j�}|j|�|jj|d|�|jj|d|�dS)Nz!H)�struct�packr�writer�to_wirer)r�file�compressrZprefrrr
r:s
z
PX.to_wirecCs�tjd|||d��\}|d7}|d8}tjj|d||�|�\}}	|	|krXtjj�||	7}||	8}|dk	rz|j|�}tjj|d||�|�\}
}	|	|kr�tjj�|dk	r�|
j|�}
||||||
�S)Nz!H�)r�unpack�dns�name�	from_wireZ	exceptionZ	FormErrorr)rr	r
ZwireZcurrentZrdlenrrrZcusedrrrr
r @s$



zPX.from_wirecCs$|jj||�|_|jj||�|_dS)N)rrr)rrrrrr
rUszPX.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr r�
__classcell__rr)rr
rs


	
r)rZ
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarrrrr
�<module>sIN/WKS.py000064400000007343150401435070006076 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import socket
import struct

import dns.ipv4
import dns.rdata
from dns._compat import xrange

_proto_tcp = socket.getprotobyname('tcp')
_proto_udp = socket.getprotobyname('udp')


class WKS(dns.rdata.Rdata):

    """WKS record

    @ivar address: the address
    @type address: string
    @ivar protocol: the protocol
    @type protocol: int
    @ivar bitmap: the bitmap
    @type bitmap: string
    @see: RFC 1035"""

    __slots__ = ['address', 'protocol', 'bitmap']

    def __init__(self, rdclass, rdtype, address, protocol, bitmap):
        super(WKS, self).__init__(rdclass, rdtype)
        self.address = address
        self.protocol = protocol
        if not isinstance(bitmap, bytearray):
            self.bitmap = bytearray(bitmap)
        else:
            self.bitmap = bitmap

    def to_text(self, origin=None, relativize=True, **kw):
        bits = []
        for i in xrange(0, len(self.bitmap)):
            byte = self.bitmap[i]
            for j in xrange(0, 8):
                if byte & (0x80 >> j):
                    bits.append(str(i * 8 + j))
        text = ' '.join(bits)
        return '%s %d %s' % (self.address, self.protocol, text)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        address = tok.get_string()
        protocol = tok.get_string()
        if protocol.isdigit():
            protocol = int(protocol)
        else:
            protocol = socket.getprotobyname(protocol)
        bitmap = bytearray()
        while 1:
            token = tok.get().unescape()
            if token.is_eol_or_eof():
                break
            if token.value.isdigit():
                serv = int(token.value)
            else:
                if protocol != _proto_udp and protocol != _proto_tcp:
                    raise NotImplementedError("protocol must be TCP or UDP")
                if protocol == _proto_udp:
                    protocol_text = "udp"
                else:
                    protocol_text = "tcp"
                serv = socket.getservbyname(token.value, protocol_text)
            i = serv // 8
            l = len(bitmap)
            if l < i + 1:
                for j in xrange(l, i + 1):
                    bitmap.append(0)
            bitmap[i] = bitmap[i] | (0x80 >> (serv % 8))
        bitmap = dns.rdata._truncate_bitmap(bitmap)
        return cls(rdclass, rdtype, address, protocol, bitmap)

    def to_wire(self, file, compress=None, origin=None):
        file.write(dns.ipv4.inet_aton(self.address))
        protocol = struct.pack('!B', self.protocol)
        file.write(protocol)
        file.write(self.bitmap)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        address = dns.ipv4.inet_ntoa(wire[current: current + 4])
        protocol, = struct.unpack('!B', wire[current + 4: current + 5])
        current += 5
        rdlen -= 5
        bitmap = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, address, protocol, bitmap)
IN/PX.py000064400000006502150401435100005747 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.name


class PX(dns.rdata.Rdata):

    """PX record.

    @ivar preference: the preference value
    @type preference: int
    @ivar map822: the map822 name
    @type map822: dns.name.Name object
    @ivar mapx400: the mapx400 name
    @type mapx400: dns.name.Name object
    @see: RFC 2163"""

    __slots__ = ['preference', 'map822', 'mapx400']

    def __init__(self, rdclass, rdtype, preference, map822, mapx400):
        super(PX, self).__init__(rdclass, rdtype)
        self.preference = preference
        self.map822 = map822
        self.mapx400 = mapx400

    def to_text(self, origin=None, relativize=True, **kw):
        map822 = self.map822.choose_relativity(origin, relativize)
        mapx400 = self.mapx400.choose_relativity(origin, relativize)
        return '%d %s %s' % (self.preference, map822, mapx400)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        preference = tok.get_uint16()
        map822 = tok.get_name()
        map822 = map822.choose_relativity(origin, relativize)
        mapx400 = tok.get_name(None)
        mapx400 = mapx400.choose_relativity(origin, relativize)
        tok.get_eol()
        return cls(rdclass, rdtype, preference, map822, mapx400)

    def to_wire(self, file, compress=None, origin=None):
        pref = struct.pack("!H", self.preference)
        file.write(pref)
        self.map822.to_wire(file, None, origin)
        self.mapx400.to_wire(file, None, origin)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (preference, ) = struct.unpack('!H', wire[current: current + 2])
        current += 2
        rdlen -= 2
        (map822, cused) = dns.name.from_wire(wire[: current + rdlen],
                                             current)
        if cused > rdlen:
            raise dns.exception.FormError
        current += cused
        rdlen -= cused
        if origin is not None:
            map822 = map822.relativize(origin)
        (mapx400, cused) = dns.name.from_wire(wire[: current + rdlen],
                                              current)
        if cused != rdlen:
            raise dns.exception.FormError
        if origin is not None:
            mapx400 = mapx400.relativize(origin)
        return cls(rdclass, rdtype, preference, map822, mapx400)

    def choose_relativity(self, origin=None, relativize=True):
        self.map822 = self.map822.choose_relativity(origin, relativize)
        self.mapx400 = self.mapx400.choose_relativity(origin, relativize)
IN/AAAA.py000064400000003622150401435100006103 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.exception
import dns.inet
import dns.rdata
import dns.tokenizer


class AAAA(dns.rdata.Rdata):

    """AAAA record.

    @ivar address: an IPv6 address
    @type address: string (in the standard IPv6 format)"""

    __slots__ = ['address']

    def __init__(self, rdclass, rdtype, address):
        super(AAAA, self).__init__(rdclass, rdtype)
        # check that it's OK
        dns.inet.inet_pton(dns.inet.AF_INET6, address)
        self.address = address

    def to_text(self, origin=None, relativize=True, **kw):
        return self.address

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        address = tok.get_identifier()
        tok.get_eol()
        return cls(rdclass, rdtype, address)

    def to_wire(self, file, compress=None, origin=None):
        file.write(dns.inet.inet_pton(dns.inet.AF_INET6, self.address))

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        address = dns.inet.inet_ntop(dns.inet.AF_INET6,
                                     wire[current: current + rdlen])
        return cls(rdclass, rdtype, address)
IN/NAPTR.py000064400000010566150401435100006311 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.name
import dns.rdata
from dns._compat import xrange, text_type


def _write_string(file, s):
    l = len(s)
    assert l < 256
    file.write(struct.pack('!B', l))
    file.write(s)


def _sanitize(value):
    if isinstance(value, text_type):
        return value.encode()
    return value


class NAPTR(dns.rdata.Rdata):

    """NAPTR record

    @ivar order: order
    @type order: int
    @ivar preference: preference
    @type preference: int
    @ivar flags: flags
    @type flags: string
    @ivar service: service
    @type service: string
    @ivar regexp: regular expression
    @type regexp: string
    @ivar replacement: replacement name
    @type replacement: dns.name.Name object
    @see: RFC 3403"""

    __slots__ = ['order', 'preference', 'flags', 'service', 'regexp',
                 'replacement']

    def __init__(self, rdclass, rdtype, order, preference, flags, service,
                 regexp, replacement):
        super(NAPTR, self).__init__(rdclass, rdtype)
        self.flags = _sanitize(flags)
        self.service = _sanitize(service)
        self.regexp = _sanitize(regexp)
        self.order = order
        self.preference = preference
        self.replacement = replacement

    def to_text(self, origin=None, relativize=True, **kw):
        replacement = self.replacement.choose_relativity(origin, relativize)
        return '%d %d "%s" "%s" "%s" %s' % \
               (self.order, self.preference,
                dns.rdata._escapify(self.flags),
                dns.rdata._escapify(self.service),
                dns.rdata._escapify(self.regexp),
                replacement)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        order = tok.get_uint16()
        preference = tok.get_uint16()
        flags = tok.get_string()
        service = tok.get_string()
        regexp = tok.get_string()
        replacement = tok.get_name()
        replacement = replacement.choose_relativity(origin, relativize)
        tok.get_eol()
        return cls(rdclass, rdtype, order, preference, flags, service,
                   regexp, replacement)

    def to_wire(self, file, compress=None, origin=None):
        two_ints = struct.pack("!HH", self.order, self.preference)
        file.write(two_ints)
        _write_string(file, self.flags)
        _write_string(file, self.service)
        _write_string(file, self.regexp)
        self.replacement.to_wire(file, compress, origin)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (order, preference) = struct.unpack('!HH', wire[current: current + 4])
        current += 4
        rdlen -= 4
        strings = []
        for i in xrange(3):
            l = wire[current]
            current += 1
            rdlen -= 1
            if l > rdlen or rdlen < 0:
                raise dns.exception.FormError
            s = wire[current: current + l].unwrap()
            current += l
            rdlen -= l
            strings.append(s)
        (replacement, cused) = dns.name.from_wire(wire[: current + rdlen],
                                                  current)
        if cused != rdlen:
            raise dns.exception.FormError
        if origin is not None:
            replacement = replacement.relativize(origin)
        return cls(rdclass, rdtype, order, preference, strings[0], strings[1],
                   strings[2], replacement)

    def choose_relativity(self, origin=None, relativize=True):
        self.replacement = self.replacement.choose_relativity(origin,
                                                              relativize)
IN/NSAP.py000064400000004037150401435110006163 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import binascii

import dns.exception
import dns.rdata
import dns.tokenizer


class NSAP(dns.rdata.Rdata):

    """NSAP record.

    @ivar address: a NASP
    @type address: string
    @see: RFC 1706"""

    __slots__ = ['address']

    def __init__(self, rdclass, rdtype, address):
        super(NSAP, self).__init__(rdclass, rdtype)
        self.address = address

    def to_text(self, origin=None, relativize=True, **kw):
        return "0x%s" % binascii.hexlify(self.address).decode()

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        address = tok.get_string()
        tok.get_eol()
        if address[0:2] != '0x':
            raise dns.exception.SyntaxError('string does not start with 0x')
        address = address[2:].replace('.', '')
        if len(address) % 2 != 0:
            raise dns.exception.SyntaxError('hexstring has odd length')
        address = binascii.unhexlify(address.encode())
        return cls(rdclass, rdtype, address)

    def to_wire(self, file, compress=None, origin=None):
        file.write(self.address)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        address = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, address)
IN/KX.py000064400000001561150401435110005743 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.mxbase


class KX(dns.rdtypes.mxbase.UncompressedMX):

    """KX record"""
IN/A.py000064400000003475150401435110005607 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.exception
import dns.ipv4
import dns.rdata
import dns.tokenizer


class A(dns.rdata.Rdata):

    """A record.

    @ivar address: an IPv4 address
    @type address: string (in the standard "dotted quad" format)"""

    __slots__ = ['address']

    def __init__(self, rdclass, rdtype, address):
        super(A, self).__init__(rdclass, rdtype)
        # check that it's OK
        dns.ipv4.inet_aton(address)
        self.address = address

    def to_text(self, origin=None, relativize=True, **kw):
        return self.address

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        address = tok.get_identifier()
        tok.get_eol()
        return cls(rdclass, rdtype, address)

    def to_wire(self, file, compress=None, origin=None):
        file.write(dns.ipv4.inet_aton(self.address))

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        address = dns.ipv4.inet_ntoa(wire[current: current + rdlen]).decode()
        return cls(rdclass, rdtype, address)
IN/SRV.py000064400000005756150401435110006105 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.name


class SRV(dns.rdata.Rdata):

    """SRV record

    @ivar priority: the priority
    @type priority: int
    @ivar weight: the weight
    @type weight: int
    @ivar port: the port of the service
    @type port: int
    @ivar target: the target host
    @type target: dns.name.Name object
    @see: RFC 2782"""

    __slots__ = ['priority', 'weight', 'port', 'target']

    def __init__(self, rdclass, rdtype, priority, weight, port, target):
        super(SRV, self).__init__(rdclass, rdtype)
        self.priority = priority
        self.weight = weight
        self.port = port
        self.target = target

    def to_text(self, origin=None, relativize=True, **kw):
        target = self.target.choose_relativity(origin, relativize)
        return '%d %d %d %s' % (self.priority, self.weight, self.port,
                                target)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        priority = tok.get_uint16()
        weight = tok.get_uint16()
        port = tok.get_uint16()
        target = tok.get_name(None)
        target = target.choose_relativity(origin, relativize)
        tok.get_eol()
        return cls(rdclass, rdtype, priority, weight, port, target)

    def to_wire(self, file, compress=None, origin=None):
        three_ints = struct.pack("!HHH", self.priority, self.weight, self.port)
        file.write(three_ints)
        self.target.to_wire(file, compress, origin)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (priority, weight, port) = struct.unpack('!HHH',
                                                 wire[current: current + 6])
        current += 6
        rdlen -= 6
        (target, cused) = dns.name.from_wire(wire[: current + rdlen],
                                             current)
        if cused != rdlen:
            raise dns.exception.FormError
        if origin is not None:
            target = target.relativize(origin)
        return cls(rdclass, rdtype, priority, weight, port, target)

    def choose_relativity(self, origin=None, relativize=True):
        self.target = self.target.choose_relativity(origin, relativize)
mxbase.py000064400000007114150401435110006372 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""MX-like base classes."""

from io import BytesIO
import struct

import dns.exception
import dns.rdata
import dns.name


class MXBase(dns.rdata.Rdata):

    """Base class for rdata that is like an MX record.

    @ivar preference: the preference value
    @type preference: int
    @ivar exchange: the exchange name
    @type exchange: dns.name.Name object"""

    __slots__ = ['preference', 'exchange']

    def __init__(self, rdclass, rdtype, preference, exchange):
        super(MXBase, self).__init__(rdclass, rdtype)
        self.preference = preference
        self.exchange = exchange

    def to_text(self, origin=None, relativize=True, **kw):
        exchange = self.exchange.choose_relativity(origin, relativize)
        return '%d %s' % (self.preference, exchange)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        preference = tok.get_uint16()
        exchange = tok.get_name()
        exchange = exchange.choose_relativity(origin, relativize)
        tok.get_eol()
        return cls(rdclass, rdtype, preference, exchange)

    def to_wire(self, file, compress=None, origin=None):
        pref = struct.pack("!H", self.preference)
        file.write(pref)
        self.exchange.to_wire(file, compress, origin)

    def to_digestable(self, origin=None):
        return struct.pack("!H", self.preference) + \
            self.exchange.to_digestable(origin)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (preference, ) = struct.unpack('!H', wire[current: current + 2])
        current += 2
        rdlen -= 2
        (exchange, cused) = dns.name.from_wire(wire[: current + rdlen],
                                               current)
        if cused != rdlen:
            raise dns.exception.FormError
        if origin is not None:
            exchange = exchange.relativize(origin)
        return cls(rdclass, rdtype, preference, exchange)

    def choose_relativity(self, origin=None, relativize=True):
        self.exchange = self.exchange.choose_relativity(origin, relativize)


class UncompressedMX(MXBase):

    """Base class for rdata that is like an MX record, but whose name
    is not compressed when converted to DNS wire format, and whose
    digestable form is not downcased."""

    def to_wire(self, file, compress=None, origin=None):
        super(UncompressedMX, self).to_wire(file, None, origin)

    def to_digestable(self, origin=None):
        f = BytesIO()
        self.to_wire(f, None, origin)
        return f.getvalue()


class UncompressedDowncasingMX(MXBase):

    """Base class for rdata that is like an MX record, but whose name
    is not compressed when convert to DNS wire format."""

    def to_wire(self, file, compress=None, origin=None):
        super(UncompressedDowncasingMX, self).to_wire(file, None, origin)
euibase.py000064400000005331150401435110006527 0ustar00# Copyright (C) 2015 Red Hat, Inc.
# Author: Petr Spacek <pspacek@redhat.com>
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED 'AS IS' AND RED HAT DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import binascii

import dns.rdata
from dns._compat import xrange


class EUIBase(dns.rdata.Rdata):

    """EUIxx record

    @ivar fingerprint: xx-bit Extended Unique Identifier (EUI-xx)
    @type fingerprint: string
    @see: rfc7043.txt"""

    __slots__ = ['eui']
    # define these in subclasses
    # byte_len = 6  # 0123456789ab (in hex)
    # text_len = byte_len * 3 - 1  # 01-23-45-67-89-ab

    def __init__(self, rdclass, rdtype, eui):
        super(EUIBase, self).__init__(rdclass, rdtype)
        if len(eui) != self.byte_len:
            raise dns.exception.FormError('EUI%s rdata has to have %s bytes'
                                          % (self.byte_len * 8, self.byte_len))
        self.eui = eui

    def to_text(self, origin=None, relativize=True, **kw):
        return dns.rdata._hexify(self.eui, chunksize=2).replace(' ', '-')

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        text = tok.get_string()
        tok.get_eol()
        if len(text) != cls.text_len:
            raise dns.exception.SyntaxError(
                'Input text must have %s characters' % cls.text_len)
        expected_dash_idxs = xrange(2, cls.byte_len * 3 - 1, 3)
        for i in expected_dash_idxs:
            if text[i] != '-':
                raise dns.exception.SyntaxError('Dash expected at position %s'
                                                % i)
        text = text.replace('-', '')
        try:
            data = binascii.unhexlify(text.encode())
        except (ValueError, TypeError) as ex:
            raise dns.exception.SyntaxError('Hex decoding error: %s' % str(ex))
        return cls(rdclass, rdtype, data)

    def to_wire(self, file, compress=None, origin=None):
        file.write(self.eui)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        eui = wire[current:current + rdlen].unwrap()
        return cls(rdclass, rdtype, eui)
__pycache__/euibase.cpython-36.pyc000064400000004143150401435110013013 0ustar003

�b�W�
�@s4ddlZddlZddlmZGdd�dejj�ZdS)�N)�xrangecsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�EUIBasez�EUIxx record

    @ivar fingerprint: xx-bit Extended Unique Identifier (EUI-xx)
    @type fingerprint: string
    @see: rfc7043.txt�euicsFtt|�j||�t|�|jkr<tjjd|jd|jf��||_dS)Nz EUI%s rdata has to have %s bytes�)	�superr�__init__�len�byte_len�dns�	exceptionZ	FormErrorr)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/euibase.pyr$s
zEUIBase.__init__NTcKstjj|jdd�jdd�S)N�)Z	chunksize� �-)r
�rdataZ_hexifyr�replace)r�origin�
relativize�kwrrr�to_text+szEUIBase.to_textcCs�|j�}|j�t|�|jkr0tjjd|j��td|jddd�}x(|D] }||dkrLtjjd|��qLW|j	dd�}yt
j|j��}	Wn:t
tfk
r�}
ztjjdt|
���WYdd}
~
XnX||||	�S)	Nz"Input text must have %s charactersr��rzDash expected at position %s�zHex decoding error: %s)Z
get_stringZget_eolrZtext_lenr
r�SyntaxErrorrr	r�binasciiZ	unhexlify�encode�
ValueError�	TypeError�str)�clsr
r�tokrr�textZexpected_dash_idxs�i�dataZexrrr�	from_text.s 
&zEUIBase.from_textcCs|j|j�dS)N)�writer)r�file�compressrrrr�to_wireAszEUIBase.to_wirecCs ||||�j�}||||�S)N)Zunwrap)r$r
rZwireZcurrentZrdlenrrrrr�	from_wireDszEUIBase.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr)r-r.�
__classcell__rr)rrrs

r)rZ	dns.rdatar
Zdns._compatrrZRdatarrrrr�<module>s__pycache__/nsbase.cpython-36.pyc000064400000005165150401435110012656 0ustar003

�b�W#�@sPdZddlmZddlZddlZddlZGdd�dejj�Z	Gdd�de	�Z
dS)zNS-like base classes.�)�BytesIONcsjeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	dd
d�Z
eddd��Zddd�Z�Z
S)�NSBasez�Base class for rdata that is like an NS record.

    @ivar target: the target name of the rdata
    @type target: dns.name.Name object�targetcstt|�j||�||_dS)N)�superr�__init__r)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/nsbase.pyr"szNSBase.__init__NTcKs|jj||�}t|�S)N)r�choose_relativity�str)r�origin�
relativize�kwrrrr�to_text&szNSBase.to_textcCs(|j�}|j||�}|j�||||�S)N)Zget_namer
Zget_eol)�clsrr	�tokrrrrrr�	from_text*szNSBase.from_textcCs|jj|||�dS)N)r�to_wire)r�file�compressrrrrr1szNSBase.to_wirecCs|jj|�S)N)r�
to_digestable)rrrrrr4szNSBase.to_digestablec	CsLtjj|d||�|�\}}||kr.tjj�|dk	r@|j|�}||||�S)N)�dns�name�	from_wireZ	exceptionZ	FormErrorr)	rrr	ZwireZcurrentZrdlenrrZcusedrrrr7s

zNSBase.from_wirecCs|jj||�|_dS)N)rr
)rrrrrrr
AszNSBase.choose_relativity)NT)NT)NN)N)N)NT)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrrrr
�
__classcell__rr)r
rrs


	rcs,eZdZdZd�fdd�	Zddd�Z�ZS)	�UncompressedNSz�Base class for rdata that is like an NS record, but whose name
    is not compressed when convert to DNS wire format, and whose
    digestable form is not downcased.Ncstt|�j|d|�dS)N)rr$r)rrrr)r
rrrKszUncompressedNS.to_wirecCst�}|j|d|�|j�S)N)rr�getvalue)rr�frrrrNszUncompressedNS.to_digestable)NN)N)rrrr rrr#rr)r
rr$Esr$)r �iorZ
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarr$rrrr�<module>s,__pycache__/mxbase.cpython-36.pyc000064400000006627150401435110012666 0ustar003

�b�WL�@shdZddlmZddlZddlZddlZddlZGdd�dejj	�Z
Gdd�de
�ZGdd	�d	e
�ZdS)
zMX-like base classes.�)�BytesIONcsleZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	ddd�Z
eddd��Zddd�Z�Z
S)�MXBasez�Base class for rdata that is like an MX record.

    @ivar preference: the preference value
    @type preference: int
    @ivar exchange: the exchange name
    @type exchange: dns.name.Name object�
preference�exchangecs"tt|�j||�||_||_dS)N)�superr�__init__rr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/mxbase.pyr%szMXBase.__init__NTcKs|jj||�}d|j|fS)Nz%d %s)r�choose_relativityr)r�origin�
relativize�kwrrrr
�to_text*szMXBase.to_textcCs2|j�}|j�}|j||�}|j�|||||�S)N)Z
get_uint16Zget_namerZget_eol)�clsr	r
�tokrrrrrrr
�	from_text.s
zMXBase.from_textcCs,tjd|j�}|j|�|jj|||�dS)Nz!H)�struct�packr�writer�to_wire)r�file�compressrZprefrrr
r6s
zMXBase.to_wirecCstjd|j�|jj|�S)Nz!H)rrrr�
to_digestable)rrrrr
r;szMXBase.to_digestablec
Csxtjd|||d��\}|d7}|d8}tjj|d||�|�\}}	|	|krXtjj�|dk	rj|j|�}|||||�S)Nz!H�)r�unpack�dns�name�	from_wireZ	exceptionZ	FormErrorr)
rr	r
ZwireZcurrentZrdlenrrrZcusedrrr
r!?s

zMXBase.from_wirecCs|jj||�|_dS)N)rr)rrrrrr
rLszMXBase.choose_relativity)NT)NT)NN)N)N)NT)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrrr!r�
__classcell__rr)rr
rs


rcs,eZdZdZd�fdd�	Zddd�Z�ZS)	�UncompressedMXz�Base class for rdata that is like an MX record, but whose name
    is not compressed when converted to DNS wire format, and whose
    digestable form is not downcased.Ncstt|�j|d|�dS)N)rr)r)rrrr)rrr
rVszUncompressedMX.to_wirecCst�}|j|d|�|j�S)N)rr�getvalue)rr�frrr
rYszUncompressedMX.to_digestable)NN)N)r"r#r$r%rrr(rr)rr
r)Psr)cs"eZdZdZd�fdd�	Z�ZS)�UncompressedDowncasingMXzuBase class for rdata that is like an MX record, but whose name
    is not compressed when convert to DNS wire format.Ncstt|�j|d|�dS)N)rr,r)rrrr)rrr
rdsz UncompressedDowncasingMX.to_wire)NN)r"r#r$r%rr(rr)rr
r,_sr,)
r%�iorrZ
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarr)r,rrrr
�<module>s6__pycache__/nsbase.cpython-36.opt-1.pyc000064400000005165150401435110013615 0ustar003

�b�W#�@sPdZddlmZddlZddlZddlZGdd�dejj�Z	Gdd�de	�Z
dS)zNS-like base classes.�)�BytesIONcsjeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	dd
d�Z
eddd��Zddd�Z�Z
S)�NSBasez�Base class for rdata that is like an NS record.

    @ivar target: the target name of the rdata
    @type target: dns.name.Name object�targetcstt|�j||�||_dS)N)�superr�__init__r)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/nsbase.pyr"szNSBase.__init__NTcKs|jj||�}t|�S)N)r�choose_relativity�str)r�origin�
relativize�kwrrrr�to_text&szNSBase.to_textcCs(|j�}|j||�}|j�||||�S)N)Zget_namer
Zget_eol)�clsrr	�tokrrrrrr�	from_text*szNSBase.from_textcCs|jj|||�dS)N)r�to_wire)r�file�compressrrrrr1szNSBase.to_wirecCs|jj|�S)N)r�
to_digestable)rrrrrr4szNSBase.to_digestablec	CsLtjj|d||�|�\}}||kr.tjj�|dk	r@|j|�}||||�S)N)�dns�name�	from_wireZ	exceptionZ	FormErrorr)	rrr	ZwireZcurrentZrdlenrrZcusedrrrr7s

zNSBase.from_wirecCs|jj||�|_dS)N)rr
)rrrrrrr
AszNSBase.choose_relativity)NT)NT)NN)N)N)NT)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrrrr
�
__classcell__rr)r
rrs


	rcs,eZdZdZd�fdd�	Zddd�Z�ZS)	�UncompressedNSz�Base class for rdata that is like an NS record, but whose name
    is not compressed when convert to DNS wire format, and whose
    digestable form is not downcased.Ncstt|�j|d|�dS)N)rr$r)rrrr)r
rrrKszUncompressedNS.to_wirecCst�}|j|d|�|j�S)N)rr�getvalue)rr�frrrrNszUncompressedNS.to_digestable)NN)N)rrrr rrr#rr)r
rr$Esr$)r �iorZ
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarr$rrrr�<module>s,__pycache__/txtbase.cpython-36.opt-1.pyc000064400000004371150401435110014012 0ustar003

�b�W��@sHdZddlZddlZddlZddlZddlmZGdd�dejj	�Z
dS)zTXT-like base class.�N)�binary_typecsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�TXTBasez�Base class for rdata that is like a TXT record

    @ivar strings: the text strings
    @type strings: list of string
    @see: RFC 1035�stringscs4tt|�j||�t|t�r"|g}|dd�|_dS)N)�superr�__init__�
isinstance�strr)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/txtbase.pyr$s
zTXTBase.__init__NTcKs8d}d}x*|jD] }|d|tjj|�f7}d}qW|S)N�z%s"%s"� )r�dns�rdataZ	_escapify)r	�origin�
relativize�kwZtxt�prefix�sr
r
r�to_text*szTXTBase.to_textc	Cs�g}xz|j�j�}|j�rP|j�p*|j�s8tjjd��t|j	�dkrRtjjd��|j	}t
|t�rn|j|�q|j|j
��qWt|�dkr�tjj�||||�S)Nzexpected a string�zstring too longr)�getZunescapeZ
is_eol_or_eofZis_quoted_stringZ
is_identifierr�	exception�SyntaxError�len�valuerr�append�encodeZ
UnexpectedEnd)	�clsr
r�tokrrr�tokenrr
r
r�	from_text2s 
zTXTBase.from_textcCs8x2|jD](}t|�}|jtjd|��|j|�qWdS)Nz!B)rr�write�struct�pack)r	�file�compressrr�lr
r
r�to_wireFszTXTBase.to_wirec
Cstg}xb|dkrf||}|d7}|d8}||kr6tjj�||||�j�}	||7}||8}|j|	�qW||||�S)Nr�)rrZ	FormErrorZunwrapr)
r!r
rZwireZcurrentZrdlenrrr*rr
r
r�	from_wireMs
zTXTBase.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr$r+r-�
__classcell__r
r
)rrrs

r)r1r&Z
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZdns._compatrrZRdatarr
r
r
r�<module>s__pycache__/mxbase.cpython-36.opt-1.pyc000064400000006627150401435110013625 0ustar003

�b�WL�@shdZddlmZddlZddlZddlZddlZGdd�dejj	�Z
Gdd�de
�ZGdd	�d	e
�ZdS)
zMX-like base classes.�)�BytesIONcsleZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	ddd�Z
eddd��Zddd�Z�Z
S)�MXBasez�Base class for rdata that is like an MX record.

    @ivar preference: the preference value
    @type preference: int
    @ivar exchange: the exchange name
    @type exchange: dns.name.Name object�
preference�exchangecs"tt|�j||�||_||_dS)N)�superr�__init__rr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/mxbase.pyr%szMXBase.__init__NTcKs|jj||�}d|j|fS)Nz%d %s)r�choose_relativityr)r�origin�
relativize�kwrrrr
�to_text*szMXBase.to_textcCs2|j�}|j�}|j||�}|j�|||||�S)N)Z
get_uint16Zget_namerZget_eol)�clsr	r
�tokrrrrrrr
�	from_text.s
zMXBase.from_textcCs,tjd|j�}|j|�|jj|||�dS)Nz!H)�struct�packr�writer�to_wire)r�file�compressrZprefrrr
r6s
zMXBase.to_wirecCstjd|j�|jj|�S)Nz!H)rrrr�
to_digestable)rrrrr
r;szMXBase.to_digestablec
Csxtjd|||d��\}|d7}|d8}tjj|d||�|�\}}	|	|krXtjj�|dk	rj|j|�}|||||�S)Nz!H�)r�unpack�dns�name�	from_wireZ	exceptionZ	FormErrorr)
rr	r
ZwireZcurrentZrdlenrrrZcusedrrr
r!?s

zMXBase.from_wirecCs|jj||�|_dS)N)rr)rrrrrr
rLszMXBase.choose_relativity)NT)NT)NN)N)N)NT)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrrr!r�
__classcell__rr)rr
rs


rcs,eZdZdZd�fdd�	Zddd�Z�ZS)	�UncompressedMXz�Base class for rdata that is like an MX record, but whose name
    is not compressed when converted to DNS wire format, and whose
    digestable form is not downcased.Ncstt|�j|d|�dS)N)rr)r)rrrr)rrr
rVszUncompressedMX.to_wirecCst�}|j|d|�|j�S)N)rr�getvalue)rr�frrr
rYszUncompressedMX.to_digestable)NN)N)r"r#r$r%rrr(rr)rr
r)Psr)cs"eZdZdZd�fdd�	Z�ZS)�UncompressedDowncasingMXzuBase class for rdata that is like an MX record, but whose name
    is not compressed when convert to DNS wire format.Ncstt|�j|d|�dS)N)rr,r)rrrr)rrr
rdsz UncompressedDowncasingMX.to_wire)NN)r"r#r$r%rr(rr)rr
r,_sr,)
r%�iorrZ
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarr)r,rrrr
�<module>s6__pycache__/dsbase.cpython-36.pyc000064400000004440150401435110012637 0ustar003

�b�W�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�Ncs\eZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
�ZS)�DSBaseaJBase class for rdata that is like a DS record

    @ivar key_tag: the key tag
    @type key_tag: int
    @ivar algorithm: the algorithm
    @type algorithm: int
    @ivar digest_type: the digest type
    @type digest_type: int
    @ivar digest: the digest
    @type digest: int
    @see: draft-ietf-dnsext-delegation-signer-14.txt�key_tag�	algorithm�digest_type�digestcs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__��/usr/lib/python3.6/dsbase.pyr's
zDSBase.__init__NTcKs$d|j|j|jtjj|jdd�fS)Nz%d %d %d %s�)Z	chunksize)rrr�dns�rdataZ_hexifyr)r	�origin�
relativize�kwr
r
r�to_text/s

zDSBase.to_textcCs~|j�}|j�}|j�}g}	x:|j�j�}
|
j�r4P|
j�sDtjj�|	j	|
j
j��qWdj|	�}t
j|�}|||||||�S)N�)Z
get_uint16Z	get_uint8�getZunescapeZ
is_eol_or_eofZ
is_identifierrZ	exception�SyntaxError�append�value�encode�join�binasciiZ	unhexlify)�clsr
r�tokrrrrrZchunks�trr
r
r�	from_text5s

zDSBase.from_textcCs0tjd|j|j|j�}|j|�|j|j�dS)Nz!HBB)�struct�packrrr�writer)r	�file�compressr�headerr
r
r�to_wireGs
zDSBase.to_wirec	CsZtjd|||d��}|d7}|d8}||||�j�}||||d|d|d|�S)Nz!HBB�r��)r"�unpackZunwrap)	rr
rZwireZcurrentZrdlenrr'rr
r
r�	from_wireMs
zDSBase.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr!r(r-�
__classcell__r
r
)rrrs

r)r"rZ	dns.rdatarZ
dns.rdatatyperZRdatarr
r
r
r�<module>s__pycache__/dsbase.cpython-36.opt-1.pyc000064400000004440150401435120013577 0ustar003

�b�W�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�Ncs\eZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
�ZS)�DSBaseaJBase class for rdata that is like a DS record

    @ivar key_tag: the key tag
    @type key_tag: int
    @ivar algorithm: the algorithm
    @type algorithm: int
    @ivar digest_type: the digest type
    @type digest_type: int
    @ivar digest: the digest
    @type digest: int
    @see: draft-ietf-dnsext-delegation-signer-14.txt�key_tag�	algorithm�digest_type�digestcs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__��/usr/lib/python3.6/dsbase.pyr's
zDSBase.__init__NTcKs$d|j|j|jtjj|jdd�fS)Nz%d %d %d %s�)Z	chunksize)rrr�dns�rdataZ_hexifyr)r	�origin�
relativize�kwr
r
r�to_text/s

zDSBase.to_textcCs~|j�}|j�}|j�}g}	x:|j�j�}
|
j�r4P|
j�sDtjj�|	j	|
j
j��qWdj|	�}t
j|�}|||||||�S)N�)Z
get_uint16Z	get_uint8�getZunescapeZ
is_eol_or_eofZ
is_identifierrZ	exception�SyntaxError�append�value�encode�join�binasciiZ	unhexlify)�clsr
r�tokrrrrrZchunks�trr
r
r�	from_text5s

zDSBase.from_textcCs0tjd|j|j|j�}|j|�|j|j�dS)Nz!HBB)�struct�packrrr�writer)r	�file�compressr�headerr
r
r�to_wireGs
zDSBase.to_wirec	CsZtjd|||d��}|d7}|d8}||||�j�}||||d|d|d|�S)Nz!HBB�r��)r"�unpackZunwrap)	rr
rZwireZcurrentZrdlenrr'rr
r
r�	from_wireMs
zDSBase.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr!r(r-�
__classcell__r
r
)rrrs

r)r"rZ	dns.rdatarZ
dns.rdatatyperZRdatarr
r
r
r�<module>s__pycache__/euibase.cpython-36.opt-1.pyc000064400000004143150401435120013753 0ustar003

�b�W�
�@s4ddlZddlZddlmZGdd�dejj�ZdS)�N)�xrangecsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�EUIBasez�EUIxx record

    @ivar fingerprint: xx-bit Extended Unique Identifier (EUI-xx)
    @type fingerprint: string
    @see: rfc7043.txt�euicsFtt|�j||�t|�|jkr<tjjd|jd|jf��||_dS)Nz EUI%s rdata has to have %s bytes�)	�superr�__init__�len�byte_len�dns�	exceptionZ	FormErrorr)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/euibase.pyr$s
zEUIBase.__init__NTcKstjj|jdd�jdd�S)N�)Z	chunksize� �-)r
�rdataZ_hexifyr�replace)r�origin�
relativize�kwrrr�to_text+szEUIBase.to_textcCs�|j�}|j�t|�|jkr0tjjd|j��td|jddd�}x(|D] }||dkrLtjjd|��qLW|j	dd�}yt
j|j��}	Wn:t
tfk
r�}
ztjjdt|
���WYdd}
~
XnX||||	�S)	Nz"Input text must have %s charactersr��rzDash expected at position %s�zHex decoding error: %s)Z
get_stringZget_eolrZtext_lenr
r�SyntaxErrorrr	r�binasciiZ	unhexlify�encode�
ValueError�	TypeError�str)�clsr
r�tokrr�textZexpected_dash_idxs�i�dataZexrrr�	from_text.s 
&zEUIBase.from_textcCs|j|j�dS)N)�writer)r�file�compressrrrr�to_wireAszEUIBase.to_wirecCs ||||�j�}||||�S)N)Zunwrap)r$r
rZwireZcurrentZrdlenrrrrr�	from_wireDszEUIBase.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr)r-r.�
__classcell__rr)rrrs

r)rZ	dns.rdatar
Zdns._compatrrZRdatarrrrr�<module>s__pycache__/__init__.cpython-36.pyc000064400000000326150401435120013135 0ustar003

�b�W�@sdZdddddgZdS)zDNS rdata type classes�ANY�INZeuibaseZmxbaseZnsbaseN)�__doc__�__all__�rr�/usr/lib/python3.6/__init__.py�<module>s
__pycache__/dnskeybase.cpython-36.pyc000064400000007065150401435120013535 0ustar003

�b�W#�@s�ddlZddlZddlZddlZddlZdddddgZdZdZd	Z	eee	d
�Z
edd�e
j�D��Z
d
d�Zdd�ZGdd�dejj�ZdS)�N�SEP�REVOKE�ZONE�flags_to_text_set�flags_from_text_set���)rrrccs|]\}}||fVqdS)N�)�.0�x�yr
r
� /usr/lib/python3.6/dnskeybase.py�	<genexpr>)srcCsLt�}d}x<|dkrF||@r<tj|�}|s2t|�}|j|�|dK}qW|S)zCConvert a DNSKEY flags value to set texts
    @rtype: set([string])ri�)�set�_flag_by_value�get�hex�add)�flagsZ	flags_set�mask�textr
r
rr,s


cCsHd}x>|D]6}y|t|7}Wq
tk
r>td|��Yq
Xq
W|S)zNConvert set of DNSKEY flag mnemonic texts to DNSKEY flag value
    @rtype: intrz!DNSKEY flag '%s' is not supported)�
_flag_by_text�KeyError�NotImplementedError)Z	texts_setrrr
r
rr<s
csdeZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
dd�Z�ZS)�
DNSKEYBasea?Base class for rdata that is like a DNSKEY record

    @ivar flags: the key flags
    @type flags: int
    @ivar protocol: the protocol for which this key may be used
    @type protocol: int
    @ivar algorithm: the algorithm used for the key
    @type algorithm: int
    @ivar key: the public key
    @type key: stringr�protocol�	algorithm�keycs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__r
rr Ys
zDNSKEYBase.__init__NTcKs d|j|j|jtjj|j�fS)Nz%d %d %d %s)rrr�dns�rdataZ
_base64ifyr)r!�origin�
relativize�kwr
r
r�to_text`szDNSKEYBase.to_textc
Cs�|j�}|j�}tjj|j��}g}	x:|j�j�}
|
j�r<P|
j	�sLtj
j�|	j|
j
j��q&Wdj|	�}tj|�}|||||||�S)N�)Z
get_uint16Z	get_uint8r%ZdnssecZalgorithm_from_textZ
get_stringrZunescapeZ
is_eol_or_eofZ
is_identifier�	exception�SyntaxError�append�value�encode�join�base64Z	b64decode)
�clsr"r#�tokr'r(rrrZchunks�tZb64rr
r
r�	from_textds

zDNSKEYBase.from_textcCs0tjd|j|j|j�}|j|�|j|j�dS)Nz!HBB)�struct�packrrr�writer)r!�file�compressr'�headerr
r
r�to_wireus
zDNSKEYBase.to_wirec	Csj|dkrtjj�tjd|||d��}|d7}|d8}||||�j�}||||d|d|d|�S)N�z!HBBrr�)r%r,Z	FormErrorr7�unpackZunwrap)	r3r"r#ZwireZcurrentZrdlenr'r<rr
r
r�	from_wirezszDNSKEYBase.from_wirecCs
t|j�S)zGConvert a DNSKEY flags value to set texts
        @rtype: set([string]))rr)r!r
r
rr�szDNSKEYBase.flags_to_text_set)NT)NT)NN)N)
�__name__�
__module__�__qualname__�__doc__�	__slots__r r*�classmethodr6r=rAr�
__classcell__r
r
)r$rrJs


r)r2r7Z
dns.exceptionr%Z
dns.dnssecZ	dns.rdata�__all__rrrr�dict�itemsrrrr&ZRdatarr
r
r
r�<module>s __pycache__/__init__.cpython-36.opt-1.pyc000064400000000326150401435120014074 0ustar003

�b�W�@sdZdddddgZdS)zDNS rdata type classes�ANY�INZeuibaseZmxbaseZnsbaseN)�__doc__�__all__�rr�/usr/lib/python3.6/__init__.py�<module>s
__pycache__/txtbase.cpython-36.pyc000064400000004434150401435120013054 0ustar003

�b�W��@sHdZddlZddlZddlZddlZddlmZGdd�dejj	�Z
dS)zTXT-like base class.�N)�binary_typecsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�TXTBasez�Base class for rdata that is like a TXT record

    @ivar strings: the text strings
    @type strings: list of string
    @see: RFC 1035�stringscs4tt|�j||�t|t�r"|g}|dd�|_dS)N)�superr�__init__�
isinstance�strr)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/txtbase.pyr$s
zTXTBase.__init__NTcKs8d}d}x*|jD] }|d|tjj|�f7}d}qW|S)N�z%s"%s"� )r�dns�rdataZ	_escapify)r	�origin�
relativize�kwZtxt�prefix�sr
r
r�to_text*szTXTBase.to_textc	Cs�g}xz|j�j�}|j�rP|j�p*|j�s8tjjd��t|j	�dkrRtjjd��|j	}t
|t�rn|j|�q|j|j
��qWt|�dkr�tjj�||||�S)Nzexpected a string�zstring too longr)�getZunescapeZ
is_eol_or_eofZis_quoted_stringZ
is_identifierr�	exception�SyntaxError�len�valuerr�append�encodeZ
UnexpectedEnd)	�clsr
r�tokrrr�tokenrr
r
r�	from_text2s 
zTXTBase.from_textcCsDx>|jD]4}t|�}|dks t�|jtjd|��|j|�qWdS)N�z!B)rr�AssertionError�write�struct�pack)r	�file�compressrr�lr
r
r�to_wireFs
zTXTBase.to_wirec
Cstg}xb|dkrf||}|d7}|d8}||kr6tjj�||||�j�}	||7}||8}|j|	�qW||||�S)Nr�)rrZ	FormErrorZunwrapr)
r!r
rZwireZcurrentZrdlenrrr,rr
r
r�	from_wireMs
zTXTBase.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr$r-r/�
__classcell__r
r
)rrrs

r)r3r(Z
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZdns._compatrrZRdatarr
r
r
r�<module>s__pycache__/dnskeybase.cpython-36.opt-1.pyc000064400000007065150401435120014474 0ustar003

�b�W#�@s�ddlZddlZddlZddlZddlZdddddgZdZdZd	Z	eee	d
�Z
edd�e
j�D��Z
d
d�Zdd�ZGdd�dejj�ZdS)�N�SEP�REVOKE�ZONE�flags_to_text_set�flags_from_text_set���)rrrccs|]\}}||fVqdS)N�)�.0�x�yr
r
� /usr/lib/python3.6/dnskeybase.py�	<genexpr>)srcCsLt�}d}x<|dkrF||@r<tj|�}|s2t|�}|j|�|dK}qW|S)zCConvert a DNSKEY flags value to set texts
    @rtype: set([string])ri�)�set�_flag_by_value�get�hex�add)�flagsZ	flags_set�mask�textr
r
rr,s


cCsHd}x>|D]6}y|t|7}Wq
tk
r>td|��Yq
Xq
W|S)zNConvert set of DNSKEY flag mnemonic texts to DNSKEY flag value
    @rtype: intrz!DNSKEY flag '%s' is not supported)�
_flag_by_text�KeyError�NotImplementedError)Z	texts_setrrr
r
rr<s
csdeZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
dd�Z�ZS)�
DNSKEYBasea?Base class for rdata that is like a DNSKEY record

    @ivar flags: the key flags
    @type flags: int
    @ivar protocol: the protocol for which this key may be used
    @type protocol: int
    @ivar algorithm: the algorithm used for the key
    @type algorithm: int
    @ivar key: the public key
    @type key: stringr�protocol�	algorithm�keycs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__r
rr Ys
zDNSKEYBase.__init__NTcKs d|j|j|jtjj|j�fS)Nz%d %d %d %s)rrr�dns�rdataZ
_base64ifyr)r!�origin�
relativize�kwr
r
r�to_text`szDNSKEYBase.to_textc
Cs�|j�}|j�}tjj|j��}g}	x:|j�j�}
|
j�r<P|
j	�sLtj
j�|	j|
j
j��q&Wdj|	�}tj|�}|||||||�S)N�)Z
get_uint16Z	get_uint8r%ZdnssecZalgorithm_from_textZ
get_stringrZunescapeZ
is_eol_or_eofZ
is_identifier�	exception�SyntaxError�append�value�encode�join�base64Z	b64decode)
�clsr"r#�tokr'r(rrrZchunks�tZb64rr
r
r�	from_textds

zDNSKEYBase.from_textcCs0tjd|j|j|j�}|j|�|j|j�dS)Nz!HBB)�struct�packrrr�writer)r!�file�compressr'�headerr
r
r�to_wireus
zDNSKEYBase.to_wirec	Csj|dkrtjj�tjd|||d��}|d7}|d8}||||�j�}||||d|d|d|�S)N�z!HBBrr�)r%r,Z	FormErrorr7�unpackZunwrap)	r3r"r#ZwireZcurrentZrdlenr'r<rr
r
r�	from_wirezszDNSKEYBase.from_wirecCs
t|j�S)zGConvert a DNSKEY flags value to set texts
        @rtype: set([string]))rr)r!r
r
rr�szDNSKEYBase.flags_to_text_set)NT)NT)NN)N)
�__name__�
__module__�__qualname__�__doc__�	__slots__r r*�classmethodr6r=rAr�
__classcell__r
r
)r$rrJs


r)r2r7Z
dns.exceptionr%Z
dns.dnssecZ	dns.rdata�__all__rrrr�dict�itemsrrrr&ZRdatarr
r
r
r�<module>s txtbase.py000064400000005737150401435120006577 0ustar00# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""TXT-like base class."""

import struct

import dns.exception
import dns.rdata
import dns.tokenizer
from dns._compat import binary_type


class TXTBase(dns.rdata.Rdata):

    """Base class for rdata that is like a TXT record

    @ivar strings: the text strings
    @type strings: list of string
    @see: RFC 1035"""

    __slots__ = ['strings']

    def __init__(self, rdclass, rdtype, strings):
        super(TXTBase, self).__init__(rdclass, rdtype)
        if isinstance(strings, str):
            strings = [strings]
        self.strings = strings[:]

    def to_text(self, origin=None, relativize=True, **kw):
        txt = ''
        prefix = ''
        for s in self.strings:
            txt += '%s"%s"' % (prefix, dns.rdata._escapify(s))
            prefix = ' '
        return txt

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        strings = []
        while 1:
            token = tok.get().unescape()
            if token.is_eol_or_eof():
                break
            if not (token.is_quoted_string() or token.is_identifier()):
                raise dns.exception.SyntaxError("expected a string")
            if len(token.value) > 255:
                raise dns.exception.SyntaxError("string too long")
            value = token.value
            if isinstance(value, binary_type):
                strings.append(value)
            else:
                strings.append(value.encode())
        if len(strings) == 0:
            raise dns.exception.UnexpectedEnd
        return cls(rdclass, rdtype, strings)

    def to_wire(self, file, compress=None, origin=None):
        for s in self.strings:
            l = len(s)
            assert l < 256
            file.write(struct.pack('!B', l))
            file.write(s)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        strings = []
        while rdlen > 0:
            l = wire[current]
            current += 1
            rdlen -= 1
            if l > rdlen:
                raise dns.exception.FormError
            s = wire[current: current + l].unwrap()
            current += l
            rdlen -= l
            strings.append(s)
        return cls(rdclass, rdtype, strings)
ANY/PTR.py000064400000001553150401435120006211 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.nsbase


class PTR(dns.rdtypes.nsbase.NSBase):

    """PTR record"""
ANY/__init__.py000064400000002305150401435120007277 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""Class ANY (generic) rdata type classes."""

__all__ = [
    'AFSDB',
    'CDNSKEY',
    'CDS',
    'CERT',
    'CNAME',
    'DLV',
    'DNAME',
    'DNSKEY',
    'DS',
    'EUI48',
    'EUI64',
    'GPOS',
    'HINFO',
    'HIP',
    'ISDN',
    'LOC',
    'MX',
    'NS',
    'NSEC',
    'NSEC3',
    'NSEC3PARAM',
    'TLSA',
    'PTR',
    'RP',
    'RRSIG',
    'RT',
    'SOA',
    'SPF',
    'SSHFP',
    'TXT',
    'X25',
]
ANY/RP.py000064400000005776150401435130006101 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.exception
import dns.rdata
import dns.name


class RP(dns.rdata.Rdata):

    """RP record

    @ivar mbox: The responsible person's mailbox
    @type mbox: dns.name.Name object
    @ivar txt: The owner name of a node with TXT records, or the root name
    if no TXT records are associated with this RP.
    @type txt: dns.name.Name object
    @see: RFC 1183"""

    __slots__ = ['mbox', 'txt']

    def __init__(self, rdclass, rdtype, mbox, txt):
        super(RP, self).__init__(rdclass, rdtype)
        self.mbox = mbox
        self.txt = txt

    def to_text(self, origin=None, relativize=True, **kw):
        mbox = self.mbox.choose_relativity(origin, relativize)
        txt = self.txt.choose_relativity(origin, relativize)
        return "%s %s" % (str(mbox), str(txt))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        mbox = tok.get_name()
        txt = tok.get_name()
        mbox = mbox.choose_relativity(origin, relativize)
        txt = txt.choose_relativity(origin, relativize)
        tok.get_eol()
        return cls(rdclass, rdtype, mbox, txt)

    def to_wire(self, file, compress=None, origin=None):
        self.mbox.to_wire(file, None, origin)
        self.txt.to_wire(file, None, origin)

    def to_digestable(self, origin=None):
        return self.mbox.to_digestable(origin) + \
            self.txt.to_digestable(origin)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (mbox, cused) = dns.name.from_wire(wire[: current + rdlen],
                                           current)
        current += cused
        rdlen -= cused
        if rdlen <= 0:
            raise dns.exception.FormError
        (txt, cused) = dns.name.from_wire(wire[: current + rdlen],
                                          current)
        if cused != rdlen:
            raise dns.exception.FormError
        if origin is not None:
            mbox = mbox.relativize(origin)
            txt = txt.relativize(origin)
        return cls(rdclass, rdtype, mbox, txt)

    def choose_relativity(self, origin=None, relativize=True):
        self.mbox = self.mbox.choose_relativity(origin, relativize)
        self.txt = self.txt.choose_relativity(origin, relativize)
ANY/DNSKEY.py000064400000002000150401435130006526 0ustar00# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.dnskeybase
from dns.rdtypes.dnskeybase import flags_to_text_set, flags_from_text_set


__all__ = ['flags_to_text_set', 'flags_from_text_set']


class DNSKEY(dns.rdtypes.dnskeybase.DNSKEYBase):

    """DNSKEY record"""
ANY/RRSIG.py000064400000013037150401435130006433 0ustar00# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import base64
import calendar
import struct
import time

import dns.dnssec
import dns.exception
import dns.rdata
import dns.rdatatype


class BadSigTime(dns.exception.DNSException):

    """Time in DNS SIG or RRSIG resource record cannot be parsed."""


def sigtime_to_posixtime(what):
    if len(what) != 14:
        raise BadSigTime
    year = int(what[0:4])
    month = int(what[4:6])
    day = int(what[6:8])
    hour = int(what[8:10])
    minute = int(what[10:12])
    second = int(what[12:14])
    return calendar.timegm((year, month, day, hour, minute, second,
                            0, 0, 0))


def posixtime_to_sigtime(what):
    return time.strftime('%Y%m%d%H%M%S', time.gmtime(what))


class RRSIG(dns.rdata.Rdata):

    """RRSIG record

    @ivar type_covered: the rdata type this signature covers
    @type type_covered: int
    @ivar algorithm: the algorithm used for the sig
    @type algorithm: int
    @ivar labels: number of labels
    @type labels: int
    @ivar original_ttl: the original TTL
    @type original_ttl: long
    @ivar expiration: signature expiration time
    @type expiration: long
    @ivar inception: signature inception time
    @type inception: long
    @ivar key_tag: the key tag
    @type key_tag: int
    @ivar signer: the signer
    @type signer: dns.name.Name object
    @ivar signature: the signature
    @type signature: string"""

    __slots__ = ['type_covered', 'algorithm', 'labels', 'original_ttl',
                 'expiration', 'inception', 'key_tag', 'signer',
                 'signature']

    def __init__(self, rdclass, rdtype, type_covered, algorithm, labels,
                 original_ttl, expiration, inception, key_tag, signer,
                 signature):
        super(RRSIG, self).__init__(rdclass, rdtype)
        self.type_covered = type_covered
        self.algorithm = algorithm
        self.labels = labels
        self.original_ttl = original_ttl
        self.expiration = expiration
        self.inception = inception
        self.key_tag = key_tag
        self.signer = signer
        self.signature = signature

    def covers(self):
        return self.type_covered

    def to_text(self, origin=None, relativize=True, **kw):
        return '%s %d %d %d %s %s %d %s %s' % (
            dns.rdatatype.to_text(self.type_covered),
            self.algorithm,
            self.labels,
            self.original_ttl,
            posixtime_to_sigtime(self.expiration),
            posixtime_to_sigtime(self.inception),
            self.key_tag,
            self.signer.choose_relativity(origin, relativize),
            dns.rdata._base64ify(self.signature)
        )

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        type_covered = dns.rdatatype.from_text(tok.get_string())
        algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
        labels = tok.get_int()
        original_ttl = tok.get_ttl()
        expiration = sigtime_to_posixtime(tok.get_string())
        inception = sigtime_to_posixtime(tok.get_string())
        key_tag = tok.get_int()
        signer = tok.get_name()
        signer = signer.choose_relativity(origin, relativize)
        chunks = []
        while 1:
            t = tok.get().unescape()
            if t.is_eol_or_eof():
                break
            if not t.is_identifier():
                raise dns.exception.SyntaxError
            chunks.append(t.value.encode())
        b64 = b''.join(chunks)
        signature = base64.b64decode(b64)
        return cls(rdclass, rdtype, type_covered, algorithm, labels,
                   original_ttl, expiration, inception, key_tag, signer,
                   signature)

    def to_wire(self, file, compress=None, origin=None):
        header = struct.pack('!HBBIIIH', self.type_covered,
                             self.algorithm, self.labels,
                             self.original_ttl, self.expiration,
                             self.inception, self.key_tag)
        file.write(header)
        self.signer.to_wire(file, None, origin)
        file.write(self.signature)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        header = struct.unpack('!HBBIIIH', wire[current: current + 18])
        current += 18
        rdlen -= 18
        (signer, cused) = dns.name.from_wire(wire[: current + rdlen], current)
        current += cused
        rdlen -= cused
        if origin is not None:
            signer = signer.relativize(origin)
        signature = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, header[0], header[1], header[2],
                   header[3], header[4], header[5], header[6], signer,
                   signature)

    def choose_relativity(self, origin=None, relativize=True):
        self.signer = self.signer.choose_relativity(origin, relativize)
ANY/NS.py000064400000001551150401435140006064 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.nsbase


class NS(dns.rdtypes.nsbase.NSBase):

    """NS record"""
ANY/EUI64.py000064400000002156150401435150006343 0ustar00# Copyright (C) 2015 Red Hat, Inc.
# Author: Petr Spacek <pspacek@redhat.com>
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED 'AS IS' AND RED HAT DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.euibase


class EUI64(dns.rdtypes.euibase.EUIBase):

    """EUI64 record

    @ivar fingerprint: 64-bit Extended Unique Identifier (EUI-64)
    @type fingerprint: string
    @see: rfc7043.txt"""

    byte_len = 8  # 0123456789abcdef (in hex)
    text_len = byte_len * 3 - 1  # 01-23-45-67-89-ab-cd-ef
ANY/SPF.py000064400000001603150401435160006174 0ustar00# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.txtbase


class SPF(dns.rdtypes.txtbase.TXTBase):

    """SPF record

    @see: RFC 4408"""
ANY/CDNSKEY.py000064400000002002150401435170006637 0ustar00# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.dnskeybase
from dns.rdtypes.dnskeybase import flags_to_text_set, flags_from_text_set


__all__ = ['flags_to_text_set', 'flags_from_text_set']


class CDNSKEY(dns.rdtypes.dnskeybase.DNSKEYBase):

    """CDNSKEY record"""
ANY/X25.py000064400000004107150401435170006125 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.tokenizer
from dns._compat import text_type


class X25(dns.rdata.Rdata):

    """X25 record

    @ivar address: the PSDN address
    @type address: string
    @see: RFC 1183"""

    __slots__ = ['address']

    def __init__(self, rdclass, rdtype, address):
        super(X25, self).__init__(rdclass, rdtype)
        if isinstance(address, text_type):
            self.address = address.encode()
        else:
            self.address = address

    def to_text(self, origin=None, relativize=True, **kw):
        return '"%s"' % dns.rdata._escapify(self.address)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        address = tok.get_string()
        tok.get_eol()
        return cls(rdclass, rdtype, address)

    def to_wire(self, file, compress=None, origin=None):
        l = len(self.address)
        assert l < 256
        file.write(struct.pack('!B', l))
        file.write(self.address)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        l = wire[current]
        current += 1
        rdlen -= 1
        if l != rdlen:
            raise dns.exception.FormError
        address = wire[current: current + l].unwrap()
        return cls(rdclass, rdtype, address)
ANY/CERT.py000064400000007557150401435200006312 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct
import base64

import dns.exception
import dns.dnssec
import dns.rdata
import dns.tokenizer

_ctype_by_value = {
    1: 'PKIX',
    2: 'SPKI',
    3: 'PGP',
    253: 'URI',
    254: 'OID',
}

_ctype_by_name = {
    'PKIX': 1,
    'SPKI': 2,
    'PGP': 3,
    'URI': 253,
    'OID': 254,
}


def _ctype_from_text(what):
    v = _ctype_by_name.get(what)
    if v is not None:
        return v
    return int(what)


def _ctype_to_text(what):
    v = _ctype_by_value.get(what)
    if v is not None:
        return v
    return str(what)


class CERT(dns.rdata.Rdata):

    """CERT record

    @ivar certificate_type: certificate type
    @type certificate_type: int
    @ivar key_tag: key tag
    @type key_tag: int
    @ivar algorithm: algorithm
    @type algorithm: int
    @ivar certificate: the certificate or CRL
    @type certificate: string
    @see: RFC 2538"""

    __slots__ = ['certificate_type', 'key_tag', 'algorithm', 'certificate']

    def __init__(self, rdclass, rdtype, certificate_type, key_tag, algorithm,
                 certificate):
        super(CERT, self).__init__(rdclass, rdtype)
        self.certificate_type = certificate_type
        self.key_tag = key_tag
        self.algorithm = algorithm
        self.certificate = certificate

    def to_text(self, origin=None, relativize=True, **kw):
        certificate_type = _ctype_to_text(self.certificate_type)
        return "%s %d %s %s" % (certificate_type, self.key_tag,
                                dns.dnssec.algorithm_to_text(self.algorithm),
                                dns.rdata._base64ify(self.certificate))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        certificate_type = _ctype_from_text(tok.get_string())
        key_tag = tok.get_uint16()
        algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
        if algorithm < 0 or algorithm > 255:
            raise dns.exception.SyntaxError("bad algorithm type")
        chunks = []
        while 1:
            t = tok.get().unescape()
            if t.is_eol_or_eof():
                break
            if not t.is_identifier():
                raise dns.exception.SyntaxError
            chunks.append(t.value.encode())
        b64 = b''.join(chunks)
        certificate = base64.b64decode(b64)
        return cls(rdclass, rdtype, certificate_type, key_tag,
                   algorithm, certificate)

    def to_wire(self, file, compress=None, origin=None):
        prefix = struct.pack("!HHB", self.certificate_type, self.key_tag,
                             self.algorithm)
        file.write(prefix)
        file.write(self.certificate)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        prefix = wire[current: current + 5].unwrap()
        current += 5
        rdlen -= 5
        if rdlen < 0:
            raise dns.exception.FormError
        (certificate_type, key_tag, algorithm) = struct.unpack("!HHB", prefix)
        certificate = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, certificate_type, key_tag, algorithm,
                   certificate)
ANY/HINFO.py000064400000005151150401435200006404 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.tokenizer
from dns._compat import text_type


class HINFO(dns.rdata.Rdata):

    """HINFO record

    @ivar cpu: the CPU type
    @type cpu: string
    @ivar os: the OS type
    @type os: string
    @see: RFC 1035"""

    __slots__ = ['cpu', 'os']

    def __init__(self, rdclass, rdtype, cpu, os):
        super(HINFO, self).__init__(rdclass, rdtype)
        if isinstance(cpu, text_type):
            self.cpu = cpu.encode()
        else:
            self.cpu = cpu
        if isinstance(os, text_type):
            self.os = os.encode()
        else:
            self.os = os

    def to_text(self, origin=None, relativize=True, **kw):
        return '"%s" "%s"' % (dns.rdata._escapify(self.cpu),
                              dns.rdata._escapify(self.os))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        cpu = tok.get_string()
        os = tok.get_string()
        tok.get_eol()
        return cls(rdclass, rdtype, cpu, os)

    def to_wire(self, file, compress=None, origin=None):
        l = len(self.cpu)
        assert l < 256
        file.write(struct.pack('!B', l))
        file.write(self.cpu)
        l = len(self.os)
        assert l < 256
        file.write(struct.pack('!B', l))
        file.write(self.os)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        l = wire[current]
        current += 1
        rdlen -= 1
        if l > rdlen:
            raise dns.exception.FormError
        cpu = wire[current:current + l].unwrap()
        current += l
        rdlen -= l
        l = wire[current]
        current += 1
        rdlen -= 1
        if l != rdlen:
            raise dns.exception.FormError
        os = wire[current: current + l].unwrap()
        return cls(rdclass, rdtype, cpu, os)
ANY/__pycache__/DNSKEY.cpython-36.opt-1.pyc000064400000000723150401435200013761 0ustar003

�b�W�@s:ddlZddlmZmZddgZGdd�dejjj�ZdS)�N)�flags_to_text_set�flags_from_text_setrrc@seZdZdZdS)�DNSKEYz
DNSKEY recordN)�__name__�
__module__�__qualname__�__doc__�r	r	�/usr/lib/python3.6/DNSKEY.pyrsr)	Zdns.rdtypes.dnskeybaseZdnsrr�__all__ZrdtypesZ
dnskeybaseZ
DNSKEYBaserr	r	r	r
�<module>sANY/__pycache__/DLV.cpython-36.opt-1.pyc000064400000000533150401435200013410 0ustar003

�b�W`�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�DLVz
DLV recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/DLV.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrr�<module>sANY/__pycache__/CERT.cpython-36.pyc000064400000005736150401435210012574 0ustar003

�b�Wo�@sxddlZddlZddlZddlZddlZddlZdddddd�Zdd	d
ddd
�Zdd�Z	dd�Z
Gdd�dejj�Z
dS)�N�PKIX�SPKI�PGP�URI�OID)�����rrr	r
r)rrrrrcCstj|�}|dk	r|St|�S)N)�_ctype_by_name�get�int)�what�v�r�/usr/lib/python3.6/CERT.py�_ctype_from_text)s
rcCstj|�}|dk	r|St|�S)N)�_ctype_by_valuer
�str)rrrrr�_ctype_to_text0s
rcs\eZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
�ZS)�CERTa"CERT record

    @ivar certificate_type: certificate type
    @type certificate_type: int
    @ivar key_tag: key tag
    @type key_tag: int
    @ivar algorithm: algorithm
    @type algorithm: int
    @ivar certificate: the certificate or CRL
    @type certificate: string
    @see: RFC 2538�certificate_type�key_tag�	algorithm�certificatecs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__rrrGs
z
CERT.__init__NTcKs0t|j�}d||jtjj|j�tjj|j	�fS)Nz%s %d %s %s)
rrr�dns�dnssecZalgorithm_to_textr�rdataZ
_base64ifyr)r�origin�
relativize�kwrrrr�to_textOs
zCERT.to_textc
Cs�t|j��}|j�}tjj|j��}|dks4|dkr@tjjd��g}	x:|j�j	�}
|
j
�r\P|
j�sltjj�|	j|
j
j��qFWdj|	�}tj|�}|||||||�S)Nr�zbad algorithm type�)rZ
get_stringZ
get_uint16r"r#Zalgorithm_from_text�	exception�SyntaxErrorr
ZunescapeZ
is_eol_or_eofZ
is_identifier�append�value�encode�join�base64Z	b64decode)
�clsrr �tokr%r&rrrZchunks�tZb64rrrr�	from_textUs"


zCERT.from_textcCs0tjd|j|j|j�}|j|�|j|j�dS)Nz!HHB)�struct�packrrr�writer)r�file�compressr%�prefixrrr�to_wireis
zCERT.to_wirecCsl|||d�j�}|d7}|d8}|dkr4tjj�tjd|�\}}	}
||||�j�}|||||	|
|�S)N�rz!HHB)Zunwrapr"r+Z	FormErrorr6�unpack)r2rr ZwireZcurrentZrdlenr%r;rrrrrrr�	from_wireoszCERT.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr(�classmethodr5r<r?�
__classcell__rr)r!rr7s

r)r6r1Z
dns.exceptionr"Z
dns.dnssecZ	dns.rdataZ
dns.tokenizerrrrrr$ZRdatarrrrr�<module>s$ANY/__pycache__/CERT.cpython-36.opt-1.pyc000064400000005736150401435210013533 0ustar003

�b�Wo�@sxddlZddlZddlZddlZddlZddlZdddddd�Zdd	d
ddd
�Zdd�Z	dd�Z
Gdd�dejj�Z
dS)�N�PKIX�SPKI�PGP�URI�OID)�����rrr	r
r)rrrrrcCstj|�}|dk	r|St|�S)N)�_ctype_by_name�get�int)�what�v�r�/usr/lib/python3.6/CERT.py�_ctype_from_text)s
rcCstj|�}|dk	r|St|�S)N)�_ctype_by_valuer
�str)rrrrr�_ctype_to_text0s
rcs\eZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
�ZS)�CERTa"CERT record

    @ivar certificate_type: certificate type
    @type certificate_type: int
    @ivar key_tag: key tag
    @type key_tag: int
    @ivar algorithm: algorithm
    @type algorithm: int
    @ivar certificate: the certificate or CRL
    @type certificate: string
    @see: RFC 2538�certificate_type�key_tag�	algorithm�certificatecs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__rrrGs
z
CERT.__init__NTcKs0t|j�}d||jtjj|j�tjj|j	�fS)Nz%s %d %s %s)
rrr�dns�dnssecZalgorithm_to_textr�rdataZ
_base64ifyr)r�origin�
relativize�kwrrrr�to_textOs
zCERT.to_textc
Cs�t|j��}|j�}tjj|j��}|dks4|dkr@tjjd��g}	x:|j�j	�}
|
j
�r\P|
j�sltjj�|	j|
j
j��qFWdj|	�}tj|�}|||||||�S)Nr�zbad algorithm type�)rZ
get_stringZ
get_uint16r"r#Zalgorithm_from_text�	exception�SyntaxErrorr
ZunescapeZ
is_eol_or_eofZ
is_identifier�append�value�encode�join�base64Z	b64decode)
�clsrr �tokr%r&rrrZchunks�tZb64rrrr�	from_textUs"


zCERT.from_textcCs0tjd|j|j|j�}|j|�|j|j�dS)Nz!HHB)�struct�packrrr�writer)r�file�compressr%�prefixrrr�to_wireis
zCERT.to_wirecCsl|||d�j�}|d7}|d8}|dkr4tjj�tjd|�\}}	}
||||�j�}|||||	|
|�S)N�rz!HHB)Zunwrapr"r+Z	FormErrorr6�unpack)r2rr ZwireZcurrentZrdlenr%r;rrrrrrr�	from_wireoszCERT.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr(�classmethodr5r<r?�
__classcell__rr)r!rr7s

r)r6r1Z
dns.exceptionr"Z
dns.dnssecZ	dns.rdataZ
dns.tokenizerrrrrr$ZRdatarrrrr�<module>s$ANY/__pycache__/DS.cpython-36.opt-1.pyc000064400000000530150401435210013267 0ustar003

�b�Wi�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�DSz	DS recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/DS.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrr�<module>sANY/__pycache__/CDS.cpython-36.opt-1.pyc000064400000000533150401435210013375 0ustar003

�b�Wk�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�CDSz
CDS recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/CDS.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrr�<module>sANY/__pycache__/CDNSKEY.cpython-36.opt-1.pyc000064400000000726150401435210014070 0ustar003

�b�W�@s:ddlZddlmZmZddgZGdd�dejjj�ZdS)�N)�flags_to_text_set�flags_from_text_setrrc@seZdZdZdS)�CDNSKEYzCDNSKEY recordN)�__name__�
__module__�__qualname__�__doc__�r	r	�/usr/lib/python3.6/CDNSKEY.pyrsr)	Zdns.rdtypes.dnskeybaseZdnsrr�__all__ZrdtypesZ
dnskeybaseZ
DNSKEYBaserr	r	r	r
�<module>sANY/__pycache__/RRSIG.cpython-36.opt-1.pyc000064400000010537150401435210013657 0ustar003

�b�W�@s|ddlZddlZddlZddlZddlZddlZddlZddlZGdd�dej	j
�Zdd�Zdd�Z
Gdd	�d	ejj�ZdS)
�Nc@seZdZdZdS)�
BadSigTimez:Time in DNS SIG or RRSIG resource record cannot be parsed.N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/RRSIG.pyrsrc
Cs�t|�dkrt�t|dd��}t|dd��}t|dd��}t|dd��}t|dd��}t|dd��}tj||||||dddf	�S)N�r����
�)�lenr�int�calendarZtimegm)�whatZyearZmonthZdayZhourZminute�secondrrr�sigtime_to_posixtime srcCstjdtj|��S)Nz%Y%m%d%H%M%S)�timeZstrftimeZgmtime)rrrr�posixtime_to_sigtime-src	sxeZdZdZdddddddd	d
g	Z�fdd�Zd
d�Zddd�Zeddd��Z	ddd�Z
eddd��Zddd�Z�Z
S) �RRSIGa~RRSIG record

    @ivar type_covered: the rdata type this signature covers
    @type type_covered: int
    @ivar algorithm: the algorithm used for the sig
    @type algorithm: int
    @ivar labels: number of labels
    @type labels: int
    @ivar original_ttl: the original TTL
    @type original_ttl: long
    @ivar expiration: signature expiration time
    @type expiration: long
    @ivar inception: signature inception time
    @type inception: long
    @ivar key_tag: the key tag
    @type key_tag: int
    @ivar signer: the signer
    @type signer: dns.name.Name object
    @ivar signature: the signature
    @type signature: string�type_covered�	algorithm�labels�original_ttl�
expiration�	inception�key_tag�signer�	signaturecsLtt|�j||�||_||_||_||_||_||_|	|_	|
|_
||_dS)N)�superr�__init__rrrrrrrrr )�self�rdclass�rdtyperrrrrrrrr )�	__class__rrr"LszRRSIG.__init__cCs|jS)N)r)r#rrr�coversZszRRSIG.coversNTcKsLdtjj|j�|j|j|jt|j�t|j	�|j
|jj||�tj
j|j�f	S)Nz%s %d %d %d %s %s %d %s %s)�dns�	rdatatype�to_textrrrrrrrrr�choose_relativity�rdataZ
_base64ifyr )r#�origin�
relativize�kwrrrr*]sz
RRSIG.to_textcCs�tjj|j��}tjj|j��}|j�}|j�}	t|j��}
t|j��}|j�}|j	�}
|
j
||�}
g}x:|j�j�}|j
�r�P|j�s�tjj�|j|jj��qjWdj|�}tj|�}|||||||	|
|||
|�S)N�)r(r)�	from_textZ
get_stringZdnssecZalgorithm_from_textZget_intZget_ttlrZget_namer+�getZunescapeZ
is_eol_or_eofZ
is_identifier�	exception�SyntaxError�append�value�encode�join�base64Z	b64decode)�clsr$r%�tokr-r.rrrrrrrrZchunks�tZb64r rrrr1js,


zRRSIG.from_textc	CsPtjd|j|j|j|j|j|j|j�}|j	|�|j
j|d|�|j	|j�dS)Nz!HBBIIIH)
�struct�packrrrrrrr�writer�to_wirer )r#�file�compressr-�headerrrrr@�s

z
RRSIG.to_wirecCs�tjd|||d��}|d7}|d8}tjj|d||�|�\}}	||	7}||	8}|dk	rh|j|�}||||�j�}
||||d|d|d|d|d|d|d	||
�S)
Nz!HBBIIIH�r���r
�r)r=�unpackr(�name�	from_wirer.Zunwrap)r:r$r%ZwireZcurrentZrdlenr-rCrZcusedr rrrrK�s
zRRSIG.from_wirecCs|jj||�|_dS)N)rr+)r#r-r.rrrr+�szRRSIG.choose_relativity)NT)NT)NN)N)NT)rrrr�	__slots__r"r'r*�classmethodr1r@rKr+�
__classcell__rr)r&rr1s


	r)r9rr=rZ
dns.dnssecr(Z
dns.exceptionZ	dns.rdataZ
dns.rdatatyper3ZDNSExceptionrrrr,ZRdatarrrrr�<module>s
ANY/__pycache__/CSYNC.cpython-36.opt-1.pyc000064400000006160150401435210013645 0ustar003

�b�W$�@sLddlZddlZddlZddlZddlZddlmZGdd�dejj	�Z
dS)�N)�xrangecsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�CSYNCz�CSYNC record

    @ivar serial: the SOA serial number
    @type serial: int
    @ivar flags: the CSYNC flags
    @type flags: int
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples�serial�flags�windowscs(tt|�j||�||_||_||_dS)N)�superr�__init__rrr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/CSYNC.pyr%szCSYNC.__init__NTcKs�d}x�|jD]�\}}g}x`tdt|��D]N}||}	x@tdd�D]2}
|	d|
?@r@|jtjj|d|d|
��q@Wq(W|ddj|�7}qWd|j|j	|fS)N�r���� z%d %d%s)
rr�len�append�dns�	rdatatype�to_text�joinrr)r	�origin�
relativize�kw�text�window�bitmap�bits�i�byte�jr
r
rr+s
 z
CSYNC.to_textcCs@|j�}|j�}g}xZ|j�j�}	|	j�r,Ptjj|	j�}
|
dkrNtj	j
d��|
dkrbtj	j
d��|j|
�qW|j�d}d}d}
t
dd�}g}x�|D]|}
|
|
kr�q�|
}
|
d}||kr�|j||d|�f�t
dd�}|}|
d}|d}|d}|d	}||d
|?B||<q�W|j||d|�f�||||||�S)NrzCSYNC with bit 0i��zCSYNC with bit > 65535�� rr�r)Z
get_uint32Z
get_uint16�getZunescapeZ
is_eol_or_eofrr�	from_text�value�	exception�SyntaxErrorr�sort�	bytearray)�clsr
r�tokrrrrZrdtypes�tokenZnrdtyper�octetsZprior_rdtyperrZ
new_window�offsetr"�bitr
r
rr(8sF
zCSYNC.from_textcCsR|jtjd|j|j��x4|jD]*\}}|jtjd|t|���|j|�q WdS)Nz!IHz!BB)�write�struct�packrrrr)r	�file�compressrrrr
r
r�to_wire_sz
CSYNC.to_wirec
Cs|dkrtjjd��tjd|||d��\}}|d7}|d8}g}	x�|dkr�|dkrbtjjd��||}
||d}|dks�|dkr�tjjd��|d	7}|d	8}||kr�tjjd
��t||||�j��}||7}||8}|	j|
|f�qFW||||||	�S)N�zCSYNC too shortz!IHr�r&r%zbad CSYNC octets�zbad CSYNC bitmap length)rr*Z	FormErrorr5�unpackr-Zunwrapr)
r.r
rZwireZcurrentZrdlenrrrrrr1rr
r
r�	from_wirees,
zCSYNC.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr(r9r>�
__classcell__r
r
)rrrs	


&
r)r5Z
dns.exceptionrZ	dns.rdataZ
dns.rdatatypeZdns.nameZdns._compatrZrdataZRdatarr
r
r
r�<module>sANY/__pycache__/EUI48.cpython-36.opt-1.pyc000064400000001022150401435210013554 0ustar003

�b�Wd�@s"ddlZGdd�dejjj�ZdS)�Nc@s eZdZdZdZeddZdS)�EUI48z�EUI48 record

    @ivar fingerprint: 48-bit Extended Unique Identifier (EUI-48)
    @type fingerprint: string
    @see: rfc7043.txt���N)�__name__�
__module__�__qualname__�__doc__Zbyte_lenZtext_len�r
r
�/usr/lib/python3.6/EUI48.pyrsr)Zdns.rdtypes.euibaseZdnsZrdtypesZeuibaseZEUIBaserr
r
r
r�<module>sANY/__pycache__/GPOS.cpython-36.opt-1.pyc000064400000007775150401435210013553 0ustar003

�b�W��@sXddlZddlZddlZddlZddlmZmZdd�Zdd�Z	Gdd�dej
j�ZdS)	�N)�long�	text_typecCs�|ddks|ddkr$|dd�}|j�r0dS|jd�\}}|dkrV|dkrVtjj�|dkrv|j�j�rvtjj�|dkr�|j�j�r�tjj�dS)	Nr�-�+��.��-�+)�isdigit�split�dns�	exception�	FormError�decode)Zwhat�left�right�r�/usr/lib/python3.6/GPOS.py�_validate_float_stringsrcCst|t�r|j�S|S)N)�
isinstancer�encode)�valuerrr�	_sanitize&s
rcs�eZdZdZdddgZ�fdd�Zd!d	d
�Zed"dd��Zd#d
d�Z	ed$dd��Z
dd�Zdd�Ze
eedd�Zdd�Zdd�Ze
eedd�Zdd�Zdd�Ze
eed d�Z�ZS)%�GPOSz�GPOS record

    @ivar latitude: latitude
    @type latitude: string
    @ivar longitude: longitude
    @type longitude: string
    @ivar altitude: altitude
    @type altitude: string
    @see: RFC 1712�latitude�	longitude�altitudecs�tt|�j||�t|t�s0t|t�s0t|t�r8t|�}t|t�sVt|t�sVt|t�r^t|�}t|t�s|t|t�s|t|t�r�t|�}t|�}t|�}t|�}t	|�t	|�t	|�||_
||_||_dS)N)
�superr�__init__r�float�intr�strrrrrr)�self�rdclass�rdtyperrr)�	__class__rrr:s,








z
GPOS.__init__NTcKs d|jj�|jj�|jj�fS)Nz%s %s %s)rrrr)r#�origin�
relativize�kwrrr�to_textRs
zGPOS.to_textc	Cs0|j�}|j�}|j�}|j�||||||�S)N)Z
get_stringZget_eol)	�clsr$r%�tokr'r(rrrrrr�	from_textWs
zGPOS.from_textcCs|t|j�}|jtjd|��|j|j�t|j�}|jtjd|��|j|j�t|j�}|jtjd|��|j|j�dS)Nz!B)�lenr�write�struct�packrr)r#�file�compressr'�lrrr�to_wire_s


zGPOS.to_wirecCs�||}|d7}|d8}||kr(tjj�||||�j�}||7}||8}||}|d7}|d8}||krttjj�||||�j�}	||7}||8}||}|d7}|d8}||kr�tjj�||||�j�}
|||||	|
�S)Nr)r
rrZunwrap)r+r$r%ZwireZcurrentZrdlenr'r4rrrrrr�	from_wirems.zGPOS.from_wirecCs
t|j�S)N)r r)r#rrr�_get_float_latitude�szGPOS._get_float_latitudecCst|�|_dS)N)r"r)r#rrrr�_set_float_latitude�szGPOS._set_float_latitudez"latitude as a floating point value)�doccCs
t|j�S)N)r r)r#rrr�_get_float_longitude�szGPOS._get_float_longitudecCst|�|_dS)N)r"r)r#rrrr�_set_float_longitude�szGPOS._set_float_longitudez#longitude as a floating point valuecCs
t|j�S)N)r r)r#rrr�_get_float_altitude�szGPOS._get_float_altitudecCst|�|_dS)N)r"r)r#rrrr�_set_float_altitude�szGPOS._set_float_altitudez"altitude as a floating point value)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr*�classmethodr-r5r6r7r8�propertyZfloat_latituder:r;Zfloat_longituder<r=Zfloat_altitude�
__classcell__rr)r&rr,s*



r)
r0Z
dns.exceptionr
Z	dns.rdataZ
dns.tokenizerZdns._compatrrrrZrdataZRdatarrrrr�<module>sANY/__pycache__/DS.cpython-36.pyc000064400000000530150401435210012330 0ustar003

�b�Wi�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�DSz	DS recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/DS.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrr�<module>sANY/__pycache__/NSEC3PARAM.cpython-36.opt-1.pyc000064400000004451150401435210014363 0ustar003

�b�W�@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecs\eZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
�ZS)�
NSEC3PARAMaNSEC3PARAM record

    @ivar algorithm: the hash algorithm number
    @type algorithm: int
    @ivar flags: the flags
    @type flags: int
    @ivar iterations: the number of iterations
    @type iterations: int
    @ivar salt: the salt
    @type salt: string�	algorithm�flags�
iterations�saltcsDtt|�j||�||_||_||_t|t�r:|j�|_	n||_	dS)N)
�superr�__init__rrr�
isinstancer�encoder)�self�rdclass�rdtyperrrr)�	__class__�� /usr/lib/python3.6/NSEC3PARAM.pyr	's
zNSEC3PARAM.__init__NTcKs6|jdkrd}ntj|j�j�}d|j|j|j|fS)N��-z%u %u %u %s)r�binasciiZhexlify�decoderrr)r�origin�
relativize�kwrrrr�to_text1s

zNSEC3PARAM.to_textc
CsV|j�}|j�}|j�}|j�}	|	dkr.d}	ntj|	j��}	|j�|||||||	�S)Nr�)Z	get_uint8Z
get_uint16Z
get_stringrZ	unhexlifyrZget_eol)
�clsr
r�tokrrrrrrrrr�	from_text9szNSEC3PARAM.from_textcCs8t|j�}|jtjd|j|j|j|��|j|j�dS)Nz!BBHB)�lenr�write�struct�packrrr)r�file�compressr�lrrr�to_wireFs
zNSEC3PARAM.to_wirecCsvtjd|||d��\}}}	}
|d7}|d8}||||
�j�}||
7}||
8}|dkrdtjj�||||||	|�S)Nz!BBHB�r)r �unpackZunwrap�dnsZ	exceptionZ	FormError)rr
rZwireZcurrentZrdlenrrrrZslenrrrr�	from_wireLszNSEC3PARAM.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r	r�classmethodrr%r)�
__classcell__rr)rrrs


r)
r rZ
dns.exceptionr(Z	dns.rdataZdns._compatrZrdataZRdatarrrrr�<module>s
ANY/__pycache__/HINFO.cpython-36.pyc000064400000003772150401435210012700 0ustar003

�b�Wi
�@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecsXeZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	eddd��Z
�ZS)�HINFOz�HINFO record

    @ivar cpu: the CPU type
    @type cpu: string
    @ivar os: the OS type
    @type os: string
    @see: RFC 1035�cpu�oscsNtt|�j||�t|t�r(|j�|_n||_t|t�rD|j�|_n||_dS)N)�superr�__init__�
isinstancer�encoderr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/HINFO.pyr$s

zHINFO.__init__NTcKs dtjj|j�tjj|j�fS)Nz	"%s" "%s")�dns�rdataZ	_escapifyrr)r
�origin�
relativize�kwrrr�to_text/sz
HINFO.to_textcCs&|j�}|j�}|j�|||||�S)N)Z
get_stringZget_eol)�clsrr�tokrrrrrrr�	from_text3szHINFO.from_textcCslt|j�}|dkst�|jtjd|��|j|j�t|j�}|dksJt�|jtjd|��|j|j�dS)N�z!B)�lenr�AssertionError�write�struct�packr)r
�file�compressr�lrrr�to_wire:s

z
HINFO.to_wirec
Cs�||}|d7}|d8}||kr(tjj�||||�j�}||7}||8}||}|d7}|d8}||krttjj�||||�j�}	|||||	�S)N�)rZ	exceptionZ	FormErrorZunwrap)
rrrZwireZcurrentZrdlenrr!rrrrr�	from_wireDszHINFO.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr"r$�
__classcell__rr)r
rrs


r)
rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZdns._compatrrZRdatarrrrr�<module>s
ANY/__pycache__/AFSDB.cpython-36.pyc000064400000002077150401435210012651 0ustar003

�b�W8�@s"ddlZGdd�dejjj�ZdS)�Nc@sDeZdZdZdd�Zdd�Zeee�Zdd�Zdd	�Z	eee	�Z
d
S)�AFSDBz�AFSDB record

    @ivar subtype: the subtype value
    @type subtype: int
    @ivar hostname: the hostname name
    @type hostname: dns.name.Name objectcCs|jS)N)�
preference)�self�r�/usr/lib/python3.6/AFSDB.py�get_subtype'szAFSDB.get_subtypecCs
||_dS)N)r)r�subtyperrr�set_subtype*szAFSDB.set_subtypecCs|jS)N)�exchange)rrrr�get_hostname/szAFSDB.get_hostnamecCs
||_dS)N)r
)r�hostnamerrr�set_hostname2szAFSDB.set_hostnameN)�__name__�
__module__�__qualname__�__doc__rr	�propertyrrr
rrrrrrs

r)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedDowncasingMXrrrrr�<module>sANY/__pycache__/RP.cpython-36.pyc000064400000004377150401435210012360 0ustar003

�b�W��@s0ddlZddlZddlZGdd�dejj�ZdS)�NcsleZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	ddd�Z
eddd��Zddd�Z�Z
S)�RPaRP record

    @ivar mbox: The responsible person's mailbox
    @type mbox: dns.name.Name object
    @ivar txt: The owner name of a node with TXT records, or the root name
    if no TXT records are associated with this RP.
    @type txt: dns.name.Name object
    @see: RFC 1183�mbox�txtcs"tt|�j||�||_||_dS)N)�superr�__init__rr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/RP.pyr"szRP.__init__NTcKs0|jj||�}|jj||�}dt|�t|�fS)Nz%s %s)r�choose_relativityr�str)r�origin�
relativize�kwrrrrr�to_text'sz
RP.to_textcCs>|j�}|j�}|j||�}|j||�}|j�|||||�S)N)Zget_namer
Zget_eol)�clsrr	�tokrrrrrrr�	from_text,szRP.from_textcCs$|jj|d|�|jj|d|�dS)N)r�to_wirer)r�file�compressrrrrr5sz
RP.to_wirecCs|jj|�|jj|�S)N)r�
to_digestabler)rrrrrr9s
zRP.to_digestablec
Cs�tjj|d||�|�\}}||7}||8}|dkr>tjj�tjj|d||�|�\}	}||krltjj�|dk	r�|j|�}|	j|�}	|||||	�S)Nr)�dns�name�	from_wireZ	exceptionZ	FormErrorr)
rrr	ZwireZcurrentZrdlenrrZcusedrrrrr=s



zRP.from_wirecCs$|jj||�|_|jj||�|_dS)N)rr
r)rrrrrrr
NszRP.choose_relativity)NT)NT)NN)N)N)NT)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrrrr
�
__classcell__rr)r
rrs	


r)Z
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarrrrr�<module>sANY/__pycache__/EUI48.cpython-36.pyc000064400000001022150401435210012615 0ustar003

�b�Wd�@s"ddlZGdd�dejjj�ZdS)�Nc@s eZdZdZdZeddZdS)�EUI48z�EUI48 record

    @ivar fingerprint: 48-bit Extended Unique Identifier (EUI-48)
    @type fingerprint: string
    @see: rfc7043.txt���N)�__name__�
__module__�__qualname__�__doc__Zbyte_lenZtext_len�r
r
�/usr/lib/python3.6/EUI48.pyrsr)Zdns.rdtypes.euibaseZdnsZrdtypesZeuibaseZEUIBaserr
r
r
r�<module>sANY/__pycache__/TXT.cpython-36.pyc000064400000000536150401435210012507 0ustar003

�b�Wn�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�TXTz
TXT recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/TXT.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrr�<module>sANY/__pycache__/PTR.cpython-36.pyc000064400000000533150401435220012473 0ustar003

�b�Wk�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�PTRz
PTR recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/PTR.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrr�<module>sANY/__pycache__/SPF.cpython-36.opt-1.pyc000064400000000562150401435220013417 0ustar003

�b�W��@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�SPFzSPF record

    @see: RFC 4408N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/SPF.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrr�<module>sANY/__pycache__/AFSDB.cpython-36.opt-1.pyc000064400000002077150401435220013611 0ustar003

�b�W8�@s"ddlZGdd�dejjj�ZdS)�Nc@sDeZdZdZdd�Zdd�Zeee�Zdd�Zdd	�Z	eee	�Z
d
S)�AFSDBz�AFSDB record

    @ivar subtype: the subtype value
    @type subtype: int
    @ivar hostname: the hostname name
    @type hostname: dns.name.Name objectcCs|jS)N)�
preference)�self�r�/usr/lib/python3.6/AFSDB.py�get_subtype'szAFSDB.get_subtypecCs
||_dS)N)r)r�subtyperrr�set_subtype*szAFSDB.set_subtypecCs|jS)N)�exchange)rrrr�get_hostname/szAFSDB.get_hostnamecCs
||_dS)N)r
)r�hostnamerrr�set_hostname2szAFSDB.set_hostnameN)�__name__�
__module__�__qualname__�__doc__rr	�propertyrrr
rrrrrrs

r)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedDowncasingMXrrrrr�<module>sANY/__pycache__/CAA.cpython-36.pyc000064400000004050150401435220012410 0ustar003

�b�W>
�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�CAAz�CAA (Certification Authority Authorization) record

    @ivar flags: the flags
    @type flags: int
    @ivar tag: the tag
    @type tag: string
    @ivar value: the value
    @type value: string
    @see: RFC 6844�flags�tag�valuecs(tt|�j||�||_||_||_dS)N)�superr�__init__rrr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/CAA.pyr%szCAA.__init__NTcKs$d|jtjj|j�tjj|j�fS)Nz
%u %s "%s")r�dns�rdataZ	_escapifyrr)r�origin�
relativize�kwrrr
�to_text+szCAA.to_textc	Cs\|j�}|j�j�}t|�dkr,tjjd��|j�s@tjjd��|j�j�}||||||�S)N�ztag too longztag is not alphanumeric)Z	get_uint8Z
get_string�encode�lenrZ	exception�SyntaxError�isalnum)	�clsr	r
�tokrrrrrrrr
�	from_text0sz
CAA.from_textcCsX|jtjd|j��t|j�}|dks*t�|jtjd|��|j|j�|j|j�dS)Nz!B�)�write�struct�packrrr�AssertionErrorr)r�file�compressr�lrrr
�to_wire;s
zCAA.to_wirecCs\tjd|||d��\}}|d7}||||�}	|||||d�}
|||||	|
�S)Nz!BB�)r�unpack)rr	r
ZwireZcurrentZrdlenrrr#rrrrr
�	from_wireCs
z
CAA.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr$r'�
__classcell__rr)rr
rs




r)rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerrZRdatarrrrr
�<module>sANY/__pycache__/CSYNC.cpython-36.pyc000064400000006160150401435220012707 0ustar003

�b�W$�@sLddlZddlZddlZddlZddlZddlmZGdd�dejj	�Z
dS)�N)�xrangecsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�CSYNCz�CSYNC record

    @ivar serial: the SOA serial number
    @type serial: int
    @ivar flags: the CSYNC flags
    @type flags: int
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples�serial�flags�windowscs(tt|�j||�||_||_||_dS)N)�superr�__init__rrr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/CSYNC.pyr%szCSYNC.__init__NTcKs�d}x�|jD]�\}}g}x`tdt|��D]N}||}	x@tdd�D]2}
|	d|
?@r@|jtjj|d|d|
��q@Wq(W|ddj|�7}qWd|j|j	|fS)N�r���� z%d %d%s)
rr�len�append�dns�	rdatatype�to_text�joinrr)r	�origin�
relativize�kw�text�window�bitmap�bits�i�byte�jr
r
rr+s
 z
CSYNC.to_textcCs@|j�}|j�}g}xZ|j�j�}	|	j�r,Ptjj|	j�}
|
dkrNtj	j
d��|
dkrbtj	j
d��|j|
�qW|j�d}d}d}
t
dd�}g}x�|D]|}
|
|
kr�q�|
}
|
d}||kr�|j||d|�f�t
dd�}|}|
d}|d}|d}|d	}||d
|?B||<q�W|j||d|�f�||||||�S)NrzCSYNC with bit 0i��zCSYNC with bit > 65535�� rr�r)Z
get_uint32Z
get_uint16�getZunescapeZ
is_eol_or_eofrr�	from_text�value�	exception�SyntaxErrorr�sort�	bytearray)�clsr
r�tokrrrrZrdtypes�tokenZnrdtyper�octetsZprior_rdtyperrZ
new_window�offsetr"�bitr
r
rr(8sF
zCSYNC.from_textcCsR|jtjd|j|j��x4|jD]*\}}|jtjd|t|���|j|�q WdS)Nz!IHz!BB)�write�struct�packrrrr)r	�file�compressrrrr
r
r�to_wire_sz
CSYNC.to_wirec
Cs|dkrtjjd��tjd|||d��\}}|d7}|d8}g}	x�|dkr�|dkrbtjjd��||}
||d}|dks�|dkr�tjjd��|d	7}|d	8}||kr�tjjd
��t||||�j��}||7}||8}|	j|
|f�qFW||||||	�S)N�zCSYNC too shortz!IHr�r&r%zbad CSYNC octets�zbad CSYNC bitmap length)rr*Z	FormErrorr5�unpackr-Zunwrapr)
r.r
rZwireZcurrentZrdlenrrrrrr1rr
r
r�	from_wirees,
zCSYNC.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr(r9r>�
__classcell__r
r
)rrrs	


&
r)r5Z
dns.exceptionrZ	dns.rdataZ
dns.rdatatypeZdns.nameZdns._compatrZrdataZRdatarr
r
r
r�<module>sANY/__pycache__/ISDN.cpython-36.pyc000064400000004336150401435220012570 0ustar003

�b�W��@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecsXeZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	eddd��Z
�ZS)�ISDNz�ISDN record

    @ivar address: the ISDN address
    @type address: string
    @ivar subaddress: the ISDN subaddress (or '' if not present)
    @type subaddress: string
    @see: RFC 1183�address�
subaddresscsNtt|�j||�t|t�r(|j�|_n||_t|t�rD|j�|_n||_dS)N)�superr�__init__�
isinstancer�encoderr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/ISDN.pyr$s

z
ISDN.__init__NTcKs<|jr&dtjj|j�tjj|j�fSdtjj|j�SdS)Nz	"%s" "%s"z"%s")r�dns�rdataZ	_escapifyr)r
�origin�
relativize�kwrrr�to_text/szISDN.to_textc	CsP|j�}|j�}|j�s,|j|�|j�}n|j|�d}|j�|||||�S)N�)Z
get_string�getZ
is_eol_or_eofZungetZget_eol)	�clsrr�tokrrr�trrrr�	from_text6s


zISDN.from_textcCstt|j�}|dkst�|jtjd|��|j|j�t|j�}|dkrp|dksRt�|jtjd|��|j|j�dS)N�z!Br)�lenr�AssertionError�write�struct�packr)r
�file�compressr�lrrr�to_wireCs

zISDN.to_wirec
Cs�||}|d7}|d8}||kr(tjj�||||�j�}||7}||8}|dkr�||}|d7}|d8}||kr|tjj�||||�j�}	nd}	|||||	�S)N�rr)rZ	exceptionZ	FormErrorZunwrap)
rrrZwireZcurrentZrdlenrr$rrrrr�	from_wireNs"zISDN.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr%r'�
__classcell__rr)r
rrs

r)
r Z
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZdns._compatrrZRdatarrrrr�<module>s
ANY/__pycache__/NSEC.cpython-36.pyc000064400000006251150401435220012561 0ustar003

�b�WR�@sLddlZddlZddlZddlZddlZddlmZGdd�dejj	�Z
dS)�N)�xrangecsbeZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	eddd��Z
ddd�Z�ZS)�NSECz�NSEC record

    @ivar next: the next name
    @type next: dns.name.Name object
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples�next�windowscs"tt|�j||�||_||_dS)N)�superr�__init__rr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/NSEC.pyr$sz
NSEC.__init__NTcKs�|jj||�}d}x�|jD]�\}}g}x`tdt|��D]N}	||	}
x@tdd�D]2}|
d|?@rN|jtjj|d|	d|��qNWq6W|ddj	|�7}qWd||fS)N�r���� z%s%s)
r�choose_relativityrr�len�append�dns�	rdatatype�to_text�join)r�origin�
relativize�kwr�text�window�bitmap�bits�i�byte�jrrr
r)s
 zNSEC.to_textcCsB|j�}|j||�}g}xZ|j�j�}|j�r0Ptjj|j�}	|	dkrRtj	j
d��|	dkrftj	j
d��|j|	�qW|j�d}
d}d}t
dd�}
g}x�|D]|}	|	|kr�q�|	}|	d}||
kr�|j|
|
d|�f�t
dd�}
|}
|	d}|d}|d}|d	}|
|d
|?B|
|<q�W|j|
|
d|�f�|||||�S)NrzNSEC with bit 0i��zNSEC with bit > 65535�� rr�r)Zget_namer�getZunescapeZ
is_eol_or_eofrr�	from_text�value�	exception�SyntaxErrorr�sort�	bytearray)�clsr	r
�tokrrrZrdtypes�tokenZnrdtyper�octetsZprior_rdtyperrZ
new_window�offsetr"�bitrrr
r(7sF
zNSEC.from_textcCsJ|jj|d|�x4|jD]*\}}|jtjd|t|���|j|�qWdS)Nz!BB)r�to_wirer�write�struct�packr)r�file�compressrrrrrr
r4^szNSEC.to_wirec
Cs�tjj|d||�|�\}}||7}||8}g}	x�|dkr�|dkrPtjjd��||}
||d}|dkst|dkr�tjjd��|d7}|d8}||kr�tjjd��t||||�j��}||7}||8}|	j|
|f�q4W|dk	r�|j|�}|||||	�S)	Nr�zNSEC too shortr&r%zbad NSEC octets�zbad NSEC bitmap length)	r�name�	from_wirer*Z	FormErrorr-Zunwraprr)
r.r	r
ZwireZcurrentZrdlenrrZcusedrrr1rrrr
r=ds,

zNSEC.from_wirecCs|jj||�|_dS)N)rr)rrrrrr
r}szNSEC.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr(r4r=r�
__classcell__rr)rr
rs
&
r)r6Z
dns.exceptionrZ	dns.rdataZ
dns.rdatatypeZdns.nameZdns._compatrZrdataZRdatarrrrr
�<module>sANY/__pycache__/NSEC.cpython-36.opt-1.pyc000064400000006251150401435220013520 0ustar003

�b�WR�@sLddlZddlZddlZddlZddlZddlmZGdd�dejj	�Z
dS)�N)�xrangecsbeZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	eddd��Z
ddd�Z�ZS)�NSECz�NSEC record

    @ivar next: the next name
    @type next: dns.name.Name object
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples�next�windowscs"tt|�j||�||_||_dS)N)�superr�__init__rr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/NSEC.pyr$sz
NSEC.__init__NTcKs�|jj||�}d}x�|jD]�\}}g}x`tdt|��D]N}	||	}
x@tdd�D]2}|
d|?@rN|jtjj|d|	d|��qNWq6W|ddj	|�7}qWd||fS)N�r���� z%s%s)
r�choose_relativityrr�len�append�dns�	rdatatype�to_text�join)r�origin�
relativize�kwr�text�window�bitmap�bits�i�byte�jrrr
r)s
 zNSEC.to_textcCsB|j�}|j||�}g}xZ|j�j�}|j�r0Ptjj|j�}	|	dkrRtj	j
d��|	dkrftj	j
d��|j|	�qW|j�d}
d}d}t
dd�}
g}x�|D]|}	|	|kr�q�|	}|	d}||
kr�|j|
|
d|�f�t
dd�}
|}
|	d}|d}|d}|d	}|
|d
|?B|
|<q�W|j|
|
d|�f�|||||�S)NrzNSEC with bit 0i��zNSEC with bit > 65535�� rr�r)Zget_namer�getZunescapeZ
is_eol_or_eofrr�	from_text�value�	exception�SyntaxErrorr�sort�	bytearray)�clsr	r
�tokrrrZrdtypes�tokenZnrdtyper�octetsZprior_rdtyperrZ
new_window�offsetr"�bitrrr
r(7sF
zNSEC.from_textcCsJ|jj|d|�x4|jD]*\}}|jtjd|t|���|j|�qWdS)Nz!BB)r�to_wirer�write�struct�packr)r�file�compressrrrrrr
r4^szNSEC.to_wirec
Cs�tjj|d||�|�\}}||7}||8}g}	x�|dkr�|dkrPtjjd��||}
||d}|dkst|dkr�tjjd��|d7}|d8}||kr�tjjd��t||||�j��}||7}||8}|	j|
|f�q4W|dk	r�|j|�}|||||	�S)	Nr�zNSEC too shortr&r%zbad NSEC octets�zbad NSEC bitmap length)	r�name�	from_wirer*Z	FormErrorr-Zunwraprr)
r.r	r
ZwireZcurrentZrdlenrrZcusedrrr1rrrr
r=ds,

zNSEC.from_wirecCs|jj||�|_dS)N)rr)rrrrrr
r}szNSEC.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr(r4r=r�
__classcell__rr)rr
rs
&
r)r6Z
dns.exceptionrZ	dns.rdataZ
dns.rdatatypeZdns.nameZdns._compatrZrdataZRdatarrrrr
�<module>sANY/__pycache__/EUI64.cpython-36.opt-1.pyc000064400000001022150401435220013553 0ustar003

�b�Wn�@s"ddlZGdd�dejjj�ZdS)�Nc@s eZdZdZdZeddZdS)�EUI64z�EUI64 record

    @ivar fingerprint: 64-bit Extended Unique Identifier (EUI-64)
    @type fingerprint: string
    @see: rfc7043.txt���N)�__name__�
__module__�__qualname__�__doc__Zbyte_lenZtext_len�r
r
�/usr/lib/python3.6/EUI64.pyrsr)Zdns.rdtypes.euibaseZdnsZrdtypesZeuibaseZEUIBaserr
r
r
r�<module>sANY/__pycache__/TXT.cpython-36.opt-1.pyc000064400000000536150401435220013447 0ustar003

�b�Wn�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�TXTz
TXT recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/TXT.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrr�<module>sANY/__pycache__/MX.cpython-36.pyc000064400000000530150401435220012347 0ustar003

�b�Wi�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�MXz	MX recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/MX.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZMXBaserrrrr�<module>sANY/__pycache__/X25.cpython-36.pyc000064400000003312150401435220012402 0ustar003

�b�WG�@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�X25z\X25 record

    @ivar address: the PSDN address
    @type address: string
    @see: RFC 1183�addresscs2tt|�j||�t|t�r(|j�|_n||_dS)N)�superr�__init__�
isinstancer�encoder)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/X25.pyr"s
zX25.__init__NTcKsdtjj|j�S)Nz"%s")�dns�rdataZ	_escapifyr)r	�origin�
relativize�kwr
r
r�to_text)szX25.to_textcCs|j�}|j�||||�S)N)Z
get_stringZget_eol)�clsr
r�tokrrrr
r
r�	from_text,sz
X25.from_textcCs8t|j�}|dkst�|jtjd|��|j|j�dS)N�z!B)�lenr�AssertionError�write�struct�pack)r	�file�compressr�lr
r
r�to_wire2s
zX25.to_wirec	CsH||}|d7}|d8}||kr(tjj�||||�j�}||||�S)N�)rZ	exceptionZ	FormErrorZunwrap)	rr
rZwireZcurrentZrdlenrr rr
r
r�	from_wire8sz
X25.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr!r#�
__classcell__r
r
)rrrs

r)
rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZdns._compatrrZRdatarr
r
r
r�<module>s
ANY/__pycache__/DNAME.cpython-36.pyc000064400000001003150401435220012643 0ustar003

�b�W��@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZddd�ZdS)�DNAMEzDNAME recordNcCs|jj|�S)N)�target�
to_digestable)�self�origin�r�/usr/lib/python3.6/DNAME.pyrszDNAME.to_digestable)N)�__name__�
__module__�__qualname__�__doc__rrrrrrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZUncompressedNSrrrrr�<module>sANY/__pycache__/CDS.cpython-36.pyc000064400000000533150401435220012437 0ustar003

�b�Wk�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�CDSz
CDS recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/CDS.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrr�<module>sANY/__pycache__/NSEC3.cpython-36.pyc000064400000010726150401435220012646 0ustar003

�b�W��@s�ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
yejdd�Zejdd�Z
Wn,ek
r�ejdd�Zejdd�Z
YnXdZdZGdd	�d	ejj�ZdS)
�N)�xrange�	text_typeZ 0123456789ABCDEFGHIJKLMNOPQRSTUVZ ABCDEFGHIJKLMNOPQRSTUVWXYZ234567s 0123456789ABCDEFGHIJKLMNOPQRSTUVs ABCDEFGHIJKLMNOPQRSTUVWXYZ234567�cs`eZdZdZddddddgZ�fdd	�Zddd
�Zeddd��Zddd�Z	eddd��Z
�ZS)�NSEC3a�NSEC3 record

    @ivar algorithm: the hash algorithm number
    @type algorithm: int
    @ivar flags: the flags
    @type flags: int
    @ivar iterations: the number of iterations
    @type iterations: int
    @ivar salt: the salt
    @type salt: string
    @ivar next: the next name hash
    @type next: string
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples�	algorithm�flags�
iterations�salt�next�windowsc		sPtt|�j||�||_||_||_t|t�r:|j�|_	n||_	||_
||_dS)N)�superr�__init__rrr�
isinstancer�encoder	r
r)	�self�rdclass�rdtyperrrr	r
r)�	__class__��/usr/lib/python3.6/NSEC3.pyr
?s
zNSEC3.__init__NTc
Ks�tj|j�jt�j�j�}|jdkr*d}ntj	|j�j�}d}x�|j
D]�\}}g}	x`tdt|��D]N}
||
}x@tdd�D]2}|d|?@rz|	j
tjj|d|
d|��qzWqbW|ddj|	�7}qFWd	|j|j|j|||fS)
N��-�r���� z%u %u %u %s %s%s)�base64Z	b32encoder
�	translate�b32_normal_to_hex�lower�decoder	�binasciiZhexlifyrr�len�append�dns�	rdatatype�to_text�joinrrr)
r�origin�
relativize�kwr
r	�text�window�bitmap�bits�i�byte�jrrrr'Ls"

 
z
NSEC3.to_textc	Cs�|j�}|j�}|j�}|j�}	|	dkr.d}	ntj|	jd��}	|j�jd�j�jt�}
t	j
|
�}
g}xZ|j�j�}|j
�r|Ptjj|j�}
|
dkr�tjjd��|
dkr�tjjd��|j|
�qfW|j�d}d}d}tdd	�}g}x�|D]�}
|
|kr�q�|
}|
d
}||k�rD|dk�r4|j|dj|d|��f�tdd	�}|}|
d
}|d}|d}|d
}||d|?B||<q�W|dk�r�|j||d|�f�|||||||	|
|�S)Nrr�asciirzNSEC3 with bit 0i��zNSEC3 with bit > 65535�� rrrrr)Z	get_uint8Z
get_uint16Z
get_stringr"Z	unhexlifyr�upperr�b32_hex_to_normalrZ	b32decode�getZunescapeZ
is_eol_or_eofr%r&�	from_text�value�	exception�SyntaxErrorr$�sort�	bytearrayr()�clsrr�tokr)r*rrrr	r
Zrdtypes�tokenZnrdtyper-�octetsZprior_rdtyper.rZ
new_window�offsetr1�bitrrrr9`s\




zNSEC3.from_textcCs�t|j�}|jtjd|j|j|j|��|j|j�t|j�}|jtjd|��|j|j�x4|j	D]*\}}|jtjd|t|���|j|�qdWdS)Nz!BBHBz!Bz!BB)
r#r	�write�struct�packrrrr
r)r�file�compressr)�lr-r.rrr�to_wire�s

z
NSEC3.to_wirec	CsZtjd|||d��\}}}	}
|d7}|d8}||||
�j�}||
7}||
8}||}|d7}|d8}||||�j�}
||7}||8}g}x�|dk�rB|dkr�tjjd��||}||d}|dks�|dkr�tjjd��|d	7}|d	8}||k�r
tjjd
��t||||�j��}||7}||8}|j||f�q�W||||||	||
|�S)Nz!BBHB�rr�zNSEC3 too shortr5zbad NSEC3 octets�zbad NSEC3 bitmap length)rF�unpackZunwrapr%r;Z	FormErrorr>r$)r?rrZwireZcurrentZrdlenr)rrrZslenr	Znlenr
rr-rBr.rrr�	from_wire�s< 
zNSEC3.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r
r'�classmethodr9rKrP�
__classcell__rr)rrr,s
1
r)rr"�stringrFZ
dns.exceptionr%Z	dns.rdataZ
dns.rdatatypeZdns._compatrr�	maketransr7r�AttributeError�bytesZSHA1ZOPTOUTZrdataZRdatarrrrr�<module>s(
ANY/__pycache__/CNAME.cpython-36.opt-1.pyc000064400000001056150401435230013612 0ustar003

�b�W<�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�CNAMEz�CNAME record

    Note: although CNAME is officially a singleton type, dnspython allows
    non-singleton CNAME rdatasets because such sets have been commonly
    used by BIND and other nameservers for load balancing.N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/CNAME.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrr�<module>sANY/__pycache__/SSHFP.cpython-36.opt-1.pyc000064400000004133150401435230013651 0ustar003

�b�W�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�SSHFPz�SSHFP record

    @ivar algorithm: the algorithm
    @type algorithm: int
    @ivar fp_type: the digest type
    @type fp_type: int
    @ivar fingerprint: the fingerprint
    @type fingerprint: string
    @see: draft-ietf-secsh-dns-05.txt�	algorithm�fp_type�fingerprintcs(tt|�j||�||_||_||_dS)N)�superr�__init__rrr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/SSHFP.pyr%szSSHFP.__init__NTcKs d|j|jtjj|jdd�fS)Nz%d %d %s�)Z	chunksize)rr�dns�rdataZ_hexifyr)r�origin�
relativize�kwrrr
�to_text,s
z
SSHFP.to_textcCst|j�}|j�}g}x:|j�j�}	|	j�r,P|	j�s<tjj�|j|	j	j
��qWdj|�}
tj
|
�}
||||||
�S)N�)Z	get_uint8�getZunescapeZ
is_eol_or_eofZ
is_identifierrZ	exception�SyntaxError�append�value�encode�join�binasciiZ	unhexlify)�clsr	r
�tokrrrrZchunks�trrrr
�	from_text2s

zSSHFP.from_textcCs,tjd|j|j�}|j|�|j|j�dS)Nz!BB)�struct�packrr�writer)r�file�compressr�headerrrr
�to_wireBs
z
SSHFP.to_wirec	CsTtjd|||d��}|d7}|d8}||||�j�}||||d|d|�S)Nz!BB�r�)r!�unpackZunwrap)	rr	r
ZwireZcurrentZrdlenrr&rrrr
�	from_wireGs
zSSHFP.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr r'r+�
__classcell__rr)rr
rs



r)r!rZ	dns.rdatarZ
dns.rdatatyperZRdatarrrrr
�<module>sANY/__pycache__/PTR.cpython-36.opt-1.pyc000064400000000533150401435230013433 0ustar003

�b�Wk�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�PTRz
PTR recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/PTR.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrr�<module>sANY/__pycache__/AVC.cpython-36.pyc000064400000000666150401435230012447 0ustar003

ӓ�W��@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�AVCzbAVC record

    @see: U{http://www.iana.org/assignments/dns-parameters/AVC/avc-completed-template}N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/AVC.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrr�<module>sANY/__pycache__/CNAME.cpython-36.pyc000064400000001056150401435230012653 0ustar003

�b�W<�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�CNAMEz�CNAME record

    Note: although CNAME is officially a singleton type, dnspython allows
    non-singleton CNAME rdatasets because such sets have been commonly
    used by BIND and other nameservers for load balancing.N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/CNAME.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrr�<module>sANY/__pycache__/SSHFP.cpython-36.pyc000064400000004133150401435230012712 0ustar003

�b�W�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�SSHFPz�SSHFP record

    @ivar algorithm: the algorithm
    @type algorithm: int
    @ivar fp_type: the digest type
    @type fp_type: int
    @ivar fingerprint: the fingerprint
    @type fingerprint: string
    @see: draft-ietf-secsh-dns-05.txt�	algorithm�fp_type�fingerprintcs(tt|�j||�||_||_||_dS)N)�superr�__init__rrr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/SSHFP.pyr%szSSHFP.__init__NTcKs d|j|jtjj|jdd�fS)Nz%d %d %s�)Z	chunksize)rr�dns�rdataZ_hexifyr)r�origin�
relativize�kwrrr
�to_text,s
z
SSHFP.to_textcCst|j�}|j�}g}x:|j�j�}	|	j�r,P|	j�s<tjj�|j|	j	j
��qWdj|�}
tj
|
�}
||||||
�S)N�)Z	get_uint8�getZunescapeZ
is_eol_or_eofZ
is_identifierrZ	exception�SyntaxError�append�value�encode�join�binasciiZ	unhexlify)�clsr	r
�tokrrrrZchunks�trrrr
�	from_text2s

zSSHFP.from_textcCs,tjd|j|j�}|j|�|j|j�dS)Nz!BB)�struct�packrr�writer)r�file�compressr�headerrrr
�to_wireBs
z
SSHFP.to_wirec	CsTtjd|||d��}|d7}|d8}||||�j�}||||d|d|�S)Nz!BB�r�)r!�unpackZunwrap)	rr	r
ZwireZcurrentZrdlenrr&rrrr
�	from_wireGs
zSSHFP.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr r'r+�
__classcell__rr)rr
rs



r)r!rZ	dns.rdatarZ
dns.rdatatyperZRdatarrrrr
�<module>sANY/__pycache__/URI.cpython-36.opt-1.pyc000064400000004323150401435230013426 0ustar003

�b�WR�@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�URIz�URI record

    @ivar priority: the priority
    @type priority: int
    @ivar weight: the weight
    @type weight: int
    @ivar target: the target host
    @type target: dns.name.Name object
    @see: draft-faltstrom-uri-13�priority�weight�targetcsVtt|�j||�||_||_t|�dkr6tjjd��t	|t
�rL|j�|_n||_dS)N�zURI target cannot be empty)
�superr�__init__rr�len�dns�	exception�SyntaxError�
isinstancer�encoder)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/URI.pyr	's
zURI.__init__NTcKsd|j|j|jj�fS)Nz
%d %d "%s")rrr�decode)r�origin�
relativize�kwrrr�to_text2s
zURI.to_textc	CsR|j�}|j�}|j�j�}|j�p*|j�s8tjjd��|j�||||||j	�S)NzURI target must be a string)
Z
get_uint16�getZunescapeZis_quoted_stringZ
is_identifierrrr
Zget_eol�value)	�clsrr�tokrrrrrrrr�	from_text6sz
URI.from_textcCs,tjd|j|j�}|j|�|j|j�dS)Nz!HH)�struct�packrr�writer)r�file�compressrZtwo_intsrrr�to_wire@s
zURI.to_wirec
Csh|dkrtjjd��tjd|||d��\}}|d7}|d8}||||�}	||7}||||||	�S)N�zURI RR is shorter than 5 octetsz!HH�)rrZ	FormErrorr �unpack)
rrrZwireZcurrentZrdlenrrrrrrr�	from_wireEsz
URI.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r	r�classmethodrr%r)�
__classcell__rr)rrrs


	
r)
r Z
dns.exceptionrZ	dns.rdataZdns.nameZdns._compatrZrdataZRdatarrrrr�<module>s
ANY/__pycache__/NSEC3PARAM.cpython-36.pyc000064400000004451150401435230013426 0ustar003

�b�W�@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecs\eZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
�ZS)�
NSEC3PARAMaNSEC3PARAM record

    @ivar algorithm: the hash algorithm number
    @type algorithm: int
    @ivar flags: the flags
    @type flags: int
    @ivar iterations: the number of iterations
    @type iterations: int
    @ivar salt: the salt
    @type salt: string�	algorithm�flags�
iterations�saltcsDtt|�j||�||_||_||_t|t�r:|j�|_	n||_	dS)N)
�superr�__init__rrr�
isinstancer�encoder)�self�rdclass�rdtyperrrr)�	__class__�� /usr/lib/python3.6/NSEC3PARAM.pyr	's
zNSEC3PARAM.__init__NTcKs6|jdkrd}ntj|j�j�}d|j|j|j|fS)N��-z%u %u %u %s)r�binasciiZhexlify�decoderrr)r�origin�
relativize�kwrrrr�to_text1s

zNSEC3PARAM.to_textc
CsV|j�}|j�}|j�}|j�}	|	dkr.d}	ntj|	j��}	|j�|||||||	�S)Nr�)Z	get_uint8Z
get_uint16Z
get_stringrZ	unhexlifyrZget_eol)
�clsr
r�tokrrrrrrrrr�	from_text9szNSEC3PARAM.from_textcCs8t|j�}|jtjd|j|j|j|��|j|j�dS)Nz!BBHB)�lenr�write�struct�packrrr)r�file�compressr�lrrr�to_wireFs
zNSEC3PARAM.to_wirecCsvtjd|||d��\}}}	}
|d7}|d8}||||
�j�}||
7}||
8}|dkrdtjj�||||||	|�S)Nz!BBHB�r)r �unpackZunwrap�dnsZ	exceptionZ	FormError)rr
rZwireZcurrentZrdlenrrrrZslenrrrr�	from_wireLszNSEC3PARAM.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r	r�classmethodrr%r)�
__classcell__rr)rrrs


r)
r rZ
dns.exceptionr(Z	dns.rdataZdns._compatrZrdataZRdatarrrrr�<module>s
ANY/__pycache__/SOA.cpython-36.pyc000064400000006340150401435230012453 0ustar003

�b�W��@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsveZdZdZdddddddgZ�fd	d
�Zdd
d�Zeddd��Zddd�Z	ddd�Z
eddd��Zddd�Z�Z
S)�SOAa�SOA record

    @ivar mname: the SOA MNAME (master name) field
    @type mname: dns.name.Name object
    @ivar rname: the SOA RNAME (responsible name) field
    @type rname: dns.name.Name object
    @ivar serial: The zone's serial number
    @type serial: int
    @ivar refresh: The zone's refresh value (in seconds)
    @type refresh: int
    @ivar retry: The zone's retry value (in seconds)
    @type retry: int
    @ivar expire: The zone's expiration value (in seconds)
    @type expire: int
    @ivar minimum: The zone's negative caching time (in seconds, called
    "minimum" for historical reasons)
    @type minimum: int
    @see: RFC 1035�mname�rname�serial�refresh�retry�expire�minimumc

s@tt|�j||�||_||_||_||_||_||_|	|_	dS)N)
�superr�__init__rrrrrrr	)
�self�rdclass�rdtyperrrrrrr	)�	__class__��/usr/lib/python3.6/SOA.pyr/szSOA.__init__NTcKs<|jj||�}|jj||�}d|||j|j|j|j|jfS)Nz%s %s %d %d %d %d %d)r�choose_relativityrrrrrr	)r�origin�
relativize�kwrrrrr�to_text:s
zSOA.to_textc

Csp|j�}|j�}|j||�}|j||�}|j�}|j�}	|j�}
|j�}|j�}|j�|||||||	|
||�	S)N)Zget_namerZ
get_uint32Zget_ttlZget_eol)
�clsr
r�tokrrrrrrrrr	rrr�	from_textAsz
SOA.from_textcCsL|jj|||�|jj|||�tjd|j|j|j|j|j	�}|j
|�dS)Nz!IIIII)r�to_wirer�struct�packrrrrr	�write)r�file�compressr�	five_intsrrrrPs
zSOA.to_wirecCs6|jj|�|jj|�tjd|j|j|j|j|j	�S)Nz!IIIII)
r�
to_digestablerrrrrrrr	)rrrrrr!WszSOA.to_digestablecCs�tjj|d||�|�\}}||7}||8}tjj|d||�|�\}	}||7}||8}|dkrltjj�tjd||||��}
|dk	r�|j|�}|	j|�}	|||||	|
d|
d|
d|
d|
d�	S)N�z!IIIIIr����)�dns�name�	from_wireZ	exceptionZ	FormErrorr�unpackr)rr
rZwireZcurrentZrdlenrrZcusedrr rrrr)]s 


z
SOA.from_wirecCs$|jj||�|_|jj||�|_dS)N)rrr)rrrrrrrpszSOA.choose_relativity)NT)NT)NN)N)N)NT)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr!r)r�
__classcell__rr)rrrs


r)rZ
dns.exceptionr'Z	dns.rdataZdns.nameZrdataZRdatarrrrr�<module>sANY/__pycache__/ISDN.cpython-36.opt-1.pyc000064400000004255150401435230013530 0ustar003

�b�W��@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecsXeZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	eddd��Z
�ZS)�ISDNz�ISDN record

    @ivar address: the ISDN address
    @type address: string
    @ivar subaddress: the ISDN subaddress (or '' if not present)
    @type subaddress: string
    @see: RFC 1183�address�
subaddresscsNtt|�j||�t|t�r(|j�|_n||_t|t�rD|j�|_n||_dS)N)�superr�__init__�
isinstancer�encoderr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/ISDN.pyr$s

z
ISDN.__init__NTcKs<|jr&dtjj|j�tjj|j�fSdtjj|j�SdS)Nz	"%s" "%s"z"%s")r�dns�rdataZ	_escapifyr)r
�origin�
relativize�kwrrr�to_text/szISDN.to_textc	CsP|j�}|j�}|j�s,|j|�|j�}n|j|�d}|j�|||||�S)N�)Z
get_string�getZ
is_eol_or_eofZungetZget_eol)	�clsrr�tokrrr�trrrr�	from_text6s


zISDN.from_textcCs\t|j�}|jtjd|��|j|j�t|j�}|dkrX|jtjd|��|j|j�dS)Nz!Br)�lenr�write�struct�packr)r
�file�compressr�lrrr�to_wireCs

zISDN.to_wirec
Cs�||}|d7}|d8}||kr(tjj�||||�j�}||7}||8}|dkr�||}|d7}|d8}||kr|tjj�||||�j�}	nd}	|||||	�S)N�rr)rZ	exceptionZ	FormErrorZunwrap)
rrrZwireZcurrentZrdlenrr"rrrrr�	from_wireNs"zISDN.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr#r%�
__classcell__rr)r
rrs

r)
rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZdns._compatrrZRdatarrrrr�<module>s
ANY/__pycache__/DNAME.cpython-36.opt-1.pyc000064400000001003150401435230013603 0ustar003

�b�W��@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZddd�ZdS)�DNAMEzDNAME recordNcCs|jj|�S)N)�target�
to_digestable)�self�origin�r�/usr/lib/python3.6/DNAME.pyrszDNAME.to_digestable)N)�__name__�
__module__�__qualname__�__doc__rrrrrrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZUncompressedNSrrrrr�<module>sANY/__pycache__/DLV.cpython-36.pyc000064400000000533150401435230012454 0ustar003

�b�W`�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�DLVz
DLV recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/DLV.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrr�<module>sANY/__pycache__/SPF.cpython-36.pyc000064400000000562150401435230012461 0ustar003

�b�W��@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�SPFzSPF record

    @see: RFC 4408N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/SPF.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrr�<module>sANY/__pycache__/EUI64.cpython-36.pyc000064400000001022150401435230012615 0ustar003

�b�Wn�@s"ddlZGdd�dejjj�ZdS)�Nc@s eZdZdZdZeddZdS)�EUI64z�EUI64 record

    @ivar fingerprint: 64-bit Extended Unique Identifier (EUI-64)
    @type fingerprint: string
    @see: rfc7043.txt���N)�__name__�
__module__�__qualname__�__doc__Zbyte_lenZtext_len�r
r
�/usr/lib/python3.6/EUI64.pyrsr)Zdns.rdtypes.euibaseZdnsZrdtypesZeuibaseZEUIBaserr
r
r
r�<module>sANY/__pycache__/GPOS.cpython-36.pyc000064400000010074150401435230012600 0ustar003

�b�W��@sXddlZddlZddlZddlZddlmZmZdd�Zdd�Z	Gdd�dej
j�ZdS)	�N)�long�	text_typecCs�|ddks|ddkr$|dd�}|j�r0dS|jd�\}}|dkrV|dkrVtjj�|dkrv|j�j�rvtjj�|dkr�|j�j�r�tjj�dS)	Nr�-�+��.��-�+)�isdigit�split�dns�	exception�	FormError�decode)Zwhat�left�right�r�/usr/lib/python3.6/GPOS.py�_validate_float_stringsrcCst|t�r|j�S|S)N)�
isinstancer�encode)�valuerrr�	_sanitize&s
rcs�eZdZdZdddgZ�fdd�Zd!d	d
�Zed"dd��Zd#d
d�Z	ed$dd��Z
dd�Zdd�Ze
eedd�Zdd�Zdd�Ze
eedd�Zdd�Zdd�Ze
eed d�Z�ZS)%�GPOSz�GPOS record

    @ivar latitude: latitude
    @type latitude: string
    @ivar longitude: longitude
    @type longitude: string
    @ivar altitude: altitude
    @type altitude: string
    @see: RFC 1712�latitude�	longitude�altitudecs�tt|�j||�t|t�s0t|t�s0t|t�r8t|�}t|t�sVt|t�sVt|t�r^t|�}t|t�s|t|t�s|t|t�r�t|�}t|�}t|�}t|�}t	|�t	|�t	|�||_
||_||_dS)N)
�superr�__init__r�float�intr�strrrrrr)�self�rdclass�rdtyperrr)�	__class__rrr:s,








z
GPOS.__init__NTcKs d|jj�|jj�|jj�fS)Nz%s %s %s)rrrr)r#�origin�
relativize�kwrrr�to_textRs
zGPOS.to_textc	Cs0|j�}|j�}|j�}|j�||||||�S)N)Z
get_stringZget_eol)	�clsr$r%�tokr'r(rrrrrr�	from_textWs
zGPOS.from_textcCs�t|j�}|dkst�|jtjd|��|j|j�t|j�}|dksJt�|jtjd|��|j|j�t|j�}|dks~t�|jtjd|��|j|j�dS)N�z!B)�lenr�AssertionError�write�struct�packrr)r#�file�compressr'�lrrr�to_wire_s


zGPOS.to_wirecCs�||}|d7}|d8}||kr(tjj�||||�j�}||7}||8}||}|d7}|d8}||krttjj�||||�j�}	||7}||8}||}|d7}|d8}||kr�tjj�||||�j�}
|||||	|
�S)Nr)r
rrZunwrap)r+r$r%ZwireZcurrentZrdlenr'r6rrrrrr�	from_wirems.zGPOS.from_wirecCs
t|j�S)N)r r)r#rrr�_get_float_latitude�szGPOS._get_float_latitudecCst|�|_dS)N)r"r)r#rrrr�_set_float_latitude�szGPOS._set_float_latitudez"latitude as a floating point value)�doccCs
t|j�S)N)r r)r#rrr�_get_float_longitude�szGPOS._get_float_longitudecCst|�|_dS)N)r"r)r#rrrr�_set_float_longitude�szGPOS._set_float_longitudez#longitude as a floating point valuecCs
t|j�S)N)r r)r#rrr�_get_float_altitude�szGPOS._get_float_altitudecCst|�|_dS)N)r"r)r#rrrr�_set_float_altitude�szGPOS._set_float_altitudez"altitude as a floating point value)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr*�classmethodr-r7r8r9r:�propertyZfloat_latituder<r=Zfloat_longituder>r?Zfloat_altitude�
__classcell__rr)r&rr,s*



r)
r2Z
dns.exceptionr
Z	dns.rdataZ
dns.tokenizerZdns._compatrrrrZrdataZRdatarrrrr�<module>sANY/__pycache__/NSEC3.cpython-36.opt-1.pyc000064400000010726150401435230013606 0ustar003

�b�W��@s�ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
yejdd�Zejdd�Z
Wn,ek
r�ejdd�Zejdd�Z
YnXdZdZGdd	�d	ejj�ZdS)
�N)�xrange�	text_typeZ 0123456789ABCDEFGHIJKLMNOPQRSTUVZ ABCDEFGHIJKLMNOPQRSTUVWXYZ234567s 0123456789ABCDEFGHIJKLMNOPQRSTUVs ABCDEFGHIJKLMNOPQRSTUVWXYZ234567�cs`eZdZdZddddddgZ�fdd	�Zddd
�Zeddd��Zddd�Z	eddd��Z
�ZS)�NSEC3a�NSEC3 record

    @ivar algorithm: the hash algorithm number
    @type algorithm: int
    @ivar flags: the flags
    @type flags: int
    @ivar iterations: the number of iterations
    @type iterations: int
    @ivar salt: the salt
    @type salt: string
    @ivar next: the next name hash
    @type next: string
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples�	algorithm�flags�
iterations�salt�next�windowsc		sPtt|�j||�||_||_||_t|t�r:|j�|_	n||_	||_
||_dS)N)�superr�__init__rrr�
isinstancer�encoder	r
r)	�self�rdclass�rdtyperrrr	r
r)�	__class__��/usr/lib/python3.6/NSEC3.pyr
?s
zNSEC3.__init__NTc
Ks�tj|j�jt�j�j�}|jdkr*d}ntj	|j�j�}d}x�|j
D]�\}}g}	x`tdt|��D]N}
||
}x@tdd�D]2}|d|?@rz|	j
tjj|d|
d|��qzWqbW|ddj|	�7}qFWd	|j|j|j|||fS)
N��-�r���� z%u %u %u %s %s%s)�base64Z	b32encoder
�	translate�b32_normal_to_hex�lower�decoder	�binasciiZhexlifyrr�len�append�dns�	rdatatype�to_text�joinrrr)
r�origin�
relativize�kwr
r	�text�window�bitmap�bits�i�byte�jrrrr'Ls"

 
z
NSEC3.to_textc	Cs�|j�}|j�}|j�}|j�}	|	dkr.d}	ntj|	jd��}	|j�jd�j�jt�}
t	j
|
�}
g}xZ|j�j�}|j
�r|Ptjj|j�}
|
dkr�tjjd��|
dkr�tjjd��|j|
�qfW|j�d}d}d}tdd	�}g}x�|D]�}
|
|kr�q�|
}|
d
}||k�rD|dk�r4|j|dj|d|��f�tdd	�}|}|
d
}|d}|d}|d
}||d|?B||<q�W|dk�r�|j||d|�f�|||||||	|
|�S)Nrr�asciirzNSEC3 with bit 0i��zNSEC3 with bit > 65535�� rrrrr)Z	get_uint8Z
get_uint16Z
get_stringr"Z	unhexlifyr�upperr�b32_hex_to_normalrZ	b32decode�getZunescapeZ
is_eol_or_eofr%r&�	from_text�value�	exception�SyntaxErrorr$�sort�	bytearrayr()�clsrr�tokr)r*rrrr	r
Zrdtypes�tokenZnrdtyper-�octetsZprior_rdtyper.rZ
new_window�offsetr1�bitrrrr9`s\




zNSEC3.from_textcCs�t|j�}|jtjd|j|j|j|��|j|j�t|j�}|jtjd|��|j|j�x4|j	D]*\}}|jtjd|t|���|j|�qdWdS)Nz!BBHBz!Bz!BB)
r#r	�write�struct�packrrrr
r)r�file�compressr)�lr-r.rrr�to_wire�s

z
NSEC3.to_wirec	CsZtjd|||d��\}}}	}
|d7}|d8}||||
�j�}||
7}||
8}||}|d7}|d8}||||�j�}
||7}||8}g}x�|dk�rB|dkr�tjjd��||}||d}|dks�|dkr�tjjd��|d	7}|d	8}||k�r
tjjd
��t||||�j��}||7}||8}|j||f�q�W||||||	||
|�S)Nz!BBHB�rr�zNSEC3 too shortr5zbad NSEC3 octets�zbad NSEC3 bitmap length)rF�unpackZunwrapr%r;Z	FormErrorr>r$)r?rrZwireZcurrentZrdlenr)rrrZslenr	Znlenr
rr-rBr.rrr�	from_wire�s< 
zNSEC3.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r
r'�classmethodr9rKrP�
__classcell__rr)rrr,s
1
r)rr"�stringrFZ
dns.exceptionr%Z	dns.rdataZ
dns.rdatatypeZdns._compatrr�	maketransr7r�AttributeError�bytesZSHA1ZOPTOUTZrdataZRdatarrrrr�<module>s(
ANY/__pycache__/DNSKEY.cpython-36.pyc000064400000000723150401435230013025 0ustar003

�b�W�@s:ddlZddlmZmZddgZGdd�dejjj�ZdS)�N)�flags_to_text_set�flags_from_text_setrrc@seZdZdZdS)�DNSKEYz
DNSKEY recordN)�__name__�
__module__�__qualname__�__doc__�r	r	�/usr/lib/python3.6/DNSKEY.pyrsr)	Zdns.rdtypes.dnskeybaseZdnsrr�__all__ZrdtypesZ
dnskeybaseZ
DNSKEYBaserr	r	r	r
�<module>sANY/__pycache__/MX.cpython-36.opt-1.pyc000064400000000530150401435230013307 0ustar003

�b�Wi�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�MXz	MX recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/MX.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZMXBaserrrrr�<module>sANY/__pycache__/RT.cpython-36.opt-1.pyc000064400000000552150401435230013314 0ustar003

�b�W{�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�RTz	RT recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/RT.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedDowncasingMXrrrrr�<module>sANY/__pycache__/RT.cpython-36.pyc000064400000000552150401435230012355 0ustar003

�b�W{�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�RTz	RT recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/RT.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedDowncasingMXrrrrr�<module>sANY/__pycache__/AVC.cpython-36.opt-1.pyc000064400000000666150401435230013406 0ustar003

ӓ�W��@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�AVCzbAVC record

    @see: U{http://www.iana.org/assignments/dns-parameters/AVC/avc-completed-template}N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/AVC.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrr�<module>sANY/__pycache__/LOC.cpython-36.pyc000064400000020153150401435230012444 0ustar003

�b�W�/�@s�ddlmZddlZddlZddlZddlmZmZm	Z	e
dd�edd�D��ZdZ
dZd	Zd
d�Zdd
�Zdd�Zdd�Zdd�ZGdd�dejj�ZdS)�)�divisionN)�long�xrange�round_py2_compatccs|]}td|�VqdS)�
N)r)�.0�i�r	�/usr/lib/python3.6/LOC.py�	<genexpr>sr�gY@g��.Ag@�@cCsh|dkrdSd}x2ttt��D]"}|t|td�kr|d}PqW|dksT|dkrdtjjd|��|S)Nr�z%s value out of bounds)r�len�_powsr�dns�	exception�SyntaxError)�what�descZexprr	r	r
�_exponent_of!srcCs�|dkrd}|d9}nd}t|d�}t|d�}||d8}t|d�}||d8}t|d�}|t|d�8}t|�}|||||fS)Nrr
i��6i`�i����r)r�int)rZsignZdegreesZminutes�secondsr	r	r
�_float_to_tuple.s
rcCsXt|d�}|t|d�d7}|t|d�d7}|t|d�d7}t|d�|S)	Nrr
gN@�g �@�g@wKA�)�float)r�valuer	r	r
�_tuple_to_float?s
rcCs4t|�}t||�d@}|td|�d@}|d|S)N�r�)rr�pow)rr�exponent�baser	r	r
�_encode_sizeGsr%cCsV|d@}|dkr tjjd|��|d@d?}|dkrDtjjd|��t|�td|�S)Nr �	zbad %s exponent��rzbad %s baser)rrrrr")rrr#r$r	r	r
�_decode_sizeNsr(cs�eZdZdZddddddgZeeef�fdd	�	Zddd
�Z	e
d dd��Zd!dd�Ze
d"dd��Z
dd�Zdd�Zeeedd�Zdd�Zdd�Zeeedd�Z�ZS)#�LOCa�LOC record

    @ivar latitude: latitude
    @type latitude: (int, int, int, int, sign) tuple specifying the degrees, minutes,
    seconds, milliseconds, and sign of the coordinate.
    @ivar longitude: longitude
    @type longitude: (int, int, int, int, sign) tuple specifying the degrees,
    minutes, seconds, milliseconds, and sign of the coordinate.
    @ivar altitude: altitude
    @type altitude: float
    @ivar size: size of the sphere
    @type size: float
    @ivar horizontal_precision: horizontal precision
    @type horizontal_precision: float
    @ivar vertical_precision: vertical precision
    @type vertical_precision: float
    @see: RFC 1876�latitude�	longitude�altitude�size�horizontal_precision�vertical_precisionc		s�tt|�j||�t|t�s&t|t�r.t|�}t|t�r@t|�}||_t|t�sZt|t�rbt|�}t|t�rtt|�}||_	t|�|_
t|�|_t|�|_t|�|_
dS)a�Initialize a LOC record instance.

        The parameters I{latitude} and I{longitude} may be either a 4-tuple
        of integers specifying (degrees, minutes, seconds, milliseconds),
        or they may be floating point values specifying the number of
        degrees. The other parameters are floats. Size, horizontal precision,
        and vertical precision are specified in centimeters.N)�superr)�__init__�
isinstancerrrrr*r+r,r-r.r/)	�self�rdclass�rdtyper*r+r,r-�hprec�vprec)�	__class__r	r
r1os




zLOC.__init__NTc
Ks�|jddkrd}nd}|jddkr,d}nd}d|jd|jd|jd	|jd
||jd|jd|jd	|jd
||jdf}|jtks�|jtks�|jtkr�|d|jd|jd|jdf7}|S)
Nrr�N�S�E�Wz(%d %d %d.%03d %s %d %d %d.%03d %s %0.2fmr
rrgY@z %0.2fm %0.2fm %0.2fm)	r*r+r,r-�
_default_sizer.�_default_hprecr/�_default_vprec)r3�origin�
relativize�kwZlat_hemisphereZlong_hemisphere�textr	r	r
�to_text�s&



zLOC.to_textc	Cs�dddddg}dddddg}t}t}	t}
|j�|d<|j�}|j��r0t|�|d<|j�}d|k�r|jd�\}}
|j�s�tj	j
d��t|�|d<|ddkr�tj	j
d��t|
�}|dks�|dks�|
j�r�tj	j
d	��|dkr�d
}n|dkr�d}nd}|t|
�|d<|j�}n|j��r0t|�|d<|j�}|dk�rDd|d
<n|dk�rZtj	j
d��|j�|d<|j�}|j��rpt|�|d<|j�}d|k�rR|jd�\}}
|j��s�tj	j
d��t|�|d<|ddk�r�tj	j
d��t|
�}|dk�s|dk�s|
j��rtj	j
d��|dk�r$d
}n|dk�r4d}nd}|t|
�|d<|j�}n|j��rpt|�|d<|j�}|dk�r�d|d
<n|dk�r�tj	j
d��|j�}|ddk�r�|dd�}t|�d}|j
�j�}|j��s�|j}|ddk�r�|dd�}t|�d}|j
�j�}|j��s�|j}|ddk�r@|dd�}t|�d}	|j
�j�}|j��s�|j}|d dk�r�|dd!�}t|�d}
|j�||||||||	|
�S)"Nrr
�.zbad latitude seconds valuer�<zlatitude seconds >= 60rzbad latitude milliseconds value�drr:rr9zbad latitude hemisphere valuezbad longitude seconds valuezlongitude seconds >= 60z bad longitude milliseconds valuer<r;zbad longitude hemisphere value�mgY@rrrrrrrrrr)r=r>r?Zget_intZ
get_string�isdigitr�splitrrrrr�getZunescapeZ
is_eol_or_eofrZget_eol)�clsr4r5�tokr@rAr*r+r-r6r7�tr�milliseconds�lrHr,�tokenrr	r	r
�	from_text�s�









 









z
LOC.from_textc	Cs�|jdd|jdd|jdd|jd|jd}td	�|}|jdd|jdd|jdd|jd|jd}td	�|}t|j�td
�}t|jd�}t|jd�}	t|jd
�}
tj	dd||	|
|||�}|j
|�dS)Nri��6r
i`�ri�rrli���r-zhorizontal precisionzvertical precisionz!BBBBIII)r*rr+r,r%r-r.r/�struct�pack�write)r3�file�compressr@rOr*r+r,r-r6r7�wirer	r	r
�to_wires((zLOC.to_wirec	Cstjd||||��\}}}	}
}}}
|td�krHt|td��d}nd
ttd�|�d}|dksp|dkr|tjjd��|td�kr�t|td��d}ndttd�|�d}|dks�|dkr�tjjd��t|
�d	}
t|d
�}t|	d�}	t|
d�}
||||||
||	|
�S)Nz!BBBBIIIli��6r
g�V@zbad latitudeg�f@z
bad longitudeg�cAr-zhorizontal precisionzvertical precisionrg�V�rg�f�)rS�unpackrrrrZ	FormErrorr()rLr4r5rXZcurrentZrdlenr@�versionr-r6r7r*r+r,r	r	r
�	from_wires"&


z
LOC.from_wirecCs
t|j�S)N)rr*)r3r	r	r
�_get_float_latitude5szLOC._get_float_latitudecCst|�|_dS)N)rr*)r3rr	r	r
�_set_float_latitude8szLOC._set_float_latitudez"latitude as a floating point value)�doccCs
t|j�S)N)rr+)r3r	r	r
�_get_float_longitude>szLOC._get_float_longitudecCst|�|_dS)N)rr+)r3rr	r	r
�_set_float_longitudeAszLOC._set_float_longitudez#longitude as a floating point value)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r=r>r?r1rD�classmethodrRrYr\r]r^�propertyZfloat_latituder`raZfloat_longitude�
__classcell__r	r	)r8r
r)Xs&
e
r))Z
__future__rrSZ
dns.exceptionrZ	dns.rdataZdns._compatrrr�tuple�rangerr=r>r?rrrr%r(ZrdataZRdatar)r	r	r	r
�<module>s

ANY/__pycache__/CDNSKEY.cpython-36.pyc000064400000000726150401435230013133 0ustar003

�b�W�@s:ddlZddlmZmZddgZGdd�dejjj�ZdS)�N)�flags_to_text_set�flags_from_text_setrrc@seZdZdZdS)�CDNSKEYzCDNSKEY recordN)�__name__�
__module__�__qualname__�__doc__�r	r	�/usr/lib/python3.6/CDNSKEY.pyrsr)	Zdns.rdtypes.dnskeybaseZdnsrr�__all__ZrdtypesZ
dnskeybaseZ
DNSKEYBaserr	r	r	r
�<module>sANY/__pycache__/CAA.cpython-36.opt-1.pyc000064400000004005150401435230013350 0ustar003

�b�W>
�@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�CAAz�CAA (Certification Authority Authorization) record

    @ivar flags: the flags
    @type flags: int
    @ivar tag: the tag
    @type tag: string
    @ivar value: the value
    @type value: string
    @see: RFC 6844�flags�tag�valuecs(tt|�j||�||_||_||_dS)N)�superr�__init__rrr)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/CAA.pyr%szCAA.__init__NTcKs$d|jtjj|j�tjj|j�fS)Nz
%u %s "%s")r�dns�rdataZ	_escapifyrr)r�origin�
relativize�kwrrr
�to_text+szCAA.to_textc	Cs\|j�}|j�j�}t|�dkr,tjjd��|j�s@tjjd��|j�j�}||||||�S)N�ztag too longztag is not alphanumeric)Z	get_uint8Z
get_string�encode�lenrZ	exception�SyntaxError�isalnum)	�clsr	r
�tokrrrrrrrr
�	from_text0sz
CAA.from_textcCsL|jtjd|j��t|j�}|jtjd|��|j|j�|j|j�dS)Nz!B)�write�struct�packrrrr)r�file�compressr�lrrr
�to_wire;s

zCAA.to_wirecCs\tjd|||d��\}}|d7}||||�}	|||||d�}
|||||	|
�S)Nz!BB�)r�unpack)rr	r
ZwireZcurrentZrdlenrrr!rrrrr
�	from_wireCs
z
CAA.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr"r%�
__classcell__rr)rr
rs




r)rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerrZRdatarrrrr
�<module>sANY/__pycache__/HINFO.cpython-36.opt-1.pyc000064400000003711150401435240013633 0ustar003

�b�Wi
�@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecsXeZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	eddd��Z
�ZS)�HINFOz�HINFO record

    @ivar cpu: the CPU type
    @type cpu: string
    @ivar os: the OS type
    @type os: string
    @see: RFC 1035�cpu�oscsNtt|�j||�t|t�r(|j�|_n||_t|t�rD|j�|_n||_dS)N)�superr�__init__�
isinstancer�encoderr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/HINFO.pyr$s

zHINFO.__init__NTcKs dtjj|j�tjj|j�fS)Nz	"%s" "%s")�dns�rdataZ	_escapifyrr)r
�origin�
relativize�kwrrr�to_text/sz
HINFO.to_textcCs&|j�}|j�}|j�|||||�S)N)Z
get_stringZget_eol)�clsrr�tokrrrrrrr�	from_text3szHINFO.from_textcCsTt|j�}|jtjd|��|j|j�t|j�}|jtjd|��|j|j�dS)Nz!B)�lenr�write�struct�packr)r
�file�compressr�lrrr�to_wire:s

z
HINFO.to_wirec
Cs�||}|d7}|d8}||kr(tjj�||||�j�}||7}||8}||}|d7}|d8}||krttjj�||||�j�}	|||||	�S)N�)rZ	exceptionZ	FormErrorZunwrap)
rrrZwireZcurrentZrdlenrrrrrrr�	from_wireDszHINFO.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrr r"�
__classcell__rr)r
rrs


r)
rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZdns._compatrrZRdatarrrrr�<module>s
ANY/__pycache__/TLSA.cpython-36.opt-1.pyc000064400000004336150401435240013537 0ustar003

�b�W��@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�Ncs\eZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
�ZS)�TLSAa*TLSA record

    @ivar usage: The certificate usage
    @type usage: int
    @ivar selector: The selector field
    @type selector: int
    @ivar mtype: The 'matching type' field
    @type mtype: int
    @ivar cert: The 'Certificate Association Data' field
    @type cert: string
    @see: RFC 6698�usage�selector�mtype�certcs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__��/usr/lib/python3.6/TLSA.pyr's
z
TLSA.__init__NTcKs$d|j|j|jtjj|jdd�fS)Nz%d %d %d %s�)Z	chunksize)rrr�dns�rdataZ_hexifyr)r	�origin�
relativize�kwr
r
r�to_text/s

zTLSA.to_textcCs~|j�}|j�}|j�}g}	x:|j�j�}
|
j�r4P|
j�sDtjj�|	j|
j	j
��qWdj|	�}tj
|�}|||||||�S)N�)Z	get_uint8�getZunescapeZ
is_eol_or_eofZ
is_identifierrZ	exception�SyntaxError�append�value�encode�join�binasciiZ	unhexlify)�clsr
r�tokrrrrrZcert_chunks�trr
r
r�	from_text6s

zTLSA.from_textcCs0tjd|j|j|j�}|j|�|j|j�dS)Nz!BBB)�struct�packrrr�writer)r	�file�compressr�headerr
r
r�to_wireGs
zTLSA.to_wirec	CsZtjd|||d��}|d7}|d8}||||�j�}||||d|d|d|�S)Nz!BBB�r��)r"�unpackZunwrap)	rr
rZwireZcurrentZrdlenrr'rr
r
r�	from_wireLs
zTLSA.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr!r(r-�
__classcell__r
r
)rrrs

r)r"rZ	dns.rdatarZ
dns.rdatatyperZRdatarr
r
r
r�<module>sANY/__pycache__/RRSIG.cpython-36.pyc000064400000010537150401435240012723 0ustar003

�b�W�@s|ddlZddlZddlZddlZddlZddlZddlZddlZGdd�dej	j
�Zdd�Zdd�Z
Gdd	�d	ejj�ZdS)
�Nc@seZdZdZdS)�
BadSigTimez:Time in DNS SIG or RRSIG resource record cannot be parsed.N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/RRSIG.pyrsrc
Cs�t|�dkrt�t|dd��}t|dd��}t|dd��}t|dd��}t|dd��}t|dd��}tj||||||dddf	�S)N�r����
�)�lenr�int�calendarZtimegm)�whatZyearZmonthZdayZhourZminute�secondrrr�sigtime_to_posixtime srcCstjdtj|��S)Nz%Y%m%d%H%M%S)�timeZstrftimeZgmtime)rrrr�posixtime_to_sigtime-src	sxeZdZdZdddddddd	d
g	Z�fdd�Zd
d�Zddd�Zeddd��Z	ddd�Z
eddd��Zddd�Z�Z
S) �RRSIGa~RRSIG record

    @ivar type_covered: the rdata type this signature covers
    @type type_covered: int
    @ivar algorithm: the algorithm used for the sig
    @type algorithm: int
    @ivar labels: number of labels
    @type labels: int
    @ivar original_ttl: the original TTL
    @type original_ttl: long
    @ivar expiration: signature expiration time
    @type expiration: long
    @ivar inception: signature inception time
    @type inception: long
    @ivar key_tag: the key tag
    @type key_tag: int
    @ivar signer: the signer
    @type signer: dns.name.Name object
    @ivar signature: the signature
    @type signature: string�type_covered�	algorithm�labels�original_ttl�
expiration�	inception�key_tag�signer�	signaturecsLtt|�j||�||_||_||_||_||_||_|	|_	|
|_
||_dS)N)�superr�__init__rrrrrrrrr )�self�rdclass�rdtyperrrrrrrrr )�	__class__rrr"LszRRSIG.__init__cCs|jS)N)r)r#rrr�coversZszRRSIG.coversNTcKsLdtjj|j�|j|j|jt|j�t|j	�|j
|jj||�tj
j|j�f	S)Nz%s %d %d %d %s %s %d %s %s)�dns�	rdatatype�to_textrrrrrrrrr�choose_relativity�rdataZ
_base64ifyr )r#�origin�
relativize�kwrrrr*]sz
RRSIG.to_textcCs�tjj|j��}tjj|j��}|j�}|j�}	t|j��}
t|j��}|j�}|j	�}
|
j
||�}
g}x:|j�j�}|j
�r�P|j�s�tjj�|j|jj��qjWdj|�}tj|�}|||||||	|
|||
|�S)N�)r(r)�	from_textZ
get_stringZdnssecZalgorithm_from_textZget_intZget_ttlrZget_namer+�getZunescapeZ
is_eol_or_eofZ
is_identifier�	exception�SyntaxError�append�value�encode�join�base64Z	b64decode)�clsr$r%�tokr-r.rrrrrrrrZchunks�tZb64r rrrr1js,


zRRSIG.from_textc	CsPtjd|j|j|j|j|j|j|j�}|j	|�|j
j|d|�|j	|j�dS)Nz!HBBIIIH)
�struct�packrrrrrrr�writer�to_wirer )r#�file�compressr-�headerrrrr@�s

z
RRSIG.to_wirecCs�tjd|||d��}|d7}|d8}tjj|d||�|�\}}	||	7}||	8}|dk	rh|j|�}||||�j�}
||||d|d|d|d|d|d|d	||
�S)
Nz!HBBIIIH�r���r
�r)r=�unpackr(�name�	from_wirer.Zunwrap)r:r$r%ZwireZcurrentZrdlenr-rCrZcusedr rrrrK�s
zRRSIG.from_wirecCs|jj||�|_dS)N)rr+)r#r-r.rrrr+�szRRSIG.choose_relativity)NT)NT)NN)N)NT)rrrr�	__slots__r"r'r*�classmethodr1r@rKr+�
__classcell__rr)r&rr1s


	r)r9rr=rZ
dns.dnssecr(Z
dns.exceptionZ	dns.rdataZ
dns.rdatatyper3ZDNSExceptionrrrr,ZRdatarrrrr�<module>s
ANY/__pycache__/URI.cpython-36.pyc000064400000004323150401435240012470 0ustar003

�b�WR�@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecsZeZdZdZdddgZ�fdd�Zdd	d
�Zeddd��Zdd
d�Z	eddd��Z
�ZS)�URIz�URI record

    @ivar priority: the priority
    @type priority: int
    @ivar weight: the weight
    @type weight: int
    @ivar target: the target host
    @type target: dns.name.Name object
    @see: draft-faltstrom-uri-13�priority�weight�targetcsVtt|�j||�||_||_t|�dkr6tjjd��t	|t
�rL|j�|_n||_dS)N�zURI target cannot be empty)
�superr�__init__rr�len�dns�	exception�SyntaxError�
isinstancer�encoder)�self�rdclass�rdtyperrr)�	__class__��/usr/lib/python3.6/URI.pyr	's
zURI.__init__NTcKsd|j|j|jj�fS)Nz
%d %d "%s")rrr�decode)r�origin�
relativize�kwrrr�to_text2s
zURI.to_textc	CsR|j�}|j�}|j�j�}|j�p*|j�s8tjjd��|j�||||||j	�S)NzURI target must be a string)
Z
get_uint16�getZunescapeZis_quoted_stringZ
is_identifierrrr
Zget_eol�value)	�clsrr�tokrrrrrrrr�	from_text6sz
URI.from_textcCs,tjd|j|j�}|j|�|j|j�dS)Nz!HH)�struct�packrr�writer)r�file�compressrZtwo_intsrrr�to_wire@s
zURI.to_wirec
Csh|dkrtjjd��tjd|||d��\}}|d7}|d8}||||�}	||7}||||||	�S)N�zURI RR is shorter than 5 octetsz!HH�)rrZ	FormErrorr �unpack)
rrrZwireZcurrentZrdlenrrrrrrr�	from_wireEsz
URI.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r	r�classmethodrr%r)�
__classcell__rr)rrrs


	
r)
r Z
dns.exceptionrZ	dns.rdataZdns.nameZdns._compatrZrdataZRdatarrrrr�<module>s
ANY/__pycache__/SOA.cpython-36.opt-1.pyc000064400000006340150401435240013413 0ustar003

�b�W��@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�NcsveZdZdZdddddddgZ�fd	d
�Zdd
d�Zeddd��Zddd�Z	ddd�Z
eddd��Zddd�Z�Z
S)�SOAa�SOA record

    @ivar mname: the SOA MNAME (master name) field
    @type mname: dns.name.Name object
    @ivar rname: the SOA RNAME (responsible name) field
    @type rname: dns.name.Name object
    @ivar serial: The zone's serial number
    @type serial: int
    @ivar refresh: The zone's refresh value (in seconds)
    @type refresh: int
    @ivar retry: The zone's retry value (in seconds)
    @type retry: int
    @ivar expire: The zone's expiration value (in seconds)
    @type expire: int
    @ivar minimum: The zone's negative caching time (in seconds, called
    "minimum" for historical reasons)
    @type minimum: int
    @see: RFC 1035�mname�rname�serial�refresh�retry�expire�minimumc

s@tt|�j||�||_||_||_||_||_||_|	|_	dS)N)
�superr�__init__rrrrrrr	)
�self�rdclass�rdtyperrrrrrr	)�	__class__��/usr/lib/python3.6/SOA.pyr/szSOA.__init__NTcKs<|jj||�}|jj||�}d|||j|j|j|j|jfS)Nz%s %s %d %d %d %d %d)r�choose_relativityrrrrrr	)r�origin�
relativize�kwrrrrr�to_text:s
zSOA.to_textc

Csp|j�}|j�}|j||�}|j||�}|j�}|j�}	|j�}
|j�}|j�}|j�|||||||	|
||�	S)N)Zget_namerZ
get_uint32Zget_ttlZget_eol)
�clsr
r�tokrrrrrrrrr	rrr�	from_textAsz
SOA.from_textcCsL|jj|||�|jj|||�tjd|j|j|j|j|j	�}|j
|�dS)Nz!IIIII)r�to_wirer�struct�packrrrrr	�write)r�file�compressr�	five_intsrrrrPs
zSOA.to_wirecCs6|jj|�|jj|�tjd|j|j|j|j|j	�S)Nz!IIIII)
r�
to_digestablerrrrrrrr	)rrrrrr!WszSOA.to_digestablecCs�tjj|d||�|�\}}||7}||8}tjj|d||�|�\}	}||7}||8}|dkrltjj�tjd||||��}
|dk	r�|j|�}|	j|�}	|||||	|
d|
d|
d|
d|
d�	S)N�z!IIIIIr����)�dns�name�	from_wireZ	exceptionZ	FormErrorr�unpackr)rr
rZwireZcurrentZrdlenrrZcusedrr rrrr)]s 


z
SOA.from_wirecCs$|jj||�|_|jj||�|_dS)N)rrr)rrrrrrrpszSOA.choose_relativity)NT)NT)NN)N)N)NT)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr!r)r�
__classcell__rr)rrrs


r)rZ
dns.exceptionr'Z	dns.rdataZdns.nameZrdataZRdatarrrrr�<module>sANY/__pycache__/HIP.cpython-36.pyc000064400000006234150401435240012454 0ustar003

�b�W0�@sHddlZddlZddlZddlZddlZddlZGdd�dejj�Z	dS)�NcsfeZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
ddd�Z�ZS)�HIPa=HIP record

    @ivar hit: the host identity tag
    @type hit: string
    @ivar algorithm: the public key cryptographic algorithm
    @type algorithm: int
    @ivar key: the public key
    @type key: string
    @ivar servers: the rendezvous servers
    @type servers: list of dns.name.Name objects
    @see: RFC 5205�hit�	algorithm�key�serverscs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__��/usr/lib/python3.6/HIP.pyr)s
zHIP.__init__NTc	Ks�tj|j�j�}tj|j�jdd�j�}d}g}x |jD]}|j	|j
||��q8Wt|�dkrz|ddjdd�|D��7}d|j
|||fS)	N�
��r� css|]}|j�VqdS)N)Z
to_unicode)�.0�xr
r
r�	<genexpr>8szHIP.to_text.<locals>.<genexpr>z
%u %s %s%s)�binasciiZhexlifyr�decode�base64Z	b64encoder�replacer�append�choose_relativity�len�joinr)	r	�origin�
relativize�kwrr�textr�serverr
r
r�to_text0szHIP.to_textcCs�|j�}tj|j�j��}t|�dkr2tjjd��t	j
|j�j��}g}	x<|j�}
|
j�r\Ptj
j|
j|�}|j||�|	j|�qJW|||||||	�S)N�zHIT too long)Z	get_uint8rZ	unhexlifyZ
get_string�encoder�dnsZ	exception�SyntaxErrorrZ	b64decode�getZ
is_eol_or_eof�name�	from_text�valuerr)�clsr
r�tokrrrrrr�tokenr"r
r
rr*;sz
HIP.from_textcCsft|j�}t|j�}|jtjd||j|��|j|j�|j|j�x|jD]}|j|d|�qLWdS)Nz!BBH)	rrr�write�struct�packrr�to_wire)r	�file�compressr�lh�lkr"r
r
rr2Ls

zHIP.to_wirecCs�tjd|||d��\}}}	|d7}|d8}||||�j�}
||7}||8}||||	�j�}||	7}||	8}g}xV|dkr�tjj|d||�|�\}
}||7}||8}|dk	r�|
j|�}
|j|
�q|W||||
|||�S)Nz!BBH�r)r0�unpackZunwrapr&r)�	from_wirerr)r,r
rZwireZcurrentZrdlenrr5rr6rrrr"Zcusedr
r
rr9Us(


z
HIP.from_wirecCs4g}x$|jD]}|j||�}|j|�qW||_dS)N)rrr)r	rrrr"r
r
rrls
zHIP.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr#�classmethodr*r2r9r�
__classcell__r
r
)rrrs

	r)
r0rrZ
dns.exceptionr&Z	dns.rdataZ
dns.rdatatypeZrdataZRdatarr
r
r
r�<module>sANY/__pycache__/NS.cpython-36.pyc000064400000000530150401435240012345 0ustar003

�b�Wi�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�NSz	NS recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/NS.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrr�<module>sANY/__pycache__/__init__.cpython-36.pyc000064400000000750150401435240013570 0ustar003

�b�W��@sJdZddddddddd	d
ddd
ddddddddddddddddddgZd S)!z'Class ANY (generic) rdata type classes.ZAFSDBZCDNSKEYZCDSZCERTZCNAMEZDLVZDNAMEZDNSKEYZDSZEUI48ZEUI64ZGPOSZHINFOZHIPZISDNZLOCZMXZNSZNSECZNSEC3Z
NSEC3PARAMZTLSAZPTRZRPZRRSIGZRTZSOAZSPFZSSHFPZTXTZX25N)�__doc__�__all__�rr�/usr/lib/python3.6/__init__.py�<module>s>ANY/__pycache__/__init__.cpython-36.opt-1.pyc000064400000000750150401435240014527 0ustar003

�b�W��@sJdZddddddddd	d
ddd
ddddddddddddddddddgZd S)!z'Class ANY (generic) rdata type classes.ZAFSDBZCDNSKEYZCDSZCERTZCNAMEZDLVZDNAMEZDNSKEYZDSZEUI48ZEUI64ZGPOSZHINFOZHIPZISDNZLOCZMXZNSZNSECZNSEC3Z
NSEC3PARAMZTLSAZPTRZRPZRRSIGZRTZSOAZSPFZSSHFPZTXTZX25N)�__doc__�__all__�rr�/usr/lib/python3.6/__init__.py�<module>s>ANY/__pycache__/NS.cpython-36.opt-1.pyc000064400000000530150401435240013304 0ustar003

�b�Wi�@s"ddlZGdd�dejjj�ZdS)�Nc@seZdZdZdS)�NSz	NS recordN)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/NS.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrr�<module>sANY/__pycache__/HIP.cpython-36.opt-1.pyc000064400000006234150401435240013413 0ustar003

�b�W0�@sHddlZddlZddlZddlZddlZddlZGdd�dejj�Z	dS)�NcsfeZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
ddd�Z�ZS)�HIPa=HIP record

    @ivar hit: the host identity tag
    @type hit: string
    @ivar algorithm: the public key cryptographic algorithm
    @type algorithm: int
    @ivar key: the public key
    @type key: string
    @ivar servers: the rendezvous servers
    @type servers: list of dns.name.Name objects
    @see: RFC 5205�hit�	algorithm�key�serverscs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__��/usr/lib/python3.6/HIP.pyr)s
zHIP.__init__NTc	Ks�tj|j�j�}tj|j�jdd�j�}d}g}x |jD]}|j	|j
||��q8Wt|�dkrz|ddjdd�|D��7}d|j
|||fS)	N�
��r� css|]}|j�VqdS)N)Z
to_unicode)�.0�xr
r
r�	<genexpr>8szHIP.to_text.<locals>.<genexpr>z
%u %s %s%s)�binasciiZhexlifyr�decode�base64Z	b64encoder�replacer�append�choose_relativity�len�joinr)	r	�origin�
relativize�kwrr�textr�serverr
r
r�to_text0szHIP.to_textcCs�|j�}tj|j�j��}t|�dkr2tjjd��t	j
|j�j��}g}	x<|j�}
|
j�r\Ptj
j|
j|�}|j||�|	j|�qJW|||||||	�S)N�zHIT too long)Z	get_uint8rZ	unhexlifyZ
get_string�encoder�dnsZ	exception�SyntaxErrorrZ	b64decode�getZ
is_eol_or_eof�name�	from_text�valuerr)�clsr
r�tokrrrrrr�tokenr"r
r
rr*;sz
HIP.from_textcCsft|j�}t|j�}|jtjd||j|��|j|j�|j|j�x|jD]}|j|d|�qLWdS)Nz!BBH)	rrr�write�struct�packrr�to_wire)r	�file�compressr�lh�lkr"r
r
rr2Ls

zHIP.to_wirecCs�tjd|||d��\}}}	|d7}|d8}||||�j�}
||7}||8}||||	�j�}||	7}||	8}g}xV|dkr�tjj|d||�|�\}
}||7}||8}|dk	r�|
j|�}
|j|
�q|W||||
|||�S)Nz!BBH�r)r0�unpackZunwrapr&r)�	from_wirerr)r,r
rZwireZcurrentZrdlenrr5rr6rrrr"Zcusedr
r
rr9Us(


z
HIP.from_wirecCs4g}x$|jD]}|j||�}|j|�qW||_dS)N)rrr)r	rrrr"r
r
rrls
zHIP.choose_relativity)NT)NT)NN)N)NT)
�__name__�
__module__�__qualname__�__doc__�	__slots__rr#�classmethodr*r2r9r�
__classcell__r
r
)rrrs

	r)
r0rrZ
dns.exceptionr&Z	dns.rdataZ
dns.rdatatypeZrdataZRdatarr
r
r
r�<module>sANY/__pycache__/TLSA.cpython-36.pyc000064400000004336150401435240012600 0ustar003

�b�W��@s8ddlZddlZddlZddlZGdd�dejj�ZdS)�Ncs\eZdZdZddddgZ�fdd�Zdd
d�Zeddd
��Zddd�Z	eddd��Z
�ZS)�TLSAa*TLSA record

    @ivar usage: The certificate usage
    @type usage: int
    @ivar selector: The selector field
    @type selector: int
    @ivar mtype: The 'matching type' field
    @type mtype: int
    @ivar cert: The 'Certificate Association Data' field
    @type cert: string
    @see: RFC 6698�usage�selector�mtype�certcs.tt|�j||�||_||_||_||_dS)N)�superr�__init__rrrr)�self�rdclass�rdtyperrrr)�	__class__��/usr/lib/python3.6/TLSA.pyr's
z
TLSA.__init__NTcKs$d|j|j|jtjj|jdd�fS)Nz%d %d %d %s�)Z	chunksize)rrr�dns�rdataZ_hexifyr)r	�origin�
relativize�kwr
r
r�to_text/s

zTLSA.to_textcCs~|j�}|j�}|j�}g}	x:|j�j�}
|
j�r4P|
j�sDtjj�|	j|
j	j
��qWdj|	�}tj
|�}|||||||�S)N�)Z	get_uint8�getZunescapeZ
is_eol_or_eofZ
is_identifierrZ	exception�SyntaxError�append�value�encode�join�binasciiZ	unhexlify)�clsr
r�tokrrrrrZcert_chunks�trr
r
r�	from_text6s

zTLSA.from_textcCs0tjd|j|j|j�}|j|�|j|j�dS)Nz!BBB)�struct�packrrr�writer)r	�file�compressr�headerr
r
r�to_wireGs
zTLSA.to_wirec	CsZtjd|||d��}|d7}|d8}||||�j�}||||d|d|d|�S)Nz!BBB�r��)r"�unpackZunwrap)	rr
rZwireZcurrentZrdlenrr'rr
r
r�	from_wireLs
zTLSA.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodr!r(r-�
__classcell__r
r
)rrrs

r)r"rZ	dns.rdatarZ
dns.rdatatyperZRdatarr
r
r
r�<module>sANY/__pycache__/X25.cpython-36.opt-1.pyc000064400000003247150401435240013352 0ustar003

�b�WG�@sDddlZddlZddlZddlZddlmZGdd�dejj�Z	dS)�N)�	text_typecsVeZdZdZdgZ�fdd�Zddd�Zedd	d
��Zddd�Z	edd
d��Z
�ZS)�X25z\X25 record

    @ivar address: the PSDN address
    @type address: string
    @see: RFC 1183�addresscs2tt|�j||�t|t�r(|j�|_n||_dS)N)�superr�__init__�
isinstancer�encoder)�self�rdclass�rdtyper)�	__class__��/usr/lib/python3.6/X25.pyr"s
zX25.__init__NTcKsdtjj|j�S)Nz"%s")�dns�rdataZ	_escapifyr)r	�origin�
relativize�kwr
r
r�to_text)szX25.to_textcCs|j�}|j�||||�S)N)Z
get_stringZget_eol)�clsr
r�tokrrrr
r
r�	from_text,sz
X25.from_textcCs,t|j�}|jtjd|��|j|j�dS)Nz!B)�lenr�write�struct�pack)r	�file�compressr�lr
r
r�to_wire2s
zX25.to_wirec	CsH||}|d7}|d8}||kr(tjj�||||�j�}||||�S)N�)rZ	exceptionZ	FormErrorZunwrap)	rr
rZwireZcurrentZrdlenrrrr
r
r�	from_wire8sz
X25.from_wire)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrr!�
__classcell__r
r
)rrrs

r)
rZ
dns.exceptionrZ	dns.rdataZ
dns.tokenizerZdns._compatrrZRdatarr
r
r
r�<module>s
ANY/__pycache__/LOC.cpython-36.opt-1.pyc000064400000020153150401435240013404 0ustar003

�b�W�/�@s�ddlmZddlZddlZddlZddlmZmZm	Z	e
dd�edd�D��ZdZ
dZd	Zd
d�Zdd
�Zdd�Zdd�Zdd�ZGdd�dejj�ZdS)�)�divisionN)�long�xrange�round_py2_compatccs|]}td|�VqdS)�
N)r)�.0�i�r	�/usr/lib/python3.6/LOC.py�	<genexpr>sr�gY@g��.Ag@�@cCsh|dkrdSd}x2ttt��D]"}|t|td�kr|d}PqW|dksT|dkrdtjjd|��|S)Nr�z%s value out of bounds)r�len�_powsr�dns�	exception�SyntaxError)�what�descZexprr	r	r
�_exponent_of!srcCs�|dkrd}|d9}nd}t|d�}t|d�}||d8}t|d�}||d8}t|d�}|t|d�8}t|�}|||||fS)Nrr
i��6i`�i����r)r�int)rZsignZdegreesZminutes�secondsr	r	r
�_float_to_tuple.s
rcCsXt|d�}|t|d�d7}|t|d�d7}|t|d�d7}t|d�|S)	Nrr
gN@�g �@�g@wKA�)�float)r�valuer	r	r
�_tuple_to_float?s
rcCs4t|�}t||�d@}|td|�d@}|d|S)N�r�)rr�pow)rr�exponent�baser	r	r
�_encode_sizeGsr%cCsV|d@}|dkr tjjd|��|d@d?}|dkrDtjjd|��t|�td|�S)Nr �	zbad %s exponent��rzbad %s baser)rrrrr")rrr#r$r	r	r
�_decode_sizeNsr(cs�eZdZdZddddddgZeeef�fdd	�	Zddd
�Z	e
d dd��Zd!dd�Ze
d"dd��Z
dd�Zdd�Zeeedd�Zdd�Zdd�Zeeedd�Z�ZS)#�LOCa�LOC record

    @ivar latitude: latitude
    @type latitude: (int, int, int, int, sign) tuple specifying the degrees, minutes,
    seconds, milliseconds, and sign of the coordinate.
    @ivar longitude: longitude
    @type longitude: (int, int, int, int, sign) tuple specifying the degrees,
    minutes, seconds, milliseconds, and sign of the coordinate.
    @ivar altitude: altitude
    @type altitude: float
    @ivar size: size of the sphere
    @type size: float
    @ivar horizontal_precision: horizontal precision
    @type horizontal_precision: float
    @ivar vertical_precision: vertical precision
    @type vertical_precision: float
    @see: RFC 1876�latitude�	longitude�altitude�size�horizontal_precision�vertical_precisionc		s�tt|�j||�t|t�s&t|t�r.t|�}t|t�r@t|�}||_t|t�sZt|t�rbt|�}t|t�rtt|�}||_	t|�|_
t|�|_t|�|_t|�|_
dS)a�Initialize a LOC record instance.

        The parameters I{latitude} and I{longitude} may be either a 4-tuple
        of integers specifying (degrees, minutes, seconds, milliseconds),
        or they may be floating point values specifying the number of
        degrees. The other parameters are floats. Size, horizontal precision,
        and vertical precision are specified in centimeters.N)�superr)�__init__�
isinstancerrrrr*r+r,r-r.r/)	�self�rdclass�rdtyper*r+r,r-�hprec�vprec)�	__class__r	r
r1os




zLOC.__init__NTc
Ks�|jddkrd}nd}|jddkr,d}nd}d|jd|jd|jd	|jd
||jd|jd|jd	|jd
||jdf}|jtks�|jtks�|jtkr�|d|jd|jd|jdf7}|S)
Nrr�N�S�E�Wz(%d %d %d.%03d %s %d %d %d.%03d %s %0.2fmr
rrgY@z %0.2fm %0.2fm %0.2fm)	r*r+r,r-�
_default_sizer.�_default_hprecr/�_default_vprec)r3�origin�
relativize�kwZlat_hemisphereZlong_hemisphere�textr	r	r
�to_text�s&



zLOC.to_textc	Cs�dddddg}dddddg}t}t}	t}
|j�|d<|j�}|j��r0t|�|d<|j�}d|k�r|jd�\}}
|j�s�tj	j
d��t|�|d<|ddkr�tj	j
d��t|
�}|dks�|dks�|
j�r�tj	j
d	��|dkr�d
}n|dkr�d}nd}|t|
�|d<|j�}n|j��r0t|�|d<|j�}|dk�rDd|d
<n|dk�rZtj	j
d��|j�|d<|j�}|j��rpt|�|d<|j�}d|k�rR|jd�\}}
|j��s�tj	j
d��t|�|d<|ddk�r�tj	j
d��t|
�}|dk�s|dk�s|
j��rtj	j
d��|dk�r$d
}n|dk�r4d}nd}|t|
�|d<|j�}n|j��rpt|�|d<|j�}|dk�r�d|d
<n|dk�r�tj	j
d��|j�}|ddk�r�|dd�}t|�d}|j
�j�}|j��s�|j}|ddk�r�|dd�}t|�d}|j
�j�}|j��s�|j}|ddk�r@|dd�}t|�d}	|j
�j�}|j��s�|j}|d dk�r�|dd!�}t|�d}
|j�||||||||	|
�S)"Nrr
�.zbad latitude seconds valuer�<zlatitude seconds >= 60rzbad latitude milliseconds value�drr:rr9zbad latitude hemisphere valuezbad longitude seconds valuezlongitude seconds >= 60z bad longitude milliseconds valuer<r;zbad longitude hemisphere value�mgY@rrrrrrrrrr)r=r>r?Zget_intZ
get_string�isdigitr�splitrrrrr�getZunescapeZ
is_eol_or_eofrZget_eol)�clsr4r5�tokr@rAr*r+r-r6r7�tr�milliseconds�lrHr,�tokenrr	r	r
�	from_text�s�









 









z
LOC.from_textc	Cs�|jdd|jdd|jdd|jd|jd}td	�|}|jdd|jdd|jdd|jd|jd}td	�|}t|j�td
�}t|jd�}t|jd�}	t|jd
�}
tj	dd||	|
|||�}|j
|�dS)Nri��6r
i`�ri�rrli���r-zhorizontal precisionzvertical precisionz!BBBBIII)r*rr+r,r%r-r.r/�struct�pack�write)r3�file�compressr@rOr*r+r,r-r6r7�wirer	r	r
�to_wires((zLOC.to_wirec	Cstjd||||��\}}}	}
}}}
|td�krHt|td��d}nd
ttd�|�d}|dksp|dkr|tjjd��|td�kr�t|td��d}ndttd�|�d}|dks�|dkr�tjjd��t|
�d	}
t|d
�}t|	d�}	t|
d�}
||||||
||	|
�S)Nz!BBBBIIIli��6r
g�V@zbad latitudeg�f@z
bad longitudeg�cAr-zhorizontal precisionzvertical precisionrg�V�rg�f�)rS�unpackrrrrZ	FormErrorr()rLr4r5rXZcurrentZrdlenr@�versionr-r6r7r*r+r,r	r	r
�	from_wires"&


z
LOC.from_wirecCs
t|j�S)N)rr*)r3r	r	r
�_get_float_latitude5szLOC._get_float_latitudecCst|�|_dS)N)rr*)r3rr	r	r
�_set_float_latitude8szLOC._set_float_latitudez"latitude as a floating point value)�doccCs
t|j�S)N)rr+)r3r	r	r
�_get_float_longitude>szLOC._get_float_longitudecCst|�|_dS)N)rr+)r3rr	r	r
�_set_float_longitudeAszLOC._set_float_longitudez#longitude as a floating point value)NT)NT)NN)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r=r>r?r1rD�classmethodrRrYr\r]r^�propertyZfloat_latituder`raZfloat_longitude�
__classcell__r	r	)r8r
r)Xs&
e
r))Z
__future__rrSZ
dns.exceptionrZ	dns.rdataZdns._compatrrr�tuple�rangerr=r>r?rrrr%r(ZrdataZRdatar)r	r	r	r
�<module>s

ANY/__pycache__/RP.cpython-36.opt-1.pyc000064400000004377150401435240013322 0ustar003

�b�W��@s0ddlZddlZddlZGdd�dejj�ZdS)�NcsleZdZdZddgZ�fdd�Zddd	�Zedd
d��Zddd
�Z	ddd�Z
eddd��Zddd�Z�Z
S)�RPaRP record

    @ivar mbox: The responsible person's mailbox
    @type mbox: dns.name.Name object
    @ivar txt: The owner name of a node with TXT records, or the root name
    if no TXT records are associated with this RP.
    @type txt: dns.name.Name object
    @see: RFC 1183�mbox�txtcs"tt|�j||�||_||_dS)N)�superr�__init__rr)�self�rdclass�rdtyperr)�	__class__��/usr/lib/python3.6/RP.pyr"szRP.__init__NTcKs0|jj||�}|jj||�}dt|�t|�fS)Nz%s %s)r�choose_relativityr�str)r�origin�
relativize�kwrrrrr�to_text'sz
RP.to_textcCs>|j�}|j�}|j||�}|j||�}|j�|||||�S)N)Zget_namer
Zget_eol)�clsrr	�tokrrrrrrr�	from_text,szRP.from_textcCs$|jj|d|�|jj|d|�dS)N)r�to_wirer)r�file�compressrrrrr5sz
RP.to_wirecCs|jj|�|jj|�S)N)r�
to_digestabler)rrrrrr9s
zRP.to_digestablec
Cs�tjj|d||�|�\}}||7}||8}|dkr>tjj�tjj|d||�|�\}	}||krltjj�|dk	r�|j|�}|	j|�}	|||||	�S)Nr)�dns�name�	from_wireZ	exceptionZ	FormErrorr)
rrr	ZwireZcurrentZrdlenrrZcusedrrrrr=s



zRP.from_wirecCs$|jj||�|_|jj||�|_dS)N)rr
r)rrrrrrr
NszRP.choose_relativity)NT)NT)NN)N)N)NT)�__name__�
__module__�__qualname__�__doc__�	__slots__rr�classmethodrrrrr
�
__classcell__rr)r
rrs	


r)Z
dns.exceptionrZ	dns.rdataZdns.nameZrdataZRdatarrrrr�<module>sANY/CAA.py000064400000005076150401435240006137 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.tokenizer


class CAA(dns.rdata.Rdata):

    """CAA (Certification Authority Authorization) record

    @ivar flags: the flags
    @type flags: int
    @ivar tag: the tag
    @type tag: string
    @ivar value: the value
    @type value: string
    @see: RFC 6844"""

    __slots__ = ['flags', 'tag', 'value']

    def __init__(self, rdclass, rdtype, flags, tag, value):
        super(CAA, self).__init__(rdclass, rdtype)
        self.flags = flags
        self.tag = tag
        self.value = value

    def to_text(self, origin=None, relativize=True, **kw):
        return '%u %s "%s"' % (self.flags,
                               dns.rdata._escapify(self.tag),
                               dns.rdata._escapify(self.value))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        flags = tok.get_uint8()
        tag = tok.get_string().encode()
        if len(tag) > 255:
            raise dns.exception.SyntaxError("tag too long")
        if not tag.isalnum():
            raise dns.exception.SyntaxError("tag is not alphanumeric")
        value = tok.get_string().encode()
        return cls(rdclass, rdtype, flags, tag, value)

    def to_wire(self, file, compress=None, origin=None):
        file.write(struct.pack('!B', self.flags))
        l = len(self.tag)
        assert l < 256
        file.write(struct.pack('!B', l))
        file.write(self.tag)
        file.write(self.value)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (flags, l) = struct.unpack('!BB', wire[current: current + 2])
        current += 2
        tag = wire[current: current + l]
        value = wire[current + l:current + rdlen - 2]
        return cls(rdclass, rdtype, flags, tag, value)
ANY/EUI48.py000064400000002144150401435240006342 0ustar00# Copyright (C) 2015 Red Hat, Inc.
# Author: Petr Spacek <pspacek@redhat.com>
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED 'AS IS' AND RED HAT DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.euibase


class EUI48(dns.rdtypes.euibase.EUIBase):

    """EUI48 record

    @ivar fingerprint: 48-bit Extended Unique Identifier (EUI-48)
    @type fingerprint: string
    @see: rfc7043.txt"""

    byte_len = 6  # 0123456789ab (in hex)
    text_len = byte_len * 3 - 1  # 01-23-45-67-89-ab
ANY/AFSDB.py000064400000003470150401435240006366 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.mxbase


class AFSDB(dns.rdtypes.mxbase.UncompressedDowncasingMX):

    """AFSDB record

    @ivar subtype: the subtype value
    @type subtype: int
    @ivar hostname: the hostname name
    @type hostname: dns.name.Name object"""

    # Use the property mechanism to make "subtype" an alias for the
    # "preference" attribute, and "hostname" an alias for the "exchange"
    # attribute.
    #
    # This lets us inherit the UncompressedMX implementation but lets
    # the caller use appropriate attribute names for the rdata type.
    #
    # We probably lose some performance vs. a cut-and-paste
    # implementation, but this way we don't copy code, and that's
    # good.

    def get_subtype(self):
        return self.preference

    def set_subtype(self, subtype):
        self.preference = subtype

    subtype = property(get_subtype, set_subtype)

    def get_hostname(self):
        return self.exchange

    def set_hostname(self, hostname):
        self.exchange = hostname

    hostname = property(get_hostname, set_hostname)
ANY/SOA.py000064400000010650150401435240006167 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.name


class SOA(dns.rdata.Rdata):

    """SOA record

    @ivar mname: the SOA MNAME (master name) field
    @type mname: dns.name.Name object
    @ivar rname: the SOA RNAME (responsible name) field
    @type rname: dns.name.Name object
    @ivar serial: The zone's serial number
    @type serial: int
    @ivar refresh: The zone's refresh value (in seconds)
    @type refresh: int
    @ivar retry: The zone's retry value (in seconds)
    @type retry: int
    @ivar expire: The zone's expiration value (in seconds)
    @type expire: int
    @ivar minimum: The zone's negative caching time (in seconds, called
    "minimum" for historical reasons)
    @type minimum: int
    @see: RFC 1035"""

    __slots__ = ['mname', 'rname', 'serial', 'refresh', 'retry', 'expire',
                 'minimum']

    def __init__(self, rdclass, rdtype, mname, rname, serial, refresh, retry,
                 expire, minimum):
        super(SOA, self).__init__(rdclass, rdtype)
        self.mname = mname
        self.rname = rname
        self.serial = serial
        self.refresh = refresh
        self.retry = retry
        self.expire = expire
        self.minimum = minimum

    def to_text(self, origin=None, relativize=True, **kw):
        mname = self.mname.choose_relativity(origin, relativize)
        rname = self.rname.choose_relativity(origin, relativize)
        return '%s %s %d %d %d %d %d' % (
            mname, rname, self.serial, self.refresh, self.retry,
            self.expire, self.minimum)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        mname = tok.get_name()
        rname = tok.get_name()
        mname = mname.choose_relativity(origin, relativize)
        rname = rname.choose_relativity(origin, relativize)
        serial = tok.get_uint32()
        refresh = tok.get_ttl()
        retry = tok.get_ttl()
        expire = tok.get_ttl()
        minimum = tok.get_ttl()
        tok.get_eol()
        return cls(rdclass, rdtype, mname, rname, serial, refresh, retry,
                   expire, minimum)

    def to_wire(self, file, compress=None, origin=None):
        self.mname.to_wire(file, compress, origin)
        self.rname.to_wire(file, compress, origin)
        five_ints = struct.pack('!IIIII', self.serial, self.refresh,
                                self.retry, self.expire, self.minimum)
        file.write(five_ints)

    def to_digestable(self, origin=None):
        return self.mname.to_digestable(origin) + \
            self.rname.to_digestable(origin) + \
            struct.pack('!IIIII', self.serial, self.refresh,
                        self.retry, self.expire, self.minimum)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (mname, cused) = dns.name.from_wire(wire[: current + rdlen], current)
        current += cused
        rdlen -= cused
        (rname, cused) = dns.name.from_wire(wire[: current + rdlen], current)
        current += cused
        rdlen -= cused
        if rdlen != 20:
            raise dns.exception.FormError
        five_ints = struct.unpack('!IIIII',
                                  wire[current: current + rdlen])
        if origin is not None:
            mname = mname.relativize(origin)
            rname = rname.relativize(origin)
        return cls(rdclass, rdtype, mname, rname,
                   five_ints[0], five_ints[1], five_ints[2], five_ints[3],
                   five_ints[4])

    def choose_relativity(self, origin=None, relativize=True):
        self.mname = self.mname.choose_relativity(origin, relativize)
        self.rname = self.rname.choose_relativity(origin, relativize)
ANY/NSEC3.py000064400000015641150401435240006365 0ustar00# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import base64
import binascii
import string
import struct

import dns.exception
import dns.rdata
import dns.rdatatype
from dns._compat import xrange, text_type

try:
    b32_hex_to_normal = string.maketrans('0123456789ABCDEFGHIJKLMNOPQRSTUV',
                                         'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567')
    b32_normal_to_hex = string.maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',
                                         '0123456789ABCDEFGHIJKLMNOPQRSTUV')
except AttributeError:
    b32_hex_to_normal = bytes.maketrans(b'0123456789ABCDEFGHIJKLMNOPQRSTUV',
                                        b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567')
    b32_normal_to_hex = bytes.maketrans(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',
                                        b'0123456789ABCDEFGHIJKLMNOPQRSTUV')

# hash algorithm constants
SHA1 = 1

# flag constants
OPTOUT = 1


class NSEC3(dns.rdata.Rdata):

    """NSEC3 record

    @ivar algorithm: the hash algorithm number
    @type algorithm: int
    @ivar flags: the flags
    @type flags: int
    @ivar iterations: the number of iterations
    @type iterations: int
    @ivar salt: the salt
    @type salt: string
    @ivar next: the next name hash
    @type next: string
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples"""

    __slots__ = ['algorithm', 'flags', 'iterations', 'salt', 'next', 'windows']

    def __init__(self, rdclass, rdtype, algorithm, flags, iterations, salt,
                 next, windows):
        super(NSEC3, self).__init__(rdclass, rdtype)
        self.algorithm = algorithm
        self.flags = flags
        self.iterations = iterations
        if isinstance(salt, text_type):
            self.salt = salt.encode()
        else:
            self.salt = salt
        self.next = next
        self.windows = windows

    def to_text(self, origin=None, relativize=True, **kw):
        next = base64.b32encode(self.next).translate(
            b32_normal_to_hex).lower().decode()
        if self.salt == b'':
            salt = '-'
        else:
            salt = binascii.hexlify(self.salt).decode()
        text = u''
        for (window, bitmap) in self.windows:
            bits = []
            for i in xrange(0, len(bitmap)):
                byte = bitmap[i]
                for j in xrange(0, 8):
                    if byte & (0x80 >> j):
                        bits.append(dns.rdatatype.to_text(window * 256 +
                                                          i * 8 + j))
            text += (u' ' + u' '.join(bits))
        return u'%u %u %u %s %s%s' % (self.algorithm, self.flags,
                                      self.iterations, salt, next, text)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        algorithm = tok.get_uint8()
        flags = tok.get_uint8()
        iterations = tok.get_uint16()
        salt = tok.get_string()
        if salt == u'-':
            salt = b''
        else:
            salt = binascii.unhexlify(salt.encode('ascii'))
        next = tok.get_string().encode(
            'ascii').upper().translate(b32_hex_to_normal)
        next = base64.b32decode(next)
        rdtypes = []
        while 1:
            token = tok.get().unescape()
            if token.is_eol_or_eof():
                break
            nrdtype = dns.rdatatype.from_text(token.value)
            if nrdtype == 0:
                raise dns.exception.SyntaxError("NSEC3 with bit 0")
            if nrdtype > 65535:
                raise dns.exception.SyntaxError("NSEC3 with bit > 65535")
            rdtypes.append(nrdtype)
        rdtypes.sort()
        window = 0
        octets = 0
        prior_rdtype = 0
        bitmap = bytearray(b'\0' * 32)
        windows = []
        for nrdtype in rdtypes:
            if nrdtype == prior_rdtype:
                continue
            prior_rdtype = nrdtype
            new_window = nrdtype // 256
            if new_window != window:
                if octets != 0:
                    windows.append((window, ''.join(bitmap[0:octets])))
                bitmap = bytearray(b'\0' * 32)
                window = new_window
            offset = nrdtype % 256
            byte = offset // 8
            bit = offset % 8
            octets = byte + 1
            bitmap[byte] = bitmap[byte] | (0x80 >> bit)
        if octets != 0:
            windows.append((window, bitmap[0:octets]))
        return cls(rdclass, rdtype, algorithm, flags, iterations, salt, next,
                   windows)

    def to_wire(self, file, compress=None, origin=None):
        l = len(self.salt)
        file.write(struct.pack("!BBHB", self.algorithm, self.flags,
                               self.iterations, l))
        file.write(self.salt)
        l = len(self.next)
        file.write(struct.pack("!B", l))
        file.write(self.next)
        for (window, bitmap) in self.windows:
            file.write(struct.pack("!BB", window, len(bitmap)))
            file.write(bitmap)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (algorithm, flags, iterations, slen) = \
            struct.unpack('!BBHB', wire[current: current + 5])

        current += 5
        rdlen -= 5
        salt = wire[current: current + slen].unwrap()
        current += slen
        rdlen -= slen
        nlen = wire[current]
        current += 1
        rdlen -= 1
        next = wire[current: current + nlen].unwrap()
        current += nlen
        rdlen -= nlen
        windows = []
        while rdlen > 0:
            if rdlen < 3:
                raise dns.exception.FormError("NSEC3 too short")
            window = wire[current]
            octets = wire[current + 1]
            if octets == 0 or octets > 32:
                raise dns.exception.FormError("bad NSEC3 octets")
            current += 2
            rdlen -= 2
            if rdlen < octets:
                raise dns.exception.FormError("bad NSEC3 bitmap length")
            bitmap = bytearray(wire[current: current + octets].unwrap())
            current += octets
            rdlen -= octets
            windows.append((window, bitmap))
        return cls(rdclass, rdtype, algorithm, flags, iterations, salt, next,
                   windows)
ANY/RT.py000064400000001573150401435240006076 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.mxbase


class RT(dns.rdtypes.mxbase.UncompressedDowncasingMX):

    """RT record"""
ANY/DNAME.py000064400000001723150401435240006372 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.nsbase


class DNAME(dns.rdtypes.nsbase.UncompressedNS):

    """DNAME record"""

    def to_digestable(self, origin=None):
        return self.target.to_digestable(origin)
ANY/LOC.py000064400000027750150401435240006173 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

from __future__ import division

import struct

import dns.exception
import dns.rdata
from dns._compat import long, xrange, round_py2_compat


_pows = tuple(long(10**i) for i in range(0, 11))

# default values are in centimeters
_default_size = 100.0
_default_hprec = 1000000.0
_default_vprec = 1000.0


def _exponent_of(what, desc):
    if what == 0:
        return 0
    exp = None
    for i in xrange(len(_pows)):
        if what // _pows[i] == long(0):
            exp = i - 1
            break
    if exp is None or exp < 0:
        raise dns.exception.SyntaxError("%s value out of bounds" % desc)
    return exp


def _float_to_tuple(what):
    if what < 0:
        sign = -1
        what *= -1
    else:
        sign = 1
    what = round_py2_compat(what * 3600000)
    degrees = int(what // 3600000)
    what -= degrees * 3600000
    minutes = int(what // 60000)
    what -= minutes * 60000
    seconds = int(what // 1000)
    what -= int(seconds * 1000)
    what = int(what)
    return (degrees, minutes, seconds, what, sign)


def _tuple_to_float(what):
    value = float(what[0])
    value += float(what[1]) / 60.0
    value += float(what[2]) / 3600.0
    value += float(what[3]) / 3600000.0
    return float(what[4]) * value


def _encode_size(what, desc):
    what = long(what)
    exponent = _exponent_of(what, desc) & 0xF
    base = what // pow(10, exponent) & 0xF
    return base * 16 + exponent


def _decode_size(what, desc):
    exponent = what & 0x0F
    if exponent > 9:
        raise dns.exception.SyntaxError("bad %s exponent" % desc)
    base = (what & 0xF0) >> 4
    if base > 9:
        raise dns.exception.SyntaxError("bad %s base" % desc)
    return long(base) * pow(10, exponent)


class LOC(dns.rdata.Rdata):

    """LOC record

    @ivar latitude: latitude
    @type latitude: (int, int, int, int, sign) tuple specifying the degrees, minutes,
    seconds, milliseconds, and sign of the coordinate.
    @ivar longitude: longitude
    @type longitude: (int, int, int, int, sign) tuple specifying the degrees,
    minutes, seconds, milliseconds, and sign of the coordinate.
    @ivar altitude: altitude
    @type altitude: float
    @ivar size: size of the sphere
    @type size: float
    @ivar horizontal_precision: horizontal precision
    @type horizontal_precision: float
    @ivar vertical_precision: vertical precision
    @type vertical_precision: float
    @see: RFC 1876"""

    __slots__ = ['latitude', 'longitude', 'altitude', 'size',
                 'horizontal_precision', 'vertical_precision']

    def __init__(self, rdclass, rdtype, latitude, longitude, altitude,
                 size=_default_size, hprec=_default_hprec,
                 vprec=_default_vprec):
        """Initialize a LOC record instance.

        The parameters I{latitude} and I{longitude} may be either a 4-tuple
        of integers specifying (degrees, minutes, seconds, milliseconds),
        or they may be floating point values specifying the number of
        degrees. The other parameters are floats. Size, horizontal precision,
        and vertical precision are specified in centimeters."""

        super(LOC, self).__init__(rdclass, rdtype)
        if isinstance(latitude, int) or isinstance(latitude, long):
            latitude = float(latitude)
        if isinstance(latitude, float):
            latitude = _float_to_tuple(latitude)
        self.latitude = latitude
        if isinstance(longitude, int) or isinstance(longitude, long):
            longitude = float(longitude)
        if isinstance(longitude, float):
            longitude = _float_to_tuple(longitude)
        self.longitude = longitude
        self.altitude = float(altitude)
        self.size = float(size)
        self.horizontal_precision = float(hprec)
        self.vertical_precision = float(vprec)

    def to_text(self, origin=None, relativize=True, **kw):
        if self.latitude[4] > 0:
            lat_hemisphere = 'N'
        else:
            lat_hemisphere = 'S'
        if self.longitude[4] > 0:
            long_hemisphere = 'E'
        else:
            long_hemisphere = 'W'
        text = "%d %d %d.%03d %s %d %d %d.%03d %s %0.2fm" % (
            self.latitude[0], self.latitude[1],
            self.latitude[2], self.latitude[3], lat_hemisphere,
            self.longitude[0], self.longitude[1], self.longitude[2],
            self.longitude[3], long_hemisphere,
            self.altitude / 100.0
        )

        # do not print default values
        if self.size != _default_size or \
            self.horizontal_precision != _default_hprec or \
                self.vertical_precision != _default_vprec:
            text += " %0.2fm %0.2fm %0.2fm" % (
                self.size / 100.0, self.horizontal_precision / 100.0,
                self.vertical_precision / 100.0
            )
        return text

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        latitude = [0, 0, 0, 0, 1]
        longitude = [0, 0, 0, 0, 1]
        size = _default_size
        hprec = _default_hprec
        vprec = _default_vprec

        latitude[0] = tok.get_int()
        t = tok.get_string()
        if t.isdigit():
            latitude[1] = int(t)
            t = tok.get_string()
            if '.' in t:
                (seconds, milliseconds) = t.split('.')
                if not seconds.isdigit():
                    raise dns.exception.SyntaxError(
                        'bad latitude seconds value')
                latitude[2] = int(seconds)
                if latitude[2] >= 60:
                    raise dns.exception.SyntaxError('latitude seconds >= 60')
                l = len(milliseconds)
                if l == 0 or l > 3 or not milliseconds.isdigit():
                    raise dns.exception.SyntaxError(
                        'bad latitude milliseconds value')
                if l == 1:
                    m = 100
                elif l == 2:
                    m = 10
                else:
                    m = 1
                latitude[3] = m * int(milliseconds)
                t = tok.get_string()
            elif t.isdigit():
                latitude[2] = int(t)
                t = tok.get_string()
        if t == 'S':
            latitude[4] = -1
        elif t != 'N':
            raise dns.exception.SyntaxError('bad latitude hemisphere value')

        longitude[0] = tok.get_int()
        t = tok.get_string()
        if t.isdigit():
            longitude[1] = int(t)
            t = tok.get_string()
            if '.' in t:
                (seconds, milliseconds) = t.split('.')
                if not seconds.isdigit():
                    raise dns.exception.SyntaxError(
                        'bad longitude seconds value')
                longitude[2] = int(seconds)
                if longitude[2] >= 60:
                    raise dns.exception.SyntaxError('longitude seconds >= 60')
                l = len(milliseconds)
                if l == 0 or l > 3 or not milliseconds.isdigit():
                    raise dns.exception.SyntaxError(
                        'bad longitude milliseconds value')
                if l == 1:
                    m = 100
                elif l == 2:
                    m = 10
                else:
                    m = 1
                longitude[3] = m * int(milliseconds)
                t = tok.get_string()
            elif t.isdigit():
                longitude[2] = int(t)
                t = tok.get_string()
        if t == 'W':
            longitude[4] = -1
        elif t != 'E':
            raise dns.exception.SyntaxError('bad longitude hemisphere value')

        t = tok.get_string()
        if t[-1] == 'm':
            t = t[0: -1]
        altitude = float(t) * 100.0        # m -> cm

        token = tok.get().unescape()
        if not token.is_eol_or_eof():
            value = token.value
            if value[-1] == 'm':
                value = value[0: -1]
            size = float(value) * 100.0        # m -> cm
            token = tok.get().unescape()
            if not token.is_eol_or_eof():
                value = token.value
                if value[-1] == 'm':
                    value = value[0: -1]
                hprec = float(value) * 100.0        # m -> cm
                token = tok.get().unescape()
                if not token.is_eol_or_eof():
                    value = token.value
                    if value[-1] == 'm':
                        value = value[0: -1]
                    vprec = float(value) * 100.0        # m -> cm
                    tok.get_eol()

        return cls(rdclass, rdtype, latitude, longitude, altitude,
                   size, hprec, vprec)

    def to_wire(self, file, compress=None, origin=None):
        milliseconds = (self.latitude[0] * 3600000 +
                        self.latitude[1] * 60000 +
                        self.latitude[2] * 1000 +
                        self.latitude[3]) * self.latitude[4]
        latitude = long(0x80000000) + milliseconds
        milliseconds = (self.longitude[0] * 3600000 +
                        self.longitude[1] * 60000 +
                        self.longitude[2] * 1000 +
                        self.longitude[3]) * self.longitude[4]
        longitude = long(0x80000000) + milliseconds
        altitude = long(self.altitude) + long(10000000)
        size = _encode_size(self.size, "size")
        hprec = _encode_size(self.horizontal_precision, "horizontal precision")
        vprec = _encode_size(self.vertical_precision, "vertical precision")
        wire = struct.pack("!BBBBIII", 0, size, hprec, vprec, latitude,
                           longitude, altitude)
        file.write(wire)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (version, size, hprec, vprec, latitude, longitude, altitude) = \
            struct.unpack("!BBBBIII", wire[current: current + rdlen])
        if latitude > long(0x80000000):
            latitude = float(latitude - long(0x80000000)) / 3600000
        else:
            latitude = -1 * float(long(0x80000000) - latitude) / 3600000
        if latitude < -90.0 or latitude > 90.0:
            raise dns.exception.FormError("bad latitude")
        if longitude > long(0x80000000):
            longitude = float(longitude - long(0x80000000)) / 3600000
        else:
            longitude = -1 * float(long(0x80000000) - longitude) / 3600000
        if longitude < -180.0 or longitude > 180.0:
            raise dns.exception.FormError("bad longitude")
        altitude = float(altitude) - 10000000.0
        size = _decode_size(size, "size")
        hprec = _decode_size(hprec, "horizontal precision")
        vprec = _decode_size(vprec, "vertical precision")
        return cls(rdclass, rdtype, latitude, longitude, altitude,
                   size, hprec, vprec)

    def _get_float_latitude(self):
        return _tuple_to_float(self.latitude)

    def _set_float_latitude(self, value):
        self.latitude = _float_to_tuple(value)

    float_latitude = property(_get_float_latitude, _set_float_latitude,
                              doc="latitude as a floating point value")

    def _get_float_longitude(self):
        return _tuple_to_float(self.longitude)

    def _set_float_longitude(self, value):
        self.longitude = _float_to_tuple(value)

    float_longitude = property(_get_float_longitude, _set_float_longitude,
                               doc="longitude as a floating point value")
ANY/URI.py000064400000005522150401435240006206 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
# Copyright (C) 2015 Red Hat, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.name
from dns._compat import text_type


class URI(dns.rdata.Rdata):

    """URI record

    @ivar priority: the priority
    @type priority: int
    @ivar weight: the weight
    @type weight: int
    @ivar target: the target host
    @type target: dns.name.Name object
    @see: draft-faltstrom-uri-13"""

    __slots__ = ['priority', 'weight', 'target']

    def __init__(self, rdclass, rdtype, priority, weight, target):
        super(URI, self).__init__(rdclass, rdtype)
        self.priority = priority
        self.weight = weight
        if len(target) < 1:
            raise dns.exception.SyntaxError("URI target cannot be empty")
        if isinstance(target, text_type):
            self.target = target.encode()
        else:
            self.target = target

    def to_text(self, origin=None, relativize=True, **kw):
        return '%d %d "%s"' % (self.priority, self.weight,
                               self.target.decode())

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        priority = tok.get_uint16()
        weight = tok.get_uint16()
        target = tok.get().unescape()
        if not (target.is_quoted_string() or target.is_identifier()):
            raise dns.exception.SyntaxError("URI target must be a string")
        tok.get_eol()
        return cls(rdclass, rdtype, priority, weight, target.value)

    def to_wire(self, file, compress=None, origin=None):
        two_ints = struct.pack("!HH", self.priority, self.weight)
        file.write(two_ints)
        file.write(self.target)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        if rdlen < 5:
            raise dns.exception.FormError('URI RR is shorter than 5 octets')

        (priority, weight) = struct.unpack('!HH', wire[current: current + 4])
        current += 4
        rdlen -= 4
        target = wire[current: current + rdlen]
        current += rdlen

        return cls(rdclass, rdtype, priority, weight, target)
ANY/NSEC.py000064400000011122150401435240006270 0ustar00# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.rdatatype
import dns.name
from dns._compat import xrange


class NSEC(dns.rdata.Rdata):

    """NSEC record

    @ivar next: the next name
    @type next: dns.name.Name object
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples"""

    __slots__ = ['next', 'windows']

    def __init__(self, rdclass, rdtype, next, windows):
        super(NSEC, self).__init__(rdclass, rdtype)
        self.next = next
        self.windows = windows

    def to_text(self, origin=None, relativize=True, **kw):
        next = self.next.choose_relativity(origin, relativize)
        text = ''
        for (window, bitmap) in self.windows:
            bits = []
            for i in xrange(0, len(bitmap)):
                byte = bitmap[i]
                for j in xrange(0, 8):
                    if byte & (0x80 >> j):
                        bits.append(dns.rdatatype.to_text(window * 256 +
                                                          i * 8 + j))
            text += (' ' + ' '.join(bits))
        return '%s%s' % (next, text)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        next = tok.get_name()
        next = next.choose_relativity(origin, relativize)
        rdtypes = []
        while 1:
            token = tok.get().unescape()
            if token.is_eol_or_eof():
                break
            nrdtype = dns.rdatatype.from_text(token.value)
            if nrdtype == 0:
                raise dns.exception.SyntaxError("NSEC with bit 0")
            if nrdtype > 65535:
                raise dns.exception.SyntaxError("NSEC with bit > 65535")
            rdtypes.append(nrdtype)
        rdtypes.sort()
        window = 0
        octets = 0
        prior_rdtype = 0
        bitmap = bytearray(b'\0' * 32)
        windows = []
        for nrdtype in rdtypes:
            if nrdtype == prior_rdtype:
                continue
            prior_rdtype = nrdtype
            new_window = nrdtype // 256
            if new_window != window:
                windows.append((window, bitmap[0:octets]))
                bitmap = bytearray(b'\0' * 32)
                window = new_window
            offset = nrdtype % 256
            byte = offset // 8
            bit = offset % 8
            octets = byte + 1
            bitmap[byte] = bitmap[byte] | (0x80 >> bit)

        windows.append((window, bitmap[0:octets]))
        return cls(rdclass, rdtype, next, windows)

    def to_wire(self, file, compress=None, origin=None):
        self.next.to_wire(file, None, origin)
        for (window, bitmap) in self.windows:
            file.write(struct.pack('!BB', window, len(bitmap)))
            file.write(bitmap)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (next, cused) = dns.name.from_wire(wire[: current + rdlen], current)
        current += cused
        rdlen -= cused
        windows = []
        while rdlen > 0:
            if rdlen < 3:
                raise dns.exception.FormError("NSEC too short")
            window = wire[current]
            octets = wire[current + 1]
            if octets == 0 or octets > 32:
                raise dns.exception.FormError("bad NSEC octets")
            current += 2
            rdlen -= 2
            if rdlen < octets:
                raise dns.exception.FormError("bad NSEC bitmap length")
            bitmap = bytearray(wire[current: current + octets].unwrap())
            current += octets
            rdlen -= octets
            windows.append((window, bitmap))
        if origin is not None:
            next = next.relativize(origin)
        return cls(rdclass, rdtype, next, windows)

    def choose_relativity(self, origin=None, relativize=True):
        self.next = self.next.choose_relativity(origin, relativize)
ANY/CDS.py000064400000001553150401435240006160 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.dsbase


class CDS(dns.rdtypes.dsbase.DSBase):

    """CDS record"""
ANY/DLV.py000064400000001540150401435240006170 0ustar00# Copyright (C) 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.dsbase


class DLV(dns.rdtypes.dsbase.DSBase):

    """DLV record"""
ANY/CSYNC.py000064400000011044150401435240006422 0ustar00# Copyright (C) 2004-2007, 2009-2011, 2016 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.rdatatype
import dns.name
from dns._compat import xrange

class CSYNC(dns.rdata.Rdata):

    """CSYNC record

    @ivar serial: the SOA serial number
    @type serial: int
    @ivar flags: the CSYNC flags
    @type flags: int
    @ivar windows: the windowed bitmap list
    @type windows: list of (window number, string) tuples"""

    __slots__ = ['serial', 'flags', 'windows']

    def __init__(self, rdclass, rdtype, serial, flags, windows):
        super(CSYNC, self).__init__(rdclass, rdtype)
        self.serial = serial
        self.flags = flags
        self.windows = windows

    def to_text(self, origin=None, relativize=True, **kw):
        text = ''
        for (window, bitmap) in self.windows:
            bits = []
            for i in xrange(0, len(bitmap)):
                byte = bitmap[i]
                for j in xrange(0, 8):
                    if byte & (0x80 >> j):
                        bits.append(dns.rdatatype.to_text(window * 256 +
                                                          i * 8 + j))
            text += (' ' + ' '.join(bits))
        return '%d %d%s' % (self.serial, self.flags, text)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        serial = tok.get_uint32()
        flags = tok.get_uint16()
        rdtypes = []
        while 1:
            token = tok.get().unescape()
            if token.is_eol_or_eof():
                break
            nrdtype = dns.rdatatype.from_text(token.value)
            if nrdtype == 0:
                raise dns.exception.SyntaxError("CSYNC with bit 0")
            if nrdtype > 65535:
                raise dns.exception.SyntaxError("CSYNC with bit > 65535")
            rdtypes.append(nrdtype)
        rdtypes.sort()
        window = 0
        octets = 0
        prior_rdtype = 0
        bitmap = bytearray(b'\0' * 32)
        windows = []
        for nrdtype in rdtypes:
            if nrdtype == prior_rdtype:
                continue
            prior_rdtype = nrdtype
            new_window = nrdtype // 256
            if new_window != window:
                windows.append((window, bitmap[0:octets]))
                bitmap = bytearray(b'\0' * 32)
                window = new_window
            offset = nrdtype % 256
            byte = offset // 8
            bit = offset % 8
            octets = byte + 1
            bitmap[byte] = bitmap[byte] | (0x80 >> bit)

        windows.append((window, bitmap[0:octets]))
        return cls(rdclass, rdtype, serial, flags, windows)

    def to_wire(self, file, compress=None, origin=None):
        file.write(struct.pack('!IH', self.serial, self.flags))
        for (window, bitmap) in self.windows:
            file.write(struct.pack('!BB', window, len(bitmap)))
            file.write(bitmap)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        if rdlen < 6:
            raise dns.exception.FormError("CSYNC too short")
        (serial, flags) = struct.unpack("!IH", wire[current: current + 6])
        current += 6
        rdlen -= 6
        windows = []
        while rdlen > 0:
            if rdlen < 3:
                raise dns.exception.FormError("CSYNC too short")
            window = wire[current]
            octets = wire[current + 1]
            if octets == 0 or octets > 32:
                raise dns.exception.FormError("bad CSYNC octets")
            current += 2
            rdlen -= 2
            if rdlen < octets:
                raise dns.exception.FormError("bad CSYNC bitmap length")
            bitmap = bytearray(wire[current: current + octets].unwrap())
            current += octets
            rdlen -= octets
            windows.append((window, bitmap))
        return cls(rdclass, rdtype, serial, flags, windows)
ANY/NSEC3PARAM.py000064400000006032150401435240007140 0ustar00# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct
import binascii

import dns.exception
import dns.rdata
from dns._compat import text_type


class NSEC3PARAM(dns.rdata.Rdata):

    """NSEC3PARAM record

    @ivar algorithm: the hash algorithm number
    @type algorithm: int
    @ivar flags: the flags
    @type flags: int
    @ivar iterations: the number of iterations
    @type iterations: int
    @ivar salt: the salt
    @type salt: string"""

    __slots__ = ['algorithm', 'flags', 'iterations', 'salt']

    def __init__(self, rdclass, rdtype, algorithm, flags, iterations, salt):
        super(NSEC3PARAM, self).__init__(rdclass, rdtype)
        self.algorithm = algorithm
        self.flags = flags
        self.iterations = iterations
        if isinstance(salt, text_type):
            self.salt = salt.encode()
        else:
            self.salt = salt

    def to_text(self, origin=None, relativize=True, **kw):
        if self.salt == b'':
            salt = '-'
        else:
            salt = binascii.hexlify(self.salt).decode()
        return '%u %u %u %s' % (self.algorithm, self.flags, self.iterations,
                                salt)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        algorithm = tok.get_uint8()
        flags = tok.get_uint8()
        iterations = tok.get_uint16()
        salt = tok.get_string()
        if salt == '-':
            salt = ''
        else:
            salt = binascii.unhexlify(salt.encode())
        tok.get_eol()
        return cls(rdclass, rdtype, algorithm, flags, iterations, salt)

    def to_wire(self, file, compress=None, origin=None):
        l = len(self.salt)
        file.write(struct.pack("!BBHB", self.algorithm, self.flags,
                               self.iterations, l))
        file.write(self.salt)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (algorithm, flags, iterations, slen) = \
             struct.unpack('!BBHB',
                           wire[current: current + 5])
        current += 5
        rdlen -= 5
        salt = wire[current: current + slen].unwrap()
        current += slen
        rdlen -= slen
        if rdlen != 0:
            raise dns.exception.FormError
        return cls(rdclass, rdtype, algorithm, flags, iterations, salt)
ANY/TLSA.py000064400000005614150401435240006314 0ustar00# Copyright (C) 2005-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct
import binascii

import dns.rdata
import dns.rdatatype


class TLSA(dns.rdata.Rdata):

    """TLSA record

    @ivar usage: The certificate usage
    @type usage: int
    @ivar selector: The selector field
    @type selector: int
    @ivar mtype: The 'matching type' field
    @type mtype: int
    @ivar cert: The 'Certificate Association Data' field
    @type cert: string
    @see: RFC 6698"""

    __slots__ = ['usage', 'selector', 'mtype', 'cert']

    def __init__(self, rdclass, rdtype, usage, selector,
                 mtype, cert):
        super(TLSA, self).__init__(rdclass, rdtype)
        self.usage = usage
        self.selector = selector
        self.mtype = mtype
        self.cert = cert

    def to_text(self, origin=None, relativize=True, **kw):
        return '%d %d %d %s' % (self.usage,
                                self.selector,
                                self.mtype,
                                dns.rdata._hexify(self.cert,
                                                  chunksize=128))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        usage = tok.get_uint8()
        selector = tok.get_uint8()
        mtype = tok.get_uint8()
        cert_chunks = []
        while 1:
            t = tok.get().unescape()
            if t.is_eol_or_eof():
                break
            if not t.is_identifier():
                raise dns.exception.SyntaxError
            cert_chunks.append(t.value.encode())
        cert = b''.join(cert_chunks)
        cert = binascii.unhexlify(cert)
        return cls(rdclass, rdtype, usage, selector, mtype, cert)

    def to_wire(self, file, compress=None, origin=None):
        header = struct.pack("!BBB", self.usage, self.selector, self.mtype)
        file.write(header)
        file.write(self.cert)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        header = struct.unpack("!BBB", wire[current: current + 3])
        current += 3
        rdlen -= 3
        cert = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, header[0], header[1], header[2], cert)
ANY/AVC.py000064400000001666150401435240006165 0ustar00# Copyright (C) 2016 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.txtbase


class AVC(dns.rdtypes.txtbase.TXTBase):

    """AVC record

    @see: U{http://www.iana.org/assignments/dns-parameters/AVC/avc-completed-template}"""
ANY/HIP.py000064400000010060150401435240006160 0ustar00# Copyright (C) 2010, 2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct
import base64
import binascii

import dns.exception
import dns.rdata
import dns.rdatatype


class HIP(dns.rdata.Rdata):

    """HIP record

    @ivar hit: the host identity tag
    @type hit: string
    @ivar algorithm: the public key cryptographic algorithm
    @type algorithm: int
    @ivar key: the public key
    @type key: string
    @ivar servers: the rendezvous servers
    @type servers: list of dns.name.Name objects
    @see: RFC 5205"""

    __slots__ = ['hit', 'algorithm', 'key', 'servers']

    def __init__(self, rdclass, rdtype, hit, algorithm, key, servers):
        super(HIP, self).__init__(rdclass, rdtype)
        self.hit = hit
        self.algorithm = algorithm
        self.key = key
        self.servers = servers

    def to_text(self, origin=None, relativize=True, **kw):
        hit = binascii.hexlify(self.hit).decode()
        key = base64.b64encode(self.key).replace(b'\n', b'').decode()
        text = u''
        servers = []
        for server in self.servers:
            servers.append(server.choose_relativity(origin, relativize))
        if len(servers) > 0:
            text += (u' ' + u' '.join((x.to_unicode() for x in servers)))
        return u'%u %s %s%s' % (self.algorithm, hit, key, text)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        algorithm = tok.get_uint8()
        hit = binascii.unhexlify(tok.get_string().encode())
        if len(hit) > 255:
            raise dns.exception.SyntaxError("HIT too long")
        key = base64.b64decode(tok.get_string().encode())
        servers = []
        while 1:
            token = tok.get()
            if token.is_eol_or_eof():
                break
            server = dns.name.from_text(token.value, origin)
            server.choose_relativity(origin, relativize)
            servers.append(server)
        return cls(rdclass, rdtype, hit, algorithm, key, servers)

    def to_wire(self, file, compress=None, origin=None):
        lh = len(self.hit)
        lk = len(self.key)
        file.write(struct.pack("!BBH", lh, self.algorithm, lk))
        file.write(self.hit)
        file.write(self.key)
        for server in self.servers:
            server.to_wire(file, None, origin)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        (lh, algorithm, lk) = struct.unpack('!BBH',
                                            wire[current: current + 4])
        current += 4
        rdlen -= 4
        hit = wire[current: current + lh].unwrap()
        current += lh
        rdlen -= lh
        key = wire[current: current + lk].unwrap()
        current += lk
        rdlen -= lk
        servers = []
        while rdlen > 0:
            (server, cused) = dns.name.from_wire(wire[: current + rdlen],
                                                 current)
            current += cused
            rdlen -= cused
            if origin is not None:
                server = server.relativize(origin)
            servers.append(server)
        return cls(rdclass, rdtype, hit, algorithm, key, servers)

    def choose_relativity(self, origin=None, relativize=True):
        servers = []
        for server in self.servers:
            server = server.choose_relativity(origin, relativize)
            servers.append(server)
        self.servers = servers
ANY/CNAME.py000064400000002074150401435240006371 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.nsbase


class CNAME(dns.rdtypes.nsbase.NSBase):

    """CNAME record

    Note: although CNAME is officially a singleton type, dnspython allows
    non-singleton CNAME rdatasets because such sets have been commonly
    used by BIND and other nameservers for load balancing."""
ANY/SSHFP.py000064400000005414150401435240006432 0ustar00# Copyright (C) 2005-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct
import binascii

import dns.rdata
import dns.rdatatype


class SSHFP(dns.rdata.Rdata):

    """SSHFP record

    @ivar algorithm: the algorithm
    @type algorithm: int
    @ivar fp_type: the digest type
    @type fp_type: int
    @ivar fingerprint: the fingerprint
    @type fingerprint: string
    @see: draft-ietf-secsh-dns-05.txt"""

    __slots__ = ['algorithm', 'fp_type', 'fingerprint']

    def __init__(self, rdclass, rdtype, algorithm, fp_type,
                 fingerprint):
        super(SSHFP, self).__init__(rdclass, rdtype)
        self.algorithm = algorithm
        self.fp_type = fp_type
        self.fingerprint = fingerprint

    def to_text(self, origin=None, relativize=True, **kw):
        return '%d %d %s' % (self.algorithm,
                             self.fp_type,
                             dns.rdata._hexify(self.fingerprint,
                                               chunksize=128))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        algorithm = tok.get_uint8()
        fp_type = tok.get_uint8()
        chunks = []
        while 1:
            t = tok.get().unescape()
            if t.is_eol_or_eof():
                break
            if not t.is_identifier():
                raise dns.exception.SyntaxError
            chunks.append(t.value.encode())
        fingerprint = b''.join(chunks)
        fingerprint = binascii.unhexlify(fingerprint)
        return cls(rdclass, rdtype, algorithm, fp_type, fingerprint)

    def to_wire(self, file, compress=None, origin=None):
        header = struct.pack("!BB", self.algorithm, self.fp_type)
        file.write(header)
        file.write(self.fingerprint)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        header = struct.unpack("!BB", wire[current: current + 2])
        current += 2
        rdlen -= 2
        fingerprint = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, header[0], header[1], fingerprint)
ANY/MX.py000064400000001551150401435240006071 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.mxbase


class MX(dns.rdtypes.mxbase.MXBase):

    """MX record"""
ANY/TXT.py000064400000001556150401435240006231 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.txtbase


class TXT(dns.rdtypes.txtbase.TXTBase):

    """TXT record"""
ANY/ISDN.py000064400000006305150401435240006304 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.tokenizer
from dns._compat import text_type


class ISDN(dns.rdata.Rdata):

    """ISDN record

    @ivar address: the ISDN address
    @type address: string
    @ivar subaddress: the ISDN subaddress (or '' if not present)
    @type subaddress: string
    @see: RFC 1183"""

    __slots__ = ['address', 'subaddress']

    def __init__(self, rdclass, rdtype, address, subaddress):
        super(ISDN, self).__init__(rdclass, rdtype)
        if isinstance(address, text_type):
            self.address = address.encode()
        else:
            self.address = address
        if isinstance(address, text_type):
            self.subaddress = subaddress.encode()
        else:
            self.subaddress = subaddress

    def to_text(self, origin=None, relativize=True, **kw):
        if self.subaddress:
            return '"%s" "%s"' % (dns.rdata._escapify(self.address),
                                  dns.rdata._escapify(self.subaddress))
        else:
            return '"%s"' % dns.rdata._escapify(self.address)

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        address = tok.get_string()
        t = tok.get()
        if not t.is_eol_or_eof():
            tok.unget(t)
            subaddress = tok.get_string()
        else:
            tok.unget(t)
            subaddress = ''
        tok.get_eol()
        return cls(rdclass, rdtype, address, subaddress)

    def to_wire(self, file, compress=None, origin=None):
        l = len(self.address)
        assert l < 256
        file.write(struct.pack('!B', l))
        file.write(self.address)
        l = len(self.subaddress)
        if l > 0:
            assert l < 256
            file.write(struct.pack('!B', l))
            file.write(self.subaddress)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        l = wire[current]
        current += 1
        rdlen -= 1
        if l > rdlen:
            raise dns.exception.FormError
        address = wire[current: current + l].unwrap()
        current += l
        rdlen -= l
        if rdlen > 0:
            l = wire[current]
            current += 1
            rdlen -= 1
            if l != rdlen:
                raise dns.exception.FormError
            subaddress = wire[current: current + l].unwrap()
        else:
            subaddress = ''
        return cls(rdclass, rdtype, address, subaddress)
ANY/DS.py000064400000001551150401435240006053 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import dns.rdtypes.dsbase


class DS(dns.rdtypes.dsbase.DSBase):

    """DS record"""
ANY/GPOS.py000064400000012371150401435240006317 0ustar00# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct

import dns.exception
import dns.rdata
import dns.tokenizer
from dns._compat import long, text_type


def _validate_float_string(what):
    if what[0] == b'-'[0] or what[0] == b'+'[0]:
        what = what[1:]
    if what.isdigit():
        return
    (left, right) = what.split(b'.')
    if left == b'' and right == b'':
        raise dns.exception.FormError
    if not left == b'' and not left.decode().isdigit():
        raise dns.exception.FormError
    if not right == b'' and not right.decode().isdigit():
        raise dns.exception.FormError


def _sanitize(value):
    if isinstance(value, text_type):
        return value.encode()
    return value


class GPOS(dns.rdata.Rdata):

    """GPOS record

    @ivar latitude: latitude
    @type latitude: string
    @ivar longitude: longitude
    @type longitude: string
    @ivar altitude: altitude
    @type altitude: string
    @see: RFC 1712"""

    __slots__ = ['latitude', 'longitude', 'altitude']

    def __init__(self, rdclass, rdtype, latitude, longitude, altitude):
        super(GPOS, self).__init__(rdclass, rdtype)
        if isinstance(latitude, float) or \
           isinstance(latitude, int) or \
           isinstance(latitude, long):
            latitude = str(latitude)
        if isinstance(longitude, float) or \
           isinstance(longitude, int) or \
           isinstance(longitude, long):
            longitude = str(longitude)
        if isinstance(altitude, float) or \
           isinstance(altitude, int) or \
           isinstance(altitude, long):
            altitude = str(altitude)
        latitude = _sanitize(latitude)
        longitude = _sanitize(longitude)
        altitude = _sanitize(altitude)
        _validate_float_string(latitude)
        _validate_float_string(longitude)
        _validate_float_string(altitude)
        self.latitude = latitude
        self.longitude = longitude
        self.altitude = altitude

    def to_text(self, origin=None, relativize=True, **kw):
        return '%s %s %s' % (self.latitude.decode(),
                             self.longitude.decode(),
                             self.altitude.decode())

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        latitude = tok.get_string()
        longitude = tok.get_string()
        altitude = tok.get_string()
        tok.get_eol()
        return cls(rdclass, rdtype, latitude, longitude, altitude)

    def to_wire(self, file, compress=None, origin=None):
        l = len(self.latitude)
        assert l < 256
        file.write(struct.pack('!B', l))
        file.write(self.latitude)
        l = len(self.longitude)
        assert l < 256
        file.write(struct.pack('!B', l))
        file.write(self.longitude)
        l = len(self.altitude)
        assert l < 256
        file.write(struct.pack('!B', l))
        file.write(self.altitude)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        l = wire[current]
        current += 1
        rdlen -= 1
        if l > rdlen:
            raise dns.exception.FormError
        latitude = wire[current: current + l].unwrap()
        current += l
        rdlen -= l
        l = wire[current]
        current += 1
        rdlen -= 1
        if l > rdlen:
            raise dns.exception.FormError
        longitude = wire[current: current + l].unwrap()
        current += l
        rdlen -= l
        l = wire[current]
        current += 1
        rdlen -= 1
        if l != rdlen:
            raise dns.exception.FormError
        altitude = wire[current: current + l].unwrap()
        return cls(rdclass, rdtype, latitude, longitude, altitude)

    def _get_float_latitude(self):
        return float(self.latitude)

    def _set_float_latitude(self, value):
        self.latitude = str(value)

    float_latitude = property(_get_float_latitude, _set_float_latitude,
                              doc="latitude as a floating point value")

    def _get_float_longitude(self):
        return float(self.longitude)

    def _set_float_longitude(self, value):
        self.longitude = str(value)

    float_longitude = property(_get_float_longitude, _set_float_longitude,
                               doc="longitude as a floating point value")

    def _get_float_altitude(self):
        return float(self.altitude)

    def _set_float_altitude(self, value):
        self.altitude = str(value)

    float_altitude = property(_get_float_altitude, _set_float_altitude,
                              doc="altitude as a floating point value")
dsbase.py000064400000006010150401435240006352 0ustar00# Copyright (C) 2010, 2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import struct
import binascii

import dns.rdata
import dns.rdatatype


class DSBase(dns.rdata.Rdata):

    """Base class for rdata that is like a DS record

    @ivar key_tag: the key tag
    @type key_tag: int
    @ivar algorithm: the algorithm
    @type algorithm: int
    @ivar digest_type: the digest type
    @type digest_type: int
    @ivar digest: the digest
    @type digest: int
    @see: draft-ietf-dnsext-delegation-signer-14.txt"""

    __slots__ = ['key_tag', 'algorithm', 'digest_type', 'digest']

    def __init__(self, rdclass, rdtype, key_tag, algorithm, digest_type,
                 digest):
        super(DSBase, self).__init__(rdclass, rdtype)
        self.key_tag = key_tag
        self.algorithm = algorithm
        self.digest_type = digest_type
        self.digest = digest

    def to_text(self, origin=None, relativize=True, **kw):
        return '%d %d %d %s' % (self.key_tag, self.algorithm,
                                self.digest_type,
                                dns.rdata._hexify(self.digest,
                                                  chunksize=128))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        key_tag = tok.get_uint16()
        algorithm = tok.get_uint8()
        digest_type = tok.get_uint8()
        chunks = []
        while 1:
            t = tok.get().unescape()
            if t.is_eol_or_eof():
                break
            if not t.is_identifier():
                raise dns.exception.SyntaxError
            chunks.append(t.value.encode())
        digest = b''.join(chunks)
        digest = binascii.unhexlify(digest)
        return cls(rdclass, rdtype, key_tag, algorithm, digest_type,
                   digest)

    def to_wire(self, file, compress=None, origin=None):
        header = struct.pack("!HBB", self.key_tag, self.algorithm,
                             self.digest_type)
        file.write(header)
        file.write(self.digest)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        header = struct.unpack("!HBB", wire[current: current + 4])
        current += 4
        rdlen -= 4
        digest = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, header[0], header[1], header[2], digest)
dnskeybase.py000064400000010443150401435240007246 0ustar00# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

import base64
import struct

import dns.exception
import dns.dnssec
import dns.rdata

# wildcard import
__all__ = ["SEP", "REVOKE", "ZONE",
           "flags_to_text_set", "flags_from_text_set"]

# flag constants
SEP = 0x0001
REVOKE = 0x0080
ZONE = 0x0100

_flag_by_text = {
    'SEP': SEP,
    'REVOKE': REVOKE,
    'ZONE': ZONE
}

# We construct the inverse mapping programmatically to ensure that we
# cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
# would cause the mapping not to be true inverse.
_flag_by_value = dict((y, x) for x, y in _flag_by_text.items())


def flags_to_text_set(flags):
    """Convert a DNSKEY flags value to set texts
    @rtype: set([string])"""

    flags_set = set()
    mask = 0x1
    while mask <= 0x8000:
        if flags & mask:
            text = _flag_by_value.get(mask)
            if not text:
                text = hex(mask)
            flags_set.add(text)
        mask <<= 1
    return flags_set


def flags_from_text_set(texts_set):
    """Convert set of DNSKEY flag mnemonic texts to DNSKEY flag value
    @rtype: int"""

    flags = 0
    for text in texts_set:
        try:
            flags += _flag_by_text[text]
        except KeyError:
            raise NotImplementedError(
                "DNSKEY flag '%s' is not supported" % text)
    return flags


class DNSKEYBase(dns.rdata.Rdata):

    """Base class for rdata that is like a DNSKEY record

    @ivar flags: the key flags
    @type flags: int
    @ivar protocol: the protocol for which this key may be used
    @type protocol: int
    @ivar algorithm: the algorithm used for the key
    @type algorithm: int
    @ivar key: the public key
    @type key: string"""

    __slots__ = ['flags', 'protocol', 'algorithm', 'key']

    def __init__(self, rdclass, rdtype, flags, protocol, algorithm, key):
        super(DNSKEYBase, self).__init__(rdclass, rdtype)
        self.flags = flags
        self.protocol = protocol
        self.algorithm = algorithm
        self.key = key

    def to_text(self, origin=None, relativize=True, **kw):
        return '%d %d %d %s' % (self.flags, self.protocol, self.algorithm,
                                dns.rdata._base64ify(self.key))

    @classmethod
    def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
        flags = tok.get_uint16()
        protocol = tok.get_uint8()
        algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
        chunks = []
        while 1:
            t = tok.get().unescape()
            if t.is_eol_or_eof():
                break
            if not t.is_identifier():
                raise dns.exception.SyntaxError
            chunks.append(t.value.encode())
        b64 = b''.join(chunks)
        key = base64.b64decode(b64)
        return cls(rdclass, rdtype, flags, protocol, algorithm, key)

    def to_wire(self, file, compress=None, origin=None):
        header = struct.pack("!HBB", self.flags, self.protocol, self.algorithm)
        file.write(header)
        file.write(self.key)

    @classmethod
    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
        if rdlen < 4:
            raise dns.exception.FormError
        header = struct.unpack('!HBB', wire[current: current + 4])
        current += 4
        rdlen -= 4
        key = wire[current: current + rdlen].unwrap()
        return cls(rdclass, rdtype, header[0], header[1], header[2],
                   key)

    def flags_to_text_set(self):
        """Convert a DNSKEY flags value to set texts
        @rtype: set([string])"""
        return flags_to_text_set(self.flags)