| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661 | #!/bin/sh# ssl-opt.sh## This file is part of mbed TLS (https://tls.mbed.org)## Copyright (c) 2016, ARM Limited, All Rights Reserved## Purpose## Executes tests to prove various TLS/SSL options and extensions.## The goal is not to cover every ciphersuite/version, but instead to cover# specific options (max fragment length, truncated hmac, etc) or procedures# (session resumption from cache or ticket, renego, etc).## The tests assume a build with default options, with exceptions expressed# with a dependency.  The tests focus on functionality and do not consider# performance.#set -u# default values, can be overriden by the environment: ${P_SRV:=../programs/ssl/ssl_server2}: ${P_CLI:=../programs/ssl/ssl_client2}: ${P_PXY:=../programs/test/udp_proxy}: ${OPENSSL_CMD:=openssl} # OPENSSL would conflict with the build system: ${GNUTLS_CLI:=gnutls-cli}: ${GNUTLS_SERV:=gnutls-serv}O_SRV="$OPENSSL_CMD s_server -www -cert data_files/server5.crt -key data_files/server5.key"O_CLI="echo 'GET / HTTP/1.0' | $OPENSSL_CMD s_client"G_SRV="$GNUTLS_SERV --x509certfile data_files/server5.crt --x509keyfile data_files/server5.key"G_CLI="echo 'GET / HTTP/1.0' | $GNUTLS_CLI --x509cafile data_files/test-ca_cat12.crt"TESTS=0FAILS=0SKIPS=0CONFIG_H='../include/mbedtls/config.h'MEMCHECK=0FILTER='.*'EXCLUDE='^$'SHOW_TEST_NUMBER=0RUN_TEST_NUMBER=''PRESERVE_LOGS=0print_usage() {    echo "Usage: $0 [options]"    printf "  -h|--help\tPrint this help.\n"    printf "  -m|--memcheck\tCheck memory leaks and errors.\n"    printf "  -f|--filter\tOnly matching tests are executed (default: '$FILTER')\n"    printf "  -e|--exclude\tMatching tests are excluded (default: '$EXCLUDE')\n"    printf "  -n|--number\tExecute only numbered test (comma-separated, e.g. '245,256')\n"    printf "  -s|--show-numbers\tShow test numbers in front of test names\n"    printf "  -p|--preserve-logs\tPreserve logs of successful tests as well\n"    printf "     --seed\tInteger seed value to use for this test run\n"}get_options() {    while [ $# -gt 0 ]; do        case "$1" in            -f|--filter)                shift; FILTER=$1                ;;            -e|--exclude)                shift; EXCLUDE=$1                ;;            -m|--memcheck)                MEMCHECK=1                ;;            -n|--number)                shift; RUN_TEST_NUMBER=$1                ;;            -s|--show-numbers)                SHOW_TEST_NUMBER=1                ;;            -p|--preserve-logs)                PRESERVE_LOGS=1                ;;            --seed)                shift; SEED="$1"                ;;            -h|--help)                print_usage                exit 0                ;;            *)                echo "Unknown argument: '$1'"                print_usage                exit 1                ;;        esac        shift    done}# skip next test if the flag is not enabled in config.hrequires_config_enabled() {    if grep "^#define $1" $CONFIG_H > /dev/null; then :; else        SKIP_NEXT="YES"    fi}# skip next test if OpenSSL doesn't support FALLBACK_SCSVrequires_openssl_with_fallback_scsv() {    if [ -z "${OPENSSL_HAS_FBSCSV:-}" ]; then        if $OPENSSL_CMD s_client -help 2>&1 | grep fallback_scsv >/dev/null        then            OPENSSL_HAS_FBSCSV="YES"        else            OPENSSL_HAS_FBSCSV="NO"        fi    fi    if [ "$OPENSSL_HAS_FBSCSV" = "NO" ]; then        SKIP_NEXT="YES"    fi}# skip next test if GnuTLS isn't availablerequires_gnutls() {    if [ -z "${GNUTLS_AVAILABLE:-}" ]; then        if ( which "$GNUTLS_CLI" && which "$GNUTLS_SERV" ) >/dev/null 2>&1; then            GNUTLS_AVAILABLE="YES"        else            GNUTLS_AVAILABLE="NO"        fi    fi    if [ "$GNUTLS_AVAILABLE" = "NO" ]; then        SKIP_NEXT="YES"    fi}# skip next test if IPv6 isn't available on this hostrequires_ipv6() {    if [ -z "${HAS_IPV6:-}" ]; then        $P_SRV server_addr='::1' > $SRV_OUT 2>&1 &        SRV_PID=$!        sleep 1        kill $SRV_PID >/dev/null 2>&1        if grep "NET - Binding of the socket failed" $SRV_OUT >/dev/null; then            HAS_IPV6="NO"        else            HAS_IPV6="YES"        fi        rm -r $SRV_OUT    fi    if [ "$HAS_IPV6" = "NO" ]; then        SKIP_NEXT="YES"    fi}# skip the next test if valgrind is in usenot_with_valgrind() {    if [ "$MEMCHECK" -gt 0 ]; then        SKIP_NEXT="YES"    fi}# skip the next test if valgrind is NOT in useonly_with_valgrind() {    if [ "$MEMCHECK" -eq 0 ]; then        SKIP_NEXT="YES"    fi}# multiply the client timeout delay by the given factor for the next testclient_needs_more_time() {    CLI_DELAY_FACTOR=$1}# wait for the given seconds after the client finished in the next testserver_needs_more_time() {    SRV_DELAY_SECONDS=$1}# print_name <name>print_name() {    TESTS=$(( $TESTS + 1 ))    LINE=""    if [ "$SHOW_TEST_NUMBER" -gt 0 ]; then        LINE="$TESTS "    fi    LINE="$LINE$1"    printf "$LINE "    LEN=$(( 72 - `echo "$LINE" | wc -c` ))    for i in `seq 1 $LEN`; do printf '.'; done    printf ' '}# fail <message>fail() {    echo "FAIL"    echo "  ! $1"    mv $SRV_OUT o-srv-${TESTS}.log    mv $CLI_OUT o-cli-${TESTS}.log    if [ -n "$PXY_CMD" ]; then        mv $PXY_OUT o-pxy-${TESTS}.log    fi    echo "  ! outputs saved to o-XXX-${TESTS}.log"    if [ "X${USER:-}" = Xbuildbot -o "X${LOGNAME:-}" = Xbuildbot ]; then        echo "  ! server output:"        cat o-srv-${TESTS}.log        echo "  ! ========================================================"        echo "  ! client output:"        cat o-cli-${TESTS}.log        if [ -n "$PXY_CMD" ]; then            echo "  ! ========================================================"            echo "  ! proxy output:"            cat o-pxy-${TESTS}.log        fi        echo ""    fi    FAILS=$(( $FAILS + 1 ))}# is_polar <cmd_line>is_polar() {    echo "$1" | grep 'ssl_server2\|ssl_client2' > /dev/null}# openssl s_server doesn't have -www with DTLScheck_osrv_dtls() {    if echo "$SRV_CMD" | grep 's_server.*-dtls' >/dev/null; then        NEEDS_INPUT=1        SRV_CMD="$( echo $SRV_CMD | sed s/-www// )"    else        NEEDS_INPUT=0    fi}# provide input to commands that need itprovide_input() {    if [ $NEEDS_INPUT -eq 0 ]; then        return    fi    while true; do        echo "HTTP/1.0 200 OK"        sleep 1    done}# has_mem_err <log_file_name>has_mem_err() {    if ( grep -F 'All heap blocks were freed -- no leaks are possible' "$1" &&         grep -F 'ERROR SUMMARY: 0 errors from 0 contexts' "$1" ) > /dev/null    then        return 1 # false: does not have errors    else        return 0 # true: has errors    fi}# wait for server to start: two versions depending on lsof availabilitywait_server_start() {    if which lsof >/dev/null 2>&1; then        START_TIME=$( date +%s )        DONE=0        # make a tight loop, server usually takes less than 1 sec to start        if [ "$DTLS" -eq 1 ]; then            while [ $DONE -eq 0 ]; do                if lsof -nbi UDP:"$SRV_PORT" 2>/dev/null | grep UDP >/dev/null                then                    DONE=1                elif [ $(( $( date +%s ) - $START_TIME )) -gt $DOG_DELAY ]; then                    echo "SERVERSTART TIMEOUT"                    echo "SERVERSTART TIMEOUT" >> $SRV_OUT                    DONE=1                fi            done        else            while [ $DONE -eq 0 ]; do                if lsof -nbi TCP:"$SRV_PORT" 2>/dev/null | grep LISTEN >/dev/null                then                    DONE=1                elif [ $(( $( date +%s ) - $START_TIME )) -gt $DOG_DELAY ]; then                    echo "SERVERSTART TIMEOUT"                    echo "SERVERSTART TIMEOUT" >> $SRV_OUT                    DONE=1                fi            done        fi    else        sleep "$START_DELAY"    fi}# wait for client to terminate and set CLI_EXIT# must be called right after starting the clientwait_client_done() {    CLI_PID=$!    CLI_DELAY=$(( $DOG_DELAY * $CLI_DELAY_FACTOR ))    CLI_DELAY_FACTOR=1    ( sleep $CLI_DELAY; echo "===CLIENT_TIMEOUT===" >> $CLI_OUT; kill $CLI_PID ) &    DOG_PID=$!    wait $CLI_PID    CLI_EXIT=$?    kill $DOG_PID >/dev/null 2>&1    wait $DOG_PID    echo "EXIT: $CLI_EXIT" >> $CLI_OUT    sleep $SRV_DELAY_SECONDS    SRV_DELAY_SECONDS=0}# check if the given command uses dtls and sets global variable DTLSdetect_dtls() {    if echo "$1" | grep 'dtls=1\|-dtls1\|-u' >/dev/null; then        DTLS=1    else        DTLS=0    fi}# Usage: run_test name [-p proxy_cmd] srv_cmd cli_cmd cli_exit [option [...]]# Options:  -s pattern  pattern that must be present in server output#           -c pattern  pattern that must be present in client output#           -u pattern  lines after pattern must be unique in client output#           -S pattern  pattern that must be absent in server output#           -C pattern  pattern that must be absent in client output#           -U pattern  lines after pattern must be unique in server outputrun_test() {    NAME="$1"    shift 1    if echo "$NAME" | grep "$FILTER" | grep -v "$EXCLUDE" >/dev/null; then :    else        SKIP_NEXT="NO"        return    fi    print_name "$NAME"    # Do we only run numbered tests?    if [ "X$RUN_TEST_NUMBER" = "X" ]; then :    elif echo ",$RUN_TEST_NUMBER," | grep ",$TESTS," >/dev/null; then :    else        SKIP_NEXT="YES"    fi    # should we skip?    if [ "X$SKIP_NEXT" = "XYES" ]; then        SKIP_NEXT="NO"        echo "SKIP"        SKIPS=$(( $SKIPS + 1 ))        return    fi    # does this test use a proxy?    if [ "X$1" = "X-p" ]; then        PXY_CMD="$2"        shift 2    else        PXY_CMD=""    fi    # get commands and client output    SRV_CMD="$1"    CLI_CMD="$2"    CLI_EXPECT="$3"    shift 3    # fix client port    if [ -n "$PXY_CMD" ]; then        CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$PXY_PORT/g )    else        CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$SRV_PORT/g )    fi    # update DTLS variable    detect_dtls "$SRV_CMD"    # prepend valgrind to our commands if active    if [ "$MEMCHECK" -gt 0 ]; then        if is_polar "$SRV_CMD"; then            SRV_CMD="valgrind --leak-check=full $SRV_CMD"        fi        if is_polar "$CLI_CMD"; then            CLI_CMD="valgrind --leak-check=full $CLI_CMD"        fi    fi    TIMES_LEFT=2    while [ $TIMES_LEFT -gt 0 ]; do        TIMES_LEFT=$(( $TIMES_LEFT - 1 ))        # run the commands        if [ -n "$PXY_CMD" ]; then            echo "$PXY_CMD" > $PXY_OUT            $PXY_CMD >> $PXY_OUT 2>&1 &            PXY_PID=$!            # assume proxy starts faster than server        fi        check_osrv_dtls        echo "$SRV_CMD" > $SRV_OUT        provide_input | $SRV_CMD >> $SRV_OUT 2>&1 &        SRV_PID=$!        wait_server_start        echo "$CLI_CMD" > $CLI_OUT        eval "$CLI_CMD" >> $CLI_OUT 2>&1 &        wait_client_done        # terminate the server (and the proxy)        kill $SRV_PID        wait $SRV_PID        if [ -n "$PXY_CMD" ]; then            kill $PXY_PID >/dev/null 2>&1            wait $PXY_PID        fi        # retry only on timeouts        if grep '===CLIENT_TIMEOUT===' $CLI_OUT >/dev/null; then            printf "RETRY "        else            TIMES_LEFT=0        fi    done    # check if the client and server went at least to the handshake stage    # (useful to avoid tests with only negative assertions and non-zero    # expected client exit to incorrectly succeed in case of catastrophic    # failure)    if is_polar "$SRV_CMD"; then        if grep "Performing the SSL/TLS handshake" $SRV_OUT >/dev/null; then :;        else            fail "server or client failed to reach handshake stage"            return        fi    fi    if is_polar "$CLI_CMD"; then        if grep "Performing the SSL/TLS handshake" $CLI_OUT >/dev/null; then :;        else            fail "server or client failed to reach handshake stage"            return        fi    fi    # check server exit code    if [ $? != 0 ]; then        fail "server fail"        return    fi    # check client exit code    if [ \( "$CLI_EXPECT" = 0 -a "$CLI_EXIT" != 0 \) -o \         \( "$CLI_EXPECT" != 0 -a "$CLI_EXIT" = 0 \) ]    then        fail "bad client exit code (expected $CLI_EXPECT, got $CLI_EXIT)"        return    fi    # check other assertions    # lines beginning with == are added by valgrind, ignore them    # lines with 'Serious error when reading debug info', are valgrind issues as well    while [ $# -gt 0 ]    do        case $1 in            "-s")                if grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then :; else                    fail "pattern '$2' MUST be present in the Server output"                    return                fi                ;;            "-c")                if grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then :; else                    fail "pattern '$2' MUST be present in the Client output"                    return                fi                ;;            "-S")                if grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then                    fail "pattern '$2' MUST NOT be present in the Server output"                    return                fi                ;;            "-C")                if grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then                    fail "pattern '$2' MUST NOT be present in the Client output"                    return                fi                ;;                # The filtering in the following two options (-u and -U) do the following                #   - ignore valgrind output                #   - filter out everything but lines right after the pattern occurances                #   - keep one of each non-unique line                #   - count how many lines remain                # A line with '--' will remain in the result from previous outputs, so the number of lines in the result will be 1                # if there were no duplicates.            "-U")                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                    fail "lines following pattern '$2' must be unique in Server output"                    return                fi                ;;            "-u")                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                    fail "lines following pattern '$2' must be unique in Client output"                    return                fi                ;;            *)                echo "Unknown test: $1" >&2                exit 1        esac        shift 2    done    # check valgrind's results    if [ "$MEMCHECK" -gt 0 ]; then        if is_polar "$SRV_CMD" && has_mem_err $SRV_OUT; then            fail "Server has memory errors"            return        fi        if is_polar "$CLI_CMD" && has_mem_err $CLI_OUT; then            fail "Client has memory errors"            return        fi    fi    # if we're here, everything is ok    echo "PASS"    if [ "$PRESERVE_LOGS" -gt 0 ]; then        mv $SRV_OUT o-srv-${TESTS}.log        mv $CLI_OUT o-cli-${TESTS}.log    fi    rm -f $SRV_OUT $CLI_OUT $PXY_OUT}cleanup() {    rm -f $CLI_OUT $SRV_OUT $PXY_OUT $SESSION    test -n "${SRV_PID:-}" && kill $SRV_PID >/dev/null 2>&1    test -n "${PXY_PID:-}" && kill $PXY_PID >/dev/null 2>&1    test -n "${CLI_PID:-}" && kill $CLI_PID >/dev/null 2>&1    test -n "${DOG_PID:-}" && kill $DOG_PID >/dev/null 2>&1    exit 1}## MAIN#if cd $( dirname $0 ); then :; else    echo "cd $( dirname $0 ) failed" >&2    exit 1figet_options "$@"# sanity checks, avoid an avalanche of errorsif [ ! -x "$P_SRV" ]; then    echo "Command '$P_SRV' is not an executable file"    exit 1fiif [ ! -x "$P_CLI" ]; then    echo "Command '$P_CLI' is not an executable file"    exit 1fiif [ ! -x "$P_PXY" ]; then    echo "Command '$P_PXY' is not an executable file"    exit 1fiif [ "$MEMCHECK" -gt 0 ]; then    if which valgrind >/dev/null 2>&1; then :; else        echo "Memcheck not possible. Valgrind not found"        exit 1    fifiif which $OPENSSL_CMD >/dev/null 2>&1; then :; else    echo "Command '$OPENSSL_CMD' not found"    exit 1fi# used by watchdogMAIN_PID="$$"# be more patient with valgrindif [ "$MEMCHECK" -gt 0 ]; then    START_DELAY=3    DOG_DELAY=30else    START_DELAY=1    DOG_DELAY=10fiCLI_DELAY_FACTOR=1SRV_DELAY_SECONDS=0# Pick a "unique" server port in the range 10000-19999, and a proxy portPORT_BASE="0000$$"PORT_BASE="$( printf $PORT_BASE | tail -c 4 )"SRV_PORT="1$PORT_BASE"PXY_PORT="2$PORT_BASE"unset PORT_BASE# fix commands to use this port, force IPv4 while at it# +SRV_PORT will be replaced by either $SRV_PORT or $PXY_PORT laterP_SRV="$P_SRV server_addr=127.0.0.1 server_port=$SRV_PORT"P_CLI="$P_CLI server_addr=127.0.0.1 server_port=+SRV_PORT"P_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"}"O_SRV="$O_SRV -accept $SRV_PORT -dhparam data_files/dhparams.pem"O_CLI="$O_CLI -connect localhost:+SRV_PORT"G_SRV="$G_SRV -p $SRV_PORT"G_CLI="$G_CLI -p +SRV_PORT localhost"# Also pick a unique name for intermediate filesSRV_OUT="srv_out.$$"CLI_OUT="cli_out.$$"PXY_OUT="pxy_out.$$"SESSION="session.$$"SKIP_NEXT="NO"trap cleanup INT TERM HUP# Basic test# Checks that:# - things work with all ciphersuites active (used with config-full in all.sh)# - the expected (highest security) parameters are selected#   ("signature_algorithm ext: 6" means SHA-512 (highest common hash))run_test    "Default" \            "$P_SRV debug_level=3" \            "$P_CLI" \            0 \            -s "Protocol is TLSv1.2" \            -s "Ciphersuite is TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \            -s "client hello v3, signature_algorithm ext: 6" \            -s "ECDHE curve: secp521r1" \            -S "error" \            -C "error"run_test    "Default, DTLS" \            "$P_SRV dtls=1" \            "$P_CLI dtls=1" \            0 \            -s "Protocol is DTLSv1.2" \            -s "Ciphersuite is TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384"# Test for uniqueness of IVs in AEAD ciphersuitesrun_test    "Unique IV in GCM" \            "$P_SRV exchanges=20 debug_level=4" \            "$P_CLI exchanges=20 debug_level=4 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \            0 \            -u "IV used" \            -U "IV used"# Tests for rc4 optionrequires_config_enabled MBEDTLS_REMOVE_ARC4_CIPHERSUITESrun_test    "RC4: server disabled, client enabled" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            1 \            -s "SSL - The server has no ciphersuites in common"requires_config_enabled MBEDTLS_REMOVE_ARC4_CIPHERSUITESrun_test    "RC4: server half, client enabled" \            "$P_SRV arc4=1" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            1 \            -s "SSL - The server has no ciphersuites in common"run_test    "RC4: server enabled, client disabled" \            "$P_SRV force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI" \            1 \            -s "SSL - The server has no ciphersuites in common"run_test    "RC4: both enabled" \            "$P_SRV force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            0 \            -S "SSL - None of the common ciphersuites is usable" \            -S "SSL - The server has no ciphersuites in common"# Tests for Truncated HMAC extensionrun_test    "Truncated HMAC: client default, server default" \            "$P_SRV debug_level=4" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            0 \            -s "dumping 'computed mac' (20 bytes)" \            -S "dumping 'computed mac' (10 bytes)"run_test    "Truncated HMAC: client disabled, server default" \            "$P_SRV debug_level=4" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             trunc_hmac=0" \            0 \            -s "dumping 'computed mac' (20 bytes)" \            -S "dumping 'computed mac' (10 bytes)"run_test    "Truncated HMAC: client enabled, server default" \            "$P_SRV debug_level=4" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             trunc_hmac=1" \            0 \            -s "dumping 'computed mac' (20 bytes)" \            -S "dumping 'computed mac' (10 bytes)"run_test    "Truncated HMAC: client enabled, server disabled" \            "$P_SRV debug_level=4 trunc_hmac=0" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             trunc_hmac=1" \            0 \            -s "dumping 'computed mac' (20 bytes)" \            -S "dumping 'computed mac' (10 bytes)"run_test    "Truncated HMAC: client enabled, server enabled" \            "$P_SRV debug_level=4 trunc_hmac=1" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             trunc_hmac=1" \            0 \            -S "dumping 'computed mac' (20 bytes)" \            -s "dumping 'computed mac' (10 bytes)"# Tests for Encrypt-then-MAC extensionrun_test    "Encrypt then MAC: default" \            "$P_SRV debug_level=3 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            "$P_CLI debug_level=3" \            0 \            -c "client hello, adding encrypt_then_mac extension" \            -s "found encrypt then mac extension" \            -s "server hello, adding encrypt then mac extension" \            -c "found encrypt_then_mac extension" \            -c "using encrypt then mac" \            -s "using encrypt then mac"run_test    "Encrypt then MAC: client enabled, server disabled" \            "$P_SRV debug_level=3 etm=0 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            "$P_CLI debug_level=3 etm=1" \            0 \            -c "client hello, adding encrypt_then_mac extension" \            -s "found encrypt then mac extension" \            -S "server hello, adding encrypt then mac extension" \            -C "found encrypt_then_mac extension" \            -C "using encrypt then mac" \            -S "using encrypt then mac"run_test    "Encrypt then MAC: client enabled, aead cipher" \            "$P_SRV debug_level=3 etm=1 \             force_ciphersuite=TLS-RSA-WITH-AES-128-GCM-SHA256" \            "$P_CLI debug_level=3 etm=1" \            0 \            -c "client hello, adding encrypt_then_mac extension" \            -s "found encrypt then mac extension" \            -S "server hello, adding encrypt then mac extension" \            -C "found encrypt_then_mac extension" \            -C "using encrypt then mac" \            -S "using encrypt then mac"run_test    "Encrypt then MAC: client enabled, stream cipher" \            "$P_SRV debug_level=3 etm=1 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI debug_level=3 etm=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            0 \            -c "client hello, adding encrypt_then_mac extension" \            -s "found encrypt then mac extension" \            -S "server hello, adding encrypt then mac extension" \            -C "found encrypt_then_mac extension" \            -C "using encrypt then mac" \            -S "using encrypt then mac"run_test    "Encrypt then MAC: client disabled, server enabled" \            "$P_SRV debug_level=3 etm=1 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            "$P_CLI debug_level=3 etm=0" \            0 \            -C "client hello, adding encrypt_then_mac extension" \            -S "found encrypt then mac extension" \            -S "server hello, adding encrypt then mac extension" \            -C "found encrypt_then_mac extension" \            -C "using encrypt then mac" \            -S "using encrypt then mac"requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Encrypt then MAC: client SSLv3, server enabled" \            "$P_SRV debug_level=3 min_version=ssl3 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            "$P_CLI debug_level=3 force_version=ssl3" \            0 \            -C "client hello, adding encrypt_then_mac extension" \            -S "found encrypt then mac extension" \            -S "server hello, adding encrypt then mac extension" \            -C "found encrypt_then_mac extension" \            -C "using encrypt then mac" \            -S "using encrypt then mac"requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Encrypt then MAC: client enabled, server SSLv3" \            "$P_SRV debug_level=3 force_version=ssl3 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            "$P_CLI debug_level=3 min_version=ssl3" \            0 \            -c "client hello, adding encrypt_then_mac extension" \            -S "found encrypt then mac extension" \            -S "server hello, adding encrypt then mac extension" \            -C "found encrypt_then_mac extension" \            -C "using encrypt then mac" \            -S "using encrypt then mac"# Tests for Extended Master Secret extensionrun_test    "Extended Master Secret: default" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3" \            0 \            -c "client hello, adding extended_master_secret extension" \            -s "found extended master secret extension" \            -s "server hello, adding extended master secret extension" \            -c "found extended_master_secret extension" \            -c "using extended master secret" \            -s "using extended master secret"run_test    "Extended Master Secret: client enabled, server disabled" \            "$P_SRV debug_level=3 extended_ms=0" \            "$P_CLI debug_level=3 extended_ms=1" \            0 \            -c "client hello, adding extended_master_secret extension" \            -s "found extended master secret extension" \            -S "server hello, adding extended master secret extension" \            -C "found extended_master_secret extension" \            -C "using extended master secret" \            -S "using extended master secret"run_test    "Extended Master Secret: client disabled, server enabled" \            "$P_SRV debug_level=3 extended_ms=1" \            "$P_CLI debug_level=3 extended_ms=0" \            0 \            -C "client hello, adding extended_master_secret extension" \            -S "found extended master secret extension" \            -S "server hello, adding extended master secret extension" \            -C "found extended_master_secret extension" \            -C "using extended master secret" \            -S "using extended master secret"requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Extended Master Secret: client SSLv3, server enabled" \            "$P_SRV debug_level=3 min_version=ssl3" \            "$P_CLI debug_level=3 force_version=ssl3" \            0 \            -C "client hello, adding extended_master_secret extension" \            -S "found extended master secret extension" \            -S "server hello, adding extended master secret extension" \            -C "found extended_master_secret extension" \            -C "using extended master secret" \            -S "using extended master secret"requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Extended Master Secret: client enabled, server SSLv3" \            "$P_SRV debug_level=3 force_version=ssl3" \            "$P_CLI debug_level=3 min_version=ssl3" \            0 \            -c "client hello, adding extended_master_secret extension" \            -S "found extended master secret extension" \            -S "server hello, adding extended master secret extension" \            -C "found extended_master_secret extension" \            -C "using extended master secret" \            -S "using extended master secret"# Tests for FALLBACK_SCSVrun_test    "Fallback SCSV: default" \            "$P_SRV debug_level=2" \            "$P_CLI debug_level=3 force_version=tls1_1" \            0 \            -C "adding FALLBACK_SCSV" \            -S "received FALLBACK_SCSV" \            -S "inapropriate fallback" \            -C "is a fatal alert message (msg 86)"run_test    "Fallback SCSV: explicitly disabled" \            "$P_SRV debug_level=2" \            "$P_CLI debug_level=3 force_version=tls1_1 fallback=0" \            0 \            -C "adding FALLBACK_SCSV" \            -S "received FALLBACK_SCSV" \            -S "inapropriate fallback" \            -C "is a fatal alert message (msg 86)"run_test    "Fallback SCSV: enabled" \            "$P_SRV debug_level=2" \            "$P_CLI debug_level=3 force_version=tls1_1 fallback=1" \            1 \            -c "adding FALLBACK_SCSV" \            -s "received FALLBACK_SCSV" \            -s "inapropriate fallback" \            -c "is a fatal alert message (msg 86)"run_test    "Fallback SCSV: enabled, max version" \            "$P_SRV debug_level=2" \            "$P_CLI debug_level=3 fallback=1" \            0 \            -c "adding FALLBACK_SCSV" \            -s "received FALLBACK_SCSV" \            -S "inapropriate fallback" \            -C "is a fatal alert message (msg 86)"requires_openssl_with_fallback_scsvrun_test    "Fallback SCSV: default, openssl server" \            "$O_SRV" \            "$P_CLI debug_level=3 force_version=tls1_1 fallback=0" \            0 \            -C "adding FALLBACK_SCSV" \            -C "is a fatal alert message (msg 86)"requires_openssl_with_fallback_scsvrun_test    "Fallback SCSV: enabled, openssl server" \            "$O_SRV" \            "$P_CLI debug_level=3 force_version=tls1_1 fallback=1" \            1 \            -c "adding FALLBACK_SCSV" \            -c "is a fatal alert message (msg 86)"requires_openssl_with_fallback_scsvrun_test    "Fallback SCSV: disabled, openssl client" \            "$P_SRV debug_level=2" \            "$O_CLI -tls1_1" \            0 \            -S "received FALLBACK_SCSV" \            -S "inapropriate fallback"requires_openssl_with_fallback_scsvrun_test    "Fallback SCSV: enabled, openssl client" \            "$P_SRV debug_level=2" \            "$O_CLI -tls1_1 -fallback_scsv" \            1 \            -s "received FALLBACK_SCSV" \            -s "inapropriate fallback"requires_openssl_with_fallback_scsvrun_test    "Fallback SCSV: enabled, max version, openssl client" \            "$P_SRV debug_level=2" \            "$O_CLI -fallback_scsv" \            0 \            -s "received FALLBACK_SCSV" \            -S "inapropriate fallback"# Tests for CBC 1/n-1 record splittingrun_test    "CBC Record splitting: TLS 1.2, no splitting" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             request_size=123 force_version=tls1_2" \            0 \            -s "Read from client: 123 bytes read" \            -S "Read from client: 1 bytes read" \            -S "122 bytes read"run_test    "CBC Record splitting: TLS 1.1, no splitting" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             request_size=123 force_version=tls1_1" \            0 \            -s "Read from client: 123 bytes read" \            -S "Read from client: 1 bytes read" \            -S "122 bytes read"run_test    "CBC Record splitting: TLS 1.0, splitting" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             request_size=123 force_version=tls1" \            0 \            -S "Read from client: 123 bytes read" \            -s "Read from client: 1 bytes read" \            -s "122 bytes read"requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "CBC Record splitting: SSLv3, splitting" \            "$P_SRV min_version=ssl3" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             request_size=123 force_version=ssl3" \            0 \            -S "Read from client: 123 bytes read" \            -s "Read from client: 1 bytes read" \            -s "122 bytes read"run_test    "CBC Record splitting: TLS 1.0 RC4, no splitting" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \             request_size=123 force_version=tls1" \            0 \            -s "Read from client: 123 bytes read" \            -S "Read from client: 1 bytes read" \            -S "122 bytes read"run_test    "CBC Record splitting: TLS 1.0, splitting disabled" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             request_size=123 force_version=tls1 recsplit=0" \            0 \            -s "Read from client: 123 bytes read" \            -S "Read from client: 1 bytes read" \            -S "122 bytes read"run_test    "CBC Record splitting: TLS 1.0, splitting, nbio" \            "$P_SRV nbio=2" \            "$P_CLI nbio=2 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \             request_size=123 force_version=tls1" \            0 \            -S "Read from client: 123 bytes read" \            -s "Read from client: 1 bytes read" \            -s "122 bytes read"# Tests for Session Ticketsrun_test    "Session resume using tickets: basic" \            "$P_SRV debug_level=3 tickets=1" \            "$P_CLI debug_level=3 tickets=1 reconnect=1" \            0 \            -c "client hello, adding session ticket extension" \            -s "found session ticket extension" \            -s "server hello, adding session ticket extension" \            -c "found session_ticket extension" \            -c "parse new session ticket" \            -S "session successfully restored from cache" \            -s "session successfully restored from ticket" \            -s "a session has been resumed" \            -c "a session has been resumed"run_test    "Session resume using tickets: cache disabled" \            "$P_SRV debug_level=3 tickets=1 cache_max=0" \            "$P_CLI debug_level=3 tickets=1 reconnect=1" \            0 \            -c "client hello, adding session ticket extension" \            -s "found session ticket extension" \            -s "server hello, adding session ticket extension" \            -c "found session_ticket extension" \            -c "parse new session ticket" \            -S "session successfully restored from cache" \            -s "session successfully restored from ticket" \            -s "a session has been resumed" \            -c "a session has been resumed"run_test    "Session resume using tickets: timeout" \            "$P_SRV debug_level=3 tickets=1 cache_max=0 ticket_timeout=1" \            "$P_CLI debug_level=3 tickets=1 reconnect=1 reco_delay=2" \            0 \            -c "client hello, adding session ticket extension" \            -s "found session ticket extension" \            -s "server hello, adding session ticket extension" \            -c "found session_ticket extension" \            -c "parse new session ticket" \            -S "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -S "a session has been resumed" \            -C "a session has been resumed"run_test    "Session resume using tickets: openssl server" \            "$O_SRV" \            "$P_CLI debug_level=3 tickets=1 reconnect=1" \            0 \            -c "client hello, adding session ticket extension" \            -c "found session_ticket extension" \            -c "parse new session ticket" \            -c "a session has been resumed"run_test    "Session resume using tickets: openssl client" \            "$P_SRV debug_level=3 tickets=1" \            "( $O_CLI -sess_out $SESSION; \               $O_CLI -sess_in $SESSION; \               rm -f $SESSION )" \            0 \            -s "found session ticket extension" \            -s "server hello, adding session ticket extension" \            -S "session successfully restored from cache" \            -s "session successfully restored from ticket" \            -s "a session has been resumed"# Tests for Session Resume based on session-ID and cacherun_test    "Session resume using cache: tickets enabled on client" \            "$P_SRV debug_level=3 tickets=0" \            "$P_CLI debug_level=3 tickets=1 reconnect=1" \            0 \            -c "client hello, adding session ticket extension" \            -s "found session ticket extension" \            -S "server hello, adding session ticket extension" \            -C "found session_ticket extension" \            -C "parse new session ticket" \            -s "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -s "a session has been resumed" \            -c "a session has been resumed"run_test    "Session resume using cache: tickets enabled on server" \            "$P_SRV debug_level=3 tickets=1" \            "$P_CLI debug_level=3 tickets=0 reconnect=1" \            0 \            -C "client hello, adding session ticket extension" \            -S "found session ticket extension" \            -S "server hello, adding session ticket extension" \            -C "found session_ticket extension" \            -C "parse new session ticket" \            -s "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -s "a session has been resumed" \            -c "a session has been resumed"run_test    "Session resume using cache: cache_max=0" \            "$P_SRV debug_level=3 tickets=0 cache_max=0" \            "$P_CLI debug_level=3 tickets=0 reconnect=1" \            0 \            -S "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -S "a session has been resumed" \            -C "a session has been resumed"run_test    "Session resume using cache: cache_max=1" \            "$P_SRV debug_level=3 tickets=0 cache_max=1" \            "$P_CLI debug_level=3 tickets=0 reconnect=1" \            0 \            -s "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -s "a session has been resumed" \            -c "a session has been resumed"run_test    "Session resume using cache: timeout > delay" \            "$P_SRV debug_level=3 tickets=0" \            "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=0" \            0 \            -s "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -s "a session has been resumed" \            -c "a session has been resumed"run_test    "Session resume using cache: timeout < delay" \            "$P_SRV debug_level=3 tickets=0 cache_timeout=1" \            "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=2" \            0 \            -S "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -S "a session has been resumed" \            -C "a session has been resumed"run_test    "Session resume using cache: no timeout" \            "$P_SRV debug_level=3 tickets=0 cache_timeout=0" \            "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=2" \            0 \            -s "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -s "a session has been resumed" \            -c "a session has been resumed"run_test    "Session resume using cache: openssl client" \            "$P_SRV debug_level=3 tickets=0" \            "( $O_CLI -sess_out $SESSION; \               $O_CLI -sess_in $SESSION; \               rm -f $SESSION )" \            0 \            -s "found session ticket extension" \            -S "server hello, adding session ticket extension" \            -s "session successfully restored from cache" \            -S "session successfully restored from ticket" \            -s "a session has been resumed"run_test    "Session resume using cache: openssl server" \            "$O_SRV" \            "$P_CLI debug_level=3 tickets=0 reconnect=1" \            0 \            -C "found session_ticket extension" \            -C "parse new session ticket" \            -c "a session has been resumed"# Tests for Max Fragment Length extensionrun_test    "Max fragment length: not used, reference" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3" \            0 \            -c "Maximum fragment length is 16384" \            -s "Maximum fragment length is 16384" \            -C "client hello, adding max_fragment_length extension" \            -S "found max fragment length extension" \            -S "server hello, max_fragment_length extension" \            -C "found max_fragment_length extension"run_test    "Max fragment length: used by client" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3 max_frag_len=4096" \            0 \            -c "Maximum fragment length is 4096" \            -s "Maximum fragment length is 4096" \            -c "client hello, adding max_fragment_length extension" \            -s "found max fragment length extension" \            -s "server hello, max_fragment_length extension" \            -c "found max_fragment_length extension"run_test    "Max fragment length: used by server" \            "$P_SRV debug_level=3 max_frag_len=4096" \            "$P_CLI debug_level=3" \            0 \            -c "Maximum fragment length is 16384" \            -s "Maximum fragment length is 4096" \            -C "client hello, adding max_fragment_length extension" \            -S "found max fragment length extension" \            -S "server hello, max_fragment_length extension" \            -C "found max_fragment_length extension"requires_gnutlsrun_test    "Max fragment length: gnutls server" \            "$G_SRV" \            "$P_CLI debug_level=3 max_frag_len=4096" \            0 \            -c "Maximum fragment length is 4096" \            -c "client hello, adding max_fragment_length extension" \            -c "found max_fragment_length extension"run_test    "Max fragment length: client, message just fits" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3 max_frag_len=2048 request_size=2048" \            0 \            -c "Maximum fragment length is 2048" \            -s "Maximum fragment length is 2048" \            -c "client hello, adding max_fragment_length extension" \            -s "found max fragment length extension" \            -s "server hello, max_fragment_length extension" \            -c "found max_fragment_length extension" \            -c "2048 bytes written in 1 fragments" \            -s "2048 bytes read"run_test    "Max fragment length: client, larger message" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3 max_frag_len=2048 request_size=2345" \            0 \            -c "Maximum fragment length is 2048" \            -s "Maximum fragment length is 2048" \            -c "client hello, adding max_fragment_length extension" \            -s "found max fragment length extension" \            -s "server hello, max_fragment_length extension" \            -c "found max_fragment_length extension" \            -c "2345 bytes written in 2 fragments" \            -s "2048 bytes read" \            -s "297 bytes read"run_test    "Max fragment length: DTLS client, larger message" \            "$P_SRV debug_level=3 dtls=1" \            "$P_CLI debug_level=3 dtls=1 max_frag_len=2048 request_size=2345" \            1 \            -c "Maximum fragment length is 2048" \            -s "Maximum fragment length is 2048" \            -c "client hello, adding max_fragment_length extension" \            -s "found max fragment length extension" \            -s "server hello, max_fragment_length extension" \            -c "found max_fragment_length extension" \            -c "fragment larger than.*maximum"# Tests for renegotiationrun_test    "Renegotiation: none, for reference" \            "$P_SRV debug_level=3 exchanges=2 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2" \            0 \            -C "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -S "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -C "=> renegotiate" \            -S "=> renegotiate" \            -S "write hello request"run_test    "Renegotiation: client-initiated" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -S "write hello request"run_test    "Renegotiation: server-initiated" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "write hello request"run_test    "Renegotiation: double" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "write hello request"run_test    "Renegotiation: client-initiated, server-rejected" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=0 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \            1 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -S "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -S "=> renegotiate" \            -S "write hello request" \            -c "SSL - Unexpected message at ServerHello in renegotiation" \            -c "failed"run_test    "Renegotiation: server-initiated, client-rejected, default" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \            0 \            -C "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -S "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -C "=> renegotiate" \            -S "=> renegotiate" \            -s "write hello request" \            -S "SSL - An unexpected message was received from our peer" \            -S "failed"run_test    "Renegotiation: server-initiated, client-rejected, not enforced" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \             renego_delay=-1 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \            0 \            -C "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -S "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -C "=> renegotiate" \            -S "=> renegotiate" \            -s "write hello request" \            -S "SSL - An unexpected message was received from our peer" \            -S "failed"# delay 2 for 1 alert record + 1 application data recordrun_test    "Renegotiation: server-initiated, client-rejected, delay 2" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \             renego_delay=2 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \            0 \            -C "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -S "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -C "=> renegotiate" \            -S "=> renegotiate" \            -s "write hello request" \            -S "SSL - An unexpected message was received from our peer" \            -S "failed"run_test    "Renegotiation: server-initiated, client-rejected, delay 0" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \             renego_delay=0 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \            0 \            -C "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -S "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -C "=> renegotiate" \            -S "=> renegotiate" \            -s "write hello request" \            -s "SSL - An unexpected message was received from our peer"run_test    "Renegotiation: server-initiated, client-accepted, delay 0" \            "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \             renego_delay=0 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "write hello request" \            -S "SSL - An unexpected message was received from our peer" \            -S "failed"run_test    "Renegotiation: periodic, just below period" \            "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \            0 \            -C "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -S "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -S "record counter limit reached: renegotiate" \            -C "=> renegotiate" \            -S "=> renegotiate" \            -S "write hello request" \            -S "SSL - An unexpected message was received from our peer" \            -S "failed"# one extra exchange to be able to complete renegorun_test    "Renegotiation: periodic, just above period" \            "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -s "record counter limit reached: renegotiate" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "write hello request" \            -S "SSL - An unexpected message was received from our peer" \            -S "failed"run_test    "Renegotiation: periodic, two times period" \            "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=7 renegotiation=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -s "record counter limit reached: renegotiate" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "write hello request" \            -S "SSL - An unexpected message was received from our peer" \            -S "failed"run_test    "Renegotiation: periodic, above period, disabled" \            "$P_SRV debug_level=3 exchanges=9 renegotiation=0 renego_period=3 auth_mode=optional" \            "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \            0 \            -C "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -S "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -S "record counter limit reached: renegotiate" \            -C "=> renegotiate" \            -S "=> renegotiate" \            -S "write hello request" \            -S "SSL - An unexpected message was received from our peer" \            -S "failed"run_test    "Renegotiation: nbio, client-initiated" \            "$P_SRV debug_level=3 nbio=2 exchanges=2 renegotiation=1 auth_mode=optional" \            "$P_CLI debug_level=3 nbio=2 exchanges=2 renegotiation=1 renegotiate=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -S "write hello request"run_test    "Renegotiation: nbio, server-initiated" \            "$P_SRV debug_level=3 nbio=2 exchanges=2 renegotiation=1 renegotiate=1 auth_mode=optional" \            "$P_CLI debug_level=3 nbio=2 exchanges=2 renegotiation=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "write hello request"run_test    "Renegotiation: openssl server, client-initiated" \            "$O_SRV -www" \            "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \            0 \            -c "client hello, adding renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -C "ssl_hanshake() returned" \            -C "error" \            -c "HTTP/1.0 200 [Oo][Kk]"requires_gnutlsrun_test    "Renegotiation: gnutls server strict, client-initiated" \            "$G_SRV --priority=NORMAL:%SAFE_RENEGOTIATION" \            "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \            0 \            -c "client hello, adding renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -C "ssl_hanshake() returned" \            -C "error" \            -c "HTTP/1.0 200 [Oo][Kk]"requires_gnutlsrun_test    "Renegotiation: gnutls server unsafe, client-initiated default" \            "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \            "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \            1 \            -c "client hello, adding renegotiation extension" \            -C "found renegotiation extension" \            -c "=> renegotiate" \            -c "mbedtls_ssl_handshake() returned" \            -c "error" \            -C "HTTP/1.0 200 [Oo][Kk]"requires_gnutlsrun_test    "Renegotiation: gnutls server unsafe, client-inititated no legacy" \            "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \            "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1 \             allow_legacy=0" \            1 \            -c "client hello, adding renegotiation extension" \            -C "found renegotiation extension" \            -c "=> renegotiate" \            -c "mbedtls_ssl_handshake() returned" \            -c "error" \            -C "HTTP/1.0 200 [Oo][Kk]"requires_gnutlsrun_test    "Renegotiation: gnutls server unsafe, client-inititated legacy" \            "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \            "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1 \             allow_legacy=1" \            0 \            -c "client hello, adding renegotiation extension" \            -C "found renegotiation extension" \            -c "=> renegotiate" \            -C "ssl_hanshake() returned" \            -C "error" \            -c "HTTP/1.0 200 [Oo][Kk]"run_test    "Renegotiation: DTLS, client-initiated" \            "$P_SRV debug_level=3 dtls=1 exchanges=2 renegotiation=1" \            "$P_CLI debug_level=3 dtls=1 exchanges=2 renegotiation=1 renegotiate=1" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -S "write hello request"run_test    "Renegotiation: DTLS, server-initiated" \            "$P_SRV debug_level=3 dtls=1 exchanges=2 renegotiation=1 renegotiate=1" \            "$P_CLI debug_level=3 dtls=1 exchanges=2 renegotiation=1 \             read_timeout=1000 max_resend=2" \            0 \            -c "client hello, adding renegotiation extension" \            -s "received TLS_EMPTY_RENEGOTIATION_INFO" \            -s "found renegotiation extension" \            -s "server hello, secure renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "write hello request"requires_gnutlsrun_test    "Renegotiation: DTLS, gnutls server, client-initiated" \            "$G_SRV -u --mtu 4096" \            "$P_CLI debug_level=3 dtls=1 exchanges=1 renegotiation=1 renegotiate=1" \            0 \            -c "client hello, adding renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -C "mbedtls_ssl_handshake returned" \            -C "error" \            -s "Extra-header:"# Test for the "secure renegotation" extension only (no actual renegotiation)requires_gnutlsrun_test    "Renego ext: gnutls server strict, client default" \            "$G_SRV --priority=NORMAL:%SAFE_RENEGOTIATION" \            "$P_CLI debug_level=3" \            0 \            -c "found renegotiation extension" \            -C "error" \            -c "HTTP/1.0 200 [Oo][Kk]"requires_gnutlsrun_test    "Renego ext: gnutls server unsafe, client default" \            "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \            "$P_CLI debug_level=3" \            0 \            -C "found renegotiation extension" \            -C "error" \            -c "HTTP/1.0 200 [Oo][Kk]"requires_gnutlsrun_test    "Renego ext: gnutls server unsafe, client break legacy" \            "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \            "$P_CLI debug_level=3 allow_legacy=-1" \            1 \            -C "found renegotiation extension" \            -c "error" \            -C "HTTP/1.0 200 [Oo][Kk]"requires_gnutlsrun_test    "Renego ext: gnutls client strict, server default" \            "$P_SRV debug_level=3" \            "$G_CLI --priority=NORMAL:%SAFE_RENEGOTIATION" \            0 \            -s "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \            -s "server hello, secure renegotiation extension"requires_gnutlsrun_test    "Renego ext: gnutls client unsafe, server default" \            "$P_SRV debug_level=3" \            "$G_CLI --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \            0 \            -S "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \            -S "server hello, secure renegotiation extension"requires_gnutlsrun_test    "Renego ext: gnutls client unsafe, server break legacy" \            "$P_SRV debug_level=3 allow_legacy=-1" \            "$G_CLI --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \            1 \            -S "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \            -S "server hello, secure renegotiation extension"# Tests for silently dropping trailing extra bytes in .der certificatesrequires_gnutlsrun_test    "DER format: no trailing bytes" \            "$P_SRV crt_file=data_files/server5-der0.crt \             key_file=data_files/server5.key" \            "$G_CLI " \            0 \            -c "Handshake was completed" \requires_gnutlsrun_test    "DER format: with a trailing zero byte" \            "$P_SRV crt_file=data_files/server5-der1a.crt \             key_file=data_files/server5.key" \            "$G_CLI " \            0 \            -c "Handshake was completed" \requires_gnutlsrun_test    "DER format: with a trailing random byte" \            "$P_SRV crt_file=data_files/server5-der1b.crt \             key_file=data_files/server5.key" \            "$G_CLI " \            0 \            -c "Handshake was completed" \requires_gnutlsrun_test    "DER format: with 2 trailing random bytes" \            "$P_SRV crt_file=data_files/server5-der2.crt \             key_file=data_files/server5.key" \            "$G_CLI " \            0 \            -c "Handshake was completed" \requires_gnutlsrun_test    "DER format: with 4 trailing random bytes" \            "$P_SRV crt_file=data_files/server5-der4.crt \             key_file=data_files/server5.key" \            "$G_CLI " \            0 \            -c "Handshake was completed" \requires_gnutlsrun_test    "DER format: with 8 trailing random bytes" \            "$P_SRV crt_file=data_files/server5-der8.crt \             key_file=data_files/server5.key" \            "$G_CLI " \            0 \            -c "Handshake was completed" \requires_gnutlsrun_test    "DER format: with 9 trailing random bytes" \            "$P_SRV crt_file=data_files/server5-der9.crt \             key_file=data_files/server5.key" \            "$G_CLI " \            0 \            -c "Handshake was completed" \# Tests for auth_moderun_test    "Authentication: server badcert, client required" \            "$P_SRV crt_file=data_files/server5-badsign.crt \             key_file=data_files/server5.key" \            "$P_CLI debug_level=1 auth_mode=required" \            1 \            -c "x509_verify_cert() returned" \            -c "! The certificate is not correctly signed by the trusted CA" \            -c "! mbedtls_ssl_handshake returned" \            -c "X509 - Certificate verification failed"run_test    "Authentication: server badcert, client optional" \            "$P_SRV crt_file=data_files/server5-badsign.crt \             key_file=data_files/server5.key" \            "$P_CLI debug_level=1 auth_mode=optional" \            0 \            -c "x509_verify_cert() returned" \            -c "! The certificate is not correctly signed by the trusted CA" \            -C "! mbedtls_ssl_handshake returned" \            -C "X509 - Certificate verification failed"run_test    "Authentication: server badcert, client none" \            "$P_SRV crt_file=data_files/server5-badsign.crt \             key_file=data_files/server5.key" \            "$P_CLI debug_level=1 auth_mode=none" \            0 \            -C "x509_verify_cert() returned" \            -C "! The certificate is not correctly signed by the trusted CA" \            -C "! mbedtls_ssl_handshake returned" \            -C "X509 - Certificate verification failed"run_test    "Authentication: client SHA256, server required" \            "$P_SRV auth_mode=required" \            "$P_CLI debug_level=3 crt_file=data_files/server6.crt \             key_file=data_files/server6.key \             force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \            0 \            -c "Supported Signature Algorithm found: 4," \            -c "Supported Signature Algorithm found: 5,"run_test    "Authentication: client SHA384, server required" \            "$P_SRV auth_mode=required" \            "$P_CLI debug_level=3 crt_file=data_files/server6.crt \             key_file=data_files/server6.key \             force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256" \            0 \            -c "Supported Signature Algorithm found: 4," \            -c "Supported Signature Algorithm found: 5,"run_test    "Authentication: client badcert, server required" \            "$P_SRV debug_level=3 auth_mode=required" \            "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \             key_file=data_files/server5.key" \            1 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate" \            -C "skip write certificate verify" \            -S "skip parse certificate verify" \            -s "x509_verify_cert() returned" \            -s "! The certificate is not correctly signed by the trusted CA" \            -s "! mbedtls_ssl_handshake returned" \            -c "! mbedtls_ssl_handshake returned" \            -s "X509 - Certificate verification failed"run_test    "Authentication: client badcert, server optional" \            "$P_SRV debug_level=3 auth_mode=optional" \            "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \             key_file=data_files/server5.key" \            0 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate" \            -C "skip write certificate verify" \            -S "skip parse certificate verify" \            -s "x509_verify_cert() returned" \            -s "! The certificate is not correctly signed by the trusted CA" \            -S "! mbedtls_ssl_handshake returned" \            -C "! mbedtls_ssl_handshake returned" \            -S "X509 - Certificate verification failed"run_test    "Authentication: client badcert, server none" \            "$P_SRV debug_level=3 auth_mode=none" \            "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \             key_file=data_files/server5.key" \            0 \            -s "skip write certificate request" \            -C "skip parse certificate request" \            -c "got no certificate request" \            -c "skip write certificate" \            -c "skip write certificate verify" \            -s "skip parse certificate verify" \            -S "x509_verify_cert() returned" \            -S "! The certificate is not correctly signed by the trusted CA" \            -S "! mbedtls_ssl_handshake returned" \            -C "! mbedtls_ssl_handshake returned" \            -S "X509 - Certificate verification failed"run_test    "Authentication: client no cert, server optional" \            "$P_SRV debug_level=3 auth_mode=optional" \            "$P_CLI debug_level=3 crt_file=none key_file=none" \            0 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate$" \            -C "got no certificate to send" \            -S "SSLv3 client has no certificate" \            -c "skip write certificate verify" \            -s "skip parse certificate verify" \            -s "! Certificate was missing" \            -S "! mbedtls_ssl_handshake returned" \            -C "! mbedtls_ssl_handshake returned" \            -S "X509 - Certificate verification failed"run_test    "Authentication: openssl client no cert, server optional" \            "$P_SRV debug_level=3 auth_mode=optional" \            "$O_CLI" \            0 \            -S "skip write certificate request" \            -s "skip parse certificate verify" \            -s "! Certificate was missing" \            -S "! mbedtls_ssl_handshake returned" \            -S "X509 - Certificate verification failed"run_test    "Authentication: client no cert, openssl server optional" \            "$O_SRV -verify 10" \            "$P_CLI debug_level=3 crt_file=none key_file=none" \            0 \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate$" \            -c "skip write certificate verify" \            -C "! mbedtls_ssl_handshake returned"requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Authentication: client no cert, ssl3" \            "$P_SRV debug_level=3 auth_mode=optional force_version=ssl3" \            "$P_CLI debug_level=3 crt_file=none key_file=none min_version=ssl3" \            0 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate$" \            -c "skip write certificate verify" \            -c "got no certificate to send" \            -s "SSLv3 client has no certificate" \            -s "skip parse certificate verify" \            -s "! Certificate was missing" \            -S "! mbedtls_ssl_handshake returned" \            -C "! mbedtls_ssl_handshake returned" \            -S "X509 - Certificate verification failed"# Tests for certificate selection based on SHA versonrun_test    "Certificate hash: client TLS 1.2 -> SHA-2" \            "$P_SRV crt_file=data_files/server5.crt \                    key_file=data_files/server5.key \                    crt_file2=data_files/server5-sha1.crt \                    key_file2=data_files/server5.key" \            "$P_CLI force_version=tls1_2" \            0 \            -c "signed using.*ECDSA with SHA256" \            -C "signed using.*ECDSA with SHA1"run_test    "Certificate hash: client TLS 1.1 -> SHA-1" \            "$P_SRV crt_file=data_files/server5.crt \                    key_file=data_files/server5.key \                    crt_file2=data_files/server5-sha1.crt \                    key_file2=data_files/server5.key" \            "$P_CLI force_version=tls1_1" \            0 \            -C "signed using.*ECDSA with SHA256" \            -c "signed using.*ECDSA with SHA1"run_test    "Certificate hash: client TLS 1.0 -> SHA-1" \            "$P_SRV crt_file=data_files/server5.crt \                    key_file=data_files/server5.key \                    crt_file2=data_files/server5-sha1.crt \                    key_file2=data_files/server5.key" \            "$P_CLI force_version=tls1" \            0 \            -C "signed using.*ECDSA with SHA256" \            -c "signed using.*ECDSA with SHA1"run_test    "Certificate hash: client TLS 1.1, no SHA-1 -> SHA-2 (order 1)" \            "$P_SRV crt_file=data_files/server5.crt \                    key_file=data_files/server5.key \                    crt_file2=data_files/server6.crt \                    key_file2=data_files/server6.key" \            "$P_CLI force_version=tls1_1" \            0 \            -c "serial number.*09" \            -c "signed using.*ECDSA with SHA256" \            -C "signed using.*ECDSA with SHA1"run_test    "Certificate hash: client TLS 1.1, no SHA-1 -> SHA-2 (order 2)" \            "$P_SRV crt_file=data_files/server6.crt \                    key_file=data_files/server6.key \                    crt_file2=data_files/server5.crt \                    key_file2=data_files/server5.key" \            "$P_CLI force_version=tls1_1" \            0 \            -c "serial number.*0A" \            -c "signed using.*ECDSA with SHA256" \            -C "signed using.*ECDSA with SHA1"# tests for SNIrun_test    "SNI: no SNI callback" \            "$P_SRV debug_level=3 \             crt_file=data_files/server5.crt key_file=data_files/server5.key" \            "$P_CLI server_name=localhost" \            0 \            -S "parse ServerName extension" \            -c "issuer name *: C=NL, O=PolarSSL, CN=Polarssl Test EC CA" \            -c "subject name *: C=NL, O=PolarSSL, CN=localhost"run_test    "SNI: matching cert 1" \            "$P_SRV debug_level=3 \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \            "$P_CLI server_name=localhost" \            0 \            -s "parse ServerName extension" \            -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \            -c "subject name *: C=NL, O=PolarSSL, CN=localhost"run_test    "SNI: matching cert 2" \            "$P_SRV debug_level=3 \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \            "$P_CLI server_name=polarssl.example" \            0 \            -s "parse ServerName extension" \            -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \            -c "subject name *: C=NL, O=PolarSSL, CN=polarssl.example"run_test    "SNI: no matching cert" \            "$P_SRV debug_level=3 \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \            "$P_CLI server_name=nonesuch.example" \            1 \            -s "parse ServerName extension" \            -s "ssl_sni_wrapper() returned" \            -s "mbedtls_ssl_handshake returned" \            -c "mbedtls_ssl_handshake returned" \            -c "SSL - A fatal alert message was received from our peer"run_test    "SNI: client auth no override: optional" \            "$P_SRV debug_level=3 auth_mode=optional \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-" \            "$P_CLI debug_level=3 server_name=localhost" \            0 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate" \            -C "skip write certificate verify" \            -S "skip parse certificate verify"run_test    "SNI: client auth override: none -> optional" \            "$P_SRV debug_level=3 auth_mode=none \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,optional" \            "$P_CLI debug_level=3 server_name=localhost" \            0 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate" \            -C "skip write certificate verify" \            -S "skip parse certificate verify"run_test    "SNI: client auth override: optional -> none" \            "$P_SRV debug_level=3 auth_mode=optional \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,none" \            "$P_CLI debug_level=3 server_name=localhost" \            0 \            -s "skip write certificate request" \            -C "skip parse certificate request" \            -c "got no certificate request" \            -c "skip write certificate" \            -c "skip write certificate verify" \            -s "skip parse certificate verify"run_test    "SNI: CA no override" \            "$P_SRV debug_level=3 auth_mode=optional \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             ca_file=data_files/test-ca.crt \             sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,required" \            "$P_CLI debug_level=3 server_name=localhost \             crt_file=data_files/server6.crt key_file=data_files/server6.key" \            1 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate" \            -C "skip write certificate verify" \            -S "skip parse certificate verify" \            -s "x509_verify_cert() returned" \            -s "! The certificate is not correctly signed by the trusted CA" \            -S "The certificate has been revoked (is on a CRL)"run_test    "SNI: CA override" \            "$P_SRV debug_level=3 auth_mode=optional \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             ca_file=data_files/test-ca.crt \             sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,-,required" \            "$P_CLI debug_level=3 server_name=localhost \             crt_file=data_files/server6.crt key_file=data_files/server6.key" \            0 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate" \            -C "skip write certificate verify" \            -S "skip parse certificate verify" \            -S "x509_verify_cert() returned" \            -S "! The certificate is not correctly signed by the trusted CA" \            -S "The certificate has been revoked (is on a CRL)"run_test    "SNI: CA override with CRL" \            "$P_SRV debug_level=3 auth_mode=optional \             crt_file=data_files/server5.crt key_file=data_files/server5.key \             ca_file=data_files/test-ca.crt \             sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,data_files/crl-ec-sha256.pem,required" \            "$P_CLI debug_level=3 server_name=localhost \             crt_file=data_files/server6.crt key_file=data_files/server6.key" \            1 \            -S "skip write certificate request" \            -C "skip parse certificate request" \            -c "got a certificate request" \            -C "skip write certificate" \            -C "skip write certificate verify" \            -S "skip parse certificate verify" \            -s "x509_verify_cert() returned" \            -S "! The certificate is not correctly signed by the trusted CA" \            -s "The certificate has been revoked (is on a CRL)"# Tests for non-blocking I/O: exercise a variety of handshake flowsrun_test    "Non-blocking I/O: basic handshake" \            "$P_SRV nbio=2 tickets=0 auth_mode=none" \            "$P_CLI nbio=2 tickets=0" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -c "Read from server: .* bytes read"run_test    "Non-blocking I/O: client auth" \            "$P_SRV nbio=2 tickets=0 auth_mode=required" \            "$P_CLI nbio=2 tickets=0" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -c "Read from server: .* bytes read"run_test    "Non-blocking I/O: ticket" \            "$P_SRV nbio=2 tickets=1 auth_mode=none" \            "$P_CLI nbio=2 tickets=1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -c "Read from server: .* bytes read"run_test    "Non-blocking I/O: ticket + client auth" \            "$P_SRV nbio=2 tickets=1 auth_mode=required" \            "$P_CLI nbio=2 tickets=1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -c "Read from server: .* bytes read"run_test    "Non-blocking I/O: ticket + client auth + resume" \            "$P_SRV nbio=2 tickets=1 auth_mode=required" \            "$P_CLI nbio=2 tickets=1 reconnect=1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -c "Read from server: .* bytes read"run_test    "Non-blocking I/O: ticket + resume" \            "$P_SRV nbio=2 tickets=1 auth_mode=none" \            "$P_CLI nbio=2 tickets=1 reconnect=1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -c "Read from server: .* bytes read"run_test    "Non-blocking I/O: session-id resume" \            "$P_SRV nbio=2 tickets=0 auth_mode=none" \            "$P_CLI nbio=2 tickets=0 reconnect=1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -c "Read from server: .* bytes read"# Tests for version negotiationrun_test    "Version check: all -> 1.2" \            "$P_SRV" \            "$P_CLI" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -s "Protocol is TLSv1.2" \            -c "Protocol is TLSv1.2"run_test    "Version check: cli max 1.1 -> 1.1" \            "$P_SRV" \            "$P_CLI max_version=tls1_1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -s "Protocol is TLSv1.1" \            -c "Protocol is TLSv1.1"run_test    "Version check: srv max 1.1 -> 1.1" \            "$P_SRV max_version=tls1_1" \            "$P_CLI" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -s "Protocol is TLSv1.1" \            -c "Protocol is TLSv1.1"run_test    "Version check: cli+srv max 1.1 -> 1.1" \            "$P_SRV max_version=tls1_1" \            "$P_CLI max_version=tls1_1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -s "Protocol is TLSv1.1" \            -c "Protocol is TLSv1.1"run_test    "Version check: cli max 1.1, srv min 1.1 -> 1.1" \            "$P_SRV min_version=tls1_1" \            "$P_CLI max_version=tls1_1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -s "Protocol is TLSv1.1" \            -c "Protocol is TLSv1.1"run_test    "Version check: cli min 1.1, srv max 1.1 -> 1.1" \            "$P_SRV max_version=tls1_1" \            "$P_CLI min_version=tls1_1" \            0 \            -S "mbedtls_ssl_handshake returned" \            -C "mbedtls_ssl_handshake returned" \            -s "Protocol is TLSv1.1" \            -c "Protocol is TLSv1.1"run_test    "Version check: cli min 1.2, srv max 1.1 -> fail" \            "$P_SRV max_version=tls1_1" \            "$P_CLI min_version=tls1_2" \            1 \            -s "mbedtls_ssl_handshake returned" \            -c "mbedtls_ssl_handshake returned" \            -c "SSL - Handshake protocol not within min/max boundaries"run_test    "Version check: srv min 1.2, cli max 1.1 -> fail" \            "$P_SRV min_version=tls1_2" \            "$P_CLI max_version=tls1_1" \            1 \            -s "mbedtls_ssl_handshake returned" \            -c "mbedtls_ssl_handshake returned" \            -s "SSL - Handshake protocol not within min/max boundaries"# Tests for ALPN extensionrun_test    "ALPN: none" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3" \            0 \            -C "client hello, adding alpn extension" \            -S "found alpn extension" \            -C "got an alert message, type: \\[2:120]" \            -S "server hello, adding alpn extension" \            -C "found alpn extension " \            -C "Application Layer Protocol is" \            -S "Application Layer Protocol is"run_test    "ALPN: client only" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3 alpn=abc,1234" \            0 \            -c "client hello, adding alpn extension" \            -s "found alpn extension" \            -C "got an alert message, type: \\[2:120]" \            -S "server hello, adding alpn extension" \            -C "found alpn extension " \            -c "Application Layer Protocol is (none)" \            -S "Application Layer Protocol is"run_test    "ALPN: server only" \            "$P_SRV debug_level=3 alpn=abc,1234" \            "$P_CLI debug_level=3" \            0 \            -C "client hello, adding alpn extension" \            -S "found alpn extension" \            -C "got an alert message, type: \\[2:120]" \            -S "server hello, adding alpn extension" \            -C "found alpn extension " \            -C "Application Layer Protocol is" \            -s "Application Layer Protocol is (none)"run_test    "ALPN: both, common cli1-srv1" \            "$P_SRV debug_level=3 alpn=abc,1234" \            "$P_CLI debug_level=3 alpn=abc,1234" \            0 \            -c "client hello, adding alpn extension" \            -s "found alpn extension" \            -C "got an alert message, type: \\[2:120]" \            -s "server hello, adding alpn extension" \            -c "found alpn extension" \            -c "Application Layer Protocol is abc" \            -s "Application Layer Protocol is abc"run_test    "ALPN: both, common cli2-srv1" \            "$P_SRV debug_level=3 alpn=abc,1234" \            "$P_CLI debug_level=3 alpn=1234,abc" \            0 \            -c "client hello, adding alpn extension" \            -s "found alpn extension" \            -C "got an alert message, type: \\[2:120]" \            -s "server hello, adding alpn extension" \            -c "found alpn extension" \            -c "Application Layer Protocol is abc" \            -s "Application Layer Protocol is abc"run_test    "ALPN: both, common cli1-srv2" \            "$P_SRV debug_level=3 alpn=abc,1234" \            "$P_CLI debug_level=3 alpn=1234,abcde" \            0 \            -c "client hello, adding alpn extension" \            -s "found alpn extension" \            -C "got an alert message, type: \\[2:120]" \            -s "server hello, adding alpn extension" \            -c "found alpn extension" \            -c "Application Layer Protocol is 1234" \            -s "Application Layer Protocol is 1234"run_test    "ALPN: both, no common" \            "$P_SRV debug_level=3 alpn=abc,123" \            "$P_CLI debug_level=3 alpn=1234,abcde" \            1 \            -c "client hello, adding alpn extension" \            -s "found alpn extension" \            -c "got an alert message, type: \\[2:120]" \            -S "server hello, adding alpn extension" \            -C "found alpn extension" \            -C "Application Layer Protocol is 1234" \            -S "Application Layer Protocol is 1234"# Tests for keyUsage in leaf certificates, part 1:# server-side certificate/suite selectionrun_test    "keyUsage srv: RSA, digitalSignature -> (EC)DHE-RSA" \            "$P_SRV key_file=data_files/server2.key \             crt_file=data_files/server2.ku-ds.crt" \            "$P_CLI" \            0 \            -c "Ciphersuite is TLS-[EC]*DHE-RSA-WITH-"run_test    "keyUsage srv: RSA, keyEncipherment -> RSA" \            "$P_SRV key_file=data_files/server2.key \             crt_file=data_files/server2.ku-ke.crt" \            "$P_CLI" \            0 \            -c "Ciphersuite is TLS-RSA-WITH-"run_test    "keyUsage srv: RSA, keyAgreement -> fail" \            "$P_SRV key_file=data_files/server2.key \             crt_file=data_files/server2.ku-ka.crt" \            "$P_CLI" \            1 \            -C "Ciphersuite is "run_test    "keyUsage srv: ECDSA, digitalSignature -> ECDHE-ECDSA" \            "$P_SRV key_file=data_files/server5.key \             crt_file=data_files/server5.ku-ds.crt" \            "$P_CLI" \            0 \            -c "Ciphersuite is TLS-ECDHE-ECDSA-WITH-"run_test    "keyUsage srv: ECDSA, keyAgreement -> ECDH-" \            "$P_SRV key_file=data_files/server5.key \             crt_file=data_files/server5.ku-ka.crt" \            "$P_CLI" \            0 \            -c "Ciphersuite is TLS-ECDH-"run_test    "keyUsage srv: ECDSA, keyEncipherment -> fail" \            "$P_SRV key_file=data_files/server5.key \             crt_file=data_files/server5.ku-ke.crt" \            "$P_CLI" \            1 \            -C "Ciphersuite is "# Tests for keyUsage in leaf certificates, part 2:# client-side checking of server certrun_test    "keyUsage cli: DigitalSignature+KeyEncipherment, RSA: OK" \            "$O_SRV -key data_files/server2.key \             -cert data_files/server2.ku-ds_ke.crt" \            "$P_CLI debug_level=1 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            0 \            -C "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-"run_test    "keyUsage cli: DigitalSignature+KeyEncipherment, DHE-RSA: OK" \            "$O_SRV -key data_files/server2.key \             -cert data_files/server2.ku-ds_ke.crt" \            "$P_CLI debug_level=1 \             force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \            0 \            -C "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-"run_test    "keyUsage cli: KeyEncipherment, RSA: OK" \            "$O_SRV -key data_files/server2.key \             -cert data_files/server2.ku-ke.crt" \            "$P_CLI debug_level=1 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            0 \            -C "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-"run_test    "keyUsage cli: KeyEncipherment, DHE-RSA: fail" \            "$O_SRV -key data_files/server2.key \             -cert data_files/server2.ku-ke.crt" \            "$P_CLI debug_level=1 \             force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \            1 \            -c "bad certificate (usage extensions)" \            -c "Processing of the Certificate handshake message failed" \            -C "Ciphersuite is TLS-"run_test    "keyUsage cli: KeyEncipherment, DHE-RSA: fail, soft" \            "$O_SRV -key data_files/server2.key \             -cert data_files/server2.ku-ke.crt" \            "$P_CLI debug_level=1 auth_mode=optional \             force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \            0 \            -c "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-" \            -c "! Usage does not match the keyUsage extension"run_test    "keyUsage cli: DigitalSignature, DHE-RSA: OK" \            "$O_SRV -key data_files/server2.key \             -cert data_files/server2.ku-ds.crt" \            "$P_CLI debug_level=1 \             force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \            0 \            -C "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-"run_test    "keyUsage cli: DigitalSignature, RSA: fail" \            "$O_SRV -key data_files/server2.key \             -cert data_files/server2.ku-ds.crt" \            "$P_CLI debug_level=1 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            1 \            -c "bad certificate (usage extensions)" \            -c "Processing of the Certificate handshake message failed" \            -C "Ciphersuite is TLS-"run_test    "keyUsage cli: DigitalSignature, RSA: fail, soft" \            "$O_SRV -key data_files/server2.key \             -cert data_files/server2.ku-ds.crt" \            "$P_CLI debug_level=1 auth_mode=optional \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            0 \            -c "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-" \            -c "! Usage does not match the keyUsage extension"# Tests for keyUsage in leaf certificates, part 3:# server-side checking of client certrun_test    "keyUsage cli-auth: RSA, DigitalSignature: OK" \            "$P_SRV debug_level=1 auth_mode=optional" \            "$O_CLI -key data_files/server2.key \             -cert data_files/server2.ku-ds.crt" \            0 \            -S "bad certificate (usage extensions)" \            -S "Processing of the Certificate handshake message failed"run_test    "keyUsage cli-auth: RSA, KeyEncipherment: fail (soft)" \            "$P_SRV debug_level=1 auth_mode=optional" \            "$O_CLI -key data_files/server2.key \             -cert data_files/server2.ku-ke.crt" \            0 \            -s "bad certificate (usage extensions)" \            -S "Processing of the Certificate handshake message failed"run_test    "keyUsage cli-auth: RSA, KeyEncipherment: fail (hard)" \            "$P_SRV debug_level=1 auth_mode=required" \            "$O_CLI -key data_files/server2.key \             -cert data_files/server2.ku-ke.crt" \            1 \            -s "bad certificate (usage extensions)" \            -s "Processing of the Certificate handshake message failed"run_test    "keyUsage cli-auth: ECDSA, DigitalSignature: OK" \            "$P_SRV debug_level=1 auth_mode=optional" \            "$O_CLI -key data_files/server5.key \             -cert data_files/server5.ku-ds.crt" \            0 \            -S "bad certificate (usage extensions)" \            -S "Processing of the Certificate handshake message failed"run_test    "keyUsage cli-auth: ECDSA, KeyAgreement: fail (soft)" \            "$P_SRV debug_level=1 auth_mode=optional" \            "$O_CLI -key data_files/server5.key \             -cert data_files/server5.ku-ka.crt" \            0 \            -s "bad certificate (usage extensions)" \            -S "Processing of the Certificate handshake message failed"# Tests for extendedKeyUsage, part 1: server-side certificate/suite selectionrun_test    "extKeyUsage srv: serverAuth -> OK" \            "$P_SRV key_file=data_files/server5.key \             crt_file=data_files/server5.eku-srv.crt" \            "$P_CLI" \            0run_test    "extKeyUsage srv: serverAuth,clientAuth -> OK" \            "$P_SRV key_file=data_files/server5.key \             crt_file=data_files/server5.eku-srv.crt" \            "$P_CLI" \            0run_test    "extKeyUsage srv: codeSign,anyEKU -> OK" \            "$P_SRV key_file=data_files/server5.key \             crt_file=data_files/server5.eku-cs_any.crt" \            "$P_CLI" \            0run_test    "extKeyUsage srv: codeSign -> fail" \            "$P_SRV key_file=data_files/server5.key \             crt_file=data_files/server5.eku-cli.crt" \            "$P_CLI" \            1# Tests for extendedKeyUsage, part 2: client-side checking of server certrun_test    "extKeyUsage cli: serverAuth -> OK" \            "$O_SRV -key data_files/server5.key \             -cert data_files/server5.eku-srv.crt" \            "$P_CLI debug_level=1" \            0 \            -C "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-"run_test    "extKeyUsage cli: serverAuth,clientAuth -> OK" \            "$O_SRV -key data_files/server5.key \             -cert data_files/server5.eku-srv_cli.crt" \            "$P_CLI debug_level=1" \            0 \            -C "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-"run_test    "extKeyUsage cli: codeSign,anyEKU -> OK" \            "$O_SRV -key data_files/server5.key \             -cert data_files/server5.eku-cs_any.crt" \            "$P_CLI debug_level=1" \            0 \            -C "bad certificate (usage extensions)" \            -C "Processing of the Certificate handshake message failed" \            -c "Ciphersuite is TLS-"run_test    "extKeyUsage cli: codeSign -> fail" \            "$O_SRV -key data_files/server5.key \             -cert data_files/server5.eku-cs.crt" \            "$P_CLI debug_level=1" \            1 \            -c "bad certificate (usage extensions)" \            -c "Processing of the Certificate handshake message failed" \            -C "Ciphersuite is TLS-"# Tests for extendedKeyUsage, part 3: server-side checking of client certrun_test    "extKeyUsage cli-auth: clientAuth -> OK" \            "$P_SRV debug_level=1 auth_mode=optional" \            "$O_CLI -key data_files/server5.key \             -cert data_files/server5.eku-cli.crt" \            0 \            -S "bad certificate (usage extensions)" \            -S "Processing of the Certificate handshake message failed"run_test    "extKeyUsage cli-auth: serverAuth,clientAuth -> OK" \            "$P_SRV debug_level=1 auth_mode=optional" \            "$O_CLI -key data_files/server5.key \             -cert data_files/server5.eku-srv_cli.crt" \            0 \            -S "bad certificate (usage extensions)" \            -S "Processing of the Certificate handshake message failed"run_test    "extKeyUsage cli-auth: codeSign,anyEKU -> OK" \            "$P_SRV debug_level=1 auth_mode=optional" \            "$O_CLI -key data_files/server5.key \             -cert data_files/server5.eku-cs_any.crt" \            0 \            -S "bad certificate (usage extensions)" \            -S "Processing of the Certificate handshake message failed"run_test    "extKeyUsage cli-auth: codeSign -> fail (soft)" \            "$P_SRV debug_level=1 auth_mode=optional" \            "$O_CLI -key data_files/server5.key \             -cert data_files/server5.eku-cs.crt" \            0 \            -s "bad certificate (usage extensions)" \            -S "Processing of the Certificate handshake message failed"run_test    "extKeyUsage cli-auth: codeSign -> fail (hard)" \            "$P_SRV debug_level=1 auth_mode=required" \            "$O_CLI -key data_files/server5.key \             -cert data_files/server5.eku-cs.crt" \            1 \            -s "bad certificate (usage extensions)" \            -s "Processing of the Certificate handshake message failed"# Tests for DHM parameters loadingrun_test    "DHM parameters: reference" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \                    debug_level=3" \            0 \            -c "value of 'DHM: P ' (2048 bits)" \            -c "value of 'DHM: G ' (2048 bits)"run_test    "DHM parameters: other parameters" \            "$P_SRV dhm_file=data_files/dhparams.pem" \            "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \                    debug_level=3" \            0 \            -c "value of 'DHM: P ' (1024 bits)" \            -c "value of 'DHM: G ' (2 bits)"# Tests for DHM client-side size checkingrun_test    "DHM size: server default, client default, OK" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \                    debug_level=1" \            0 \            -C "DHM prime too short:"run_test    "DHM size: server default, client 2048, OK" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \                    debug_level=1 dhmlen=2048" \            0 \            -C "DHM prime too short:"run_test    "DHM size: server 1024, client default, OK" \            "$P_SRV dhm_file=data_files/dhparams.pem" \            "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \                    debug_level=1" \            0 \            -C "DHM prime too short:"run_test    "DHM size: server 1000, client default, rejected" \            "$P_SRV dhm_file=data_files/dh.1000.pem" \            "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \                    debug_level=1" \            1 \            -c "DHM prime too short:"run_test    "DHM size: server default, client 2049, rejected" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \                    debug_level=1 dhmlen=2049" \            1 \            -c "DHM prime too short:"# Tests for PSK callbackrun_test    "PSK callback: psk, no callback" \            "$P_SRV psk=abc123 psk_identity=foo" \            "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \            psk_identity=foo psk=abc123" \            0 \            -S "SSL - None of the common ciphersuites is usable" \            -S "SSL - Unknown identity received" \            -S "SSL - Verification of the message MAC failed"run_test    "PSK callback: no psk, no callback" \            "$P_SRV" \            "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \            psk_identity=foo psk=abc123" \            1 \            -s "SSL - None of the common ciphersuites is usable" \            -S "SSL - Unknown identity received" \            -S "SSL - Verification of the message MAC failed"run_test    "PSK callback: callback overrides other settings" \            "$P_SRV psk=abc123 psk_identity=foo psk_list=abc,dead,def,beef" \            "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \            psk_identity=foo psk=abc123" \            1 \            -S "SSL - None of the common ciphersuites is usable" \            -s "SSL - Unknown identity received" \            -S "SSL - Verification of the message MAC failed"run_test    "PSK callback: first id matches" \            "$P_SRV psk_list=abc,dead,def,beef" \            "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \            psk_identity=abc psk=dead" \            0 \            -S "SSL - None of the common ciphersuites is usable" \            -S "SSL - Unknown identity received" \            -S "SSL - Verification of the message MAC failed"run_test    "PSK callback: second id matches" \            "$P_SRV psk_list=abc,dead,def,beef" \            "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \            psk_identity=def psk=beef" \            0 \            -S "SSL - None of the common ciphersuites is usable" \            -S "SSL - Unknown identity received" \            -S "SSL - Verification of the message MAC failed"run_test    "PSK callback: no match" \            "$P_SRV psk_list=abc,dead,def,beef" \            "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \            psk_identity=ghi psk=beef" \            1 \            -S "SSL - None of the common ciphersuites is usable" \            -s "SSL - Unknown identity received" \            -S "SSL - Verification of the message MAC failed"run_test    "PSK callback: wrong key" \            "$P_SRV psk_list=abc,dead,def,beef" \            "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \            psk_identity=abc psk=beef" \            1 \            -S "SSL - None of the common ciphersuites is usable" \            -S "SSL - Unknown identity received" \            -s "SSL - Verification of the message MAC failed"# Tests for EC J-PAKErequires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKErun_test    "ECJPAKE: client not configured" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3" \            0 \            -C "add ciphersuite: c0ff" \            -C "adding ecjpake_kkpp extension" \            -S "found ecjpake kkpp extension" \            -S "skip ecjpake kkpp extension" \            -S "ciphersuite mismatch: ecjpake not configured" \            -S "server hello, ecjpake kkpp extension" \            -C "found ecjpake_kkpp extension" \            -S "None of the common ciphersuites is usable"requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKErun_test    "ECJPAKE: server not configured" \            "$P_SRV debug_level=3" \            "$P_CLI debug_level=3 ecjpake_pw=bla \             force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \            1 \            -c "add ciphersuite: c0ff" \            -c "adding ecjpake_kkpp extension" \            -s "found ecjpake kkpp extension" \            -s "skip ecjpake kkpp extension" \            -s "ciphersuite mismatch: ecjpake not configured" \            -S "server hello, ecjpake kkpp extension" \            -C "found ecjpake_kkpp extension" \            -s "None of the common ciphersuites is usable"requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKErun_test    "ECJPAKE: working, TLS" \            "$P_SRV debug_level=3 ecjpake_pw=bla" \            "$P_CLI debug_level=3 ecjpake_pw=bla \             force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \            0 \            -c "add ciphersuite: c0ff" \            -c "adding ecjpake_kkpp extension" \            -C "re-using cached ecjpake parameters" \            -s "found ecjpake kkpp extension" \            -S "skip ecjpake kkpp extension" \            -S "ciphersuite mismatch: ecjpake not configured" \            -s "server hello, ecjpake kkpp extension" \            -c "found ecjpake_kkpp extension" \            -S "None of the common ciphersuites is usable" \            -S "SSL - Verification of the message MAC failed"server_needs_more_time 1requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKErun_test    "ECJPAKE: password mismatch, TLS" \            "$P_SRV debug_level=3 ecjpake_pw=bla" \            "$P_CLI debug_level=3 ecjpake_pw=bad \             force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \            1 \            -C "re-using cached ecjpake parameters" \            -s "SSL - Verification of the message MAC failed"requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKErun_test    "ECJPAKE: working, DTLS" \            "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla" \            "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bla \             force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \            0 \            -c "re-using cached ecjpake parameters" \            -S "SSL - Verification of the message MAC failed"requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKErun_test    "ECJPAKE: working, DTLS, no cookie" \            "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla cookies=0" \            "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bla \             force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \            0 \            -C "re-using cached ecjpake parameters" \            -S "SSL - Verification of the message MAC failed"server_needs_more_time 1requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKErun_test    "ECJPAKE: password mismatch, DTLS" \            "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla" \            "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bad \             force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \            1 \            -c "re-using cached ecjpake parameters" \            -s "SSL - Verification of the message MAC failed"# for tests with configs/config-thread.hrequires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKErun_test    "ECJPAKE: working, DTLS, nolog" \            "$P_SRV dtls=1 ecjpake_pw=bla" \            "$P_CLI dtls=1 ecjpake_pw=bla \             force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \            0# Tests for ciphersuites per versionrequires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Per-version suites: SSL3" \            "$P_SRV min_version=ssl3 version_suites=TLS-RSA-WITH-3DES-EDE-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \            "$P_CLI force_version=ssl3" \            0 \            -c "Ciphersuite is TLS-RSA-WITH-3DES-EDE-CBC-SHA"run_test    "Per-version suites: TLS 1.0" \            "$P_SRV arc4=1 version_suites=TLS-RSA-WITH-3DES-EDE-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \            "$P_CLI force_version=tls1 arc4=1" \            0 \            -c "Ciphersuite is TLS-RSA-WITH-AES-256-CBC-SHA"run_test    "Per-version suites: TLS 1.1" \            "$P_SRV version_suites=TLS-RSA-WITH-3DES-EDE-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \            "$P_CLI force_version=tls1_1" \            0 \            -c "Ciphersuite is TLS-RSA-WITH-AES-128-CBC-SHA"run_test    "Per-version suites: TLS 1.2" \            "$P_SRV version_suites=TLS-RSA-WITH-3DES-EDE-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \            "$P_CLI force_version=tls1_2" \            0 \            -c "Ciphersuite is TLS-RSA-WITH-AES-128-GCM-SHA256"# Test for ClientHello without extensionsrequires_gnutlsrun_test    "ClientHello without extensions" \            "$P_SRV debug_level=3" \            "$G_CLI --priority=NORMAL:%NO_EXTENSIONS:%DISABLE_SAFE_RENEGOTIATION" \            0 \            -s "dumping 'client hello extensions' (0 bytes)"# Tests for mbedtls_ssl_get_bytes_avail()run_test    "mbedtls_ssl_get_bytes_avail: no extra data" \            "$P_SRV" \            "$P_CLI request_size=100" \            0 \            -s "Read from client: 100 bytes read$"run_test    "mbedtls_ssl_get_bytes_avail: extra data" \            "$P_SRV" \            "$P_CLI request_size=500" \            0 \            -s "Read from client: 500 bytes read (.*+.*)"# Tests for small packetsrequires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Small packet SSLv3 BlockCipher" \            "$P_SRV min_version=ssl3" \            "$P_CLI request_size=1 force_version=ssl3 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 1 bytes read"requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Small packet SSLv3 StreamCipher" \            "$P_SRV min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=1 force_version=ssl3 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.0 BlockCipher" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.0 BlockCipher without EtM" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1 etm=0 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.0 BlockCipher truncated MAC" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.0 StreamCipher truncated MAC" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=1 force_version=tls1 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.1 BlockCipher" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_1 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.1 BlockCipher without EtM" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_1 etm=0 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.1 StreamCipher" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=1 force_version=tls1_1 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.1 BlockCipher truncated MAC" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_1 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.1 StreamCipher truncated MAC" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=1 force_version=tls1_1 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.2 BlockCipher" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.2 BlockCipher without EtM" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_2 etm=0 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.2 BlockCipher larger MAC" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_2 \             force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.2 BlockCipher truncated MAC" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.2 StreamCipher" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=1 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.2 StreamCipher truncated MAC" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=1 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.2 AEAD" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \            0 \            -s "Read from client: 1 bytes read"run_test    "Small packet TLS 1.2 AEAD shorter tag" \            "$P_SRV" \            "$P_CLI request_size=1 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \            0 \            -s "Read from client: 1 bytes read"# A test for extensions in SSLv3requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "SSLv3 with extensions, server side" \            "$P_SRV min_version=ssl3 debug_level=3" \            "$P_CLI force_version=ssl3 tickets=1 max_frag_len=4096 alpn=abc,1234" \            0 \            -S "dumping 'client hello extensions'" \            -S "server hello, total extension length:"# Test for large packetsrequires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Large packet SSLv3 BlockCipher" \            "$P_SRV min_version=ssl3" \            "$P_CLI request_size=16384 force_version=ssl3 recsplit=0 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 16384 bytes read"requires_config_enabled MBEDTLS_SSL_PROTO_SSL3run_test    "Large packet SSLv3 StreamCipher" \            "$P_SRV min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=16384 force_version=ssl3 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.0 BlockCipher" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1 recsplit=0 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.0 BlockCipher truncated MAC" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1 recsplit=0 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.0 StreamCipher truncated MAC" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=16384 force_version=tls1 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.1 BlockCipher" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1_1 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.1 StreamCipher" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=16384 force_version=tls1_1 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.1 BlockCipher truncated MAC" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1_1 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.1 StreamCipher truncated MAC" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=16384 force_version=tls1_1 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.2 BlockCipher" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.2 BlockCipher larger MAC" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1_2 \             force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.2 BlockCipher truncated MAC" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.2 StreamCipher" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=16384 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.2 StreamCipher truncated MAC" \            "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \            "$P_CLI request_size=16384 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \             trunc_hmac=1" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.2 AEAD" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \            0 \            -s "Read from client: 16384 bytes read"run_test    "Large packet TLS 1.2 AEAD shorter tag" \            "$P_SRV" \            "$P_CLI request_size=16384 force_version=tls1_2 \             force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \            0 \            -s "Read from client: 16384 bytes read"# Tests for DTLS HelloVerifyRequestrun_test    "DTLS cookie: enabled" \            "$P_SRV dtls=1 debug_level=2" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -s "cookie verification failed" \            -s "cookie verification passed" \            -S "cookie verification skipped" \            -c "received hello verify request" \            -s "hello verification requested" \            -S "SSL - The requested feature is not available"run_test    "DTLS cookie: disabled" \            "$P_SRV dtls=1 debug_level=2 cookies=0" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -S "cookie verification failed" \            -S "cookie verification passed" \            -s "cookie verification skipped" \            -C "received hello verify request" \            -S "hello verification requested" \            -S "SSL - The requested feature is not available"run_test    "DTLS cookie: default (failing)" \            "$P_SRV dtls=1 debug_level=2 cookies=-1" \            "$P_CLI dtls=1 debug_level=2 hs_timeout=100-400" \            1 \            -s "cookie verification failed" \            -S "cookie verification passed" \            -S "cookie verification skipped" \            -C "received hello verify request" \            -S "hello verification requested" \            -s "SSL - The requested feature is not available"requires_ipv6run_test    "DTLS cookie: enabled, IPv6" \            "$P_SRV dtls=1 debug_level=2 server_addr=::1" \            "$P_CLI dtls=1 debug_level=2 server_addr=::1" \            0 \            -s "cookie verification failed" \            -s "cookie verification passed" \            -S "cookie verification skipped" \            -c "received hello verify request" \            -s "hello verification requested" \            -S "SSL - The requested feature is not available"run_test    "DTLS cookie: enabled, nbio" \            "$P_SRV dtls=1 nbio=2 debug_level=2" \            "$P_CLI dtls=1 nbio=2 debug_level=2" \            0 \            -s "cookie verification failed" \            -s "cookie verification passed" \            -S "cookie verification skipped" \            -c "received hello verify request" \            -s "hello verification requested" \            -S "SSL - The requested feature is not available"# Tests for client reconnecting from the same port with DTLSnot_with_valgrind # spurious resendrun_test    "DTLS client reconnect from same port: reference" \            "$P_SRV dtls=1 exchanges=2 read_timeout=1000" \            "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-1000" \            0 \            -C "resend" \            -S "The operation timed out" \            -S "Client initiated reconnection from same port"not_with_valgrind # spurious resendrun_test    "DTLS client reconnect from same port: reconnect" \            "$P_SRV dtls=1 exchanges=2 read_timeout=1000" \            "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-1000 reconnect_hard=1" \            0 \            -C "resend" \            -S "The operation timed out" \            -s "Client initiated reconnection from same port"not_with_valgrind # server/client too slow to respond in time (next test has higher timeouts)run_test    "DTLS client reconnect from same port: reconnect, nbio, no valgrind" \            "$P_SRV dtls=1 exchanges=2 read_timeout=1000 nbio=2" \            "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-1000 reconnect_hard=1" \            0 \            -S "The operation timed out" \            -s "Client initiated reconnection from same port"only_with_valgrind # Only with valgrind, do previous test but with higher read_timeout and hs_timeoutrun_test    "DTLS client reconnect from same port: reconnect, nbio, valgrind" \            "$P_SRV dtls=1 exchanges=2 read_timeout=2000 nbio=2 hs_timeout=1500-6000" \            "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=1500-3000 reconnect_hard=1" \            0 \            -S "The operation timed out" \            -s "Client initiated reconnection from same port"run_test    "DTLS client reconnect from same port: no cookies" \            "$P_SRV dtls=1 exchanges=2 read_timeout=1000 cookies=0" \            "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-8000 reconnect_hard=1" \            0 \            -s "The operation timed out" \            -S "Client initiated reconnection from same port"# Tests for various cases of client authentication with DTLS# (focused on handshake flows and message parsing)run_test    "DTLS client auth: required" \            "$P_SRV dtls=1 auth_mode=required" \            "$P_CLI dtls=1" \            0 \            -s "Verifying peer X.509 certificate... ok"run_test    "DTLS client auth: optional, client has no cert" \            "$P_SRV dtls=1 auth_mode=optional" \            "$P_CLI dtls=1 crt_file=none key_file=none" \            0 \            -s "! Certificate was missing"run_test    "DTLS client auth: none, client has no cert" \            "$P_SRV dtls=1 auth_mode=none" \            "$P_CLI dtls=1 crt_file=none key_file=none debug_level=2" \            0 \            -c "skip write certificate$" \            -s "! Certificate verification was skipped"run_test    "DTLS wrong PSK: badmac alert" \            "$P_SRV dtls=1 psk=abc123 force_ciphersuite=TLS-PSK-WITH-AES-128-GCM-SHA256" \            "$P_CLI dtls=1 psk=abc124" \            1 \            -s "SSL - Verification of the message MAC failed" \            -c "SSL - A fatal alert message was received from our peer"# Tests for receiving fragmented handshake messages with DTLSrequires_gnutlsrun_test    "DTLS reassembly: no fragmentation (gnutls server)" \            "$G_SRV -u --mtu 2048 -a" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -C "found fragmented DTLS handshake message" \            -C "error"requires_gnutlsrun_test    "DTLS reassembly: some fragmentation (gnutls server)" \            "$G_SRV -u --mtu 512" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -c "found fragmented DTLS handshake message" \            -C "error"requires_gnutlsrun_test    "DTLS reassembly: more fragmentation (gnutls server)" \            "$G_SRV -u --mtu 128" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -c "found fragmented DTLS handshake message" \            -C "error"requires_gnutlsrun_test    "DTLS reassembly: more fragmentation, nbio (gnutls server)" \            "$G_SRV -u --mtu 128" \            "$P_CLI dtls=1 nbio=2 debug_level=2" \            0 \            -c "found fragmented DTLS handshake message" \            -C "error"requires_gnutlsrun_test    "DTLS reassembly: fragmentation, renego (gnutls server)" \            "$G_SRV -u --mtu 256" \            "$P_CLI debug_level=3 dtls=1 renegotiation=1 renegotiate=1" \            0 \            -c "found fragmented DTLS handshake message" \            -c "client hello, adding renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -C "mbedtls_ssl_handshake returned" \            -C "error" \            -s "Extra-header:"requires_gnutlsrun_test    "DTLS reassembly: fragmentation, nbio, renego (gnutls server)" \            "$G_SRV -u --mtu 256" \            "$P_CLI debug_level=3 nbio=2 dtls=1 renegotiation=1 renegotiate=1" \            0 \            -c "found fragmented DTLS handshake message" \            -c "client hello, adding renegotiation extension" \            -c "found renegotiation extension" \            -c "=> renegotiate" \            -C "mbedtls_ssl_handshake returned" \            -C "error" \            -s "Extra-header:"run_test    "DTLS reassembly: no fragmentation (openssl server)" \            "$O_SRV -dtls1 -mtu 2048" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -C "found fragmented DTLS handshake message" \            -C "error"run_test    "DTLS reassembly: some fragmentation (openssl server)" \            "$O_SRV -dtls1 -mtu 768" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -c "found fragmented DTLS handshake message" \            -C "error"run_test    "DTLS reassembly: more fragmentation (openssl server)" \            "$O_SRV -dtls1 -mtu 256" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -c "found fragmented DTLS handshake message" \            -C "error"run_test    "DTLS reassembly: fragmentation, nbio (openssl server)" \            "$O_SRV -dtls1 -mtu 256" \            "$P_CLI dtls=1 nbio=2 debug_level=2" \            0 \            -c "found fragmented DTLS handshake message" \            -C "error"# Tests for specific things with "unreliable" UDP connectionnot_with_valgrind # spurious resend due to timeoutrun_test    "DTLS proxy: reference" \            -p "$P_PXY" \            "$P_SRV dtls=1 debug_level=2" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -C "replayed record" \            -S "replayed record" \            -C "record from another epoch" \            -S "record from another epoch" \            -C "discarding invalid record" \            -S "discarding invalid record" \            -S "resend" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"not_with_valgrind # spurious resend due to timeoutrun_test    "DTLS proxy: duplicate every packet" \            -p "$P_PXY duplicate=1" \            "$P_SRV dtls=1 debug_level=2" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -c "replayed record" \            -s "replayed record" \            -c "discarding invalid record" \            -s "discarding invalid record" \            -S "resend" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"run_test    "DTLS proxy: duplicate every packet, server anti-replay off" \            -p "$P_PXY duplicate=1" \            "$P_SRV dtls=1 debug_level=2 anti_replay=0" \            "$P_CLI dtls=1 debug_level=2" \            0 \            -c "replayed record" \            -S "replayed record" \            -c "discarding invalid record" \            -s "discarding invalid record" \            -c "resend" \            -s "resend" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"run_test    "DTLS proxy: inject invalid AD record, default badmac_limit" \            -p "$P_PXY bad_ad=1" \            "$P_SRV dtls=1 debug_level=1" \            "$P_CLI dtls=1 debug_level=1 read_timeout=100" \            0 \            -c "discarding invalid record (mac)" \            -s "discarding invalid record (mac)" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK" \            -S "too many records with bad MAC" \            -S "Verification of the message MAC failed"run_test    "DTLS proxy: inject invalid AD record, badmac_limit 1" \            -p "$P_PXY bad_ad=1" \            "$P_SRV dtls=1 debug_level=1 badmac_limit=1" \            "$P_CLI dtls=1 debug_level=1 read_timeout=100" \            1 \            -C "discarding invalid record (mac)" \            -S "discarding invalid record (mac)" \            -S "Extra-header:" \            -C "HTTP/1.0 200 OK" \            -s "too many records with bad MAC" \            -s "Verification of the message MAC failed"run_test    "DTLS proxy: inject invalid AD record, badmac_limit 2" \            -p "$P_PXY bad_ad=1" \            "$P_SRV dtls=1 debug_level=1 badmac_limit=2" \            "$P_CLI dtls=1 debug_level=1 read_timeout=100" \            0 \            -c "discarding invalid record (mac)" \            -s "discarding invalid record (mac)" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK" \            -S "too many records with bad MAC" \            -S "Verification of the message MAC failed"run_test    "DTLS proxy: inject invalid AD record, badmac_limit 2, exchanges 2"\            -p "$P_PXY bad_ad=1" \            "$P_SRV dtls=1 debug_level=1 badmac_limit=2 exchanges=2" \            "$P_CLI dtls=1 debug_level=1 read_timeout=100 exchanges=2" \            1 \            -c "discarding invalid record (mac)" \            -s "discarding invalid record (mac)" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK" \            -s "too many records with bad MAC" \            -s "Verification of the message MAC failed"run_test    "DTLS proxy: delay ChangeCipherSpec" \            -p "$P_PXY delay_ccs=1" \            "$P_SRV dtls=1 debug_level=1" \            "$P_CLI dtls=1 debug_level=1" \            0 \            -c "record from another epoch" \            -s "record from another epoch" \            -c "discarding invalid record" \            -s "discarding invalid record" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"# Tests for "randomly unreliable connection": try a variety of flows and peersclient_needs_more_time 2run_test    "DTLS proxy: 3d (drop, delay, duplicate), \"short\" PSK handshake" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \             psk=abc123" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \             force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \            0 \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 2run_test    "DTLS proxy: 3d, \"short\" RSA handshake" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 \             force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \            0 \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 2run_test    "DTLS proxy: 3d, \"short\" (no ticket, no cli_auth) FS handshake" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0" \            0 \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 2run_test    "DTLS proxy: 3d, FS, client auth" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=required" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0" \            0 \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 2run_test    "DTLS proxy: 3d, FS, ticket" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=1 auth_mode=none" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=1" \            0 \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 2run_test    "DTLS proxy: 3d, max handshake (FS, ticket + client auth)" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=1 auth_mode=required" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=1" \            0 \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 2run_test    "DTLS proxy: 3d, max handshake, nbio" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 nbio=2 tickets=1 \             auth_mode=required" \            "$P_CLI dtls=1 hs_timeout=250-10000 nbio=2 tickets=1" \            0 \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 4run_test    "DTLS proxy: 3d, min handshake, resumption" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \             psk=abc123 debug_level=3" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \             debug_level=3 reconnect=1 read_timeout=1000 max_resend=10 \             force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \            0 \            -s "a session has been resumed" \            -c "a session has been resumed" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 4run_test    "DTLS proxy: 3d, min handshake, resumption, nbio" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \             psk=abc123 debug_level=3 nbio=2" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \             debug_level=3 reconnect=1 read_timeout=1000 max_resend=10 \             force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8 nbio=2" \            0 \            -s "a session has been resumed" \            -c "a session has been resumed" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 4run_test    "DTLS proxy: 3d, min handshake, client-initiated renego" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \             psk=abc123 renegotiation=1 debug_level=2" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \             renegotiate=1 debug_level=2 \             force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \            0 \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 4run_test    "DTLS proxy: 3d, min handshake, client-initiated renego, nbio" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \             psk=abc123 renegotiation=1 debug_level=2" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \             renegotiate=1 debug_level=2 \             force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \            0 \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 4run_test    "DTLS proxy: 3d, min handshake, server-initiated renego" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \             psk=abc123 renegotiate=1 renegotiation=1 exchanges=4 \             debug_level=2" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \             renegotiation=1 exchanges=4 debug_level=2 \             force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \            0 \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 4run_test    "DTLS proxy: 3d, min handshake, server-initiated renego, nbio" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \             psk=abc123 renegotiate=1 renegotiation=1 exchanges=4 \             debug_level=2 nbio=2" \            "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \             renegotiation=1 exchanges=4 debug_level=2 nbio=2 \             force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \            0 \            -c "=> renegotiate" \            -s "=> renegotiate" \            -s "Extra-header:" \            -c "HTTP/1.0 200 OK"client_needs_more_time 6not_with_valgrind # risk of non-mbedtls peer timing outrun_test    "DTLS proxy: 3d, openssl server" \            -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \            "$O_SRV -dtls1 -mtu 2048" \            "$P_CLI dtls=1 hs_timeout=250-60000 tickets=0" \            0 \            -c "HTTP/1.0 200 OK"client_needs_more_time 8not_with_valgrind # risk of non-mbedtls peer timing outrun_test    "DTLS proxy: 3d, openssl server, fragmentation" \            -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \            "$O_SRV -dtls1 -mtu 768" \            "$P_CLI dtls=1 hs_timeout=250-60000 tickets=0" \            0 \            -c "HTTP/1.0 200 OK"client_needs_more_time 8not_with_valgrind # risk of non-mbedtls peer timing outrun_test    "DTLS proxy: 3d, openssl server, fragmentation, nbio" \            -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \            "$O_SRV -dtls1 -mtu 768" \            "$P_CLI dtls=1 hs_timeout=250-60000 nbio=2 tickets=0" \            0 \            -c "HTTP/1.0 200 OK"requires_gnutlsclient_needs_more_time 6not_with_valgrind # risk of non-mbedtls peer timing outrun_test    "DTLS proxy: 3d, gnutls server" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$G_SRV -u --mtu 2048 -a" \            "$P_CLI dtls=1 hs_timeout=250-60000" \            0 \            -s "Extra-header:" \            -c "Extra-header:"requires_gnutlsclient_needs_more_time 8not_with_valgrind # risk of non-mbedtls peer timing outrun_test    "DTLS proxy: 3d, gnutls server, fragmentation" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$G_SRV -u --mtu 512" \            "$P_CLI dtls=1 hs_timeout=250-60000" \            0 \            -s "Extra-header:" \            -c "Extra-header:"requires_gnutlsclient_needs_more_time 8not_with_valgrind # risk of non-mbedtls peer timing outrun_test    "DTLS proxy: 3d, gnutls server, fragmentation, nbio" \            -p "$P_PXY drop=5 delay=5 duplicate=5" \            "$G_SRV -u --mtu 512" \            "$P_CLI dtls=1 hs_timeout=250-60000 nbio=2" \            0 \            -s "Extra-header:" \            -c "Extra-header:"# Final reportecho "------------------------------------------------------------------------"if [ $FAILS = 0 ]; then    printf "PASSED"else    printf "FAILED"fiPASSES=$(( $TESTS - $FAILS ))echo " ($PASSES / $TESTS tests ($SKIPS skipped))"exit $FAILS
 |