diff options
| author | cvs2svn <admin@example.com> | 2021-08-18 16:06:57 +0000 |
|---|---|---|
| committer | cvs2svn <admin@example.com> | 2021-08-18 16:06:57 +0000 |
| commit | d56c8fa8260d226f98b26f017b45b9c2b135f38d (patch) | |
| tree | 348178b41617813cc93787187984a734ef8379ca /src/lib/libssl/tls13_internal.h | |
| parent | 18b9c1bcab7c37d8c5bd05b8e0d14d0c59d96650 (diff) | |
| download | openbsd-tb_20210818.tar.gz openbsd-tb_20210818.tar.bz2 openbsd-tb_20210818.zip | |
This commit was manufactured by cvs2git to create tag 'tb_20210818'.tb_20210818
Diffstat (limited to 'src/lib/libssl/tls13_internal.h')
| -rw-r--r-- | src/lib/libssl/tls13_internal.h | 442 |
1 files changed, 0 insertions, 442 deletions
diff --git a/src/lib/libssl/tls13_internal.h b/src/lib/libssl/tls13_internal.h deleted file mode 100644 index 30ef7dd931..0000000000 --- a/src/lib/libssl/tls13_internal.h +++ /dev/null | |||
| @@ -1,442 +0,0 @@ | |||
| 1 | /* $OpenBSD: tls13_internal.h,v 1.90 2021/06/28 15:35:14 tb Exp $ */ | ||
| 2 | /* | ||
| 3 | * Copyright (c) 2018 Bob Beck <beck@openbsd.org> | ||
| 4 | * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> | ||
| 5 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | ||
| 6 | * | ||
| 7 | * Permission to use, copy, modify, and/or distribute this software for any | ||
| 8 | * purpose with or without fee is hereby granted, provided that the above | ||
| 9 | * copyright notice and this permission notice appear in all copies. | ||
| 10 | * | ||
| 11 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 12 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 13 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | ||
| 14 | * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 15 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | ||
| 16 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||
| 17 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef HEADER_TLS13_INTERNAL_H | ||
| 21 | #define HEADER_TLS13_INTERNAL_H | ||
| 22 | |||
| 23 | #include <openssl/evp.h> | ||
| 24 | #include <openssl/ssl.h> | ||
| 25 | |||
| 26 | #include "bytestring.h" | ||
| 27 | |||
| 28 | __BEGIN_HIDDEN_DECLS | ||
| 29 | |||
| 30 | #define TLS13_HS_CLIENT 1 | ||
| 31 | #define TLS13_HS_SERVER 2 | ||
| 32 | |||
| 33 | #define TLS13_IO_SUCCESS 1 | ||
| 34 | #define TLS13_IO_EOF 0 | ||
| 35 | #define TLS13_IO_FAILURE -1 | ||
| 36 | #define TLS13_IO_ALERT -2 | ||
| 37 | #define TLS13_IO_WANT_POLLIN -3 | ||
| 38 | #define TLS13_IO_WANT_POLLOUT -4 | ||
| 39 | #define TLS13_IO_WANT_RETRY -5 /* Retry the previous call immediately. */ | ||
| 40 | #define TLS13_IO_USE_LEGACY -6 | ||
| 41 | #define TLS13_IO_RECORD_VERSION -7 | ||
| 42 | #define TLS13_IO_RECORD_OVERFLOW -8 | ||
| 43 | |||
| 44 | #define TLS13_ERR_VERIFY_FAILED 16 | ||
| 45 | #define TLS13_ERR_HRR_FAILED 17 | ||
| 46 | #define TLS13_ERR_TRAILING_DATA 18 | ||
| 47 | #define TLS13_ERR_NO_SHARED_CIPHER 19 | ||
| 48 | #define TLS13_ERR_NO_CERTIFICATE 20 | ||
| 49 | #define TLS13_ERR_NO_PEER_CERTIFICATE 21 | ||
| 50 | |||
| 51 | #define TLS13_ALERT_LEVEL_WARNING 1 | ||
| 52 | #define TLS13_ALERT_LEVEL_FATAL 2 | ||
| 53 | |||
| 54 | #define TLS13_ALERT_CLOSE_NOTIFY 0 | ||
| 55 | #define TLS13_ALERT_UNEXPECTED_MESSAGE 10 | ||
| 56 | #define TLS13_ALERT_BAD_RECORD_MAC 20 | ||
| 57 | #define TLS13_ALERT_RECORD_OVERFLOW 22 | ||
| 58 | #define TLS13_ALERT_HANDSHAKE_FAILURE 40 | ||
| 59 | #define TLS13_ALERT_BAD_CERTIFICATE 42 | ||
| 60 | #define TLS13_ALERT_UNSUPPORTED_CERTIFICATE 43 | ||
| 61 | #define TLS13_ALERT_CERTIFICATE_REVOKED 44 | ||
| 62 | #define TLS13_ALERT_CERTIFICATE_EXPIRED 45 | ||
| 63 | #define TLS13_ALERT_CERTIFICATE_UNKNOWN 46 | ||
| 64 | #define TLS13_ALERT_ILLEGAL_PARAMETER 47 | ||
| 65 | #define TLS13_ALERT_UNKNOWN_CA 48 | ||
| 66 | #define TLS13_ALERT_ACCESS_DENIED 49 | ||
| 67 | #define TLS13_ALERT_DECODE_ERROR 50 | ||
| 68 | #define TLS13_ALERT_DECRYPT_ERROR 51 | ||
| 69 | #define TLS13_ALERT_PROTOCOL_VERSION 70 | ||
| 70 | #define TLS13_ALERT_INSUFFICIENT_SECURITY 71 | ||
| 71 | #define TLS13_ALERT_INTERNAL_ERROR 80 | ||
| 72 | #define TLS13_ALERT_INAPPROPRIATE_FALLBACK 86 | ||
| 73 | #define TLS13_ALERT_USER_CANCELED 90 | ||
| 74 | #define TLS13_ALERT_MISSING_EXTENSION 109 | ||
| 75 | #define TLS13_ALERT_UNSUPPORTED_EXTENSION 110 | ||
| 76 | #define TLS13_ALERT_UNRECOGNIZED_NAME 112 | ||
| 77 | #define TLS13_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE 113 | ||
| 78 | #define TLS13_ALERT_UNKNOWN_PSK_IDENTITY 115 | ||
| 79 | #define TLS13_ALERT_CERTIFICATE_REQUIRED 116 | ||
| 80 | #define TLS13_ALERT_NO_APPLICATION_PROTOCOL 120 | ||
| 81 | |||
| 82 | #define TLS13_INFO_HANDSHAKE_STARTED SSL_CB_HANDSHAKE_START | ||
| 83 | #define TLS13_INFO_HANDSHAKE_COMPLETED SSL_CB_HANDSHAKE_DONE | ||
| 84 | #define TLS13_INFO_ACCEPT_LOOP SSL_CB_ACCEPT_LOOP | ||
| 85 | #define TLS13_INFO_CONNECT_LOOP SSL_CB_CONNECT_LOOP | ||
| 86 | |||
| 87 | typedef void (*tls13_alert_cb)(uint8_t _alert_desc, void *_cb_arg); | ||
| 88 | typedef ssize_t (*tls13_phh_recv_cb)(void *_cb_arg, CBS *_cbs); | ||
| 89 | typedef void (*tls13_phh_sent_cb)(void *_cb_arg); | ||
| 90 | typedef ssize_t (*tls13_read_cb)(void *_buf, size_t _buflen, void *_cb_arg); | ||
| 91 | typedef ssize_t (*tls13_write_cb)(const void *_buf, size_t _buflen, | ||
| 92 | void *_cb_arg); | ||
| 93 | typedef void (*tls13_handshake_message_cb)(void *_cb_arg); | ||
| 94 | typedef void (*tls13_info_cb)(void *_cb_arg, int _state, int _ret); | ||
| 95 | typedef int (*tls13_ocsp_status_cb)(void *_cb_arg); | ||
| 96 | |||
| 97 | /* | ||
| 98 | * Buffers. | ||
| 99 | */ | ||
| 100 | struct tls13_buffer; | ||
| 101 | |||
| 102 | struct tls13_buffer *tls13_buffer_new(size_t init_size); | ||
| 103 | int tls13_buffer_set_data(struct tls13_buffer *buf, CBS *data); | ||
| 104 | void tls13_buffer_free(struct tls13_buffer *buf); | ||
| 105 | ssize_t tls13_buffer_extend(struct tls13_buffer *buf, size_t len, | ||
| 106 | tls13_read_cb read_cb, void *cb_arg); | ||
| 107 | void tls13_buffer_cbs(struct tls13_buffer *buf, CBS *cbs); | ||
| 108 | int tls13_buffer_finish(struct tls13_buffer *buf, uint8_t **out, | ||
| 109 | size_t *out_len); | ||
| 110 | |||
| 111 | /* | ||
| 112 | * Secrets. | ||
| 113 | */ | ||
| 114 | struct tls13_secret { | ||
| 115 | uint8_t *data; | ||
| 116 | size_t len; | ||
| 117 | }; | ||
| 118 | |||
| 119 | /* RFC 8446 Section 7.1 Page 92 */ | ||
| 120 | struct tls13_secrets { | ||
| 121 | const EVP_MD *digest; | ||
| 122 | int resumption; | ||
| 123 | int init_done; | ||
| 124 | int early_done; | ||
| 125 | int handshake_done; | ||
| 126 | int schedule_done; | ||
| 127 | int insecure; /* Set by tests */ | ||
| 128 | struct tls13_secret zeros; | ||
| 129 | struct tls13_secret empty_hash; | ||
| 130 | struct tls13_secret extracted_early; | ||
| 131 | struct tls13_secret binder_key; | ||
| 132 | struct tls13_secret client_early_traffic; | ||
| 133 | struct tls13_secret early_exporter_master; | ||
| 134 | struct tls13_secret derived_early; | ||
| 135 | struct tls13_secret extracted_handshake; | ||
| 136 | struct tls13_secret client_handshake_traffic; | ||
| 137 | struct tls13_secret server_handshake_traffic; | ||
| 138 | struct tls13_secret derived_handshake; | ||
| 139 | struct tls13_secret extracted_master; | ||
| 140 | struct tls13_secret client_application_traffic; | ||
| 141 | struct tls13_secret server_application_traffic; | ||
| 142 | struct tls13_secret exporter_master; | ||
| 143 | struct tls13_secret resumption_master; | ||
| 144 | }; | ||
| 145 | |||
| 146 | int tls13_secret_init(struct tls13_secret *secret, size_t len); | ||
| 147 | void tls13_secret_cleanup(struct tls13_secret *secret); | ||
| 148 | struct tls13_secrets *tls13_secrets_create(const EVP_MD *digest, | ||
| 149 | int resumption); | ||
| 150 | void tls13_secrets_destroy(struct tls13_secrets *secrets); | ||
| 151 | |||
| 152 | int tls13_hkdf_expand_label(struct tls13_secret *out, const EVP_MD *digest, | ||
| 153 | const struct tls13_secret *secret, const char *label, | ||
| 154 | const struct tls13_secret *context); | ||
| 155 | int tls13_hkdf_expand_label_with_length(struct tls13_secret *out, | ||
| 156 | const EVP_MD *digest, const struct tls13_secret *secret, | ||
| 157 | const uint8_t *label, size_t label_len, const struct tls13_secret *context); | ||
| 158 | |||
| 159 | int tls13_derive_secret(struct tls13_secret *out, const EVP_MD *digest, | ||
| 160 | const struct tls13_secret *secret, const char *label, | ||
| 161 | const struct tls13_secret *context); | ||
| 162 | int tls13_derive_secret_with_label_length(struct tls13_secret *out, | ||
| 163 | const EVP_MD *digest, const struct tls13_secret *secret, | ||
| 164 | const uint8_t *label, size_t label_len, const struct tls13_secret *context); | ||
| 165 | |||
| 166 | int tls13_derive_early_secrets(struct tls13_secrets *secrets, uint8_t *psk, | ||
| 167 | size_t psk_len, const struct tls13_secret *context); | ||
| 168 | int tls13_derive_handshake_secrets(struct tls13_secrets *secrets, | ||
| 169 | const uint8_t *ecdhe, size_t ecdhe_len, const struct tls13_secret *context); | ||
| 170 | int tls13_derive_application_secrets(struct tls13_secrets *secrets, | ||
| 171 | const struct tls13_secret *context); | ||
| 172 | int tls13_update_client_traffic_secret(struct tls13_secrets *secrets); | ||
| 173 | int tls13_update_server_traffic_secret(struct tls13_secrets *secrets); | ||
| 174 | |||
| 175 | /* | ||
| 176 | * Key shares. | ||
| 177 | */ | ||
| 178 | struct tls13_key_share; | ||
| 179 | |||
| 180 | struct tls13_key_share *tls13_key_share_new(uint16_t group_id); | ||
| 181 | struct tls13_key_share *tls13_key_share_new_nid(int nid); | ||
| 182 | void tls13_key_share_free(struct tls13_key_share *ks); | ||
| 183 | |||
| 184 | uint16_t tls13_key_share_group(struct tls13_key_share *ks); | ||
| 185 | int tls13_key_share_peer_pkey(struct tls13_key_share *ks, EVP_PKEY *pkey); | ||
| 186 | int tls13_key_share_generate(struct tls13_key_share *ks); | ||
| 187 | int tls13_key_share_public(struct tls13_key_share *ks, CBB *cbb); | ||
| 188 | int tls13_key_share_peer_public(struct tls13_key_share *ks, uint16_t group, | ||
| 189 | CBS *cbs); | ||
| 190 | int tls13_key_share_derive(struct tls13_key_share *ks, uint8_t **shared_key, | ||
| 191 | size_t *shared_key_len); | ||
| 192 | |||
| 193 | /* | ||
| 194 | * Record Layer. | ||
| 195 | */ | ||
| 196 | struct tls13_record_layer; | ||
| 197 | |||
| 198 | struct tls13_record_layer_callbacks { | ||
| 199 | tls13_read_cb wire_read; | ||
| 200 | tls13_write_cb wire_write; | ||
| 201 | tls13_alert_cb alert_recv; | ||
| 202 | tls13_alert_cb alert_sent; | ||
| 203 | tls13_phh_recv_cb phh_recv; | ||
| 204 | tls13_phh_sent_cb phh_sent; | ||
| 205 | }; | ||
| 206 | |||
| 207 | struct tls13_record_layer *tls13_record_layer_new( | ||
| 208 | const struct tls13_record_layer_callbacks *callbacks, void *cb_arg); | ||
| 209 | void tls13_record_layer_free(struct tls13_record_layer *rl); | ||
| 210 | void tls13_record_layer_allow_ccs(struct tls13_record_layer *rl, int allow); | ||
| 211 | void tls13_record_layer_allow_legacy_alerts(struct tls13_record_layer *rl, int allow); | ||
| 212 | void tls13_record_layer_rbuf(struct tls13_record_layer *rl, CBS *cbs); | ||
| 213 | void tls13_record_layer_set_aead(struct tls13_record_layer *rl, | ||
| 214 | const EVP_AEAD *aead); | ||
| 215 | void tls13_record_layer_set_hash(struct tls13_record_layer *rl, | ||
| 216 | const EVP_MD *hash); | ||
| 217 | void tls13_record_layer_set_legacy_version(struct tls13_record_layer *rl, | ||
| 218 | uint16_t version); | ||
| 219 | void tls13_record_layer_set_retry_after_phh(struct tls13_record_layer *rl, int retry); | ||
| 220 | void tls13_record_layer_handshake_completed(struct tls13_record_layer *rl); | ||
| 221 | int tls13_record_layer_set_read_traffic_key(struct tls13_record_layer *rl, | ||
| 222 | struct tls13_secret *read_key); | ||
| 223 | int tls13_record_layer_set_write_traffic_key(struct tls13_record_layer *rl, | ||
| 224 | struct tls13_secret *write_key); | ||
| 225 | ssize_t tls13_record_layer_send_pending(struct tls13_record_layer *rl); | ||
| 226 | ssize_t tls13_record_layer_phh(struct tls13_record_layer *rl, CBS *cbs); | ||
| 227 | |||
| 228 | ssize_t tls13_read_handshake_data(struct tls13_record_layer *rl, uint8_t *buf, size_t n); | ||
| 229 | ssize_t tls13_write_handshake_data(struct tls13_record_layer *rl, const uint8_t *buf, | ||
| 230 | size_t n); | ||
| 231 | ssize_t tls13_pending_application_data(struct tls13_record_layer *rl); | ||
| 232 | ssize_t tls13_peek_application_data(struct tls13_record_layer *rl, uint8_t *buf, size_t n); | ||
| 233 | ssize_t tls13_read_application_data(struct tls13_record_layer *rl, uint8_t *buf, size_t n); | ||
| 234 | ssize_t tls13_write_application_data(struct tls13_record_layer *rl, const uint8_t *buf, | ||
| 235 | size_t n); | ||
| 236 | |||
| 237 | ssize_t tls13_send_alert(struct tls13_record_layer *rl, uint8_t alert_desc); | ||
| 238 | ssize_t tls13_send_dummy_ccs(struct tls13_record_layer *rl); | ||
| 239 | |||
| 240 | /* | ||
| 241 | * Handshake Messages. | ||
| 242 | */ | ||
| 243 | struct tls13_handshake_msg; | ||
| 244 | |||
| 245 | struct tls13_handshake_msg *tls13_handshake_msg_new(void); | ||
| 246 | void tls13_handshake_msg_free(struct tls13_handshake_msg *msg); | ||
| 247 | void tls13_handshake_msg_data(struct tls13_handshake_msg *msg, CBS *cbs); | ||
| 248 | int tls13_handshake_msg_set_buffer(struct tls13_handshake_msg *msg, CBS *cbs); | ||
| 249 | uint8_t tls13_handshake_msg_type(struct tls13_handshake_msg *msg); | ||
| 250 | int tls13_handshake_msg_content(struct tls13_handshake_msg *msg, CBS *cbs); | ||
| 251 | int tls13_handshake_msg_start(struct tls13_handshake_msg *msg, CBB *body, | ||
| 252 | uint8_t msg_type); | ||
| 253 | int tls13_handshake_msg_finish(struct tls13_handshake_msg *msg); | ||
| 254 | int tls13_handshake_msg_recv(struct tls13_handshake_msg *msg, | ||
| 255 | struct tls13_record_layer *rl); | ||
| 256 | int tls13_handshake_msg_send(struct tls13_handshake_msg *msg, | ||
| 257 | struct tls13_record_layer *rl); | ||
| 258 | |||
| 259 | struct tls13_handshake_stage { | ||
| 260 | uint8_t hs_type; | ||
| 261 | uint8_t message_number; | ||
| 262 | }; | ||
| 263 | |||
| 264 | struct ssl_handshake_tls13_st; | ||
| 265 | |||
| 266 | struct tls13_error { | ||
| 267 | int code; | ||
| 268 | int subcode; | ||
| 269 | int errnum; | ||
| 270 | const char *file; | ||
| 271 | int line; | ||
| 272 | char *msg; | ||
| 273 | }; | ||
| 274 | |||
| 275 | struct tls13_ctx { | ||
| 276 | struct tls13_error error; | ||
| 277 | |||
| 278 | SSL *ssl; | ||
| 279 | struct ssl_handshake_st *hs; | ||
| 280 | uint8_t mode; | ||
| 281 | struct tls13_handshake_stage handshake_stage; | ||
| 282 | int handshake_started; | ||
| 283 | int handshake_completed; | ||
| 284 | int middlebox_compat; | ||
| 285 | int send_dummy_ccs; | ||
| 286 | int send_dummy_ccs_after; | ||
| 287 | |||
| 288 | int close_notify_sent; | ||
| 289 | int close_notify_recv; | ||
| 290 | |||
| 291 | const EVP_AEAD *aead; | ||
| 292 | const EVP_MD *hash; | ||
| 293 | |||
| 294 | struct tls13_record_layer *rl; | ||
| 295 | struct tls13_handshake_msg *hs_msg; | ||
| 296 | uint8_t key_update_request; | ||
| 297 | uint8_t alert; | ||
| 298 | int phh_count; | ||
| 299 | time_t phh_last_seen; | ||
| 300 | |||
| 301 | tls13_handshake_message_cb handshake_message_sent_cb; | ||
| 302 | tls13_handshake_message_cb handshake_message_recv_cb; | ||
| 303 | tls13_info_cb info_cb; | ||
| 304 | tls13_ocsp_status_cb ocsp_status_recv_cb; | ||
| 305 | }; | ||
| 306 | #ifndef TLS13_PHH_LIMIT_TIME | ||
| 307 | #define TLS13_PHH_LIMIT_TIME 3600 | ||
| 308 | #endif | ||
| 309 | #ifndef TLS13_PHH_LIMIT | ||
| 310 | #define TLS13_PHH_LIMIT 100 | ||
| 311 | #endif | ||
| 312 | |||
| 313 | struct tls13_ctx *tls13_ctx_new(int mode); | ||
| 314 | void tls13_ctx_free(struct tls13_ctx *ctx); | ||
| 315 | |||
| 316 | const EVP_AEAD *tls13_cipher_aead(const SSL_CIPHER *cipher); | ||
| 317 | const EVP_MD *tls13_cipher_hash(const SSL_CIPHER *cipher); | ||
| 318 | |||
| 319 | /* | ||
| 320 | * Legacy interfaces. | ||
| 321 | */ | ||
| 322 | int tls13_use_legacy_client(struct tls13_ctx *ctx); | ||
| 323 | int tls13_use_legacy_server(struct tls13_ctx *ctx); | ||
| 324 | int tls13_legacy_accept(SSL *ssl); | ||
| 325 | int tls13_legacy_connect(SSL *ssl); | ||
| 326 | int tls13_legacy_return_code(SSL *ssl, ssize_t ret); | ||
| 327 | ssize_t tls13_legacy_wire_read_cb(void *buf, size_t n, void *arg); | ||
| 328 | ssize_t tls13_legacy_wire_write_cb(const void *buf, size_t n, void *arg); | ||
| 329 | int tls13_legacy_pending(const SSL *ssl); | ||
| 330 | int tls13_legacy_read_bytes(SSL *ssl, int type, unsigned char *buf, int len, | ||
| 331 | int peek); | ||
| 332 | int tls13_legacy_write_bytes(SSL *ssl, int type, const void *buf, int len); | ||
| 333 | int tls13_legacy_shutdown(SSL *ssl); | ||
| 334 | int tls13_legacy_servername_process(struct tls13_ctx *ctx, uint8_t *alert); | ||
| 335 | |||
| 336 | /* | ||
| 337 | * Message Types - RFC 8446, Section B.3. | ||
| 338 | * | ||
| 339 | * Values listed as "_RESERVED" were used in previous versions of TLS and are | ||
| 340 | * listed here for completeness. TLS 1.3 implementations MUST NOT send them but | ||
| 341 | * might receive them from older TLS implementations. | ||
| 342 | */ | ||
| 343 | #define TLS13_MT_HELLO_REQUEST_RESERVED 0 | ||
| 344 | #define TLS13_MT_CLIENT_HELLO 1 | ||
| 345 | #define TLS13_MT_SERVER_HELLO 2 | ||
| 346 | #define TLS13_MT_HELLO_VERIFY_REQUEST_RESERVED 3 | ||
| 347 | #define TLS13_MT_NEW_SESSION_TICKET 4 | ||
| 348 | #define TLS13_MT_END_OF_EARLY_DATA 5 | ||
| 349 | #define TLS13_MT_HELLO_RETRY_REQUEST_RESERVED 6 | ||
| 350 | #define TLS13_MT_ENCRYPTED_EXTENSIONS 8 | ||
| 351 | #define TLS13_MT_CERTIFICATE 11 | ||
| 352 | #define TLS13_MT_SERVER_KEY_EXCHANGE_RESERVED 12 | ||
| 353 | #define TLS13_MT_CERTIFICATE_REQUEST 13 | ||
| 354 | #define TLS13_MT_SERVER_HELLO_DONE_RESERVED 14 | ||
| 355 | #define TLS13_MT_CERTIFICATE_VERIFY 15 | ||
| 356 | #define TLS13_MT_CLIENT_KEY_EXCHANGE_RESERVED 16 | ||
| 357 | #define TLS13_MT_FINISHED 20 | ||
| 358 | #define TLS13_MT_CERTIFICATE_URL_RESERVED 21 | ||
| 359 | #define TLS13_MT_CERTIFICATE_STATUS_RESERVED 22 | ||
| 360 | #define TLS13_MT_SUPPLEMENTAL_DATA_RESERVED 23 | ||
| 361 | #define TLS13_MT_KEY_UPDATE 24 | ||
| 362 | #define TLS13_MT_MESSAGE_HASH 254 | ||
| 363 | |||
| 364 | int tls13_handshake_msg_record(struct tls13_ctx *ctx); | ||
| 365 | int tls13_handshake_perform(struct tls13_ctx *ctx); | ||
| 366 | |||
| 367 | int tls13_client_init(struct tls13_ctx *ctx); | ||
| 368 | int tls13_server_init(struct tls13_ctx *ctx); | ||
| 369 | int tls13_client_connect(struct tls13_ctx *ctx); | ||
| 370 | int tls13_server_accept(struct tls13_ctx *ctx); | ||
| 371 | |||
| 372 | int tls13_client_hello_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 373 | int tls13_client_hello_sent(struct tls13_ctx *ctx); | ||
| 374 | int tls13_client_hello_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 375 | int tls13_client_hello_retry_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 376 | int tls13_client_hello_retry_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 377 | int tls13_client_end_of_early_data_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 378 | int tls13_client_end_of_early_data_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 379 | int tls13_client_certificate_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 380 | int tls13_client_certificate_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 381 | int tls13_client_certificate_verify_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 382 | int tls13_client_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 383 | int tls13_client_finished_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 384 | int tls13_client_finished_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 385 | int tls13_client_finished_sent(struct tls13_ctx *ctx); | ||
| 386 | int tls13_server_hello_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 387 | int tls13_server_hello_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 388 | int tls13_server_hello_sent(struct tls13_ctx *ctx); | ||
| 389 | int tls13_server_hello_retry_request_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 390 | int tls13_server_hello_retry_request_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 391 | int tls13_server_hello_retry_request_sent(struct tls13_ctx *ctx); | ||
| 392 | int tls13_server_encrypted_extensions_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 393 | int tls13_server_encrypted_extensions_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 394 | int tls13_server_certificate_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 395 | int tls13_server_certificate_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 396 | int tls13_server_certificate_request_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 397 | int tls13_server_certificate_request_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 398 | int tls13_server_certificate_verify_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 399 | int tls13_server_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 400 | int tls13_server_finished_recv(struct tls13_ctx *ctx, CBS *cbs); | ||
| 401 | int tls13_server_finished_send(struct tls13_ctx *ctx, CBB *cbb); | ||
| 402 | int tls13_server_finished_sent(struct tls13_ctx *ctx); | ||
| 403 | |||
| 404 | void tls13_error_clear(struct tls13_error *error); | ||
| 405 | int tls13_cert_add(struct tls13_ctx *ctx, CBB *cbb, X509 *cert, | ||
| 406 | int(*build_extensions)(SSL *s, uint16_t msg_type, CBB *cbb)); | ||
| 407 | |||
| 408 | int tls13_synthetic_handshake_message(struct tls13_ctx *ctx); | ||
| 409 | int tls13_clienthello_hash_init(struct tls13_ctx *ctx); | ||
| 410 | void tls13_clienthello_hash_clear(struct ssl_handshake_tls13_st *hs); | ||
| 411 | int tls13_clienthello_hash_update_bytes(struct tls13_ctx *ctx, void *data, | ||
| 412 | size_t len); | ||
| 413 | int tls13_clienthello_hash_update(struct tls13_ctx *ctx, CBS *cbs); | ||
| 414 | int tls13_clienthello_hash_finalize(struct tls13_ctx *ctx); | ||
| 415 | int tls13_clienthello_hash_validate(struct tls13_ctx *ctx); | ||
| 416 | |||
| 417 | int tls13_error_set(struct tls13_error *error, int code, int subcode, | ||
| 418 | const char *file, int line, const char *fmt, ...); | ||
| 419 | int tls13_error_setx(struct tls13_error *error, int code, int subcode, | ||
| 420 | const char *file, int line, const char *fmt, ...); | ||
| 421 | |||
| 422 | #define tls13_set_error(ctx, code, subcode, fmt, ...) \ | ||
| 423 | tls13_error_set(&(ctx)->error, (code), (subcode), __FILE__, __LINE__, \ | ||
| 424 | (fmt), __VA_ARGS__) | ||
| 425 | #define tls13_set_errorx(ctx, code, subcode, fmt, ...) \ | ||
| 426 | tls13_error_setx(&(ctx)->error, (code), (subcode), __FILE__, __LINE__, \ | ||
| 427 | (fmt), __VA_ARGS__) | ||
| 428 | |||
| 429 | int tls13_exporter(struct tls13_ctx *ctx, const uint8_t *label, size_t label_len, | ||
| 430 | const uint8_t *context_value, size_t context_value_len, uint8_t *out, | ||
| 431 | size_t out_len); | ||
| 432 | |||
| 433 | extern const uint8_t tls13_downgrade_12[8]; | ||
| 434 | extern const uint8_t tls13_downgrade_11[8]; | ||
| 435 | extern const uint8_t tls13_hello_retry_request_hash[32]; | ||
| 436 | extern const uint8_t tls13_cert_verify_pad[64]; | ||
| 437 | extern const uint8_t tls13_cert_client_verify_context[]; | ||
| 438 | extern const uint8_t tls13_cert_server_verify_context[]; | ||
| 439 | |||
| 440 | __END_HIDDEN_DECLS | ||
| 441 | |||
| 442 | #endif | ||
