1#! /usr/bin/env bash 2 3# all.sh 4# 5# Copyright The Mbed TLS Contributors 6# SPDX-License-Identifier: Apache-2.0 7# 8# Licensed under the Apache License, Version 2.0 (the "License"); you may 9# not use this file except in compliance with the License. 10# You may obtain a copy of the License at 11# 12# http://www.apache.org/licenses/LICENSE-2.0 13# 14# Unless required by applicable law or agreed to in writing, software 15# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 16# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17# See the License for the specific language governing permissions and 18# limitations under the License. 19 20 21 22################################################################ 23#### Documentation 24################################################################ 25 26# Purpose 27# ------- 28# 29# To run all tests possible or available on the platform. 30# 31# Notes for users 32# --------------- 33# 34# Warning: the test is destructive. It includes various build modes and 35# configurations, and can and will arbitrarily change the current CMake 36# configuration. The following files must be committed into git: 37# * include/mbedtls/config.h 38# * Makefile, library/Makefile, programs/Makefile, tests/Makefile, 39# programs/fuzz/Makefile 40# After running this script, the CMake cache will be lost and CMake 41# will no longer be initialised. 42# 43# The script assumes the presence of a number of tools: 44# * Basic Unix tools (Windows users note: a Unix-style find must be before 45# the Windows find in the PATH) 46# * Perl 47# * GNU Make 48# * CMake 49# * GCC and Clang (recent enough for using ASan with gcc and MemSan with clang, or valgrind) 50# * G++ 51# * arm-gcc and mingw-gcc 52# * ArmCC 5 and ArmCC 6, unless invoked with --no-armcc 53# * OpenSSL and GnuTLS command line tools, recent enough for the 54# interoperability tests. If they don't support SSLv3 then a legacy 55# version of these tools must be present as well (search for LEGACY 56# below). 57# See the invocation of check_tools below for details. 58# 59# This script must be invoked from the toplevel directory of a git 60# working copy of Mbed TLS. 61# 62# The behavior on an error depends on whether --keep-going (alias -k) 63# is in effect. 64# * Without --keep-going: the script stops on the first error without 65# cleaning up. This lets you work in the configuration of the failing 66# component. 67# * With --keep-going: the script runs all requested components and 68# reports failures at the end. In particular the script always cleans 69# up on exit. 70# 71# Note that the output is not saved. You may want to run 72# script -c tests/scripts/all.sh 73# or 74# tests/scripts/all.sh >all.log 2>&1 75# 76# Notes for maintainers 77# --------------------- 78# 79# The bulk of the code is organized into functions that follow one of the 80# following naming conventions: 81# * pre_XXX: things to do before running the tests, in order. 82# * component_XXX: independent components. They can be run in any order. 83# * component_check_XXX: quick tests that aren't worth parallelizing. 84# * component_build_XXX: build things but don't run them. 85# * component_test_XXX: build and test. 86# * support_XXX: if support_XXX exists and returns false then 87# component_XXX is not run by default. 88# * post_XXX: things to do after running the tests. 89# * other: miscellaneous support functions. 90# 91# Each component must start by invoking `msg` with a short informative message. 92# 93# Warning: due to the way bash detects errors, the failure of a command 94# inside 'if' or '!' is not detected. Use the 'not' function instead of '!'. 95# 96# Each component is executed in a separate shell process. The component 97# fails if any command in it returns a non-zero status. 98# 99# The framework performs some cleanup tasks after each component. This 100# means that components can assume that the working directory is in a 101# cleaned-up state, and don't need to perform the cleanup themselves. 102# * Run `make clean`. 103# * Restore `include/mbedtks/config.h` from a backup made before running 104# the component. 105# * Check out `Makefile`, `library/Makefile`, `programs/Makefile`, 106# `tests/Makefile` and `programs/fuzz/Makefile` from git. 107# This cleans up after an in-tree use of CMake. 108# 109# The tests are roughly in order from fastest to slowest. This doesn't 110# have to be exact, but in general you should add slower tests towards 111# the end and fast checks near the beginning. 112 113 114 115################################################################ 116#### Initialization and command line parsing 117################################################################ 118 119# Abort on errors (even on the left-hand side of a pipe). 120# Treat uninitialised variables as errors. 121set -e -o pipefail -u 122 123pre_check_environment () { 124 if [ -d library -a -d include -a -d tests ]; then :; else 125 echo "Must be run from mbed TLS root" >&2 126 exit 1 127 fi 128} 129 130pre_initialize_variables () { 131 CONFIG_H='include/mbedtls/config.h' 132 CRYPTO_CONFIG_H='include/psa/crypto_config.h' 133 134 # Files that are clobbered by some jobs will be backed up. Use a different 135 # suffix from auxiliary scripts so that all.sh and auxiliary scripts can 136 # independently decide when to remove the backup file. 137 backup_suffix='.all.bak' 138 # Files clobbered by config.py 139 files_to_back_up="$CONFIG_H $CRYPTO_CONFIG_H" 140 # Files clobbered by in-tree cmake 141 files_to_back_up="$files_to_back_up Makefile library/Makefile programs/Makefile tests/Makefile programs/fuzz/Makefile" 142 143 append_outcome=0 144 MEMORY=0 145 FORCE=0 146 QUIET=0 147 KEEP_GOING=0 148 149 # Seed value used with the --release-test option. 150 # 151 # See also RELEASE_SEED in basic-build-test.sh. Debugging is easier if 152 # both values are kept in sync. If you change the value here because it 153 # breaks some tests, you'll definitely want to change it in 154 # basic-build-test.sh as well. 155 RELEASE_SEED=1 156 157 : ${MBEDTLS_TEST_OUTCOME_FILE=} 158 : ${MBEDTLS_TEST_PLATFORM="$(uname -s | tr -c \\n0-9A-Za-z _)-$(uname -m | tr -c \\n0-9A-Za-z _)"} 159 export MBEDTLS_TEST_OUTCOME_FILE 160 export MBEDTLS_TEST_PLATFORM 161 162 # Default commands, can be overridden by the environment 163 : ${OPENSSL:="openssl"} 164 : ${OPENSSL_LEGACY:="$OPENSSL"} 165 : ${OPENSSL_NEXT:="$OPENSSL"} 166 : ${GNUTLS_CLI:="gnutls-cli"} 167 : ${GNUTLS_SERV:="gnutls-serv"} 168 : ${GNUTLS_LEGACY_CLI:="$GNUTLS_CLI"} 169 : ${GNUTLS_LEGACY_SERV:="$GNUTLS_SERV"} 170 : ${OUT_OF_SOURCE_DIR:=./mbedtls_out_of_source_build} 171 : ${ARMC5_BIN_DIR:=/usr/bin} 172 : ${ARMC6_BIN_DIR:=/usr/bin} 173 : ${ARM_NONE_EABI_GCC_PREFIX:=arm-none-eabi-} 174 : ${ARM_LINUX_GNUEABI_GCC_PREFIX:=arm-linux-gnueabi-} 175 176 # if MAKEFLAGS is not set add the -j option to speed up invocations of make 177 if [ -z "${MAKEFLAGS+set}" ]; then 178 export MAKEFLAGS="-j$(all_sh_nproc)" 179 fi 180 181 # Include more verbose output for failing tests run by CMake or make 182 export CTEST_OUTPUT_ON_FAILURE=1 183 184 # CFLAGS and LDFLAGS for Asan builds that don't use CMake 185 ASAN_CFLAGS='-Werror -Wall -Wextra -fsanitize=address,undefined -fno-sanitize-recover=all' 186 187 # Gather the list of available components. These are the functions 188 # defined in this script whose name starts with "component_". 189 # Parse the script with sed. This way we get the functions in the order 190 # they are defined. 191 ALL_COMPONENTS=$(sed -n 's/^ *component_\([0-9A-Z_a-z]*\) *().*/\1/p' <"$0") 192 193 # Exclude components that are not supported on this platform. 194 SUPPORTED_COMPONENTS= 195 for component in $ALL_COMPONENTS; do 196 case $(type "support_$component" 2>&1) in 197 *' function'*) 198 if ! support_$component; then continue; fi;; 199 esac 200 SUPPORTED_COMPONENTS="$SUPPORTED_COMPONENTS $component" 201 done 202} 203 204# Test whether the component $1 is included in the command line patterns. 205is_component_included() 206{ 207 # Temporarily disable wildcard expansion so that $COMMAND_LINE_COMPONENTS 208 # only does word splitting. 209 set -f 210 for pattern in $COMMAND_LINE_COMPONENTS; do 211 set +f 212 case ${1#component_} in $pattern) return 0;; esac 213 done 214 set +f 215 return 1 216} 217 218usage() 219{ 220 cat <<EOF 221Usage: $0 [OPTION]... [COMPONENT]... 222Run mbedtls release validation tests. 223By default, run all tests. With one or more COMPONENT, run only those. 224COMPONENT can be the name of a component or a shell wildcard pattern. 225 226Examples: 227 $0 "check_*" 228 Run all sanity checks. 229 $0 --no-armcc --except test_memsan 230 Run everything except builds that require armcc and MemSan. 231 232Special options: 233 -h|--help Print this help and exit. 234 --list-all-components List all available test components and exit. 235 --list-components List components supported on this platform and exit. 236 237General options: 238 -q|--quiet Only output component names, and errors if any. 239 -f|--force Force the tests to overwrite any modified files. 240 -k|--keep-going Run all tests and report errors at the end. 241 -m|--memory Additional optional memory tests. 242 --append-outcome Append to the outcome file (if used). 243 --arm-none-eabi-gcc-prefix=<string> 244 Prefix for a cross-compiler for arm-none-eabi 245 (default: "${ARM_NONE_EABI_GCC_PREFIX}") 246 --arm-linux-gnueabi-gcc-prefix=<string> 247 Prefix for a cross-compiler for arm-linux-gnueabi 248 (default: "${ARM_LINUX_GNUEABI_GCC_PREFIX}") 249 --armcc Run ARM Compiler builds (on by default). 250 --restore First clean up the build tree, restoring backed up 251 files. Do not run any components unless they are 252 explicitly specified. 253 --error-test Error test mode: run a failing function in addition 254 to any specified component. May be repeated. 255 --except Exclude the COMPONENTs listed on the command line, 256 instead of running only those. 257 --no-append-outcome Write a new outcome file and analyze it (default). 258 --no-armcc Skip ARM Compiler builds. 259 --no-force Refuse to overwrite modified files (default). 260 --no-keep-going Stop at the first error (default). 261 --no-memory No additional memory tests (default). 262 --no-quiet Print full ouput from components. 263 --out-of-source-dir=<path> Directory used for CMake out-of-source build tests. 264 --outcome-file=<path> File where test outcomes are written (not done if 265 empty; default: \$MBEDTLS_TEST_OUTCOME_FILE). 266 --random-seed Use a random seed value for randomized tests (default). 267 -r|--release-test Run this script in release mode. This fixes the seed value to ${RELEASE_SEED}. 268 -s|--seed Integer seed value to use for this test run. 269 270Tool path options: 271 --armc5-bin-dir=<ARMC5_bin_dir_path> ARM Compiler 5 bin directory. 272 --armc6-bin-dir=<ARMC6_bin_dir_path> ARM Compiler 6 bin directory. 273 --gnutls-cli=<GnuTLS_cli_path> GnuTLS client executable to use for most tests. 274 --gnutls-serv=<GnuTLS_serv_path> GnuTLS server executable to use for most tests. 275 --gnutls-legacy-cli=<GnuTLS_cli_path> GnuTLS client executable to use for legacy tests. 276 --gnutls-legacy-serv=<GnuTLS_serv_path> GnuTLS server executable to use for legacy tests. 277 --openssl=<OpenSSL_path> OpenSSL executable to use for most tests. 278 --openssl-legacy=<OpenSSL_path> OpenSSL executable to use for legacy tests e.g. SSLv3. 279 --openssl-next=<OpenSSL_path> OpenSSL executable to use for recent things like ARIA 280EOF 281} 282 283# Cleanup before/after running a component. 284# Remove built files as well as the cmake cache/config. 285# Does not remove generated source files. 286cleanup() 287{ 288 command make clean 289 290 # Remove CMake artefacts 291 find . -name .git -prune -o \ 292 -iname CMakeFiles -exec rm -rf {} \+ -o \ 293 \( -iname cmake_install.cmake -o \ 294 -iname CTestTestfile.cmake -o \ 295 -iname CMakeCache.txt \) -exec rm {} \+ 296 # Recover files overwritten by in-tree CMake builds 297 rm -f include/Makefile include/mbedtls/Makefile programs/*/Makefile 298 299 # Remove any artifacts from the component_test_cmake_as_subdirectory test. 300 rm -rf programs/test/cmake_subproject/build 301 rm -f programs/test/cmake_subproject/Makefile 302 rm -f programs/test/cmake_subproject/cmake_subproject 303 304 # Restore files that may have been clobbered by the job 305 for x in $files_to_back_up; do 306 cp -p "$x$backup_suffix" "$x" 307 done 308} 309 310# Final cleanup when this script exits (except when exiting on a failure 311# in non-keep-going mode). 312final_cleanup () { 313 cleanup 314 315 for x in $files_to_back_up; do 316 rm -f "$x$backup_suffix" 317 done 318} 319 320# Executed on exit. May be redefined depending on command line options. 321final_report () { 322 : 323} 324 325fatal_signal () { 326 final_cleanup 327 final_report $1 328 trap - $1 329 kill -$1 $$ 330} 331 332trap 'fatal_signal HUP' HUP 333trap 'fatal_signal INT' INT 334trap 'fatal_signal TERM' TERM 335 336# Number of processors on this machine. Used as the default setting 337# for parallel make. 338all_sh_nproc () 339{ 340 { 341 nproc || # Linux 342 sysctl -n hw.ncpuonline || # NetBSD, OpenBSD 343 sysctl -n hw.ncpu || # FreeBSD 344 echo 1 345 } 2>/dev/null 346} 347 348msg() 349{ 350 if [ -n "${current_component:-}" ]; then 351 current_section="${current_component#component_}: $1" 352 else 353 current_section="$1" 354 fi 355 356 if [ $QUIET -eq 1 ]; then 357 return 358 fi 359 360 echo "" 361 echo "******************************************************************" 362 echo "* $current_section " 363 printf "* "; date 364 echo "******************************************************************" 365} 366 367armc6_build_test() 368{ 369 FLAGS="$1" 370 371 msg "build: ARM Compiler 6 ($FLAGS)" 372 ARM_TOOL_VARIANT="ult" CC="$ARMC6_CC" AR="$ARMC6_AR" CFLAGS="$FLAGS" \ 373 WARNING_CFLAGS='-xc -std=c99' make lib 374 375 msg "size: ARM Compiler 6 ($FLAGS)" 376 "$ARMC6_FROMELF" -z library/*.o 377 378 make clean 379} 380 381err_msg() 382{ 383 echo "$1" >&2 384} 385 386check_tools() 387{ 388 for TOOL in "$@"; do 389 if ! `type "$TOOL" >/dev/null 2>&1`; then 390 err_msg "$TOOL not found!" 391 exit 1 392 fi 393 done 394} 395 396pre_parse_command_line () { 397 COMMAND_LINE_COMPONENTS= 398 all_except=0 399 error_test=0 400 restore_first=0 401 no_armcc= 402 403 # Note that legacy options are ignored instead of being omitted from this 404 # list of options, so invocations that worked with previous version of 405 # all.sh will still run and work properly. 406 while [ $# -gt 0 ]; do 407 case "$1" in 408 --append-outcome) append_outcome=1;; 409 --arm-none-eabi-gcc-prefix) shift; ARM_NONE_EABI_GCC_PREFIX="$1";; 410 --arm-linux-gnueabi-gcc-prefix) shift; ARM_LINUX_GNUEABI_GCC_PREFIX="$1";; 411 --armcc) no_armcc=;; 412 --armc5-bin-dir) shift; ARMC5_BIN_DIR="$1";; 413 --armc6-bin-dir) shift; ARMC6_BIN_DIR="$1";; 414 --error-test) error_test=$((error_test + 1));; 415 --except) all_except=1;; 416 --force|-f) FORCE=1;; 417 --gnutls-cli) shift; GNUTLS_CLI="$1";; 418 --gnutls-legacy-cli) shift; GNUTLS_LEGACY_CLI="$1";; 419 --gnutls-legacy-serv) shift; GNUTLS_LEGACY_SERV="$1";; 420 --gnutls-serv) shift; GNUTLS_SERV="$1";; 421 --help|-h) usage; exit;; 422 --keep-going|-k) KEEP_GOING=1;; 423 --list-all-components) printf '%s\n' $ALL_COMPONENTS; exit;; 424 --list-components) printf '%s\n' $SUPPORTED_COMPONENTS; exit;; 425 --memory|-m) MEMORY=1;; 426 --no-append-outcome) append_outcome=0;; 427 --no-armcc) no_armcc=1;; 428 --no-force) FORCE=0;; 429 --no-keep-going) KEEP_GOING=0;; 430 --no-memory) MEMORY=0;; 431 --no-quiet) QUIET=0;; 432 --openssl) shift; OPENSSL="$1";; 433 --openssl-legacy) shift; OPENSSL_LEGACY="$1";; 434 --openssl-next) shift; OPENSSL_NEXT="$1";; 435 --outcome-file) shift; MBEDTLS_TEST_OUTCOME_FILE="$1";; 436 --out-of-source-dir) shift; OUT_OF_SOURCE_DIR="$1";; 437 --quiet|-q) QUIET=1;; 438 --random-seed) unset SEED;; 439 --release-test|-r) SEED=$RELEASE_SEED;; 440 --restore) restore_first=1;; 441 --seed|-s) shift; SEED="$1";; 442 -*) 443 echo >&2 "Unknown option: $1" 444 echo >&2 "Run $0 --help for usage." 445 exit 120 446 ;; 447 *) COMMAND_LINE_COMPONENTS="$COMMAND_LINE_COMPONENTS $1";; 448 esac 449 shift 450 done 451 452 # With no list of components, run everything. 453 if [ -z "$COMMAND_LINE_COMPONENTS" ] && [ $restore_first -eq 0 ]; then 454 all_except=1 455 fi 456 457 # --no-armcc is a legacy option. The modern way is --except '*_armcc*'. 458 # Ignore it if components are listed explicitly on the command line. 459 if [ -n "$no_armcc" ] && [ $all_except -eq 1 ]; then 460 COMMAND_LINE_COMPONENTS="$COMMAND_LINE_COMPONENTS *_armcc*" 461 fi 462 463 # Error out if an explicitly requested component doesn't exist. 464 if [ $all_except -eq 0 ]; then 465 unsupported=0 466 # Temporarily disable wildcard expansion so that $COMMAND_LINE_COMPONENTS 467 # only does word splitting. 468 set -f 469 for component in $COMMAND_LINE_COMPONENTS; do 470 set +f 471 # If the requested name includes a wildcard character, don't 472 # check it. Accept wildcard patterns that don't match anything. 473 case $component in 474 *[*?\[]*) continue;; 475 esac 476 case " $SUPPORTED_COMPONENTS " in 477 *" $component "*) :;; 478 *) 479 echo >&2 "Component $component was explicitly requested, but is not known or not supported." 480 unsupported=$((unsupported + 1));; 481 esac 482 done 483 set +f 484 if [ $unsupported -ne 0 ]; then 485 exit 2 486 fi 487 fi 488 489 # Build the list of components to run. 490 RUN_COMPONENTS= 491 for component in $SUPPORTED_COMPONENTS; do 492 if is_component_included "$component"; [ $? -eq $all_except ]; then 493 RUN_COMPONENTS="$RUN_COMPONENTS $component" 494 fi 495 done 496 497 unset all_except 498 unset no_armcc 499} 500 501pre_check_git () { 502 if [ $FORCE -eq 1 ]; then 503 rm -rf "$OUT_OF_SOURCE_DIR" 504 git checkout-index -f -q $CONFIG_H 505 cleanup 506 else 507 508 if [ -d "$OUT_OF_SOURCE_DIR" ]; then 509 echo "Warning - there is an existing directory at '$OUT_OF_SOURCE_DIR'" >&2 510 echo "You can either delete this directory manually, or force the test by rerunning" 511 echo "the script as: $0 --force --out-of-source-dir $OUT_OF_SOURCE_DIR" 512 exit 1 513 fi 514 515 if ! git diff --quiet include/mbedtls/config.h; then 516 err_msg "Warning - the configuration file 'include/mbedtls/config.h' has been edited. " 517 echo "You can either delete or preserve your work, or force the test by rerunning the" 518 echo "script as: $0 --force" 519 exit 1 520 fi 521 fi 522} 523 524pre_restore_files () { 525 # If the makefiles have been generated by a framework such as cmake, 526 # restore them from git. If the makefiles look like modifications from 527 # the ones checked into git, take care not to modify them. Whatever 528 # this function leaves behind is what the script will restore before 529 # each component. 530 case "$(head -n1 Makefile)" in 531 *[Gg]enerated*) 532 git update-index --no-skip-worktree Makefile library/Makefile programs/Makefile tests/Makefile programs/fuzz/Makefile 533 git checkout -- Makefile library/Makefile programs/Makefile tests/Makefile programs/fuzz/Makefile 534 ;; 535 esac 536} 537 538pre_back_up () { 539 for x in $files_to_back_up; do 540 cp -p "$x" "$x$backup_suffix" 541 done 542} 543 544pre_setup_keep_going () { 545 failure_count=0 # Number of failed components 546 last_failure_status=0 # Last failure status in this component 547 548 # See err_trap 549 previous_failure_status=0 550 previous_failed_command= 551 previous_failure_funcall_depth=0 552 unset report_failed_command 553 554 start_red= 555 end_color= 556 if [ -t 1 ]; then 557 case "${TERM:-}" in 558 *color*|cygwin|linux|rxvt*|screen|[Eex]term*) 559 start_red=$(printf '\033[31m') 560 end_color=$(printf '\033[0m') 561 ;; 562 esac 563 fi 564 565 # Keep a summary of failures in a file. We'll print it out at the end. 566 failure_summary_file=$PWD/all-sh-failures-$$.log 567 : >"$failure_summary_file" 568 569 # Whether it makes sense to keep a component going after the specified 570 # command fails (test command) or not (configure or build). 571 # This function normally receives the failing simple command 572 # ($BASH_COMMAND) as an argument, but if $report_failed_command is set, 573 # this is passed instead. 574 # This doesn't have to be 100% accurate: all failures are recorded anyway. 575 # False positives result in running things that can't be expected to 576 # work. False negatives result in things not running after something else 577 # failed even though they might have given useful feedback. 578 can_keep_going_after_failure () { 579 case "$1" in 580 "msg "*) false;; 581 "cd "*) false;; 582 *make*[\ /]tests*) false;; # make tests, make CFLAGS=-I../tests, ... 583 *test*) true;; # make test, tests/stuff, env V=v tests/stuff, ... 584 *make*check*) true;; 585 "grep "*) true;; 586 "[ "*) true;; 587 "! "*) true;; 588 *) false;; 589 esac 590 } 591 592 # This function runs if there is any error in a component. 593 # It must either exit with a nonzero status, or set 594 # last_failure_status to a nonzero value. 595 err_trap () { 596 # Save $? (status of the failing command). This must be the very 597 # first thing, before $? is overridden. 598 last_failure_status=$? 599 failed_command=${report_failed_command-$BASH_COMMAND} 600 601 if [[ $last_failure_status -eq $previous_failure_status && 602 "$failed_command" == "$previous_failed_command" && 603 ${#FUNCNAME[@]} == $((previous_failure_funcall_depth - 1)) ]] 604 then 605 # The same command failed twice in a row, but this time one level 606 # less deep in the function call stack. This happens when the last 607 # command of a function returns a nonzero status, and the function 608 # returns that same status. Ignore the second failure. 609 previous_failure_funcall_depth=${#FUNCNAME[@]} 610 return 611 fi 612 previous_failure_status=$last_failure_status 613 previous_failed_command=$failed_command 614 previous_failure_funcall_depth=${#FUNCNAME[@]} 615 616 text="$current_section: $failed_command -> $last_failure_status" 617 echo "${start_red}^^^^$text^^^^${end_color}" >&2 618 echo "$text" >>"$failure_summary_file" 619 620 # If the command is fatal (configure or build command), stop this 621 # component. Otherwise (test command) keep the component running 622 # (run more tests from the same build). 623 if ! can_keep_going_after_failure "$failed_command"; then 624 exit $last_failure_status 625 fi 626 } 627 628 final_report () { 629 if [ $failure_count -gt 0 ]; then 630 echo 631 echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" 632 echo "${start_red}FAILED: $failure_count components${end_color}" 633 cat "$failure_summary_file" 634 echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" 635 elif [ -z "${1-}" ]; then 636 echo "SUCCESS :)" 637 fi 638 if [ -n "${1-}" ]; then 639 echo "Killed by SIG$1." 640 fi 641 rm -f "$failure_summary_file" 642 if [ $failure_count -gt 0 ]; then 643 exit 1 644 fi 645 } 646} 647 648# record_status() and if_build_succeeded() are kept temporarily for backward 649# compatibility. Don't use them in new components. 650record_status () { 651 "$@" 652} 653if_build_succeeded () { 654 "$@" 655} 656 657# '! true' does not trigger the ERR trap. Arrange to trigger it, with 658# a reasonably informative error message (not just "$@"). 659not () { 660 if "$@"; then 661 report_failed_command="! $*" 662 false 663 unset report_failed_command 664 fi 665} 666 667pre_prepare_outcome_file () { 668 case "$MBEDTLS_TEST_OUTCOME_FILE" in 669 [!/]*) MBEDTLS_TEST_OUTCOME_FILE="$PWD/$MBEDTLS_TEST_OUTCOME_FILE";; 670 esac 671 if [ -n "$MBEDTLS_TEST_OUTCOME_FILE" ] && [ "$append_outcome" -eq 0 ]; then 672 rm -f "$MBEDTLS_TEST_OUTCOME_FILE" 673 fi 674} 675 676pre_print_configuration () { 677 if [ $QUIET -eq 1 ]; then 678 return 679 fi 680 681 msg "info: $0 configuration" 682 echo "MEMORY: $MEMORY" 683 echo "FORCE: $FORCE" 684 echo "MBEDTLS_TEST_OUTCOME_FILE: ${MBEDTLS_TEST_OUTCOME_FILE:-(none)}" 685 echo "SEED: ${SEED-"UNSET"}" 686 echo 687 echo "OPENSSL: $OPENSSL" 688 echo "OPENSSL_LEGACY: $OPENSSL_LEGACY" 689 echo "OPENSSL_NEXT: $OPENSSL_NEXT" 690 echo "GNUTLS_CLI: $GNUTLS_CLI" 691 echo "GNUTLS_SERV: $GNUTLS_SERV" 692 echo "GNUTLS_LEGACY_CLI: $GNUTLS_LEGACY_CLI" 693 echo "GNUTLS_LEGACY_SERV: $GNUTLS_LEGACY_SERV" 694 echo "ARMC5_BIN_DIR: $ARMC5_BIN_DIR" 695 echo "ARMC6_BIN_DIR: $ARMC6_BIN_DIR" 696} 697 698# Make sure the tools we need are available. 699pre_check_tools () { 700 # Build the list of variables to pass to output_env.sh. 701 set env 702 703 case " $RUN_COMPONENTS " in 704 # Require OpenSSL and GnuTLS if running any tests (as opposed to 705 # only doing builds). Not all tests run OpenSSL and GnuTLS, but this 706 # is a good enough approximation in practice. 707 *" test_"*) 708 # To avoid setting OpenSSL and GnuTLS for each call to compat.sh 709 # and ssl-opt.sh, we just export the variables they require. 710 export OPENSSL_CMD="$OPENSSL" 711 export GNUTLS_CLI="$GNUTLS_CLI" 712 export GNUTLS_SERV="$GNUTLS_SERV" 713 # Avoid passing --seed flag in every call to ssl-opt.sh 714 if [ -n "${SEED-}" ]; then 715 export SEED 716 fi 717 set "$@" OPENSSL="$OPENSSL" OPENSSL_LEGACY="$OPENSSL_LEGACY" 718 set "$@" GNUTLS_CLI="$GNUTLS_CLI" GNUTLS_SERV="$GNUTLS_SERV" 719 set "$@" GNUTLS_LEGACY_CLI="$GNUTLS_LEGACY_CLI" 720 set "$@" GNUTLS_LEGACY_SERV="$GNUTLS_LEGACY_SERV" 721 check_tools "$OPENSSL" "$OPENSSL_LEGACY" "$OPENSSL_NEXT" \ 722 "$GNUTLS_CLI" "$GNUTLS_SERV" \ 723 "$GNUTLS_LEGACY_CLI" "$GNUTLS_LEGACY_SERV" 724 ;; 725 esac 726 727 case " $RUN_COMPONENTS " in 728 *_doxygen[_\ ]*) check_tools "doxygen" "dot";; 729 esac 730 731 case " $RUN_COMPONENTS " in 732 *_arm_none_eabi_gcc[_\ ]*) check_tools "${ARM_NONE_EABI_GCC_PREFIX}gcc";; 733 esac 734 735 case " $RUN_COMPONENTS " in 736 *_mingw[_\ ]*) check_tools "i686-w64-mingw32-gcc";; 737 esac 738 739 case " $RUN_COMPONENTS " in 740 *" test_zeroize "*) check_tools "gdb";; 741 esac 742 743 case " $RUN_COMPONENTS " in 744 *_armcc*) 745 ARMC5_CC="$ARMC5_BIN_DIR/armcc" 746 ARMC5_AR="$ARMC5_BIN_DIR/armar" 747 ARMC5_FROMELF="$ARMC5_BIN_DIR/fromelf" 748 ARMC6_CC="$ARMC6_BIN_DIR/armclang" 749 ARMC6_AR="$ARMC6_BIN_DIR/armar" 750 ARMC6_FROMELF="$ARMC6_BIN_DIR/fromelf" 751 check_tools "$ARMC5_CC" "$ARMC5_AR" "$ARMC5_FROMELF" \ 752 "$ARMC6_CC" "$ARMC6_AR" "$ARMC6_FROMELF";; 753 esac 754 755 # past this point, no call to check_tool, only printing output 756 if [ $QUIET -eq 1 ]; then 757 return 758 fi 759 760 msg "info: output_env.sh" 761 case $RUN_COMPONENTS in 762 *_armcc*) 763 set "$@" ARMC5_CC="$ARMC5_CC" ARMC6_CC="$ARMC6_CC" RUN_ARMCC=1;; 764 *) set "$@" RUN_ARMCC=0;; 765 esac 766 "$@" scripts/output_env.sh 767} 768 769 770 771################################################################ 772#### Basic checks 773################################################################ 774 775# 776# Test Suites to be executed 777# 778# The test ordering tries to optimize for the following criteria: 779# 1. Catch possible problems early, by running first tests that run quickly 780# and/or are more likely to fail than others (eg I use Clang most of the 781# time, so start with a GCC build). 782# 2. Minimize total running time, by avoiding useless rebuilds 783# 784# Indicative running times are given for reference. 785 786component_check_recursion () { 787 msg "Check: recursion.pl" # < 1s 788 tests/scripts/recursion.pl library/*.c 789} 790 791component_check_generated_files () { 792 msg "Check: freshness of generated source files" # < 1s 793 tests/scripts/check-generated-files.sh 794} 795 796component_check_doxy_blocks () { 797 msg "Check: doxygen markup outside doxygen blocks" # < 1s 798 tests/scripts/check-doxy-blocks.pl 799} 800 801component_check_files () { 802 msg "Check: file sanity checks (permissions, encodings)" # < 1s 803 tests/scripts/check_files.py 804} 805 806component_check_changelog () { 807 msg "Check: changelog entries" # < 1s 808 rm -f ChangeLog.new 809 scripts/assemble_changelog.py -o ChangeLog.new 810 if [ -e ChangeLog.new ]; then 811 # Show the diff for information. It isn't an error if the diff is 812 # non-empty. 813 diff -u ChangeLog ChangeLog.new || true 814 rm ChangeLog.new 815 fi 816} 817 818component_check_names () { 819 msg "Check: declared and exported names (builds the library)" # < 3s 820 tests/scripts/check_names.py -v 821} 822 823component_check_test_cases () { 824 msg "Check: test case descriptions" # < 1s 825 if [ $QUIET -eq 1 ]; then 826 opt='--quiet' 827 else 828 opt='' 829 fi 830 tests/scripts/check_test_cases.py $opt 831 unset opt 832} 833 834component_check_doxygen_warnings () { 835 msg "Check: doxygen warnings (builds the documentation)" # ~ 3s 836 tests/scripts/doxygen.sh 837} 838 839 840 841################################################################ 842#### Build and test many configurations and targets 843################################################################ 844 845component_test_default_out_of_box () { 846 msg "build: make, default config (out-of-box)" # ~1min 847 make 848 # Disable fancy stuff 849 SAVE_MBEDTLS_TEST_OUTCOME_FILE="$MBEDTLS_TEST_OUTCOME_FILE" 850 unset MBEDTLS_TEST_OUTCOME_FILE 851 852 msg "test: main suites make, default config (out-of-box)" # ~10s 853 make test 854 855 msg "selftest: make, default config (out-of-box)" # ~10s 856 programs/test/selftest 857 858 export MBEDTLS_TEST_OUTCOME_FILE="$SAVE_MBEDTLS_TEST_OUTCOME_FILE" 859 unset SAVE_MBEDTLS_TEST_OUTCOME_FILE 860} 861 862component_test_default_cmake_gcc_asan () { 863 msg "build: cmake, gcc, ASan" # ~ 1 min 50s 864 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 865 make 866 867 msg "test: main suites (inc. selftests) (ASan build)" # ~ 50s 868 make test 869 870 msg "test: selftest (ASan build)" # ~ 10s 871 programs/test/selftest 872 873 msg "test: ssl-opt.sh (ASan build)" # ~ 1 min 874 tests/ssl-opt.sh 875 876 msg "test: compat.sh (ASan build)" # ~ 6 min 877 tests/compat.sh 878 879 msg "test: context-info.sh (ASan build)" # ~ 15 sec 880 tests/context-info.sh 881} 882 883component_test_full_cmake_gcc_asan () { 884 msg "build: full config, cmake, gcc, ASan" 885 scripts/config.py full 886 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 887 make 888 889 msg "test: main suites (inc. selftests) (full config, ASan build)" 890 make test 891 892 msg "test: selftest (ASan build)" # ~ 10s 893 programs/test/selftest 894 895 msg "test: ssl-opt.sh (full config, ASan build)" 896 tests/ssl-opt.sh 897 898 msg "test: compat.sh (full config, ASan build)" 899 tests/compat.sh 900 901 msg "test: context-info.sh (full config, ASan build)" # ~ 15 sec 902 tests/context-info.sh 903} 904 905component_test_psa_crypto_key_id_encodes_owner () { 906 msg "build: full config - USE_PSA_CRYPTO + PSA_CRYPTO_KEY_ID_ENCODES_OWNER, cmake, gcc, ASan" 907 scripts/config.py full 908 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 909 scripts/config.py set MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER 910 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 911 make 912 913 msg "test: full config - USE_PSA_CRYPTO + PSA_CRYPTO_KEY_ID_ENCODES_OWNER, cmake, gcc, ASan" 914 make test 915} 916 917# check_renamed_symbols HEADER LIB 918# Check that if HEADER contains '#define MACRO ...' then MACRO is not a symbol 919# name is LIB. 920check_renamed_symbols () { 921 ! nm "$2" | sed 's/.* //' | 922 grep -x -F "$(sed -n 's/^ *# *define *\([A-Z_a-z][0-9A-Z_a-z]*\)..*/\1/p' "$1")" 923} 924 925component_build_psa_crypto_spm () { 926 msg "build: full config - USE_PSA_CRYPTO + PSA_CRYPTO_KEY_ID_ENCODES_OWNER + PSA_CRYPTO_SPM, make, gcc" 927 scripts/config.py full 928 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 929 scripts/config.py unset MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS 930 scripts/config.py set MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER 931 scripts/config.py set MBEDTLS_PSA_CRYPTO_SPM 932 # We can only compile, not link, since our test and sample programs 933 # aren't equipped for the modified names used when MBEDTLS_PSA_CRYPTO_SPM 934 # is active. 935 make CC=gcc CFLAGS='-Werror -Wall -Wextra -I../tests/include/spe' lib 936 937 # Check that if a symbol is renamed by crypto_spe.h, the non-renamed 938 # version is not present. 939 echo "Checking for renamed symbols in the library" 940 check_renamed_symbols tests/include/spe/crypto_spe.h library/libmbedcrypto.a 941} 942 943component_test_psa_crypto_client () { 944 msg "build: default config - PSA_CRYPTO_C + PSA_CRYPTO_CLIENT, make" 945 scripts/config.py unset MBEDTLS_PSA_CRYPTO_C 946 scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C 947 scripts/config.py set MBEDTLS_PSA_CRYPTO_CLIENT 948 make 949 950 msg "test: default config - PSA_CRYPTO_C + PSA_CRYPTO_CLIENT, make" 951 make test 952} 953 954component_test_zlib_make() { 955 msg "build: zlib enabled, make" 956 scripts/config.py set MBEDTLS_ZLIB_SUPPORT 957 make ZLIB=1 CFLAGS='-Werror -O2' 958 959 msg "test: main suites (zlib, make)" 960 make test 961 962 msg "test: ssl-opt.sh (zlib, make)" 963 tests/ssl-opt.sh 964} 965support_test_zlib_make () { 966 base=support_test_zlib_$$ 967 cat <<'EOF' > ${base}.c 968#include "zlib.h" 969int main(void) { return 0; } 970EOF 971 gcc -o ${base}.exe ${base}.c -lz 2>/dev/null 972 ret=$? 973 rm -f ${base}.* 974 return $ret 975} 976 977component_test_zlib_cmake() { 978 msg "build: zlib enabled, cmake" 979 scripts/config.py set MBEDTLS_ZLIB_SUPPORT 980 cmake -D ENABLE_ZLIB_SUPPORT=On -D CMAKE_BUILD_TYPE:String=Release . 981 make 982 983 msg "test: main suites (zlib, cmake)" 984 make test 985 986 msg "test: ssl-opt.sh (zlib, cmake)" 987 tests/ssl-opt.sh 988} 989support_test_zlib_cmake () { 990 support_test_zlib_make "$@" 991} 992 993component_test_psa_crypto_rsa_no_genprime() { 994 msg "build: default config minus MBEDTLS_GENPRIME" 995 scripts/config.py unset MBEDTLS_GENPRIME 996 make 997 998 msg "test: default config minus MBEDTLS_GENPRIME" 999 make test 1000} 1001 1002component_test_ref_configs () { 1003 msg "test/build: ref-configs (ASan build)" # ~ 6 min 20s 1004 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1005 tests/scripts/test-ref-configs.pl 1006} 1007 1008component_test_sslv3 () { 1009 msg "build: Default + SSLv3 (ASan build)" # ~ 6 min 1010 scripts/config.py set MBEDTLS_SSL_PROTO_SSL3 1011 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1012 make 1013 1014 msg "test: SSLv3 - main suites (inc. selftests) (ASan build)" # ~ 50s 1015 make test 1016 1017 msg "build: SSLv3 - compat.sh (ASan build)" # ~ 6 min 1018 tests/compat.sh -m 'tls1 tls1_1 tls12 dtls1 dtls12' 1019 env OPENSSL_CMD="$OPENSSL_LEGACY" tests/compat.sh -m 'ssl3' 1020 1021 msg "build: SSLv3 - ssl-opt.sh (ASan build)" # ~ 6 min 1022 tests/ssl-opt.sh 1023 1024 msg "build: SSLv3 - context-info.sh (ASan build)" # ~ 15 sec 1025 tests/context-info.sh 1026} 1027 1028component_test_no_renegotiation () { 1029 msg "build: Default + !MBEDTLS_SSL_RENEGOTIATION (ASan build)" # ~ 6 min 1030 scripts/config.py unset MBEDTLS_SSL_RENEGOTIATION 1031 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1032 make 1033 1034 msg "test: !MBEDTLS_SSL_RENEGOTIATION - main suites (inc. selftests) (ASan build)" # ~ 50s 1035 make test 1036 1037 msg "test: !MBEDTLS_SSL_RENEGOTIATION - ssl-opt.sh (ASan build)" # ~ 6 min 1038 tests/ssl-opt.sh 1039} 1040 1041component_test_no_pem_no_fs () { 1042 msg "build: Default + !MBEDTLS_PEM_PARSE_C + !MBEDTLS_FS_IO (ASan build)" 1043 scripts/config.py unset MBEDTLS_PEM_PARSE_C 1044 scripts/config.py unset MBEDTLS_FS_IO 1045 scripts/config.py unset MBEDTLS_PSA_ITS_FILE_C # requires a filesystem 1046 scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C # requires PSA ITS 1047 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1048 make 1049 1050 msg "test: !MBEDTLS_PEM_PARSE_C !MBEDTLS_FS_IO - main suites (inc. selftests) (ASan build)" # ~ 50s 1051 make test 1052 1053 msg "test: !MBEDTLS_PEM_PARSE_C !MBEDTLS_FS_IO - ssl-opt.sh (ASan build)" # ~ 6 min 1054 tests/ssl-opt.sh 1055} 1056 1057component_test_rsa_no_crt () { 1058 msg "build: Default + RSA_NO_CRT (ASan build)" # ~ 6 min 1059 scripts/config.py set MBEDTLS_RSA_NO_CRT 1060 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1061 make 1062 1063 msg "test: RSA_NO_CRT - main suites (inc. selftests) (ASan build)" # ~ 50s 1064 make test 1065 1066 msg "test: RSA_NO_CRT - RSA-related part of ssl-opt.sh (ASan build)" # ~ 5s 1067 tests/ssl-opt.sh -f RSA 1068 1069 msg "test: RSA_NO_CRT - RSA-related part of compat.sh (ASan build)" # ~ 3 min 1070 tests/compat.sh -t RSA 1071 1072 msg "test: RSA_NO_CRT - RSA-related part of context-info.sh (ASan build)" # ~ 15 sec 1073 tests/context-info.sh 1074} 1075 1076component_test_no_ctr_drbg_classic () { 1077 msg "build: Full minus CTR_DRBG, classic crypto in TLS" 1078 scripts/config.py full 1079 scripts/config.py unset MBEDTLS_CTR_DRBG_C 1080 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1081 1082 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1083 make 1084 1085 msg "test: Full minus CTR_DRBG, classic crypto - main suites" 1086 make test 1087 1088 # In this configuration, the TLS test programs use HMAC_DRBG. 1089 # The SSL tests are slow, so run a small subset, just enough to get 1090 # confidence that the SSL code copes with HMAC_DRBG. 1091 msg "test: Full minus CTR_DRBG, classic crypto - ssl-opt.sh (subset)" 1092 tests/ssl-opt.sh -f 'Default\|SSL async private.*delay=\|tickets enabled on server' 1093 1094 msg "test: Full minus CTR_DRBG, classic crypto - compat.sh (subset)" 1095 tests/compat.sh -m tls12 -t 'ECDSA PSK' -V NO -p OpenSSL 1096} 1097 1098component_test_no_ctr_drbg_use_psa () { 1099 msg "build: Full minus CTR_DRBG, PSA crypto in TLS" 1100 scripts/config.py full 1101 scripts/config.py unset MBEDTLS_CTR_DRBG_C 1102 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO 1103 1104 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1105 make 1106 1107 msg "test: Full minus CTR_DRBG, USE_PSA_CRYPTO - main suites" 1108 make test 1109 1110 # In this configuration, the TLS test programs use HMAC_DRBG. 1111 # The SSL tests are slow, so run a small subset, just enough to get 1112 # confidence that the SSL code copes with HMAC_DRBG. 1113 msg "test: Full minus CTR_DRBG, USE_PSA_CRYPTO - ssl-opt.sh (subset)" 1114 tests/ssl-opt.sh -f 'Default\|SSL async private.*delay=\|tickets enabled on server' 1115 1116 msg "test: Full minus CTR_DRBG, USE_PSA_CRYPTO - compat.sh (subset)" 1117 tests/compat.sh -m tls12 -t 'ECDSA PSK' -V NO -p OpenSSL 1118} 1119 1120component_test_no_hmac_drbg_classic () { 1121 msg "build: Full minus HMAC_DRBG, classic crypto in TLS" 1122 scripts/config.py full 1123 scripts/config.py unset MBEDTLS_HMAC_DRBG_C 1124 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG 1125 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1126 1127 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1128 make 1129 1130 msg "test: Full minus HMAC_DRBG, classic crypto - main suites" 1131 make test 1132 1133 # Normally our ECDSA implementation uses deterministic ECDSA. But since 1134 # HMAC_DRBG is disabled in this configuration, randomized ECDSA is used 1135 # instead. 1136 # Test SSL with non-deterministic ECDSA. Only test features that 1137 # might be affected by how ECDSA signature is performed. 1138 msg "test: Full minus HMAC_DRBG, classic crypto - ssl-opt.sh (subset)" 1139 tests/ssl-opt.sh -f 'Default\|SSL async private: sign' 1140 1141 # To save time, only test one protocol version, since this part of 1142 # the protocol is identical in (D)TLS up to 1.2. 1143 msg "test: Full minus HMAC_DRBG, classic crypto - compat.sh (ECDSA)" 1144 tests/compat.sh -m tls12 -t 'ECDSA' 1145} 1146 1147component_test_no_hmac_drbg_use_psa () { 1148 msg "build: Full minus HMAC_DRBG, PSA crypto in TLS" 1149 scripts/config.py full 1150 scripts/config.py unset MBEDTLS_HMAC_DRBG_C 1151 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG 1152 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO 1153 1154 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1155 make 1156 1157 msg "test: Full minus HMAC_DRBG, USE_PSA_CRYPTO - main suites" 1158 make test 1159 1160 # Normally our ECDSA implementation uses deterministic ECDSA. But since 1161 # HMAC_DRBG is disabled in this configuration, randomized ECDSA is used 1162 # instead. 1163 # Test SSL with non-deterministic ECDSA. Only test features that 1164 # might be affected by how ECDSA signature is performed. 1165 msg "test: Full minus HMAC_DRBG, USE_PSA_CRYPTO - ssl-opt.sh (subset)" 1166 tests/ssl-opt.sh -f 'Default\|SSL async private: sign' 1167 1168 # To save time, only test one protocol version, since this part of 1169 # the protocol is identical in (D)TLS up to 1.2. 1170 msg "test: Full minus HMAC_DRBG, USE_PSA_CRYPTO - compat.sh (ECDSA)" 1171 tests/compat.sh -m tls12 -t 'ECDSA' 1172} 1173 1174component_test_psa_external_rng_no_drbg_classic () { 1175 msg "build: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, classic crypto in TLS" 1176 scripts/config.py full 1177 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1178 scripts/config.py set MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG 1179 scripts/config.py unset MBEDTLS_ENTROPY_C 1180 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED 1181 scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT 1182 scripts/config.py unset MBEDTLS_CTR_DRBG_C 1183 scripts/config.py unset MBEDTLS_HMAC_DRBG_C 1184 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG 1185 scripts/config.py set MBEDTLS_ECP_NO_INTERNAL_RNG 1186 # When MBEDTLS_USE_PSA_CRYPTO is disabled and there is no DRBG, 1187 # the SSL test programs don't have an RNG and can't work. Explicitly 1188 # make them use the PSA RNG with -DMBEDTLS_TEST_USE_PSA_CRYPTO_RNG. 1189 make CFLAGS="$ASAN_CFLAGS -O2 -DMBEDTLS_TEST_USE_PSA_CRYPTO_RNG" LDFLAGS="$ASAN_CFLAGS" 1190 1191 msg "test: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, classic crypto - main suites" 1192 make test 1193 1194 msg "test: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, classic crypto - ssl-opt.sh (subset)" 1195 tests/ssl-opt.sh -f 'Default' 1196} 1197 1198component_test_psa_external_rng_no_drbg_use_psa () { 1199 msg "build: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, PSA crypto in TLS" 1200 scripts/config.py full 1201 scripts/config.py set MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG 1202 scripts/config.py unset MBEDTLS_ENTROPY_C 1203 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED 1204 scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT 1205 scripts/config.py unset MBEDTLS_CTR_DRBG_C 1206 scripts/config.py unset MBEDTLS_HMAC_DRBG_C 1207 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG 1208 scripts/config.py set MBEDTLS_ECP_NO_INTERNAL_RNG 1209 make CFLAGS="$ASAN_CFLAGS -O2" LDFLAGS="$ASAN_CFLAGS" 1210 1211 msg "test: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, PSA crypto - main suites" 1212 make test 1213 1214 msg "test: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, PSA crypto - ssl-opt.sh (subset)" 1215 tests/ssl-opt.sh -f 'Default\|opaque' 1216} 1217 1218component_test_psa_external_rng_use_psa_crypto () { 1219 msg "build: full + PSA_CRYPTO_EXTERNAL_RNG + USE_PSA_CRYPTO minus CTR_DRBG" 1220 scripts/config.py full 1221 scripts/config.py set MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG 1222 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO 1223 scripts/config.py unset MBEDTLS_CTR_DRBG_C 1224 make CFLAGS="$ASAN_CFLAGS -O2" LDFLAGS="$ASAN_CFLAGS" 1225 1226 msg "test: full + PSA_CRYPTO_EXTERNAL_RNG + USE_PSA_CRYPTO minus CTR_DRBG" 1227 make test 1228 1229 msg "test: full + PSA_CRYPTO_EXTERNAL_RNG + USE_PSA_CRYPTO minus CTR_DRBG" 1230 tests/ssl-opt.sh -f 'Default\|opaque' 1231} 1232 1233component_test_ecp_no_internal_rng () { 1234 msg "build: Default plus ECP_NO_INTERNAL_RNG minus DRBG modules" 1235 scripts/config.py set MBEDTLS_ECP_NO_INTERNAL_RNG 1236 scripts/config.py unset MBEDTLS_CTR_DRBG_C 1237 scripts/config.py unset MBEDTLS_HMAC_DRBG_C 1238 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG 1239 scripts/config.py unset MBEDTLS_PSA_CRYPTO_C # requires a DRBG 1240 scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C # requires PSA Crypto 1241 1242 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1243 make 1244 1245 msg "test: ECP_NO_INTERNAL_RNG, no DRBG module" 1246 make test 1247 1248 # no SSL tests as they all depend on having a DRBG 1249} 1250 1251component_test_ecp_restartable_no_internal_rng () { 1252 msg "build: Default plus ECP_RESTARTABLE and ECP_NO_INTERNAL_RNG, no DRBG" 1253 scripts/config.py set MBEDTLS_ECP_NO_INTERNAL_RNG 1254 scripts/config.py set MBEDTLS_ECP_RESTARTABLE 1255 scripts/config.py unset MBEDTLS_CTR_DRBG_C 1256 scripts/config.py unset MBEDTLS_HMAC_DRBG_C 1257 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG 1258 scripts/config.py unset MBEDTLS_PSA_CRYPTO_C # requires CTR_DRBG 1259 scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C # requires PSA Crypto 1260 1261 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1262 make 1263 1264 msg "test: ECP_RESTARTABLE and ECP_NO_INTERNAL_RNG, no DRBG module" 1265 make test 1266 1267 # no SSL tests as they all depend on having a DRBG 1268} 1269 1270component_test_new_ecdh_context () { 1271 msg "build: new ECDH context (ASan build)" # ~ 6 min 1272 scripts/config.py unset MBEDTLS_ECDH_LEGACY_CONTEXT 1273 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1274 make 1275 1276 msg "test: new ECDH context - main suites (inc. selftests) (ASan build)" # ~ 50s 1277 make test 1278 1279 msg "test: new ECDH context - ECDH-related part of ssl-opt.sh (ASan build)" # ~ 5s 1280 tests/ssl-opt.sh -f ECDH 1281 1282 msg "test: new ECDH context - compat.sh with some ECDH ciphersuites (ASan build)" # ~ 3 min 1283 # Exclude some symmetric ciphers that are redundant here to gain time. 1284 tests/compat.sh -f ECDH -V NO -e 'ARCFOUR\|ARIA\|CAMELLIA\|CHACHA\|DES\|RC4' 1285} 1286 1287component_test_everest () { 1288 msg "build: Everest ECDH context (ASan build)" # ~ 6 min 1289 scripts/config.py unset MBEDTLS_ECDH_LEGACY_CONTEXT 1290 scripts/config.py set MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED 1291 CC=clang cmake -D CMAKE_BUILD_TYPE:String=Asan . 1292 make 1293 1294 msg "test: Everest ECDH context - main suites (inc. selftests) (ASan build)" # ~ 50s 1295 make test 1296 1297 msg "test: Everest ECDH context - ECDH-related part of ssl-opt.sh (ASan build)" # ~ 5s 1298 tests/ssl-opt.sh -f ECDH 1299 1300 msg "test: Everest ECDH context - compat.sh with some ECDH ciphersuites (ASan build)" # ~ 3 min 1301 # Exclude some symmetric ciphers that are redundant here to gain time. 1302 tests/compat.sh -f ECDH -V NO -e 'ARCFOUR\|ARIA\|CAMELLIA\|CHACHA\|DES\|RC4' 1303} 1304 1305component_test_everest_curve25519_only () { 1306 msg "build: Everest ECDH context, only Curve25519" # ~ 6 min 1307 scripts/config.py unset MBEDTLS_ECDH_LEGACY_CONTEXT 1308 scripts/config.py set MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED 1309 scripts/config.py unset MBEDTLS_ECDSA_C 1310 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED 1311 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED 1312 # Disable all curves 1313 for c in $(sed -n 's/#define \(MBEDTLS_ECP_DP_[0-9A-Z_a-z]*_ENABLED\).*/\1/p' <"$CONFIG_H"); do 1314 scripts/config.py unset "$c" 1315 done 1316 scripts/config.py set MBEDTLS_ECP_DP_CURVE25519_ENABLED 1317 1318 make CFLAGS="$ASAN_CFLAGS -O2" LDFLAGS="$ASAN_CFLAGS" 1319 1320 msg "test: Everest ECDH context, only Curve25519" # ~ 50s 1321 make test 1322} 1323 1324component_test_small_ssl_out_content_len () { 1325 msg "build: small SSL_OUT_CONTENT_LEN (ASan build)" 1326 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 16384 1327 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 4096 1328 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1329 make 1330 1331 msg "test: small SSL_OUT_CONTENT_LEN - ssl-opt.sh MFL and large packet tests" 1332 tests/ssl-opt.sh -f "Max fragment\|Large packet" 1333} 1334 1335component_test_small_ssl_in_content_len () { 1336 msg "build: small SSL_IN_CONTENT_LEN (ASan build)" 1337 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 4096 1338 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 16384 1339 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1340 make 1341 1342 msg "test: small SSL_IN_CONTENT_LEN - ssl-opt.sh MFL tests" 1343 tests/ssl-opt.sh -f "Max fragment" 1344} 1345 1346component_test_small_ssl_dtls_max_buffering () { 1347 msg "build: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #0" 1348 scripts/config.py set MBEDTLS_SSL_DTLS_MAX_BUFFERING 1000 1349 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1350 make 1351 1352 msg "test: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #0 - ssl-opt.sh specific reordering test" 1353 tests/ssl-opt.sh -f "DTLS reordering: Buffer out-of-order hs msg before reassembling next, free buffered msg" 1354} 1355 1356component_test_small_mbedtls_ssl_dtls_max_buffering () { 1357 msg "build: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #1" 1358 scripts/config.py set MBEDTLS_SSL_DTLS_MAX_BUFFERING 190 1359 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1360 make 1361 1362 msg "test: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #1 - ssl-opt.sh specific reordering test" 1363 tests/ssl-opt.sh -f "DTLS reordering: Buffer encrypted Finished message, drop for fragmented NewSessionTicket" 1364} 1365 1366component_test_psa_collect_statuses () { 1367 msg "build+test: psa_collect_statuses" # ~30s 1368 scripts/config.py full 1369 tests/scripts/psa_collect_statuses.py 1370 # Check that psa_crypto_init() succeeded at least once 1371 grep -q '^0:psa_crypto_init:' tests/statuses.log 1372 rm -f tests/statuses.log 1373} 1374 1375component_test_full_cmake_clang () { 1376 msg "build: cmake, full config, clang" # ~ 50s 1377 scripts/config.py full 1378 CC=clang cmake -D CMAKE_BUILD_TYPE:String=Release -D ENABLE_TESTING=On . 1379 make 1380 1381 msg "test: main suites (full config, clang)" # ~ 5s 1382 make test 1383 1384 msg "test: psa_constant_names (full config, clang)" # ~ 1s 1385 tests/scripts/test_psa_constant_names.py 1386 1387 msg "test: ssl-opt.sh default, ECJPAKE, SSL async (full config)" # ~ 1s 1388 tests/ssl-opt.sh -f 'Default\|ECJPAKE\|SSL async private' 1389 1390 msg "test: compat.sh RC4, DES, 3DES & NULL (full config)" # ~ 2 min 1391 env OPENSSL_CMD="$OPENSSL_LEGACY" GNUTLS_CLI="$GNUTLS_LEGACY_CLI" GNUTLS_SERV="$GNUTLS_LEGACY_SERV" tests/compat.sh -e '^$' -f 'NULL\|DES\|RC4\|ARCFOUR' 1392 1393 msg "test: compat.sh ARIA + ChachaPoly" 1394 env OPENSSL_CMD="$OPENSSL_NEXT" tests/compat.sh -e '^$' -f 'ARIA\|CHACHA' 1395} 1396 1397component_test_memsan_constant_flow () { 1398 # This tests both (1) accesses to undefined memory, and (2) branches or 1399 # memory access depending on secret values. To distinguish between those: 1400 # - unset MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN - does the failure persist? 1401 # - or alternatively, change the build type to MemSanDbg, which enables 1402 # origin tracking and nicer stack traces (which are useful for debugging 1403 # anyway), and check if the origin was TEST_CF_SECRET() or something else. 1404 msg "build: cmake MSan (clang), full config with constant flow testing" 1405 scripts/config.py full 1406 scripts/config.py set MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN 1407 scripts/config.py unset MBEDTLS_AESNI_C # memsan doesn't grok asm 1408 CC=clang cmake -D CMAKE_BUILD_TYPE:String=MemSan . 1409 make 1410 1411 msg "test: main suites (Msan + constant flow)" 1412 make test 1413} 1414 1415component_test_valgrind_constant_flow () { 1416 # This tests both (1) everything that valgrind's memcheck usually checks 1417 # (heap buffer overflows, use of uninitialized memory, use-after-free, 1418 # etc.) and (2) branches or memory access depending on secret values, 1419 # which will be reported as uninitialized memory. To distinguish between 1420 # secret and actually uninitialized: 1421 # - unset MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND - does the failure persist? 1422 # - or alternatively, build with debug info and manually run the offending 1423 # test suite with valgrind --track-origins=yes, then check if the origin 1424 # was TEST_CF_SECRET() or something else. 1425 msg "build: cmake release GCC, full config with constant flow testing" 1426 scripts/config.py full 1427 scripts/config.py set MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND 1428 cmake -D CMAKE_BUILD_TYPE:String=Release . 1429 make 1430 1431 # this only shows a summary of the results (how many of each type) 1432 # details are left in Testing/<date>/DynamicAnalysis.xml 1433 msg "test: main suites (valgrind + constant flow)" 1434 make memcheck 1435} 1436 1437component_test_default_no_deprecated () { 1438 # Test that removing the deprecated features from the default 1439 # configuration leaves something consistent. 1440 msg "build: make, default + MBEDTLS_DEPRECATED_REMOVED" # ~ 30s 1441 scripts/config.py set MBEDTLS_DEPRECATED_REMOVED 1442 make CC=gcc CFLAGS='-O -Werror -Wall -Wextra' 1443 1444 msg "test: make, default + MBEDTLS_DEPRECATED_REMOVED" # ~ 5s 1445 make test 1446} 1447 1448component_test_full_no_deprecated () { 1449 msg "build: make, full_no_deprecated config" # ~ 30s 1450 scripts/config.py full_no_deprecated 1451 make CC=gcc CFLAGS='-O -Werror -Wall -Wextra' 1452 1453 msg "test: make, full_no_deprecated config" # ~ 5s 1454 make test 1455} 1456 1457component_test_full_no_deprecated_deprecated_warning () { 1458 # Test that there is nothing deprecated in "full_no_deprecated". 1459 # A deprecated feature would trigger a warning (made fatal) from 1460 # MBEDTLS_DEPRECATED_WARNING. 1461 msg "build: make, full_no_deprecated config, MBEDTLS_DEPRECATED_WARNING" # ~ 30s 1462 scripts/config.py full_no_deprecated 1463 scripts/config.py unset MBEDTLS_DEPRECATED_REMOVED 1464 scripts/config.py set MBEDTLS_DEPRECATED_WARNING 1465 make CC=gcc CFLAGS='-O -Werror -Wall -Wextra' 1466 1467 msg "test: make, full_no_deprecated config, MBEDTLS_DEPRECATED_WARNING" # ~ 5s 1468 make test 1469} 1470 1471component_test_full_deprecated_warning () { 1472 # Test that when MBEDTLS_DEPRECATED_WARNING is enabled, the build passes 1473 # with only certain whitelisted types of warnings. 1474 msg "build: make, full config + MBEDTLS_DEPRECATED_WARNING, expect warnings" # ~ 30s 1475 scripts/config.py full 1476 scripts/config.py set MBEDTLS_DEPRECATED_WARNING 1477 # Expect warnings from '#warning' directives in check_config.h. 1478 make CC=gcc CFLAGS='-O -Werror -Wall -Wextra -Wno-error=cpp' lib programs 1479 1480 msg "build: make tests, full config + MBEDTLS_DEPRECATED_WARNING, expect warnings" # ~ 30s 1481 # Set MBEDTLS_TEST_DEPRECATED to enable tests for deprecated features. 1482 # By default those are disabled when MBEDTLS_DEPRECATED_WARNING is set. 1483 # Expect warnings from '#warning' directives in check_config.h and 1484 # from the use of deprecated functions in test suites. 1485 make CC=gcc CFLAGS='-O -Werror -Wall -Wextra -Wno-error=deprecated-declarations -Wno-error=cpp -DMBEDTLS_TEST_DEPRECATED' tests 1486 1487 msg "test: full config + MBEDTLS_TEST_DEPRECATED" # ~ 30s 1488 make test 1489} 1490 1491# Check that the specified libraries exist and are empty. 1492are_empty_libraries () { 1493 nm "$@" >/dev/null 2>/dev/null 1494 ! nm "$@" 2>/dev/null | grep -v ':$' | grep . 1495} 1496 1497component_build_crypto_default () { 1498 msg "build: make, crypto only" 1499 scripts/config.py crypto 1500 make CFLAGS='-O1 -Werror' 1501 are_empty_libraries library/libmbedx509.* library/libmbedtls.* 1502} 1503 1504component_build_crypto_full () { 1505 msg "build: make, crypto only, full config" 1506 scripts/config.py crypto_full 1507 make CFLAGS='-O1 -Werror' 1508 are_empty_libraries library/libmbedx509.* library/libmbedtls.* 1509} 1510 1511component_build_crypto_baremetal () { 1512 msg "build: make, crypto only, baremetal config" 1513 scripts/config.py crypto_baremetal 1514 make CFLAGS='-O1 -Werror' 1515 are_empty_libraries library/libmbedx509.* library/libmbedtls.* 1516} 1517 1518component_test_depends_curves () { 1519 msg "test/build: curves.pl (gcc)" # ~ 4 min 1520 tests/scripts/curves.pl 1521} 1522 1523component_test_depends_curves_psa () { 1524 msg "test/build: curves.pl with MBEDTLS_USE_PSA_CRYPTO defined (gcc)" 1525 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO 1526 tests/scripts/curves.pl 1527} 1528 1529component_test_depends_hashes () { 1530 msg "test/build: depends-hashes.pl (gcc)" # ~ 2 min 1531 tests/scripts/depends-hashes.pl 1532} 1533 1534component_test_depends_hashes_psa () { 1535 msg "test/build: depends-hashes.pl with MBEDTLS_USE_PSA_CRYPTO defined (gcc)" 1536 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO 1537 tests/scripts/depends-hashes.pl 1538} 1539 1540component_test_depends_pkalgs () { 1541 msg "test/build: depends-pkalgs.pl (gcc)" # ~ 2 min 1542 tests/scripts/depends-pkalgs.pl 1543} 1544 1545component_test_depends_pkalgs_psa () { 1546 msg "test/build: depends-pkalgs.pl with MBEDTLS_USE_PSA_CRYPTO defined (gcc)" 1547 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO 1548 tests/scripts/depends-pkalgs.pl 1549} 1550 1551component_build_key_exchanges () { 1552 msg "test/build: key-exchanges (gcc)" # ~ 1 min 1553 tests/scripts/key-exchanges.pl 1554} 1555 1556component_test_make_cxx () { 1557 msg "build: Unix make, full, gcc + g++" 1558 scripts/config.py full 1559 make TEST_CPP=1 lib programs 1560 1561 msg "test: cpp_dummy_build" 1562 programs/test/cpp_dummy_build 1563} 1564 1565component_test_no_use_psa_crypto_full_cmake_asan() { 1566 # full minus MBEDTLS_USE_PSA_CRYPTO: run the same set of tests as basic-build-test.sh 1567 msg "build: cmake, full config minus MBEDTLS_USE_PSA_CRYPTO, ASan" 1568 scripts/config.py full 1569 scripts/config.py set MBEDTLS_ECP_RESTARTABLE # not using PSA, so enable restartable ECC 1570 scripts/config.py unset MBEDTLS_PSA_CRYPTO_C 1571 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1572 scripts/config.py unset MBEDTLS_PSA_ITS_FILE_C 1573 scripts/config.py unset MBEDTLS_PSA_CRYPTO_SE_C 1574 scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C 1575 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 1576 make 1577 1578 msg "test: main suites (full minus MBEDTLS_USE_PSA_CRYPTO)" 1579 make test 1580 1581 msg "test: ssl-opt.sh (full minus MBEDTLS_USE_PSA_CRYPTO)" 1582 tests/ssl-opt.sh 1583 1584 msg "test: compat.sh default (full minus MBEDTLS_USE_PSA_CRYPTO)" 1585 tests/compat.sh 1586 1587 msg "test: compat.sh RC4, DES & NULL (full minus MBEDTLS_USE_PSA_CRYPTO)" 1588 env OPENSSL_CMD="$OPENSSL_LEGACY" GNUTLS_CLI="$GNUTLS_LEGACY_CLI" GNUTLS_SERV="$GNUTLS_LEGACY_SERV" tests/compat.sh -e '3DES\|DES-CBC3' -f 'NULL\|DES\|RC4\|ARCFOUR' 1589 1590 msg "test: compat.sh ARIA + ChachaPoly (full minus MBEDTLS_USE_PSA_CRYPTO)" 1591 env OPENSSL_CMD="$OPENSSL_NEXT" tests/compat.sh -e '^$' -f 'ARIA\|CHACHA' 1592} 1593 1594component_test_psa_crypto_config_accel_ecdsa () { 1595 msg "test: MBEDTLS_PSA_CRYPTO_CONFIG with accelerated ECDSA" 1596 1597 # Disable ALG_STREAM_CIPHER and ALG_ECB_NO_PADDING to avoid having 1598 # partial support for cipher operations in the driver test library. 1599 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_STREAM_CIPHER 1600 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_ECB_NO_PADDING 1601 1602 # SHA384 needed for some ECDSA signature tests. 1603 scripts/config.py -f tests/include/test/drivers/config_test_driver.h set MBEDTLS_SHA512_C 1604 1605 loc_accel_list="ALG_ECDSA ALG_DETERMINISTIC_ECDSA KEY_TYPE_ECC_KEY_PAIR KEY_TYPE_ECC_PUBLIC_KEY" 1606 loc_accel_flags=$( echo "$loc_accel_list" | sed 's/[^ ]* */-DLIBTESTDRIVER1_MBEDTLS_PSA_ACCEL_&/g' ) 1607 make -C tests libtestdriver1.a CFLAGS="$ASAN_CFLAGS $loc_accel_flags" LDFLAGS="$ASAN_CFLAGS" 1608 1609 # Restore test driver base configuration 1610 scripts/config.py -f tests/include/test/drivers/config_test_driver.h unset MBEDTLS_SHA512_C 1611 1612 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1613 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1614 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1615 scripts/config.py unset MBEDTLS_ECDSA_C 1616 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED 1617 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED 1618 1619 loc_accel_flags="$loc_accel_flags $( echo "$loc_accel_list" | sed 's/[^ ]* */-DMBEDTLS_PSA_ACCEL_&/g' )" 1620 make CFLAGS="$ASAN_CFLAGS -O -Werror -I../tests/include -I../tests -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_TEST_LIBTESTDRIVER1 $loc_accel_flags" LDFLAGS="-ltestdriver1 $ASAN_CFLAGS" 1621 1622 unset loc_accel_flags 1623 unset loc_accel_list 1624 1625 if_build_succeeded not grep mbedtls_ecdsa_ library/ecdsa.o 1626 1627 msg "test: MBEDTLS_PSA_CRYPTO_CONFIG with accelerated ECDSA" 1628 make test 1629} 1630 1631component_test_psa_crypto_config_accel_rsa_signature () { 1632 msg "test: MBEDTLS_PSA_CRYPTO_CONFIG with accelerated RSA signature" 1633 1634 # Disable ALG_STREAM_CIPHER and ALG_ECB_NO_PADDING to avoid having 1635 # partial support for cipher operations in the driver test library. 1636 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_STREAM_CIPHER 1637 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_ECB_NO_PADDING 1638 1639 # It seems it is not possible to remove only the support for RSA signature 1640 # in the library. Thus we have to remove all RSA support (signature and 1641 # encryption/decryption). AS there is no driver support for asymmetric 1642 # encryption/decryption so far remove RSA encryption/decryption from the 1643 # application algorithm list. 1644 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_OAEP 1645 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 1646 1647 # Make sure both the library and the test library support the SHA hash 1648 # algorithms and only those ones (SHA256 is included by default). That way: 1649 # - the test library can compute the RSA signatures even in the case of a 1650 # composite RSA signature algorithm based on a SHA hash (no other hash 1651 # used in the unit tests). 1652 # - the dependency of RSA signature tests on PSA_WANT_ALG_SHA_xyz is 1653 # fulfilled as the hash SHA algorithm is supported by the library, and 1654 # thus the tests are run, not skipped. 1655 # - when testing a signature key with an algorithm wildcard built from 1656 # PSA_ALG_ANY_HASH as algorithm to test with the key, the chosen hash 1657 # algorithm based on the hashes supported by the library is also 1658 # supported by the test library. 1659 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 1660 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 1661 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 1662 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160_C 1663 1664 scripts/config.py -f tests/include/test/drivers/config_test_driver.h set MBEDTLS_SHA1_C 1665 scripts/config.py -f tests/include/test/drivers/config_test_driver.h set MBEDTLS_SHA512_C 1666 # We need PEM parsing in the test library as well to support the import 1667 # of PEM encoded RSA keys. 1668 scripts/config.py -f tests/include/test/drivers/config_test_driver.h set MBEDTLS_PEM_PARSE_C 1669 scripts/config.py -f tests/include/test/drivers/config_test_driver.h set MBEDTLS_BASE64_C 1670 1671 loc_accel_list="ALG_RSA_PKCS1V15_SIGN ALG_RSA_PSS KEY_TYPE_RSA_KEY_PAIR KEY_TYPE_RSA_PUBLIC_KEY" 1672 loc_accel_flags=$( echo "$loc_accel_list" | sed 's/[^ ]* */-DLIBTESTDRIVER1_MBEDTLS_PSA_ACCEL_&/g' ) 1673 make -C tests libtestdriver1.a CFLAGS="$ASAN_CFLAGS $loc_accel_flags" LDFLAGS="$ASAN_CFLAGS" 1674 1675 # Restore test driver base configuration 1676 scripts/config.py -f tests/include/test/drivers/config_test_driver.h unset MBEDTLS_SHA1_C 1677 scripts/config.py -f tests/include/test/drivers/config_test_driver.h unset MBEDTLS_SHA512_C 1678 scripts/config.py -f tests/include/test/drivers/config_test_driver.h unset MBEDTLS_PEM_PARSE_C 1679 scripts/config.py -f tests/include/test/drivers/config_test_driver.h unset MBEDTLS_BASE64_C 1680 1681 1682 # Mbed TLS library build 1683 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1684 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1685 1686 # Remove RSA support and its dependencies 1687 scripts/config.py unset MBEDTLS_PKCS1_V15 1688 scripts/config.py unset MBEDTLS_PKCS1_V21 1689 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED 1690 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED 1691 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED 1692 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED 1693 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_RSA_ENABLED 1694 scripts/config.py unset MBEDTLS_RSA_C 1695 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT 1696 1697 scripts/config.py unset MBEDTLS_MD2_C 1698 scripts/config.py unset MBEDTLS_MD4_C 1699 scripts/config.py unset MBEDTLS_MD5_C 1700 scripts/config.py unset MBEDTLS_RIPEMD160_C 1701 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1 1702 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_1 1703 scripts/config.py unset MBEDTLS_SSL_CBC_RECORD_SPLITTING 1704 1705 loc_accel_flags="$loc_accel_flags $( echo "$loc_accel_list" | sed 's/[^ ]* */-DMBEDTLS_PSA_ACCEL_&/g' )" 1706 make CFLAGS="$ASAN_CFLAGS -Werror -I../tests/include -I../tests -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_TEST_LIBTESTDRIVER1 $loc_accel_flags" LDFLAGS="-ltestdriver1 $ASAN_CFLAGS" 1707 1708 unset loc_accel_flags 1709 unset loc_accel_list 1710 1711 if_build_succeeded not grep mbedtls_rsa_rsassa_pkcs1_v15_sign library/rsa.o 1712 if_build_succeeded not grep mbedtls_rsa_rsassa_pss_sign_ext library/rsa.o 1713 1714 msg "test: MBEDTLS_PSA_CRYPTO_CONFIG with accelerated RSA signature" 1715 make test 1716} 1717 1718component_test_psa_crypto_config_accel_hash () { 1719 msg "test: MBEDTLS_PSA_CRYPTO_CONFIG with accelerated hash" 1720 1721 # Disable ALG_STREAM_CIPHER and ALG_ECB_NO_PADDING to avoid having 1722 # partial support for cipher operations in the driver test library. 1723 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_STREAM_CIPHER 1724 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_ECB_NO_PADDING 1725 1726 loc_accel_list="ALG_MD4 ALG_MD5 ALG_RIPEMD160 ALG_SHA_1 ALG_SHA_224 ALG_SHA_256 ALG_SHA_384 ALG_SHA_512" 1727 loc_accel_flags=$( echo "$loc_accel_list" | sed 's/[^ ]* */-DLIBTESTDRIVER1_MBEDTLS_PSA_ACCEL_&/g' ) 1728 make -C tests libtestdriver1.a CFLAGS="$ASAN_CFLAGS $loc_accel_flags" LDFLAGS="$ASAN_CFLAGS" 1729 1730 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1731 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1732 scripts/config.py unset MBEDTLS_MD2_C 1733 scripts/config.py unset MBEDTLS_MD4_C 1734 scripts/config.py unset MBEDTLS_MD5_C 1735 scripts/config.py unset MBEDTLS_RIPEMD160_C 1736 scripts/config.py unset MBEDTLS_SHA1_C 1737 # Don't unset MBEDTLS_SHA256_C as it is needed by PSA crypto core. 1738 scripts/config.py unset MBEDTLS_SHA512_C 1739 # Unset MBEDTLS_SSL_PROTO_SSL3, MBEDTLS_SSL_PROTO_TLS1 and MBEDTLS_SSL_PROTO_TLS1_1 as they depend on MBEDTLS_SHA1_C 1740 scripts/config.py unset MBEDTLS_SSL_PROTO_SSL3 1741 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1 1742 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_1 1743 # Unset MBEDTLS_SSL_CBC_RECORD_SPLITTING as it depends on MBEDTLS_SSL_PROTO_TLS1 in the default configuration. 1744 scripts/config.py unset MBEDTLS_SSL_CBC_RECORD_SPLITTING 1745 loc_accel_flags="$loc_accel_flags $( echo "$loc_accel_list" | sed 's/[^ ]* */-DMBEDTLS_PSA_ACCEL_&/g' )" 1746 make CFLAGS="$ASAN_CFLAGS -Werror -I../tests/include -I../tests -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_TEST_LIBTESTDRIVER1 $loc_accel_flags" LDFLAGS="-ltestdriver1 $ASAN_CFLAGS" 1747 1748 unset loc_accel_flags 1749 unset loc_accel_list 1750 1751 if_build_succeeded not grep mbedtls_sha512_init library/sha512.o 1752 if_build_succeeded not grep mbedtls_sha1_init library/sha1.o 1753 1754 msg "test: MBEDTLS_PSA_CRYPTO_CONFIG with accelerated hash" 1755 make test 1756} 1757 1758component_test_psa_crypto_config_accel_cipher () { 1759 msg "test: MBEDTLS_PSA_CRYPTO_CONFIG with accelerated cipher" 1760 1761 loc_accel_list="ALG_CBC_NO_PADDING ALG_CBC_PKCS7 ALG_CTR ALG_CFB ALG_OFB ALG_XTS KEY_TYPE_DES" 1762 loc_accel_flags=$( echo "$loc_accel_list" | sed 's/[^ ]* */-DLIBTESTDRIVER1_MBEDTLS_PSA_ACCEL_&/g' ) 1763 make -C tests libtestdriver1.a CFLAGS="$ASAN_CFLAGS $loc_accel_flags" LDFLAGS="$ASAN_CFLAGS" 1764 1765 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1766 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1767 1768 # There is no intended accelerator support for ALG STREAM_CIPHER and 1769 # ALG_ECB_NO_PADDING. Therefore, asking for them in the build implies the 1770 # inclusion of the Mbed TLS cipher operations. As we want to test here with 1771 # cipher operations solely supported by accelerators, disabled those 1772 # PSA configuration options. 1773 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_STREAM_CIPHER 1774 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_ECB_NO_PADDING 1775 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_CMAC 1776 1777 scripts/config.py unset MBEDTLS_CIPHER_MODE_CBC 1778 scripts/config.py unset MBEDTLS_CIPHER_PADDING_PKCS7 1779 scripts/config.py unset MBEDTLS_CIPHER_MODE_CTR 1780 scripts/config.py unset MBEDTLS_CIPHER_MODE_CFB 1781 scripts/config.py unset MBEDTLS_CIPHER_MODE_OFB 1782 scripts/config.py unset MBEDTLS_CIPHER_MODE_XTS 1783 scripts/config.py unset MBEDTLS_DES_C 1784 1785 loc_accel_flags="$loc_accel_flags $( echo "$loc_accel_list" | sed 's/[^ ]* */-DMBEDTLS_PSA_ACCEL_&/g' )" 1786 make CFLAGS="$ASAN_CFLAGS -Werror -I../tests/include -I../tests -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_TEST_LIBTESTDRIVER1 $loc_accel_flags" LDFLAGS="-ltestdriver1 $ASAN_CFLAGS" 1787 1788 unset loc_accel_flags 1789 unset loc_accel_list 1790 1791 if_build_succeeded not grep mbedtls_des* library/des.o 1792 1793 msg "test: MBEDTLS_PSA_CRYPTO_CONFIG with accelerated hash" 1794 make test 1795} 1796 1797component_test_psa_crypto_config_no_driver() { 1798 # full plus MBEDTLS_PSA_CRYPTO_CONFIG 1799 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG minus MBEDTLS_PSA_CRYPTO_DRIVERS" 1800 scripts/config.py full 1801 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1802 scripts/config.py unset MBEDTLS_PSA_CRYPTO_DRIVERS 1803 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1804 make CC=gcc CFLAGS="$ASAN_CFLAGS -O2" LDFLAGS="$ASAN_CFLAGS" 1805 1806 msg "test: full + MBEDTLS_PSA_CRYPTO_CONFIG minus MBEDTLS_PSA_CRYPTO_DRIVERS" 1807 make test 1808} 1809 1810component_test_psa_crypto_config_chachapoly_disabled() { 1811 # full minus MBEDTLS_CHACHAPOLY_C without PSA_WANT_ALG_GCM and PSA_WANT_ALG_CHACHA20_POLY1305 1812 msg "build: full minus MBEDTLS_CHACHAPOLY_C without PSA_WANT_ALG_GCM and PSA_WANT_ALG_CHACHA20_POLY1305" 1813 scripts/config.py full 1814 scripts/config.py unset MBEDTLS_CHACHAPOLY_C 1815 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_GCM 1816 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_CHACHA20_POLY1305 1817 make CC=gcc CFLAGS="$ASAN_CFLAGS -O2" LDFLAGS="$ASAN_CFLAGS" 1818 1819 msg "test: full minus MBEDTLS_CHACHAPOLY_C without PSA_WANT_ALG_GCM and PSA_WANT_ALG_CHACHA20_POLY1305" 1820 make test 1821} 1822 1823# This should be renamed to test and updated once the accelerator ECDSA code is in place and ready to test. 1824component_build_psa_accel_alg_ecdsa() { 1825 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_ECDSA 1826 # without MBEDTLS_ECDSA_C 1827 # PSA_WANT_ALG_ECDSA and PSA_WANT_ALG_DETERMINISTIC_ECDSA are already 1828 # set in include/psa/crypto_config.h 1829 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_ECDSA without MBEDTLS_ECDSA_C" 1830 scripts/config.py full 1831 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1832 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1833 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1834 scripts/config.py unset MBEDTLS_ECDSA_C 1835 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED 1836 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED 1837 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1838 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_ECDSA -DMBEDTLS_PSA_ACCEL_ALG_DETERMINISTIC_ECDSA -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1839} 1840 1841# This should be renamed to test and updated once the accelerator ECDH code is in place and ready to test. 1842component_build_psa_accel_alg_ecdh() { 1843 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_ECDH 1844 # without MBEDTLS_ECDH_C 1845 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_ECDH without MBEDTLS_ECDH_C" 1846 scripts/config.py full 1847 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1848 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1849 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1850 scripts/config.py unset MBEDTLS_ECDH_C 1851 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED 1852 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED 1853 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED 1854 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED 1855 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED 1856 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1857 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_ECDH -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1858} 1859 1860# This should be renamed to test and updated once the accelerator ECC key pair code is in place and ready to test. 1861component_build_psa_accel_key_type_ecc_key_pair() { 1862 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_KEY_TYPE_ECC_KEY_PAIR 1863 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_KEY_TYPE_ECC_KEY_PAIR" 1864 scripts/config.py full 1865 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1866 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1867 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1868 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_KEY_TYPE_ECC_KEY_PAIR 1 1869 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY 1 1870 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1871 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1872} 1873 1874# This should be renamed to test and updated once the accelerator ECC public key code is in place and ready to test. 1875component_build_psa_accel_key_type_ecc_public_key() { 1876 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY 1877 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY" 1878 scripts/config.py full 1879 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1880 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1881 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1882 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY 1 1883 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_KEY_TYPE_ECC_KEY_PAIR 1884 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1885 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1886} 1887 1888# This should be renamed to test and updated once the accelerator HMAC code is in place and ready to test. 1889component_build_psa_accel_alg_hmac() { 1890 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_HMAC 1891 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_HMAC" 1892 scripts/config.py full 1893 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1894 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1895 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1896 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1897 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_HMAC -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1898} 1899 1900# This should be renamed to test and updated once the accelerator HKDF code is in place and ready to test. 1901component_build_psa_accel_alg_hkdf() { 1902 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_HKDF 1903 # without MBEDTLS_HKDF_C 1904 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_HKDF without MBEDTLS_HKDF_C" 1905 scripts/config.py full 1906 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1907 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1908 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1909 scripts/config.py unset MBEDTLS_HKDF_C 1910 # Make sure to unset TLS1_3_EXPERIMENTAL since it requires HKDF_C and will not build properly without it. 1911 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL 1912 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1913 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_HKDF -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1914} 1915 1916# This should be renamed to test and updated once the accelerator MD2 code is in place and ready to test. 1917component_build_psa_accel_alg_md2() { 1918 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_MD2 without other hashes 1919 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_MD2 - other hashes" 1920 scripts/config.py full 1921 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1922 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1923 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1924 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 1925 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 1926 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160 1927 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_1 1928 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_224 1929 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_256 1930 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_384 1931 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_512 1932 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1933 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_MD2 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1934} 1935 1936# This should be renamed to test and updated once the accelerator MD4 code is in place and ready to test. 1937component_build_psa_accel_alg_md4() { 1938 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_MD4 without other hashes 1939 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_MD4 - other hashes" 1940 scripts/config.py full 1941 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1942 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1943 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1944 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 1945 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 1946 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160 1947 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_1 1948 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_224 1949 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_256 1950 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_384 1951 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_512 1952 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1953 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_MD4 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1954} 1955 1956# This should be renamed to test and updated once the accelerator MD5 code is in place and ready to test. 1957component_build_psa_accel_alg_md5() { 1958 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_MD5 without other hashes 1959 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_MD5 - other hashes" 1960 scripts/config.py full 1961 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1962 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1963 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1964 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 1965 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 1966 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160 1967 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_1 1968 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_224 1969 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_256 1970 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_384 1971 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_512 1972 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1973 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_MD5 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1974} 1975 1976# This should be renamed to test and updated once the accelerator RIPEMD160 code is in place and ready to test. 1977component_build_psa_accel_alg_ripemd160() { 1978 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_RIPEMD160 without other hashes 1979 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_RIPEMD160 - other hashes" 1980 scripts/config.py full 1981 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 1982 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 1983 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 1984 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 1985 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 1986 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 1987 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_1 1988 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_224 1989 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_256 1990 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_384 1991 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_512 1992 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 1993 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_RIPEMD160 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 1994} 1995 1996# This should be renamed to test and updated once the accelerator SHA1 code is in place and ready to test. 1997component_build_psa_accel_alg_sha1() { 1998 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_SHA_1 without other hashes 1999 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_SHA_1 - other hashes" 2000 scripts/config.py full 2001 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2002 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2003 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2004 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 2005 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 2006 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 2007 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160 2008 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_224 2009 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_256 2010 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_384 2011 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_512 2012 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2013 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_SHA_1 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2014} 2015 2016# This should be renamed to test and updated once the accelerator SHA224 code is in place and ready to test. 2017component_build_psa_accel_alg_sha224() { 2018 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_SHA_224 without other hashes 2019 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_SHA_224 - other hashes" 2020 scripts/config.py full 2021 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2022 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2023 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2024 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 2025 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 2026 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 2027 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160 2028 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_1 2029 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_384 2030 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_512 2031 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2032 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_SHA_224 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2033} 2034 2035# This should be renamed to test and updated once the accelerator SHA256 code is in place and ready to test. 2036component_build_psa_accel_alg_sha256() { 2037 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_SHA_256 without other hashes 2038 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_SHA_256 - other hashes" 2039 scripts/config.py full 2040 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2041 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2042 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2043 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 2044 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 2045 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 2046 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160 2047 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_1 2048 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_224 2049 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_384 2050 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_512 2051 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2052 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_SHA_256 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2053} 2054 2055# This should be renamed to test and updated once the accelerator SHA384 code is in place and ready to test. 2056component_build_psa_accel_alg_sha384() { 2057 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_SHA_384 without other hashes 2058 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_SHA_384 - other hashes" 2059 scripts/config.py full 2060 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2061 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2062 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2063 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 2064 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 2065 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 2066 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160 2067 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_1 2068 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_224 2069 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_256 2070 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2071 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_SHA_384 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2072} 2073 2074# This should be renamed to test and updated once the accelerator SHA512 code is in place and ready to test. 2075component_build_psa_accel_alg_sha512() { 2076 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_SHA_512 without other hashes 2077 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_SHA_512 - other hashes" 2078 scripts/config.py full 2079 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2080 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2081 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2082 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD2 2083 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD4 2084 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_MD5 2085 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RIPEMD160 2086 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_1 2087 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_224 2088 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_256 2089 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_SHA_384 2090 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2091 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_SHA_512 -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2092} 2093 2094# This should be renamed to test and updated once the accelerator RSA code is in place and ready to test. 2095component_build_psa_accel_alg_rsa_pkcs1v15_crypt() { 2096 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 2097 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_RSA_PKCS1V15_CRYPT + PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY" 2098 scripts/config.py full 2099 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2100 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2101 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2102 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 1 2103 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PKCS1V15_SIGN 2104 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_OAEP 2105 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PSS 2106 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2107 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_CRYPT -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2108} 2109 2110# This should be renamed to test and updated once the accelerator RSA code is in place and ready to test. 2111component_build_psa_accel_alg_rsa_pkcs1v15_sign() { 2112 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_RSA_PKCS1V15_SIGN and PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY 2113 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_RSA_PKCS1V15_SIGN + PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY" 2114 scripts/config.py full 2115 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2116 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2117 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2118 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_ALG_RSA_PKCS1V15_SIGN 1 2119 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 2120 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_OAEP 2121 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PSS 2122 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2123 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_SIGN -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2124} 2125 2126# This should be renamed to test and updated once the accelerator RSA code is in place and ready to test. 2127component_build_psa_accel_alg_rsa_oaep() { 2128 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_RSA_OAEP and PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY 2129 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_RSA_OAEP + PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY" 2130 scripts/config.py full 2131 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2132 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2133 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2134 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_ALG_RSA_OAEP 1 2135 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 2136 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PKCS1V15_SIGN 2137 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PSS 2138 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2139 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_RSA_OAEP -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2140} 2141 2142# This should be renamed to test and updated once the accelerator RSA code is in place and ready to test. 2143component_build_psa_accel_alg_rsa_pss() { 2144 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_ALG_RSA_PSS and PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY 2145 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_ALG_RSA_PSS + PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY" 2146 scripts/config.py full 2147 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2148 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2149 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2150 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_ALG_RSA_PSS 1 2151 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 2152 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_PKCS1V15_SIGN 2153 scripts/config.py -f include/psa/crypto_config.h unset PSA_WANT_ALG_RSA_OAEP 2154 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2155 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_ALG_RSA_PSS -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2156} 2157 2158# This should be renamed to test and updated once the accelerator RSA code is in place and ready to test. 2159component_build_psa_accel_key_type_rsa_key_pair() { 2160 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_KEY_TYPE_RSA_KEY_PAIR and PSA_WANT_ALG_RSA_PSS 2161 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_KEY_TYPE_RSA_KEY_PAIR + PSA_WANT_ALG_RSA_PSS" 2162 scripts/config.py full 2163 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2164 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2165 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2166 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_ALG_RSA_PSS 1 2167 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_KEY_TYPE_RSA_KEY_PAIR 1 2168 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2169 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2170} 2171 2172# This should be renamed to test and updated once the accelerator RSA code is in place and ready to test. 2173component_build_psa_accel_key_type_rsa_public_key() { 2174 # full plus MBEDTLS_PSA_CRYPTO_CONFIG with PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY and PSA_WANT_ALG_RSA_PSS 2175 msg "build: full + MBEDTLS_PSA_CRYPTO_CONFIG + PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY + PSA_WANT_ALG_RSA_PSS" 2176 scripts/config.py full 2177 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG 2178 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2179 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO 2180 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_ALG_RSA_PSS 1 2181 scripts/config.py -f include/psa/crypto_config.h set PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY 1 2182 # Need to define the correct symbol and include the test driver header path in order to build with the test driver 2183 make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS" 2184} 2185 2186component_test_check_params_functionality () { 2187 msg "build+test: MBEDTLS_CHECK_PARAMS functionality" 2188 scripts/config.py full # includes CHECK_PARAMS 2189 # Make MBEDTLS_PARAM_FAILED call mbedtls_param_failed(). 2190 scripts/config.py unset MBEDTLS_CHECK_PARAMS_ASSERT 2191 make CC=gcc CFLAGS='-Werror -O1' all test 2192} 2193 2194component_test_check_params_without_platform () { 2195 msg "build+test: MBEDTLS_CHECK_PARAMS without MBEDTLS_PLATFORM_C" 2196 scripts/config.py full # includes CHECK_PARAMS 2197 # Keep MBEDTLS_PARAM_FAILED as assert. 2198 scripts/config.py unset MBEDTLS_PLATFORM_EXIT_ALT 2199 scripts/config.py unset MBEDTLS_PLATFORM_TIME_ALT 2200 scripts/config.py unset MBEDTLS_PLATFORM_FPRINTF_ALT 2201 scripts/config.py unset MBEDTLS_PLATFORM_MEMORY 2202 scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT 2203 scripts/config.py unset MBEDTLS_PLATFORM_PRINTF_ALT 2204 scripts/config.py unset MBEDTLS_PLATFORM_SNPRINTF_ALT 2205 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED 2206 scripts/config.py unset MBEDTLS_PLATFORM_C 2207 make CC=gcc CFLAGS='-Werror -O1' all test 2208} 2209 2210component_test_check_params_silent () { 2211 msg "build+test: MBEDTLS_CHECK_PARAMS with alternative MBEDTLS_PARAM_FAILED()" 2212 scripts/config.py full # includes CHECK_PARAMS 2213 # Set MBEDTLS_PARAM_FAILED to nothing. 2214 sed -i 's/.*\(#define MBEDTLS_PARAM_FAILED( cond )\).*/\1/' "$CONFIG_H" 2215 make CC=gcc CFLAGS='-Werror -O1' all test 2216} 2217 2218component_test_no_platform () { 2219 # Full configuration build, without platform support, file IO and net sockets. 2220 # This should catch missing mbedtls_printf definitions, and by disabling file 2221 # IO, it should catch missing '#include <stdio.h>' 2222 msg "build: full config except platform/fsio/net, make, gcc, C99" # ~ 30s 2223 scripts/config.py full 2224 scripts/config.py unset MBEDTLS_PLATFORM_C 2225 scripts/config.py unset MBEDTLS_NET_C 2226 scripts/config.py unset MBEDTLS_PLATFORM_MEMORY 2227 scripts/config.py unset MBEDTLS_PLATFORM_PRINTF_ALT 2228 scripts/config.py unset MBEDTLS_PLATFORM_FPRINTF_ALT 2229 scripts/config.py unset MBEDTLS_PLATFORM_SNPRINTF_ALT 2230 scripts/config.py unset MBEDTLS_PLATFORM_TIME_ALT 2231 scripts/config.py unset MBEDTLS_PLATFORM_EXIT_ALT 2232 scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT 2233 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED 2234 scripts/config.py unset MBEDTLS_FS_IO 2235 scripts/config.py unset MBEDTLS_PSA_CRYPTO_SE_C 2236 scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C 2237 scripts/config.py unset MBEDTLS_PSA_ITS_FILE_C 2238 # Note, _DEFAULT_SOURCE needs to be defined for platforms using glibc version >2.19, 2239 # to re-enable platform integration features otherwise disabled in C99 builds 2240 make CC=gcc CFLAGS='-Werror -Wall -Wextra -std=c99 -pedantic -Os -D_DEFAULT_SOURCE' lib programs 2241 make CC=gcc CFLAGS='-Werror -Wall -Wextra -Os' test 2242} 2243 2244component_build_no_std_function () { 2245 # catch compile bugs in _uninit functions 2246 msg "build: full config with NO_STD_FUNCTION, make, gcc" # ~ 30s 2247 scripts/config.py full 2248 scripts/config.py set MBEDTLS_PLATFORM_NO_STD_FUNCTIONS 2249 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED 2250 scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT 2251 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Check . 2252 make 2253} 2254 2255component_build_no_ssl_srv () { 2256 msg "build: full config except ssl_srv.c, make, gcc" # ~ 30s 2257 scripts/config.py full 2258 scripts/config.py unset MBEDTLS_SSL_SRV_C 2259 make CC=gcc CFLAGS='-Werror -Wall -Wextra -O1' 2260} 2261 2262component_build_no_ssl_cli () { 2263 msg "build: full config except ssl_cli.c, make, gcc" # ~ 30s 2264 scripts/config.py full 2265 scripts/config.py unset MBEDTLS_SSL_CLI_C 2266 make CC=gcc CFLAGS='-Werror -Wall -Wextra -O1' 2267} 2268 2269component_build_no_sockets () { 2270 # Note, C99 compliance can also be tested with the sockets support disabled, 2271 # as that requires a POSIX platform (which isn't the same as C99). 2272 msg "build: full config except net_sockets.c, make, gcc -std=c99 -pedantic" # ~ 30s 2273 scripts/config.py full 2274 scripts/config.py unset MBEDTLS_NET_C # getaddrinfo() undeclared, etc. 2275 scripts/config.py set MBEDTLS_NO_PLATFORM_ENTROPY # uses syscall() on GNU/Linux 2276 make CC=gcc CFLAGS='-Werror -Wall -Wextra -O1 -std=c99 -pedantic' lib 2277} 2278 2279component_test_memory_buffer_allocator_backtrace () { 2280 msg "build: default config with memory buffer allocator and backtrace enabled" 2281 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C 2282 scripts/config.py set MBEDTLS_PLATFORM_MEMORY 2283 scripts/config.py set MBEDTLS_MEMORY_BACKTRACE 2284 scripts/config.py set MBEDTLS_MEMORY_DEBUG 2285 CC=gcc cmake -DCMAKE_BUILD_TYPE:String=Release . 2286 make 2287 2288 msg "test: MBEDTLS_MEMORY_BUFFER_ALLOC_C and MBEDTLS_MEMORY_BACKTRACE" 2289 make test 2290} 2291 2292component_test_memory_buffer_allocator () { 2293 msg "build: default config with memory buffer allocator" 2294 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C 2295 scripts/config.py set MBEDTLS_PLATFORM_MEMORY 2296 CC=gcc cmake -DCMAKE_BUILD_TYPE:String=Release . 2297 make 2298 2299 msg "test: MBEDTLS_MEMORY_BUFFER_ALLOC_C" 2300 make test 2301 2302 msg "test: ssl-opt.sh, MBEDTLS_MEMORY_BUFFER_ALLOC_C" 2303 # MBEDTLS_MEMORY_BUFFER_ALLOC is slow. Skip tests that tend to time out. 2304 tests/ssl-opt.sh -e '^DTLS proxy' 2305} 2306 2307component_test_no_max_fragment_length () { 2308 # Run max fragment length tests with MFL disabled 2309 msg "build: default config except MFL extension (ASan build)" # ~ 30s 2310 scripts/config.py unset MBEDTLS_SSL_MAX_FRAGMENT_LENGTH 2311 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2312 make 2313 2314 msg "test: ssl-opt.sh, MFL-related tests" 2315 tests/ssl-opt.sh -f "Max fragment length" 2316} 2317 2318component_test_asan_remove_peer_certificate () { 2319 msg "build: default config with MBEDTLS_SSL_KEEP_PEER_CERTIFICATE disabled (ASan build)" 2320 scripts/config.py unset MBEDTLS_SSL_KEEP_PEER_CERTIFICATE 2321 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2322 make 2323 2324 msg "test: !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE" 2325 make test 2326 2327 msg "test: ssl-opt.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE" 2328 tests/ssl-opt.sh 2329 2330 msg "test: compat.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE" 2331 tests/compat.sh 2332 2333 msg "test: context-info.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE" 2334 tests/context-info.sh 2335} 2336 2337component_test_no_max_fragment_length_small_ssl_out_content_len () { 2338 msg "build: no MFL extension, small SSL_OUT_CONTENT_LEN (ASan build)" 2339 scripts/config.py unset MBEDTLS_SSL_MAX_FRAGMENT_LENGTH 2340 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 16384 2341 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 4096 2342 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2343 make 2344 2345 msg "test: MFL tests (disabled MFL extension case) & large packet tests" 2346 tests/ssl-opt.sh -f "Max fragment length\|Large buffer" 2347 2348 msg "test: context-info.sh (disabled MFL extension case)" 2349 tests/context-info.sh 2350} 2351 2352component_test_variable_ssl_in_out_buffer_len () { 2353 msg "build: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled (ASan build)" 2354 scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH 2355 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2356 make 2357 2358 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled" 2359 make test 2360 2361 msg "test: ssl-opt.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled" 2362 tests/ssl-opt.sh 2363 2364 msg "test: compat.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled" 2365 tests/compat.sh 2366} 2367 2368component_test_variable_ssl_in_out_buffer_len_CID () { 2369 msg "build: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_DTLS_CONNECTION_ID enabled (ASan build)" 2370 scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH 2371 scripts/config.py set MBEDTLS_SSL_DTLS_CONNECTION_ID 2372 2373 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2374 make 2375 2376 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_DTLS_CONNECTION_ID" 2377 make test 2378 2379 msg "test: ssl-opt.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_DTLS_CONNECTION_ID enabled" 2380 tests/ssl-opt.sh 2381 2382 msg "test: compat.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_DTLS_CONNECTION_ID enabled" 2383 tests/compat.sh 2384} 2385 2386component_test_variable_ssl_in_out_buffer_len_record_splitting () { 2387 msg "build: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_CBC_RECORD_SPLITTING enabled (ASan build)" 2388 scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH 2389 scripts/config.py set MBEDTLS_SSL_CBC_RECORD_SPLITTING 2390 2391 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2392 make 2393 2394 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_CBC_RECORD_SPLITTING" 2395 make test 2396 2397 msg "test: ssl-opt.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_CBC_RECORD_SPLITTING enabled" 2398 tests/ssl-opt.sh 2399 2400 msg "test: compat.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_CBC_RECORD_SPLITTING enabled" 2401 tests/compat.sh 2402} 2403 2404component_test_ssl_alloc_buffer_and_mfl () { 2405 msg "build: default config with memory buffer allocator and MFL extension" 2406 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C 2407 scripts/config.py set MBEDTLS_PLATFORM_MEMORY 2408 scripts/config.py set MBEDTLS_MEMORY_DEBUG 2409 scripts/config.py set MBEDTLS_SSL_MAX_FRAGMENT_LENGTH 2410 scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH 2411 CC=gcc cmake -DCMAKE_BUILD_TYPE:String=Release . 2412 make 2413 2414 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH, MBEDTLS_MEMORY_BUFFER_ALLOC_C, MBEDTLS_MEMORY_DEBUG and MBEDTLS_SSL_MAX_FRAGMENT_LENGTH" 2415 make test 2416 2417 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH, MBEDTLS_MEMORY_BUFFER_ALLOC_C, MBEDTLS_MEMORY_DEBUG and MBEDTLS_SSL_MAX_FRAGMENT_LENGTH" 2418 tests/ssl-opt.sh -f "Handshake memory usage" 2419} 2420 2421component_test_when_no_ciphersuites_have_mac () { 2422 msg "build: when no ciphersuites have MAC" 2423 scripts/config.py unset MBEDTLS_CIPHER_NULL_CIPHER 2424 scripts/config.py unset MBEDTLS_ARC4_C 2425 scripts/config.py unset MBEDTLS_CIPHER_MODE_CBC 2426 make 2427 2428 msg "test: !MBEDTLS_SSL_SOME_MODES_USE_MAC" 2429 make test 2430 2431 msg "test ssl-opt.sh: !MBEDTLS_SSL_SOME_MODES_USE_MAC" 2432 tests/ssl-opt.sh -f 'Default\|EtM' -e 'without EtM' 2433} 2434 2435component_test_null_entropy () { 2436 msg "build: default config with MBEDTLS_TEST_NULL_ENTROPY (ASan build)" 2437 scripts/config.py set MBEDTLS_TEST_NULL_ENTROPY 2438 scripts/config.py set MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES 2439 scripts/config.py set MBEDTLS_ENTROPY_C 2440 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED 2441 scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT 2442 scripts/config.py unset MBEDTLS_ENTROPY_HARDWARE_ALT 2443 scripts/config.py unset MBEDTLS_HAVEGE_C 2444 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan -D UNSAFE_BUILD=ON . 2445 make 2446 2447 msg "test: MBEDTLS_TEST_NULL_ENTROPY - main suites (inc. selftests) (ASan build)" 2448 make test 2449} 2450 2451component_test_no_date_time () { 2452 msg "build: default config without MBEDTLS_HAVE_TIME_DATE" 2453 scripts/config.py unset MBEDTLS_HAVE_TIME_DATE 2454 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Check . 2455 make 2456 2457 msg "test: !MBEDTLS_HAVE_TIME_DATE - main suites" 2458 make test 2459} 2460 2461component_test_platform_calloc_macro () { 2462 msg "build: MBEDTLS_PLATFORM_{CALLOC/FREE}_MACRO enabled (ASan build)" 2463 scripts/config.py set MBEDTLS_PLATFORM_MEMORY 2464 scripts/config.py set MBEDTLS_PLATFORM_CALLOC_MACRO calloc 2465 scripts/config.py set MBEDTLS_PLATFORM_FREE_MACRO free 2466 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2467 make 2468 2469 msg "test: MBEDTLS_PLATFORM_{CALLOC/FREE}_MACRO enabled (ASan build)" 2470 make test 2471} 2472 2473component_test_malloc_0_null () { 2474 msg "build: malloc(0) returns NULL (ASan+UBSan build)" 2475 scripts/config.py full 2476 make CC=gcc CFLAGS="'-DMBEDTLS_CONFIG_FILE=\"$PWD/tests/configs/config-wrapper-malloc-0-null.h\"' $ASAN_CFLAGS -O" LDFLAGS="$ASAN_CFLAGS" 2477 2478 msg "test: malloc(0) returns NULL (ASan+UBSan build)" 2479 make test 2480 2481 msg "selftest: malloc(0) returns NULL (ASan+UBSan build)" 2482 # Just the calloc selftest. "make test" ran the others as part of the 2483 # test suites. 2484 programs/test/selftest calloc 2485 2486 msg "test ssl-opt.sh: malloc(0) returns NULL (ASan+UBSan build)" 2487 # Run a subset of the tests. The choice is a balance between coverage 2488 # and time (including time indirectly wasted due to flaky tests). 2489 # The current choice is to skip tests whose description includes 2490 # "proxy", which is an approximation of skipping tests that use the 2491 # UDP proxy, which tend to be slower and flakier. 2492 tests/ssl-opt.sh -e 'proxy' 2493} 2494 2495component_test_aes_fewer_tables () { 2496 msg "build: default config with AES_FEWER_TABLES enabled" 2497 scripts/config.py set MBEDTLS_AES_FEWER_TABLES 2498 make CC=gcc CFLAGS='-Werror -Wall -Wextra' 2499 2500 msg "test: AES_FEWER_TABLES" 2501 make test 2502} 2503 2504component_test_aes_rom_tables () { 2505 msg "build: default config with AES_ROM_TABLES enabled" 2506 scripts/config.py set MBEDTLS_AES_ROM_TABLES 2507 make CC=gcc CFLAGS='-Werror -Wall -Wextra' 2508 2509 msg "test: AES_ROM_TABLES" 2510 make test 2511} 2512 2513component_test_aes_fewer_tables_and_rom_tables () { 2514 msg "build: default config with AES_ROM_TABLES and AES_FEWER_TABLES enabled" 2515 scripts/config.py set MBEDTLS_AES_FEWER_TABLES 2516 scripts/config.py set MBEDTLS_AES_ROM_TABLES 2517 make CC=gcc CFLAGS='-Werror -Wall -Wextra' 2518 2519 msg "test: AES_FEWER_TABLES + AES_ROM_TABLES" 2520 make test 2521} 2522 2523component_test_ctr_drbg_aes_256_sha_256 () { 2524 msg "build: full + MBEDTLS_ENTROPY_FORCE_SHA256 (ASan build)" 2525 scripts/config.py full 2526 scripts/config.py unset MBEDTLS_MEMORY_BUFFER_ALLOC_C 2527 scripts/config.py set MBEDTLS_ENTROPY_FORCE_SHA256 2528 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2529 make 2530 2531 msg "test: full + MBEDTLS_ENTROPY_FORCE_SHA256 (ASan build)" 2532 make test 2533} 2534 2535component_test_ctr_drbg_aes_128_sha_512 () { 2536 msg "build: full + MBEDTLS_CTR_DRBG_USE_128_BIT_KEY (ASan build)" 2537 scripts/config.py full 2538 scripts/config.py unset MBEDTLS_MEMORY_BUFFER_ALLOC_C 2539 scripts/config.py set MBEDTLS_CTR_DRBG_USE_128_BIT_KEY 2540 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2541 make 2542 2543 msg "test: full + MBEDTLS_CTR_DRBG_USE_128_BIT_KEY (ASan build)" 2544 make test 2545} 2546 2547component_test_ctr_drbg_aes_128_sha_256 () { 2548 msg "build: full + MBEDTLS_CTR_DRBG_USE_128_BIT_KEY + MBEDTLS_ENTROPY_FORCE_SHA256 (ASan build)" 2549 scripts/config.py full 2550 scripts/config.py unset MBEDTLS_MEMORY_BUFFER_ALLOC_C 2551 scripts/config.py set MBEDTLS_CTR_DRBG_USE_128_BIT_KEY 2552 scripts/config.py set MBEDTLS_ENTROPY_FORCE_SHA256 2553 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2554 make 2555 2556 msg "test: full + MBEDTLS_CTR_DRBG_USE_128_BIT_KEY + MBEDTLS_ENTROPY_FORCE_SHA256 (ASan build)" 2557 make test 2558} 2559 2560component_test_se_default () { 2561 msg "build: default config + MBEDTLS_PSA_CRYPTO_SE_C" 2562 scripts/config.py set MBEDTLS_PSA_CRYPTO_SE_C 2563 make CC=clang CFLAGS="$ASAN_CFLAGS -Os" LDFLAGS="$ASAN_CFLAGS" 2564 2565 msg "test: default config + MBEDTLS_PSA_CRYPTO_SE_C" 2566 make test 2567} 2568 2569component_test_psa_crypto_drivers () { 2570 msg "build: MBEDTLS_PSA_CRYPTO_DRIVERS w/ driver hooks" 2571 scripts/config.py full 2572 scripts/config.py set MBEDTLS_PSA_CRYPTO_DRIVERS 2573 scripts/config.py set MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS 2574 loc_cflags="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST_ALL" 2575 loc_cflags="${loc_cflags} '-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/user-config-for-test.h\"'" 2576 loc_cflags="${loc_cflags} -I../tests/include -O2" 2577 2578 make CC=gcc CFLAGS="${loc_cflags}" LDFLAGS="$ASAN_CFLAGS" 2579 unset loc_cflags 2580 2581 msg "test: full + MBEDTLS_PSA_CRYPTO_DRIVERS" 2582 make test 2583} 2584 2585component_test_make_shared () { 2586 msg "build/test: make shared" # ~ 40s 2587 make SHARED=1 all check 2588 ldd programs/util/strerror | grep libmbedcrypto 2589 programs/test/dlopen_demo.sh 2590} 2591 2592component_test_cmake_shared () { 2593 msg "build/test: cmake shared" # ~ 2min 2594 cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On . 2595 make 2596 ldd programs/util/strerror | grep libmbedcrypto 2597 make test 2598 programs/test/dlopen_demo.sh 2599} 2600 2601test_build_opt () { 2602 info=$1 cc=$2; shift 2 2603 for opt in "$@"; do 2604 msg "build/test: $cc $opt, $info" # ~ 30s 2605 make CC="$cc" CFLAGS="$opt -std=c99 -pedantic -Wall -Wextra -Werror" 2606 # We're confident enough in compilers to not run _all_ the tests, 2607 # but at least run the unit tests. In particular, runs with 2608 # optimizations use inline assembly whereas runs with -O0 2609 # skip inline assembly. 2610 make test # ~30s 2611 make clean 2612 done 2613} 2614 2615component_test_clang_opt () { 2616 scripts/config.py full 2617 test_build_opt 'full config' clang -O0 -Os -O2 2618} 2619 2620component_test_gcc_opt () { 2621 scripts/config.py full 2622 test_build_opt 'full config' gcc -O0 -Os -O2 2623} 2624 2625component_build_mbedtls_config_file () { 2626 msg "build: make with MBEDTLS_CONFIG_FILE" # ~40s 2627 # Use the full config so as to catch a maximum of places where 2628 # the check of MBEDTLS_CONFIG_FILE might be missing. 2629 scripts/config.py full 2630 sed 's!"check_config.h"!"mbedtls/check_config.h"!' <"$CONFIG_H" >full_config.h 2631 echo '#error "MBEDTLS_CONFIG_FILE is not working"' >"$CONFIG_H" 2632 make CFLAGS="-I '$PWD' -DMBEDTLS_CONFIG_FILE='\"full_config.h\"'" 2633 rm -f full_config.h 2634} 2635 2636component_test_m32_o0 () { 2637 # Build without optimization, so as to use portable C code (in a 32-bit 2638 # build) and not the i386-specific inline assembly. 2639 msg "build: i386, make, gcc -O0 (ASan build)" # ~ 30s 2640 scripts/config.py full 2641 make CC=gcc CFLAGS="$ASAN_CFLAGS -m32 -O0" LDFLAGS="-m32 $ASAN_CFLAGS" 2642 2643 msg "test: i386, make, gcc -O0 (ASan build)" 2644 make test 2645} 2646support_test_m32_o0 () { 2647 case $(uname -m) in 2648 *64*) true;; 2649 *) false;; 2650 esac 2651} 2652 2653component_test_m32_o2 () { 2654 # Build with optimization, to use the i386 specific inline assembly 2655 # and go faster for tests. 2656 msg "build: i386, make, gcc -O2 (ASan build)" # ~ 30s 2657 scripts/config.py full 2658 make CC=gcc CFLAGS="$ASAN_CFLAGS -m32 -O2" LDFLAGS="-m32 $ASAN_CFLAGS" 2659 2660 msg "test: i386, make, gcc -O2 (ASan build)" 2661 make test 2662 2663 msg "test ssl-opt.sh, i386, make, gcc-O2" 2664 tests/ssl-opt.sh 2665} 2666support_test_m32_o2 () { 2667 support_test_m32_o0 "$@" 2668} 2669 2670component_test_m32_everest () { 2671 msg "build: i386, Everest ECDH context (ASan build)" # ~ 6 min 2672 scripts/config.py unset MBEDTLS_ECDH_LEGACY_CONTEXT 2673 scripts/config.py set MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED 2674 make CC=gcc CFLAGS="$ASAN_CFLAGS -m32 -O2" LDFLAGS="-m32 $ASAN_CFLAGS" 2675 2676 msg "test: i386, Everest ECDH context - main suites (inc. selftests) (ASan build)" # ~ 50s 2677 make test 2678 2679 msg "test: i386, Everest ECDH context - ECDH-related part of ssl-opt.sh (ASan build)" # ~ 5s 2680 tests/ssl-opt.sh -f ECDH 2681 2682 msg "test: i386, Everest ECDH context - compat.sh with some ECDH ciphersuites (ASan build)" # ~ 3 min 2683 # Exclude some symmetric ciphers that are redundant here to gain time. 2684 tests/compat.sh -f ECDH -V NO -e 'ARCFOUR\|ARIA\|CAMELLIA\|CHACHA\|DES\|RC4' 2685} 2686support_test_m32_everest () { 2687 support_test_m32_o0 "$@" 2688} 2689 2690component_test_mx32 () { 2691 msg "build: 64-bit ILP32, make, gcc" # ~ 30s 2692 scripts/config.py full 2693 make CC=gcc CFLAGS='-Werror -Wall -Wextra -mx32' LDFLAGS='-mx32' 2694 2695 msg "test: 64-bit ILP32, make, gcc" 2696 make test 2697} 2698support_test_mx32 () { 2699 case $(uname -m) in 2700 amd64|x86_64) true;; 2701 *) false;; 2702 esac 2703} 2704 2705component_test_min_mpi_window_size () { 2706 msg "build: Default + MBEDTLS_MPI_WINDOW_SIZE=1 (ASan build)" # ~ 10s 2707 scripts/config.py set MBEDTLS_MPI_WINDOW_SIZE 1 2708 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2709 make 2710 2711 msg "test: MBEDTLS_MPI_WINDOW_SIZE=1 - main suites (inc. selftests) (ASan build)" # ~ 10s 2712 make test 2713} 2714 2715component_test_have_int32 () { 2716 msg "build: gcc, force 32-bit bignum limbs" 2717 scripts/config.py unset MBEDTLS_HAVE_ASM 2718 scripts/config.py unset MBEDTLS_AESNI_C 2719 scripts/config.py unset MBEDTLS_PADLOCK_C 2720 make CC=gcc CFLAGS='-Werror -Wall -Wextra -DMBEDTLS_HAVE_INT32' 2721 2722 msg "test: gcc, force 32-bit bignum limbs" 2723 make test 2724} 2725 2726component_test_have_int64 () { 2727 msg "build: gcc, force 64-bit bignum limbs" 2728 scripts/config.py unset MBEDTLS_HAVE_ASM 2729 scripts/config.py unset MBEDTLS_AESNI_C 2730 scripts/config.py unset MBEDTLS_PADLOCK_C 2731 make CC=gcc CFLAGS='-Werror -Wall -Wextra -DMBEDTLS_HAVE_INT64' 2732 2733 msg "test: gcc, force 64-bit bignum limbs" 2734 make test 2735} 2736 2737component_test_no_udbl_division () { 2738 msg "build: MBEDTLS_NO_UDBL_DIVISION native" # ~ 10s 2739 scripts/config.py full 2740 scripts/config.py set MBEDTLS_NO_UDBL_DIVISION 2741 make CFLAGS='-Werror -O1' 2742 2743 msg "test: MBEDTLS_NO_UDBL_DIVISION native" # ~ 10s 2744 make test 2745} 2746 2747component_test_no_64bit_multiplication () { 2748 msg "build: MBEDTLS_NO_64BIT_MULTIPLICATION native" # ~ 10s 2749 scripts/config.py full 2750 scripts/config.py set MBEDTLS_NO_64BIT_MULTIPLICATION 2751 make CFLAGS='-Werror -O1' 2752 2753 msg "test: MBEDTLS_NO_64BIT_MULTIPLICATION native" # ~ 10s 2754 make test 2755} 2756 2757component_test_no_strings () { 2758 msg "build: no strings" # ~10s 2759 scripts/config.py full 2760 # Disable options that activate a large amount of string constants. 2761 scripts/config.py unset MBEDTLS_DEBUG_C 2762 scripts/config.py unset MBEDTLS_ERROR_C 2763 scripts/config.py set MBEDTLS_ERROR_STRERROR_DUMMY 2764 scripts/config.py unset MBEDTLS_VERSION_FEATURES 2765 make CFLAGS='-Werror -Os' 2766 2767 msg "test: no strings" # ~ 10s 2768 make test 2769} 2770 2771component_build_arm_none_eabi_gcc () { 2772 msg "build: ${ARM_NONE_EABI_GCC_PREFIX}gcc -O1" # ~ 10s 2773 scripts/config.py baremetal 2774 make CC="${ARM_NONE_EABI_GCC_PREFIX}gcc" AR="${ARM_NONE_EABI_GCC_PREFIX}ar" LD="${ARM_NONE_EABI_GCC_PREFIX}ld" CFLAGS='-std=c99 -Werror -Wall -Wextra -O1' lib 2775 2776 msg "size: ${ARM_NONE_EABI_GCC_PREFIX}gcc -O1" 2777 ${ARM_NONE_EABI_GCC_PREFIX}size library/*.o 2778} 2779 2780component_build_arm_linux_gnueabi_gcc_arm5vte () { 2781 msg "build: ${ARM_LINUX_GNUEABI_GCC_PREFIX}gcc -march=arm5vte" # ~ 10s 2782 scripts/config.py baremetal 2783 # Build for a target platform that's close to what Debian uses 2784 # for its "armel" distribution (https://wiki.debian.org/ArmEabiPort). 2785 # See https://github.com/ARMmbed/mbedtls/pull/2169 and comments. 2786 # Build everything including programs, see for example 2787 # https://github.com/ARMmbed/mbedtls/pull/3449#issuecomment-675313720 2788 make CC="${ARM_LINUX_GNUEABI_GCC_PREFIX}gcc" AR="${ARM_LINUX_GNUEABI_GCC_PREFIX}ar" CFLAGS='-Werror -Wall -Wextra -march=armv5te -O1' LDFLAGS='-march=armv5te' 2789 2790 msg "size: ${ARM_LINUX_GNUEABI_GCC_PREFIX}gcc -march=armv5te -O1" 2791 ${ARM_LINUX_GNUEABI_GCC_PREFIX}size library/*.o 2792} 2793support_build_arm_linux_gnueabi_gcc_arm5vte () { 2794 type ${ARM_LINUX_GNUEABI_GCC_PREFIX}gcc >/dev/null 2>&1 2795} 2796 2797component_build_arm_none_eabi_gcc_arm5vte () { 2798 msg "build: ${ARM_NONE_EABI_GCC_PREFIX}gcc -march=arm5vte" # ~ 10s 2799 scripts/config.py baremetal 2800 # This is an imperfect substitute for 2801 # component_build_arm_linux_gnueabi_gcc_arm5vte 2802 # in case the gcc-arm-linux-gnueabi toolchain is not available 2803 make CC="${ARM_NONE_EABI_GCC_PREFIX}gcc" AR="${ARM_NONE_EABI_GCC_PREFIX}ar" CFLAGS='-std=c99 -Werror -Wall -Wextra -march=armv5te -O1' LDFLAGS='-march=armv5te' SHELL='sh -x' lib 2804 2805 msg "size: ${ARM_NONE_EABI_GCC_PREFIX}gcc -march=armv5te -O1" 2806 ${ARM_NONE_EABI_GCC_PREFIX}size library/*.o 2807} 2808 2809component_build_arm_none_eabi_gcc_m0plus () { 2810 msg "build: ${ARM_NONE_EABI_GCC_PREFIX}gcc -mthumb -mcpu=cortex-m0plus" # ~ 10s 2811 scripts/config.py baremetal 2812 make CC="${ARM_NONE_EABI_GCC_PREFIX}gcc" AR="${ARM_NONE_EABI_GCC_PREFIX}ar" LD="${ARM_NONE_EABI_GCC_PREFIX}ld" CFLAGS='-std=c99 -Werror -Wall -Wextra -mthumb -mcpu=cortex-m0plus -Os' lib 2813 2814 msg "size: ${ARM_NONE_EABI_GCC_PREFIX}gcc -mthumb -mcpu=cortex-m0plus -Os" 2815 ${ARM_NONE_EABI_GCC_PREFIX}size library/*.o 2816} 2817 2818component_build_arm_none_eabi_gcc_no_udbl_division () { 2819 msg "build: ${ARM_NONE_EABI_GCC_PREFIX}gcc -DMBEDTLS_NO_UDBL_DIVISION, make" # ~ 10s 2820 scripts/config.py baremetal 2821 scripts/config.py set MBEDTLS_NO_UDBL_DIVISION 2822 make CC="${ARM_NONE_EABI_GCC_PREFIX}gcc" AR="${ARM_NONE_EABI_GCC_PREFIX}ar" LD="${ARM_NONE_EABI_GCC_PREFIX}ld" CFLAGS='-std=c99 -Werror -Wall -Wextra' lib 2823 echo "Checking that software 64-bit division is not required" 2824 not grep __aeabi_uldiv library/*.o 2825} 2826 2827component_build_arm_none_eabi_gcc_no_64bit_multiplication () { 2828 msg "build: ${ARM_NONE_EABI_GCC_PREFIX}gcc MBEDTLS_NO_64BIT_MULTIPLICATION, make" # ~ 10s 2829 scripts/config.py baremetal 2830 scripts/config.py set MBEDTLS_NO_64BIT_MULTIPLICATION 2831 make CC="${ARM_NONE_EABI_GCC_PREFIX}gcc" AR="${ARM_NONE_EABI_GCC_PREFIX}ar" LD="${ARM_NONE_EABI_GCC_PREFIX}ld" CFLAGS='-std=c99 -Werror -O1 -march=armv6-m -mthumb' lib 2832 echo "Checking that software 64-bit multiplication is not required" 2833 not grep __aeabi_lmul library/*.o 2834} 2835 2836component_build_armcc () { 2837 msg "build: ARM Compiler 5" 2838 scripts/config.py baremetal 2839 make CC="$ARMC5_CC" AR="$ARMC5_AR" WARNING_CFLAGS='--strict --c99' lib 2840 2841 msg "size: ARM Compiler 5" 2842 "$ARMC5_FROMELF" -z library/*.o 2843 2844 make clean 2845 2846 # ARM Compiler 6 - Target ARMv7-A 2847 armc6_build_test "--target=arm-arm-none-eabi -march=armv7-a" 2848 2849 # ARM Compiler 6 - Target ARMv7-M 2850 armc6_build_test "--target=arm-arm-none-eabi -march=armv7-m" 2851 2852 # ARM Compiler 6 - Target ARMv8-A - AArch32 2853 armc6_build_test "--target=arm-arm-none-eabi -march=armv8.2-a" 2854 2855 # ARM Compiler 6 - Target ARMv8-M 2856 armc6_build_test "--target=arm-arm-none-eabi -march=armv8-m.main" 2857 2858 # ARM Compiler 6 - Target ARMv8-A - AArch64 2859 armc6_build_test "--target=aarch64-arm-none-eabi -march=armv8.2-a" 2860} 2861 2862component_build_ssl_hw_record_accel() { 2863 msg "build: default config with MBEDTLS_SSL_HW_RECORD_ACCEL enabled" 2864 scripts/config.pl set MBEDTLS_SSL_HW_RECORD_ACCEL 2865 make CFLAGS='-Werror -O1' 2866} 2867 2868component_test_tls13_experimental () { 2869 msg "build: default config with MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL enabled" 2870 scripts/config.pl set MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL 2871 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan . 2872 make 2873 msg "test: default config with MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL enabled" 2874 make test 2875} 2876 2877component_build_mingw () { 2878 msg "build: Windows cross build - mingw64, make (Link Library)" # ~ 30s 2879 make CC=i686-w64-mingw32-gcc AR=i686-w64-mingw32-ar LD=i686-w64-minggw32-ld CFLAGS='-Werror -Wall -Wextra' WINDOWS_BUILD=1 lib programs 2880 2881 # note Make tests only builds the tests, but doesn't run them 2882 make CC=i686-w64-mingw32-gcc AR=i686-w64-mingw32-ar LD=i686-w64-minggw32-ld CFLAGS='-Werror' WINDOWS_BUILD=1 tests 2883 make WINDOWS_BUILD=1 clean 2884 2885 msg "build: Windows cross build - mingw64, make (DLL)" # ~ 30s 2886 make CC=i686-w64-mingw32-gcc AR=i686-w64-mingw32-ar LD=i686-w64-minggw32-ld CFLAGS='-Werror -Wall -Wextra' WINDOWS_BUILD=1 SHARED=1 lib programs 2887 make CC=i686-w64-mingw32-gcc AR=i686-w64-mingw32-ar LD=i686-w64-minggw32-ld CFLAGS='-Werror -Wall -Wextra' WINDOWS_BUILD=1 SHARED=1 tests 2888 make WINDOWS_BUILD=1 clean 2889} 2890support_build_mingw() { 2891 case $(i686-w64-mingw32-gcc -dumpversion) in 2892 [0-5]*) false;; 2893 *) true;; 2894 esac 2895} 2896 2897component_test_memsan () { 2898 msg "build: MSan (clang)" # ~ 1 min 20s 2899 scripts/config.py unset MBEDTLS_AESNI_C # memsan doesn't grok asm 2900 CC=clang cmake -D CMAKE_BUILD_TYPE:String=MemSan . 2901 make 2902 2903 msg "test: main suites (MSan)" # ~ 10s 2904 make test 2905 2906 msg "test: ssl-opt.sh (MSan)" # ~ 1 min 2907 tests/ssl-opt.sh 2908 2909 # Optional part(s) 2910 2911 if [ "$MEMORY" -gt 0 ]; then 2912 msg "test: compat.sh (MSan)" # ~ 6 min 20s 2913 tests/compat.sh 2914 fi 2915} 2916 2917component_test_valgrind () { 2918 msg "build: Release (clang)" 2919 CC=clang cmake -D CMAKE_BUILD_TYPE:String=Release . 2920 make 2921 2922 msg "test: main suites valgrind (Release)" 2923 make memcheck 2924 2925 # Optional parts (slow; currently broken on OS X because programs don't 2926 # seem to receive signals under valgrind on OS X). 2927 if [ "$MEMORY" -gt 0 ]; then 2928 msg "test: ssl-opt.sh --memcheck (Release)" 2929 tests/ssl-opt.sh --memcheck 2930 fi 2931 2932 if [ "$MEMORY" -gt 1 ]; then 2933 msg "test: compat.sh --memcheck (Release)" 2934 tests/compat.sh --memcheck 2935 fi 2936 2937 if [ "$MEMORY" -gt 0 ]; then 2938 msg "test: context-info.sh --memcheck (Release)" 2939 tests/context-info.sh --memcheck 2940 fi 2941} 2942 2943support_test_cmake_out_of_source () { 2944 distrib_id="" 2945 distrib_ver="" 2946 distrib_ver_minor="" 2947 distrib_ver_major="" 2948 2949 # Attempt to parse lsb-release to find out distribution and version. If not 2950 # found this should fail safe (test is supported). 2951 if [[ -f /etc/lsb-release ]]; then 2952 2953 while read -r lsb_line; do 2954 case "$lsb_line" in 2955 "DISTRIB_ID"*) distrib_id=${lsb_line/#DISTRIB_ID=};; 2956 "DISTRIB_RELEASE"*) distrib_ver=${lsb_line/#DISTRIB_RELEASE=};; 2957 esac 2958 done < /etc/lsb-release 2959 2960 distrib_ver_major="${distrib_ver%%.*}" 2961 distrib_ver="${distrib_ver#*.}" 2962 distrib_ver_minor="${distrib_ver%%.*}" 2963 fi 2964 2965 # Running the out of source CMake test on Ubuntu 16.04 using more than one 2966 # processor (as the CI does) can create a race condition whereby the build 2967 # fails to see a generated file, despite that file actually having been 2968 # generated. This problem appears to go away with 18.04 or newer, so make 2969 # the out of source tests unsupported on Ubuntu 16.04. 2970 [ "$distrib_id" != "Ubuntu" ] || [ "$distrib_ver_major" -gt 16 ] 2971} 2972 2973component_test_cmake_out_of_source () { 2974 msg "build: cmake 'out-of-source' build" 2975 MBEDTLS_ROOT_DIR="$PWD" 2976 mkdir "$OUT_OF_SOURCE_DIR" 2977 cd "$OUT_OF_SOURCE_DIR" 2978 cmake -D CMAKE_BUILD_TYPE:String=Check "$MBEDTLS_ROOT_DIR" 2979 make 2980 2981 msg "test: cmake 'out-of-source' build" 2982 make test 2983 # Test an SSL option that requires an auxiliary script in test/scripts/. 2984 # Also ensure that there are no error messages such as 2985 # "No such file or directory", which would indicate that some required 2986 # file is missing (ssl-opt.sh tolerates the absence of some files so 2987 # may exit with status 0 but emit errors). 2988 ./tests/ssl-opt.sh -f 'Fallback SCSV: beginning of list' 2>ssl-opt.err 2989 cat ssl-opt.err >&2 2990 # If ssl-opt.err is non-empty, record an error and keep going. 2991 [ ! -s ssl-opt.err ] 2992 rm ssl-opt.err 2993 cd "$MBEDTLS_ROOT_DIR" 2994 rm -rf "$OUT_OF_SOURCE_DIR" 2995} 2996 2997component_test_cmake_as_subdirectory () { 2998 msg "build: cmake 'as-subdirectory' build" 2999 MBEDTLS_ROOT_DIR="$PWD" 3000 3001 cd programs/test/cmake_subproject 3002 cmake . 3003 make 3004 ./cmake_subproject 3005 3006 cd "$MBEDTLS_ROOT_DIR" 3007 unset MBEDTLS_ROOT_DIR 3008} 3009 3010component_test_zeroize () { 3011 # Test that the function mbedtls_platform_zeroize() is not optimized away by 3012 # different combinations of compilers and optimization flags by using an 3013 # auxiliary GDB script. Unfortunately, GDB does not return error values to the 3014 # system in all cases that the script fails, so we must manually search the 3015 # output to check whether the pass string is present and no failure strings 3016 # were printed. 3017 3018 # Don't try to disable ASLR. We don't care about ASLR here. We do care 3019 # about a spurious message if Gdb tries and fails, so suppress that. 3020 gdb_disable_aslr= 3021 if [ -z "$(gdb -batch -nw -ex 'set disable-randomization off' 2>&1)" ]; then 3022 gdb_disable_aslr='set disable-randomization off' 3023 fi 3024 3025 for optimization_flag in -O2 -O3 -Ofast -Os; do 3026 for compiler in clang gcc; do 3027 msg "test: $compiler $optimization_flag, mbedtls_platform_zeroize()" 3028 make programs CC="$compiler" DEBUG=1 CFLAGS="$optimization_flag" 3029 gdb -ex "$gdb_disable_aslr" -x tests/scripts/test_zeroize.gdb -nw -batch -nx 2>&1 | tee test_zeroize.log 3030 grep "The buffer was correctly zeroized" test_zeroize.log 3031 not grep -i "error" test_zeroize.log 3032 rm -f test_zeroize.log 3033 make clean 3034 done 3035 done 3036 3037 unset gdb_disable_aslr 3038} 3039 3040component_test_psa_compliance () { 3041 msg "build: make, default config + CMAC, libmbedcrypto.a only" 3042 scripts/config.py set MBEDTLS_CMAC_C 3043 make -C library libmbedcrypto.a 3044 3045 msg "unit test: test_psa_compliance.py" 3046 ./tests/scripts/test_psa_compliance.py 3047} 3048 3049support_test_psa_compliance () { 3050 # psa-compliance-tests only supports CMake >= 3.10.0 3051 ver="$(cmake --version)" 3052 ver="${ver#cmake version }" 3053 ver_major="${ver%%.*}" 3054 3055 ver="${ver#*.}" 3056 ver_minor="${ver%%.*}" 3057 3058 [ "$ver_major" -eq 3 ] && [ "$ver_minor" -ge 10 ] 3059} 3060 3061component_check_python_files () { 3062 msg "Lint: Python scripts" 3063 tests/scripts/check-python-files.sh 3064} 3065 3066component_check_generate_test_code () { 3067 msg "uint test: generate_test_code.py" 3068 # unittest writes out mundane stuff like number or tests run on stderr. 3069 # Our convention is to reserve stderr for actual errors, and write 3070 # harmless info on stdout so it can be suppress with --quiet. 3071 ./tests/scripts/test_generate_test_code.py 2>&1 3072} 3073 3074################################################################ 3075#### Termination 3076################################################################ 3077 3078post_report () { 3079 msg "Done, cleaning up" 3080 final_cleanup 3081 3082 final_report 3083} 3084 3085 3086 3087################################################################ 3088#### Run all the things 3089################################################################ 3090 3091# Function invoked by --error-test to test error reporting. 3092pseudo_component_error_test () { 3093 msg "Testing error reporting $error_test_i" 3094 if [ $KEEP_GOING -ne 0 ]; then 3095 echo "Expect three failing commands." 3096 fi 3097 # If the component doesn't run in a subshell, changing error_test_i to an 3098 # invalid integer will cause an error in the loop that runs this function. 3099 error_test_i=this_should_not_be_used_since_the_component_runs_in_a_subshell 3100 # Expected error: 'grep non_existent /dev/null -> 1' 3101 grep non_existent /dev/null 3102 # Expected error: '! grep -q . tests/scripts/all.sh -> 1' 3103 not grep -q . "$0" 3104 # Expected error: 'make unknown_target -> 2' 3105 make unknown_target 3106 false "this should not be executed" 3107} 3108 3109# Run one component and clean up afterwards. 3110run_component () { 3111 current_component="$1" 3112 export MBEDTLS_TEST_CONFIGURATION="$current_component" 3113 3114 # Unconditionally create a seedfile that's sufficiently long. 3115 # Do this before each component, because a previous component may 3116 # have messed it up or shortened it. 3117 local dd_cmd 3118 dd_cmd=(dd if=/dev/urandom of=./tests/seedfile bs=64 count=1) 3119 case $OSTYPE in 3120 linux*|freebsd*|openbsd*|darwin*) dd_cmd+=(status=none) 3121 esac 3122 "${dd_cmd[@]}" 3123 3124 # Run the component in a subshell, with error trapping and output 3125 # redirection set up based on the relevant options. 3126 if [ $KEEP_GOING -eq 1 ]; then 3127 # We want to keep running if the subshell fails, so 'set -e' must 3128 # be off when the subshell runs. 3129 set +e 3130 fi 3131 ( 3132 if [ $QUIET -eq 1 ]; then 3133 # msg() will be silenced, so just print the component name here. 3134 echo "${current_component#component_}" 3135 exec >/dev/null 3136 fi 3137 if [ $KEEP_GOING -eq 1 ]; then 3138 # Keep "set -e" off, and run an ERR trap instead to record failures. 3139 set -E 3140 trap err_trap ERR 3141 fi 3142 # The next line is what runs the component 3143 "$@" 3144 if [ $KEEP_GOING -eq 1 ]; then 3145 trap - ERR 3146 exit $last_failure_status 3147 fi 3148 ) 3149 component_status=$? 3150 if [ $KEEP_GOING -eq 1 ]; then 3151 set -e 3152 if [ $component_status -ne 0 ]; then 3153 failure_count=$((failure_count + 1)) 3154 fi 3155 fi 3156 3157 # Restore the build tree to a clean state. 3158 cleanup 3159 unset current_component 3160} 3161 3162# Preliminary setup 3163pre_check_environment 3164pre_initialize_variables 3165pre_parse_command_line "$@" 3166 3167pre_check_git 3168pre_restore_files 3169pre_back_up 3170 3171build_status=0 3172if [ $KEEP_GOING -eq 1 ]; then 3173 pre_setup_keep_going 3174fi 3175pre_prepare_outcome_file 3176pre_print_configuration 3177pre_check_tools 3178cleanup 3179 3180# Run the requested tests. 3181for ((error_test_i=1; error_test_i <= error_test; error_test_i++)); do 3182 run_component pseudo_component_error_test 3183done 3184unset error_test_i 3185for component in $RUN_COMPONENTS; do 3186 run_component "component_$component" 3187done 3188 3189# We're done. 3190post_report 3191