home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import calendar
- import struct
- import time
- import dns.dnssec as dns
- import dns.exception as dns
- import dns.rdata as dns
- import dns.rdatatype as dns
-
- class BadSigTime(dns.exception.DNSException):
- pass
-
-
- def sigtime_to_posixtime(what):
- if len(what) != 14:
- raise BadSigTime
- len(what) != 14
- 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 SIGBase(dns.rdata.Rdata):
- __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(SIGBase, 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, dns.rdata._base64ify(self.signature))
-
-
- 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 None:
- t = tok.get()
- if t[0] == dns.tokenizer.EOL or t[0] == dns.tokenizer.EOF:
- break
-
- if t[0] != dns.tokenizer.IDENTIFIER:
- raise dns.exception.SyntaxError
- chunks.append(t[1])
- continue
- b64 = ''.join(chunks)
- signature = b64.decode('base64_codec')
- return cls(rdclass, rdtype, type_covered, algorithm, labels, original_ttl, expiration, inception, key_tag, signer, signature)
-
- from_text = classmethod(from_text)
-
- 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)
-
-
- 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]
- return cls(rdclass, rdtype, header[0], header[1], header[2], header[3], header[4], header[5], header[6], signer, signature)
-
- from_wire = classmethod(from_wire)
-
- def choose_relativity(self, origin = None, relativize = True):
- self.signer = self.signer.choose_relativity(origin, relativize)
-
-
- def _cmp(self, other):
- hs = struct.pack('!HBBIIIH', self.type_covered, self.algorithm, self.labels, self.original_ttl, self.expiration, self.inception, self.key_tag)
- ho = struct.pack('!HBBIIIH', other.type_covered, other.algorithm, other.labels, other.original_ttl, other.expiration, other.inception, other.key_tag)
- v = cmp(hs, ho)
- if v == 0:
- v = cmp(self.signer, other.signer)
- if v == 0:
- v = cmp(self.signature, other.signature)
-
-
- return v
-
-
-