blob: 023780bd6559cc3cd1ec11a6ebac7eb4ae1ef03d [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
Minos Galanakis7665a932024-07-26 15:45:11 +010012component_test_no_renegotiation () {
13 msg "build: Default + !MBEDTLS_SSL_RENEGOTIATION (ASan build)" # ~ 6 min
14 scripts/config.py unset MBEDTLS_SSL_RENEGOTIATION
15 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
16 make
17
18 msg "test: !MBEDTLS_SSL_RENEGOTIATION - main suites (inc. selftests) (ASan build)" # ~ 50s
19 make test
20
21 msg "test: !MBEDTLS_SSL_RENEGOTIATION - ssl-opt.sh (ASan build)" # ~ 6 min
22 tests/ssl-opt.sh
23}
24
25component_test_no_pem_no_fs () {
26 msg "build: Default + !MBEDTLS_PEM_PARSE_C + !MBEDTLS_FS_IO (ASan build)"
27 scripts/config.py unset MBEDTLS_PEM_PARSE_C
28 scripts/config.py unset MBEDTLS_FS_IO
29 scripts/config.py unset MBEDTLS_PSA_ITS_FILE_C # requires a filesystem
30 scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C # requires PSA ITS
31 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
32 make
33
34 msg "test: !MBEDTLS_PEM_PARSE_C !MBEDTLS_FS_IO - main suites (inc. selftests) (ASan build)" # ~ 50s
35 make test
36
37 msg "test: !MBEDTLS_PEM_PARSE_C !MBEDTLS_FS_IO - ssl-opt.sh (ASan build)" # ~ 6 min
38 tests/ssl-opt.sh
39}
40
41component_test_rsa_no_crt () {
42 msg "build: Default + RSA_NO_CRT (ASan build)" # ~ 6 min
43 scripts/config.py set MBEDTLS_RSA_NO_CRT
44 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
45 make
46
47 msg "test: RSA_NO_CRT - main suites (inc. selftests) (ASan build)" # ~ 50s
48 make test
49
50 msg "test: RSA_NO_CRT - RSA-related part of ssl-opt.sh (ASan build)" # ~ 5s
51 tests/ssl-opt.sh -f RSA
52
53 msg "test: RSA_NO_CRT - RSA-related part of compat.sh (ASan build)" # ~ 3 min
54 tests/compat.sh -t RSA
55
56 msg "test: RSA_NO_CRT - RSA-related part of context-info.sh (ASan build)" # ~ 15 sec
57 tests/context-info.sh
58}
59
60component_test_no_ctr_drbg_classic () {
61 msg "build: Full minus CTR_DRBG, classic crypto in TLS"
62 scripts/config.py full
63 scripts/config.py unset MBEDTLS_CTR_DRBG_C
64 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO
65 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
66
67 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
68 make
69
70 msg "test: Full minus CTR_DRBG, classic crypto - main suites"
71 make test
72
73 # In this configuration, the TLS test programs use HMAC_DRBG.
74 # The SSL tests are slow, so run a small subset, just enough to get
75 # confidence that the SSL code copes with HMAC_DRBG.
76 msg "test: Full minus CTR_DRBG, classic crypto - ssl-opt.sh (subset)"
77 tests/ssl-opt.sh -f 'Default\|SSL async private.*delay=\|tickets enabled on server'
78
79 msg "test: Full minus CTR_DRBG, classic crypto - compat.sh (subset)"
80 tests/compat.sh -m tls12 -t 'ECDSA PSK' -V NO -p OpenSSL
81}
82
83component_test_no_ctr_drbg_use_psa () {
84 msg "build: Full minus CTR_DRBG, PSA crypto in TLS"
85 scripts/config.py full
86 scripts/config.py unset MBEDTLS_CTR_DRBG_C
87 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO
88
89 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
90 make
91
92 msg "test: Full minus CTR_DRBG, USE_PSA_CRYPTO - main suites"
93 make test
94
95 # In this configuration, the TLS test programs use HMAC_DRBG.
96 # The SSL tests are slow, so run a small subset, just enough to get
97 # confidence that the SSL code copes with HMAC_DRBG.
98 msg "test: Full minus CTR_DRBG, USE_PSA_CRYPTO - ssl-opt.sh (subset)"
99 tests/ssl-opt.sh -f 'Default\|SSL async private.*delay=\|tickets enabled on server'
100
101 msg "test: Full minus CTR_DRBG, USE_PSA_CRYPTO - compat.sh (subset)"
102 tests/compat.sh -m tls12 -t 'ECDSA PSK' -V NO -p OpenSSL
103}
104
105component_test_no_hmac_drbg_classic () {
106 msg "build: Full minus HMAC_DRBG, classic crypto in TLS"
107 scripts/config.py full
108 scripts/config.py unset MBEDTLS_HMAC_DRBG_C
109 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG
110 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO
111 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
112
113 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
114 make
115
116 msg "test: Full minus HMAC_DRBG, classic crypto - main suites"
117 make test
118
119 # Normally our ECDSA implementation uses deterministic ECDSA. But since
120 # HMAC_DRBG is disabled in this configuration, randomized ECDSA is used
121 # instead.
122 # Test SSL with non-deterministic ECDSA. Only test features that
123 # might be affected by how ECDSA signature is performed.
124 msg "test: Full minus HMAC_DRBG, classic crypto - ssl-opt.sh (subset)"
125 tests/ssl-opt.sh -f 'Default\|SSL async private: sign'
126
127 # To save time, only test one protocol version, since this part of
128 # the protocol is identical in (D)TLS up to 1.2.
129 msg "test: Full minus HMAC_DRBG, classic crypto - compat.sh (ECDSA)"
130 tests/compat.sh -m tls12 -t 'ECDSA'
131}
132
133component_test_no_hmac_drbg_use_psa () {
134 msg "build: Full minus HMAC_DRBG, PSA crypto in TLS"
135 scripts/config.py full
136 scripts/config.py unset MBEDTLS_HMAC_DRBG_C
137 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG
138 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO
139
140 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
141 make
142
143 msg "test: Full minus HMAC_DRBG, USE_PSA_CRYPTO - main suites"
144 make test
145
146 # Normally our ECDSA implementation uses deterministic ECDSA. But since
147 # HMAC_DRBG is disabled in this configuration, randomized ECDSA is used
148 # instead.
149 # Test SSL with non-deterministic ECDSA. Only test features that
150 # might be affected by how ECDSA signature is performed.
151 msg "test: Full minus HMAC_DRBG, USE_PSA_CRYPTO - ssl-opt.sh (subset)"
152 tests/ssl-opt.sh -f 'Default\|SSL async private: sign'
153
154 # To save time, only test one protocol version, since this part of
155 # the protocol is identical in (D)TLS up to 1.2.
156 msg "test: Full minus HMAC_DRBG, USE_PSA_CRYPTO - compat.sh (ECDSA)"
157 tests/compat.sh -m tls12 -t 'ECDSA'
158}
159
160component_test_psa_external_rng_no_drbg_classic () {
161 msg "build: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, classic crypto in TLS"
162 scripts/config.py full
163 scripts/config.py unset MBEDTLS_USE_PSA_CRYPTO
164 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
165 scripts/config.py set MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
166 scripts/config.py unset MBEDTLS_ENTROPY_C
167 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED
168 scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT
169 scripts/config.py unset MBEDTLS_CTR_DRBG_C
170 scripts/config.py unset MBEDTLS_HMAC_DRBG_C
171 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG
172 # When MBEDTLS_USE_PSA_CRYPTO is disabled and there is no DRBG,
173 # the SSL test programs don't have an RNG and can't work. Explicitly
174 # make them use the PSA RNG with -DMBEDTLS_TEST_USE_PSA_CRYPTO_RNG.
175 make CC=$ASAN_CC CFLAGS="$ASAN_CFLAGS -DMBEDTLS_TEST_USE_PSA_CRYPTO_RNG" LDFLAGS="$ASAN_CFLAGS"
176
177 msg "test: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, classic crypto - main suites"
178 make test
179
180 msg "test: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, classic crypto - ssl-opt.sh (subset)"
181 tests/ssl-opt.sh -f 'Default'
182}
183
184component_test_psa_external_rng_no_drbg_use_psa () {
185 msg "build: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, PSA crypto in TLS"
186 scripts/config.py full
187 scripts/config.py set MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
188 scripts/config.py unset MBEDTLS_ENTROPY_C
189 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED
190 scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT
191 scripts/config.py unset MBEDTLS_CTR_DRBG_C
192 scripts/config.py unset MBEDTLS_HMAC_DRBG_C
193 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC # requires HMAC_DRBG
194 make CC=$ASAN_CC CFLAGS="$ASAN_CFLAGS" LDFLAGS="$ASAN_CFLAGS"
195
196 msg "test: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, PSA crypto - main suites"
197 make test
198
199 msg "test: PSA_CRYPTO_EXTERNAL_RNG minus *_DRBG, PSA crypto - ssl-opt.sh (subset)"
200 tests/ssl-opt.sh -f 'Default\|opaque'
201}
202
203component_test_sw_inet_pton () {
204 msg "build: default plus MBEDTLS_TEST_SW_INET_PTON"
205
206 # MBEDTLS_TEST_HOOKS required for x509_crt_parse_cn_inet_pton
207 scripts/config.py set MBEDTLS_TEST_HOOKS
208 make CFLAGS="-DMBEDTLS_TEST_SW_INET_PTON"
209
210 msg "test: default plus MBEDTLS_TEST_SW_INET_PTON"
211 make test
212}
213
214component_test_tls1_2_default_stream_cipher_only () {
215 msg "build: default with only stream cipher use psa"
216
217 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO
218 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG
219 # Disable AEAD (controlled by the presence of one of GCM_C, CCM_C, CHACHAPOLY_C)
220 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM
221 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM_STAR_NO_TAG
222 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_GCM
223 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CHACHA20_POLY1305
224 # Note: The three unsets below are to be removed for Mbed TLS 4.0
225 scripts/config.py unset MBEDTLS_GCM_C
226 scripts/config.py unset MBEDTLS_CCM_C
227 scripts/config.py unset MBEDTLS_CHACHAPOLY_C
228 #Disable TLS 1.3 (as no AEAD)
229 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
230 # Disable CBC. Note: When implemented, PSA_WANT_ALG_CBC_MAC will also need to be unset here to fully disable CBC
231 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CBC_NO_PADDING
232 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CBC_PKCS7
233 # Disable CBC-legacy (controlled by MBEDTLS_CIPHER_MODE_CBC plus at least one block cipher (AES, ARIA, Camellia, DES))
234 # Note: The unset below is to be removed for 4.0
235 scripts/config.py unset MBEDTLS_CIPHER_MODE_CBC
236 # Disable CBC-EtM (controlled by the same as CBC-legacy plus MBEDTLS_SSL_ENCRYPT_THEN_MAC)
237 scripts/config.py unset MBEDTLS_SSL_ENCRYPT_THEN_MAC
238 # Enable stream (currently that's just the NULL pseudo-cipher (controlled by MBEDTLS_CIPHER_NULL_CIPHER))
239 scripts/config.py set MBEDTLS_CIPHER_NULL_CIPHER
240 # Modules that depend on AEAD
241 scripts/config.py unset MBEDTLS_SSL_CONTEXT_SERIALIZATION
242 scripts/config.py unset MBEDTLS_SSL_TICKET_C
243
244 make
245
246 msg "test: default with only stream cipher use psa"
247 make test
248
249 # Not running ssl-opt.sh because most tests require a non-NULL ciphersuite.
250}
251
252component_test_tls1_2_default_cbc_legacy_cipher_only () {
253 msg "build: default with only CBC-legacy cipher use psa"
254
255 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO
256 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG
257 # Disable AEAD (controlled by the presence of one of GCM_C, CCM_C, CHACHAPOLY_C)
258 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM
259 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM_STAR_NO_TAG
260 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_GCM
261 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CHACHA20_POLY1305
262 # Note: The three unsets below are to be removed for Mbed TLS 4.0
263 scripts/config.py unset MBEDTLS_GCM_C
264 scripts/config.py unset MBEDTLS_CCM_C
265 scripts/config.py unset MBEDTLS_CHACHAPOLY_C
266 #Disable TLS 1.3 (as no AEAD)
267 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
268 # Enable CBC-legacy (controlled by MBEDTLS_CIPHER_MODE_CBC plus at least one block cipher (AES, ARIA, Camellia, DES))
269 scripts/config.py -f $CRYPTO_CONFIG_H set PSA_WANT_ALG_CBC_NO_PADDING
270 # Disable CBC-EtM (controlled by the same as CBC-legacy plus MBEDTLS_SSL_ENCRYPT_THEN_MAC)
271 scripts/config.py unset MBEDTLS_SSL_ENCRYPT_THEN_MAC
272 # Disable stream (currently that's just the NULL pseudo-cipher (controlled by MBEDTLS_CIPHER_NULL_CIPHER))
273 scripts/config.py unset MBEDTLS_CIPHER_NULL_CIPHER
274 # Modules that depend on AEAD
275 scripts/config.py unset MBEDTLS_SSL_CONTEXT_SERIALIZATION
276 scripts/config.py unset MBEDTLS_SSL_TICKET_C
277
278 make
279
280 msg "test: default with only CBC-legacy cipher use psa"
281 make test
282
283 msg "test: default with only CBC-legacy cipher use psa - ssl-opt.sh (subset)"
284 tests/ssl-opt.sh -f "TLS 1.2"
285}
286
287component_test_tls1_2_default_cbc_legacy_cbc_etm_cipher_only () {
288 msg "build: default with only CBC-legacy and CBC-EtM ciphers use psa"
289
290 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO
291 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG
292 # Disable AEAD (controlled by the presence of one of GCM_C, CCM_C, CHACHAPOLY_C)
293 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM
294 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CCM_STAR_NO_TAG
295 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_GCM
296 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_CHACHA20_POLY1305
297 # Note: The three unsets below are to be removed for Mbed TLS 4.0
298 scripts/config.py unset MBEDTLS_GCM_C
299 scripts/config.py unset MBEDTLS_CCM_C
300 scripts/config.py unset MBEDTLS_CHACHAPOLY_C
301 #Disable TLS 1.3 (as no AEAD)
302 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
303 # Enable CBC-legacy (controlled by MBEDTLS_CIPHER_MODE_CBC plus at least one block cipher (AES, ARIA, Camellia, DES))
304 scripts/config.py -f $CRYPTO_CONFIG_H set PSA_WANT_ALG_CBC_NO_PADDING
305 # Enable CBC-EtM (controlled by the same as CBC-legacy plus MBEDTLS_SSL_ENCRYPT_THEN_MAC)
306 scripts/config.py set MBEDTLS_SSL_ENCRYPT_THEN_MAC
307 # Disable stream (currently that's just the NULL pseudo-cipher (controlled by MBEDTLS_CIPHER_NULL_CIPHER))
308 scripts/config.py unset MBEDTLS_CIPHER_NULL_CIPHER
309 # Modules that depend on AEAD
310 scripts/config.py unset MBEDTLS_SSL_CONTEXT_SERIALIZATION
311 scripts/config.py unset MBEDTLS_SSL_TICKET_C
312
313 make
314
315 msg "test: default with only CBC-legacy and CBC-EtM ciphers use psa"
316 make test
317
318 msg "test: default with only CBC-legacy and CBC-EtM ciphers use psa - ssl-opt.sh (subset)"
319 tests/ssl-opt.sh -f "TLS 1.2"
320}
321
322# We're not aware of any other (open source) implementation of EC J-PAKE in TLS
323# that we could use for interop testing. However, we now have sort of two
324# implementations ourselves: one using PSA, the other not. At least test that
325# these two interoperate with each other.
Minos Galanakisf78447f2024-07-26 20:49:51 +0100326component_test_tls1_2_ecjpake_compatibility () {
Minos Galanakis7665a932024-07-26 15:45:11 +0100327 msg "build: TLS1.2 server+client w/ EC-JPAKE w/o USE_PSA"
328 scripts/config.py set MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
329 # Explicitly make lib first to avoid a race condition:
330 # https://github.com/Mbed-TLS/mbedtls/issues/8229
331 make lib
332 make -C programs ssl/ssl_server2 ssl/ssl_client2
333 cp programs/ssl/ssl_server2 s2_no_use_psa
334 cp programs/ssl/ssl_client2 c2_no_use_psa
335
336 msg "build: TLS1.2 server+client w/ EC-JPAKE w/ USE_PSA"
337 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO
338 make clean
339 make lib
340 make -C programs ssl/ssl_server2 ssl/ssl_client2
341 make -C programs test/udp_proxy test/query_compile_time_config
342
343 msg "test: server w/o USE_PSA - client w/ USE_PSA, text password"
344 P_SRV=../s2_no_use_psa tests/ssl-opt.sh -f "ECJPAKE: working, TLS"
345 msg "test: server w/o USE_PSA - client w/ USE_PSA, opaque password"
346 P_SRV=../s2_no_use_psa tests/ssl-opt.sh -f "ECJPAKE: opaque password client only, working, TLS"
347 msg "test: client w/o USE_PSA - server w/ USE_PSA, text password"
348 P_CLI=../c2_no_use_psa tests/ssl-opt.sh -f "ECJPAKE: working, TLS"
349 msg "test: client w/o USE_PSA - server w/ USE_PSA, opaque password"
350 P_CLI=../c2_no_use_psa tests/ssl-opt.sh -f "ECJPAKE: opaque password server only, working, TLS"
351
352 rm s2_no_use_psa c2_no_use_psa
353}
354
355component_test_everest () {
356 msg "build: Everest ECDH context (ASan build)" # ~ 6 min
357 scripts/config.py set MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED
358 CC=clang cmake -D CMAKE_BUILD_TYPE:String=Asan .
359 make
360
361 msg "test: Everest ECDH context - main suites (inc. selftests) (ASan build)" # ~ 50s
362 make test
363
364 msg "test: metatests (clang, ASan)"
365 tests/scripts/run-metatests.sh any asan poison
366
367 msg "test: Everest ECDH context - ECDH-related part of ssl-opt.sh (ASan build)" # ~ 5s
368 tests/ssl-opt.sh -f ECDH
369
370 msg "test: Everest ECDH context - compat.sh with some ECDH ciphersuites (ASan build)" # ~ 3 min
371 # Exclude some symmetric ciphers that are redundant here to gain time.
372 tests/compat.sh -f ECDH -V NO -e 'ARIA\|CAMELLIA\|CHACHA'
373}
374
375component_test_everest_curve25519_only () {
376 msg "build: Everest ECDH context, only Curve25519" # ~ 6 min
377 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG
378 scripts/config.py set MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED
379 scripts/config.py unset MBEDTLS_ECDSA_C
380 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_DETERMINISTIC_ECDSA
381 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_ECDSA
382 scripts/config.py -f $CRYPTO_CONFIG_H set PSA_WANT_ALG_ECDH
383 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED
384 scripts/config.py unset MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
385 scripts/config.py unset MBEDTLS_ECJPAKE_C
386 scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_JPAKE
387
388 # Disable all curves
389 scripts/config.py unset-all "MBEDTLS_ECP_DP_[0-9A-Z_a-z]*_ENABLED"
390 scripts/config.py -f $CRYPTO_CONFIG_H unset-all "PSA_WANT_ECC_[0-9A-Z_a-z]*$"
391 scripts/config.py -f $CRYPTO_CONFIG_H set PSA_WANT_ECC_MONTGOMERY_255
392
393 make CC=$ASAN_CC CFLAGS="$ASAN_CFLAGS" LDFLAGS="$ASAN_CFLAGS"
394
395 msg "test: Everest ECDH context, only Curve25519" # ~ 50s
396 make test
397}
398
399component_test_small_ssl_out_content_len () {
400 msg "build: small SSL_OUT_CONTENT_LEN (ASan build)"
401 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 16384
402 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 4096
403 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
404 make
405
406 msg "test: small SSL_OUT_CONTENT_LEN - ssl-opt.sh MFL and large packet tests"
407 tests/ssl-opt.sh -f "Max fragment\|Large packet"
408}
409
410component_test_small_ssl_in_content_len () {
411 msg "build: small SSL_IN_CONTENT_LEN (ASan build)"
412 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 4096
413 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 16384
414 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
415 make
416
417 msg "test: small SSL_IN_CONTENT_LEN - ssl-opt.sh MFL tests"
418 tests/ssl-opt.sh -f "Max fragment"
419}
420
421component_test_small_ssl_dtls_max_buffering () {
422 msg "build: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #0"
423 scripts/config.py set MBEDTLS_SSL_DTLS_MAX_BUFFERING 1000
424 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
425 make
426
427 msg "test: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #0 - ssl-opt.sh specific reordering test"
428 tests/ssl-opt.sh -f "DTLS reordering: Buffer out-of-order hs msg before reassembling next, free buffered msg"
429}
430
431component_test_small_mbedtls_ssl_dtls_max_buffering () {
432 msg "build: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #1"
433 scripts/config.py set MBEDTLS_SSL_DTLS_MAX_BUFFERING 190
434 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
435 make
436
437 msg "test: small MBEDTLS_SSL_DTLS_MAX_BUFFERING #1 - ssl-opt.sh specific reordering test"
438 tests/ssl-opt.sh -f "DTLS reordering: Buffer encrypted Finished message, drop for fragmented NewSessionTicket"
439}
440
441# Common helper for component_full_without_ecdhe_ecdsa() and
442# component_full_without_ecdhe_ecdsa_and_tls13() which:
443# - starts from the "full" configuration minus the list of symbols passed in
444# as 1st parameter
445# - build
446# - test only TLS (i.e. test_suite_tls and ssl-opt)
447build_full_minus_something_and_test_tls () {
448 symbols_to_disable="$1"
449
450 msg "build: full minus something, test TLS"
451
452 scripts/config.py full
453 for sym in $symbols_to_disable; do
454 echo "Disabling $sym"
455 scripts/config.py unset $sym
456 done
457
458 make
459
460 msg "test: full minus something, test TLS"
461 ( cd tests; ./test_suite_ssl )
462
463 msg "ssl-opt: full minus something, test TLS"
464 tests/ssl-opt.sh
465}
466
467component_full_without_ecdhe_ecdsa () {
468 build_full_minus_something_and_test_tls "MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED"
469}
470
471component_full_without_ecdhe_ecdsa_and_tls13 () {
472 build_full_minus_something_and_test_tls "MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
473 MBEDTLS_SSL_PROTO_TLS1_3"
474}
475
Minos Galanakis7665a932024-07-26 15:45:11 +0100476component_build_no_ssl_srv () {
477 msg "build: full config except SSL server, make, gcc" # ~ 30s
478 scripts/config.py full
479 scripts/config.py unset MBEDTLS_SSL_SRV_C
480 make CC=gcc CFLAGS='-Werror -Wall -Wextra -O1'
481}
482
483component_build_no_ssl_cli () {
484 msg "build: full config except SSL client, make, gcc" # ~ 30s
485 scripts/config.py full
486 scripts/config.py unset MBEDTLS_SSL_CLI_C
487 make CC=gcc CFLAGS='-Werror -Wall -Wextra -O1'
488}
489
490component_test_memory_buffer_allocator_backtrace () {
491 msg "build: default config with memory buffer allocator and backtrace enabled"
492 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C
493 scripts/config.py set MBEDTLS_PLATFORM_MEMORY
494 scripts/config.py set MBEDTLS_MEMORY_BACKTRACE
495 scripts/config.py set MBEDTLS_MEMORY_DEBUG
496 cmake -DCMAKE_BUILD_TYPE:String=Release .
497 make
498
499 msg "test: MBEDTLS_MEMORY_BUFFER_ALLOC_C and MBEDTLS_MEMORY_BACKTRACE"
500 make test
501}
502
503component_test_memory_buffer_allocator () {
504 msg "build: default config with memory buffer allocator"
505 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C
506 scripts/config.py set MBEDTLS_PLATFORM_MEMORY
507 cmake -DCMAKE_BUILD_TYPE:String=Release .
508 make
509
510 msg "test: MBEDTLS_MEMORY_BUFFER_ALLOC_C"
511 make test
512
513 msg "test: ssl-opt.sh, MBEDTLS_MEMORY_BUFFER_ALLOC_C"
514 # MBEDTLS_MEMORY_BUFFER_ALLOC is slow. Skip tests that tend to time out.
515 tests/ssl-opt.sh -e '^DTLS proxy'
516}
517
518component_test_no_max_fragment_length () {
519 # Run max fragment length tests with MFL disabled
520 msg "build: default config except MFL extension (ASan build)" # ~ 30s
521 scripts/config.py unset MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
522 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
523 make
524
525 msg "test: ssl-opt.sh, MFL-related tests"
526 tests/ssl-opt.sh -f "Max fragment length"
527}
528
529component_test_asan_remove_peer_certificate () {
530 msg "build: default config with MBEDTLS_SSL_KEEP_PEER_CERTIFICATE disabled (ASan build)"
531 scripts/config.py unset MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
532 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
533 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
534 make
535
536 msg "test: !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE"
537 make test
538
539 msg "test: ssl-opt.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE"
540 tests/ssl-opt.sh
541
542 msg "test: compat.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE"
543 tests/compat.sh
544
545 msg "test: context-info.sh, !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE"
546 tests/context-info.sh
547}
548
549component_test_no_max_fragment_length_small_ssl_out_content_len () {
550 msg "build: no MFL extension, small SSL_OUT_CONTENT_LEN (ASan build)"
551 scripts/config.py unset MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
552 scripts/config.py set MBEDTLS_SSL_IN_CONTENT_LEN 16384
553 scripts/config.py set MBEDTLS_SSL_OUT_CONTENT_LEN 4096
554 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
555 make
556
557 msg "test: MFL tests (disabled MFL extension case) & large packet tests"
558 tests/ssl-opt.sh -f "Max fragment length\|Large buffer"
559
560 msg "test: context-info.sh (disabled MFL extension case)"
561 tests/context-info.sh
562}
563
564component_test_variable_ssl_in_out_buffer_len () {
565 msg "build: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled (ASan build)"
566 scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
567 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
568 make
569
570 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled"
571 make test
572
573 msg "test: ssl-opt.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled"
574 tests/ssl-opt.sh
575
576 msg "test: compat.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH enabled"
577 tests/compat.sh
578}
579
580component_test_dtls_cid_legacy () {
581 msg "build: MBEDTLS_SSL_DTLS_CONNECTION_ID (legacy) enabled (ASan build)"
582 scripts/config.py set MBEDTLS_SSL_DTLS_CONNECTION_ID_COMPAT 1
583
584 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
585 make
586
587 msg "test: MBEDTLS_SSL_DTLS_CONNECTION_ID (legacy)"
588 make test
589
590 msg "test: ssl-opt.sh, MBEDTLS_SSL_DTLS_CONNECTION_ID (legacy) enabled"
591 tests/ssl-opt.sh
592
593 msg "test: compat.sh, MBEDTLS_SSL_DTLS_CONNECTION_ID (legacy) enabled"
594 tests/compat.sh
595}
596
597component_test_ssl_alloc_buffer_and_mfl () {
598 msg "build: default config with memory buffer allocator and MFL extension"
599 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C
600 scripts/config.py set MBEDTLS_PLATFORM_MEMORY
601 scripts/config.py set MBEDTLS_MEMORY_DEBUG
602 scripts/config.py set MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
603 scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
604 cmake -DCMAKE_BUILD_TYPE:String=Release .
605 make
606
607 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH, MBEDTLS_MEMORY_BUFFER_ALLOC_C, MBEDTLS_MEMORY_DEBUG and MBEDTLS_SSL_MAX_FRAGMENT_LENGTH"
608 make test
609
610 msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH, MBEDTLS_MEMORY_BUFFER_ALLOC_C, MBEDTLS_MEMORY_DEBUG and MBEDTLS_SSL_MAX_FRAGMENT_LENGTH"
611 tests/ssl-opt.sh -f "Handshake memory usage"
612}
613
614component_test_when_no_ciphersuites_have_mac () {
615 msg "build: when no ciphersuites have MAC"
616 scripts/config.py set MBEDTLS_PSA_CRYPTO_CONFIG
617 scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_CBC_NO_PADDING
618 scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_CBC_PKCS7
619 scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_CMAC
620 scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_PBKDF2_AES_CMAC_PRF_128
621
622 scripts/config.py unset MBEDTLS_CIPHER_NULL_CIPHER
623 scripts/config.py unset MBEDTLS_CIPHER_MODE_CBC
624 scripts/config.py unset MBEDTLS_CMAC_C
625
626 make
627
628 msg "test: !MBEDTLS_SSL_SOME_SUITES_USE_MAC"
629 make test
630
631 msg "test ssl-opt.sh: !MBEDTLS_SSL_SOME_SUITES_USE_MAC"
632 tests/ssl-opt.sh -f 'Default\|EtM' -e 'without EtM'
633}
634
635component_test_tls12_only () {
636 msg "build: default config without MBEDTLS_SSL_PROTO_TLS1_3, cmake, gcc, ASan"
637 scripts/config.py unset MBEDTLS_SSL_PROTO_TLS1_3
638 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
639 make
640
641 msg "test: main suites (inc. selftests) (ASan build)"
642 make test
643
644 msg "test: ssl-opt.sh (ASan build)"
645 tests/ssl-opt.sh
646
647 msg "test: compat.sh (ASan build)"
648 tests/compat.sh
649}
650
651component_test_tls13_only () {
652 msg "build: default config without MBEDTLS_SSL_PROTO_TLS1_2"
653 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
654 scripts/config.py set MBEDTLS_SSL_RECORD_SIZE_LIMIT
655 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
656
657 msg "test: TLS 1.3 only, all key exchange modes enabled"
658 make test
659
660 msg "ssl-opt.sh: TLS 1.3 only, all key exchange modes enabled"
661 tests/ssl-opt.sh
662}
663
664component_test_tls13_only_psk () {
665 msg "build: TLS 1.3 only from default, only PSK key exchange mode"
666 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
667 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
668 scripts/config.py unset MBEDTLS_ECDH_C
669 scripts/config.py unset MBEDTLS_DHM_C
670 scripts/config.py unset MBEDTLS_X509_CRT_PARSE_C
671 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
672 scripts/config.py unset MBEDTLS_SSL_SERVER_NAME_INDICATION
673 scripts/config.py unset MBEDTLS_ECDSA_C
674 scripts/config.py unset MBEDTLS_PKCS1_V21
675 scripts/config.py unset MBEDTLS_PKCS7_C
676 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
677 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
678
679 msg "test_suite_ssl: TLS 1.3 only, only PSK key exchange mode enabled"
680 cd tests; ./test_suite_ssl; cd ..
681
682 msg "ssl-opt.sh: TLS 1.3 only, only PSK key exchange mode enabled"
683 tests/ssl-opt.sh
684}
685
686component_test_tls13_only_ephemeral () {
687 msg "build: TLS 1.3 only from default, only ephemeral key exchange mode"
688 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
689 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
690 scripts/config.py unset MBEDTLS_SSL_EARLY_DATA
691 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
692
693 msg "test_suite_ssl: TLS 1.3 only, only ephemeral key exchange mode"
694 cd tests; ./test_suite_ssl; cd ..
695
696 msg "ssl-opt.sh: TLS 1.3 only, only ephemeral key exchange mode"
697 tests/ssl-opt.sh
698}
699
700component_test_tls13_only_ephemeral_ffdh () {
701 msg "build: TLS 1.3 only from default, only ephemeral ffdh key exchange mode"
702 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
703 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
704 scripts/config.py unset MBEDTLS_SSL_EARLY_DATA
705 scripts/config.py unset MBEDTLS_ECDH_C
706
707 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
708
709 msg "test_suite_ssl: TLS 1.3 only, only ephemeral ffdh key exchange mode"
710 cd tests; ./test_suite_ssl; cd ..
711
712 msg "ssl-opt.sh: TLS 1.3 only, only ephemeral ffdh key exchange mode"
713 tests/ssl-opt.sh
714}
715
716component_test_tls13_only_psk_ephemeral () {
717 msg "build: TLS 1.3 only from default, only PSK ephemeral key exchange mode"
718 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
719 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
720 scripts/config.py unset MBEDTLS_X509_CRT_PARSE_C
721 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
722 scripts/config.py unset MBEDTLS_SSL_SERVER_NAME_INDICATION
723 scripts/config.py unset MBEDTLS_ECDSA_C
724 scripts/config.py unset MBEDTLS_PKCS1_V21
725 scripts/config.py unset MBEDTLS_PKCS7_C
726 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
727 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
728
729 msg "test_suite_ssl: TLS 1.3 only, only PSK ephemeral key exchange mode"
730 cd tests; ./test_suite_ssl; cd ..
731
732 msg "ssl-opt.sh: TLS 1.3 only, only PSK ephemeral key exchange mode"
733 tests/ssl-opt.sh
734}
735
736component_test_tls13_only_psk_ephemeral_ffdh () {
737 msg "build: TLS 1.3 only from default, only PSK ephemeral ffdh key exchange mode"
738 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
739 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
740 scripts/config.py unset MBEDTLS_X509_CRT_PARSE_C
741 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
742 scripts/config.py unset MBEDTLS_SSL_SERVER_NAME_INDICATION
743 scripts/config.py unset MBEDTLS_ECDSA_C
744 scripts/config.py unset MBEDTLS_PKCS1_V21
745 scripts/config.py unset MBEDTLS_PKCS7_C
746 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
747 scripts/config.py unset MBEDTLS_ECDH_C
748 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
749
750 msg "test_suite_ssl: TLS 1.3 only, only PSK ephemeral ffdh key exchange mode"
751 cd tests; ./test_suite_ssl; cd ..
752
753 msg "ssl-opt.sh: TLS 1.3 only, only PSK ephemeral ffdh key exchange mode"
754 tests/ssl-opt.sh
755}
756
757component_test_tls13_only_psk_all () {
758 msg "build: TLS 1.3 only from default, without ephemeral key exchange mode"
759 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
760 scripts/config.py unset MBEDTLS_X509_CRT_PARSE_C
761 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
762 scripts/config.py unset MBEDTLS_SSL_SERVER_NAME_INDICATION
763 scripts/config.py unset MBEDTLS_ECDSA_C
764 scripts/config.py unset MBEDTLS_PKCS1_V21
765 scripts/config.py unset MBEDTLS_PKCS7_C
766 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
767 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
768
769 msg "test_suite_ssl: TLS 1.3 only, PSK and PSK ephemeral key exchange modes"
770 cd tests; ./test_suite_ssl; cd ..
771
772 msg "ssl-opt.sh: TLS 1.3 only, PSK and PSK ephemeral key exchange modes"
773 tests/ssl-opt.sh
774}
775
776component_test_tls13_only_ephemeral_all () {
777 msg "build: TLS 1.3 only from default, without PSK key exchange mode"
778 scripts/config.py unset MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
779 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
780 make CFLAGS="'-DMBEDTLS_USER_CONFIG_FILE=\"../tests/configs/tls13-only.h\"'"
781
782 msg "test_suite_ssl: TLS 1.3 only, ephemeral and PSK ephemeral key exchange modes"
783 cd tests; ./test_suite_ssl; cd ..
784
785 msg "ssl-opt.sh: TLS 1.3 only, ephemeral and PSK ephemeral key exchange modes"
786 tests/ssl-opt.sh
787}
788
789component_test_tls13_no_padding () {
790 msg "build: default config plus early data minus padding"
791 scripts/config.py set MBEDTLS_SSL_CID_TLS1_3_PADDING_GRANULARITY 1
792 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
793 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
794 make
795 msg "test: default config plus early data minus padding"
796 make test
797 msg "ssl-opt.sh (TLS 1.3 no padding)"
798 tests/ssl-opt.sh
799}
800
801component_test_tls13_no_compatibility_mode () {
802 msg "build: default config plus early data minus middlebox compatibility mode"
803 scripts/config.py unset MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
804 scripts/config.py set MBEDTLS_SSL_EARLY_DATA
805 CC=$ASAN_CC cmake -D CMAKE_BUILD_TYPE:String=Asan .
806 make
807 msg "test: default config plus early data minus middlebox compatibility mode"
808 make test
809 msg "ssl-opt.sh (TLS 1.3 no compatibility mode)"
810 tests/ssl-opt.sh
811}
812
Minos Galanakisf78447f2024-07-26 20:49:51 +0100813component_test_full_minus_session_tickets () {
Minos Galanakis7665a932024-07-26 15:45:11 +0100814 msg "build: full config without session tickets"
815 scripts/config.py full
816 scripts/config.py unset MBEDTLS_SSL_SESSION_TICKETS
817 scripts/config.py unset MBEDTLS_SSL_EARLY_DATA
818 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
819 make
820 msg "test: full config without session tickets"
821 make test
822 msg "ssl-opt.sh (full config without session tickets)"
823 tests/ssl-opt.sh
824}
825
Minos Galanakis4b6ee642024-08-01 11:20:02 +0100826component_test_depends_py_kex () {
827 msg "test/build: depends.py kex (gcc)"
828 tests/scripts/depends.py kex --unset-use-psa
829}
830
831component_test_depends_py_kex_psa () {
832 msg "test/build: depends.py kex (gcc) with MBEDTLS_USE_PSA_CRYPTO defined"
833 tests/scripts/depends.py kex
834}
835
Minos Galanakis6aab5b72024-07-25 14:24:37 +0100836