summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libssl/Makefile3
-rw-r--r--src/lib/libssl/ssl_locl.h6
-rw-r--r--src/lib/libssl/tls13_internal.h21
-rw-r--r--src/lib/libssl/tls13_lib.c23
-rw-r--r--src/lib/libssl/tls13_quic.c135
-rw-r--r--src/lib/libssl/tls13_record_layer.c31
-rw-r--r--src/lib/libssl/tls_internal.h14
7 files changed, 217 insertions, 16 deletions
diff --git a/src/lib/libssl/Makefile b/src/lib/libssl/Makefile
index e6930b0b9f..d0d7bc4e02 100644
--- a/src/lib/libssl/Makefile
+++ b/src/lib/libssl/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.75 2022/06/28 20:40:24 tb Exp $ 1# $OpenBSD: Makefile,v 1.76 2022/07/24 14:28:16 jsing Exp $
2 2
3.include <bsd.own.mk> 3.include <bsd.own.mk>
4.ifndef NOMAN 4.ifndef NOMAN
@@ -79,6 +79,7 @@ SRCS= \
79 tls13_key_schedule.c \ 79 tls13_key_schedule.c \
80 tls13_legacy.c \ 80 tls13_legacy.c \
81 tls13_lib.c \ 81 tls13_lib.c \
82 tls13_quic.c \
82 tls13_record.c \ 83 tls13_record.c \
83 tls13_record_layer.c \ 84 tls13_record_layer.c \
84 tls13_server.c \ 85 tls13_server.c \
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h
index 7623daccf1..18daf791f0 100644
--- a/src/lib/libssl/ssl_locl.h
+++ b/src/lib/libssl/ssl_locl.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_locl.h,v 1.416 2022/07/22 19:54:46 jsing Exp $ */ 1/* $OpenBSD: ssl_locl.h,v 1.417 2022/07/24 14:28:16 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -581,6 +581,10 @@ typedef struct ssl_handshake_tls13_st {
581 EVP_MD_CTX *clienthello_md_ctx; 581 EVP_MD_CTX *clienthello_md_ctx;
582 unsigned char *clienthello_hash; 582 unsigned char *clienthello_hash;
583 unsigned int clienthello_hash_len; 583 unsigned int clienthello_hash_len;
584
585 /* QUIC read/write encryption levels. */
586 enum ssl_encryption_level_t quic_read_level;
587 enum ssl_encryption_level_t quic_write_level;
584} SSL_HANDSHAKE_TLS13; 588} SSL_HANDSHAKE_TLS13;
585 589
586typedef struct ssl_handshake_st { 590typedef struct ssl_handshake_st {
diff --git a/src/lib/libssl/tls13_internal.h b/src/lib/libssl/tls13_internal.h
index 6382f8b048..f4b17bdf25 100644
--- a/src/lib/libssl/tls13_internal.h
+++ b/src/lib/libssl/tls13_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_internal.h,v 1.100 2022/07/24 14:16:29 jsing Exp $ */ 1/* $OpenBSD: tls13_internal.h,v 1.101 2022/07/24 14:28:16 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org>
4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org>
@@ -175,9 +175,19 @@ int tls13_update_server_traffic_secret(struct tls13_secrets *secrets);
175struct tls13_record_layer; 175struct tls13_record_layer;
176 176
177struct tls13_record_layer_callbacks { 177struct tls13_record_layer_callbacks {
178 /* Wire callbacks. */
178 tls_read_cb wire_read; 179 tls_read_cb wire_read;
179 tls_write_cb wire_write; 180 tls_write_cb wire_write;
180 tls_flush_cb wire_flush; 181 tls_flush_cb wire_flush;
182
183 /* Interceptors. */
184 tls_handshake_read_cb handshake_read;
185 tls_handshake_write_cb handshake_write;
186 tls_traffic_key_cb set_read_traffic_key;
187 tls_traffic_key_cb set_write_traffic_key;
188 tls_alert_send_cb alert_send;
189
190 /* Notification callbacks. */
181 tls13_alert_cb alert_recv; 191 tls13_alert_cb alert_recv;
182 tls13_alert_cb alert_sent; 192 tls13_alert_cb alert_sent;
183 tls13_phh_recv_cb phh_recv; 193 tls13_phh_recv_cb phh_recv;
@@ -187,6 +197,8 @@ struct tls13_record_layer_callbacks {
187struct tls13_record_layer *tls13_record_layer_new( 197struct tls13_record_layer *tls13_record_layer_new(
188 const struct tls13_record_layer_callbacks *callbacks, void *cb_arg); 198 const struct tls13_record_layer_callbacks *callbacks, void *cb_arg);
189void tls13_record_layer_free(struct tls13_record_layer *rl); 199void tls13_record_layer_free(struct tls13_record_layer *rl);
200void tls13_record_layer_set_callbacks(struct tls13_record_layer *rl,
201 const struct tls13_record_layer_callbacks *callbacks, void *cb_arg);
190void tls13_record_layer_allow_ccs(struct tls13_record_layer *rl, int allow); 202void tls13_record_layer_allow_ccs(struct tls13_record_layer *rl, int allow);
191void tls13_record_layer_allow_legacy_alerts(struct tls13_record_layer *rl, int allow); 203void tls13_record_layer_allow_legacy_alerts(struct tls13_record_layer *rl, int allow);
192void tls13_record_layer_rcontent(struct tls13_record_layer *rl, CBS *cbs); 204void tls13_record_layer_rcontent(struct tls13_record_layer *rl, CBS *cbs);
@@ -297,6 +309,13 @@ void tls13_ctx_free(struct tls13_ctx *ctx);
297const EVP_AEAD *tls13_cipher_aead(const SSL_CIPHER *cipher); 309const EVP_AEAD *tls13_cipher_aead(const SSL_CIPHER *cipher);
298const EVP_MD *tls13_cipher_hash(const SSL_CIPHER *cipher); 310const EVP_MD *tls13_cipher_hash(const SSL_CIPHER *cipher);
299 311
312void tls13_alert_received_cb(uint8_t alert_desc, void *arg);
313void tls13_alert_sent_cb(uint8_t alert_desc, void *arg);
314ssize_t tls13_phh_received_cb(void *cb_arg);
315void tls13_phh_done_cb(void *cb_arg);
316
317int tls13_quic_init(struct tls13_ctx *ctx);
318
300/* 319/*
301 * Legacy interfaces. 320 * Legacy interfaces.
302 */ 321 */
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c
index d63951a0ff..57c58a3d30 100644
--- a/src/lib/libssl/tls13_lib.c
+++ b/src/lib/libssl/tls13_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_lib.c,v 1.69 2022/07/24 14:19:45 jsing Exp $ */ 1/* $OpenBSD: tls13_lib.c,v 1.70 2022/07/24 14:28:16 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org> 4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org>
@@ -103,7 +103,7 @@ tls13_cipher_hash(const SSL_CIPHER *cipher)
103 return NULL; 103 return NULL;
104} 104}
105 105
106static void 106void
107tls13_alert_received_cb(uint8_t alert_desc, void *arg) 107tls13_alert_received_cb(uint8_t alert_desc, void *arg)
108{ 108{
109 struct tls13_ctx *ctx = arg; 109 struct tls13_ctx *ctx = arg;
@@ -132,7 +132,7 @@ tls13_alert_received_cb(uint8_t alert_desc, void *arg)
132 SSL_CTX_remove_session(ctx->ssl->ctx, ctx->ssl->session); 132 SSL_CTX_remove_session(ctx->ssl->ctx, ctx->ssl->session);
133} 133}
134 134
135static void 135void
136tls13_alert_sent_cb(uint8_t alert_desc, void *arg) 136tls13_alert_sent_cb(uint8_t alert_desc, void *arg)
137{ 137{
138 struct tls13_ctx *ctx = arg; 138 struct tls13_ctx *ctx = arg;
@@ -328,7 +328,7 @@ tls13_key_update_recv(struct tls13_ctx *ctx, CBS *cbs)
328 return tls13_send_alert(ctx->rl, alert); 328 return tls13_send_alert(ctx->rl, alert);
329} 329}
330 330
331static ssize_t 331ssize_t
332tls13_phh_received_cb(void *cb_arg) 332tls13_phh_received_cb(void *cb_arg)
333{ 333{
334 ssize_t ret = TLS13_IO_FAILURE; 334 ssize_t ret = TLS13_IO_FAILURE;
@@ -369,7 +369,7 @@ tls13_phh_received_cb(void *cb_arg)
369 return ret; 369 return ret;
370} 370}
371 371
372static void 372void
373tls13_phh_done_cb(void *cb_arg) 373tls13_phh_done_cb(void *cb_arg)
374{ 374{
375 struct tls13_ctx *ctx = cb_arg; 375 struct tls13_ctx *ctx = cb_arg;
@@ -380,10 +380,11 @@ tls13_phh_done_cb(void *cb_arg)
380 } 380 }
381} 381}
382 382
383static const struct tls13_record_layer_callbacks rl_callbacks = { 383static const struct tls13_record_layer_callbacks tls13_rl_callbacks = {
384 .wire_read = tls13_legacy_wire_read_cb, 384 .wire_read = tls13_legacy_wire_read_cb,
385 .wire_write = tls13_legacy_wire_write_cb, 385 .wire_write = tls13_legacy_wire_write_cb,
386 .wire_flush = tls13_legacy_wire_flush_cb, 386 .wire_flush = tls13_legacy_wire_flush_cb,
387
387 .alert_recv = tls13_alert_received_cb, 388 .alert_recv = tls13_alert_received_cb,
388 .alert_sent = tls13_alert_sent_cb, 389 .alert_sent = tls13_alert_sent_cb,
389 .phh_recv = tls13_phh_received_cb, 390 .phh_recv = tls13_phh_received_cb,
@@ -402,7 +403,7 @@ tls13_ctx_new(int mode, SSL *ssl)
402 ctx->mode = mode; 403 ctx->mode = mode;
403 ctx->ssl = ssl; 404 ctx->ssl = ssl;
404 405
405 if ((ctx->rl = tls13_record_layer_new(&rl_callbacks, ctx)) == NULL) 406 if ((ctx->rl = tls13_record_layer_new(&tls13_rl_callbacks, ctx)) == NULL)
406 goto err; 407 goto err;
407 408
408 ctx->handshake_message_sent_cb = tls13_legacy_handshake_message_sent_cb; 409 ctx->handshake_message_sent_cb = tls13_legacy_handshake_message_sent_cb;
@@ -410,11 +411,15 @@ tls13_ctx_new(int mode, SSL *ssl)
410 ctx->info_cb = tls13_legacy_info_cb; 411 ctx->info_cb = tls13_legacy_info_cb;
411 ctx->ocsp_status_recv_cb = tls13_legacy_ocsp_status_recv_cb; 412 ctx->ocsp_status_recv_cb = tls13_legacy_ocsp_status_recv_cb;
412 413
413 if (!SSL_is_quic(ssl)) 414 ctx->middlebox_compat = 1;
414 ctx->middlebox_compat = 1;
415 415
416 ssl->internal->tls13 = ctx; 416 ssl->internal->tls13 = ctx;
417 417
418 if (SSL_is_quic(ssl)) {
419 if (!tls13_quic_init(ctx))
420 goto err;
421 }
422
418 return ctx; 423 return ctx;
419 424
420 err: 425 err:
diff --git a/src/lib/libssl/tls13_quic.c b/src/lib/libssl/tls13_quic.c
new file mode 100644
index 0000000000..3f814188a7
--- /dev/null
+++ b/src/lib/libssl/tls13_quic.c
@@ -0,0 +1,135 @@
1/* $OpenBSD: tls13_quic.c,v 1.1 2022/07/24 14:28:16 jsing Exp $ */
2/*
3 * Copyright (c) 2022 Joel Sing <jsing@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <ssl_locl.h>
19
20#include "tls13_internal.h"
21
22static ssize_t
23tls13_quic_wire_read_cb(void *buf, size_t n, void *arg)
24{
25 struct tls13_ctx *ctx = arg;
26 SSL *ssl = ctx->ssl;
27
28 SSLerror(ssl, ERR_R_INTERNAL_ERROR);
29 return TLS13_IO_FAILURE;
30}
31
32static ssize_t
33tls13_quic_wire_write_cb(const void *buf, size_t n, void *arg)
34{
35 struct tls13_ctx *ctx = arg;
36 SSL *ssl = ctx->ssl;
37
38 SSLerror(ssl, ERR_R_INTERNAL_ERROR);
39 return TLS13_IO_FAILURE;
40}
41
42static ssize_t
43tls13_quic_wire_flush_cb(void *arg)
44{
45 struct tls13_ctx *ctx = arg;
46 SSL *ssl = ctx->ssl;
47
48 /* XXX - call flush_flight. */
49 SSLerror(ssl, ERR_R_INTERNAL_ERROR);
50 return TLS13_IO_FAILURE;
51}
52
53static ssize_t
54tls13_quic_handshake_read_cb(void *buf, size_t n, void *arg)
55{
56 /* XXX - read handshake data. */
57 return TLS13_IO_FAILURE;
58}
59
60static ssize_t
61tls13_quic_handshake_write_cb(const void *buf, size_t n, void *arg)
62{
63 struct tls13_ctx *ctx = arg;
64 SSL *ssl = ctx->ssl;
65
66 /* XXX - call add_handshake_data. */
67 SSLerror(ssl, ERR_R_INTERNAL_ERROR);
68 return TLS13_IO_FAILURE;
69}
70
71static int
72tls13_quic_set_read_traffic_key(struct tls13_secret *read_key,
73 enum ssl_encryption_level_t read_level, void *arg)
74{
75 struct tls13_ctx *ctx = arg;
76 SSL *ssl = ctx->ssl;
77
78 ctx->hs->tls13.quic_read_level = read_level;
79
80 /* XXX - call set_read_secret. */
81 SSLerror(ssl, ERR_R_INTERNAL_ERROR);
82 return 0;
83}
84
85static int
86tls13_quic_set_write_traffic_key(struct tls13_secret *write_key,
87 enum ssl_encryption_level_t write_level, void *arg)
88{
89 struct tls13_ctx *ctx = arg;
90 SSL *ssl = ctx->ssl;
91
92 ctx->hs->tls13.quic_write_level = write_level;
93
94 /* XXX - call set_write_secret. */
95 SSLerror(ssl, ERR_R_INTERNAL_ERROR);
96 return 0;
97}
98
99static int
100tls13_quic_alert_send_cb(int alert_desc, void *arg)
101{
102 struct tls13_ctx *ctx = arg;
103 SSL *ssl = ctx->ssl;
104
105 /* XXX - call send_alert. */
106 SSLerror(ssl, ERR_R_INTERNAL_ERROR);
107 return TLS13_IO_FAILURE;
108}
109
110static const struct tls13_record_layer_callbacks quic_rl_callbacks = {
111 .wire_read = tls13_quic_wire_read_cb,
112 .wire_write = tls13_quic_wire_write_cb,
113 .wire_flush = tls13_quic_wire_flush_cb,
114
115 .handshake_read = tls13_quic_handshake_read_cb,
116 .handshake_write = tls13_quic_handshake_write_cb,
117 .set_read_traffic_key = tls13_quic_set_read_traffic_key,
118 .set_write_traffic_key = tls13_quic_set_write_traffic_key,
119 .alert_send = tls13_quic_alert_send_cb,
120
121 .alert_recv = tls13_alert_received_cb,
122 .alert_sent = tls13_alert_sent_cb,
123 .phh_recv = tls13_phh_received_cb,
124 .phh_sent = tls13_phh_done_cb,
125};
126
127int
128tls13_quic_init(struct tls13_ctx *ctx)
129{
130 tls13_record_layer_set_callbacks(ctx->rl, &quic_rl_callbacks, ctx);
131
132 ctx->middlebox_compat = 0;
133
134 return 1;
135}
diff --git a/src/lib/libssl/tls13_record_layer.c b/src/lib/libssl/tls13_record_layer.c
index c92fd8d193..ac5b83bd34 100644
--- a/src/lib/libssl/tls13_record_layer.c
+++ b/src/lib/libssl/tls13_record_layer.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_record_layer.c,v 1.69 2022/07/24 14:16:29 jsing Exp $ */ 1/* $OpenBSD: tls13_record_layer.c,v 1.70 2022/07/24 14:28:16 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -146,8 +146,8 @@ tls13_record_layer_new(const struct tls13_record_layer_callbacks *callbacks,
146 goto err; 146 goto err;
147 147
148 rl->legacy_version = TLS1_2_VERSION; 148 rl->legacy_version = TLS1_2_VERSION;
149 rl->cb = *callbacks; 149
150 rl->cb_arg = cb_arg; 150 tls13_record_layer_set_callbacks(rl, callbacks, cb_arg);
151 151
152 return rl; 152 return rl;
153 153
@@ -178,6 +178,14 @@ tls13_record_layer_free(struct tls13_record_layer *rl)
178} 178}
179 179
180void 180void
181tls13_record_layer_set_callbacks(struct tls13_record_layer *rl,
182 const struct tls13_record_layer_callbacks *callbacks, void *cb_arg)
183{
184 rl->cb = *callbacks;
185 rl->cb_arg = cb_arg;
186}
187
188void
181tls13_record_layer_rcontent(struct tls13_record_layer *rl, CBS *cbs) 189tls13_record_layer_rcontent(struct tls13_record_layer *rl, CBS *cbs)
182{ 190{
183 CBS_dup(tls_content_cbs(rl->rcontent), cbs); 191 CBS_dup(tls_content_cbs(rl->rcontent), cbs);
@@ -489,6 +497,10 @@ int
489tls13_record_layer_set_read_traffic_key(struct tls13_record_layer *rl, 497tls13_record_layer_set_read_traffic_key(struct tls13_record_layer *rl,
490 struct tls13_secret *read_key, enum ssl_encryption_level_t read_level) 498 struct tls13_secret *read_key, enum ssl_encryption_level_t read_level)
491{ 499{
500 if (rl->cb.set_read_traffic_key != NULL)
501 return rl->cb.set_read_traffic_key(read_key, read_level,
502 rl->cb_arg);
503
492 return tls13_record_layer_set_traffic_key(rl->aead, rl->hash, 504 return tls13_record_layer_set_traffic_key(rl->aead, rl->hash,
493 rl->read, read_key); 505 rl->read, read_key);
494} 506}
@@ -497,6 +509,10 @@ int
497tls13_record_layer_set_write_traffic_key(struct tls13_record_layer *rl, 509tls13_record_layer_set_write_traffic_key(struct tls13_record_layer *rl,
498 struct tls13_secret *write_key, enum ssl_encryption_level_t write_level) 510 struct tls13_secret *write_key, enum ssl_encryption_level_t write_level)
499{ 511{
512 if (rl->cb.set_write_traffic_key != NULL)
513 return rl->cb.set_write_traffic_key(write_key, write_level,
514 rl->cb_arg);
515
500 return tls13_record_layer_set_traffic_key(rl->aead, rl->hash, 516 return tls13_record_layer_set_traffic_key(rl->aead, rl->hash,
501 rl->write, write_key); 517 rl->write, write_key);
502} 518}
@@ -1128,6 +1144,9 @@ tls13_send_dummy_ccs(struct tls13_record_layer *rl)
1128ssize_t 1144ssize_t
1129tls13_read_handshake_data(struct tls13_record_layer *rl, uint8_t *buf, size_t n) 1145tls13_read_handshake_data(struct tls13_record_layer *rl, uint8_t *buf, size_t n)
1130{ 1146{
1147 if (rl->cb.handshake_read != NULL)
1148 return rl->cb.handshake_read(buf, n, rl->cb_arg);
1149
1131 return tls13_record_layer_read(rl, SSL3_RT_HANDSHAKE, buf, n); 1150 return tls13_record_layer_read(rl, SSL3_RT_HANDSHAKE, buf, n);
1132} 1151}
1133 1152
@@ -1135,6 +1154,9 @@ ssize_t
1135tls13_write_handshake_data(struct tls13_record_layer *rl, const uint8_t *buf, 1154tls13_write_handshake_data(struct tls13_record_layer *rl, const uint8_t *buf,
1136 size_t n) 1155 size_t n)
1137{ 1156{
1157 if (rl->cb.handshake_write != NULL)
1158 return rl->cb.handshake_write(buf, n, rl->cb_arg);
1159
1138 return tls13_record_layer_write(rl, SSL3_RT_HANDSHAKE, buf, n); 1160 return tls13_record_layer_write(rl, SSL3_RT_HANDSHAKE, buf, n);
1139} 1161}
1140 1162
@@ -1181,6 +1203,9 @@ tls13_send_alert(struct tls13_record_layer *rl, uint8_t alert_desc)
1181 uint8_t alert_level = TLS13_ALERT_LEVEL_FATAL; 1203 uint8_t alert_level = TLS13_ALERT_LEVEL_FATAL;
1182 ssize_t ret; 1204 ssize_t ret;
1183 1205
1206 if (rl->cb.alert_send != NULL)
1207 return rl->cb.alert_send(alert_desc, rl->cb_arg);
1208
1184 if (alert_desc == TLS13_ALERT_CLOSE_NOTIFY || 1209 if (alert_desc == TLS13_ALERT_CLOSE_NOTIFY ||
1185 alert_desc == TLS13_ALERT_USER_CANCELED) 1210 alert_desc == TLS13_ALERT_USER_CANCELED)
1186 alert_level = TLS13_ALERT_LEVEL_WARNING; 1211 alert_level = TLS13_ALERT_LEVEL_WARNING;
diff --git a/src/lib/libssl/tls_internal.h b/src/lib/libssl/tls_internal.h
index 88dae9e67e..1d3a8133cd 100644
--- a/src/lib/libssl/tls_internal.h
+++ b/src/lib/libssl/tls_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_internal.h,v 1.8 2022/07/22 19:33:53 jsing Exp $ */ 1/* $OpenBSD: tls_internal.h,v 1.9 2022/07/24 14:28:16 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019, 2021 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019, 2021 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -33,6 +33,10 @@ __BEGIN_HIDDEN_DECLS
33#define TLS_IO_WANT_POLLOUT -4 33#define TLS_IO_WANT_POLLOUT -4
34#define TLS_IO_WANT_RETRY -5 /* Retry the previous call immediately. */ 34#define TLS_IO_WANT_RETRY -5 /* Retry the previous call immediately. */
35 35
36enum ssl_encryption_level_t;
37
38struct tls13_secret;
39
36/* 40/*
37 * Callbacks. 41 * Callbacks.
38 */ 42 */
@@ -41,6 +45,14 @@ typedef ssize_t (*tls_write_cb)(const void *_buf, size_t _buflen,
41 void *_cb_arg); 45 void *_cb_arg);
42typedef ssize_t (*tls_flush_cb)(void *_cb_arg); 46typedef ssize_t (*tls_flush_cb)(void *_cb_arg);
43 47
48typedef ssize_t (*tls_handshake_read_cb)(void *_buf, size_t _buflen,
49 void *_cb_arg);
50typedef ssize_t (*tls_handshake_write_cb)(const void *_buf, size_t _buflen,
51 void *_cb_arg);
52typedef int (*tls_traffic_key_cb)(struct tls13_secret *key,
53 enum ssl_encryption_level_t level, void *_cb_arg);
54typedef int (*tls_alert_send_cb)(int _alert_desc, void *_cb_arg);
55
44/* 56/*
45 * Buffers. 57 * Buffers.
46 */ 58 */