Commit Graph

35104 Commits

Author SHA1 Message Date
Ben Taylor 40e07ca2d8 Remove unused import
Signed-off-by: Ben Taylor <ben.taylor@linaro.org>
2026-05-06 11:52:28 +01:00
Gilles Peskine c6610dde67 Merge pull request #282 from gilles-peskine-arm/mldsa-pqcp-driver-framework
Generate MLDSA test cases for the driver and dispatch layers
2026-04-08 15:50:19 +02:00
Gilles Peskine b80f4d5f11 Merge pull request #292 from gilles-peskine-arm/analyze_outcomes-add_to_crypto-framework
Add outcome analysis to TF-PSA-Crypto: framework support
2026-04-08 15:49:47 +02:00
Gilles Peskine 8e06778bc8 Minor clarification
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-04-07 16:19:20 +02:00
Gilles Peskine 541289c9cb Copyediting
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-04-07 16:19:09 +02:00
Gilles Peskine 1fba034eb7 Merge remote-tracking branch 'main' into mldsa-pqcp-driver-framework 2026-04-07 14:28:56 +02:00
Gilles Peskine 80a0ea93f0 Support extending a TestCaseSet
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-04-07 10:49:35 +02:00
Gilles Peskine 30d14d340e Separate ignored from uncovered tests in coverage analysis
For historical reasons, the "ignored" tests in outcome analysis are not
actually ignored: they must not be covered, otherwise the script complains
about an unnecessary exception. In coverage analysis, rename this behavior
to "uncovered", and have "ignored" tests be actually ignored. In driver test
parity analysis, which is now only done in the 3.6 LTS branch, keep the
historical behavior

Consuming branches are currently defining `IGNORED_TESTS` with the
expectation that the test cases must be uncovered. They will need to rename
their definition to `UNCOVERED_TESTS`.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-04-07 10:49:35 +02:00
Gilles Peskine 1404bcbb8e Generalize ignore mechanism to TestCaseSet
Outcome analysis tasks can have "ignored" tests. Both coverage and driver
tasks actually don't ignore "ignored" tests: an "ignored" test must fail the
verification if it wasn't ignored.

In preparation for distinguishing between truly ignored tests and tests that
must be uncovered, generalize the test case lookup mechanism.

No intended behavior change for `CoverageTask` and `DriverVSReference`.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-04-07 10:49:35 +02:00
Manuel Pégourié-Gonnard fc80671aea Merge pull request #290 from gilles-peskine-arm/github-pr-template-add-4.1-framework
Add TF-PSA-Crypto 1.1 and Mbed TLS 4.1 lines to the PR template
2026-04-01 10:58:28 +02:00
Gilles Peskine 812aada0a2 Move _has_word_re from Mbed TLS's analyze_outcomes.py
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 16:35:08 +02:00
Gilles Peskine dcf227c5b9 Generate MLDSA test cases for the driver dispatch layer
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 16:01:03 +02:00
Gilles Peskine 4a58f90329 Generate MLDSA test cases for the driver entry points
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 16:01:03 +02:00
Gilles Peskine ab001120d6 Exclude maintainer scripts from Python checks
Maintainer scripts may require a more recent Python than the version we
currently use for Python checks (3.6).

https://github.com/Mbed-TLS/mbedtls-framework/issues/293

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 16:01:03 +02:00
Gilles Peskine 6466dc62c3 Make mbedtls_maintainer a Python package
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine 85a47fc277 mldsa_test_generator refactor: new methods gen_key_management, gen_all
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine a53c51425d mldsa_test_generator refactor: change function calls to method calls
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine 38d9d83ae7 mldsa_test_generator refactor: extend API class to Generator
Turn functions that generate test cases into methods of the generator class.
Functions that used to take an API argument are now implemented in the
generic class, and API-specific functions are now methods of the
corresponding API-specific concrete class.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine 31bae441f6 mldsa_test_generator refactor: preliminary rearrangement
Move code around, to make subsequent diffs easier to review.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine 72f178bdbd Move most of generate_mldsa_tests.py into a module
We are moving the command line entry point to the consuming branch.

The move will be completed when the consuming branch no longer needs the
script to exist in the framework.
https://github.com/Mbed-TLS/mbedtls-framework/issues/294

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine 7f537471bd Clean up overly complicated typing in read_file_lines
The `read_file_lines` context manager supported either text or binary
streams, based on a parameter passed to the constructor. But the type
annotation on the iterator claimed that all lines were text. The version of
mypy that we use on the CI was happy with that, but modern versions are not.

The advantage of `read_file_lines` over built-in functions is better
tracking of line numbers. We never took advantage of this in our code with
binary streams. Change the one place where `read_file_lines` was used with a
binary stream to use built-in functions instead, and specialize
`read_file_lines` to text streams.

This fixes a legitimate complaint of modern mypy on `macro_collectory.py`.

There was no runtime bug: the behavior was correct, only the type
annotations were wrong.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine a0e5850d61 Fix the Mbed TLS build when TF-PSA-Crypto only has a little MLDSA
When building Mbed TLS with test drivers, "psa_crypto_mldsa.h" is not on the
include path. Rather than get it on, which seems complicated and is not
desirable in the long term, arrange to do without this header. We just need
to define the macro PSA_ALG_IS_ML_DSA, and its behavior is defined by the
PSA Crypto API specification so pretty much set in stone.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine c8672388d8 Fix the build when TF-PSA-Crypto only has a little MLDSA
When TF-PSA-Crypto has pure ML-DSA, we need to handle it in the test driver
for signatures. But we must not try to reference ML-DSA identifiers in
TF-PSA-Crypto branches where they don't exist yet, even though the
compilation option already exists (which notably includes the TF-PSA-Crypto
1.1.0 release).

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Gilles Peskine e10d0ffc81 Add passthrough for pure ML-DSA to the test driver
We don't support ML-DSA in libtestdriver1 yet, because it's a copy of the
`builtin` driver but ML-DSA is provided by the `pqcp` driver. This means
that we can't test “driver-only” ML-DSA builds, but it should be possible to
enable ML-DSA in a build that dispatches through the test driver. This is
currently impossible because pure ML-DSA is not a sign-the-hash algorithm,
but the code in the test driver for signatures assumes that all signature
algorithms are sign-the-hash. Fix this in a minimal way by making the test
driver activate the fallback mechanism of driver dispatch when the algorithm
is pure ML-DSA. (Don't do this for all algorithms that are not sign-the-hash,
because in general, we do want the test driver to fail if it's given an
algorithm that it doesn't support.)

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-31 15:19:41 +02:00
Bence Szépkúti dff9da0443 Merge pull request #13 from gilles-peskine-arm/fork-test-helper-valgrind
Fix fork test helper under Valgrind
mbedtls-4.1.0_tf-psa-crypto-1.1.0
2026-03-24 15:12:38 +01:00
Gilles Peskine be3764a69f Work around Valgrind hooking into _exit()
When running tests that use mbedtls_test_fork_run_child() under Valgrind,
bad things happen. Specifically:

* Valgrind reports leaks in the child. Those leaks do exist, but they're
  deliberate since we avoid cleaning up in the child (because we want to
  do as little as possible in the child, and because cleanups such as
  destroying PSA persistent keys would have undesirable effects outside
  the child process).
* Valgrind's overridden `_exit()` doesn't just perform checks, but also for
  some reason it causes the file description on the .datax file to seek
  backwards, causing tests to run again in a loop.

Avoid this by calling `execve()` (via `execlp()`) rather than `_exit()` if
it looks like the test is run under Valgrind. This is safe as long as
Valgrind isn't run with `--trace-children=yes`.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-23 19:24:18 +01:00
Gilles Peskine a5b6f6f778 Explain why the child calls _exit() and not exit()
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-23 19:24:18 +01:00
Gilles Peskine 19543788a8 Add TF-PSA-Crypto 1.1 and Mbed TLS 4.1 lines to the PR template
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-19 18:09:07 +01:00
Gilles Peskine 3d57272bbc Merge pull request #11 from gilles-peskine-arm/fork-test-helper
Add fork test helper
2026-03-17 21:17:35 +01:00
Gilles Peskine 1a5bf10ca0 Declare platform requirements for test helpers before including any system header
If we rely on `tf_psa_crypto_common.h`, it's too late. And `common.h in 3.6
doesn't have platform requirements.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-16 23:45:49 +01:00
Gilles Peskine a2083218c7 Keep exposing the library common.h in test/macros.h
Partially revert "Give test code access to internal macros of the library".
I think that it would be better not to require every user of `test/macros.h`
to have access to the library source, but it's out of scope here.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-16 17:47:22 +01:00
Gilles Peskine a55f15580f Avoid a buffer overread if the child reports a wrong length
The child code isn't supposed to cause memory corruption, but if it does,
try to report a problem rather than mess up further.

Adapt the code to report the failure to the parent accordingly. In
particular, we need to make sure that the first byte written to the
reporting pipe is the result code in all cases, so don't jump over the
writing of the result code.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-16 15:55:52 +01:00
Gilles Peskine f4677c89d6 Fix null pointer dereference in the child if fdopen fails
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-16 15:53:57 +01:00
Gilles Peskine f7df78d3ab Fix reading of child output when it's fragmented
In the success case, we were only reporting the correct data written by the
child if the data was read in a single `read` call.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-16 15:53:57 +01:00
Gilles Peskine 96c9dca216 Fix exact-size check on failure in the child
When reading data from the child, if the child reports a failure, the parent
expects the child to write an `mbedtls_test_info_t` structure, no less, no
more. To achieve this, we try reading at least one byte more, and check that
we couldn't read more than the expected size. This commit fixes two bugs:

* On success, don't require the child to fill the output buffer. This check
  was only intended for the failure case, but was accidentally put in the
  wrong place.
* On failure, we weren't checking that the child had written at least the
  expected size, which could have been worse (we'd end up with a
  child_test_info structure that's only partially initialized).

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-16 15:53:57 +01:00
Gilles Peskine 0384a5929a Give test code access to internal macros of the library
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-16 15:53:57 +01:00
Gilles Peskine dbfd1a6fa9 New test helper mbedtls_test_fork_run_child()
Run some code in a child process. Propagate output from the child if the
test succeeds, and propagate the test result information otherwise.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-16 15:53:57 +01:00
Gilles Peskine d1a8b5b596 Merge pull request #289 from gilles-peskine-arm/iar-1.1.0-framework
IAR build fixes before 1.1.0/4.1.0/3.6.6: framework support
2026-03-16 14:48:45 +01:00
Gilles Peskine c3d6599465 Merge pull request #283 from gilles-peskine-arm/audit_validity_dates-move-from-mbedtls
Move some scripts from mbedtls
2026-03-12 09:57:39 +01:00
Gilles Peskine 96b9d674eb Switch off overeager IAR warning
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-11 20:11:47 +01:00
Gilles Peskine 4ad123d54f IAR: let test code use stdio FILE functions
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-11 20:11:47 +01:00
Gilles Peskine 25c1750beb Sort out inclusions of <test/build_info.h> vs "test_common.h"
Include `"test_common.h"` as the first thing in C files, and
`<test/build_info.h>` as the first thing in header files.

This requires moving `<test/test_common.h>` to its intended location
`"test_common.h"`.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-11 20:11:47 +01:00
Gilles Peskine 30d9a6210b Split <test/build_info.h> out of test_common.h
The header `test_common.h` contains two kinds of things:

* Things to do at the beginning of individual C files. Specifically,
  defining macros that notify system headers about what we want from them.
  Keep those in `test_common.h`, which will subsequently be moved out of
  the include directory.
* Things to do at the beginning of every header. In particular, read the
  library configuration. Move them to a new header `build_info.h`,
  which is the only one intended to be included from headers.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-11 20:11:47 +01:00
Gilles Peskine c5135a0c47 Add pylint duplicate-code exceptions for newly moved files
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-09 10:50:57 +01:00
Gilles Peskine 345b13a2b4 Run pylint and mypy on all files in mbedtls_framework
We were missing `mbedtls_framework/code_wrapper/*.py` because we were not
traversing the directory recursively.

Also improve the comment explaining the duplicate-code workaround for code
that's being moved between files in different repositories.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-09 10:50:57 +01:00
Gilles Peskine 95367dbdf1 Remove temporary code from the tf-psa-crypto split
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-09 10:50:57 +01:00
Gilles Peskine c77ecf059c Fix or silence minor issues reported by pylint
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-09 10:50:57 +01:00
Gilles Peskine d393ebd792 Fix cosmetic issues reported by pylint
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-09 10:50:57 +01:00
Gilles Peskine 7bc3cdfd12 Update paths after moving some scripts to the framework
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-09 10:50:57 +01:00
Gilles Peskine 72215295d8 Add requirements in the framework for scripts in the framework
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2026-03-09 10:50:57 +01:00