/gdata/tlslite/utils/ASN1Parser.py
http://radioappz.googlecode.com/ · Python · 34 lines · 23 code · 5 blank · 6 comment · 3 complexity · 89fa591f913f9bda159d1cac3318858d MD5 · raw file
- """Class for parsing ASN.1"""
- from compat import *
- from codec import *
- #Takes a byte array which has a DER TLV field at its head
- class ASN1Parser:
- def __init__(self, bytes):
- p = Parser(bytes)
- p.get(1) #skip Type
- #Get Length
- self.length = self._getASN1Length(p)
- #Get Value
- self.value = p.getFixBytes(self.length)
- #Assuming this is a sequence...
- def getChild(self, which):
- p = Parser(self.value)
- for x in range(which+1):
- markIndex = p.index
- p.get(1) #skip Type
- length = self._getASN1Length(p)
- p.getFixBytes(length)
- return ASN1Parser(p.bytes[markIndex : p.index])
- #Decode the ASN.1 DER length field
- def _getASN1Length(self, p):
- firstLength = p.get(1)
- if firstLength<=127:
- return firstLength
- else:
- lengthLength = firstLength & 0x7F
- return p.get(lengthLength)