| # ACVP unit tests |
| |
| This directory contains tests for the ACVP infrastructure itself. These tests |
| consist of test vector files and their expected outputs. The test vectors are |
| stored as bzip2 compressed JSON in the `vector/` directory, and the |
| corresponding expected output is the file with the same name in the `expected/` |
| directory. |
| |
| `tests.json` contains a list of all the tests: their input and output files, and |
| the module wrapper to use with them. Some tests use the standard BoringSSL |
| module wrapper, which we use for ACVP validations, called `modulewrapper`. But |
| some tests use algorithms that we don't support in BoringSSL and, for those, |
| there's a special test-only module wrapper written in Go called |
| `testmodulewrapper`. |
| |
| ## Adding tests |
| |
| When adding support for a new algorithm, the process for adding tests is: |
| |
| 1. Go to the parent directory of this file. (I.e. `acvptool/`.) |
| 2. Get the implementation working such that NIST's server accepts the results. |
| 3. Generally fetch a set of test vectors from the NIST demo server. Access to |
| the demo server requires permission from NIST, although you can also ask an |
| NVLAP lab to fetch a demo set of vectors for you. The vectors are generally |
| huge—larger than we would want to check in, even compressed—so |
| `test/trim_vectors.go` can be used to keep only a (hopefully valid) subset |
| of them. |
| 4. Copy the trimmed vectors into `test/vectors/`, named after the algorithm and |
| without any `json` suffix. |
| 5. Run `bzip2 -9 test/vectors/ALGO`. This will produce the `.bz2` file. Delete |
| the original. |
| 6. Run `./acvptool -json /tmp/trimmed_vectors.json > test/expected/ALGO` in the |
| parent directory to generate the expected results. (If you need to use the |
| test-only module wrapper then use the `-wrapper` argument.) |
| 7. Run `bzip2 -9 test/expected/ALGO` and delete the original. |
| 8. Update `test/tests.json` to include the new test. |
| 9. Run `ninja -C build run_tests` in the top-level directory to ensure that |
| everything is working. |