1e1051a39Sopenharmony_ci# -*- mode: perl; -*- 2e1051a39Sopenharmony_ci# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci# 4e1051a39Sopenharmony_ci# Licensed under the Apache License 2.0 (the "License"). You may not use 5e1051a39Sopenharmony_ci# this file except in compliance with the License. You can obtain a copy 6e1051a39Sopenharmony_ci# in the file LICENSE in the source distribution or at 7e1051a39Sopenharmony_ci# https://www.openssl.org/source/license.html 8e1051a39Sopenharmony_ci 9e1051a39Sopenharmony_ci 10e1051a39Sopenharmony_ci## Test SNI/Session tickets 11e1051a39Sopenharmony_ci 12e1051a39Sopenharmony_ciuse strict; 13e1051a39Sopenharmony_ciuse warnings; 14e1051a39Sopenharmony_ci 15e1051a39Sopenharmony_cipackage ssltests; 16e1051a39Sopenharmony_ci 17e1051a39Sopenharmony_ci 18e1051a39Sopenharmony_ciour @tests = (); 19e1051a39Sopenharmony_ci 20e1051a39Sopenharmony_ci#Note: MaxProtocol is set to TLSv1.2 as session tickets work differently in 21e1051a39Sopenharmony_ci#TLSv1.3. 22e1051a39Sopenharmony_cisub generate_tests() { 23e1051a39Sopenharmony_ci foreach my $c ("SessionTicket", "-SessionTicket") { 24e1051a39Sopenharmony_ci foreach my $s1 ("SessionTicket", "-SessionTicket") { 25e1051a39Sopenharmony_ci foreach my $s2 ("SessionTicket", "-SessionTicket") { 26e1051a39Sopenharmony_ci foreach my $n ("server1", "server2") { 27e1051a39Sopenharmony_ci my $ticket_result = expected_result($c, $s1, $s2, $n); 28e1051a39Sopenharmony_ci my $session_id_result = "Yes"; # always, even with a ticket 29e1051a39Sopenharmony_ci push @tests, { 30e1051a39Sopenharmony_ci "name" => "sni-session-ticket", 31e1051a39Sopenharmony_ci "client" => { 32e1051a39Sopenharmony_ci "Options" => $c, 33e1051a39Sopenharmony_ci "extra" => { 34e1051a39Sopenharmony_ci "ServerName" => $n, 35e1051a39Sopenharmony_ci }, 36e1051a39Sopenharmony_ci "MaxProtocol" => "TLSv1.2" 37e1051a39Sopenharmony_ci }, 38e1051a39Sopenharmony_ci "server" => { 39e1051a39Sopenharmony_ci "Options" => $s1, 40e1051a39Sopenharmony_ci "extra" => { 41e1051a39Sopenharmony_ci # We don't test mismatch here. 42e1051a39Sopenharmony_ci "ServerNameCallback" => "IgnoreMismatch", 43e1051a39Sopenharmony_ci }, 44e1051a39Sopenharmony_ci }, 45e1051a39Sopenharmony_ci "server2" => { 46e1051a39Sopenharmony_ci "Options" => $s2, 47e1051a39Sopenharmony_ci }, 48e1051a39Sopenharmony_ci "test" => { 49e1051a39Sopenharmony_ci "ExpectedServerName" => $n, 50e1051a39Sopenharmony_ci "ExpectedResult" => "Success", 51e1051a39Sopenharmony_ci "SessionIdExpected" => $session_id_result, 52e1051a39Sopenharmony_ci "SessionTicketExpected" => $ticket_result, 53e1051a39Sopenharmony_ci } 54e1051a39Sopenharmony_ci }; 55e1051a39Sopenharmony_ci } 56e1051a39Sopenharmony_ci } 57e1051a39Sopenharmony_ci } 58e1051a39Sopenharmony_ci } 59e1051a39Sopenharmony_ci} 60e1051a39Sopenharmony_ci 61e1051a39Sopenharmony_ci# If the client has session tickets disabled, then No support 62e1051a39Sopenharmony_ci# If the server initial_ctx has session tickets disabled, then No support 63e1051a39Sopenharmony_ci# If SNI is in use, then if the "switched-to" context has session tickets disabled, 64e1051a39Sopenharmony_ci# then No support 65e1051a39Sopenharmony_cisub expected_result { 66e1051a39Sopenharmony_ci my ($c, $s1, $s2, $n) = @_; 67e1051a39Sopenharmony_ci 68e1051a39Sopenharmony_ci return "No" if $c eq "-SessionTicket"; 69e1051a39Sopenharmony_ci return "No" if $s1 eq "-SessionTicket"; 70e1051a39Sopenharmony_ci return "No" if ($s2 eq "-SessionTicket" && $n eq "server2"); 71e1051a39Sopenharmony_ci 72e1051a39Sopenharmony_ci return "Yes"; 73e1051a39Sopenharmony_ci 74e1051a39Sopenharmony_ci} 75e1051a39Sopenharmony_ci 76e1051a39Sopenharmony_ci# Add a "Broken" case. 77e1051a39Sopenharmony_cipush @tests, { 78e1051a39Sopenharmony_ci "name" => "sni-session-ticket", 79e1051a39Sopenharmony_ci "client" => { 80e1051a39Sopenharmony_ci "MaxProtocol" => "TLSv1.2", 81e1051a39Sopenharmony_ci "Options" => "SessionTicket", 82e1051a39Sopenharmony_ci "extra" => { 83e1051a39Sopenharmony_ci "ServerName" => "server1", 84e1051a39Sopenharmony_ci } 85e1051a39Sopenharmony_ci }, 86e1051a39Sopenharmony_ci "server" => { 87e1051a39Sopenharmony_ci "Options" => "SessionTicket", 88e1051a39Sopenharmony_ci "extra" => { 89e1051a39Sopenharmony_ci "BrokenSessionTicket" => "Yes", 90e1051a39Sopenharmony_ci }, 91e1051a39Sopenharmony_ci }, 92e1051a39Sopenharmony_ci "server2" => { 93e1051a39Sopenharmony_ci "Options" => "SessionTicket", 94e1051a39Sopenharmony_ci }, 95e1051a39Sopenharmony_ci "test" => { 96e1051a39Sopenharmony_ci "ExpectedResult" => "Success", 97e1051a39Sopenharmony_ci "SessionTicketExpected" => "No", 98e1051a39Sopenharmony_ci } 99e1051a39Sopenharmony_ci}; 100e1051a39Sopenharmony_ci 101e1051a39Sopenharmony_cigenerate_tests(); 102