diff options
author | elie <elie> | 2012-04-09 16:46:29 +0000 |
---|---|---|
committer | elie <elie> | 2012-04-09 16:46:29 +0000 |
commit | 4fe8c7ae42a90ce19425a335770e5198b5bcca56 (patch) | |
tree | 1941d52deccd4928213364df24a2a313bafec3db /pyasn1_modules | |
parent | 200a4a10fe23efa2e198644b1d93d5eae71ad6a0 (diff) | |
download | pyasn1-modules-4fe8c7ae42a90ce19425a335770e5198b5bcca56.tar.gz |
readPemFromFile() improved to select one of possible many PEM headers
Diffstat (limited to 'pyasn1_modules')
-rw-r--r-- | pyasn1_modules/pem.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/pyasn1_modules/pem.py b/pyasn1_modules/pem.py index 5009c01..e71fb14 100644 --- a/pyasn1_modules/pem.py +++ b/pyasn1_modules/pem.py @@ -2,7 +2,14 @@ import base64, sys stSpam, stHam, stDump = 0, 1, 2 -def readPemFromFile(fileObj, startMarker, endMarker): +# The markers parameters is in form ('start1', 'stop1'), ('start2', 'stop2')... +# Return is (marker-index, substrate) +def readPemFromFile(fileObj, *markers): + startMarkers = dict(map(lambda x: (x[1],x[0]), + enumerate(map(lambda x: x[0], markers)))) + stopMarkers = dict(map(lambda x: (x[1],x[0]), + enumerate(map(lambda x: x[1], markers)))) + idx = -1; substrate = '' state = stSpam while 1: certLine = fileObj.readline() @@ -10,20 +17,23 @@ def readPemFromFile(fileObj, startMarker, endMarker): break certLine = certLine.strip() if state == stSpam: - if certLine == startMarker or certLine in startMarker: + if certLine in startMarkers: certLines = [] + idx = startMarkers[certLine] state = stHam continue if state == stHam: - if certLine == endMarker or certLine in endMarker: + if certLine in stopMarkers and stopMarkers[certLine] == idx: state = stDump else: certLines.append(certLine) if state == stDump: if sys.version_info[0] <= 2: - return ''.join([ base64.decodestring(x) for x in certLines ]) + substrate = ''.join([ base64.decodestring(x) for x in certLines ]) else: - return ''.encode().join([ base64.decodebytes(x.encode()) for x in certLines ]) + substrate = ''.encode().join([ base64.decodebytes(x.encode()) for x in certLines ]) + break + return idx, substrate def readBase64FromFile(fileObj): if sys.version_info[0] <= 2: |