cert_audit: Support parsing file with multiple PEMs
Previously, if a file had multiple PEM objects, only
the first one would be parsed. This commit add the
support so that we could parse all the PEM objects
in the file.
Signed-off-by: Pengyu Lv <pengyu.lv@arm.com>
diff --git a/tests/scripts/audit-validity-dates.py b/tests/scripts/audit-validity-dates.py
index 1ccfc21..d6e73ff 100755
--- a/tests/scripts/audit-validity-dates.py
+++ b/tests/scripts/audit-validity-dates.py
@@ -90,7 +90,7 @@
class X509Parser:
"""A parser class to parse crt/crl/csr file or data in PEM/DER format."""
- PEM_REGEX = br'-{5}BEGIN (?P<type>.*?)-{5}\n(?P<data>.*?)-{5}END (?P=type)-{5}\n'
+ PEM_REGEX = br'-{5}BEGIN (?P<type>.*?)-{5}(?P<data>.*?)-{5}END (?P=type)-{5}'
PEM_TAG_REGEX = br'-{5}BEGIN (?P<type>.*?)-{5}\n'
PEM_TAGS = {
DataType.CRT: 'CERTIFICATE',
@@ -277,12 +277,15 @@
"""
with open(filename, 'rb') as f:
data = f.read()
- result = self.parse_bytes(data)
- if result is not None:
- result.location = filename
- return [result]
- else:
- return []
+
+ results = []
+ for idx, m in enumerate(re.finditer(X509Parser.PEM_REGEX, data, flags=re.S), 1):
+ result = self.parse_bytes(data[m.start():m.end()])
+ if result is not None:
+ result.location = "{}#{}".format(filename, idx)
+ results.append(result)
+
+ return results
def parse_suite_data(data_f):