1d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Copyright (c) 2014, Google Inc.
2d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
3d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Permission to use, copy, modify, and/or distribute this software for any
4d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * purpose with or without fee is hereby granted, provided that the above
5d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * copyright notice and this permission notice appear in all copies.
6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *
7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifndef HEADER_TEST_CONFIG
16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define HEADER_TEST_CONFIG
17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <string>
19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
21d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystruct TestConfig {
22e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  int port = 0;
23e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool is_server = false;
24e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool is_dtls = false;
25e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool resume = false;
26e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool fallback_scsv = false;
27b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  std::string digest_prefs;
28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string key_file;
29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string cert_file;
30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string expected_server_name;
31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string expected_certificate_types;
32e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool require_any_client_certificate = false;
33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string advertise_npn;
34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string expected_next_proto;
35e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool false_start = false;
36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string select_next_proto;
37e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool async = false;
38e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool write_different_record_sizes = false;
39e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool cbc_record_splitting = false;
40e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool partial_write = false;
41e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool no_tls12 = false;
42e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool no_tls11 = false;
43e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool no_tls1 = false;
44e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool no_ssl3 = false;
45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string expected_channel_id;
46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string send_channel_id;
47e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool shim_writes_first = false;
48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string host_name;
49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string advertise_alpn;
50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string expected_alpn;
51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string expected_advertised_alpn;
52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string select_alpn;
53e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool expect_session_miss = false;
54e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool expect_extended_master_secret = false;
55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string psk;
56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string psk_identity;
57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string srtp_profiles;
58e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool enable_ocsp_stapling = false;
59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string expected_ocsp_response;
60e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool enable_signed_cert_timestamps = false;
61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley  std::string expected_signed_cert_timestamps;
62e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  int min_version = 0;
63e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  int max_version = 0;
64e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  int mtu = 0;
65e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool implicit_handshake = false;
66e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool use_early_callback = false;
67e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool fail_early_callback = false;
68e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool install_ddos_callback = false;
69e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool fail_ddos_callback = false;
70e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool fail_second_ddos_callback = false;
71e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  std::string cipher;
72b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  std::string cipher_tls10;
73b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  std::string cipher_tls11;
74e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool handshake_never_done = false;
75e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  int export_keying_material = 0;
76e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  std::string export_label;
77e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  std::string export_context;
78e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  bool use_export_context = false;
79f4e427204234da139fd0585def4b4e22502e33f0Adam Langley  bool tls_unique = false;
80b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool expect_ticket_renewal = false;
81b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool expect_no_session = false;
82b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool use_ticket_callback = false;
83b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool renew_ticket = false;
84b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool enable_client_custom_extension = false;
85b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool enable_server_custom_extension = false;
86b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool custom_extension_skip = false;
87b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool custom_extension_fail_add = false;
88b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  std::string ocsp_response;
89b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool check_close_notify = false;
90b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool shim_shuts_down = false;
91b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool verify_fail = false;
92b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool verify_peer = false;
93b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  bool expect_verify_result = false;
94b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root  std::string signed_cert_timestamps;
95e99801b603dea8893dcc61c70b327ef2d00b652cKenny Root  int expect_total_renegotiations = 0;
96e99801b603dea8893dcc61c70b327ef2d00b652cKenny Root  bool renegotiate_once = false;
97e99801b603dea8893dcc61c70b327ef2d00b652cKenny Root  bool renegotiate_freely = false;
98fad6327e4112082b1e77e89a995723f26bd5a9aaAdam Langley  bool renegotiate_ignore = false;
99e99801b603dea8893dcc61c70b327ef2d00b652cKenny Root  bool disable_npn = false;
100fad6327e4112082b1e77e89a995723f26bd5a9aaAdam Langley  int expect_server_key_exchange_hash = 0;
1014139edb02e59e7ad48e0a8f4c02e45923bc8a344Adam Langley  bool p384_only = false;
1024139edb02e59e7ad48e0a8f4c02e45923bc8a344Adam Langley  bool enable_all_curves = false;
1034139edb02e59e7ad48e0a8f4c02e45923bc8a344Adam Langley  bool use_sparse_dh_prime = false;
1044139edb02e59e7ad48e0a8f4c02e45923bc8a344Adam Langley  int expect_key_exchange_info = 0;
105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley};
106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
107d9e397b599b13d642138480a28c14db7a136bf0Adam Langleybool ParseConfig(int argc, char **argv, TestConfig *out_config);
108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif  // HEADER_TEST_CONFIG
111