diff options
Diffstat (limited to 'chromium/third_party/tlslite/tlslite/utils/asn1parser.py')
-rw-r--r-- | chromium/third_party/tlslite/tlslite/utils/asn1parser.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/chromium/third_party/tlslite/tlslite/utils/asn1parser.py b/chromium/third_party/tlslite/tlslite/utils/asn1parser.py new file mode 100644 index 00000000000..618e8559c9b --- /dev/null +++ b/chromium/third_party/tlslite/tlslite/utils/asn1parser.py @@ -0,0 +1,42 @@ +# Author: Trevor Perrin +# Patch from Google adding getChildBytes() +# +# See the LICENSE file for legal information regarding use of this 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(object): + 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): + return ASN1Parser(self.getChildBytes(which)) + + def getChildBytes(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 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) |