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