2025-07-31 21:09:39 +02:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
|
|
"""Generate C preprocessor code to check for bad configurations.
|
|
|
|
|
"""
|
|
|
|
|
|
2025-09-15 15:27:20 +02:00
|
|
|
from typing import Iterator
|
|
|
|
|
|
2025-07-31 21:09:39 +02:00
|
|
|
import framework_scripts_path # pylint: disable=unused-import
|
|
|
|
|
from mbedtls_framework.config_checks_generator import * \
|
|
|
|
|
#pylint: disable=wildcard-import,unused-wildcard-import
|
2025-12-23 12:44:59 +01:00
|
|
|
from mbedtls_framework import config_macros
|
2025-07-31 21:09:39 +02:00
|
|
|
|
2025-07-16 22:27:09 +02:00
|
|
|
class CryptoInternal(SubprojectInternal):
|
|
|
|
|
SUBPROJECT = 'TF-PSA-Crypto'
|
|
|
|
|
|
|
|
|
|
class CryptoOption(SubprojectOption):
|
|
|
|
|
SUBPROJECT = 'psa/crypto_config.h'
|
|
|
|
|
|
2025-09-19 22:17:05 +02:00
|
|
|
ALWAYS_ENABLED_SINCE_4_0 = frozenset([
|
|
|
|
|
'MBEDTLS_PSA_CRYPTO_CONFIG',
|
|
|
|
|
'MBEDTLS_USE_PSA_CRYPTO',
|
|
|
|
|
])
|
|
|
|
|
|
2025-09-15 15:27:20 +02:00
|
|
|
def checkers_for_removed_options() -> Iterator[Checker]:
|
|
|
|
|
"""Discover removed options. Yield corresponding checkers."""
|
2025-12-23 12:44:59 +01:00
|
|
|
previous_major = config_macros.History('mbedtls', '3.6')
|
Read current data rather than data about 4.0
It doesn't matter how a macro was used in a previous minor version of the
library. What matters is current information about options and internal
symbols, and information about past versions from which a macro may have
been removed.
The output is mostly the same, but:
* Macros that were options in 3.6, became internal in 4.0 and have now
been completely removed are now shown as removed, not internal.
* Macros that were options in 3.6, were completely removed in 4.0, and are
now back but internal, are now shown as internal, not removed.
* Macros that were options in 3.6, were removed in 4.0 and are back to
being options are no longer rejected.
* Macros that were options in 3.6, were removed in 4.0 and are back to
being internal derived macros in TF-PSA-Crypto are no longer rejected.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-12-23 13:44:22 +01:00
|
|
|
current = config_macros.Current()
|
|
|
|
|
crypto = config_macros.Current('tf-psa-crypto')
|
2025-12-23 12:44:59 +01:00
|
|
|
old_public = previous_major.options()
|
Read current data rather than data about 4.0
It doesn't matter how a macro was used in a previous minor version of the
library. What matters is current information about options and internal
symbols, and information about past versions from which a macro may have
been removed.
The output is mostly the same, but:
* Macros that were options in 3.6, became internal in 4.0 and have now
been completely removed are now shown as removed, not internal.
* Macros that were options in 3.6, were completely removed in 4.0, and are
now back but internal, are now shown as internal, not removed.
* Macros that were options in 3.6, were removed in 4.0 and are back to
being options are no longer rejected.
* Macros that were options in 3.6, were removed in 4.0 and are back to
being internal derived macros in TF-PSA-Crypto are no longer rejected.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-12-23 13:44:22 +01:00
|
|
|
new_public = current.options()
|
2025-09-15 15:27:20 +02:00
|
|
|
for option in sorted(old_public - new_public):
|
2025-09-19 22:17:05 +02:00
|
|
|
if option in ALWAYS_ENABLED_SINCE_4_0:
|
|
|
|
|
continue
|
2025-12-23 12:44:59 +01:00
|
|
|
if option in crypto.options():
|
2025-09-15 15:27:20 +02:00
|
|
|
yield CryptoOption(option)
|
2025-12-23 12:44:59 +01:00
|
|
|
elif option in crypto.internal():
|
2025-09-15 15:27:20 +02:00
|
|
|
yield CryptoInternal(option)
|
|
|
|
|
else:
|
|
|
|
|
yield Removed(option, 'Mbed TLS 4.0')
|
2026-01-07 10:28:40 +01:00
|
|
|
for option in sorted(current.internal() - new_public - old_public -
|
|
|
|
|
crypto.options() - crypto.internal()):
|
2025-12-23 13:50:23 +01:00
|
|
|
yield Internal(option)
|
2025-09-15 15:27:20 +02:00
|
|
|
|
|
|
|
|
def all_checkers() -> Iterator[Checker]:
|
|
|
|
|
"""Yield all checkers."""
|
|
|
|
|
yield from checkers_for_removed_options()
|
|
|
|
|
|
2025-07-31 21:09:39 +02:00
|
|
|
MBEDTLS_CHECKS = BranchData(
|
|
|
|
|
header_directory='library',
|
|
|
|
|
header_prefix='mbedtls_',
|
|
|
|
|
project_cpp_prefix='MBEDTLS',
|
2025-09-15 15:27:20 +02:00
|
|
|
checkers=list(all_checkers()),
|
2025-07-31 21:09:39 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
main(MBEDTLS_CHECKS)
|