tlslite.utils.asn1parser

Package tlslite :: Package utils :: Module asn1parser |
[hide private]
[frames] | no frames]

# Source Code for Module tlslite.utils.asn1parser

     1  # Author: Trevor Perrin
     2  # Patch from Google adding getChildBytes()
     3  #
     4  # See the LICENSE file for legal information regarding use of this file.
     5
     6  """Class for parsing ASN.1"""
     7  from .compat import *
     8  from .codec import *
     9
    10  #Takes a byte array which has a DER TLV field at its head
    11 -class ASN1Parser(object):
    12 -    def __init__(self, bytes):
    13          p = Parser(bytes)
    14          p.get(1) #skip Type
    15
    16          #Get Length
    17          self.length = self._getASN1Length(p)
    18
    19          #Get Value
    20          self.value = p.getFixBytes(self.length)
    21
    22      #Assuming this is a sequence...
    23 -    def getChild(self, which):
    24          return ASN1Parser(self.getChildBytes(which))
    25
    26 -    def getChildBytes(self, which):
    27          p = Parser(self.value)
    28          for x in range(which+1):
    29              markIndex = p.index
    30              p.get(1) #skip Type
    31              length = self._getASN1Length(p)
    32              p.getFixBytes(length)
    33          return p.bytes[markIndex : p.index]
    34
    35      #Decode the ASN.1 DER length field
    36 -    def _getASN1Length(self, p):
    37          firstLength = p.get(1)
    38          if firstLength<=127:
    39              return firstLength
    40          else:
    41              lengthLength = firstLength & 0x7F
    42              return p.get(lengthLength)
    43