NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

pem.py (1755B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\pyasn1_modules\pem.py
      2 import base64, sys
      3 stSpam, stHam, stDump = (0, 1, 2)
      4 
      5 def readPemBlocksFromFile(fileObj, *markers):
      6     startMarkers = dict(map(lambda x: (x[1], x[0]), enumerate(map(lambda x: x[0], markers))))
      7     stopMarkers = dict(map(lambda x: (x[1], x[0]), enumerate(map(lambda x: x[1], markers))))
      8     idx = -1
      9     substrate = ''
     10     state = stSpam
     11     while 1:
     12         certLine = fileObj.readline()
     13         if not certLine:
     14             break
     15         certLine = certLine.strip()
     16         if state == stSpam:
     17             if certLine in startMarkers:
     18                 certLines = []
     19                 idx = startMarkers[certLine]
     20                 state = stHam
     21                 continue
     22         if state == stHam:
     23             if certLine in stopMarkers and stopMarkers[certLine] == idx:
     24                 state = stDump
     25             else:
     26                 certLines.append(certLine)
     27         if state == stDump:
     28             if sys.version_info[0] <= 2:
     29                 substrate = ''.join([ base64.b64decode(x) for x in certLines ])
     30             else:
     31                 substrate = ''.encode().join([ base64.b64decode(x.encode()) for x in certLines ])
     32             break
     33 
     34     return (idx, substrate)
     35 
     36 
     37 def readPemFromFile(fileObj, startMarker = '-----BEGIN CERTIFICATE-----', endMarker = '-----END CERTIFICATE-----'):
     38     idx, substrate = readPemBlocksFromFile(fileObj, (startMarker, endMarker))
     39     return substrate
     40 
     41 
     42 def readBase64FromFile(fileObj):
     43     if sys.version_info[0] <= 2:
     44         return ''.join([ base64.b64decode(x) for x in fileObj.readlines() ])
     45     else:
     46         return ''.encode().join([ base64.b64decode(x.encode()) for x in fileObj.readlines() ])