ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- PK ]`0ooCERT.pynu[# 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) PK ]CNcGGX25.pynu[# 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) PK ]h $__pycache__/SOA.cpython-36.opt-1.pycnu[3 bW@s8ddlZddlZddlZddlZGdddejjZdS)NcsveZdZdZdddddddgZfd d Zdd dZedddZdddZ dddZ edddZ dddZ Z S)SOAaSOA 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 1035mnamernameserialrefreshretryexpireminimumc s@tt|j||||_||_||_||_||_||_| |_ dS)N) superr__init__rrrrrrr ) selfrdclassrdtyperrrrrrr ) __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)rchoose_relativityrrrrrr )r origin relativizekwrrrrrto_text:s z SOA.to_textc Csp|j}|j}|j||}|j||}|j}|j} |j} |j} |j} |j||||||| | | | S)N)Zget_namerZ get_uint32Zget_ttlZget_eol) clsr rtokrrrrrrrrr rrr from_textAs  z SOA.from_textcCsL|jj||||jj|||tjd|j|j|j|j|j }|j |dS)Nz!IIIII) rto_wirerstructpackrrrrr write)r filecompressr five_intsrrrrPs z SOA.to_wirecCs6|jj||jj|tjd|j|j|j|j|j S)Nz!IIIII) r to_digestablerrrrrrrr )r rrrrr!WszSOA.to_digestablec Cstjj|d|||\}}||7}||8}tjj|d|||\} }||7}||8}|dkrltjjtjd||||} |dk r|j|}| j|} ||||| | d| d| d| d| d S)Nz!IIIIIr)dnsname from_wireZ exceptionZ FormErrorrunpackr) 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__r r classmethodrrr!r)r __classcell__rr)rrrs      r)rZ dns.exceptionr'Z dns.rdataZdns.nameZrdataZRdatarrrrrsPK ]!F0!__pycache__/DNSKEY.cpython-36.pycnu[3 bW@s:ddlZddlmZmZddgZGdddejjjZdS)N)flags_to_text_setflags_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 sPK ]&c%__pycache__/GPOS.cpython-36.opt-1.pycnu[3 bW@sXddlZddlZddlZddlZddlmZmZddZddZ Gdddej j Z dS) N)long text_typecCs|ddks|ddkr$|dd}|jr0dS|jd\}}|dkrV|dkrVtjj|dk rv|jj rvtjj|dk r|jj rtjjdS) Nr-+.-+)isdigitsplitdns exception FormErrordecode)Zwhatleftrightr/usr/lib/python3.6/GPOS.py_validate_float_strings rcCst|tr|jS|S)N) isinstancerencode)valuerrr _sanitize&s rcseZdZdZdddgZfddZd!d d Zed"d d Zd#d dZ ed$ddZ ddZ ddZ e e e ddZddZddZe eeddZddZddZe eed dZZS)%GPOSzGPOS record @ivar latitude: latitude @type latitude: string @ivar longitude: longitude @type longitude: string @ivar altitude: altitude @type altitude: string @see: RFC 1712latitude longitudealtitudecstt|j||t|ts0t|ts0t|tr8t|}t|tsVt|tsVt|tr^t|}t|ts|t|ts|t|trt|}t|}t|}t|}t |t |t |||_ ||_ ||_ dS)N) superr__init__rfloatintrstrrrrrr)selfrdclassrdtyperrr) __class__rrr:s,         z GPOS.__init__NTcKs d|jj|jj|jjfS)Nz%s %s %s)rrrr)r#origin relativizekwrrrto_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|jt|j}|jtjd||j|jt|j}|jtjd||j|jdS)Nz!B)lenrwritestructpackrr)r#filecompressr'lrrrto_wire_s     z GPOS.to_wirec Cs||}|d7}|d8}||kr(tjj||||j}||7}||8}||}|d7}|d8}||krttjj||||j} ||7}||8}||}|d7}|d8}||krtjj||||j} ||||| | S)Nr)r rrZunwrap) r+r$r%ZwireZcurrentZrdlenr'r4rrrrrr from_wirems.zGPOS.from_wirecCs t|jS)N)r r)r#rrr_get_float_latitudeszGPOS._get_float_latitudecCst||_dS)N)r"r)r#rrrr_set_float_latitudeszGPOS._set_float_latitudez"latitude as a floating point value)doccCs t|jS)N)r r)r#rrr_get_float_longitudeszGPOS._get_float_longitudecCst||_dS)N)r"r)r#rrrr_set_float_longitudeszGPOS._set_float_longitudez#longitude as a floating point valuecCs t|jS)N)r r)r#rrr_get_float_altitudeszGPOS._get_float_altitudecCst||_dS)N)r"r)r#rrrr_set_float_altitudeszGPOS._set_float_altitudez"altitude as a floating point value)NT)NT)NN)N)__name__ __module__ __qualname____doc__ __slots__rr* classmethodr-r5r6r7r8propertyZfloat_latituder:r;Zfloat_longituder<r=Zfloat_altitude __classcell__rr)r&rr,s*       r) r0Z dns.exceptionr Z dns.rdataZ dns.tokenizerZ dns._compatrrrrZrdataZRdatarrrrrsPK ]j/jk k __pycache__/LOC.cpython-36.pycnu[3 bW/@sddlmZddlZddlZddlZddlmZmZm Z e dde ddDZ dZ dZd Zd d Zd d ZddZddZddZGdddejjZdS))divisionN)longxrangeround_py2_compatccs|]}td|VqdS) N)r).0ir /usr/lib/python3.6/LOC.py sr gY@g.Ag@@cCsh|dkr dSd}x2tttD]"}|t|tdkr|d}PqW|dksT|dkrdtjjd||S)Nrz%s value out of bounds)rlen_powsrdns exception SyntaxError)whatdescZexprr r r _exponent_of!srcCs|dkrd}|d9}nd}t|d}t|d}||d8}t|d}||d8}t|d}|t|d8}t|}|||||fS)Nrr i6i`ir)rint)rZsignZdegreesZminutessecondsr r r _float_to_tuple.s       rcCsXt|d}|t|dd7}|t|dd7}|t|dd7}t|d|S) Nrr gN@g @g@wKA)float)rvaluer r r _tuple_to_float?s  rcCs4t|}t||d@}|td|d@}|d|S)Nr)rrpow)rrexponentbaser r r _encode_sizeGsr%cCsV|d@}|dkr tjjd||d@d?}|dkrDtjjd|t|td|S)Nr zbad %s exponentrz bad %s baser)rrrrr")rrr#r$r r r _decode_sizeNs r(cseZdZdZddddddgZeeeffdd Zdd d Z e d ddZ d!ddZ e d"ddZ ddZddZeeeddZddZddZeeeddZZS)#LOCaLOC 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 1876latitude longitudealtitudesizehorizontal_precisionvertical_precisionc stt|j||t|ts&t|tr.t|}t|tr@t|}||_t|tsZt|trbt|}t|trtt|}||_ t||_ t||_ t||_ t||_ dS)aInitialize 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/) selfrdclassrdtyper*r+r,r-hprecvprec) __class__r r r1os      z LOC.__init__NTc Ks|jddkrd}nd}|jddkr,d}nd}d|jd|jd|jd |jd ||jd|jd|jd |jd ||jd f }|jtks|jtks|jtkr|d |jd |jd |jd f7}|S) NrrNSEWz(%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)r3origin relativizekwZlat_hemisphereZlong_hemispheretextr r r to_texts&    z LOC.to_textc Csdddddg}dddddg}t}t} t} |j|d<|j} | jr0t| |d<|j} d| kr| jd\} } | jstj j dt| |d<|ddkrtj j dt | }|dks|dks| j rtj j d |dkrd }n|dkrd }nd}|t| |d<|j} n| jr0t| |d<|j} | d krDd|d <n| dkrZtj j d|j|d<|j} | jrpt| |d<|j} d| krR| jd\} } | jstj j dt| |d<|ddkrtj j dt | }|dks|dks| j rtj j d|dkr$d }n|dkr4d }nd}|t| |d<|j} n| jrpt| |d<|j} | dkrd|d <n| dkrtj j d|j} | ddkr| dd} t | d}|j j}|js|j}|ddkr|dd}t |d}|j j}|js|j}|ddkr@|dd}t |d} |j j}|js|j}|d dkr|dd!}t |d} |j|||||||| | S)"Nrr .zbad latitude seconds valuer<zlatitude seconds >= 60rzbad latitude milliseconds valuedrr:rr9zbad latitude hemisphere valuezbad longitude seconds valuezlongitude seconds >= 60z bad longitude milliseconds valuer<r;zbad longitude hemisphere valuemgY@rrrrrrrrrr)r=r>r?Zget_intZ get_stringisdigitrsplitrrrrrgetZunescapeZ is_eol_or_eofrZget_eol)clsr4r5tokr@rAr*r+r-r6r7tr millisecondslrHr,tokenrr r r from_texts                                              z LOC.from_textc Cs|jdd|jdd|jdd|jd|jd}td |}|jdd|jdd|jdd|jd|jd}td |}t|jtd }t|jd }t|jd } t|jd } tj dd|| | |||} |j | dS)Nri6r i`rirrlir-zhorizontal precisionzvertical precisionz!BBBBIII) r*rr+r,r%r-r.r/structpackwrite) r3filecompressr@rOr*r+r,r-r6r7wirer r r to_wire s( (    z LOC.to_wirec Cstjd||||\}}} } } } } | tdkrHt| tdd} nd ttd| d} | dksp| dkr|tjjd| tdkrt| tdd} ndttd| d} | dks| dkrtjjdt| d } t|d }t| d } t| d } |||| | | || | S)Nz!BBBBIIIli6r gV@z bad latitudegf@z bad longitudegcAr-zhorizontal precisionzvertical precisionrgVrgf)rSunpackrrrrZ FormErrorr()rLr4r5rXZcurrentZrdlenr@versionr-r6r7r*r+r,r r r from_wires"&         z LOC.from_wirecCs t|jS)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|jS)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.rdataZ dns._compatrrrtuplerangerr=r>r?rrrr%r(ZrdataZRdatar)r r r r s   PK ]?['__pycache__/URI.cpython-36.pycnu[3 bWR @sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)URIzURI 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-13priorityweighttargetcsVtt|j||||_||_t|dkr6tjjdt |t rL|j |_ n||_ dS)NzURI target cannot be empty) superr__init__rrlendns exception SyntaxError isinstancerencoder)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/URI.pyr 's    z URI.__init__NTcKsd|j|j|jjfS)Nz %d %d "%s")rrrdecode)rorigin relativizekwrrrto_text2s z URI.to_textc CsR|j}|j}|jj}|jp*|js8tjjd|j||||||j S)NzURI target must be a string) Z get_uint16getZunescapeZis_quoted_stringZ is_identifierr r r Zget_eolvalue) clsrrtokrrrrrrrr from_text6s  z URI.from_textcCs,tjd|j|j}|j||j|jdS)Nz!HH)structpackrrwriter)rfilecompressrZtwo_intsrrrto_wire@s z URI.to_wirec Csh|dkrtjjdtjd|||d\}}|d7}|d8}||||} ||7}|||||| S)NzURI RR is shorter than 5 octetsz!HH)r r 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.exceptionr Z dns.rdataZdns.nameZ dns._compatrZrdataZRdatarrrrrs  PK ]&__pycache__/EUI64.cpython-36.opt-1.pycnu[3 bWn@s"ddlZGdddejjjZdS)Nc@s eZdZdZdZeddZdS)EUI64zEUI64 record @ivar fingerprint: 64-bit Extended Unique Identifier (EUI-64) @type fingerprint: string @see: rfc7043.txtN)__name__ __module__ __qualname____doc__Zbyte_lenZtext_lenr r /usr/lib/python3.6/EUI64.pyrsr)Zdns.rdtypes.euibaseZdnsZrdtypesZeuibaseZEUIBaserr r r r sPK ]UXTXX__pycache__/DS.cpython-36.pycnu[3 bWi@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)DSz DS recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/DS.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrrsPK ]) ) %__pycache__/NSEC3PARAM.cpython-36.pycnu[3 bW @sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecs\eZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ Z S) 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 algorithmflags iterationssaltcsDtt|j||||_||_||_t|tr:|j|_ n||_ dS)N) superr__init__rrr isinstancerencoder)selfrdclassrdtyperrrr) __class__ /usr/lib/python3.6/NSEC3PARAM.pyr 's  zNSEC3PARAM.__init__NTcKs6|jdkrd}ntj|jj}d|j|j|j|fS)N-z %u %u %u %s)rbinasciiZhexlifydecoderrr)r origin relativizekwrrrrto_text1s  zNSEC3PARAM.to_textc CsV|j}|j}|j}|j} | dkr.d} ntj| j} |j||||||| S)Nr)Z get_uint8Z get_uint16Z get_stringrZ unhexlifyr Zget_eol) clsr rtokrrrrrrrrr from_text9szNSEC3PARAM.from_textcCs8t|j}|jtjd|j|j|j||j|jdS)Nz!BBHB)lenrwritestructpackrrr)r filecompressrlrrrto_wireFs  zNSEC3PARAM.to_wirec Csvtjd|||d\}}} } |d7}|d8}|||| j} || 7}|| 8}|dkrdtjj|||||| | S)Nz!BBHBr)r unpackZunwrapdnsZ 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.rdataZ dns._compatrZrdataZRdatarrrrrs  PK ]>$__pycache__/AVC.cpython-36.opt-1.pycnu[3 ӓW@s"ddlZGdddejjjZdS)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.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrrsPK ]#c ..&__pycache__/CNAME.cpython-36.opt-1.pycnu[3 bW<@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)CNAMEzCNAME 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.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrrsPK ]ǃ^^__pycache__/TXT.cpython-36.pycnu[3 bWn@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)TXTz TXT recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/TXT.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrrsPK ]ǃ^^$__pycache__/TXT.cpython-36.opt-1.pycnu[3 bWn@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)TXTz TXT recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/TXT.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrrsPK ]>__pycache__/AVC.cpython-36.pycnu[3 ӓW@s"ddlZGdddejjjZdS)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.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrrsPK ]T/[[__pycache__/CDS.cpython-36.pycnu[3 bWk@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)CDSz CDS recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/CDS.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrrsPK ]j+ __pycache__/CERT.cpython-36.pycnu[3 bWo@sxddlZddlZddlZddlZddlZddlZddddddZdd d d d d ZddZ ddZ Gdddej j Z dS)NPKIXSPKIPGPURIOID)rrr r r )rrrrrcCstj|}|dk r|St|S)N)_ctype_by_namegetint)whatvr/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\eZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ Z S)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 2538certificate_typekey_tag algorithm certificatecs.tt|j||||_||_||_||_dS)N)superr__init__rrrr)selfrdclassrdtyperrrr) __class__rrrGs z CERT.__init__NTcKs0t|j}d||jtjj|jtjj|j fS)Nz %s %d %s %s) rrrdnsdnssecZalgorithm_to_textrrdataZ _base64ifyr)rorigin relativizekwrrrrto_textOs  z CERT.to_textc Cst|j}|j}tjj|j}|dks4|dkr@tjjdg} x:|jj } | j r\P| j sltjj| j | j jqFWdj| } tj| } ||||||| S)Nrzbad algorithm type)rZ get_stringZ get_uint16r"r#Zalgorithm_from_text exception SyntaxErrorr ZunescapeZ is_eol_or_eofZ is_identifierappendvalueencodejoinbase64Z b64decode) clsrr tokr%r&rrrZchunkstZb64rrrr from_textUs"      zCERT.from_textcCs0tjd|j|j|j}|j||j|jdS)Nz!HHB)structpackrrrwriter)rfilecompressr%prefixrrrto_wireis z CERT.to_wirec Csl|||dj}|d7}|d8}|dkr4tjjtjd|\}} } ||||j} ||||| | | S)Nrz!HHB)Zunwrapr"r+Z FormErrorr6unpack) 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$ZRdatarrrrrs$PK ](__pycache__/CDNSKEY.cpython-36.opt-1.pycnu[3 bW@s:ddlZddlmZmZddgZGdddejjjZdS)N)flags_to_text_setflags_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 sPK ]5rr__pycache__/SPF.cpython-36.pycnu[3 bW@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)SPFzSPF record @see: RFC 4408N)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/SPF.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrrsPK ]) ) +__pycache__/NSEC3PARAM.cpython-36.opt-1.pycnu[3 bW @sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecs\eZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ Z S) 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 algorithmflags iterationssaltcsDtt|j||||_||_||_t|tr:|j|_ n||_ dS)N) superr__init__rrr isinstancerencoder)selfrdclassrdtyperrrr) __class__ /usr/lib/python3.6/NSEC3PARAM.pyr 's  zNSEC3PARAM.__init__NTcKs6|jdkrd}ntj|jj}d|j|j|j|fS)N-z %u %u %u %s)rbinasciiZhexlifydecoderrr)r origin relativizekwrrrrto_text1s  zNSEC3PARAM.to_textc CsV|j}|j}|j}|j} | dkr.d} ntj| j} |j||||||| S)Nr)Z get_uint8Z get_uint16Z get_stringrZ unhexlifyr Zget_eol) clsr rtokrrrrrrrrr from_text9szNSEC3PARAM.from_textcCs8t|j}|jtjd|j|j|j||j|jdS)Nz!BBHB)lenrwritestructpackrrr)r filecompressrlrrrto_wireFs  zNSEC3PARAM.to_wirec Csvtjd|||d\}}} } |d7}|d8}|||| j} || 7}|| 8}|dkrdtjj|||||| | S)Nz!BBHBr)r unpackZunwrapdnsZ 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.rdataZ dns._compatrZrdataZRdatarrrrrs  PK ]__ __pycache__/RRSIG.cpython-36.pycnu[3 bW@s|ddlZddlZddlZddlZddlZddlZddlZddlZGdddej j Z ddZ ddZ Gdd d ejjZdS) 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 Cst|dkrtt|dd}t|dd}t|dd}t|dd}t|dd}t|dd}tj||||||dddf S)Nr )lenrintcalendarZtimegm)whatZyearZmonthZdayZhourZminutesecondrrrsigtime_to_posixtime s rcCstjdtj|S)Nz %Y%m%d%H%M%S)timeZstrftimeZgmtime)rrrrposixtime_to_sigtime-src sxeZdZdZdddddddd d g Zfd d Zd dZdddZedddZ dddZ edddZ dddZ 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 algorithmlabels original_ttl expiration inceptionkey_tagsigner signaturec sLtt|j||||_||_||_||_||_||_| |_ | |_ | |_ dS)N) superr__init__rrrrrrrrr ) selfrdclassrdtyperrrrrrrrr ) __class__rrr"LszRRSIG.__init__cCs|jS)N)r)r#rrrcoversZsz RRSIG.coversNTc KsLdtjj|j|j|j|jt|jt|j |j |j j ||tj j|jf S)Nz%s %d %d %d %s %s %d %s %s)dns rdatatypeto_textrrrrrrrrrchoose_relativityrdataZ _base64ifyr )r#origin relativizekwrrrr*]s  z RRSIG.to_textc Cstjj|j}tjj|j}|j}|j} t|j} t|j} |j} |j } | j ||} g}x:|j j }|j rP|jstjj|j|jjqjWdj|}tj|}||||||| | | | | | S)N)r(r) from_textZ get_stringZdnssecZalgorithm_from_textZget_intZget_ttlrZget_namer+getZunescapeZ is_eol_or_eofZ is_identifier exception SyntaxErrorappendvalueencodejoinbase64Z b64decode)clsr$r%tokr-r.rrrrrrrrZchunkstZb64r rrrr1js,        zRRSIG.from_textc CsPtjd|j|j|j|j|j|j|j}|j ||j j |d||j |j dS)Nz!HBBIIIH) structpackrrrrrrrwriterto_wirer )r#filecompressr-headerrrrr@s   z RRSIG.to_wirec Cstjd|||d}|d7}|d8}tjj|d|||\}} || 7}|| 8}|dk rh|j|}||||j} ||||d|d|d|d|d|d|d || S) Nz!HBBIIIHrr r )r=unpackr(name from_wirer.Zunwrap) r:r$r%ZwireZcurrentZrdlenr-rCrZcusedr rrrrKs 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,ZRdatarrrrrs PK ]UΔ#__pycache__/__init__.cpython-36.pycnu[3 bW@sJdZddddddddd d d d d ddddddddddddddddddgZd S)!z'Class ANY (generic) rdata type classes.ZAFSDBZCDNSKEYZCDSZCERTZCNAMEZDLVZDNAMEZDNSKEYZDSZEUI48ZEUI64ZGPOSZHINFOZHIPZISDNZLOCZMXZNSZNSECZNSEC3Z NSEC3PARAMZTLSAZPTRZRPZRRSIGZRTZSOAZSPFZSSHFPZTXTZX25N)__doc____all__rr/usr/lib/python3.6/__init__.pys>PK ]?['$__pycache__/URI.cpython-36.opt-1.pycnu[3 bWR @sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)URIzURI 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-13priorityweighttargetcsVtt|j||||_||_t|dkr6tjjdt |t rL|j |_ n||_ dS)NzURI target cannot be empty) superr__init__rrlendns exception SyntaxError isinstancerencoder)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/URI.pyr 's    z URI.__init__NTcKsd|j|j|jjfS)Nz %d %d "%s")rrrdecode)rorigin relativizekwrrrto_text2s z URI.to_textc CsR|j}|j}|jj}|jp*|js8tjjd|j||||||j S)NzURI target must be a string) Z get_uint16getZunescapeZis_quoted_stringZ is_identifierr r r Zget_eolvalue) clsrrtokrrrrrrrr from_text6s  z URI.from_textcCs,tjd|j|j}|j||j|jdS)Nz!HH)structpackrrwriter)rfilecompressrZtwo_intsrrrto_wire@s z URI.to_wirec Csh|dkrtjjdtjd|||d\}}|d7}|d8}||||} ||7}|||||| S)NzURI RR is shorter than 5 octetsz!HH)r r 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.exceptionr Z dns.rdataZdns.nameZ dns._compatrZrdataZRdatarrrrrs  PK ];[[$__pycache__/PTR.cpython-36.opt-1.pycnu[3 bWk@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)PTRz PTR recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/PTR.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrrsPK ]oDB&__pycache__/HINFO.cpython-36.opt-1.pycnu[3 bWi @sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecsXeZdZdZddgZfddZddd Zedd d Zdd d Z edddZ Z S)HINFOzHINFO record @ivar cpu: the CPU type @type cpu: string @ivar os: the OS type @type os: string @see: RFC 1035cpuoscsNtt|j||t|tr(|j|_n||_t|trD|j|_n||_dS)N)superr__init__ isinstancerencoderr)selfrdclassrdtyperr) __class__/usr/lib/python3.6/HINFO.pyr$s    zHINFO.__init__NTcKs dtjj|jtjj|jfS)Nz "%s" "%s")dnsrdataZ _escapifyrr)r origin relativizekwrrrto_text/sz HINFO.to_textcCs&|j}|j}|j|||||S)N)Z get_stringZget_eol)clsr r tokrrrrrrr from_text3szHINFO.from_textcCsTt|j}|jtjd||j|jt|j}|jtjd||j|jdS)Nz!B)lenrwritestructpackr)r filecompressrlrrrto_wire:s    z HINFO.to_wirec Cs||}|d7}|d8}||kr(tjj||||j}||7}||8}||}|d7}|d8}||krttjj||||j} ||||| S)N)rZ exceptionZ FormErrorZunwrap) rr r 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.tokenizerZ dns._compatrrZRdatarrrrrs  PK ][[QXX#__pycache__/NS.cpython-36.opt-1.pycnu[3 bWi@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)NSz NS recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/NS.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrrsPK ]eQ??&__pycache__/AFSDB.cpython-36.opt-1.pycnu[3 bW8@s"ddlZGdddejjjZdS)Nc@sDeZdZdZddZddZeeeZddZdd Z eee Z d S) AFSDBzAFSDB record @ivar subtype: the subtype value @type subtype: int @ivar hostname: the hostname name @type hostname: dns.name.Name objectcCs|jS)N) preference)selfr/usr/lib/python3.6/AFSDB.py get_subtype'szAFSDB.get_subtypecCs ||_dS)N)r)rsubtyperrr set_subtype*szAFSDB.set_subtypecCs|jS)N)exchange)rrrr get_hostname/szAFSDB.get_hostnamecCs ||_dS)N)r )rhostnamerrr set_hostname2szAFSDB.set_hostnameN) __name__ __module__ __qualname____doc__rr propertyrr r r rrrrrs  r)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedDowncasingMXrrrrrsPK ]Ip p &__pycache__/CSYNC.cpython-36.opt-1.pycnu[3 bW$@sLddlZddlZddlZddlZddlZddlmZGdddejj Z dS)N)xrangecsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)CSYNCzCSYNC 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) tuplesserialflagswindowscs(tt|j||||_||_||_dS)N)superr__init__rrr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/CSYNC.pyr%szCSYNC.__init__NTc Ksd}x|jD]\}}g}x`tdt|D]N}||} x@tddD]2} | d| ?@r@|jtjj|d|d| q@Wq(W|ddj|7}q Wd|j|j |fS)Nr z%d %d%s) rrlenappenddns rdatatypeto_textjoinrr) r origin relativizekwtextwindowbitmapbitsibytejr r rr+s   z CSYNC.to_textcCs@|j}|j}g}xZ|jj} | jr,Ptjj| j} | dkrNtj j d| dkrbtj j d|j | qW|j d} d} d} t dd}g}x|D]|} | | krq| } | d}|| kr|j | |d| ft dd}|} | d}|d}|d}|d } ||d |?B||<qW|j | |d| f||||||S) NrzCSYNC with bit 0izCSYNC with bit > 65535 rrr)Z get_uint32Z get_uint16getZunescapeZ is_eol_or_eofrr from_textvalue exception SyntaxErrorrsort bytearray)clsr r tokrrrrZrdtypestokenZnrdtyperoctetsZ prior_rdtyperrZ new_windowoffsetr"bitr r rr(8sF      zCSYNC.from_textcCsR|jtjd|j|jx4|jD]*\}}|jtjd|t||j|q WdS)Nz!IHz!BB)writestructpackrrrr)r filecompressrrrr r rto_wire_sz CSYNC.to_wirec Cs|dkrtjjdtjd|||d\}}|d7}|d8}g} x|dkr|dkrbtjjd||} ||d} | dks| dkrtjjd|d 7}|d 8}|| krtjjd t|||| j} || 7}|| 8}| j| | fqFW|||||| S) NzCSYNC too shortz!IHrr&r%zbad CSYNC octetszbad CSYNC bitmap length)rr*Z FormErrorr5unpackr-Zunwrapr) r.r r ZwireZcurrentZrdlenrrrrrr1rr 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.nameZ dns._compatrZrdataZRdatarr r r rs  PK ]j+ %__pycache__/CERT.cpython-36.opt-1.pycnu[3 bWo@sxddlZddlZddlZddlZddlZddlZddddddZdd d d d d ZddZ ddZ Gdddej j Z dS)NPKIXSPKIPGPURIOID)rrr r r )rrrrrcCstj|}|dk r|St|S)N)_ctype_by_namegetint)whatvr/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\eZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ Z S)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 2538certificate_typekey_tag algorithm certificatecs.tt|j||||_||_||_||_dS)N)superr__init__rrrr)selfrdclassrdtyperrrr) __class__rrrGs z CERT.__init__NTcKs0t|j}d||jtjj|jtjj|j fS)Nz %s %d %s %s) rrrdnsdnssecZalgorithm_to_textrrdataZ _base64ifyr)rorigin relativizekwrrrrto_textOs  z CERT.to_textc Cst|j}|j}tjj|j}|dks4|dkr@tjjdg} x:|jj } | j r\P| j sltjj| j | j jqFWdj| } tj| } ||||||| S)Nrzbad algorithm type)rZ get_stringZ get_uint16r"r#Zalgorithm_from_text exception SyntaxErrorr ZunescapeZ is_eol_or_eofZ is_identifierappendvalueencodejoinbase64Z b64decode) clsrr tokr%r&rrrZchunkstZb64rrrr from_textUs"      zCERT.from_textcCs0tjd|j|j|j}|j||j|jdS)Nz!HHB)structpackrrrwriter)rfilecompressr%prefixrrrto_wireis z CERT.to_wirec Csl|||dj}|d7}|d8}|dkr4tjjtjd|\}} } ||||j} ||||| | | S)Nrz!HHB)Zunwrapr"r+Z FormErrorr6unpack) 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$ZRdatarrrrrs$PK ] { __pycache__/NSEC3.cpython-36.pycnu[3 bW @sddlZddlZddlZddlZddlZddlZddlZddlm Z m Z yej ddZ ej ddZ Wn,ek rej ddZ ej ddZ YnXdZdZGdd d ejjZdS) N)xrange text_typeZ 0123456789ABCDEFGHIJKLMNOPQRSTUVZ ABCDEFGHIJKLMNOPQRSTUVWXYZ234567s 0123456789ABCDEFGHIJKLMNOPQRSTUVs ABCDEFGHIJKLMNOPQRSTUVWXYZ234567cs`eZdZdZddddddgZfdd Zdd d ZedddZdddZ edddZ Z S)NSEC3aNSEC3 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 algorithmflags iterationssaltnextwindowsc sPtt|j||||_||_||_t|tr:|j|_ n||_ ||_ ||_ dS)N) superr__init__rrr isinstancerencoder r r ) selfrdclassrdtyperrrr r r ) __class__/usr/lib/python3.6/NSEC3.pyr ?s  zNSEC3.__init__NTc Kstj|jjtjj}|jdkr*d}ntj |jj}d}x|j D]\}}g} x`t dt |D]N} || } x@t ddD]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 translateb32_normal_to_hexlowerdecoder binasciiZhexlifyr rlenappenddns rdatatypeto_textjoinrrr) rorigin relativizekwr r textwindowbitmapbitsibytejrrrr'Ls"      z NSEC3.to_textc Cs|j}|j}|j}|j} | dkr.d} ntj| jd} |jjdjjt} t j | } g} xZ|j j } | j r|Ptjj| j} | dkrtjjd| dkrtjjd| j| qfW| jd}d}d}tdd }g}x| D]} | |krq| }| d }||krD|dkr4|j|d j|d|ftdd }|}| d }|d }|d }|d }||d|?B||<qW|dkr|j||d|f||||||| | |S)NrrasciirzNSEC3 with bit 0izNSEC3 with bit > 65535 rrrrr)Z get_uint8Z get_uint16Z get_stringr"Z unhexlifyrupperrb32_hex_to_normalrZ b32decodegetZunescapeZ is_eol_or_eofr%r& from_textvalue exception SyntaxErrorr$sort bytearrayr()clsrrtokr)r*rrrr r ZrdtypestokenZnrdtyper-octetsZ prior_rdtyper.r Z new_windowoffsetr1bitrrrr9`s\          zNSEC3.from_textcCst|j}|jtjd|j|j|j||j|jt|j}|jtjd||j|jx4|j D]*\}}|jtjd|t||j|qdWdS)Nz!BBHBz!Bz!BB) r#r writestructpackrrrr r )rfilecompressr)lr-r.rrrto_wires     z NSEC3.to_wirec CsZtjd|||d\}}} } |d7}|d8}|||| j} || 7}|| 8}||} |d7}|d8}|||| j} || 7}|| 8}g}x|dkrB|dkrtjjd||}||d}|dks|dkrtjjd|d 7}|d 8}||kr tjjd t||||j}||7}||8}|j||fqW|||||| | | |S) Nz!BBHBrrzNSEC3 too shortr5zbad NSEC3 octetszbad NSEC3 bitmap length)rFunpackZunwrapr%r;Z FormErrorr>r$)r?rrZwireZcurrentZrdlenr)rrrZslenr Znlenr r r-rBr.rrr from_wires<       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.rdatatypeZ dns._compatrr maketransr7rAttributeErrorbytesZSHA1ZOPTOUTZrdataZRdatarrrrrs(  PK ]__pycache__/TLSA.cpython-36.pycnu[3 bW @s8ddlZddlZddlZddlZGdddejjZdS)Ncs\eZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ Z S)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 6698usageselectormtypecertcs.tt|j||||_||_||_||_dS)N)superr__init__rrrr)selfrdclassrdtyperrrr) __class__/usr/lib/python3.6/TLSA.pyr's z TLSA.__init__NTcKs$d|j|j|jtjj|jddfS)Nz %d %d %d %s)Z chunksize)rrrdnsrdataZ_hexifyr)r origin relativizekwr r rto_text/s  z TLSA.to_textc Cs~|j}|j}|j}g} x:|jj} | jr4P| jsDtjj| j| j j qWdj | } t j | } ||||||| S)N)Z get_uint8getZunescapeZ is_eol_or_eofZ is_identifierrZ exception SyntaxErrorappendvalueencodejoinbinasciiZ unhexlify) clsr r tokrrrrrZ cert_chunkstrr r r from_text6s   zTLSA.from_textcCs0tjd|j|j|j}|j||j|jdS)Nz!BBB)structpackrrrwriter)r filecompressrheaderr r rto_wireGs z TLSA.to_wirec CsZtjd|||d}|d7}|d8}||||j}||||d|d|d|S)Nz!BBBr)r"unpackZunwrap) rr r ZwireZcurrentZrdlenrr'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 rsPK ];[[__pycache__/PTR.cpython-36.pycnu[3 bWk@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)PTRz PTR recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/PTR.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrrsPK ]M#__pycache__/RP.cpython-36.opt-1.pycnu[3 bW @s0ddlZddlZddlZGdddejjZdS)NcsleZdZdZddgZfddZddd Zedd d Zdd d Z dddZ edddZ dddZ 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 1183mboxtxtcs"tt|j||||_||_dS)N)superr__init__rr)selfrdclassrdtyperr) __class__/usr/lib/python3.6/RP.pyr"sz RP.__init__NTcKs0|jj||}|jj||}dt|t|fS)Nz%s %s)rchoose_relativityrstr)rorigin relativizekwrrr r r to_text'sz RP.to_textcCs>|j}|j}|j||}|j||}|j|||||S)N)Zget_namer Zget_eol)clsrr tokrrrrr r r from_text,s   z RP.from_textcCs$|jj|d||jj|d|dS)N)rto_wirer)rfilecompressrr r r r5sz RP.to_wirecCs|jj||jj|S)N)r to_digestabler)rrr r r r9s zRP.to_digestablec Cstjj|d|||\}}||7}||8}|dkr>tjjtjj|d|||\} }||krltjj|dk r|j|}| j|} ||||| S)Nr)dnsname from_wireZ exceptionZ FormErrorr) rrr ZwireZcurrentZrdlenrrZcusedrr r r r=s    z RP.from_wirecCs$|jj|||_|jj|||_dS)N)rr r)rrrr r r r NszRP.choose_relativity)NT)NT)NN)N)N)NT)__name__ __module__ __qualname____doc__ __slots__rr classmethodrrrrr __classcell__r r )r r rs       r)Z dns.exceptionrZ dns.rdataZdns.nameZrdataZRdatarr r r r sPK ]"__pycache__/CDNSKEY.cpython-36.pycnu[3 bW@s:ddlZddlmZmZddgZGdddejjjZdS)N)flags_to_text_setflags_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 sPK ]UΔ)__pycache__/__init__.cpython-36.opt-1.pycnu[3 bW@sJdZddddddddd d d d d ddddddddddddddddddgZd S)!z'Class ANY (generic) rdata type classes.ZAFSDBZCDNSKEYZCDSZCERTZCNAMEZDLVZDNAMEZDNSKEYZDSZEUI48ZEUI64ZGPOSZHINFOZHIPZISDNZLOCZMXZNSZNSECZNSEC3Z NSEC3PARAMZTLSAZPTRZRPZRRSIGZRTZSOAZSPFZSSHFPZTXTZX25N)__doc____all__rr/usr/lib/python3.6/__init__.pys>PK ]u[[ __pycache__/SSHFP.cpython-36.pycnu[3 bW @s8ddlZddlZddlZddlZGdddejjZdS)NcsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)SSHFPzSSHFP 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 algorithmfp_type fingerprintcs(tt|j||||_||_||_dS)N)superr__init__rrr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/SSHFP.pyr%szSSHFP.__init__NTcKs d|j|jtjj|jddfS)Nz%d %d %s)Z chunksize)rrdnsrdataZ_hexifyr)rorigin relativizekwr r r to_text,s z SSHFP.to_textc Cst|j}|j}g}x:|jj} | jr,P| jssPK ]w- __pycache__/EUI48.cpython-36.pycnu[3 bWd@s"ddlZGdddejjjZdS)Nc@s eZdZdZdZeddZdS)EUI48zEUI48 record @ivar fingerprint: 48-bit Extended Unique Identifier (EUI-48) @type fingerprint: string @see: rfc7043.txtN)__name__ __module__ __qualname____doc__Zbyte_lenZtext_lenr r /usr/lib/python3.6/EUI48.pyrsr)Zdns.rdtypes.euibaseZdnsZrdtypesZeuibaseZEUIBaserr r r r sPK ]j/jk k $__pycache__/LOC.cpython-36.opt-1.pycnu[3 bW/@sddlmZddlZddlZddlZddlmZmZm Z e dde ddDZ dZ dZd Zd d Zd d ZddZddZddZGdddejjZdS))divisionN)longxrangeround_py2_compatccs|]}td|VqdS) N)r).0ir /usr/lib/python3.6/LOC.py sr gY@g.Ag@@cCsh|dkr dSd}x2tttD]"}|t|tdkr|d}PqW|dksT|dkrdtjjd||S)Nrz%s value out of bounds)rlen_powsrdns exception SyntaxError)whatdescZexprr r r _exponent_of!srcCs|dkrd}|d9}nd}t|d}t|d}||d8}t|d}||d8}t|d}|t|d8}t|}|||||fS)Nrr i6i`ir)rint)rZsignZdegreesZminutessecondsr r r _float_to_tuple.s       rcCsXt|d}|t|dd7}|t|dd7}|t|dd7}t|d|S) Nrr gN@g @g@wKA)float)rvaluer r r _tuple_to_float?s  rcCs4t|}t||d@}|td|d@}|d|S)Nr)rrpow)rrexponentbaser r r _encode_sizeGsr%cCsV|d@}|dkr tjjd||d@d?}|dkrDtjjd|t|td|S)Nr zbad %s exponentrz bad %s baser)rrrrr")rrr#r$r r r _decode_sizeNs r(cseZdZdZddddddgZeeeffdd Zdd d Z e d ddZ d!ddZ e d"ddZ ddZddZeeeddZddZddZeeeddZZS)#LOCaLOC 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 1876latitude longitudealtitudesizehorizontal_precisionvertical_precisionc stt|j||t|ts&t|tr.t|}t|tr@t|}||_t|tsZt|trbt|}t|trtt|}||_ t||_ t||_ t||_ t||_ dS)aInitialize 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/) selfrdclassrdtyper*r+r,r-hprecvprec) __class__r r r1os      z LOC.__init__NTc Ks|jddkrd}nd}|jddkr,d}nd}d|jd|jd|jd |jd ||jd|jd|jd |jd ||jd f }|jtks|jtks|jtkr|d |jd |jd |jd f7}|S) NrrNSEWz(%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)r3origin relativizekwZlat_hemisphereZlong_hemispheretextr r r to_texts&    z LOC.to_textc Csdddddg}dddddg}t}t} t} |j|d<|j} | jr0t| |d<|j} d| kr| jd\} } | jstj j dt| |d<|ddkrtj j dt | }|dks|dks| j rtj j d |dkrd }n|dkrd }nd}|t| |d<|j} n| jr0t| |d<|j} | d krDd|d <n| dkrZtj j d|j|d<|j} | jrpt| |d<|j} d| krR| jd\} } | jstj j dt| |d<|ddkrtj j dt | }|dks|dks| j rtj j d|dkr$d }n|dkr4d }nd}|t| |d<|j} n| jrpt| |d<|j} | dkrd|d <n| dkrtj j d|j} | ddkr| dd} t | d}|j j}|js|j}|ddkr|dd}t |d}|j j}|js|j}|ddkr@|dd}t |d} |j j}|js|j}|d dkr|dd!}t |d} |j|||||||| | S)"Nrr .zbad latitude seconds valuer<zlatitude seconds >= 60rzbad latitude milliseconds valuedrr:rr9zbad latitude hemisphere valuezbad longitude seconds valuezlongitude seconds >= 60z bad longitude milliseconds valuer<r;zbad longitude hemisphere valuemgY@rrrrrrrrrr)r=r>r?Zget_intZ get_stringisdigitrsplitrrrrrgetZunescapeZ is_eol_or_eofrZget_eol)clsr4r5tokr@rAr*r+r-r6r7tr millisecondslrHr,tokenrr r r from_texts                                              z LOC.from_textc Cs|jdd|jdd|jdd|jd|jd}td |}|jdd|jdd|jdd|jd|jd}td |}t|jtd }t|jd }t|jd } t|jd } tj dd|| | |||} |j | dS)Nri6r i`rirrlir-zhorizontal precisionzvertical precisionz!BBBBIII) r*rr+r,r%r-r.r/structpackwrite) r3filecompressr@rOr*r+r,r-r6r7wirer r r to_wire s( (    z LOC.to_wirec Cstjd||||\}}} } } } } | tdkrHt| tdd} nd ttd| d} | dksp| dkr|tjjd| tdkrt| tdd} ndttd| d} | dks| dkrtjjdt| d } t|d }t| d } t| d } |||| | | || | S)Nz!BBBBIIIli6r gV@z bad latitudegf@z bad longitudegcAr-zhorizontal precisionzvertical precisionrgVrgf)rSunpackrrrrZ FormErrorr()rLr4r5rXZcurrentZrdlenr@versionr-r6r7r*r+r,r r r from_wires"&         z LOC.from_wirecCs t|jS)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|jS)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.rdataZ dns._compatrrrtuplerangerr=r>r?rrrr%r(ZrdataZRdatar)r r r r s   PK ]ݹSXX__pycache__/MX.cpython-36.pycnu[3 bWi@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)MXz MX recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/MX.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZMXBaserrrrrsPK ]h __pycache__/SOA.cpython-36.pycnu[3 bW@s8ddlZddlZddlZddlZGdddejjZdS)NcsveZdZdZdddddddgZfd d Zdd dZedddZdddZ dddZ edddZ dddZ Z S)SOAaSOA 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 1035mnamernameserialrefreshretryexpireminimumc s@tt|j||||_||_||_||_||_||_| |_ dS)N) superr__init__rrrrrrr ) selfrdclassrdtyperrrrrrr ) __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)rchoose_relativityrrrrrr )r origin relativizekwrrrrrto_text:s z SOA.to_textc Csp|j}|j}|j||}|j||}|j}|j} |j} |j} |j} |j||||||| | | | S)N)Zget_namerZ get_uint32Zget_ttlZget_eol) clsr rtokrrrrrrrrr rrr from_textAs  z SOA.from_textcCsL|jj||||jj|||tjd|j|j|j|j|j }|j |dS)Nz!IIIII) rto_wirerstructpackrrrrr write)r filecompressr five_intsrrrrPs z SOA.to_wirecCs6|jj||jj|tjd|j|j|j|j|j S)Nz!IIIII) r to_digestablerrrrrrrr )r rrrrr!WszSOA.to_digestablec Cstjj|d|||\}}||7}||8}tjj|d|||\} }||7}||8}|dkrltjjtjd||||} |dk r|j|}| j|} ||||| | d| d| d| d| d S)Nz!IIIIIr)dnsname from_wireZ exceptionZ FormErrorrunpackr) 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__r r classmethodrrr!r)r __classcell__rr)rrrs      r)rZ dns.exceptionr'Z dns.rdataZdns.nameZrdataZRdatarrrrrsPK ]UXTXX#__pycache__/DS.cpython-36.opt-1.pycnu[3 bWi@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)DSz DS recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/DS.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrrsPK ]\m __pycache__/HIP.cpython-36.pycnu[3 bW0@sHddlZddlZddlZddlZddlZddlZGdddejjZ dS)NcsfeZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ dddZ 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 5205hit algorithmkeyserverscs.tt|j||||_||_||_||_dS)N)superr__init__rrrr)selfrdclassrdtyperrrr) __class__/usr/lib/python3.6/HIP.pyr)s z HIP.__init__NTc Kstj|jj}tj|jjddj}d}g}x |jD]}|j |j ||q8Wt |dkrz|ddj dd|D7}d|j |||fS) N r css|]}|jVqdS)N)Z to_unicode).0xr r r 8szHIP.to_text..z %u %s %s%s)binasciiZhexlifyrdecodebase64Z b64encoderreplacerappendchoose_relativitylenjoinr) r origin relativizekwrrtextrserverr r rto_text0s  z HIP.to_textc Cs|j}tj|jj}t|dkr2tjjdt j |jj}g} x<|j } | j r\Ptj j| j|} | j||| j| qJW||||||| S)Nz HIT too long)Z get_uint8rZ unhexlifyZ get_stringencoderdnsZ exception SyntaxErrorrZ b64decodegetZ is_eol_or_eofname from_textvaluerr) clsr r tokrrrrrrtokenr"r r rr*;s   z HIP.from_textcCsft|j}t|j}|jtjd||j||j|j|j|jx|jD]}|j|d|qLWdS)Nz!BBH) rrrwritestructpackrrto_wire)r filecompressrlhlkr"r r rr2Ls     z HIP.to_wirecCstjd|||d\}}} |d7}|d8}||||j} ||7}||8}|||| j} || 7}|| 8}g} xV|dkrtjj|d|||\} }||7}||8}|dk r| j|} | j| q|W|||| || | S)Nz!BBHr)r0unpackZunwrapr&r) from_wirerr)r,r r ZwireZcurrentZrdlenrr5rr6rrrr"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 rs PK ]T/[[$__pycache__/CDS.cpython-36.opt-1.pycnu[3 bWk@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)CDSz CDS recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/CDS.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrrsPK ],__pycache__/ISDN.cpython-36.pycnu[3 bW @sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecsXeZdZdZddgZfddZddd Zedd d Zdd d Z edddZ Z S)ISDNzISDN record @ivar address: the ISDN address @type address: string @ivar subaddress: the ISDN subaddress (or '' if not present) @type subaddress: string @see: RFC 1183address subaddresscsNtt|j||t|tr(|j|_n||_t|trD|j|_n||_dS)N)superr__init__ isinstancerencoderr)selfrdclassrdtyperr) __class__/usr/lib/python3.6/ISDN.pyr$s    z ISDN.__init__NTcKs<|jr&dtjj|jtjj|jfSdtjj|jSdS)Nz "%s" "%s"z"%s")rdnsrdataZ _escapifyr)r origin relativizekwrrrto_text/sz ISDN.to_textc CsP|j}|j}|js,|j||j}n|j|d}|j|||||S)N)Z get_stringgetZ is_eol_or_eofZungetZget_eol) clsr r tokrrrtrrrr from_text6s   zISDN.from_textcCstt|j}|dkst|jtjd||j|jt|j}|dkrp|dksRt|jtjd||j|jdS)Nz!Br)lenrAssertionErrorwritestructpackr)r filecompressrlrrrto_wireCs     z ISDN.to_wirec Cs||}|d7}|d8}||kr(tjj||||j}||7}||8}|dkr||}|d7}|d8}||kr|tjj||||j} nd} ||||| S)Nrr)rZ exceptionZ FormErrorZunwrap) rr r 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.tokenizerZ dns._compatrrZRdatarrrrrs  PK ]?rjj__pycache__/RT.cpython-36.pycnu[3 bW{@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)RTz RT recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/RT.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedDowncasingMXrrrrrsPK ].M__pycache__/X25.cpython-36.pycnu[3 bWG@sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)X25z\X25 record @ivar address: the PSDN address @type address: string @see: RFC 1183addresscs2tt|j||t|tr(|j|_n||_dS)N)superr__init__ isinstancerencoder)selfrdclassrdtyper) __class__/usr/lib/python3.6/X25.pyr"s  z X25.__init__NTcKsdtjj|jS)Nz"%s")dnsrdataZ _escapifyr)r origin relativizekwr r rto_text)sz X25.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|jdS)Nz!B)lenrAssertionErrorwritestructpack)r filecompressrlr r rto_wire2s  z X25.to_wirec CsH||}|d7}|d8}||kr(tjj||||j}||||S)N)rZ exceptionZ FormErrorZunwrap) rr r ZwireZcurrentZrdlenrr 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.tokenizerZ dns._compatrrZRdatarr r r rs  PK ]__&__pycache__/RRSIG.cpython-36.opt-1.pycnu[3 bW@s|ddlZddlZddlZddlZddlZddlZddlZddlZGdddej j Z ddZ ddZ Gdd d ejjZdS) 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 Cst|dkrtt|dd}t|dd}t|dd}t|dd}t|dd}t|dd}tj||||||dddf S)Nr )lenrintcalendarZtimegm)whatZyearZmonthZdayZhourZminutesecondrrrsigtime_to_posixtime s rcCstjdtj|S)Nz %Y%m%d%H%M%S)timeZstrftimeZgmtime)rrrrposixtime_to_sigtime-src sxeZdZdZdddddddd d g Zfd d Zd dZdddZedddZ dddZ edddZ dddZ 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 algorithmlabels original_ttl expiration inceptionkey_tagsigner signaturec sLtt|j||||_||_||_||_||_||_| |_ | |_ | |_ dS)N) superr__init__rrrrrrrrr ) selfrdclassrdtyperrrrrrrrr ) __class__rrr"LszRRSIG.__init__cCs|jS)N)r)r#rrrcoversZsz RRSIG.coversNTc KsLdtjj|j|j|j|jt|jt|j |j |j j ||tj j|jf S)Nz%s %d %d %d %s %s %d %s %s)dns rdatatypeto_textrrrrrrrrrchoose_relativityrdataZ _base64ifyr )r#origin relativizekwrrrr*]s  z RRSIG.to_textc Cstjj|j}tjj|j}|j}|j} t|j} t|j} |j} |j } | j ||} g}x:|j j }|j rP|jstjj|j|jjqjWdj|}tj|}||||||| | | | | | S)N)r(r) from_textZ get_stringZdnssecZalgorithm_from_textZget_intZget_ttlrZget_namer+getZunescapeZ is_eol_or_eofZ is_identifier exception SyntaxErrorappendvalueencodejoinbase64Z b64decode)clsr$r%tokr-r.rrrrrrrrZchunkstZb64r rrrr1js,        zRRSIG.from_textc CsPtjd|j|j|j|j|j|j|j}|j ||j j |d||j |j dS)Nz!HBBIIIH) structpackrrrrrrrwriterto_wirer )r#filecompressr-headerrrrr@s   z RRSIG.to_wirec Cstjd|||d}|d7}|d8}tjj|d|||\}} || 7}|| 8}|dk rh|j|}||||j} ||||d|d|d|d|d|d|d || S) Nz!HBBIIIHrr r )r=unpackr(name from_wirer.Zunwrap) r:r$r%ZwireZcurrentZrdlenr-rCrZcusedr rrrrKs 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,ZRdatarrrrrs PK ]ab4[[__pycache__/DLV.cpython-36.pycnu[3 bW`@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)DLVz DLV recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/DLV.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrrsPK ]\m $__pycache__/HIP.cpython-36.opt-1.pycnu[3 bW0@sHddlZddlZddlZddlZddlZddlZGdddejjZ dS)NcsfeZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ dddZ 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 5205hit algorithmkeyserverscs.tt|j||||_||_||_||_dS)N)superr__init__rrrr)selfrdclassrdtyperrrr) __class__/usr/lib/python3.6/HIP.pyr)s z HIP.__init__NTc Kstj|jj}tj|jjddj}d}g}x |jD]}|j |j ||q8Wt |dkrz|ddj dd|D7}d|j |||fS) N r css|]}|jVqdS)N)Z to_unicode).0xr r r 8szHIP.to_text..z %u %s %s%s)binasciiZhexlifyrdecodebase64Z b64encoderreplacerappendchoose_relativitylenjoinr) r origin relativizekwrrtextrserverr r rto_text0s  z HIP.to_textc Cs|j}tj|jj}t|dkr2tjjdt j |jj}g} x<|j } | j r\Ptj j| j|} | j||| j| qJW||||||| S)Nz HIT too long)Z get_uint8rZ unhexlifyZ get_stringencoderdnsZ exception SyntaxErrorrZ b64decodegetZ is_eol_or_eofname from_textvaluerr) clsr r tokrrrrrrtokenr"r r rr*;s   z HIP.from_textcCsft|j}t|j}|jtjd||j||j|j|j|jx|jD]}|j|d|qLWdS)Nz!BBH) rrrwritestructpackrrto_wire)r filecompressrlhlkr"r r rr2Ls     z HIP.to_wirecCstjd|||d\}}} |d7}|d8}||||j} ||7}||8}|||| j} || 7}|| 8}g} xV|dkrtjj|d|||\} }||7}||8}|dk r| j|} | j| q|W|||| || | S)Nz!BBHr)r0unpackZunwrapr&r) from_wirerr)r,r r ZwireZcurrentZrdlenrr5rr6rrrr"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 rs PK ]r __pycache__/NSEC.cpython-36.pycnu[3 bWR@sLddlZddlZddlZddlZddlZddlmZGdddejj Z dS)N)xrangecsbeZdZdZddgZfddZddd Zedd d Zdd d Z edddZ dddZ Z S)NSECzNSEC 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) tuplesnextwindowscs"tt|j||||_||_dS)N)superr__init__rr)selfrdclassrdtyperr) __class__/usr/lib/python3.6/NSEC.pyr$sz NSEC.__init__NTc Ks|jj||}d}x|jD]\}}g}x`tdt|D]N} || } x@tddD]2} | d| ?@rN|jtjj|d| d| qNWq6W|ddj |7}qWd||fS)Nr z%s%s) rchoose_relativityrrlenappenddns rdatatypeto_textjoin) rorigin relativizekwrtextwindowbitmapbitsibytejr r r r)s   z NSEC.to_textcCsB|j}|j||}g}xZ|jj}|jr0Ptjj|j} | dkrRtj j d| dkrftj j d|j | qW|j d} d} d} t dd} g}x|D]|} | | krq| } | d}|| kr|j | | d| ft dd} |} | d}|d}|d}|d } | |d |?B| |<qW|j | | d| f|||||S) NrzNSEC with bit 0izNSEC with bit > 65535 rrr)Zget_namergetZunescapeZ is_eol_or_eofrr from_textvalue exception SyntaxErrorrsort bytearray)clsr r tokrrrZrdtypestokenZnrdtyperoctetsZ prior_rdtyperrZ new_windowoffsetr"bitr r r r(7sF       zNSEC.from_textcCsJ|jj|d|x4|jD]*\}}|jtjd|t||j|qWdS)Nz!BB)rto_wirerwritestructpackr)rfilecompressrrrr r r r4^sz NSEC.to_wirec Cstjj|d|||\}}||7}||8}g} x|dkr|dkrPtjjd||} ||d} | dkst| dkrtjjd|d7}|d8}|| krtjjdt|||| j} || 7}|| 8}| j| | fq4W|dk r|j|}||||| S) NrzNSEC too shortr&r%zbad NSEC octetszbad NSEC bitmap length) rname 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 )r r rs   &  r) r6Z dns.exceptionrZ dns.rdataZ dns.rdatatypeZdns.nameZ dns._compatrZrdataZRdatarr r r r s  PK ]u[[&__pycache__/SSHFP.cpython-36.opt-1.pycnu[3 bW @s8ddlZddlZddlZddlZGdddejjZdS)NcsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)SSHFPzSSHFP 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 algorithmfp_type fingerprintcs(tt|j||||_||_||_dS)N)superr__init__rrr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/SSHFP.pyr%szSSHFP.__init__NTcKs d|j|jtjj|jddfS)Nz%d %d %s)Z chunksize)rrdnsrdataZ_hexifyr)rorigin relativizekwr r r to_text,s z SSHFP.to_textc Cst|j}|j}g}x:|jj} | jr,P| jssPK ]ݹSXX#__pycache__/MX.cpython-36.opt-1.pycnu[3 bWi@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)MXz MX recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/MX.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZMXBaserrrrrsPK ][[QXX__pycache__/NS.cpython-36.pycnu[3 bWi@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)NSz NS recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/NS.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrrsPK ]$__pycache__/X25.cpython-36.opt-1.pycnu[3 bWG@sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)X25z\X25 record @ivar address: the PSDN address @type address: string @see: RFC 1183addresscs2tt|j||t|tr(|j|_n||_dS)N)superr__init__ isinstancerencoder)selfrdclassrdtyper) __class__/usr/lib/python3.6/X25.pyr"s  z X25.__init__NTcKsdtjj|jS)Nz"%s")dnsrdataZ _escapifyr)r origin relativizekwr r rto_text)sz X25.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|jdS)Nz!B)lenrwritestructpack)r filecompressrlr r rto_wire2s z X25.to_wirec CsH||}|d7}|d8}||kr(tjj||||j}||||S)N)rZ exceptionZ FormErrorZunwrap) rr r ZwireZcurrentZrdlenrrrr 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.tokenizerZ dns._compatrrZRdatarr r r rs  PK ]ab4[[$__pycache__/DLV.cpython-36.opt-1.pycnu[3 bW`@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)DLVz DLV recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/DLV.pyrsr)Zdns.rdtypes.dsbaseZdnsZrdtypesZdsbaseZDSBaserrrrrsPK ]}<<__pycache__/GPOS.cpython-36.pycnu[3 bW@sXddlZddlZddlZddlZddlmZmZddZddZ Gdddej j Z dS) N)long text_typecCs|ddks|ddkr$|dd}|jr0dS|jd\}}|dkrV|dkrVtjj|dk rv|jj rvtjj|dk r|jj rtjjdS) Nr-+.-+)isdigitsplitdns exception FormErrordecode)Zwhatleftrightr/usr/lib/python3.6/GPOS.py_validate_float_strings rcCst|tr|jS|S)N) isinstancerencode)valuerrr _sanitize&s rcseZdZdZdddgZfddZd!d d Zed"d d Zd#d dZ ed$ddZ ddZ ddZ e e e ddZddZddZe eeddZddZddZe eed dZZS)%GPOSzGPOS record @ivar latitude: latitude @type latitude: string @ivar longitude: longitude @type longitude: string @ivar altitude: altitude @type altitude: string @see: RFC 1712latitude longitudealtitudecstt|j||t|ts0t|ts0t|tr8t|}t|tsVt|tsVt|tr^t|}t|ts|t|ts|t|trt|}t|}t|}t|}t |t |t |||_ ||_ ||_ dS)N) superr__init__rfloatintrstrrrrrr)selfrdclassrdtyperrr) __class__rrr:s,         z GPOS.__init__NTcKs d|jj|jj|jjfS)Nz%s %s %s)rrrr)r#origin relativizekwrrrto_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_textcCst|j}|dkst|jtjd||j|jt|j}|dksJt|jtjd||j|jt|j}|dks~t|jtjd||j|jdS)Nz!B)lenrAssertionErrorwritestructpackrr)r#filecompressr'lrrrto_wire_s        z GPOS.to_wirec Cs||}|d7}|d8}||kr(tjj||||j}||7}||8}||}|d7}|d8}||krttjj||||j} ||7}||8}||}|d7}|d8}||krtjj||||j} ||||| | S)Nr)r rrZunwrap) r+r$r%ZwireZcurrentZrdlenr'r6rrrrrr from_wirems.zGPOS.from_wirecCs t|jS)N)r r)r#rrr_get_float_latitudeszGPOS._get_float_latitudecCst||_dS)N)r"r)r#rrrr_set_float_latitudeszGPOS._set_float_latitudez"latitude as a floating point value)doccCs t|jS)N)r r)r#rrr_get_float_longitudeszGPOS._get_float_longitudecCst||_dS)N)r"r)r#rrrr_set_float_longitudeszGPOS._set_float_longitudez#longitude as a floating point valuecCs t|jS)N)r r)r#rrr_get_float_altitudeszGPOS._get_float_altitudecCst||_dS)N)r"r)r#rrrr_set_float_altitudeszGPOS._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.tokenizerZ dns._compatrrrrZrdataZRdatarrrrrsPK ]M__pycache__/RP.cpython-36.pycnu[3 bW @s0ddlZddlZddlZGdddejjZdS)NcsleZdZdZddgZfddZddd Zedd d Zdd d Z dddZ edddZ dddZ 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 1183mboxtxtcs"tt|j||||_||_dS)N)superr__init__rr)selfrdclassrdtyperr) __class__/usr/lib/python3.6/RP.pyr"sz RP.__init__NTcKs0|jj||}|jj||}dt|t|fS)Nz%s %s)rchoose_relativityrstr)rorigin relativizekwrrr r r to_text'sz RP.to_textcCs>|j}|j}|j||}|j||}|j|||||S)N)Zget_namer Zget_eol)clsrr tokrrrrr r r from_text,s   z RP.from_textcCs$|jj|d||jj|d|dS)N)rto_wirer)rfilecompressrr r r r5sz RP.to_wirecCs|jj||jj|S)N)r to_digestabler)rrr r r r9s zRP.to_digestablec Cstjj|d|||\}}||7}||8}|dkr>tjjtjj|d|||\} }||krltjj|dk r|j|}| j|} ||||| S)Nr)dnsname from_wireZ exceptionZ FormErrorr) rrr ZwireZcurrentZrdlenrrZcusedrr r r r=s    z RP.from_wirecCs$|jj|||_|jj|||_dS)N)rr r)rrrr r r r NszRP.choose_relativity)NT)NT)NN)N)N)NT)__name__ __module__ __qualname____doc__ __slots__rr classmethodrrrrr __classcell__r r )r r rs       r)Z dns.exceptionrZ dns.rdataZdns.nameZrdataZRdatarr r r r sPK ]!F0'__pycache__/DNSKEY.cpython-36.opt-1.pycnu[3 bW@s:ddlZddlmZmZddgZGdddejjjZdS)N)flags_to_text_setflags_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 sPK ]+((__pycache__/CAA.cpython-36.pycnu[3 bW> @s8ddlZddlZddlZddlZGdddejjZdS)NcsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)CAAzCAA (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 6844flagstagvaluecs(tt|j||||_||_||_dS)N)superr__init__rrr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/CAA.pyr%sz CAA.__init__NTcKs$d|jtjj|jtjj|jfS)Nz %u %s "%s")rdnsrdataZ _escapifyrr)rorigin relativizekwr r r to_text+s z CAA.to_textc Cs\|j}|jj}t|dkr,tjjd|js@tjjd|jj}||||||S)Nz tag too longztag is not alphanumeric)Z get_uint8Z get_stringencodelenrZ exception SyntaxErrorisalnum) clsr r tokrrrrrr r r from_text0s     z CAA.from_textcCsX|jtjd|jt|j}|dks*t|jtjd||j|j|j|jdS)Nz!B)writestructpackrrrAssertionErrorr)rfilecompressrlr r r to_wire;s    z CAA.to_wirec Cs\tjd|||d\}}|d7}||||} |||||d} ||||| | S)Nz!BB)runpack) 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 )r r rs     r)rZ dns.exceptionrZ dns.rdataZ dns.tokenizerrZRdatarr r r r sPK ]!s&__pycache__/DNAME.cpython-36.opt-1.pycnu[3 bW@s"ddlZGdddejjjZdS)Nc@seZdZdZdddZdS)DNAMEz DNAME recordNcCs |jj|S)N)target to_digestable)selforiginr/usr/lib/python3.6/DNAME.pyrszDNAME.to_digestable)N)__name__ __module__ __qualname____doc__rrrrrrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZUncompressedNSrrrrrsPK ]^$__pycache__/CAA.cpython-36.opt-1.pycnu[3 bW> @s8ddlZddlZddlZddlZGdddejjZdS)NcsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)CAAzCAA (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 6844flagstagvaluecs(tt|j||||_||_||_dS)N)superr__init__rrr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/CAA.pyr%sz CAA.__init__NTcKs$d|jtjj|jtjj|jfS)Nz %u %s "%s")rdnsrdataZ _escapifyrr)rorigin relativizekwr r r to_text+s z CAA.to_textc Cs\|j}|jj}t|dkr,tjjd|js@tjjd|jj}||||||S)Nz tag too longztag is not alphanumeric)Z get_uint8Z get_stringencodelenrZ exception SyntaxErrorisalnum) clsr r tokrrrrrr r r from_text0s     z CAA.from_textcCsL|jtjd|jt|j}|jtjd||j|j|j|jdS)Nz!B)writestructpackrrrr)rfilecompressrlr r r to_wire;s   z CAA.to_wirec Cs\tjd|||d\}}|d7}||||} |||||d} ||||| | S)Nz!BB)runpack) 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 )r r rs     r)rZ dns.exceptionrZ dns.rdataZ dns.tokenizerrZRdatarr r r r sPK ]r __pycache__/HINFO.cpython-36.pycnu[3 bWi @sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecsXeZdZdZddgZfddZddd Zedd d Zdd d Z edddZ Z S)HINFOzHINFO record @ivar cpu: the CPU type @type cpu: string @ivar os: the OS type @type os: string @see: RFC 1035cpuoscsNtt|j||t|tr(|j|_n||_t|trD|j|_n||_dS)N)superr__init__ isinstancerencoderr)selfrdclassrdtyperr) __class__/usr/lib/python3.6/HINFO.pyr$s    zHINFO.__init__NTcKs dtjj|jtjj|jfS)Nz "%s" "%s")dnsrdataZ _escapifyrr)r origin relativizekwrrrto_text/sz HINFO.to_textcCs&|j}|j}|j|||||S)N)Z get_stringZget_eol)clsr r tokrrrrrrr from_text3szHINFO.from_textcCslt|j}|dkst|jtjd||j|jt|j}|dksJt|jtjd||j|jdS)Nz!B)lenrAssertionErrorwritestructpackr)r filecompressrlrrrto_wire:s     z HINFO.to_wirec Cs||}|d7}|d8}||kr(tjj||||j}||7}||8}||}|d7}|d8}||krttjj||||j} ||||| S)N)rZ exceptionZ FormErrorZunwrap) rr r 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.tokenizerZ dns._compatrrZRdatarrrrrs  PK ]%__pycache__/TLSA.cpython-36.opt-1.pycnu[3 bW @s8ddlZddlZddlZddlZGdddejjZdS)Ncs\eZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ Z S)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 6698usageselectormtypecertcs.tt|j||||_||_||_||_dS)N)superr__init__rrrr)selfrdclassrdtyperrrr) __class__/usr/lib/python3.6/TLSA.pyr's z TLSA.__init__NTcKs$d|j|j|jtjj|jddfS)Nz %d %d %d %s)Z chunksize)rrrdnsrdataZ_hexifyr)r origin relativizekwr r rto_text/s  z TLSA.to_textc Cs~|j}|j}|j}g} x:|jj} | jr4P| jsDtjj| j| j j qWdj | } t j | } ||||||| S)N)Z get_uint8getZunescapeZ is_eol_or_eofZ is_identifierrZ exception SyntaxErrorappendvalueencodejoinbinasciiZ unhexlify) clsr r tokrrrrrZ cert_chunkstrr r r from_text6s   zTLSA.from_textcCs0tjd|j|j|j}|j||j|jdS)Nz!BBB)structpackrrrwriter)r filecompressrheaderr r rto_wireGs z TLSA.to_wirec CsZtjd|||d}|d7}|d8}||||j}||||d|d|d|S)Nz!BBBr)r"unpackZunwrap) rr r ZwireZcurrentZrdlenrr'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 rsPK ]5rr$__pycache__/SPF.cpython-36.opt-1.pycnu[3 bW@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)SPFzSPF record @see: RFC 4408N)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/SPF.pyrsr)Zdns.rdtypes.txtbaseZdnsZrdtypesZtxtbaseZTXTBaserrrrrsPK ]?rjj#__pycache__/RT.cpython-36.opt-1.pycnu[3 bW{@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)RTz RT recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/RT.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedDowncasingMXrrrrrsPK ]Ip p __pycache__/CSYNC.cpython-36.pycnu[3 bW$@sLddlZddlZddlZddlZddlZddlmZGdddejj Z dS)N)xrangecsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)CSYNCzCSYNC 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) tuplesserialflagswindowscs(tt|j||||_||_||_dS)N)superr__init__rrr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/CSYNC.pyr%szCSYNC.__init__NTc Ksd}x|jD]\}}g}x`tdt|D]N}||} x@tddD]2} | d| ?@r@|jtjj|d|d| q@Wq(W|ddj|7}q Wd|j|j |fS)Nr z%d %d%s) rrlenappenddns rdatatypeto_textjoinrr) r origin relativizekwtextwindowbitmapbitsibytejr r rr+s   z CSYNC.to_textcCs@|j}|j}g}xZ|jj} | jr,Ptjj| j} | dkrNtj j d| dkrbtj j d|j | qW|j d} d} d} t dd}g}x|D]|} | | krq| } | d}|| kr|j | |d| ft dd}|} | d}|d}|d}|d } ||d |?B||<qW|j | |d| f||||||S) NrzCSYNC with bit 0izCSYNC with bit > 65535 rrr)Z get_uint32Z get_uint16getZunescapeZ is_eol_or_eofrr from_textvalue exception SyntaxErrorrsort bytearray)clsr r tokrrrrZrdtypestokenZnrdtyperoctetsZ prior_rdtyperrZ new_windowoffsetr"bitr r rr(8sF      zCSYNC.from_textcCsR|jtjd|j|jx4|jD]*\}}|jtjd|t||j|q WdS)Nz!IHz!BB)writestructpackrrrr)r filecompressrrrr r rto_wire_sz CSYNC.to_wirec Cs|dkrtjjdtjd|||d\}}|d7}|d8}g} x|dkr|dkrbtjjd||} ||d} | dks| dkrtjjd|d 7}|d 8}|| krtjjd t|||| j} || 7}|| 8}| j| | fqFW|||||| S) NzCSYNC too shortz!IHrr&r%zbad CSYNC octetszbad CSYNC bitmap length)rr*Z FormErrorr5unpackr-Zunwrapr) r.r r ZwireZcurrentZrdlenrrrrrr1rr 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.nameZ dns._compatrZrdataZRdatarr r r rs  PK ]eQ?? __pycache__/AFSDB.cpython-36.pycnu[3 bW8@s"ddlZGdddejjjZdS)Nc@sDeZdZdZddZddZeeeZddZdd Z eee Z d S) AFSDBzAFSDB record @ivar subtype: the subtype value @type subtype: int @ivar hostname: the hostname name @type hostname: dns.name.Name objectcCs|jS)N) preference)selfr/usr/lib/python3.6/AFSDB.py get_subtype'szAFSDB.get_subtypecCs ||_dS)N)r)rsubtyperrr set_subtype*szAFSDB.set_subtypecCs|jS)N)exchange)rrrr get_hostname/szAFSDB.get_hostnamecCs ||_dS)N)r )rhostnamerrr set_hostname2szAFSDB.set_hostnameN) __name__ __module__ __qualname____doc__rr propertyrr r r rrrrrs  r)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedDowncasingMXrrrrrsPK ]w-&__pycache__/EUI48.cpython-36.opt-1.pycnu[3 bWd@s"ddlZGdddejjjZdS)Nc@s eZdZdZdZeddZdS)EUI48zEUI48 record @ivar fingerprint: 48-bit Extended Unique Identifier (EUI-48) @type fingerprint: string @see: rfc7043.txtN)__name__ __module__ __qualname____doc__Zbyte_lenZtext_lenr r /usr/lib/python3.6/EUI48.pyrsr)Zdns.rdtypes.euibaseZdnsZrdtypesZeuibaseZEUIBaserr r r r sPK ]#c .. __pycache__/CNAME.cpython-36.pycnu[3 bW<@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)CNAMEzCNAME 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.nsbaseZdnsZrdtypesZnsbaseZNSBaserrrrrsPK ]!s __pycache__/DNAME.cpython-36.pycnu[3 bW@s"ddlZGdddejjjZdS)Nc@seZdZdZdddZdS)DNAMEz DNAME recordNcCs |jj|S)N)target to_digestable)selforiginr/usr/lib/python3.6/DNAME.pyrszDNAME.to_digestable)N)__name__ __module__ __qualname____doc__rrrrrrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZUncompressedNSrrrrrsPK ]r %__pycache__/NSEC.cpython-36.opt-1.pycnu[3 bWR@sLddlZddlZddlZddlZddlZddlmZGdddejj Z dS)N)xrangecsbeZdZdZddgZfddZddd Zedd d Zdd d Z edddZ dddZ Z S)NSECzNSEC 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) tuplesnextwindowscs"tt|j||||_||_dS)N)superr__init__rr)selfrdclassrdtyperr) __class__/usr/lib/python3.6/NSEC.pyr$sz NSEC.__init__NTc Ks|jj||}d}x|jD]\}}g}x`tdt|D]N} || } x@tddD]2} | d| ?@rN|jtjj|d| d| qNWq6W|ddj |7}qWd||fS)Nr z%s%s) rchoose_relativityrrlenappenddns rdatatypeto_textjoin) rorigin relativizekwrtextwindowbitmapbitsibytejr r r r)s   z NSEC.to_textcCsB|j}|j||}g}xZ|jj}|jr0Ptjj|j} | dkrRtj j d| dkrftj j d|j | qW|j d} d} d} t dd} g}x|D]|} | | krq| } | d}|| kr|j | | d| ft dd} |} | d}|d}|d}|d } | |d |?B| |<qW|j | | d| f|||||S) NrzNSEC with bit 0izNSEC with bit > 65535 rrr)Zget_namergetZunescapeZ is_eol_or_eofrr from_textvalue exception SyntaxErrorrsort bytearray)clsr r tokrrrZrdtypestokenZnrdtyperoctetsZ prior_rdtyperrZ new_windowoffsetr"bitr r r r(7sF       zNSEC.from_textcCsJ|jj|d|x4|jD]*\}}|jtjd|t||j|qWdS)Nz!BB)rto_wirerwritestructpackr)rfilecompressrrrr r r r4^sz NSEC.to_wirec Cstjj|d|||\}}||7}||8}g} x|dkr|dkrPtjjd||} ||d} | dkst| dkrtjjd|d7}|d8}|| krtjjdt|||| j} || 7}|| 8}| j| | fq4W|dk r|j|}||||| S) NrzNSEC too shortr&r%zbad NSEC octetszbad NSEC bitmap length) rname 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 )r r rs   &  r) r6Z dns.exceptionrZ dns.rdataZ dns.rdatatypeZdns.nameZ dns._compatrZrdataZRdatarr r r r s  PK ] __pycache__/EUI64.cpython-36.pycnu[3 bWn@s"ddlZGdddejjjZdS)Nc@s eZdZdZdZeddZdS)EUI64zEUI64 record @ivar fingerprint: 64-bit Extended Unique Identifier (EUI-64) @type fingerprint: string @see: rfc7043.txtN)__name__ __module__ __qualname____doc__Zbyte_lenZtext_lenr r /usr/lib/python3.6/EUI64.pyrsr)Zdns.rdtypes.euibaseZdnsZrdtypesZeuibaseZEUIBaserr r r r sPK ]ޑ j%__pycache__/ISDN.cpython-36.opt-1.pycnu[3 bW @sDddlZddlZddlZddlZddlmZGdddejjZ dS)N) text_typecsXeZdZdZddgZfddZddd Zedd d Zdd d Z edddZ Z S)ISDNzISDN record @ivar address: the ISDN address @type address: string @ivar subaddress: the ISDN subaddress (or '' if not present) @type subaddress: string @see: RFC 1183address subaddresscsNtt|j||t|tr(|j|_n||_t|trD|j|_n||_dS)N)superr__init__ isinstancerencoderr)selfrdclassrdtyperr) __class__/usr/lib/python3.6/ISDN.pyr$s    z ISDN.__init__NTcKs<|jr&dtjj|jtjj|jfSdtjj|jSdS)Nz "%s" "%s"z"%s")rdnsrdataZ _escapifyr)r origin relativizekwrrrto_text/sz ISDN.to_textc CsP|j}|j}|js,|j||j}n|j|d}|j|||||S)N)Z get_stringgetZ is_eol_or_eofZungetZget_eol) clsr r tokrrrtrrrr from_text6s   zISDN.from_textcCs\t|j}|jtjd||j|jt|j}|dkrX|jtjd||j|jdS)Nz!Br)lenrwritestructpackr)r filecompressrlrrrto_wireCs   z ISDN.to_wirec Cs||}|d7}|d8}||kr(tjj||||j}||7}||8}|dkr||}|d7}|d8}||kr|tjj||||j} nd} ||||| S)Nrr)rZ exceptionZ FormErrorZunwrap) rr r 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.tokenizerZ dns._compatrrZRdatarrrrrs  PK ] {&__pycache__/NSEC3.cpython-36.opt-1.pycnu[3 bW @sddlZddlZddlZddlZddlZddlZddlZddlm Z m Z yej ddZ ej ddZ Wn,ek rej ddZ ej ddZ YnXdZdZGdd d ejjZdS) N)xrange text_typeZ 0123456789ABCDEFGHIJKLMNOPQRSTUVZ ABCDEFGHIJKLMNOPQRSTUVWXYZ234567s 0123456789ABCDEFGHIJKLMNOPQRSTUVs ABCDEFGHIJKLMNOPQRSTUVWXYZ234567cs`eZdZdZddddddgZfdd Zdd d ZedddZdddZ edddZ Z S)NSEC3aNSEC3 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 algorithmflags iterationssaltnextwindowsc sPtt|j||||_||_||_t|tr:|j|_ n||_ ||_ ||_ dS)N) superr__init__rrr isinstancerencoder r r ) selfrdclassrdtyperrrr r r ) __class__/usr/lib/python3.6/NSEC3.pyr ?s  zNSEC3.__init__NTc Kstj|jjtjj}|jdkr*d}ntj |jj}d}x|j D]\}}g} x`t dt |D]N} || } x@t ddD]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 translateb32_normal_to_hexlowerdecoder binasciiZhexlifyr rlenappenddns rdatatypeto_textjoinrrr) rorigin relativizekwr r textwindowbitmapbitsibytejrrrr'Ls"      z NSEC3.to_textc Cs|j}|j}|j}|j} | dkr.d} ntj| jd} |jjdjjt} t j | } g} xZ|j j } | j r|Ptjj| j} | dkrtjjd| dkrtjjd| j| qfW| jd}d}d}tdd }g}x| D]} | |krq| }| d }||krD|dkr4|j|d j|d|ftdd }|}| d }|d }|d }|d }||d|?B||<qW|dkr|j||d|f||||||| | |S)NrrasciirzNSEC3 with bit 0izNSEC3 with bit > 65535 rrrrr)Z get_uint8Z get_uint16Z get_stringr"Z unhexlifyrupperrb32_hex_to_normalrZ b32decodegetZunescapeZ is_eol_or_eofr%r& from_textvalue exception SyntaxErrorr$sort bytearrayr()clsrrtokr)r*rrrr r ZrdtypestokenZnrdtyper-octetsZ prior_rdtyper.r Z new_windowoffsetr1bitrrrr9`s\          zNSEC3.from_textcCst|j}|jtjd|j|j|j||j|jt|j}|jtjd||j|jx4|j D]*\}}|jtjd|t||j|qdWdS)Nz!BBHBz!Bz!BB) r#r writestructpackrrrr r )rfilecompressr)lr-r.rrrto_wires     z NSEC3.to_wirec CsZtjd|||d\}}} } |d7}|d8}|||| j} || 7}|| 8}||} |d7}|d8}|||| j} || 7}|| 8}g}x|dkrB|dkrtjjd||}||d}|dks|dkrtjjd|d 7}|d 8}||kr tjjd t||||j}||7}||8}|j||fqW|||||| | | |S) Nz!BBHBrrzNSEC3 too shortr5zbad NSEC3 octetszbad NSEC3 bitmap length)rFunpackZunwrapr%r;Z FormErrorr>r$)r?rrZwireZcurrentZrdlenr)rrrZslenr Znlenr r r-rBr.rrr from_wires<       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.rdatatypeZ dns._compatrr maketransr7rAttributeErrorbytesZSHA1ZOPTOUTZrdataZRdatarrrrrs(  PK ] 2//LOC.pynu[# 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") PK ]n{{RT.pynu[# 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""" PK ]c# TLSA.pynu[# 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) PK ]?ddEUI48.pynu[# Copyright (C) 2015 Red Hat, Inc. # Author: Petr Spacek # # 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 PK ]y1sGPOS.pynu[# 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") PK ]x > > CAA.pynu[# 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) PK ]&͡NSEC3.pynu[# 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) PK ][$$$CSYNC.pynu[# 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) PK ]Qx ISDN.pynu[# 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) PK ]o( <<CNAME.pynu[# 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.""" PK ]k9  NSEC3PARAM.pynu[# 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) PK ]-kkCDS.pynu[# 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""" PK ],iiMX.pynu[# 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""" PK ]``DLV.pynu[# 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""" PK ]о DNSKEY.pynu[# 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""" PK ]GRRNSEC.pynu[# 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) PK ]ϝs88AFSDB.pynu[# 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) PK ]igSOA.pynu[# 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) PK ]U&SPF.pynu[# 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""" PK ]΍JBiiDS.pynu[# 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""" PK ]EAVkkPTR.pynu[# 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""" PK ]ZS00HIP.pynu[# 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 PK ]BdDNAME.pynu[# 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) PK ]XRRSIG.pynu[# 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) PK ]o:Ri i HINFO.pynu[# 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) PK ] RP.pynu[# 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) PK ] CDNSKEY.pynu[# 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""" PK ]7R R URI.pynu[# 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) PK ]0 __init__.pynu[# 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', ] PK ][ReiiNS.pynu[# 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""" PK ]5_W5AVC.pynu[# 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}""" PK ]3,nnEUI64.pynu[# Copyright (C) 2015 Red Hat, Inc. # Author: Petr Spacek # # 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 PK ]CnnTXT.pynu[# 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""" PK ]° SSHFP.pynu[# 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) PK ]`0ooCERT.pynu[PK ]CNcGGX25.pynu[PK ]h $#__pycache__/SOA.cpython-36.opt-1.pycnu[PK ]!F0!W%__pycache__/DNSKEY.cpython-36.pycnu[PK ]&c%{'__pycache__/GPOS.cpython-36.opt-1.pycnu[PK ]j/jk k 7__pycache__/LOC.cpython-36.pycnu[PK ]?['X__pycache__/URI.cpython-36.pycnu[PK ]&a__pycache__/EUI64.cpython-36.opt-1.pycnu[PK ]UXTXXd__pycache__/DS.cpython-36.pycnu[PK ]) ) %e__pycache__/NSEC3PARAM.cpython-36.pycnu[PK ]>$2o__pycache__/AVC.cpython-36.opt-1.pycnu[PK ]#c ..&w__pycache__/AVC.cpython-36.pycnu[PK ]T/[["y__pycache__/CDS.cpython-36.pycnu[PK ]j+ z__pycache__/CERT.cpython-36.pycnu[PK ](__pycache__/CDNSKEY.cpython-36.opt-1.pycnu[PK ]5rr&__pycache__/SPF.cpython-36.pycnu[PK ]) ) +__pycache__/NSEC3PARAM.cpython-36.opt-1.pycnu[PK ]__ j__pycache__/RRSIG.cpython-36.pycnu[PK ]UΔ#__pycache__/__init__.cpython-36.pycnu[PK ]?['$T__pycache__/URI.cpython-36.opt-1.pycnu[PK ];[[${__pycache__/PTR.cpython-36.opt-1.pycnu[PK ]oDB&*__pycache__/HINFO.cpython-36.opt-1.pycnu[PK ][[QXX#I__pycache__/NS.cpython-36.opt-1.pycnu[PK ]eQ??&__pycache__/AFSDB.cpython-36.opt-1.pycnu[PK ]Ip p &__pycache__/CSYNC.cpython-36.opt-1.pycnu[PK ]j+ %O__pycache__/CERT.cpython-36.opt-1.pycnu[PK ] { __pycache__/NSEC3.cpython-36.pycnu[PK ]__pycache__/TLSA.cpython-36.pycnu[PK ];[[__pycache__/PTR.cpython-36.pycnu[PK ]M#~__pycache__/RP.cpython-36.opt-1.pycnu[PK ]"__pycache__/CDNSKEY.cpython-36.pycnu[PK ]UΔ)__pycache__/__init__.cpython-36.opt-1.pycnu[PK ]u[[ 9__pycache__/SSHFP.cpython-36.pycnu[PK ]w-  __pycache__/EUI48.cpython-36.pycnu[PK ]j/jk k $F__pycache__/LOC.cpython-36.opt-1.pycnu[PK ]ݹSXX1__pycache__/MX.cpython-36.pycnu[PK ]h 2__pycache__/SOA.cpython-36.pycnu[PK ]UXTXX#?__pycache__/DS.cpython-36.opt-1.pycnu[PK ]\m A__pycache__/HIP.cpython-36.pycnu[PK ]T/[[$mN__pycache__/CDS.cpython-36.opt-1.pycnu[PK ],P__pycache__/ISDN.cpython-36.pycnu[PK ]?rjjIY__pycache__/RT.cpython-36.pycnu[PK ].M[__pycache__/X25.cpython-36.pycnu[PK ]__&b__pycache__/RRSIG.cpython-36.opt-1.pycnu[PK ]ab4[[s__pycache__/DLV.cpython-36.pycnu[PK ]\m $vu__pycache__/HIP.cpython-36.opt-1.pycnu[PK ]r f__pycache__/NSEC.cpython-36.pycnu[PK ]u[[&^__pycache__/SSHFP.cpython-36.opt-1.pycnu[PK ]ݹSXX#__pycache__/MX.cpython-36.opt-1.pycnu[PK ][[QXX__pycache__/NS.cpython-36.pycnu[PK ]$___pycache__/X25.cpython-36.opt-1.pycnu[PK ]ab4[[$Z__pycache__/DLV.cpython-36.opt-1.pycnu[PK ]}<< __pycache__/GPOS.cpython-36.pycnu[PK ]M__pycache__/RP.cpython-36.pycnu[PK ]!F0'__pycache__/DNSKEY.cpython-36.opt-1.pycnu[PK ]+(( __pycache__/CAA.cpython-36.pycnu[PK ]!s&__pycache__/DNAME.cpython-36.opt-1.pycnu[PK ]^$__pycache__/CAA.cpython-36.opt-1.pycnu[PK ]r 2__pycache__/HINFO.cpython-36.pycnu[PK ]%|__pycache__/TLSA.cpython-36.opt-1.pycnu[PK ]5rr$__pycache__/SPF.cpython-36.opt-1.pycnu[PK ]?rjj#u__pycache__/RT.cpython-36.opt-1.pycnu[PK ]Ip p 2__pycache__/CSYNC.cpython-36.pycnu[PK ]eQ?? __pycache__/AFSDB.cpython-36.pycnu[PK ]w-&__pycache__/EUI48.cpython-36.opt-1.pycnu[PK ]#c .. __pycache__/CNAME.cpython-36.pycnu[PK ]!s g__pycache__/DNAME.cpython-36.pycnu[PK ]r %__pycache__/NSEC.cpython-36.opt-1.pycnu[PK ]  __pycache__/EUI64.cpython-36.pycnu[PK ]ޑ j%__pycache__/ISDN.cpython-36.opt-1.pycnu[PK ] {&__pycache__/NSEC3.cpython-36.opt-1.pycnu[PK ] 2//H+LOC.pynu[PK ]n{{f[RT.pynu[PK ]c# _TLSA.pynu[PK ]?ddjEUI48.pynu[PK ]y1suoGPOS.pynu[PK ]x > > CAA.pynu[PK ]&͡NSEC3.pynu[PK ][$$$CSYNC.pynu[PK ]Qx NISDN.pynu[PK ]o( <<JCNAME.pynu[PK ]k9  NSEC3PARAM.pynu[PK ]-kkCDS.pynu[PK ],iiMX.pynu[PK ]``TDLV.pynu[PK ]о DNSKEY.pynu[PK ]GRR#NSEC.pynu[PK ]ϝs88AFSDB.pynu[PK ]igSOA.pynu[PK ]U&SPF.pynu[PK ]΍JBiiDS.pynu[PK ]EAVkkQPTR.pynu[PK ]ZS00 HIP.pynu[PK ]BdX1DNAME.pynu[PK ]Xc5RRSIG.pynu[PK ]o:Ri i KHINFO.pynu[PK ] [VRP.pynu[PK ] bCDNSKEY.pynu[PK ]7R R fURI.pynu[PK ]0 Rr__init__.pynu[PK ][ReiiRwNS.pynu[PK ]5_W5zAVC.pynu[PK ]3,nn~EUI64.pynu[PK ]CnnTXT.pynu[PK ]° &SSHFP.pynu[PKll%j