1*62c56f98SSadaf Ebrahimi#!/bin/sh 2*62c56f98SSadaf Ebrahimi 3*62c56f98SSadaf Ebrahimi# compat.sh 4*62c56f98SSadaf Ebrahimi# 5*62c56f98SSadaf Ebrahimi# Copyright The Mbed TLS Contributors 6*62c56f98SSadaf Ebrahimi# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 7*62c56f98SSadaf Ebrahimi# 8*62c56f98SSadaf Ebrahimi# Purpose 9*62c56f98SSadaf Ebrahimi# 10*62c56f98SSadaf Ebrahimi# Test interoperbility with OpenSSL, GnuTLS as well as itself. 11*62c56f98SSadaf Ebrahimi# 12*62c56f98SSadaf Ebrahimi# Check each common ciphersuite, with each version, both ways (client/server), 13*62c56f98SSadaf Ebrahimi# with and without client authentication. 14*62c56f98SSadaf Ebrahimi 15*62c56f98SSadaf Ebrahimiset -u 16*62c56f98SSadaf Ebrahimi 17*62c56f98SSadaf Ebrahimi# Limit the size of each log to 10 GiB, in case of failures with this script 18*62c56f98SSadaf Ebrahimi# where it may output seemingly unlimited length error logs. 19*62c56f98SSadaf Ebrahimiulimit -f 20971520 20*62c56f98SSadaf Ebrahimi 21*62c56f98SSadaf EbrahimiORIGINAL_PWD=$PWD 22*62c56f98SSadaf Ebrahimiif ! cd "$(dirname "$0")"; then 23*62c56f98SSadaf Ebrahimi exit 125 24*62c56f98SSadaf Ebrahimifi 25*62c56f98SSadaf Ebrahimi 26*62c56f98SSadaf Ebrahimi# initialise counters 27*62c56f98SSadaf EbrahimiTESTS=0 28*62c56f98SSadaf EbrahimiFAILED=0 29*62c56f98SSadaf EbrahimiSKIPPED=0 30*62c56f98SSadaf EbrahimiSRVMEM=0 31*62c56f98SSadaf Ebrahimi 32*62c56f98SSadaf Ebrahimi# default commands, can be overridden by the environment 33*62c56f98SSadaf Ebrahimi: ${M_SRV:=../programs/ssl/ssl_server2} 34*62c56f98SSadaf Ebrahimi: ${M_CLI:=../programs/ssl/ssl_client2} 35*62c56f98SSadaf Ebrahimi: ${OPENSSL:=openssl} 36*62c56f98SSadaf Ebrahimi: ${GNUTLS_CLI:=gnutls-cli} 37*62c56f98SSadaf Ebrahimi: ${GNUTLS_SERV:=gnutls-serv} 38*62c56f98SSadaf Ebrahimi 39*62c56f98SSadaf Ebrahimi# The OPENSSL variable used to be OPENSSL_CMD for historical reasons. 40*62c56f98SSadaf Ebrahimi# To help the migration, error out if the old variable is set, 41*62c56f98SSadaf Ebrahimi# but only if it has a different value than the new one. 42*62c56f98SSadaf Ebrahimiif [ "${OPENSSL_CMD+set}" = set ]; then 43*62c56f98SSadaf Ebrahimi # the variable is set, we can now check its value 44*62c56f98SSadaf Ebrahimi if [ "$OPENSSL_CMD" != "$OPENSSL" ]; then 45*62c56f98SSadaf Ebrahimi echo "Please use OPENSSL instead of OPENSSL_CMD." >&2 46*62c56f98SSadaf Ebrahimi exit 125 47*62c56f98SSadaf Ebrahimi fi 48*62c56f98SSadaf Ebrahimifi 49*62c56f98SSadaf Ebrahimi 50*62c56f98SSadaf Ebrahimi# do we have a recent enough GnuTLS? 51*62c56f98SSadaf Ebrahimiif ( which $GNUTLS_CLI && which $GNUTLS_SERV ) >/dev/null 2>&1; then 52*62c56f98SSadaf Ebrahimi G_VER="$( $GNUTLS_CLI --version | head -n1 )" 53*62c56f98SSadaf Ebrahimi if echo "$G_VER" | grep '@VERSION@' > /dev/null; then # git version 54*62c56f98SSadaf Ebrahimi PEER_GNUTLS=" GnuTLS" 55*62c56f98SSadaf Ebrahimi else 56*62c56f98SSadaf Ebrahimi eval $( echo $G_VER | sed 's/.* \([0-9]*\)\.\([0-9]\)*\.\([0-9]*\)$/MAJOR="\1" MINOR="\2" PATCH="\3"/' ) 57*62c56f98SSadaf Ebrahimi if [ $MAJOR -lt 3 -o \ 58*62c56f98SSadaf Ebrahimi \( $MAJOR -eq 3 -a $MINOR -lt 2 \) -o \ 59*62c56f98SSadaf Ebrahimi \( $MAJOR -eq 3 -a $MINOR -eq 2 -a $PATCH -lt 15 \) ] 60*62c56f98SSadaf Ebrahimi then 61*62c56f98SSadaf Ebrahimi PEER_GNUTLS="" 62*62c56f98SSadaf Ebrahimi else 63*62c56f98SSadaf Ebrahimi PEER_GNUTLS=" GnuTLS" 64*62c56f98SSadaf Ebrahimi if [ $MINOR -lt 4 ]; then 65*62c56f98SSadaf Ebrahimi GNUTLS_MINOR_LT_FOUR='x' 66*62c56f98SSadaf Ebrahimi fi 67*62c56f98SSadaf Ebrahimi fi 68*62c56f98SSadaf Ebrahimi fi 69*62c56f98SSadaf Ebrahimielse 70*62c56f98SSadaf Ebrahimi PEER_GNUTLS="" 71*62c56f98SSadaf Ebrahimifi 72*62c56f98SSadaf Ebrahimi 73*62c56f98SSadaf Ebrahimiguess_config_name() { 74*62c56f98SSadaf Ebrahimi if git diff --quiet ../include/mbedtls/mbedtls_config.h 2>/dev/null; then 75*62c56f98SSadaf Ebrahimi echo "default" 76*62c56f98SSadaf Ebrahimi else 77*62c56f98SSadaf Ebrahimi echo "unknown" 78*62c56f98SSadaf Ebrahimi fi 79*62c56f98SSadaf Ebrahimi} 80*62c56f98SSadaf Ebrahimi: ${MBEDTLS_TEST_OUTCOME_FILE=} 81*62c56f98SSadaf Ebrahimi: ${MBEDTLS_TEST_CONFIGURATION:="$(guess_config_name)"} 82*62c56f98SSadaf Ebrahimi: ${MBEDTLS_TEST_PLATFORM:="$(uname -s | tr -c \\n0-9A-Za-z _)-$(uname -m | tr -c \\n0-9A-Za-z _)"} 83*62c56f98SSadaf Ebrahimi 84*62c56f98SSadaf Ebrahimi# default values for options 85*62c56f98SSadaf Ebrahimi# /!\ keep this synchronised with: 86*62c56f98SSadaf Ebrahimi# - basic-build-test.sh 87*62c56f98SSadaf Ebrahimi# - all.sh (multiple components) 88*62c56f98SSadaf EbrahimiMODES="tls12 dtls12" 89*62c56f98SSadaf EbrahimiVERIFIES="NO YES" 90*62c56f98SSadaf EbrahimiTYPES="ECDSA RSA PSK" 91*62c56f98SSadaf EbrahimiFILTER="" 92*62c56f98SSadaf Ebrahimi# By default, exclude: 93*62c56f98SSadaf Ebrahimi# - NULL: excluded from our default config + requires OpenSSL legacy 94*62c56f98SSadaf Ebrahimi# - ARIA: requires OpenSSL >= 1.1.1 95*62c56f98SSadaf Ebrahimi# - ChachaPoly: requires OpenSSL >= 1.1.0 96*62c56f98SSadaf EbrahimiEXCLUDE='NULL\|ARIA\|CHACHA20_POLY1305' 97*62c56f98SSadaf EbrahimiVERBOSE="" 98*62c56f98SSadaf EbrahimiMEMCHECK=0 99*62c56f98SSadaf EbrahimiPEERS="OpenSSL$PEER_GNUTLS mbedTLS" 100*62c56f98SSadaf Ebrahimi 101*62c56f98SSadaf Ebrahimi# hidden option: skip DTLS with OpenSSL 102*62c56f98SSadaf Ebrahimi# (travis CI has a version that doesn't work for us) 103*62c56f98SSadaf Ebrahimi: ${OSSL_NO_DTLS:=0} 104*62c56f98SSadaf Ebrahimi 105*62c56f98SSadaf Ebrahimiprint_usage() { 106*62c56f98SSadaf Ebrahimi echo "Usage: $0" 107*62c56f98SSadaf Ebrahimi printf " -h|--help\tPrint this help.\n" 108*62c56f98SSadaf Ebrahimi printf " -f|--filter\tOnly matching ciphersuites are tested (Default: '%s')\n" "$FILTER" 109*62c56f98SSadaf Ebrahimi printf " -e|--exclude\tMatching ciphersuites are excluded (Default: '%s')\n" "$EXCLUDE" 110*62c56f98SSadaf Ebrahimi printf " -m|--modes\tWhich modes to perform (Default: '%s')\n" "$MODES" 111*62c56f98SSadaf Ebrahimi printf " -t|--types\tWhich key exchange type to perform (Default: '%s')\n" "$TYPES" 112*62c56f98SSadaf Ebrahimi printf " -V|--verify\tWhich verification modes to perform (Default: '%s')\n" "$VERIFIES" 113*62c56f98SSadaf Ebrahimi printf " -p|--peers\tWhich peers to use (Default: '%s')\n" "$PEERS" 114*62c56f98SSadaf Ebrahimi printf " \tAlso available: GnuTLS (needs v3.2.15 or higher)\n" 115*62c56f98SSadaf Ebrahimi printf " -M|--memcheck\tCheck memory leaks and errors.\n" 116*62c56f98SSadaf Ebrahimi printf " -v|--verbose\tSet verbose output.\n" 117*62c56f98SSadaf Ebrahimi printf " --list-test-case\tList all potential test cases (No Execution)\n" 118*62c56f98SSadaf Ebrahimi printf " --outcome-file\tFile where test outcomes are written\n" 119*62c56f98SSadaf Ebrahimi printf " \t(default: \$MBEDTLS_TEST_OUTCOME_FILE, none if empty)\n" 120*62c56f98SSadaf Ebrahimi} 121*62c56f98SSadaf Ebrahimi 122*62c56f98SSadaf Ebrahimi# print_test_case <CLIENT> <SERVER> <STANDARD_CIPHER_SUITE> 123*62c56f98SSadaf Ebrahimiprint_test_case() { 124*62c56f98SSadaf Ebrahimi for i in $3; do 125*62c56f98SSadaf Ebrahimi uniform_title $1 $2 $i 126*62c56f98SSadaf Ebrahimi echo $TITLE 127*62c56f98SSadaf Ebrahimi done 128*62c56f98SSadaf Ebrahimi} 129*62c56f98SSadaf Ebrahimi 130*62c56f98SSadaf Ebrahimi# list_test_case lists all potential test cases in compat.sh without execution 131*62c56f98SSadaf Ebrahimilist_test_case() { 132*62c56f98SSadaf Ebrahimi reset_ciphersuites 133*62c56f98SSadaf Ebrahimi for TYPE in $TYPES; do 134*62c56f98SSadaf Ebrahimi add_common_ciphersuites 135*62c56f98SSadaf Ebrahimi add_openssl_ciphersuites 136*62c56f98SSadaf Ebrahimi add_gnutls_ciphersuites 137*62c56f98SSadaf Ebrahimi add_mbedtls_ciphersuites 138*62c56f98SSadaf Ebrahimi done 139*62c56f98SSadaf Ebrahimi 140*62c56f98SSadaf Ebrahimi for VERIFY in $VERIFIES; do 141*62c56f98SSadaf Ebrahimi VERIF=$(echo $VERIFY | tr '[:upper:]' '[:lower:]') 142*62c56f98SSadaf Ebrahimi for MODE in $MODES; do 143*62c56f98SSadaf Ebrahimi print_test_case m O "$O_CIPHERS" 144*62c56f98SSadaf Ebrahimi print_test_case O m "$O_CIPHERS" 145*62c56f98SSadaf Ebrahimi print_test_case m G "$G_CIPHERS" 146*62c56f98SSadaf Ebrahimi print_test_case G m "$G_CIPHERS" 147*62c56f98SSadaf Ebrahimi print_test_case m m "$M_CIPHERS" 148*62c56f98SSadaf Ebrahimi done 149*62c56f98SSadaf Ebrahimi done 150*62c56f98SSadaf Ebrahimi} 151*62c56f98SSadaf Ebrahimi 152*62c56f98SSadaf Ebrahimiget_options() { 153*62c56f98SSadaf Ebrahimi while [ $# -gt 0 ]; do 154*62c56f98SSadaf Ebrahimi case "$1" in 155*62c56f98SSadaf Ebrahimi -f|--filter) 156*62c56f98SSadaf Ebrahimi shift; FILTER=$1 157*62c56f98SSadaf Ebrahimi ;; 158*62c56f98SSadaf Ebrahimi -e|--exclude) 159*62c56f98SSadaf Ebrahimi shift; EXCLUDE=$1 160*62c56f98SSadaf Ebrahimi ;; 161*62c56f98SSadaf Ebrahimi -m|--modes) 162*62c56f98SSadaf Ebrahimi shift; MODES=$1 163*62c56f98SSadaf Ebrahimi ;; 164*62c56f98SSadaf Ebrahimi -t|--types) 165*62c56f98SSadaf Ebrahimi shift; TYPES=$1 166*62c56f98SSadaf Ebrahimi ;; 167*62c56f98SSadaf Ebrahimi -V|--verify) 168*62c56f98SSadaf Ebrahimi shift; VERIFIES=$1 169*62c56f98SSadaf Ebrahimi ;; 170*62c56f98SSadaf Ebrahimi -p|--peers) 171*62c56f98SSadaf Ebrahimi shift; PEERS=$1 172*62c56f98SSadaf Ebrahimi ;; 173*62c56f98SSadaf Ebrahimi -v|--verbose) 174*62c56f98SSadaf Ebrahimi VERBOSE=1 175*62c56f98SSadaf Ebrahimi ;; 176*62c56f98SSadaf Ebrahimi -M|--memcheck) 177*62c56f98SSadaf Ebrahimi MEMCHECK=1 178*62c56f98SSadaf Ebrahimi ;; 179*62c56f98SSadaf Ebrahimi # Please check scripts/check_test_cases.py correspondingly 180*62c56f98SSadaf Ebrahimi # if you have to modify option, --list-test-case 181*62c56f98SSadaf Ebrahimi --list-test-case) 182*62c56f98SSadaf Ebrahimi list_test_case 183*62c56f98SSadaf Ebrahimi exit $? 184*62c56f98SSadaf Ebrahimi ;; 185*62c56f98SSadaf Ebrahimi --outcome-file) 186*62c56f98SSadaf Ebrahimi shift; MBEDTLS_TEST_OUTCOME_FILE=$1 187*62c56f98SSadaf Ebrahimi ;; 188*62c56f98SSadaf Ebrahimi -h|--help) 189*62c56f98SSadaf Ebrahimi print_usage 190*62c56f98SSadaf Ebrahimi exit 0 191*62c56f98SSadaf Ebrahimi ;; 192*62c56f98SSadaf Ebrahimi *) 193*62c56f98SSadaf Ebrahimi echo "Unknown argument: '$1'" 194*62c56f98SSadaf Ebrahimi print_usage 195*62c56f98SSadaf Ebrahimi exit 1 196*62c56f98SSadaf Ebrahimi ;; 197*62c56f98SSadaf Ebrahimi esac 198*62c56f98SSadaf Ebrahimi shift 199*62c56f98SSadaf Ebrahimi done 200*62c56f98SSadaf Ebrahimi 201*62c56f98SSadaf Ebrahimi # sanitize some options (modes checked later) 202*62c56f98SSadaf Ebrahimi VERIFIES="$( echo $VERIFIES | tr [a-z] [A-Z] )" 203*62c56f98SSadaf Ebrahimi TYPES="$( echo $TYPES | tr [a-z] [A-Z] )" 204*62c56f98SSadaf Ebrahimi} 205*62c56f98SSadaf Ebrahimi 206*62c56f98SSadaf Ebrahimilog() { 207*62c56f98SSadaf Ebrahimi if [ "X" != "X$VERBOSE" ]; then 208*62c56f98SSadaf Ebrahimi echo "" 209*62c56f98SSadaf Ebrahimi echo "$@" 210*62c56f98SSadaf Ebrahimi fi 211*62c56f98SSadaf Ebrahimi} 212*62c56f98SSadaf Ebrahimi 213*62c56f98SSadaf Ebrahimi# is_dtls <mode> 214*62c56f98SSadaf Ebrahimiis_dtls() 215*62c56f98SSadaf Ebrahimi{ 216*62c56f98SSadaf Ebrahimi test "$1" = "dtls12" 217*62c56f98SSadaf Ebrahimi} 218*62c56f98SSadaf Ebrahimi 219*62c56f98SSadaf Ebrahimi# minor_ver <mode> 220*62c56f98SSadaf Ebrahimiminor_ver() 221*62c56f98SSadaf Ebrahimi{ 222*62c56f98SSadaf Ebrahimi case "$1" in 223*62c56f98SSadaf Ebrahimi tls12|dtls12) 224*62c56f98SSadaf Ebrahimi echo 3 225*62c56f98SSadaf Ebrahimi ;; 226*62c56f98SSadaf Ebrahimi *) 227*62c56f98SSadaf Ebrahimi echo "error: invalid mode: $MODE" >&2 228*62c56f98SSadaf Ebrahimi # exiting is no good here, typically called in a subshell 229*62c56f98SSadaf Ebrahimi echo -1 230*62c56f98SSadaf Ebrahimi esac 231*62c56f98SSadaf Ebrahimi} 232*62c56f98SSadaf Ebrahimi 233*62c56f98SSadaf Ebrahimifilter() 234*62c56f98SSadaf Ebrahimi{ 235*62c56f98SSadaf Ebrahimi LIST="$1" 236*62c56f98SSadaf Ebrahimi NEW_LIST="" 237*62c56f98SSadaf Ebrahimi 238*62c56f98SSadaf Ebrahimi EXCLMODE="$EXCLUDE" 239*62c56f98SSadaf Ebrahimi 240*62c56f98SSadaf Ebrahimi for i in $LIST; 241*62c56f98SSadaf Ebrahimi do 242*62c56f98SSadaf Ebrahimi NEW_LIST="$NEW_LIST $( echo "$i" | grep "$FILTER" | grep -v "$EXCLMODE" )" 243*62c56f98SSadaf Ebrahimi done 244*62c56f98SSadaf Ebrahimi 245*62c56f98SSadaf Ebrahimi # normalize whitespace 246*62c56f98SSadaf Ebrahimi echo "$NEW_LIST" | sed -e 's/[[:space:]][[:space:]]*/ /g' -e 's/^ //' -e 's/ $//' 247*62c56f98SSadaf Ebrahimi} 248*62c56f98SSadaf Ebrahimi 249*62c56f98SSadaf Ebrahimifilter_ciphersuites() 250*62c56f98SSadaf Ebrahimi{ 251*62c56f98SSadaf Ebrahimi if [ "X" != "X$FILTER" -o "X" != "X$EXCLUDE" ]; 252*62c56f98SSadaf Ebrahimi then 253*62c56f98SSadaf Ebrahimi # Ciphersuite for Mbed TLS 254*62c56f98SSadaf Ebrahimi M_CIPHERS=$( filter "$M_CIPHERS" ) 255*62c56f98SSadaf Ebrahimi 256*62c56f98SSadaf Ebrahimi # Ciphersuite for OpenSSL 257*62c56f98SSadaf Ebrahimi O_CIPHERS=$( filter "$O_CIPHERS" ) 258*62c56f98SSadaf Ebrahimi 259*62c56f98SSadaf Ebrahimi # Ciphersuite for GnuTLS 260*62c56f98SSadaf Ebrahimi G_CIPHERS=$( filter "$G_CIPHERS" ) 261*62c56f98SSadaf Ebrahimi fi 262*62c56f98SSadaf Ebrahimi 263*62c56f98SSadaf Ebrahimi # For GnuTLS client -> Mbed TLS server, 264*62c56f98SSadaf Ebrahimi # we need to force IPv4 by connecting to 127.0.0.1 but then auth fails 265*62c56f98SSadaf Ebrahimi if is_dtls "$MODE" && [ "X$VERIFY" = "XYES" ]; then 266*62c56f98SSadaf Ebrahimi G_CIPHERS="" 267*62c56f98SSadaf Ebrahimi fi 268*62c56f98SSadaf Ebrahimi} 269*62c56f98SSadaf Ebrahimi 270*62c56f98SSadaf Ebrahimireset_ciphersuites() 271*62c56f98SSadaf Ebrahimi{ 272*62c56f98SSadaf Ebrahimi M_CIPHERS="" 273*62c56f98SSadaf Ebrahimi O_CIPHERS="" 274*62c56f98SSadaf Ebrahimi G_CIPHERS="" 275*62c56f98SSadaf Ebrahimi} 276*62c56f98SSadaf Ebrahimi 277*62c56f98SSadaf Ebrahimi# translate_ciphers {g|m|o} {STANDARD_CIPHER_SUITE_NAME...} 278*62c56f98SSadaf Ebrahimi# Set $ciphers to the cipher suite name translations for the specified 279*62c56f98SSadaf Ebrahimi# program (gnutls, mbedtls or openssl). $ciphers is a space-separated 280*62c56f98SSadaf Ebrahimi# list of entries of the form "STANDARD_NAME=PROGRAM_NAME". 281*62c56f98SSadaf Ebrahimitranslate_ciphers() 282*62c56f98SSadaf Ebrahimi{ 283*62c56f98SSadaf Ebrahimi ciphers=$(scripts/translate_ciphers.py "$@") 284*62c56f98SSadaf Ebrahimi if [ $? -ne 0 ]; then 285*62c56f98SSadaf Ebrahimi echo "translate_ciphers.py failed with exit code $1" >&2 286*62c56f98SSadaf Ebrahimi echo "$2" >&2 287*62c56f98SSadaf Ebrahimi exit 1 288*62c56f98SSadaf Ebrahimi fi 289*62c56f98SSadaf Ebrahimi} 290*62c56f98SSadaf Ebrahimi 291*62c56f98SSadaf Ebrahimi# Ciphersuites that can be used with all peers. 292*62c56f98SSadaf Ebrahimi# Since we currently have three possible peers, each ciphersuite should appear 293*62c56f98SSadaf Ebrahimi# three times: in each peer's list (with the name that this peer uses). 294*62c56f98SSadaf Ebrahimiadd_common_ciphersuites() 295*62c56f98SSadaf Ebrahimi{ 296*62c56f98SSadaf Ebrahimi CIPHERS="" 297*62c56f98SSadaf Ebrahimi case $TYPE in 298*62c56f98SSadaf Ebrahimi 299*62c56f98SSadaf Ebrahimi "ECDSA") 300*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 301*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA \ 302*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 \ 303*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 \ 304*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA \ 305*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 \ 306*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 \ 307*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_NULL_SHA \ 308*62c56f98SSadaf Ebrahimi " 309*62c56f98SSadaf Ebrahimi ;; 310*62c56f98SSadaf Ebrahimi 311*62c56f98SSadaf Ebrahimi "RSA") 312*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 313*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_128_CBC_SHA \ 314*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 \ 315*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 \ 316*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_256_CBC_SHA \ 317*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 \ 318*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 \ 319*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA \ 320*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA \ 321*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA \ 322*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 \ 323*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 \ 324*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA \ 325*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 \ 326*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 \ 327*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_NULL_SHA \ 328*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_128_CBC_SHA \ 329*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_128_CBC_SHA256 \ 330*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_128_GCM_SHA256 \ 331*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_256_CBC_SHA \ 332*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_256_CBC_SHA256 \ 333*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_256_GCM_SHA384 \ 334*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_CAMELLIA_128_CBC_SHA \ 335*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_CAMELLIA_256_CBC_SHA \ 336*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_NULL_MD5 \ 337*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_NULL_SHA \ 338*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_NULL_SHA256 \ 339*62c56f98SSadaf Ebrahimi " 340*62c56f98SSadaf Ebrahimi ;; 341*62c56f98SSadaf Ebrahimi 342*62c56f98SSadaf Ebrahimi "PSK") 343*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 344*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_128_CBC_SHA \ 345*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_256_CBC_SHA \ 346*62c56f98SSadaf Ebrahimi " 347*62c56f98SSadaf Ebrahimi ;; 348*62c56f98SSadaf Ebrahimi esac 349*62c56f98SSadaf Ebrahimi 350*62c56f98SSadaf Ebrahimi O_CIPHERS="$O_CIPHERS $CIPHERS" 351*62c56f98SSadaf Ebrahimi G_CIPHERS="$G_CIPHERS $CIPHERS" 352*62c56f98SSadaf Ebrahimi M_CIPHERS="$M_CIPHERS $CIPHERS" 353*62c56f98SSadaf Ebrahimi} 354*62c56f98SSadaf Ebrahimi 355*62c56f98SSadaf Ebrahimi# Ciphersuites usable only with Mbed TLS and OpenSSL 356*62c56f98SSadaf Ebrahimi# A list of ciphersuites in the standard naming convention is appended 357*62c56f98SSadaf Ebrahimi# to the list of Mbed TLS ciphersuites $M_CIPHERS and 358*62c56f98SSadaf Ebrahimi# to the list of OpenSSL ciphersuites $O_CIPHERS respectively. 359*62c56f98SSadaf Ebrahimi# Based on client's naming convention, all ciphersuite names will be 360*62c56f98SSadaf Ebrahimi# translated into another naming format before sent to the client. 361*62c56f98SSadaf Ebrahimi# 362*62c56f98SSadaf Ebrahimi# NOTE: for some reason RSA-PSK doesn't work with OpenSSL, 363*62c56f98SSadaf Ebrahimi# so RSA-PSK ciphersuites need to go in other sections, see 364*62c56f98SSadaf Ebrahimi# https://github.com/Mbed-TLS/mbedtls/issues/1419 365*62c56f98SSadaf Ebrahimi# 366*62c56f98SSadaf Ebrahimi# ChachaPoly suites are here rather than in "common", as they were added in 367*62c56f98SSadaf Ebrahimi# GnuTLS in 3.5.0 and the CI only has 3.4.x so far. 368*62c56f98SSadaf Ebrahimiadd_openssl_ciphersuites() 369*62c56f98SSadaf Ebrahimi{ 370*62c56f98SSadaf Ebrahimi CIPHERS="" 371*62c56f98SSadaf Ebrahimi case $TYPE in 372*62c56f98SSadaf Ebrahimi 373*62c56f98SSadaf Ebrahimi "ECDSA") 374*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 375*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA \ 376*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 \ 377*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 \ 378*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA \ 379*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 \ 380*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 \ 381*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_NULL_SHA \ 382*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 \ 383*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 \ 384*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 \ 385*62c56f98SSadaf Ebrahimi " 386*62c56f98SSadaf Ebrahimi ;; 387*62c56f98SSadaf Ebrahimi 388*62c56f98SSadaf Ebrahimi "RSA") 389*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 390*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 \ 391*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 \ 392*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 \ 393*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 \ 394*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 \ 395*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 \ 396*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_ARIA_128_GCM_SHA256 \ 397*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_ARIA_256_GCM_SHA384 \ 398*62c56f98SSadaf Ebrahimi " 399*62c56f98SSadaf Ebrahimi ;; 400*62c56f98SSadaf Ebrahimi 401*62c56f98SSadaf Ebrahimi "PSK") 402*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 403*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256 \ 404*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384 \ 405*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 \ 406*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 \ 407*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_ARIA_128_GCM_SHA256 \ 408*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_ARIA_256_GCM_SHA384 \ 409*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 \ 410*62c56f98SSadaf Ebrahimi " 411*62c56f98SSadaf Ebrahimi ;; 412*62c56f98SSadaf Ebrahimi esac 413*62c56f98SSadaf Ebrahimi 414*62c56f98SSadaf Ebrahimi O_CIPHERS="$O_CIPHERS $CIPHERS" 415*62c56f98SSadaf Ebrahimi M_CIPHERS="$M_CIPHERS $CIPHERS" 416*62c56f98SSadaf Ebrahimi} 417*62c56f98SSadaf Ebrahimi 418*62c56f98SSadaf Ebrahimi# Ciphersuites usable only with Mbed TLS and GnuTLS 419*62c56f98SSadaf Ebrahimi# A list of ciphersuites in the standard naming convention is appended 420*62c56f98SSadaf Ebrahimi# to the list of Mbed TLS ciphersuites $M_CIPHERS and 421*62c56f98SSadaf Ebrahimi# to the list of GnuTLS ciphersuites $G_CIPHERS respectively. 422*62c56f98SSadaf Ebrahimi# Based on client's naming convention, all ciphersuite names will be 423*62c56f98SSadaf Ebrahimi# translated into another naming format before sent to the client. 424*62c56f98SSadaf Ebrahimiadd_gnutls_ciphersuites() 425*62c56f98SSadaf Ebrahimi{ 426*62c56f98SSadaf Ebrahimi CIPHERS="" 427*62c56f98SSadaf Ebrahimi case $TYPE in 428*62c56f98SSadaf Ebrahimi 429*62c56f98SSadaf Ebrahimi "ECDSA") 430*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 431*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_128_CCM \ 432*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 \ 433*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_256_CCM \ 434*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 \ 435*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 \ 436*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 \ 437*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 \ 438*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 \ 439*62c56f98SSadaf Ebrahimi " 440*62c56f98SSadaf Ebrahimi ;; 441*62c56f98SSadaf Ebrahimi 442*62c56f98SSadaf Ebrahimi "RSA") 443*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 444*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_128_CCM \ 445*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_128_CCM_8 \ 446*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_256_CCM \ 447*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_AES_256_CCM_8 \ 448*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 \ 449*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 \ 450*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 \ 451*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 \ 452*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 \ 453*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 \ 454*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 \ 455*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 \ 456*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_128_CCM \ 457*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_128_CCM_8 \ 458*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_256_CCM \ 459*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_AES_256_CCM_8 \ 460*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 \ 461*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 \ 462*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 \ 463*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 \ 464*62c56f98SSadaf Ebrahimi " 465*62c56f98SSadaf Ebrahimi ;; 466*62c56f98SSadaf Ebrahimi 467*62c56f98SSadaf Ebrahimi "PSK") 468*62c56f98SSadaf Ebrahimi CIPHERS="$CIPHERS \ 469*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_128_CBC_SHA \ 470*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 \ 471*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_128_CCM \ 472*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_128_CCM_8 \ 473*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 \ 474*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_256_CBC_SHA \ 475*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 \ 476*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_256_CCM \ 477*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_256_CCM_8 \ 478*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 \ 479*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 \ 480*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 \ 481*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 \ 482*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 \ 483*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_NULL_SHA256 \ 484*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_NULL_SHA384 \ 485*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA \ 486*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 \ 487*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA \ 488*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 \ 489*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 \ 490*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 \ 491*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_NULL_SHA256 \ 492*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_NULL_SHA384 \ 493*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_128_CBC_SHA256 \ 494*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_128_CCM \ 495*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_128_CCM_8 \ 496*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_128_GCM_SHA256 \ 497*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_256_CBC_SHA384 \ 498*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_256_CCM \ 499*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_256_CCM_8 \ 500*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_AES_256_GCM_SHA384 \ 501*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 \ 502*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 \ 503*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 \ 504*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 \ 505*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_NULL_SHA256 \ 506*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_NULL_SHA384 \ 507*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_AES_128_CBC_SHA \ 508*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 \ 509*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 \ 510*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_AES_256_CBC_SHA \ 511*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 \ 512*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 \ 513*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 \ 514*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 \ 515*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 \ 516*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 \ 517*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_NULL_SHA256 \ 518*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_NULL_SHA384 \ 519*62c56f98SSadaf Ebrahimi " 520*62c56f98SSadaf Ebrahimi ;; 521*62c56f98SSadaf Ebrahimi esac 522*62c56f98SSadaf Ebrahimi 523*62c56f98SSadaf Ebrahimi G_CIPHERS="$G_CIPHERS $CIPHERS" 524*62c56f98SSadaf Ebrahimi M_CIPHERS="$M_CIPHERS $CIPHERS" 525*62c56f98SSadaf Ebrahimi} 526*62c56f98SSadaf Ebrahimi 527*62c56f98SSadaf Ebrahimi# Ciphersuites usable only with Mbed TLS (not currently supported by another 528*62c56f98SSadaf Ebrahimi# peer usable in this script). This provides only very rudimentaty testing, as 529*62c56f98SSadaf Ebrahimi# this is not interop testing, but it's better than nothing. 530*62c56f98SSadaf Ebrahimiadd_mbedtls_ciphersuites() 531*62c56f98SSadaf Ebrahimi{ 532*62c56f98SSadaf Ebrahimi case $TYPE in 533*62c56f98SSadaf Ebrahimi 534*62c56f98SSadaf Ebrahimi "ECDSA") 535*62c56f98SSadaf Ebrahimi M_CIPHERS="$M_CIPHERS \ 536*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256 \ 537*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 \ 538*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384 \ 539*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 \ 540*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 \ 541*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 \ 542*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 \ 543*62c56f98SSadaf Ebrahimi TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 \ 544*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256 \ 545*62c56f98SSadaf Ebrahimi TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384 \ 546*62c56f98SSadaf Ebrahimi " 547*62c56f98SSadaf Ebrahimi ;; 548*62c56f98SSadaf Ebrahimi 549*62c56f98SSadaf Ebrahimi "RSA") 550*62c56f98SSadaf Ebrahimi M_CIPHERS="$M_CIPHERS \ 551*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256 \ 552*62c56f98SSadaf Ebrahimi TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384 \ 553*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256 \ 554*62c56f98SSadaf Ebrahimi TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384 \ 555*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_ARIA_128_CBC_SHA256 \ 556*62c56f98SSadaf Ebrahimi TLS_RSA_WITH_ARIA_256_CBC_SHA384 \ 557*62c56f98SSadaf Ebrahimi " 558*62c56f98SSadaf Ebrahimi ;; 559*62c56f98SSadaf Ebrahimi 560*62c56f98SSadaf Ebrahimi "PSK") 561*62c56f98SSadaf Ebrahimi # *PSK_NULL_SHA suites supported by GnuTLS 3.3.5 but not 3.2.15 562*62c56f98SSadaf Ebrahimi M_CIPHERS="$M_CIPHERS \ 563*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256 \ 564*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384 \ 565*62c56f98SSadaf Ebrahimi TLS_DHE_PSK_WITH_NULL_SHA \ 566*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256 \ 567*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384 \ 568*62c56f98SSadaf Ebrahimi TLS_ECDHE_PSK_WITH_NULL_SHA \ 569*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_ARIA_128_CBC_SHA256 \ 570*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_ARIA_256_CBC_SHA384 \ 571*62c56f98SSadaf Ebrahimi TLS_PSK_WITH_NULL_SHA \ 572*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256 \ 573*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256 \ 574*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384 \ 575*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384 \ 576*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 \ 577*62c56f98SSadaf Ebrahimi TLS_RSA_PSK_WITH_NULL_SHA \ 578*62c56f98SSadaf Ebrahimi " 579*62c56f98SSadaf Ebrahimi ;; 580*62c56f98SSadaf Ebrahimi esac 581*62c56f98SSadaf Ebrahimi} 582*62c56f98SSadaf Ebrahimi 583*62c56f98SSadaf Ebrahimi# o_check_ciphersuite STANDARD_CIPHER_SUITE 584*62c56f98SSadaf Ebrahimio_check_ciphersuite() 585*62c56f98SSadaf Ebrahimi{ 586*62c56f98SSadaf Ebrahimi if [ "${O_SUPPORT_ECDH}" = "NO" ]; then 587*62c56f98SSadaf Ebrahimi case "$1" in 588*62c56f98SSadaf Ebrahimi *ECDH_*) SKIP_NEXT="YES" 589*62c56f98SSadaf Ebrahimi esac 590*62c56f98SSadaf Ebrahimi fi 591*62c56f98SSadaf Ebrahimi} 592*62c56f98SSadaf Ebrahimi 593*62c56f98SSadaf Ebrahimisetup_arguments() 594*62c56f98SSadaf Ebrahimi{ 595*62c56f98SSadaf Ebrahimi O_MODE="" 596*62c56f98SSadaf Ebrahimi G_MODE="" 597*62c56f98SSadaf Ebrahimi case "$MODE" in 598*62c56f98SSadaf Ebrahimi "tls12") 599*62c56f98SSadaf Ebrahimi O_MODE="tls1_2" 600*62c56f98SSadaf Ebrahimi G_PRIO_MODE="+VERS-TLS1.2" 601*62c56f98SSadaf Ebrahimi ;; 602*62c56f98SSadaf Ebrahimi "dtls12") 603*62c56f98SSadaf Ebrahimi O_MODE="dtls1_2" 604*62c56f98SSadaf Ebrahimi G_PRIO_MODE="+VERS-DTLS1.2" 605*62c56f98SSadaf Ebrahimi G_MODE="-u" 606*62c56f98SSadaf Ebrahimi ;; 607*62c56f98SSadaf Ebrahimi *) 608*62c56f98SSadaf Ebrahimi echo "error: invalid mode: $MODE" >&2 609*62c56f98SSadaf Ebrahimi exit 1; 610*62c56f98SSadaf Ebrahimi esac 611*62c56f98SSadaf Ebrahimi 612*62c56f98SSadaf Ebrahimi # GnuTLS < 3.4 will choke if we try to allow CCM-8 613*62c56f98SSadaf Ebrahimi if [ -z "${GNUTLS_MINOR_LT_FOUR-}" ]; then 614*62c56f98SSadaf Ebrahimi G_PRIO_CCM="+AES-256-CCM-8:+AES-128-CCM-8:" 615*62c56f98SSadaf Ebrahimi else 616*62c56f98SSadaf Ebrahimi G_PRIO_CCM="" 617*62c56f98SSadaf Ebrahimi fi 618*62c56f98SSadaf Ebrahimi 619*62c56f98SSadaf Ebrahimi M_SERVER_ARGS="server_port=$PORT server_addr=0.0.0.0 force_version=$MODE" 620*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="-accept $PORT -cipher NULL,ALL -$O_MODE" 621*62c56f98SSadaf Ebrahimi G_SERVER_ARGS="-p $PORT --http $G_MODE" 622*62c56f98SSadaf Ebrahimi G_SERVER_PRIO="NORMAL:${G_PRIO_CCM}+NULL:+MD5:+PSK:+DHE-PSK:+ECDHE-PSK:+SHA256:+SHA384:+RSA-PSK:-VERS-TLS-ALL:$G_PRIO_MODE" 623*62c56f98SSadaf Ebrahimi 624*62c56f98SSadaf Ebrahimi # The default prime for `openssl s_server` depends on the version: 625*62c56f98SSadaf Ebrahimi # * OpenSSL <= 1.0.2a: 512-bit 626*62c56f98SSadaf Ebrahimi # * OpenSSL 1.0.2b to 1.1.1b: 1024-bit 627*62c56f98SSadaf Ebrahimi # * OpenSSL >= 1.1.1c: 2048-bit 628*62c56f98SSadaf Ebrahimi # Mbed TLS wants >=1024, so force that for older versions. Don't force 629*62c56f98SSadaf Ebrahimi # it for newer versions, which reject a 1024-bit prime. Indifferently 630*62c56f98SSadaf Ebrahimi # force it or not for intermediate versions. 631*62c56f98SSadaf Ebrahimi case $($OPENSSL version) in 632*62c56f98SSadaf Ebrahimi "OpenSSL 1.0"*) 633*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="$O_SERVER_ARGS -dhparam data_files/dhparams.pem" 634*62c56f98SSadaf Ebrahimi ;; 635*62c56f98SSadaf Ebrahimi esac 636*62c56f98SSadaf Ebrahimi 637*62c56f98SSadaf Ebrahimi # with OpenSSL 1.0.1h, -www, -WWW and -HTTP break DTLS handshakes 638*62c56f98SSadaf Ebrahimi if is_dtls "$MODE"; then 639*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="$O_SERVER_ARGS" 640*62c56f98SSadaf Ebrahimi else 641*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="$O_SERVER_ARGS -www" 642*62c56f98SSadaf Ebrahimi fi 643*62c56f98SSadaf Ebrahimi 644*62c56f98SSadaf Ebrahimi M_CLIENT_ARGS="server_port=$PORT server_addr=127.0.0.1 force_version=$MODE" 645*62c56f98SSadaf Ebrahimi O_CLIENT_ARGS="-connect localhost:$PORT -$O_MODE" 646*62c56f98SSadaf Ebrahimi G_CLIENT_ARGS="-p $PORT --debug 3 $G_MODE" 647*62c56f98SSadaf Ebrahimi 648*62c56f98SSadaf Ebrahimi # Newer versions of OpenSSL have a syntax to enable all "ciphers", even 649*62c56f98SSadaf Ebrahimi # low-security ones. This covers not just cipher suites but also protocol 650*62c56f98SSadaf Ebrahimi # versions. It is necessary, for example, to use (D)TLS 1.0/1.1 on 651*62c56f98SSadaf Ebrahimi # OpenSSL 1.1.1f from Ubuntu 20.04. The syntax was only introduced in 652*62c56f98SSadaf Ebrahimi # OpenSSL 1.1.0 (21e0c1d23afff48601eb93135defddae51f7e2e3) and I can't find 653*62c56f98SSadaf Ebrahimi # a way to discover it from -help, so check the openssl version. 654*62c56f98SSadaf Ebrahimi case $($OPENSSL version) in 655*62c56f98SSadaf Ebrahimi "OpenSSL 0"*|"OpenSSL 1.0"*) :;; 656*62c56f98SSadaf Ebrahimi *) 657*62c56f98SSadaf Ebrahimi O_CLIENT_ARGS="$O_CLIENT_ARGS -cipher ALL@SECLEVEL=0" 658*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="$O_SERVER_ARGS -cipher ALL@SECLEVEL=0" 659*62c56f98SSadaf Ebrahimi ;; 660*62c56f98SSadaf Ebrahimi esac 661*62c56f98SSadaf Ebrahimi 662*62c56f98SSadaf Ebrahimi case $($OPENSSL ciphers ALL) in 663*62c56f98SSadaf Ebrahimi *ECDH-ECDSA*|*ECDH-RSA*) O_SUPPORT_ECDH="YES";; 664*62c56f98SSadaf Ebrahimi *) O_SUPPORT_ECDH="NO";; 665*62c56f98SSadaf Ebrahimi esac 666*62c56f98SSadaf Ebrahimi 667*62c56f98SSadaf Ebrahimi if [ "X$VERIFY" = "XYES" ]; 668*62c56f98SSadaf Ebrahimi then 669*62c56f98SSadaf Ebrahimi M_SERVER_ARGS="$M_SERVER_ARGS ca_file=data_files/test-ca_cat12.crt auth_mode=required" 670*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="$O_SERVER_ARGS -CAfile data_files/test-ca_cat12.crt -Verify 10" 671*62c56f98SSadaf Ebrahimi G_SERVER_ARGS="$G_SERVER_ARGS --x509cafile data_files/test-ca_cat12.crt --require-client-cert" 672*62c56f98SSadaf Ebrahimi 673*62c56f98SSadaf Ebrahimi M_CLIENT_ARGS="$M_CLIENT_ARGS ca_file=data_files/test-ca_cat12.crt auth_mode=required" 674*62c56f98SSadaf Ebrahimi O_CLIENT_ARGS="$O_CLIENT_ARGS -CAfile data_files/test-ca_cat12.crt -verify 10" 675*62c56f98SSadaf Ebrahimi G_CLIENT_ARGS="$G_CLIENT_ARGS --x509cafile data_files/test-ca_cat12.crt" 676*62c56f98SSadaf Ebrahimi else 677*62c56f98SSadaf Ebrahimi # don't request a client cert at all 678*62c56f98SSadaf Ebrahimi M_SERVER_ARGS="$M_SERVER_ARGS ca_file=none auth_mode=none" 679*62c56f98SSadaf Ebrahimi G_SERVER_ARGS="$G_SERVER_ARGS --disable-client-cert" 680*62c56f98SSadaf Ebrahimi 681*62c56f98SSadaf Ebrahimi M_CLIENT_ARGS="$M_CLIENT_ARGS ca_file=none auth_mode=none" 682*62c56f98SSadaf Ebrahimi O_CLIENT_ARGS="$O_CLIENT_ARGS" 683*62c56f98SSadaf Ebrahimi G_CLIENT_ARGS="$G_CLIENT_ARGS --insecure" 684*62c56f98SSadaf Ebrahimi fi 685*62c56f98SSadaf Ebrahimi 686*62c56f98SSadaf Ebrahimi case $TYPE in 687*62c56f98SSadaf Ebrahimi "ECDSA") 688*62c56f98SSadaf Ebrahimi M_SERVER_ARGS="$M_SERVER_ARGS crt_file=data_files/server5.crt key_file=data_files/server5.key" 689*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="$O_SERVER_ARGS -cert data_files/server5.crt -key data_files/server5.key" 690*62c56f98SSadaf Ebrahimi G_SERVER_ARGS="$G_SERVER_ARGS --x509certfile data_files/server5.crt --x509keyfile data_files/server5.key" 691*62c56f98SSadaf Ebrahimi 692*62c56f98SSadaf Ebrahimi if [ "X$VERIFY" = "XYES" ]; then 693*62c56f98SSadaf Ebrahimi M_CLIENT_ARGS="$M_CLIENT_ARGS crt_file=data_files/server6.crt key_file=data_files/server6.key" 694*62c56f98SSadaf Ebrahimi O_CLIENT_ARGS="$O_CLIENT_ARGS -cert data_files/server6.crt -key data_files/server6.key" 695*62c56f98SSadaf Ebrahimi G_CLIENT_ARGS="$G_CLIENT_ARGS --x509certfile data_files/server6.crt --x509keyfile data_files/server6.key" 696*62c56f98SSadaf Ebrahimi else 697*62c56f98SSadaf Ebrahimi M_CLIENT_ARGS="$M_CLIENT_ARGS crt_file=none key_file=none" 698*62c56f98SSadaf Ebrahimi fi 699*62c56f98SSadaf Ebrahimi ;; 700*62c56f98SSadaf Ebrahimi 701*62c56f98SSadaf Ebrahimi "RSA") 702*62c56f98SSadaf Ebrahimi M_SERVER_ARGS="$M_SERVER_ARGS crt_file=data_files/server2-sha256.crt key_file=data_files/server2.key" 703*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="$O_SERVER_ARGS -cert data_files/server2-sha256.crt -key data_files/server2.key" 704*62c56f98SSadaf Ebrahimi G_SERVER_ARGS="$G_SERVER_ARGS --x509certfile data_files/server2-sha256.crt --x509keyfile data_files/server2.key" 705*62c56f98SSadaf Ebrahimi 706*62c56f98SSadaf Ebrahimi if [ "X$VERIFY" = "XYES" ]; then 707*62c56f98SSadaf Ebrahimi M_CLIENT_ARGS="$M_CLIENT_ARGS crt_file=data_files/cert_sha256.crt key_file=data_files/server1.key" 708*62c56f98SSadaf Ebrahimi O_CLIENT_ARGS="$O_CLIENT_ARGS -cert data_files/cert_sha256.crt -key data_files/server1.key" 709*62c56f98SSadaf Ebrahimi G_CLIENT_ARGS="$G_CLIENT_ARGS --x509certfile data_files/cert_sha256.crt --x509keyfile data_files/server1.key" 710*62c56f98SSadaf Ebrahimi else 711*62c56f98SSadaf Ebrahimi M_CLIENT_ARGS="$M_CLIENT_ARGS crt_file=none key_file=none" 712*62c56f98SSadaf Ebrahimi fi 713*62c56f98SSadaf Ebrahimi ;; 714*62c56f98SSadaf Ebrahimi 715*62c56f98SSadaf Ebrahimi "PSK") 716*62c56f98SSadaf Ebrahimi # give RSA-PSK-capable server a RSA cert 717*62c56f98SSadaf Ebrahimi # (should be a separate type, but harder to close with openssl) 718*62c56f98SSadaf Ebrahimi M_SERVER_ARGS="$M_SERVER_ARGS psk=6162636465666768696a6b6c6d6e6f70 ca_file=none crt_file=data_files/server2-sha256.crt key_file=data_files/server2.key" 719*62c56f98SSadaf Ebrahimi O_SERVER_ARGS="$O_SERVER_ARGS -psk 6162636465666768696a6b6c6d6e6f70 -nocert" 720*62c56f98SSadaf Ebrahimi G_SERVER_ARGS="$G_SERVER_ARGS --x509certfile data_files/server2-sha256.crt --x509keyfile data_files/server2.key --pskpasswd data_files/passwd.psk" 721*62c56f98SSadaf Ebrahimi 722*62c56f98SSadaf Ebrahimi M_CLIENT_ARGS="$M_CLIENT_ARGS psk=6162636465666768696a6b6c6d6e6f70 crt_file=none key_file=none" 723*62c56f98SSadaf Ebrahimi O_CLIENT_ARGS="$O_CLIENT_ARGS -psk 6162636465666768696a6b6c6d6e6f70" 724*62c56f98SSadaf Ebrahimi G_CLIENT_ARGS="$G_CLIENT_ARGS --pskusername Client_identity --pskkey=6162636465666768696a6b6c6d6e6f70" 725*62c56f98SSadaf Ebrahimi ;; 726*62c56f98SSadaf Ebrahimi esac 727*62c56f98SSadaf Ebrahimi} 728*62c56f98SSadaf Ebrahimi 729*62c56f98SSadaf Ebrahimi# is_mbedtls <cmd_line> 730*62c56f98SSadaf Ebrahimiis_mbedtls() { 731*62c56f98SSadaf Ebrahimi case $1 in 732*62c56f98SSadaf Ebrahimi *ssl_client2*) true;; 733*62c56f98SSadaf Ebrahimi *ssl_server2*) true;; 734*62c56f98SSadaf Ebrahimi *) false;; 735*62c56f98SSadaf Ebrahimi esac 736*62c56f98SSadaf Ebrahimi} 737*62c56f98SSadaf Ebrahimi 738*62c56f98SSadaf Ebrahimi# has_mem_err <log_file_name> 739*62c56f98SSadaf Ebrahimihas_mem_err() { 740*62c56f98SSadaf Ebrahimi if ( grep -F 'All heap blocks were freed -- no leaks are possible' "$1" && 741*62c56f98SSadaf Ebrahimi grep -F 'ERROR SUMMARY: 0 errors from 0 contexts' "$1" ) > /dev/null 742*62c56f98SSadaf Ebrahimi then 743*62c56f98SSadaf Ebrahimi return 1 # false: does not have errors 744*62c56f98SSadaf Ebrahimi else 745*62c56f98SSadaf Ebrahimi return 0 # true: has errors 746*62c56f98SSadaf Ebrahimi fi 747*62c56f98SSadaf Ebrahimi} 748*62c56f98SSadaf Ebrahimi 749*62c56f98SSadaf Ebrahimi# Wait for process $2 to be listening on port $1 750*62c56f98SSadaf Ebrahimiif type lsof >/dev/null 2>/dev/null; then 751*62c56f98SSadaf Ebrahimi wait_server_start() { 752*62c56f98SSadaf Ebrahimi START_TIME=$(date +%s) 753*62c56f98SSadaf Ebrahimi if is_dtls "$MODE"; then 754*62c56f98SSadaf Ebrahimi proto=UDP 755*62c56f98SSadaf Ebrahimi else 756*62c56f98SSadaf Ebrahimi proto=TCP 757*62c56f98SSadaf Ebrahimi fi 758*62c56f98SSadaf Ebrahimi while ! lsof -a -n -b -i "$proto:$1" -p "$2" >/dev/null 2>/dev/null; do 759*62c56f98SSadaf Ebrahimi if [ $(( $(date +%s) - $START_TIME )) -gt $DOG_DELAY ]; then 760*62c56f98SSadaf Ebrahimi echo "SERVERSTART TIMEOUT" 761*62c56f98SSadaf Ebrahimi echo "SERVERSTART TIMEOUT" >> $SRV_OUT 762*62c56f98SSadaf Ebrahimi break 763*62c56f98SSadaf Ebrahimi fi 764*62c56f98SSadaf Ebrahimi # Linux and *BSD support decimal arguments to sleep. On other 765*62c56f98SSadaf Ebrahimi # OSes this may be a tight loop. 766*62c56f98SSadaf Ebrahimi sleep 0.1 2>/dev/null || true 767*62c56f98SSadaf Ebrahimi done 768*62c56f98SSadaf Ebrahimi } 769*62c56f98SSadaf Ebrahimielse 770*62c56f98SSadaf Ebrahimi echo "Warning: lsof not available, wait_server_start = sleep" 771*62c56f98SSadaf Ebrahimi wait_server_start() { 772*62c56f98SSadaf Ebrahimi sleep 2 773*62c56f98SSadaf Ebrahimi } 774*62c56f98SSadaf Ebrahimifi 775*62c56f98SSadaf Ebrahimi 776*62c56f98SSadaf Ebrahimi 777*62c56f98SSadaf Ebrahimi# start_server <name> 778*62c56f98SSadaf Ebrahimi# also saves name and command 779*62c56f98SSadaf Ebrahimistart_server() { 780*62c56f98SSadaf Ebrahimi case $1 in 781*62c56f98SSadaf Ebrahimi [Oo]pen*) 782*62c56f98SSadaf Ebrahimi SERVER_CMD="$OPENSSL s_server $O_SERVER_ARGS" 783*62c56f98SSadaf Ebrahimi ;; 784*62c56f98SSadaf Ebrahimi [Gg]nu*) 785*62c56f98SSadaf Ebrahimi SERVER_CMD="$GNUTLS_SERV $G_SERVER_ARGS --priority $G_SERVER_PRIO" 786*62c56f98SSadaf Ebrahimi ;; 787*62c56f98SSadaf Ebrahimi mbed*) 788*62c56f98SSadaf Ebrahimi SERVER_CMD="$M_SRV $M_SERVER_ARGS" 789*62c56f98SSadaf Ebrahimi if [ "$MEMCHECK" -gt 0 ]; then 790*62c56f98SSadaf Ebrahimi SERVER_CMD="valgrind --leak-check=full $SERVER_CMD" 791*62c56f98SSadaf Ebrahimi fi 792*62c56f98SSadaf Ebrahimi ;; 793*62c56f98SSadaf Ebrahimi *) 794*62c56f98SSadaf Ebrahimi echo "error: invalid server name: $1" >&2 795*62c56f98SSadaf Ebrahimi exit 1 796*62c56f98SSadaf Ebrahimi ;; 797*62c56f98SSadaf Ebrahimi esac 798*62c56f98SSadaf Ebrahimi SERVER_NAME=$1 799*62c56f98SSadaf Ebrahimi 800*62c56f98SSadaf Ebrahimi log "$SERVER_CMD" 801*62c56f98SSadaf Ebrahimi echo "$SERVER_CMD" > $SRV_OUT 802*62c56f98SSadaf Ebrahimi # for servers without -www or equivalent 803*62c56f98SSadaf Ebrahimi while :; do echo bla; sleep 1; done | $SERVER_CMD >> $SRV_OUT 2>&1 & 804*62c56f98SSadaf Ebrahimi SRV_PID=$! 805*62c56f98SSadaf Ebrahimi 806*62c56f98SSadaf Ebrahimi wait_server_start "$PORT" "$SRV_PID" 807*62c56f98SSadaf Ebrahimi} 808*62c56f98SSadaf Ebrahimi 809*62c56f98SSadaf Ebrahimi# terminate the running server 810*62c56f98SSadaf Ebrahimistop_server() { 811*62c56f98SSadaf Ebrahimi # For Ubuntu 22.04, `Terminated` message is outputed by wait command. 812*62c56f98SSadaf Ebrahimi # To remove it from stdout, redirect stdout/stderr to SRV_OUT 813*62c56f98SSadaf Ebrahimi kill $SRV_PID >/dev/null 2>&1 814*62c56f98SSadaf Ebrahimi wait $SRV_PID >> $SRV_OUT 2>&1 815*62c56f98SSadaf Ebrahimi 816*62c56f98SSadaf Ebrahimi if [ "$MEMCHECK" -gt 0 ]; then 817*62c56f98SSadaf Ebrahimi if is_mbedtls "$SERVER_CMD" && has_mem_err $SRV_OUT; then 818*62c56f98SSadaf Ebrahimi echo " ! Server had memory errors" 819*62c56f98SSadaf Ebrahimi SRVMEM=$(( $SRVMEM + 1 )) 820*62c56f98SSadaf Ebrahimi return 821*62c56f98SSadaf Ebrahimi fi 822*62c56f98SSadaf Ebrahimi fi 823*62c56f98SSadaf Ebrahimi 824*62c56f98SSadaf Ebrahimi rm -f $SRV_OUT 825*62c56f98SSadaf Ebrahimi} 826*62c56f98SSadaf Ebrahimi 827*62c56f98SSadaf Ebrahimi# kill the running server (used when killed by signal) 828*62c56f98SSadaf Ebrahimicleanup() { 829*62c56f98SSadaf Ebrahimi rm -f $SRV_OUT $CLI_OUT 830*62c56f98SSadaf Ebrahimi kill $SRV_PID >/dev/null 2>&1 831*62c56f98SSadaf Ebrahimi kill $WATCHDOG_PID >/dev/null 2>&1 832*62c56f98SSadaf Ebrahimi exit 1 833*62c56f98SSadaf Ebrahimi} 834*62c56f98SSadaf Ebrahimi 835*62c56f98SSadaf Ebrahimi# wait for client to terminate and set EXIT 836*62c56f98SSadaf Ebrahimi# must be called right after starting the client 837*62c56f98SSadaf Ebrahimiwait_client_done() { 838*62c56f98SSadaf Ebrahimi CLI_PID=$! 839*62c56f98SSadaf Ebrahimi 840*62c56f98SSadaf Ebrahimi ( sleep "$DOG_DELAY"; echo "TIMEOUT" >> $CLI_OUT; kill $CLI_PID ) & 841*62c56f98SSadaf Ebrahimi WATCHDOG_PID=$! 842*62c56f98SSadaf Ebrahimi 843*62c56f98SSadaf Ebrahimi # For Ubuntu 22.04, `Terminated` message is outputed by wait command. 844*62c56f98SSadaf Ebrahimi # To remove it from stdout, redirect stdout/stderr to CLI_OUT 845*62c56f98SSadaf Ebrahimi wait $CLI_PID >> $CLI_OUT 2>&1 846*62c56f98SSadaf Ebrahimi EXIT=$? 847*62c56f98SSadaf Ebrahimi 848*62c56f98SSadaf Ebrahimi kill $WATCHDOG_PID >/dev/null 2>&1 849*62c56f98SSadaf Ebrahimi wait $WATCHDOG_PID >> $CLI_OUT 2>&1 850*62c56f98SSadaf Ebrahimi 851*62c56f98SSadaf Ebrahimi echo "EXIT: $EXIT" >> $CLI_OUT 852*62c56f98SSadaf Ebrahimi} 853*62c56f98SSadaf Ebrahimi 854*62c56f98SSadaf Ebrahimi# uniform_title <CLIENT> <SERVER> <STANDARD_CIPHER_SUITE> 855*62c56f98SSadaf Ebrahimi# $TITLE is considered as test case description for both --list-test-case and 856*62c56f98SSadaf Ebrahimi# MBEDTLS_TEST_OUTCOME_FILE. This function aims to control the format of 857*62c56f98SSadaf Ebrahimi# each test case description. 858*62c56f98SSadaf Ebrahimiuniform_title() { 859*62c56f98SSadaf Ebrahimi TITLE="$1->$2 $MODE,$VERIF $3" 860*62c56f98SSadaf Ebrahimi} 861*62c56f98SSadaf Ebrahimi 862*62c56f98SSadaf Ebrahimi# record_outcome <outcome> [<failure-reason>] 863*62c56f98SSadaf Ebrahimirecord_outcome() { 864*62c56f98SSadaf Ebrahimi echo "$1" 865*62c56f98SSadaf Ebrahimi if [ -n "$MBEDTLS_TEST_OUTCOME_FILE" ]; then 866*62c56f98SSadaf Ebrahimi # The test outcome file has the format (in single line): 867*62c56f98SSadaf Ebrahimi # platform;configuration; 868*62c56f98SSadaf Ebrahimi # test suite name;test case description; 869*62c56f98SSadaf Ebrahimi # PASS/FAIL/SKIP;[failure cause] 870*62c56f98SSadaf Ebrahimi printf '%s;%s;%s;%s;%s;%s\n' \ 871*62c56f98SSadaf Ebrahimi "$MBEDTLS_TEST_PLATFORM" "$MBEDTLS_TEST_CONFIGURATION" \ 872*62c56f98SSadaf Ebrahimi "compat" "$TITLE" \ 873*62c56f98SSadaf Ebrahimi "$1" "${2-}" \ 874*62c56f98SSadaf Ebrahimi >> "$MBEDTLS_TEST_OUTCOME_FILE" 875*62c56f98SSadaf Ebrahimi fi 876*62c56f98SSadaf Ebrahimi} 877*62c56f98SSadaf Ebrahimi 878*62c56f98SSadaf Ebrahimi# display additional information if test case fails 879*62c56f98SSadaf Ebrahimireport_fail() { 880*62c56f98SSadaf Ebrahimi FAIL_PROMPT="outputs saved to c-srv-${TESTS}.log, c-cli-${TESTS}.log" 881*62c56f98SSadaf Ebrahimi record_outcome "FAIL" "$FAIL_PROMPT" 882*62c56f98SSadaf Ebrahimi cp $SRV_OUT c-srv-${TESTS}.log 883*62c56f98SSadaf Ebrahimi cp $CLI_OUT c-cli-${TESTS}.log 884*62c56f98SSadaf Ebrahimi echo " ! $FAIL_PROMPT" 885*62c56f98SSadaf Ebrahimi 886*62c56f98SSadaf Ebrahimi if [ "${LOG_FAILURE_ON_STDOUT:-0}" != 0 ]; then 887*62c56f98SSadaf Ebrahimi echo " ! server output:" 888*62c56f98SSadaf Ebrahimi cat c-srv-${TESTS}.log 889*62c56f98SSadaf Ebrahimi echo " ! ===================================================" 890*62c56f98SSadaf Ebrahimi echo " ! client output:" 891*62c56f98SSadaf Ebrahimi cat c-cli-${TESTS}.log 892*62c56f98SSadaf Ebrahimi fi 893*62c56f98SSadaf Ebrahimi} 894*62c56f98SSadaf Ebrahimi 895*62c56f98SSadaf Ebrahimi# run_client PROGRAM_NAME STANDARD_CIPHER_SUITE PROGRAM_CIPHER_SUITE 896*62c56f98SSadaf Ebrahimirun_client() { 897*62c56f98SSadaf Ebrahimi # announce what we're going to do 898*62c56f98SSadaf Ebrahimi TESTS=$(( $TESTS + 1 )) 899*62c56f98SSadaf Ebrahimi uniform_title "${1%"${1#?}"}" "${SERVER_NAME%"${SERVER_NAME#?}"}" $2 900*62c56f98SSadaf Ebrahimi DOTS72="........................................................................" 901*62c56f98SSadaf Ebrahimi printf "%s %.*s " "$TITLE" "$((71 - ${#TITLE}))" "$DOTS72" 902*62c56f98SSadaf Ebrahimi 903*62c56f98SSadaf Ebrahimi # should we skip? 904*62c56f98SSadaf Ebrahimi if [ "X$SKIP_NEXT" = "XYES" ]; then 905*62c56f98SSadaf Ebrahimi SKIP_NEXT="NO" 906*62c56f98SSadaf Ebrahimi record_outcome "SKIP" 907*62c56f98SSadaf Ebrahimi SKIPPED=$(( $SKIPPED + 1 )) 908*62c56f98SSadaf Ebrahimi return 909*62c56f98SSadaf Ebrahimi fi 910*62c56f98SSadaf Ebrahimi 911*62c56f98SSadaf Ebrahimi # run the command and interpret result 912*62c56f98SSadaf Ebrahimi case $1 in 913*62c56f98SSadaf Ebrahimi [Oo]pen*) 914*62c56f98SSadaf Ebrahimi CLIENT_CMD="$OPENSSL s_client $O_CLIENT_ARGS -cipher $3" 915*62c56f98SSadaf Ebrahimi log "$CLIENT_CMD" 916*62c56f98SSadaf Ebrahimi echo "$CLIENT_CMD" > $CLI_OUT 917*62c56f98SSadaf Ebrahimi printf 'GET HTTP/1.0\r\n\r\n' | $CLIENT_CMD >> $CLI_OUT 2>&1 & 918*62c56f98SSadaf Ebrahimi wait_client_done 919*62c56f98SSadaf Ebrahimi 920*62c56f98SSadaf Ebrahimi if [ $EXIT -eq 0 ]; then 921*62c56f98SSadaf Ebrahimi RESULT=0 922*62c56f98SSadaf Ebrahimi else 923*62c56f98SSadaf Ebrahimi # If it is NULL cipher ... 924*62c56f98SSadaf Ebrahimi if grep 'Cipher is (NONE)' $CLI_OUT >/dev/null; then 925*62c56f98SSadaf Ebrahimi RESULT=1 926*62c56f98SSadaf Ebrahimi else 927*62c56f98SSadaf Ebrahimi RESULT=2 928*62c56f98SSadaf Ebrahimi fi 929*62c56f98SSadaf Ebrahimi fi 930*62c56f98SSadaf Ebrahimi ;; 931*62c56f98SSadaf Ebrahimi 932*62c56f98SSadaf Ebrahimi [Gg]nu*) 933*62c56f98SSadaf Ebrahimi # need to force IPv4 with UDP, but keep localhost for auth 934*62c56f98SSadaf Ebrahimi if is_dtls "$MODE"; then 935*62c56f98SSadaf Ebrahimi G_HOST="127.0.0.1" 936*62c56f98SSadaf Ebrahimi else 937*62c56f98SSadaf Ebrahimi G_HOST="localhost" 938*62c56f98SSadaf Ebrahimi fi 939*62c56f98SSadaf Ebrahimi CLIENT_CMD="$GNUTLS_CLI $G_CLIENT_ARGS --priority $G_PRIO_MODE:$3 $G_HOST" 940*62c56f98SSadaf Ebrahimi log "$CLIENT_CMD" 941*62c56f98SSadaf Ebrahimi echo "$CLIENT_CMD" > $CLI_OUT 942*62c56f98SSadaf Ebrahimi printf 'GET HTTP/1.0\r\n\r\n' | $CLIENT_CMD >> $CLI_OUT 2>&1 & 943*62c56f98SSadaf Ebrahimi wait_client_done 944*62c56f98SSadaf Ebrahimi 945*62c56f98SSadaf Ebrahimi if [ $EXIT -eq 0 ]; then 946*62c56f98SSadaf Ebrahimi RESULT=0 947*62c56f98SSadaf Ebrahimi else 948*62c56f98SSadaf Ebrahimi RESULT=2 949*62c56f98SSadaf Ebrahimi # interpret early failure, with a handshake_failure alert 950*62c56f98SSadaf Ebrahimi # before the server hello, as "no ciphersuite in common" 951*62c56f98SSadaf Ebrahimi if grep -F 'Received alert [40]: Handshake failed' $CLI_OUT; then 952*62c56f98SSadaf Ebrahimi if grep -i 'SERVER HELLO .* was received' $CLI_OUT; then : 953*62c56f98SSadaf Ebrahimi else 954*62c56f98SSadaf Ebrahimi RESULT=1 955*62c56f98SSadaf Ebrahimi fi 956*62c56f98SSadaf Ebrahimi fi >/dev/null 957*62c56f98SSadaf Ebrahimi fi 958*62c56f98SSadaf Ebrahimi ;; 959*62c56f98SSadaf Ebrahimi 960*62c56f98SSadaf Ebrahimi mbed*) 961*62c56f98SSadaf Ebrahimi CLIENT_CMD="$M_CLI $M_CLIENT_ARGS force_ciphersuite=$3" 962*62c56f98SSadaf Ebrahimi if [ "$MEMCHECK" -gt 0 ]; then 963*62c56f98SSadaf Ebrahimi CLIENT_CMD="valgrind --leak-check=full $CLIENT_CMD" 964*62c56f98SSadaf Ebrahimi fi 965*62c56f98SSadaf Ebrahimi log "$CLIENT_CMD" 966*62c56f98SSadaf Ebrahimi echo "$CLIENT_CMD" > $CLI_OUT 967*62c56f98SSadaf Ebrahimi $CLIENT_CMD >> $CLI_OUT 2>&1 & 968*62c56f98SSadaf Ebrahimi wait_client_done 969*62c56f98SSadaf Ebrahimi 970*62c56f98SSadaf Ebrahimi case $EXIT in 971*62c56f98SSadaf Ebrahimi # Success 972*62c56f98SSadaf Ebrahimi "0") RESULT=0 ;; 973*62c56f98SSadaf Ebrahimi 974*62c56f98SSadaf Ebrahimi # Ciphersuite not supported 975*62c56f98SSadaf Ebrahimi "2") RESULT=1 ;; 976*62c56f98SSadaf Ebrahimi 977*62c56f98SSadaf Ebrahimi # Error 978*62c56f98SSadaf Ebrahimi *) RESULT=2 ;; 979*62c56f98SSadaf Ebrahimi esac 980*62c56f98SSadaf Ebrahimi 981*62c56f98SSadaf Ebrahimi if [ "$MEMCHECK" -gt 0 ]; then 982*62c56f98SSadaf Ebrahimi if is_mbedtls "$CLIENT_CMD" && has_mem_err $CLI_OUT; then 983*62c56f98SSadaf Ebrahimi RESULT=2 984*62c56f98SSadaf Ebrahimi fi 985*62c56f98SSadaf Ebrahimi fi 986*62c56f98SSadaf Ebrahimi 987*62c56f98SSadaf Ebrahimi ;; 988*62c56f98SSadaf Ebrahimi 989*62c56f98SSadaf Ebrahimi *) 990*62c56f98SSadaf Ebrahimi echo "error: invalid client name: $1" >&2 991*62c56f98SSadaf Ebrahimi exit 1 992*62c56f98SSadaf Ebrahimi ;; 993*62c56f98SSadaf Ebrahimi esac 994*62c56f98SSadaf Ebrahimi 995*62c56f98SSadaf Ebrahimi echo "EXIT: $EXIT" >> $CLI_OUT 996*62c56f98SSadaf Ebrahimi 997*62c56f98SSadaf Ebrahimi # report and count result 998*62c56f98SSadaf Ebrahimi case $RESULT in 999*62c56f98SSadaf Ebrahimi "0") 1000*62c56f98SSadaf Ebrahimi record_outcome "PASS" 1001*62c56f98SSadaf Ebrahimi ;; 1002*62c56f98SSadaf Ebrahimi "1") 1003*62c56f98SSadaf Ebrahimi record_outcome "SKIP" 1004*62c56f98SSadaf Ebrahimi SKIPPED=$(( $SKIPPED + 1 )) 1005*62c56f98SSadaf Ebrahimi ;; 1006*62c56f98SSadaf Ebrahimi "2") 1007*62c56f98SSadaf Ebrahimi report_fail 1008*62c56f98SSadaf Ebrahimi FAILED=$(( $FAILED + 1 )) 1009*62c56f98SSadaf Ebrahimi ;; 1010*62c56f98SSadaf Ebrahimi esac 1011*62c56f98SSadaf Ebrahimi 1012*62c56f98SSadaf Ebrahimi rm -f $CLI_OUT 1013*62c56f98SSadaf Ebrahimi} 1014*62c56f98SSadaf Ebrahimi 1015*62c56f98SSadaf Ebrahimi# 1016*62c56f98SSadaf Ebrahimi# MAIN 1017*62c56f98SSadaf Ebrahimi# 1018*62c56f98SSadaf Ebrahimi 1019*62c56f98SSadaf Ebrahimiget_options "$@" 1020*62c56f98SSadaf Ebrahimi 1021*62c56f98SSadaf Ebrahimi# Make the outcome file path relative to the original directory, not 1022*62c56f98SSadaf Ebrahimi# to .../tests 1023*62c56f98SSadaf Ebrahimicase "$MBEDTLS_TEST_OUTCOME_FILE" in 1024*62c56f98SSadaf Ebrahimi [!/]*) 1025*62c56f98SSadaf Ebrahimi MBEDTLS_TEST_OUTCOME_FILE="$ORIGINAL_PWD/$MBEDTLS_TEST_OUTCOME_FILE" 1026*62c56f98SSadaf Ebrahimi ;; 1027*62c56f98SSadaf Ebrahimiesac 1028*62c56f98SSadaf Ebrahimi 1029*62c56f98SSadaf Ebrahimi# sanity checks, avoid an avalanche of errors 1030*62c56f98SSadaf Ebrahimiif [ ! -x "$M_SRV" ]; then 1031*62c56f98SSadaf Ebrahimi echo "Command '$M_SRV' is not an executable file" >&2 1032*62c56f98SSadaf Ebrahimi exit 1 1033*62c56f98SSadaf Ebrahimifi 1034*62c56f98SSadaf Ebrahimiif [ ! -x "$M_CLI" ]; then 1035*62c56f98SSadaf Ebrahimi echo "Command '$M_CLI' is not an executable file" >&2 1036*62c56f98SSadaf Ebrahimi exit 1 1037*62c56f98SSadaf Ebrahimifi 1038*62c56f98SSadaf Ebrahimi 1039*62c56f98SSadaf Ebrahimiif echo "$PEERS" | grep -i openssl > /dev/null; then 1040*62c56f98SSadaf Ebrahimi if which "$OPENSSL" >/dev/null 2>&1; then :; else 1041*62c56f98SSadaf Ebrahimi echo "Command '$OPENSSL' not found" >&2 1042*62c56f98SSadaf Ebrahimi exit 1 1043*62c56f98SSadaf Ebrahimi fi 1044*62c56f98SSadaf Ebrahimifi 1045*62c56f98SSadaf Ebrahimi 1046*62c56f98SSadaf Ebrahimiif echo "$PEERS" | grep -i gnutls > /dev/null; then 1047*62c56f98SSadaf Ebrahimi for CMD in "$GNUTLS_CLI" "$GNUTLS_SERV"; do 1048*62c56f98SSadaf Ebrahimi if which "$CMD" >/dev/null 2>&1; then :; else 1049*62c56f98SSadaf Ebrahimi echo "Command '$CMD' not found" >&2 1050*62c56f98SSadaf Ebrahimi exit 1 1051*62c56f98SSadaf Ebrahimi fi 1052*62c56f98SSadaf Ebrahimi done 1053*62c56f98SSadaf Ebrahimifi 1054*62c56f98SSadaf Ebrahimi 1055*62c56f98SSadaf Ebrahimifor PEER in $PEERS; do 1056*62c56f98SSadaf Ebrahimi case "$PEER" in 1057*62c56f98SSadaf Ebrahimi mbed*|[Oo]pen*|[Gg]nu*) 1058*62c56f98SSadaf Ebrahimi ;; 1059*62c56f98SSadaf Ebrahimi *) 1060*62c56f98SSadaf Ebrahimi echo "Unknown peers: $PEER" >&2 1061*62c56f98SSadaf Ebrahimi exit 1 1062*62c56f98SSadaf Ebrahimi esac 1063*62c56f98SSadaf Ebrahimidone 1064*62c56f98SSadaf Ebrahimi 1065*62c56f98SSadaf Ebrahimi# Pick a "unique" port in the range 10000-19999. 1066*62c56f98SSadaf EbrahimiPORT="0000$$" 1067*62c56f98SSadaf EbrahimiPORT="1$(echo $PORT | tail -c 5)" 1068*62c56f98SSadaf Ebrahimi 1069*62c56f98SSadaf Ebrahimi# Also pick a unique name for intermediate files 1070*62c56f98SSadaf EbrahimiSRV_OUT="srv_out.$$" 1071*62c56f98SSadaf EbrahimiCLI_OUT="cli_out.$$" 1072*62c56f98SSadaf Ebrahimi 1073*62c56f98SSadaf Ebrahimi# client timeout delay: be more patient with valgrind 1074*62c56f98SSadaf Ebrahimiif [ "$MEMCHECK" -gt 0 ]; then 1075*62c56f98SSadaf Ebrahimi DOG_DELAY=30 1076*62c56f98SSadaf Ebrahimielse 1077*62c56f98SSadaf Ebrahimi DOG_DELAY=10 1078*62c56f98SSadaf Ebrahimifi 1079*62c56f98SSadaf Ebrahimi 1080*62c56f98SSadaf EbrahimiSKIP_NEXT="NO" 1081*62c56f98SSadaf Ebrahimi 1082*62c56f98SSadaf Ebrahimitrap cleanup INT TERM HUP 1083*62c56f98SSadaf Ebrahimi 1084*62c56f98SSadaf Ebrahimifor MODE in $MODES; do 1085*62c56f98SSadaf Ebrahimi for TYPE in $TYPES; do 1086*62c56f98SSadaf Ebrahimi 1087*62c56f98SSadaf Ebrahimi # PSK cipher suites do not allow client certificate verification. 1088*62c56f98SSadaf Ebrahimi # This means PSK test cases with VERIFY=YES should be replaced by 1089*62c56f98SSadaf Ebrahimi # VERIFY=NO or be ignored. SUB_VERIFIES variable is used to constrain 1090*62c56f98SSadaf Ebrahimi # verification option for PSK test cases. 1091*62c56f98SSadaf Ebrahimi SUB_VERIFIES=$VERIFIES 1092*62c56f98SSadaf Ebrahimi if [ "$TYPE" = "PSK" ]; then 1093*62c56f98SSadaf Ebrahimi SUB_VERIFIES="NO" 1094*62c56f98SSadaf Ebrahimi fi 1095*62c56f98SSadaf Ebrahimi 1096*62c56f98SSadaf Ebrahimi for VERIFY in $SUB_VERIFIES; do 1097*62c56f98SSadaf Ebrahimi VERIF=$(echo $VERIFY | tr '[:upper:]' '[:lower:]') 1098*62c56f98SSadaf Ebrahimi for PEER in $PEERS; do 1099*62c56f98SSadaf Ebrahimi 1100*62c56f98SSadaf Ebrahimi setup_arguments 1101*62c56f98SSadaf Ebrahimi 1102*62c56f98SSadaf Ebrahimi case "$PEER" in 1103*62c56f98SSadaf Ebrahimi 1104*62c56f98SSadaf Ebrahimi [Oo]pen*) 1105*62c56f98SSadaf Ebrahimi 1106*62c56f98SSadaf Ebrahimi if test "$OSSL_NO_DTLS" -gt 0 && is_dtls "$MODE"; then 1107*62c56f98SSadaf Ebrahimi continue; 1108*62c56f98SSadaf Ebrahimi fi 1109*62c56f98SSadaf Ebrahimi 1110*62c56f98SSadaf Ebrahimi # OpenSSL <1.0.2 doesn't support DTLS 1.2. Check if OpenSSL 1111*62c56f98SSadaf Ebrahimi # supports $O_MODE from the s_server help. (The s_client 1112*62c56f98SSadaf Ebrahimi # help isn't accurate as of 1.0.2g: it supports DTLS 1.2 1113*62c56f98SSadaf Ebrahimi # but doesn't list it. But the s_server help seems to be 1114*62c56f98SSadaf Ebrahimi # accurate.) 1115*62c56f98SSadaf Ebrahimi if ! $OPENSSL s_server -help 2>&1 | grep -q "^ *-$O_MODE "; then 1116*62c56f98SSadaf Ebrahimi continue; 1117*62c56f98SSadaf Ebrahimi fi 1118*62c56f98SSadaf Ebrahimi 1119*62c56f98SSadaf Ebrahimi reset_ciphersuites 1120*62c56f98SSadaf Ebrahimi add_common_ciphersuites 1121*62c56f98SSadaf Ebrahimi add_openssl_ciphersuites 1122*62c56f98SSadaf Ebrahimi filter_ciphersuites 1123*62c56f98SSadaf Ebrahimi 1124*62c56f98SSadaf Ebrahimi if [ "X" != "X$M_CIPHERS" ]; then 1125*62c56f98SSadaf Ebrahimi start_server "OpenSSL" 1126*62c56f98SSadaf Ebrahimi translate_ciphers m $M_CIPHERS 1127*62c56f98SSadaf Ebrahimi for i in $ciphers; do 1128*62c56f98SSadaf Ebrahimi o_check_ciphersuite "${i%%=*}" 1129*62c56f98SSadaf Ebrahimi run_client mbedTLS ${i%%=*} ${i#*=} 1130*62c56f98SSadaf Ebrahimi done 1131*62c56f98SSadaf Ebrahimi stop_server 1132*62c56f98SSadaf Ebrahimi fi 1133*62c56f98SSadaf Ebrahimi 1134*62c56f98SSadaf Ebrahimi if [ "X" != "X$O_CIPHERS" ]; then 1135*62c56f98SSadaf Ebrahimi start_server "mbedTLS" 1136*62c56f98SSadaf Ebrahimi translate_ciphers o $O_CIPHERS 1137*62c56f98SSadaf Ebrahimi for i in $ciphers; do 1138*62c56f98SSadaf Ebrahimi o_check_ciphersuite "${i%%=*}" 1139*62c56f98SSadaf Ebrahimi run_client OpenSSL ${i%%=*} ${i#*=} 1140*62c56f98SSadaf Ebrahimi done 1141*62c56f98SSadaf Ebrahimi stop_server 1142*62c56f98SSadaf Ebrahimi fi 1143*62c56f98SSadaf Ebrahimi 1144*62c56f98SSadaf Ebrahimi ;; 1145*62c56f98SSadaf Ebrahimi 1146*62c56f98SSadaf Ebrahimi [Gg]nu*) 1147*62c56f98SSadaf Ebrahimi 1148*62c56f98SSadaf Ebrahimi reset_ciphersuites 1149*62c56f98SSadaf Ebrahimi add_common_ciphersuites 1150*62c56f98SSadaf Ebrahimi add_gnutls_ciphersuites 1151*62c56f98SSadaf Ebrahimi filter_ciphersuites 1152*62c56f98SSadaf Ebrahimi 1153*62c56f98SSadaf Ebrahimi if [ "X" != "X$M_CIPHERS" ]; then 1154*62c56f98SSadaf Ebrahimi start_server "GnuTLS" 1155*62c56f98SSadaf Ebrahimi translate_ciphers m $M_CIPHERS 1156*62c56f98SSadaf Ebrahimi for i in $ciphers; do 1157*62c56f98SSadaf Ebrahimi run_client mbedTLS ${i%%=*} ${i#*=} 1158*62c56f98SSadaf Ebrahimi done 1159*62c56f98SSadaf Ebrahimi stop_server 1160*62c56f98SSadaf Ebrahimi fi 1161*62c56f98SSadaf Ebrahimi 1162*62c56f98SSadaf Ebrahimi if [ "X" != "X$G_CIPHERS" ]; then 1163*62c56f98SSadaf Ebrahimi start_server "mbedTLS" 1164*62c56f98SSadaf Ebrahimi translate_ciphers g $G_CIPHERS 1165*62c56f98SSadaf Ebrahimi for i in $ciphers; do 1166*62c56f98SSadaf Ebrahimi run_client GnuTLS ${i%%=*} ${i#*=} 1167*62c56f98SSadaf Ebrahimi done 1168*62c56f98SSadaf Ebrahimi stop_server 1169*62c56f98SSadaf Ebrahimi fi 1170*62c56f98SSadaf Ebrahimi 1171*62c56f98SSadaf Ebrahimi ;; 1172*62c56f98SSadaf Ebrahimi 1173*62c56f98SSadaf Ebrahimi mbed*) 1174*62c56f98SSadaf Ebrahimi 1175*62c56f98SSadaf Ebrahimi reset_ciphersuites 1176*62c56f98SSadaf Ebrahimi add_common_ciphersuites 1177*62c56f98SSadaf Ebrahimi add_openssl_ciphersuites 1178*62c56f98SSadaf Ebrahimi add_gnutls_ciphersuites 1179*62c56f98SSadaf Ebrahimi add_mbedtls_ciphersuites 1180*62c56f98SSadaf Ebrahimi filter_ciphersuites 1181*62c56f98SSadaf Ebrahimi 1182*62c56f98SSadaf Ebrahimi if [ "X" != "X$M_CIPHERS" ]; then 1183*62c56f98SSadaf Ebrahimi start_server "mbedTLS" 1184*62c56f98SSadaf Ebrahimi translate_ciphers m $M_CIPHERS 1185*62c56f98SSadaf Ebrahimi for i in $ciphers; do 1186*62c56f98SSadaf Ebrahimi run_client mbedTLS ${i%%=*} ${i#*=} 1187*62c56f98SSadaf Ebrahimi done 1188*62c56f98SSadaf Ebrahimi stop_server 1189*62c56f98SSadaf Ebrahimi fi 1190*62c56f98SSadaf Ebrahimi 1191*62c56f98SSadaf Ebrahimi ;; 1192*62c56f98SSadaf Ebrahimi 1193*62c56f98SSadaf Ebrahimi *) 1194*62c56f98SSadaf Ebrahimi echo "Unknown peer: $PEER" >&2 1195*62c56f98SSadaf Ebrahimi exit 1 1196*62c56f98SSadaf Ebrahimi ;; 1197*62c56f98SSadaf Ebrahimi 1198*62c56f98SSadaf Ebrahimi esac 1199*62c56f98SSadaf Ebrahimi 1200*62c56f98SSadaf Ebrahimi done 1201*62c56f98SSadaf Ebrahimi done 1202*62c56f98SSadaf Ebrahimi done 1203*62c56f98SSadaf Ebrahimidone 1204*62c56f98SSadaf Ebrahimi 1205*62c56f98SSadaf Ebrahimiecho "------------------------------------------------------------------------" 1206*62c56f98SSadaf Ebrahimi 1207*62c56f98SSadaf Ebrahimiif [ $FAILED -ne 0 -o $SRVMEM -ne 0 ]; then 1208*62c56f98SSadaf Ebrahimi printf "FAILED" 1209*62c56f98SSadaf Ebrahimielse 1210*62c56f98SSadaf Ebrahimi printf "PASSED" 1211*62c56f98SSadaf Ebrahimifi 1212*62c56f98SSadaf Ebrahimi 1213*62c56f98SSadaf Ebrahimiif [ "$MEMCHECK" -gt 0 ]; then 1214*62c56f98SSadaf Ebrahimi MEMREPORT=", $SRVMEM server memory errors" 1215*62c56f98SSadaf Ebrahimielse 1216*62c56f98SSadaf Ebrahimi MEMREPORT="" 1217*62c56f98SSadaf Ebrahimifi 1218*62c56f98SSadaf Ebrahimi 1219*62c56f98SSadaf EbrahimiPASSED=$(( $TESTS - $FAILED )) 1220*62c56f98SSadaf Ebrahimiecho " ($PASSED / $TESTS tests ($SKIPPED skipped$MEMREPORT))" 1221*62c56f98SSadaf Ebrahimi 1222*62c56f98SSadaf EbrahimiFAILED=$(( $FAILED + $SRVMEM )) 1223*62c56f98SSadaf Ebrahimiif [ $FAILED -gt 255 ]; then 1224*62c56f98SSadaf Ebrahimi # Clamp at 255 as caller gets exit code & 0xFF 1225*62c56f98SSadaf Ebrahimi # (so 256 would be 0, or success, etc) 1226*62c56f98SSadaf Ebrahimi FAILED=255 1227*62c56f98SSadaf Ebrahimifi 1228*62c56f98SSadaf Ebrahimiexit $FAILED 1229