Skip to content
Snippets Groups Projects
Commit 1ecb4e8a authored by William Roberts's avatar William Roberts
Browse files

tools: Correct insert keys behavior on pem files

Insert keys would erroneously process pem files
with openssl headers in them. Also, the tool would
be fooled into attempting to use pem files that
had private keys and other things in the format.
This patch strengthens the formatting requirements
and increases the verboseness of error messages
when processing pem files.

Change-Id: I03353faaa641233a000d1a18943024ae47c63e0f
parent ec7d39ba
No related branches found
No related tags found
No related merge requests found
...@@ -34,19 +34,65 @@ class GenerateKeys(object): ...@@ -34,19 +34,65 @@ class GenerateKeys(object):
pkFile = open(path, 'rb').readlines() pkFile = open(path, 'rb').readlines()
base64Key = "" base64Key = ""
lineNo = 1
certNo = 1
inCert = False inCert = False
for line in pkFile: for line in pkFile:
if line.startswith("-"): line = line.strip()
inCert = not inCert # Are we starting the certificate?
continue if line.startswith("-----BEGIN CERTIFICATE-----"):
if inCert:
sys.exit("Encountered another BEGIN CERTIFICATE without END CERTIFICATE on " +
"line: " + str(lineNo))
inCert = True
# Are we ending the ceritifcate?
elif line.startswith("-----END CERTIFICATE-----"):
if not inCert:
sys.exit("Encountered END CERTIFICATE before BEGIN CERTIFICATE on line: "
+ str(lineNo))
# If we ended the certificate trip the flag
inCert = False
# Sanity check the input
if len(base64Key) == 0:
sys.exit("Empty certficate , certificate "+ str(certNo) + " found in file: "
+ path)
# ... and append the certificate to the list
# Base 64 includes uppercase. DO NOT tolower()
self._base64Key.append(base64Key)
try:
# Pkgmanager and setool see hex strings with lowercase, lets be consistent
self._base16Key.append(base64.b16encode(base64.b64decode(base64Key)).lower())
except TypeError:
sys.exit("Invalid certificate, certificate "+ str(certNo) + " found in file: "
+ path)
# After adding the key, reset the accumulator as pem files may have subsequent keys
base64Key=""
# And increment your cert number
certNo = certNo + 1
# If we haven't started the certificate, then we should not encounter any data
elif not inCert:
sys.exit("Detected erroneous line \""+ line + "\" on " + str(lineNo)
+ " in pem file: " + path)
# else we have started the certicate and need to append the data
elif inCert:
base64Key += line
base64Key += line.strip() else:
# We should never hit this assert, if we do then an unaccounted for state
# Base 64 includes uppercase. DO NOT tolower() # was entered that was NOT addressed by the if/elif statements above
self._base64Key.append(base64Key) assert(False == True)
# Pkgmanager and setool see hex strings with lowercase, lets be consistent. # The last thing to do before looping up is to increment line number
self._base16Key.append(base64.b16encode(base64.b64decode(base64Key)).lower()) lineNo = lineNo + 1
def __len__(self): def __len__(self):
return len(self._base16Key) return len(self._base16Key)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment