Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pyasn1_modules/pem.py: 18%
39 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:51 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:51 +0000
1#
2# This file is part of pyasn1-modules software.
3#
4# Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>
5# License: http://snmplabs.com/pyasn1/license.html
6#
7import base64
8import sys
10stSpam, stHam, stDump = 0, 1, 2
13# The markers parameters is in form ('start1', 'stop1'), ('start2', 'stop2')...
14# Return is (marker-index, substrate)
15def readPemBlocksFromFile(fileObj, *markers):
16 startMarkers = dict(map(lambda x: (x[1], x[0]),
17 enumerate(map(lambda y: y[0], markers))))
18 stopMarkers = dict(map(lambda x: (x[1], x[0]),
19 enumerate(map(lambda y: y[1], markers))))
20 idx = -1
21 substrate = ''
22 certLines = []
23 state = stSpam
24 while True:
25 certLine = fileObj.readline()
26 if not certLine:
27 break
28 certLine = certLine.strip()
29 if state == stSpam:
30 if certLine in startMarkers:
31 certLines = []
32 idx = startMarkers[certLine]
33 state = stHam
34 continue
35 if state == stHam:
36 if certLine in stopMarkers and stopMarkers[certLine] == idx:
37 state = stDump
38 else:
39 certLines.append(certLine)
40 if state == stDump:
41 if sys.version_info[0] <= 2:
42 substrate = ''.join([base64.b64decode(x) for x in certLines])
43 else:
44 substrate = ''.encode().join([base64.b64decode(x.encode()) for x in certLines])
45 break
46 return idx, substrate
49# Backward compatibility routine
50def readPemFromFile(fileObj,
51 startMarker='-----BEGIN CERTIFICATE-----',
52 endMarker='-----END CERTIFICATE-----'):
53 idx, substrate = readPemBlocksFromFile(fileObj, (startMarker, endMarker))
54 return substrate
57def readBase64fromText(text):
58 if sys.version_info[0] <= 2:
59 return base64.b64decode(text)
60 else:
61 return base64.b64decode(text.encode())
64def readBase64FromFile(fileObj):
65 return readBase64fromText(fileObj.read())