Go to the documentation of this file.
155 #include "../crypto/internal.h"
157 #if defined(OPENSSL_WINDOWS)
158 #include <sys/timeb.h>
160 #include <sys/socket.h>
161 #include <sys/time.h>
180 "alert reason code mismatch");
237 auto ret = ssl->
method->open_handshake(ssl, out_consumed, out_alert,
in);
253 ssl->
method->open_change_cipher_spec(ssl, out_consumed, out_alert,
in);
261 size_t *out_consumed,
uint8_t *out_alert,
268 auto ret = ssl->
method->open_app_data(ssl,
out, out_consumed, out_alert,
in);
276 static const char hextable[] =
"0123456789abcdef";
293 if (ssl->
ctx->keylog_callback == NULL) {
300 secret.
size() * 2 + 1) ||
312 ssl->
ctx->keylog_callback(ssl,
reinterpret_cast<const char *
>(
line.data()));
320 }
else if (ssl->
ctx->info_callback != NULL) {
321 cb = ssl->
ctx->info_callback;
338 switch (content_type) {
362 if (
ctx->current_time_cb != NULL) {
366 ctx->current_time_cb(
nullptr , &clock);
378 #if defined(BORINGSSL_UNSAFE_DETERMINISTIC_MODE)
381 #elif defined(OPENSSL_WINDOWS)
389 out_clock->
tv_sec = time.time;
390 out_clock->
tv_usec = time.millitm * 1000;
394 gettimeofday(&clock, NULL);
415 if (ssl->
s3->have_version &&
434 return ssl->
s3->total_renegotiations == 0;
442 if (ssl->
s3->hs !=
nullptr ||
444 !ssl->
config->shed_handshake_config ||
456 ssl->
config->handoff = on;
467 if (!ssl->
s3->initial_handshake_complete) {
473 ssl->
s3->read_traffic_secret, ssl->
s3->read_traffic_secret_len);
475 ssl->
s3->write_traffic_secret, ssl->
s3->write_traffic_secret_len);
482 using namespace bssl;
500 if (
a->session_id_length !=
b->session_id_length) {
510 retain_only_sha256_of_client_certs(
false),
511 quiet_shutdown(
false),
512 ocsp_stapling_enabled(
false),
513 signed_cert_timestamps_enabled(
false),
514 channel_id_enabled(
false),
515 grease_enabled(
false),
516 permute_extensions(
false),
517 allow_unknown_alpn_protos(
false),
518 false_start_allowed_without_alpn(
false),
520 enable_early_data(
false) {
534 lh_SSL_SESSION_free(sessions);
544 UniquePtr<SSL_CTX>
ret = MakeUnique<SSL_CTX>(
method);
549 ret->cert = MakeUnique<CERT>(
method->x509_method);
552 if (
ret->cert ==
nullptr ||
553 ret->sessions ==
nullptr ||
554 ret->client_CA ==
nullptr ||
555 !
ret->x509_method->ssl_ctx_new(
ret.get())) {
568 return ret.release();
588 max_send_fragment(ctx_arg->max_send_fragment),
589 msg_callback(ctx_arg->msg_callback),
590 msg_callback_arg(ctx_arg->msg_callback_arg),
592 session_ctx(UpRef(ctx_arg)),
595 max_cert_list(
ctx->max_cert_list),
597 quiet_shutdown(
ctx->quiet_shutdown),
598 enable_early_data(
ctx->enable_early_data) {
612 if (
ctx ==
nullptr) {
617 UniquePtr<SSL> ssl = MakeUnique<SSL>(
ctx);
618 if (ssl ==
nullptr) {
622 ssl->config = MakeUnique<SSL_CONFIG>(ssl.get());
623 if (ssl->config ==
nullptr) {
626 ssl->config->conf_min_version =
ctx->conf_min_version;
627 ssl->config->conf_max_version =
ctx->conf_max_version;
630 if (ssl->config->cert ==
nullptr) {
634 ssl->config->verify_mode =
ctx->verify_mode;
635 ssl->config->verify_callback =
ctx->default_verify_callback;
636 ssl->config->custom_verify_callback =
ctx->custom_verify_callback;
637 ssl->config->retain_only_sha256_of_client_certs =
638 ctx->retain_only_sha256_of_client_certs;
639 ssl->config->permute_extensions =
ctx->permute_extensions;
641 if (!ssl->config->supported_group_list.CopyFrom(
ctx->supported_group_list) ||
642 !ssl->config->alpn_client_proto_list.CopyFrom(
643 ctx->alpn_client_proto_list) ||
644 !ssl->config->verify_sigalgs.CopyFrom(
ctx->verify_sigalgs)) {
648 if (
ctx->psk_identity_hint) {
649 ssl->config->psk_identity_hint.reset(
651 if (ssl->config->psk_identity_hint ==
nullptr) {
655 ssl->config->psk_client_callback =
ctx->psk_client_callback;
656 ssl->config->psk_server_callback =
ctx->psk_server_callback;
658 ssl->config->channel_id_enabled =
ctx->channel_id_enabled;
659 ssl->config->channel_id_private = UpRef(
ctx->channel_id_private);
661 ssl->config->signed_cert_timestamps_enabled =
662 ctx->signed_cert_timestamps_enabled;
663 ssl->config->ocsp_stapling_enabled =
ctx->ocsp_stapling_enabled;
664 ssl->config->handoff =
ctx->handoff;
665 ssl->quic_method =
ctx->quic_method;
667 if (!ssl->method->ssl_new(ssl.get()) ||
668 !ssl->ctx->x509_method->ssl_new(ssl->s3->hs.get())) {
672 return ssl.release();
677 ech_grease_enabled(
false),
678 signed_cert_timestamps_enabled(
false),
679 ocsp_stapling_enabled(
false),
680 channel_id_enabled(
false),
681 enforce_rsa_key_usage(
false),
682 retain_only_sha256_of_client_certs(
false),
684 shed_handshake_config(
false),
685 jdk11_workaround(
false),
686 quic_use_legacy_codepoint(
false),
687 permute_extensions(
false) {
692 if (
ssl->
ctx !=
nullptr) {
693 ssl->
ctx->x509_method->ssl_config_free(
this);
712 ssl->
rbio.reset(rbio);
716 ssl->
wbio.reset(wbio);
730 if (rbio != NULL && rbio == wbio) {
758 enum ssl_encryption_level_t
level) {
761 static const size_t kDefaultLimit = 16384;
765 return kDefaultLimit;
784 return kDefaultLimit;
789 return kDefaultLimit;
796 return ssl->
s3->read_level;
800 return ssl->
s3->write_level;
810 if (
level != ssl->
s3->read_level) {
815 size_t new_len = (ssl->
s3->hs_buf ? ssl->
s3->hs_buf->length : 0) +
len;
840 bool early_return =
false;
898 ssl->
s3->renegotiate_pending =
true;
926 while (ssl->
method->get_message(ssl, &
msg)) {
932 ssl->
method->next_message(ssl);
951 while (ssl->
s3->pending_app_data.empty()) {
952 if (ssl->
s3->renegotiate_pending) {
973 if (ssl->
method->get_message(ssl, &
msg)) {
977 ssl->
s3->hs->can_early_read =
false;
986 ssl->
method->next_message(ssl);
993 &alert, ssl->
s3->read_buffer.span());
1000 assert(!ssl->
s3->pending_app_data.empty());
1001 ssl->
s3->key_update_count = 0;
1015 ssl->
s3->pending_app_data =
1016 ssl->
s3->pending_app_data.subspan(
static_cast<size_t>(
ret));
1017 if (ssl->
s3->pending_app_data.empty()) {
1018 ssl->
s3->read_buffer.DiscardConsumed();
1037 std::min(ssl->
s3->pending_app_data.size(),
static_cast<size_t>(
num));
1039 return static_cast<int>(
todo);
1056 bool needs_handshake =
false;
1070 ret = ssl->
method->write_app_data(ssl, &needs_handshake,
1072 }
while (needs_handshake);
1084 if (ssl->
ctx->quic_method !=
nullptr) {
1089 if (!ssl->
s3->initial_handshake_complete) {
1099 if (!ssl->
s3->key_update_pending &&
1138 }
else if (ssl->
s3->alert_dispatch) {
1140 if (ssl->
method->dispatch_alert(ssl) <= 0) {
1172 if (ssl->
s3->alert_dispatch) {
1174 ssl->
s3->send_alert[1] != alert) {
1179 return ssl->
method->dispatch_alert(ssl);
1186 size_t params_len) {
1187 return ssl->
config && ssl->
config->quic_transport_params.CopyFrom(
1193 size_t *out_params_len) {
1194 *out_params = ssl->
s3->peer_quic_transport_params.data();
1195 *out_params_len = ssl->
s3->peer_quic_transport_params.size();
1199 size_t context_len) {
1200 return ssl->
config && ssl->
config->quic_early_data_context.CopyFrom(
1205 ctx->enable_early_data = !!enabled;
1213 if (ssl->
s3->hs == NULL) {
1216 return ssl->
s3->hs->in_early_data;
1220 return ssl->
s3->early_data_accepted;
1237 ssl->
s3->wpend_pending =
false;
1241 return ssl->
s3->early_data_reason;
1253 return "protocol_version";
1255 return "peer_declined";
1257 return "no_session_offered";
1259 return "session_not_resumed";
1261 return "unsupported_for_session";
1263 return "hello_retry_request";
1265 return "alpn_mismatch";
1267 return "channel_id";
1269 return "ticket_age_skew";
1271 return "quic_parameter_mismatch";
1273 return "alps_mismatch";
1305 if (ret_code == 0) {
1315 switch (ssl->
s3->rwstate) {
1327 return ssl->
s3->rwstate;
1383 return "WANT_WRITE";
1385 return "WANT_X509_LOOKUP";
1389 return "ZERO_RETURN";
1391 return "WANT_CONNECT";
1393 return "WANT_ACCEPT";
1395 return "PENDING_SESSION";
1397 return "PENDING_CERTIFICATE";
1399 return "WANT_PRIVATE_KEY_OPERATION";
1401 return "PENDING_TICKET";
1403 return "EARLY_DATA_REJECTED";
1405 return "WANT_CERTIFICATE_VERIFY";
1411 return "WANT_RENEGOTIATE";
1413 return "HANDSHAKE_HINTS_READY";
1421 return ctx->options;
1426 return ctx->options;
1477 if (!ssl->
s3->initial_handshake_complete ||
1485 const uint8_t *finished = ssl->
s3->previous_client_finished;
1486 size_t finished_len = ssl->
s3->previous_client_finished_len;
1489 if (!ssl->
session->extended_master_secret) {
1492 finished = ssl->
s3->previous_server_finished;
1493 finished_len = ssl->
s3->previous_server_finished_len;
1496 *out_len = finished_len;
1497 if (finished_len > max_out) {
1506 size_t sid_ctx_len) {
1507 if (sid_ctx_len >
sizeof(cert->
sid_ctx)) {
1512 static_assert(
sizeof(cert->
sid_ctx) < 256,
"sid_ctx too large");
1519 size_t sid_ctx_len) {
1524 size_t sid_ctx_len) {
1537 *out_len = ssl->
config->cert->sid_ctx_length;
1538 return ssl->
config->cert->sid_ctx;
1620 if (out_len > in_len) {
1628 if (!ssl->
s3->initial_handshake_complete ||
1635 ssl->
s3->previous_server_finished_len);
1639 ssl->
s3->previous_client_finished_len);
1643 if (!ssl->
s3->initial_handshake_complete ||
1650 ssl->
s3->previous_client_finished_len);
1654 ssl->
s3->previous_server_finished_len);
1662 return ssl->
config->verify_mode;
1668 if (!ssl->
s3->have_version) {
1676 if (ssl->
s3->established_session != NULL) {
1677 return ssl->
s3->established_session->extended_master_secret;
1681 if (ssl->
s3->hs != NULL) {
1682 return ssl->
s3->hs->extended_master_secret;
1697 return static_cast<int>(ssl->
s3->pending_app_data.size());
1701 return SSL_pending(ssl) != 0 || !ssl->
s3->read_buffer.empty();
1706 ctx->cert->privatekey.get());
1714 ssl->
config->cert->privatekey.get());
1723 if (!ssl->
s3->renegotiate_pending) {
1740 if (!ssl->
s3->write_buffer.empty() ||
1747 if (ssl->
s3->hs !=
nullptr) {
1752 if (ssl->
s3->hs ==
nullptr) {
1756 ssl->
s3->renegotiate_pending =
false;
1757 ssl->
s3->total_renegotiations++;
1762 return SSL_in_init(ssl) && ssl->
s3->initial_handshake_complete;
1766 return ssl->
s3->total_renegotiations;
1770 return ctx->max_cert_list;
1792 if (max_send_fragment < 512) {
1793 max_send_fragment = 512;
1798 ctx->max_send_fragment = (
uint16_t)max_send_fragment;
1804 if (max_send_fragment < 512) {
1805 max_send_fragment = 512;
1824 if (!ssl->
s3->have_version) {
1828 ssl->
s3->send_connection_binding;
1833 return lh_SSL_SESSION_num_items(
ctx->sessions);
1837 unsigned long ret =
ctx->session_cache_size;
1838 ctx->session_cache_size =
size;
1843 return ctx->session_cache_size;
1847 int ret =
ctx->session_cache_mode;
1848 ctx->session_cache_mode =
mode;
1853 return ctx->session_cache_mode;
1873 MutexReadLock lock(&
ctx->lock);
1888 auto key = MakeUnique<TicketKey>();
1898 key->next_rotation_tv_sec = 0;
1900 ctx->ticket_key_prev.reset();
1940 if (session == NULL) {
1956 return ctx->cipher_list->ciphers.get();
1963 return ctx->cipher_list->in_group_flags[
i];
1970 if (ssl->
config == NULL) {
1975 return ssl->
config->cipher_list ? ssl->
config->cipher_list->ciphers.get()
1976 : ssl->
ctx->cipher_list->ciphers.get();
2032 return ssl->
s3->hostname.get();
2060 ctx->signed_cert_timestamps_enabled =
true;
2067 ssl->
config->signed_cert_timestamps_enabled =
true;
2071 ctx->ocsp_stapling_enabled =
true;
2078 ssl->
config->ocsp_stapling_enabled =
true;
2109 if (
name ==
nullptr) {
2133 ctx->servername_arg =
arg;
2138 unsigned peer_len,
const uint8_t *supported,
2139 unsigned supported_len) {
2144 for (
unsigned i = 0;
i < peer_len;) {
2145 for (
unsigned j = 0; j < supported_len;) {
2146 if (peer[
i] == supported[j] &&
2171 unsigned *out_len) {
2172 *out_data = ssl->
s3->next_proto_negotiated.data();
2173 *out_len = ssl->
s3->next_proto_negotiated.size();
2180 ctx->next_protos_advertised_cb =
cb;
2181 ctx->next_protos_advertised_cb_arg =
arg;
2188 ctx->next_proto_select_cb =
cb;
2189 ctx->next_proto_select_cb_arg =
arg;
2193 unsigned protos_len) {
2200 return ctx->alpn_client_proto_list.CopyFrom(span) ? 0 : 1;
2213 return ssl->
config->alpn_client_proto_list.CopyFrom(span) ? 0 : 1;
2219 unsigned in_len,
void *
arg),
2221 ctx->alpn_select_cb =
cb;
2222 ctx->alpn_select_cb_arg =
arg;
2226 unsigned *out_len) {
2228 *out_data = ssl->
s3->hs->early_session->early_alpn.data();
2229 *out_len = ssl->
s3->hs->early_session->early_alpn.size();
2231 *out_data = ssl->
s3->alpn_selected.data();
2232 *out_len = ssl->
s3->alpn_selected.size();
2237 ctx->allow_unknown_alpn_protos = !!enabled;
2242 size_t settings_len) {
2273 assert(
compress !=
nullptr || decompress !=
nullptr);
2275 for (
const auto &alg :
ctx->cert_compression_algs) {
2276 if (alg.alg_id == alg_id) {
2285 return ctx->cert_compression_algs.Push(alg);
2289 ctx->channel_id_enabled = !!enabled;
2301 ssl->
config->channel_id_enabled = !!enabled;
2311 return ec_key != NULL &&
2340 if (!ssl->
s3->channel_id_valid) {
2349 if (!ssl->
server && ssl->
s3->hs !=
nullptr) {
2350 types = ssl->
s3->hs->certificate_types;
2352 *out_types =
types.data();
2353 return types.size();
2359 if (ssl->
s3->hs !=
nullptr) {
2360 sigalgs = ssl->
s3->hs->peer_sigalgs;
2362 *out_sigalgs = sigalgs.
data();
2363 return sigalgs.
size();
2369 if (ssl->
s3->hs !=
nullptr) {
2370 sigalgs = ssl->
s3->hs->peer_delegated_credential_sigalgs;
2372 *out_sigalgs = sigalgs.
data();
2373 return sigalgs.
size();
2381 if (ssl->
config->cert != NULL) {
2382 return ssl->
config->cert->privatekey.get();
2389 if (
ctx->cert != NULL) {
2390 return ctx->cert->privatekey.get();
2398 return session ==
nullptr ? nullptr : session->
cipher;
2412 ctx->quiet_shutdown = (
mode != 0);
2416 return ctx->quiet_shutdown;
2461 if (ssl->
ctx.get() ==
ctx) {
2462 return ssl->
ctx.get();
2466 if (ssl->
ctx->x509_method !=
ctx->x509_method) {
2480 return ssl->
ctx.get();
2513 if (
ctx->method->is_dtls) {
2516 ctx->quic_method = quic_method;
2521 if (ssl->
method->is_dtls) {
2568 RSA *(*
cb)(
SSL *ssl,
int is_export,
2575 DH *(*
cb)(
SSL *ssl,
int is_export,
2582 const char *identity_hint) {
2595 if (identity_hint != NULL && identity_hint[0] !=
'\0') {
2597 if (*
out ==
nullptr) {
2620 if (ssl->
config == NULL) {
2624 return ssl->
config->psk_identity_hint.get();
2632 if (session == NULL) {
2639 SSL *ssl,
unsigned (*
cb)(
SSL *ssl,
const char *hint,
char *identity,
2640 unsigned max_identity_len,
uint8_t *psk,
2641 unsigned max_psk_len)) {
2645 ssl->
config->psk_client_callback =
cb;
2649 SSL_CTX *
ctx,
unsigned (*
cb)(
SSL *ssl,
const char *hint,
char *identity,
2650 unsigned max_identity_len,
uint8_t *psk,
2651 unsigned max_psk_len)) {
2652 ctx->psk_client_callback =
cb;
2656 SSL *ssl,
unsigned (*
cb)(
SSL *ssl,
const char *identity,
uint8_t *psk,
2657 unsigned max_psk_len)) {
2661 ssl->
config->psk_server_callback =
cb;
2666 uint8_t *psk,
unsigned max_psk_len)) {
2667 ctx->psk_server_callback =
cb;
2672 int content_type,
const void *
buf,
2674 ctx->msg_callback =
cb;
2678 ctx->msg_callback_arg =
arg;
2682 void (*
cb)(
int write_p,
int version,
int content_type,
2693 void (*
cb)(
const SSL *ssl,
const char *
line)) {
2694 ctx->keylog_callback =
cb;
2699 return ctx->keylog_callback;
2703 void (*
cb)(
const SSL *ssl,
2705 ctx->current_time_cb =
cb;
2716 return !ssl->
s3->hs || ssl->
s3->hs->can_release_private_key;
2732 if (ssl->
s3->hs == NULL) {
2735 return ssl->
s3->hs->in_false_start;
2749 ctx->select_certificate_cb =
cb;
2754 ctx->dos_protection_cb =
cb;
2758 ctx->reverify_on_resume = !!enabled;
2765 ssl->
config->enforce_rsa_key_usage = !!enabled;
2778 const uint8_t **out_write_iv,
size_t *out_iv_len) {
2779 size_t write_iv_len;
2780 if (!ssl->
s3->aead_read_ctx->GetIV(out_read_iv, out_iv_len) ||
2781 !ssl->
s3->aead_write_ctx->GetIV(out_write_iv, &write_iv_len) ||
2782 *out_iv_len != write_iv_len) {
2800 assert(ssl->
d1->r_epoch == (ssl->
d1->bitmap.max_seq_num >> 48));
2801 return ssl->
d1->bitmap.max_seq_num;
2809 assert((
ret >> 48) == 0);
2819 if (session == NULL) {
2828 return sizeof(ssl->
s3->client_random);
2830 if (max_out >
sizeof(ssl->
s3->client_random)) {
2831 max_out =
sizeof(ssl->
s3->client_random);
2839 return sizeof(ssl->
s3->server_random);
2841 if (max_out >
sizeof(ssl->
s3->server_random)) {
2842 max_out =
sizeof(ssl->
s3->server_random);
2860 ssl->
config->retain_only_sha256_of_client_certs = !!enabled;
2864 ctx->retain_only_sha256_of_client_certs = !!enabled;
2868 ctx->grease_enabled = !!enabled;
2872 ctx->permute_extensions = !!enabled;
2879 ssl->
config->permute_extensions = !!enabled;
2883 return ssl->
s3->ticket_age_skew;
2887 ctx->false_start_allowed_without_alpn = !!allowed;
2891 return ssl->
s3->used_hello_retry_request;
2898 ssl->
config->shed_handshake_config = !!enable;
2905 ssl->
config->jdk11_workaround = !!enable;
2912 ssl->
config->quic_use_legacy_codepoint = !!use_legacy;
2923 UniquePtr<SSL_SESSION> session;
2924 if (!ssl->
server && ssl->
s3->established_session != NULL) {
2925 session = UpRef(ssl->
s3->established_session);
2933 if (ssl->
d1 != NULL) {
2937 ssl->
method->ssl_free(ssl);
2938 if (!ssl->
method->ssl_new(ssl)) {
2946 if (session !=
nullptr) {
2997 ctx->ticket_aead_method = aead_method;
3025 return session.release();
3044 return ssl->
config !=
nullptr && ssl->
config->ocsp_stapling_enabled
3070 ctx->legacy_ocsp_callback_arg =
arg;
void SSL_CTX_set_current_time_cb(SSL_CTX *ctx, void(*cb)(const SSL *ssl, struct timeval *out_clock))
void ssl_send_alert(SSL *ssl, int level, int desc)
int SSL_CTX_set_tmp_rsa(SSL_CTX *ctx, const RSA *rsa)
uint16_t peer_signature_algorithm
#define SSL_R_HANDSHAKE_NOT_COMPLETE
bssl::Array< uint8_t > peer_application_settings
bool tls1_set_curves_list(Array< uint16_t > *out_group_ids, const char *curves)
enum ssl_early_data_reason_t SSL_get_early_data_reason(const SSL *ssl)
int SSL_in_false_start(const SSL *ssl)
int SSL_renegotiate(SSL *ssl)
#define OPENSSL_NPN_NEGOTIATED
#define CBS_get_u24_length_prefixed
void SSL_load_error_strings(void)
int(* ssl_cert_compression_func_t)(SSL *ssl, CBB *out, const uint8_t *in, size_t in_len)
#define SSL_DEFAULT_CIPHER_LIST
void SSL_CTX_set_early_data_enabled(SSL_CTX *ctx, int enabled)
size_t SSL_get0_peer_delegation_algorithms(const SSL *ssl, const uint16_t **out_sigalgs)
ssl_early_data_ticket_age_skew
int ssl_handle_open_record(SSL *ssl, bool *out_retry, ssl_open_record_t ret, size_t consumed, uint8_t alert)
void SSL_set_msg_callback_arg(SSL *ssl, void *arg)
const char * SSL_get_psk_identity_hint(const SSL *ssl)
unsigned long SSL_CTX_sess_set_cache_size(SSL_CTX *ctx, unsigned long size)
int SSL_can_release_private_key(const SSL *ssl)
void SSL_enable_ocsp_stapling(SSL *ssl)
void SSL_CTX_set_grease_enabled(SSL_CTX *ctx, int enabled)
int SSL_get_servername_type(const SSL *ssl)
unsigned long SSL_CTX_sess_get_cache_size(const SSL_CTX *ctx)
int SSL_CTX_sess_accept(const SSL_CTX *ctx)
int SSL_get_rfd(const SSL *ssl)
static int OPENSSL_memcmp(const void *s1, const void *s2, size_t n)
int SSL_get_server_tmp_key(SSL *ssl, EVP_PKEY **out_key)
int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_unused *unused, CRYPTO_EX_dup *dup_unused, CRYPTO_EX_free *free_func)
int SSL_set_wfd(SSL *ssl, int fd)
void * SSL_CTX_get_ex_data(const SSL_CTX *ctx, int idx)
#define NID_X9_62_prime256v1
#define SSL_R_INVALID_TICKET_KEYS_LENGTH
#define SSL_AD_REASON_OFFSET
int SSL_CTX_sess_hits(const SSL_CTX *ctx)
int SSL_CTX_sess_misses(const SSL_CTX *ctx)
int SSL_num_renegotiations(const SSL *ssl)
enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs)
int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void **from_d, int index, long argl, void *argp)
void ssl_cert_clear_certs(CERT *cert)
enum ssl_encryption_level_t SSL_quic_write_level(const SSL *ssl)
#define CRYPTO_library_init
void SSL_set0_wbio(SSL *ssl, BIO *wbio)
int SSL_key_update(SSL *ssl, int request_type)
int SSL_used_hello_retry_request(const SSL *ssl)
int SSL_CTX_add_cert_compression_alg(SSL_CTX *ctx, uint16_t alg_id, ssl_cert_compression_func_t compress, ssl_cert_decompression_func_t decompress)
char * SSL_get_shared_ciphers(const SSL *ssl, char *buf, int len)
void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*cb)(SSL *ssl, int is_export, int keylength))
static uint32_t ssl_session_hash(const SSL_SESSION *sess)
void SSL_CTX_set_msg_callback_arg(SSL_CTX *ctx, void *arg)
SSL_CTX * SSL_get_SSL_CTX(const SSL *ssl)
#define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION
const SSL_CIPHER * new_cipher
int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
void SSL_CTX_set_ticket_aead_method(SSL_CTX *ctx, const SSL_TICKET_AEAD_METHOD *aead_method)
ssl_early_data_no_session_offered
int SSL_CTX_set1_curves(SSL_CTX *ctx, const int *curves, size_t curves_len)
#define SSL_ERROR_WANT_READ
static const BIO_METHOD ssl_method
const SSL_CIPHER * SSL_get_current_cipher(const SSL *ssl)
#define SSL_R_SSL3_EXT_INVALID_SERVERNAME
#define OPENSSL_PUT_ERROR(library, reason)
bool ssl_is_valid_alpn_list(Span< const uint8_t > in)
int SSL_get_wfd(const SSL *ssl)
#define SSL3_MT_HELLO_REQUEST
uint64_t SSL_get_write_sequence(const SSL *ssl)
const char * SSL_get_servername(const SSL *ssl, const int type)
bssl::UniquePtr< bssl::SSL_CONFIG > config
int SSL_use_psk_identity_hint(SSL *ssl, const char *identity_hint)
#define SSL_CB_ACCEPT_EXIT
static uint64_t be_to_u64(const uint8_t in[8])
const char * SSL_get_psk_identity(const SSL *ssl)
#define CRYPTO_BUFFER_len
#define SSL_CTX_flush_sessions
ssl_early_data_alps_mismatch
void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, unsigned(*cb)(SSL *ssl, const char *identity, uint8_t *psk, unsigned max_psk_len))
bssl::ssl_hs_wait_t(* do_handshake)(bssl::SSL_HANDSHAKE *hs)
bool ssl_can_write(const SSL *ssl)
#define SSL_set_ocsp_response
long SSL_get_default_timeout(const SSL *ssl)
int SSL_get_verify_mode(const SSL *ssl)
uint32_t SSL_set_mode(SSL *ssl, uint32_t mode)
void SSL_set_max_cert_list(SSL *ssl, size_t max_cert_list)
int SSL_set_cipher_list(SSL *ssl, const char *str)
void SSL_set_accept_state(SSL *ssl)
void SSL_get0_ocsp_response(const SSL *ssl, const uint8_t **out, size_t *out_len)
OPENSSL_EXPORT pem_password_cb void * u
uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH]
int SSL_send_fatal_alert(SSL *ssl, uint8_t alert)
UniquePtr< SSL_SESSION > early_session
static int is_p256_key(EVP_PKEY *private_key)
void(* info_callback)(const SSL *ssl, int type, int value)
bool tls13_add_key_update(SSL *ssl, int update_requested)
ssl_early_data_alpn_mismatch
void SSL_get0_alpn_selected(const SSL *ssl, const uint8_t **out_data, unsigned *out_len)
int SSL_set_strict_cipher_list(SSL *ssl, const char *str)
void SSL_get0_peer_application_settings(const SSL *ssl, const uint8_t **out_data, size_t *out_len)
bool ocsp_stapling_requested
int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings)
static int set_session_id_context(CERT *cert, const uint8_t *sid_ctx, size_t sid_ctx_len)
SSL_CTX * SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const uint8_t *protos, unsigned protos_len)
int SSL_set_session_id_context(SSL *ssl, const uint8_t *sid_ctx, size_t sid_ctx_len)
void SSL_set_enforce_rsa_key_usage(SSL *ssl, int enabled)
int32_t SSL_get_ticket_age_skew(const SSL *ssl)
uint32_t SSL_CTX_set_mode(SSL_CTX *ctx, uint32_t mode)
bool ssl_cert_check_private_key(const CERT *cert, const EVP_PKEY *privkey)
#define TLSEXT_STATUSTYPE_nothing
#define sk_SSL_CIPHER_value
void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy)
#define CRYPTO_MUTEX_init
int SSL_get_quiet_shutdown(const SSL *ssl)
int SSL_session_reused(const SSL *ssl)
int SSL_renegotiate_pending(SSL *ssl)
ssl_early_data_protocol_version
#define EC_KEY_get0_group
static int bio_retry_reason_to_error(int reason)
int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_unused *unused, CRYPTO_EX_dup *dup_unused, CRYPTO_EX_free *free_func)
int SSL_CTX_set_tlsext_ticket_key_cb(SSL_CTX *ctx, int(*callback)(SSL *ssl, uint8_t *key_name, uint8_t *iv, EVP_CIPHER_CTX *ctx, HMAC_CTX *hmac_ctx, int encrypt))
#define SSL_R_NULL_SSL_CTX
static void * OPENSSL_memset(void *dst, int c, size_t n)
const SSL_QUIC_METHOD * quic_method
#define SSL_R_CONNECTION_TYPE_NOT_SET
bool tls13_post_handshake(SSL *ssl, const SSLMessage &msg)
#define SSL_ERROR_WANT_RENEGOTIATE
void SSL_CTX_enable_signed_cert_timestamps(SSL_CTX *ctx)
#define SSL_ERROR_WANT_PRIVATE_KEY_OPERATION
ssl_cert_compression_func_t compress
#define SSL_ERROR_WANT_ACCEPT
uint32_t SSL_CTX_clear_mode(SSL_CTX *ctx, uint32_t mode)
bssl::UniquePtr< SSL_SESSION > session
int SSL_set_alpn_protos(SSL *ssl, const uint8_t *protos, unsigned protos_len)
uint32_t SSL_CTX_clear_options(SSL_CTX *ctx, uint32_t options)
#define SSL_CTX_set_max_proto_version
int SSL_get_tls_unique(const SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out)
int SSL_CTX_set_quic_method(SSL_CTX *ctx, const SSL_QUIC_METHOD *quic_method)
void SSL_CTX_set_allow_unknown_alpn_protos(SSL_CTX *ctx, int enabled)
size_t SSL_get_client_random(const SSL *ssl, uint8_t *out, size_t max_out)
bool ssl_can_read(const SSL *ssl)
ssl_early_data_peer_declined
int SSL_set_tlsext_host_name(SSL *ssl, const char *name)
SSL * SSL_new(SSL_CTX *ctx)
void ssl_ctx_get_current_time(const SSL_CTX *ctx, struct OPENSSL_timeval *out_clock)
void retry(grpc_end2end_test_config config)
int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const uint8_t *sid_ctx, size_t sid_ctx_len)
#define CRYPTO_free_ex_data
bool SSL_get_traffic_secrets(const SSL *ssl, Span< const uint8_t > *out_read_traffic_secret, Span< const uint8_t > *out_write_traffic_secret)
void SSL_CTX_set0_buffer_pool(SSL_CTX *ctx, CRYPTO_BUFFER_POOL *pool)
ssl_open_record_t ssl_open_app_data(SSL *ssl, Span< uint8_t > *out, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
static int ssl_do_post_handshake(SSL *ssl, const SSLMessage &msg)
UniquePtr< SSL_HANDSHAKE > ssl_handshake_new(SSL *ssl)
int SSL_early_data_accepted(const SSL *ssl)
int SSL_CTX_check_private_key(const SSL_CTX *ctx)
int SSL_connect(SSL *ssl)
int SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes)
void SSL_set_early_data_enabled(SSL *ssl, int enabled)
int SSL_set_ex_data(SSL *ssl, int idx, void *data)
ssl_cert_decompression_func_t decompress
int SSL_CTX_set1_curves_list(SSL_CTX *ctx, const char *curves)
int SSL_enable_tls_channel_id(SSL *ssl)
#define SSL_R_UNINITIALIZED
int SSL_set_tmp_dh(SSL *ssl, const DH *dh)
void SSL_set_msg_callback(SSL *ssl, void(*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))
void(*)(const SSL *ssl, int type, int value) SSL_get_info_callback(const SSL *ssl)
#define SSL3_RT_MAX_PLAIN_LENGTH
int SSL_set_quic_transport_params(SSL *ssl, const uint8_t *params, size_t params_len)
#define sk_CRYPTO_BUFFER_new_null
UniquePtr< CERT > ssl_cert_dup(CERT *cert)
unsigned session_id_length
bssl::UniquePtr< char > psk_identity
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
int SSL_CTX_set_session_cache_mode(SSL_CTX *ctx, int mode)
static CRYPTO_EX_DATA_CLASS g_ex_data_class_ssl_ctx
#define ERR_R_PASSED_NULL_PARAMETER
void ssl_set_read_error(SSL *ssl)
ssl_early_data_channel_id
static int use_psk_identity_hint(UniquePtr< char > *out, const char *identity_hint)
void SSL_get0_next_proto_negotiated(const SSL *ssl, const uint8_t **out_data, unsigned *out_len)
int SSL_set1_curves(SSL *ssl, const int *curves, size_t curves_len)
bool ssl_create_cipher_list(UniquePtr< SSLCipherPreferenceList > *out_cipher_list, const char *rule_str, bool strict)
bool tls1_set_curves(Array< uint16_t > *out_group_ids, Span< const int > curves)
#define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED
int SSL_CTX_sess_accept_good(const SSL_CTX *ctx)
int SSL_CTX_sess_connect(const SSL_CTX *ctx)
int SSL_want(const SSL *ssl)
const COMP_METHOD * SSL_get_current_expansion(SSL *ssl)
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
#define EC_GROUP_get_curve_name
ssl_early_data_unsupported_for_session
#define SSL_R_CHANNEL_ID_NOT_P256
int SSL_get_ivs(const SSL *ssl, const uint8_t **out_read_iv, const uint8_t **out_write_iv, size_t *out_iv_len)
#define BIO_get_retry_reason
void ssl_reset_error_state(SSL *ssl)
SSL_CTX * SSL_CTX_new(const SSL_METHOD *method)
void ssl_get_current_time(const SSL *ssl, struct OPENSSL_timeval *out_clock)
void SSL_CTX_set_select_certificate_cb(SSL_CTX *ctx, enum ssl_select_cert_result_t(*cb)(const SSL_CLIENT_HELLO *))
int SSL_set_rfd(SSL *ssl, int fd)
int SSL_in_early_data(const SSL *ssl)
int SSL_set_quic_early_data_context(SSL *ssl, const uint8_t *context, size_t context_len)
int SSL_get_secure_renegotiation_support(const SSL *ssl)
int ssl_send_alert_impl(SSL *ssl, int level, int desc)
int SSL_get_shared_sigalgs(SSL *ssl, int idx, int *psign, int *phash, int *psignandhash, uint8_t *rsig, uint8_t *rhash)
bssl::UniquePtr< BIO > wbio
unsigned __int64 uint64_t
size_t SSL_get0_peer_verify_algorithms(const SSL *ssl, const uint16_t **out_sigalgs)
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
int SSL_pending(const SSL *ssl)
#define ERR_GET_LIB(packed_error)
int SSL_CTX_enable_tls_channel_id(SSL_CTX *ctx)
#define BSSL_NAMESPACE_END
#define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG
void SSL_CTX_set_custom_verify(SSL_CTX *ctx, int mode, enum ssl_verify_result_t(*callback)(SSL *ssl, uint8_t *out_alert))
const char * SSL_error_description(int err)
void ssl_do_msg_callback(const SSL *ssl, int is_write, int content_type, Span< const uint8_t > in)
#define SSL_SENT_SHUTDOWN
void SSL_reset_early_data_reject(SSL *ssl)
int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
enum ssl_hs_wait_t ssl_client_handshake(SSL_HANDSHAKE *hs)
#define ERR_R_INTERNAL_ERROR
uint16_t ssl_protocol_version(const SSL *ssl)
@ ssl_hs_early_data_rejected
int SSL_CTX_up_ref(SSL_CTX *ctx)
void SSL_CTX_set_reverify_on_resume(SSL_CTX *ctx, int enabled)
void SSL_set_psk_client_callback(SSL *ssl, unsigned(*cb)(SSL *ssl, const char *hint, char *identity, unsigned max_identity_len, uint8_t *psk, unsigned max_psk_len))
#define SSL_ERROR_HANDBACK
#define CRYPTO_new_ex_data
void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*cb)(SSL *ssl, int is_export, int keylength))
#define SSL_AD_NO_RENEGOTIATION
void SSL_CTX_free(SSL_CTX *ctx)
void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void(*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))
int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
void SSL_set_tls_channel_id_enabled(SSL *ssl, int enabled)
const uint8_t * SSL_get0_session_id_context(const SSL *ssl, size_t *out_len)
bool CBBFinishArray(CBB *cbb, Array< uint8_t > *out)
void * SSL_get_ex_data(const SSL *ssl, int idx)
int SSL_get_error(const SSL *ssl, int ret_code)
int SSL_library_init(void)
static bool cbb_add_hex(CBB *cbb, Span< const uint8_t > in)
enum ssl_encryption_level_t SSL_quic_read_level(const SSL *ssl)
int SSL_CTX_set_ex_data(SSL_CTX *ctx, int idx, void *data)
int SSL_in_init(const SSL *ssl)
void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, unsigned(*cb)(SSL *ssl, const char *hint, char *identity, unsigned max_identity_len, uint8_t *psk, unsigned max_psk_len))
const SSL_CIPHER * cipher
size_t SSL_get_server_random(const SSL *ssl, uint8_t *out, size_t max_out)
int SSL_CTX_cipher_in_group(const SSL_CTX *ctx, size_t i)
uint32_t SSL_get_options(const SSL *ssl)
uint32_t SSL_CTX_set_options(SSL_CTX *ctx, uint32_t options)
void SSL_set_psk_server_callback(SSL *ssl, unsigned(*cb)(SSL *ssl, const char *identity, uint8_t *psk, unsigned max_psk_len))
#define SSL_DEFAULT_SESSION_TIMEOUT
static CRYPTO_EX_DATA_CLASS g_ex_data_class_ssl
static void callback(void *arg, int status, int timeouts, struct hostent *host)
#define OPENSSL_DECLARE_ERROR_REASON(lib, reason)
int SSL_read(SSL *ssl, void *buf, int num)
int SSL_CTX_sess_connect_renegotiate(const SSL_CTX *ctx)
int SSL_set_read_ahead(SSL *ssl, int yes)
#define SSL_R_INVALID_ALPN_PROTOCOL_LIST
int SSL_get_tlsext_status_type(const SSL *ssl)
uint16_t SSL_get_peer_signature_algorithm(const SSL *ssl)
int SSL_is_server(const SSL *ssl)
void SSL_CTX_set_retain_only_sha256_of_client_certs(SSL_CTX *ctx, int enabled)
int SSL_get_extms_support(const SSL *ssl)
int SSL_has_pending(const SSL *ssl)
int SSL_CTX_need_tmp_RSA(const SSL_CTX *ctx)
size_t SSL_quic_max_handshake_flight_len(const SSL *ssl, enum ssl_encryption_level_t level)
void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio)
void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int index, long argl, void *argp)
void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int(*cb)(SSL *ssl, const uint8_t **out, unsigned *out_len, void *arg), void *arg)
static bool ssl_can_renegotiate(const SSL *ssl)
ssl_early_data_quic_parameter_mismatch
bssl::UniquePtr< BIO > rbio
void SSL_set_jdk11_workaround(SSL *ssl, int enable)
int SSL_set_mtu(SSL *ssl, unsigned mtu)
#define SSL_R_APPLICATION_DATA_ON_SHUTDOWN
int SSL_get_read_ahead(const SSL *ssl)
#define SSL_ERROR_HANDSHAKE_HINTS_READY
bssl::UniquePtr< char > hostname
size_t SSL_get_tls_channel_id(SSL *ssl, uint8_t *out, size_t max_out)
#define SSL_AD_CLOSE_NOTIFY
void SSL_set_custom_verify(SSL *ssl, int mode, enum ssl_verify_result_t(*callback)(SSL *ssl, uint8_t *out_alert))
int SSL_CTX_set_strict_cipher_list(SSL_CTX *ctx, const char *str)
uint32_t SSL_CTX_get_options(const SSL_CTX *ctx)
int SSL_cutthrough_complete(const SSL *ssl)
#define SSL_ERROR_WANT_WRITE
#define SSL_CB_CONNECT_EXIT
#define CRYPTO_EX_DATA_CLASS_INIT_WITH_APP_DATA
uint32_t SSL_clear_options(SSL *ssl, uint32_t options)
#define CRYPTO_get_ex_data
size_t SSL_CTX_get_max_cert_list(const SSL_CTX *ctx)
#define ERR_restore_state
bool has_application_settings
static const size_t kMaxHandshakeSize
uint32_t SSL_CTX_get_mode(const SSL_CTX *ctx)
SSL_SESSION * SSL_process_tls13_new_session_ticket(SSL *ssl, const uint8_t *buf, size_t buf_len)
const bssl::SSL_X509_METHOD * x509_method
const COMP_METHOD * SSL_get_current_compression(SSL *ssl)
#define SSL_R_WRONG_SSL_VERSION
void SSL_set_quiet_shutdown(SSL *ssl, int mode)
BIO * SSL_get_rbio(const SSL *ssl)
bssl::UniquePtr< SSL_SESSION > tls13_create_session_with_ticket(SSL *ssl, CBS *body)
void SSL_set_renegotiate_mode(SSL *ssl, enum ssl_renegotiate_mode_t mode)
void SSL_CTX_set_handoff_mode(SSL_CTX *ctx, bool on)
int SSL_set_fd(SSL *ssl, int fd)
void SSL_set_info_callback(SSL *ssl, void(*cb)(const SSL *ssl, int type, int value))
#define CRYPTO_MUTEX_cleanup
int SSL_set1_tls_channel_id(SSL *ssl, EVP_PKEY *private_key)
int SSL_set_tmp_rsa(SSL *ssl, const RSA *rsa)
#define CRYPTO_get_ex_new_index
#define SSL_ERROR_PENDING_SESSION
EVP_PKEY * SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
int SSL_CTX_sess_accept_renegotiate(const SSL_CTX *ctx)
int SSL_provide_quic_data(SSL *ssl, enum ssl_encryption_level_t level, const uint8_t *data, size_t len)
int SSL_check_private_key(const SSL *ssl)
ssl_ctx_st(const SSL_METHOD *ssl_method)
static size_t copy_finished(void *out, size_t out_len, const uint8_t *in, size_t in_len)
struct ossl_init_settings_st OPENSSL_INIT_SETTINGS
uint32_t SSL_get_mode(const SSL *ssl)
ssl_encryption_application
void SSL_set_retain_only_sha256_of_client_certs(SSL *ssl, int enabled)
uint64_t SSL_get_read_sequence(const SSL *ssl)
size_t SSL_get_max_cert_list(const SSL *ssl)
#define SSL_OP_NO_QUERY_MTU
#define EVP_PKEY_get0_EC_KEY
#define BIO_should_io_special
int SSL_CTX_get_session_cache_mode(const SSL_CTX *ctx)
void SSL_set_shutdown(SSL *ssl, int mode)
void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, void(*cb)(const SSL *ssl, const char *line))
int SSL_shutdown(SSL *ssl)
#define SSL_ERROR_ZERO_RETURN
int SSL_is_dtls(const SSL *ssl)
static int ssl_read_impl(SSL *ssl)
BIO * SSL_get_wbio(const SSL *ssl)
#define SSL_AD_DECODE_ERROR
static bool check_read_error(const SSL *ssl)
void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb)(SSL *ssl, int is_export, int keylength))
void SSL_CTX_set_permute_extensions(SSL_CTX *ctx, int enabled)
ssl_open_record_t ssl_open_handshake(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
void ERR_load_SSL_strings(void)
UniquePtr< SSL_SESSION > ret
size_t SSL_CTX_sess_number(const SSL_CTX *ctx)
#define SSL_RECEIVED_SHUTDOWN
static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
int SSL_CTX_get_read_ahead(const SSL_CTX *ctx)
uint16_t max_send_fragment
ssl_early_data_hello_retry_request
int SSL_CTX_sess_connect_good(const SSL_CTX *ctx)
int SSL_set_tlsext_status_ocsp_resp(SSL *ssl, uint8_t *resp, size_t resp_len)
bssl::UniquePtr< CRYPTO_BUFFER > signed_cert_timestamp_list
void SSL_set_shed_handshake_config(SSL *ssl, int enable)
static void ssl_maybe_shed_handshake_config(SSL *ssl)
int SSL_set_tlsext_status_type(SSL *ssl, int type)
ssl_open_record_t ssl_open_change_cipher_spec(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
int SSL_get_shutdown(const SSL *ssl)
#define SSL_R_BAD_HELLO_REQUEST
#define SSL_ERROR_WANT_CONNECT
#define SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED
void(*)(const SSL *ssl, const char *line) SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
int SSL_set1_curves_list(SSL *ssl, const char *curves)
size_t SSL_get_finished(const SSL *ssl, void *buf, size_t count)
size_t SSL_get_tlsext_status_ocsp_resp(const SSL *ssl, const uint8_t **out)
void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int(*cb)(SSL *ssl, uint8_t **out, uint8_t *out_len, const uint8_t *in, unsigned in_len, void *arg), void *arg)
void(* msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)
int SSL_cache_hit(SSL *ssl)
STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, int(*cb)(SSL *ssl, const uint8_t **out, uint8_t *out_len, const uint8_t *in, unsigned in_len, void *arg), void *arg)
void SSL_set_state(SSL *ssl, int state)
int SSL_set_max_send_fragment(SSL *ssl, size_t max_send_fragment)
int SSL_total_renegotiations(const SSL *ssl)
#define SSL_R_NULL_SSL_METHOD_PASSED
const char * SSL_get_cipher_list(const SSL *ssl, int n)
size_t SSL_get0_certificate_types(const SSL *ssl, const uint8_t **out_types)
void SSL_set_connect_state(SSL *ssl)
#define TLSEXT_STATUSTYPE_ocsp
int SSL_CTX_set_tlsext_ticket_keys(SSL_CTX *ctx, const void *in, size_t len)
static const struct nv types[]
int SSL_need_tmp_RSA(const SSL *ssl)
const bssl::SSL_PROTOCOL_METHOD * method
#define TLSEXT_MAXLEN_host_name
void SSL_CTX_set_false_start_allowed_without_alpn(SSL_CTX *ctx, int allowed)
#define OPENSSL_NPN_NO_OVERLAP
@ ssl_shutdown_close_notify
void SSL_CTX_enable_ocsp_stapling(SSL_CTX *ctx)
int SSL_is_init_finished(const SSL *ssl)
int SSL_CTX_set_tlsext_status_cb(SSL_CTX *ctx, int(*callback)(SSL *ssl, void *arg))
int SSL_CTX_sess_cb_hits(const SSL_CTX *ctx)
int ssl_ctx_rotate_ticket_encryption_key(SSL_CTX *ctx)
int SSL_has_application_settings(const SSL *ssl)
int SSL_state(const SSL *ssl)
InternalDescriptorPool * pool
bssl::UniquePtr< CRYPTO_BUFFER > ocsp_response
void SSL_get_peer_quic_transport_params(const SSL *ssl, const uint8_t **out_params, size_t *out_params_len)
int SSL_peek(SSL *ssl, void *buf, int num)
#define SSL_ERROR_EARLY_DATA_REJECTED
int SSL_select_next_proto(uint8_t **out, uint8_t *out_len, const uint8_t *peer, unsigned peer_len, const uint8_t *supported, unsigned supported_len)
void SSL_certs_clear(SSL *ssl)
int SSL_add_application_settings(SSL *ssl, const uint8_t *proto, size_t proto_len, const uint8_t *settings, size_t settings_len)
int SSL_CTX_set_tmp_ecdh(SSL_CTX *ctx, const EC_KEY *ec_key)
int SSL_CTX_sess_cache_full(const SSL_CTX *ctx)
#define CRYPTO_refcount_inc
ssl_encryption_early_data
void SSL_CTX_set_max_cert_list(SSL_CTX *ctx, size_t max_cert_list)
uint32_t ssl_hash_session_id(Span< const uint8_t > session_id)
int SSL_set_tmp_ecdh(SSL *ssl, const EC_KEY *ec_key)
grpc::ClientContext context
void ssl_do_info_callback(const SSL *ssl, int type, int value)
int SSL_do_handshake(SSL *ssl)
int SSL_set_quic_method(SSL *ssl, const SSL_QUIC_METHOD *quic_method)
#define SSL_ERROR_WANT_X509_LOOKUP
const char * SSL_early_data_reason_string(enum ssl_early_data_reason_t reason)
#define SSL_R_DECODE_ERROR
void SSL_CTX_set_dos_protection_cb(SSL_CTX *ctx, int(*cb)(const SSL_CLIENT_HELLO *))
const SSL_CIPHER * SSL_get_pending_cipher(const SSL *ssl)
EVP_PKEY * SSL_get_privatekey(const SSL *ssl)
#define SSL_R_DATA_LENGTH_TOO_LONG
void SSL_enable_signed_cert_timestamps(SSL *ssl)
#define SSL_CTX_set_min_proto_version
int SSL_CTX_get_tlsext_ticket_keys(SSL_CTX *ctx, void *out, size_t len)
int SSL_CTX_set_tlsext_servername_arg(SSL_CTX *ctx, void *arg)
#define sk_SSL_CIPHER_num
#define CRYPTO_set_ex_data
void SSL_get0_signed_cert_timestamp_list(const SSL *ssl, const uint8_t **out, size_t *out_len)
void SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb)(SSL *ssl, int is_export, int keylength))
int SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg)
int SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, size_t max_send_fragment)
void SSL_CTX_set_tls_channel_id_enabled(SSL_CTX *ctx, int enabled)
int SSL_process_quic_post_handshake(SSL *ssl)
int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return)
unsigned int dtls1_min_mtu(void)
#define SSL_ERROR_PENDING_CERTIFICATE
ssl_renegotiate_mode_t renegotiate_mode
bssl::UniquePtr< SSL_CTX > ctx
uint16_t SSL_get_curve_id(const SSL *ssl)
#define PSK_MAX_IDENTITY_LEN
bool ssl_log_secret(const SSL *ssl, const char *label, Span< const uint8_t > secret)
#define ERR_clear_system_error
#define TLSEXT_NAMETYPE_host_name
ssl_early_data_session_not_resumed
void SSL_set_handoff_mode(SSL *ssl, bool on)
size_t SSL_get_peer_finished(const SSL *ssl, void *buf, size_t count)
bool tls_append_handshake_data(SSL *ssl, Span< const uint8_t > data)
#define SSL_R_SSL_HANDSHAKE_FAILURE
#define SSL_ERROR_WANT_CERTIFICATE_VERIFY
void SSL_set_permute_extensions(SSL *ssl, int enabled)
int(* ssl_cert_decompression_func_t)(SSL *ssl, CRYPTO_BUFFER **out, size_t uncompressed_len, const uint8_t *in, size_t in_len)
OPENSSL_EXPORT pem_password_cb * cb
int SSL_CTX_set_tmp_dh(SSL_CTX *ctx, const DH *dh)
#define SSL_R_NO_RENEGOTIATION
int SSL_CTX_set_tlsext_servername_callback(SSL_CTX *ctx, int(*callback)(SSL *ssl, int *out_alert, void *arg))
#define SSL_CTX_get_ciphers
#define CRYPTO_BUFFER_data
#define ERR_R_MALLOC_FAILURE
#define BIO_TYPE_DESCRIPTOR
#define SSL_R_EXCESSIVE_MESSAGE_SIZE
int SSL_get_fd(const SSL *ssl)
int SSL_write(SSL *ssl, const void *buf, int num)
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]
#define SSL_R_PROTOCOL_IS_SHUTDOWN
#define CRYPTO_refcount_dec_and_test_zero
uint32_t SSL_clear_mode(SSL *ssl, uint32_t mode)
void SSL_set0_rbio(SSL *ssl, BIO *rbio)
int SSL_CTX_sess_timeouts(const SSL_CTX *ctx)
int SSL_CTX_set1_tls_channel_id(SSL_CTX *ctx, EVP_PKEY *private_key)
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
#define SSL_ERROR_PENDING_TICKET
#define SSL_ERROR_HANDOFF
uint32_t SSL_set_options(SSL *ssl, uint32_t options)
#define SSL_ERROR_SYSCALL
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:21