1*e0c4386eSCy Schubert# -*- mode: perl; -*- 2*e0c4386eSCy Schubert# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. 3*e0c4386eSCy Schubert# 4*e0c4386eSCy Schubert# Licensed under the Apache License 2.0 (the "License"). You may not use 5*e0c4386eSCy Schubert# this file except in compliance with the License. You can obtain a copy 6*e0c4386eSCy Schubert# in the file LICENSE in the source distribution or at 7*e0c4386eSCy Schubert# https://www.openssl.org/source/license.html 8*e0c4386eSCy Schubert 9*e0c4386eSCy Schubert 10*e0c4386eSCy Schubert## Test Renegotiation 11*e0c4386eSCy Schubert 12*e0c4386eSCy Schubertuse strict; 13*e0c4386eSCy Schubertuse warnings; 14*e0c4386eSCy Schubert 15*e0c4386eSCy Schubertpackage ssltests; 16*e0c4386eSCy Schubertuse OpenSSL::Test::Utils; 17*e0c4386eSCy Schubert 18*e0c4386eSCy Schubertour $fips_mode; 19*e0c4386eSCy Schubert 20*e0c4386eSCy Schubertour @tests = (); 21*e0c4386eSCy Schubert 22*e0c4386eSCy Schubertforeach my $sctp ("No", "Yes") 23*e0c4386eSCy Schubert{ 24*e0c4386eSCy Schubert next if disabled("sctp") && $sctp eq "Yes"; 25*e0c4386eSCy Schubert next if disabled("dtls1_2") && $fips_mode; 26*e0c4386eSCy Schubert 27*e0c4386eSCy Schubert my $suffix = ($sctp eq "No") ? "" : "-sctp"; 28*e0c4386eSCy Schubert our @tests_basic = ( 29*e0c4386eSCy Schubert { 30*e0c4386eSCy Schubert name => "renegotiate-client-no-resume".$suffix, 31*e0c4386eSCy Schubert server => { 32*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0', 33*e0c4386eSCy Schubert "Options" => "NoResumptionOnRenegotiation" 34*e0c4386eSCy Schubert }, 35*e0c4386eSCy Schubert client => { 36*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 37*e0c4386eSCy Schubert }, 38*e0c4386eSCy Schubert test => { 39*e0c4386eSCy Schubert "Method" => "DTLS", 40*e0c4386eSCy Schubert "UseSCTP" => $sctp, 41*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateClient", 42*e0c4386eSCy Schubert "ResumptionExpected" => "No", 43*e0c4386eSCy Schubert "ExpectedResult" => "Success" 44*e0c4386eSCy Schubert } 45*e0c4386eSCy Schubert }, 46*e0c4386eSCy Schubert { 47*e0c4386eSCy Schubert name => "renegotiate-client-resume".$suffix, 48*e0c4386eSCy Schubert server => { 49*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 50*e0c4386eSCy Schubert }, 51*e0c4386eSCy Schubert client => { 52*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 53*e0c4386eSCy Schubert }, 54*e0c4386eSCy Schubert test => { 55*e0c4386eSCy Schubert "Method" => "DTLS", 56*e0c4386eSCy Schubert "UseSCTP" => $sctp, 57*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateClient", 58*e0c4386eSCy Schubert "ResumptionExpected" => "Yes", 59*e0c4386eSCy Schubert "ExpectedResult" => "Success" 60*e0c4386eSCy Schubert } 61*e0c4386eSCy Schubert }, 62*e0c4386eSCy Schubert # Note: Unlike the TLS tests, we will never do resumption with server 63*e0c4386eSCy Schubert # initiated reneg. This is because an OpenSSL DTLS client will always do a full 64*e0c4386eSCy Schubert # handshake (i.e. it doesn't supply a session id) when it receives a 65*e0c4386eSCy Schubert # HelloRequest. This is different to the OpenSSL TLS implementation where an 66*e0c4386eSCy Schubert # OpenSSL client will always try an abbreviated handshake (i.e. it will supply 67*e0c4386eSCy Schubert # the session id). This goes all the way to commit 48ae85b6f when abbreviated 68*e0c4386eSCy Schubert # handshake support was first added. Neither behaviour is wrong, but the 69*e0c4386eSCy Schubert # discrepancy is strange. TODO: Should we harmonise the TLS and DTLS behaviour, 70*e0c4386eSCy Schubert # and if so, what to? 71*e0c4386eSCy Schubert { 72*e0c4386eSCy Schubert name => "renegotiate-server-resume".$suffix, 73*e0c4386eSCy Schubert server => { 74*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 75*e0c4386eSCy Schubert }, 76*e0c4386eSCy Schubert client => { 77*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 78*e0c4386eSCy Schubert }, 79*e0c4386eSCy Schubert test => { 80*e0c4386eSCy Schubert "Method" => "DTLS", 81*e0c4386eSCy Schubert "UseSCTP" => $sctp, 82*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateServer", 83*e0c4386eSCy Schubert "ResumptionExpected" => "No", 84*e0c4386eSCy Schubert "ExpectedResult" => "Success" 85*e0c4386eSCy Schubert } 86*e0c4386eSCy Schubert }, 87*e0c4386eSCy Schubert { 88*e0c4386eSCy Schubert name => "renegotiate-client-auth-require".$suffix, 89*e0c4386eSCy Schubert server => { 90*e0c4386eSCy Schubert "VerifyCAFile" => test_pem("root-cert.pem"), 91*e0c4386eSCy Schubert "VerifyMode" => "Require", 92*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 93*e0c4386eSCy Schubert }, 94*e0c4386eSCy Schubert client => { 95*e0c4386eSCy Schubert "Certificate" => test_pem("ee-client-chain.pem"), 96*e0c4386eSCy Schubert "PrivateKey" => test_pem("ee-key.pem"), 97*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 98*e0c4386eSCy Schubert }, 99*e0c4386eSCy Schubert test => { 100*e0c4386eSCy Schubert "Method" => "DTLS", 101*e0c4386eSCy Schubert "UseSCTP" => $sctp, 102*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateServer", 103*e0c4386eSCy Schubert "ResumptionExpected" => "No", 104*e0c4386eSCy Schubert "ExpectedResult" => "Success" 105*e0c4386eSCy Schubert } 106*e0c4386eSCy Schubert }, 107*e0c4386eSCy Schubert { 108*e0c4386eSCy Schubert name => "renegotiate-client-auth-once".$suffix, 109*e0c4386eSCy Schubert server => { 110*e0c4386eSCy Schubert "VerifyCAFile" => test_pem("root-cert.pem"), 111*e0c4386eSCy Schubert "VerifyMode" => "Once", 112*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 113*e0c4386eSCy Schubert }, 114*e0c4386eSCy Schubert client => { 115*e0c4386eSCy Schubert "Certificate" => test_pem("ee-client-chain.pem"), 116*e0c4386eSCy Schubert "PrivateKey" => test_pem("ee-key.pem"), 117*e0c4386eSCy Schubert "CipherString" => 'DEFAULT:@SECLEVEL=0' 118*e0c4386eSCy Schubert }, 119*e0c4386eSCy Schubert test => { 120*e0c4386eSCy Schubert "Method" => "DTLS", 121*e0c4386eSCy Schubert "UseSCTP" => $sctp, 122*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateServer", 123*e0c4386eSCy Schubert "ResumptionExpected" => "No", 124*e0c4386eSCy Schubert "ExpectedResult" => "Success" 125*e0c4386eSCy Schubert } 126*e0c4386eSCy Schubert } 127*e0c4386eSCy Schubert ); 128*e0c4386eSCy Schubert push @tests, @tests_basic; 129*e0c4386eSCy Schubert 130*e0c4386eSCy Schubert next if disabled("dtls1_2"); 131*e0c4386eSCy Schubert our @tests_dtls1_2 = ( 132*e0c4386eSCy Schubert { 133*e0c4386eSCy Schubert name => "renegotiate-aead-to-non-aead".$suffix, 134*e0c4386eSCy Schubert server => { 135*e0c4386eSCy Schubert "Options" => "NoResumptionOnRenegotiation" 136*e0c4386eSCy Schubert }, 137*e0c4386eSCy Schubert client => { 138*e0c4386eSCy Schubert "CipherString" => "AES128-GCM-SHA256", 139*e0c4386eSCy Schubert extra => { 140*e0c4386eSCy Schubert "RenegotiateCiphers" => "AES128-SHA" 141*e0c4386eSCy Schubert } 142*e0c4386eSCy Schubert }, 143*e0c4386eSCy Schubert test => { 144*e0c4386eSCy Schubert "Method" => "DTLS", 145*e0c4386eSCy Schubert "UseSCTP" => $sctp, 146*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateClient", 147*e0c4386eSCy Schubert "ResumptionExpected" => "No", 148*e0c4386eSCy Schubert "ExpectedResult" => "Success" 149*e0c4386eSCy Schubert } 150*e0c4386eSCy Schubert }, 151*e0c4386eSCy Schubert { 152*e0c4386eSCy Schubert name => "renegotiate-non-aead-to-aead".$suffix, 153*e0c4386eSCy Schubert server => { 154*e0c4386eSCy Schubert "Options" => "NoResumptionOnRenegotiation" 155*e0c4386eSCy Schubert }, 156*e0c4386eSCy Schubert client => { 157*e0c4386eSCy Schubert "CipherString" => "AES128-SHA", 158*e0c4386eSCy Schubert extra => { 159*e0c4386eSCy Schubert "RenegotiateCiphers" => "AES128-GCM-SHA256" 160*e0c4386eSCy Schubert } 161*e0c4386eSCy Schubert }, 162*e0c4386eSCy Schubert test => { 163*e0c4386eSCy Schubert "Method" => "DTLS", 164*e0c4386eSCy Schubert "UseSCTP" => $sctp, 165*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateClient", 166*e0c4386eSCy Schubert "ResumptionExpected" => "No", 167*e0c4386eSCy Schubert "ExpectedResult" => "Success" 168*e0c4386eSCy Schubert } 169*e0c4386eSCy Schubert }, 170*e0c4386eSCy Schubert { 171*e0c4386eSCy Schubert name => "renegotiate-non-aead-to-non-aead".$suffix, 172*e0c4386eSCy Schubert server => { 173*e0c4386eSCy Schubert "Options" => "NoResumptionOnRenegotiation" 174*e0c4386eSCy Schubert }, 175*e0c4386eSCy Schubert client => { 176*e0c4386eSCy Schubert "CipherString" => "AES128-SHA", 177*e0c4386eSCy Schubert extra => { 178*e0c4386eSCy Schubert "RenegotiateCiphers" => "AES256-SHA" 179*e0c4386eSCy Schubert } 180*e0c4386eSCy Schubert }, 181*e0c4386eSCy Schubert test => { 182*e0c4386eSCy Schubert "Method" => "DTLS", 183*e0c4386eSCy Schubert "UseSCTP" => $sctp, 184*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateClient", 185*e0c4386eSCy Schubert "ResumptionExpected" => "No", 186*e0c4386eSCy Schubert "ExpectedResult" => "Success" 187*e0c4386eSCy Schubert } 188*e0c4386eSCy Schubert }, 189*e0c4386eSCy Schubert { 190*e0c4386eSCy Schubert name => "renegotiate-aead-to-aead".$suffix, 191*e0c4386eSCy Schubert server => { 192*e0c4386eSCy Schubert "Options" => "NoResumptionOnRenegotiation" 193*e0c4386eSCy Schubert }, 194*e0c4386eSCy Schubert client => { 195*e0c4386eSCy Schubert "CipherString" => "AES128-GCM-SHA256", 196*e0c4386eSCy Schubert extra => { 197*e0c4386eSCy Schubert "RenegotiateCiphers" => "AES256-GCM-SHA384" 198*e0c4386eSCy Schubert } 199*e0c4386eSCy Schubert }, 200*e0c4386eSCy Schubert test => { 201*e0c4386eSCy Schubert "Method" => "DTLS", 202*e0c4386eSCy Schubert "UseSCTP" => $sctp, 203*e0c4386eSCy Schubert "HandshakeMode" => "RenegotiateClient", 204*e0c4386eSCy Schubert "ResumptionExpected" => "No", 205*e0c4386eSCy Schubert "ExpectedResult" => "Success" 206*e0c4386eSCy Schubert } 207*e0c4386eSCy Schubert }, 208*e0c4386eSCy Schubert ); 209*e0c4386eSCy Schubert push @tests, @tests_dtls1_2; 210*e0c4386eSCy Schubert} 211