123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #
- # This file is part of pyasn1-modules software.
- #
- # Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com>
- # License: http://pyasn1.sf.net/license.html
- #
- import base64
- import sys
- stSpam, stHam, stDump = 0, 1, 2
- # The markers parameters is in form ('start1', 'stop1'), ('start2', 'stop2')...
- # Return is (marker-index, substrate)
- def readPemBlocksFromFile(fileObj, *markers):
- startMarkers = dict(map(lambda x: (x[1], x[0]),
- enumerate(map(lambda y: y[0], markers))))
- stopMarkers = dict(map(lambda x: (x[1], x[0]),
- enumerate(map(lambda y: y[1], markers))))
- idx = -1
- substrate = ''
- certLines = []
- state = stSpam
- while True:
- certLine = fileObj.readline()
- if not certLine:
- break
- certLine = certLine.strip()
- if state == stSpam:
- if certLine in startMarkers:
- certLines = []
- idx = startMarkers[certLine]
- state = stHam
- continue
- if state == stHam:
- if certLine in stopMarkers and stopMarkers[certLine] == idx:
- state = stDump
- else:
- certLines.append(certLine)
- if state == stDump:
- if sys.version_info[0] <= 2:
- substrate = ''.join([base64.b64decode(x) for x in certLines])
- else:
- substrate = ''.encode().join([base64.b64decode(x.encode()) for x in certLines])
- break
- return idx, substrate
- # Backward compatibility routine
- def readPemFromFile(fileObj,
- startMarker='-----BEGIN CERTIFICATE-----',
- endMarker='-----END CERTIFICATE-----'):
- idx, substrate = readPemBlocksFromFile(fileObj, (startMarker, endMarker))
- return substrate
- def readBase64FromFile(fileObj):
- if sys.version_info[0] <= 2:
- return ''.join([base64.b64decode(x) for x in fileObj.readlines()])
- else:
- return ''.encode().join(
- [base64.b64decode(x.encode()) for x in fileObj.readlines()]
- )
|