117f01e99SJung-uk Kim /* 2*b077aed3SPierre Pronchery * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. 317f01e99SJung-uk Kim * 4*b077aed3SPierre Pronchery * Licensed under the Apache License 2.0 (the "License"). You may not use 517f01e99SJung-uk Kim * this file except in compliance with the License. You can obtain a copy 617f01e99SJung-uk Kim * in the file LICENSE in the source distribution or at 717f01e99SJung-uk Kim * https://www.openssl.org/source/license.html 817f01e99SJung-uk Kim */ 917f01e99SJung-uk Kim 1017f01e99SJung-uk Kim /***************************************************************************** 1117f01e99SJung-uk Kim * * 1217f01e99SJung-uk Kim * The following definitions are PRIVATE to the state machine. They should * 1317f01e99SJung-uk Kim * NOT be used outside of the state machine. * 1417f01e99SJung-uk Kim * * 1517f01e99SJung-uk Kim *****************************************************************************/ 1617f01e99SJung-uk Kim 1717f01e99SJung-uk Kim /* Max message length definitions */ 1817f01e99SJung-uk Kim 1917f01e99SJung-uk Kim /* The spec allows for a longer length than this, but we limit it */ 2017f01e99SJung-uk Kim #define HELLO_VERIFY_REQUEST_MAX_LENGTH 258 2117f01e99SJung-uk Kim #define END_OF_EARLY_DATA_MAX_LENGTH 0 2217f01e99SJung-uk Kim #define HELLO_RETRY_REQUEST_MAX_LENGTH 20000 2317f01e99SJung-uk Kim #define ENCRYPTED_EXTENSIONS_MAX_LENGTH 20000 249a3ae0cdSJung-uk Kim #define SESSION_TICKET_MAX_LENGTH_TLS13 131338 259a3ae0cdSJung-uk Kim #define SESSION_TICKET_MAX_LENGTH_TLS12 65541 2617f01e99SJung-uk Kim #define SERVER_KEY_EXCH_MAX_LENGTH 102400 2717f01e99SJung-uk Kim #define SERVER_HELLO_DONE_MAX_LENGTH 0 2817f01e99SJung-uk Kim #define KEY_UPDATE_MAX_LENGTH 1 2917f01e99SJung-uk Kim #define CCS_MAX_LENGTH 1 30*b077aed3SPierre Pronchery 31*b077aed3SPierre Pronchery /* Max ServerHello size permitted by RFC 8446 */ 32*b077aed3SPierre Pronchery #define SERVER_HELLO_MAX_LENGTH 65607 33*b077aed3SPierre Pronchery 3417f01e99SJung-uk Kim /* Max should actually be 36 but we are generous */ 3517f01e99SJung-uk Kim #define FINISHED_MAX_LENGTH 64 3617f01e99SJung-uk Kim 3717f01e99SJung-uk Kim /* Dummy message type */ 3817f01e99SJung-uk Kim #define SSL3_MT_DUMMY -1 3917f01e99SJung-uk Kim 40*b077aed3SPierre Pronchery /* Invalid extension ID for non-supported extensions */ 41*b077aed3SPierre Pronchery #define TLSEXT_TYPE_invalid 0x10000 42*b077aed3SPierre Pronchery #define TLSEXT_TYPE_out_of_range 0x10001 43*b077aed3SPierre Pronchery unsigned int ossl_get_extension_type(size_t idx); 44*b077aed3SPierre Pronchery 4517f01e99SJung-uk Kim extern const unsigned char hrrrandom[]; 4617f01e99SJung-uk Kim 4717f01e99SJung-uk Kim /* Message processing return codes */ 4817f01e99SJung-uk Kim typedef enum { 4917f01e99SJung-uk Kim /* Something bad happened */ 5017f01e99SJung-uk Kim MSG_PROCESS_ERROR, 5117f01e99SJung-uk Kim /* We've finished reading - swap to writing */ 5217f01e99SJung-uk Kim MSG_PROCESS_FINISHED_READING, 5317f01e99SJung-uk Kim /* 5417f01e99SJung-uk Kim * We've completed the main processing of this message but there is some 5517f01e99SJung-uk Kim * post processing to be done. 5617f01e99SJung-uk Kim */ 5717f01e99SJung-uk Kim MSG_PROCESS_CONTINUE_PROCESSING, 5817f01e99SJung-uk Kim /* We've finished this message - read the next message */ 5917f01e99SJung-uk Kim MSG_PROCESS_CONTINUE_READING 6017f01e99SJung-uk Kim } MSG_PROCESS_RETURN; 6117f01e99SJung-uk Kim 6217f01e99SJung-uk Kim typedef int (*confunc_f) (SSL *s, WPACKET *pkt); 6317f01e99SJung-uk Kim 6417f01e99SJung-uk Kim int ssl3_take_mac(SSL *s); 6517f01e99SJung-uk Kim int check_in_list(SSL *s, uint16_t group_id, const uint16_t *groups, 6617f01e99SJung-uk Kim size_t num_groups, int checkallow); 6717f01e99SJung-uk Kim int create_synthetic_message_hash(SSL *s, const unsigned char *hashval, 6817f01e99SJung-uk Kim size_t hashlen, const unsigned char *hrr, 6917f01e99SJung-uk Kim size_t hrrlen); 7017f01e99SJung-uk Kim int parse_ca_names(SSL *s, PACKET *pkt); 7117f01e99SJung-uk Kim const STACK_OF(X509_NAME) *get_ca_names(SSL *s); 7217f01e99SJung-uk Kim int construct_ca_names(SSL *s, const STACK_OF(X509_NAME) *ca_sk, WPACKET *pkt); 7317f01e99SJung-uk Kim size_t construct_key_exchange_tbs(SSL *s, unsigned char **ptbs, 7417f01e99SJung-uk Kim const void *param, size_t paramlen); 7517f01e99SJung-uk Kim 7617f01e99SJung-uk Kim /* 7717f01e99SJung-uk Kim * TLS/DTLS client state machine functions 7817f01e99SJung-uk Kim */ 7917f01e99SJung-uk Kim int ossl_statem_client_read_transition(SSL *s, int mt); 8017f01e99SJung-uk Kim WRITE_TRAN ossl_statem_client_write_transition(SSL *s); 8117f01e99SJung-uk Kim WORK_STATE ossl_statem_client_pre_work(SSL *s, WORK_STATE wst); 8217f01e99SJung-uk Kim WORK_STATE ossl_statem_client_post_work(SSL *s, WORK_STATE wst); 8317f01e99SJung-uk Kim int ossl_statem_client_construct_message(SSL *s, WPACKET *pkt, 8417f01e99SJung-uk Kim confunc_f *confunc, int *mt); 8517f01e99SJung-uk Kim size_t ossl_statem_client_max_message_size(SSL *s); 8617f01e99SJung-uk Kim MSG_PROCESS_RETURN ossl_statem_client_process_message(SSL *s, PACKET *pkt); 8717f01e99SJung-uk Kim WORK_STATE ossl_statem_client_post_process_message(SSL *s, WORK_STATE wst); 8817f01e99SJung-uk Kim 8917f01e99SJung-uk Kim /* 9017f01e99SJung-uk Kim * TLS/DTLS server state machine functions 9117f01e99SJung-uk Kim */ 9217f01e99SJung-uk Kim int ossl_statem_server_read_transition(SSL *s, int mt); 9317f01e99SJung-uk Kim WRITE_TRAN ossl_statem_server_write_transition(SSL *s); 9417f01e99SJung-uk Kim WORK_STATE ossl_statem_server_pre_work(SSL *s, WORK_STATE wst); 9517f01e99SJung-uk Kim WORK_STATE ossl_statem_server_post_work(SSL *s, WORK_STATE wst); 9617f01e99SJung-uk Kim int ossl_statem_server_construct_message(SSL *s, WPACKET *pkt, 9717f01e99SJung-uk Kim confunc_f *confunc,int *mt); 9817f01e99SJung-uk Kim size_t ossl_statem_server_max_message_size(SSL *s); 9917f01e99SJung-uk Kim MSG_PROCESS_RETURN ossl_statem_server_process_message(SSL *s, PACKET *pkt); 10017f01e99SJung-uk Kim WORK_STATE ossl_statem_server_post_process_message(SSL *s, WORK_STATE wst); 10117f01e99SJung-uk Kim 10217f01e99SJung-uk Kim /* Functions for getting new message data */ 10317f01e99SJung-uk Kim __owur int tls_get_message_header(SSL *s, int *mt); 10417f01e99SJung-uk Kim __owur int tls_get_message_body(SSL *s, size_t *len); 105*b077aed3SPierre Pronchery __owur int dtls_get_message(SSL *s, int *mt); 106*b077aed3SPierre Pronchery __owur int dtls_get_message_body(SSL *s, size_t *len); 10717f01e99SJung-uk Kim 10817f01e99SJung-uk Kim /* Message construction and processing functions */ 10917f01e99SJung-uk Kim __owur int tls_process_initial_server_flight(SSL *s); 11017f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_change_cipher_spec(SSL *s, PACKET *pkt); 11117f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_finished(SSL *s, PACKET *pkt); 11217f01e99SJung-uk Kim __owur int tls_construct_change_cipher_spec(SSL *s, WPACKET *pkt); 11317f01e99SJung-uk Kim __owur int dtls_construct_change_cipher_spec(SSL *s, WPACKET *pkt); 11417f01e99SJung-uk Kim 11517f01e99SJung-uk Kim __owur int tls_construct_finished(SSL *s, WPACKET *pkt); 11617f01e99SJung-uk Kim __owur int tls_construct_key_update(SSL *s, WPACKET *pkt); 11717f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_key_update(SSL *s, PACKET *pkt); 11817f01e99SJung-uk Kim __owur WORK_STATE tls_finish_handshake(SSL *s, WORK_STATE wst, int clearbufs, 11917f01e99SJung-uk Kim int stop); 12017f01e99SJung-uk Kim __owur WORK_STATE dtls_wait_for_dry(SSL *s); 12117f01e99SJung-uk Kim 12217f01e99SJung-uk Kim /* some client-only functions */ 12317f01e99SJung-uk Kim __owur int tls_construct_client_hello(SSL *s, WPACKET *pkt); 12417f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_server_hello(SSL *s, PACKET *pkt); 12517f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_certificate_request(SSL *s, PACKET *pkt); 12617f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL *s, PACKET *pkt); 12717f01e99SJung-uk Kim __owur int tls_process_cert_status_body(SSL *s, PACKET *pkt); 12817f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_cert_status(SSL *s, PACKET *pkt); 12917f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_server_done(SSL *s, PACKET *pkt); 13017f01e99SJung-uk Kim __owur int tls_construct_cert_verify(SSL *s, WPACKET *pkt); 13117f01e99SJung-uk Kim __owur WORK_STATE tls_prepare_client_certificate(SSL *s, WORK_STATE wst); 13217f01e99SJung-uk Kim __owur int tls_construct_client_certificate(SSL *s, WPACKET *pkt); 13317f01e99SJung-uk Kim __owur int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey); 13417f01e99SJung-uk Kim __owur int tls_construct_client_key_exchange(SSL *s, WPACKET *pkt); 13517f01e99SJung-uk Kim __owur int tls_client_key_exchange_post_work(SSL *s); 13617f01e99SJung-uk Kim __owur int tls_construct_cert_status_body(SSL *s, WPACKET *pkt); 13717f01e99SJung-uk Kim __owur int tls_construct_cert_status(SSL *s, WPACKET *pkt); 13817f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_key_exchange(SSL *s, PACKET *pkt); 13917f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_server_certificate(SSL *s, PACKET *pkt); 140*b077aed3SPierre Pronchery __owur WORK_STATE tls_post_process_server_certificate(SSL *s, WORK_STATE wst); 14117f01e99SJung-uk Kim __owur int ssl3_check_cert_and_algorithm(SSL *s); 14217f01e99SJung-uk Kim #ifndef OPENSSL_NO_NEXTPROTONEG 14317f01e99SJung-uk Kim __owur int tls_construct_next_proto(SSL *s, WPACKET *pkt); 14417f01e99SJung-uk Kim #endif 14517f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_hello_req(SSL *s, PACKET *pkt); 14617f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN dtls_process_hello_verify(SSL *s, PACKET *pkt); 14717f01e99SJung-uk Kim __owur int tls_construct_end_of_early_data(SSL *s, WPACKET *pkt); 14817f01e99SJung-uk Kim 14917f01e99SJung-uk Kim /* some server-only functions */ 15017f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, PACKET *pkt); 15117f01e99SJung-uk Kim __owur WORK_STATE tls_post_process_client_hello(SSL *s, WORK_STATE wst); 15217f01e99SJung-uk Kim __owur int tls_construct_server_hello(SSL *s, WPACKET *pkt); 15317f01e99SJung-uk Kim __owur int dtls_construct_hello_verify_request(SSL *s, WPACKET *pkt); 15417f01e99SJung-uk Kim __owur int tls_construct_server_certificate(SSL *s, WPACKET *pkt); 15517f01e99SJung-uk Kim __owur int tls_construct_server_key_exchange(SSL *s, WPACKET *pkt); 15617f01e99SJung-uk Kim __owur int tls_construct_certificate_request(SSL *s, WPACKET *pkt); 15717f01e99SJung-uk Kim __owur int tls_construct_server_done(SSL *s, WPACKET *pkt); 15817f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_client_certificate(SSL *s, PACKET *pkt); 15917f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_client_key_exchange(SSL *s, PACKET *pkt); 16017f01e99SJung-uk Kim __owur WORK_STATE tls_post_process_client_key_exchange(SSL *s, WORK_STATE wst); 16117f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt); 16217f01e99SJung-uk Kim #ifndef OPENSSL_NO_NEXTPROTONEG 16317f01e99SJung-uk Kim __owur MSG_PROCESS_RETURN tls_process_next_proto(SSL *s, PACKET *pkt); 16417f01e99SJung-uk Kim #endif 16517f01e99SJung-uk Kim __owur int tls_construct_new_session_ticket(SSL *s, WPACKET *pkt); 16617f01e99SJung-uk Kim MSG_PROCESS_RETURN tls_process_end_of_early_data(SSL *s, PACKET *pkt); 16717f01e99SJung-uk Kim 168*b077aed3SPierre Pronchery #ifndef OPENSSL_NO_GOST 169*b077aed3SPierre Pronchery /* These functions are used in GOST18 CKE, both for client and server */ 170*b077aed3SPierre Pronchery int ossl_gost18_cke_cipher_nid(const SSL *s); 171*b077aed3SPierre Pronchery int ossl_gost_ukm(const SSL *s, unsigned char *dgst_buf); 172*b077aed3SPierre Pronchery #endif 17317f01e99SJung-uk Kim 17417f01e99SJung-uk Kim /* Extension processing */ 17517f01e99SJung-uk Kim 17617f01e99SJung-uk Kim typedef enum ext_return_en { 17717f01e99SJung-uk Kim EXT_RETURN_FAIL, 17817f01e99SJung-uk Kim EXT_RETURN_SENT, 17917f01e99SJung-uk Kim EXT_RETURN_NOT_SENT 18017f01e99SJung-uk Kim } EXT_RETURN; 18117f01e99SJung-uk Kim 18217f01e99SJung-uk Kim __owur int tls_validate_all_contexts(SSL *s, unsigned int thisctx, 18317f01e99SJung-uk Kim RAW_EXTENSION *exts); 18417f01e99SJung-uk Kim __owur int extension_is_relevant(SSL *s, unsigned int extctx, 18517f01e99SJung-uk Kim unsigned int thisctx); 18617f01e99SJung-uk Kim __owur int tls_collect_extensions(SSL *s, PACKET *packet, unsigned int context, 18717f01e99SJung-uk Kim RAW_EXTENSION **res, size_t *len, int init); 18817f01e99SJung-uk Kim __owur int tls_parse_extension(SSL *s, TLSEXT_INDEX idx, int context, 18917f01e99SJung-uk Kim RAW_EXTENSION *exts, X509 *x, size_t chainidx); 19017f01e99SJung-uk Kim __owur int tls_parse_all_extensions(SSL *s, int context, RAW_EXTENSION *exts, 19117f01e99SJung-uk Kim X509 *x, size_t chainidx, int fin); 19217f01e99SJung-uk Kim __owur int should_add_extension(SSL *s, unsigned int extctx, 19317f01e99SJung-uk Kim unsigned int thisctx, int max_version); 19417f01e99SJung-uk Kim __owur int tls_construct_extensions(SSL *s, WPACKET *pkt, unsigned int context, 19517f01e99SJung-uk Kim X509 *x, size_t chainidx); 19617f01e99SJung-uk Kim 19717f01e99SJung-uk Kim __owur int tls_psk_do_binder(SSL *s, const EVP_MD *md, 19817f01e99SJung-uk Kim const unsigned char *msgstart, 19917f01e99SJung-uk Kim size_t binderoffset, const unsigned char *binderin, 20017f01e99SJung-uk Kim unsigned char *binderout, 20117f01e99SJung-uk Kim SSL_SESSION *sess, int sign, int external); 20217f01e99SJung-uk Kim 20317f01e99SJung-uk Kim /* Server Extension processing */ 20417f01e99SJung-uk Kim int tls_parse_ctos_renegotiate(SSL *s, PACKET *pkt, unsigned int context, 20517f01e99SJung-uk Kim X509 *x, size_t chainidx); 20617f01e99SJung-uk Kim int tls_parse_ctos_server_name(SSL *s, PACKET *pkt, unsigned int context, 20717f01e99SJung-uk Kim X509 *x, size_t chainidx); 20817f01e99SJung-uk Kim int tls_parse_ctos_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context, 20917f01e99SJung-uk Kim X509 *x, size_t chainidx); 21017f01e99SJung-uk Kim #ifndef OPENSSL_NO_SRP 21117f01e99SJung-uk Kim int tls_parse_ctos_srp(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 21217f01e99SJung-uk Kim size_t chainidx); 21317f01e99SJung-uk Kim #endif 21417f01e99SJung-uk Kim int tls_parse_ctos_early_data(SSL *s, PACKET *pkt, unsigned int context, 21517f01e99SJung-uk Kim X509 *x, size_t chainidx); 21617f01e99SJung-uk Kim int tls_parse_ctos_ec_pt_formats(SSL *s, PACKET *pkt, unsigned int context, 21717f01e99SJung-uk Kim X509 *x, size_t chainidx); 21817f01e99SJung-uk Kim int tls_parse_ctos_supported_groups(SSL *s, PACKET *pkt, unsigned int context, 21917f01e99SJung-uk Kim X509 *x, size_t chainidxl); 22017f01e99SJung-uk Kim int tls_parse_ctos_session_ticket(SSL *s, PACKET *pkt, unsigned int context, 22117f01e99SJung-uk Kim X509 *x, size_t chainidx); 22217f01e99SJung-uk Kim int tls_parse_ctos_sig_algs_cert(SSL *s, PACKET *pkt, unsigned int context, 22317f01e99SJung-uk Kim X509 *x, size_t chainidx); 22417f01e99SJung-uk Kim int tls_parse_ctos_sig_algs(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 22517f01e99SJung-uk Kim size_t chainidx); 22617f01e99SJung-uk Kim #ifndef OPENSSL_NO_OCSP 22717f01e99SJung-uk Kim int tls_parse_ctos_status_request(SSL *s, PACKET *pkt, unsigned int context, 22817f01e99SJung-uk Kim X509 *x, size_t chainidx); 22917f01e99SJung-uk Kim #endif 23017f01e99SJung-uk Kim #ifndef OPENSSL_NO_NEXTPROTONEG 23117f01e99SJung-uk Kim int tls_parse_ctos_npn(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 23217f01e99SJung-uk Kim size_t chainidx); 23317f01e99SJung-uk Kim #endif 23417f01e99SJung-uk Kim int tls_parse_ctos_alpn(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 23517f01e99SJung-uk Kim size_t chainidx); 23617f01e99SJung-uk Kim #ifndef OPENSSL_NO_SRTP 23717f01e99SJung-uk Kim int tls_parse_ctos_use_srtp(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 23817f01e99SJung-uk Kim size_t chainidx); 23917f01e99SJung-uk Kim #endif 24017f01e99SJung-uk Kim int tls_parse_ctos_etm(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 24117f01e99SJung-uk Kim size_t chainidx); 24217f01e99SJung-uk Kim int tls_parse_ctos_key_share(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 24317f01e99SJung-uk Kim size_t chainidx); 24417f01e99SJung-uk Kim int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 24517f01e99SJung-uk Kim size_t chainidx); 24617f01e99SJung-uk Kim int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 24717f01e99SJung-uk Kim size_t chainidx); 24817f01e99SJung-uk Kim int tls_parse_ctos_psk_kex_modes(SSL *s, PACKET *pkt, unsigned int context, 24917f01e99SJung-uk Kim X509 *x, size_t chainidx); 25017f01e99SJung-uk Kim int tls_parse_ctos_psk(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 25117f01e99SJung-uk Kim size_t chainidx); 25217f01e99SJung-uk Kim int tls_parse_ctos_post_handshake_auth(SSL *, PACKET *pkt, unsigned int context, 25317f01e99SJung-uk Kim X509 *x, size_t chainidx); 25417f01e99SJung-uk Kim 25517f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_renegotiate(SSL *s, WPACKET *pkt, 25617f01e99SJung-uk Kim unsigned int context, X509 *x, 25717f01e99SJung-uk Kim size_t chainidx); 25817f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_server_name(SSL *s, WPACKET *pkt, 25917f01e99SJung-uk Kim unsigned int context, X509 *x, 26017f01e99SJung-uk Kim size_t chainidx); 26117f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_early_data(SSL *s, WPACKET *pkt, 26217f01e99SJung-uk Kim unsigned int context, X509 *x, 26317f01e99SJung-uk Kim size_t chainidx); 26417f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_maxfragmentlen(SSL *s, WPACKET *pkt, 26517f01e99SJung-uk Kim unsigned int context, X509 *x, 26617f01e99SJung-uk Kim size_t chainidx); 26717f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_ec_pt_formats(SSL *s, WPACKET *pkt, 26817f01e99SJung-uk Kim unsigned int context, X509 *x, 26917f01e99SJung-uk Kim size_t chainidx); 27017f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_supported_groups(SSL *s, WPACKET *pkt, 27117f01e99SJung-uk Kim unsigned int context, X509 *x, 27217f01e99SJung-uk Kim size_t chainidx); 27317f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_session_ticket(SSL *s, WPACKET *pkt, 27417f01e99SJung-uk Kim unsigned int context, X509 *x, 27517f01e99SJung-uk Kim size_t chainidx); 27617f01e99SJung-uk Kim #ifndef OPENSSL_NO_OCSP 27717f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_status_request(SSL *s, WPACKET *pkt, 27817f01e99SJung-uk Kim unsigned int context, X509 *x, 27917f01e99SJung-uk Kim size_t chainidx); 28017f01e99SJung-uk Kim #endif 28117f01e99SJung-uk Kim #ifndef OPENSSL_NO_NEXTPROTONEG 28217f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_next_proto_neg(SSL *s, WPACKET *pkt, 28317f01e99SJung-uk Kim unsigned int context, X509 *x, 28417f01e99SJung-uk Kim size_t chainidx); 28517f01e99SJung-uk Kim #endif 28617f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_alpn(SSL *s, WPACKET *pkt, unsigned int context, 28717f01e99SJung-uk Kim X509 *x, size_t chainidx); 28817f01e99SJung-uk Kim #ifndef OPENSSL_NO_SRTP 28917f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_use_srtp(SSL *s, WPACKET *pkt, unsigned int context, 29017f01e99SJung-uk Kim X509 *x, size_t chainidx); 29117f01e99SJung-uk Kim #endif 29217f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_etm(SSL *s, WPACKET *pkt, unsigned int context, 29317f01e99SJung-uk Kim X509 *x, size_t chainidx); 29417f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_ems(SSL *s, WPACKET *pkt, unsigned int context, 29517f01e99SJung-uk Kim X509 *x, size_t chainidx); 29617f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_supported_versions(SSL *s, WPACKET *pkt, 29717f01e99SJung-uk Kim unsigned int context, X509 *x, 29817f01e99SJung-uk Kim size_t chainidx); 29917f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_key_share(SSL *s, WPACKET *pkt, 30017f01e99SJung-uk Kim unsigned int context, X509 *x, 30117f01e99SJung-uk Kim size_t chainidx); 30217f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_cookie(SSL *s, WPACKET *pkt, unsigned int context, 30317f01e99SJung-uk Kim X509 *x, size_t chainidx); 30417f01e99SJung-uk Kim /* 30517f01e99SJung-uk Kim * Not in public headers as this is not an official extension. Only used when 30617f01e99SJung-uk Kim * SSL_OP_CRYPTOPRO_TLSEXT_BUG is set. 30717f01e99SJung-uk Kim */ 30817f01e99SJung-uk Kim #define TLSEXT_TYPE_cryptopro_bug 0xfde8 30917f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_cryptopro_bug(SSL *s, WPACKET *pkt, 31017f01e99SJung-uk Kim unsigned int context, X509 *x, 31117f01e99SJung-uk Kim size_t chainidx); 31217f01e99SJung-uk Kim EXT_RETURN tls_construct_stoc_psk(SSL *s, WPACKET *pkt, unsigned int context, 31317f01e99SJung-uk Kim X509 *x, size_t chainidx); 31417f01e99SJung-uk Kim 31517f01e99SJung-uk Kim /* Client Extension processing */ 31617f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_renegotiate(SSL *s, WPACKET *pkt, unsigned int context, 31717f01e99SJung-uk Kim X509 *x, size_t chainidx); 31817f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_server_name(SSL *s, WPACKET *pkt, unsigned int context, 31917f01e99SJung-uk Kim X509 *x, size_t chainidx); 32017f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_maxfragmentlen(SSL *s, WPACKET *pkt, unsigned int context, 32117f01e99SJung-uk Kim X509 *x, size_t chainidx); 32217f01e99SJung-uk Kim #ifndef OPENSSL_NO_SRP 32317f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_srp(SSL *s, WPACKET *pkt, unsigned int context, X509 *x, 32417f01e99SJung-uk Kim size_t chainidx); 32517f01e99SJung-uk Kim #endif 32617f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_ec_pt_formats(SSL *s, WPACKET *pkt, 32717f01e99SJung-uk Kim unsigned int context, X509 *x, 32817f01e99SJung-uk Kim size_t chainidx); 32917f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_supported_groups(SSL *s, WPACKET *pkt, 33017f01e99SJung-uk Kim unsigned int context, X509 *x, 33117f01e99SJung-uk Kim size_t chainidx); 332*b077aed3SPierre Pronchery 33317f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_early_data(SSL *s, WPACKET *pkt, 33417f01e99SJung-uk Kim unsigned int context, X509 *x, 33517f01e99SJung-uk Kim size_t chainidx); 33617f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_session_ticket(SSL *s, WPACKET *pkt, 33717f01e99SJung-uk Kim unsigned int context, X509 *x, 33817f01e99SJung-uk Kim size_t chainidx); 33917f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_sig_algs(SSL *s, WPACKET *pkt, 34017f01e99SJung-uk Kim unsigned int context, X509 *x, 34117f01e99SJung-uk Kim size_t chainidx); 34217f01e99SJung-uk Kim #ifndef OPENSSL_NO_OCSP 34317f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_status_request(SSL *s, WPACKET *pkt, 34417f01e99SJung-uk Kim unsigned int context, X509 *x, 34517f01e99SJung-uk Kim size_t chainidx); 34617f01e99SJung-uk Kim #endif 34717f01e99SJung-uk Kim #ifndef OPENSSL_NO_NEXTPROTONEG 34817f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_npn(SSL *s, WPACKET *pkt, unsigned int context, 34917f01e99SJung-uk Kim X509 *x, size_t chainidx); 35017f01e99SJung-uk Kim #endif 35117f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_alpn(SSL *s, WPACKET *pkt, unsigned int context, 35217f01e99SJung-uk Kim X509 *x, size_t chainidx); 35317f01e99SJung-uk Kim #ifndef OPENSSL_NO_SRTP 35417f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_use_srtp(SSL *s, WPACKET *pkt, unsigned int context, 35517f01e99SJung-uk Kim X509 *x, size_t chainidx); 35617f01e99SJung-uk Kim #endif 35717f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_etm(SSL *s, WPACKET *pkt, unsigned int context, 35817f01e99SJung-uk Kim X509 *x, size_t chainidx); 35917f01e99SJung-uk Kim #ifndef OPENSSL_NO_CT 36017f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_sct(SSL *s, WPACKET *pkt, unsigned int context, 36117f01e99SJung-uk Kim X509 *x, size_t chainidx); 36217f01e99SJung-uk Kim #endif 36317f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_ems(SSL *s, WPACKET *pkt, unsigned int context, 36417f01e99SJung-uk Kim X509 *x, size_t chainidx); 36517f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_supported_versions(SSL *s, WPACKET *pkt, 36617f01e99SJung-uk Kim unsigned int context, X509 *x, 36717f01e99SJung-uk Kim size_t chainidx); 36817f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_key_share(SSL *s, WPACKET *pkt, 36917f01e99SJung-uk Kim unsigned int context, X509 *x, 37017f01e99SJung-uk Kim size_t chainidx); 37117f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_psk_kex_modes(SSL *s, WPACKET *pkt, 37217f01e99SJung-uk Kim unsigned int context, X509 *x, 37317f01e99SJung-uk Kim size_t chainidx); 37417f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_cookie(SSL *s, WPACKET *pkt, unsigned int context, 37517f01e99SJung-uk Kim X509 *x, size_t chainidx); 37617f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_padding(SSL *s, WPACKET *pkt, 37717f01e99SJung-uk Kim unsigned int context, X509 *x, 37817f01e99SJung-uk Kim size_t chainidx); 37917f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_psk(SSL *s, WPACKET *pkt, unsigned int context, 38017f01e99SJung-uk Kim X509 *x, size_t chainidx); 38117f01e99SJung-uk Kim EXT_RETURN tls_construct_ctos_post_handshake_auth(SSL *s, WPACKET *pkt, unsigned int context, 38217f01e99SJung-uk Kim X509 *x, size_t chainidx); 38317f01e99SJung-uk Kim 38417f01e99SJung-uk Kim int tls_parse_stoc_renegotiate(SSL *s, PACKET *pkt, unsigned int context, 38517f01e99SJung-uk Kim X509 *x, size_t chainidx); 38617f01e99SJung-uk Kim int tls_parse_stoc_server_name(SSL *s, PACKET *pkt, unsigned int context, 38717f01e99SJung-uk Kim X509 *x, size_t chainidx); 38817f01e99SJung-uk Kim int tls_parse_stoc_early_data(SSL *s, PACKET *pkt, unsigned int context, 38917f01e99SJung-uk Kim X509 *x, size_t chainidx); 39017f01e99SJung-uk Kim int tls_parse_stoc_maxfragmentlen(SSL *s, PACKET *pkt, unsigned int context, 39117f01e99SJung-uk Kim X509 *x, size_t chainidx); 39217f01e99SJung-uk Kim int tls_parse_stoc_ec_pt_formats(SSL *s, PACKET *pkt, unsigned int context, 39317f01e99SJung-uk Kim X509 *x, size_t chainidx); 39417f01e99SJung-uk Kim int tls_parse_stoc_session_ticket(SSL *s, PACKET *pkt, unsigned int context, 39517f01e99SJung-uk Kim X509 *x, size_t chainidx); 39617f01e99SJung-uk Kim #ifndef OPENSSL_NO_OCSP 39717f01e99SJung-uk Kim int tls_parse_stoc_status_request(SSL *s, PACKET *pkt, unsigned int context, 39817f01e99SJung-uk Kim X509 *x, size_t chainidx); 39917f01e99SJung-uk Kim #endif 40017f01e99SJung-uk Kim #ifndef OPENSSL_NO_CT 40117f01e99SJung-uk Kim int tls_parse_stoc_sct(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 40217f01e99SJung-uk Kim size_t chainidx); 40317f01e99SJung-uk Kim #endif 40417f01e99SJung-uk Kim #ifndef OPENSSL_NO_NEXTPROTONEG 40517f01e99SJung-uk Kim int tls_parse_stoc_npn(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 40617f01e99SJung-uk Kim size_t chainidx); 40717f01e99SJung-uk Kim #endif 40817f01e99SJung-uk Kim int tls_parse_stoc_alpn(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 40917f01e99SJung-uk Kim size_t chainidx); 41017f01e99SJung-uk Kim #ifndef OPENSSL_NO_SRTP 41117f01e99SJung-uk Kim int tls_parse_stoc_use_srtp(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 41217f01e99SJung-uk Kim size_t chainidx); 41317f01e99SJung-uk Kim #endif 41417f01e99SJung-uk Kim int tls_parse_stoc_etm(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 41517f01e99SJung-uk Kim size_t chainidx); 41617f01e99SJung-uk Kim int tls_parse_stoc_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 41717f01e99SJung-uk Kim size_t chainidx); 41817f01e99SJung-uk Kim int tls_parse_stoc_supported_versions(SSL *s, PACKET *pkt, unsigned int context, 41917f01e99SJung-uk Kim X509 *x, size_t chainidx); 42017f01e99SJung-uk Kim int tls_parse_stoc_key_share(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 42117f01e99SJung-uk Kim size_t chainidx); 42217f01e99SJung-uk Kim int tls_parse_stoc_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 42317f01e99SJung-uk Kim size_t chainidx); 42417f01e99SJung-uk Kim int tls_parse_stoc_psk(SSL *s, PACKET *pkt, unsigned int context, X509 *x, 42517f01e99SJung-uk Kim size_t chainidx); 42617f01e99SJung-uk Kim 42717f01e99SJung-uk Kim int tls_handle_alpn(SSL *s); 42817f01e99SJung-uk Kim 42917f01e99SJung-uk Kim int tls13_save_handshake_digest_for_pha(SSL *s); 43017f01e99SJung-uk Kim int tls13_restore_handshake_digest_for_pha(SSL *s); 431