diff options
Diffstat (limited to 'src/lib/libssl/tls13_lib.c')
-rw-r--r-- | src/lib/libssl/tls13_lib.c | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c index c4cce26ca5..3860ddefef 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.2 2019/01/21 10:24:25 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_lib.c,v 1.3 2019/01/21 13:45:57 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 | * |
@@ -61,6 +61,39 @@ tls13_cipher_hash(const SSL_CIPHER *cipher) | |||
61 | return NULL; | 61 | return NULL; |
62 | } | 62 | } |
63 | 63 | ||
64 | struct tls13_ctx * | ||
65 | tls13_ctx_new(int mode) | ||
66 | { | ||
67 | struct tls13_ctx *ctx = NULL; | ||
68 | |||
69 | if ((ctx = calloc(sizeof(struct tls13_ctx), 1)) == NULL) | ||
70 | goto err; | ||
71 | |||
72 | ctx->mode = mode; | ||
73 | |||
74 | if ((ctx->rl = tls13_record_layer_new(tls13_legacy_wire_read_cb, | ||
75 | tls13_legacy_wire_write_cb, NULL, NULL, ctx)) == NULL) | ||
76 | goto err; | ||
77 | |||
78 | return ctx; | ||
79 | |||
80 | err: | ||
81 | tls13_ctx_free(ctx); | ||
82 | |||
83 | return NULL; | ||
84 | } | ||
85 | |||
86 | void | ||
87 | tls13_ctx_free(struct tls13_ctx *ctx) | ||
88 | { | ||
89 | if (ctx == NULL) | ||
90 | return; | ||
91 | |||
92 | tls13_record_layer_free(ctx->rl); | ||
93 | |||
94 | freezero(ctx, sizeof(struct tls13_ctx)); | ||
95 | } | ||
96 | |||
64 | static ssize_t | 97 | static ssize_t |
65 | tls13_legacy_wire_read(SSL *ssl, uint8_t *buf, size_t len) | 98 | tls13_legacy_wire_read(SSL *ssl, uint8_t *buf, size_t len) |
66 | { | 99 | { |
@@ -131,7 +164,7 @@ tls13_legacy_wire_write_cb(const void *buf, size_t n, void *arg) | |||
131 | return tls13_legacy_wire_write(ctx->ssl, buf, n); | 164 | return tls13_legacy_wire_write(ctx->ssl, buf, n); |
132 | } | 165 | } |
133 | 166 | ||
134 | static int | 167 | int |
135 | tls13_legacy_return_code(SSL *ssl, ssize_t ret) | 168 | tls13_legacy_return_code(SSL *ssl, ssize_t ret) |
136 | { | 169 | { |
137 | if (ret > INT_MAX) { | 170 | if (ret > INT_MAX) { |
@@ -139,7 +172,7 @@ tls13_legacy_return_code(SSL *ssl, ssize_t ret) | |||
139 | return -1; | 172 | return -1; |
140 | } | 173 | } |
141 | 174 | ||
142 | /* A successful read or write. */ | 175 | /* A successful read, write or other operation. */ |
143 | if (ret > 0) | 176 | if (ret > 0) |
144 | return ret; | 177 | return ret; |
145 | 178 | ||