blob: 1d698279ce9e1b4cc199da05d2e0e65968805ba5 [file] [log] [blame]
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +01001#!/bin/sh
2
Simon Butcher58eddef2016-05-19 23:43:11 +01003# ssl-opt.sh
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +01004#
Bence Szépkútia2947ac2020-08-19 16:37:36 +02005# Copyright The Mbed TLS Contributors
Bence Szépkútif744bd72020-06-05 13:02:18 +02006# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
7#
8# This file is provided under the Apache License 2.0, or the
9# GNU General Public License v2.0 or later.
10#
11# **********
12# Apache License 2.0:
Bence Szépkúti51b41d52020-05-26 01:54:15 +020013#
14# Licensed under the Apache License, Version 2.0 (the "License"); you may
15# not use this file except in compliance with the License.
16# You may obtain a copy of the License at
17#
18# http://www.apache.org/licenses/LICENSE-2.0
19#
20# Unless required by applicable law or agreed to in writing, software
21# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
22# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23# See the License for the specific language governing permissions and
24# limitations under the License.
25#
Bence Szépkútif744bd72020-06-05 13:02:18 +020026# **********
27#
28# **********
29# GNU General Public License v2.0 or later:
30#
31# This program is free software; you can redistribute it and/or modify
32# it under the terms of the GNU General Public License as published by
33# the Free Software Foundation; either version 2 of the License, or
34# (at your option) any later version.
35#
36# This program is distributed in the hope that it will be useful,
37# but WITHOUT ANY WARRANTY; without even the implied warranty of
38# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39# GNU General Public License for more details.
40#
41# You should have received a copy of the GNU General Public License along
42# with this program; if not, write to the Free Software Foundation, Inc.,
43# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
44#
45# **********
46#
Simon Butcher58eddef2016-05-19 23:43:11 +010047# Purpose
48#
49# Executes tests to prove various TLS/SSL options and extensions.
50#
51# The goal is not to cover every ciphersuite/version, but instead to cover
52# specific options (max fragment length, truncated hmac, etc) or procedures
53# (session resumption from cache or ticket, renego, etc).
54#
55# The tests assume a build with default options, with exceptions expressed
56# with a dependency. The tests focus on functionality and do not consider
57# performance.
58#
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +010059
Manuel Pégourié-Gonnardfccd3252014-02-25 17:14:15 +010060set -u
61
Jaeden Ameroa258ccd2019-07-03 13:51:04 +010062# Limit the size of each log to 10 GiB, in case of failures with this script
63# where it may output seemingly unlimited length error logs.
64ulimit -f 20971520
65
Angus Grattonc4dd0732018-04-11 16:28:39 +100066if cd $( dirname $0 ); then :; else
67 echo "cd $( dirname $0 ) failed" >&2
68 exit 1
69fi
70
Antonin Décimod5f47592019-01-23 15:24:37 +010071# default values, can be overridden by the environment
Manuel Pégourié-Gonnardf7a26902014-02-27 12:25:54 +010072: ${P_SRV:=../programs/ssl/ssl_server2}
73: ${P_CLI:=../programs/ssl/ssl_client2}
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +020074: ${P_PXY:=../programs/test/udp_proxy}
Manuel Pégourié-Gonnard74faf3c2014-03-13 18:47:44 +010075: ${OPENSSL_CMD:=openssl} # OPENSSL would conflict with the build system
Manuel Pégourié-Gonnardbaa7f072014-08-20 20:15:53 +020076: ${GNUTLS_CLI:=gnutls-cli}
77: ${GNUTLS_SERV:=gnutls-serv}
Gilles Peskined50177f2017-05-16 17:53:03 +020078: ${PERL:=perl}
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +010079
Manuel Pégourié-Gonnardfa60f122014-09-26 16:07:29 +020080O_SRV="$OPENSSL_CMD s_server -www -cert data_files/server5.crt -key data_files/server5.key"
Manuel Pégourié-Gonnard74faf3c2014-03-13 18:47:44 +010081O_CLI="echo 'GET / HTTP/1.0' | $OPENSSL_CMD s_client"
Manuel Pégourié-Gonnardbaa7f072014-08-20 20:15:53 +020082G_SRV="$GNUTLS_SERV --x509certfile data_files/server5.crt --x509keyfile data_files/server5.key"
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +010083G_CLI="echo 'GET / HTTP/1.0' | $GNUTLS_CLI --x509cafile data_files/test-ca_cat12.crt"
Gilles Peskined50177f2017-05-16 17:53:03 +020084TCP_CLIENT="$PERL scripts/tcp_client.pl"
Manuel Pégourié-Gonnardfccd3252014-02-25 17:14:15 +010085
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +020086# alternative versions of OpenSSL and GnuTLS (no default path)
87
88if [ -n "${OPENSSL_LEGACY:-}" ]; then
89 O_LEGACY_SRV="$OPENSSL_LEGACY s_server -www -cert data_files/server5.crt -key data_files/server5.key"
90 O_LEGACY_CLI="echo 'GET / HTTP/1.0' | $OPENSSL_LEGACY s_client"
91else
92 O_LEGACY_SRV=false
93 O_LEGACY_CLI=false
94fi
95
Paul Elliott19f1f782021-10-13 18:31:07 +010096if [ -n "${OPENSSL_NEXT:-}" ]; then
97 O_NEXT_SRV="$OPENSSL_NEXT s_server -www -cert data_files/server5.crt -key data_files/server5.key"
98 O_NEXT_CLI="echo 'GET / HTTP/1.0' | $OPENSSL_NEXT s_client"
99else
100 O_NEXT_SRV=false
101 O_NEXT_CLI=false
102fi
103
Hanno Becker58e9dc32018-08-17 15:53:21 +0100104if [ -n "${GNUTLS_NEXT_SERV:-}" ]; then
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +0200105 G_NEXT_SRV="$GNUTLS_NEXT_SERV --x509certfile data_files/server5.crt --x509keyfile data_files/server5.key"
106else
107 G_NEXT_SRV=false
108fi
109
Hanno Becker58e9dc32018-08-17 15:53:21 +0100110if [ -n "${GNUTLS_NEXT_CLI:-}" ]; then
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +0200111 G_NEXT_CLI="echo 'GET / HTTP/1.0' | $GNUTLS_NEXT_CLI --x509cafile data_files/test-ca_cat12.crt"
112else
113 G_NEXT_CLI=false
114fi
115
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +0100116TESTS=0
117FAILS=0
Manuel Pégourié-Gonnard6f4fbbb2014-08-14 14:31:29 +0200118SKIPS=0
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +0100119
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +0000120CONFIG_H='../include/mbedtls/config.h'
Manuel Pégourié-Gonnard83d8c732014-04-07 13:24:21 +0200121
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100122MEMCHECK=0
Manuel Pégourié-Gonnard417d46c2014-03-13 19:17:53 +0100123FILTER='.*'
Manuel Pégourié-Gonnard6f4fbbb2014-08-14 14:31:29 +0200124EXCLUDE='^$'
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100125
Paul Bakkere20310a2016-05-10 11:18:17 +0100126SHOW_TEST_NUMBER=0
Paul Bakkerb7584a52016-05-10 10:50:43 +0100127RUN_TEST_NUMBER=''
128
Paul Bakkeracaac852016-05-10 11:47:13 +0100129PRESERVE_LOGS=0
130
Gilles Peskinef93c7d32017-04-14 17:55:28 +0200131# Pick a "unique" server port in the range 10000-19999, and a proxy
132# port which is this plus 10000. Each port number may be independently
133# overridden by a command line option.
134SRV_PORT=$(($$ % 10000 + 10000))
135PXY_PORT=$((SRV_PORT + 10000))
136
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100137print_usage() {
138 echo "Usage: $0 [options]"
Manuel Pégourié-Gonnardf46f1282014-12-11 11:51:28 +0100139 printf " -h|--help\tPrint this help.\n"
140 printf " -m|--memcheck\tCheck memory leaks and errors.\n"
Gilles Peskineb7bb068b2020-08-26 22:35:46 +0200141 printf " -f|--filter\tOnly matching tests are executed (substring or BRE)\n"
142 printf " -e|--exclude\tMatching tests are excluded (substring or BRE)\n"
Paul Bakkerb7584a52016-05-10 10:50:43 +0100143 printf " -n|--number\tExecute only numbered test (comma-separated, e.g. '245,256')\n"
Paul Bakkere20310a2016-05-10 11:18:17 +0100144 printf " -s|--show-numbers\tShow test numbers in front of test names\n"
Paul Bakkeracaac852016-05-10 11:47:13 +0100145 printf " -p|--preserve-logs\tPreserve logs of successful tests as well\n"
Gilles Peskinef93c7d32017-04-14 17:55:28 +0200146 printf " --port\tTCP/UDP port (default: randomish 1xxxx)\n"
147 printf " --proxy-port\tTCP/UDP proxy port (default: randomish 2xxxx)\n"
Andres AGf04f54d2016-10-10 15:46:20 +0100148 printf " --seed\tInteger seed value to use for this test run\n"
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100149}
150
151get_options() {
152 while [ $# -gt 0 ]; do
153 case "$1" in
Manuel Pégourié-Gonnard417d46c2014-03-13 19:17:53 +0100154 -f|--filter)
155 shift; FILTER=$1
156 ;;
157 -e|--exclude)
158 shift; EXCLUDE=$1
159 ;;
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100160 -m|--memcheck)
161 MEMCHECK=1
162 ;;
Paul Bakkerb7584a52016-05-10 10:50:43 +0100163 -n|--number)
164 shift; RUN_TEST_NUMBER=$1
165 ;;
Paul Bakkere20310a2016-05-10 11:18:17 +0100166 -s|--show-numbers)
167 SHOW_TEST_NUMBER=1
168 ;;
Paul Bakkeracaac852016-05-10 11:47:13 +0100169 -p|--preserve-logs)
170 PRESERVE_LOGS=1
171 ;;
Gilles Peskinef93c7d32017-04-14 17:55:28 +0200172 --port)
173 shift; SRV_PORT=$1
174 ;;
175 --proxy-port)
176 shift; PXY_PORT=$1
177 ;;
Andres AGf04f54d2016-10-10 15:46:20 +0100178 --seed)
179 shift; SEED="$1"
180 ;;
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100181 -h|--help)
182 print_usage
183 exit 0
184 ;;
185 *)
Paul Bakker1ebc0c52014-05-22 15:47:58 +0200186 echo "Unknown argument: '$1'"
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100187 print_usage
188 exit 1
189 ;;
190 esac
191 shift
192 done
193}
194
Gilles Peskine5bf15b62020-08-26 21:53:33 +0200195# Read boolean configuration options from config.h for easy and quick
196# testing. Skip non-boolean options (with something other than spaces
197# and a comment after "#define SYMBOL"). The variable contains a
198# space-separated list of symbols.
199CONFIGS_ENABLED=" $(<"$CONFIG_H" \
200 sed -n 's!^ *#define *\([A-Za-z][0-9A-Z_a-z]*\) *\(/*\)*!\1!p' |
201 tr '\n' ' ')"
202
Hanno Becker3b8b40c2018-08-28 10:25:41 +0100203# Skip next test; use this macro to skip tests which are legitimate
204# in theory and expected to be re-introduced at some point, but
205# aren't expected to succeed at the moment due to problems outside
206# our control (such as bugs in other TLS implementations).
207skip_next_test() {
208 SKIP_NEXT="YES"
209}
210
Manuel Pégourié-Gonnard988209f2015-03-24 10:43:55 +0100211# skip next test if the flag is not enabled in config.h
212requires_config_enabled() {
Gilles Peskine5bf15b62020-08-26 21:53:33 +0200213 case $CONFIGS_ENABLED in
214 *" $1 "*) :;;
215 *) SKIP_NEXT="YES";;
216 esac
Manuel Pégourié-Gonnard988209f2015-03-24 10:43:55 +0100217}
218
Manuel Pégourié-Gonnardaf63c212017-06-08 17:51:08 +0200219# skip next test if the flag is enabled in config.h
220requires_config_disabled() {
Gilles Peskine5bf15b62020-08-26 21:53:33 +0200221 case $CONFIGS_ENABLED in
222 *" $1 "*) SKIP_NEXT="YES";;
223 esac
Manuel Pégourié-Gonnardaf63c212017-06-08 17:51:08 +0200224}
225
Hanno Becker7c48dd12018-08-28 16:09:22 +0100226get_config_value_or_default() {
Andres Amaya Garcia06446782018-10-16 21:29:07 +0100227 # This function uses the query_config command line option to query the
228 # required Mbed TLS compile time configuration from the ssl_server2
229 # program. The command will always return a success value if the
230 # configuration is defined and the value will be printed to stdout.
231 #
232 # Note that if the configuration is not defined or is defined to nothing,
233 # the output of this function will be an empty string.
234 ${P_SRV} "query_config=${1}"
Hanno Becker7c48dd12018-08-28 16:09:22 +0100235}
236
237requires_config_value_at_least() {
Andres Amaya Garcia06446782018-10-16 21:29:07 +0100238 VAL="$( get_config_value_or_default "$1" )"
239 if [ -z "$VAL" ]; then
240 # Should never happen
241 echo "Mbed TLS configuration $1 is not defined"
242 exit 1
243 elif [ "$VAL" -lt "$2" ]; then
Hanno Becker5cd017f2018-08-24 14:40:12 +0100244 SKIP_NEXT="YES"
245 fi
246}
247
248requires_config_value_at_most() {
Hanno Becker7c48dd12018-08-28 16:09:22 +0100249 VAL=$( get_config_value_or_default "$1" )
Andres Amaya Garcia06446782018-10-16 21:29:07 +0100250 if [ -z "$VAL" ]; then
251 # Should never happen
252 echo "Mbed TLS configuration $1 is not defined"
253 exit 1
254 elif [ "$VAL" -gt "$2" ]; then
Hanno Becker5cd017f2018-08-24 14:40:12 +0100255 SKIP_NEXT="YES"
256 fi
257}
258
Yuto Takanobc632c22021-07-02 13:10:41 +0100259requires_config_value_equals() {
260 VAL=$( get_config_value_or_default "$1" )
261 if [ -z "$VAL" ]; then
262 # Should never happen
263 echo "Mbed TLS configuration $1 is not defined"
264 exit 1
265 elif [ "$VAL" -ne "$2" ]; then
266 SKIP_NEXT="YES"
267 fi
268}
269
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +0200270# skip next test if OpenSSL doesn't support FALLBACK_SCSV
271requires_openssl_with_fallback_scsv() {
272 if [ -z "${OPENSSL_HAS_FBSCSV:-}" ]; then
273 if $OPENSSL_CMD s_client -help 2>&1 | grep fallback_scsv >/dev/null
274 then
275 OPENSSL_HAS_FBSCSV="YES"
276 else
277 OPENSSL_HAS_FBSCSV="NO"
278 fi
279 fi
280 if [ "$OPENSSL_HAS_FBSCSV" = "NO" ]; then
281 SKIP_NEXT="YES"
282 fi
283}
284
Yuto Takano0807e1d2021-07-02 10:10:49 +0100285# skip next test if either IN_CONTENT_LEN or MAX_CONTENT_LEN are below a value
286requires_max_content_len() {
287 requires_config_value_at_least "MBEDTLS_SSL_IN_CONTENT_LEN" $1
288 requires_config_value_at_least "MBEDTLS_SSL_OUT_CONTENT_LEN" $1
289}
290
Manuel Pégourié-Gonnardbaa7f072014-08-20 20:15:53 +0200291# skip next test if GnuTLS isn't available
292requires_gnutls() {
293 if [ -z "${GNUTLS_AVAILABLE:-}" ]; then
Manuel Pégourié-Gonnard03db6b02015-06-26 15:45:30 +0200294 if ( which "$GNUTLS_CLI" && which "$GNUTLS_SERV" ) >/dev/null 2>&1; then
Manuel Pégourié-Gonnardbaa7f072014-08-20 20:15:53 +0200295 GNUTLS_AVAILABLE="YES"
296 else
297 GNUTLS_AVAILABLE="NO"
298 fi
299 fi
300 if [ "$GNUTLS_AVAILABLE" = "NO" ]; then
301 SKIP_NEXT="YES"
302 fi
303}
304
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +0200305# skip next test if GnuTLS-next isn't available
306requires_gnutls_next() {
307 if [ -z "${GNUTLS_NEXT_AVAILABLE:-}" ]; then
308 if ( which "${GNUTLS_NEXT_CLI:-}" && which "${GNUTLS_NEXT_SERV:-}" ) >/dev/null 2>&1; then
309 GNUTLS_NEXT_AVAILABLE="YES"
310 else
311 GNUTLS_NEXT_AVAILABLE="NO"
312 fi
313 fi
314 if [ "$GNUTLS_NEXT_AVAILABLE" = "NO" ]; then
315 SKIP_NEXT="YES"
316 fi
317}
318
319# skip next test if OpenSSL-legacy isn't available
320requires_openssl_legacy() {
321 if [ -z "${OPENSSL_LEGACY_AVAILABLE:-}" ]; then
322 if which "${OPENSSL_LEGACY:-}" >/dev/null 2>&1; then
323 OPENSSL_LEGACY_AVAILABLE="YES"
324 else
325 OPENSSL_LEGACY_AVAILABLE="NO"
326 fi
327 fi
328 if [ "$OPENSSL_LEGACY_AVAILABLE" = "NO" ]; then
329 SKIP_NEXT="YES"
330 fi
331}
332
Paul Elliott19f1f782021-10-13 18:31:07 +0100333requires_openssl_next() {
334 if [ -z "${OPENSSL_NEXT_AVAILABLE:-}" ]; then
335 if which "${OPENSSL_NEXT:-}" >/dev/null 2>&1; then
336 OPENSSL_NEXT_AVAILABLE="YES"
337 else
338 OPENSSL_NEXT_AVAILABLE="NO"
339 fi
340 fi
341 if [ "$OPENSSL_NEXT_AVAILABLE" = "NO" ]; then
342 SKIP_NEXT="YES"
343 fi
344}
345
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +0200346# skip next test if IPv6 isn't available on this host
347requires_ipv6() {
348 if [ -z "${HAS_IPV6:-}" ]; then
349 $P_SRV server_addr='::1' > $SRV_OUT 2>&1 &
350 SRV_PID=$!
351 sleep 1
352 kill $SRV_PID >/dev/null 2>&1
353 if grep "NET - Binding of the socket failed" $SRV_OUT >/dev/null; then
354 HAS_IPV6="NO"
355 else
356 HAS_IPV6="YES"
357 fi
358 rm -r $SRV_OUT
359 fi
360
361 if [ "$HAS_IPV6" = "NO" ]; then
362 SKIP_NEXT="YES"
363 fi
364}
365
Andrzej Kurekb4593462018-10-11 08:43:30 -0400366# skip next test if it's i686 or uname is not available
367requires_not_i686() {
368 if [ -z "${IS_I686:-}" ]; then
369 IS_I686="YES"
370 if which "uname" >/dev/null 2>&1; then
371 if [ -z "$(uname -a | grep i686)" ]; then
372 IS_I686="NO"
373 fi
374 fi
375 fi
376 if [ "$IS_I686" = "YES" ]; then
377 SKIP_NEXT="YES"
378 fi
379}
380
Angus Grattonc4dd0732018-04-11 16:28:39 +1000381# Calculate the input & output maximum content lengths set in the config
Yuto Takanobbf657a2021-06-22 07:16:40 +0100382MAX_CONTENT_LEN=$( get_config_value_or_default "MBEDTLS_SSL_MAX_CONTENT_LEN" )
383MAX_IN_LEN=$( get_config_value_or_default "MBEDTLS_SSL_IN_CONTENT_LEN" )
384MAX_OUT_LEN=$( get_config_value_or_default "MBEDTLS_SSL_OUT_CONTENT_LEN" )
Angus Grattonc4dd0732018-04-11 16:28:39 +1000385
Yuto Takano2e580ce2021-06-21 19:43:33 +0100386# Calculate the maximum content length that fits both
Angus Grattonc4dd0732018-04-11 16:28:39 +1000387if [ "$MAX_IN_LEN" -lt "$MAX_CONTENT_LEN" ]; then
388 MAX_CONTENT_LEN="$MAX_IN_LEN"
389fi
390if [ "$MAX_OUT_LEN" -lt "$MAX_CONTENT_LEN" ]; then
391 MAX_CONTENT_LEN="$MAX_OUT_LEN"
392fi
393
394# skip the next test if the SSL output buffer is less than 16KB
395requires_full_size_output_buffer() {
396 if [ "$MAX_OUT_LEN" -ne 16384 ]; then
397 SKIP_NEXT="YES"
398 fi
399}
400
Manuel Pégourié-Gonnard76fe9e42014-09-24 15:17:31 +0200401# skip the next test if valgrind is in use
402not_with_valgrind() {
403 if [ "$MEMCHECK" -gt 0 ]; then
404 SKIP_NEXT="YES"
405 fi
406}
407
Paul Bakker362689d2016-05-13 10:33:25 +0100408# skip the next test if valgrind is NOT in use
409only_with_valgrind() {
410 if [ "$MEMCHECK" -eq 0 ]; then
411 SKIP_NEXT="YES"
412 fi
413}
414
Manuel Pégourié-Gonnarda0719722014-09-20 12:46:27 +0200415# multiply the client timeout delay by the given factor for the next test
Janos Follath74537a62016-09-02 13:45:28 +0100416client_needs_more_time() {
Manuel Pégourié-Gonnarda0719722014-09-20 12:46:27 +0200417 CLI_DELAY_FACTOR=$1
418}
419
Janos Follath74537a62016-09-02 13:45:28 +0100420# wait for the given seconds after the client finished in the next test
421server_needs_more_time() {
422 SRV_DELAY_SECONDS=$1
423}
424
Manuel Pégourié-Gonnardf8bdbb52014-02-21 09:20:14 +0100425# print_name <name>
426print_name() {
Paul Bakkere20310a2016-05-10 11:18:17 +0100427 TESTS=$(( $TESTS + 1 ))
428 LINE=""
429
430 if [ "$SHOW_TEST_NUMBER" -gt 0 ]; then
431 LINE="$TESTS "
432 fi
433
434 LINE="$LINE$1"
Gilles Peskineffdcadf2020-08-26 20:05:11 +0200435 printf "%s " "$LINE"
Paul Bakkere20310a2016-05-10 11:18:17 +0100436 LEN=$(( 72 - `echo "$LINE" | wc -c` ))
Manuel Pégourié-Gonnardf46f1282014-12-11 11:51:28 +0100437 for i in `seq 1 $LEN`; do printf '.'; done
438 printf ' '
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +0100439
Manuel Pégourié-Gonnardf8bdbb52014-02-21 09:20:14 +0100440}
441
Gilles Peskine87b036f2021-10-21 11:11:51 +0200442# Trivial function for compatibility with later Mbed TLS versions
443record_outcome() {
444 echo "$1"
445}
446
Manuel Pégourié-Gonnardf8bdbb52014-02-21 09:20:14 +0100447# fail <message>
448fail() {
Gilles Peskine87b036f2021-10-21 11:11:51 +0200449 record_outcome "FAIL" "$1"
Manuel Pégourié-Gonnard3eec6042014-02-27 15:37:24 +0100450 echo " ! $1"
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +0100451
Manuel Pégourié-Gonnardc2b00922014-08-31 16:46:04 +0200452 mv $SRV_OUT o-srv-${TESTS}.log
453 mv $CLI_OUT o-cli-${TESTS}.log
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +0200454 if [ -n "$PXY_CMD" ]; then
455 mv $PXY_OUT o-pxy-${TESTS}.log
456 fi
457 echo " ! outputs saved to o-XXX-${TESTS}.log"
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +0100458
Manuel Pégourié-Gonnarde63fc6d2020-06-08 11:49:05 +0200459 if [ "${LOG_FAILURE_ON_STDOUT:-0}" != 0 ]; then
Manuel Pégourié-Gonnard7fa67722014-08-31 17:42:53 +0200460 echo " ! server output:"
461 cat o-srv-${TESTS}.log
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +0200462 echo " ! ========================================================"
Manuel Pégourié-Gonnard7fa67722014-08-31 17:42:53 +0200463 echo " ! client output:"
464 cat o-cli-${TESTS}.log
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +0200465 if [ -n "$PXY_CMD" ]; then
466 echo " ! ========================================================"
467 echo " ! proxy output:"
468 cat o-pxy-${TESTS}.log
469 fi
470 echo ""
Manuel Pégourié-Gonnard7fa67722014-08-31 17:42:53 +0200471 fi
472
Manuel Pégourié-Gonnard72e51ee2014-08-31 10:22:11 +0200473 FAILS=$(( $FAILS + 1 ))
Manuel Pégourié-Gonnardf8bdbb52014-02-21 09:20:14 +0100474}
475
Manuel Pégourié-Gonnard677884d2014-02-25 16:42:31 +0100476# is_polar <cmd_line>
477is_polar() {
Gilles Peskine5bf15b62020-08-26 21:53:33 +0200478 case "$1" in
479 *ssl_client2*) true;;
480 *ssl_server2*) true;;
481 *) false;;
482 esac
Manuel Pégourié-Gonnard677884d2014-02-25 16:42:31 +0100483}
484
Manuel Pégourié-Gonnardfa60f122014-09-26 16:07:29 +0200485# openssl s_server doesn't have -www with DTLS
486check_osrv_dtls() {
Gilles Peskine5bf15b62020-08-26 21:53:33 +0200487 case "$SRV_CMD" in
488 *s_server*-dtls*)
489 NEEDS_INPUT=1
490 SRV_CMD="$( echo $SRV_CMD | sed s/-www// )";;
491 *) NEEDS_INPUT=0;;
492 esac
Manuel Pégourié-Gonnardfa60f122014-09-26 16:07:29 +0200493}
494
495# provide input to commands that need it
496provide_input() {
497 if [ $NEEDS_INPUT -eq 0 ]; then
498 return
499 fi
500
501 while true; do
502 echo "HTTP/1.0 200 OK"
503 sleep 1
504 done
505}
506
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100507# has_mem_err <log_file_name>
508has_mem_err() {
509 if ( grep -F 'All heap blocks were freed -- no leaks are possible' "$1" &&
510 grep -F 'ERROR SUMMARY: 0 errors from 0 contexts' "$1" ) > /dev/null
511 then
512 return 1 # false: does not have errors
513 else
514 return 0 # true: has errors
515 fi
516}
517
Unknown43dc0d62019-09-02 10:42:57 -0400518# Wait for process $2 named $3 to be listening on port $1. Print error to $4.
Gilles Peskine418b5362017-12-14 18:58:42 +0100519if type lsof >/dev/null 2>/dev/null; then
Unknown43dc0d62019-09-02 10:42:57 -0400520 wait_app_start() {
Gilles Peskine418b5362017-12-14 18:58:42 +0100521 START_TIME=$(date +%s)
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +0200522 if [ "$DTLS" -eq 1 ]; then
Gilles Peskine418b5362017-12-14 18:58:42 +0100523 proto=UDP
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +0200524 else
Gilles Peskine418b5362017-12-14 18:58:42 +0100525 proto=TCP
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +0200526 fi
Gilles Peskine418b5362017-12-14 18:58:42 +0100527 # Make a tight loop, server normally takes less than 1s to start.
528 while ! lsof -a -n -b -i "$proto:$1" -p "$2" >/dev/null 2>/dev/null; do
529 if [ $(( $(date +%s) - $START_TIME )) -gt $DOG_DELAY ]; then
Unknown43dc0d62019-09-02 10:42:57 -0400530 echo "$3 START TIMEOUT"
531 echo "$3 START TIMEOUT" >> $4
Gilles Peskine418b5362017-12-14 18:58:42 +0100532 break
533 fi
534 # Linux and *BSD support decimal arguments to sleep. On other
535 # OSes this may be a tight loop.
536 sleep 0.1 2>/dev/null || true
537 done
538 }
539else
Unknown43dc0d62019-09-02 10:42:57 -0400540 echo "Warning: lsof not available, wait_app_start = sleep"
541 wait_app_start() {
Manuel Pégourié-Gonnard0c1ec472014-06-20 18:41:11 +0200542 sleep "$START_DELAY"
Gilles Peskine418b5362017-12-14 18:58:42 +0100543 }
544fi
Manuel Pégourié-Gonnard0c1ec472014-06-20 18:41:11 +0200545
Unknown43dc0d62019-09-02 10:42:57 -0400546# Wait for server process $2 to be listening on port $1.
547wait_server_start() {
548 wait_app_start $1 $2 "SERVER" $SRV_OUT
549}
550
551# Wait for proxy process $2 to be listening on port $1.
552wait_proxy_start() {
553 wait_app_start $1 $2 "PROXY" $PXY_OUT
554}
555
Andres Amaya Garciab84c40b2017-09-06 15:44:01 +0100556# Given the client or server debug output, parse the unix timestamp that is
Andres Amaya Garcia3b1bdff2017-09-14 12:41:29 +0100557# included in the first 4 bytes of the random bytes and check that it's within
Andres Amaya Garciab84c40b2017-09-06 15:44:01 +0100558# acceptable bounds
559check_server_hello_time() {
560 # Extract the time from the debug (lvl 3) output of the client
Andres Amaya Garcia67d8da52017-09-15 15:49:24 +0100561 SERVER_HELLO_TIME="$(sed -n 's/.*server hello, current time: //p' < "$1")"
Andres Amaya Garciab84c40b2017-09-06 15:44:01 +0100562 # Get the Unix timestamp for now
563 CUR_TIME=$(date +'%s')
564 THRESHOLD_IN_SECS=300
565
566 # Check if the ServerHello time was printed
567 if [ -z "$SERVER_HELLO_TIME" ]; then
568 return 1
569 fi
570
571 # Check the time in ServerHello is within acceptable bounds
572 if [ $SERVER_HELLO_TIME -lt $(( $CUR_TIME - $THRESHOLD_IN_SECS )) ]; then
573 # The time in ServerHello is at least 5 minutes before now
574 return 1
575 elif [ $SERVER_HELLO_TIME -gt $(( $CUR_TIME + $THRESHOLD_IN_SECS )) ]; then
Andres Amaya Garcia3b1bdff2017-09-14 12:41:29 +0100576 # The time in ServerHello is at least 5 minutes later than now
Andres Amaya Garciab84c40b2017-09-06 15:44:01 +0100577 return 1
578 else
579 return 0
580 fi
581}
582
Manuel Pégourié-Gonnardc0f6a692014-08-30 22:41:47 +0200583# wait for client to terminate and set CLI_EXIT
584# must be called right after starting the client
585wait_client_done() {
586 CLI_PID=$!
587
Manuel Pégourié-Gonnarda0719722014-09-20 12:46:27 +0200588 CLI_DELAY=$(( $DOG_DELAY * $CLI_DELAY_FACTOR ))
589 CLI_DELAY_FACTOR=1
590
Manuel Pégourié-Gonnarda365add2015-08-04 20:57:59 +0200591 ( sleep $CLI_DELAY; echo "===CLIENT_TIMEOUT===" >> $CLI_OUT; kill $CLI_PID ) &
Manuel Pégourié-Gonnarda6189f02014-09-20 13:15:43 +0200592 DOG_PID=$!
Manuel Pégourié-Gonnardc0f6a692014-08-30 22:41:47 +0200593
594 wait $CLI_PID
595 CLI_EXIT=$?
596
Manuel Pégourié-Gonnarda6189f02014-09-20 13:15:43 +0200597 kill $DOG_PID >/dev/null 2>&1
598 wait $DOG_PID
Manuel Pégourié-Gonnardc0f6a692014-08-30 22:41:47 +0200599
600 echo "EXIT: $CLI_EXIT" >> $CLI_OUT
Janos Follath74537a62016-09-02 13:45:28 +0100601
602 sleep $SRV_DELAY_SECONDS
603 SRV_DELAY_SECONDS=0
Manuel Pégourié-Gonnardc0f6a692014-08-30 22:41:47 +0200604}
605
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +0200606# check if the given command uses dtls and sets global variable DTLS
607detect_dtls() {
Gilles Peskine5bf15b62020-08-26 21:53:33 +0200608 case "$1" in
Paul Elliott316a6aa2021-10-12 16:02:55 +0100609 *dtls=1*|*-dtls*|*-u*) DTLS=1;;
Gilles Peskine5bf15b62020-08-26 21:53:33 +0200610 *) DTLS=0;;
611 esac
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +0200612}
613
Gilles Peskine342147a2021-10-19 16:25:10 +0200614# Analyze the commands that will be used in a test.
615#
616# Analyze and possibly instrument $PXY_CMD, $CLI_CMD, $SRV_CMD to pass
617# extra arguments or go through wrappers.
618# Set $DTLS (0=TLS, 1=DTLS).
619analyze_test_commands() {
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +0200620 # update DTLS variable
621 detect_dtls "$SRV_CMD"
622
Manuel Pégourié-Gonnardfcf6c162020-06-08 11:40:06 +0200623 # if the test uses DTLS but no custom proxy, add a simple proxy
624 # as it provides timing info that's useful to debug failures
Manuel Pégourié-Gonnard581af9f2020-06-25 09:54:46 +0200625 if [ -z "$PXY_CMD" ] && [ "$DTLS" -eq 1 ]; then
Manuel Pégourié-Gonnardfcf6c162020-06-08 11:40:06 +0200626 PXY_CMD="$P_PXY"
Manuel Pégourié-Gonnard7442f842020-07-16 10:19:32 +0200627 case " $SRV_CMD " in
628 *' server_addr=::1 '*)
629 PXY_CMD="$PXY_CMD server_addr=::1 listen_addr=::1";;
630 esac
Manuel Pégourié-Gonnardfcf6c162020-06-08 11:40:06 +0200631 fi
632
Manuel Pégourié-Gonnardbedcb3e2020-06-25 09:52:54 +0200633 # fix client port
634 if [ -n "$PXY_CMD" ]; then
635 CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$PXY_PORT/g )
636 else
637 CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$SRV_PORT/g )
638 fi
639
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100640 # prepend valgrind to our commands if active
641 if [ "$MEMCHECK" -gt 0 ]; then
642 if is_polar "$SRV_CMD"; then
643 SRV_CMD="valgrind --leak-check=full $SRV_CMD"
644 fi
645 if is_polar "$CLI_CMD"; then
646 CLI_CMD="valgrind --leak-check=full $CLI_CMD"
647 fi
648 fi
Gilles Peskine342147a2021-10-19 16:25:10 +0200649}
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100650
Gilles Peskine342147a2021-10-19 16:25:10 +0200651# Check for failure conditions after a test case.
652#
653# Inputs from run_test:
654# * positional parameters: test options (see run_test documentation)
655# * $CLI_EXIT: client return code
656# * $CLI_EXPECT: expected client return code
657# * $SRV_RET: server return code
658# * $CLI_OUT, $SRV_OUT, $PXY_OUT: files containing client/server/proxy logs
Gilles Peskinee31a9ea2021-10-19 17:23:25 +0200659# * $TIMES_LEFT: if nonzero, a RETRY outcome is allowed
Gilles Peskine342147a2021-10-19 16:25:10 +0200660#
661# Outputs:
Gilles Peskine83890252021-10-19 18:00:10 +0200662# * $outcome: one of PASS/RETRY*/FAIL
Gilles Peskine342147a2021-10-19 16:25:10 +0200663check_test_failure() {
Gilles Peskinee31a9ea2021-10-19 17:23:25 +0200664 outcome=FAIL
665
666 if [ $TIMES_LEFT -gt 0 ] &&
667 grep '===CLIENT_TIMEOUT===' $CLI_OUT >/dev/null
668 then
Gilles Peskine83890252021-10-19 18:00:10 +0200669 outcome="RETRY(client-timeout)"
Gilles Peskinee31a9ea2021-10-19 17:23:25 +0200670 return
671 fi
Manuel Pégourié-Gonnarda365add2015-08-04 20:57:59 +0200672
Manuel Pégourié-Gonnard677884d2014-02-25 16:42:31 +0100673 # check if the client and server went at least to the handshake stage
Paul Bakker1ebc0c52014-05-22 15:47:58 +0200674 # (useful to avoid tests with only negative assertions and non-zero
Manuel Pégourié-Gonnard677884d2014-02-25 16:42:31 +0100675 # expected client exit to incorrectly succeed in case of catastrophic
676 # failure)
Manuel Pégourié-Gonnardfccd3252014-02-25 17:14:15 +0100677 if is_polar "$SRV_CMD"; then
Manuel Pégourié-Gonnardbc3b16c2014-05-28 23:06:50 +0200678 if grep "Performing the SSL/TLS handshake" $SRV_OUT >/dev/null; then :;
Manuel Pégourié-Gonnard677884d2014-02-25 16:42:31 +0100679 else
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +0100680 fail "server or client failed to reach handshake stage"
Manuel Pégourié-Gonnard677884d2014-02-25 16:42:31 +0100681 return
682 fi
683 fi
Manuel Pégourié-Gonnardfccd3252014-02-25 17:14:15 +0100684 if is_polar "$CLI_CMD"; then
Manuel Pégourié-Gonnardbc3b16c2014-05-28 23:06:50 +0200685 if grep "Performing the SSL/TLS handshake" $CLI_OUT >/dev/null; then :;
Manuel Pégourié-Gonnard677884d2014-02-25 16:42:31 +0100686 else
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +0100687 fail "server or client failed to reach handshake stage"
Manuel Pégourié-Gonnard677884d2014-02-25 16:42:31 +0100688 return
689 fi
690 fi
691
Gilles Peskine2cf44b62021-02-09 21:01:33 +0100692 # Check server exit code (only for Mbed TLS: GnuTLS and OpenSSL don't
693 # exit with status 0 when interrupted by a signal, and we don't really
694 # care anyway), in case e.g. the server reports a memory leak.
695 if [ $SRV_RET != 0 ] && is_polar "$SRV_CMD"; then
Gilles Peskine634fe272021-02-02 23:29:03 +0100696 fail "Server exited with status $SRV_RET"
Manuel Pégourié-Gonnardf8bdbb52014-02-21 09:20:14 +0100697 return
698 fi
699
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100700 # check client exit code
Manuel Pégourié-Gonnardfccd3252014-02-25 17:14:15 +0100701 if [ \( "$CLI_EXPECT" = 0 -a "$CLI_EXIT" != 0 \) -o \
702 \( "$CLI_EXPECT" != 0 -a "$CLI_EXIT" = 0 \) ]
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +0100703 then
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +0200704 fail "bad client exit code (expected $CLI_EXPECT, got $CLI_EXIT)"
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100705 return
706 fi
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100707
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100708 # check other assertions
Manuel Pégourié-Gonnard480905d2014-08-21 19:38:32 +0200709 # lines beginning with == are added by valgrind, ignore them
Paul Bakker1f650922016-05-13 10:16:46 +0100710 # lines with 'Serious error when reading debug info', are valgrind issues as well
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100711 while [ $# -gt 0 ]
712 do
713 case $1 in
714 "-s")
Paul Bakker1f650922016-05-13 10:16:46 +0100715 if grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then :; else
Simon Butcher8e004102016-10-14 00:48:33 +0100716 fail "pattern '$2' MUST be present in the Server output"
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100717 return
718 fi
719 ;;
720
721 "-c")
Paul Bakker1f650922016-05-13 10:16:46 +0100722 if grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then :; else
Simon Butcher8e004102016-10-14 00:48:33 +0100723 fail "pattern '$2' MUST be present in the Client output"
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100724 return
725 fi
726 ;;
727
728 "-S")
Paul Bakker1f650922016-05-13 10:16:46 +0100729 if grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then
Gilles Peskine83890252021-10-19 18:00:10 +0200730 if [ "$2" = "resend" ] && [ $TIMES_LEFT -gt 0 ]; then
731 outcome="RETRY(resend)"
732 else
733 fail "pattern '$2' MUST NOT be present in the Server output"
734 fi
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100735 return
736 fi
737 ;;
738
739 "-C")
Paul Bakker1f650922016-05-13 10:16:46 +0100740 if grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then
Gilles Peskine83890252021-10-19 18:00:10 +0200741 if [ "$2" = "resend" ] && [ $TIMES_LEFT -gt 0 ]; then
742 outcome="RETRY(resend)"
743 else
744 fail "pattern '$2' MUST NOT be present in the Client output"
745 fi
Simon Butcher8e004102016-10-14 00:48:33 +0100746 return
747 fi
748 ;;
749
750 # The filtering in the following two options (-u and -U) do the following
751 # - ignore valgrind output
Antonin Décimod5f47592019-01-23 15:24:37 +0100752 # - filter out everything but lines right after the pattern occurrences
Simon Butcher8e004102016-10-14 00:48:33 +0100753 # - keep one of each non-unique line
754 # - count how many lines remain
755 # A line with '--' will remain in the result from previous outputs, so the number of lines in the result will be 1
756 # if there were no duplicates.
757 "-U")
758 if [ $(grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep -A1 "$2" | grep -v "$2" | sort | uniq -d | wc -l) -gt 1 ]; then
759 fail "lines following pattern '$2' must be unique in Server output"
760 return
761 fi
762 ;;
763
764 "-u")
765 if [ $(grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep -A1 "$2" | grep -v "$2" | sort | uniq -d | wc -l) -gt 1 ]; then
766 fail "lines following pattern '$2' must be unique in Client output"
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100767 return
768 fi
769 ;;
Andres Amaya Garcia93993de2017-09-06 15:38:07 +0100770 "-F")
771 if ! $2 "$SRV_OUT"; then
772 fail "function call to '$2' failed on Server output"
773 return
774 fi
775 ;;
776 "-f")
777 if ! $2 "$CLI_OUT"; then
778 fail "function call to '$2' failed on Client output"
779 return
780 fi
781 ;;
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100782
783 *)
Paul Bakker1ebc0c52014-05-22 15:47:58 +0200784 echo "Unknown test: $1" >&2
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100785 exit 1
786 esac
787 shift 2
788 done
789
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100790 # check valgrind's results
791 if [ "$MEMCHECK" -gt 0 ]; then
Manuel Pégourié-Gonnardbc3b16c2014-05-28 23:06:50 +0200792 if is_polar "$SRV_CMD" && has_mem_err $SRV_OUT; then
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100793 fail "Server has memory errors"
794 return
795 fi
Manuel Pégourié-Gonnardbc3b16c2014-05-28 23:06:50 +0200796 if is_polar "$CLI_CMD" && has_mem_err $CLI_OUT; then
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +0100797 fail "Client has memory errors"
798 return
799 fi
800 fi
801
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100802 # if we're here, everything is ok
Gilles Peskinee31a9ea2021-10-19 17:23:25 +0200803 outcome=PASS
Gilles Peskine342147a2021-10-19 16:25:10 +0200804}
805
Gilles Peskinead58e922021-10-19 16:35:35 +0200806# Run the current test case: start the server and if applicable the proxy, run
807# the client, wait for all processes to finish or time out.
808#
809# Inputs:
810# * $NAME: test case name
811# * $CLI_CMD, $SRV_CMD, $PXY_CMD: commands to run
812# * $CLI_OUT, $SRV_OUT, $PXY_OUT: files to contain client/server/proxy logs
813#
814# Outputs:
815# * $CLI_EXIT: client return code
816# * $SRV_RET: server return code
817do_run_test_once() {
818 # run the commands
819 if [ -n "$PXY_CMD" ]; then
820 printf "# %s\n%s\n" "$NAME" "$PXY_CMD" > $PXY_OUT
821 $PXY_CMD >> $PXY_OUT 2>&1 &
822 PXY_PID=$!
823 wait_proxy_start "$PXY_PORT" "$PXY_PID"
824 fi
825
826 check_osrv_dtls
827 printf '# %s\n%s\n' "$NAME" "$SRV_CMD" > $SRV_OUT
828 provide_input | $SRV_CMD >> $SRV_OUT 2>&1 &
829 SRV_PID=$!
830 wait_server_start "$SRV_PORT" "$SRV_PID"
831
832 printf '# %s\n%s\n' "$NAME" "$CLI_CMD" > $CLI_OUT
833 eval "$CLI_CMD" >> $CLI_OUT 2>&1 &
834 wait_client_done
835
836 sleep 0.05
837
838 # terminate the server (and the proxy)
839 kill $SRV_PID
840 wait $SRV_PID
841 SRV_RET=$?
842
843 if [ -n "$PXY_CMD" ]; then
844 kill $PXY_PID >/dev/null 2>&1
845 wait $PXY_PID
846 fi
847}
848
Gilles Peskine342147a2021-10-19 16:25:10 +0200849# Usage: run_test name [-p proxy_cmd] srv_cmd cli_cmd cli_exit [option [...]]
850# Options: -s pattern pattern that must be present in server output
851# -c pattern pattern that must be present in client output
852# -u pattern lines after pattern must be unique in client output
853# -f call shell function on client output
854# -S pattern pattern that must be absent in server output
855# -C pattern pattern that must be absent in client output
856# -U pattern lines after pattern must be unique in server output
857# -F call shell function on server output
858run_test() {
859 NAME="$1"
860 shift 1
861
862 if is_excluded "$NAME"; then
863 SKIP_NEXT="NO"
864 return
865 fi
866
867 print_name "$NAME"
868
869 # Do we only run numbered tests?
870 if [ -n "$RUN_TEST_NUMBER" ]; then
871 case ",$RUN_TEST_NUMBER," in
872 *",$TESTS,"*) :;;
873 *) SKIP_NEXT="YES";;
874 esac
875 fi
876
877 # does this test use a proxy?
878 if [ "X$1" = "X-p" ]; then
879 PXY_CMD="$2"
880 shift 2
881 else
882 PXY_CMD=""
883 fi
884
885 # get commands and client output
886 SRV_CMD="$1"
887 CLI_CMD="$2"
888 CLI_EXPECT="$3"
889 shift 3
890
891 # Check if test uses files
892 case "$SRV_CMD $CLI_CMD" in
893 *data_files/*)
894 requires_config_enabled MBEDTLS_FS_IO;;
895 esac
896
897 # should we skip?
898 if [ "X$SKIP_NEXT" = "XYES" ]; then
899 SKIP_NEXT="NO"
900 record_outcome "SKIP"
901 SKIPS=$(( $SKIPS + 1 ))
902 return
903 fi
904
905 analyze_test_commands "$@"
906
907 TIMES_LEFT=2
908 while [ $TIMES_LEFT -gt 0 ]; do
909 TIMES_LEFT=$(( $TIMES_LEFT - 1 ))
910
Gilles Peskinead58e922021-10-19 16:35:35 +0200911 do_run_test_once
Gilles Peskine342147a2021-10-19 16:25:10 +0200912
Gilles Peskinee31a9ea2021-10-19 17:23:25 +0200913 check_test_failure "$@"
914 case $outcome in
915 PASS) break;;
Gilles Peskine83890252021-10-19 18:00:10 +0200916 RETRY*) printf "$outcome ";;
Gilles Peskinee31a9ea2021-10-19 17:23:25 +0200917 FAIL) return;;
918 esac
Gilles Peskine342147a2021-10-19 16:25:10 +0200919 done
920
Gilles Peskinee31a9ea2021-10-19 17:23:25 +0200921 # If we get this far, the test case passed.
Gilles Peskine87b036f2021-10-21 11:11:51 +0200922 record_outcome "PASS"
Paul Bakkeracaac852016-05-10 11:47:13 +0100923 if [ "$PRESERVE_LOGS" -gt 0 ]; then
924 mv $SRV_OUT o-srv-${TESTS}.log
925 mv $CLI_OUT o-cli-${TESTS}.log
Hanno Becker7be2e5b2018-08-20 12:21:35 +0100926 if [ -n "$PXY_CMD" ]; then
927 mv $PXY_OUT o-pxy-${TESTS}.log
928 fi
Paul Bakkeracaac852016-05-10 11:47:13 +0100929 fi
930
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +0200931 rm -f $SRV_OUT $CLI_OUT $PXY_OUT
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100932}
933
Manuel Pégourié-Gonnarda9062e92014-02-25 16:21:22 +0100934cleanup() {
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +0200935 rm -f $CLI_OUT $SRV_OUT $PXY_OUT $SESSION
Manuel Pégourié-Gonnarda6189f02014-09-20 13:15:43 +0200936 test -n "${SRV_PID:-}" && kill $SRV_PID >/dev/null 2>&1
937 test -n "${PXY_PID:-}" && kill $PXY_PID >/dev/null 2>&1
938 test -n "${CLI_PID:-}" && kill $CLI_PID >/dev/null 2>&1
939 test -n "${DOG_PID:-}" && kill $DOG_PID >/dev/null 2>&1
Manuel Pégourié-Gonnarda9062e92014-02-25 16:21:22 +0100940 exit 1
941}
942
Manuel Pégourié-Gonnard9dea8bd2014-02-26 18:21:02 +0100943#
944# MAIN
945#
946
Manuel Pégourié-Gonnard913030c2014-03-28 10:12:38 +0100947get_options "$@"
948
Gilles Peskineb7bb068b2020-08-26 22:35:46 +0200949# Optimize filters: if $FILTER and $EXCLUDE can be expressed as shell
950# patterns rather than regular expressions, use a case statement instead
951# of calling grep. To keep the optimizer simple, it is incomplete and only
952# detects simple cases: plain substring, everything, nothing.
953#
954# As an exception, the character '.' is treated as an ordinary character
955# if it is the only special character in the string. This is because it's
956# rare to need "any one character", but needing a literal '.' is common
957# (e.g. '-f "DTLS 1.2"').
958need_grep=
959case "$FILTER" in
960 '^$') simple_filter=;;
961 '.*') simple_filter='*';;
Gilles Peskinec5714bb2020-09-29 23:48:39 +0200962 *[][$+*?\\^{\|}]*) # Regexp special characters (other than .), we need grep
Gilles Peskineb7bb068b2020-08-26 22:35:46 +0200963 need_grep=1;;
964 *) # No regexp or shell-pattern special character
965 simple_filter="*$FILTER*";;
966esac
967case "$EXCLUDE" in
968 '^$') simple_exclude=;;
969 '.*') simple_exclude='*';;
Gilles Peskinec5714bb2020-09-29 23:48:39 +0200970 *[][$+*?\\^{\|}]*) # Regexp special characters (other than .), we need grep
Gilles Peskineb7bb068b2020-08-26 22:35:46 +0200971 need_grep=1;;
972 *) # No regexp or shell-pattern special character
973 simple_exclude="*$EXCLUDE*";;
974esac
975if [ -n "$need_grep" ]; then
976 is_excluded () {
977 ! echo "$1" | grep "$FILTER" | grep -q -v "$EXCLUDE"
978 }
979else
980 is_excluded () {
981 case "$1" in
982 $simple_exclude) true;;
983 $simple_filter) false;;
984 *) true;;
985 esac
986 }
987fi
988
Manuel Pégourié-Gonnardf7a26902014-02-27 12:25:54 +0100989# sanity checks, avoid an avalanche of errors
Hanno Becker4ac73e72017-10-23 15:27:37 +0100990P_SRV_BIN="${P_SRV%%[ ]*}"
991P_CLI_BIN="${P_CLI%%[ ]*}"
992P_PXY_BIN="${P_PXY%%[ ]*}"
Hanno Becker17c04932017-10-10 14:44:53 +0100993if [ ! -x "$P_SRV_BIN" ]; then
994 echo "Command '$P_SRV_BIN' is not an executable file"
Manuel Pégourié-Gonnardf7a26902014-02-27 12:25:54 +0100995 exit 1
996fi
Hanno Becker17c04932017-10-10 14:44:53 +0100997if [ ! -x "$P_CLI_BIN" ]; then
998 echo "Command '$P_CLI_BIN' is not an executable file"
Manuel Pégourié-Gonnardf7a26902014-02-27 12:25:54 +0100999 exit 1
1000fi
Hanno Becker17c04932017-10-10 14:44:53 +01001001if [ ! -x "$P_PXY_BIN" ]; then
1002 echo "Command '$P_PXY_BIN' is not an executable file"
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +02001003 exit 1
1004fi
Simon Butcher3c0d7b82016-05-23 11:13:17 +01001005if [ "$MEMCHECK" -gt 0 ]; then
1006 if which valgrind >/dev/null 2>&1; then :; else
1007 echo "Memcheck not possible. Valgrind not found"
1008 exit 1
1009 fi
1010fi
Manuel Pégourié-Gonnard74faf3c2014-03-13 18:47:44 +01001011if which $OPENSSL_CMD >/dev/null 2>&1; then :; else
1012 echo "Command '$OPENSSL_CMD' not found"
Manuel Pégourié-Gonnardf7a26902014-02-27 12:25:54 +01001013 exit 1
1014fi
1015
Manuel Pégourié-Gonnard32f8f4d2014-05-29 11:31:20 +02001016# used by watchdog
1017MAIN_PID="$$"
1018
Manuel Pégourié-Gonnard0d225da2018-01-22 10:22:09 +01001019# We use somewhat arbitrary delays for tests:
1020# - how long do we wait for the server to start (when lsof not available)?
1021# - how long do we allow for the client to finish?
1022# (not to check performance, just to avoid waiting indefinitely)
1023# Things are slower with valgrind, so give extra time here.
1024#
1025# Note: without lsof, there is a trade-off between the running time of this
1026# script and the risk of spurious errors because we didn't wait long enough.
1027# The watchdog delay on the other hand doesn't affect normal running time of
1028# the script, only the case where a client or server gets stuck.
Manuel Pégourié-Gonnard0c1ec472014-06-20 18:41:11 +02001029if [ "$MEMCHECK" -gt 0 ]; then
Manuel Pégourié-Gonnard0d225da2018-01-22 10:22:09 +01001030 START_DELAY=6
1031 DOG_DELAY=60
Manuel Pégourié-Gonnard0c1ec472014-06-20 18:41:11 +02001032else
Manuel Pégourié-Gonnard0d225da2018-01-22 10:22:09 +01001033 START_DELAY=2
1034 DOG_DELAY=20
Manuel Pégourié-Gonnard0c1ec472014-06-20 18:41:11 +02001035fi
Manuel Pégourié-Gonnard0d225da2018-01-22 10:22:09 +01001036
1037# some particular tests need more time:
1038# - for the client, we multiply the usual watchdog limit by a factor
1039# - for the server, we sleep for a number of seconds after the client exits
1040# see client_need_more_time() and server_needs_more_time()
Manuel Pégourié-Gonnarda0719722014-09-20 12:46:27 +02001041CLI_DELAY_FACTOR=1
Janos Follath74537a62016-09-02 13:45:28 +01001042SRV_DELAY_SECONDS=0
Manuel Pégourié-Gonnard0c1ec472014-06-20 18:41:11 +02001043
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02001044# fix commands to use this port, force IPv4 while at it
Manuel Pégourié-Gonnard0af1ba32015-01-21 11:44:33 +00001045# +SRV_PORT will be replaced by either $SRV_PORT or $PXY_PORT later
Paul Elliott0ab79412021-10-12 16:10:37 +01001046# Note: Using 'localhost' rather than 127.0.0.1 here is unwise, as on many
1047# machines that will resolve to ::1, and we don't want ipv6 here.
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +02001048P_SRV="$P_SRV server_addr=127.0.0.1 server_port=$SRV_PORT"
1049P_CLI="$P_CLI server_addr=127.0.0.1 server_port=+SRV_PORT"
Andres AGf04f54d2016-10-10 15:46:20 +01001050P_PXY="$P_PXY server_addr=127.0.0.1 server_port=$SRV_PORT listen_addr=127.0.0.1 listen_port=$PXY_PORT ${SEED:+"seed=$SEED"}"
Gilles Peskine63a2b912021-04-01 14:00:11 +02001051O_SRV="$O_SRV -accept $SRV_PORT"
Paul Elliott0ab79412021-10-12 16:10:37 +01001052O_CLI="$O_CLI -connect 127.0.0.1:+SRV_PORT"
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +02001053G_SRV="$G_SRV -p $SRV_PORT"
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02001054G_CLI="$G_CLI -p +SRV_PORT"
Manuel Pégourié-Gonnard8066b812014-05-28 22:59:30 +02001055
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02001056if [ -n "${OPENSSL_LEGACY:-}" ]; then
1057 O_LEGACY_SRV="$O_LEGACY_SRV -accept $SRV_PORT -dhparam data_files/dhparams.pem"
Paul Elliott0ab79412021-10-12 16:10:37 +01001058 O_LEGACY_CLI="$O_LEGACY_CLI -connect 127.0.0.1:+SRV_PORT"
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02001059fi
1060
Paul Elliott19f1f782021-10-13 18:31:07 +01001061if [ -n "${OPENSSL_NEXT:-}" ]; then
1062 O_NEXT_SRV="$O_NEXT_SRV -accept $SRV_PORT"
Paul Elliott0ab79412021-10-12 16:10:37 +01001063 O_NEXT_CLI="$O_NEXT_CLI -connect 127.0.0.1:+SRV_PORT"
Paul Elliott19f1f782021-10-13 18:31:07 +01001064fi
1065
Hanno Becker58e9dc32018-08-17 15:53:21 +01001066if [ -n "${GNUTLS_NEXT_SERV:-}" ]; then
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02001067 G_NEXT_SRV="$G_NEXT_SRV -p $SRV_PORT"
1068fi
1069
Hanno Becker58e9dc32018-08-17 15:53:21 +01001070if [ -n "${GNUTLS_NEXT_CLI:-}" ]; then
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02001071 G_NEXT_CLI="$G_NEXT_CLI -p +SRV_PORT"
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02001072fi
Manuel Pégourié-Gonnardc1da6642014-02-25 14:18:30 +01001073
Gilles Peskine62469d92017-05-10 10:13:59 +02001074# Allow SHA-1, because many of our test certificates use it
1075P_SRV="$P_SRV allow_sha1=1"
1076P_CLI="$P_CLI allow_sha1=1"
1077
Manuel Pégourié-Gonnardbc3b16c2014-05-28 23:06:50 +02001078# Also pick a unique name for intermediate files
1079SRV_OUT="srv_out.$$"
1080CLI_OUT="cli_out.$$"
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +02001081PXY_OUT="pxy_out.$$"
Manuel Pégourié-Gonnardbc3b16c2014-05-28 23:06:50 +02001082SESSION="session.$$"
1083
Manuel Pégourié-Gonnard6f4fbbb2014-08-14 14:31:29 +02001084SKIP_NEXT="NO"
1085
Manuel Pégourié-Gonnardc1da6642014-02-25 14:18:30 +01001086trap cleanup INT TERM HUP
1087
Manuel Pégourié-Gonnarde73b2632014-07-12 04:00:00 +02001088# Basic test
1089
Manuel Pégourié-Gonnard480905d2014-08-21 19:38:32 +02001090# Checks that:
1091# - things work with all ciphersuites active (used with config-full in all.sh)
1092# - the expected (highest security) parameters are selected
1093# ("signature_algorithm ext: 6" means SHA-512 (highest common hash))
Manuel Pégourié-Gonnarde73b2632014-07-12 04:00:00 +02001094run_test "Default" \
Manuel Pégourié-Gonnard480905d2014-08-21 19:38:32 +02001095 "$P_SRV debug_level=3" \
Manuel Pégourié-Gonnarde73b2632014-07-12 04:00:00 +02001096 "$P_CLI" \
1097 0 \
Manuel Pégourié-Gonnard480905d2014-08-21 19:38:32 +02001098 -s "Protocol is TLSv1.2" \
Manuel Pégourié-Gonnardce66d5e2018-06-14 11:11:15 +02001099 -s "Ciphersuite is TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256" \
Manuel Pégourié-Gonnard480905d2014-08-21 19:38:32 +02001100 -s "client hello v3, signature_algorithm ext: 6" \
1101 -s "ECDHE curve: secp521r1" \
1102 -S "error" \
1103 -C "error"
Manuel Pégourié-Gonnarde73b2632014-07-12 04:00:00 +02001104
Manuel Pégourié-Gonnard3bb08012015-01-22 13:34:21 +00001105run_test "Default, DTLS" \
1106 "$P_SRV dtls=1" \
1107 "$P_CLI dtls=1" \
1108 0 \
1109 -s "Protocol is DTLSv1.2" \
Manuel Pégourié-Gonnardce66d5e2018-06-14 11:11:15 +02001110 -s "Ciphersuite is TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256"
Manuel Pégourié-Gonnard3bb08012015-01-22 13:34:21 +00001111
Manuel Pégourié-Gonnard95a17fb2020-01-02 11:58:00 +01001112requires_config_enabled MBEDTLS_ZLIB_SUPPORT
1113run_test "Default (compression enabled)" \
1114 "$P_SRV debug_level=3" \
1115 "$P_CLI debug_level=3" \
1116 0 \
1117 -s "Allocating compression buffer" \
1118 -c "Allocating compression buffer" \
1119 -s "Record expansion is unknown (compression)" \
1120 -c "Record expansion is unknown (compression)" \
1121 -S "error" \
1122 -C "error"
1123
Andres Amaya Garciab84c40b2017-09-06 15:44:01 +01001124# Test current time in ServerHello
1125requires_config_enabled MBEDTLS_HAVE_TIME
Manuel Pégourié-Gonnardce66d5e2018-06-14 11:11:15 +02001126run_test "ServerHello contains gmt_unix_time" \
Andres Amaya Garciab84c40b2017-09-06 15:44:01 +01001127 "$P_SRV debug_level=3" \
1128 "$P_CLI debug_level=3" \
1129 0 \
Andres Amaya Garciab84c40b2017-09-06 15:44:01 +01001130 -f "check_server_hello_time" \
1131 -F "check_server_hello_time"
1132
Simon Butcher8e004102016-10-14 00:48:33 +01001133# Test for uniqueness of IVs in AEAD ciphersuites
1134run_test "Unique IV in GCM" \
1135 "$P_SRV exchanges=20 debug_level=4" \
1136 "$P_CLI exchanges=20 debug_level=4 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \
1137 0 \
1138 -u "IV used" \
1139 -U "IV used"
1140
Manuel Pégourié-Gonnardbd47a582015-01-12 13:43:29 +01001141# Tests for rc4 option
1142
Simon Butchera410af52016-05-19 22:12:18 +01001143requires_config_enabled MBEDTLS_REMOVE_ARC4_CIPHERSUITES
Manuel Pégourié-Gonnardbd47a582015-01-12 13:43:29 +01001144run_test "RC4: server disabled, client enabled" \
1145 "$P_SRV" \
1146 "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
1147 1 \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01001148 -s "SSL - The server has no ciphersuites in common"
1149
Simon Butchera410af52016-05-19 22:12:18 +01001150requires_config_enabled MBEDTLS_REMOVE_ARC4_CIPHERSUITES
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01001151run_test "RC4: server half, client enabled" \
1152 "$P_SRV arc4=1" \
1153 "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
1154 1 \
1155 -s "SSL - The server has no ciphersuites in common"
Manuel Pégourié-Gonnardbd47a582015-01-12 13:43:29 +01001156
1157run_test "RC4: server enabled, client disabled" \
1158 "$P_SRV force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
1159 "$P_CLI" \
1160 1 \
1161 -s "SSL - The server has no ciphersuites in common"
1162
1163run_test "RC4: both enabled" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01001164 "$P_SRV force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnardbd47a582015-01-12 13:43:29 +01001165 "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
1166 0 \
Manuel Pégourié-Gonnard51d81662015-01-14 17:20:46 +01001167 -S "SSL - None of the common ciphersuites is usable" \
Manuel Pégourié-Gonnardbd47a582015-01-12 13:43:29 +01001168 -S "SSL - The server has no ciphersuites in common"
1169
Hanno Beckerd26bb202018-08-17 09:54:10 +01001170# Test empty CA list in CertificateRequest in TLS 1.1 and earlier
1171
1172requires_gnutls
1173requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
1174run_test "CertificateRequest with empty CA list, TLS 1.1 (GnuTLS server)" \
1175 "$G_SRV"\
1176 "$P_CLI force_version=tls1_1" \
1177 0
1178
1179requires_gnutls
1180requires_config_enabled MBEDTLS_SSL_PROTO_TLS1
1181run_test "CertificateRequest with empty CA list, TLS 1.0 (GnuTLS server)" \
1182 "$G_SRV"\
1183 "$P_CLI force_version=tls1" \
1184 0
1185
Gilles Peskinebc70a182017-05-09 15:59:24 +02001186# Tests for SHA-1 support
1187
Manuel Pégourié-Gonnardaf63c212017-06-08 17:51:08 +02001188requires_config_disabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
Gilles Peskinebc70a182017-05-09 15:59:24 +02001189run_test "SHA-1 forbidden by default in server certificate" \
1190 "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2.crt" \
1191 "$P_CLI debug_level=2 allow_sha1=0" \
1192 1 \
1193 -c "The certificate is signed with an unacceptable hash"
1194
Manuel Pégourié-Gonnardaf63c212017-06-08 17:51:08 +02001195requires_config_enabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
1196run_test "SHA-1 forbidden by default in server certificate" \
1197 "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2.crt" \
1198 "$P_CLI debug_level=2 allow_sha1=0" \
1199 0
1200
Gilles Peskinebc70a182017-05-09 15:59:24 +02001201run_test "SHA-1 explicitly allowed in server certificate" \
1202 "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2.crt" \
1203 "$P_CLI allow_sha1=1" \
1204 0
1205
1206run_test "SHA-256 allowed by default in server certificate" \
1207 "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2-sha256.crt" \
1208 "$P_CLI allow_sha1=0" \
1209 0
1210
Manuel Pégourié-Gonnardaf63c212017-06-08 17:51:08 +02001211requires_config_disabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
Gilles Peskinebc70a182017-05-09 15:59:24 +02001212run_test "SHA-1 forbidden by default in client certificate" \
1213 "$P_SRV auth_mode=required allow_sha1=0" \
1214 "$P_CLI key_file=data_files/cli-rsa.key crt_file=data_files/cli-rsa-sha1.crt" \
1215 1 \
1216 -s "The certificate is signed with an unacceptable hash"
1217
Manuel Pégourié-Gonnardaf63c212017-06-08 17:51:08 +02001218requires_config_enabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
1219run_test "SHA-1 forbidden by default in client certificate" \
1220 "$P_SRV auth_mode=required allow_sha1=0" \
1221 "$P_CLI key_file=data_files/cli-rsa.key crt_file=data_files/cli-rsa-sha1.crt" \
1222 0
1223
Gilles Peskinebc70a182017-05-09 15:59:24 +02001224run_test "SHA-1 explicitly allowed in client certificate" \
1225 "$P_SRV auth_mode=required allow_sha1=1" \
1226 "$P_CLI key_file=data_files/cli-rsa.key crt_file=data_files/cli-rsa-sha1.crt" \
1227 0
1228
1229run_test "SHA-256 allowed by default in client certificate" \
1230 "$P_SRV auth_mode=required allow_sha1=0" \
1231 "$P_CLI key_file=data_files/cli-rsa.key crt_file=data_files/cli-rsa-sha256.crt" \
1232 0
1233
Hanno Becker7ae8a762018-08-14 15:43:35 +01001234# Tests for datagram packing
1235run_test "DTLS: multiple records in same datagram, client and server" \
1236 "$P_SRV dtls=1 dgram_packing=1 debug_level=2" \
1237 "$P_CLI dtls=1 dgram_packing=1 debug_level=2" \
1238 0 \
1239 -c "next record in same datagram" \
1240 -s "next record in same datagram"
1241
1242run_test "DTLS: multiple records in same datagram, client only" \
1243 "$P_SRV dtls=1 dgram_packing=0 debug_level=2" \
1244 "$P_CLI dtls=1 dgram_packing=1 debug_level=2" \
1245 0 \
1246 -s "next record in same datagram" \
1247 -C "next record in same datagram"
1248
1249run_test "DTLS: multiple records in same datagram, server only" \
1250 "$P_SRV dtls=1 dgram_packing=1 debug_level=2" \
1251 "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
1252 0 \
1253 -S "next record in same datagram" \
1254 -c "next record in same datagram"
1255
1256run_test "DTLS: multiple records in same datagram, neither client nor server" \
1257 "$P_SRV dtls=1 dgram_packing=0 debug_level=2" \
1258 "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
1259 0 \
1260 -S "next record in same datagram" \
1261 -C "next record in same datagram"
1262
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01001263# Tests for Truncated HMAC extension
1264
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001265run_test "Truncated HMAC: client default, server default" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001266 "$P_SRV debug_level=4" \
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001267 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01001268 0 \
Hanno Becker992b6872017-11-09 18:57:39 +00001269 -s "dumping 'expected mac' (20 bytes)" \
1270 -S "dumping 'expected mac' (10 bytes)"
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01001271
Hanno Becker32c55012017-11-10 08:42:54 +00001272requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001273run_test "Truncated HMAC: client disabled, server default" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001274 "$P_SRV debug_level=4" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001275 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=0" \
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +01001276 0 \
Hanno Becker992b6872017-11-09 18:57:39 +00001277 -s "dumping 'expected mac' (20 bytes)" \
1278 -S "dumping 'expected mac' (10 bytes)"
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001279
Hanno Becker32c55012017-11-10 08:42:54 +00001280requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001281run_test "Truncated HMAC: client enabled, server default" \
1282 "$P_SRV debug_level=4" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001283 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001284 0 \
Hanno Becker992b6872017-11-09 18:57:39 +00001285 -s "dumping 'expected mac' (20 bytes)" \
1286 -S "dumping 'expected mac' (10 bytes)"
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001287
Hanno Becker32c55012017-11-10 08:42:54 +00001288requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001289run_test "Truncated HMAC: client enabled, server disabled" \
1290 "$P_SRV debug_level=4 trunc_hmac=0" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001291 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001292 0 \
Hanno Becker992b6872017-11-09 18:57:39 +00001293 -s "dumping 'expected mac' (20 bytes)" \
1294 -S "dumping 'expected mac' (10 bytes)"
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001295
Hanno Becker32c55012017-11-10 08:42:54 +00001296requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Hanno Becker34d0c3f2017-11-17 15:46:24 +00001297run_test "Truncated HMAC: client disabled, server enabled" \
1298 "$P_SRV debug_level=4 trunc_hmac=1" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001299 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=0" \
Hanno Becker34d0c3f2017-11-17 15:46:24 +00001300 0 \
1301 -s "dumping 'expected mac' (20 bytes)" \
1302 -S "dumping 'expected mac' (10 bytes)"
1303
1304requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001305run_test "Truncated HMAC: client enabled, server enabled" \
1306 "$P_SRV debug_level=4 trunc_hmac=1" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001307 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnarde117a8f2015-01-09 12:39:35 +01001308 0 \
Hanno Becker992b6872017-11-09 18:57:39 +00001309 -S "dumping 'expected mac' (20 bytes)" \
1310 -s "dumping 'expected mac' (10 bytes)"
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +01001311
Hanno Becker4c4f4102017-11-10 09:16:05 +00001312run_test "Truncated HMAC, DTLS: client default, server default" \
1313 "$P_SRV dtls=1 debug_level=4" \
1314 "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
1315 0 \
1316 -s "dumping 'expected mac' (20 bytes)" \
1317 -S "dumping 'expected mac' (10 bytes)"
1318
1319requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
1320run_test "Truncated HMAC, DTLS: client disabled, server default" \
1321 "$P_SRV dtls=1 debug_level=4" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001322 "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=0" \
Hanno Becker4c4f4102017-11-10 09:16:05 +00001323 0 \
1324 -s "dumping 'expected mac' (20 bytes)" \
1325 -S "dumping 'expected mac' (10 bytes)"
1326
1327requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
1328run_test "Truncated HMAC, DTLS: client enabled, server default" \
1329 "$P_SRV dtls=1 debug_level=4" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001330 "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
Hanno Becker4c4f4102017-11-10 09:16:05 +00001331 0 \
1332 -s "dumping 'expected mac' (20 bytes)" \
1333 -S "dumping 'expected mac' (10 bytes)"
1334
1335requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
1336run_test "Truncated HMAC, DTLS: client enabled, server disabled" \
1337 "$P_SRV dtls=1 debug_level=4 trunc_hmac=0" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001338 "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
Hanno Becker4c4f4102017-11-10 09:16:05 +00001339 0 \
1340 -s "dumping 'expected mac' (20 bytes)" \
1341 -S "dumping 'expected mac' (10 bytes)"
1342
1343requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
1344run_test "Truncated HMAC, DTLS: client disabled, server enabled" \
1345 "$P_SRV dtls=1 debug_level=4 trunc_hmac=1" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001346 "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=0" \
Hanno Becker4c4f4102017-11-10 09:16:05 +00001347 0 \
1348 -s "dumping 'expected mac' (20 bytes)" \
1349 -S "dumping 'expected mac' (10 bytes)"
1350
1351requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
1352run_test "Truncated HMAC, DTLS: client enabled, server enabled" \
1353 "$P_SRV dtls=1 debug_level=4 trunc_hmac=1" \
Hanno Becker909f9a32017-11-21 17:10:12 +00001354 "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +01001355 0 \
1356 -S "dumping 'expected mac' (20 bytes)" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +01001357 -s "dumping 'expected mac' (10 bytes)"
1358
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001359# Tests for Encrypt-then-MAC extension
1360
1361run_test "Encrypt then MAC: default" \
Manuel Pégourié-Gonnard0098e7d2014-10-28 13:08:59 +01001362 "$P_SRV debug_level=3 \
1363 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001364 "$P_CLI debug_level=3" \
1365 0 \
1366 -c "client hello, adding encrypt_then_mac extension" \
1367 -s "found encrypt then mac extension" \
1368 -s "server hello, adding encrypt then mac extension" \
1369 -c "found encrypt_then_mac extension" \
1370 -c "using encrypt then mac" \
1371 -s "using encrypt then mac"
1372
1373run_test "Encrypt then MAC: client enabled, server disabled" \
Manuel Pégourié-Gonnard0098e7d2014-10-28 13:08:59 +01001374 "$P_SRV debug_level=3 etm=0 \
1375 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001376 "$P_CLI debug_level=3 etm=1" \
1377 0 \
1378 -c "client hello, adding encrypt_then_mac extension" \
1379 -s "found encrypt then mac extension" \
1380 -S "server hello, adding encrypt then mac extension" \
1381 -C "found encrypt_then_mac extension" \
1382 -C "using encrypt then mac" \
1383 -S "using encrypt then mac"
1384
Manuel Pégourié-Gonnard78e745f2014-11-04 15:44:06 +01001385run_test "Encrypt then MAC: client enabled, aead cipher" \
1386 "$P_SRV debug_level=3 etm=1 \
1387 force_ciphersuite=TLS-RSA-WITH-AES-128-GCM-SHA256" \
1388 "$P_CLI debug_level=3 etm=1" \
1389 0 \
1390 -c "client hello, adding encrypt_then_mac extension" \
1391 -s "found encrypt then mac extension" \
1392 -S "server hello, adding encrypt then mac extension" \
1393 -C "found encrypt_then_mac extension" \
1394 -C "using encrypt then mac" \
1395 -S "using encrypt then mac"
1396
1397run_test "Encrypt then MAC: client enabled, stream cipher" \
1398 "$P_SRV debug_level=3 etm=1 \
1399 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01001400 "$P_CLI debug_level=3 etm=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnard78e745f2014-11-04 15:44:06 +01001401 0 \
1402 -c "client hello, adding encrypt_then_mac extension" \
1403 -s "found encrypt then mac extension" \
1404 -S "server hello, adding encrypt then mac extension" \
1405 -C "found encrypt_then_mac extension" \
1406 -C "using encrypt then mac" \
1407 -S "using encrypt then mac"
1408
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001409run_test "Encrypt then MAC: client disabled, server enabled" \
Manuel Pégourié-Gonnard0098e7d2014-10-28 13:08:59 +01001410 "$P_SRV debug_level=3 etm=1 \
1411 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001412 "$P_CLI debug_level=3 etm=0" \
1413 0 \
1414 -C "client hello, adding encrypt_then_mac extension" \
1415 -S "found encrypt then mac extension" \
1416 -S "server hello, adding encrypt then mac extension" \
1417 -C "found encrypt_then_mac extension" \
1418 -C "using encrypt then mac" \
1419 -S "using encrypt then mac"
1420
Janos Follathe2681a42016-03-07 15:57:05 +00001421requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001422run_test "Encrypt then MAC: client SSLv3, server enabled" \
Manuel Pégourié-Gonnard51d81662015-01-14 17:20:46 +01001423 "$P_SRV debug_level=3 min_version=ssl3 \
Manuel Pégourié-Gonnard0098e7d2014-10-28 13:08:59 +01001424 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001425 "$P_CLI debug_level=3 force_version=ssl3" \
1426 0 \
1427 -C "client hello, adding encrypt_then_mac extension" \
1428 -S "found encrypt then mac extension" \
1429 -S "server hello, adding encrypt then mac extension" \
1430 -C "found encrypt_then_mac extension" \
1431 -C "using encrypt then mac" \
1432 -S "using encrypt then mac"
1433
Janos Follathe2681a42016-03-07 15:57:05 +00001434requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001435run_test "Encrypt then MAC: client enabled, server SSLv3" \
Manuel Pégourié-Gonnard0098e7d2014-10-28 13:08:59 +01001436 "$P_SRV debug_level=3 force_version=ssl3 \
1437 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
Manuel Pégourié-Gonnard51d81662015-01-14 17:20:46 +01001438 "$P_CLI debug_level=3 min_version=ssl3" \
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001439 0 \
1440 -c "client hello, adding encrypt_then_mac extension" \
Janos Follath00efff72016-05-06 13:48:23 +01001441 -S "found encrypt then mac extension" \
Manuel Pégourié-Gonnard699cafa2014-10-27 13:57:03 +01001442 -S "server hello, adding encrypt then mac extension" \
1443 -C "found encrypt_then_mac extension" \
1444 -C "using encrypt then mac" \
1445 -S "using encrypt then mac"
1446
Manuel Pégourié-Gonnard367381f2014-10-20 18:40:56 +02001447# Tests for Extended Master Secret extension
1448
1449run_test "Extended Master Secret: default" \
1450 "$P_SRV debug_level=3" \
1451 "$P_CLI debug_level=3" \
1452 0 \
1453 -c "client hello, adding extended_master_secret extension" \
1454 -s "found extended master secret extension" \
1455 -s "server hello, adding extended master secret extension" \
1456 -c "found extended_master_secret extension" \
1457 -c "using extended master secret" \
1458 -s "using extended master secret"
1459
1460run_test "Extended Master Secret: client enabled, server disabled" \
1461 "$P_SRV debug_level=3 extended_ms=0" \
1462 "$P_CLI debug_level=3 extended_ms=1" \
1463 0 \
1464 -c "client hello, adding extended_master_secret extension" \
1465 -s "found extended master secret extension" \
1466 -S "server hello, adding extended master secret extension" \
1467 -C "found extended_master_secret extension" \
1468 -C "using extended master secret" \
1469 -S "using extended master secret"
1470
1471run_test "Extended Master Secret: client disabled, server enabled" \
1472 "$P_SRV debug_level=3 extended_ms=1" \
1473 "$P_CLI debug_level=3 extended_ms=0" \
1474 0 \
1475 -C "client hello, adding extended_master_secret extension" \
1476 -S "found extended master secret extension" \
1477 -S "server hello, adding extended master secret extension" \
1478 -C "found extended_master_secret extension" \
1479 -C "using extended master secret" \
1480 -S "using extended master secret"
1481
Janos Follathe2681a42016-03-07 15:57:05 +00001482requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Manuel Pégourié-Gonnardb575b542014-10-24 15:12:31 +02001483run_test "Extended Master Secret: client SSLv3, server enabled" \
Manuel Pégourié-Gonnard51d81662015-01-14 17:20:46 +01001484 "$P_SRV debug_level=3 min_version=ssl3" \
Manuel Pégourié-Gonnardb575b542014-10-24 15:12:31 +02001485 "$P_CLI debug_level=3 force_version=ssl3" \
1486 0 \
1487 -C "client hello, adding extended_master_secret extension" \
1488 -S "found extended master secret extension" \
1489 -S "server hello, adding extended master secret extension" \
1490 -C "found extended_master_secret extension" \
1491 -C "using extended master secret" \
1492 -S "using extended master secret"
1493
Janos Follathe2681a42016-03-07 15:57:05 +00001494requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Manuel Pégourié-Gonnardb575b542014-10-24 15:12:31 +02001495run_test "Extended Master Secret: client enabled, server SSLv3" \
1496 "$P_SRV debug_level=3 force_version=ssl3" \
Manuel Pégourié-Gonnard51d81662015-01-14 17:20:46 +01001497 "$P_CLI debug_level=3 min_version=ssl3" \
Manuel Pégourié-Gonnardb575b542014-10-24 15:12:31 +02001498 0 \
1499 -c "client hello, adding extended_master_secret extension" \
Janos Follath00efff72016-05-06 13:48:23 +01001500 -S "found extended master secret extension" \
Manuel Pégourié-Gonnardb575b542014-10-24 15:12:31 +02001501 -S "server hello, adding extended master secret extension" \
1502 -C "found extended_master_secret extension" \
1503 -C "using extended master secret" \
1504 -S "using extended master secret"
1505
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +02001506# Tests for FALLBACK_SCSV
1507
1508run_test "Fallback SCSV: default" \
Manuel Pégourié-Gonnard4268ae02015-08-04 12:44:10 +02001509 "$P_SRV debug_level=2" \
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +02001510 "$P_CLI debug_level=3 force_version=tls1_1" \
1511 0 \
1512 -C "adding FALLBACK_SCSV" \
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001513 -S "received FALLBACK_SCSV" \
1514 -S "inapropriate fallback" \
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +02001515 -C "is a fatal alert message (msg 86)"
1516
1517run_test "Fallback SCSV: explicitly disabled" \
Manuel Pégourié-Gonnard4268ae02015-08-04 12:44:10 +02001518 "$P_SRV debug_level=2" \
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +02001519 "$P_CLI debug_level=3 force_version=tls1_1 fallback=0" \
1520 0 \
1521 -C "adding FALLBACK_SCSV" \
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001522 -S "received FALLBACK_SCSV" \
1523 -S "inapropriate fallback" \
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +02001524 -C "is a fatal alert message (msg 86)"
1525
1526run_test "Fallback SCSV: enabled" \
Manuel Pégourié-Gonnard4268ae02015-08-04 12:44:10 +02001527 "$P_SRV debug_level=2" \
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +02001528 "$P_CLI debug_level=3 force_version=tls1_1 fallback=1" \
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001529 1 \
1530 -c "adding FALLBACK_SCSV" \
1531 -s "received FALLBACK_SCSV" \
1532 -s "inapropriate fallback" \
1533 -c "is a fatal alert message (msg 86)"
1534
1535run_test "Fallback SCSV: enabled, max version" \
Manuel Pégourié-Gonnard4268ae02015-08-04 12:44:10 +02001536 "$P_SRV debug_level=2" \
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001537 "$P_CLI debug_level=3 fallback=1" \
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +02001538 0 \
1539 -c "adding FALLBACK_SCSV" \
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001540 -s "received FALLBACK_SCSV" \
1541 -S "inapropriate fallback" \
Manuel Pégourié-Gonnard1cbd39d2014-10-20 13:34:59 +02001542 -C "is a fatal alert message (msg 86)"
1543
1544requires_openssl_with_fallback_scsv
1545run_test "Fallback SCSV: default, openssl server" \
1546 "$O_SRV" \
1547 "$P_CLI debug_level=3 force_version=tls1_1 fallback=0" \
1548 0 \
1549 -C "adding FALLBACK_SCSV" \
1550 -C "is a fatal alert message (msg 86)"
1551
1552requires_openssl_with_fallback_scsv
1553run_test "Fallback SCSV: enabled, openssl server" \
1554 "$O_SRV" \
1555 "$P_CLI debug_level=3 force_version=tls1_1 fallback=1" \
1556 1 \
1557 -c "adding FALLBACK_SCSV" \
1558 -c "is a fatal alert message (msg 86)"
1559
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001560requires_openssl_with_fallback_scsv
1561run_test "Fallback SCSV: disabled, openssl client" \
Manuel Pégourié-Gonnard4268ae02015-08-04 12:44:10 +02001562 "$P_SRV debug_level=2" \
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001563 "$O_CLI -tls1_1" \
1564 0 \
1565 -S "received FALLBACK_SCSV" \
1566 -S "inapropriate fallback"
1567
1568requires_openssl_with_fallback_scsv
1569run_test "Fallback SCSV: enabled, openssl client" \
Manuel Pégourié-Gonnard4268ae02015-08-04 12:44:10 +02001570 "$P_SRV debug_level=2" \
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001571 "$O_CLI -tls1_1 -fallback_scsv" \
1572 1 \
1573 -s "received FALLBACK_SCSV" \
1574 -s "inapropriate fallback"
1575
1576requires_openssl_with_fallback_scsv
1577run_test "Fallback SCSV: enabled, max version, openssl client" \
Manuel Pégourié-Gonnard4268ae02015-08-04 12:44:10 +02001578 "$P_SRV debug_level=2" \
Manuel Pégourié-Gonnard01b26992014-10-20 14:05:28 +02001579 "$O_CLI -fallback_scsv" \
1580 0 \
1581 -s "received FALLBACK_SCSV" \
1582 -S "inapropriate fallback"
1583
Andres Amaya Garcia4c761fa2018-07-10 20:08:04 +01001584# Test sending and receiving empty application data records
1585
1586run_test "Encrypt then MAC: empty application data record" \
1587 "$P_SRV auth_mode=none debug_level=4 etm=1" \
1588 "$P_CLI auth_mode=none etm=1 request_size=0 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA" \
1589 0 \
1590 -S "0000: 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f" \
1591 -s "dumping 'input payload after decrypt' (0 bytes)" \
1592 -c "0 bytes written in 1 fragments"
1593
Manuel Pégourié-Gonnard98a879a2020-03-24 10:53:39 +01001594run_test "Encrypt then MAC: disabled, empty application data record" \
Andres Amaya Garcia4c761fa2018-07-10 20:08:04 +01001595 "$P_SRV auth_mode=none debug_level=4 etm=0" \
1596 "$P_CLI auth_mode=none etm=0 request_size=0" \
1597 0 \
1598 -s "dumping 'input payload after decrypt' (0 bytes)" \
1599 -c "0 bytes written in 1 fragments"
1600
1601run_test "Encrypt then MAC, DTLS: empty application data record" \
1602 "$P_SRV auth_mode=none debug_level=4 etm=1 dtls=1" \
1603 "$P_CLI auth_mode=none etm=1 request_size=0 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA dtls=1" \
1604 0 \
1605 -S "0000: 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f" \
1606 -s "dumping 'input payload after decrypt' (0 bytes)" \
1607 -c "0 bytes written in 1 fragments"
1608
Manuel Pégourié-Gonnard98a879a2020-03-24 10:53:39 +01001609run_test "Encrypt then MAC, DTLS: disabled, empty application data record" \
Andres Amaya Garcia4c761fa2018-07-10 20:08:04 +01001610 "$P_SRV auth_mode=none debug_level=4 etm=0 dtls=1" \
1611 "$P_CLI auth_mode=none etm=0 request_size=0 dtls=1" \
1612 0 \
1613 -s "dumping 'input payload after decrypt' (0 bytes)" \
1614 -c "0 bytes written in 1 fragments"
1615
Gilles Peskined50177f2017-05-16 17:53:03 +02001616## ClientHello generated with
1617## "openssl s_client -CAfile tests/data_files/test-ca.crt -tls1_1 -connect localhost:4433 -cipher ..."
1618## then manually twiddling the ciphersuite list.
1619## The ClientHello content is spelled out below as a hex string as
1620## "prefix ciphersuite1 ciphersuite2 ciphersuite3 ciphersuite4 suffix".
1621## The expected response is an inappropriate_fallback alert.
1622requires_openssl_with_fallback_scsv
1623run_test "Fallback SCSV: beginning of list" \
1624 "$P_SRV debug_level=2" \
1625 "$TCP_CLIENT localhost $SRV_PORT '160301003e0100003a03022aafb94308dc22ca1086c65acc00e414384d76b61ecab37df1633b1ae1034dbe000008 5600 0031 0032 0033 0100000900230000000f000101' '15030200020256'" \
1626 0 \
1627 -s "received FALLBACK_SCSV" \
1628 -s "inapropriate fallback"
1629
1630requires_openssl_with_fallback_scsv
1631run_test "Fallback SCSV: end of list" \
1632 "$P_SRV debug_level=2" \
1633 "$TCP_CLIENT localhost $SRV_PORT '160301003e0100003a03022aafb94308dc22ca1086c65acc00e414384d76b61ecab37df1633b1ae1034dbe000008 0031 0032 0033 5600 0100000900230000000f000101' '15030200020256'" \
1634 0 \
1635 -s "received FALLBACK_SCSV" \
1636 -s "inapropriate fallback"
1637
1638## Here the expected response is a valid ServerHello prefix, up to the random.
1639requires_openssl_with_fallback_scsv
1640run_test "Fallback SCSV: not in list" \
1641 "$P_SRV debug_level=2" \
1642 "$TCP_CLIENT localhost $SRV_PORT '160301003e0100003a03022aafb94308dc22ca1086c65acc00e414384d76b61ecab37df1633b1ae1034dbe000008 0056 0031 0032 0033 0100000900230000000f000101' '16030200300200002c0302'" \
1643 0 \
1644 -S "received FALLBACK_SCSV" \
1645 -S "inapropriate fallback"
1646
Manuel Pégourié-Gonnard3ff78232015-01-08 11:15:09 +01001647# Tests for CBC 1/n-1 record splitting
1648
1649run_test "CBC Record splitting: TLS 1.2, no splitting" \
1650 "$P_SRV" \
1651 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
1652 request_size=123 force_version=tls1_2" \
1653 0 \
1654 -s "Read from client: 123 bytes read" \
1655 -S "Read from client: 1 bytes read" \
1656 -S "122 bytes read"
1657
1658run_test "CBC Record splitting: TLS 1.1, no splitting" \
1659 "$P_SRV" \
1660 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
1661 request_size=123 force_version=tls1_1" \
1662 0 \
1663 -s "Read from client: 123 bytes read" \
1664 -S "Read from client: 1 bytes read" \
1665 -S "122 bytes read"
1666
1667run_test "CBC Record splitting: TLS 1.0, splitting" \
1668 "$P_SRV" \
1669 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
1670 request_size=123 force_version=tls1" \
1671 0 \
1672 -S "Read from client: 123 bytes read" \
1673 -s "Read from client: 1 bytes read" \
1674 -s "122 bytes read"
1675
Janos Follathe2681a42016-03-07 15:57:05 +00001676requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Manuel Pégourié-Gonnard3ff78232015-01-08 11:15:09 +01001677run_test "CBC Record splitting: SSLv3, splitting" \
Manuel Pégourié-Gonnard51d81662015-01-14 17:20:46 +01001678 "$P_SRV min_version=ssl3" \
Manuel Pégourié-Gonnard3ff78232015-01-08 11:15:09 +01001679 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
1680 request_size=123 force_version=ssl3" \
1681 0 \
1682 -S "Read from client: 123 bytes read" \
1683 -s "Read from client: 1 bytes read" \
1684 -s "122 bytes read"
1685
1686run_test "CBC Record splitting: TLS 1.0 RC4, no splitting" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01001687 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnard3ff78232015-01-08 11:15:09 +01001688 "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
1689 request_size=123 force_version=tls1" \
1690 0 \
1691 -s "Read from client: 123 bytes read" \
1692 -S "Read from client: 1 bytes read" \
1693 -S "122 bytes read"
1694
1695run_test "CBC Record splitting: TLS 1.0, splitting disabled" \
1696 "$P_SRV" \
1697 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
1698 request_size=123 force_version=tls1 recsplit=0" \
1699 0 \
1700 -s "Read from client: 123 bytes read" \
1701 -S "Read from client: 1 bytes read" \
1702 -S "122 bytes read"
1703
Manuel Pégourié-Gonnarda852cf42015-01-13 20:56:15 +01001704run_test "CBC Record splitting: TLS 1.0, splitting, nbio" \
1705 "$P_SRV nbio=2" \
1706 "$P_CLI nbio=2 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
1707 request_size=123 force_version=tls1" \
1708 0 \
1709 -S "Read from client: 123 bytes read" \
1710 -s "Read from client: 1 bytes read" \
1711 -s "122 bytes read"
1712
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01001713# Tests for Session Tickets
1714
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001715run_test "Session resume using tickets: basic" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001716 "$P_SRV debug_level=3 tickets=1" \
1717 "$P_CLI debug_level=3 tickets=1 reconnect=1" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +01001718 0 \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +01001719 -c "client hello, adding session ticket extension" \
1720 -s "found session ticket extension" \
1721 -s "server hello, adding session ticket extension" \
1722 -c "found session_ticket extension" \
1723 -c "parse new session ticket" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +01001724 -S "session successfully restored from cache" \
1725 -s "session successfully restored from ticket" \
1726 -s "a session has been resumed" \
1727 -c "a session has been resumed"
1728
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001729run_test "Session resume using tickets: cache disabled" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001730 "$P_SRV debug_level=3 tickets=1 cache_max=0" \
1731 "$P_CLI debug_level=3 tickets=1 reconnect=1" \
Manuel Pégourié-Gonnarddbe1ee12014-02-21 09:18:13 +01001732 0 \
1733 -c "client hello, adding session ticket extension" \
1734 -s "found session ticket extension" \
1735 -s "server hello, adding session ticket extension" \
1736 -c "found session_ticket extension" \
1737 -c "parse new session ticket" \
1738 -S "session successfully restored from cache" \
1739 -s "session successfully restored from ticket" \
1740 -s "a session has been resumed" \
1741 -c "a session has been resumed"
1742
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001743run_test "Session resume using tickets: timeout" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001744 "$P_SRV debug_level=3 tickets=1 cache_max=0 ticket_timeout=1" \
1745 "$P_CLI debug_level=3 tickets=1 reconnect=1 reco_delay=2" \
Manuel Pégourié-Gonnarddbe1ee12014-02-21 09:18:13 +01001746 0 \
1747 -c "client hello, adding session ticket extension" \
1748 -s "found session ticket extension" \
1749 -s "server hello, adding session ticket extension" \
1750 -c "found session_ticket extension" \
1751 -c "parse new session ticket" \
1752 -S "session successfully restored from cache" \
1753 -S "session successfully restored from ticket" \
1754 -S "a session has been resumed" \
1755 -C "a session has been resumed"
1756
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001757run_test "Session resume using tickets: openssl server" \
Manuel Pégourié-Gonnardf7a26902014-02-27 12:25:54 +01001758 "$O_SRV" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001759 "$P_CLI debug_level=3 tickets=1 reconnect=1" \
Manuel Pégourié-Gonnardfccd3252014-02-25 17:14:15 +01001760 0 \
1761 -c "client hello, adding session ticket extension" \
1762 -c "found session_ticket extension" \
1763 -c "parse new session ticket" \
1764 -c "a session has been resumed"
1765
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001766run_test "Session resume using tickets: openssl client" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001767 "$P_SRV debug_level=3 tickets=1" \
Manuel Pégourié-Gonnardbc3b16c2014-05-28 23:06:50 +02001768 "( $O_CLI -sess_out $SESSION; \
1769 $O_CLI -sess_in $SESSION; \
1770 rm -f $SESSION )" \
Manuel Pégourié-Gonnardfccd3252014-02-25 17:14:15 +01001771 0 \
1772 -s "found session ticket extension" \
1773 -s "server hello, adding session ticket extension" \
1774 -S "session successfully restored from cache" \
1775 -s "session successfully restored from ticket" \
1776 -s "a session has been resumed"
1777
Hanno Becker1d739932018-08-21 13:55:22 +01001778# Tests for Session Tickets with DTLS
1779
1780run_test "Session resume using tickets, DTLS: basic" \
1781 "$P_SRV debug_level=3 dtls=1 tickets=1" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01001782 "$P_CLI debug_level=3 dtls=1 tickets=1 reconnect=1 skip_close_notify=1" \
Hanno Becker1d739932018-08-21 13:55:22 +01001783 0 \
1784 -c "client hello, adding session ticket extension" \
1785 -s "found session ticket extension" \
1786 -s "server hello, adding session ticket extension" \
1787 -c "found session_ticket extension" \
1788 -c "parse new session ticket" \
1789 -S "session successfully restored from cache" \
1790 -s "session successfully restored from ticket" \
1791 -s "a session has been resumed" \
1792 -c "a session has been resumed"
1793
1794run_test "Session resume using tickets, DTLS: cache disabled" \
1795 "$P_SRV debug_level=3 dtls=1 tickets=1 cache_max=0" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01001796 "$P_CLI debug_level=3 dtls=1 tickets=1 reconnect=1 skip_close_notify=1" \
Hanno Becker1d739932018-08-21 13:55:22 +01001797 0 \
1798 -c "client hello, adding session ticket extension" \
1799 -s "found session ticket extension" \
1800 -s "server hello, adding session ticket extension" \
1801 -c "found session_ticket extension" \
1802 -c "parse new session ticket" \
1803 -S "session successfully restored from cache" \
1804 -s "session successfully restored from ticket" \
1805 -s "a session has been resumed" \
1806 -c "a session has been resumed"
1807
1808run_test "Session resume using tickets, DTLS: timeout" \
1809 "$P_SRV debug_level=3 dtls=1 tickets=1 cache_max=0 ticket_timeout=1" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01001810 "$P_CLI debug_level=3 dtls=1 tickets=1 reconnect=1 skip_close_notify=1 reco_delay=2" \
Hanno Becker1d739932018-08-21 13:55:22 +01001811 0 \
1812 -c "client hello, adding session ticket extension" \
1813 -s "found session ticket extension" \
1814 -s "server hello, adding session ticket extension" \
1815 -c "found session_ticket extension" \
1816 -c "parse new session ticket" \
1817 -S "session successfully restored from cache" \
1818 -S "session successfully restored from ticket" \
1819 -S "a session has been resumed" \
1820 -C "a session has been resumed"
1821
1822run_test "Session resume using tickets, DTLS: openssl server" \
1823 "$O_SRV -dtls1" \
1824 "$P_CLI dtls=1 debug_level=3 tickets=1 reconnect=1" \
1825 0 \
1826 -c "client hello, adding session ticket extension" \
1827 -c "found session_ticket extension" \
1828 -c "parse new session ticket" \
1829 -c "a session has been resumed"
1830
Manuel Pégourié-Gonnarda4700752021-10-13 13:12:47 +02001831# For reasons that aren't fully understood, this test randomly fails with high
Paul Elliott6c649832021-10-13 16:13:44 +01001832# probability with OpenSSL 1.0.2g on the CI, see #5012.
Manuel Pégourié-Gonnarda4700752021-10-13 13:12:47 +02001833requires_openssl_next
Hanno Becker1d739932018-08-21 13:55:22 +01001834run_test "Session resume using tickets, DTLS: openssl client" \
1835 "$P_SRV dtls=1 debug_level=3 tickets=1" \
Manuel Pégourié-Gonnarda4700752021-10-13 13:12:47 +02001836 "( $O_NEXT_CLI -dtls1 -sess_out $SESSION; \
1837 $O_NEXT_CLI -dtls1 -sess_in $SESSION; \
Hanno Becker1d739932018-08-21 13:55:22 +01001838 rm -f $SESSION )" \
1839 0 \
1840 -s "found session ticket extension" \
1841 -s "server hello, adding session ticket extension" \
1842 -S "session successfully restored from cache" \
1843 -s "session successfully restored from ticket" \
1844 -s "a session has been resumed"
1845
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +01001846# Tests for Session Resume based on session-ID and cache
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01001847
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001848run_test "Session resume using cache: tickets enabled on client" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001849 "$P_SRV debug_level=3 tickets=0" \
1850 "$P_CLI debug_level=3 tickets=1 reconnect=1" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +01001851 0 \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +01001852 -c "client hello, adding session ticket extension" \
1853 -s "found session ticket extension" \
1854 -S "server hello, adding session ticket extension" \
1855 -C "found session_ticket extension" \
1856 -C "parse new session ticket" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +01001857 -s "session successfully restored from cache" \
1858 -S "session successfully restored from ticket" \
1859 -s "a session has been resumed" \
1860 -c "a session has been resumed"
1861
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001862run_test "Session resume using cache: tickets enabled on server" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001863 "$P_SRV debug_level=3 tickets=1" \
1864 "$P_CLI debug_level=3 tickets=0 reconnect=1" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +01001865 0 \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +01001866 -C "client hello, adding session ticket extension" \
1867 -S "found session ticket extension" \
1868 -S "server hello, adding session ticket extension" \
1869 -C "found session_ticket extension" \
1870 -C "parse new session ticket" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +01001871 -s "session successfully restored from cache" \
1872 -S "session successfully restored from ticket" \
1873 -s "a session has been resumed" \
1874 -c "a session has been resumed"
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +01001875
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001876run_test "Session resume using cache: cache_max=0" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001877 "$P_SRV debug_level=3 tickets=0 cache_max=0" \
1878 "$P_CLI debug_level=3 tickets=0 reconnect=1" \
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +01001879 0 \
1880 -S "session successfully restored from cache" \
1881 -S "session successfully restored from ticket" \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +01001882 -S "a session has been resumed" \
1883 -C "a session has been resumed"
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +01001884
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001885run_test "Session resume using cache: cache_max=1" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001886 "$P_SRV debug_level=3 tickets=0 cache_max=1" \
1887 "$P_CLI debug_level=3 tickets=0 reconnect=1" \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +01001888 0 \
1889 -s "session successfully restored from cache" \
1890 -S "session successfully restored from ticket" \
1891 -s "a session has been resumed" \
1892 -c "a session has been resumed"
1893
Manuel Pégourié-Gonnard6df31962015-05-04 10:55:47 +02001894run_test "Session resume using cache: timeout > delay" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001895 "$P_SRV debug_level=3 tickets=0" \
1896 "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=0" \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +01001897 0 \
1898 -s "session successfully restored from cache" \
1899 -S "session successfully restored from ticket" \
1900 -s "a session has been resumed" \
1901 -c "a session has been resumed"
1902
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001903run_test "Session resume using cache: timeout < delay" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001904 "$P_SRV debug_level=3 tickets=0 cache_timeout=1" \
1905 "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=2" \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +01001906 0 \
1907 -S "session successfully restored from cache" \
1908 -S "session successfully restored from ticket" \
1909 -S "a session has been resumed" \
1910 -C "a session has been resumed"
1911
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001912run_test "Session resume using cache: no timeout" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001913 "$P_SRV debug_level=3 tickets=0 cache_timeout=0" \
1914 "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=2" \
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +01001915 0 \
1916 -s "session successfully restored from cache" \
1917 -S "session successfully restored from ticket" \
1918 -s "a session has been resumed" \
1919 -c "a session has been resumed"
1920
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001921run_test "Session resume using cache: openssl client" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001922 "$P_SRV debug_level=3 tickets=0" \
Manuel Pégourié-Gonnardbc3b16c2014-05-28 23:06:50 +02001923 "( $O_CLI -sess_out $SESSION; \
1924 $O_CLI -sess_in $SESSION; \
1925 rm -f $SESSION )" \
Manuel Pégourié-Gonnarddb735f62014-02-25 17:57:59 +01001926 0 \
1927 -s "found session ticket extension" \
1928 -S "server hello, adding session ticket extension" \
1929 -s "session successfully restored from cache" \
1930 -S "session successfully restored from ticket" \
1931 -s "a session has been resumed"
1932
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02001933run_test "Session resume using cache: openssl server" \
Manuel Pégourié-Gonnardf7a26902014-02-27 12:25:54 +01001934 "$O_SRV" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02001935 "$P_CLI debug_level=3 tickets=0 reconnect=1" \
Manuel Pégourié-Gonnarddb735f62014-02-25 17:57:59 +01001936 0 \
1937 -C "found session_ticket extension" \
1938 -C "parse new session ticket" \
1939 -c "a session has been resumed"
1940
Hanno Becker1d739932018-08-21 13:55:22 +01001941# Tests for Session Resume based on session-ID and cache, DTLS
1942
1943run_test "Session resume using cache, DTLS: tickets enabled on client" \
1944 "$P_SRV dtls=1 debug_level=3 tickets=0" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01001945 "$P_CLI dtls=1 debug_level=3 tickets=1 reconnect=1 skip_close_notify=1" \
Hanno Becker1d739932018-08-21 13:55:22 +01001946 0 \
1947 -c "client hello, adding session ticket extension" \
1948 -s "found session ticket extension" \
1949 -S "server hello, adding session ticket extension" \
1950 -C "found session_ticket extension" \
1951 -C "parse new session ticket" \
1952 -s "session successfully restored from cache" \
1953 -S "session successfully restored from ticket" \
1954 -s "a session has been resumed" \
1955 -c "a session has been resumed"
1956
1957run_test "Session resume using cache, DTLS: tickets enabled on server" \
1958 "$P_SRV dtls=1 debug_level=3 tickets=1" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01001959 "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1" \
Hanno Becker1d739932018-08-21 13:55:22 +01001960 0 \
1961 -C "client hello, adding session ticket extension" \
1962 -S "found session ticket extension" \
1963 -S "server hello, adding session ticket extension" \
1964 -C "found session_ticket extension" \
1965 -C "parse new session ticket" \
1966 -s "session successfully restored from cache" \
1967 -S "session successfully restored from ticket" \
1968 -s "a session has been resumed" \
1969 -c "a session has been resumed"
1970
1971run_test "Session resume using cache, DTLS: cache_max=0" \
1972 "$P_SRV dtls=1 debug_level=3 tickets=0 cache_max=0" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01001973 "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1" \
Hanno Becker1d739932018-08-21 13:55:22 +01001974 0 \
1975 -S "session successfully restored from cache" \
1976 -S "session successfully restored from ticket" \
1977 -S "a session has been resumed" \
1978 -C "a session has been resumed"
1979
1980run_test "Session resume using cache, DTLS: cache_max=1" \
1981 "$P_SRV dtls=1 debug_level=3 tickets=0 cache_max=1" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01001982 "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1" \
Hanno Becker1d739932018-08-21 13:55:22 +01001983 0 \
1984 -s "session successfully restored from cache" \
1985 -S "session successfully restored from ticket" \
1986 -s "a session has been resumed" \
1987 -c "a session has been resumed"
1988
1989run_test "Session resume using cache, DTLS: timeout > delay" \
1990 "$P_SRV dtls=1 debug_level=3 tickets=0" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01001991 "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1 reco_delay=0" \
Hanno Becker1d739932018-08-21 13:55:22 +01001992 0 \
1993 -s "session successfully restored from cache" \
1994 -S "session successfully restored from ticket" \
1995 -s "a session has been resumed" \
1996 -c "a session has been resumed"
1997
1998run_test "Session resume using cache, DTLS: timeout < delay" \
1999 "$P_SRV dtls=1 debug_level=3 tickets=0 cache_timeout=1" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01002000 "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1 reco_delay=2" \
Hanno Becker1d739932018-08-21 13:55:22 +01002001 0 \
2002 -S "session successfully restored from cache" \
2003 -S "session successfully restored from ticket" \
2004 -S "a session has been resumed" \
2005 -C "a session has been resumed"
2006
2007run_test "Session resume using cache, DTLS: no timeout" \
2008 "$P_SRV dtls=1 debug_level=3 tickets=0 cache_timeout=0" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01002009 "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1 reco_delay=2" \
Hanno Becker1d739932018-08-21 13:55:22 +01002010 0 \
2011 -s "session successfully restored from cache" \
2012 -S "session successfully restored from ticket" \
2013 -s "a session has been resumed" \
2014 -c "a session has been resumed"
2015
Manuel Pégourié-Gonnarda4700752021-10-13 13:12:47 +02002016# For reasons that aren't fully understood, this test randomly fails with high
Paul Elliott6c649832021-10-13 16:13:44 +01002017# probability with OpenSSL 1.0.2g on the CI, see #5012.
Manuel Pégourié-Gonnarda4700752021-10-13 13:12:47 +02002018requires_openssl_next
Hanno Becker1d739932018-08-21 13:55:22 +01002019run_test "Session resume using cache, DTLS: openssl client" \
2020 "$P_SRV dtls=1 debug_level=3 tickets=0" \
Manuel Pégourié-Gonnarda4700752021-10-13 13:12:47 +02002021 "( $O_NEXT_CLI -dtls1 -sess_out $SESSION; \
2022 $O_NEXT_CLI -dtls1 -sess_in $SESSION; \
Hanno Becker1d739932018-08-21 13:55:22 +01002023 rm -f $SESSION )" \
2024 0 \
2025 -s "found session ticket extension" \
2026 -S "server hello, adding session ticket extension" \
2027 -s "session successfully restored from cache" \
2028 -S "session successfully restored from ticket" \
2029 -s "a session has been resumed"
2030
2031run_test "Session resume using cache, DTLS: openssl server" \
2032 "$O_SRV -dtls1" \
2033 "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1" \
2034 0 \
2035 -C "found session_ticket extension" \
2036 -C "parse new session ticket" \
2037 -c "a session has been resumed"
2038
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002039# Tests for Max Fragment Length extension
2040
Hanno Becker4aed27e2017-09-18 15:00:34 +01002041requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Hanno Beckerc5266962017-09-18 15:01:50 +01002042run_test "Max fragment length: enabled, default" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002043 "$P_SRV debug_level=3" \
2044 "$P_CLI debug_level=3" \
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +01002045 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002046 -c "Maximum fragment length is $MAX_CONTENT_LEN" \
2047 -s "Maximum fragment length is $MAX_CONTENT_LEN" \
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +01002048 -C "client hello, adding max_fragment_length extension" \
2049 -S "found max fragment length extension" \
2050 -S "server hello, max_fragment_length extension" \
2051 -C "found max_fragment_length extension"
2052
Hanno Becker4aed27e2017-09-18 15:00:34 +01002053requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Hanno Beckerc5266962017-09-18 15:01:50 +01002054run_test "Max fragment length: enabled, default, larger message" \
2055 "$P_SRV debug_level=3" \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002056 "$P_CLI debug_level=3 request_size=$(( $MAX_CONTENT_LEN + 1))" \
Hanno Beckerc5266962017-09-18 15:01:50 +01002057 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002058 -c "Maximum fragment length is $MAX_CONTENT_LEN" \
2059 -s "Maximum fragment length is $MAX_CONTENT_LEN" \
Hanno Beckerc5266962017-09-18 15:01:50 +01002060 -C "client hello, adding max_fragment_length extension" \
2061 -S "found max fragment length extension" \
2062 -S "server hello, max_fragment_length extension" \
2063 -C "found max_fragment_length extension" \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002064 -c "$(( $MAX_CONTENT_LEN + 1)) bytes written in 2 fragments" \
2065 -s "$MAX_CONTENT_LEN bytes read" \
Hanno Becker9cfabe32017-10-18 14:42:01 +01002066 -s "1 bytes read"
Hanno Beckerc5266962017-09-18 15:01:50 +01002067
2068requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
2069run_test "Max fragment length, DTLS: enabled, default, larger message" \
2070 "$P_SRV debug_level=3 dtls=1" \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002071 "$P_CLI debug_level=3 dtls=1 request_size=$(( $MAX_CONTENT_LEN + 1))" \
Hanno Beckerc5266962017-09-18 15:01:50 +01002072 1 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002073 -c "Maximum fragment length is $MAX_CONTENT_LEN" \
2074 -s "Maximum fragment length is $MAX_CONTENT_LEN" \
Hanno Beckerc5266962017-09-18 15:01:50 +01002075 -C "client hello, adding max_fragment_length extension" \
2076 -S "found max fragment length extension" \
2077 -S "server hello, max_fragment_length extension" \
2078 -C "found max_fragment_length extension" \
2079 -c "fragment larger than.*maximum "
2080
Angus Grattonc4dd0732018-04-11 16:28:39 +10002081# Run some tests with MBEDTLS_SSL_MAX_FRAGMENT_LENGTH disabled
2082# (session fragment length will be 16384 regardless of mbedtls
2083# content length configuration.)
2084
Hanno Beckerc5266962017-09-18 15:01:50 +01002085requires_config_disabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
2086run_test "Max fragment length: disabled, larger message" \
2087 "$P_SRV debug_level=3" \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002088 "$P_CLI debug_level=3 request_size=$(( $MAX_CONTENT_LEN + 1))" \
Hanno Beckerc5266962017-09-18 15:01:50 +01002089 0 \
2090 -C "Maximum fragment length is 16384" \
2091 -S "Maximum fragment length is 16384" \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002092 -c "$(( $MAX_CONTENT_LEN + 1)) bytes written in 2 fragments" \
2093 -s "$MAX_CONTENT_LEN bytes read" \
Hanno Becker9cfabe32017-10-18 14:42:01 +01002094 -s "1 bytes read"
Hanno Beckerc5266962017-09-18 15:01:50 +01002095
2096requires_config_disabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Yuto Takano2e580ce2021-06-21 19:43:33 +01002097run_test "Max fragment length, DTLS: disabled, larger message" \
Hanno Beckerc5266962017-09-18 15:01:50 +01002098 "$P_SRV debug_level=3 dtls=1" \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002099 "$P_CLI debug_level=3 dtls=1 request_size=$(( $MAX_CONTENT_LEN + 1))" \
Hanno Beckerc5266962017-09-18 15:01:50 +01002100 1 \
2101 -C "Maximum fragment length is 16384" \
2102 -S "Maximum fragment length is 16384" \
2103 -c "fragment larger than.*maximum "
2104
Yuto Takano0807e1d2021-07-02 10:10:49 +01002105requires_max_content_len 4096
Hanno Beckerc5266962017-09-18 15:01:50 +01002106requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002107run_test "Max fragment length: used by client" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002108 "$P_SRV debug_level=3" \
2109 "$P_CLI debug_level=3 max_frag_len=4096" \
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +01002110 0 \
Manuel Pégourié-Gonnarda2cda6b2015-08-31 18:30:52 +02002111 -c "Maximum fragment length is 4096" \
2112 -s "Maximum fragment length is 4096" \
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +01002113 -c "client hello, adding max_fragment_length extension" \
2114 -s "found max fragment length extension" \
2115 -s "server hello, max_fragment_length extension" \
2116 -c "found max_fragment_length extension"
2117
Yuto Takano0807e1d2021-07-02 10:10:49 +01002118requires_max_content_len 4096
Hanno Becker4aed27e2017-09-18 15:00:34 +01002119requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002120run_test "Max fragment length: used by server" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002121 "$P_SRV debug_level=3 max_frag_len=4096" \
2122 "$P_CLI debug_level=3" \
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +01002123 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10002124 -c "Maximum fragment length is $MAX_CONTENT_LEN" \
Manuel Pégourié-Gonnarda2cda6b2015-08-31 18:30:52 +02002125 -s "Maximum fragment length is 4096" \
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +01002126 -C "client hello, adding max_fragment_length extension" \
2127 -S "found max fragment length extension" \
2128 -S "server hello, max_fragment_length extension" \
2129 -C "found max_fragment_length extension"
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002130
Yuto Takano0807e1d2021-07-02 10:10:49 +01002131requires_max_content_len 4096
Hanno Becker4aed27e2017-09-18 15:00:34 +01002132requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002133requires_gnutls
2134run_test "Max fragment length: gnutls server" \
Manuel Pégourié-Gonnardbaa7f072014-08-20 20:15:53 +02002135 "$G_SRV" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002136 "$P_CLI debug_level=3 max_frag_len=4096" \
Manuel Pégourié-Gonnardbaa7f072014-08-20 20:15:53 +02002137 0 \
Manuel Pégourié-Gonnarda2cda6b2015-08-31 18:30:52 +02002138 -c "Maximum fragment length is 4096" \
Manuel Pégourié-Gonnardbaa7f072014-08-20 20:15:53 +02002139 -c "client hello, adding max_fragment_length extension" \
2140 -c "found max_fragment_length extension"
2141
Yuto Takano0807e1d2021-07-02 10:10:49 +01002142requires_max_content_len 2048
Hanno Becker4aed27e2017-09-18 15:00:34 +01002143requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Manuel Pégourié-Gonnard37e08e12014-10-13 17:55:52 +02002144run_test "Max fragment length: client, message just fits" \
2145 "$P_SRV debug_level=3" \
2146 "$P_CLI debug_level=3 max_frag_len=2048 request_size=2048" \
2147 0 \
Manuel Pégourié-Gonnarda2cda6b2015-08-31 18:30:52 +02002148 -c "Maximum fragment length is 2048" \
2149 -s "Maximum fragment length is 2048" \
Manuel Pégourié-Gonnard37e08e12014-10-13 17:55:52 +02002150 -c "client hello, adding max_fragment_length extension" \
2151 -s "found max fragment length extension" \
2152 -s "server hello, max_fragment_length extension" \
2153 -c "found max_fragment_length extension" \
2154 -c "2048 bytes written in 1 fragments" \
2155 -s "2048 bytes read"
2156
Yuto Takano0807e1d2021-07-02 10:10:49 +01002157requires_max_content_len 2048
Hanno Becker4aed27e2017-09-18 15:00:34 +01002158requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Manuel Pégourié-Gonnard37e08e12014-10-13 17:55:52 +02002159run_test "Max fragment length: client, larger message" \
2160 "$P_SRV debug_level=3" \
2161 "$P_CLI debug_level=3 max_frag_len=2048 request_size=2345" \
2162 0 \
Manuel Pégourié-Gonnarda2cda6b2015-08-31 18:30:52 +02002163 -c "Maximum fragment length is 2048" \
2164 -s "Maximum fragment length is 2048" \
Manuel Pégourié-Gonnard37e08e12014-10-13 17:55:52 +02002165 -c "client hello, adding max_fragment_length extension" \
2166 -s "found max fragment length extension" \
2167 -s "server hello, max_fragment_length extension" \
2168 -c "found max_fragment_length extension" \
2169 -c "2345 bytes written in 2 fragments" \
2170 -s "2048 bytes read" \
2171 -s "297 bytes read"
2172
Yuto Takano0807e1d2021-07-02 10:10:49 +01002173requires_max_content_len 2048
Hanno Becker4aed27e2017-09-18 15:00:34 +01002174requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Manuel Pégourié-Gonnard23eb74d2015-01-21 14:37:13 +00002175run_test "Max fragment length: DTLS client, larger message" \
Manuel Pégourié-Gonnard37e08e12014-10-13 17:55:52 +02002176 "$P_SRV debug_level=3 dtls=1" \
2177 "$P_CLI debug_level=3 dtls=1 max_frag_len=2048 request_size=2345" \
2178 1 \
Manuel Pégourié-Gonnarda2cda6b2015-08-31 18:30:52 +02002179 -c "Maximum fragment length is 2048" \
2180 -s "Maximum fragment length is 2048" \
Manuel Pégourié-Gonnard37e08e12014-10-13 17:55:52 +02002181 -c "client hello, adding max_fragment_length extension" \
2182 -s "found max fragment length extension" \
2183 -s "server hello, max_fragment_length extension" \
2184 -c "found max_fragment_length extension" \
2185 -c "fragment larger than.*maximum"
2186
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002187# Tests for renegotiation
2188
Hanno Becker6a243642017-10-12 15:18:45 +01002189# Renegotiation SCSV always added, regardless of SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002190run_test "Renegotiation: none, for reference" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002191 "$P_SRV debug_level=3 exchanges=2 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002192 "$P_CLI debug_level=3 exchanges=2" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002193 0 \
2194 -C "client hello, adding renegotiation extension" \
2195 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2196 -S "found renegotiation extension" \
2197 -s "server hello, secure renegotiation extension" \
2198 -c "found renegotiation extension" \
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +01002199 -C "=> renegotiate" \
2200 -S "=> renegotiate" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002201 -S "write hello request"
2202
Hanno Becker6a243642017-10-12 15:18:45 +01002203requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002204run_test "Renegotiation: client-initiated" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002205 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002206 "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002207 0 \
2208 -c "client hello, adding renegotiation extension" \
2209 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2210 -s "found renegotiation extension" \
2211 -s "server hello, secure renegotiation extension" \
2212 -c "found renegotiation extension" \
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +01002213 -c "=> renegotiate" \
2214 -s "=> renegotiate" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002215 -S "write hello request"
2216
Hanno Becker6a243642017-10-12 15:18:45 +01002217requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002218run_test "Renegotiation: server-initiated" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002219 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002220 "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002221 0 \
2222 -c "client hello, adding renegotiation extension" \
2223 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2224 -s "found renegotiation extension" \
2225 -s "server hello, secure renegotiation extension" \
2226 -c "found renegotiation extension" \
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +01002227 -c "=> renegotiate" \
2228 -s "=> renegotiate" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002229 -s "write hello request"
2230
Janos Follathb0f148c2017-10-05 12:29:42 +01002231# Checks that no Signature Algorithm with SHA-1 gets negotiated. Negotiating SHA-1 would mean that
2232# the server did not parse the Signature Algorithm extension. This test is valid only if an MD
2233# algorithm stronger than SHA-1 is enabled in config.h
Hanno Becker6a243642017-10-12 15:18:45 +01002234requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Janos Follathb0f148c2017-10-05 12:29:42 +01002235run_test "Renegotiation: Signature Algorithms parsing, client-initiated" \
2236 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional" \
2237 "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \
2238 0 \
2239 -c "client hello, adding renegotiation extension" \
2240 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2241 -s "found renegotiation extension" \
2242 -s "server hello, secure renegotiation extension" \
2243 -c "found renegotiation extension" \
2244 -c "=> renegotiate" \
2245 -s "=> renegotiate" \
2246 -S "write hello request" \
2247 -S "client hello v3, signature_algorithm ext: 2" # Is SHA-1 negotiated?
2248
2249# Checks that no Signature Algorithm with SHA-1 gets negotiated. Negotiating SHA-1 would mean that
2250# the server did not parse the Signature Algorithm extension. This test is valid only if an MD
2251# algorithm stronger than SHA-1 is enabled in config.h
Hanno Becker6a243642017-10-12 15:18:45 +01002252requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Janos Follathb0f148c2017-10-05 12:29:42 +01002253run_test "Renegotiation: Signature Algorithms parsing, server-initiated" \
2254 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \
2255 "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \
2256 0 \
2257 -c "client hello, adding renegotiation extension" \
2258 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2259 -s "found renegotiation extension" \
2260 -s "server hello, secure renegotiation extension" \
2261 -c "found renegotiation extension" \
2262 -c "=> renegotiate" \
2263 -s "=> renegotiate" \
2264 -s "write hello request" \
2265 -S "client hello v3, signature_algorithm ext: 2" # Is SHA-1 negotiated?
2266
Hanno Becker6a243642017-10-12 15:18:45 +01002267requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002268run_test "Renegotiation: double" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002269 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002270 "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002271 0 \
2272 -c "client hello, adding renegotiation extension" \
2273 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2274 -s "found renegotiation extension" \
2275 -s "server hello, secure renegotiation extension" \
2276 -c "found renegotiation extension" \
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +01002277 -c "=> renegotiate" \
2278 -s "=> renegotiate" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002279 -s "write hello request"
2280
Hanno Becker6a243642017-10-12 15:18:45 +01002281requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002282run_test "Renegotiation: client-initiated, server-rejected" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002283 "$P_SRV debug_level=3 exchanges=2 renegotiation=0 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002284 "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002285 1 \
2286 -c "client hello, adding renegotiation extension" \
2287 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2288 -S "found renegotiation extension" \
2289 -s "server hello, secure renegotiation extension" \
2290 -c "found renegotiation extension" \
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +01002291 -c "=> renegotiate" \
2292 -S "=> renegotiate" \
Manuel Pégourié-Gonnardfae355e2014-07-04 14:32:27 +02002293 -S "write hello request" \
Manuel Pégourié-Gonnard65919622014-08-19 12:50:30 +02002294 -c "SSL - Unexpected message at ServerHello in renegotiation" \
Manuel Pégourié-Gonnardfae355e2014-07-04 14:32:27 +02002295 -c "failed"
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002296
Hanno Becker6a243642017-10-12 15:18:45 +01002297requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002298run_test "Renegotiation: server-initiated, client-rejected, default" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002299 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002300 "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002301 0 \
2302 -C "client hello, adding renegotiation extension" \
2303 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2304 -S "found renegotiation extension" \
2305 -s "server hello, secure renegotiation extension" \
2306 -c "found renegotiation extension" \
Manuel Pégourié-Gonnardc73339f2014-02-26 16:35:27 +01002307 -C "=> renegotiate" \
2308 -S "=> renegotiate" \
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +01002309 -s "write hello request" \
Manuel Pégourié-Gonnarda9964db2014-07-03 19:29:16 +02002310 -S "SSL - An unexpected message was received from our peer" \
2311 -S "failed"
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +01002312
Hanno Becker6a243642017-10-12 15:18:45 +01002313requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002314run_test "Renegotiation: server-initiated, client-rejected, not enforced" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002315 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002316 renego_delay=-1 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002317 "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \
Manuel Pégourié-Gonnardfae355e2014-07-04 14:32:27 +02002318 0 \
2319 -C "client hello, adding renegotiation extension" \
2320 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2321 -S "found renegotiation extension" \
2322 -s "server hello, secure renegotiation extension" \
2323 -c "found renegotiation extension" \
2324 -C "=> renegotiate" \
2325 -S "=> renegotiate" \
2326 -s "write hello request" \
2327 -S "SSL - An unexpected message was received from our peer" \
2328 -S "failed"
2329
Manuel Pégourié-Gonnarda8c0a0d2014-08-15 12:07:38 +02002330# delay 2 for 1 alert record + 1 application data record
Hanno Becker6a243642017-10-12 15:18:45 +01002331requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002332run_test "Renegotiation: server-initiated, client-rejected, delay 2" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002333 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002334 renego_delay=2 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002335 "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \
Manuel Pégourié-Gonnardfae355e2014-07-04 14:32:27 +02002336 0 \
2337 -C "client hello, adding renegotiation extension" \
2338 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2339 -S "found renegotiation extension" \
2340 -s "server hello, secure renegotiation extension" \
2341 -c "found renegotiation extension" \
2342 -C "=> renegotiate" \
2343 -S "=> renegotiate" \
2344 -s "write hello request" \
2345 -S "SSL - An unexpected message was received from our peer" \
2346 -S "failed"
2347
Hanno Becker6a243642017-10-12 15:18:45 +01002348requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002349run_test "Renegotiation: server-initiated, client-rejected, delay 0" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002350 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002351 renego_delay=0 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002352 "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \
Manuel Pégourié-Gonnardfae355e2014-07-04 14:32:27 +02002353 0 \
2354 -C "client hello, adding renegotiation extension" \
2355 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2356 -S "found renegotiation extension" \
2357 -s "server hello, secure renegotiation extension" \
2358 -c "found renegotiation extension" \
2359 -C "=> renegotiate" \
2360 -S "=> renegotiate" \
2361 -s "write hello request" \
Manuel Pégourié-Gonnarda8c0a0d2014-08-15 12:07:38 +02002362 -s "SSL - An unexpected message was received from our peer"
Manuel Pégourié-Gonnardfae355e2014-07-04 14:32:27 +02002363
Hanno Becker6a243642017-10-12 15:18:45 +01002364requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002365run_test "Renegotiation: server-initiated, client-accepted, delay 0" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002366 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002367 renego_delay=0 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002368 "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \
Manuel Pégourié-Gonnardfae355e2014-07-04 14:32:27 +02002369 0 \
2370 -c "client hello, adding renegotiation extension" \
2371 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2372 -s "found renegotiation extension" \
2373 -s "server hello, secure renegotiation extension" \
2374 -c "found renegotiation extension" \
2375 -c "=> renegotiate" \
2376 -s "=> renegotiate" \
2377 -s "write hello request" \
2378 -S "SSL - An unexpected message was received from our peer" \
2379 -S "failed"
2380
Hanno Becker6a243642017-10-12 15:18:45 +01002381requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard590f4162014-11-05 14:23:03 +01002382run_test "Renegotiation: periodic, just below period" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002383 "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \
Manuel Pégourié-Gonnard590f4162014-11-05 14:23:03 +01002384 "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \
2385 0 \
2386 -C "client hello, adding renegotiation extension" \
2387 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2388 -S "found renegotiation extension" \
2389 -s "server hello, secure renegotiation extension" \
2390 -c "found renegotiation extension" \
2391 -S "record counter limit reached: renegotiate" \
2392 -C "=> renegotiate" \
2393 -S "=> renegotiate" \
2394 -S "write hello request" \
2395 -S "SSL - An unexpected message was received from our peer" \
2396 -S "failed"
2397
Manuel Pégourié-Gonnard9835bc02015-01-14 14:41:58 +01002398# one extra exchange to be able to complete renego
Hanno Becker6a243642017-10-12 15:18:45 +01002399requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard590f4162014-11-05 14:23:03 +01002400run_test "Renegotiation: periodic, just above period" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002401 "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \
Manuel Pégourié-Gonnard9835bc02015-01-14 14:41:58 +01002402 "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \
Manuel Pégourié-Gonnard590f4162014-11-05 14:23:03 +01002403 0 \
2404 -c "client hello, adding renegotiation extension" \
2405 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2406 -s "found renegotiation extension" \
2407 -s "server hello, secure renegotiation extension" \
2408 -c "found renegotiation extension" \
2409 -s "record counter limit reached: renegotiate" \
2410 -c "=> renegotiate" \
2411 -s "=> renegotiate" \
2412 -s "write hello request" \
2413 -S "SSL - An unexpected message was received from our peer" \
2414 -S "failed"
2415
Hanno Becker6a243642017-10-12 15:18:45 +01002416requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard590f4162014-11-05 14:23:03 +01002417run_test "Renegotiation: periodic, two times period" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002418 "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \
Manuel Pégourié-Gonnard9835bc02015-01-14 14:41:58 +01002419 "$P_CLI debug_level=3 exchanges=7 renegotiation=1" \
Manuel Pégourié-Gonnard590f4162014-11-05 14:23:03 +01002420 0 \
2421 -c "client hello, adding renegotiation extension" \
2422 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2423 -s "found renegotiation extension" \
2424 -s "server hello, secure renegotiation extension" \
2425 -c "found renegotiation extension" \
2426 -s "record counter limit reached: renegotiate" \
2427 -c "=> renegotiate" \
2428 -s "=> renegotiate" \
2429 -s "write hello request" \
2430 -S "SSL - An unexpected message was received from our peer" \
2431 -S "failed"
2432
Hanno Becker6a243642017-10-12 15:18:45 +01002433requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard590f4162014-11-05 14:23:03 +01002434run_test "Renegotiation: periodic, above period, disabled" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002435 "$P_SRV debug_level=3 exchanges=9 renegotiation=0 renego_period=3 auth_mode=optional" \
Manuel Pégourié-Gonnard590f4162014-11-05 14:23:03 +01002436 "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \
2437 0 \
2438 -C "client hello, adding renegotiation extension" \
2439 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2440 -S "found renegotiation extension" \
2441 -s "server hello, secure renegotiation extension" \
2442 -c "found renegotiation extension" \
2443 -S "record counter limit reached: renegotiate" \
2444 -C "=> renegotiate" \
2445 -S "=> renegotiate" \
2446 -S "write hello request" \
2447 -S "SSL - An unexpected message was received from our peer" \
2448 -S "failed"
2449
Hanno Becker6a243642017-10-12 15:18:45 +01002450requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002451run_test "Renegotiation: nbio, client-initiated" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002452 "$P_SRV debug_level=3 nbio=2 exchanges=2 renegotiation=1 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002453 "$P_CLI debug_level=3 nbio=2 exchanges=2 renegotiation=1 renegotiate=1" \
Manuel Pégourié-Gonnardf07f4212014-08-15 19:04:47 +02002454 0 \
2455 -c "client hello, adding renegotiation extension" \
2456 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2457 -s "found renegotiation extension" \
2458 -s "server hello, secure renegotiation extension" \
2459 -c "found renegotiation extension" \
2460 -c "=> renegotiate" \
2461 -s "=> renegotiate" \
2462 -S "write hello request"
2463
Hanno Becker6a243642017-10-12 15:18:45 +01002464requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002465run_test "Renegotiation: nbio, server-initiated" \
Manuel Pégourié-Gonnardfa44f202015-03-27 17:52:25 +01002466 "$P_SRV debug_level=3 nbio=2 exchanges=2 renegotiation=1 renegotiate=1 auth_mode=optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002467 "$P_CLI debug_level=3 nbio=2 exchanges=2 renegotiation=1" \
Manuel Pégourié-Gonnardf07f4212014-08-15 19:04:47 +02002468 0 \
2469 -c "client hello, adding renegotiation extension" \
2470 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2471 -s "found renegotiation extension" \
2472 -s "server hello, secure renegotiation extension" \
2473 -c "found renegotiation extension" \
2474 -c "=> renegotiate" \
2475 -s "=> renegotiate" \
2476 -s "write hello request"
2477
Hanno Becker6a243642017-10-12 15:18:45 +01002478requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002479run_test "Renegotiation: openssl server, client-initiated" \
Manuel Pégourié-Gonnarda7756172014-08-31 18:37:01 +02002480 "$O_SRV -www" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002481 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \
Manuel Pégourié-Gonnard51362962014-08-30 21:22:47 +02002482 0 \
2483 -c "client hello, adding renegotiation extension" \
2484 -c "found renegotiation extension" \
2485 -c "=> renegotiate" \
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002486 -C "ssl_hanshake() returned" \
Manuel Pégourié-Gonnard51362962014-08-30 21:22:47 +02002487 -C "error" \
2488 -c "HTTP/1.0 200 [Oo][Kk]"
2489
Paul Bakker539d9722015-02-08 16:18:35 +01002490requires_gnutls
Hanno Becker6a243642017-10-12 15:18:45 +01002491requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002492run_test "Renegotiation: gnutls server strict, client-initiated" \
2493 "$G_SRV --priority=NORMAL:%SAFE_RENEGOTIATION" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002494 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \
Manuel Pégourié-Gonnard51362962014-08-30 21:22:47 +02002495 0 \
2496 -c "client hello, adding renegotiation extension" \
2497 -c "found renegotiation extension" \
2498 -c "=> renegotiate" \
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002499 -C "ssl_hanshake() returned" \
Manuel Pégourié-Gonnard51362962014-08-30 21:22:47 +02002500 -C "error" \
2501 -c "HTTP/1.0 200 [Oo][Kk]"
2502
Paul Bakker539d9722015-02-08 16:18:35 +01002503requires_gnutls
Hanno Becker6a243642017-10-12 15:18:45 +01002504requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002505run_test "Renegotiation: gnutls server unsafe, client-initiated default" \
2506 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
2507 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \
2508 1 \
2509 -c "client hello, adding renegotiation extension" \
2510 -C "found renegotiation extension" \
2511 -c "=> renegotiate" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002512 -c "mbedtls_ssl_handshake() returned" \
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002513 -c "error" \
2514 -C "HTTP/1.0 200 [Oo][Kk]"
2515
Paul Bakker539d9722015-02-08 16:18:35 +01002516requires_gnutls
Hanno Becker6a243642017-10-12 15:18:45 +01002517requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002518run_test "Renegotiation: gnutls server unsafe, client-inititated no legacy" \
2519 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
2520 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1 \
2521 allow_legacy=0" \
2522 1 \
2523 -c "client hello, adding renegotiation extension" \
2524 -C "found renegotiation extension" \
2525 -c "=> renegotiate" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002526 -c "mbedtls_ssl_handshake() returned" \
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002527 -c "error" \
2528 -C "HTTP/1.0 200 [Oo][Kk]"
2529
Paul Bakker539d9722015-02-08 16:18:35 +01002530requires_gnutls
Hanno Becker6a243642017-10-12 15:18:45 +01002531requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002532run_test "Renegotiation: gnutls server unsafe, client-inititated legacy" \
2533 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
2534 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1 \
2535 allow_legacy=1" \
2536 0 \
2537 -c "client hello, adding renegotiation extension" \
2538 -C "found renegotiation extension" \
2539 -c "=> renegotiate" \
2540 -C "ssl_hanshake() returned" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002541 -C "error" \
2542 -c "HTTP/1.0 200 [Oo][Kk]"
2543
Hanno Becker6a243642017-10-12 15:18:45 +01002544requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard30d16eb2014-08-19 17:43:50 +02002545run_test "Renegotiation: DTLS, client-initiated" \
2546 "$P_SRV debug_level=3 dtls=1 exchanges=2 renegotiation=1" \
2547 "$P_CLI debug_level=3 dtls=1 exchanges=2 renegotiation=1 renegotiate=1" \
2548 0 \
2549 -c "client hello, adding renegotiation extension" \
2550 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2551 -s "found renegotiation extension" \
2552 -s "server hello, secure renegotiation extension" \
2553 -c "found renegotiation extension" \
2554 -c "=> renegotiate" \
2555 -s "=> renegotiate" \
2556 -S "write hello request"
2557
Hanno Becker6a243642017-10-12 15:18:45 +01002558requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnardc392b242014-08-19 17:53:11 +02002559run_test "Renegotiation: DTLS, server-initiated" \
2560 "$P_SRV debug_level=3 dtls=1 exchanges=2 renegotiation=1 renegotiate=1" \
Manuel Pégourié-Gonnarddf9a0a82014-10-02 14:17:18 +02002561 "$P_CLI debug_level=3 dtls=1 exchanges=2 renegotiation=1 \
2562 read_timeout=1000 max_resend=2" \
Manuel Pégourié-Gonnardc392b242014-08-19 17:53:11 +02002563 0 \
2564 -c "client hello, adding renegotiation extension" \
2565 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2566 -s "found renegotiation extension" \
2567 -s "server hello, secure renegotiation extension" \
2568 -c "found renegotiation extension" \
2569 -c "=> renegotiate" \
2570 -s "=> renegotiate" \
2571 -s "write hello request"
2572
Hanno Becker6a243642017-10-12 15:18:45 +01002573requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Andres AG692ad842017-01-19 16:30:57 +00002574run_test "Renegotiation: DTLS, renego_period overflow" \
2575 "$P_SRV debug_level=3 dtls=1 exchanges=4 renegotiation=1 renego_period=18446462598732840962 auth_mode=optional" \
2576 "$P_CLI debug_level=3 dtls=1 exchanges=4 renegotiation=1" \
2577 0 \
2578 -c "client hello, adding renegotiation extension" \
2579 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
2580 -s "found renegotiation extension" \
2581 -s "server hello, secure renegotiation extension" \
2582 -s "record counter limit reached: renegotiate" \
2583 -c "=> renegotiate" \
2584 -s "=> renegotiate" \
Hanno Becker6a243642017-10-12 15:18:45 +01002585 -s "write hello request"
Andres AG692ad842017-01-19 16:30:57 +00002586
Manuel Pégourié-Gonnard96999962015-02-17 16:02:37 +00002587requires_gnutls
Hanno Becker6a243642017-10-12 15:18:45 +01002588requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnardf1499f62014-08-31 17:13:13 +02002589run_test "Renegotiation: DTLS, gnutls server, client-initiated" \
2590 "$G_SRV -u --mtu 4096" \
2591 "$P_CLI debug_level=3 dtls=1 exchanges=1 renegotiation=1 renegotiate=1" \
2592 0 \
2593 -c "client hello, adding renegotiation extension" \
2594 -c "found renegotiation extension" \
2595 -c "=> renegotiate" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002596 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnardf1499f62014-08-31 17:13:13 +02002597 -C "error" \
2598 -s "Extra-header:"
2599
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002600# Test for the "secure renegotation" extension only (no actual renegotiation)
2601
Paul Bakker539d9722015-02-08 16:18:35 +01002602requires_gnutls
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002603run_test "Renego ext: gnutls server strict, client default" \
2604 "$G_SRV --priority=NORMAL:%SAFE_RENEGOTIATION" \
2605 "$P_CLI debug_level=3" \
2606 0 \
2607 -c "found renegotiation extension" \
2608 -C "error" \
2609 -c "HTTP/1.0 200 [Oo][Kk]"
2610
Paul Bakker539d9722015-02-08 16:18:35 +01002611requires_gnutls
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002612run_test "Renego ext: gnutls server unsafe, client default" \
2613 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
2614 "$P_CLI debug_level=3" \
2615 0 \
2616 -C "found renegotiation extension" \
2617 -C "error" \
2618 -c "HTTP/1.0 200 [Oo][Kk]"
2619
Paul Bakker539d9722015-02-08 16:18:35 +01002620requires_gnutls
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002621run_test "Renego ext: gnutls server unsafe, client break legacy" \
2622 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
2623 "$P_CLI debug_level=3 allow_legacy=-1" \
2624 1 \
2625 -C "found renegotiation extension" \
2626 -c "error" \
2627 -C "HTTP/1.0 200 [Oo][Kk]"
2628
Paul Bakker539d9722015-02-08 16:18:35 +01002629requires_gnutls
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002630run_test "Renego ext: gnutls client strict, server default" \
2631 "$P_SRV debug_level=3" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002632 "$G_CLI --priority=NORMAL:%SAFE_RENEGOTIATION localhost" \
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002633 0 \
2634 -s "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \
2635 -s "server hello, secure renegotiation extension"
2636
Paul Bakker539d9722015-02-08 16:18:35 +01002637requires_gnutls
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002638run_test "Renego ext: gnutls client unsafe, server default" \
2639 "$P_SRV debug_level=3" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002640 "$G_CLI --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION localhost" \
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002641 0 \
2642 -S "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \
2643 -S "server hello, secure renegotiation extension"
2644
Paul Bakker539d9722015-02-08 16:18:35 +01002645requires_gnutls
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002646run_test "Renego ext: gnutls client unsafe, server break legacy" \
2647 "$P_SRV debug_level=3 allow_legacy=-1" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002648 "$G_CLI --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION localhost" \
Manuel Pégourié-Gonnard85d915b2014-11-03 20:10:36 +01002649 1 \
2650 -S "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \
2651 -S "server hello, secure renegotiation extension"
2652
Janos Follath0b242342016-02-17 10:11:21 +00002653# Tests for silently dropping trailing extra bytes in .der certificates
2654
2655requires_gnutls
2656run_test "DER format: no trailing bytes" \
2657 "$P_SRV crt_file=data_files/server5-der0.crt \
2658 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002659 "$G_CLI localhost" \
Janos Follath0b242342016-02-17 10:11:21 +00002660 0 \
2661 -c "Handshake was completed" \
2662
2663requires_gnutls
2664run_test "DER format: with a trailing zero byte" \
2665 "$P_SRV crt_file=data_files/server5-der1a.crt \
2666 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002667 "$G_CLI localhost" \
Janos Follath0b242342016-02-17 10:11:21 +00002668 0 \
2669 -c "Handshake was completed" \
2670
2671requires_gnutls
2672run_test "DER format: with a trailing random byte" \
2673 "$P_SRV crt_file=data_files/server5-der1b.crt \
2674 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002675 "$G_CLI localhost" \
Janos Follath0b242342016-02-17 10:11:21 +00002676 0 \
2677 -c "Handshake was completed" \
2678
2679requires_gnutls
2680run_test "DER format: with 2 trailing random bytes" \
2681 "$P_SRV crt_file=data_files/server5-der2.crt \
2682 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002683 "$G_CLI localhost" \
Janos Follath0b242342016-02-17 10:11:21 +00002684 0 \
2685 -c "Handshake was completed" \
2686
2687requires_gnutls
2688run_test "DER format: with 4 trailing random bytes" \
2689 "$P_SRV crt_file=data_files/server5-der4.crt \
2690 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002691 "$G_CLI localhost" \
Janos Follath0b242342016-02-17 10:11:21 +00002692 0 \
2693 -c "Handshake was completed" \
2694
2695requires_gnutls
2696run_test "DER format: with 8 trailing random bytes" \
2697 "$P_SRV crt_file=data_files/server5-der8.crt \
2698 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002699 "$G_CLI localhost" \
Janos Follath0b242342016-02-17 10:11:21 +00002700 0 \
2701 -c "Handshake was completed" \
2702
2703requires_gnutls
2704run_test "DER format: with 9 trailing random bytes" \
2705 "$P_SRV crt_file=data_files/server5-der9.crt \
2706 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02002707 "$G_CLI localhost" \
Janos Follath0b242342016-02-17 10:11:21 +00002708 0 \
2709 -c "Handshake was completed" \
2710
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002711# Tests for auth_mode
2712
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002713run_test "Authentication: server badcert, client required" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002714 "$P_SRV crt_file=data_files/server5-badsign.crt \
2715 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002716 "$P_CLI debug_level=1 auth_mode=required" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002717 1 \
2718 -c "x509_verify_cert() returned" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01002719 -c "! The certificate is not correctly signed by the trusted CA" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002720 -c "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002721 -c "X509 - Certificate verification failed"
2722
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002723run_test "Authentication: server badcert, client optional" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002724 "$P_SRV crt_file=data_files/server5-badsign.crt \
2725 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002726 "$P_CLI debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002727 0 \
2728 -c "x509_verify_cert() returned" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01002729 -c "! The certificate is not correctly signed by the trusted CA" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002730 -C "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002731 -C "X509 - Certificate verification failed"
2732
Hanno Beckere6706e62017-05-15 16:05:15 +01002733run_test "Authentication: server goodcert, client optional, no trusted CA" \
2734 "$P_SRV" \
2735 "$P_CLI debug_level=3 auth_mode=optional ca_file=none ca_path=none" \
2736 0 \
2737 -c "x509_verify_cert() returned" \
2738 -c "! The certificate is not correctly signed by the trusted CA" \
2739 -c "! Certificate verification flags"\
2740 -C "! mbedtls_ssl_handshake returned" \
2741 -C "X509 - Certificate verification failed" \
2742 -C "SSL - No CA Chain is set, but required to operate"
2743
2744run_test "Authentication: server goodcert, client required, no trusted CA" \
2745 "$P_SRV" \
2746 "$P_CLI debug_level=3 auth_mode=required ca_file=none ca_path=none" \
2747 1 \
2748 -c "x509_verify_cert() returned" \
2749 -c "! The certificate is not correctly signed by the trusted CA" \
2750 -c "! Certificate verification flags"\
2751 -c "! mbedtls_ssl_handshake returned" \
2752 -c "SSL - No CA Chain is set, but required to operate"
2753
2754# The purpose of the next two tests is to test the client's behaviour when receiving a server
2755# certificate with an unsupported elliptic curve. This should usually not happen because
2756# the client informs the server about the supported curves - it does, though, in the
2757# corner case of a static ECDH suite, because the server doesn't check the curve on that
2758# occasion (to be fixed). If that bug's fixed, the test needs to be altered to use a
2759# different means to have the server ignoring the client's supported curve list.
2760
2761requires_config_enabled MBEDTLS_ECP_C
2762run_test "Authentication: server ECDH p256v1, client required, p256v1 unsupported" \
2763 "$P_SRV debug_level=1 key_file=data_files/server5.key \
2764 crt_file=data_files/server5.ku-ka.crt" \
2765 "$P_CLI debug_level=3 auth_mode=required curves=secp521r1" \
2766 1 \
2767 -c "bad certificate (EC key curve)"\
2768 -c "! Certificate verification flags"\
2769 -C "bad server certificate (ECDH curve)" # Expect failure at earlier verification stage
2770
2771requires_config_enabled MBEDTLS_ECP_C
2772run_test "Authentication: server ECDH p256v1, client optional, p256v1 unsupported" \
2773 "$P_SRV debug_level=1 key_file=data_files/server5.key \
2774 crt_file=data_files/server5.ku-ka.crt" \
2775 "$P_CLI debug_level=3 auth_mode=optional curves=secp521r1" \
2776 1 \
2777 -c "bad certificate (EC key curve)"\
2778 -c "! Certificate verification flags"\
2779 -c "bad server certificate (ECDH curve)" # Expect failure only at ECDH params check
2780
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002781run_test "Authentication: server badcert, client none" \
Manuel Pégourié-Gonnardc1da6642014-02-25 14:18:30 +01002782 "$P_SRV crt_file=data_files/server5-badsign.crt \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002783 key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002784 "$P_CLI debug_level=1 auth_mode=none" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002785 0 \
2786 -C "x509_verify_cert() returned" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01002787 -C "! The certificate is not correctly signed by the trusted CA" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002788 -C "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002789 -C "X509 - Certificate verification failed"
2790
Simon Butcher99000142016-10-13 17:21:01 +01002791run_test "Authentication: client SHA256, server required" \
2792 "$P_SRV auth_mode=required" \
2793 "$P_CLI debug_level=3 crt_file=data_files/server6.crt \
2794 key_file=data_files/server6.key \
2795 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \
2796 0 \
2797 -c "Supported Signature Algorithm found: 4," \
2798 -c "Supported Signature Algorithm found: 5,"
2799
2800run_test "Authentication: client SHA384, server required" \
2801 "$P_SRV auth_mode=required" \
2802 "$P_CLI debug_level=3 crt_file=data_files/server6.crt \
2803 key_file=data_files/server6.key \
2804 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256" \
2805 0 \
2806 -c "Supported Signature Algorithm found: 4," \
2807 -c "Supported Signature Algorithm found: 5,"
2808
Gilles Peskinefd8332e2017-05-03 16:25:07 +02002809requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
2810run_test "Authentication: client has no cert, server required (SSLv3)" \
2811 "$P_SRV debug_level=3 min_version=ssl3 auth_mode=required" \
2812 "$P_CLI debug_level=3 force_version=ssl3 crt_file=none \
2813 key_file=data_files/server5.key" \
2814 1 \
2815 -S "skip write certificate request" \
2816 -C "skip parse certificate request" \
2817 -c "got a certificate request" \
2818 -c "got no certificate to send" \
2819 -S "x509_verify_cert() returned" \
2820 -s "client has no certificate" \
2821 -s "! mbedtls_ssl_handshake returned" \
2822 -c "! mbedtls_ssl_handshake returned" \
2823 -s "No client certification received from the client, but required by the authentication mode"
2824
2825run_test "Authentication: client has no cert, server required (TLS)" \
2826 "$P_SRV debug_level=3 auth_mode=required" \
2827 "$P_CLI debug_level=3 crt_file=none \
2828 key_file=data_files/server5.key" \
2829 1 \
2830 -S "skip write certificate request" \
2831 -C "skip parse certificate request" \
2832 -c "got a certificate request" \
2833 -c "= write certificate$" \
2834 -C "skip write certificate$" \
2835 -S "x509_verify_cert() returned" \
2836 -s "client has no certificate" \
2837 -s "! mbedtls_ssl_handshake returned" \
2838 -c "! mbedtls_ssl_handshake returned" \
2839 -s "No client certification received from the client, but required by the authentication mode"
2840
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002841run_test "Authentication: client badcert, server required" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002842 "$P_SRV debug_level=3 auth_mode=required" \
2843 "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002844 key_file=data_files/server5.key" \
2845 1 \
2846 -S "skip write certificate request" \
2847 -C "skip parse certificate request" \
2848 -c "got a certificate request" \
2849 -C "skip write certificate" \
2850 -C "skip write certificate verify" \
2851 -S "skip parse certificate verify" \
2852 -s "x509_verify_cert() returned" \
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02002853 -s "! The certificate is not correctly signed by the trusted CA" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002854 -s "! mbedtls_ssl_handshake returned" \
Gilles Peskine1cc8e342017-05-03 16:28:34 +02002855 -s "send alert level=2 message=48" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002856 -c "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002857 -s "X509 - Certificate verification failed"
Gilles Peskine1cc8e342017-05-03 16:28:34 +02002858# We don't check that the client receives the alert because it might
2859# detect that its write end of the connection is closed and abort
2860# before reading the alert message.
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002861
Janos Follath89baba22017-04-10 14:34:35 +01002862run_test "Authentication: client cert not trusted, server required" \
2863 "$P_SRV debug_level=3 auth_mode=required" \
2864 "$P_CLI debug_level=3 crt_file=data_files/server5-selfsigned.crt \
2865 key_file=data_files/server5.key" \
2866 1 \
2867 -S "skip write certificate request" \
2868 -C "skip parse certificate request" \
2869 -c "got a certificate request" \
2870 -C "skip write certificate" \
2871 -C "skip write certificate verify" \
2872 -S "skip parse certificate verify" \
2873 -s "x509_verify_cert() returned" \
2874 -s "! The certificate is not correctly signed by the trusted CA" \
2875 -s "! mbedtls_ssl_handshake returned" \
2876 -c "! mbedtls_ssl_handshake returned" \
2877 -s "X509 - Certificate verification failed"
2878
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002879run_test "Authentication: client badcert, server optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002880 "$P_SRV debug_level=3 auth_mode=optional" \
2881 "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002882 key_file=data_files/server5.key" \
2883 0 \
2884 -S "skip write certificate request" \
2885 -C "skip parse certificate request" \
2886 -c "got a certificate request" \
2887 -C "skip write certificate" \
2888 -C "skip write certificate verify" \
2889 -S "skip parse certificate verify" \
2890 -s "x509_verify_cert() returned" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01002891 -s "! The certificate is not correctly signed by the trusted CA" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002892 -S "! mbedtls_ssl_handshake returned" \
2893 -C "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002894 -S "X509 - Certificate verification failed"
2895
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002896run_test "Authentication: client badcert, server none" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002897 "$P_SRV debug_level=3 auth_mode=none" \
2898 "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002899 key_file=data_files/server5.key" \
2900 0 \
2901 -s "skip write certificate request" \
2902 -C "skip parse certificate request" \
2903 -c "got no certificate request" \
2904 -c "skip write certificate" \
2905 -c "skip write certificate verify" \
2906 -s "skip parse certificate verify" \
2907 -S "x509_verify_cert() returned" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01002908 -S "! The certificate is not correctly signed by the trusted CA" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002909 -S "! mbedtls_ssl_handshake returned" \
2910 -C "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01002911 -S "X509 - Certificate verification failed"
2912
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002913run_test "Authentication: client no cert, server optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002914 "$P_SRV debug_level=3 auth_mode=optional" \
2915 "$P_CLI debug_level=3 crt_file=none key_file=none" \
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002916 0 \
2917 -S "skip write certificate request" \
2918 -C "skip parse certificate request" \
2919 -c "got a certificate request" \
2920 -C "skip write certificate$" \
2921 -C "got no certificate to send" \
2922 -S "SSLv3 client has no certificate" \
2923 -c "skip write certificate verify" \
2924 -s "skip parse certificate verify" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01002925 -s "! Certificate was missing" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002926 -S "! mbedtls_ssl_handshake returned" \
2927 -C "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002928 -S "X509 - Certificate verification failed"
2929
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002930run_test "Authentication: openssl client no cert, server optional" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002931 "$P_SRV debug_level=3 auth_mode=optional" \
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002932 "$O_CLI" \
2933 0 \
2934 -S "skip write certificate request" \
2935 -s "skip parse certificate verify" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01002936 -s "! Certificate was missing" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002937 -S "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002938 -S "X509 - Certificate verification failed"
2939
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002940run_test "Authentication: client no cert, openssl server optional" \
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002941 "$O_SRV -verify 10" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002942 "$P_CLI debug_level=3 crt_file=none key_file=none" \
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002943 0 \
2944 -C "skip parse certificate request" \
2945 -c "got a certificate request" \
2946 -C "skip write certificate$" \
2947 -c "skip write certificate verify" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002948 -C "! mbedtls_ssl_handshake returned"
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002949
Gilles Peskinefd8332e2017-05-03 16:25:07 +02002950run_test "Authentication: client no cert, openssl server required" \
2951 "$O_SRV -Verify 10" \
2952 "$P_CLI debug_level=3 crt_file=none key_file=none" \
2953 1 \
2954 -C "skip parse certificate request" \
2955 -c "got a certificate request" \
2956 -C "skip write certificate$" \
2957 -c "skip write certificate verify" \
2958 -c "! mbedtls_ssl_handshake returned"
2959
Janos Follathe2681a42016-03-07 15:57:05 +00002960requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02002961run_test "Authentication: client no cert, ssl3" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02002962 "$P_SRV debug_level=3 auth_mode=optional force_version=ssl3" \
Manuel Pégourié-Gonnard448ea502015-01-12 11:40:14 +01002963 "$P_CLI debug_level=3 crt_file=none key_file=none min_version=ssl3" \
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002964 0 \
2965 -S "skip write certificate request" \
2966 -C "skip parse certificate request" \
2967 -c "got a certificate request" \
2968 -C "skip write certificate$" \
2969 -c "skip write certificate verify" \
2970 -c "got no certificate to send" \
2971 -s "SSLv3 client has no certificate" \
2972 -s "skip parse certificate verify" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01002973 -s "! Certificate was missing" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02002974 -S "! mbedtls_ssl_handshake returned" \
2975 -C "! mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnardde515cc2014-02-27 14:58:26 +01002976 -S "X509 - Certificate verification failed"
2977
Yuto Takano8df2d252021-07-02 13:05:15 +01002978# This script assumes that MBEDTLS_X509_MAX_INTERMEDIATE_CA has its default
2979# value, defined here as MAX_IM_CA. Some test cases will be skipped if the
2980# library is configured with a different value.
Hanno Beckera6bca9f2017-07-26 13:35:11 +01002981
Simon Butcherbcfa6f42017-07-28 15:59:35 +01002982MAX_IM_CA='8'
Hanno Beckera6bca9f2017-07-26 13:35:11 +01002983
Yuto Takano8df2d252021-07-02 13:05:15 +01002984# The tests for the max_int tests can pass with any number higher than MAX_IM_CA
2985# because only a chain of MAX_IM_CA length is tested. Equally, the max_int+1
2986# tests can pass with any number less than MAX_IM_CA. However, stricter preconditions
2987# are in place so that the semantics are consistent with the test description.
Yuto Takanobc632c22021-07-02 13:10:41 +01002988requires_config_value_equals "MBEDTLS_X509_MAX_INTERMEDIATE_CA" $MAX_IM_CA
Angus Grattonc4dd0732018-04-11 16:28:39 +10002989requires_full_size_output_buffer
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02002990run_test "Authentication: server max_int chain, client default" \
2991 "$P_SRV crt_file=data_files/dir-maxpath/c09.pem \
2992 key_file=data_files/dir-maxpath/09.key" \
2993 "$P_CLI server_name=CA09 ca_file=data_files/dir-maxpath/00.crt" \
2994 0 \
Antonin Décimod5f47592019-01-23 15:24:37 +01002995 -C "X509 - A fatal error occurred"
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02002996
Yuto Takanobc632c22021-07-02 13:10:41 +01002997requires_config_value_equals "MBEDTLS_X509_MAX_INTERMEDIATE_CA" $MAX_IM_CA
Angus Grattonc4dd0732018-04-11 16:28:39 +10002998requires_full_size_output_buffer
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02002999run_test "Authentication: server max_int+1 chain, client default" \
3000 "$P_SRV crt_file=data_files/dir-maxpath/c10.pem \
3001 key_file=data_files/dir-maxpath/10.key" \
3002 "$P_CLI server_name=CA10 ca_file=data_files/dir-maxpath/00.crt" \
3003 1 \
Antonin Décimod5f47592019-01-23 15:24:37 +01003004 -c "X509 - A fatal error occurred"
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003005
Yuto Takanobc632c22021-07-02 13:10:41 +01003006requires_config_value_equals "MBEDTLS_X509_MAX_INTERMEDIATE_CA" $MAX_IM_CA
Angus Grattonc4dd0732018-04-11 16:28:39 +10003007requires_full_size_output_buffer
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003008run_test "Authentication: server max_int+1 chain, client optional" \
3009 "$P_SRV crt_file=data_files/dir-maxpath/c10.pem \
3010 key_file=data_files/dir-maxpath/10.key" \
3011 "$P_CLI server_name=CA10 ca_file=data_files/dir-maxpath/00.crt \
3012 auth_mode=optional" \
3013 1 \
Antonin Décimod5f47592019-01-23 15:24:37 +01003014 -c "X509 - A fatal error occurred"
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003015
Yuto Takanobc632c22021-07-02 13:10:41 +01003016requires_config_value_equals "MBEDTLS_X509_MAX_INTERMEDIATE_CA" $MAX_IM_CA
Angus Grattonc4dd0732018-04-11 16:28:39 +10003017requires_full_size_output_buffer
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003018run_test "Authentication: server max_int+1 chain, client none" \
3019 "$P_SRV crt_file=data_files/dir-maxpath/c10.pem \
3020 key_file=data_files/dir-maxpath/10.key" \
3021 "$P_CLI server_name=CA10 ca_file=data_files/dir-maxpath/00.crt \
3022 auth_mode=none" \
3023 0 \
Antonin Décimod5f47592019-01-23 15:24:37 +01003024 -C "X509 - A fatal error occurred"
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003025
Yuto Takanobc632c22021-07-02 13:10:41 +01003026requires_config_value_equals "MBEDTLS_X509_MAX_INTERMEDIATE_CA" $MAX_IM_CA
Angus Grattonc4dd0732018-04-11 16:28:39 +10003027requires_full_size_output_buffer
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003028run_test "Authentication: client max_int+1 chain, server default" \
3029 "$P_SRV ca_file=data_files/dir-maxpath/00.crt" \
3030 "$P_CLI crt_file=data_files/dir-maxpath/c10.pem \
3031 key_file=data_files/dir-maxpath/10.key" \
3032 0 \
Antonin Décimod5f47592019-01-23 15:24:37 +01003033 -S "X509 - A fatal error occurred"
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003034
Yuto Takanobc632c22021-07-02 13:10:41 +01003035requires_config_value_equals "MBEDTLS_X509_MAX_INTERMEDIATE_CA" $MAX_IM_CA
Angus Grattonc4dd0732018-04-11 16:28:39 +10003036requires_full_size_output_buffer
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003037run_test "Authentication: client max_int+1 chain, server optional" \
3038 "$P_SRV ca_file=data_files/dir-maxpath/00.crt auth_mode=optional" \
3039 "$P_CLI crt_file=data_files/dir-maxpath/c10.pem \
3040 key_file=data_files/dir-maxpath/10.key" \
3041 1 \
Antonin Décimod5f47592019-01-23 15:24:37 +01003042 -s "X509 - A fatal error occurred"
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003043
Yuto Takanobc632c22021-07-02 13:10:41 +01003044requires_config_value_equals "MBEDTLS_X509_MAX_INTERMEDIATE_CA" $MAX_IM_CA
Angus Grattonc4dd0732018-04-11 16:28:39 +10003045requires_full_size_output_buffer
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003046run_test "Authentication: client max_int+1 chain, server required" \
3047 "$P_SRV ca_file=data_files/dir-maxpath/00.crt auth_mode=required" \
3048 "$P_CLI crt_file=data_files/dir-maxpath/c10.pem \
3049 key_file=data_files/dir-maxpath/10.key" \
3050 1 \
Antonin Décimod5f47592019-01-23 15:24:37 +01003051 -s "X509 - A fatal error occurred"
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003052
Yuto Takanobc632c22021-07-02 13:10:41 +01003053requires_config_value_equals "MBEDTLS_X509_MAX_INTERMEDIATE_CA" $MAX_IM_CA
Angus Grattonc4dd0732018-04-11 16:28:39 +10003054requires_full_size_output_buffer
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003055run_test "Authentication: client max_int chain, server required" \
3056 "$P_SRV ca_file=data_files/dir-maxpath/00.crt auth_mode=required" \
3057 "$P_CLI crt_file=data_files/dir-maxpath/c09.pem \
3058 key_file=data_files/dir-maxpath/09.key" \
3059 0 \
Antonin Décimod5f47592019-01-23 15:24:37 +01003060 -S "X509 - A fatal error occurred"
Manuel Pégourié-Gonnard81bb6b62017-06-26 10:45:33 +02003061
Janos Follath89baba22017-04-10 14:34:35 +01003062# Tests for CA list in CertificateRequest messages
3063
3064run_test "Authentication: send CA list in CertificateRequest (default)" \
3065 "$P_SRV debug_level=3 auth_mode=required" \
3066 "$P_CLI crt_file=data_files/server6.crt \
3067 key_file=data_files/server6.key" \
3068 0 \
3069 -s "requested DN"
3070
3071run_test "Authentication: do not send CA list in CertificateRequest" \
3072 "$P_SRV debug_level=3 auth_mode=required cert_req_ca_list=0" \
3073 "$P_CLI crt_file=data_files/server6.crt \
3074 key_file=data_files/server6.key" \
3075 0 \
3076 -S "requested DN"
3077
3078run_test "Authentication: send CA list in CertificateRequest, client self signed" \
3079 "$P_SRV debug_level=3 auth_mode=required cert_req_ca_list=0" \
3080 "$P_CLI debug_level=3 crt_file=data_files/server5-selfsigned.crt \
3081 key_file=data_files/server5.key" \
3082 1 \
3083 -S "requested DN" \
3084 -s "x509_verify_cert() returned" \
3085 -s "! The certificate is not correctly signed by the trusted CA" \
3086 -s "! mbedtls_ssl_handshake returned" \
3087 -c "! mbedtls_ssl_handshake returned" \
3088 -s "X509 - Certificate verification failed"
3089
Manuel Pégourié-Gonnarddf331a52015-01-08 16:43:07 +01003090# Tests for certificate selection based on SHA verson
3091
3092run_test "Certificate hash: client TLS 1.2 -> SHA-2" \
3093 "$P_SRV crt_file=data_files/server5.crt \
3094 key_file=data_files/server5.key \
3095 crt_file2=data_files/server5-sha1.crt \
3096 key_file2=data_files/server5.key" \
3097 "$P_CLI force_version=tls1_2" \
3098 0 \
3099 -c "signed using.*ECDSA with SHA256" \
3100 -C "signed using.*ECDSA with SHA1"
3101
3102run_test "Certificate hash: client TLS 1.1 -> SHA-1" \
3103 "$P_SRV crt_file=data_files/server5.crt \
3104 key_file=data_files/server5.key \
3105 crt_file2=data_files/server5-sha1.crt \
3106 key_file2=data_files/server5.key" \
3107 "$P_CLI force_version=tls1_1" \
3108 0 \
3109 -C "signed using.*ECDSA with SHA256" \
3110 -c "signed using.*ECDSA with SHA1"
3111
3112run_test "Certificate hash: client TLS 1.0 -> SHA-1" \
3113 "$P_SRV crt_file=data_files/server5.crt \
3114 key_file=data_files/server5.key \
3115 crt_file2=data_files/server5-sha1.crt \
3116 key_file2=data_files/server5.key" \
3117 "$P_CLI force_version=tls1" \
3118 0 \
3119 -C "signed using.*ECDSA with SHA256" \
3120 -c "signed using.*ECDSA with SHA1"
3121
3122run_test "Certificate hash: client TLS 1.1, no SHA-1 -> SHA-2 (order 1)" \
3123 "$P_SRV crt_file=data_files/server5.crt \
3124 key_file=data_files/server5.key \
3125 crt_file2=data_files/server6.crt \
3126 key_file2=data_files/server6.key" \
3127 "$P_CLI force_version=tls1_1" \
3128 0 \
3129 -c "serial number.*09" \
3130 -c "signed using.*ECDSA with SHA256" \
3131 -C "signed using.*ECDSA with SHA1"
3132
3133run_test "Certificate hash: client TLS 1.1, no SHA-1 -> SHA-2 (order 2)" \
3134 "$P_SRV crt_file=data_files/server6.crt \
3135 key_file=data_files/server6.key \
3136 crt_file2=data_files/server5.crt \
3137 key_file2=data_files/server5.key" \
3138 "$P_CLI force_version=tls1_1" \
3139 0 \
3140 -c "serial number.*0A" \
3141 -c "signed using.*ECDSA with SHA256" \
3142 -C "signed using.*ECDSA with SHA1"
3143
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003144# tests for SNI
3145
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003146run_test "SNI: no SNI callback" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02003147 "$P_SRV debug_level=3 \
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003148 crt_file=data_files/server5.crt key_file=data_files/server5.key" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02003149 "$P_CLI server_name=localhost" \
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02003150 0 \
3151 -S "parse ServerName extension" \
3152 -c "issuer name *: C=NL, O=PolarSSL, CN=Polarssl Test EC CA" \
3153 -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003154
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003155run_test "SNI: matching cert 1" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02003156 "$P_SRV debug_level=3 \
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003157 crt_file=data_files/server5.crt key_file=data_files/server5.key \
Manuel Pégourié-Gonnard4d6f1782015-06-19 14:40:39 +02003158 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02003159 "$P_CLI server_name=localhost" \
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02003160 0 \
3161 -s "parse ServerName extension" \
3162 -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
3163 -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003164
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003165run_test "SNI: matching cert 2" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02003166 "$P_SRV debug_level=3 \
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003167 crt_file=data_files/server5.crt key_file=data_files/server5.key \
Manuel Pégourié-Gonnard4d6f1782015-06-19 14:40:39 +02003168 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02003169 "$P_CLI server_name=polarssl.example" \
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02003170 0 \
3171 -s "parse ServerName extension" \
3172 -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
3173 -c "subject name *: C=NL, O=PolarSSL, CN=polarssl.example"
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003174
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003175run_test "SNI: no matching cert" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02003176 "$P_SRV debug_level=3 \
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003177 crt_file=data_files/server5.crt key_file=data_files/server5.key \
Manuel Pégourié-Gonnard4d6f1782015-06-19 14:40:39 +02003178 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02003179 "$P_CLI server_name=nonesuch.example" \
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02003180 1 \
3181 -s "parse ServerName extension" \
3182 -s "ssl_sni_wrapper() returned" \
3183 -s "mbedtls_ssl_handshake returned" \
3184 -c "mbedtls_ssl_handshake returned" \
3185 -c "SSL - A fatal alert message was received from our peer"
Manuel Pégourié-Gonnard96ea2f22014-02-25 12:26:29 +01003186
Manuel Pégourié-Gonnardc948a792015-06-22 16:04:20 +02003187run_test "SNI: client auth no override: optional" \
3188 "$P_SRV debug_level=3 auth_mode=optional \
3189 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3190 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-" \
3191 "$P_CLI debug_level=3 server_name=localhost" \
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02003192 0 \
Manuel Pégourié-Gonnardc948a792015-06-22 16:04:20 +02003193 -S "skip write certificate request" \
3194 -C "skip parse certificate request" \
3195 -c "got a certificate request" \
3196 -C "skip write certificate" \
3197 -C "skip write certificate verify" \
3198 -S "skip parse certificate verify"
3199
3200run_test "SNI: client auth override: none -> optional" \
3201 "$P_SRV debug_level=3 auth_mode=none \
3202 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3203 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,optional" \
3204 "$P_CLI debug_level=3 server_name=localhost" \
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02003205 0 \
Manuel Pégourié-Gonnardc948a792015-06-22 16:04:20 +02003206 -S "skip write certificate request" \
3207 -C "skip parse certificate request" \
3208 -c "got a certificate request" \
3209 -C "skip write certificate" \
3210 -C "skip write certificate verify" \
3211 -S "skip parse certificate verify"
3212
3213run_test "SNI: client auth override: optional -> none" \
3214 "$P_SRV debug_level=3 auth_mode=optional \
3215 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3216 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,none" \
3217 "$P_CLI debug_level=3 server_name=localhost" \
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02003218 0 \
Manuel Pégourié-Gonnardc948a792015-06-22 16:04:20 +02003219 -s "skip write certificate request" \
3220 -C "skip parse certificate request" \
3221 -c "got no certificate request" \
3222 -c "skip write certificate" \
3223 -c "skip write certificate verify" \
3224 -s "skip parse certificate verify"
3225
Manuel Pégourié-Gonnard6ea831d2015-06-22 16:50:52 +02003226run_test "SNI: CA no override" \
3227 "$P_SRV debug_level=3 auth_mode=optional \
3228 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3229 ca_file=data_files/test-ca.crt \
3230 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,required" \
3231 "$P_CLI debug_level=3 server_name=localhost \
3232 crt_file=data_files/server6.crt key_file=data_files/server6.key" \
3233 1 \
3234 -S "skip write certificate request" \
3235 -C "skip parse certificate request" \
3236 -c "got a certificate request" \
3237 -C "skip write certificate" \
3238 -C "skip write certificate verify" \
3239 -S "skip parse certificate verify" \
3240 -s "x509_verify_cert() returned" \
3241 -s "! The certificate is not correctly signed by the trusted CA" \
3242 -S "The certificate has been revoked (is on a CRL)"
3243
3244run_test "SNI: CA override" \
3245 "$P_SRV debug_level=3 auth_mode=optional \
3246 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3247 ca_file=data_files/test-ca.crt \
3248 sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,-,required" \
3249 "$P_CLI debug_level=3 server_name=localhost \
3250 crt_file=data_files/server6.crt key_file=data_files/server6.key" \
3251 0 \
3252 -S "skip write certificate request" \
3253 -C "skip parse certificate request" \
3254 -c "got a certificate request" \
3255 -C "skip write certificate" \
3256 -C "skip write certificate verify" \
3257 -S "skip parse certificate verify" \
3258 -S "x509_verify_cert() returned" \
3259 -S "! The certificate is not correctly signed by the trusted CA" \
3260 -S "The certificate has been revoked (is on a CRL)"
3261
3262run_test "SNI: CA override with CRL" \
3263 "$P_SRV debug_level=3 auth_mode=optional \
3264 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3265 ca_file=data_files/test-ca.crt \
3266 sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,data_files/crl-ec-sha256.pem,required" \
3267 "$P_CLI debug_level=3 server_name=localhost \
3268 crt_file=data_files/server6.crt key_file=data_files/server6.key" \
3269 1 \
3270 -S "skip write certificate request" \
3271 -C "skip parse certificate request" \
3272 -c "got a certificate request" \
3273 -C "skip write certificate" \
3274 -C "skip write certificate verify" \
3275 -S "skip parse certificate verify" \
3276 -s "x509_verify_cert() returned" \
3277 -S "! The certificate is not correctly signed by the trusted CA" \
3278 -s "The certificate has been revoked (is on a CRL)"
3279
Andres AG1a834452016-12-07 10:01:30 +00003280# Tests for SNI and DTLS
3281
Andres Amaya Garcia54306c12018-05-01 20:27:37 +01003282run_test "SNI: DTLS, no SNI callback" \
3283 "$P_SRV debug_level=3 dtls=1 \
3284 crt_file=data_files/server5.crt key_file=data_files/server5.key" \
3285 "$P_CLI server_name=localhost dtls=1" \
3286 0 \
3287 -S "parse ServerName extension" \
3288 -c "issuer name *: C=NL, O=PolarSSL, CN=Polarssl Test EC CA" \
3289 -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
3290
Andres Amaya Garciaf77d3d32018-05-01 20:26:47 +01003291run_test "SNI: DTLS, matching cert 1" \
Andres AG1a834452016-12-07 10:01:30 +00003292 "$P_SRV debug_level=3 dtls=1 \
3293 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3294 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
3295 "$P_CLI server_name=localhost dtls=1" \
3296 0 \
3297 -s "parse ServerName extension" \
3298 -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
3299 -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
3300
Andres Amaya Garcia54306c12018-05-01 20:27:37 +01003301run_test "SNI: DTLS, matching cert 2" \
3302 "$P_SRV debug_level=3 dtls=1 \
3303 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3304 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
3305 "$P_CLI server_name=polarssl.example dtls=1" \
3306 0 \
3307 -s "parse ServerName extension" \
3308 -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
3309 -c "subject name *: C=NL, O=PolarSSL, CN=polarssl.example"
3310
3311run_test "SNI: DTLS, no matching cert" \
3312 "$P_SRV debug_level=3 dtls=1 \
3313 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3314 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
3315 "$P_CLI server_name=nonesuch.example dtls=1" \
3316 1 \
3317 -s "parse ServerName extension" \
3318 -s "ssl_sni_wrapper() returned" \
3319 -s "mbedtls_ssl_handshake returned" \
3320 -c "mbedtls_ssl_handshake returned" \
3321 -c "SSL - A fatal alert message was received from our peer"
3322
3323run_test "SNI: DTLS, client auth no override: optional" \
3324 "$P_SRV debug_level=3 auth_mode=optional dtls=1 \
3325 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3326 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-" \
3327 "$P_CLI debug_level=3 server_name=localhost dtls=1" \
3328 0 \
3329 -S "skip write certificate request" \
3330 -C "skip parse certificate request" \
3331 -c "got a certificate request" \
3332 -C "skip write certificate" \
3333 -C "skip write certificate verify" \
3334 -S "skip parse certificate verify"
3335
3336run_test "SNI: DTLS, client auth override: none -> optional" \
3337 "$P_SRV debug_level=3 auth_mode=none dtls=1 \
3338 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3339 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,optional" \
3340 "$P_CLI debug_level=3 server_name=localhost dtls=1" \
3341 0 \
3342 -S "skip write certificate request" \
3343 -C "skip parse certificate request" \
3344 -c "got a certificate request" \
3345 -C "skip write certificate" \
3346 -C "skip write certificate verify" \
3347 -S "skip parse certificate verify"
3348
3349run_test "SNI: DTLS, client auth override: optional -> none" \
3350 "$P_SRV debug_level=3 auth_mode=optional dtls=1 \
3351 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3352 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,none" \
3353 "$P_CLI debug_level=3 server_name=localhost dtls=1" \
3354 0 \
3355 -s "skip write certificate request" \
3356 -C "skip parse certificate request" \
3357 -c "got no certificate request" \
3358 -c "skip write certificate" \
3359 -c "skip write certificate verify" \
3360 -s "skip parse certificate verify"
3361
3362run_test "SNI: DTLS, CA no override" \
3363 "$P_SRV debug_level=3 auth_mode=optional dtls=1 \
3364 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3365 ca_file=data_files/test-ca.crt \
3366 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,required" \
3367 "$P_CLI debug_level=3 server_name=localhost dtls=1 \
3368 crt_file=data_files/server6.crt key_file=data_files/server6.key" \
3369 1 \
3370 -S "skip write certificate request" \
3371 -C "skip parse certificate request" \
3372 -c "got a certificate request" \
3373 -C "skip write certificate" \
3374 -C "skip write certificate verify" \
3375 -S "skip parse certificate verify" \
3376 -s "x509_verify_cert() returned" \
3377 -s "! The certificate is not correctly signed by the trusted CA" \
3378 -S "The certificate has been revoked (is on a CRL)"
3379
Andres Amaya Garciaf77d3d32018-05-01 20:26:47 +01003380run_test "SNI: DTLS, CA override" \
Andres AG1a834452016-12-07 10:01:30 +00003381 "$P_SRV debug_level=3 auth_mode=optional dtls=1 \
3382 crt_file=data_files/server5.crt key_file=data_files/server5.key \
3383 ca_file=data_files/test-ca.crt \
3384 sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,-,required" \
3385 "$P_CLI debug_level=3 server_name=localhost dtls=1 \
3386 crt_file=data_files/server6.crt key_file=data_files/server6.key" \
3387 0 \
3388 -S "skip write certificate request" \
3389 -C "skip parse certificate request" \
3390 -c "got a certificate request" \
3391 -C "skip write certificate" \
3392 -C "skip write certificate verify" \
3393 -S "skip parse certificate verify" \
3394 -S "x509_verify_cert() returned" \
3395 -S "! The certificate is not correctly signed by the trusted CA" \
3396 -S "The certificate has been revoked (is on a CRL)"
3397
Andres Amaya Garciaf77d3d32018-05-01 20:26:47 +01003398run_test "SNI: DTLS, CA override with CRL" \
Andres AG1a834452016-12-07 10:01:30 +00003399 "$P_SRV debug_level=3 auth_mode=optional \
3400 crt_file=data_files/server5.crt key_file=data_files/server5.key dtls=1 \
3401 ca_file=data_files/test-ca.crt \
3402 sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,data_files/crl-ec-sha256.pem,required" \
3403 "$P_CLI debug_level=3 server_name=localhost dtls=1 \
3404 crt_file=data_files/server6.crt key_file=data_files/server6.key" \
3405 1 \
3406 -S "skip write certificate request" \
3407 -C "skip parse certificate request" \
3408 -c "got a certificate request" \
3409 -C "skip write certificate" \
3410 -C "skip write certificate verify" \
3411 -S "skip parse certificate verify" \
3412 -s "x509_verify_cert() returned" \
3413 -S "! The certificate is not correctly signed by the trusted CA" \
3414 -s "The certificate has been revoked (is on a CRL)"
3415
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003416# Tests for non-blocking I/O: exercise a variety of handshake flows
3417
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003418run_test "Non-blocking I/O: basic handshake" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003419 "$P_SRV nbio=2 tickets=0 auth_mode=none" \
3420 "$P_CLI nbio=2 tickets=0" \
3421 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003422 -S "mbedtls_ssl_handshake returned" \
3423 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003424 -c "Read from server: .* bytes read"
3425
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003426run_test "Non-blocking I/O: client auth" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003427 "$P_SRV nbio=2 tickets=0 auth_mode=required" \
3428 "$P_CLI nbio=2 tickets=0" \
3429 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003430 -S "mbedtls_ssl_handshake returned" \
3431 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003432 -c "Read from server: .* bytes read"
3433
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003434run_test "Non-blocking I/O: ticket" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003435 "$P_SRV nbio=2 tickets=1 auth_mode=none" \
3436 "$P_CLI nbio=2 tickets=1" \
3437 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003438 -S "mbedtls_ssl_handshake returned" \
3439 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003440 -c "Read from server: .* bytes read"
3441
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003442run_test "Non-blocking I/O: ticket + client auth" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003443 "$P_SRV nbio=2 tickets=1 auth_mode=required" \
3444 "$P_CLI nbio=2 tickets=1" \
3445 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003446 -S "mbedtls_ssl_handshake returned" \
3447 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003448 -c "Read from server: .* bytes read"
3449
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003450run_test "Non-blocking I/O: ticket + client auth + resume" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003451 "$P_SRV nbio=2 tickets=1 auth_mode=required" \
3452 "$P_CLI nbio=2 tickets=1 reconnect=1" \
3453 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003454 -S "mbedtls_ssl_handshake returned" \
3455 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003456 -c "Read from server: .* bytes read"
3457
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003458run_test "Non-blocking I/O: ticket + resume" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003459 "$P_SRV nbio=2 tickets=1 auth_mode=none" \
3460 "$P_CLI nbio=2 tickets=1 reconnect=1" \
3461 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003462 -S "mbedtls_ssl_handshake returned" \
3463 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003464 -c "Read from server: .* bytes read"
3465
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003466run_test "Non-blocking I/O: session-id resume" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003467 "$P_SRV nbio=2 tickets=0 auth_mode=none" \
3468 "$P_CLI nbio=2 tickets=0 reconnect=1" \
3469 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003470 -S "mbedtls_ssl_handshake returned" \
3471 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0b6609b2014-02-26 14:45:12 +01003472 -c "Read from server: .* bytes read"
3473
Hanno Becker00076712017-11-15 16:39:08 +00003474# Tests for event-driven I/O: exercise a variety of handshake flows
3475
3476run_test "Event-driven I/O: basic handshake" \
3477 "$P_SRV event=1 tickets=0 auth_mode=none" \
3478 "$P_CLI event=1 tickets=0" \
3479 0 \
3480 -S "mbedtls_ssl_handshake returned" \
3481 -C "mbedtls_ssl_handshake returned" \
3482 -c "Read from server: .* bytes read"
3483
3484run_test "Event-driven I/O: client auth" \
3485 "$P_SRV event=1 tickets=0 auth_mode=required" \
3486 "$P_CLI event=1 tickets=0" \
3487 0 \
3488 -S "mbedtls_ssl_handshake returned" \
3489 -C "mbedtls_ssl_handshake returned" \
3490 -c "Read from server: .* bytes read"
3491
3492run_test "Event-driven I/O: ticket" \
3493 "$P_SRV event=1 tickets=1 auth_mode=none" \
3494 "$P_CLI event=1 tickets=1" \
3495 0 \
3496 -S "mbedtls_ssl_handshake returned" \
3497 -C "mbedtls_ssl_handshake returned" \
3498 -c "Read from server: .* bytes read"
3499
3500run_test "Event-driven I/O: ticket + client auth" \
3501 "$P_SRV event=1 tickets=1 auth_mode=required" \
3502 "$P_CLI event=1 tickets=1" \
3503 0 \
3504 -S "mbedtls_ssl_handshake returned" \
3505 -C "mbedtls_ssl_handshake returned" \
3506 -c "Read from server: .* bytes read"
3507
3508run_test "Event-driven I/O: ticket + client auth + resume" \
3509 "$P_SRV event=1 tickets=1 auth_mode=required" \
3510 "$P_CLI event=1 tickets=1 reconnect=1" \
3511 0 \
3512 -S "mbedtls_ssl_handshake returned" \
3513 -C "mbedtls_ssl_handshake returned" \
3514 -c "Read from server: .* bytes read"
3515
3516run_test "Event-driven I/O: ticket + resume" \
3517 "$P_SRV event=1 tickets=1 auth_mode=none" \
3518 "$P_CLI event=1 tickets=1 reconnect=1" \
3519 0 \
3520 -S "mbedtls_ssl_handshake returned" \
3521 -C "mbedtls_ssl_handshake returned" \
3522 -c "Read from server: .* bytes read"
3523
3524run_test "Event-driven I/O: session-id resume" \
3525 "$P_SRV event=1 tickets=0 auth_mode=none" \
3526 "$P_CLI event=1 tickets=0 reconnect=1" \
3527 0 \
3528 -S "mbedtls_ssl_handshake returned" \
3529 -C "mbedtls_ssl_handshake returned" \
3530 -c "Read from server: .* bytes read"
3531
Hanno Becker6a33f592018-03-13 11:38:46 +00003532run_test "Event-driven I/O, DTLS: basic handshake" \
3533 "$P_SRV dtls=1 event=1 tickets=0 auth_mode=none" \
3534 "$P_CLI dtls=1 event=1 tickets=0" \
3535 0 \
3536 -c "Read from server: .* bytes read"
3537
3538run_test "Event-driven I/O, DTLS: client auth" \
3539 "$P_SRV dtls=1 event=1 tickets=0 auth_mode=required" \
3540 "$P_CLI dtls=1 event=1 tickets=0" \
3541 0 \
3542 -c "Read from server: .* bytes read"
3543
3544run_test "Event-driven I/O, DTLS: ticket" \
3545 "$P_SRV dtls=1 event=1 tickets=1 auth_mode=none" \
3546 "$P_CLI dtls=1 event=1 tickets=1" \
3547 0 \
3548 -c "Read from server: .* bytes read"
3549
3550run_test "Event-driven I/O, DTLS: ticket + client auth" \
3551 "$P_SRV dtls=1 event=1 tickets=1 auth_mode=required" \
3552 "$P_CLI dtls=1 event=1 tickets=1" \
3553 0 \
3554 -c "Read from server: .* bytes read"
3555
3556run_test "Event-driven I/O, DTLS: ticket + client auth + resume" \
3557 "$P_SRV dtls=1 event=1 tickets=1 auth_mode=required" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01003558 "$P_CLI dtls=1 event=1 tickets=1 reconnect=1 skip_close_notify=1" \
Hanno Becker6a33f592018-03-13 11:38:46 +00003559 0 \
3560 -c "Read from server: .* bytes read"
3561
3562run_test "Event-driven I/O, DTLS: ticket + resume" \
3563 "$P_SRV dtls=1 event=1 tickets=1 auth_mode=none" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01003564 "$P_CLI dtls=1 event=1 tickets=1 reconnect=1 skip_close_notify=1" \
Hanno Becker6a33f592018-03-13 11:38:46 +00003565 0 \
3566 -c "Read from server: .* bytes read"
3567
3568run_test "Event-driven I/O, DTLS: session-id resume" \
3569 "$P_SRV dtls=1 event=1 tickets=0 auth_mode=none" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01003570 "$P_CLI dtls=1 event=1 tickets=0 reconnect=1 skip_close_notify=1" \
Hanno Becker6a33f592018-03-13 11:38:46 +00003571 0 \
3572 -c "Read from server: .* bytes read"
Hanno Beckerbc6c1102018-03-13 11:39:40 +00003573
3574# This test demonstrates the need for the mbedtls_ssl_check_pending function.
3575# During session resumption, the client will send its ApplicationData record
3576# within the same datagram as the Finished messages. In this situation, the
3577# server MUST NOT idle on the underlying transport after handshake completion,
3578# because the ApplicationData request has already been queued internally.
3579run_test "Event-driven I/O, DTLS: session-id resume, UDP packing" \
Hanno Becker8d832182018-03-15 10:14:19 +00003580 -p "$P_PXY pack=50" \
Hanno Beckerbc6c1102018-03-13 11:39:40 +00003581 "$P_SRV dtls=1 event=1 tickets=0 auth_mode=required" \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01003582 "$P_CLI dtls=1 event=1 tickets=0 reconnect=1 skip_close_notify=1" \
Hanno Beckerbc6c1102018-03-13 11:39:40 +00003583 0 \
3584 -c "Read from server: .* bytes read"
3585
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003586# Tests for version negotiation
3587
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003588run_test "Version check: all -> 1.2" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003589 "$P_SRV" \
3590 "$P_CLI" \
3591 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003592 -S "mbedtls_ssl_handshake returned" \
3593 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003594 -s "Protocol is TLSv1.2" \
3595 -c "Protocol is TLSv1.2"
3596
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003597run_test "Version check: cli max 1.1 -> 1.1" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003598 "$P_SRV" \
3599 "$P_CLI max_version=tls1_1" \
3600 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003601 -S "mbedtls_ssl_handshake returned" \
3602 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003603 -s "Protocol is TLSv1.1" \
3604 -c "Protocol is TLSv1.1"
3605
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003606run_test "Version check: srv max 1.1 -> 1.1" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003607 "$P_SRV max_version=tls1_1" \
3608 "$P_CLI" \
3609 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003610 -S "mbedtls_ssl_handshake returned" \
3611 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003612 -s "Protocol is TLSv1.1" \
3613 -c "Protocol is TLSv1.1"
3614
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003615run_test "Version check: cli+srv max 1.1 -> 1.1" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003616 "$P_SRV max_version=tls1_1" \
3617 "$P_CLI max_version=tls1_1" \
3618 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003619 -S "mbedtls_ssl_handshake returned" \
3620 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003621 -s "Protocol is TLSv1.1" \
3622 -c "Protocol is TLSv1.1"
3623
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003624run_test "Version check: cli max 1.1, srv min 1.1 -> 1.1" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003625 "$P_SRV min_version=tls1_1" \
3626 "$P_CLI max_version=tls1_1" \
3627 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003628 -S "mbedtls_ssl_handshake returned" \
3629 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003630 -s "Protocol is TLSv1.1" \
3631 -c "Protocol is TLSv1.1"
3632
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003633run_test "Version check: cli min 1.1, srv max 1.1 -> 1.1" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003634 "$P_SRV max_version=tls1_1" \
3635 "$P_CLI min_version=tls1_1" \
3636 0 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003637 -S "mbedtls_ssl_handshake returned" \
3638 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003639 -s "Protocol is TLSv1.1" \
3640 -c "Protocol is TLSv1.1"
3641
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003642run_test "Version check: cli min 1.2, srv max 1.1 -> fail" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003643 "$P_SRV max_version=tls1_1" \
3644 "$P_CLI min_version=tls1_2" \
3645 1 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003646 -s "mbedtls_ssl_handshake returned" \
3647 -c "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003648 -c "SSL - Handshake protocol not within min/max boundaries"
3649
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003650run_test "Version check: srv min 1.2, cli max 1.1 -> fail" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003651 "$P_SRV min_version=tls1_2" \
3652 "$P_CLI max_version=tls1_1" \
3653 1 \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02003654 -s "mbedtls_ssl_handshake returned" \
3655 -c "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnarda3d808e2014-02-26 16:33:03 +01003656 -s "SSL - Handshake protocol not within min/max boundaries"
3657
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003658# Tests for ALPN extension
3659
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003660run_test "ALPN: none" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003661 "$P_SRV debug_level=3" \
3662 "$P_CLI debug_level=3" \
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003663 0 \
3664 -C "client hello, adding alpn extension" \
3665 -S "found alpn extension" \
3666 -C "got an alert message, type: \\[2:120]" \
3667 -S "server hello, adding alpn extension" \
3668 -C "found alpn extension " \
3669 -C "Application Layer Protocol is" \
3670 -S "Application Layer Protocol is"
3671
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003672run_test "ALPN: client only" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003673 "$P_SRV debug_level=3" \
3674 "$P_CLI debug_level=3 alpn=abc,1234" \
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003675 0 \
3676 -c "client hello, adding alpn extension" \
3677 -s "found alpn extension" \
3678 -C "got an alert message, type: \\[2:120]" \
3679 -S "server hello, adding alpn extension" \
3680 -C "found alpn extension " \
3681 -c "Application Layer Protocol is (none)" \
3682 -S "Application Layer Protocol is"
3683
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003684run_test "ALPN: server only" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003685 "$P_SRV debug_level=3 alpn=abc,1234" \
3686 "$P_CLI debug_level=3" \
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003687 0 \
3688 -C "client hello, adding alpn extension" \
3689 -S "found alpn extension" \
3690 -C "got an alert message, type: \\[2:120]" \
3691 -S "server hello, adding alpn extension" \
3692 -C "found alpn extension " \
3693 -C "Application Layer Protocol is" \
3694 -s "Application Layer Protocol is (none)"
3695
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003696run_test "ALPN: both, common cli1-srv1" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003697 "$P_SRV debug_level=3 alpn=abc,1234" \
3698 "$P_CLI debug_level=3 alpn=abc,1234" \
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003699 0 \
3700 -c "client hello, adding alpn extension" \
3701 -s "found alpn extension" \
3702 -C "got an alert message, type: \\[2:120]" \
3703 -s "server hello, adding alpn extension" \
3704 -c "found alpn extension" \
3705 -c "Application Layer Protocol is abc" \
3706 -s "Application Layer Protocol is abc"
3707
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003708run_test "ALPN: both, common cli2-srv1" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003709 "$P_SRV debug_level=3 alpn=abc,1234" \
3710 "$P_CLI debug_level=3 alpn=1234,abc" \
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003711 0 \
3712 -c "client hello, adding alpn extension" \
3713 -s "found alpn extension" \
3714 -C "got an alert message, type: \\[2:120]" \
3715 -s "server hello, adding alpn extension" \
3716 -c "found alpn extension" \
3717 -c "Application Layer Protocol is abc" \
3718 -s "Application Layer Protocol is abc"
3719
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003720run_test "ALPN: both, common cli1-srv2" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003721 "$P_SRV debug_level=3 alpn=abc,1234" \
3722 "$P_CLI debug_level=3 alpn=1234,abcde" \
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003723 0 \
3724 -c "client hello, adding alpn extension" \
3725 -s "found alpn extension" \
3726 -C "got an alert message, type: \\[2:120]" \
3727 -s "server hello, adding alpn extension" \
3728 -c "found alpn extension" \
3729 -c "Application Layer Protocol is 1234" \
3730 -s "Application Layer Protocol is 1234"
3731
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003732run_test "ALPN: both, no common" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003733 "$P_SRV debug_level=3 alpn=abc,123" \
3734 "$P_CLI debug_level=3 alpn=1234,abcde" \
Manuel Pégourié-Gonnardf6521de2014-04-07 12:42:04 +02003735 1 \
3736 -c "client hello, adding alpn extension" \
3737 -s "found alpn extension" \
3738 -c "got an alert message, type: \\[2:120]" \
3739 -S "server hello, adding alpn extension" \
3740 -C "found alpn extension" \
3741 -C "Application Layer Protocol is 1234" \
3742 -S "Application Layer Protocol is 1234"
3743
Manuel Pégourié-Gonnard83d8c732014-04-07 13:24:21 +02003744
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003745# Tests for keyUsage in leaf certificates, part 1:
3746# server-side certificate/suite selection
3747
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003748run_test "keyUsage srv: RSA, digitalSignature -> (EC)DHE-RSA" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003749 "$P_SRV key_file=data_files/server2.key \
3750 crt_file=data_files/server2.ku-ds.crt" \
3751 "$P_CLI" \
3752 0 \
Manuel Pégourié-Gonnard17cde5f2014-05-22 14:42:39 +02003753 -c "Ciphersuite is TLS-[EC]*DHE-RSA-WITH-"
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003754
3755
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003756run_test "keyUsage srv: RSA, keyEncipherment -> RSA" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003757 "$P_SRV key_file=data_files/server2.key \
3758 crt_file=data_files/server2.ku-ke.crt" \
3759 "$P_CLI" \
3760 0 \
3761 -c "Ciphersuite is TLS-RSA-WITH-"
3762
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003763run_test "keyUsage srv: RSA, keyAgreement -> fail" \
Manuel Pégourié-Gonnardf2629b92014-08-30 14:20:14 +02003764 "$P_SRV key_file=data_files/server2.key \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003765 crt_file=data_files/server2.ku-ka.crt" \
Manuel Pégourié-Gonnardf2629b92014-08-30 14:20:14 +02003766 "$P_CLI" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003767 1 \
3768 -C "Ciphersuite is "
3769
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003770run_test "keyUsage srv: ECDSA, digitalSignature -> ECDHE-ECDSA" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003771 "$P_SRV key_file=data_files/server5.key \
3772 crt_file=data_files/server5.ku-ds.crt" \
3773 "$P_CLI" \
3774 0 \
3775 -c "Ciphersuite is TLS-ECDHE-ECDSA-WITH-"
3776
3777
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003778run_test "keyUsage srv: ECDSA, keyAgreement -> ECDH-" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003779 "$P_SRV key_file=data_files/server5.key \
3780 crt_file=data_files/server5.ku-ka.crt" \
3781 "$P_CLI" \
3782 0 \
3783 -c "Ciphersuite is TLS-ECDH-"
3784
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003785run_test "keyUsage srv: ECDSA, keyEncipherment -> fail" \
Manuel Pégourié-Gonnardf2629b92014-08-30 14:20:14 +02003786 "$P_SRV key_file=data_files/server5.key \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003787 crt_file=data_files/server5.ku-ke.crt" \
Manuel Pégourié-Gonnardf2629b92014-08-30 14:20:14 +02003788 "$P_CLI" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003789 1 \
3790 -C "Ciphersuite is "
3791
3792# Tests for keyUsage in leaf certificates, part 2:
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003793# client-side checking of server cert
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003794
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003795run_test "keyUsage cli: DigitalSignature+KeyEncipherment, RSA: OK" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003796 "$O_SRV -key data_files/server2.key \
3797 -cert data_files/server2.ku-ds_ke.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003798 "$P_CLI debug_level=1 \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003799 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
3800 0 \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003801 -C "bad certificate (usage extensions)" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003802 -C "Processing of the Certificate handshake message failed" \
3803 -c "Ciphersuite is TLS-"
3804
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003805run_test "keyUsage cli: DigitalSignature+KeyEncipherment, DHE-RSA: OK" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003806 "$O_SRV -key data_files/server2.key \
3807 -cert data_files/server2.ku-ds_ke.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003808 "$P_CLI debug_level=1 \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003809 force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \
3810 0 \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003811 -C "bad certificate (usage extensions)" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003812 -C "Processing of the Certificate handshake message failed" \
3813 -c "Ciphersuite is TLS-"
3814
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003815run_test "keyUsage cli: KeyEncipherment, RSA: OK" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003816 "$O_SRV -key data_files/server2.key \
3817 -cert data_files/server2.ku-ke.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003818 "$P_CLI debug_level=1 \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003819 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
3820 0 \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003821 -C "bad certificate (usage extensions)" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003822 -C "Processing of the Certificate handshake message failed" \
3823 -c "Ciphersuite is TLS-"
3824
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003825run_test "keyUsage cli: KeyEncipherment, DHE-RSA: fail" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003826 "$O_SRV -key data_files/server2.key \
3827 -cert data_files/server2.ku-ke.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003828 "$P_CLI debug_level=1 \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003829 force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \
3830 1 \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003831 -c "bad certificate (usage extensions)" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003832 -c "Processing of the Certificate handshake message failed" \
3833 -C "Ciphersuite is TLS-"
3834
Manuel Pégourié-Gonnarde6efa6f2015-04-20 11:01:48 +01003835run_test "keyUsage cli: KeyEncipherment, DHE-RSA: fail, soft" \
3836 "$O_SRV -key data_files/server2.key \
3837 -cert data_files/server2.ku-ke.crt" \
3838 "$P_CLI debug_level=1 auth_mode=optional \
3839 force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \
3840 0 \
3841 -c "bad certificate (usage extensions)" \
3842 -C "Processing of the Certificate handshake message failed" \
3843 -c "Ciphersuite is TLS-" \
3844 -c "! Usage does not match the keyUsage extension"
3845
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003846run_test "keyUsage cli: DigitalSignature, DHE-RSA: OK" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003847 "$O_SRV -key data_files/server2.key \
3848 -cert data_files/server2.ku-ds.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003849 "$P_CLI debug_level=1 \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003850 force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \
3851 0 \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003852 -C "bad certificate (usage extensions)" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003853 -C "Processing of the Certificate handshake message failed" \
3854 -c "Ciphersuite is TLS-"
3855
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003856run_test "keyUsage cli: DigitalSignature, RSA: fail" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003857 "$O_SRV -key data_files/server2.key \
3858 -cert data_files/server2.ku-ds.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003859 "$P_CLI debug_level=1 \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003860 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
3861 1 \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003862 -c "bad certificate (usage extensions)" \
Manuel Pégourié-Gonnard7f2a07d2014-04-09 09:50:57 +02003863 -c "Processing of the Certificate handshake message failed" \
3864 -C "Ciphersuite is TLS-"
3865
Manuel Pégourié-Gonnarde6efa6f2015-04-20 11:01:48 +01003866run_test "keyUsage cli: DigitalSignature, RSA: fail, soft" \
3867 "$O_SRV -key data_files/server2.key \
3868 -cert data_files/server2.ku-ds.crt" \
3869 "$P_CLI debug_level=1 auth_mode=optional \
3870 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
3871 0 \
3872 -c "bad certificate (usage extensions)" \
3873 -C "Processing of the Certificate handshake message failed" \
3874 -c "Ciphersuite is TLS-" \
3875 -c "! Usage does not match the keyUsage extension"
3876
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003877# Tests for keyUsage in leaf certificates, part 3:
3878# server-side checking of client cert
3879
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003880run_test "keyUsage cli-auth: RSA, DigitalSignature: OK" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003881 "$P_SRV debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003882 "$O_CLI -key data_files/server2.key \
3883 -cert data_files/server2.ku-ds.crt" \
3884 0 \
3885 -S "bad certificate (usage extensions)" \
3886 -S "Processing of the Certificate handshake message failed"
3887
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003888run_test "keyUsage cli-auth: RSA, KeyEncipherment: fail (soft)" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003889 "$P_SRV debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003890 "$O_CLI -key data_files/server2.key \
3891 -cert data_files/server2.ku-ke.crt" \
3892 0 \
3893 -s "bad certificate (usage extensions)" \
3894 -S "Processing of the Certificate handshake message failed"
3895
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003896run_test "keyUsage cli-auth: RSA, KeyEncipherment: fail (hard)" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003897 "$P_SRV debug_level=1 auth_mode=required" \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003898 "$O_CLI -key data_files/server2.key \
3899 -cert data_files/server2.ku-ke.crt" \
3900 1 \
3901 -s "bad certificate (usage extensions)" \
3902 -s "Processing of the Certificate handshake message failed"
3903
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003904run_test "keyUsage cli-auth: ECDSA, DigitalSignature: OK" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003905 "$P_SRV debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003906 "$O_CLI -key data_files/server5.key \
3907 -cert data_files/server5.ku-ds.crt" \
3908 0 \
3909 -S "bad certificate (usage extensions)" \
3910 -S "Processing of the Certificate handshake message failed"
3911
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003912run_test "keyUsage cli-auth: ECDSA, KeyAgreement: fail (soft)" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003913 "$P_SRV debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnarda9db85d2014-04-09 14:53:05 +02003914 "$O_CLI -key data_files/server5.key \
3915 -cert data_files/server5.ku-ka.crt" \
3916 0 \
3917 -s "bad certificate (usage extensions)" \
3918 -S "Processing of the Certificate handshake message failed"
3919
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003920# Tests for extendedKeyUsage, part 1: server-side certificate/suite selection
3921
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003922run_test "extKeyUsage srv: serverAuth -> OK" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003923 "$P_SRV key_file=data_files/server5.key \
3924 crt_file=data_files/server5.eku-srv.crt" \
3925 "$P_CLI" \
3926 0
3927
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003928run_test "extKeyUsage srv: serverAuth,clientAuth -> OK" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003929 "$P_SRV key_file=data_files/server5.key \
3930 crt_file=data_files/server5.eku-srv.crt" \
3931 "$P_CLI" \
3932 0
3933
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003934run_test "extKeyUsage srv: codeSign,anyEKU -> OK" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003935 "$P_SRV key_file=data_files/server5.key \
3936 crt_file=data_files/server5.eku-cs_any.crt" \
3937 "$P_CLI" \
3938 0
3939
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003940run_test "extKeyUsage srv: codeSign -> fail" \
Manuel Pégourié-Gonnard7eb58cb2015-07-07 11:54:14 +02003941 "$P_SRV key_file=data_files/server5.key \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003942 crt_file=data_files/server5.eku-cli.crt" \
Manuel Pégourié-Gonnard7eb58cb2015-07-07 11:54:14 +02003943 "$P_CLI" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003944 1
3945
3946# Tests for extendedKeyUsage, part 2: client-side checking of server cert
3947
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003948run_test "extKeyUsage cli: serverAuth -> OK" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003949 "$O_SRV -key data_files/server5.key \
3950 -cert data_files/server5.eku-srv.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003951 "$P_CLI debug_level=1" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003952 0 \
3953 -C "bad certificate (usage extensions)" \
3954 -C "Processing of the Certificate handshake message failed" \
3955 -c "Ciphersuite is TLS-"
3956
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003957run_test "extKeyUsage cli: serverAuth,clientAuth -> OK" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003958 "$O_SRV -key data_files/server5.key \
3959 -cert data_files/server5.eku-srv_cli.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003960 "$P_CLI debug_level=1" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003961 0 \
3962 -C "bad certificate (usage extensions)" \
3963 -C "Processing of the Certificate handshake message failed" \
3964 -c "Ciphersuite is TLS-"
3965
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003966run_test "extKeyUsage cli: codeSign,anyEKU -> OK" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003967 "$O_SRV -key data_files/server5.key \
3968 -cert data_files/server5.eku-cs_any.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003969 "$P_CLI debug_level=1" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003970 0 \
3971 -C "bad certificate (usage extensions)" \
3972 -C "Processing of the Certificate handshake message failed" \
3973 -c "Ciphersuite is TLS-"
3974
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003975run_test "extKeyUsage cli: codeSign -> fail" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003976 "$O_SRV -key data_files/server5.key \
3977 -cert data_files/server5.eku-cs.crt" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003978 "$P_CLI debug_level=1" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003979 1 \
3980 -c "bad certificate (usage extensions)" \
3981 -c "Processing of the Certificate handshake message failed" \
3982 -C "Ciphersuite is TLS-"
3983
3984# Tests for extendedKeyUsage, part 3: server-side checking of client cert
3985
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003986run_test "extKeyUsage cli-auth: clientAuth -> OK" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003987 "$P_SRV debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003988 "$O_CLI -key data_files/server5.key \
3989 -cert data_files/server5.eku-cli.crt" \
3990 0 \
3991 -S "bad certificate (usage extensions)" \
3992 -S "Processing of the Certificate handshake message failed"
3993
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02003994run_test "extKeyUsage cli-auth: serverAuth,clientAuth -> OK" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02003995 "$P_SRV debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02003996 "$O_CLI -key data_files/server5.key \
3997 -cert data_files/server5.eku-srv_cli.crt" \
3998 0 \
3999 -S "bad certificate (usage extensions)" \
4000 -S "Processing of the Certificate handshake message failed"
4001
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004002run_test "extKeyUsage cli-auth: codeSign,anyEKU -> OK" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02004003 "$P_SRV debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02004004 "$O_CLI -key data_files/server5.key \
4005 -cert data_files/server5.eku-cs_any.crt" \
4006 0 \
4007 -S "bad certificate (usage extensions)" \
4008 -S "Processing of the Certificate handshake message failed"
4009
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004010run_test "extKeyUsage cli-auth: codeSign -> fail (soft)" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02004011 "$P_SRV debug_level=1 auth_mode=optional" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02004012 "$O_CLI -key data_files/server5.key \
4013 -cert data_files/server5.eku-cs.crt" \
4014 0 \
4015 -s "bad certificate (usage extensions)" \
4016 -S "Processing of the Certificate handshake message failed"
4017
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004018run_test "extKeyUsage cli-auth: codeSign -> fail (hard)" \
Manuel Pégourié-Gonnard644e8f32014-08-30 21:59:31 +02004019 "$P_SRV debug_level=1 auth_mode=required" \
Manuel Pégourié-Gonnard0408fd12014-04-11 11:06:22 +02004020 "$O_CLI -key data_files/server5.key \
4021 -cert data_files/server5.eku-cs.crt" \
4022 1 \
4023 -s "bad certificate (usage extensions)" \
4024 -s "Processing of the Certificate handshake message failed"
4025
Manuel Pégourié-Gonnard0cc7e312014-06-09 11:36:47 +02004026# Tests for DHM parameters loading
4027
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004028run_test "DHM parameters: reference" \
Manuel Pégourié-Gonnard0cc7e312014-06-09 11:36:47 +02004029 "$P_SRV" \
4030 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4031 debug_level=3" \
4032 0 \
4033 -c "value of 'DHM: P ' (2048 bits)" \
Hanno Becker13be9902017-09-27 17:17:30 +01004034 -c "value of 'DHM: G ' (2 bits)"
Manuel Pégourié-Gonnard0cc7e312014-06-09 11:36:47 +02004035
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004036run_test "DHM parameters: other parameters" \
Manuel Pégourié-Gonnard0cc7e312014-06-09 11:36:47 +02004037 "$P_SRV dhm_file=data_files/dhparams.pem" \
4038 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4039 debug_level=3" \
4040 0 \
4041 -c "value of 'DHM: P ' (1024 bits)" \
4042 -c "value of 'DHM: G ' (2 bits)"
4043
Manuel Pégourié-Gonnard7a010aa2015-06-12 11:19:10 +02004044# Tests for DHM client-side size checking
4045
4046run_test "DHM size: server default, client default, OK" \
4047 "$P_SRV" \
4048 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4049 debug_level=1" \
4050 0 \
4051 -C "DHM prime too short:"
4052
4053run_test "DHM size: server default, client 2048, OK" \
4054 "$P_SRV" \
4055 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4056 debug_level=1 dhmlen=2048" \
4057 0 \
4058 -C "DHM prime too short:"
4059
4060run_test "DHM size: server 1024, client default, OK" \
4061 "$P_SRV dhm_file=data_files/dhparams.pem" \
4062 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4063 debug_level=1" \
4064 0 \
4065 -C "DHM prime too short:"
4066
Gilles Peskine3e7b61c2020-12-08 22:31:52 +01004067run_test "DHM size: server 999, client 999, OK" \
4068 "$P_SRV dhm_file=data_files/dh.999.pem" \
4069 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4070 debug_level=1 dhmlen=999" \
4071 0 \
4072 -C "DHM prime too short:"
4073
4074run_test "DHM size: server 1000, client 1000, OK" \
4075 "$P_SRV dhm_file=data_files/dh.1000.pem" \
4076 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4077 debug_level=1 dhmlen=1000" \
4078 0 \
4079 -C "DHM prime too short:"
4080
Manuel Pégourié-Gonnard7a010aa2015-06-12 11:19:10 +02004081run_test "DHM size: server 1000, client default, rejected" \
4082 "$P_SRV dhm_file=data_files/dh.1000.pem" \
4083 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4084 debug_level=1" \
4085 1 \
4086 -c "DHM prime too short:"
4087
Gilles Peskine3e7b61c2020-12-08 22:31:52 +01004088run_test "DHM size: server 1000, client 1001, rejected" \
4089 "$P_SRV dhm_file=data_files/dh.1000.pem" \
4090 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4091 debug_level=1 dhmlen=1001" \
4092 1 \
4093 -c "DHM prime too short:"
4094
4095run_test "DHM size: server 999, client 1000, rejected" \
4096 "$P_SRV dhm_file=data_files/dh.999.pem" \
4097 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4098 debug_level=1 dhmlen=1000" \
4099 1 \
4100 -c "DHM prime too short:"
4101
4102run_test "DHM size: server 998, client 999, rejected" \
4103 "$P_SRV dhm_file=data_files/dh.998.pem" \
4104 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4105 debug_level=1 dhmlen=999" \
4106 1 \
4107 -c "DHM prime too short:"
4108
Manuel Pégourié-Gonnard7a010aa2015-06-12 11:19:10 +02004109run_test "DHM size: server default, client 2049, rejected" \
4110 "$P_SRV" \
4111 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
4112 debug_level=1 dhmlen=2049" \
4113 1 \
4114 -c "DHM prime too short:"
4115
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004116# Tests for PSK callback
4117
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004118run_test "PSK callback: psk, no callback" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004119 "$P_SRV psk=abc123 psk_identity=foo" \
4120 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
4121 psk_identity=foo psk=abc123" \
4122 0 \
Manuel Pégourié-Gonnardf01768c2015-01-08 17:06:16 +01004123 -S "SSL - None of the common ciphersuites is usable" \
Manuel Pégourié-Gonnard10c3c9f2014-06-10 15:28:52 +02004124 -S "SSL - Unknown identity received" \
4125 -S "SSL - Verification of the message MAC failed"
4126
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004127run_test "PSK callback: no psk, no callback" \
Manuel Pégourié-Gonnard10c3c9f2014-06-10 15:28:52 +02004128 "$P_SRV" \
4129 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
4130 psk_identity=foo psk=abc123" \
4131 1 \
Manuel Pégourié-Gonnardf01768c2015-01-08 17:06:16 +01004132 -s "SSL - None of the common ciphersuites is usable" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004133 -S "SSL - Unknown identity received" \
4134 -S "SSL - Verification of the message MAC failed"
4135
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004136run_test "PSK callback: callback overrides other settings" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004137 "$P_SRV psk=abc123 psk_identity=foo psk_list=abc,dead,def,beef" \
4138 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
4139 psk_identity=foo psk=abc123" \
4140 1 \
Manuel Pégourié-Gonnardf01768c2015-01-08 17:06:16 +01004141 -S "SSL - None of the common ciphersuites is usable" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004142 -s "SSL - Unknown identity received" \
4143 -S "SSL - Verification of the message MAC failed"
4144
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004145run_test "PSK callback: first id matches" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004146 "$P_SRV psk_list=abc,dead,def,beef" \
4147 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
4148 psk_identity=abc psk=dead" \
4149 0 \
Manuel Pégourié-Gonnardf01768c2015-01-08 17:06:16 +01004150 -S "SSL - None of the common ciphersuites is usable" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004151 -S "SSL - Unknown identity received" \
4152 -S "SSL - Verification of the message MAC failed"
4153
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004154run_test "PSK callback: second id matches" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004155 "$P_SRV psk_list=abc,dead,def,beef" \
4156 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
4157 psk_identity=def psk=beef" \
4158 0 \
Manuel Pégourié-Gonnardf01768c2015-01-08 17:06:16 +01004159 -S "SSL - None of the common ciphersuites is usable" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004160 -S "SSL - Unknown identity received" \
4161 -S "SSL - Verification of the message MAC failed"
4162
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004163run_test "PSK callback: no match" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004164 "$P_SRV psk_list=abc,dead,def,beef" \
4165 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
4166 psk_identity=ghi psk=beef" \
4167 1 \
Manuel Pégourié-Gonnardf01768c2015-01-08 17:06:16 +01004168 -S "SSL - None of the common ciphersuites is usable" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004169 -s "SSL - Unknown identity received" \
4170 -S "SSL - Verification of the message MAC failed"
4171
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004172run_test "PSK callback: wrong key" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004173 "$P_SRV psk_list=abc,dead,def,beef" \
4174 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
4175 psk_identity=abc psk=beef" \
4176 1 \
Manuel Pégourié-Gonnardf01768c2015-01-08 17:06:16 +01004177 -S "SSL - None of the common ciphersuites is usable" \
Manuel Pégourié-Gonnarda6781c92014-06-10 15:00:46 +02004178 -S "SSL - Unknown identity received" \
4179 -s "SSL - Verification of the message MAC failed"
Manuel Pégourié-Gonnard0cc7e312014-06-09 11:36:47 +02004180
Manuel Pégourié-Gonnarde511b4e2015-09-16 14:11:09 +02004181# Tests for EC J-PAKE
4182
Manuel Pégourié-Gonnard12ca6f52015-10-20 15:24:51 +02004183requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
Manuel Pégourié-Gonnarde511b4e2015-09-16 14:11:09 +02004184run_test "ECJPAKE: client not configured" \
4185 "$P_SRV debug_level=3" \
4186 "$P_CLI debug_level=3" \
4187 0 \
4188 -C "add ciphersuite: c0ff" \
4189 -C "adding ecjpake_kkpp extension" \
Manuel Pégourié-Gonnardbf57be62015-09-16 15:04:01 +02004190 -S "found ecjpake kkpp extension" \
4191 -S "skip ecjpake kkpp extension" \
Manuel Pégourié-Gonnarde511b4e2015-09-16 14:11:09 +02004192 -S "ciphersuite mismatch: ecjpake not configured" \
Manuel Pégourié-Gonnard55c7f992015-09-16 15:35:27 +02004193 -S "server hello, ecjpake kkpp extension" \
Manuel Pégourié-Gonnard0a1324a2015-09-16 16:01:00 +02004194 -C "found ecjpake_kkpp extension" \
Manuel Pégourié-Gonnarde511b4e2015-09-16 14:11:09 +02004195 -S "None of the common ciphersuites is usable"
4196
Manuel Pégourié-Gonnard12ca6f52015-10-20 15:24:51 +02004197requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
Manuel Pégourié-Gonnarde511b4e2015-09-16 14:11:09 +02004198run_test "ECJPAKE: server not configured" \
4199 "$P_SRV debug_level=3" \
4200 "$P_CLI debug_level=3 ecjpake_pw=bla \
4201 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
4202 1 \
4203 -c "add ciphersuite: c0ff" \
4204 -c "adding ecjpake_kkpp extension" \
Manuel Pégourié-Gonnardbf57be62015-09-16 15:04:01 +02004205 -s "found ecjpake kkpp extension" \
4206 -s "skip ecjpake kkpp extension" \
Manuel Pégourié-Gonnarde511b4e2015-09-16 14:11:09 +02004207 -s "ciphersuite mismatch: ecjpake not configured" \
Manuel Pégourié-Gonnard55c7f992015-09-16 15:35:27 +02004208 -S "server hello, ecjpake kkpp extension" \
Manuel Pégourié-Gonnard0a1324a2015-09-16 16:01:00 +02004209 -C "found ecjpake_kkpp extension" \
Manuel Pégourié-Gonnarde511b4e2015-09-16 14:11:09 +02004210 -s "None of the common ciphersuites is usable"
4211
Manuel Pégourié-Gonnard12ca6f52015-10-20 15:24:51 +02004212requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
Manuel Pégourié-Gonnardbf57be62015-09-16 15:04:01 +02004213run_test "ECJPAKE: working, TLS" \
4214 "$P_SRV debug_level=3 ecjpake_pw=bla" \
4215 "$P_CLI debug_level=3 ecjpake_pw=bla \
4216 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
Manuel Pégourié-Gonnard0f1660a2015-09-16 22:41:06 +02004217 0 \
Manuel Pégourié-Gonnardbf57be62015-09-16 15:04:01 +02004218 -c "add ciphersuite: c0ff" \
4219 -c "adding ecjpake_kkpp extension" \
Manuel Pégourié-Gonnardd0d8cb32015-09-17 14:16:30 +02004220 -C "re-using cached ecjpake parameters" \
Manuel Pégourié-Gonnardbf57be62015-09-16 15:04:01 +02004221 -s "found ecjpake kkpp extension" \
4222 -S "skip ecjpake kkpp extension" \
4223 -S "ciphersuite mismatch: ecjpake not configured" \
Manuel Pégourié-Gonnard55c7f992015-09-16 15:35:27 +02004224 -s "server hello, ecjpake kkpp extension" \
Manuel Pégourié-Gonnard0a1324a2015-09-16 16:01:00 +02004225 -c "found ecjpake_kkpp extension" \
Manuel Pégourié-Gonnard921f2d02015-09-16 22:52:18 +02004226 -S "None of the common ciphersuites is usable" \
4227 -S "SSL - Verification of the message MAC failed"
4228
Janos Follath74537a62016-09-02 13:45:28 +01004229server_needs_more_time 1
Dave Rodgmancee9e922021-06-29 19:05:34 +01004230requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
Manuel Pégourié-Gonnard921f2d02015-09-16 22:52:18 +02004231run_test "ECJPAKE: password mismatch, TLS" \
4232 "$P_SRV debug_level=3 ecjpake_pw=bla" \
4233 "$P_CLI debug_level=3 ecjpake_pw=bad \
4234 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
4235 1 \
Manuel Pégourié-Gonnardd0d8cb32015-09-17 14:16:30 +02004236 -C "re-using cached ecjpake parameters" \
Manuel Pégourié-Gonnard921f2d02015-09-16 22:52:18 +02004237 -s "SSL - Verification of the message MAC failed"
4238
Dave Rodgmancee9e922021-06-29 19:05:34 +01004239requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
Manuel Pégourié-Gonnard921f2d02015-09-16 22:52:18 +02004240run_test "ECJPAKE: working, DTLS" \
4241 "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla" \
4242 "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bla \
4243 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
4244 0 \
Manuel Pégourié-Gonnardd0d8cb32015-09-17 14:16:30 +02004245 -c "re-using cached ecjpake parameters" \
4246 -S "SSL - Verification of the message MAC failed"
4247
Dave Rodgmancee9e922021-06-29 19:05:34 +01004248requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
Manuel Pégourié-Gonnardd0d8cb32015-09-17 14:16:30 +02004249run_test "ECJPAKE: working, DTLS, no cookie" \
4250 "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla cookies=0" \
4251 "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bla \
4252 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
4253 0 \
4254 -C "re-using cached ecjpake parameters" \
Manuel Pégourié-Gonnard921f2d02015-09-16 22:52:18 +02004255 -S "SSL - Verification of the message MAC failed"
4256
Janos Follath74537a62016-09-02 13:45:28 +01004257server_needs_more_time 1
Dave Rodgmancee9e922021-06-29 19:05:34 +01004258requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
Manuel Pégourié-Gonnard921f2d02015-09-16 22:52:18 +02004259run_test "ECJPAKE: password mismatch, DTLS" \
4260 "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla" \
4261 "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bad \
4262 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
4263 1 \
Manuel Pégourié-Gonnardd0d8cb32015-09-17 14:16:30 +02004264 -c "re-using cached ecjpake parameters" \
Manuel Pégourié-Gonnard921f2d02015-09-16 22:52:18 +02004265 -s "SSL - Verification of the message MAC failed"
Manuel Pégourié-Gonnardbf57be62015-09-16 15:04:01 +02004266
Manuel Pégourié-Gonnardca700b22015-10-20 14:47:00 +02004267# for tests with configs/config-thread.h
Dave Rodgmancee9e922021-06-29 19:05:34 +01004268requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
Manuel Pégourié-Gonnardca700b22015-10-20 14:47:00 +02004269run_test "ECJPAKE: working, DTLS, nolog" \
4270 "$P_SRV dtls=1 ecjpake_pw=bla" \
4271 "$P_CLI dtls=1 ecjpake_pw=bla \
4272 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
4273 0
4274
Manuel Pégourié-Gonnard90805a82014-06-11 14:06:01 +02004275# Tests for ciphersuites per version
4276
Janos Follathe2681a42016-03-07 15:57:05 +00004277requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004278requires_config_enabled MBEDTLS_CAMELLIA_C
4279requires_config_enabled MBEDTLS_AES_C
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004280run_test "Per-version suites: SSL3" \
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004281 "$P_SRV min_version=ssl3 version_suites=TLS-RSA-WITH-CAMELLIA-128-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
Manuel Pégourié-Gonnard90805a82014-06-11 14:06:01 +02004282 "$P_CLI force_version=ssl3" \
4283 0 \
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004284 -c "Ciphersuite is TLS-RSA-WITH-CAMELLIA-128-CBC-SHA"
Manuel Pégourié-Gonnard90805a82014-06-11 14:06:01 +02004285
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004286requires_config_enabled MBEDTLS_SSL_PROTO_TLS1
4287requires_config_enabled MBEDTLS_CAMELLIA_C
4288requires_config_enabled MBEDTLS_AES_C
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004289run_test "Per-version suites: TLS 1.0" \
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004290 "$P_SRV version_suites=TLS-RSA-WITH-CAMELLIA-128-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
Manuel Pégourié-Gonnardbd47a582015-01-12 13:43:29 +01004291 "$P_CLI force_version=tls1 arc4=1" \
Manuel Pégourié-Gonnard90805a82014-06-11 14:06:01 +02004292 0 \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01004293 -c "Ciphersuite is TLS-RSA-WITH-AES-256-CBC-SHA"
Manuel Pégourié-Gonnard90805a82014-06-11 14:06:01 +02004294
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004295requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
4296requires_config_enabled MBEDTLS_CAMELLIA_C
4297requires_config_enabled MBEDTLS_AES_C
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004298run_test "Per-version suites: TLS 1.1" \
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004299 "$P_SRV version_suites=TLS-RSA-WITH-CAMELLIA-128-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
Manuel Pégourié-Gonnard90805a82014-06-11 14:06:01 +02004300 "$P_CLI force_version=tls1_1" \
4301 0 \
4302 -c "Ciphersuite is TLS-RSA-WITH-AES-128-CBC-SHA"
4303
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004304requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
4305requires_config_enabled MBEDTLS_CAMELLIA_C
4306requires_config_enabled MBEDTLS_AES_C
Manuel Pégourié-Gonnard8e03c712014-08-30 21:42:40 +02004307run_test "Per-version suites: TLS 1.2" \
Manuel Pégourié-Gonnardf1e62e82019-03-01 10:14:58 +01004308 "$P_SRV version_suites=TLS-RSA-WITH-CAMELLIA-128-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
Manuel Pégourié-Gonnard90805a82014-06-11 14:06:01 +02004309 "$P_CLI force_version=tls1_2" \
4310 0 \
4311 -c "Ciphersuite is TLS-RSA-WITH-AES-128-GCM-SHA256"
4312
Manuel Pégourié-Gonnard4cc8c632015-07-23 12:24:03 +02004313# Test for ClientHello without extensions
4314
Manuel Pégourié-Gonnardd55bc202015-08-04 16:22:30 +02004315requires_gnutls
Manuel Pégourié-Gonnardd20ae892020-01-30 12:45:14 +01004316run_test "ClientHello without extensions" \
Manuel Pégourié-Gonnard7c9add22020-01-30 10:58:57 +01004317 "$P_SRV debug_level=3" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02004318 "$G_CLI --priority=NORMAL:%NO_EXTENSIONS:%DISABLE_SAFE_RENEGOTIATION localhost" \
Gilles Peskine5d2511c2017-05-12 13:16:40 +02004319 0 \
4320 -s "dumping 'client hello extensions' (0 bytes)"
4321
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02004322# Tests for mbedtls_ssl_get_bytes_avail()
Manuel Pégourié-Gonnard95c0a632014-06-11 18:32:36 +02004323
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02004324run_test "mbedtls_ssl_get_bytes_avail: no extra data" \
Manuel Pégourié-Gonnard95c0a632014-06-11 18:32:36 +02004325 "$P_SRV" \
4326 "$P_CLI request_size=100" \
4327 0 \
4328 -s "Read from client: 100 bytes read$"
4329
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02004330run_test "mbedtls_ssl_get_bytes_avail: extra data" \
Manuel Pégourié-Gonnard95c0a632014-06-11 18:32:36 +02004331 "$P_SRV" \
4332 "$P_CLI request_size=500" \
4333 0 \
4334 -s "Read from client: 500 bytes read (.*+.*)"
Manuel Pégourié-Gonnard90805a82014-06-11 14:06:01 +02004335
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004336# Tests for small client packets
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004337
Janos Follathe2681a42016-03-07 15:57:05 +00004338requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004339run_test "Small client packet SSLv3 BlockCipher" \
Manuel Pégourié-Gonnard448ea502015-01-12 11:40:14 +01004340 "$P_SRV min_version=ssl3" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004341 "$P_CLI request_size=1 force_version=ssl3 \
4342 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4343 0 \
4344 -s "Read from client: 1 bytes read"
4345
Janos Follathe2681a42016-03-07 15:57:05 +00004346requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004347run_test "Small client packet SSLv3 StreamCipher" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01004348 "$P_SRV min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004349 "$P_CLI request_size=1 force_version=ssl3 \
4350 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4351 0 \
4352 -s "Read from client: 1 bytes read"
4353
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004354run_test "Small client packet TLS 1.0 BlockCipher" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004355 "$P_SRV" \
4356 "$P_CLI request_size=1 force_version=tls1 \
4357 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4358 0 \
4359 -s "Read from client: 1 bytes read"
4360
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004361run_test "Small client packet TLS 1.0 BlockCipher, without EtM" \
Manuel Pégourié-Gonnard169dd6a2014-11-04 16:15:39 +01004362 "$P_SRV" \
4363 "$P_CLI request_size=1 force_version=tls1 etm=0 \
4364 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4365 0 \
4366 -s "Read from client: 1 bytes read"
4367
Hanno Becker32c55012017-11-10 08:42:54 +00004368requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004369run_test "Small client packet TLS 1.0 BlockCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004370 "$P_SRV trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004371 "$P_CLI request_size=1 force_version=tls1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004372 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004373 0 \
4374 -s "Read from client: 1 bytes read"
4375
Hanno Becker32c55012017-11-10 08:42:54 +00004376requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004377run_test "Small client packet TLS 1.0 BlockCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004378 "$P_SRV trunc_hmac=1" \
Hanno Becker8501f982017-11-10 08:59:04 +00004379 "$P_CLI request_size=1 force_version=tls1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004380 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
Hanno Becker8501f982017-11-10 08:59:04 +00004381 0 \
4382 -s "Read from client: 1 bytes read"
4383
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004384run_test "Small client packet TLS 1.0 StreamCipher" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01004385 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004386 "$P_CLI request_size=1 force_version=tls1 \
Hanno Becker8501f982017-11-10 08:59:04 +00004387 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4388 0 \
4389 -s "Read from client: 1 bytes read"
4390
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004391run_test "Small client packet TLS 1.0 StreamCipher, without EtM" \
Hanno Becker8501f982017-11-10 08:59:04 +00004392 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4393 "$P_CLI request_size=1 force_version=tls1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004394 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
Hanno Becker8501f982017-11-10 08:59:04 +00004395 0 \
4396 -s "Read from client: 1 bytes read"
4397
4398requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004399run_test "Small client packet TLS 1.0 StreamCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004400 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004401 "$P_CLI request_size=1 force_version=tls1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004402 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004403 0 \
4404 -s "Read from client: 1 bytes read"
4405
Hanno Becker8501f982017-11-10 08:59:04 +00004406requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004407run_test "Small client packet TLS 1.0 StreamCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004408 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4409 "$P_CLI request_size=1 force_version=tls1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
4410 trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004411 0 \
4412 -s "Read from client: 1 bytes read"
4413
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004414run_test "Small client packet TLS 1.1 BlockCipher" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004415 "$P_SRV" \
4416 "$P_CLI request_size=1 force_version=tls1_1 \
4417 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4418 0 \
4419 -s "Read from client: 1 bytes read"
4420
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004421run_test "Small client packet TLS 1.1 BlockCipher, without EtM" \
Manuel Pégourié-Gonnard169dd6a2014-11-04 16:15:39 +01004422 "$P_SRV" \
Hanno Becker8501f982017-11-10 08:59:04 +00004423 "$P_CLI request_size=1 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004424 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA etm=0" \
Hanno Becker8501f982017-11-10 08:59:04 +00004425 0 \
4426 -s "Read from client: 1 bytes read"
4427
4428requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004429run_test "Small client packet TLS 1.1 BlockCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004430 "$P_SRV trunc_hmac=1" \
Hanno Becker8501f982017-11-10 08:59:04 +00004431 "$P_CLI request_size=1 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004432 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
Hanno Becker8501f982017-11-10 08:59:04 +00004433 0 \
4434 -s "Read from client: 1 bytes read"
4435
4436requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004437run_test "Small client packet TLS 1.1 BlockCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004438 "$P_SRV trunc_hmac=1" \
Hanno Becker8501f982017-11-10 08:59:04 +00004439 "$P_CLI request_size=1 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004440 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnard169dd6a2014-11-04 16:15:39 +01004441 0 \
4442 -s "Read from client: 1 bytes read"
4443
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004444run_test "Small client packet TLS 1.1 StreamCipher" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01004445 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004446 "$P_CLI request_size=1 force_version=tls1_1 \
4447 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4448 0 \
4449 -s "Read from client: 1 bytes read"
4450
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004451run_test "Small client packet TLS 1.1 StreamCipher, without EtM" \
Hanno Becker8501f982017-11-10 08:59:04 +00004452 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004453 "$P_CLI request_size=1 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004454 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004455 0 \
4456 -s "Read from client: 1 bytes read"
4457
Hanno Becker8501f982017-11-10 08:59:04 +00004458requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004459run_test "Small client packet TLS 1.1 StreamCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004460 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004461 "$P_CLI request_size=1 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004462 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004463 0 \
4464 -s "Read from client: 1 bytes read"
4465
Hanno Becker32c55012017-11-10 08:42:54 +00004466requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004467run_test "Small client packet TLS 1.1 StreamCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004468 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004469 "$P_CLI request_size=1 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004470 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004471 0 \
4472 -s "Read from client: 1 bytes read"
4473
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004474run_test "Small client packet TLS 1.2 BlockCipher" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004475 "$P_SRV" \
4476 "$P_CLI request_size=1 force_version=tls1_2 \
4477 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4478 0 \
4479 -s "Read from client: 1 bytes read"
4480
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004481run_test "Small client packet TLS 1.2 BlockCipher, without EtM" \
Manuel Pégourié-Gonnard169dd6a2014-11-04 16:15:39 +01004482 "$P_SRV" \
Hanno Becker8501f982017-11-10 08:59:04 +00004483 "$P_CLI request_size=1 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004484 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA etm=0" \
Manuel Pégourié-Gonnard169dd6a2014-11-04 16:15:39 +01004485 0 \
4486 -s "Read from client: 1 bytes read"
4487
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004488run_test "Small client packet TLS 1.2 BlockCipher larger MAC" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004489 "$P_SRV" \
Manuel Pégourié-Gonnardc82ee352015-01-07 16:35:25 +01004490 "$P_CLI request_size=1 force_version=tls1_2 \
4491 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004492 0 \
4493 -s "Read from client: 1 bytes read"
4494
Hanno Becker32c55012017-11-10 08:42:54 +00004495requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004496run_test "Small client packet TLS 1.2 BlockCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004497 "$P_SRV trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004498 "$P_CLI request_size=1 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004499 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004500 0 \
4501 -s "Read from client: 1 bytes read"
4502
Hanno Becker8501f982017-11-10 08:59:04 +00004503requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004504run_test "Small client packet TLS 1.2 BlockCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004505 "$P_SRV trunc_hmac=1" \
Hanno Becker8501f982017-11-10 08:59:04 +00004506 "$P_CLI request_size=1 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004507 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004508 0 \
4509 -s "Read from client: 1 bytes read"
4510
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004511run_test "Small client packet TLS 1.2 StreamCipher" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01004512 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004513 "$P_CLI request_size=1 force_version=tls1_2 \
4514 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4515 0 \
4516 -s "Read from client: 1 bytes read"
4517
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004518run_test "Small client packet TLS 1.2 StreamCipher, without EtM" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01004519 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004520 "$P_CLI request_size=1 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004521 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
Hanno Becker8501f982017-11-10 08:59:04 +00004522 0 \
4523 -s "Read from client: 1 bytes read"
4524
Hanno Becker32c55012017-11-10 08:42:54 +00004525requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004526run_test "Small client packet TLS 1.2 StreamCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004527 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004528 "$P_CLI request_size=1 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004529 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004530 0 \
4531 -s "Read from client: 1 bytes read"
4532
Hanno Becker8501f982017-11-10 08:59:04 +00004533requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004534run_test "Small client packet TLS 1.2 StreamCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004535 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Hanno Becker8501f982017-11-10 08:59:04 +00004536 "$P_CLI request_size=1 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004537 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004538 0 \
4539 -s "Read from client: 1 bytes read"
4540
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004541run_test "Small client packet TLS 1.2 AEAD" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004542 "$P_SRV" \
4543 "$P_CLI request_size=1 force_version=tls1_2 \
4544 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \
4545 0 \
4546 -s "Read from client: 1 bytes read"
4547
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004548run_test "Small client packet TLS 1.2 AEAD shorter tag" \
Manuel Pégourié-Gonnardee415032014-06-18 15:08:56 +02004549 "$P_SRV" \
4550 "$P_CLI request_size=1 force_version=tls1_2 \
4551 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \
4552 0 \
4553 -s "Read from client: 1 bytes read"
4554
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004555# Tests for small client packets in DTLS
Hanno Beckere2148042017-11-10 08:59:18 +00004556
4557requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004558run_test "Small client packet DTLS 1.0" \
Hanno Beckere2148042017-11-10 08:59:18 +00004559 "$P_SRV dtls=1 force_version=dtls1" \
4560 "$P_CLI dtls=1 request_size=1 \
4561 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4562 0 \
4563 -s "Read from client: 1 bytes read"
4564
4565requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004566run_test "Small client packet DTLS 1.0, without EtM" \
Hanno Beckere2148042017-11-10 08:59:18 +00004567 "$P_SRV dtls=1 force_version=dtls1 etm=0" \
4568 "$P_CLI dtls=1 request_size=1 \
4569 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4570 0 \
4571 -s "Read from client: 1 bytes read"
4572
4573requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4574requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004575run_test "Small client packet DTLS 1.0, truncated hmac" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004576 "$P_SRV dtls=1 force_version=dtls1 trunc_hmac=1" \
4577 "$P_CLI dtls=1 request_size=1 trunc_hmac=1 \
Hanno Beckere2148042017-11-10 08:59:18 +00004578 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4579 0 \
4580 -s "Read from client: 1 bytes read"
4581
4582requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4583requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004584run_test "Small client packet DTLS 1.0, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004585 "$P_SRV dtls=1 force_version=dtls1 trunc_hmac=1 etm=0" \
Hanno Beckere2148042017-11-10 08:59:18 +00004586 "$P_CLI dtls=1 request_size=1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004587 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1"\
Hanno Beckere2148042017-11-10 08:59:18 +00004588 0 \
4589 -s "Read from client: 1 bytes read"
4590
4591requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004592run_test "Small client packet DTLS 1.2" \
Hanno Beckere2148042017-11-10 08:59:18 +00004593 "$P_SRV dtls=1 force_version=dtls1_2" \
4594 "$P_CLI dtls=1 request_size=1 \
4595 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4596 0 \
4597 -s "Read from client: 1 bytes read"
4598
4599requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004600run_test "Small client packet DTLS 1.2, without EtM" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004601 "$P_SRV dtls=1 force_version=dtls1_2 etm=0" \
Hanno Beckere2148042017-11-10 08:59:18 +00004602 "$P_CLI dtls=1 request_size=1 \
4603 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4604 0 \
4605 -s "Read from client: 1 bytes read"
4606
4607requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4608requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004609run_test "Small client packet DTLS 1.2, truncated hmac" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004610 "$P_SRV dtls=1 force_version=dtls1_2 trunc_hmac=1" \
Hanno Beckere2148042017-11-10 08:59:18 +00004611 "$P_CLI dtls=1 request_size=1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004612 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
Hanno Beckere2148042017-11-10 08:59:18 +00004613 0 \
4614 -s "Read from client: 1 bytes read"
4615
4616requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4617requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004618run_test "Small client packet DTLS 1.2, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004619 "$P_SRV dtls=1 force_version=dtls1_2 trunc_hmac=1 etm=0" \
Hanno Beckere2148042017-11-10 08:59:18 +00004620 "$P_CLI dtls=1 request_size=1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004621 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1"\
Hanno Beckere2148042017-11-10 08:59:18 +00004622 0 \
4623 -s "Read from client: 1 bytes read"
4624
Andrzej Kurekc19fc552018-06-19 09:37:30 -04004625# Tests for small server packets
4626
4627requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
4628run_test "Small server packet SSLv3 BlockCipher" \
4629 "$P_SRV response_size=1 min_version=ssl3" \
4630 "$P_CLI force_version=ssl3 \
4631 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4632 0 \
4633 -c "Read from server: 1 bytes read"
4634
4635requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
4636run_test "Small server packet SSLv3 StreamCipher" \
4637 "$P_SRV response_size=1 min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4638 "$P_CLI force_version=ssl3 \
4639 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4640 0 \
4641 -c "Read from server: 1 bytes read"
4642
4643run_test "Small server packet TLS 1.0 BlockCipher" \
4644 "$P_SRV response_size=1" \
4645 "$P_CLI force_version=tls1 \
4646 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4647 0 \
4648 -c "Read from server: 1 bytes read"
4649
4650run_test "Small server packet TLS 1.0 BlockCipher, without EtM" \
4651 "$P_SRV response_size=1" \
4652 "$P_CLI force_version=tls1 etm=0 \
4653 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4654 0 \
4655 -c "Read from server: 1 bytes read"
4656
4657requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4658run_test "Small server packet TLS 1.0 BlockCipher, truncated MAC" \
4659 "$P_SRV response_size=1 trunc_hmac=1" \
4660 "$P_CLI force_version=tls1 \
4661 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
4662 0 \
4663 -c "Read from server: 1 bytes read"
4664
4665requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4666run_test "Small server packet TLS 1.0 BlockCipher, without EtM, truncated MAC" \
4667 "$P_SRV response_size=1 trunc_hmac=1" \
4668 "$P_CLI force_version=tls1 \
4669 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
4670 0 \
4671 -c "Read from server: 1 bytes read"
4672
4673run_test "Small server packet TLS 1.0 StreamCipher" \
4674 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4675 "$P_CLI force_version=tls1 \
4676 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4677 0 \
4678 -c "Read from server: 1 bytes read"
4679
4680run_test "Small server packet TLS 1.0 StreamCipher, without EtM" \
4681 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4682 "$P_CLI force_version=tls1 \
4683 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
4684 0 \
4685 -c "Read from server: 1 bytes read"
4686
4687requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4688run_test "Small server packet TLS 1.0 StreamCipher, truncated MAC" \
4689 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4690 "$P_CLI force_version=tls1 \
4691 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4692 0 \
4693 -c "Read from server: 1 bytes read"
4694
4695requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4696run_test "Small server packet TLS 1.0 StreamCipher, without EtM, truncated MAC" \
4697 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4698 "$P_CLI force_version=tls1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
4699 trunc_hmac=1 etm=0" \
4700 0 \
4701 -c "Read from server: 1 bytes read"
4702
4703run_test "Small server packet TLS 1.1 BlockCipher" \
4704 "$P_SRV response_size=1" \
4705 "$P_CLI force_version=tls1_1 \
4706 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4707 0 \
4708 -c "Read from server: 1 bytes read"
4709
4710run_test "Small server packet TLS 1.1 BlockCipher, without EtM" \
4711 "$P_SRV response_size=1" \
4712 "$P_CLI force_version=tls1_1 \
4713 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA etm=0" \
4714 0 \
4715 -c "Read from server: 1 bytes read"
4716
4717requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4718run_test "Small server packet TLS 1.1 BlockCipher, truncated MAC" \
4719 "$P_SRV response_size=1 trunc_hmac=1" \
4720 "$P_CLI force_version=tls1_1 \
4721 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
4722 0 \
4723 -c "Read from server: 1 bytes read"
4724
4725requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4726run_test "Small server packet TLS 1.1 BlockCipher, without EtM, truncated MAC" \
4727 "$P_SRV response_size=1 trunc_hmac=1" \
4728 "$P_CLI force_version=tls1_1 \
4729 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
4730 0 \
4731 -c "Read from server: 1 bytes read"
4732
4733run_test "Small server packet TLS 1.1 StreamCipher" \
4734 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4735 "$P_CLI force_version=tls1_1 \
4736 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4737 0 \
4738 -c "Read from server: 1 bytes read"
4739
4740run_test "Small server packet TLS 1.1 StreamCipher, without EtM" \
4741 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4742 "$P_CLI force_version=tls1_1 \
4743 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
4744 0 \
4745 -c "Read from server: 1 bytes read"
4746
4747requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4748run_test "Small server packet TLS 1.1 StreamCipher, truncated MAC" \
4749 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4750 "$P_CLI force_version=tls1_1 \
4751 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4752 0 \
4753 -c "Read from server: 1 bytes read"
4754
4755requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4756run_test "Small server packet TLS 1.1 StreamCipher, without EtM, truncated MAC" \
4757 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4758 "$P_CLI force_version=tls1_1 \
4759 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
4760 0 \
4761 -c "Read from server: 1 bytes read"
4762
4763run_test "Small server packet TLS 1.2 BlockCipher" \
4764 "$P_SRV response_size=1" \
4765 "$P_CLI force_version=tls1_2 \
4766 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4767 0 \
4768 -c "Read from server: 1 bytes read"
4769
4770run_test "Small server packet TLS 1.2 BlockCipher, without EtM" \
4771 "$P_SRV response_size=1" \
4772 "$P_CLI force_version=tls1_2 \
4773 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA etm=0" \
4774 0 \
4775 -c "Read from server: 1 bytes read"
4776
4777run_test "Small server packet TLS 1.2 BlockCipher larger MAC" \
4778 "$P_SRV response_size=1" \
4779 "$P_CLI force_version=tls1_2 \
4780 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \
4781 0 \
4782 -c "Read from server: 1 bytes read"
4783
4784requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4785run_test "Small server packet TLS 1.2 BlockCipher, truncated MAC" \
4786 "$P_SRV response_size=1 trunc_hmac=1" \
4787 "$P_CLI force_version=tls1_2 \
4788 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
4789 0 \
4790 -c "Read from server: 1 bytes read"
4791
4792requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4793run_test "Small server packet TLS 1.2 BlockCipher, without EtM, truncated MAC" \
4794 "$P_SRV response_size=1 trunc_hmac=1" \
4795 "$P_CLI force_version=tls1_2 \
4796 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
4797 0 \
4798 -c "Read from server: 1 bytes read"
4799
4800run_test "Small server packet TLS 1.2 StreamCipher" \
4801 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4802 "$P_CLI force_version=tls1_2 \
4803 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4804 0 \
4805 -c "Read from server: 1 bytes read"
4806
4807run_test "Small server packet TLS 1.2 StreamCipher, without EtM" \
4808 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4809 "$P_CLI force_version=tls1_2 \
4810 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
4811 0 \
4812 -c "Read from server: 1 bytes read"
4813
4814requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4815run_test "Small server packet TLS 1.2 StreamCipher, truncated MAC" \
4816 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4817 "$P_CLI force_version=tls1_2 \
4818 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4819 0 \
4820 -c "Read from server: 1 bytes read"
4821
4822requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4823run_test "Small server packet TLS 1.2 StreamCipher, without EtM, truncated MAC" \
4824 "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
4825 "$P_CLI force_version=tls1_2 \
4826 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
4827 0 \
4828 -c "Read from server: 1 bytes read"
4829
4830run_test "Small server packet TLS 1.2 AEAD" \
4831 "$P_SRV response_size=1" \
4832 "$P_CLI force_version=tls1_2 \
4833 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \
4834 0 \
4835 -c "Read from server: 1 bytes read"
4836
4837run_test "Small server packet TLS 1.2 AEAD shorter tag" \
4838 "$P_SRV response_size=1" \
4839 "$P_CLI force_version=tls1_2 \
4840 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \
4841 0 \
4842 -c "Read from server: 1 bytes read"
4843
4844# Tests for small server packets in DTLS
4845
4846requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4847run_test "Small server packet DTLS 1.0" \
4848 "$P_SRV dtls=1 response_size=1 force_version=dtls1" \
4849 "$P_CLI dtls=1 \
4850 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4851 0 \
4852 -c "Read from server: 1 bytes read"
4853
4854requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4855run_test "Small server packet DTLS 1.0, without EtM" \
4856 "$P_SRV dtls=1 response_size=1 force_version=dtls1 etm=0" \
4857 "$P_CLI dtls=1 \
4858 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4859 0 \
4860 -c "Read from server: 1 bytes read"
4861
4862requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4863requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4864run_test "Small server packet DTLS 1.0, truncated hmac" \
4865 "$P_SRV dtls=1 response_size=1 force_version=dtls1 trunc_hmac=1" \
4866 "$P_CLI dtls=1 trunc_hmac=1 \
4867 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4868 0 \
4869 -c "Read from server: 1 bytes read"
4870
4871requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4872requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4873run_test "Small server packet DTLS 1.0, without EtM, truncated MAC" \
4874 "$P_SRV dtls=1 response_size=1 force_version=dtls1 trunc_hmac=1 etm=0" \
4875 "$P_CLI dtls=1 \
4876 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1"\
4877 0 \
4878 -c "Read from server: 1 bytes read"
4879
4880requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4881run_test "Small server packet DTLS 1.2" \
4882 "$P_SRV dtls=1 response_size=1 force_version=dtls1_2" \
4883 "$P_CLI dtls=1 \
4884 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4885 0 \
4886 -c "Read from server: 1 bytes read"
4887
4888requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4889run_test "Small server packet DTLS 1.2, without EtM" \
4890 "$P_SRV dtls=1 response_size=1 force_version=dtls1_2 etm=0" \
4891 "$P_CLI dtls=1 \
4892 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4893 0 \
4894 -c "Read from server: 1 bytes read"
4895
4896requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4897requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4898run_test "Small server packet DTLS 1.2, truncated hmac" \
4899 "$P_SRV dtls=1 response_size=1 force_version=dtls1_2 trunc_hmac=1" \
4900 "$P_CLI dtls=1 \
4901 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
4902 0 \
4903 -c "Read from server: 1 bytes read"
4904
4905requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
4906requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
4907run_test "Small server packet DTLS 1.2, without EtM, truncated MAC" \
4908 "$P_SRV dtls=1 response_size=1 force_version=dtls1_2 trunc_hmac=1 etm=0" \
4909 "$P_CLI dtls=1 \
4910 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1"\
4911 0 \
4912 -c "Read from server: 1 bytes read"
4913
Janos Follath00efff72016-05-06 13:48:23 +01004914# A test for extensions in SSLv3
Yuto Takanoc75df632021-07-08 15:56:33 +01004915requires_max_content_len 4096
Janos Follath00efff72016-05-06 13:48:23 +01004916requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
4917run_test "SSLv3 with extensions, server side" \
4918 "$P_SRV min_version=ssl3 debug_level=3" \
4919 "$P_CLI force_version=ssl3 tickets=1 max_frag_len=4096 alpn=abc,1234" \
4920 0 \
4921 -S "dumping 'client hello extensions'" \
4922 -S "server hello, total extension length:"
4923
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004924# Test for large client packets
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004925
Angus Grattonc4dd0732018-04-11 16:28:39 +10004926# How many fragments do we expect to write $1 bytes?
4927fragments_for_write() {
4928 echo "$(( ( $1 + $MAX_OUT_LEN - 1 ) / $MAX_OUT_LEN ))"
4929}
4930
Janos Follathe2681a42016-03-07 15:57:05 +00004931requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004932run_test "Large client packet SSLv3 BlockCipher" \
Manuel Pégourié-Gonnard448ea502015-01-12 11:40:14 +01004933 "$P_SRV min_version=ssl3" \
Manuel Pégourié-Gonnardc82ee352015-01-07 16:35:25 +01004934 "$P_CLI request_size=16384 force_version=ssl3 recsplit=0 \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004935 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4936 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10004937 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
4938 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004939
Janos Follathe2681a42016-03-07 15:57:05 +00004940requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004941run_test "Large client packet SSLv3 StreamCipher" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01004942 "$P_SRV min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004943 "$P_CLI request_size=16384 force_version=ssl3 \
4944 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4945 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10004946 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
4947 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004948
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004949run_test "Large client packet TLS 1.0 BlockCipher" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004950 "$P_SRV" \
Manuel Pégourié-Gonnardc82ee352015-01-07 16:35:25 +01004951 "$P_CLI request_size=16384 force_version=tls1 recsplit=0 \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004952 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4953 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10004954 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
4955 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004956
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004957run_test "Large client packet TLS 1.0 BlockCipher, without EtM" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004958 "$P_SRV" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00004959 "$P_CLI request_size=16384 force_version=tls1 etm=0 recsplit=0 \
4960 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
4961 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10004962 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Hanno Becker278fc7a2017-11-10 09:16:28 +00004963
Hanno Becker32c55012017-11-10 08:42:54 +00004964requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004965run_test "Large client packet TLS 1.0 BlockCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004966 "$P_SRV trunc_hmac=1" \
Manuel Pégourié-Gonnardc82ee352015-01-07 16:35:25 +01004967 "$P_CLI request_size=16384 force_version=tls1 recsplit=0 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004968 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004969 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10004970 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
4971 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004972
Hanno Becker32c55012017-11-10 08:42:54 +00004973requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004974run_test "Large client packet TLS 1.0 BlockCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004975 "$P_SRV trunc_hmac=1" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00004976 "$P_CLI request_size=16384 force_version=tls1 etm=0 recsplit=0 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004977 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00004978 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10004979 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Hanno Becker278fc7a2017-11-10 09:16:28 +00004980
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004981run_test "Large client packet TLS 1.0 StreamCipher" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01004982 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004983 "$P_CLI request_size=16384 force_version=tls1 \
Hanno Becker278fc7a2017-11-10 09:16:28 +00004984 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4985 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10004986 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Hanno Becker278fc7a2017-11-10 09:16:28 +00004987
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004988run_test "Large client packet TLS 1.0 StreamCipher, without EtM" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00004989 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
4990 "$P_CLI request_size=16384 force_version=tls1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004991 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00004992 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10004993 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Hanno Becker278fc7a2017-11-10 09:16:28 +00004994
4995requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02004996run_test "Large client packet TLS 1.0 StreamCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00004997 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02004998 "$P_CLI request_size=16384 force_version=tls1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00004999 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005000 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005001 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005002
Hanno Becker278fc7a2017-11-10 09:16:28 +00005003requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005004run_test "Large client packet TLS 1.0 StreamCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005005 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005006 "$P_CLI request_size=16384 force_version=tls1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005007 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005008 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005009 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5010 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005011
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005012run_test "Large client packet TLS 1.1 BlockCipher" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005013 "$P_SRV" \
5014 "$P_CLI request_size=16384 force_version=tls1_1 \
5015 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5016 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005017 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5018 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005019
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005020run_test "Large client packet TLS 1.1 BlockCipher, without EtM" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005021 "$P_SRV" \
5022 "$P_CLI request_size=16384 force_version=tls1_1 etm=0 \
5023 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005024 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005025 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005026
Hanno Becker32c55012017-11-10 08:42:54 +00005027requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005028run_test "Large client packet TLS 1.1 BlockCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005029 "$P_SRV trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005030 "$P_CLI request_size=16384 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005031 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005032 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005033 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005034
Hanno Becker32c55012017-11-10 08:42:54 +00005035requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005036run_test "Large client packet TLS 1.1 BlockCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005037 "$P_SRV trunc_hmac=1" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005038 "$P_CLI request_size=16384 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005039 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005040 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005041 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Hanno Becker278fc7a2017-11-10 09:16:28 +00005042
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005043run_test "Large client packet TLS 1.1 StreamCipher" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005044 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5045 "$P_CLI request_size=16384 force_version=tls1_1 \
5046 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5047 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005048 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5049 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005050
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005051run_test "Large client packet TLS 1.1 StreamCipher, without EtM" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005052 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005053 "$P_CLI request_size=16384 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005054 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005055 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005056 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5057 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005058
Hanno Becker278fc7a2017-11-10 09:16:28 +00005059requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005060run_test "Large client packet TLS 1.1 StreamCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005061 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005062 "$P_CLI request_size=16384 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005063 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005064 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005065 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005066
Hanno Becker278fc7a2017-11-10 09:16:28 +00005067requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005068run_test "Large client packet TLS 1.1 StreamCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005069 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005070 "$P_CLI request_size=16384 force_version=tls1_1 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005071 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005072 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005073 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5074 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005075
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005076run_test "Large client packet TLS 1.2 BlockCipher" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005077 "$P_SRV" \
5078 "$P_CLI request_size=16384 force_version=tls1_2 \
5079 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5080 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005081 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5082 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005083
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005084run_test "Large client packet TLS 1.2 BlockCipher, without EtM" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005085 "$P_SRV" \
5086 "$P_CLI request_size=16384 force_version=tls1_2 etm=0 \
5087 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5088 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005089 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Hanno Becker278fc7a2017-11-10 09:16:28 +00005090
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005091run_test "Large client packet TLS 1.2 BlockCipher larger MAC" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005092 "$P_SRV" \
Manuel Pégourié-Gonnardc82ee352015-01-07 16:35:25 +01005093 "$P_CLI request_size=16384 force_version=tls1_2 \
5094 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005095 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005096 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5097 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005098
Hanno Becker32c55012017-11-10 08:42:54 +00005099requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005100run_test "Large client packet TLS 1.2 BlockCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005101 "$P_SRV trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005102 "$P_CLI request_size=16384 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005103 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005104 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005105 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005106
Hanno Becker278fc7a2017-11-10 09:16:28 +00005107requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005108run_test "Large client packet TLS 1.2 BlockCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005109 "$P_SRV trunc_hmac=1" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005110 "$P_CLI request_size=16384 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005111 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005112 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005113 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5114 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005115
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005116run_test "Large client packet TLS 1.2 StreamCipher" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01005117 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005118 "$P_CLI request_size=16384 force_version=tls1_2 \
5119 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5120 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005121 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5122 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005123
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005124run_test "Large client packet TLS 1.2 StreamCipher, without EtM" \
Manuel Pégourié-Gonnardea0920f2015-03-24 09:50:15 +01005125 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005126 "$P_CLI request_size=16384 force_version=tls1_2 \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005127 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
5128 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005129 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Hanno Becker278fc7a2017-11-10 09:16:28 +00005130
Hanno Becker32c55012017-11-10 08:42:54 +00005131requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005132run_test "Large client packet TLS 1.2 StreamCipher, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005133 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005134 "$P_CLI request_size=16384 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005135 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005136 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005137 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005138
Hanno Becker278fc7a2017-11-10 09:16:28 +00005139requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005140run_test "Large client packet TLS 1.2 StreamCipher, without EtM, truncated MAC" \
Hanno Becker909f9a32017-11-21 17:10:12 +00005141 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
Hanno Becker278fc7a2017-11-10 09:16:28 +00005142 "$P_CLI request_size=16384 force_version=tls1_2 \
Hanno Becker909f9a32017-11-21 17:10:12 +00005143 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005144 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005145 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5146 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005147
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005148run_test "Large client packet TLS 1.2 AEAD" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005149 "$P_SRV" \
5150 "$P_CLI request_size=16384 force_version=tls1_2 \
5151 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \
5152 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005153 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5154 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005155
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005156run_test "Large client packet TLS 1.2 AEAD shorter tag" \
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005157 "$P_SRV" \
5158 "$P_CLI request_size=16384 force_version=tls1_2 \
5159 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \
5160 0 \
Angus Grattonc4dd0732018-04-11 16:28:39 +10005161 -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
5162 -s "Read from client: $MAX_CONTENT_LEN bytes read"
Manuel Pégourié-Gonnard8920f692014-06-18 22:05:08 +02005163
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005164# Test for large server packets
Yuto Takanoc75df632021-07-08 15:56:33 +01005165# The tests below fail when the server's OUT_CONTENT_LEN is less than 16384.
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005166requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
5167run_test "Large server packet SSLv3 StreamCipher" \
5168 "$P_SRV response_size=16384 min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5169 "$P_CLI force_version=ssl3 \
5170 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5171 0 \
5172 -c "Read from server: 16384 bytes read"
5173
Andrzej Kurek6a4f2242018-08-27 08:00:13 -04005174# Checking next 4 tests logs for 1n-1 split against BEAST too
5175requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
5176run_test "Large server packet SSLv3 BlockCipher" \
5177 "$P_SRV response_size=16384 min_version=ssl3" \
5178 "$P_CLI force_version=ssl3 recsplit=0 \
5179 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5180 0 \
5181 -c "Read from server: 1 bytes read"\
5182 -c "16383 bytes read"\
5183 -C "Read from server: 16384 bytes read"
5184
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005185run_test "Large server packet TLS 1.0 BlockCipher" \
5186 "$P_SRV response_size=16384" \
5187 "$P_CLI force_version=tls1 recsplit=0 \
5188 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5189 0 \
5190 -c "Read from server: 1 bytes read"\
5191 -c "16383 bytes read"\
5192 -C "Read from server: 16384 bytes read"
5193
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005194run_test "Large server packet TLS 1.0 BlockCipher, without EtM" \
5195 "$P_SRV response_size=16384" \
5196 "$P_CLI force_version=tls1 etm=0 recsplit=0 \
5197 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5198 0 \
5199 -c "Read from server: 1 bytes read"\
5200 -c "16383 bytes read"\
5201 -C "Read from server: 16384 bytes read"
5202
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005203requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
5204run_test "Large server packet TLS 1.0 BlockCipher truncated MAC" \
5205 "$P_SRV response_size=16384" \
5206 "$P_CLI force_version=tls1 recsplit=0 \
5207 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \
5208 trunc_hmac=1" \
5209 0 \
5210 -c "Read from server: 1 bytes read"\
5211 -c "16383 bytes read"\
5212 -C "Read from server: 16384 bytes read"
5213
5214requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
5215run_test "Large server packet TLS 1.0 StreamCipher truncated MAC" \
5216 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5217 "$P_CLI force_version=tls1 \
5218 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
5219 trunc_hmac=1" \
5220 0 \
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005221 -s "16384 bytes written in 1 fragments" \
5222 -c "Read from server: 16384 bytes read"
5223
5224run_test "Large server packet TLS 1.0 StreamCipher" \
5225 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5226 "$P_CLI force_version=tls1 \
5227 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5228 0 \
5229 -s "16384 bytes written in 1 fragments" \
5230 -c "Read from server: 16384 bytes read"
5231
5232run_test "Large server packet TLS 1.0 StreamCipher, without EtM" \
5233 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5234 "$P_CLI force_version=tls1 \
5235 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
5236 0 \
5237 -s "16384 bytes written in 1 fragments" \
5238 -c "Read from server: 16384 bytes read"
5239
5240requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
5241run_test "Large server packet TLS 1.0 StreamCipher, truncated MAC" \
5242 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
5243 "$P_CLI force_version=tls1 \
5244 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
5245 0 \
5246 -s "16384 bytes written in 1 fragments" \
5247 -c "Read from server: 16384 bytes read"
5248
5249requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
5250run_test "Large server packet TLS 1.0 StreamCipher, without EtM, truncated MAC" \
5251 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
5252 "$P_CLI force_version=tls1 \
5253 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
5254 0 \
5255 -s "16384 bytes written in 1 fragments" \
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005256 -c "Read from server: 16384 bytes read"
5257
5258run_test "Large server packet TLS 1.1 BlockCipher" \
5259 "$P_SRV response_size=16384" \
5260 "$P_CLI force_version=tls1_1 \
5261 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5262 0 \
5263 -c "Read from server: 16384 bytes read"
5264
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005265run_test "Large server packet TLS 1.1 BlockCipher, without EtM" \
5266 "$P_SRV response_size=16384" \
5267 "$P_CLI force_version=tls1_1 etm=0 \
5268 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005269 0 \
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005270 -s "16384 bytes written in 1 fragments" \
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005271 -c "Read from server: 16384 bytes read"
5272
5273requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
5274run_test "Large server packet TLS 1.1 BlockCipher truncated MAC" \
5275 "$P_SRV response_size=16384" \
5276 "$P_CLI force_version=tls1_1 \
5277 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \
5278 trunc_hmac=1" \
5279 0 \
5280 -c "Read from server: 16384 bytes read"
5281
5282requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005283run_test "Large server packet TLS 1.1 BlockCipher, without EtM, truncated MAC" \
5284 "$P_SRV response_size=16384 trunc_hmac=1" \
5285 "$P_CLI force_version=tls1_1 \
5286 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
5287 0 \
5288 -s "16384 bytes written in 1 fragments" \
5289 -c "Read from server: 16384 bytes read"
5290
5291run_test "Large server packet TLS 1.1 StreamCipher" \
5292 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5293 "$P_CLI force_version=tls1_1 \
5294 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5295 0 \
5296 -c "Read from server: 16384 bytes read"
5297
5298run_test "Large server packet TLS 1.1 StreamCipher, without EtM" \
5299 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5300 "$P_CLI force_version=tls1_1 \
5301 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
5302 0 \
5303 -s "16384 bytes written in 1 fragments" \
5304 -c "Read from server: 16384 bytes read"
5305
5306requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005307run_test "Large server packet TLS 1.1 StreamCipher truncated MAC" \
5308 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5309 "$P_CLI force_version=tls1_1 \
5310 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
5311 trunc_hmac=1" \
5312 0 \
5313 -c "Read from server: 16384 bytes read"
5314
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005315run_test "Large server packet TLS 1.1 StreamCipher, without EtM, truncated MAC" \
5316 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
5317 "$P_CLI force_version=tls1_1 \
5318 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
5319 0 \
5320 -s "16384 bytes written in 1 fragments" \
5321 -c "Read from server: 16384 bytes read"
5322
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005323run_test "Large server packet TLS 1.2 BlockCipher" \
5324 "$P_SRV response_size=16384" \
5325 "$P_CLI force_version=tls1_2 \
5326 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5327 0 \
5328 -c "Read from server: 16384 bytes read"
5329
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005330run_test "Large server packet TLS 1.2 BlockCipher, without EtM" \
5331 "$P_SRV response_size=16384" \
5332 "$P_CLI force_version=tls1_2 etm=0 \
5333 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
5334 0 \
5335 -s "16384 bytes written in 1 fragments" \
5336 -c "Read from server: 16384 bytes read"
5337
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005338run_test "Large server packet TLS 1.2 BlockCipher larger MAC" \
5339 "$P_SRV response_size=16384" \
5340 "$P_CLI force_version=tls1_2 \
5341 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \
5342 0 \
5343 -c "Read from server: 16384 bytes read"
5344
5345requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
5346run_test "Large server packet TLS 1.2 BlockCipher truncated MAC" \
5347 "$P_SRV response_size=16384" \
5348 "$P_CLI force_version=tls1_2 \
5349 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \
5350 trunc_hmac=1" \
5351 0 \
5352 -c "Read from server: 16384 bytes read"
5353
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005354run_test "Large server packet TLS 1.2 BlockCipher, without EtM, truncated MAC" \
5355 "$P_SRV response_size=16384 trunc_hmac=1" \
5356 "$P_CLI force_version=tls1_2 \
5357 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
5358 0 \
5359 -s "16384 bytes written in 1 fragments" \
5360 -c "Read from server: 16384 bytes read"
5361
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005362run_test "Large server packet TLS 1.2 StreamCipher" \
5363 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5364 "$P_CLI force_version=tls1_2 \
5365 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5366 0 \
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005367 -s "16384 bytes written in 1 fragments" \
5368 -c "Read from server: 16384 bytes read"
5369
5370run_test "Large server packet TLS 1.2 StreamCipher, without EtM" \
5371 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5372 "$P_CLI force_version=tls1_2 \
5373 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
5374 0 \
5375 -s "16384 bytes written in 1 fragments" \
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005376 -c "Read from server: 16384 bytes read"
5377
5378requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
5379run_test "Large server packet TLS 1.2 StreamCipher truncated MAC" \
5380 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
5381 "$P_CLI force_version=tls1_2 \
5382 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
5383 trunc_hmac=1" \
5384 0 \
5385 -c "Read from server: 16384 bytes read"
5386
Andrzej Kurekc19fc552018-06-19 09:37:30 -04005387requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
5388run_test "Large server packet TLS 1.2 StreamCipher, without EtM, truncated MAC" \
5389 "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
5390 "$P_CLI force_version=tls1_2 \
5391 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
5392 0 \
5393 -s "16384 bytes written in 1 fragments" \
5394 -c "Read from server: 16384 bytes read"
5395
Andrzej Kurek30e731d2017-10-12 13:50:29 +02005396run_test "Large server packet TLS 1.2 AEAD" \
5397 "$P_SRV response_size=16384" \
5398 "$P_CLI force_version=tls1_2 \
5399 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \
5400 0 \
5401 -c "Read from server: 16384 bytes read"
5402
5403run_test "Large server packet TLS 1.2 AEAD shorter tag" \
5404 "$P_SRV response_size=16384" \
5405 "$P_CLI force_version=tls1_2 \
5406 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \
5407 0 \
5408 -c "Read from server: 16384 bytes read"
5409
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005410# Tests for restartable ECC
5411
5412requires_config_enabled MBEDTLS_ECP_RESTARTABLE
5413run_test "EC restart: TLS, default" \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005414 "$P_SRV auth_mode=required" \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005415 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005416 key_file=data_files/server5.key crt_file=data_files/server5.crt \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005417 debug_level=1" \
5418 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005419 -C "x509_verify_cert.*4b00" \
5420 -C "mbedtls_pk_verify.*4b00" \
5421 -C "mbedtls_ecdh_make_public.*4b00" \
5422 -C "mbedtls_pk_sign.*4b00"
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005423
5424requires_config_enabled MBEDTLS_ECP_RESTARTABLE
5425run_test "EC restart: TLS, max_ops=0" \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005426 "$P_SRV auth_mode=required" \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005427 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005428 key_file=data_files/server5.key crt_file=data_files/server5.crt \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005429 debug_level=1 ec_max_ops=0" \
5430 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005431 -C "x509_verify_cert.*4b00" \
5432 -C "mbedtls_pk_verify.*4b00" \
5433 -C "mbedtls_ecdh_make_public.*4b00" \
5434 -C "mbedtls_pk_sign.*4b00"
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005435
5436requires_config_enabled MBEDTLS_ECP_RESTARTABLE
5437run_test "EC restart: TLS, max_ops=65535" \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005438 "$P_SRV auth_mode=required" \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005439 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005440 key_file=data_files/server5.key crt_file=data_files/server5.crt \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005441 debug_level=1 ec_max_ops=65535" \
5442 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005443 -C "x509_verify_cert.*4b00" \
5444 -C "mbedtls_pk_verify.*4b00" \
5445 -C "mbedtls_ecdh_make_public.*4b00" \
5446 -C "mbedtls_pk_sign.*4b00"
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005447
5448requires_config_enabled MBEDTLS_ECP_RESTARTABLE
5449run_test "EC restart: TLS, max_ops=1000" \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005450 "$P_SRV auth_mode=required" \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005451 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005452 key_file=data_files/server5.key crt_file=data_files/server5.crt \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005453 debug_level=1 ec_max_ops=1000" \
5454 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005455 -c "x509_verify_cert.*4b00" \
5456 -c "mbedtls_pk_verify.*4b00" \
5457 -c "mbedtls_ecdh_make_public.*4b00" \
5458 -c "mbedtls_pk_sign.*4b00"
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005459
5460requires_config_enabled MBEDTLS_ECP_RESTARTABLE
Manuel Pégourié-Gonnard3bf49c42017-08-15 13:47:06 +02005461run_test "EC restart: TLS, max_ops=1000, badsign" \
5462 "$P_SRV auth_mode=required \
5463 crt_file=data_files/server5-badsign.crt \
5464 key_file=data_files/server5.key" \
5465 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
5466 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5467 debug_level=1 ec_max_ops=1000" \
5468 1 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005469 -c "x509_verify_cert.*4b00" \
5470 -C "mbedtls_pk_verify.*4b00" \
5471 -C "mbedtls_ecdh_make_public.*4b00" \
5472 -C "mbedtls_pk_sign.*4b00" \
Manuel Pégourié-Gonnard3bf49c42017-08-15 13:47:06 +02005473 -c "! The certificate is not correctly signed by the trusted CA" \
5474 -c "! mbedtls_ssl_handshake returned" \
5475 -c "X509 - Certificate verification failed"
5476
5477requires_config_enabled MBEDTLS_ECP_RESTARTABLE
5478run_test "EC restart: TLS, max_ops=1000, auth_mode=optional badsign" \
5479 "$P_SRV auth_mode=required \
5480 crt_file=data_files/server5-badsign.crt \
5481 key_file=data_files/server5.key" \
5482 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
5483 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5484 debug_level=1 ec_max_ops=1000 auth_mode=optional" \
5485 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005486 -c "x509_verify_cert.*4b00" \
5487 -c "mbedtls_pk_verify.*4b00" \
5488 -c "mbedtls_ecdh_make_public.*4b00" \
5489 -c "mbedtls_pk_sign.*4b00" \
Manuel Pégourié-Gonnard3bf49c42017-08-15 13:47:06 +02005490 -c "! The certificate is not correctly signed by the trusted CA" \
5491 -C "! mbedtls_ssl_handshake returned" \
5492 -C "X509 - Certificate verification failed"
5493
5494requires_config_enabled MBEDTLS_ECP_RESTARTABLE
5495run_test "EC restart: TLS, max_ops=1000, auth_mode=none badsign" \
5496 "$P_SRV auth_mode=required \
5497 crt_file=data_files/server5-badsign.crt \
5498 key_file=data_files/server5.key" \
5499 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
5500 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5501 debug_level=1 ec_max_ops=1000 auth_mode=none" \
5502 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005503 -C "x509_verify_cert.*4b00" \
5504 -c "mbedtls_pk_verify.*4b00" \
5505 -c "mbedtls_ecdh_make_public.*4b00" \
5506 -c "mbedtls_pk_sign.*4b00" \
Manuel Pégourié-Gonnard3bf49c42017-08-15 13:47:06 +02005507 -C "! The certificate is not correctly signed by the trusted CA" \
5508 -C "! mbedtls_ssl_handshake returned" \
5509 -C "X509 - Certificate verification failed"
5510
5511requires_config_enabled MBEDTLS_ECP_RESTARTABLE
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005512run_test "EC restart: DTLS, max_ops=1000" \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005513 "$P_SRV auth_mode=required dtls=1" \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005514 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Manuel Pégourié-Gonnard862cde52017-05-17 11:56:15 +02005515 key_file=data_files/server5.key crt_file=data_files/server5.crt \
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005516 dtls=1 debug_level=1 ec_max_ops=1000" \
5517 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005518 -c "x509_verify_cert.*4b00" \
5519 -c "mbedtls_pk_verify.*4b00" \
5520 -c "mbedtls_ecdh_make_public.*4b00" \
5521 -c "mbedtls_pk_sign.*4b00"
Manuel Pégourié-Gonnard2350b4e2017-05-16 09:26:48 +02005522
Manuel Pégourié-Gonnard32033da2017-05-18 12:49:27 +02005523requires_config_enabled MBEDTLS_ECP_RESTARTABLE
5524run_test "EC restart: TLS, max_ops=1000 no client auth" \
5525 "$P_SRV" \
5526 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
5527 debug_level=1 ec_max_ops=1000" \
5528 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005529 -c "x509_verify_cert.*4b00" \
5530 -c "mbedtls_pk_verify.*4b00" \
5531 -c "mbedtls_ecdh_make_public.*4b00" \
5532 -C "mbedtls_pk_sign.*4b00"
Manuel Pégourié-Gonnard32033da2017-05-18 12:49:27 +02005533
5534requires_config_enabled MBEDTLS_ECP_RESTARTABLE
5535run_test "EC restart: TLS, max_ops=1000, ECDHE-PSK" \
5536 "$P_SRV psk=abc123" \
5537 "$P_CLI force_ciphersuite=TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 \
5538 psk=abc123 debug_level=1 ec_max_ops=1000" \
5539 0 \
Manuel Pégourié-Gonnardb5d668a2018-06-13 11:22:01 +02005540 -C "x509_verify_cert.*4b00" \
5541 -C "mbedtls_pk_verify.*4b00" \
5542 -C "mbedtls_ecdh_make_public.*4b00" \
5543 -C "mbedtls_pk_sign.*4b00"
Manuel Pégourié-Gonnard32033da2017-05-18 12:49:27 +02005544
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005545# Tests of asynchronous private key support in SSL
5546
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005547requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005548run_test "SSL async private: sign, delay=0" \
5549 "$P_SRV \
5550 async_operations=s async_private_delay1=0 async_private_delay2=0" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005551 "$P_CLI" \
5552 0 \
5553 -s "Async sign callback: using key slot " \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005554 -s "Async resume (slot [0-9]): sign done, status=0"
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005555
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005556requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005557run_test "SSL async private: sign, delay=1" \
5558 "$P_SRV \
5559 async_operations=s async_private_delay1=1 async_private_delay2=1" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005560 "$P_CLI" \
5561 0 \
5562 -s "Async sign callback: using key slot " \
5563 -s "Async resume (slot [0-9]): call 0 more times." \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005564 -s "Async resume (slot [0-9]): sign done, status=0"
5565
Gilles Peskine12d0cc12018-04-26 15:06:56 +02005566requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
5567run_test "SSL async private: sign, delay=2" \
5568 "$P_SRV \
5569 async_operations=s async_private_delay1=2 async_private_delay2=2" \
5570 "$P_CLI" \
5571 0 \
5572 -s "Async sign callback: using key slot " \
5573 -U "Async sign callback: using key slot " \
5574 -s "Async resume (slot [0-9]): call 1 more times." \
5575 -s "Async resume (slot [0-9]): call 0 more times." \
5576 -s "Async resume (slot [0-9]): sign done, status=0"
5577
Gilles Peskined3268832018-04-26 06:23:59 +02005578# Test that the async callback correctly signs the 36-byte hash of TLS 1.0/1.1
5579# with RSA PKCS#1v1.5 as used in TLS 1.0/1.1.
5580requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
5581requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
5582run_test "SSL async private: sign, RSA, TLS 1.1" \
5583 "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2.crt \
5584 async_operations=s async_private_delay1=0 async_private_delay2=0" \
5585 "$P_CLI force_version=tls1_1" \
5586 0 \
5587 -s "Async sign callback: using key slot " \
5588 -s "Async resume (slot [0-9]): sign done, status=0"
5589
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005590requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine807d74a2018-04-30 10:30:49 +02005591run_test "SSL async private: sign, SNI" \
5592 "$P_SRV debug_level=3 \
5593 async_operations=s async_private_delay1=0 async_private_delay2=0 \
5594 crt_file=data_files/server5.crt key_file=data_files/server5.key \
5595 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
5596 "$P_CLI server_name=polarssl.example" \
5597 0 \
5598 -s "Async sign callback: using key slot " \
5599 -s "Async resume (slot [0-9]): sign done, status=0" \
5600 -s "parse ServerName extension" \
5601 -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
5602 -c "subject name *: C=NL, O=PolarSSL, CN=polarssl.example"
5603
5604requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005605run_test "SSL async private: decrypt, delay=0" \
5606 "$P_SRV \
5607 async_operations=d async_private_delay1=0 async_private_delay2=0" \
5608 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
5609 0 \
5610 -s "Async decrypt callback: using key slot " \
5611 -s "Async resume (slot [0-9]): decrypt done, status=0"
5612
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005613requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005614run_test "SSL async private: decrypt, delay=1" \
5615 "$P_SRV \
5616 async_operations=d async_private_delay1=1 async_private_delay2=1" \
5617 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
5618 0 \
5619 -s "Async decrypt callback: using key slot " \
5620 -s "Async resume (slot [0-9]): call 0 more times." \
5621 -s "Async resume (slot [0-9]): decrypt done, status=0"
5622
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005623requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005624run_test "SSL async private: decrypt RSA-PSK, delay=0" \
5625 "$P_SRV psk=abc123 \
5626 async_operations=d async_private_delay1=0 async_private_delay2=0" \
5627 "$P_CLI psk=abc123 \
5628 force_ciphersuite=TLS-RSA-PSK-WITH-AES-128-CBC-SHA256" \
5629 0 \
5630 -s "Async decrypt callback: using key slot " \
5631 -s "Async resume (slot [0-9]): decrypt done, status=0"
5632
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005633requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005634run_test "SSL async private: decrypt RSA-PSK, delay=1" \
5635 "$P_SRV psk=abc123 \
5636 async_operations=d async_private_delay1=1 async_private_delay2=1" \
5637 "$P_CLI psk=abc123 \
5638 force_ciphersuite=TLS-RSA-PSK-WITH-AES-128-CBC-SHA256" \
5639 0 \
5640 -s "Async decrypt callback: using key slot " \
5641 -s "Async resume (slot [0-9]): call 0 more times." \
5642 -s "Async resume (slot [0-9]): decrypt done, status=0"
5643
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005644requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005645run_test "SSL async private: sign callback not present" \
5646 "$P_SRV \
5647 async_operations=d async_private_delay1=1 async_private_delay2=1" \
5648 "$P_CLI; [ \$? -eq 1 ] &&
5649 $P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
5650 0 \
5651 -S "Async sign callback" \
5652 -s "! mbedtls_ssl_handshake returned" \
5653 -s "The own private key or pre-shared key is not set, but needed" \
5654 -s "Async resume (slot [0-9]): decrypt done, status=0" \
5655 -s "Successful connection"
5656
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005657requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005658run_test "SSL async private: decrypt callback not present" \
5659 "$P_SRV debug_level=1 \
5660 async_operations=s async_private_delay1=1 async_private_delay2=1" \
5661 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA;
5662 [ \$? -eq 1 ] && $P_CLI" \
5663 0 \
5664 -S "Async decrypt callback" \
5665 -s "! mbedtls_ssl_handshake returned" \
5666 -s "got no RSA private key" \
5667 -s "Async resume (slot [0-9]): sign done, status=0" \
5668 -s "Successful connection"
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005669
5670# key1: ECDSA, key2: RSA; use key1 from slot 0
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005671requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005672run_test "SSL async private: slot 0 used with key1" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005673 "$P_SRV \
5674 async_operations=s async_private_delay1=1 \
5675 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5676 key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005677 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256" \
5678 0 \
5679 -s "Async sign callback: using key slot 0," \
5680 -s "Async resume (slot 0): call 0 more times." \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005681 -s "Async resume (slot 0): sign done, status=0"
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005682
5683# key1: ECDSA, key2: RSA; use key2 from slot 0
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005684requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005685run_test "SSL async private: slot 0 used with key2" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005686 "$P_SRV \
5687 async_operations=s async_private_delay2=1 \
5688 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5689 key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005690 "$P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
5691 0 \
5692 -s "Async sign callback: using key slot 0," \
5693 -s "Async resume (slot 0): call 0 more times." \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005694 -s "Async resume (slot 0): sign done, status=0"
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005695
5696# key1: ECDSA, key2: RSA; use key2 from slot 1
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005697requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinead28bf02018-04-26 00:19:16 +02005698run_test "SSL async private: slot 1 used with key2" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005699 "$P_SRV \
Gilles Peskine168dae82018-04-25 23:35:42 +02005700 async_operations=s async_private_delay1=1 async_private_delay2=1 \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005701 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5702 key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005703 "$P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
5704 0 \
5705 -s "Async sign callback: using key slot 1," \
5706 -s "Async resume (slot 1): call 0 more times." \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005707 -s "Async resume (slot 1): sign done, status=0"
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005708
5709# key1: ECDSA, key2: RSA; use key2 directly
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005710requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005711run_test "SSL async private: fall back to transparent key" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005712 "$P_SRV \
5713 async_operations=s async_private_delay1=1 \
5714 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5715 key_file2=data_files/server2.key crt_file2=data_files/server2.crt " \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005716 "$P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
5717 0 \
5718 -s "Async sign callback: no key matches this certificate."
5719
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005720requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine725f1cb2018-06-12 15:06:40 +02005721run_test "SSL async private: sign, error in start" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005722 "$P_SRV \
5723 async_operations=s async_private_delay1=1 async_private_delay2=1 \
5724 async_private_error=1" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005725 "$P_CLI" \
5726 1 \
5727 -s "Async sign callback: injected error" \
5728 -S "Async resume" \
Gilles Peskine37289cd2018-04-27 11:50:14 +02005729 -S "Async cancel" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005730 -s "! mbedtls_ssl_handshake returned"
5731
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005732requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine725f1cb2018-06-12 15:06:40 +02005733run_test "SSL async private: sign, cancel after start" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005734 "$P_SRV \
5735 async_operations=s async_private_delay1=1 async_private_delay2=1 \
5736 async_private_error=2" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005737 "$P_CLI" \
5738 1 \
5739 -s "Async sign callback: using key slot " \
5740 -S "Async resume" \
5741 -s "Async cancel"
5742
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005743requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine725f1cb2018-06-12 15:06:40 +02005744run_test "SSL async private: sign, error in resume" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005745 "$P_SRV \
5746 async_operations=s async_private_delay1=1 async_private_delay2=1 \
5747 async_private_error=3" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005748 "$P_CLI" \
5749 1 \
5750 -s "Async sign callback: using key slot " \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005751 -s "Async resume callback: sign done but injected error" \
Gilles Peskine37289cd2018-04-27 11:50:14 +02005752 -S "Async cancel" \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005753 -s "! mbedtls_ssl_handshake returned"
5754
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005755requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine725f1cb2018-06-12 15:06:40 +02005756run_test "SSL async private: decrypt, error in start" \
5757 "$P_SRV \
5758 async_operations=d async_private_delay1=1 async_private_delay2=1 \
5759 async_private_error=1" \
5760 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
5761 1 \
5762 -s "Async decrypt callback: injected error" \
5763 -S "Async resume" \
5764 -S "Async cancel" \
5765 -s "! mbedtls_ssl_handshake returned"
5766
5767requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
5768run_test "SSL async private: decrypt, cancel after start" \
5769 "$P_SRV \
5770 async_operations=d async_private_delay1=1 async_private_delay2=1 \
5771 async_private_error=2" \
5772 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
5773 1 \
5774 -s "Async decrypt callback: using key slot " \
5775 -S "Async resume" \
5776 -s "Async cancel"
5777
5778requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
5779run_test "SSL async private: decrypt, error in resume" \
5780 "$P_SRV \
5781 async_operations=d async_private_delay1=1 async_private_delay2=1 \
5782 async_private_error=3" \
5783 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
5784 1 \
5785 -s "Async decrypt callback: using key slot " \
5786 -s "Async resume callback: decrypt done but injected error" \
5787 -S "Async cancel" \
5788 -s "! mbedtls_ssl_handshake returned"
5789
5790requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine60ee4ca2018-01-08 11:28:05 +01005791run_test "SSL async private: cancel after start then operate correctly" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005792 "$P_SRV \
5793 async_operations=s async_private_delay1=1 async_private_delay2=1 \
5794 async_private_error=-2" \
Gilles Peskine60ee4ca2018-01-08 11:28:05 +01005795 "$P_CLI; [ \$? -eq 1 ] && $P_CLI" \
5796 0 \
5797 -s "Async cancel" \
5798 -s "! mbedtls_ssl_handshake returned" \
5799 -s "Async resume" \
5800 -s "Successful connection"
5801
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005802requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine60ee4ca2018-01-08 11:28:05 +01005803run_test "SSL async private: error in resume then operate correctly" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005804 "$P_SRV \
5805 async_operations=s async_private_delay1=1 async_private_delay2=1 \
5806 async_private_error=-3" \
Gilles Peskine60ee4ca2018-01-08 11:28:05 +01005807 "$P_CLI; [ \$? -eq 1 ] && $P_CLI" \
5808 0 \
5809 -s "! mbedtls_ssl_handshake returned" \
5810 -s "Async resume" \
5811 -s "Successful connection"
5812
5813# key1: ECDSA, key2: RSA; use key1 through async, then key2 directly
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005814requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine60ee4ca2018-01-08 11:28:05 +01005815run_test "SSL async private: cancel after start then fall back to transparent key" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005816 "$P_SRV \
5817 async_operations=s async_private_delay1=1 async_private_error=-2 \
5818 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5819 key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
Gilles Peskine60ee4ca2018-01-08 11:28:05 +01005820 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256;
5821 [ \$? -eq 1 ] &&
5822 $P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
5823 0 \
Gilles Peskinededa75a2018-04-30 10:02:45 +02005824 -s "Async sign callback: using key slot 0" \
Gilles Peskine60ee4ca2018-01-08 11:28:05 +01005825 -S "Async resume" \
5826 -s "Async cancel" \
5827 -s "! mbedtls_ssl_handshake returned" \
5828 -s "Async sign callback: no key matches this certificate." \
5829 -s "Successful connection"
5830
5831# key1: ECDSA, key2: RSA; use key1 through async, then key2 directly
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005832requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine725f1cb2018-06-12 15:06:40 +02005833run_test "SSL async private: sign, error in resume then fall back to transparent key" \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005834 "$P_SRV \
5835 async_operations=s async_private_delay1=1 async_private_error=-3 \
5836 key_file=data_files/server5.key crt_file=data_files/server5.crt \
5837 key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
Gilles Peskine60ee4ca2018-01-08 11:28:05 +01005838 "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256;
5839 [ \$? -eq 1 ] &&
5840 $P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
5841 0 \
5842 -s "Async resume" \
5843 -s "! mbedtls_ssl_handshake returned" \
5844 -s "Async sign callback: no key matches this certificate." \
5845 -s "Successful connection"
5846
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005847requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005848requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005849run_test "SSL async private: renegotiation: client-initiated; sign" \
5850 "$P_SRV \
5851 async_operations=s async_private_delay1=1 async_private_delay2=1 \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005852 exchanges=2 renegotiation=1" \
5853 "$P_CLI exchanges=2 renegotiation=1 renegotiate=1" \
5854 0 \
5855 -s "Async sign callback: using key slot " \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005856 -s "Async resume (slot [0-9]): sign done, status=0"
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005857
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005858requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005859requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005860run_test "SSL async private: renegotiation: server-initiated; sign" \
5861 "$P_SRV \
5862 async_operations=s async_private_delay1=1 async_private_delay2=1 \
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005863 exchanges=2 renegotiation=1 renegotiate=1" \
5864 "$P_CLI exchanges=2 renegotiation=1" \
5865 0 \
5866 -s "Async sign callback: using key slot " \
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005867 -s "Async resume (slot [0-9]): sign done, status=0"
5868
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005869requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005870requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
5871run_test "SSL async private: renegotiation: client-initiated; decrypt" \
5872 "$P_SRV \
5873 async_operations=d async_private_delay1=1 async_private_delay2=1 \
5874 exchanges=2 renegotiation=1" \
5875 "$P_CLI exchanges=2 renegotiation=1 renegotiate=1 \
5876 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
5877 0 \
5878 -s "Async decrypt callback: using key slot " \
5879 -s "Async resume (slot [0-9]): decrypt done, status=0"
5880
Gilles Peskineb74a1c72018-04-24 13:09:22 +02005881requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
Gilles Peskinefcca9d82018-01-12 13:47:48 +01005882requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
5883run_test "SSL async private: renegotiation: server-initiated; decrypt" \
5884 "$P_SRV \
5885 async_operations=d async_private_delay1=1 async_private_delay2=1 \
5886 exchanges=2 renegotiation=1 renegotiate=1" \
5887 "$P_CLI exchanges=2 renegotiation=1 \
5888 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
5889 0 \
5890 -s "Async decrypt callback: using key slot " \
5891 -s "Async resume (slot [0-9]): decrypt done, status=0"
Gilles Peskine3665f1d2018-01-05 21:22:12 +01005892
Ron Eldor58093c82018-06-28 13:22:05 +03005893# Tests for ECC extensions (rfc 4492)
5894
Ron Eldor643df7c2018-06-28 16:17:00 +03005895requires_config_enabled MBEDTLS_AES_C
5896requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
5897requires_config_enabled MBEDTLS_SHA256_C
5898requires_config_enabled MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
Ron Eldor58093c82018-06-28 13:22:05 +03005899run_test "Force a non ECC ciphersuite in the client side" \
5900 "$P_SRV debug_level=3" \
Ron Eldor643df7c2018-06-28 16:17:00 +03005901 "$P_CLI debug_level=3 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA256" \
Ron Eldor58093c82018-06-28 13:22:05 +03005902 0 \
5903 -C "client hello, adding supported_elliptic_curves extension" \
5904 -C "client hello, adding supported_point_formats extension" \
5905 -S "found supported elliptic curves extension" \
5906 -S "found supported point formats extension"
5907
Ron Eldor643df7c2018-06-28 16:17:00 +03005908requires_config_enabled MBEDTLS_AES_C
5909requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
5910requires_config_enabled MBEDTLS_SHA256_C
5911requires_config_enabled MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
Ron Eldor58093c82018-06-28 13:22:05 +03005912run_test "Force a non ECC ciphersuite in the server side" \
Ron Eldor643df7c2018-06-28 16:17:00 +03005913 "$P_SRV debug_level=3 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA256" \
Ron Eldor58093c82018-06-28 13:22:05 +03005914 "$P_CLI debug_level=3" \
5915 0 \
5916 -C "found supported_point_formats extension" \
5917 -S "server hello, supported_point_formats extension"
5918
Ron Eldor643df7c2018-06-28 16:17:00 +03005919requires_config_enabled MBEDTLS_AES_C
5920requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
5921requires_config_enabled MBEDTLS_SHA256_C
5922requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Ron Eldor58093c82018-06-28 13:22:05 +03005923run_test "Force an ECC ciphersuite in the client side" \
5924 "$P_SRV debug_level=3" \
5925 "$P_CLI debug_level=3 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256" \
5926 0 \
5927 -c "client hello, adding supported_elliptic_curves extension" \
5928 -c "client hello, adding supported_point_formats extension" \
5929 -s "found supported elliptic curves extension" \
5930 -s "found supported point formats extension"
5931
Ron Eldor643df7c2018-06-28 16:17:00 +03005932requires_config_enabled MBEDTLS_AES_C
5933requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
5934requires_config_enabled MBEDTLS_SHA256_C
5935requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Ron Eldor58093c82018-06-28 13:22:05 +03005936run_test "Force an ECC ciphersuite in the server side" \
5937 "$P_SRV debug_level=3 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256" \
5938 "$P_CLI debug_level=3" \
5939 0 \
5940 -c "found supported_point_formats extension" \
5941 -s "server hello, supported_point_formats extension"
5942
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02005943# Tests for DTLS HelloVerifyRequest
5944
5945run_test "DTLS cookie: enabled" \
5946 "$P_SRV dtls=1 debug_level=2" \
5947 "$P_CLI dtls=1 debug_level=2" \
5948 0 \
5949 -s "cookie verification failed" \
5950 -s "cookie verification passed" \
5951 -S "cookie verification skipped" \
5952 -c "received hello verify request" \
Manuel Pégourié-Gonnardcaecdae2014-10-13 19:04:37 +02005953 -s "hello verification requested" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02005954 -S "SSL - The requested feature is not available"
5955
5956run_test "DTLS cookie: disabled" \
5957 "$P_SRV dtls=1 debug_level=2 cookies=0" \
5958 "$P_CLI dtls=1 debug_level=2" \
5959 0 \
5960 -S "cookie verification failed" \
5961 -S "cookie verification passed" \
5962 -s "cookie verification skipped" \
5963 -C "received hello verify request" \
Manuel Pégourié-Gonnardcaecdae2014-10-13 19:04:37 +02005964 -S "hello verification requested" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02005965 -S "SSL - The requested feature is not available"
5966
Manuel Pégourié-Gonnardcaecdae2014-10-13 19:04:37 +02005967run_test "DTLS cookie: default (failing)" \
5968 "$P_SRV dtls=1 debug_level=2 cookies=-1" \
5969 "$P_CLI dtls=1 debug_level=2 hs_timeout=100-400" \
5970 1 \
5971 -s "cookie verification failed" \
5972 -S "cookie verification passed" \
5973 -S "cookie verification skipped" \
5974 -C "received hello verify request" \
5975 -S "hello verification requested" \
5976 -s "SSL - The requested feature is not available"
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02005977
5978requires_ipv6
5979run_test "DTLS cookie: enabled, IPv6" \
5980 "$P_SRV dtls=1 debug_level=2 server_addr=::1" \
5981 "$P_CLI dtls=1 debug_level=2 server_addr=::1" \
5982 0 \
5983 -s "cookie verification failed" \
5984 -s "cookie verification passed" \
5985 -S "cookie verification skipped" \
5986 -c "received hello verify request" \
Manuel Pégourié-Gonnardcaecdae2014-10-13 19:04:37 +02005987 -s "hello verification requested" \
Manuel Pégourié-Gonnard0eb6cab2014-07-23 20:17:47 +02005988 -S "SSL - The requested feature is not available"
5989
Manuel Pégourié-Gonnard579950c2014-09-29 17:47:33 +02005990run_test "DTLS cookie: enabled, nbio" \
5991 "$P_SRV dtls=1 nbio=2 debug_level=2" \
5992 "$P_CLI dtls=1 nbio=2 debug_level=2" \
5993 0 \
5994 -s "cookie verification failed" \
5995 -s "cookie verification passed" \
5996 -S "cookie verification skipped" \
5997 -c "received hello verify request" \
Manuel Pégourié-Gonnardcaecdae2014-10-13 19:04:37 +02005998 -s "hello verification requested" \
Manuel Pégourié-Gonnard579950c2014-09-29 17:47:33 +02005999 -S "SSL - The requested feature is not available"
6000
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006001# Tests for client reconnecting from the same port with DTLS
6002
Manuel Pégourié-Gonnard259db912015-09-09 11:37:17 +02006003not_with_valgrind # spurious resend
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006004run_test "DTLS client reconnect from same port: reference" \
Manuel Pégourié-Gonnard34cbf102019-09-09 11:14:37 +02006005 "$P_SRV dtls=1 exchanges=2 read_timeout=20000 hs_timeout=10000-20000" \
6006 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=10000-20000" \
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006007 0 \
6008 -C "resend" \
Manuel Pégourié-Gonnard259db912015-09-09 11:37:17 +02006009 -S "The operation timed out" \
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006010 -S "Client initiated reconnection from same port"
6011
Manuel Pégourié-Gonnard259db912015-09-09 11:37:17 +02006012not_with_valgrind # spurious resend
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006013run_test "DTLS client reconnect from same port: reconnect" \
Manuel Pégourié-Gonnard34cbf102019-09-09 11:14:37 +02006014 "$P_SRV dtls=1 exchanges=2 read_timeout=20000 hs_timeout=10000-20000" \
6015 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=10000-20000 reconnect_hard=1" \
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006016 0 \
6017 -C "resend" \
Manuel Pégourié-Gonnard259db912015-09-09 11:37:17 +02006018 -S "The operation timed out" \
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006019 -s "Client initiated reconnection from same port"
6020
Paul Bakker362689d2016-05-13 10:33:25 +01006021not_with_valgrind # server/client too slow to respond in time (next test has higher timeouts)
6022run_test "DTLS client reconnect from same port: reconnect, nbio, no valgrind" \
Manuel Pégourié-Gonnard259db912015-09-09 11:37:17 +02006023 "$P_SRV dtls=1 exchanges=2 read_timeout=1000 nbio=2" \
6024 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-1000 reconnect_hard=1" \
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006025 0 \
Manuel Pégourié-Gonnard259db912015-09-09 11:37:17 +02006026 -S "The operation timed out" \
Manuel Pégourié-Gonnardd745a1a2015-09-08 12:40:43 +02006027 -s "Client initiated reconnection from same port"
6028
Paul Bakker362689d2016-05-13 10:33:25 +01006029only_with_valgrind # Only with valgrind, do previous test but with higher read_timeout and hs_timeout
6030run_test "DTLS client reconnect from same port: reconnect, nbio, valgrind" \
6031 "$P_SRV dtls=1 exchanges=2 read_timeout=2000 nbio=2 hs_timeout=1500-6000" \
6032 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=1500-3000 reconnect_hard=1" \
6033 0 \
6034 -S "The operation timed out" \
6035 -s "Client initiated reconnection from same port"
6036
Manuel Pégourié-Gonnard259db912015-09-09 11:37:17 +02006037run_test "DTLS client reconnect from same port: no cookies" \
6038 "$P_SRV dtls=1 exchanges=2 read_timeout=1000 cookies=0" \
Manuel Pégourié-Gonnard6ad23b92015-09-15 12:57:46 +02006039 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-8000 reconnect_hard=1" \
6040 0 \
Manuel Pégourié-Gonnard259db912015-09-09 11:37:17 +02006041 -s "The operation timed out" \
6042 -S "Client initiated reconnection from same port"
6043
Manuel Pégourié-Gonnardb85ce9e2020-03-13 11:11:02 +01006044run_test "DTLS client reconnect from same port: attacker-injected" \
6045 -p "$P_PXY inject_clihlo=1" \
6046 "$P_SRV dtls=1 exchanges=2 debug_level=1" \
6047 "$P_CLI dtls=1 exchanges=2" \
6048 0 \
6049 -s "possible client reconnect from the same port" \
6050 -S "Client initiated reconnection from same port"
6051
Manuel Pégourié-Gonnard08a1d4b2014-09-26 10:35:50 +02006052# Tests for various cases of client authentication with DTLS
6053# (focused on handshake flows and message parsing)
6054
6055run_test "DTLS client auth: required" \
6056 "$P_SRV dtls=1 auth_mode=required" \
6057 "$P_CLI dtls=1" \
6058 0 \
6059 -s "Verifying peer X.509 certificate... ok"
6060
6061run_test "DTLS client auth: optional, client has no cert" \
6062 "$P_SRV dtls=1 auth_mode=optional" \
6063 "$P_CLI dtls=1 crt_file=none key_file=none" \
6064 0 \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01006065 -s "! Certificate was missing"
Manuel Pégourié-Gonnard08a1d4b2014-09-26 10:35:50 +02006066
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01006067run_test "DTLS client auth: none, client has no cert" \
Manuel Pégourié-Gonnard08a1d4b2014-09-26 10:35:50 +02006068 "$P_SRV dtls=1 auth_mode=none" \
6069 "$P_CLI dtls=1 crt_file=none key_file=none debug_level=2" \
6070 0 \
6071 -c "skip write certificate$" \
Manuel Pégourié-Gonnard89addc42015-04-20 10:56:18 +01006072 -s "! Certificate verification was skipped"
Manuel Pégourié-Gonnard08a1d4b2014-09-26 10:35:50 +02006073
Manuel Pégourié-Gonnard0a885742015-08-04 12:08:35 +02006074run_test "DTLS wrong PSK: badmac alert" \
6075 "$P_SRV dtls=1 psk=abc123 force_ciphersuite=TLS-PSK-WITH-AES-128-GCM-SHA256" \
6076 "$P_CLI dtls=1 psk=abc124" \
6077 1 \
6078 -s "SSL - Verification of the message MAC failed" \
6079 -c "SSL - A fatal alert message was received from our peer"
6080
Manuel Pégourié-Gonnard502bf302014-08-20 13:12:58 +02006081# Tests for receiving fragmented handshake messages with DTLS
6082
6083requires_gnutls
6084run_test "DTLS reassembly: no fragmentation (gnutls server)" \
6085 "$G_SRV -u --mtu 2048 -a" \
6086 "$P_CLI dtls=1 debug_level=2" \
6087 0 \
6088 -C "found fragmented DTLS handshake message" \
6089 -C "error"
6090
6091requires_gnutls
6092run_test "DTLS reassembly: some fragmentation (gnutls server)" \
6093 "$G_SRV -u --mtu 512" \
6094 "$P_CLI dtls=1 debug_level=2" \
6095 0 \
6096 -c "found fragmented DTLS handshake message" \
6097 -C "error"
6098
6099requires_gnutls
6100run_test "DTLS reassembly: more fragmentation (gnutls server)" \
6101 "$G_SRV -u --mtu 128" \
6102 "$P_CLI dtls=1 debug_level=2" \
6103 0 \
6104 -c "found fragmented DTLS handshake message" \
6105 -C "error"
6106
6107requires_gnutls
6108run_test "DTLS reassembly: more fragmentation, nbio (gnutls server)" \
6109 "$G_SRV -u --mtu 128" \
6110 "$P_CLI dtls=1 nbio=2 debug_level=2" \
6111 0 \
6112 -c "found fragmented DTLS handshake message" \
6113 -C "error"
6114
Manuel Pégourié-Gonnard0c4cbc72014-09-02 14:47:31 +02006115requires_gnutls
Hanno Becker6a243642017-10-12 15:18:45 +01006116requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard0c4cbc72014-09-02 14:47:31 +02006117run_test "DTLS reassembly: fragmentation, renego (gnutls server)" \
6118 "$G_SRV -u --mtu 256" \
6119 "$P_CLI debug_level=3 dtls=1 renegotiation=1 renegotiate=1" \
6120 0 \
6121 -c "found fragmented DTLS handshake message" \
6122 -c "client hello, adding renegotiation extension" \
6123 -c "found renegotiation extension" \
6124 -c "=> renegotiate" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02006125 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0c4cbc72014-09-02 14:47:31 +02006126 -C "error" \
6127 -s "Extra-header:"
6128
6129requires_gnutls
Hanno Becker6a243642017-10-12 15:18:45 +01006130requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard0c4cbc72014-09-02 14:47:31 +02006131run_test "DTLS reassembly: fragmentation, nbio, renego (gnutls server)" \
6132 "$G_SRV -u --mtu 256" \
6133 "$P_CLI debug_level=3 nbio=2 dtls=1 renegotiation=1 renegotiate=1" \
6134 0 \
6135 -c "found fragmented DTLS handshake message" \
6136 -c "client hello, adding renegotiation extension" \
6137 -c "found renegotiation extension" \
6138 -c "=> renegotiate" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02006139 -C "mbedtls_ssl_handshake returned" \
Manuel Pégourié-Gonnard0c4cbc72014-09-02 14:47:31 +02006140 -C "error" \
6141 -s "Extra-header:"
6142
Manuel Pégourié-Gonnarda7756172014-08-31 18:37:01 +02006143run_test "DTLS reassembly: no fragmentation (openssl server)" \
6144 "$O_SRV -dtls1 -mtu 2048" \
6145 "$P_CLI dtls=1 debug_level=2" \
6146 0 \
6147 -C "found fragmented DTLS handshake message" \
6148 -C "error"
6149
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02006150run_test "DTLS reassembly: some fragmentation (openssl server)" \
6151 "$O_SRV -dtls1 -mtu 768" \
Manuel Pégourié-Gonnard64dffc52014-09-02 13:39:16 +02006152 "$P_CLI dtls=1 debug_level=2" \
6153 0 \
6154 -c "found fragmented DTLS handshake message" \
6155 -C "error"
6156
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02006157run_test "DTLS reassembly: more fragmentation (openssl server)" \
Manuel Pégourié-Gonnard64dffc52014-09-02 13:39:16 +02006158 "$O_SRV -dtls1 -mtu 256" \
6159 "$P_CLI dtls=1 debug_level=2" \
6160 0 \
6161 -c "found fragmented DTLS handshake message" \
6162 -C "error"
6163
6164run_test "DTLS reassembly: fragmentation, nbio (openssl server)" \
6165 "$O_SRV -dtls1 -mtu 256" \
6166 "$P_CLI dtls=1 nbio=2 debug_level=2" \
6167 0 \
6168 -c "found fragmented DTLS handshake message" \
6169 -C "error"
Manuel Pégourié-Gonnarda7756172014-08-31 18:37:01 +02006170
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006171# Tests for sending fragmented handshake messages with DTLS
6172#
6173# Use client auth when we need the client to send large messages,
6174# and use large cert chains on both sides too (the long chains we have all use
6175# both RSA and ECDSA, but ideally we should have long chains with either).
6176# Sizes reached (UDP payload):
6177# - 2037B for server certificate
6178# - 1542B for client certificate
6179# - 1013B for newsessionticket
6180# - all others below 512B
6181# All those tests assume MAX_CONTENT_LEN is at least 2048
6182
6183requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6184requires_config_enabled MBEDTLS_RSA_C
6185requires_config_enabled MBEDTLS_ECDSA_C
6186requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Yuto Takanoc75df632021-07-08 15:56:33 +01006187requires_max_content_len 4096
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006188run_test "DTLS fragmenting: none (for reference)" \
6189 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6190 crt_file=data_files/server7_int-ca.crt \
6191 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006192 hs_timeout=2500-60000 \
Hanno Becker12405e72018-08-13 16:45:46 +01006193 max_frag_len=4096" \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006194 "$P_CLI dtls=1 debug_level=2 \
6195 crt_file=data_files/server8_int-ca2.crt \
6196 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006197 hs_timeout=2500-60000 \
Hanno Becker12405e72018-08-13 16:45:46 +01006198 max_frag_len=4096" \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006199 0 \
6200 -S "found fragmented DTLS handshake message" \
6201 -C "found fragmented DTLS handshake message" \
6202 -C "error"
6203
6204requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6205requires_config_enabled MBEDTLS_RSA_C
6206requires_config_enabled MBEDTLS_ECDSA_C
6207requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Yuto Takanoc75df632021-07-08 15:56:33 +01006208requires_max_content_len 2048
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006209run_test "DTLS fragmenting: server only (max_frag_len)" \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006210 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6211 crt_file=data_files/server7_int-ca.crt \
6212 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006213 hs_timeout=2500-60000 \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006214 max_frag_len=1024" \
6215 "$P_CLI dtls=1 debug_level=2 \
6216 crt_file=data_files/server8_int-ca2.crt \
6217 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006218 hs_timeout=2500-60000 \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006219 max_frag_len=2048" \
6220 0 \
6221 -S "found fragmented DTLS handshake message" \
6222 -c "found fragmented DTLS handshake message" \
6223 -C "error"
6224
Hanno Becker69ca0ad2018-08-24 12:11:35 +01006225# With the MFL extension, the server has no way of forcing
6226# the client to not exceed a certain MTU; hence, the following
6227# test can't be replicated with an MTU proxy such as the one
6228# `client-initiated, server only (max_frag_len)` below.
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006229requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6230requires_config_enabled MBEDTLS_RSA_C
6231requires_config_enabled MBEDTLS_ECDSA_C
6232requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Yuto Takanoc75df632021-07-08 15:56:33 +01006233requires_max_content_len 4096
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006234run_test "DTLS fragmenting: server only (more) (max_frag_len)" \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006235 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6236 crt_file=data_files/server7_int-ca.crt \
6237 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006238 hs_timeout=2500-60000 \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006239 max_frag_len=512" \
6240 "$P_CLI dtls=1 debug_level=2 \
6241 crt_file=data_files/server8_int-ca2.crt \
6242 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006243 hs_timeout=2500-60000 \
Hanno Becker69ca0ad2018-08-24 12:11:35 +01006244 max_frag_len=4096" \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006245 0 \
6246 -S "found fragmented DTLS handshake message" \
6247 -c "found fragmented DTLS handshake message" \
6248 -C "error"
6249
6250requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6251requires_config_enabled MBEDTLS_RSA_C
6252requires_config_enabled MBEDTLS_ECDSA_C
6253requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Yuto Takanoc75df632021-07-08 15:56:33 +01006254requires_max_content_len 2048
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006255run_test "DTLS fragmenting: client-initiated, server only (max_frag_len)" \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006256 "$P_SRV dtls=1 debug_level=2 auth_mode=none \
6257 crt_file=data_files/server7_int-ca.crt \
6258 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006259 hs_timeout=2500-60000 \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006260 max_frag_len=2048" \
6261 "$P_CLI dtls=1 debug_level=2 \
6262 crt_file=data_files/server8_int-ca2.crt \
6263 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006264 hs_timeout=2500-60000 \
6265 max_frag_len=1024" \
6266 0 \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006267 -S "found fragmented DTLS handshake message" \
6268 -c "found fragmented DTLS handshake message" \
6269 -C "error"
6270
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006271# While not required by the standard defining the MFL extension
6272# (according to which it only applies to records, not to datagrams),
6273# Mbed TLS will never send datagrams larger than MFL + { Max record expansion },
6274# as otherwise there wouldn't be any means to communicate MTU restrictions
6275# to the peer.
6276# The next test checks that no datagrams significantly larger than the
6277# negotiated MFL are sent.
6278requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6279requires_config_enabled MBEDTLS_RSA_C
6280requires_config_enabled MBEDTLS_ECDSA_C
6281requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Yuto Takanoc75df632021-07-08 15:56:33 +01006282requires_max_content_len 2048
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006283run_test "DTLS fragmenting: client-initiated, server only (max_frag_len), proxy MTU" \
Andrzej Kurek0fc9cf42018-10-09 03:09:41 -04006284 -p "$P_PXY mtu=1110" \
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006285 "$P_SRV dtls=1 debug_level=2 auth_mode=none \
6286 crt_file=data_files/server7_int-ca.crt \
6287 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006288 hs_timeout=2500-60000 \
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006289 max_frag_len=2048" \
6290 "$P_CLI dtls=1 debug_level=2 \
6291 crt_file=data_files/server8_int-ca2.crt \
6292 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006293 hs_timeout=2500-60000 \
6294 max_frag_len=1024" \
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006295 0 \
6296 -S "found fragmented DTLS handshake message" \
6297 -c "found fragmented DTLS handshake message" \
6298 -C "error"
6299
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006300requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6301requires_config_enabled MBEDTLS_RSA_C
6302requires_config_enabled MBEDTLS_ECDSA_C
6303requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Yuto Takanoc75df632021-07-08 15:56:33 +01006304requires_max_content_len 2048
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006305run_test "DTLS fragmenting: client-initiated, both (max_frag_len)" \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006306 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6307 crt_file=data_files/server7_int-ca.crt \
6308 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006309 hs_timeout=2500-60000 \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006310 max_frag_len=2048" \
6311 "$P_CLI dtls=1 debug_level=2 \
6312 crt_file=data_files/server8_int-ca2.crt \
6313 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006314 hs_timeout=2500-60000 \
6315 max_frag_len=1024" \
Manuel Pégourié-Gonnard2cb17e22017-09-19 13:00:47 +02006316 0 \
6317 -s "found fragmented DTLS handshake message" \
6318 -c "found fragmented DTLS handshake message" \
6319 -C "error"
6320
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006321# While not required by the standard defining the MFL extension
6322# (according to which it only applies to records, not to datagrams),
6323# Mbed TLS will never send datagrams larger than MFL + { Max record expansion },
6324# as otherwise there wouldn't be any means to communicate MTU restrictions
6325# to the peer.
6326# The next test checks that no datagrams significantly larger than the
6327# negotiated MFL are sent.
6328requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6329requires_config_enabled MBEDTLS_RSA_C
6330requires_config_enabled MBEDTLS_ECDSA_C
6331requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
Yuto Takanoc75df632021-07-08 15:56:33 +01006332requires_max_content_len 2048
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006333run_test "DTLS fragmenting: client-initiated, both (max_frag_len), proxy MTU" \
Andrzej Kurek0fc9cf42018-10-09 03:09:41 -04006334 -p "$P_PXY mtu=1110" \
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006335 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6336 crt_file=data_files/server7_int-ca.crt \
6337 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006338 hs_timeout=2500-60000 \
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006339 max_frag_len=2048" \
6340 "$P_CLI dtls=1 debug_level=2 \
6341 crt_file=data_files/server8_int-ca2.crt \
6342 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006343 hs_timeout=2500-60000 \
6344 max_frag_len=1024" \
Hanno Beckerc92b5c82018-08-24 11:48:01 +01006345 0 \
6346 -s "found fragmented DTLS handshake message" \
6347 -c "found fragmented DTLS handshake message" \
6348 -C "error"
6349
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006350requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6351requires_config_enabled MBEDTLS_RSA_C
6352requires_config_enabled MBEDTLS_ECDSA_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006353requires_max_content_len 4096
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006354run_test "DTLS fragmenting: none (for reference) (MTU)" \
6355 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6356 crt_file=data_files/server7_int-ca.crt \
6357 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006358 hs_timeout=2500-60000 \
Hanno Becker12405e72018-08-13 16:45:46 +01006359 mtu=4096" \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006360 "$P_CLI dtls=1 debug_level=2 \
6361 crt_file=data_files/server8_int-ca2.crt \
6362 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006363 hs_timeout=2500-60000 \
Hanno Becker12405e72018-08-13 16:45:46 +01006364 mtu=4096" \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006365 0 \
6366 -S "found fragmented DTLS handshake message" \
6367 -C "found fragmented DTLS handshake message" \
6368 -C "error"
6369
6370requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6371requires_config_enabled MBEDTLS_RSA_C
6372requires_config_enabled MBEDTLS_ECDSA_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006373requires_max_content_len 4096
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006374run_test "DTLS fragmenting: client (MTU)" \
6375 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6376 crt_file=data_files/server7_int-ca.crt \
6377 key_file=data_files/server7.key \
Andrzej Kurek948fe802018-10-05 15:42:44 -04006378 hs_timeout=3500-60000 \
Hanno Becker12405e72018-08-13 16:45:46 +01006379 mtu=4096" \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006380 "$P_CLI dtls=1 debug_level=2 \
6381 crt_file=data_files/server8_int-ca2.crt \
6382 key_file=data_files/server8.key \
Andrzej Kurek948fe802018-10-05 15:42:44 -04006383 hs_timeout=3500-60000 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006384 mtu=1024" \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006385 0 \
6386 -s "found fragmented DTLS handshake message" \
6387 -C "found fragmented DTLS handshake message" \
6388 -C "error"
6389
6390requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6391requires_config_enabled MBEDTLS_RSA_C
6392requires_config_enabled MBEDTLS_ECDSA_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006393requires_max_content_len 2048
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006394run_test "DTLS fragmenting: server (MTU)" \
6395 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6396 crt_file=data_files/server7_int-ca.crt \
6397 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006398 hs_timeout=2500-60000 \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006399 mtu=512" \
6400 "$P_CLI dtls=1 debug_level=2 \
6401 crt_file=data_files/server8_int-ca2.crt \
6402 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006403 hs_timeout=2500-60000 \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006404 mtu=2048" \
6405 0 \
6406 -S "found fragmented DTLS handshake message" \
6407 -c "found fragmented DTLS handshake message" \
6408 -C "error"
6409
6410requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6411requires_config_enabled MBEDTLS_RSA_C
6412requires_config_enabled MBEDTLS_ECDSA_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006413requires_max_content_len 2048
Andrzej Kurek7311c782018-10-11 06:49:41 -04006414run_test "DTLS fragmenting: both (MTU=1024)" \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006415 -p "$P_PXY mtu=1024" \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006416 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6417 crt_file=data_files/server7_int-ca.crt \
6418 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006419 hs_timeout=2500-60000 \
Andrzej Kurek95805282018-10-11 08:55:37 -04006420 mtu=1024" \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006421 "$P_CLI dtls=1 debug_level=2 \
6422 crt_file=data_files/server8_int-ca2.crt \
6423 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006424 hs_timeout=2500-60000 \
6425 mtu=1024" \
Manuel Pégourié-Gonnardb747c6c2018-08-12 13:28:53 +02006426 0 \
6427 -s "found fragmented DTLS handshake message" \
6428 -c "found fragmented DTLS handshake message" \
6429 -C "error"
6430
Andrzej Kurek77826052018-10-11 07:34:08 -04006431# Forcing ciphersuite for this test to fit the MTU of 512 with full config.
Andrzej Kurek7311c782018-10-11 06:49:41 -04006432requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6433requires_config_enabled MBEDTLS_RSA_C
6434requires_config_enabled MBEDTLS_ECDSA_C
6435requires_config_enabled MBEDTLS_SHA256_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006436requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Andrzej Kurek7311c782018-10-11 06:49:41 -04006437requires_config_enabled MBEDTLS_AES_C
6438requires_config_enabled MBEDTLS_GCM_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006439requires_max_content_len 2048
Andrzej Kurek7311c782018-10-11 06:49:41 -04006440run_test "DTLS fragmenting: both (MTU=512)" \
Hanno Becker8d832182018-03-15 10:14:19 +00006441 -p "$P_PXY mtu=512" \
Hanno Becker72a4f032017-11-15 16:39:20 +00006442 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6443 crt_file=data_files/server7_int-ca.crt \
6444 key_file=data_files/server7.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006445 hs_timeout=2500-60000 \
Hanno Becker72a4f032017-11-15 16:39:20 +00006446 mtu=512" \
6447 "$P_CLI dtls=1 debug_level=2 \
6448 crt_file=data_files/server8_int-ca2.crt \
6449 key_file=data_files/server8.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006450 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
6451 hs_timeout=2500-60000 \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02006452 mtu=512" \
Manuel Pégourié-Gonnard63eca932014-09-08 16:39:08 +02006453 0 \
Manuel Pégourié-Gonnard246c13a2014-09-24 13:56:09 +02006454 -s "found fragmented DTLS handshake message" \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02006455 -c "found fragmented DTLS handshake message" \
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02006456 -C "error"
Manuel Pégourié-Gonnard74a13782014-10-14 22:34:08 +02006457
Andrzej Kurek7311c782018-10-11 06:49:41 -04006458# Test for automatic MTU reduction on repeated resend.
Andrzej Kurek77826052018-10-11 07:34:08 -04006459# Forcing ciphersuite for this test to fit the MTU of 508 with full config.
Andrzej Kurek7311c782018-10-11 06:49:41 -04006460# The ratio of max/min timeout should ideally equal 4 to accept two
6461# retransmissions, but in some cases (like both the server and client using
6462# fragmentation and auto-reduction) an extra retransmission might occur,
6463# hence the ratio of 8.
Hanno Becker37029eb2018-08-29 17:01:40 +01006464not_with_valgrind
Manuel Pégourié-Gonnardb8eec192018-08-20 09:34:02 +02006465requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6466requires_config_enabled MBEDTLS_RSA_C
6467requires_config_enabled MBEDTLS_ECDSA_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006468requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Andrzej Kurek7311c782018-10-11 06:49:41 -04006469requires_config_enabled MBEDTLS_AES_C
6470requires_config_enabled MBEDTLS_GCM_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006471requires_max_content_len 2048
Manuel Pégourié-Gonnardb8eec192018-08-20 09:34:02 +02006472run_test "DTLS fragmenting: proxy MTU: auto-reduction" \
6473 -p "$P_PXY mtu=508" \
6474 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6475 crt_file=data_files/server7_int-ca.crt \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006476 key_file=data_files/server7.key \
6477 hs_timeout=400-3200" \
Manuel Pégourié-Gonnardb8eec192018-08-20 09:34:02 +02006478 "$P_CLI dtls=1 debug_level=2 \
6479 crt_file=data_files/server8_int-ca2.crt \
6480 key_file=data_files/server8.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006481 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
6482 hs_timeout=400-3200" \
Manuel Pégourié-Gonnardb8eec192018-08-20 09:34:02 +02006483 0 \
6484 -s "found fragmented DTLS handshake message" \
6485 -c "found fragmented DTLS handshake message" \
6486 -C "error"
6487
Andrzej Kurek77826052018-10-11 07:34:08 -04006488# Forcing ciphersuite for this test to fit the MTU of 508 with full config.
Hanno Becker108992e2018-08-29 17:04:18 +01006489only_with_valgrind
6490requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6491requires_config_enabled MBEDTLS_RSA_C
6492requires_config_enabled MBEDTLS_ECDSA_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006493requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Andrzej Kurek7311c782018-10-11 06:49:41 -04006494requires_config_enabled MBEDTLS_AES_C
6495requires_config_enabled MBEDTLS_GCM_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006496requires_max_content_len 2048
Hanno Becker108992e2018-08-29 17:04:18 +01006497run_test "DTLS fragmenting: proxy MTU: auto-reduction" \
6498 -p "$P_PXY mtu=508" \
6499 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6500 crt_file=data_files/server7_int-ca.crt \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006501 key_file=data_files/server7.key \
Hanno Becker108992e2018-08-29 17:04:18 +01006502 hs_timeout=250-10000" \
6503 "$P_CLI dtls=1 debug_level=2 \
6504 crt_file=data_files/server8_int-ca2.crt \
6505 key_file=data_files/server8.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006506 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Hanno Becker108992e2018-08-29 17:04:18 +01006507 hs_timeout=250-10000" \
6508 0 \
6509 -s "found fragmented DTLS handshake message" \
6510 -c "found fragmented DTLS handshake message" \
6511 -C "error"
6512
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006513# the proxy shouldn't drop or mess up anything, so we shouldn't need to resend
Manuel Pégourié-Gonnard3d183ce2018-08-22 09:56:22 +02006514# OTOH the client might resend if the server is to slow to reset after sending
6515# a HelloVerifyRequest, so only check for no retransmission server-side
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006516not_with_valgrind # spurious autoreduction due to timeout
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006517requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6518requires_config_enabled MBEDTLS_RSA_C
6519requires_config_enabled MBEDTLS_ECDSA_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006520requires_max_content_len 2048
Andrzej Kurek7311c782018-10-11 06:49:41 -04006521run_test "DTLS fragmenting: proxy MTU, simple handshake (MTU=1024)" \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006522 -p "$P_PXY mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006523 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6524 crt_file=data_files/server7_int-ca.crt \
6525 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006526 hs_timeout=10000-60000 \
6527 mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006528 "$P_CLI dtls=1 debug_level=2 \
6529 crt_file=data_files/server8_int-ca2.crt \
6530 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006531 hs_timeout=10000-60000 \
6532 mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006533 0 \
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006534 -S "autoreduction" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006535 -s "found fragmented DTLS handshake message" \
6536 -c "found fragmented DTLS handshake message" \
6537 -C "error"
6538
Andrzej Kurek77826052018-10-11 07:34:08 -04006539# Forcing ciphersuite for this test to fit the MTU of 512 with full config.
Andrzej Kurek7311c782018-10-11 06:49:41 -04006540# the proxy shouldn't drop or mess up anything, so we shouldn't need to resend
6541# OTOH the client might resend if the server is to slow to reset after sending
6542# a HelloVerifyRequest, so only check for no retransmission server-side
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006543not_with_valgrind # spurious autoreduction due to timeout
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006544requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6545requires_config_enabled MBEDTLS_RSA_C
6546requires_config_enabled MBEDTLS_ECDSA_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006547requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Andrzej Kurek7311c782018-10-11 06:49:41 -04006548requires_config_enabled MBEDTLS_AES_C
6549requires_config_enabled MBEDTLS_GCM_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006550requires_max_content_len 2048
Andrzej Kurek7311c782018-10-11 06:49:41 -04006551run_test "DTLS fragmenting: proxy MTU, simple handshake (MTU=512)" \
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006552 -p "$P_PXY mtu=512" \
6553 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6554 crt_file=data_files/server7_int-ca.crt \
6555 key_file=data_files/server7.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006556 hs_timeout=10000-60000 \
6557 mtu=512" \
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006558 "$P_CLI dtls=1 debug_level=2 \
6559 crt_file=data_files/server8_int-ca2.crt \
6560 key_file=data_files/server8.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006561 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
6562 hs_timeout=10000-60000 \
6563 mtu=512" \
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006564 0 \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006565 -S "autoreduction" \
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006566 -s "found fragmented DTLS handshake message" \
6567 -c "found fragmented DTLS handshake message" \
6568 -C "error"
6569
Andrzej Kurek7311c782018-10-11 06:49:41 -04006570not_with_valgrind # spurious autoreduction due to timeout
6571requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6572requires_config_enabled MBEDTLS_RSA_C
6573requires_config_enabled MBEDTLS_ECDSA_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006574requires_max_content_len 2048
Andrzej Kurek7311c782018-10-11 06:49:41 -04006575run_test "DTLS fragmenting: proxy MTU, simple handshake, nbio (MTU=1024)" \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006576 -p "$P_PXY mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006577 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6578 crt_file=data_files/server7_int-ca.crt \
6579 key_file=data_files/server7.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006580 hs_timeout=10000-60000 \
6581 mtu=1024 nbio=2" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006582 "$P_CLI dtls=1 debug_level=2 \
6583 crt_file=data_files/server8_int-ca2.crt \
6584 key_file=data_files/server8.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006585 hs_timeout=10000-60000 \
6586 mtu=1024 nbio=2" \
6587 0 \
6588 -S "autoreduction" \
6589 -s "found fragmented DTLS handshake message" \
6590 -c "found fragmented DTLS handshake message" \
6591 -C "error"
6592
Andrzej Kurek77826052018-10-11 07:34:08 -04006593# Forcing ciphersuite for this test to fit the MTU of 512 with full config.
Andrzej Kurek7311c782018-10-11 06:49:41 -04006594not_with_valgrind # spurious autoreduction due to timeout
6595requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6596requires_config_enabled MBEDTLS_RSA_C
6597requires_config_enabled MBEDTLS_ECDSA_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006598requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Andrzej Kurek7311c782018-10-11 06:49:41 -04006599requires_config_enabled MBEDTLS_AES_C
6600requires_config_enabled MBEDTLS_GCM_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006601requires_max_content_len 2048
Andrzej Kurek7311c782018-10-11 06:49:41 -04006602run_test "DTLS fragmenting: proxy MTU, simple handshake, nbio (MTU=512)" \
6603 -p "$P_PXY mtu=512" \
6604 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6605 crt_file=data_files/server7_int-ca.crt \
6606 key_file=data_files/server7.key \
6607 hs_timeout=10000-60000 \
6608 mtu=512 nbio=2" \
6609 "$P_CLI dtls=1 debug_level=2 \
6610 crt_file=data_files/server8_int-ca2.crt \
6611 key_file=data_files/server8.key \
6612 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
6613 hs_timeout=10000-60000 \
6614 mtu=512 nbio=2" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006615 0 \
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006616 -S "autoreduction" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006617 -s "found fragmented DTLS handshake message" \
6618 -c "found fragmented DTLS handshake message" \
6619 -C "error"
6620
Andrzej Kurek77826052018-10-11 07:34:08 -04006621# Forcing ciphersuite for this test to fit the MTU of 1450 with full config.
Hanno Beckerb841b4f2018-08-28 10:25:51 +01006622# This ensures things still work after session_reset().
6623# It also exercises the "resumed handshake" flow.
Manuel Pégourié-Gonnard19c62f92018-08-16 10:50:39 +02006624# Since we don't support reading fragmented ClientHello yet,
6625# up the MTU to 1450 (larger than ClientHello with session ticket,
6626# but still smaller than client's Certificate to ensure fragmentation).
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006627# An autoreduction on the client-side might happen if the server is
6628# slow to reset, therefore omitting '-C "autoreduction"' below.
Manuel Pégourié-Gonnard2f2d9022018-08-21 12:17:54 +02006629# reco_delay avoids races where the client reconnects before the server has
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006630# resumed listening, which would result in a spurious autoreduction.
6631not_with_valgrind # spurious autoreduction due to timeout
Manuel Pégourié-Gonnard19c62f92018-08-16 10:50:39 +02006632requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6633requires_config_enabled MBEDTLS_RSA_C
6634requires_config_enabled MBEDTLS_ECDSA_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006635requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Andrzej Kurek7311c782018-10-11 06:49:41 -04006636requires_config_enabled MBEDTLS_AES_C
6637requires_config_enabled MBEDTLS_GCM_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006638requires_max_content_len 2048
Manuel Pégourié-Gonnard19c62f92018-08-16 10:50:39 +02006639run_test "DTLS fragmenting: proxy MTU, resumed handshake" \
6640 -p "$P_PXY mtu=1450" \
6641 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6642 crt_file=data_files/server7_int-ca.crt \
6643 key_file=data_files/server7.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006644 hs_timeout=10000-60000 \
Manuel Pégourié-Gonnard19c62f92018-08-16 10:50:39 +02006645 mtu=1450" \
6646 "$P_CLI dtls=1 debug_level=2 \
6647 crt_file=data_files/server8_int-ca2.crt \
6648 key_file=data_files/server8.key \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006649 hs_timeout=10000-60000 \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006650 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01006651 mtu=1450 reconnect=1 skip_close_notify=1 reco_delay=1" \
Manuel Pégourié-Gonnard19c62f92018-08-16 10:50:39 +02006652 0 \
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006653 -S "autoreduction" \
Manuel Pégourié-Gonnard19c62f92018-08-16 10:50:39 +02006654 -s "found fragmented DTLS handshake message" \
6655 -c "found fragmented DTLS handshake message" \
6656 -C "error"
6657
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006658# An autoreduction on the client-side might happen if the server is
6659# slow to reset, therefore omitting '-C "autoreduction"' below.
6660not_with_valgrind # spurious autoreduction due to timeout
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006661requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6662requires_config_enabled MBEDTLS_RSA_C
6663requires_config_enabled MBEDTLS_ECDSA_C
6664requires_config_enabled MBEDTLS_SHA256_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006665requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006666requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
6667requires_config_enabled MBEDTLS_CHACHAPOLY_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006668requires_max_content_len 2048
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006669run_test "DTLS fragmenting: proxy MTU, ChachaPoly renego" \
6670 -p "$P_PXY mtu=512" \
6671 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6672 crt_file=data_files/server7_int-ca.crt \
6673 key_file=data_files/server7.key \
6674 exchanges=2 renegotiation=1 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006675 hs_timeout=10000-60000 \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006676 mtu=512" \
6677 "$P_CLI dtls=1 debug_level=2 \
6678 crt_file=data_files/server8_int-ca2.crt \
6679 key_file=data_files/server8.key \
6680 exchanges=2 renegotiation=1 renegotiate=1 \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006681 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006682 hs_timeout=10000-60000 \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006683 mtu=512" \
6684 0 \
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006685 -S "autoreduction" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006686 -s "found fragmented DTLS handshake message" \
6687 -c "found fragmented DTLS handshake message" \
6688 -C "error"
6689
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006690# An autoreduction on the client-side might happen if the server is
6691# slow to reset, therefore omitting '-C "autoreduction"' below.
6692not_with_valgrind # spurious autoreduction due to timeout
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006693requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6694requires_config_enabled MBEDTLS_RSA_C
6695requires_config_enabled MBEDTLS_ECDSA_C
6696requires_config_enabled MBEDTLS_SHA256_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006697requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006698requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
6699requires_config_enabled MBEDTLS_AES_C
6700requires_config_enabled MBEDTLS_GCM_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006701requires_max_content_len 2048
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006702run_test "DTLS fragmenting: proxy MTU, AES-GCM renego" \
6703 -p "$P_PXY mtu=512" \
6704 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6705 crt_file=data_files/server7_int-ca.crt \
6706 key_file=data_files/server7.key \
6707 exchanges=2 renegotiation=1 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006708 hs_timeout=10000-60000 \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006709 mtu=512" \
6710 "$P_CLI dtls=1 debug_level=2 \
6711 crt_file=data_files/server8_int-ca2.crt \
6712 key_file=data_files/server8.key \
6713 exchanges=2 renegotiation=1 renegotiate=1 \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006714 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006715 hs_timeout=10000-60000 \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006716 mtu=512" \
6717 0 \
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006718 -S "autoreduction" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006719 -s "found fragmented DTLS handshake message" \
6720 -c "found fragmented DTLS handshake message" \
6721 -C "error"
6722
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006723# An autoreduction on the client-side might happen if the server is
6724# slow to reset, therefore omitting '-C "autoreduction"' below.
6725not_with_valgrind # spurious autoreduction due to timeout
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006726requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6727requires_config_enabled MBEDTLS_RSA_C
6728requires_config_enabled MBEDTLS_ECDSA_C
6729requires_config_enabled MBEDTLS_SHA256_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006730requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006731requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
6732requires_config_enabled MBEDTLS_AES_C
6733requires_config_enabled MBEDTLS_CCM_C
Yuto Takanoc75df632021-07-08 15:56:33 +01006734requires_max_content_len 2048
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006735run_test "DTLS fragmenting: proxy MTU, AES-CCM renego" \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006736 -p "$P_PXY mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006737 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6738 crt_file=data_files/server7_int-ca.crt \
6739 key_file=data_files/server7.key \
6740 exchanges=2 renegotiation=1 \
6741 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006742 hs_timeout=10000-60000 \
6743 mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006744 "$P_CLI dtls=1 debug_level=2 \
6745 crt_file=data_files/server8_int-ca2.crt \
6746 key_file=data_files/server8.key \
6747 exchanges=2 renegotiation=1 renegotiate=1 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006748 hs_timeout=10000-60000 \
6749 mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006750 0 \
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006751 -S "autoreduction" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006752 -s "found fragmented DTLS handshake message" \
6753 -c "found fragmented DTLS handshake message" \
6754 -C "error"
6755
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006756# An autoreduction on the client-side might happen if the server is
6757# slow to reset, therefore omitting '-C "autoreduction"' below.
6758not_with_valgrind # spurious autoreduction due to timeout
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006759requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6760requires_config_enabled MBEDTLS_RSA_C
6761requires_config_enabled MBEDTLS_ECDSA_C
6762requires_config_enabled MBEDTLS_SHA256_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006763requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006764requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
6765requires_config_enabled MBEDTLS_AES_C
6766requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
6767requires_config_enabled MBEDTLS_SSL_ENCRYPT_THEN_MAC
Yuto Takanoc75df632021-07-08 15:56:33 +01006768requires_max_content_len 2048
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006769run_test "DTLS fragmenting: proxy MTU, AES-CBC EtM renego" \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006770 -p "$P_PXY mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006771 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6772 crt_file=data_files/server7_int-ca.crt \
6773 key_file=data_files/server7.key \
6774 exchanges=2 renegotiation=1 \
6775 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006776 hs_timeout=10000-60000 \
6777 mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006778 "$P_CLI dtls=1 debug_level=2 \
6779 crt_file=data_files/server8_int-ca2.crt \
6780 key_file=data_files/server8.key \
6781 exchanges=2 renegotiation=1 renegotiate=1 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006782 hs_timeout=10000-60000 \
6783 mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006784 0 \
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006785 -S "autoreduction" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006786 -s "found fragmented DTLS handshake message" \
6787 -c "found fragmented DTLS handshake message" \
6788 -C "error"
6789
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006790# An autoreduction on the client-side might happen if the server is
6791# slow to reset, therefore omitting '-C "autoreduction"' below.
6792not_with_valgrind # spurious autoreduction due to timeout
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006793requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6794requires_config_enabled MBEDTLS_RSA_C
6795requires_config_enabled MBEDTLS_ECDSA_C
6796requires_config_enabled MBEDTLS_SHA256_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006797requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006798requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
6799requires_config_enabled MBEDTLS_AES_C
6800requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
Yuto Takanoc75df632021-07-08 15:56:33 +01006801requires_max_content_len 2048
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006802run_test "DTLS fragmenting: proxy MTU, AES-CBC non-EtM renego" \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006803 -p "$P_PXY mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006804 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6805 crt_file=data_files/server7_int-ca.crt \
6806 key_file=data_files/server7.key \
6807 exchanges=2 renegotiation=1 \
6808 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256 etm=0 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006809 hs_timeout=10000-60000 \
6810 mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006811 "$P_CLI dtls=1 debug_level=2 \
6812 crt_file=data_files/server8_int-ca2.crt \
6813 key_file=data_files/server8.key \
6814 exchanges=2 renegotiation=1 renegotiate=1 \
Andrzej Kurek52f84912018-10-05 07:53:40 -04006815 hs_timeout=10000-60000 \
6816 mtu=1024" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006817 0 \
Andrzej Kurek35f2f302018-10-09 08:52:14 -04006818 -S "autoreduction" \
Manuel Pégourié-Gonnard72c27072018-08-13 12:37:51 +02006819 -s "found fragmented DTLS handshake message" \
6820 -c "found fragmented DTLS handshake message" \
6821 -C "error"
6822
Andrzej Kurek77826052018-10-11 07:34:08 -04006823# Forcing ciphersuite for this test to fit the MTU of 512 with full config.
Manuel Pégourié-Gonnard2d56f0d2018-08-16 11:09:03 +02006824requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6825requires_config_enabled MBEDTLS_RSA_C
6826requires_config_enabled MBEDTLS_ECDSA_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006827requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Andrzej Kurek7311c782018-10-11 06:49:41 -04006828requires_config_enabled MBEDTLS_AES_C
6829requires_config_enabled MBEDTLS_GCM_C
Manuel Pégourié-Gonnard2d56f0d2018-08-16 11:09:03 +02006830client_needs_more_time 2
Yuto Takanoc75df632021-07-08 15:56:33 +01006831requires_max_content_len 2048
Manuel Pégourié-Gonnard2d56f0d2018-08-16 11:09:03 +02006832run_test "DTLS fragmenting: proxy MTU + 3d" \
6833 -p "$P_PXY mtu=512 drop=8 delay=8 duplicate=8" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01006834 "$P_SRV dgram_packing=0 dtls=1 debug_level=2 auth_mode=required \
Manuel Pégourié-Gonnard2d56f0d2018-08-16 11:09:03 +02006835 crt_file=data_files/server7_int-ca.crt \
6836 key_file=data_files/server7.key \
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02006837 hs_timeout=250-10000 mtu=512" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01006838 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
Manuel Pégourié-Gonnard2d56f0d2018-08-16 11:09:03 +02006839 crt_file=data_files/server8_int-ca2.crt \
6840 key_file=data_files/server8.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006841 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02006842 hs_timeout=250-10000 mtu=512" \
Manuel Pégourié-Gonnard2d56f0d2018-08-16 11:09:03 +02006843 0 \
6844 -s "found fragmented DTLS handshake message" \
6845 -c "found fragmented DTLS handshake message" \
6846 -C "error"
6847
Andrzej Kurek77826052018-10-11 07:34:08 -04006848# Forcing ciphersuite for this test to fit the MTU of 512 with full config.
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006849requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6850requires_config_enabled MBEDTLS_RSA_C
6851requires_config_enabled MBEDTLS_ECDSA_C
Gilles Peskinec221e532021-07-13 20:34:55 +02006852requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
Andrzej Kurek7311c782018-10-11 06:49:41 -04006853requires_config_enabled MBEDTLS_AES_C
6854requires_config_enabled MBEDTLS_GCM_C
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006855client_needs_more_time 2
Yuto Takanoc75df632021-07-08 15:56:33 +01006856requires_max_content_len 2048
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006857run_test "DTLS fragmenting: proxy MTU + 3d, nbio" \
6858 -p "$P_PXY mtu=512 drop=8 delay=8 duplicate=8" \
6859 "$P_SRV dtls=1 debug_level=2 auth_mode=required \
6860 crt_file=data_files/server7_int-ca.crt \
6861 key_file=data_files/server7.key \
6862 hs_timeout=250-10000 mtu=512 nbio=2" \
6863 "$P_CLI dtls=1 debug_level=2 \
6864 crt_file=data_files/server8_int-ca2.crt \
6865 key_file=data_files/server8.key \
Andrzej Kurek7311c782018-10-11 06:49:41 -04006866 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
Manuel Pégourié-Gonnardc1d54b72018-08-22 10:02:59 +02006867 hs_timeout=250-10000 mtu=512 nbio=2" \
6868 0 \
6869 -s "found fragmented DTLS handshake message" \
6870 -c "found fragmented DTLS handshake message" \
6871 -C "error"
6872
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02006873# interop tests for DTLS fragmentating with reliable connection
6874#
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006875# here and below we just want to test that the we fragment in a way that
6876# pleases other implementations, so we don't need the peer to fragment
6877requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6878requires_config_enabled MBEDTLS_RSA_C
6879requires_config_enabled MBEDTLS_ECDSA_C
6880requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
Manuel Pégourié-Gonnard61512982018-08-21 09:40:07 +02006881requires_gnutls
Yuto Takanoc75df632021-07-08 15:56:33 +01006882requires_max_content_len 2048
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006883run_test "DTLS fragmenting: gnutls server, DTLS 1.2" \
6884 "$G_SRV -u" \
6885 "$P_CLI dtls=1 debug_level=2 \
6886 crt_file=data_files/server8_int-ca2.crt \
6887 key_file=data_files/server8.key \
6888 mtu=512 force_version=dtls1_2" \
6889 0 \
6890 -c "fragmenting handshake message" \
6891 -C "error"
6892
6893requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6894requires_config_enabled MBEDTLS_RSA_C
6895requires_config_enabled MBEDTLS_ECDSA_C
6896requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
Manuel Pégourié-Gonnard61512982018-08-21 09:40:07 +02006897requires_gnutls
Yuto Takanoc75df632021-07-08 15:56:33 +01006898requires_max_content_len 2048
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006899run_test "DTLS fragmenting: gnutls server, DTLS 1.0" \
6900 "$G_SRV -u" \
6901 "$P_CLI dtls=1 debug_level=2 \
6902 crt_file=data_files/server8_int-ca2.crt \
6903 key_file=data_files/server8.key \
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02006904 mtu=512 force_version=dtls1" \
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006905 0 \
6906 -c "fragmenting handshake message" \
6907 -C "error"
6908
Hanno Beckerb9a00862018-08-28 10:20:22 +01006909# We use --insecure for the GnuTLS client because it expects
6910# the hostname / IP it connects to to be the name used in the
6911# certificate obtained from the server. Here, however, it
6912# connects to 127.0.0.1 while our test certificates use 'localhost'
6913# as the server name in the certificate. This will make the
6914# certifiate validation fail, but passing --insecure makes
6915# GnuTLS continue the connection nonetheless.
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006916requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6917requires_config_enabled MBEDTLS_RSA_C
6918requires_config_enabled MBEDTLS_ECDSA_C
6919requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
Manuel Pégourié-Gonnard61512982018-08-21 09:40:07 +02006920requires_gnutls
Andrzej Kurekb4593462018-10-11 08:43:30 -04006921requires_not_i686
Yuto Takanoc75df632021-07-08 15:56:33 +01006922requires_max_content_len 2048
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006923run_test "DTLS fragmenting: gnutls client, DTLS 1.2" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02006924 "$P_SRV dtls=1 debug_level=2 \
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006925 crt_file=data_files/server7_int-ca.crt \
6926 key_file=data_files/server7.key \
6927 mtu=512 force_version=dtls1_2" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02006928 "$G_CLI -u --insecure 127.0.0.1" \
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006929 0 \
6930 -s "fragmenting handshake message"
6931
Hanno Beckerb9a00862018-08-28 10:20:22 +01006932# See previous test for the reason to use --insecure
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006933requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6934requires_config_enabled MBEDTLS_RSA_C
6935requires_config_enabled MBEDTLS_ECDSA_C
6936requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
Manuel Pégourié-Gonnard61512982018-08-21 09:40:07 +02006937requires_gnutls
Andrzej Kurekb4593462018-10-11 08:43:30 -04006938requires_not_i686
Yuto Takanoc75df632021-07-08 15:56:33 +01006939requires_max_content_len 2048
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006940run_test "DTLS fragmenting: gnutls client, DTLS 1.0" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02006941 "$P_SRV dtls=1 debug_level=2 \
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006942 crt_file=data_files/server7_int-ca.crt \
6943 key_file=data_files/server7.key \
6944 mtu=512 force_version=dtls1" \
Manuel Pégourié-Gonnard34aa1872018-08-23 19:07:15 +02006945 "$G_CLI -u --insecure 127.0.0.1" \
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006946 0 \
6947 -s "fragmenting handshake message"
6948
6949requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6950requires_config_enabled MBEDTLS_RSA_C
6951requires_config_enabled MBEDTLS_ECDSA_C
6952requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
Yuto Takanoc75df632021-07-08 15:56:33 +01006953requires_max_content_len 2048
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006954run_test "DTLS fragmenting: openssl server, DTLS 1.2" \
6955 "$O_SRV -dtls1_2 -verify 10" \
6956 "$P_CLI dtls=1 debug_level=2 \
6957 crt_file=data_files/server8_int-ca2.crt \
6958 key_file=data_files/server8.key \
6959 mtu=512 force_version=dtls1_2" \
6960 0 \
6961 -c "fragmenting handshake message" \
6962 -C "error"
6963
6964requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6965requires_config_enabled MBEDTLS_RSA_C
6966requires_config_enabled MBEDTLS_ECDSA_C
6967requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
Yuto Takanoc75df632021-07-08 15:56:33 +01006968requires_max_content_len 2048
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006969run_test "DTLS fragmenting: openssl server, DTLS 1.0" \
6970 "$O_SRV -dtls1 -verify 10" \
6971 "$P_CLI dtls=1 debug_level=2 \
6972 crt_file=data_files/server8_int-ca2.crt \
6973 key_file=data_files/server8.key \
6974 mtu=512 force_version=dtls1" \
6975 0 \
6976 -c "fragmenting handshake message" \
6977 -C "error"
6978
6979requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6980requires_config_enabled MBEDTLS_RSA_C
6981requires_config_enabled MBEDTLS_ECDSA_C
6982requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
Yuto Takanoc75df632021-07-08 15:56:33 +01006983requires_max_content_len 2048
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006984run_test "DTLS fragmenting: openssl client, DTLS 1.2" \
6985 "$P_SRV dtls=1 debug_level=2 \
6986 crt_file=data_files/server7_int-ca.crt \
6987 key_file=data_files/server7.key \
6988 mtu=512 force_version=dtls1_2" \
6989 "$O_CLI -dtls1_2" \
6990 0 \
6991 -s "fragmenting handshake message"
6992
6993requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
6994requires_config_enabled MBEDTLS_RSA_C
6995requires_config_enabled MBEDTLS_ECDSA_C
6996requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
Yuto Takanoc75df632021-07-08 15:56:33 +01006997requires_max_content_len 2048
Manuel Pégourié-Gonnard1218bc02018-08-17 10:51:26 +02006998run_test "DTLS fragmenting: openssl client, DTLS 1.0" \
6999 "$P_SRV dtls=1 debug_level=2 \
7000 crt_file=data_files/server7_int-ca.crt \
7001 key_file=data_files/server7.key \
7002 mtu=512 force_version=dtls1" \
7003 "$O_CLI -dtls1" \
7004 0 \
7005 -s "fragmenting handshake message"
7006
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007007# interop tests for DTLS fragmentating with unreliable connection
7008#
7009# again we just want to test that the we fragment in a way that
7010# pleases other implementations, so we don't need the peer to fragment
7011requires_gnutls_next
7012requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
7013requires_config_enabled MBEDTLS_RSA_C
7014requires_config_enabled MBEDTLS_ECDSA_C
7015requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02007016client_needs_more_time 4
Yuto Takanoc75df632021-07-08 15:56:33 +01007017requires_max_content_len 2048
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007018run_test "DTLS fragmenting: 3d, gnutls server, DTLS 1.2" \
7019 -p "$P_PXY drop=8 delay=8 duplicate=8" \
7020 "$G_NEXT_SRV -u" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007021 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007022 crt_file=data_files/server8_int-ca2.crt \
7023 key_file=data_files/server8.key \
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02007024 hs_timeout=250-60000 mtu=512 force_version=dtls1_2" \
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007025 0 \
7026 -c "fragmenting handshake message" \
7027 -C "error"
7028
7029requires_gnutls_next
7030requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
7031requires_config_enabled MBEDTLS_RSA_C
7032requires_config_enabled MBEDTLS_ECDSA_C
7033requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02007034client_needs_more_time 4
Yuto Takanoc75df632021-07-08 15:56:33 +01007035requires_max_content_len 2048
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007036run_test "DTLS fragmenting: 3d, gnutls server, DTLS 1.0" \
7037 -p "$P_PXY drop=8 delay=8 duplicate=8" \
7038 "$G_NEXT_SRV -u" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007039 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007040 crt_file=data_files/server8_int-ca2.crt \
7041 key_file=data_files/server8.key \
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02007042 hs_timeout=250-60000 mtu=512 force_version=dtls1" \
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007043 0 \
7044 -c "fragmenting handshake message" \
7045 -C "error"
7046
k-stachowiakabb843e2019-02-18 16:14:03 +01007047requires_gnutls_next
Hanno Becker3b8b40c2018-08-28 10:25:41 +01007048requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
7049requires_config_enabled MBEDTLS_RSA_C
7050requires_config_enabled MBEDTLS_ECDSA_C
7051requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
7052client_needs_more_time 4
Yuto Takanoc75df632021-07-08 15:56:33 +01007053requires_max_content_len 2048
Hanno Becker3b8b40c2018-08-28 10:25:41 +01007054run_test "DTLS fragmenting: 3d, gnutls client, DTLS 1.2" \
7055 -p "$P_PXY drop=8 delay=8 duplicate=8" \
7056 "$P_SRV dtls=1 debug_level=2 \
7057 crt_file=data_files/server7_int-ca.crt \
7058 key_file=data_files/server7.key \
7059 hs_timeout=250-60000 mtu=512 force_version=dtls1_2" \
k-stachowiakabb843e2019-02-18 16:14:03 +01007060 "$G_NEXT_CLI -u --insecure 127.0.0.1" \
Hanno Becker3b8b40c2018-08-28 10:25:41 +01007061 0 \
7062 -s "fragmenting handshake message"
7063
k-stachowiakabb843e2019-02-18 16:14:03 +01007064requires_gnutls_next
Hanno Becker3b8b40c2018-08-28 10:25:41 +01007065requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
7066requires_config_enabled MBEDTLS_RSA_C
7067requires_config_enabled MBEDTLS_ECDSA_C
7068requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
7069client_needs_more_time 4
Yuto Takanoc75df632021-07-08 15:56:33 +01007070requires_max_content_len 2048
Hanno Becker3b8b40c2018-08-28 10:25:41 +01007071run_test "DTLS fragmenting: 3d, gnutls client, DTLS 1.0" \
7072 -p "$P_PXY drop=8 delay=8 duplicate=8" \
7073 "$P_SRV dtls=1 debug_level=2 \
7074 crt_file=data_files/server7_int-ca.crt \
7075 key_file=data_files/server7.key \
7076 hs_timeout=250-60000 mtu=512 force_version=dtls1" \
k-stachowiakabb843e2019-02-18 16:14:03 +01007077 "$G_NEXT_CLI -u --insecure 127.0.0.1" \
Hanno Becker3b8b40c2018-08-28 10:25:41 +01007078 0 \
7079 -s "fragmenting handshake message"
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007080
Manuel Pégourié-Gonnardc1eda672018-09-03 10:41:49 +02007081## Interop test with OpenSSL might trigger a bug in recent versions (including
7082## all versions installed on the CI machines), reported here:
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007083## Bug report: https://github.com/openssl/openssl/issues/6902
Manuel Pégourié-Gonnardc1eda672018-09-03 10:41:49 +02007084## They should be re-enabled once a fixed version of OpenSSL is available
7085## (this should happen in some 1.1.1_ release according to the ticket).
Hanno Becker3b8b40c2018-08-28 10:25:41 +01007086skip_next_test
7087requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
7088requires_config_enabled MBEDTLS_RSA_C
7089requires_config_enabled MBEDTLS_ECDSA_C
7090requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
7091client_needs_more_time 4
Yuto Takanoc75df632021-07-08 15:56:33 +01007092requires_max_content_len 2048
Hanno Becker3b8b40c2018-08-28 10:25:41 +01007093run_test "DTLS fragmenting: 3d, openssl server, DTLS 1.2" \
7094 -p "$P_PXY drop=8 delay=8 duplicate=8" \
7095 "$O_SRV -dtls1_2 -verify 10" \
7096 "$P_CLI dtls=1 debug_level=2 \
7097 crt_file=data_files/server8_int-ca2.crt \
7098 key_file=data_files/server8.key \
7099 hs_timeout=250-60000 mtu=512 force_version=dtls1_2" \
7100 0 \
7101 -c "fragmenting handshake message" \
7102 -C "error"
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007103
Manuel Pégourié-Gonnardc1eda672018-09-03 10:41:49 +02007104skip_next_test
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007105requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
7106requires_config_enabled MBEDTLS_RSA_C
7107requires_config_enabled MBEDTLS_ECDSA_C
7108requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02007109client_needs_more_time 4
Yuto Takanoc75df632021-07-08 15:56:33 +01007110requires_max_content_len 2048
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007111run_test "DTLS fragmenting: 3d, openssl server, DTLS 1.0" \
7112 -p "$P_PXY drop=8 delay=8 duplicate=8" \
Manuel Pégourié-Gonnardc1eda672018-09-03 10:41:49 +02007113 "$O_SRV -dtls1 -verify 10" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007114 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007115 crt_file=data_files/server8_int-ca2.crt \
7116 key_file=data_files/server8.key \
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02007117 hs_timeout=250-60000 mtu=512 force_version=dtls1" \
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007118 0 \
7119 -c "fragmenting handshake message" \
7120 -C "error"
7121
Manuel Pégourié-Gonnardc1eda672018-09-03 10:41:49 +02007122skip_next_test
7123requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
7124requires_config_enabled MBEDTLS_RSA_C
7125requires_config_enabled MBEDTLS_ECDSA_C
7126requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
7127client_needs_more_time 4
Yuto Takanoc75df632021-07-08 15:56:33 +01007128requires_max_content_len 2048
Manuel Pégourié-Gonnardc1eda672018-09-03 10:41:49 +02007129run_test "DTLS fragmenting: 3d, openssl client, DTLS 1.2" \
7130 -p "$P_PXY drop=8 delay=8 duplicate=8" \
7131 "$P_SRV dtls=1 debug_level=2 \
7132 crt_file=data_files/server7_int-ca.crt \
7133 key_file=data_files/server7.key \
7134 hs_timeout=250-60000 mtu=512 force_version=dtls1_2" \
7135 "$O_CLI -dtls1_2" \
7136 0 \
7137 -s "fragmenting handshake message"
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007138
7139# -nbio is added to prevent s_client from blocking in case of duplicated
7140# messages at the end of the handshake
Manuel Pégourié-Gonnardc1eda672018-09-03 10:41:49 +02007141skip_next_test
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007142requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
7143requires_config_enabled MBEDTLS_RSA_C
7144requires_config_enabled MBEDTLS_ECDSA_C
7145requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02007146client_needs_more_time 4
Yuto Takanoc75df632021-07-08 15:56:33 +01007147requires_max_content_len 2048
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007148run_test "DTLS fragmenting: 3d, openssl client, DTLS 1.0" \
7149 -p "$P_PXY drop=8 delay=8 duplicate=8" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007150 "$P_SRV dgram_packing=0 dtls=1 debug_level=2 \
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007151 crt_file=data_files/server7_int-ca.crt \
7152 key_file=data_files/server7.key \
Manuel Pégourié-Gonnard02f3a8a2018-08-20 10:49:28 +02007153 hs_timeout=250-60000 mtu=512 force_version=dtls1" \
Manuel Pégourié-Gonnardc1eda672018-09-03 10:41:49 +02007154 "$O_CLI -nbio -dtls1" \
Manuel Pégourié-Gonnard38110df2018-08-17 12:44:54 +02007155 0 \
7156 -s "fragmenting handshake message"
7157
Manuel Pégourié-Gonnarda7756172014-08-31 18:37:01 +02007158# Tests for specific things with "unreliable" UDP connection
7159
7160not_with_valgrind # spurious resend due to timeout
7161run_test "DTLS proxy: reference" \
7162 -p "$P_PXY" \
Manuel Pégourié-Gonnard34cbf102019-09-09 11:14:37 +02007163 "$P_SRV dtls=1 debug_level=2 hs_timeout=10000-20000" \
7164 "$P_CLI dtls=1 debug_level=2 hs_timeout=10000-20000" \
Manuel Pégourié-Gonnarda7756172014-08-31 18:37:01 +02007165 0 \
7166 -C "replayed record" \
7167 -S "replayed record" \
7168 -C "record from another epoch" \
7169 -S "record from another epoch" \
7170 -C "discarding invalid record" \
Manuel Pégourié-Gonnard990f9e42014-09-06 12:27:02 +02007171 -S "discarding invalid record" \
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +02007172 -S "resend" \
Manuel Pégourié-Gonnard990f9e42014-09-06 12:27:02 +02007173 -s "Extra-header:" \
Manuel Pégourié-Gonnardbe9eb872014-09-05 17:45:19 +02007174 -c "HTTP/1.0 200 OK"
7175
7176not_with_valgrind # spurious resend due to timeout
Manuel Pégourié-Gonnard990f9e42014-09-06 12:27:02 +02007177run_test "DTLS proxy: duplicate every packet" \
7178 -p "$P_PXY duplicate=1" \
Manuel Pégourié-Gonnard34cbf102019-09-09 11:14:37 +02007179 "$P_SRV dtls=1 dgram_packing=0 debug_level=2 hs_timeout=10000-20000" \
7180 "$P_CLI dtls=1 dgram_packing=0 debug_level=2 hs_timeout=10000-20000" \
Manuel Pégourié-Gonnard990f9e42014-09-06 12:27:02 +02007181 0 \
7182 -c "replayed record" \
7183 -s "replayed record" \
7184 -c "record from another epoch" \
7185 -s "record from another epoch" \
7186 -S "resend" \
7187 -s "Extra-header:" \
7188 -c "HTTP/1.0 200 OK"
7189
7190run_test "DTLS proxy: duplicate every packet, server anti-replay off" \
7191 -p "$P_PXY duplicate=1" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007192 "$P_SRV dtls=1 dgram_packing=0 debug_level=2 anti_replay=0" \
7193 "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
Manuel Pégourié-Gonnard63eca932014-09-08 16:39:08 +02007194 0 \
7195 -c "replayed record" \
7196 -S "replayed record" \
7197 -c "record from another epoch" \
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007198 -s "record from another epoch" \
7199 -c "resend" \
7200 -s "resend" \
Manuel Pégourié-Gonnard246c13a2014-09-24 13:56:09 +02007201 -s "Extra-header:" \
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007202 -c "HTTP/1.0 200 OK"
7203
7204run_test "DTLS proxy: multiple records in same datagram" \
7205 -p "$P_PXY pack=50" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007206 "$P_SRV dtls=1 dgram_packing=0 debug_level=2" \
7207 "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
Manuel Pégourié-Gonnard63eca932014-09-08 16:39:08 +02007208 0 \
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007209 -c "next record in same datagram" \
7210 -s "next record in same datagram"
7211
7212run_test "DTLS proxy: multiple records in same datagram, duplicate every packet" \
7213 -p "$P_PXY pack=50 duplicate=1" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007214 "$P_SRV dtls=1 dgram_packing=0 debug_level=2" \
7215 "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
Manuel Pégourié-Gonnard246c13a2014-09-24 13:56:09 +02007216 0 \
7217 -c "next record in same datagram" \
7218 -s "next record in same datagram"
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007219
Manuel Pégourié-Gonnard246c13a2014-09-24 13:56:09 +02007220run_test "DTLS proxy: inject invalid AD record, default badmac_limit" \
7221 -p "$P_PXY bad_ad=1" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007222 "$P_SRV dtls=1 dgram_packing=0 debug_level=1" \
7223 "$P_CLI dtls=1 dgram_packing=0 debug_level=1 read_timeout=100" \
Manuel Pégourié-Gonnard63eca932014-09-08 16:39:08 +02007224 0 \
Manuel Pégourié-Gonnard74a13782014-10-14 22:34:08 +02007225 -c "discarding invalid record (mac)" \
7226 -s "discarding invalid record (mac)" \
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007227 -s "Extra-header:" \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02007228 -c "HTTP/1.0 200 OK" \
7229 -S "too many records with bad MAC" \
7230 -S "Verification of the message MAC failed"
7231
7232run_test "DTLS proxy: inject invalid AD record, badmac_limit 1" \
7233 -p "$P_PXY bad_ad=1" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007234 "$P_SRV dtls=1 dgram_packing=0 debug_level=1 badmac_limit=1" \
7235 "$P_CLI dtls=1 dgram_packing=0 debug_level=1 read_timeout=100" \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02007236 1 \
Manuel Pégourié-Gonnard74a13782014-10-14 22:34:08 +02007237 -C "discarding invalid record (mac)" \
7238 -S "discarding invalid record (mac)" \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02007239 -S "Extra-header:" \
7240 -C "HTTP/1.0 200 OK" \
7241 -s "too many records with bad MAC" \
7242 -s "Verification of the message MAC failed"
7243
7244run_test "DTLS proxy: inject invalid AD record, badmac_limit 2" \
7245 -p "$P_PXY bad_ad=1" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007246 "$P_SRV dtls=1 dgram_packing=0 debug_level=1 badmac_limit=2" \
7247 "$P_CLI dtls=1 dgram_packing=0 debug_level=1 read_timeout=100" \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02007248 0 \
Manuel Pégourié-Gonnard74a13782014-10-14 22:34:08 +02007249 -c "discarding invalid record (mac)" \
7250 -s "discarding invalid record (mac)" \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02007251 -s "Extra-header:" \
7252 -c "HTTP/1.0 200 OK" \
7253 -S "too many records with bad MAC" \
7254 -S "Verification of the message MAC failed"
7255
7256run_test "DTLS proxy: inject invalid AD record, badmac_limit 2, exchanges 2"\
7257 -p "$P_PXY bad_ad=1" \
Hanno Becker1c9a24c2018-08-14 13:46:33 +01007258 "$P_SRV dtls=1 dgram_packing=0 debug_level=1 badmac_limit=2 exchanges=2" \
7259 "$P_CLI dtls=1 dgram_packing=0 debug_level=1 read_timeout=100 exchanges=2" \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02007260 1 \
Manuel Pégourié-Gonnard74a13782014-10-14 22:34:08 +02007261 -c "discarding invalid record (mac)" \
7262 -s "discarding invalid record (mac)" \
Manuel Pégourié-Gonnarde698f592014-10-14 19:36:36 +02007263 -s "Extra-header:" \
7264 -c "HTTP/1.0 200 OK" \
7265 -s "too many records with bad MAC" \
7266 -s "Verification of the message MAC failed"
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007267
7268run_test "DTLS proxy: delay ChangeCipherSpec" \
7269 -p "$P_PXY delay_ccs=1" \
Hanno Beckerc4305232018-08-14 13:41:21 +01007270 "$P_SRV dtls=1 debug_level=1 dgram_packing=0" \
7271 "$P_CLI dtls=1 debug_level=1 dgram_packing=0" \
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007272 0 \
7273 -c "record from another epoch" \
7274 -s "record from another epoch" \
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007275 -s "Extra-header:" \
7276 -c "HTTP/1.0 200 OK"
7277
Hanno Beckeraa5d0c42018-08-16 13:15:19 +01007278# Tests for reordering support with DTLS
7279
Hanno Becker56cdfd12018-08-17 13:42:15 +01007280run_test "DTLS reordering: Buffer out-of-order handshake message on client" \
7281 -p "$P_PXY delay_srv=ServerHello" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007282 "$P_SRV dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
7283 hs_timeout=2500-60000" \
7284 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
7285 hs_timeout=2500-60000" \
Hanno Beckere3842212018-08-16 15:28:59 +01007286 0 \
7287 -c "Buffering HS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007288 -c "Next handshake message has been buffered - load"\
7289 -S "Buffering HS message" \
7290 -S "Next handshake message has been buffered - load"\
Hanno Becker39b8bc92018-08-28 17:17:13 +01007291 -C "Injecting buffered CCS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007292 -C "Remember CCS message" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007293 -S "Injecting buffered CCS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007294 -S "Remember CCS message"
Hanno Beckere3842212018-08-16 15:28:59 +01007295
Hanno Beckerdc1e9502018-08-28 16:02:33 +01007296run_test "DTLS reordering: Buffer out-of-order handshake message fragment on client" \
7297 -p "$P_PXY delay_srv=ServerHello" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007298 "$P_SRV mtu=512 dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
7299 hs_timeout=2500-60000" \
7300 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
7301 hs_timeout=2500-60000" \
Hanno Beckerdc1e9502018-08-28 16:02:33 +01007302 0 \
7303 -c "Buffering HS message" \
7304 -c "found fragmented DTLS handshake message"\
7305 -c "Next handshake message 1 not or only partially bufffered" \
7306 -c "Next handshake message has been buffered - load"\
7307 -S "Buffering HS message" \
7308 -S "Next handshake message has been buffered - load"\
Hanno Becker39b8bc92018-08-28 17:17:13 +01007309 -C "Injecting buffered CCS message" \
Hanno Beckerdc1e9502018-08-28 16:02:33 +01007310 -C "Remember CCS message" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007311 -S "Injecting buffered CCS message" \
Hanno Beckeraa5d0c42018-08-16 13:15:19 +01007312 -S "Remember CCS message"
7313
Hanno Beckera1adcca2018-08-24 14:41:07 +01007314# The client buffers the ServerKeyExchange before receiving the fragmented
7315# Certificate message; at the time of writing, together these are aroudn 1200b
7316# in size, so that the bound below ensures that the certificate can be reassembled
7317# while keeping the ServerKeyExchange.
7318requires_config_value_at_least "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 1300
7319run_test "DTLS reordering: Buffer out-of-order hs msg before reassembling next" \
Hanno Beckere3567052018-08-21 16:50:43 +01007320 -p "$P_PXY delay_srv=Certificate delay_srv=Certificate" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007321 "$P_SRV mtu=512 dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
7322 hs_timeout=2500-60000" \
7323 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
7324 hs_timeout=2500-60000" \
Hanno Beckere3567052018-08-21 16:50:43 +01007325 0 \
7326 -c "Buffering HS message" \
7327 -c "Next handshake message has been buffered - load"\
Hanno Beckera1adcca2018-08-24 14:41:07 +01007328 -C "attempt to make space by freeing buffered messages" \
7329 -S "Buffering HS message" \
7330 -S "Next handshake message has been buffered - load"\
Hanno Becker39b8bc92018-08-28 17:17:13 +01007331 -C "Injecting buffered CCS message" \
Hanno Beckera1adcca2018-08-24 14:41:07 +01007332 -C "Remember CCS message" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007333 -S "Injecting buffered CCS message" \
Hanno Beckera1adcca2018-08-24 14:41:07 +01007334 -S "Remember CCS message"
7335
7336# The size constraints ensure that the delayed certificate message can't
7337# be reassembled while keeping the ServerKeyExchange message, but it can
7338# when dropping it first.
7339requires_config_value_at_least "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 900
7340requires_config_value_at_most "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 1299
7341run_test "DTLS reordering: Buffer out-of-order hs msg before reassembling next, free buffered msg" \
7342 -p "$P_PXY delay_srv=Certificate delay_srv=Certificate" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007343 "$P_SRV mtu=512 dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
7344 hs_timeout=2500-60000" \
7345 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
7346 hs_timeout=2500-60000" \
Hanno Beckera1adcca2018-08-24 14:41:07 +01007347 0 \
7348 -c "Buffering HS message" \
7349 -c "attempt to make space by freeing buffered future messages" \
7350 -c "Enough space available after freeing buffered HS messages" \
Hanno Beckere3567052018-08-21 16:50:43 +01007351 -S "Buffering HS message" \
7352 -S "Next handshake message has been buffered - load"\
Hanno Becker39b8bc92018-08-28 17:17:13 +01007353 -C "Injecting buffered CCS message" \
Hanno Beckere3567052018-08-21 16:50:43 +01007354 -C "Remember CCS message" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007355 -S "Injecting buffered CCS message" \
Hanno Beckere3567052018-08-21 16:50:43 +01007356 -S "Remember CCS message"
7357
Hanno Becker56cdfd12018-08-17 13:42:15 +01007358run_test "DTLS reordering: Buffer out-of-order handshake message on server" \
7359 -p "$P_PXY delay_cli=Certificate" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007360 "$P_SRV dgram_packing=0 auth_mode=required cookies=0 dtls=1 debug_level=2 \
7361 hs_timeout=2500-60000" \
7362 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
7363 hs_timeout=2500-60000" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007364 0 \
7365 -C "Buffering HS message" \
7366 -C "Next handshake message has been buffered - load"\
7367 -s "Buffering HS message" \
7368 -s "Next handshake message has been buffered - load" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007369 -C "Injecting buffered CCS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007370 -C "Remember CCS message" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007371 -S "Injecting buffered CCS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007372 -S "Remember CCS message"
7373
7374run_test "DTLS reordering: Buffer out-of-order CCS message on client"\
7375 -p "$P_PXY delay_srv=NewSessionTicket" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007376 "$P_SRV dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
7377 hs_timeout=2500-60000" \
7378 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
7379 hs_timeout=2500-60000" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007380 0 \
7381 -C "Buffering HS message" \
7382 -C "Next handshake message has been buffered - load"\
7383 -S "Buffering HS message" \
7384 -S "Next handshake message has been buffered - load" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007385 -c "Injecting buffered CCS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007386 -c "Remember CCS message" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007387 -S "Injecting buffered CCS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007388 -S "Remember CCS message"
7389
7390run_test "DTLS reordering: Buffer out-of-order CCS message on server"\
7391 -p "$P_PXY delay_cli=ClientKeyExchange" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007392 "$P_SRV dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
7393 hs_timeout=2500-60000" \
7394 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
7395 hs_timeout=2500-60000" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007396 0 \
7397 -C "Buffering HS message" \
7398 -C "Next handshake message has been buffered - load"\
7399 -S "Buffering HS message" \
7400 -S "Next handshake message has been buffered - load" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007401 -C "Injecting buffered CCS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007402 -C "Remember CCS message" \
Hanno Becker39b8bc92018-08-28 17:17:13 +01007403 -s "Injecting buffered CCS message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007404 -s "Remember CCS message"
7405
Hanno Beckera1adcca2018-08-24 14:41:07 +01007406run_test "DTLS reordering: Buffer encrypted Finished message" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007407 -p "$P_PXY delay_ccs=1" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007408 "$P_SRV dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
7409 hs_timeout=2500-60000" \
7410 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
7411 hs_timeout=2500-60000" \
Hanno Beckerb34149c2018-08-16 15:29:06 +01007412 0 \
7413 -s "Buffer record from epoch 1" \
Hanno Becker56cdfd12018-08-17 13:42:15 +01007414 -s "Found buffered record from current epoch - load" \
7415 -c "Buffer record from epoch 1" \
7416 -c "Found buffered record from current epoch - load"
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007417
Hanno Beckera1adcca2018-08-24 14:41:07 +01007418# In this test, both the fragmented NewSessionTicket and the ChangeCipherSpec
7419# from the server are delayed, so that the encrypted Finished message
7420# is received and buffered. When the fragmented NewSessionTicket comes
7421# in afterwards, the encrypted Finished message must be freed in order
7422# to make space for the NewSessionTicket to be reassembled.
7423# This works only in very particular circumstances:
7424# - MBEDTLS_SSL_DTLS_MAX_BUFFERING must be large enough to allow buffering
7425# of the NewSessionTicket, but small enough to also allow buffering of
7426# the encrypted Finished message.
7427# - The MTU setting on the server must be so small that the NewSessionTicket
7428# needs to be fragmented.
7429# - All messages sent by the server must be small enough to be either sent
7430# without fragmentation or be reassembled within the bounds of
7431# MBEDTLS_SSL_DTLS_MAX_BUFFERING. Achieve this by testing with a PSK-based
7432# handshake, omitting CRTs.
7433requires_config_value_at_least "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 240
7434requires_config_value_at_most "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 280
7435run_test "DTLS reordering: Buffer encrypted Finished message, drop for fragmented NewSessionTicket" \
7436 -p "$P_PXY delay_srv=NewSessionTicket delay_srv=NewSessionTicket delay_ccs=1" \
7437 "$P_SRV mtu=190 dgram_packing=0 psk=abc123 psk_identity=foo cookies=0 dtls=1 debug_level=2" \
7438 "$P_CLI dgram_packing=0 dtls=1 debug_level=2 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8 psk=abc123 psk_identity=foo" \
7439 0 \
7440 -s "Buffer record from epoch 1" \
7441 -s "Found buffered record from current epoch - load" \
7442 -c "Buffer record from epoch 1" \
7443 -C "Found buffered record from current epoch - load" \
7444 -c "Enough space available after freeing future epoch record"
7445
Manuel Pégourié-Gonnarda0719722014-09-20 12:46:27 +02007446# Tests for "randomly unreliable connection": try a variety of flows and peers
7447
7448client_needs_more_time 2
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007449run_test "DTLS proxy: 3d (drop, delay, duplicate), \"short\" PSK handshake" \
7450 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007451 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007452 psk=abc123" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007453 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007454 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
7455 0 \
7456 -s "Extra-header:" \
7457 -c "HTTP/1.0 200 OK"
7458
Janos Follath74537a62016-09-02 13:45:28 +01007459client_needs_more_time 2
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007460run_test "DTLS proxy: 3d, \"short\" RSA handshake" \
7461 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007462 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none" \
7463 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 \
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007464 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
7465 0 \
7466 -s "Extra-header:" \
7467 -c "HTTP/1.0 200 OK"
7468
Janos Follath74537a62016-09-02 13:45:28 +01007469client_needs_more_time 2
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007470run_test "DTLS proxy: 3d, \"short\" (no ticket, no cli_auth) FS handshake" \
7471 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007472 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none" \
7473 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0" \
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007474 0 \
7475 -s "Extra-header:" \
7476 -c "HTTP/1.0 200 OK"
7477
Janos Follath74537a62016-09-02 13:45:28 +01007478client_needs_more_time 2
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007479run_test "DTLS proxy: 3d, FS, client auth" \
7480 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007481 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=required" \
7482 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0" \
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007483 0 \
7484 -s "Extra-header:" \
7485 -c "HTTP/1.0 200 OK"
7486
Janos Follath74537a62016-09-02 13:45:28 +01007487client_needs_more_time 2
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007488run_test "DTLS proxy: 3d, FS, ticket" \
7489 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007490 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=1 auth_mode=none" \
7491 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=1" \
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007492 0 \
7493 -s "Extra-header:" \
7494 -c "HTTP/1.0 200 OK"
7495
Janos Follath74537a62016-09-02 13:45:28 +01007496client_needs_more_time 2
Manuel Pégourié-Gonnard18e519a2014-09-24 19:09:17 +02007497run_test "DTLS proxy: 3d, max handshake (FS, ticket + client auth)" \
7498 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007499 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=1 auth_mode=required" \
7500 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=1" \
Manuel Pégourié-Gonnard825a49e2014-09-23 11:00:37 +02007501 0 \
7502 -s "Extra-header:" \
7503 -c "HTTP/1.0 200 OK"
7504
Janos Follath74537a62016-09-02 13:45:28 +01007505client_needs_more_time 2
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007506run_test "DTLS proxy: 3d, max handshake, nbio" \
7507 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007508 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 nbio=2 tickets=1 \
Manuel Pégourié-Gonnard37a4de22014-10-01 16:38:03 +02007509 auth_mode=required" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007510 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 nbio=2 tickets=1" \
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007511 0 \
7512 -s "Extra-header:" \
7513 -c "HTTP/1.0 200 OK"
7514
Janos Follath74537a62016-09-02 13:45:28 +01007515client_needs_more_time 4
Manuel Pégourié-Gonnard7a26d732014-10-02 14:50:46 +02007516run_test "DTLS proxy: 3d, min handshake, resumption" \
7517 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007518 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
Manuel Pégourié-Gonnard7a26d732014-10-02 14:50:46 +02007519 psk=abc123 debug_level=3" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007520 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01007521 debug_level=3 reconnect=1 skip_close_notify=1 read_timeout=1000 max_resend=10 \
Manuel Pégourié-Gonnard7a26d732014-10-02 14:50:46 +02007522 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
7523 0 \
7524 -s "a session has been resumed" \
7525 -c "a session has been resumed" \
7526 -s "Extra-header:" \
7527 -c "HTTP/1.0 200 OK"
7528
Janos Follath74537a62016-09-02 13:45:28 +01007529client_needs_more_time 4
Manuel Pégourié-Gonnard85beb302014-10-02 17:59:19 +02007530run_test "DTLS proxy: 3d, min handshake, resumption, nbio" \
7531 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007532 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
Manuel Pégourié-Gonnard85beb302014-10-02 17:59:19 +02007533 psk=abc123 debug_level=3 nbio=2" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007534 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
Manuel Pégourié-Gonnard498e6322020-02-17 11:04:33 +01007535 debug_level=3 reconnect=1 skip_close_notify=1 read_timeout=1000 max_resend=10 \
Manuel Pégourié-Gonnard85beb302014-10-02 17:59:19 +02007536 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8 nbio=2" \
7537 0 \
7538 -s "a session has been resumed" \
7539 -c "a session has been resumed" \
7540 -s "Extra-header:" \
7541 -c "HTTP/1.0 200 OK"
7542
Janos Follath74537a62016-09-02 13:45:28 +01007543client_needs_more_time 4
Hanno Becker6a243642017-10-12 15:18:45 +01007544requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007545run_test "DTLS proxy: 3d, min handshake, client-initiated renego" \
Manuel Pégourié-Gonnard1b753f12014-09-25 16:09:36 +02007546 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007547 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
Manuel Pégourié-Gonnard37a4de22014-10-01 16:38:03 +02007548 psk=abc123 renegotiation=1 debug_level=2" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007549 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
Manuel Pégourié-Gonnard37a4de22014-10-01 16:38:03 +02007550 renegotiate=1 debug_level=2 \
Manuel Pégourié-Gonnard1b753f12014-09-25 16:09:36 +02007551 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
7552 0 \
7553 -c "=> renegotiate" \
7554 -s "=> renegotiate" \
7555 -s "Extra-header:" \
7556 -c "HTTP/1.0 200 OK"
7557
Janos Follath74537a62016-09-02 13:45:28 +01007558client_needs_more_time 4
Hanno Becker6a243642017-10-12 15:18:45 +01007559requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007560run_test "DTLS proxy: 3d, min handshake, client-initiated renego, nbio" \
7561 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007562 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
Manuel Pégourié-Gonnard37a4de22014-10-01 16:38:03 +02007563 psk=abc123 renegotiation=1 debug_level=2" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007564 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
Manuel Pégourié-Gonnard37a4de22014-10-01 16:38:03 +02007565 renegotiate=1 debug_level=2 \
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007566 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
7567 0 \
7568 -c "=> renegotiate" \
7569 -s "=> renegotiate" \
7570 -s "Extra-header:" \
7571 -c "HTTP/1.0 200 OK"
7572
Janos Follath74537a62016-09-02 13:45:28 +01007573client_needs_more_time 4
Hanno Becker6a243642017-10-12 15:18:45 +01007574requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnardba958b82014-10-09 16:13:44 +02007575run_test "DTLS proxy: 3d, min handshake, server-initiated renego" \
Manuel Pégourié-Gonnarda6ace042014-10-15 12:44:41 +02007576 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007577 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
Manuel Pégourié-Gonnarda6ace042014-10-15 12:44:41 +02007578 psk=abc123 renegotiate=1 renegotiation=1 exchanges=4 \
Manuel Pégourié-Gonnardba958b82014-10-09 16:13:44 +02007579 debug_level=2" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007580 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
Manuel Pégourié-Gonnarda6ace042014-10-15 12:44:41 +02007581 renegotiation=1 exchanges=4 debug_level=2 \
Manuel Pégourié-Gonnardba958b82014-10-09 16:13:44 +02007582 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
7583 0 \
7584 -c "=> renegotiate" \
7585 -s "=> renegotiate" \
7586 -s "Extra-header:" \
7587 -c "HTTP/1.0 200 OK"
7588
Janos Follath74537a62016-09-02 13:45:28 +01007589client_needs_more_time 4
Hanno Becker6a243642017-10-12 15:18:45 +01007590requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
Manuel Pégourié-Gonnardba958b82014-10-09 16:13:44 +02007591run_test "DTLS proxy: 3d, min handshake, server-initiated renego, nbio" \
Manuel Pégourié-Gonnarda6ace042014-10-15 12:44:41 +02007592 -p "$P_PXY drop=5 delay=5 duplicate=5" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007593 "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
Manuel Pégourié-Gonnarda6ace042014-10-15 12:44:41 +02007594 psk=abc123 renegotiate=1 renegotiation=1 exchanges=4 \
Manuel Pégourié-Gonnardba958b82014-10-09 16:13:44 +02007595 debug_level=2 nbio=2" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007596 "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
Manuel Pégourié-Gonnarda6ace042014-10-15 12:44:41 +02007597 renegotiation=1 exchanges=4 debug_level=2 nbio=2 \
Manuel Pégourié-Gonnardba958b82014-10-09 16:13:44 +02007598 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
7599 0 \
7600 -c "=> renegotiate" \
7601 -s "=> renegotiate" \
7602 -s "Extra-header:" \
7603 -c "HTTP/1.0 200 OK"
7604
Manuel Pégourié-Gonnard82986c12018-09-03 10:50:21 +02007605## Interop tests with OpenSSL might trigger a bug in recent versions (including
7606## all versions installed on the CI machines), reported here:
7607## Bug report: https://github.com/openssl/openssl/issues/6902
7608## They should be re-enabled once a fixed version of OpenSSL is available
7609## (this should happen in some 1.1.1_ release according to the ticket).
7610skip_next_test
Janos Follath74537a62016-09-02 13:45:28 +01007611client_needs_more_time 6
Manuel Pégourié-Gonnardd68434e2015-08-31 12:48:22 +02007612not_with_valgrind # risk of non-mbedtls peer timing out
Manuel Pégourié-Gonnard9590e0a2014-09-26 16:27:59 +02007613run_test "DTLS proxy: 3d, openssl server" \
Manuel Pégourié-Gonnardd0fd1da2014-09-25 17:00:27 +02007614 -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \
7615 "$O_SRV -dtls1 -mtu 2048" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007616 "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000 tickets=0" \
Manuel Pégourié-Gonnardd0fd1da2014-09-25 17:00:27 +02007617 0 \
Manuel Pégourié-Gonnardd0fd1da2014-09-25 17:00:27 +02007618 -c "HTTP/1.0 200 OK"
7619
Manuel Pégourié-Gonnard82986c12018-09-03 10:50:21 +02007620skip_next_test # see above
Janos Follath74537a62016-09-02 13:45:28 +01007621client_needs_more_time 8
Manuel Pégourié-Gonnardd68434e2015-08-31 12:48:22 +02007622not_with_valgrind # risk of non-mbedtls peer timing out
Manuel Pégourié-Gonnard9590e0a2014-09-26 16:27:59 +02007623run_test "DTLS proxy: 3d, openssl server, fragmentation" \
7624 -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \
7625 "$O_SRV -dtls1 -mtu 768" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007626 "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000 tickets=0" \
Manuel Pégourié-Gonnard9590e0a2014-09-26 16:27:59 +02007627 0 \
Manuel Pégourié-Gonnard9590e0a2014-09-26 16:27:59 +02007628 -c "HTTP/1.0 200 OK"
7629
Manuel Pégourié-Gonnard82986c12018-09-03 10:50:21 +02007630skip_next_test # see above
Janos Follath74537a62016-09-02 13:45:28 +01007631client_needs_more_time 8
Manuel Pégourié-Gonnardd68434e2015-08-31 12:48:22 +02007632not_with_valgrind # risk of non-mbedtls peer timing out
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007633run_test "DTLS proxy: 3d, openssl server, fragmentation, nbio" \
7634 -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \
7635 "$O_SRV -dtls1 -mtu 768" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007636 "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000 nbio=2 tickets=0" \
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007637 0 \
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007638 -c "HTTP/1.0 200 OK"
7639
Manuel Pégourié-Gonnard96999962015-02-17 16:02:37 +00007640requires_gnutls
Janos Follath74537a62016-09-02 13:45:28 +01007641client_needs_more_time 6
Manuel Pégourié-Gonnardd68434e2015-08-31 12:48:22 +02007642not_with_valgrind # risk of non-mbedtls peer timing out
Manuel Pégourié-Gonnard9590e0a2014-09-26 16:27:59 +02007643run_test "DTLS proxy: 3d, gnutls server" \
7644 -p "$P_PXY drop=5 delay=5 duplicate=5" \
7645 "$G_SRV -u --mtu 2048 -a" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007646 "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000" \
Manuel Pégourié-Gonnard9590e0a2014-09-26 16:27:59 +02007647 0 \
7648 -s "Extra-header:" \
7649 -c "Extra-header:"
7650
k-stachowiakabb843e2019-02-18 16:14:03 +01007651requires_gnutls_next
Janos Follath74537a62016-09-02 13:45:28 +01007652client_needs_more_time 8
Manuel Pégourié-Gonnardd68434e2015-08-31 12:48:22 +02007653not_with_valgrind # risk of non-mbedtls peer timing out
Manuel Pégourié-Gonnard9590e0a2014-09-26 16:27:59 +02007654run_test "DTLS proxy: 3d, gnutls server, fragmentation" \
7655 -p "$P_PXY drop=5 delay=5 duplicate=5" \
k-stachowiakabb843e2019-02-18 16:14:03 +01007656 "$G_NEXT_SRV -u --mtu 512" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007657 "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000" \
Manuel Pégourié-Gonnard9590e0a2014-09-26 16:27:59 +02007658 0 \
7659 -s "Extra-header:" \
7660 -c "Extra-header:"
7661
k-stachowiakabb843e2019-02-18 16:14:03 +01007662requires_gnutls_next
Janos Follath74537a62016-09-02 13:45:28 +01007663client_needs_more_time 8
Manuel Pégourié-Gonnardd68434e2015-08-31 12:48:22 +02007664not_with_valgrind # risk of non-mbedtls peer timing out
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007665run_test "DTLS proxy: 3d, gnutls server, fragmentation, nbio" \
7666 -p "$P_PXY drop=5 delay=5 duplicate=5" \
k-stachowiakabb843e2019-02-18 16:14:03 +01007667 "$G_NEXT_SRV -u --mtu 512" \
Andrzej Kurek948fe802018-10-05 15:42:44 -04007668 "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000 nbio=2" \
Manuel Pégourié-Gonnard6093d812014-09-29 17:52:57 +02007669 0 \
7670 -s "Extra-header:" \
7671 -c "Extra-header:"
7672
Manuel Pégourié-Gonnard8520dac2014-02-21 12:12:23 +01007673# Final report
7674
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +01007675echo "------------------------------------------------------------------------"
7676
7677if [ $FAILS = 0 ]; then
Manuel Pégourié-Gonnardf46f1282014-12-11 11:51:28 +01007678 printf "PASSED"
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +01007679else
Manuel Pégourié-Gonnardf46f1282014-12-11 11:51:28 +01007680 printf "FAILED"
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +01007681fi
Manuel Pégourié-Gonnard72e51ee2014-08-31 10:22:11 +02007682PASSES=$(( $TESTS - $FAILS ))
Manuel Pégourié-Gonnard6f4fbbb2014-08-14 14:31:29 +02007683echo " ($PASSES / $TESTS tests ($SKIPS skipped))"
Manuel Pégourié-Gonnard33a752e2014-02-21 09:47:37 +01007684
7685exit $FAILS