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