1  /*
2   * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
3   *
4   * Licensed under the Apache License 2.0 (the "License").  You may not use
5   * this file except in compliance with the License.  You can obtain a copy
6   * in the file LICENSE in the source distribution or at
7   * https://www.openssl.org/source/license.html
8   */
9  
10  #ifndef OSSL_TEST_HANDSHAKE_HELPER_H
11  #define OSSL_TEST_HANDSHAKE_HELPER_H
12  
13  #include "ssl_test_ctx.h"
14  
15  typedef struct ctx_data_st {
16      unsigned char *npn_protocols;
17      size_t npn_protocols_len;
18      unsigned char *alpn_protocols;
19      size_t alpn_protocols_len;
20      char *srp_user;
21      char *srp_password;
22      char *session_ticket_app_data;
23  } CTX_DATA;
24  
25  typedef struct handshake_result {
26      ssl_test_result_t result;
27      /* These alerts are in the 2-byte format returned by the info_callback. */
28      /* (Latest) alert sent by the client; 0 if no alert. */
29      int client_alert_sent;
30      /* Number of fatal or close_notify alerts sent. */
31      int client_num_fatal_alerts_sent;
32      /* (Latest) alert received by the server; 0 if no alert. */
33      int client_alert_received;
34      /* (Latest) alert sent by the server; 0 if no alert. */
35      int server_alert_sent;
36      /* Number of fatal or close_notify alerts sent. */
37      int server_num_fatal_alerts_sent;
38      /* (Latest) alert received by the client; 0 if no alert. */
39      int server_alert_received;
40      /* Negotiated protocol. On success, these should always match. */
41      int server_protocol;
42      int client_protocol;
43      /* Server connection */
44      ssl_servername_t servername;
45      /* Session ticket status */
46      ssl_session_ticket_t session_ticket;
47      int compression;
48      /* Was this called on the second context? */
49      int session_ticket_do_not_call;
50      char *client_npn_negotiated;
51      char *server_npn_negotiated;
52      char *client_alpn_negotiated;
53      char *server_alpn_negotiated;
54      /* Was the handshake resumed? */
55      int client_resumed;
56      int server_resumed;
57      /* Temporary key type */
58      int tmp_key_type;
59      /* server certificate key type */
60      int server_cert_type;
61      /* server signing hash */
62      int server_sign_hash;
63      /* server signature type */
64      int server_sign_type;
65      /* server CA names */
66      STACK_OF(X509_NAME) *server_ca_names;
67      /* client certificate key type */
68      int client_cert_type;
69      /* client signing hash */
70      int client_sign_hash;
71      /* client signature type */
72      int client_sign_type;
73      /* Client CA names */
74      STACK_OF(X509_NAME) *client_ca_names;
75      /* Session id status */
76      ssl_session_id_t session_id;
77      char *cipher;
78      /* session ticket application data */
79      char *result_session_ticket_app_data;
80  } HANDSHAKE_RESULT;
81  
82  HANDSHAKE_RESULT *HANDSHAKE_RESULT_new(void);
83  void HANDSHAKE_RESULT_free(HANDSHAKE_RESULT *result);
84  
85  /* Do a handshake and report some information about the result. */
86  HANDSHAKE_RESULT *do_handshake(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
87                                 SSL_CTX *client_ctx, SSL_CTX *resume_server_ctx,
88                                 SSL_CTX *resume_client_ctx,
89                                 const SSL_TEST_CTX *test_ctx);
90  
91  int configure_handshake_ctx_for_srp(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
92                                      SSL_CTX *client_ctx,
93                                      const SSL_TEST_EXTRA_CONF *extra,
94                                      CTX_DATA *server_ctx_data,
95                                      CTX_DATA *server2_ctx_data,
96                                      CTX_DATA *client_ctx_data);
97  
98  #endif  /* OSSL_TEST_HANDSHAKE_HELPER_H */
99