MacroCollector: default to not including intermediate macros
By default, exclude macros whose numerical value is not a valid member
of the semantic type (e.g. PSA_ALG_xxx_BASE is not itself an
algorithm, only an intermediate value used to construct others). But
do include them with include_intermediate=True, which
generate_psa_constants.py does.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/scripts/generate_psa_constants.py b/scripts/generate_psa_constants.py
index 4f8b87b..01c5a32 100755
--- a/scripts/generate_psa_constants.py
+++ b/scripts/generate_psa_constants.py
@@ -213,6 +213,9 @@
2. Call `write_file` to write ``psa_constant_names_generated.c``.
"""
+ def __init__(self):
+ super().__init__(include_intermediate=True)
+
@staticmethod
def _make_return_case(name):
return 'case %(name)s: return "%(name)s";' % {'name': name}
diff --git a/scripts/mbedtls_dev/macro_collector.py b/scripts/mbedtls_dev/macro_collector.py
index 0f7be60..ca27779 100644
--- a/scripts/mbedtls_dev/macro_collector.py
+++ b/scripts/mbedtls_dev/macro_collector.py
@@ -22,7 +22,15 @@
"""Collect PSA crypto macro definitions from C header files.
"""
- def __init__(self):
+ def __init__(self, include_intermediate=False):
+ """Set up an object to collect PSA macro definitions.
+
+ Call the read_file method of the constructed object on each header file.
+
+ * include_intermediate: if true, include intermediate macros such as
+ PSA_XXX_BASE that do not designate semantic values.
+ """
+ self.include_intermediate = include_intermediate
self.statuses = set()
self.key_types = set()
self.key_types_from_curve = {}
@@ -37,6 +45,11 @@
def is_internal_name(self, name):
"""Whether this is an internal macro. Internal macros will be skipped."""
+ if not self.include_intermediate:
+ if name.endswith('_BASE') or name.endswith('_NONE'):
+ return True
+ if '_CATEGORY_' in name:
+ return True
return name.endswith('_FLAG') or name.endswith('MASK')
# "#define" followed by a macro name with either no parameters