aboutsummaryrefslogtreecommitdiff
path: root/pyasn1_modules
diff options
context:
space:
mode:
authorelie <elie>2012-04-09 16:46:29 +0000
committerelie <elie>2012-04-09 16:46:29 +0000
commit4fe8c7ae42a90ce19425a335770e5198b5bcca56 (patch)
tree1941d52deccd4928213364df24a2a313bafec3db /pyasn1_modules
parent200a4a10fe23efa2e198644b1d93d5eae71ad6a0 (diff)
downloadpyasn1-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.py20
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: