blob: 701a42c33cd15624e18a2240d4a4343dff89a73e [file] [log] [blame]
Minos Galanakis6aab5b72024-07-25 14:24:37 +01001# components-configuration-tls.sh
2#
3# Copyright The Mbed TLS Contributors
4# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
5
Minos Galanakis609f7492024-07-31 16:39:28 +01006# This file contains test components that are executed by all.sh
Minos Galanakis6aab5b72024-07-25 14:24:37 +01007
8################################################################
9#### Configuration Testing - TLS
10################################################################
11
Gilles Peskineea5de2b2024-09-19 18:41:55 +020012component_test_config_suite_b () {
13 msg "build: configs/config-suite-b.h"
Minos Galanakis5da58e52024-11-07 15:35:33 +000014 MBEDTLS_CONFIG="configs/config-suite-b.h"
15 CRYPTO_CONFIG="configs/crypto-config-suite-b.h"
Gilles Peskineb6d49132024-09-14 11:21:29 +020016 # test-ref-configs works by overwriting mbedtls_config.h; this makes cmake
17 # want to re-generate generated files that depend on it, quite correctly.
18 # However this doesn't work as the generation script expects a specific
19 # format for mbedtls_config.h, which the other files don't follow. Also,
20 # cmake can't know this, but re-generation is actually not necessary as
21 # the generated files only depend on the list of available options, not
22 # whether they're on or off. So, disable cmake's (over-sensitive here)
23 # dependency resolution for generated files and just rely on them being
24 # present (thanks to pre_generate_files) by turning GEN_FILES off.
Minos Galanakis5da58e52024-11-07 15:35:33 +000025 CC=$ASAN_CC cmake -D GEN_FILES=Off -DMBEDTLS_CONFIG_FILE="$MBEDTLS_CONFIG" -DMBEDTLS_PSA_CRYPTO_CONFIG_FILE="$CRYPTO_CONFIG" -D CMAKE_BUILD_TYPE:String=Asan .
Gilles Peskineb6d49132024-09-14 11:21:29 +020026 make
27
Gilles Peskineea5de2b2024-09-19 18:41:55 +020028 msg "test: configs/config-suite-b.h - unit tests"
Gilles Peskineb6d49132024-09-14 11:21:29 +020029 make test
30
Gilles Peskineea5de2b2024-09-19 18:41:55 +020031 msg "test: configs/config-suite-b.h - compat.sh"
Gilles Peskineb6d49132024-09-14 11:21:29 +020032 tests/compat.sh -m tls12 -f 'ECDHE_ECDSA.*AES.*GCM' -p mbedTLS
33
Gilles Peskineea5de2b2024-09-19 18:41:55 +020034 msg "build: configs/config-suite-b.h + DEBUG"
Gilles Peskineb6d49132024-09-14 11:21:29 +020035 MBEDTLS_TEST_CONFIGURATION="$MBEDTLS_TEST_CONFIGURATION+DEBUG"
36 make clean
Minos Galanakis5da58e52024-11-07 15:35:33 +000037 scripts/config.py -f "$MBEDTLS_CONFIG" set MBEDTLS_DEBUG_C
38 scripts/config.py -f "$MBEDTLS_CONFIG" set MBEDTLS_ERROR_C
Gilles Peskineb6d49132024-09-14 11:21:29 +020039 make ssl-opt
40
Gilles Peskineea5de2b2024-09-19 18:41:55 +020041 msg "test: configs/config-suite-b.h + DEBUG - ssl-opt.sh"
Gilles Peskineb6d49132024-09-14 11:21:29 +020042 tests/ssl-opt.sh
43}
44
Minos Galanakis7665a932024-07-26 15:45:11 +010045component_test_no_renegotiation () {
46 msg "build: Default + !MBEDTLS_SSL_RENEGOTIATION (ASan build)" # ~ 6 min
47 scripts/config.py unset MBEDTLS_SSL_RENEGOTIATION
48 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
49 make
50
51 msg "test: !MBEDTLS_SSL_RENEGOTIATION - main suites (inc. selftests) (ASan build)" # ~ 50s
52 make test
53
54 msg "test: !MBEDTLS_SSL_RENEGOTIATION - ssl-opt.sh (ASan build)" # ~ 6 min
55 tests/ssl-opt.sh
56}
57
Minos Galanakis7665a932024-07-26 15:45:11 +010058component_test_tls1_2_default_stream_cipher_only () {
59 msg "build: default with only stream cipher use psa"
60
Minos Galanakis7665a932024-07-26 15:45:11 +010061 # Disable AEAD (controlled by the presence of one of GCM_C, CCM_C, CHACHAPOLY_C)
62 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM
63 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM_STAR_NO_TAG
64 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_GCM
65 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CHACHA20_POLY1305
66 # Note: The three unsets below are to be removed for Mbed TLS 4.0
67 scripts/config.py unset MBEDTLS_GCM_C
68 scripts/config.py unset MBEDTLS_CCM_C
69 scripts/config.py unset MBEDTLS_CHACHAPOLY_C
70 #Disable TLS 1.3 (as no AEAD)
71 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
72 # Disable CBC. Note: When implemented, PSA_WANT_ALG_CBC_MAC will also need to be unset here to fully disable CBC
73 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CBC_NO_PADDING
74 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CBC_PKCS7
75 # Disable CBC-legacy (controlled by MBEDTLS_CIPHER_MODE_CBC plus at least one block cipher (AES, ARIA, Camellia, DES))
76 # Note: The unset below is to be removed for 4.0
77 scripts/config.py unset MBEDTLS_CIPHER_MODE_CBC
78 # Disable CBC-EtM (controlled by the same as CBC-legacy plus MBEDTLS_SSL_ENCRYPT_THEN_MAC)
79 scripts/config.py unset MBEDTLS_SSL_ENCRYPT_THEN_MAC
80 # Enable stream (currently that's just the NULL pseudo-cipher (controlled by MBEDTLS_CIPHER_NULL_CIPHER))
81 scripts/config.py set MBEDTLS_CIPHER_NULL_CIPHER
82 # Modules that depend on AEAD
83 scripts/config.py unset MBEDTLS_SSL_CONTEXT_SERIALIZATION
84 scripts/config.py unset MBEDTLS_SSL_TICKET_C
85
86 make
87
88 msg "test: default with only stream cipher use psa"
89 make test
90
91 # Not running ssl-opt.sh because most tests require a non-NULL ciphersuite.
92}
93
94component_test_tls1_2_default_cbc_legacy_cipher_only () {
95 msg "build: default with only CBC-legacy cipher use psa"
96
Minos Galanakis7665a932024-07-26 15:45:11 +010097 # Disable AEAD (controlled by the presence of one of GCM_C, CCM_C, CHACHAPOLY_C)
98 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM
99 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM_STAR_NO_TAG
100 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_GCM
101 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CHACHA20_POLY1305
102 # Note: The three unsets below are to be removed for Mbed TLS 4.0
103 scripts/config.py unset MBEDTLS_GCM_C
104 scripts/config.py unset MBEDTLS_CCM_C
105 scripts/config.py unset MBEDTLS_CHACHAPOLY_C
106 #Disable TLS 1.3 (as no AEAD)
107 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
108 # Enable CBC-legacy (controlled by MBEDTLS_CIPHER_MODE_CBC plus at least one block cipher (AES, ARIA, Camellia, DES))
109 scripts/config.py -f $CRYPTO_CONFIG_H set PSA_WANT_ALG_CBC_NO_PADDING
110 # Disable CBC-EtM (controlled by the same as CBC-legacy plus MBEDTLS_SSL_ENCRYPT_THEN_MAC)
111 scripts/config.py unset MBEDTLS_SSL_ENCRYPT_THEN_MAC
112 # Disable stream (currently that's just the NULL pseudo-cipher (controlled by MBEDTLS_CIPHER_NULL_CIPHER))
113 scripts/config.py unset MBEDTLS_CIPHER_NULL_CIPHER
114 # Modules that depend on AEAD
115 scripts/config.py unset MBEDTLS_SSL_CONTEXT_SERIALIZATION
116 scripts/config.py unset MBEDTLS_SSL_TICKET_C
117
118 make
119
120 msg "test: default with only CBC-legacy cipher use psa"
121 make test
122
123 msg "test: default with only CBC-legacy cipher use psa - ssl-opt.sh (subset)"
124 tests/ssl-opt.sh -f "TLS 1.2"
125}
126
127component_test_tls1_2_default_cbc_legacy_cbc_etm_cipher_only () {
128 msg "build: default with only CBC-legacy and CBC-EtM ciphers use psa"
129
Minos Galanakis7665a932024-07-26 15:45:11 +0100130 # Disable AEAD (controlled by the presence of one of GCM_C, CCM_C, CHACHAPOLY_C)
131 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM
132 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM_STAR_NO_TAG
133 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_GCM
134 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CHACHA20_POLY1305
135 # Note: The three unsets below are to be removed for Mbed TLS 4.0
136 scripts/config.py unset MBEDTLS_GCM_C
137 scripts/config.py unset MBEDTLS_CCM_C
138 scripts/config.py unset MBEDTLS_CHACHAPOLY_C
139 #Disable TLS 1.3 (as no AEAD)
140 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
141 # Enable CBC-legacy (controlled by MBEDTLS_CIPHER_MODE_CBC plus at least one block cipher (AES, ARIA, Camellia, DES))
142 scripts/config.py -f $CRYPTO_CONFIG_H set PSA_WANT_ALG_CBC_NO_PADDING
143 # Enable CBC-EtM (controlled by the same as CBC-legacy plus MBEDTLS_SSL_ENCRYPT_THEN_MAC)
144 scripts/config.py set MBEDTLS_SSL_ENCRYPT_THEN_MAC
145 # Disable stream (currently that's just the NULL pseudo-cipher (controlled by MBEDTLS_CIPHER_NULL_CIPHER))
146 scripts/config.py unset MBEDTLS_CIPHER_NULL_CIPHER
147 # Modules that depend on AEAD
148 scripts/config.py unset MBEDTLS_SSL_CONTEXT_SERIALIZATION
149 scripts/config.py unset MBEDTLS_SSL_TICKET_C
150
151 make
152
153 msg "test: default with only CBC-legacy and CBC-EtM ciphers use psa"
154 make test
155
156 msg "test: default with only CBC-legacy and CBC-EtM ciphers use psa - ssl-opt.sh (subset)"
157 tests/ssl-opt.sh -f "TLS 1.2"
158}
159
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200160component_test_config_thread () {
161 msg "build: configs/config-thread.h"
Minos Galanakis5da58e52024-11-07 15:35:33 +0000162 MBEDTLS_CONFIG="configs/config-thread.h"
163 CRYPTO_CONFIG="configs/crypto-config-thread.h"
Gilles Peskine86ceb132024-09-14 11:24:07 +0200164 # test-ref-configs works by overwriting mbedtls_config.h; this makes cmake
165 # want to re-generate generated files that depend on it, quite correctly.
166 # However this doesn't work as the generation script expects a specific
167 # format for mbedtls_config.h, which the other files don't follow. Also,
168 # cmake can't know this, but re-generation is actually not necessary as
169 # the generated files only depend on the list of available options, not
170 # whether they're on or off. So, disable cmake's (over-sensitive here)
171 # dependency resolution for generated files and just rely on them being
172 # present (thanks to pre_generate_files) by turning GEN_FILES off.
Minos Galanakis5da58e52024-11-07 15:35:33 +0000173 CC=$ASAN_CC cmake -D GEN_FILES=Off -DMBEDTLS_CONFIG_FILE="$MBEDTLS_CONFIG" -DMBEDTLS_PSA_CRYPTO_CONFIG_FILE="$CRYPTO_CONFIG" -D CMAKE_BUILD_TYPE:String=Asan .
Gilles Peskine86ceb132024-09-14 11:24:07 +0200174 make
175
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200176 msg "test: configs/config-thread.h - unit tests"
Gilles Peskine86ceb132024-09-14 11:24:07 +0200177 make test
178
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200179 msg "test: configs/config-thread.h - ssl-opt.sh"
Gilles Peskine86ceb132024-09-14 11:24:07 +0200180 tests/ssl-opt.sh -f 'ECJPAKE.*nolog'
181}
182
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200183component_test_tls1_2_ccm_psk () {
184 msg "build: configs/config-ccm-psk-tls1_2.h"
Minos Galanakis5da58e52024-11-07 15:35:33 +0000185 MBEDTLS_CONFIG="configs/config-ccm-psk-tls1_2.h"
186 CRYPTO_CONFIG="configs/crypto-config-ccm-psk-tls1_2.h"
Gilles Peskine063fb8c2024-09-14 11:10:05 +0200187 # test-ref-configs works by overwriting mbedtls_config.h; this makes cmake
188 # want to re-generate generated files that depend on it, quite correctly.
189 # However this doesn't work as the generation script expects a specific
190 # format for mbedtls_config.h, which the other files don't follow. Also,
191 # cmake can't know this, but re-generation is actually not necessary as
192 # the generated files only depend on the list of available options, not
193 # whether they're on or off. So, disable cmake's (over-sensitive here)
194 # dependency resolution for generated files and just rely on them being
195 # present (thanks to pre_generate_files) by turning GEN_FILES off.
Minos Galanakis5da58e52024-11-07 15:35:33 +0000196 CC=$ASAN_CC cmake -D GEN_FILES=Off -DMBEDTLS_CONFIG_FILE="$MBEDTLS_CONFIG" -DMBEDTLS_PSA_CRYPTO_CONFIG_FILE="$CRYPTO_CONFIG" -D CMAKE_BUILD_TYPE:String=Asan .
Gilles Peskine063fb8c2024-09-14 11:10:05 +0200197 make
198
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200199 msg "test: configs/config-ccm-psk-tls1_2.h - unit tests"
Gilles Peskine063fb8c2024-09-14 11:10:05 +0200200 make test
201
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200202 msg "test: configs/config-ccm-psk-tls1_2.h - compat.sh"
Gilles Peskine063fb8c2024-09-14 11:10:05 +0200203 tests/compat.sh -m tls12 -f '^TLS_PSK_WITH_AES_..._CCM_8'
204}
205
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200206component_test_tls1_2_ccm_psk_dtls () {
207 msg "build: configs/config-ccm-psk-dtls1_2.h"
Minos Galanakis5da58e52024-11-07 15:35:33 +0000208 MBEDTLS_CONFIG="configs/config-ccm-psk-dtls1_2.h"
209 CRYPTO_CONFIG="configs/crypto-config-ccm-psk-tls1_2.h"
Gilles Peskine68f511e2024-09-14 11:19:31 +0200210 # test-ref-configs works by overwriting mbedtls_config.h; this makes cmake
211 # want to re-generate generated files that depend on it, quite correctly.
212 # However this doesn't work as the generation script expects a specific
213 # format for mbedtls_config.h, which the other files don't follow. Also,
214 # cmake can't know this, but re-generation is actually not necessary as
215 # the generated files only depend on the list of available options, not
216 # whether they're on or off. So, disable cmake's (over-sensitive here)
217 # dependency resolution for generated files and just rely on them being
218 # present (thanks to pre_generate_files) by turning GEN_FILES off.
Minos Galanakis5da58e52024-11-07 15:35:33 +0000219 CC=$ASAN_CC cmake -D GEN_FILES=Off -DMBEDTLS_CONFIG_FILE="$MBEDTLS_CONFIG" -DMBEDTLS_PSA_CRYPTO_CONFIG_FILE="$CRYPTO_CONFIG" -D CMAKE_BUILD_TYPE:String=Asan .
Gilles Peskine68f511e2024-09-14 11:19:31 +0200220 make
221
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200222 msg "test: configs/config-ccm-psk-dtls1_2.h - unit tests"
Gilles Peskine68f511e2024-09-14 11:19:31 +0200223 make test
224
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200225 msg "test: configs/config-ccm-psk-dtls1_2.h - compat.sh"
Gilles Peskine68f511e2024-09-14 11:19:31 +0200226 tests/compat.sh -m dtls12 -f '^TLS_PSK_WITH_AES_..._CCM_8'
227
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200228 msg "build: configs/config-ccm-psk-dtls1_2.h + DEBUG"
Gilles Peskine68f511e2024-09-14 11:19:31 +0200229 MBEDTLS_TEST_CONFIGURATION="$MBEDTLS_TEST_CONFIGURATION+DEBUG"
230 make clean
Minos Galanakis5da58e52024-11-07 15:35:33 +0000231 scripts/config.py -f "$MBEDTLS_CONFIG" set MBEDTLS_DEBUG_C
232 scripts/config.py -f "$MBEDTLS_CONFIG" set MBEDTLS_ERROR_C
Gilles Peskine68f511e2024-09-14 11:19:31 +0200233 make ssl-opt
234
Gilles Peskineea5de2b2024-09-19 18:41:55 +0200235 msg "test: configs/config-ccm-psk-dtls1_2.h + DEBUG - ssl-opt.sh"
Gilles Peskine68f511e2024-09-14 11:19:31 +0200236 tests/ssl-opt.sh
237}
238
Minos Galanakis7665a932024-07-26 15:45:11 +0100239component_test_small_ssl_out_content_len () {
240 msg "build: small SSL_OUT_CONTENT_LEN (ASan build)"
241 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 16384
242 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 4096
243 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
244 make
245
246 msg "test: small SSL_OUT_CONTENT_LEN - ssl-opt.sh MFL and large packet tests"
247 tests/ssl-opt.sh -f "Max fragment\|Large packet"
248}
249
250component_test_small_ssl_in_content_len () {
251 msg "build: small SSL_IN_CONTENT_LEN (ASan build)"
252 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 4096
253 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 16384
254 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
255 make
256
257 msg "test: small SSL_IN_CONTENT_LEN - ssl-opt.sh MFL tests"
258 tests/ssl-opt.sh -f "Max fragment"
259}
260
261component_test_small_ssl_dtls_max_buffering () {
262 msg "build: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #0"
263 scripts/config.py set MBEDTLS_SSL_DTLS_MAX_BUFFERING 1000
264 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
265 make
266
267 msg "test: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #0 - ssl-opt.sh specific reordering test"
268 tests/ssl-opt.sh -f "DTLS reordering: Buffer out-of-order hs msg before reassembling next, free buffered msg"
269}
270
271component_test_small_mbedtls_ssl_dtls_max_buffering () {
272 msg "build: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #1"
273 scripts/config.py set MBEDTLS_SSL_DTLS_MAX_BUFFERING 190
274 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
275 make
276
277 msg "test: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #1 - ssl-opt.sh specific reordering test"
278 tests/ssl-opt.sh -f "DTLS reordering: Buffer encrypted Finished message, drop for fragmented NewSessionTicket"
279}
280
281# Common helper for component_full_without_ecdhe_ecdsa() and
282# component_full_without_ecdhe_ecdsa_and_tls13() which:
283# - starts from the "full" configuration minus the list of symbols passed in
284# as 1st parameter
285# - build
286# - test only TLS (i.e. test_suite_tls and ssl-opt)
287build_full_minus_something_and_test_tls () {
288 symbols_to_disable="$1"
289
290 msg "build: full minus something, test TLS"
291
292 scripts/config.py full
293 for sym in $symbols_to_disable; do
294 echo "Disabling $sym"
295 scripts/config.py unset $sym
296 done
297
298 make
299
300 msg "test: full minus something, test TLS"
301 ( cd tests; ./test_suite_ssl )
302
303 msg "ssl-opt: full minus something, test TLS"
304 tests/ssl-opt.sh
305}
306
307component_full_without_ecdhe_ecdsa () {
308 build_full_minus_something_and_test_tls "MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED"
309}
310
311component_full_without_ecdhe_ecdsa_and_tls13 () {
312 build_full_minus_something_and_test_tls "MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
313 MBEDTLS_SSL_PROTO_TLS1_3"
314}
315
Minos Galanakis7665a932024-07-26 15:45:11 +0100316component_build_no_ssl_srv () {
317 msg "build: full config except SSL server, make, gcc" # ~ 30s
318 scripts/config.py full
319 scripts/config.py unset MBEDTLS_SSL_SRV_C
Minos Galanakisa368c8a2024-08-06 12:06:51 +0100320 make CC=gcc CFLAGS='-Werror -Wall -Wextra -O1 -Wmissing-prototypes'
Minos Galanakis7665a932024-07-26 15:45:11 +0100321}
322
323component_build_no_ssl_cli () {
324 msg "build: full config except SSL client, make, gcc" # ~ 30s
325 scripts/config.py full
326 scripts/config.py unset MBEDTLS_SSL_CLI_C
Minos Galanakisa368c8a2024-08-06 12:06:51 +0100327 make CC=gcc CFLAGS='-Werror -Wall -Wextra -O1 -Wmissing-prototypes'
Minos Galanakis7665a932024-07-26 15:45:11 +0100328}
329
Minos Galanakis7665a932024-07-26 15:45:11 +0100330component_test_no_max_fragment_length () {
331 # Run max fragment length tests with MFL disabled
332 msg "build: default config except MFL extension (ASan build)" # ~ 30s
333 scripts/config.py unset MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
334 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
335 make
336
337 msg "test: ssl-opt.sh, MFL-related tests"
338 tests/ssl-opt.sh -f "Max fragment length"
339}
340
341component_test_asan_remove_peer_certificate () {
342 msg "build: default config with MBEDTLS_SSL_KEEP_PEER_CERTIFICATE disabled (ASan build)"
343 scripts/config.py unset MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
344 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
345 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
346 make
347
348 msg "test: !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE"
349 make test
350
351 msg "test: ssl-opt.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE"
352 tests/ssl-opt.sh
353
354 msg "test: compat.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE"
355 tests/compat.sh
356
357 msg "test: context-info.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE"
358 tests/context-info.sh
359}
360
361component_test_no_max_fragment_length_small_ssl_out_content_len () {
362 msg "build: no MFL extension, small SSL_OUT_CONTENT_LEN (ASan build)"
363 scripts/config.py unset MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
364 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 16384
365 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 4096
366 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
367 make
368
369 msg "test: MFL tests (disabled MFL extension case) & large packet tests"
370 tests/ssl-opt.sh -f "Max fragment length\|Large buffer"
371
372 msg "test: context-info.sh (disabled MFL extension case)"
373 tests/context-info.sh
374}
375
376component_test_variable_ssl_in_out_buffer_len () {
377 msg "build: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled (ASan build)"
378 scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
379 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
380 make
381
382 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled"
383 make test
384
385 msg "test: ssl-opt.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled"
386 tests/ssl-opt.sh
387
388 msg "test: compat.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled"
389 tests/compat.sh
390}
391
392component_test_dtls_cid_legacy () {
393 msg "build: MBEDTLS_SSL_DTLS_CONNECTION_ID (legacy) enabled (ASan build)"
394 scripts/config.py set MBEDTLS_SSL_DTLS_CONNECTION_ID_COMPAT 1
395
396 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
397 make
398
399 msg "test: MBEDTLS_SSL_DTLS_CONNECTION_ID (legacy)"
400 make test
401
402 msg "test: ssl-opt.sh, MBEDTLS_SSL_DTLS_CONNECTION_ID (legacy) enabled"
403 tests/ssl-opt.sh
404
405 msg "test: compat.sh, MBEDTLS_SSL_DTLS_CONNECTION_ID (legacy) enabled"
406 tests/compat.sh
407}
408
409component_test_ssl_alloc_buffer_and_mfl () {
410 msg "build: default config with memory buffer allocator and MFL extension"
411 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C
412 scripts/config.py set MBEDTLS_PLATFORM_MEMORY
413 scripts/config.py set MBEDTLS_MEMORY_DEBUG
414 scripts/config.py set MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
415 scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
416 cmake -DCMAKE_BUILD_TYPE:String=Release .
417 make
418
419 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH, MBEDTLS_MEMORY_BUFFER_ALLOC_C, MBEDTLS_MEMORY_DEBUG and MBEDTLS_SSL_MAX_FRAGMENT_LENGTH"
420 make test
421
422 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH, MBEDTLS_MEMORY_BUFFER_ALLOC_C, MBEDTLS_MEMORY_DEBUG and MBEDTLS_SSL_MAX_FRAGMENT_LENGTH"
423 tests/ssl-opt.sh -f "Handshake memory usage"
424}
425
426component_test_when_no_ciphersuites_have_mac () {
427 msg "build: when no ciphersuites have MAC"
Minos Galanakis7665a932024-07-26 15:45:11 +0100428 scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_CBC_NO_PADDING
429 scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_CBC_PKCS7
430 scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_CMAC
431 scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_PBKDF2_AES_CMAC_PRF_128
432
433 scripts/config.py unset MBEDTLS_CIPHER_NULL_CIPHER
434 scripts/config.py unset MBEDTLS_CIPHER_MODE_CBC
435 scripts/config.py unset MBEDTLS_CMAC_C
436
437 make
438
439 msg "test: !MBEDTLS_SSL_SOME_SUITES_USE_MAC"
440 make test
441
442 msg "test ssl-opt.sh: !MBEDTLS_SSL_SOME_SUITES_USE_MAC"
443 tests/ssl-opt.sh -f 'Default\|EtM' -e 'without EtM'
444}
445
446component_test_tls12_only () {
447 msg "build: default config without MBEDTLS_SSL_PROTO_TLS1_3, cmake, gcc, ASan"
448 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
449 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
450 make
451
452 msg "test: main suites (inc. selftests) (ASan build)"
453 make test
454
455 msg "test: ssl-opt.sh (ASan build)"
456 tests/ssl-opt.sh
457
458 msg "test: compat.sh (ASan build)"
459 tests/compat.sh
460}
461
462component_test_tls13_only () {
463 msg "build: default config without MBEDTLS_SSL_PROTO_TLS1_2"
464 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
465 scripts/config.py set MBEDTLS_SSL_RECORD_SIZE_LIMIT
466 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
467
468 msg "test: TLS 1.3 only, all key exchange modes enabled"
469 make test
470
471 msg "ssl-opt.sh: TLS 1.3 only, all key exchange modes enabled"
472 tests/ssl-opt.sh
473}
474
475component_test_tls13_only_psk () {
476 msg "build: TLS 1.3 only from default, only PSK key exchange mode"
477 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
478 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
Minos Galanakis7665a932024-07-26 15:45:11 +0100479 scripts/config.py unset MBEDTLS_X509_CRT_PARSE_C
480 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
481 scripts/config.py unset MBEDTLS_SSL_SERVER_NAME_INDICATION
Minos Galanakis7665a932024-07-26 15:45:11 +0100482 scripts/config.py unset MBEDTLS_PKCS7_C
483 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
Ronald Crona9511bc2024-09-06 09:21:10 +0200484
Ronald Crona9511bc2024-09-06 09:21:10 +0200485 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_ECDH
486 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_ECDSA
487 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_DETERMINISTIC_ECDSA
488 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_RSA_OAEP
489 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_RSA_PSS
490 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_FFDH
491 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_KEY_TYPE_DH_PUBLIC_KEY
492 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_KEY_TYPE_DH_KEY_PAIR_BASIC
493 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_KEY_TYPE_DH_KEY_PAIR_IMPORT
494 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_KEY_TYPE_DH_KEY_PAIR_EXPORT
495 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_KEY_TYPE_DH_KEY_PAIR_GENERATE
496 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_DH_RFC7919_2048
497 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_DH_RFC7919_3072
498 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_DH_RFC7919_4096
499 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_DH_RFC7919_6144
500 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_DH_RFC7919_8192
Ronald Cron4153ebb2024-09-11 15:32:48 +0200501 # Note: The four unsets below are to be removed for Mbed TLS 4.0
Ronald Crona9511bc2024-09-06 09:21:10 +0200502 scripts/config.py unset MBEDTLS_ECDH_C
503 scripts/config.py unset MBEDTLS_ECDSA_C
504 scripts/config.py unset MBEDTLS_PKCS1_V21
505 scripts/config.py unset MBEDTLS_DHM_C
506
Minos Galanakis7665a932024-07-26 15:45:11 +0100507 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
508
509 msg "test_suite_ssl: TLS 1.3 only, only PSK key exchange mode enabled"
510 cd tests; ./test_suite_ssl; cd ..
511
512 msg "ssl-opt.sh: TLS 1.3 only, only PSK key exchange mode enabled"
513 tests/ssl-opt.sh
514}
515
516component_test_tls13_only_ephemeral () {
517 msg "build: TLS 1.3 only from default, only ephemeral key exchange mode"
518 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
519 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
520 scripts/config.py unset MBEDTLS_SSL_EARLY_DATA
521 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
522
523 msg "test_suite_ssl: TLS 1.3 only, only ephemeral key exchange mode"
524 cd tests; ./test_suite_ssl; cd ..
525
526 msg "ssl-opt.sh: TLS 1.3 only, only ephemeral key exchange mode"
527 tests/ssl-opt.sh
528}
529
530component_test_tls13_only_ephemeral_ffdh () {
531 msg "build: TLS 1.3 only from default, only ephemeral ffdh key exchange mode"
532 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
533 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
534 scripts/config.py unset MBEDTLS_SSL_EARLY_DATA
Ronald Crona9511bc2024-09-06 09:21:10 +0200535
Ronald Crona9511bc2024-09-06 09:21:10 +0200536 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_ECDH
Ronald Cron4153ebb2024-09-11 15:32:48 +0200537 # Note: The unset below is to be removed for Mbed TLS 4.0
Minos Galanakis7665a932024-07-26 15:45:11 +0100538 scripts/config.py unset MBEDTLS_ECDH_C
539
540 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
541
542 msg "test_suite_ssl: TLS 1.3 only, only ephemeral ffdh key exchange mode"
543 cd tests; ./test_suite_ssl; cd ..
544
545 msg "ssl-opt.sh: TLS 1.3 only, only ephemeral ffdh key exchange mode"
546 tests/ssl-opt.sh
547}
548
549component_test_tls13_only_psk_ephemeral () {
550 msg "build: TLS 1.3 only from default, only PSK ephemeral key exchange mode"
551 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
552 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
553 scripts/config.py unset MBEDTLS_X509_CRT_PARSE_C
554 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
555 scripts/config.py unset MBEDTLS_SSL_SERVER_NAME_INDICATION
Minos Galanakis7665a932024-07-26 15:45:11 +0100556 scripts/config.py unset MBEDTLS_PKCS7_C
557 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
Ronald Crona9511bc2024-09-06 09:21:10 +0200558
Ronald Crona9511bc2024-09-06 09:21:10 +0200559 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_ECDSA
560 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_DETERMINISTIC_ECDSA
561 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_RSA_OAEP
562 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_RSA_PSS
Ronald Cron4153ebb2024-09-11 15:32:48 +0200563 # Note: The two unsets below are to be removed for Mbed TLS 4.0
Ronald Crona9511bc2024-09-06 09:21:10 +0200564 scripts/config.py unset MBEDTLS_ECDSA_C
565 scripts/config.py unset MBEDTLS_PKCS1_V21
566
Minos Galanakis7665a932024-07-26 15:45:11 +0100567 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
568
569 msg "test_suite_ssl: TLS 1.3 only, only PSK ephemeral key exchange mode"
570 cd tests; ./test_suite_ssl; cd ..
571
572 msg "ssl-opt.sh: TLS 1.3 only, only PSK ephemeral key exchange mode"
573 tests/ssl-opt.sh
574}
575
576component_test_tls13_only_psk_ephemeral_ffdh () {
577 msg "build: TLS 1.3 only from default, only PSK ephemeral ffdh key exchange mode"
578 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
579 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
580 scripts/config.py unset MBEDTLS_X509_CRT_PARSE_C
581 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
582 scripts/config.py unset MBEDTLS_SSL_SERVER_NAME_INDICATION
Minos Galanakis7665a932024-07-26 15:45:11 +0100583 scripts/config.py unset MBEDTLS_PKCS7_C
584 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
Ronald Crona9511bc2024-09-06 09:21:10 +0200585
Ronald Crona9511bc2024-09-06 09:21:10 +0200586 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_ECDH
587 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_ECDSA
588 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_DETERMINISTIC_ECDSA
589 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_RSA_OAEP
590 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_RSA_PSS
591 # Note: The three unsets below are to be removed for Mbed TLS 4.0
Minos Galanakis7665a932024-07-26 15:45:11 +0100592 scripts/config.py unset MBEDTLS_ECDH_C
Ronald Crona9511bc2024-09-06 09:21:10 +0200593 scripts/config.py unset MBEDTLS_ECDSA_C
594 scripts/config.py unset MBEDTLS_PKCS1_V21
595
Minos Galanakis7665a932024-07-26 15:45:11 +0100596 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
597
598 msg "test_suite_ssl: TLS 1.3 only, only PSK ephemeral ffdh key exchange mode"
599 cd tests; ./test_suite_ssl; cd ..
600
601 msg "ssl-opt.sh: TLS 1.3 only, only PSK ephemeral ffdh key exchange mode"
602 tests/ssl-opt.sh
603}
604
605component_test_tls13_only_psk_all () {
606 msg "build: TLS 1.3 only from default, without ephemeral key exchange mode"
607 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
608 scripts/config.py unset MBEDTLS_X509_CRT_PARSE_C
609 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
610 scripts/config.py unset MBEDTLS_SSL_SERVER_NAME_INDICATION
Minos Galanakis7665a932024-07-26 15:45:11 +0100611 scripts/config.py unset MBEDTLS_PKCS7_C
612 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
Ronald Crona9511bc2024-09-06 09:21:10 +0200613
Ronald Crona9511bc2024-09-06 09:21:10 +0200614 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_ECDSA
615 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_DETERMINISTIC_ECDSA
616 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_RSA_OAEP
617 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_RSA_PSS
Ronald Cron4153ebb2024-09-11 15:32:48 +0200618 # Note: The two unsets below are to be removed for Mbed TLS 4.0
Ronald Crona9511bc2024-09-06 09:21:10 +0200619 scripts/config.py unset MBEDTLS_ECDSA_C
620 scripts/config.py unset MBEDTLS_PKCS1_V21
621
Minos Galanakis7665a932024-07-26 15:45:11 +0100622 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
623
624 msg "test_suite_ssl: TLS 1.3 only, PSK and PSK ephemeral key exchange modes"
625 cd tests; ./test_suite_ssl; cd ..
626
627 msg "ssl-opt.sh: TLS 1.3 only, PSK and PSK ephemeral key exchange modes"
628 tests/ssl-opt.sh
629}
630
631component_test_tls13_only_ephemeral_all () {
632 msg "build: TLS 1.3 only from default, without PSK key exchange mode"
633 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
634 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
635 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
636
637 msg "test_suite_ssl: TLS 1.3 only, ephemeral and PSK ephemeral key exchange modes"
638 cd tests; ./test_suite_ssl; cd ..
639
640 msg "ssl-opt.sh: TLS 1.3 only, ephemeral and PSK ephemeral key exchange modes"
641 tests/ssl-opt.sh
642}
643
644component_test_tls13_no_padding () {
645 msg "build: default config plus early data minus padding"
646 scripts/config.py set MBEDTLS_SSL_CID_TLS1_3_PADDING_GRANULARITY 1
647 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
648 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
649 make
650 msg "test: default config plus early data minus padding"
651 make test
652 msg "ssl-opt.sh (TLS 1.3 no padding)"
653 tests/ssl-opt.sh
654}
655
656component_test_tls13_no_compatibility_mode () {
657 msg "build: default config plus early data minus middlebox compatibility mode"
658 scripts/config.py unset MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
659 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
660 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
661 make
662 msg "test: default config plus early data minus middlebox compatibility mode"
663 make test
664 msg "ssl-opt.sh (TLS 1.3 no compatibility mode)"
665 tests/ssl-opt.sh
666}
667
Minos Galanakisf78447f2024-07-26 20:49:51 +0100668component_test_full_minus_session_tickets () {
Minos Galanakis7665a932024-07-26 15:45:11 +0100669 msg "build: full config without session tickets"
670 scripts/config.py full
671 scripts/config.py unset MBEDTLS_SSL_SESSION_TICKETS
672 scripts/config.py unset MBEDTLS_SSL_EARLY_DATA
673 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
674 make
675 msg "test: full config without session tickets"
676 make test
677 msg "ssl-opt.sh (full config without session tickets)"
678 tests/ssl-opt.sh
679}
680
Minos Galanakis4b6ee642024-08-01 11:20:02 +0100681component_test_depends_py_kex () {
682 msg "test/build: depends.py kex (gcc)"
Minos Galanakis4b6ee642024-08-01 11:20:02 +0100683 tests/scripts/depends.py kex
684}
685
Minos Galanakis6aab5b72024-07-25 14:24:37 +0100686