]> git.ipfire.org Git - thirdparty/openssl.git/blame - ssl/ssl_lib.c
Remove some TODO(RECLAYER) comments now that DTLS has been moved
[thirdparty/openssl.git] / ssl / ssl_lib.c
CommitLineData
0f113f3e 1/*
fecb3aae 2 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
aa8f3d76 3 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
c80149d9 4 * Copyright 2005 Nokia. All rights reserved.
bf21446a 5 *
2c18d164 6 * Licensed under the Apache License 2.0 (the "License"). You may not use
846e33c7
RS
7 * this file except in compliance with the License. You can obtain a copy
8 * in the file LICENSE in the source distribution or at
9 * https://www.openssl.org/source/license.html
bf21446a 10 */
846e33c7 11
d02b48c6 12#include <stdio.h>
706457b7 13#include "ssl_local.h"
d5f9166b 14#include "internal/e_os.h"
ec577822 15#include <openssl/objects.h>
bb7cd4e3 16#include <openssl/x509v3.h>
6434abbf 17#include <openssl/rand.h>
67c8e7f4 18#include <openssl/ocsp.h>
3c27208f
RS
19#include <openssl/dh.h>
20#include <openssl/engine.h>
07bbc92c 21#include <openssl/async.h>
3c27208f 22#include <openssl/ct.h>
77359d22 23#include <openssl/trace.h>
4566dae7 24#include <openssl/core_names.h>
67dc995e 25#include "internal/cryptlib.h"
cd420b0b 26#include "internal/refcount.h"
50ec7505 27#include "internal/ktls.h"
0f113f3e 28
38b051a1
TM
29static int ssl_undefined_function_1(SSL_CONNECTION *sc, SSL3_RECORD *r, size_t s,
30 int t, SSL_MAC_BUF *mac, size_t macsize)
fce78bd4 31{
38b051a1 32 return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
fce78bd4
BE
33}
34
38b051a1
TM
35static int ssl_undefined_function_2(SSL_CONNECTION *sc, SSL3_RECORD *r,
36 unsigned char *s, int t)
fce78bd4 37{
38b051a1 38 return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
fce78bd4
BE
39}
40
38b051a1 41static int ssl_undefined_function_3(SSL_CONNECTION *sc, unsigned char *r,
fce78bd4
BE
42 unsigned char *s, size_t t, size_t *u)
43{
38b051a1 44 return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
fce78bd4
BE
45}
46
38b051a1 47static int ssl_undefined_function_4(SSL_CONNECTION *sc, int r)
fce78bd4 48{
38b051a1 49 return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
fce78bd4
BE
50}
51
38b051a1
TM
52static size_t ssl_undefined_function_5(SSL_CONNECTION *sc, const char *r,
53 size_t s, unsigned char *t)
fce78bd4 54{
38b051a1 55 return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
fce78bd4
BE
56}
57
58static int ssl_undefined_function_6(int r)
59{
fce78bd4
BE
60 return ssl_undefined_function(NULL);
61}
62
38b051a1
TM
63static int ssl_undefined_function_7(SSL_CONNECTION *sc, unsigned char *r,
64 size_t s, const char *t, size_t u,
fce78bd4
BE
65 const unsigned char *v, size_t w, int x)
66{
38b051a1
TM
67 return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
68}
69
70static int ssl_undefined_function_8(SSL_CONNECTION *sc)
71{
72 return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
fce78bd4
BE
73}
74
0f113f3e 75SSL3_ENC_METHOD ssl3_undef_enc_method = {
fce78bd4
BE
76 ssl_undefined_function_1,
77 ssl_undefined_function_2,
38b051a1 78 ssl_undefined_function_8,
fce78bd4
BE
79 ssl_undefined_function_3,
80 ssl_undefined_function_4,
81 ssl_undefined_function_5,
0f113f3e
MC
82 NULL, /* client_finished_label */
83 0, /* client_finished_label_len */
84 NULL, /* server_finished_label */
85 0, /* server_finished_label_len */
fce78bd4
BE
86 ssl_undefined_function_6,
87 ssl_undefined_function_7,
0f113f3e 88};
d02b48c6 89
07bbc92c
MC
90struct ssl_async_args {
91 SSL *s;
92 void *buf;
348240c6 93 size_t num;
a230b26e 94 enum { READFUNC, WRITEFUNC, OTHERFUNC } type;
add2f5ca 95 union {
eda75751 96 int (*func_read) (SSL *, void *, size_t, size_t *);
7ee8627f 97 int (*func_write) (SSL *, const void *, size_t, size_t *);
a230b26e 98 int (*func_other) (SSL *);
add2f5ca 99 } f;
07bbc92c
MC
100};
101
919ba009
VD
102static const struct {
103 uint8_t mtype;
104 uint8_t ord;
a230b26e 105 int nid;
919ba009 106} dane_mds[] = {
a230b26e
EK
107 {
108 DANETLS_MATCHING_FULL, 0, NID_undef
109 },
110 {
111 DANETLS_MATCHING_2256, 1, NID_sha256
112 },
113 {
114 DANETLS_MATCHING_2512, 2, NID_sha512
115 },
919ba009
VD
116};
117
118static int dane_ctx_enable(struct dane_ctx_st *dctx)
119{
120 const EVP_MD **mdevp;
121 uint8_t *mdord;
122 uint8_t mdmax = DANETLS_MATCHING_LAST;
a230b26e 123 int n = ((int)mdmax) + 1; /* int to handle PrivMatch(255) */
919ba009
VD
124 size_t i;
125
5ae4ceb9
VD
126 if (dctx->mdevp != NULL)
127 return 1;
128
919ba009
VD
129 mdevp = OPENSSL_zalloc(n * sizeof(*mdevp));
130 mdord = OPENSSL_zalloc(n * sizeof(*mdord));
131
132 if (mdord == NULL || mdevp == NULL) {
b3bd3d5a 133 OPENSSL_free(mdord);
919ba009 134 OPENSSL_free(mdevp);
919ba009
VD
135 return 0;
136 }
137
138 /* Install default entries */
139 for (i = 0; i < OSSL_NELEM(dane_mds); ++i) {
140 const EVP_MD *md;
141
142 if (dane_mds[i].nid == NID_undef ||
143 (md = EVP_get_digestbynid(dane_mds[i].nid)) == NULL)
144 continue;
145 mdevp[dane_mds[i].mtype] = md;
146 mdord[dane_mds[i].mtype] = dane_mds[i].ord;
147 }
148
149 dctx->mdevp = mdevp;
150 dctx->mdord = mdord;
151 dctx->mdmax = mdmax;
152
153 return 1;
154}
155
156static void dane_ctx_final(struct dane_ctx_st *dctx)
157{
158 OPENSSL_free(dctx->mdevp);
159 dctx->mdevp = NULL;
160
161 OPENSSL_free(dctx->mdord);
162 dctx->mdord = NULL;
163 dctx->mdmax = 0;
164}
165
166static void tlsa_free(danetls_record *t)
167{
168 if (t == NULL)
169 return;
170 OPENSSL_free(t->data);
171 EVP_PKEY_free(t->spki);
172 OPENSSL_free(t);
173}
174
b9aec69a 175static void dane_final(SSL_DANE *dane)
919ba009
VD
176{
177 sk_danetls_record_pop_free(dane->trecs, tlsa_free);
178 dane->trecs = NULL;
179
79b2a2f2 180 OSSL_STACK_OF_X509_free(dane->certs);
919ba009
VD
181 dane->certs = NULL;
182
183 X509_free(dane->mcert);
184 dane->mcert = NULL;
185 dane->mtlsa = NULL;
186 dane->mdpth = -1;
187 dane->pdpth = -1;
188}
189
190/*
191 * dane_copy - Copy dane configuration, sans verification state.
192 */
38b051a1 193static int ssl_dane_dup(SSL_CONNECTION *to, SSL_CONNECTION *from)
919ba009
VD
194{
195 int num;
196 int i;
197
198 if (!DANETLS_ENABLED(&from->dane))
199 return 1;
200
e431363f 201 num = sk_danetls_record_num(from->dane.trecs);
919ba009 202 dane_final(&to->dane);
5ae4ceb9 203 to->dane.flags = from->dane.flags;
38b051a1 204 to->dane.dctx = &SSL_CONNECTION_GET_CTX(to)->dane;
7a908204 205 to->dane.trecs = sk_danetls_record_new_reserve(NULL, num);
9f6b22b8
VD
206
207 if (to->dane.trecs == NULL) {
e077455e 208 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
9f6b22b8
VD
209 return 0;
210 }
919ba009 211
919ba009
VD
212 for (i = 0; i < num; ++i) {
213 danetls_record *t = sk_danetls_record_value(from->dane.trecs, i);
9f6b22b8 214
38b051a1
TM
215 if (SSL_dane_tlsa_add(SSL_CONNECTION_GET_SSL(to), t->usage,
216 t->selector, t->mtype, t->data, t->dlen) <= 0)
919ba009
VD
217 return 0;
218 }
219 return 1;
220}
221
a230b26e
EK
222static int dane_mtype_set(struct dane_ctx_st *dctx,
223 const EVP_MD *md, uint8_t mtype, uint8_t ord)
919ba009
VD
224{
225 int i;
226
227 if (mtype == DANETLS_MATCHING_FULL && md != NULL) {
6849b73c 228 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL);
919ba009
VD
229 return 0;
230 }
231
232 if (mtype > dctx->mdmax) {
233 const EVP_MD **mdevp;
234 uint8_t *mdord;
a230b26e 235 int n = ((int)mtype) + 1;
919ba009
VD
236
237 mdevp = OPENSSL_realloc(dctx->mdevp, n * sizeof(*mdevp));
e077455e 238 if (mdevp == NULL)
919ba009 239 return -1;
919ba009
VD
240 dctx->mdevp = mdevp;
241
242 mdord = OPENSSL_realloc(dctx->mdord, n * sizeof(*mdord));
e077455e 243 if (mdord == NULL)
919ba009 244 return -1;
919ba009
VD
245 dctx->mdord = mdord;
246
247 /* Zero-fill any gaps */
a230b26e 248 for (i = dctx->mdmax + 1; i < mtype; ++i) {
919ba009
VD
249 mdevp[i] = NULL;
250 mdord[i] = 0;
251 }
252
253 dctx->mdmax = mtype;
254 }
255
256 dctx->mdevp[mtype] = md;
257 /* Coerce ordinal of disabled matching types to 0 */
258 dctx->mdord[mtype] = (md == NULL) ? 0 : ord;
259
260 return 1;
261}
262
b9aec69a 263static const EVP_MD *tlsa_md_get(SSL_DANE *dane, uint8_t mtype)
919ba009
VD
264{
265 if (mtype > dane->dctx->mdmax)
266 return NULL;
267 return dane->dctx->mdevp[mtype];
268}
269
a230b26e
EK
270static int dane_tlsa_add(SSL_DANE *dane,
271 uint8_t usage,
272 uint8_t selector,
6d4313f0 273 uint8_t mtype, const unsigned char *data, size_t dlen)
919ba009
VD
274{
275 danetls_record *t;
276 const EVP_MD *md = NULL;
277 int ilen = (int)dlen;
278 int i;
9f6b22b8 279 int num;
919ba009
VD
280
281 if (dane->trecs == NULL) {
6849b73c 282 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_NOT_ENABLED);
919ba009
VD
283 return -1;
284 }
285
286 if (ilen < 0 || dlen != (size_t)ilen) {
6849b73c 287 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DATA_LENGTH);
919ba009
VD
288 return 0;
289 }
290
291 if (usage > DANETLS_USAGE_LAST) {
6849b73c 292 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE);
919ba009
VD
293 return 0;
294 }
295
296 if (selector > DANETLS_SELECTOR_LAST) {
6849b73c 297 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_SELECTOR);
919ba009
VD
298 return 0;
299 }
300
301 if (mtype != DANETLS_MATCHING_FULL) {
302 md = tlsa_md_get(dane, mtype);
303 if (md == NULL) {
6849b73c 304 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE);
919ba009
VD
305 return 0;
306 }
307 }
308
ed576acd 309 if (md != NULL && dlen != (size_t)EVP_MD_get_size(md)) {
6849b73c 310 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH);
919ba009
VD
311 return 0;
312 }
313 if (!data) {
6849b73c 314 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_NULL_DATA);
919ba009
VD
315 return 0;
316 }
317
e077455e 318 if ((t = OPENSSL_zalloc(sizeof(*t))) == NULL)
919ba009 319 return -1;
919ba009
VD
320
321 t->usage = usage;
322 t->selector = selector;
323 t->mtype = mtype;
348240c6 324 t->data = OPENSSL_malloc(dlen);
919ba009
VD
325 if (t->data == NULL) {
326 tlsa_free(t);
919ba009
VD
327 return -1;
328 }
348240c6
MC
329 memcpy(t->data, data, dlen);
330 t->dlen = dlen;
919ba009
VD
331
332 /* Validate and cache full certificate or public key */
333 if (mtype == DANETLS_MATCHING_FULL) {
334 const unsigned char *p = data;
335 X509 *cert = NULL;
336 EVP_PKEY *pkey = NULL;
337
338 switch (selector) {
339 case DANETLS_SELECTOR_CERT:
348240c6 340 if (!d2i_X509(&cert, &p, ilen) || p < data ||
919ba009
VD
341 dlen != (size_t)(p - data)) {
342 tlsa_free(t);
6849b73c 343 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
919ba009
VD
344 return 0;
345 }
346 if (X509_get0_pubkey(cert) == NULL) {
347 tlsa_free(t);
6849b73c 348 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
919ba009
VD
349 return 0;
350 }
351
352 if ((DANETLS_USAGE_BIT(usage) & DANETLS_TA_MASK) == 0) {
353 X509_free(cert);
354 break;
355 }
356
357 /*
358 * For usage DANE-TA(2), we support authentication via "2 0 0" TLSA
359 * records that contain full certificates of trust-anchors that are
360 * not present in the wire chain. For usage PKIX-TA(0), we augment
361 * the chain with untrusted Full(0) certificates from DNS, in case
362 * they are missing from the chain.
363 */
364 if ((dane->certs == NULL &&
365 (dane->certs = sk_X509_new_null()) == NULL) ||
366 !sk_X509_push(dane->certs, cert)) {
e077455e 367 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
919ba009
VD
368 X509_free(cert);
369 tlsa_free(t);
370 return -1;
371 }
372 break;
373
374 case DANETLS_SELECTOR_SPKI:
348240c6 375 if (!d2i_PUBKEY(&pkey, &p, ilen) || p < data ||
919ba009
VD
376 dlen != (size_t)(p - data)) {
377 tlsa_free(t);
6849b73c 378 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY);
919ba009
VD
379 return 0;
380 }
381
382 /*
383 * For usage DANE-TA(2), we support authentication via "2 1 0" TLSA
384 * records that contain full bare keys of trust-anchors that are
385 * not present in the wire chain.
386 */
387 if (usage == DANETLS_USAGE_DANE_TA)
388 t->spki = pkey;
389 else
390 EVP_PKEY_free(pkey);
391 break;
392 }
393 }
394
395 /*-
396 * Find the right insertion point for the new record.
397 *
398 * See crypto/x509/x509_vfy.c. We sort DANE-EE(3) records first, so that
399 * they can be processed first, as they require no chain building, and no
400 * expiration or hostname checks. Because DANE-EE(3) is numerically
401 * largest, this is accomplished via descending sort by "usage".
402 *
403 * We also sort in descending order by matching ordinal to simplify
404 * the implementation of digest agility in the verification code.
405 *
406 * The choice of order for the selector is not significant, so we
407 * use the same descending order for consistency.
408 */
9f6b22b8
VD
409 num = sk_danetls_record_num(dane->trecs);
410 for (i = 0; i < num; ++i) {
919ba009 411 danetls_record *rec = sk_danetls_record_value(dane->trecs, i);
9f6b22b8 412
919ba009
VD
413 if (rec->usage > usage)
414 continue;
415 if (rec->usage < usage)
416 break;
417 if (rec->selector > selector)
418 continue;
419 if (rec->selector < selector)
420 break;
421 if (dane->dctx->mdord[rec->mtype] > dane->dctx->mdord[mtype])
422 continue;
423 break;
424 }
425
426 if (!sk_danetls_record_insert(dane->trecs, t, i)) {
427 tlsa_free(t);
e077455e 428 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
919ba009
VD
429 return -1;
430 }
431 dane->umask |= DANETLS_USAGE_BIT(usage);
432
433 return 1;
434}
435
c8feba72
BK
436/*
437 * Return 0 if there is only one version configured and it was disabled
438 * at configure time. Return 1 otherwise.
439 */
440static int ssl_check_allowed_versions(int min_version, int max_version)
441{
442 int minisdtls = 0, maxisdtls = 0;
443
444 /* Figure out if we're doing DTLS versions or TLS versions */
445 if (min_version == DTLS1_BAD_VER
446 || min_version >> 8 == DTLS1_VERSION_MAJOR)
447 minisdtls = 1;
448 if (max_version == DTLS1_BAD_VER
449 || max_version >> 8 == DTLS1_VERSION_MAJOR)
450 maxisdtls = 1;
451 /* A wildcard version of 0 could be DTLS or TLS. */
452 if ((minisdtls && !maxisdtls && max_version != 0)
453 || (maxisdtls && !minisdtls && min_version != 0)) {
454 /* Mixing DTLS and TLS versions will lead to sadness; deny it. */
455 return 0;
456 }
457
458 if (minisdtls || maxisdtls) {
459 /* Do DTLS version checks. */
460 if (min_version == 0)
461 /* Ignore DTLS1_BAD_VER */
462 min_version = DTLS1_VERSION;
463 if (max_version == 0)
464 max_version = DTLS1_2_VERSION;
465#ifdef OPENSSL_NO_DTLS1_2
466 if (max_version == DTLS1_2_VERSION)
467 max_version = DTLS1_VERSION;
468#endif
469#ifdef OPENSSL_NO_DTLS1
470 if (min_version == DTLS1_VERSION)
471 min_version = DTLS1_2_VERSION;
472#endif
79b4444d
DMSP
473 /* Done massaging versions; do the check. */
474 if (0
c8feba72
BK
475#ifdef OPENSSL_NO_DTLS1
476 || (DTLS_VERSION_GE(min_version, DTLS1_VERSION)
477 && DTLS_VERSION_GE(DTLS1_VERSION, max_version))
478#endif
479#ifdef OPENSSL_NO_DTLS1_2
480 || (DTLS_VERSION_GE(min_version, DTLS1_2_VERSION)
481 && DTLS_VERSION_GE(DTLS1_2_VERSION, max_version))
482#endif
483 )
484 return 0;
485 } else {
486 /* Regular TLS version checks. */
79b4444d
DMSP
487 if (min_version == 0)
488 min_version = SSL3_VERSION;
489 if (max_version == 0)
490 max_version = TLS1_3_VERSION;
c8feba72 491#ifdef OPENSSL_NO_TLS1_3
79b4444d
DMSP
492 if (max_version == TLS1_3_VERSION)
493 max_version = TLS1_2_VERSION;
c8feba72
BK
494#endif
495#ifdef OPENSSL_NO_TLS1_2
79b4444d
DMSP
496 if (max_version == TLS1_2_VERSION)
497 max_version = TLS1_1_VERSION;
c8feba72
BK
498#endif
499#ifdef OPENSSL_NO_TLS1_1
79b4444d
DMSP
500 if (max_version == TLS1_1_VERSION)
501 max_version = TLS1_VERSION;
c8feba72
BK
502#endif
503#ifdef OPENSSL_NO_TLS1
79b4444d
DMSP
504 if (max_version == TLS1_VERSION)
505 max_version = SSL3_VERSION;
c8feba72
BK
506#endif
507#ifdef OPENSSL_NO_SSL3
79b4444d
DMSP
508 if (min_version == SSL3_VERSION)
509 min_version = TLS1_VERSION;
c8feba72
BK
510#endif
511#ifdef OPENSSL_NO_TLS1
79b4444d
DMSP
512 if (min_version == TLS1_VERSION)
513 min_version = TLS1_1_VERSION;
c8feba72
BK
514#endif
515#ifdef OPENSSL_NO_TLS1_1
79b4444d
DMSP
516 if (min_version == TLS1_1_VERSION)
517 min_version = TLS1_2_VERSION;
c8feba72
BK
518#endif
519#ifdef OPENSSL_NO_TLS1_2
79b4444d
DMSP
520 if (min_version == TLS1_2_VERSION)
521 min_version = TLS1_3_VERSION;
c8feba72 522#endif
79b4444d
DMSP
523 /* Done massaging versions; do the check. */
524 if (0
c8feba72
BK
525#ifdef OPENSSL_NO_SSL3
526 || (min_version <= SSL3_VERSION && SSL3_VERSION <= max_version)
527#endif
528#ifdef OPENSSL_NO_TLS1
529 || (min_version <= TLS1_VERSION && TLS1_VERSION <= max_version)
530#endif
531#ifdef OPENSSL_NO_TLS1_1
532 || (min_version <= TLS1_1_VERSION && TLS1_1_VERSION <= max_version)
533#endif
534#ifdef OPENSSL_NO_TLS1_2
535 || (min_version <= TLS1_2_VERSION && TLS1_2_VERSION <= max_version)
536#endif
537#ifdef OPENSSL_NO_TLS1_3
538 || (min_version <= TLS1_3_VERSION && TLS1_3_VERSION <= max_version)
539#endif
540 )
541 return 0;
542 }
543 return 1;
544}
545
08073700
RB
546#if defined(__TANDEM) && defined(OPENSSL_VPROC)
547/*
548 * Define a VPROC function for HP NonStop build ssl library.
549 * This is used by platform version identification tools.
550 * Do not inline this procedure or make it static.
551 */
552# define OPENSSL_VPROC_STRING_(x) x##_SSL
553# define OPENSSL_VPROC_STRING(x) OPENSSL_VPROC_STRING_(x)
554# define OPENSSL_VPROC_FUNC OPENSSL_VPROC_STRING(OPENSSL_VPROC)
555void OPENSSL_VPROC_FUNC(void) {}
556#endif
557
558
38b051a1 559static void clear_ciphers(SSL_CONNECTION *s)
d31fb0b5
RS
560{
561 /* clear the current cipher */
562 ssl_clear_cipher_ctx(s);
563 ssl_clear_hash_ctx(&s->read_hash);
564 ssl_clear_hash_ctx(&s->write_hash);
565}
566
4f43d0e7 567int SSL_clear(SSL *s)
0f113f3e 568{
0f113f3e 569 if (s->method == NULL) {
6849b73c 570 ERR_raise(ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED);
a89325e4 571 return 0;
0f113f3e 572 }
d02b48c6 573
38b051a1
TM
574 return s->method->ssl_reset(s);
575}
576
577int ossl_ssl_connection_reset(SSL *s)
578{
579 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
580
581 if (sc == NULL)
582 return 0;
583
584 if (ssl_clear_bad_session(sc)) {
585 SSL_SESSION_free(sc->session);
586 sc->session = NULL;
0f113f3e 587 }
38b051a1
TM
588 SSL_SESSION_free(sc->psksession);
589 sc->psksession = NULL;
590 OPENSSL_free(sc->psksession_id);
591 sc->psksession_id = NULL;
592 sc->psksession_id_len = 0;
593 sc->hello_retry_request = 0;
594 sc->sent_tickets = 0;
d62bfb39 595
38b051a1
TM
596 sc->error = 0;
597 sc->hit = 0;
598 sc->shutdown = 0;
d02b48c6 599
38b051a1 600 if (sc->renegotiate) {
6849b73c 601 ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
0f113f3e
MC
602 return 0;
603 }
d02b48c6 604
38b051a1 605 ossl_statem_clear(sc);
413c4f45 606
38b051a1
TM
607 /* TODO(QUIC): Version handling not yet clear */
608 sc->version = s->method->version;
609 sc->client_version = sc->version;
610 sc->rwstate = SSL_NOTHING;
d02b48c6 611
38b051a1
TM
612 BUF_MEM_free(sc->init_buf);
613 sc->init_buf = NULL;
614 clear_ciphers(sc);
615 sc->first_packet = 0;
d02b48c6 616
38b051a1 617 sc->key_update = SSL_KEY_UPDATE_NONE;
b67cb09f
TS
618 memset(sc->ext.compress_certificate_from_peer, 0,
619 sizeof(sc->ext.compress_certificate_from_peer));
620 sc->ext.compress_certificate_sent = 0;
44c04a2e 621
38b051a1
TM
622 EVP_MD_CTX_free(sc->pha_dgst);
623 sc->pha_dgst = NULL;
88834998 624
919ba009 625 /* Reset DANE verification result state */
38b051a1
TM
626 sc->dane.mdpth = -1;
627 sc->dane.pdpth = -1;
628 X509_free(sc->dane.mcert);
629 sc->dane.mcert = NULL;
630 sc->dane.mtlsa = NULL;
919ba009
VD
631
632 /* Clear the verification result peername */
38b051a1 633 X509_VERIFY_PARAM_move_peername(sc->param, NULL);
919ba009 634
29948ac8 635 /* Clear any shared connection state */
38b051a1
TM
636 OPENSSL_free(sc->shared_sigalgs);
637 sc->shared_sigalgs = NULL;
638 sc->shared_sigalgslen = 0;
29948ac8 639
0f113f3e
MC
640 /*
641 * Check to see if we were changed into a different method, if so, revert
24252537 642 * back.
0f113f3e 643 */
38b051a1
TM
644 if (s->method != SSL_CONNECTION_GET_CTX(sc)->method) {
645 s->method->ssl_deinit(s);
646 s->method = SSL_CONNECTION_GET_CTX(sc)->method;
647 if (!s->method->ssl_init(s))
a89325e4 648 return 0;
b77f3ed1
MC
649 } else {
650 if (!s->method->ssl_clear(s))
651 return 0;
652 }
33d23b87 653
38b051a1 654 RECORD_LAYER_clear(&sc->rlayer);
cffafb5f
MC
655 BIO_free(sc->rlayer.rrlnext);
656 sc->rlayer.rrlnext = NULL;
33d23b87 657
79eebb08 658 if (!ssl_set_new_record_layer(sc,
222cf410 659 SSL_CONNECTION_IS_DTLS(sc) ? DTLS_ANY_VERSION : TLS_ANY_VERSION,
79eebb08
MC
660 OSSL_RECORD_DIRECTION_READ,
661 OSSL_RECORD_PROTECTION_LEVEL_NONE,
662 NULL, 0, NULL, 0, NULL, 0, NULL, 0,
663 NID_undef, NULL, NULL)) {
7c293999 664 /* SSLfatal already called */
aedbb71b
MC
665 return 0;
666 }
2b71b042
MC
667 if (!ssl_set_new_record_layer(sc,
668 SSL_CONNECTION_IS_DTLS(sc) ? DTLS_ANY_VERSION : TLS_ANY_VERSION,
669 OSSL_RECORD_DIRECTION_WRITE,
670 OSSL_RECORD_PROTECTION_LEVEL_NONE,
671 NULL, 0, NULL, 0, NULL, 0, NULL, 0,
672 NID_undef, NULL, NULL)) {
673 /* SSLfatal already called */
674 return 0;
675 }
aedbb71b 676
a89325e4 677 return 1;
0f113f3e 678}
d02b48c6 679
dd0164e7 680#ifndef OPENSSL_NO_DEPRECATED_3_0
4f43d0e7 681/** Used to change an SSL_CTXs default SSL method type */
0f113f3e
MC
682int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
683{
684 STACK_OF(SSL_CIPHER) *sk;
685
686 ctx->method = meth;
687
5d120511 688 if (!SSL_CTX_set_ciphersuites(ctx, OSSL_default_ciphersuites())) {
6849b73c 689 ERR_raise(ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
2340ed27
BK
690 return 0;
691 }
a68eee67 692 sk = ssl_create_cipher_list(ctx,
f865b081
MC
693 ctx->tls13_ciphersuites,
694 &(ctx->cipher_list),
0f113f3e 695 &(ctx->cipher_list_by_id),
5d120511 696 OSSL_default_cipher_list(), ctx->cert);
0f113f3e 697 if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
6849b73c 698 ERR_raise(ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
26a7d938 699 return 0;
0f113f3e 700 }
208fb891 701 return 1;
0f113f3e 702}
dd0164e7 703#endif
d02b48c6 704
4f43d0e7 705SSL *SSL_new(SSL_CTX *ctx)
0f113f3e 706{
0f113f3e 707 if (ctx == NULL) {
6849b73c 708 ERR_raise(ERR_LIB_SSL, SSL_R_NULL_SSL_CTX);
26a7d938 709 return NULL;
0f113f3e
MC
710 }
711 if (ctx->method == NULL) {
6849b73c 712 ERR_raise(ERR_LIB_SSL, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
26a7d938 713 return NULL;
0f113f3e 714 }
38b051a1
TM
715 return ctx->method->ssl_new(ctx);
716}
717
718int ossl_ssl_init(SSL *ssl, SSL_CTX *ctx, int type)
719{
720 ssl->type = type;
721
722 ssl->references = 1;
723 ssl->lock = CRYPTO_THREAD_lock_new();
724 if (ssl->lock == NULL)
725 return 0;
726
727 SSL_CTX_up_ref(ctx);
728 ssl->ctx = ctx;
729
730 ssl->method = ctx->method;
731
732 if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, ssl, &ssl->ex_data))
733 return 0;
734
735 return 1;
736}
737
738SSL *ossl_ssl_connection_new(SSL_CTX *ctx)
739{
740 SSL_CONNECTION *s;
741 SSL *ssl;
0f113f3e 742
b51bce94 743 s = OPENSSL_zalloc(sizeof(*s));
0f113f3e 744 if (s == NULL)
38b051a1 745 return NULL;
0f113f3e 746
38b051a1
TM
747 ssl = &s->ssl;
748 if (!ossl_ssl_init(ssl, ctx, SSL_TYPE_SSL_CONNECTION)) {
e6b10c34
BE
749 OPENSSL_free(s);
750 s = NULL;
e077455e 751 goto sslerr;
e6b10c34 752 }
ae3947de 753
38b051a1
TM
754#ifndef OPENSSL_NO_QUIC
755 /* set the parent (user visible) ssl to self */
756 s->user_ssl = ssl;
757#endif
758
c036e210 759 RECORD_LAYER_init(&s->rlayer, s);
28d59af8 760
0f113f3e 761 s->options = ctx->options;
5ae4ceb9 762 s->dane.flags = ctx->dane.flags;
7946ab33
KR
763 s->min_proto_version = ctx->min_proto_version;
764 s->max_proto_version = ctx->max_proto_version;
0f113f3e
MC
765 s->mode = ctx->mode;
766 s->max_cert_list = ctx->max_cert_list;
3fc8d856 767 s->max_early_data = ctx->max_early_data;
4e8548e8 768 s->recv_max_early_data = ctx->recv_max_early_data;
9d0a8bb7 769 s->num_tickets = ctx->num_tickets;
e97be718 770 s->pha_enabled = ctx->pha_enabled;
0f113f3e 771
f865b081
MC
772 /* Shallow copy of the ciphersuites stack */
773 s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites);
774 if (s->tls13_ciphersuites == NULL)
e077455e 775 goto cerr;
f865b081 776
2c382349
KR
777 /*
778 * Earlier library versions used to copy the pointer to the CERT, not
779 * its contents; only when setting new parameters for the per-SSL
780 * copy, ssl_cert_new would be called (and the direct reference to
781 * the per-SSL_CTX settings would be lost, but those still were
782 * indirectly accessed for various purposes, and for that reason they
783 * used to be known as s->ctx->default_cert). Now we don't look at the
784 * SSL_CTX's CERT after having duplicated it once.
785 */
786 s->cert = ssl_cert_dup(ctx->cert);
787 if (s->cert == NULL)
e077455e 788 goto sslerr;
0f113f3e 789
52e1d7b1 790 RECORD_LAYER_set_read_ahead(&s->rlayer, ctx->read_ahead);
0f113f3e
MC
791 s->msg_callback = ctx->msg_callback;
792 s->msg_callback_arg = ctx->msg_callback_arg;
793 s->verify_mode = ctx->verify_mode;
794 s->not_resumable_session_cb = ctx->not_resumable_session_cb;
eb7d6c2a
MC
795 s->rlayer.record_padding_cb = ctx->record_padding_cb;
796 s->rlayer.record_padding_arg = ctx->record_padding_arg;
797 s->rlayer.block_padding = ctx->block_padding;
0f113f3e 798 s->sid_ctx_length = ctx->sid_ctx_length;
cbe29648 799 if (!ossl_assert(s->sid_ctx_length <= sizeof(s->sid_ctx)))
380a522f 800 goto err;
0f113f3e
MC
801 memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
802 s->verify_callback = ctx->default_verify_callback;
803 s->generate_session_id = ctx->generate_session_id;
804
805 s->param = X509_VERIFY_PARAM_new();
a71edf3b 806 if (s->param == NULL)
e077455e 807 goto asn1err;
0f113f3e 808 X509_VERIFY_PARAM_inherit(s->param, ctx->param);
0f113f3e 809 s->quiet_shutdown = ctx->quiet_shutdown;
cf72c757
F
810
811 s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
0f113f3e 812 s->max_send_fragment = ctx->max_send_fragment;
d102d9df
MC
813 s->split_send_fragment = ctx->split_send_fragment;
814 s->max_pipelines = ctx->max_pipelines;
cffafb5f 815 s->rlayer.default_read_buf_len = ctx->default_read_buf_len;
bf21446a 816
aff8c126
RS
817 s->ext.debug_cb = 0;
818 s->ext.debug_arg = NULL;
819 s->ext.ticket_expected = 0;
820 s->ext.status_type = ctx->ext.status_type;
821 s->ext.status_expected = 0;
822 s->ext.ocsp.ids = NULL;
823 s->ext.ocsp.exts = NULL;
824 s->ext.ocsp.resp = NULL;
825 s->ext.ocsp.resp_len = 0;
16203f7b 826 SSL_CTX_up_ref(ctx);
222da979 827 s->session_ctx = ctx;
aff8c126
RS
828 if (ctx->ext.ecpointformats) {
829 s->ext.ecpointformats =
830 OPENSSL_memdup(ctx->ext.ecpointformats,
831 ctx->ext.ecpointformats_len);
39a14059
MC
832 if (!s->ext.ecpointformats) {
833 s->ext.ecpointformats_len = 0;
0f113f3e 834 goto err;
39a14059 835 }
aff8c126
RS
836 s->ext.ecpointformats_len =
837 ctx->ext.ecpointformats_len;
838 }
839 if (ctx->ext.supportedgroups) {
840 s->ext.supportedgroups =
841 OPENSSL_memdup(ctx->ext.supportedgroups,
9e84a42d 842 ctx->ext.supportedgroups_len
b92d7b62 843 * sizeof(*ctx->ext.supportedgroups));
39a14059
MC
844 if (!s->ext.supportedgroups) {
845 s->ext.supportedgroups_len = 0;
0f113f3e 846 goto err;
39a14059 847 }
aff8c126 848 s->ext.supportedgroups_len = ctx->ext.supportedgroups_len;
0f113f3e 849 }
dbc6268f 850
a230b26e 851#ifndef OPENSSL_NO_NEXTPROTONEG
aff8c126 852 s->ext.npn = NULL;
a230b26e 853#endif
6f017a8f 854
38b051a1
TM
855 if (ctx->ext.alpn != NULL) {
856 s->ext.alpn = OPENSSL_malloc(ctx->ext.alpn_len);
39a14059
MC
857 if (s->ext.alpn == NULL) {
858 s->ext.alpn_len = 0;
0f113f3e 859 goto err;
39a14059 860 }
38b051a1
TM
861 memcpy(s->ext.alpn, ctx->ext.alpn, ctx->ext.alpn_len);
862 s->ext.alpn_len = ctx->ext.alpn_len;
0f113f3e 863 }
d02b48c6 864
696178ed 865 s->verified_chain = NULL;
0f113f3e 866 s->verify_result = X509_V_OK;
d02b48c6 867
a974e64a
MC
868 s->default_passwd_callback = ctx->default_passwd_callback;
869 s->default_passwd_callback_userdata = ctx->default_passwd_callback_userdata;
870
44c04a2e
MC
871 s->key_update = SSL_KEY_UPDATE_NONE;
872
c9598459
MC
873 s->allow_early_data_cb = ctx->allow_early_data_cb;
874 s->allow_early_data_cb_data = ctx->allow_early_data_cb_data;
875
38b051a1 876 if (!ssl->method->ssl_init(ssl))
e077455e 877 goto sslerr;
d02b48c6 878
0f113f3e 879 s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1;
bf21446a 880
38b051a1 881 if (!SSL_clear(ssl))
e077455e 882 goto sslerr;
58964a49 883
ddac1974 884#ifndef OPENSSL_NO_PSK
0f113f3e
MC
885 s->psk_client_callback = ctx->psk_client_callback;
886 s->psk_server_callback = ctx->psk_server_callback;
ddac1974 887#endif
f46184bd
MC
888 s->psk_find_session_cb = ctx->psk_find_session_cb;
889 s->psk_use_session_cb = ctx->psk_use_session_cb;
ddac1974 890
9f5a87fd
PY
891 s->async_cb = ctx->async_cb;
892 s->async_cb_arg = ctx->async_cb_arg;
893
07bbc92c
MC
894 s->job = NULL;
895
b67cb09f
TS
896#ifndef OPENSSL_NO_COMP_ALG
897 memcpy(s->cert_comp_prefs, ctx->cert_comp_prefs, sizeof(s->cert_comp_prefs));
898#endif
899
ed29e82a 900#ifndef OPENSSL_NO_CT
38b051a1 901 if (!SSL_set_ct_validation_callback(ssl, ctx->ct_validation_callback,
a230b26e 902 ctx->ct_validation_callback_arg))
e077455e 903 goto sslerr;
ed29e82a
RP
904#endif
905
38b051a1 906 return ssl;
e077455e
RL
907 cerr:
908 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
909 goto err;
910 asn1err:
911 ERR_raise(ERR_LIB_SSL, ERR_R_ASN1_LIB);
912 goto err;
913 sslerr:
914 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
0f113f3e 915 err:
38b051a1 916 SSL_free(ssl);
16203f7b 917 return NULL;
0f113f3e 918}
d02b48c6 919
e417070c
RS
920int SSL_is_dtls(const SSL *s)
921{
38b051a1
TM
922 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
923
924 if (sc == NULL)
925 return 0;
926
927 return SSL_CONNECTION_IS_DTLS(sc) ? 1 : 0;
e417070c
RS
928}
929
c5ebfcab 930int SSL_up_ref(SSL *s)
a18a31e4 931{
16203f7b 932 int i;
c5ebfcab 933
2f545ae4 934 if (CRYPTO_UP_REF(&s->references, &i, s->lock) <= 0)
c5ebfcab
F
935 return 0;
936
937 REF_PRINT_COUNT("SSL", s);
938 REF_ASSERT_ISNT(i < 2);
939 return ((i > 1) ? 1 : 0);
a18a31e4
MC
940}
941
0f113f3e
MC
942int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
943 unsigned int sid_ctx_len)
944{
fe9edc9d 945 if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
6849b73c 946 ERR_raise(ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
0f113f3e
MC
947 return 0;
948 }
949 ctx->sid_ctx_length = sid_ctx_len;
950 memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
4eb77b26
BM
951
952 return 1;
0f113f3e 953}
4eb77b26 954
0f113f3e
MC
955int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
956 unsigned int sid_ctx_len)
957{
38b051a1
TM
958 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
959
960 if (sc == NULL)
961 return 0;
962
0f113f3e 963 if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
6849b73c 964 ERR_raise(ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
0f113f3e
MC
965 return 0;
966 }
38b051a1
TM
967 sc->sid_ctx_length = sid_ctx_len;
968 memcpy(sc->sid_ctx, sid_ctx, sid_ctx_len);
b4cadc6e
BL
969
970 return 1;
0f113f3e 971}
b4cadc6e 972
dc644fe2 973int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
0f113f3e 974{
cd3f8c1b
RS
975 if (!CRYPTO_THREAD_write_lock(ctx->lock))
976 return 0;
0f113f3e 977 ctx->generate_session_id = cb;
16203f7b 978 CRYPTO_THREAD_unlock(ctx->lock);
0f113f3e
MC
979 return 1;
980}
dc644fe2
GT
981
982int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
0f113f3e 983{
38b051a1
TM
984 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
985
986 if (sc == NULL || !CRYPTO_THREAD_write_lock(ssl->lock))
cd3f8c1b 987 return 0;
38b051a1 988 sc->generate_session_id = cb;
16203f7b 989 CRYPTO_THREAD_unlock(ssl->lock);
0f113f3e
MC
990 return 1;
991}
dc644fe2 992
f85c9904 993int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
0f113f3e
MC
994 unsigned int id_len)
995{
996 /*
997 * A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how
69687aa8 998 * we can "construct" a session to give us the desired check - i.e. to
0f113f3e
MC
999 * find if there's a session in the hash table that would conflict with
1000 * any new session built out of this id/id_len and the ssl_version in use
1001 * by this SSL.
1002 */
1003 SSL_SESSION r, *p;
38b051a1 1004 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
0f113f3e 1005
38b051a1 1006 if (sc == NULL || id_len > sizeof(r.session_id))
0f113f3e
MC
1007 return 0;
1008
38b051a1 1009 r.ssl_version = sc->version;
0f113f3e
MC
1010 r.session_id_length = id_len;
1011 memcpy(r.session_id, id, id_len);
1012
38b051a1 1013 if (!CRYPTO_THREAD_read_lock(sc->session_ctx->lock))
cd3f8c1b 1014 return 0;
38b051a1
TM
1015 p = lh_SSL_SESSION_retrieve(sc->session_ctx->sessions, &r);
1016 CRYPTO_THREAD_unlock(sc->session_ctx->lock);
0f113f3e
MC
1017 return (p != NULL);
1018}
dc644fe2 1019
bb7cd4e3 1020int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
0f113f3e
MC
1021{
1022 return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
1023}
bb7cd4e3
DSH
1024
1025int SSL_set_purpose(SSL *s, int purpose)
0f113f3e 1026{
38b051a1
TM
1027 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1028
1029 if (sc == NULL)
1030 return 0;
1031
1032 return X509_VERIFY_PARAM_set_purpose(sc->param, purpose);
0f113f3e 1033}
926a56bf 1034
bb7cd4e3 1035int SSL_CTX_set_trust(SSL_CTX *s, int trust)
0f113f3e
MC
1036{
1037 return X509_VERIFY_PARAM_set_trust(s->param, trust);
1038}
bb7cd4e3
DSH
1039
1040int SSL_set_trust(SSL *s, int trust)
0f113f3e 1041{
38b051a1
TM
1042 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1043
1044 if (sc == NULL)
1045 return 0;
1046
1047 return X509_VERIFY_PARAM_set_trust(sc->param, trust);
0f113f3e 1048}
bb7cd4e3 1049
919ba009
VD
1050int SSL_set1_host(SSL *s, const char *hostname)
1051{
38b051a1
TM
1052 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1053
1054 if (sc == NULL)
1055 return 0;
1056
c832840e
DW
1057 /* If a hostname is provided and parses as an IP address,
1058 * treat it as such. */
38b051a1
TM
1059 if (hostname != NULL
1060 && X509_VERIFY_PARAM_set1_ip_asc(sc->param, hostname) == 1)
c832840e
DW
1061 return 1;
1062
38b051a1 1063 return X509_VERIFY_PARAM_set1_host(sc->param, hostname, 0);
919ba009
VD
1064}
1065
1066int SSL_add1_host(SSL *s, const char *hostname)
1067{
38b051a1
TM
1068 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1069
1070 if (sc == NULL)
1071 return 0;
1072
c832840e
DW
1073 /* If a hostname is provided and parses as an IP address,
1074 * treat it as such. */
892a9e4c
DW
1075 if (hostname)
1076 {
1077 ASN1_OCTET_STRING *ip;
1078 char *old_ip;
1079
1080 ip = a2i_IPADDRESS(hostname);
1081 if (ip) {
1082 /* We didn't want it; only to check if it *is* an IP address */
1083 ASN1_OCTET_STRING_free(ip);
1084
38b051a1 1085 old_ip = X509_VERIFY_PARAM_get1_ip_asc(sc->param);
892a9e4c
DW
1086 if (old_ip)
1087 {
f2bfc53b 1088 OPENSSL_free(old_ip);
892a9e4c
DW
1089 /* There can be only one IP address */
1090 return 0;
1091 }
1092
38b051a1 1093 return X509_VERIFY_PARAM_set1_ip_asc(sc->param, hostname);
892a9e4c
DW
1094 }
1095 }
c832840e 1096
38b051a1 1097 return X509_VERIFY_PARAM_add1_host(sc->param, hostname, 0);
919ba009
VD
1098}
1099
1100void SSL_set_hostflags(SSL *s, unsigned int flags)
1101{
38b051a1
TM
1102 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1103
1104 if (sc == NULL)
1105 return;
1106
1107 X509_VERIFY_PARAM_set_hostflags(sc->param, flags);
919ba009
VD
1108}
1109
4588cb44 1110const char *SSL_get0_peername(SSL *s)
919ba009 1111{
38b051a1
TM
1112 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1113
1114 if (sc == NULL)
1115 return NULL;
1116
1117 return X509_VERIFY_PARAM_get0_peername(sc->param);
919ba009
VD
1118}
1119
1120int SSL_CTX_dane_enable(SSL_CTX *ctx)
1121{
1122 return dane_ctx_enable(&ctx->dane);
1123}
1124
5ae4ceb9
VD
1125unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags)
1126{
1127 unsigned long orig = ctx->dane.flags;
1128
1129 ctx->dane.flags |= flags;
1130 return orig;
1131}
1132
1133unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags)
1134{
1135 unsigned long orig = ctx->dane.flags;
1136
1137 ctx->dane.flags &= ~flags;
1138 return orig;
1139}
1140
919ba009
VD
1141int SSL_dane_enable(SSL *s, const char *basedomain)
1142{
38b051a1
TM
1143 SSL_DANE *dane;
1144 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
919ba009 1145
38b051a1
TM
1146 if (sc == NULL)
1147 return 0;
1148
1149 dane = &sc->dane;
919ba009 1150 if (s->ctx->dane.mdmax == 0) {
6849b73c 1151 ERR_raise(ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED);
919ba009
VD
1152 return 0;
1153 }
1154 if (dane->trecs != NULL) {
6849b73c 1155 ERR_raise(ERR_LIB_SSL, SSL_R_DANE_ALREADY_ENABLED);
919ba009
VD
1156 return 0;
1157 }
1158
8d887efa
VD
1159 /*
1160 * Default SNI name. This rejects empty names, while set1_host below
9929c817 1161 * accepts them and disables hostname checks. To avoid side-effects with
8d887efa
VD
1162 * invalid input, set the SNI name first.
1163 */
38b051a1 1164 if (sc->ext.hostname == NULL) {
dccd20d1 1165 if (!SSL_set_tlsext_host_name(s, basedomain)) {
6849b73c 1166 ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
dccd20d1 1167 return -1;
8d887efa
VD
1168 }
1169 }
1170
919ba009 1171 /* Primary RFC6125 reference identifier */
38b051a1 1172 if (!X509_VERIFY_PARAM_set1_host(sc->param, basedomain, 0)) {
6849b73c 1173 ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
919ba009
VD
1174 return -1;
1175 }
1176
919ba009
VD
1177 dane->mdpth = -1;
1178 dane->pdpth = -1;
1179 dane->dctx = &s->ctx->dane;
1180 dane->trecs = sk_danetls_record_new_null();
1181
1182 if (dane->trecs == NULL) {
e077455e 1183 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
919ba009
VD
1184 return -1;
1185 }
1186 return 1;
1187}
1188
5ae4ceb9
VD
1189unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags)
1190{
38b051a1
TM
1191 unsigned long orig;
1192 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1193
1194 if (sc == NULL)
1195 return 0;
1196
1197 orig = sc->dane.flags;
5ae4ceb9 1198
38b051a1 1199 sc->dane.flags |= flags;
5ae4ceb9
VD
1200 return orig;
1201}
1202
1203unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags)
1204{
38b051a1
TM
1205 unsigned long orig;
1206 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
5ae4ceb9 1207
38b051a1
TM
1208 if (sc == NULL)
1209 return 0;
1210
1211 orig = sc->dane.flags;
1212
1213 sc->dane.flags &= ~flags;
5ae4ceb9
VD
1214 return orig;
1215}
1216
919ba009
VD
1217int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki)
1218{
38b051a1
TM
1219 SSL_DANE *dane;
1220 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
919ba009 1221
38b051a1
TM
1222 if (sc == NULL)
1223 return -1;
1224
1225 dane = &sc->dane;
1226
1227 if (!DANETLS_ENABLED(dane) || sc->verify_result != X509_V_OK)
919ba009
VD
1228 return -1;
1229 if (dane->mtlsa) {
1230 if (mcert)
1231 *mcert = dane->mcert;
1232 if (mspki)
1233 *mspki = (dane->mcert == NULL) ? dane->mtlsa->spki : NULL;
1234 }
1235 return dane->mdpth;
1236}
1237
1238int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
6d4313f0 1239 uint8_t *mtype, const unsigned char **data, size_t *dlen)
919ba009 1240{
38b051a1
TM
1241 SSL_DANE *dane;
1242 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
919ba009 1243
38b051a1
TM
1244 if (sc == NULL)
1245 return -1;
1246
1247 dane = &sc->dane;
1248
1249 if (!DANETLS_ENABLED(dane) || sc->verify_result != X509_V_OK)
919ba009
VD
1250 return -1;
1251 if (dane->mtlsa) {
1252 if (usage)
1253 *usage = dane->mtlsa->usage;
1254 if (selector)
1255 *selector = dane->mtlsa->selector;
1256 if (mtype)
1257 *mtype = dane->mtlsa->mtype;
1258 if (data)
1259 *data = dane->mtlsa->data;
1260 if (dlen)
1261 *dlen = dane->mtlsa->dlen;
1262 }
1263 return dane->mdpth;
1264}
1265
b9aec69a 1266SSL_DANE *SSL_get0_dane(SSL *s)
919ba009 1267{
38b051a1
TM
1268 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1269
1270 if (sc == NULL)
1271 return NULL;
1272
1273 return &sc->dane;
919ba009
VD
1274}
1275
1276int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
6d4313f0 1277 uint8_t mtype, const unsigned char *data, size_t dlen)
919ba009 1278{
38b051a1
TM
1279 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1280
1281 if (sc == NULL)
1282 return 0;
1283
1284 return dane_tlsa_add(&sc->dane, usage, selector, mtype, data, dlen);
919ba009
VD
1285}
1286
a230b26e
EK
1287int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype,
1288 uint8_t ord)
919ba009
VD
1289{
1290 return dane_mtype_set(&ctx->dane, md, mtype, ord);
1291}
1292
ccf11751 1293int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
0f113f3e
MC
1294{
1295 return X509_VERIFY_PARAM_set1(ctx->param, vpm);
1296}
ccf11751
DSH
1297
1298int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
0f113f3e 1299{
38b051a1
TM
1300 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1301
1302 if (sc == NULL)
1303 return 0;
1304
1305 return X509_VERIFY_PARAM_set1(sc->param, vpm);
0f113f3e 1306}
ccf11751 1307
7af31968 1308X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
0f113f3e
MC
1309{
1310 return ctx->param;
1311}
7af31968
DSH
1312
1313X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
0f113f3e 1314{
38b051a1
TM
1315 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1316
1317 if (sc == NULL)
1318 return NULL;
1319
1320 return sc->param;
0f113f3e 1321}
7af31968 1322
a5ee80b9 1323void SSL_certs_clear(SSL *s)
0f113f3e 1324{
38b051a1
TM
1325 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1326
1327 if (sc == NULL)
1328 return;
1329
1330 ssl_cert_clear_certs(sc->cert);
0f113f3e 1331}
a5ee80b9 1332
4f43d0e7 1333void SSL_free(SSL *s)
0f113f3e
MC
1334{
1335 int i;
58964a49 1336
e6e9170d
RS
1337 if (s == NULL)
1338 return;
2f545ae4 1339 CRYPTO_DOWN_REF(&s->references, &i, s->lock);
f3f1cf84 1340 REF_PRINT_COUNT("SSL", s);
0f113f3e
MC
1341 if (i > 0)
1342 return;
f3f1cf84 1343 REF_ASSERT_ISNT(i < 0);
d02b48c6 1344
38b051a1
TM
1345 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
1346
1347 if (s->method != NULL)
1348 s->method->ssl_free(s);
1349
1350 SSL_CTX_free(s->ctx);
1351 CRYPTO_THREAD_lock_free(s->lock);
1352
1353 OPENSSL_free(s);
1354}
1355
1356void ossl_ssl_connection_free(SSL *ssl)
1357{
1358 SSL_CONNECTION *s;
1359
1360 s = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
1361 if (s == NULL)
1362 return;
1363
222561fe 1364 X509_VERIFY_PARAM_free(s->param);
919ba009 1365 dane_final(&s->dane);
0f113f3e 1366
b77f3ed1 1367 /* Ignore return value */
2e7dc7cd
MC
1368 ssl_free_wbio_buffer(s);
1369
9ff51954
MC
1370 RECORD_LAYER_clear(&s->rlayer);
1371
65e2d672 1372 BIO_free_all(s->wbio);
50ec7505 1373 s->wbio = NULL;
325cfa85 1374 BIO_free_all(s->rbio);
50ec7505 1375 s->rbio = NULL;
0f113f3e 1376
25aaa98a 1377 BUF_MEM_free(s->init_buf);
0f113f3e
MC
1378
1379 /* add extra stuff */
25aaa98a
RS
1380 sk_SSL_CIPHER_free(s->cipher_list);
1381 sk_SSL_CIPHER_free(s->cipher_list_by_id);
f865b081 1382 sk_SSL_CIPHER_free(s->tls13_ciphersuites);
eee2a6a7 1383 sk_SSL_CIPHER_free(s->peer_ciphers);
0f113f3e
MC
1384
1385 /* Make the next call work :-) */
1386 if (s->session != NULL) {
1387 ssl_clear_bad_session(s);
1388 SSL_SESSION_free(s->session);
1389 }
9368f865 1390 SSL_SESSION_free(s->psksession);
add8d0e9 1391 OPENSSL_free(s->psksession_id);
0f113f3e 1392
d31fb0b5 1393 clear_ciphers(s);
d02b48c6 1394
e0e920b1 1395 ssl_cert_free(s->cert);
29948ac8 1396 OPENSSL_free(s->shared_sigalgs);
0f113f3e 1397 /* Free up if allocated */
d02b48c6 1398
aff8c126 1399 OPENSSL_free(s->ext.hostname);
222da979 1400 SSL_CTX_free(s->session_ctx);
aff8c126 1401 OPENSSL_free(s->ext.ecpointformats);
cd0fb43c 1402 OPENSSL_free(s->ext.peer_ecpointformats);
aff8c126 1403 OPENSSL_free(s->ext.supportedgroups);
45436e61 1404 OPENSSL_free(s->ext.peer_supportedgroups);
aff8c126 1405 sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts, X509_EXTENSION_free);
3e41ac35 1406#ifndef OPENSSL_NO_OCSP
aff8c126 1407 sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
3e41ac35 1408#endif
ed29e82a
RP
1409#ifndef OPENSSL_NO_CT
1410 SCT_LIST_free(s->scts);
aff8c126 1411 OPENSSL_free(s->ext.scts);
ed29e82a 1412#endif
aff8c126
RS
1413 OPENSSL_free(s->ext.ocsp.resp);
1414 OPENSSL_free(s->ext.alpn);
cfef5027 1415 OPENSSL_free(s->ext.tls13_cookie);
94941cad
MK
1416 if (s->clienthello != NULL)
1417 OPENSSL_free(s->clienthello->pre_proc_exts);
6b1bb98f 1418 OPENSSL_free(s->clienthello);
9d75dce3
TS
1419 OPENSSL_free(s->pha_context);
1420 EVP_MD_CTX_free(s->pha_dgst);
0f113f3e 1421
fa7c2637 1422 sk_X509_NAME_pop_free(s->ca_names, X509_NAME_free);
98732979 1423 sk_X509_NAME_pop_free(s->client_ca_names, X509_NAME_free);
0f113f3e 1424
79b2a2f2 1425 OSSL_STACK_OF_X509_free(s->verified_chain);
696178ed 1426
38b051a1
TM
1427 if (ssl->method != NULL)
1428 ssl->method->ssl_deinit(ssl);
7c3908dd 1429
ff75a257
MC
1430 ASYNC_WAIT_CTX_free(s->waitctx);
1431
e481f9b9 1432#if !defined(OPENSSL_NO_NEXTPROTONEG)
aff8c126 1433 OPENSSL_free(s->ext.npn);
ee2ffc27
BL
1434#endif
1435
e783bae2 1436#ifndef OPENSSL_NO_SRTP
25aaa98a 1437 sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
0f113f3e 1438#endif
0f113f3e
MC
1439}
1440
65e2d672 1441void SSL_set0_rbio(SSL *s, BIO *rbio)
3ffbe008 1442{
38b051a1
TM
1443 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1444
1445 if (sc == NULL)
1446 return;
1447
1448 BIO_free_all(sc->rbio);
1449 sc->rbio = rbio;
cffafb5f 1450 sc->rlayer.rrlmethod->set1_bio(sc->rlayer.rrl, sc->rbio);
3ffbe008
MC
1451}
1452
65e2d672 1453void SSL_set0_wbio(SSL *s, BIO *wbio)
0f113f3e 1454{
38b051a1
TM
1455 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1456
1457 if (sc == NULL)
1458 return;
1459
0f113f3e
MC
1460 /*
1461 * If the output buffering BIO is still in place, remove it
1462 */
38b051a1
TM
1463 if (sc->bbio != NULL)
1464 sc->wbio = BIO_pop(sc->wbio);
2e7dc7cd 1465
38b051a1
TM
1466 BIO_free_all(sc->wbio);
1467 sc->wbio = wbio;
2e7dc7cd
MC
1468
1469 /* Re-attach |bbio| to the new |wbio|. */
38b051a1
TM
1470 if (sc->bbio != NULL)
1471 sc->wbio = BIO_push(sc->bbio, sc->wbio);
b5cf81f7
MC
1472
1473 sc->rlayer.wrlmethod->set1_bio(sc->rlayer.wrl, sc->wbio);
0f113f3e 1474}
d02b48c6 1475
3ffbe008
MC
1476void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio)
1477{
65e2d672
MC
1478 /*
1479 * For historical reasons, this function has many different cases in
1480 * ownership handling.
1481 */
1482
1483 /* If nothing has changed, do nothing */
1484 if (rbio == SSL_get_rbio(s) && wbio == SSL_get_wbio(s))
1485 return;
1486
1487 /*
1488 * If the two arguments are equal then one fewer reference is granted by the
1489 * caller than we want to take
1490 */
1491 if (rbio != NULL && rbio == wbio)
1492 BIO_up_ref(rbio);
1493
1494 /*
1495 * If only the wbio is changed only adopt one reference.
1496 */
1497 if (rbio == SSL_get_rbio(s)) {
1498 SSL_set0_wbio(s, wbio);
1499 return;
1500 }
1501 /*
1502 * There is an asymmetry here for historical reasons. If only the rbio is
1503 * changed AND the rbio and wbio were originally different, then we only
1504 * adopt one reference.
1505 */
1506 if (wbio == SSL_get_wbio(s) && SSL_get_rbio(s) != SSL_get_wbio(s)) {
1507 SSL_set0_rbio(s, rbio);
1508 return;
1509 }
1510
1511 /* Otherwise, adopt both references. */
1512 SSL_set0_rbio(s, rbio);
1513 SSL_set0_wbio(s, wbio);
3ffbe008
MC
1514}
1515
0821bcd4 1516BIO *SSL_get_rbio(const SSL *s)
0f113f3e 1517{
38b051a1
TM
1518 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1519
1520 if (sc == NULL)
1521 return NULL;
1522
1523 return sc->rbio;
0f113f3e 1524}
d02b48c6 1525
0821bcd4 1526BIO *SSL_get_wbio(const SSL *s)
0f113f3e 1527{
38b051a1
TM
1528 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1529
1530 if (sc == NULL)
1531 return NULL;
1532
1533 if (sc->bbio != NULL) {
2e7dc7cd
MC
1534 /*
1535 * If |bbio| is active, the true caller-configured BIO is its
1536 * |next_bio|.
1537 */
38b051a1 1538 return BIO_next(sc->bbio);
2e7dc7cd 1539 }
38b051a1 1540 return sc->wbio;
0f113f3e 1541}
d02b48c6 1542
0821bcd4 1543int SSL_get_fd(const SSL *s)
0f113f3e 1544{
2e7dc7cd 1545 return SSL_get_rfd(s);
0f113f3e 1546}
24cbf3ef 1547
0821bcd4 1548int SSL_get_rfd(const SSL *s)
0f113f3e
MC
1549{
1550 int ret = -1;
1551 BIO *b, *r;
1552
1553 b = SSL_get_rbio(s);
1554 r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
1555 if (r != NULL)
1556 BIO_get_fd(r, &ret);
26a7d938 1557 return ret;
0f113f3e 1558}
d02b48c6 1559
0821bcd4 1560int SSL_get_wfd(const SSL *s)
0f113f3e
MC
1561{
1562 int ret = -1;
1563 BIO *b, *r;
1564
1565 b = SSL_get_wbio(s);
1566 r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
1567 if (r != NULL)
1568 BIO_get_fd(r, &ret);
26a7d938 1569 return ret;
0f113f3e 1570}
24cbf3ef 1571
bc36ee62 1572#ifndef OPENSSL_NO_SOCK
0f113f3e
MC
1573int SSL_set_fd(SSL *s, int fd)
1574{
1575 int ret = 0;
1576 BIO *bio = NULL;
1577
1578 bio = BIO_new(BIO_s_socket());
1579
1580 if (bio == NULL) {
6849b73c 1581 ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
0f113f3e
MC
1582 goto err;
1583 }
1584 BIO_set_fd(bio, fd, BIO_NOCLOSE);
1585 SSL_set_bio(s, bio, bio);
50ec7505
BP
1586#ifndef OPENSSL_NO_KTLS
1587 /*
1588 * The new socket is created successfully regardless of ktls_enable.
1589 * ktls_enable doesn't change any functionality of the socket, except
1590 * changing the setsockopt to enable the processing of ktls_start.
1591 * Thus, it is not a problem to call it for non-TLS sockets.
1592 */
1593 ktls_enable(fd);
1594#endif /* OPENSSL_NO_KTLS */
0f113f3e
MC
1595 ret = 1;
1596 err:
26a7d938 1597 return ret;
0f113f3e 1598}
d02b48c6 1599
0f113f3e
MC
1600int SSL_set_wfd(SSL *s, int fd)
1601{
2e7dc7cd 1602 BIO *rbio = SSL_get_rbio(s);
0f113f3e 1603
2e7dc7cd
MC
1604 if (rbio == NULL || BIO_method_type(rbio) != BIO_TYPE_SOCKET
1605 || (int)BIO_get_fd(rbio, NULL) != fd) {
1606 BIO *bio = BIO_new(BIO_s_socket());
0f113f3e
MC
1607
1608 if (bio == NULL) {
6849b73c 1609 ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
2e7dc7cd 1610 return 0;
0f113f3e
MC
1611 }
1612 BIO_set_fd(bio, fd, BIO_NOCLOSE);
65e2d672 1613 SSL_set0_wbio(s, bio);
50ec7505
BP
1614#ifndef OPENSSL_NO_KTLS
1615 /*
1616 * The new socket is created successfully regardless of ktls_enable.
1617 * ktls_enable doesn't change any functionality of the socket, except
1618 * changing the setsockopt to enable the processing of ktls_start.
1619 * Thus, it is not a problem to call it for non-TLS sockets.
1620 */
1621 ktls_enable(fd);
1622#endif /* OPENSSL_NO_KTLS */
2e7dc7cd 1623 } else {
65e2d672
MC
1624 BIO_up_ref(rbio);
1625 SSL_set0_wbio(s, rbio);
2e7dc7cd
MC
1626 }
1627 return 1;
0f113f3e
MC
1628}
1629
1630int SSL_set_rfd(SSL *s, int fd)
1631{
2e7dc7cd 1632 BIO *wbio = SSL_get_wbio(s);
0f113f3e 1633
2e7dc7cd
MC
1634 if (wbio == NULL || BIO_method_type(wbio) != BIO_TYPE_SOCKET
1635 || ((int)BIO_get_fd(wbio, NULL) != fd)) {
1636 BIO *bio = BIO_new(BIO_s_socket());
0f113f3e
MC
1637
1638 if (bio == NULL) {
6849b73c 1639 ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
2e7dc7cd 1640 return 0;
0f113f3e
MC
1641 }
1642 BIO_set_fd(bio, fd, BIO_NOCLOSE);
65e2d672 1643 SSL_set0_rbio(s, bio);
2e7dc7cd 1644 } else {
65e2d672
MC
1645 BIO_up_ref(wbio);
1646 SSL_set0_rbio(s, wbio);
2e7dc7cd
MC
1647 }
1648
1649 return 1;
0f113f3e
MC
1650}
1651#endif
ca03109c
BM
1652
1653/* return length of latest Finished message we sent, copy to 'buf' */
0821bcd4 1654size_t SSL_get_finished(const SSL *s, void *buf, size_t count)
0f113f3e
MC
1655{
1656 size_t ret = 0;
38b051a1
TM
1657 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1658
1659 if (sc == NULL)
1660 return 0;
0f113f3e 1661
38b051a1 1662 ret = sc->s3.tmp.finish_md_len;
555cbb32
TS
1663 if (count > ret)
1664 count = ret;
38b051a1 1665 memcpy(buf, sc->s3.tmp.finish_md, count);
0f113f3e
MC
1666 return ret;
1667}
ca03109c
BM
1668
1669/* return length of latest Finished message we expected, copy to 'buf' */
0821bcd4 1670size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
0f113f3e
MC
1671{
1672 size_t ret = 0;
38b051a1 1673 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
ca03109c 1674
38b051a1
TM
1675 if (sc == NULL)
1676 return 0;
1677
1678 ret = sc->s3.tmp.peer_finish_md_len;
555cbb32
TS
1679 if (count > ret)
1680 count = ret;
38b051a1 1681 memcpy(buf, sc->s3.tmp.peer_finish_md, count);
0f113f3e
MC
1682 return ret;
1683}
ca03109c 1684
0821bcd4 1685int SSL_get_verify_mode(const SSL *s)
0f113f3e 1686{
38b051a1
TM
1687 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1688
1689 if (sc == NULL)
1690 return 0;
1691
1692 return sc->verify_mode;
0f113f3e 1693}
d02b48c6 1694
0821bcd4 1695int SSL_get_verify_depth(const SSL *s)
0f113f3e 1696{
38b051a1
TM
1697 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1698
1699 if (sc == NULL)
1700 return 0;
1701
1702 return X509_VERIFY_PARAM_get_depth(sc->param);
0f113f3e 1703}
7f89714e 1704
0f113f3e 1705int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *) {
38b051a1
TM
1706 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1707
1708 if (sc == NULL)
1709 return NULL;
1710
1711 return sc->verify_callback;
0f113f3e 1712}
d02b48c6 1713
0821bcd4 1714int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
0f113f3e 1715{
26a7d938 1716 return ctx->verify_mode;
0f113f3e 1717}
d02b48c6 1718
0821bcd4 1719int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
0f113f3e
MC
1720{
1721 return X509_VERIFY_PARAM_get_depth(ctx->param);
1722}
1723
1724int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, X509_STORE_CTX *) {
26a7d938 1725 return ctx->default_verify_callback;
0f113f3e
MC
1726}
1727
1728void SSL_set_verify(SSL *s, int mode,
1729 int (*callback) (int ok, X509_STORE_CTX *ctx))
1730{
38b051a1
TM
1731 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1732
1733 if (sc == NULL)
1734 return;
1735
1736 sc->verify_mode = mode;
0f113f3e 1737 if (callback != NULL)
38b051a1 1738 sc->verify_callback = callback;
0f113f3e
MC
1739}
1740
1741void SSL_set_verify_depth(SSL *s, int depth)
1742{
38b051a1
TM
1743 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1744
1745 if (sc == NULL)
1746 return;
1747
1748 X509_VERIFY_PARAM_set_depth(sc->param, depth);
0f113f3e
MC
1749}
1750
1751void SSL_set_read_ahead(SSL *s, int yes)
1752{
38b051a1 1753 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4566dae7 1754 OSSL_PARAM options[2], *opts = options;
38b051a1
TM
1755
1756 if (sc == NULL)
1757 return;
1758
1759 RECORD_LAYER_set_read_ahead(&sc->rlayer, yes);
4566dae7
MC
1760
1761 *opts++ = OSSL_PARAM_construct_int(OSSL_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD,
1762 &sc->rlayer.read_ahead);
1763 *opts = OSSL_PARAM_construct_end();
1764
1765 /* Ignore return value */
1766 sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
0f113f3e 1767}
d02b48c6 1768
0821bcd4 1769int SSL_get_read_ahead(const SSL *s)
0f113f3e 1770{
38b051a1
TM
1771 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1772
1773 if (sc == NULL)
1774 return 0;
1775
1776 return RECORD_LAYER_get_read_ahead(&sc->rlayer);
0f113f3e 1777}
d02b48c6 1778
0821bcd4 1779int SSL_pending(const SSL *s)
0f113f3e 1780{
8b0e934a
MC
1781 size_t pending = s->method->ssl_pending(s);
1782
0f113f3e
MC
1783 /*
1784 * SSL_pending cannot work properly if read-ahead is enabled
1785 * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), and it is
1786 * impossible to fix since SSL_pending cannot report errors that may be
1787 * observed while scanning the new data. (Note that SSL_pending() is
1788 * often used as a boolean value, so we'd better not return -1.)
8b0e934a
MC
1789 *
1790 * SSL_pending also cannot work properly if the value >INT_MAX. In that case
1791 * we just return INT_MAX.
0f113f3e 1792 */
348240c6 1793 return pending < INT_MAX ? (int)pending : INT_MAX;
0f113f3e 1794}
d02b48c6 1795
49580f25
MC
1796int SSL_has_pending(const SSL *s)
1797{
1798 /*
1799 * Similar to SSL_pending() but returns a 1 to indicate that we have
6d6b295a
MC
1800 * processed or unprocessed data available or 0 otherwise (as opposed to the
1801 * number of bytes available). Unlike SSL_pending() this will take into
1802 * account read_ahead data. A 1 return simply indicates that we have data.
1803 * That data may not result in any application data, or we may fail to parse
1804 * the records for some reason.
49580f25 1805 */
38b051a1
TM
1806 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1807
6d6b295a
MC
1808 /* Check buffered app data if any first */
1809 if (SSL_CONNECTION_IS_DTLS(sc)) {
eddb067e 1810 TLS_RECORD *rdata;
6d6b295a
MC
1811 pitem *item, *iter;
1812
1813 iter = pqueue_iterator(sc->rlayer.d->buffered_app_data.q);
1814 while ((item = pqueue_next(&iter)) != NULL) {
1815 rdata = item->data;
eddb067e 1816 if (rdata->length > 0)
6d6b295a
MC
1817 return 1;
1818 }
1819 }
38b051a1
TM
1820
1821 if (RECORD_LAYER_processed_read_pending(&sc->rlayer))
49580f25
MC
1822 return 1;
1823
38b051a1 1824 return RECORD_LAYER_read_pending(&sc->rlayer);
49580f25
MC
1825}
1826
8c2bfd25 1827X509 *SSL_get1_peer_certificate(const SSL *s)
0f113f3e 1828{
8c2bfd25 1829 X509 *r = SSL_get0_peer_certificate(s);
d02b48c6 1830
8c2bfd25
TS
1831 if (r != NULL)
1832 X509_up_ref(r);
0f113f3e 1833
26a7d938 1834 return r;
0f113f3e 1835}
d02b48c6 1836
8c2bfd25
TS
1837X509 *SSL_get0_peer_certificate(const SSL *s)
1838{
38b051a1
TM
1839 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1840
1841 if (sc == NULL)
1842 return NULL;
1843
1844 if (sc->session == NULL)
8c2bfd25
TS
1845 return NULL;
1846 else
38b051a1 1847 return sc->session->peer;
8c2bfd25
TS
1848}
1849
0821bcd4 1850STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
0f113f3e
MC
1851{
1852 STACK_OF(X509) *r;
38b051a1 1853 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
0f113f3e 1854
38b051a1
TM
1855 if (sc == NULL)
1856 return NULL;
1857
1858 if (sc->session == NULL)
0f113f3e
MC
1859 r = NULL;
1860 else
38b051a1 1861 r = sc->session->peer_chain;
0f113f3e
MC
1862
1863 /*
1864 * If we are a client, cert_chain includes the peer's own certificate; if
1865 * we are a server, it does not.
1866 */
1867
26a7d938 1868 return r;
0f113f3e
MC
1869}
1870
1871/*
1872 * Now in theory, since the calling process own 't' it should be safe to
1873 * modify. We need to be able to read f without being hassled
1874 */
17dd65e6 1875int SSL_copy_session_id(SSL *t, const SSL *f)
0f113f3e 1876{
16203f7b 1877 int i;
38b051a1
TM
1878 /* TODO(QUIC): Do we want to support this for QUIC connections? */
1879 SSL_CONNECTION *tsc = SSL_CONNECTION_FROM_SSL_ONLY(t);
1880 const SSL_CONNECTION *fsc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(f);
1881
1882 if (tsc == NULL || fsc == NULL)
1883 return 0;
1884
3e6a0d57 1885 /* Do we need to do SSL locking? */
61986d32 1886 if (!SSL_set_session(t, SSL_get_session(f))) {
17dd65e6 1887 return 0;
69f68237 1888 }
0f113f3e
MC
1889
1890 /*
87d9cafa 1891 * what if we are setup for one protocol version but want to talk another
0f113f3e
MC
1892 */
1893 if (t->method != f->method) {
38b051a1 1894 t->method->ssl_deinit(t);
919ba009 1895 t->method = f->method;
38b051a1 1896 if (t->method->ssl_init(t) == 0)
919ba009 1897 return 0;
0f113f3e
MC
1898 }
1899
38b051a1
TM
1900 CRYPTO_UP_REF(&fsc->cert->references, &i, fsc->cert->lock);
1901 ssl_cert_free(tsc->cert);
1902 tsc->cert = fsc->cert;
1903 if (!SSL_set_session_id_context(t, fsc->sid_ctx, (int)fsc->sid_ctx_length)) {
17dd65e6 1904 return 0;
69f68237 1905 }
17dd65e6
MC
1906
1907 return 1;
0f113f3e 1908}
d02b48c6 1909
58964a49 1910/* Fix this so it checks all the valid key/cert options */
0821bcd4 1911int SSL_CTX_check_private_key(const SSL_CTX *ctx)
0f113f3e 1912{
a230b26e 1913 if ((ctx == NULL) || (ctx->cert->key->x509 == NULL)) {
6849b73c 1914 ERR_raise(ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED);
26a7d938 1915 return 0;
0f113f3e
MC
1916 }
1917 if (ctx->cert->key->privatekey == NULL) {
6849b73c 1918 ERR_raise(ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
26a7d938 1919 return 0;
0f113f3e 1920 }
26a7d938
K
1921 return X509_check_private_key
1922 (ctx->cert->key->x509, ctx->cert->key->privatekey);
0f113f3e 1923}
d02b48c6 1924
58964a49 1925/* Fix this function so that it takes an optional type parameter */
0821bcd4 1926int SSL_check_private_key(const SSL *ssl)
0f113f3e 1927{
38b051a1
TM
1928 const SSL_CONNECTION *sc;
1929
1930 if ((sc = SSL_CONNECTION_FROM_CONST_SSL(ssl)) == NULL) {
6849b73c 1931 ERR_raise(ERR_LIB_SSL, ERR_R_PASSED_NULL_PARAMETER);
26a7d938 1932 return 0;
0f113f3e 1933 }
38b051a1 1934 if (sc->cert->key->x509 == NULL) {
6849b73c 1935 ERR_raise(ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED);
26a7d938 1936 return 0;
0f113f3e 1937 }
38b051a1 1938 if (sc->cert->key->privatekey == NULL) {
6849b73c 1939 ERR_raise(ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
26a7d938 1940 return 0;
0f113f3e 1941 }
38b051a1
TM
1942 return X509_check_private_key(sc->cert->key->x509,
1943 sc->cert->key->privatekey);
0f113f3e 1944}
d02b48c6 1945
07bbc92c
MC
1946int SSL_waiting_for_async(SSL *s)
1947{
38b051a1
TM
1948 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1949
1950 if (sc == NULL)
1951 return 0;
1952
1953 if (sc->job)
82676094
MC
1954 return 1;
1955
07bbc92c
MC
1956 return 0;
1957}
1958
ff75a257 1959int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds)
f4da39d2 1960{
38b051a1
TM
1961 ASYNC_WAIT_CTX *ctx;
1962 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
ff75a257 1963
38b051a1
TM
1964 if (sc == NULL)
1965 return 0;
1966
1967 if ((ctx = sc->waitctx) == NULL)
ff75a257
MC
1968 return 0;
1969 return ASYNC_WAIT_CTX_get_all_fds(ctx, fds, numfds);
1970}
f4da39d2 1971
ff75a257
MC
1972int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds,
1973 OSSL_ASYNC_FD *delfd, size_t *numdelfds)
1974{
38b051a1
TM
1975 ASYNC_WAIT_CTX *ctx;
1976 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
ff75a257 1977
38b051a1
TM
1978 if (sc == NULL)
1979 return 0;
1980
1981 if ((ctx = sc->waitctx) == NULL)
ff75a257
MC
1982 return 0;
1983 return ASYNC_WAIT_CTX_get_changed_fds(ctx, addfd, numaddfds, delfd,
1984 numdelfds);
f4da39d2
MC
1985}
1986
9f5a87fd
PY
1987int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback)
1988{
1989 ctx->async_cb = callback;
1990 return 1;
1991}
1992
1993int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg)
1994{
1995 ctx->async_cb_arg = arg;
1996 return 1;
1997}
1998
1999int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback)
2000{
38b051a1
TM
2001 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2002
2003 if (sc == NULL)
2004 return 0;
2005
2006 sc->async_cb = callback;
9f5a87fd
PY
2007 return 1;
2008}
2009
2010int SSL_set_async_callback_arg(SSL *s, void *arg)
2011{
38b051a1
TM
2012 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2013
2014 if (sc == NULL)
2015 return 0;
2016
2017 sc->async_cb_arg = arg;
9f5a87fd
PY
2018 return 1;
2019}
2020
2021int SSL_get_async_status(SSL *s, int *status)
2022{
38b051a1
TM
2023 ASYNC_WAIT_CTX *ctx;
2024 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
9f5a87fd 2025
38b051a1
TM
2026 if (sc == NULL)
2027 return 0;
2028
2029 if ((ctx = sc->waitctx) == NULL)
9f5a87fd
PY
2030 return 0;
2031 *status = ASYNC_WAIT_CTX_get_status(ctx);
2032 return 1;
2033}
2034
4f43d0e7 2035int SSL_accept(SSL *s)
0f113f3e 2036{
38b051a1
TM
2037 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2038
2039 if (sc == NULL)
2040 return 0;
2041
2042 if (sc->handshake_func == NULL) {
0f113f3e
MC
2043 /* Not properly initialized yet */
2044 SSL_set_accept_state(s);
07bbc92c 2045 }
add2f5ca
MC
2046
2047 return SSL_do_handshake(s);
0f113f3e 2048}
d02b48c6 2049
4f43d0e7 2050int SSL_connect(SSL *s)
0f113f3e 2051{
38b051a1
TM
2052 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2053
2054 if (sc == NULL)
2055 return 0;
2056
2057 if (sc->handshake_func == NULL) {
0f113f3e
MC
2058 /* Not properly initialized yet */
2059 SSL_set_connect_state(s);
add2f5ca 2060 }
b31b04d9 2061
add2f5ca 2062 return SSL_do_handshake(s);
0f113f3e 2063}
d02b48c6 2064
0821bcd4 2065long SSL_get_default_timeout(const SSL *s)
0f113f3e 2066{
f0131dc0 2067 return (long int)ossl_time2seconds(s->method->get_timeout());
0f113f3e
MC
2068}
2069
9f5a87fd
PY
2070static int ssl_async_wait_ctx_cb(void *arg)
2071{
2072 SSL *s = (SSL *)arg;
38b051a1 2073 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
9f5a87fd 2074
38b051a1
TM
2075 if (sc == NULL)
2076 return 0;
2077
2078 return sc->async_cb(s, sc->async_cb_arg);
9f5a87fd
PY
2079}
2080
7fecbf6f 2081static int ssl_start_async_job(SSL *s, struct ssl_async_args *args,
a230b26e
EK
2082 int (*func) (void *))
2083{
add2f5ca 2084 int ret;
38b051a1
TM
2085 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2086
2087 if (sc == NULL)
2088 return 0;
2089
2090 if (sc->waitctx == NULL) {
2091 sc->waitctx = ASYNC_WAIT_CTX_new();
2092 if (sc->waitctx == NULL)
ff75a257 2093 return -1;
38b051a1 2094 if (sc->async_cb != NULL
9f5a87fd 2095 && !ASYNC_WAIT_CTX_set_callback
38b051a1 2096 (sc->waitctx, ssl_async_wait_ctx_cb, s))
9f5a87fd 2097 return -1;
ff75a257 2098 }
07f620e3 2099
38b051a1
TM
2100 sc->rwstate = SSL_NOTHING;
2101 switch (ASYNC_start_job(&sc->job, sc->waitctx, &ret, func, args,
a230b26e 2102 sizeof(struct ssl_async_args))) {
add2f5ca 2103 case ASYNC_ERR:
38b051a1 2104 sc->rwstate = SSL_NOTHING;
6849b73c 2105 ERR_raise(ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC);
add2f5ca
MC
2106 return -1;
2107 case ASYNC_PAUSE:
38b051a1 2108 sc->rwstate = SSL_ASYNC_PAUSED;
add2f5ca 2109 return -1;
fc7f190c 2110 case ASYNC_NO_JOBS:
38b051a1 2111 sc->rwstate = SSL_ASYNC_NO_JOBS;
fc7f190c 2112 return -1;
add2f5ca 2113 case ASYNC_FINISH:
38b051a1 2114 sc->job = NULL;
add2f5ca
MC
2115 return ret;
2116 default:
38b051a1 2117 sc->rwstate = SSL_NOTHING;
6849b73c 2118 ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
add2f5ca
MC
2119 /* Shouldn't happen */
2120 return -1;
2121 }
2122}
07bbc92c 2123
add2f5ca 2124static int ssl_io_intern(void *vargs)
07bbc92c
MC
2125{
2126 struct ssl_async_args *args;
2127 SSL *s;
2128 void *buf;
348240c6 2129 size_t num;
38b051a1 2130 SSL_CONNECTION *sc;
07bbc92c
MC
2131
2132 args = (struct ssl_async_args *)vargs;
2133 s = args->s;
2134 buf = args->buf;
2135 num = args->num;
38b051a1
TM
2136 if ((sc = SSL_CONNECTION_FROM_SSL(s)) == NULL)
2137 return -1;
2138
ec447924
MC
2139 switch (args->type) {
2140 case READFUNC:
38b051a1 2141 return args->f.func_read(s, buf, num, &sc->asyncrw);
ec447924 2142 case WRITEFUNC:
38b051a1 2143 return args->f.func_write(s, buf, num, &sc->asyncrw);
ec447924
MC
2144 case OTHERFUNC:
2145 return args->f.func_other(s);
2146 }
2147 return -1;
07bbc92c
MC
2148}
2149
4ee7d3f9 2150int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
0f113f3e 2151{
38b051a1
TM
2152 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2153
2154 if (sc == NULL)
2155 return -1;
2156
2157 if (sc->handshake_func == NULL) {
6849b73c 2158 ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
0f113f3e
MC
2159 return -1;
2160 }
2161
38b051a1
TM
2162 if (sc->shutdown & SSL_RECEIVED_SHUTDOWN) {
2163 sc->rwstate = SSL_NOTHING;
4ee7d3f9 2164 return 0;
0f113f3e 2165 }
07bbc92c 2166
38b051a1
TM
2167 if (sc->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
2168 || sc->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY) {
6849b73c 2169 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
0a5ece5b
MC
2170 return 0;
2171 }
564547e4
MC
2172 /*
2173 * If we are a client and haven't received the ServerHello etc then we
2174 * better do that
2175 */
38b051a1 2176 ossl_statem_check_finish_init(sc, 0);
0a5ece5b 2177
38b051a1 2178 if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
add2f5ca 2179 struct ssl_async_args args;
eda75751 2180 int ret;
add2f5ca
MC
2181
2182 args.s = s;
2183 args.buf = buf;
2184 args.num = num;
ec447924
MC
2185 args.type = READFUNC;
2186 args.f.func_read = s->method->ssl_read;
add2f5ca 2187
eda75751 2188 ret = ssl_start_async_job(s, &args, ssl_io_intern);
38b051a1 2189 *readbytes = sc->asyncrw;
eda75751 2190 return ret;
07bbc92c 2191 } else {
54105ddd 2192 return s->method->ssl_read(s, buf, num, readbytes);
07bbc92c 2193 }
0f113f3e
MC
2194}
2195
4ee7d3f9 2196int SSL_read(SSL *s, void *buf, int num)
eda75751
MC
2197{
2198 int ret;
54105ddd 2199 size_t readbytes;
eda75751
MC
2200
2201 if (num < 0) {
6849b73c 2202 ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
eda75751
MC
2203 return -1;
2204 }
2205
4ee7d3f9 2206 ret = ssl_read_internal(s, buf, (size_t)num, &readbytes);
eda75751
MC
2207
2208 /*
2209 * The cast is safe here because ret should be <= INT_MAX because num is
2210 * <= INT_MAX
2211 */
2212 if (ret > 0)
54105ddd 2213 ret = (int)readbytes;
eda75751
MC
2214
2215 return ret;
2216}
2217
4ee7d3f9
KR
2218int SSL_read_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
2219{
2220 int ret = ssl_read_internal(s, buf, num, readbytes);
2221
2222 if (ret < 0)
2223 ret = 0;
2224 return ret;
2225}
2226
f533fbd4 2227int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes)
d781d247
MC
2228{
2229 int ret;
38b051a1
TM
2230 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2231
2232 /* TODO(QUIC): This will need special handling for QUIC */
2233 if (sc == NULL)
2234 return 0;
d781d247 2235
38b051a1 2236 if (!sc->server) {
6849b73c 2237 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
f533fbd4 2238 return SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
2239 }
2240
38b051a1 2241 switch (sc->early_data_state) {
d781d247
MC
2242 case SSL_EARLY_DATA_NONE:
2243 if (!SSL_in_before(s)) {
6849b73c 2244 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
f533fbd4 2245 return SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
2246 }
2247 /* fall through */
2248
2249 case SSL_EARLY_DATA_ACCEPT_RETRY:
38b051a1 2250 sc->early_data_state = SSL_EARLY_DATA_ACCEPTING;
d781d247
MC
2251 ret = SSL_accept(s);
2252 if (ret <= 0) {
2253 /* NBIO or error */
38b051a1 2254 sc->early_data_state = SSL_EARLY_DATA_ACCEPT_RETRY;
f533fbd4 2255 return SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
2256 }
2257 /* fall through */
2258
2259 case SSL_EARLY_DATA_READ_RETRY:
38b051a1
TM
2260 if (sc->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
2261 sc->early_data_state = SSL_EARLY_DATA_READING;
d781d247
MC
2262 ret = SSL_read_ex(s, buf, num, readbytes);
2263 /*
ef6c191b
MC
2264 * State machine will update early_data_state to
2265 * SSL_EARLY_DATA_FINISHED_READING if we get an EndOfEarlyData
2266 * message
d781d247 2267 */
38b051a1 2268 if (ret > 0 || (ret <= 0 && sc->early_data_state
d781d247 2269 != SSL_EARLY_DATA_FINISHED_READING)) {
38b051a1 2270 sc->early_data_state = SSL_EARLY_DATA_READ_RETRY;
f533fbd4
MC
2271 return ret > 0 ? SSL_READ_EARLY_DATA_SUCCESS
2272 : SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
2273 }
2274 } else {
38b051a1 2275 sc->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
d781d247
MC
2276 }
2277 *readbytes = 0;
f533fbd4 2278 return SSL_READ_EARLY_DATA_FINISH;
d781d247
MC
2279
2280 default:
6849b73c 2281 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
f533fbd4 2282 return SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
2283 }
2284}
2285
f5b519c4 2286int SSL_get_early_data_status(const SSL *s)
1ea4d09a 2287{
38b051a1
TM
2288 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
2289
2290 /* TODO(QUIC): This will need special handling for QUIC */
2291 if (sc == NULL)
2292 return 0;
2293
2294 return sc->ext.early_data;
1ea4d09a
MC
2295}
2296
4ee7d3f9 2297static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
0f113f3e 2298{
38b051a1
TM
2299 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2300
2301 if (sc == NULL)
2302 return 0;
2303
2304 if (sc->handshake_func == NULL) {
6849b73c 2305 ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
0f113f3e
MC
2306 return -1;
2307 }
2308
38b051a1 2309 if (sc->shutdown & SSL_RECEIVED_SHUTDOWN) {
4ee7d3f9 2310 return 0;
0f113f3e 2311 }
38b051a1 2312 if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
add2f5ca 2313 struct ssl_async_args args;
eda75751 2314 int ret;
0f113f3e 2315
add2f5ca
MC
2316 args.s = s;
2317 args.buf = buf;
2318 args.num = num;
ec447924
MC
2319 args.type = READFUNC;
2320 args.f.func_read = s->method->ssl_peek;
07bbc92c 2321
eda75751 2322 ret = ssl_start_async_job(s, &args, ssl_io_intern);
38b051a1 2323 *readbytes = sc->asyncrw;
eda75751 2324 return ret;
add2f5ca 2325 } else {
54105ddd 2326 return s->method->ssl_peek(s, buf, num, readbytes);
add2f5ca 2327 }
07bbc92c
MC
2328}
2329
4ee7d3f9 2330int SSL_peek(SSL *s, void *buf, int num)
7ee8627f
MC
2331{
2332 int ret;
4ee7d3f9 2333 size_t readbytes;
7ee8627f
MC
2334
2335 if (num < 0) {
6849b73c 2336 ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
7ee8627f
MC
2337 return -1;
2338 }
2339
4ee7d3f9 2340 ret = ssl_peek_internal(s, buf, (size_t)num, &readbytes);
7ee8627f
MC
2341
2342 /*
2343 * The cast is safe here because ret should be <= INT_MAX because num is
2344 * <= INT_MAX
2345 */
2346 if (ret > 0)
4ee7d3f9 2347 ret = (int)readbytes;
7ee8627f
MC
2348
2349 return ret;
2350}
2351
4ee7d3f9
KR
2352
2353int SSL_peek_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
2354{
2355 int ret = ssl_peek_internal(s, buf, num, readbytes);
2356
2357 if (ret < 0)
2358 ret = 0;
2359 return ret;
2360}
2361
2362int ssl_write_internal(SSL *s, const void *buf, size_t num, size_t *written)
0f113f3e 2363{
38b051a1
TM
2364 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2365
2366 if (sc == NULL)
2367 return 0;
2368
2369 if (sc->handshake_func == NULL) {
6849b73c 2370 ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
0f113f3e
MC
2371 return -1;
2372 }
2373
38b051a1
TM
2374 if (sc->shutdown & SSL_SENT_SHUTDOWN) {
2375 sc->rwstate = SSL_NOTHING;
6849b73c 2376 ERR_raise(ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
4ee7d3f9 2377 return -1;
0f113f3e 2378 }
07bbc92c 2379
38b051a1
TM
2380 if (sc->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
2381 || sc->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY
2382 || sc->early_data_state == SSL_EARLY_DATA_READ_RETRY) {
6849b73c 2383 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
49e7fe12 2384 return 0;
0a5ece5b 2385 }
564547e4 2386 /* If we are a client and haven't sent the Finished we better do that */
38b051a1 2387 ossl_statem_check_finish_init(sc, 1);
49e7fe12 2388
38b051a1 2389 if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
7ee8627f 2390 int ret;
add2f5ca
MC
2391 struct ssl_async_args args;
2392
2393 args.s = s;
2394 args.buf = (void *)buf;
2395 args.num = num;
ec447924
MC
2396 args.type = WRITEFUNC;
2397 args.f.func_write = s->method->ssl_write;
add2f5ca 2398
7ee8627f 2399 ret = ssl_start_async_job(s, &args, ssl_io_intern);
38b051a1 2400 *written = sc->asyncrw;
7ee8627f 2401 return ret;
07bbc92c 2402 } else {
7ee8627f 2403 return s->method->ssl_write(s, buf, num, written);
07bbc92c 2404 }
0f113f3e 2405}
d02b48c6 2406
7c3a7561
BP
2407ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, int flags)
2408{
2409 ossl_ssize_t ret;
38b051a1 2410 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
7c3a7561 2411
38b051a1
TM
2412 if (sc == NULL)
2413 return 0;
2414
2415 if (sc->handshake_func == NULL) {
6849b73c 2416 ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
7c3a7561
BP
2417 return -1;
2418 }
2419
38b051a1
TM
2420 if (sc->shutdown & SSL_SENT_SHUTDOWN) {
2421 sc->rwstate = SSL_NOTHING;
6849b73c 2422 ERR_raise(ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
7c3a7561
BP
2423 return -1;
2424 }
2425
38b051a1 2426 if (!BIO_get_ktls_send(sc->wbio)) {
6849b73c 2427 ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
7c3a7561
BP
2428 return -1;
2429 }
2430
2431 /* If we have an alert to send, lets send it */
38b051a1 2432 if (sc->s3.alert_dispatch) {
7c3a7561
BP
2433 ret = (ossl_ssize_t)s->method->ssl_dispatch_alert(s);
2434 if (ret <= 0) {
2435 /* SSLfatal() already called if appropriate */
2436 return ret;
2437 }
2438 /* if it went, fall through and send more stuff */
2439 }
2440
38b051a1
TM
2441 sc->rwstate = SSL_WRITING;
2442 if (BIO_flush(sc->wbio) <= 0) {
2443 if (!BIO_should_retry(sc->wbio)) {
2444 sc->rwstate = SSL_NOTHING;
7c3a7561
BP
2445 } else {
2446#ifdef EAGAIN
2447 set_sys_error(EAGAIN);
2448#endif
2449 }
2450 return -1;
2451 }
2452
712c0942 2453#ifdef OPENSSL_NO_KTLS
fa7a8074
RL
2454 ERR_raise_data(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR,
2455 "can't call ktls_sendfile(), ktls disabled");
712c0942 2456 return -1;
7c3a7561 2457#else
712c0942 2458 ret = ktls_sendfile(SSL_get_wfd(s), fd, offset, size, flags);
7c3a7561
BP
2459 if (ret < 0) {
2460#if defined(EAGAIN) && defined(EINTR) && defined(EBUSY)
2461 if ((get_last_sys_error() == EAGAIN) ||
2462 (get_last_sys_error() == EINTR) ||
2463 (get_last_sys_error() == EBUSY))
38b051a1 2464 BIO_set_retry_write(sc->wbio);
7c3a7561
BP
2465 else
2466#endif
6849b73c 2467 ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
7c3a7561
BP
2468 return ret;
2469 }
38b051a1 2470 sc->rwstate = SSL_NOTHING;
7c3a7561 2471 return ret;
712c0942 2472#endif
7c3a7561
BP
2473}
2474
4ee7d3f9
KR
2475int SSL_write(SSL *s, const void *buf, int num)
2476{
2477 int ret;
2478 size_t written;
2479
2480 if (num < 0) {
6849b73c 2481 ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
4ee7d3f9
KR
2482 return -1;
2483 }
2484
2485 ret = ssl_write_internal(s, buf, (size_t)num, &written);
2486
2487 /*
2488 * The cast is safe here because ret should be <= INT_MAX because num is
2489 * <= INT_MAX
2490 */
2491 if (ret > 0)
2492 ret = (int)written;
2493
2494 return ret;
2495}
2496
2497int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written)
2498{
2499 int ret = ssl_write_internal(s, buf, num, written);
2500
2501 if (ret < 0)
2502 ret = 0;
2503 return ret;
2504}
2505
0665b4ed 2506int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
49e7fe12 2507{
a0cb628b 2508 int ret, early_data_state;
2a8db717 2509 size_t writtmp;
f7414b08 2510 uint32_t partialwrite;
38b051a1
TM
2511 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2512
2513 /* TODO(QUIC): This will need special handling for QUIC */
2514 if (sc == NULL)
2515 return 0;
49e7fe12 2516
38b051a1 2517 switch (sc->early_data_state) {
49e7fe12 2518 case SSL_EARLY_DATA_NONE:
38b051a1 2519 if (sc->server
09f28874 2520 || !SSL_in_before(s)
38b051a1
TM
2521 || ((sc->session == NULL || sc->session->ext.max_early_data == 0)
2522 && (sc->psk_use_session_cb == NULL))) {
6849b73c 2523 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
49e7fe12
MC
2524 return 0;
2525 }
2526 /* fall through */
2527
2528 case SSL_EARLY_DATA_CONNECT_RETRY:
38b051a1 2529 sc->early_data_state = SSL_EARLY_DATA_CONNECTING;
49e7fe12
MC
2530 ret = SSL_connect(s);
2531 if (ret <= 0) {
2532 /* NBIO or error */
38b051a1 2533 sc->early_data_state = SSL_EARLY_DATA_CONNECT_RETRY;
49e7fe12
MC
2534 return 0;
2535 }
2536 /* fall through */
2537
2538 case SSL_EARLY_DATA_WRITE_RETRY:
38b051a1 2539 sc->early_data_state = SSL_EARLY_DATA_WRITING;
f7414b08
MC
2540 /*
2541 * We disable partial write for early data because we don't keep track
2542 * of how many bytes we've written between the SSL_write_ex() call and
2543 * the flush if the flush needs to be retried)
2544 */
38b051a1
TM
2545 partialwrite = sc->mode & SSL_MODE_ENABLE_PARTIAL_WRITE;
2546 sc->mode &= ~SSL_MODE_ENABLE_PARTIAL_WRITE;
2a8db717 2547 ret = SSL_write_ex(s, buf, num, &writtmp);
38b051a1 2548 sc->mode |= partialwrite;
2a8db717 2549 if (!ret) {
38b051a1 2550 sc->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
2a8db717
MC
2551 return ret;
2552 }
38b051a1 2553 sc->early_data_state = SSL_EARLY_DATA_WRITE_FLUSH;
2a8db717
MC
2554 /* fall through */
2555
2556 case SSL_EARLY_DATA_WRITE_FLUSH:
2557 /* The buffering BIO is still in place so we need to flush it */
38b051a1 2558 if (statem_flush(sc) != 1)
2a8db717 2559 return 0;
2a8db717 2560 *written = num;
38b051a1 2561 sc->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
2a8db717 2562 return 1;
49e7fe12 2563
116d0da5 2564 case SSL_EARLY_DATA_FINISHED_READING:
a0cb628b 2565 case SSL_EARLY_DATA_READ_RETRY:
38b051a1 2566 early_data_state = sc->early_data_state;
09f28874 2567 /* We are a server writing to an unauthenticated client */
38b051a1 2568 sc->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
09f28874 2569 ret = SSL_write_ex(s, buf, num, written);
5fe37157
MC
2570 /* The buffering BIO is still in place */
2571 if (ret)
38b051a1
TM
2572 (void)BIO_flush(sc->wbio);
2573 sc->early_data_state = early_data_state;
09f28874
MC
2574 return ret;
2575
49e7fe12 2576 default:
6849b73c 2577 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
49e7fe12
MC
2578 return 0;
2579 }
2580}
2581
4f43d0e7 2582int SSL_shutdown(SSL *s)
0f113f3e
MC
2583{
2584 /*
2585 * Note that this function behaves differently from what one might
2586 * expect. Return values are 0 for no success (yet), 1 for success; but
2587 * calling it once is usually not enough, even if blocking I/O is used
2588 * (see ssl3_shutdown).
2589 */
38b051a1 2590 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
0f113f3e 2591
38b051a1
TM
2592 if (sc == NULL)
2593 return -1;
2594
2595 if (sc->handshake_func == NULL) {
6849b73c 2596 ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
0f113f3e
MC
2597 return -1;
2598 }
2599
64f9f406 2600 if (!SSL_in_init(s)) {
38b051a1 2601 if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
64f9f406 2602 struct ssl_async_args args;
ec447924 2603
09134f18 2604 memset(&args, 0, sizeof(args));
64f9f406
MC
2605 args.s = s;
2606 args.type = OTHERFUNC;
2607 args.f.func_other = s->method->ssl_shutdown;
ec447924 2608
64f9f406
MC
2609 return ssl_start_async_job(s, &args, ssl_io_intern);
2610 } else {
2611 return s->method->ssl_shutdown(s);
2612 }
ec447924 2613 } else {
6849b73c 2614 ERR_raise(ERR_LIB_SSL, SSL_R_SHUTDOWN_WHILE_IN_INIT);
64f9f406 2615 return -1;
ec447924 2616 }
0f113f3e 2617}
d02b48c6 2618
4fbfe86a 2619int SSL_key_update(SSL *s, int updatetype)
44c04a2e 2620{
38b051a1
TM
2621 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2622
2623 if (sc == NULL)
2624 return 0;
2625
2626 if (!SSL_CONNECTION_IS_TLS13(sc)) {
6849b73c 2627 ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
44c04a2e
MC
2628 return 0;
2629 }
2630
2631 if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
2632 && updatetype != SSL_KEY_UPDATE_REQUESTED) {
6849b73c 2633 ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_KEY_UPDATE_TYPE);
44c04a2e
MC
2634 return 0;
2635 }
2636
2637 if (!SSL_is_init_finished(s)) {
6849b73c 2638 ERR_raise(ERR_LIB_SSL, SSL_R_STILL_IN_INIT);
44c04a2e
MC
2639 return 0;
2640 }
2641
38b051a1 2642 if (RECORD_LAYER_write_pending(&sc->rlayer)) {
3bec4851
MC
2643 ERR_raise(ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY);
2644 return 0;
2645 }
2646
38b051a1
TM
2647 ossl_statem_set_in_init(sc, 1);
2648 sc->key_update = updatetype;
44c04a2e
MC
2649 return 1;
2650}
2651
3499327b 2652int SSL_get_key_update_type(const SSL *s)
53d1d07d 2653{
38b051a1
TM
2654 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
2655
2656 if (sc == NULL)
2657 return 0;
2658
2659 return sc->key_update;
53d1d07d
MC
2660}
2661
55373bfd
RS
2662/*
2663 * Can we accept a renegotiation request? If yes, set the flag and
2664 * return 1 if yes. If not, raise error and return 0.
2665 */
38b051a1 2666static int can_renegotiate(const SSL_CONNECTION *sc)
0f113f3e 2667{
38b051a1 2668 if (SSL_CONNECTION_IS_TLS13(sc)) {
6849b73c 2669 ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
2c0980d2 2670 return 0;
44c04a2e 2671 }
cda6b998 2672
38b051a1 2673 if ((sc->options & SSL_OP_NO_RENEGOTIATION) != 0) {
6849b73c 2674 ERR_raise(ERR_LIB_SSL, SSL_R_NO_RENEGOTIATION);
db0f35dd
TS
2675 return 0;
2676 }
44959ee4 2677
55373bfd
RS
2678 return 1;
2679}
2680
2681int SSL_renegotiate(SSL *s)
2682{
38b051a1
TM
2683 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2684
2685 if (sc == NULL)
55373bfd
RS
2686 return 0;
2687
38b051a1
TM
2688 if (!can_renegotiate(sc))
2689 return 0;
2690
2691 sc->renegotiate = 1;
2692 sc->new_session = 1;
26a7d938 2693 return s->method->ssl_renegotiate(s);
0f113f3e 2694}
d02b48c6 2695
44959ee4 2696int SSL_renegotiate_abbreviated(SSL *s)
0f113f3e 2697{
38b051a1
TM
2698 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2699
2700 if (sc == NULL)
2701 return 0;
2702
2703 if (!can_renegotiate(sc))
2c0980d2 2704 return 0;
c519e89f 2705
38b051a1
TM
2706 sc->renegotiate = 1;
2707 sc->new_session = 0;
26a7d938 2708 return s->method->ssl_renegotiate(s);
0f113f3e 2709}
44959ee4 2710
3499327b 2711int SSL_renegotiate_pending(const SSL *s)
0f113f3e 2712{
38b051a1
TM
2713 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2714
2715 if (sc == NULL)
2716 return 0;
2717
0f113f3e
MC
2718 /*
2719 * becomes true when negotiation is requested; false again once a
2720 * handshake has finished
2721 */
38b051a1 2722 return (sc->renegotiate != 0);
0f113f3e
MC
2723}
2724
3bfacb5f
BK
2725int SSL_new_session_ticket(SSL *s)
2726{
38b051a1
TM
2727 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2728
2729 if (sc == NULL)
2730 return 0;
2731
7c73fefe 2732 /* If we are in init because we're sending tickets, okay to send more. */
38b051a1
TM
2733 if ((SSL_in_init(s) && sc->ext.extra_tickets_expected == 0)
2734 || SSL_IS_FIRST_HANDSHAKE(sc) || !sc->server
2735 || !SSL_CONNECTION_IS_TLS13(sc))
35774d55 2736 return 0;
38b051a1
TM
2737 sc->ext.extra_tickets_expected++;
2738 if (!RECORD_LAYER_write_pending(&sc->rlayer) && !SSL_in_init(s))
2739 ossl_statem_set_in_init(sc, 1);
35774d55 2740 return 1;
3bfacb5f
BK
2741}
2742
0f113f3e
MC
2743long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
2744{
2745 long l;
38b051a1
TM
2746 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2747
2748 /* TODO(QUIC): Special handling for some ctrls will be needed */
2749 if (sc == NULL)
2750 return 0;
0f113f3e
MC
2751
2752 switch (cmd) {
2753 case SSL_CTRL_GET_READ_AHEAD:
38b051a1 2754 return RECORD_LAYER_get_read_ahead(&sc->rlayer);
0f113f3e 2755 case SSL_CTRL_SET_READ_AHEAD:
38b051a1
TM
2756 l = RECORD_LAYER_get_read_ahead(&sc->rlayer);
2757 RECORD_LAYER_set_read_ahead(&sc->rlayer, larg);
26a7d938 2758 return l;
0f113f3e
MC
2759
2760 case SSL_CTRL_SET_MSG_CALLBACK_ARG:
38b051a1 2761 sc->msg_callback_arg = parg;
0f113f3e
MC
2762 return 1;
2763
0f113f3e 2764 case SSL_CTRL_MODE:
4566dae7
MC
2765 {
2766 OSSL_PARAM options[2], *opts = options;
2767
2768 sc->mode |= larg;
2769
2770 *opts++ = OSSL_PARAM_construct_uint32(OSSL_LIBSSL_RECORD_LAYER_PARAM_MODE,
2771 &sc->mode);
2772 *opts = OSSL_PARAM_construct_end();
2773
2774 /* Ignore return value */
2775 sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
2776
2777 return sc->mode;
2778 }
0f113f3e 2779 case SSL_CTRL_CLEAR_MODE:
38b051a1 2780 return (sc->mode &= ~larg);
0f113f3e 2781 case SSL_CTRL_GET_MAX_CERT_LIST:
38b051a1 2782 return (long)sc->max_cert_list;
0f113f3e 2783 case SSL_CTRL_SET_MAX_CERT_LIST:
348240c6
MC
2784 if (larg < 0)
2785 return 0;
38b051a1
TM
2786 l = (long)sc->max_cert_list;
2787 sc->max_cert_list = (size_t)larg;
348240c6 2788 return l;
0f113f3e
MC
2789 case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
2790 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
2791 return 0;
50ec7505 2792#ifndef OPENSSL_NO_KTLS
38b051a1 2793 if (sc->wbio != NULL && BIO_get_ktls_send(sc->wbio))
50ec7505
BP
2794 return 0;
2795#endif /* OPENSSL_NO_KTLS */
38b051a1
TM
2796 sc->max_send_fragment = larg;
2797 if (sc->max_send_fragment < sc->split_send_fragment)
2798 sc->split_send_fragment = sc->max_send_fragment;
435d88d7 2799 sc->rlayer.wrlmethod->set_max_frag_len(sc->rlayer.wrl, larg);
d102d9df
MC
2800 return 1;
2801 case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
38b051a1 2802 if ((size_t)larg > sc->max_send_fragment || larg == 0)
d102d9df 2803 return 0;
38b051a1 2804 sc->split_send_fragment = larg;
0f113f3e 2805 return 1;
d102d9df
MC
2806 case SSL_CTRL_SET_MAX_PIPELINES:
2807 if (larg < 1 || larg > SSL_MAX_PIPELINES)
2808 return 0;
38b051a1 2809 sc->max_pipelines = larg;
cffafb5f
MC
2810 if (sc->rlayer.rrlmethod->set_max_pipelines != NULL)
2811 sc->rlayer.rrlmethod->set_max_pipelines(sc->rlayer.rrl, (size_t)larg);
07077415 2812 return 1;
0f113f3e 2813 case SSL_CTRL_GET_RI_SUPPORT:
38b051a1 2814 return sc->s3.send_connection_binding;
dfb39f73 2815 case SSL_CTRL_SET_RETRY_VERIFY:
38b051a1 2816 sc->rwstate = SSL_RETRY_VERIFY;
dfb39f73 2817 return 1;
0f113f3e 2818 case SSL_CTRL_CERT_FLAGS:
38b051a1 2819 return (sc->cert->cert_flags |= larg);
0f113f3e 2820 case SSL_CTRL_CLEAR_CERT_FLAGS:
38b051a1 2821 return (sc->cert->cert_flags &= ~larg);
0f113f3e
MC
2822
2823 case SSL_CTRL_GET_RAW_CIPHERLIST:
2824 if (parg) {
38b051a1 2825 if (sc->s3.tmp.ciphers_raw == NULL)
0f113f3e 2826 return 0;
38b051a1
TM
2827 *(unsigned char **)parg = sc->s3.tmp.ciphers_raw;
2828 return (int)sc->s3.tmp.ciphers_rawlen;
e9fa092e
EK
2829 } else {
2830 return TLS_CIPHER_LEN;
2831 }
c5364614 2832 case SSL_CTRL_GET_EXTMS_SUPPORT:
38b051a1 2833 if (!sc->session || SSL_in_init(s) || ossl_statem_get_in_handshake(sc))
a230b26e 2834 return -1;
38b051a1 2835 if (sc->session->flags & SSL_SESS_FLAG_EXTMS)
c5364614
DSH
2836 return 1;
2837 else
2838 return 0;
7946ab33 2839 case SSL_CTRL_SET_MIN_PROTO_VERSION:
38b051a1 2840 return ssl_check_allowed_versions(larg, sc->max_proto_version)
c8feba72 2841 && ssl_set_version_bound(s->ctx->method->version, (int)larg,
38b051a1 2842 &sc->min_proto_version);
3edabd3c 2843 case SSL_CTRL_GET_MIN_PROTO_VERSION:
38b051a1 2844 return sc->min_proto_version;
7946ab33 2845 case SSL_CTRL_SET_MAX_PROTO_VERSION:
38b051a1 2846 return ssl_check_allowed_versions(sc->min_proto_version, larg)
c8feba72 2847 && ssl_set_version_bound(s->ctx->method->version, (int)larg,
38b051a1 2848 &sc->max_proto_version);
3edabd3c 2849 case SSL_CTRL_GET_MAX_PROTO_VERSION:
38b051a1 2850 return sc->max_proto_version;
0f113f3e 2851 default:
26a7d938 2852 return s->method->ssl_ctrl(s, cmd, larg, parg);
0f113f3e
MC
2853 }
2854}
2855
2856long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
2857{
38b051a1
TM
2858 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2859
2860 if (sc == NULL)
2861 return 0;
2862
0f113f3e
MC
2863 switch (cmd) {
2864 case SSL_CTRL_SET_MSG_CALLBACK:
38b051a1
TM
2865 sc->msg_callback = (void (*)
2866 (int write_p, int version, int content_type,
2867 const void *buf, size_t len, SSL *ssl,
2868 void *arg))(fp);
0f113f3e
MC
2869 return 1;
2870
2871 default:
26a7d938 2872 return s->method->ssl_callback_ctrl(s, cmd, fp);
0f113f3e
MC
2873 }
2874}
d3442bc7 2875
3c1d6bbc 2876LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
0f113f3e
MC
2877{
2878 return ctx->sessions;
2879}
2880
acce0557
P
2881static int ssl_tsan_load(SSL_CTX *ctx, TSAN_QUALIFIER int *stat)
2882{
2883 int res = 0;
2884
2885 if (ssl_tsan_lock(ctx)) {
2886 res = tsan_load(stat);
2887 ssl_tsan_unlock(ctx);
2888 }
2889 return res;
2890}
2891
0f113f3e
MC
2892long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2893{
2894 long l;
2895 /* For some cases with ctx == NULL perform syntax checks */
2896 if (ctx == NULL) {
2897 switch (cmd) {
de4d764e 2898 case SSL_CTRL_SET_GROUPS_LIST:
260009d8 2899 return tls1_set_groups_list(ctx, NULL, NULL, parg);
0f113f3e
MC
2900 case SSL_CTRL_SET_SIGALGS_LIST:
2901 case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
2902 return tls1_set_sigalgs_list(NULL, parg, 0);
2903 default:
2904 return 0;
2905 }
2906 }
2907
2908 switch (cmd) {
2909 case SSL_CTRL_GET_READ_AHEAD:
26a7d938 2910 return ctx->read_ahead;
0f113f3e
MC
2911 case SSL_CTRL_SET_READ_AHEAD:
2912 l = ctx->read_ahead;
2913 ctx->read_ahead = larg;
26a7d938 2914 return l;
0f113f3e
MC
2915
2916 case SSL_CTRL_SET_MSG_CALLBACK_ARG:
2917 ctx->msg_callback_arg = parg;
2918 return 1;
2919
2920 case SSL_CTRL_GET_MAX_CERT_LIST:
26a7d938 2921 return (long)ctx->max_cert_list;
0f113f3e 2922 case SSL_CTRL_SET_MAX_CERT_LIST:
348240c6
MC
2923 if (larg < 0)
2924 return 0;
2925 l = (long)ctx->max_cert_list;
2926 ctx->max_cert_list = (size_t)larg;
2927 return l;
0f113f3e
MC
2928
2929 case SSL_CTRL_SET_SESS_CACHE_SIZE:
348240c6
MC
2930 if (larg < 0)
2931 return 0;
2932 l = (long)ctx->session_cache_size;
2933 ctx->session_cache_size = (size_t)larg;
2934 return l;
0f113f3e 2935 case SSL_CTRL_GET_SESS_CACHE_SIZE:
26a7d938 2936 return (long)ctx->session_cache_size;
0f113f3e
MC
2937 case SSL_CTRL_SET_SESS_CACHE_MODE:
2938 l = ctx->session_cache_mode;
2939 ctx->session_cache_mode = larg;
26a7d938 2940 return l;
0f113f3e 2941 case SSL_CTRL_GET_SESS_CACHE_MODE:
26a7d938 2942 return ctx->session_cache_mode;
0f113f3e
MC
2943
2944 case SSL_CTRL_SESS_NUMBER:
26a7d938 2945 return lh_SSL_SESSION_num_items(ctx->sessions);
0f113f3e 2946 case SSL_CTRL_SESS_CONNECT:
acce0557 2947 return ssl_tsan_load(ctx, &ctx->stats.sess_connect);
0f113f3e 2948 case SSL_CTRL_SESS_CONNECT_GOOD:
acce0557 2949 return ssl_tsan_load(ctx, &ctx->stats.sess_connect_good);
0f113f3e 2950 case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
acce0557 2951 return ssl_tsan_load(ctx, &ctx->stats.sess_connect_renegotiate);
0f113f3e 2952 case SSL_CTRL_SESS_ACCEPT:
acce0557 2953 return ssl_tsan_load(ctx, &ctx->stats.sess_accept);
0f113f3e 2954 case SSL_CTRL_SESS_ACCEPT_GOOD:
acce0557 2955 return ssl_tsan_load(ctx, &ctx->stats.sess_accept_good);
0f113f3e 2956 case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
acce0557 2957 return ssl_tsan_load(ctx, &ctx->stats.sess_accept_renegotiate);
0f113f3e 2958 case SSL_CTRL_SESS_HIT:
acce0557 2959 return ssl_tsan_load(ctx, &ctx->stats.sess_hit);
0f113f3e 2960 case SSL_CTRL_SESS_CB_HIT:
acce0557 2961 return ssl_tsan_load(ctx, &ctx->stats.sess_cb_hit);
0f113f3e 2962 case SSL_CTRL_SESS_MISSES:
acce0557 2963 return ssl_tsan_load(ctx, &ctx->stats.sess_miss);
0f113f3e 2964 case SSL_CTRL_SESS_TIMEOUTS:
acce0557 2965 return ssl_tsan_load(ctx, &ctx->stats.sess_timeout);
0f113f3e 2966 case SSL_CTRL_SESS_CACHE_FULL:
acce0557 2967 return ssl_tsan_load(ctx, &ctx->stats.sess_cache_full);
0f113f3e
MC
2968 case SSL_CTRL_MODE:
2969 return (ctx->mode |= larg);
2970 case SSL_CTRL_CLEAR_MODE:
2971 return (ctx->mode &= ~larg);
2972 case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
2973 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
2974 return 0;
2975 ctx->max_send_fragment = larg;
d102d9df 2976 if (ctx->max_send_fragment < ctx->split_send_fragment)
bfb155c1 2977 ctx->split_send_fragment = ctx->max_send_fragment;
0f113f3e 2978 return 1;
d102d9df 2979 case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
7ee8627f 2980 if ((size_t)larg > ctx->max_send_fragment || larg == 0)
d102d9df
MC
2981 return 0;
2982 ctx->split_send_fragment = larg;
2983 return 1;
2984 case SSL_CTRL_SET_MAX_PIPELINES:
2985 if (larg < 1 || larg > SSL_MAX_PIPELINES)
2986 return 0;
2987 ctx->max_pipelines = larg;
07077415 2988 return 1;
0f113f3e
MC
2989 case SSL_CTRL_CERT_FLAGS:
2990 return (ctx->cert->cert_flags |= larg);
2991 case SSL_CTRL_CLEAR_CERT_FLAGS:
2992 return (ctx->cert->cert_flags &= ~larg);
7946ab33 2993 case SSL_CTRL_SET_MIN_PROTO_VERSION:
c8feba72
BK
2994 return ssl_check_allowed_versions(larg, ctx->max_proto_version)
2995 && ssl_set_version_bound(ctx->method->version, (int)larg,
2996 &ctx->min_proto_version);
3edabd3c
CH
2997 case SSL_CTRL_GET_MIN_PROTO_VERSION:
2998 return ctx->min_proto_version;
7946ab33 2999 case SSL_CTRL_SET_MAX_PROTO_VERSION:
c8feba72
BK
3000 return ssl_check_allowed_versions(ctx->min_proto_version, larg)
3001 && ssl_set_version_bound(ctx->method->version, (int)larg,
3002 &ctx->max_proto_version);
3edabd3c
CH
3003 case SSL_CTRL_GET_MAX_PROTO_VERSION:
3004 return ctx->max_proto_version;
0f113f3e 3005 default:
26a7d938 3006 return ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg);
0f113f3e
MC
3007 }
3008}
3009
3010long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
3011{
3012 switch (cmd) {
3013 case SSL_CTRL_SET_MSG_CALLBACK:
3014 ctx->msg_callback = (void (*)
3015 (int write_p, int version, int content_type,
3016 const void *buf, size_t len, SSL *ssl,
3017 void *arg))(fp);
3018 return 1;
3019
3020 default:
26a7d938 3021 return ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp);
0f113f3e
MC
3022 }
3023}
d3442bc7 3024
ccd86b68 3025int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
0f113f3e 3026{
90d9e49a
DSH
3027 if (a->id > b->id)
3028 return 1;
3029 if (a->id < b->id)
3030 return -1;
3031 return 0;
0f113f3e
MC
3032}
3033
3034int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
3035 const SSL_CIPHER *const *bp)
3036{
90d9e49a
DSH
3037 if ((*ap)->id > (*bp)->id)
3038 return 1;
3039 if ((*ap)->id < (*bp)->id)
3040 return -1;
3041 return 0;
0f113f3e 3042}
d02b48c6 3043
38b051a1
TM
3044/*
3045 * return a STACK of the ciphers available for the SSL and in order of
3046 * preference
3047 */
0821bcd4 3048STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
0f113f3e 3049{
38b051a1
TM
3050 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3051
3052 if (sc != NULL) {
3053 if (sc->cipher_list != NULL) {
3054 return sc->cipher_list;
0f113f3e 3055 } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
26a7d938 3056 return s->ctx->cipher_list;
0f113f3e
MC
3057 }
3058 }
26a7d938 3059 return NULL;
0f113f3e
MC
3060}
3061
831eef2c
NM
3062STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s)
3063{
38b051a1
TM
3064 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3065
3066 if (sc == NULL || !sc->server)
831eef2c 3067 return NULL;
38b051a1 3068 return sc->peer_ciphers;
831eef2c
NM
3069}
3070
8b8e5bed 3071STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s)
0f113f3e
MC
3072{
3073 STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
3074 int i;
38b051a1
TM
3075 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
3076
3077 if (sc == NULL)
3078 return NULL;
1d0c08b4 3079
0f113f3e
MC
3080 ciphers = SSL_get_ciphers(s);
3081 if (!ciphers)
3082 return NULL;
38b051a1 3083 if (!ssl_set_client_disabled(sc))
1d0c08b4 3084 return NULL;
0f113f3e
MC
3085 for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
3086 const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
38b051a1 3087 if (!ssl_cipher_disabled(sc, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) {
0f113f3e
MC
3088 if (!sk)
3089 sk = sk_SSL_CIPHER_new_null();
3090 if (!sk)
3091 return NULL;
3092 if (!sk_SSL_CIPHER_push(sk, c)) {
3093 sk_SSL_CIPHER_free(sk);
3094 return NULL;
3095 }
3096 }
3097 }
3098 return sk;
3099}
8b8e5bed 3100
4f43d0e7 3101/** return a STACK of the ciphers available for the SSL and in order of
d02b48c6 3102 * algorithm id */
38b051a1 3103STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL_CONNECTION *s)
0f113f3e
MC
3104{
3105 if (s != NULL) {
38b051a1 3106 if (s->cipher_list_by_id != NULL)
26a7d938 3107 return s->cipher_list_by_id;
38b051a1
TM
3108 else if (s->ssl.ctx != NULL
3109 && s->ssl.ctx->cipher_list_by_id != NULL)
3110 return s->ssl.ctx->cipher_list_by_id;
0f113f3e 3111 }
26a7d938 3112 return NULL;
0f113f3e 3113}
d02b48c6 3114
4f43d0e7 3115/** The old interface to get the same thing as SSL_get_ciphers() */
0f113f3e
MC
3116const char *SSL_get_cipher_list(const SSL *s, int n)
3117{
4a640fb6 3118 const SSL_CIPHER *c;
0f113f3e
MC
3119 STACK_OF(SSL_CIPHER) *sk;
3120
3121 if (s == NULL)
26a7d938 3122 return NULL;
0f113f3e
MC
3123 sk = SSL_get_ciphers(s);
3124 if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
26a7d938 3125 return NULL;
0f113f3e
MC
3126 c = sk_SSL_CIPHER_value(sk, n);
3127 if (c == NULL)
26a7d938
K
3128 return NULL;
3129 return c->name;
0f113f3e 3130}
d02b48c6 3131
9d5ac953
KY
3132/** return a STACK of the ciphers available for the SSL_CTX and in order of
3133 * preference */
3134STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
3135{
3136 if (ctx != NULL)
3137 return ctx->cipher_list;
3138 return NULL;
3139}
3140
3c83c5ba
SR
3141/*
3142 * Distinguish between ciphers controlled by set_ciphersuite() and
3143 * set_cipher_list() when counting.
3144 */
3145static int cipher_list_tls12_num(STACK_OF(SSL_CIPHER) *sk)
3146{
3147 int i, num = 0;
3148 const SSL_CIPHER *c;
3149
3150 if (sk == NULL)
3151 return 0;
3152 for (i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
3153 c = sk_SSL_CIPHER_value(sk, i);
3154 if (c->min_tls >= TLS1_3_VERSION)
3155 continue;
3156 num++;
3157 }
3158 return num;
3159}
3160
25f923dd 3161/** specify the ciphers to be used by default by the SSL_CTX */
018e57c7 3162int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
0f113f3e
MC
3163{
3164 STACK_OF(SSL_CIPHER) *sk;
3165
a68eee67 3166 sk = ssl_create_cipher_list(ctx, ctx->tls13_ciphersuites,
f865b081
MC
3167 &ctx->cipher_list, &ctx->cipher_list_by_id, str,
3168 ctx->cert);
0f113f3e
MC
3169 /*
3170 * ssl_create_cipher_list may return an empty stack if it was unable to
3171 * find a cipher matching the given rule string (for example if the rule
3172 * string specifies a cipher which has been disabled). This is not an
3173 * error as far as ssl_create_cipher_list is concerned, and hence
3174 * ctx->cipher_list and ctx->cipher_list_by_id has been updated.
3175 */
3176 if (sk == NULL)
3177 return 0;
3c83c5ba 3178 else if (cipher_list_tls12_num(sk) == 0) {
6849b73c 3179 ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH);
0f113f3e
MC
3180 return 0;
3181 }
3182 return 1;
3183}
d02b48c6 3184
4f43d0e7 3185/** specify the ciphers to be used by the SSL */
0f113f3e
MC
3186int SSL_set_cipher_list(SSL *s, const char *str)
3187{
3188 STACK_OF(SSL_CIPHER) *sk;
38b051a1 3189 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
0f113f3e 3190
38b051a1
TM
3191 if (sc == NULL)
3192 return 0;
3193
3194 sk = ssl_create_cipher_list(s->ctx, sc->tls13_ciphersuites,
3195 &sc->cipher_list, &sc->cipher_list_by_id, str,
3196 sc->cert);
0f113f3e
MC
3197 /* see comment in SSL_CTX_set_cipher_list */
3198 if (sk == NULL)
3199 return 0;
3c83c5ba 3200 else if (cipher_list_tls12_num(sk) == 0) {
6849b73c 3201 ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH);
0f113f3e
MC
3202 return 0;
3203 }
3204 return 1;
3205}
d02b48c6 3206
a216df59 3207char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size)
0f113f3e
MC
3208{
3209 char *p;
a216df59 3210 STACK_OF(SSL_CIPHER) *clntsk, *srvrsk;
4a640fb6 3211 const SSL_CIPHER *c;
0f113f3e 3212 int i;
38b051a1
TM
3213 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3214
3215 if (sc == NULL)
3216 return NULL;
0f113f3e 3217
38b051a1
TM
3218 if (!sc->server
3219 || sc->peer_ciphers == NULL
a216df59 3220 || size < 2)
26a7d938 3221 return NULL;
0f113f3e
MC
3222
3223 p = buf;
38b051a1 3224 clntsk = sc->peer_ciphers;
a216df59
MC
3225 srvrsk = SSL_get_ciphers(s);
3226 if (clntsk == NULL || srvrsk == NULL)
3227 return NULL;
0f113f3e 3228
a216df59 3229 if (sk_SSL_CIPHER_num(clntsk) == 0 || sk_SSL_CIPHER_num(srvrsk) == 0)
0f113f3e
MC
3230 return NULL;
3231
a216df59 3232 for (i = 0; i < sk_SSL_CIPHER_num(clntsk); i++) {
0f113f3e
MC
3233 int n;
3234
a216df59
MC
3235 c = sk_SSL_CIPHER_value(clntsk, i);
3236 if (sk_SSL_CIPHER_find(srvrsk, c) < 0)
3237 continue;
3238
0f113f3e 3239 n = strlen(c->name);
a216df59 3240 if (n + 1 > size) {
0f113f3e
MC
3241 if (p != buf)
3242 --p;
3243 *p = '\0';
3244 return buf;
3245 }
4cacc9d5 3246 strcpy(p, c->name);
0f113f3e
MC
3247 p += n;
3248 *(p++) = ':';
a216df59 3249 size -= n + 1;
0f113f3e
MC
3250 }
3251 p[-1] = '\0';
26a7d938 3252 return buf;
0f113f3e
MC
3253}
3254
7955c1f1
MC
3255/**
3256 * Return the requested servername (SNI) value. Note that the behaviour varies
3257 * depending on:
3258 * - whether this is called by the client or the server,
3259 * - if we are before or during/after the handshake,
3260 * - if a resumption or normal handshake is being attempted/has occurred
3261 * - whether we have negotiated TLSv1.2 (or below) or TLSv1.3
38b051a1 3262 *
7955c1f1 3263 * Note that only the host_name type is defined (RFC 3546).
ed3883d2 3264 */
f1fd4544 3265const char *SSL_get_servername(const SSL *s, const int type)
0f113f3e 3266{
38b051a1
TM
3267 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3268 int server;
3269
3270 if (sc == NULL)
3271 return NULL;
3272
7955c1f1
MC
3273 /*
3274 * If we don't know if we are the client or the server yet then we assume
3275 * client.
3276 */
38b051a1
TM
3277 server = sc->handshake_func == NULL ? 0 : sc->server;
3278
0f113f3e
MC
3279 if (type != TLSEXT_NAMETYPE_host_name)
3280 return NULL;
a13c20f6 3281
7955c1f1
MC
3282 if (server) {
3283 /**
3284 * Server side
3285 * In TLSv1.3 on the server SNI is not associated with the session
3286 * but in TLSv1.2 or below it is.
3287 *
3288 * Before the handshake:
3289 * - return NULL
3290 *
3291 * During/after the handshake (TLSv1.2 or below resumption occurred):
3292 * - If a servername was accepted by the server in the original
3293 * handshake then it will return that servername, or NULL otherwise.
3294 *
3295 * During/after the handshake (TLSv1.2 or below resumption did not occur):
3296 * - The function will return the servername requested by the client in
3297 * this handshake or NULL if none was requested.
3298 */
38b051a1
TM
3299 if (sc->hit && !SSL_CONNECTION_IS_TLS13(sc))
3300 return sc->session->ext.hostname;
7955c1f1
MC
3301 } else {
3302 /**
3303 * Client side
3304 *
3305 * Before the handshake:
3306 * - If a servername has been set via a call to
3307 * SSL_set_tlsext_host_name() then it will return that servername
3308 * - If one has not been set, but a TLSv1.2 resumption is being
3309 * attempted and the session from the original handshake had a
3310 * servername accepted by the server then it will return that
3311 * servername
3312 * - Otherwise it returns NULL
3313 *
3314 * During/after the handshake (TLSv1.2 or below resumption occurred):
9f7505ab 3315 * - If the session from the original handshake had a servername accepted
7955c1f1
MC
3316 * by the server then it will return that servername.
3317 * - Otherwise it returns the servername set via
3318 * SSL_set_tlsext_host_name() (or NULL if it was not called).
3319 *
3320 * During/after the handshake (TLSv1.2 or below resumption did not occur):
3321 * - It will return the servername set via SSL_set_tlsext_host_name()
3322 * (or NULL if it was not called).
3323 */
3324 if (SSL_in_before(s)) {
38b051a1
TM
3325 if (sc->ext.hostname == NULL
3326 && sc->session != NULL
3327 && sc->session->ssl_version != TLS1_3_VERSION)
3328 return sc->session->ext.hostname;
7955c1f1 3329 } else {
38b051a1
TM
3330 if (!SSL_CONNECTION_IS_TLS13(sc) && sc->hit
3331 && sc->session->ext.hostname != NULL)
3332 return sc->session->ext.hostname;
7955c1f1
MC
3333 }
3334 }
3335
38b051a1 3336 return sc->ext.hostname;
0f113f3e 3337}
ed3883d2 3338
f1fd4544 3339int SSL_get_servername_type(const SSL *s)
0f113f3e 3340{
7955c1f1 3341 if (SSL_get_servername(s, TLSEXT_NAMETYPE_host_name) != NULL)
0f113f3e
MC
3342 return TLSEXT_NAMETYPE_host_name;
3343 return -1;
3344}
ee2ffc27 3345
0f113f3e
MC
3346/*
3347 * SSL_select_next_proto implements the standard protocol selection. It is
ee2ffc27 3348 * expected that this function is called from the callback set by
0f113f3e
MC
3349 * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
3350 * vector of 8-bit, length prefixed byte strings. The length byte itself is
3351 * not included in the length. A byte string of length 0 is invalid. No byte
3352 * string may be truncated. The current, but experimental algorithm for
3353 * selecting the protocol is: 1) If the server doesn't support NPN then this
3354 * is indicated to the callback. In this case, the client application has to
3355 * abort the connection or have a default application level protocol. 2) If
3356 * the server supports NPN, but advertises an empty list then the client
f430ba31 3357 * selects the first protocol in its list, but indicates via the API that this
0f113f3e
MC
3358 * fallback case was enacted. 3) Otherwise, the client finds the first
3359 * protocol in the server's list that it supports and selects this protocol.
3360 * This is because it's assumed that the server has better information about
3361 * which protocol a client should use. 4) If the client doesn't support any
3362 * of the server's advertised protocols, then this is treated the same as
3363 * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
3364 * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
ee2ffc27 3365 */
0f113f3e
MC
3366int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
3367 const unsigned char *server,
3368 unsigned int server_len,
a230b26e 3369 const unsigned char *client, unsigned int client_len)
0f113f3e
MC
3370{
3371 unsigned int i, j;
3372 const unsigned char *result;
3373 int status = OPENSSL_NPN_UNSUPPORTED;
3374
3375 /*
3376 * For each protocol in server preference order, see if we support it.
3377 */
3378 for (i = 0; i < server_len;) {
3379 for (j = 0; j < client_len;) {
3380 if (server[i] == client[j] &&
3381 memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
3382 /* We found a match */
3383 result = &server[i];
3384 status = OPENSSL_NPN_NEGOTIATED;
3385 goto found;
3386 }
3387 j += client[j];
3388 j++;
3389 }
3390 i += server[i];
3391 i++;
3392 }
3393
3394 /* There's no overlap between our protocols and the server's list. */
3395 result = client;
3396 status = OPENSSL_NPN_NO_OVERLAP;
3397
3398 found:
3399 *out = (unsigned char *)result + 1;
3400 *outlen = result[0];
3401 return status;
3402}
ee2ffc27 3403
e481f9b9 3404#ifndef OPENSSL_NO_NEXTPROTONEG
0f113f3e
MC
3405/*
3406 * SSL_get0_next_proto_negotiated sets *data and *len to point to the
3407 * client's requested protocol for this connection and returns 0. If the
3408 * client didn't request any protocol, then *data is set to NULL. Note that
3409 * the client can request any protocol it chooses. The value returned from
3410 * this function need not be a member of the list of supported protocols
ee2ffc27
BL
3411 * provided by the callback.
3412 */
0f113f3e
MC
3413void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
3414 unsigned *len)
3415{
38b051a1
TM
3416 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3417
3418 if (sc == NULL) {
3419 /* We have no other way to indicate error */
3420 *data = NULL;
3421 *len = 0;
3422 return;
3423 }
3424
3425 *data = sc->ext.npn;
12a765a5 3426 if (*data == NULL) {
0f113f3e
MC
3427 *len = 0;
3428 } else {
38b051a1 3429 *len = (unsigned int)sc->ext.npn_len;
0f113f3e
MC
3430 }
3431}
3432
3433/*
aff8c126 3434 * SSL_CTX_set_npn_advertised_cb sets a callback that is called when
0f113f3e
MC
3435 * a TLS server needs a list of supported protocols for Next Protocol
3436 * Negotiation. The returned list must be in wire format. The list is
3437 * returned by setting |out| to point to it and |outlen| to its length. This
3438 * memory will not be modified, but one should assume that the SSL* keeps a
3439 * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
3440 * wishes to advertise. Otherwise, no such extension will be included in the
3441 * ServerHello.
3442 */
aff8c126 3443void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx,
8cbfcc70 3444 SSL_CTX_npn_advertised_cb_func cb,
aff8c126 3445 void *arg)
0f113f3e 3446{
aff8c126
RS
3447 ctx->ext.npn_advertised_cb = cb;
3448 ctx->ext.npn_advertised_cb_arg = arg;
0f113f3e
MC
3449}
3450
3451/*
3452 * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
ee2ffc27
BL
3453 * client needs to select a protocol from the server's provided list. |out|
3454 * must be set to point to the selected protocol (which may be within |in|).
0f113f3e
MC
3455 * The length of the protocol name must be written into |outlen|. The
3456 * server's advertised protocols are provided in |in| and |inlen|. The
3457 * callback can assume that |in| is syntactically valid. The client must
3458 * select a protocol. It is fatal to the connection if this callback returns
3459 * a value other than SSL_TLSEXT_ERR_OK.
ee2ffc27 3460 */
aff8c126 3461void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx,
8cbfcc70 3462 SSL_CTX_npn_select_cb_func cb,
aff8c126 3463 void *arg)
0f113f3e 3464{
aff8c126
RS
3465 ctx->ext.npn_select_cb = cb;
3466 ctx->ext.npn_select_cb_arg = arg;
0f113f3e 3467}
e481f9b9 3468#endif
a398f821 3469
feba11cf
TS
3470static int alpn_value_ok(const unsigned char *protos, unsigned int protos_len)
3471{
3472 unsigned int idx;
3473
3474 if (protos_len < 2 || protos == NULL)
3475 return 0;
3476
3477 for (idx = 0; idx < protos_len; idx += protos[idx] + 1) {
3478 if (protos[idx] == 0)
3479 return 0;
3480 }
3481 return idx == protos_len;
3482}
0f113f3e
MC
3483/*
3484 * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
6f017a8f 3485 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
0f113f3e
MC
3486 * length-prefixed strings). Returns 0 on success.
3487 */
3488int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
817cd0d5 3489 unsigned int protos_len)
0f113f3e 3490{
feba11cf
TS
3491 unsigned char *alpn;
3492
3493 if (protos_len == 0 || protos == NULL) {
3494 OPENSSL_free(ctx->ext.alpn);
3495 ctx->ext.alpn = NULL;
39a14059 3496 ctx->ext.alpn_len = 0;
feba11cf
TS
3497 return 0;
3498 }
3499 /* Not valid per RFC */
3500 if (!alpn_value_ok(protos, protos_len))
3501 return 1;
3502
3503 alpn = OPENSSL_memdup(protos, protos_len);
e077455e 3504 if (alpn == NULL)
0f113f3e 3505 return 1;
feba11cf
TS
3506 OPENSSL_free(ctx->ext.alpn);
3507 ctx->ext.alpn = alpn;
aff8c126 3508 ctx->ext.alpn_len = protos_len;
0f113f3e
MC
3509
3510 return 0;
3511}
3512
3513/*
3514 * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
6f017a8f 3515 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
0f113f3e
MC
3516 * length-prefixed strings). Returns 0 on success.
3517 */
3518int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
817cd0d5 3519 unsigned int protos_len)
0f113f3e 3520{
feba11cf 3521 unsigned char *alpn;
38b051a1
TM
3522 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
3523
3524 if (sc == NULL)
3525 return 1;
feba11cf
TS
3526
3527 if (protos_len == 0 || protos == NULL) {
38b051a1
TM
3528 OPENSSL_free(sc->ext.alpn);
3529 sc->ext.alpn = NULL;
3530 sc->ext.alpn_len = 0;
feba11cf
TS
3531 return 0;
3532 }
3533 /* Not valid per RFC */
3534 if (!alpn_value_ok(protos, protos_len))
3535 return 1;
3536
3537 alpn = OPENSSL_memdup(protos, protos_len);
e077455e 3538 if (alpn == NULL)
0f113f3e 3539 return 1;
38b051a1
TM
3540 OPENSSL_free(sc->ext.alpn);
3541 sc->ext.alpn = alpn;
3542 sc->ext.alpn_len = protos_len;
0f113f3e
MC
3543
3544 return 0;
3545}
3546
3547/*
3548 * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
3549 * called during ClientHello processing in order to select an ALPN protocol
3550 * from the client's list of offered protocols.
3551 */
3552void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
8cbfcc70
RS
3553 SSL_CTX_alpn_select_cb_func cb,
3554 void *arg)
0f113f3e 3555{
aff8c126
RS
3556 ctx->ext.alpn_select_cb = cb;
3557 ctx->ext.alpn_select_cb_arg = arg;
0f113f3e
MC
3558}
3559
3560/*
69687aa8
F
3561 * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
3562 * On return it sets |*data| to point to |*len| bytes of protocol name
0f113f3e
MC
3563 * (not including the leading length-prefix byte). If the server didn't
3564 * respond with a negotiated protocol then |*len| will be zero.
3565 */
6f017a8f 3566void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
817cd0d5 3567 unsigned int *len)
0f113f3e 3568{
38b051a1
TM
3569 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
3570
3571 if (sc == NULL) {
3572 /* We have no other way to indicate error */
3573 *data = NULL;
3574 *len = 0;
3575 return;
3576 }
3577
3578 *data = sc->s3.alpn_selected;
0f113f3e
MC
3579 if (*data == NULL)
3580 *len = 0;
3581 else
38b051a1 3582 *len = (unsigned int)sc->s3.alpn_selected_len;
0f113f3e
MC
3583}
3584
74b4b494 3585int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
0f113f3e 3586 const char *label, size_t llen,
23cec1f4 3587 const unsigned char *context, size_t contextlen,
0f113f3e
MC
3588 int use_context)
3589{
38b051a1
TM
3590 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
3591
3592 if (sc == NULL)
3593 return -1;
3594
3595 if (sc->session == NULL
3596 || (sc->version < TLS1_VERSION && sc->version != DTLS1_BAD_VER))
0f113f3e 3597 return -1;
e0af0405 3598
38b051a1 3599 return s->method->ssl3_enc->export_keying_material(sc, out, olen, label,
23cec1f4
MC
3600 llen, context,
3601 contextlen, use_context);
0f113f3e 3602}
e0af0405 3603
b38ede80
TT
3604int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen,
3605 const char *label, size_t llen,
3606 const unsigned char *context,
3607 size_t contextlen)
3608{
38b051a1
TM
3609 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
3610
3611 if (sc == NULL)
3612 return -1;
3613
3614 if (sc->version != TLS1_3_VERSION)
b38ede80
TT
3615 return 0;
3616
38b051a1 3617 return tls13_export_keying_material_early(sc, out, olen, label, llen,
b38ede80
TT
3618 context, contextlen);
3619}
3620
3c1d6bbc 3621static unsigned long ssl_session_hash(const SSL_SESSION *a)
0f113f3e 3622{
bd5d27c1 3623 const unsigned char *session_id = a->session_id;
0f113f3e 3624 unsigned long l;
bd5d27c1
DB
3625 unsigned char tmp_storage[4];
3626
3627 if (a->session_id_length < sizeof(tmp_storage)) {
3628 memset(tmp_storage, 0, sizeof(tmp_storage));
3629 memcpy(tmp_storage, a->session_id, a->session_id_length);
3630 session_id = tmp_storage;
3631 }
0f113f3e
MC
3632
3633 l = (unsigned long)
bd5d27c1
DB
3634 ((unsigned long)session_id[0]) |
3635 ((unsigned long)session_id[1] << 8L) |
3636 ((unsigned long)session_id[2] << 16L) |
3637 ((unsigned long)session_id[3] << 24L);
26a7d938 3638 return l;
0f113f3e
MC
3639}
3640
3641/*
3642 * NB: If this function (or indeed the hash function which uses a sort of
dc644fe2 3643 * coarser function than this one) is changed, ensure
0f113f3e
MC
3644 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
3645 * being able to construct an SSL_SESSION that will collide with any existing
3646 * session with a matching session ID.
3647 */
3648static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
3649{
3650 if (a->ssl_version != b->ssl_version)
208fb891 3651 return 1;
0f113f3e 3652 if (a->session_id_length != b->session_id_length)
208fb891 3653 return 1;
26a7d938 3654 return memcmp(a->session_id, b->session_id, a->session_id_length);
0f113f3e
MC
3655}
3656
3657/*
3658 * These wrapper functions should remain rather than redeclaring
d0fa136c 3659 * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
0f113f3e
MC
3660 * variable. The reason is that the functions aren't static, they're exposed
3661 * via ssl.h.
3662 */
97b17195 3663
b4250010 3664SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq,
d8652be0 3665 const SSL_METHOD *meth)
0f113f3e
MC
3666{
3667 SSL_CTX *ret = NULL;
b67cb09f
TS
3668#ifndef OPENSSL_NO_COMP_ALG
3669 int i;
3670#endif
0f113f3e
MC
3671
3672 if (meth == NULL) {
6849b73c 3673 ERR_raise(ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED);
26a7d938 3674 return NULL;
0f113f3e
MC
3675 }
3676
0fc32b07
MC
3677 if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
3678 return NULL;
7fa792d1 3679
0f113f3e 3680 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
6849b73c 3681 ERR_raise(ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
0f113f3e
MC
3682 goto err;
3683 }
b51bce94 3684 ret = OPENSSL_zalloc(sizeof(*ret));
0f113f3e
MC
3685 if (ret == NULL)
3686 goto err;
3687
045a8930
F
3688 /* Init the reference counting before any call to SSL_CTX_free */
3689 ret->references = 1;
3690 ret->lock = CRYPTO_THREAD_lock_new();
3691 if (ret->lock == NULL) {
e077455e
RL
3692 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
3693 goto err;
045a8930
F
3694 }
3695
acce0557
P
3696#ifdef TSAN_REQUIRES_LOCKING
3697 ret->tsan_lock = CRYPTO_THREAD_lock_new();
3698 if (ret->tsan_lock == NULL) {
e077455e 3699 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
acce0557
P
3700 goto err;
3701 }
3702#endif
3703
ba18627e
MC
3704 ret->libctx = libctx;
3705 if (propq != NULL) {
3706 ret->propq = OPENSSL_strdup(propq);
3707 if (ret->propq == NULL)
3708 goto err;
3709 }
3710
0f113f3e 3711 ret->method = meth;
7946ab33
KR
3712 ret->min_proto_version = 0;
3713 ret->max_proto_version = 0;
693cf80c 3714 ret->mode = SSL_MODE_AUTO_RETRY;
0f113f3e
MC
3715 ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
3716 ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
64b25758 3717 /* We take the system default. */
0f113f3e 3718 ret->session_timeout = meth->get_timeout();
0f113f3e 3719 ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
0f113f3e 3720 ret->verify_mode = SSL_VERIFY_NONE;
e077455e
RL
3721 if ((ret->cert = ssl_cert_new()) == NULL) {
3722 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
0f113f3e 3723 goto err;
e077455e 3724 }
0f113f3e 3725
62d0577e 3726 ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
e077455e
RL
3727 if (ret->sessions == NULL) {
3728 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
0f113f3e 3729 goto err;
e077455e 3730 }
0f113f3e 3731 ret->cert_store = X509_STORE_new();
e077455e
RL
3732 if (ret->cert_store == NULL) {
3733 ERR_raise(ERR_LIB_SSL, ERR_R_X509_LIB);
0f113f3e 3734 goto err;
e077455e 3735 }
ed29e82a 3736#ifndef OPENSSL_NO_CT
d8652be0 3737 ret->ctlog_store = CTLOG_STORE_new_ex(libctx, propq);
e077455e
RL
3738 if (ret->ctlog_store == NULL) {
3739 ERR_raise(ERR_LIB_SSL, ERR_R_CT_LIB);
ed29e82a 3740 goto err;
e077455e 3741 }
ed29e82a 3742#endif
f865b081 3743
c8f6c28a
MC
3744 /* initialize cipher/digest methods table */
3745 if (!ssl_load_ciphers(ret))
e077455e 3746 goto err;
263ff2c9
MC
3747 /* initialise sig algs */
3748 if (!ssl_setup_sig_algs(ret))
e077455e 3749 goto err;
c8f6c28a 3750
9d2d857f 3751 if (!ssl_load_groups(ret))
e077455e 3752 goto err;
9d2d857f 3753
e077455e
RL
3754 if (!SSL_CTX_set_ciphersuites(ret, OSSL_default_ciphersuites())) {
3755 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
f865b081 3756 goto err;
e077455e 3757 }
f865b081 3758
a68eee67 3759 if (!ssl_create_cipher_list(ret,
f865b081 3760 ret->tls13_ciphersuites,
a230b26e 3761 &ret->cipher_list, &ret->cipher_list_by_id,
5d120511 3762 OSSL_default_cipher_list(), ret->cert)
a230b26e 3763 || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
6849b73c 3764 ERR_raise(ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS);
e077455e 3765 goto err;
0f113f3e
MC
3766 }
3767
3768 ret->param = X509_VERIFY_PARAM_new();
e077455e
RL
3769 if (ret->param == NULL) {
3770 ERR_raise(ERR_LIB_SSL, ERR_R_X509_LIB);
0f113f3e 3771 goto err;
e077455e 3772 }
0f113f3e 3773
c8f6c28a
MC
3774 /*
3775 * If these aren't available from the provider we'll get NULL returns.
3776 * That's fine but will cause errors later if SSLv3 is negotiated
3777 */
3778 ret->md5 = ssl_evp_md_fetch(libctx, NID_md5, propq);
3779 ret->sha1 = ssl_evp_md_fetch(libctx, NID_sha1, propq);
0f113f3e 3780
e077455e
RL
3781 if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL) {
3782 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
0f113f3e 3783 goto err;
e077455e 3784 }
0f113f3e 3785
e077455e
RL
3786 if ((ret->client_ca_names = sk_X509_NAME_new_null()) == NULL) {
3787 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
98732979 3788 goto err;
e077455e 3789 }
98732979 3790
e077455e
RL
3791 if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data)) {
3792 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
25a807bc 3793 goto err;
e077455e 3794 }
0f113f3e 3795
4bfb96f2
TS
3796 if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL)
3797 goto err;
3798
0f113f3e
MC
3799 /* No compression for DTLS */
3800 if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
3801 ret->comp_methods = SSL_COMP_get_compression_methods();
3802
3803 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
d102d9df 3804 ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
566dda07 3805
4e2e1ec9 3806 /* Setup RFC5077 ticket keys */
8f21260b 3807 if ((RAND_bytes_ex(libctx, ret->ext.tick_key_name,
0f8815aa 3808 sizeof(ret->ext.tick_key_name), 0) <= 0)
8f21260b 3809 || (RAND_priv_bytes_ex(libctx, ret->ext.secure->tick_hmac_key,
0f8815aa 3810 sizeof(ret->ext.secure->tick_hmac_key), 0) <= 0)
8f21260b 3811 || (RAND_priv_bytes_ex(libctx, ret->ext.secure->tick_aes_key,
0f8815aa 3812 sizeof(ret->ext.secure->tick_aes_key), 0) <= 0))
0f113f3e 3813 ret->options |= SSL_OP_NO_TICKET;
6434abbf 3814
8f21260b 3815 if (RAND_priv_bytes_ex(libctx, ret->ext.cookie_hmac_key,
e077455e
RL
3816 sizeof(ret->ext.cookie_hmac_key), 0) <= 0) {
3817 ERR_raise(ERR_LIB_SSL, ERR_R_RAND_LIB);
43054d3d 3818 goto err;
e077455e 3819 }
43054d3d 3820
edc032b5 3821#ifndef OPENSSL_NO_SRP
e077455e
RL
3822 if (!ssl_ctx_srp_ctx_init_intern(ret)) {
3823 ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
69f68237 3824 goto err;
e077455e 3825 }
edc032b5 3826#endif
4db9677b 3827#ifndef OPENSSL_NO_ENGINE
0f113f3e
MC
3828# ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
3829# define eng_strx(x) #x
3830# define eng_str(x) eng_strx(x)
3831 /* Use specific client engine automatically... ignore errors */
3832 {
3833 ENGINE *eng;
3834 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
3835 if (!eng) {
3836 ERR_clear_error();
3837 ENGINE_load_builtin_engines();
3838 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
3839 }
3840 if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
3841 ERR_clear_error();
3842 }
3843# endif
b67cb09f
TS
3844#endif
3845
3846#ifndef OPENSSL_NO_COMP_ALG
3847 /*
3848 * Set the default order: brotli, zlib, zstd
3849 * Including only those enabled algorithms
3850 */
3851 memset(ret->cert_comp_prefs, 0, sizeof(ret->cert_comp_prefs));
3852 i = 0;
3853 if (ossl_comp_has_alg(TLSEXT_comp_cert_brotli))
3854 ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_brotli;
3855 if (ossl_comp_has_alg(TLSEXT_comp_cert_zlib))
3856 ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_zlib;
3857 if (ossl_comp_has_alg(TLSEXT_comp_cert_zstd))
3858 ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_zstd;
0f113f3e 3859#endif
dc5744cb
EK
3860 /*
3861 * Disable compression by default to prevent CRIME. Applications can
3862 * re-enable compression by configuring
3863 * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
a5816a5a
MC
3864 * or by using the SSL_CONF library. Similarly we also enable TLSv1.3
3865 * middlebox compatibility by default. This may be disabled by default in
3866 * a later OpenSSL version.
dc5744cb 3867 */
a5816a5a 3868 ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
0f113f3e 3869
aff8c126 3870 ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
ba261f71 3871
bfa9a9af 3872 /*
c39e4048
BK
3873 * We cannot usefully set a default max_early_data here (which gets
3874 * propagated in SSL_new(), for the following reason: setting the
3875 * SSL field causes tls_construct_stoc_early_data() to tell the
3876 * client that early data will be accepted when constructing a TLS 1.3
3877 * session ticket, and the client will accordingly send us early data
3878 * when using that ticket (if the client has early data to send).
3879 * However, in order for the early data to actually be consumed by
3880 * the application, the application must also have calls to
3881 * SSL_read_early_data(); otherwise we'll just skip past the early data
3882 * and ignore it. So, since the application must add calls to
3883 * SSL_read_early_data(), we also require them to add
3884 * calls to SSL_CTX_set_max_early_data() in order to use early data,
3885 * eliminating the bandwidth-wasting early data in the case described
3886 * above.
bfa9a9af 3887 */
c39e4048 3888 ret->max_early_data = 0;
bfa9a9af 3889
4e8548e8
MC
3890 /*
3891 * Default recv_max_early_data is a fully loaded single record. Could be
3892 * split across multiple records in practice. We set this differently to
3893 * max_early_data so that, in the default case, we do not advertise any
3894 * support for early_data, but if a client were to send us some (e.g.
3895 * because of an old, stale ticket) then we will tolerate it and skip over
3896 * it.
3897 */
3898 ret->recv_max_early_data = SSL3_RT_MAX_PLAIN_LENGTH;
3899
36ff232c
MC
3900 /* By default we send two session tickets automatically in TLSv1.3 */
3901 ret->num_tickets = 2;
9d0a8bb7 3902
8a5ed9dc
TM
3903 ssl_ctx_system_config(ret);
3904
16203f7b 3905 return ret;
0f113f3e 3906 err:
e0e920b1 3907 SSL_CTX_free(ret);
16203f7b 3908 return NULL;
0f113f3e 3909}
d02b48c6 3910
ba18627e
MC
3911SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
3912{
d8652be0 3913 return SSL_CTX_new_ex(NULL, NULL, meth);
ba18627e
MC
3914}
3915
c5ebfcab 3916int SSL_CTX_up_ref(SSL_CTX *ctx)
a18a31e4 3917{
16203f7b 3918 int i;
c5ebfcab 3919
2f545ae4 3920 if (CRYPTO_UP_REF(&ctx->references, &i, ctx->lock) <= 0)
c5ebfcab
F
3921 return 0;
3922
3923 REF_PRINT_COUNT("SSL_CTX", ctx);
3924 REF_ASSERT_ISNT(i < 2);
3925 return ((i > 1) ? 1 : 0);
a18a31e4
MC
3926}
3927
4f43d0e7 3928void SSL_CTX_free(SSL_CTX *a)
0f113f3e
MC
3929{
3930 int i;
9d2d857f 3931 size_t j;
d02b48c6 3932
0f113f3e
MC
3933 if (a == NULL)
3934 return;
d02b48c6 3935
2f545ae4 3936 CRYPTO_DOWN_REF(&a->references, &i, a->lock);
f3f1cf84 3937 REF_PRINT_COUNT("SSL_CTX", a);
0f113f3e
MC
3938 if (i > 0)
3939 return;
f3f1cf84 3940 REF_ASSERT_ISNT(i < 0);
0f113f3e 3941
222561fe 3942 X509_VERIFY_PARAM_free(a->param);
919ba009 3943 dane_ctx_final(&a->dane);
0f113f3e
MC
3944
3945 /*
3946 * Free internal session cache. However: the remove_cb() may reference
3947 * the ex_data of SSL_CTX, thus the ex_data store can only be removed
3948 * after the sessions were flushed.
3949 * As the ex_data handling routines might also touch the session cache,
3950 * the most secure solution seems to be: empty (flush) the cache, then
3951 * free ex_data, then finally free the cache.
3952 * (See ticket [openssl.org #212].)
3953 */
3954 if (a->sessions != NULL)
3955 SSL_CTX_flush_sessions(a, 0);
3956
3957 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
25aaa98a 3958 lh_SSL_SESSION_free(a->sessions);
222561fe 3959 X509_STORE_free(a->cert_store);
ed29e82a
RP
3960#ifndef OPENSSL_NO_CT
3961 CTLOG_STORE_free(a->ctlog_store);
3962#endif
25aaa98a
RS
3963 sk_SSL_CIPHER_free(a->cipher_list);
3964 sk_SSL_CIPHER_free(a->cipher_list_by_id);
f865b081 3965 sk_SSL_CIPHER_free(a->tls13_ciphersuites);
e0e920b1 3966 ssl_cert_free(a->cert);
fa7c2637 3967 sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);
98732979 3968 sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free);
79b2a2f2 3969 OSSL_STACK_OF_X509_free(a->extra_certs);
0f113f3e 3970 a->comp_methods = NULL;
e783bae2 3971#ifndef OPENSSL_NO_SRTP
25aaa98a 3972 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
e783bae2 3973#endif
edc032b5 3974#ifndef OPENSSL_NO_SRP
76cb077f 3975 ssl_ctx_srp_ctx_free_intern(a);
edc032b5 3976#endif
bdfe932d 3977#ifndef OPENSSL_NO_ENGINE
301fcb28 3978 tls_engine_finish(a->client_cert_engine);
ddac1974 3979#endif
8671b898 3980
aff8c126 3981 OPENSSL_free(a->ext.ecpointformats);
187753e0 3982 OPENSSL_free(a->ext.supportedgroups);
ddf8f1ce 3983 OPENSSL_free(a->ext.supported_groups_default);
aff8c126 3984 OPENSSL_free(a->ext.alpn);
4bfb96f2 3985 OPENSSL_secure_free(a->ext.secure);
8671b898 3986
c8f6c28a
MC
3987 ssl_evp_md_free(a->md5);
3988 ssl_evp_md_free(a->sha1);
3989
9d2d857f
MC
3990 for (j = 0; j < SSL_ENC_NUM_IDX; j++)
3991 ssl_evp_cipher_free(a->ssl_cipher_methods[j]);
3992 for (j = 0; j < SSL_MD_NUM_IDX; j++)
3993 ssl_evp_md_free(a->ssl_digest_methods[j]);
3994 for (j = 0; j < a->group_list_len; j++) {
3995 OPENSSL_free(a->group_list[j].tlsname);
3996 OPENSSL_free(a->group_list[j].realname);
3997 OPENSSL_free(a->group_list[j].algorithm);
3998 }
3999 OPENSSL_free(a->group_list);
c8f6c28a 4000
263ff2c9
MC
4001 OPENSSL_free(a->sigalg_lookup_cache);
4002
16203f7b 4003 CRYPTO_THREAD_lock_free(a->lock);
acce0557
P
4004#ifdef TSAN_REQUIRES_LOCKING
4005 CRYPTO_THREAD_lock_free(a->tsan_lock);
4006#endif
16203f7b 4007
ba18627e
MC
4008 OPENSSL_free(a->propq);
4009
0f113f3e
MC
4010 OPENSSL_free(a);
4011}
d02b48c6 4012
3ae76679 4013void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
0f113f3e
MC
4014{
4015 ctx->default_passwd_callback = cb;
4016}
4017
4018void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
4019{
4020 ctx->default_passwd_callback_userdata = u;
4021}
4022
0c452abc
CH
4023pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
4024{
4025 return ctx->default_passwd_callback;
4026}
4027
4028void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
4029{
4030 return ctx->default_passwd_callback_userdata;
4031}
4032
a974e64a
MC
4033void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb)
4034{
38b051a1
TM
4035 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4036
4037 if (sc == NULL)
4038 return;
4039
4040 sc->default_passwd_callback = cb;
a974e64a
MC
4041}
4042
4043void SSL_set_default_passwd_cb_userdata(SSL *s, void *u)
4044{
38b051a1
TM
4045 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4046
4047 if (sc == NULL)
4048 return;
4049
4050 sc->default_passwd_callback_userdata = u;
a974e64a
MC
4051}
4052
0c452abc
CH
4053pem_password_cb *SSL_get_default_passwd_cb(SSL *s)
4054{
38b051a1
TM
4055 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4056
4057 if (sc == NULL)
4058 return NULL;
4059
4060 return sc->default_passwd_callback;
0c452abc
CH
4061}
4062
4063void *SSL_get_default_passwd_cb_userdata(SSL *s)
4064{
38b051a1
TM
4065 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4066
4067 if (sc == NULL)
4068 return NULL;
4069
4070 return sc->default_passwd_callback_userdata;
0c452abc
CH
4071}
4072
0f113f3e
MC
4073void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
4074 int (*cb) (X509_STORE_CTX *, void *),
4075 void *arg)
4076{
4077 ctx->app_verify_callback = cb;
4078 ctx->app_verify_arg = arg;
4079}
4080
4081void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
4082 int (*cb) (int, X509_STORE_CTX *))
4083{
4084 ctx->verify_mode = mode;
4085 ctx->default_verify_callback = cb;
4086}
4087
4088void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
4089{
4090 X509_VERIFY_PARAM_set_depth(ctx->param, depth);
4091}
4092
a230b26e 4093void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg)
0f113f3e
MC
4094{
4095 ssl_cert_set_cert_cb(c->cert, cb, arg);
4096}
4097
4098void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
4099{
38b051a1
TM
4100 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4101
4102 if (sc == NULL)
4103 return;
4104
4105 ssl_cert_set_cert_cb(sc->cert, cb, arg);
0f113f3e 4106}
18d71588 4107
38b051a1 4108void ssl_set_masks(SSL_CONNECTION *s)
0f113f3e 4109{
6383d316 4110 CERT *c = s->cert;
555cbb32 4111 uint32_t *pvalid = s->s3.tmp.valid_flags;
bc71f910 4112 int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
361a1191 4113 unsigned long mask_k, mask_a;
361a1191 4114 int have_ecc_cert, ecdsa_ok;
462f4f4b 4115
0f113f3e
MC
4116 if (c == NULL)
4117 return;
d02b48c6 4118
13c45372 4119 dh_tmp = (c->dh_tmp != NULL
13c45372 4120 || c->dh_tmp_cb != NULL
13c45372 4121 || c->dh_tmp_auto);
d02b48c6 4122
d0ff28f8 4123 rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
38e8f3cd
DSH
4124 rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
4125 dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID;
6383d316 4126 have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID;
0f113f3e
MC
4127 mask_k = 0;
4128 mask_a = 0;
0e1dba93 4129
77359d22
RL
4130 OSSL_TRACE4(TLS_CIPHER, "dh_tmp=%d rsa_enc=%d rsa_sign=%d dsa_sign=%d\n",
4131 dh_tmp, rsa_enc, rsa_sign, dsa_sign);
0f113f3e 4132
2a9b9654 4133#ifndef OPENSSL_NO_GOST
4020c0b3 4134 if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) {
5a5530a2 4135 mask_k |= SSL_kGOST | SSL_kGOST18;
e44380a9
DB
4136 mask_a |= SSL_aGOST12;
4137 }
4020c0b3 4138 if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) {
5a5530a2 4139 mask_k |= SSL_kGOST | SSL_kGOST18;
e44380a9
DB
4140 mask_a |= SSL_aGOST12;
4141 }
4020c0b3 4142 if (ssl_has_cert(s, SSL_PKEY_GOST01)) {
0f113f3e
MC
4143 mask_k |= SSL_kGOST;
4144 mask_a |= SSL_aGOST01;
4145 }
2a9b9654 4146#endif
0f113f3e 4147
361a1191 4148 if (rsa_enc)
0f113f3e 4149 mask_k |= SSL_kRSA;
d02b48c6 4150
0f113f3e
MC
4151 if (dh_tmp)
4152 mask_k |= SSL_kDHE;
d02b48c6 4153
6aaa29fb
DSH
4154 /*
4155 * If we only have an RSA-PSS certificate allow RSA authentication
4156 * if TLS 1.2 and peer supports it.
4157 */
4158
4159 if (rsa_enc || rsa_sign || (ssl_has_cert(s, SSL_PKEY_RSA_PSS_SIGN)
4160 && pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_EXPLICIT_SIGN
38b051a1 4161 && TLS1_get_version(&s->ssl) == TLS1_2_VERSION))
0f113f3e 4162 mask_a |= SSL_aRSA;
d02b48c6 4163
0f113f3e
MC
4164 if (dsa_sign) {
4165 mask_a |= SSL_aDSS;
0f113f3e 4166 }
d02b48c6 4167
0f113f3e 4168 mask_a |= SSL_aNULL;
d02b48c6 4169
0f113f3e
MC
4170 /*
4171 * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
4172 * depending on the key usage extension.
4173 */
0f113f3e 4174 if (have_ecc_cert) {
a8d8e06b 4175 uint32_t ex_kusage;
4020c0b3 4176 ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509);
a8d8e06b 4177 ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE;
6383d316 4178 if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN))
0f113f3e 4179 ecdsa_ok = 0;
c7c46256 4180 if (ecdsa_ok)
0f113f3e 4181 mask_a |= SSL_aECDSA;
0f113f3e 4182 }
b2021556
DSH
4183 /* Allow Ed25519 for TLS 1.2 if peer supports it */
4184 if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED25519)
4185 && pvalid[SSL_PKEY_ED25519] & CERT_PKEY_EXPLICIT_SIGN
38b051a1 4186 && TLS1_get_version(&s->ssl) == TLS1_2_VERSION)
b2021556 4187 mask_a |= SSL_aECDSA;
0e1d6ecf
MC
4188
4189 /* Allow Ed448 for TLS 1.2 if peer supports it */
4190 if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED448)
4191 && pvalid[SSL_PKEY_ED448] & CERT_PKEY_EXPLICIT_SIGN
38b051a1 4192 && TLS1_get_version(&s->ssl) == TLS1_2_VERSION)
0e1d6ecf 4193 mask_a |= SSL_aECDSA;
ea262260 4194
fe6ef247 4195 mask_k |= SSL_kECDHE;
ddac1974
NL
4196
4197#ifndef OPENSSL_NO_PSK
0f113f3e
MC
4198 mask_k |= SSL_kPSK;
4199 mask_a |= SSL_aPSK;
526f94ad
DSH
4200 if (mask_k & SSL_kRSA)
4201 mask_k |= SSL_kRSAPSK;
4202 if (mask_k & SSL_kDHE)
4203 mask_k |= SSL_kDHEPSK;
4204 if (mask_k & SSL_kECDHE)
4205 mask_k |= SSL_kECDHEPSK;
ddac1974
NL
4206#endif
4207
555cbb32
TS
4208 s->s3.tmp.mask_k = mask_k;
4209 s->s3.tmp.mask_a = mask_a;
0f113f3e 4210}
d02b48c6 4211
38b051a1 4212int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL_CONNECTION *s)
0f113f3e 4213{
555cbb32 4214 if (s->s3.tmp.new_cipher->algorithm_auth & SSL_aECDSA) {
0f113f3e 4215 /* key usage, if present, must allow signing */
ce0c1f2b 4216 if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) {
6849b73c 4217 ERR_raise(ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING);
0f113f3e
MC
4218 return 0;
4219 }
4220 }
0f113f3e
MC
4221 return 1; /* all checks are ok */
4222}
ea262260 4223
38b051a1
TM
4224int ssl_get_server_cert_serverinfo(SSL_CONNECTION *s,
4225 const unsigned char **serverinfo,
0f113f3e
MC
4226 size_t *serverinfo_length)
4227{
555cbb32 4228 CERT_PKEY *cpk = s->s3.tmp.cert;
0f113f3e
MC
4229 *serverinfo_length = 0;
4230
a497cf25 4231 if (cpk == NULL || cpk->serverinfo == NULL)
0f113f3e
MC
4232 return 0;
4233
a497cf25
DSH
4234 *serverinfo = cpk->serverinfo;
4235 *serverinfo_length = cpk->serverinfo_length;
0f113f3e
MC
4236 return 1;
4237}
0f113f3e 4238
38b051a1 4239void ssl_update_cache(SSL_CONNECTION *s, int mode)
0f113f3e
MC
4240{
4241 int i;
4242
4243 /*
4244 * If the session_id_length is 0, we are not supposed to cache it, and it
4245 * would be rather hard to do anyway :-)
4246 */
4247 if (s->session->session_id_length == 0)
4248 return;
4249
d316cdcf
BK
4250 /*
4251 * If sid_ctx_length is 0 there is no specific application context
4252 * associated with this session, so when we try to resume it and
c4fa1f7f
BK
4253 * SSL_VERIFY_PEER is requested to verify the client identity, we have no
4254 * indication that this is actually a session for the proper application
4255 * context, and the *handshake* will fail, not just the resumption attempt.
4256 * Do not cache (on the server) these sessions that are not resumable
4257 * (clients can set SSL_VERIFY_PEER without needing a sid_ctx set).
d316cdcf 4258 */
c4fa1f7f 4259 if (s->server && s->session->sid_ctx_length == 0
d316cdcf
BK
4260 && (s->verify_mode & SSL_VERIFY_PEER) != 0)
4261 return;
4262
0f113f3e 4263 i = s->session_ctx->session_cache_mode;
5d61491c 4264 if ((i & mode) != 0
38b051a1 4265 && (!s->hit || SSL_CONNECTION_IS_TLS13(s))) {
ee94ec2e
MC
4266 /*
4267 * Add the session to the internal cache. In server side TLSv1.3 we
6cc0b3c2
MC
4268 * normally don't do this because by default it's a full stateless ticket
4269 * with only a dummy session id so there is no reason to cache it,
4270 * unless:
ee94ec2e
MC
4271 * - we are doing early_data, in which case we cache so that we can
4272 * detect replays
4273 * - the application has set a remove_session_cb so needs to know about
4274 * session timeout events
6cc0b3c2 4275 * - SSL_OP_NO_TICKET is set in which case it is a stateful ticket
ee94ec2e
MC
4276 */
4277 if ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) == 0
38b051a1 4278 && (!SSL_CONNECTION_IS_TLS13(s)
ee94ec2e 4279 || !s->server
5d263fb7
MC
4280 || (s->max_early_data > 0
4281 && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0)
6cc0b3c2
MC
4282 || s->session_ctx->remove_session_cb != NULL
4283 || (s->options & SSL_OP_NO_TICKET) != 0))
ee94ec2e
MC
4284 SSL_CTX_add_session(s->session_ctx, s->session);
4285
4286 /*
4287 * Add the session to the external cache. We do this even in server side
4288 * TLSv1.3 without early data because some applications just want to
4289 * know about the creation of a session and aren't doing a full cache.
4290 */
4291 if (s->session_ctx->new_session_cb != NULL) {
4292 SSL_SESSION_up_ref(s->session);
38b051a1
TM
4293 if (!s->session_ctx->new_session_cb(SSL_CONNECTION_GET_SSL(s),
4294 s->session))
ee94ec2e
MC
4295 SSL_SESSION_free(s->session);
4296 }
0f113f3e
MC
4297 }
4298
4299 /* auto flush every 255 connections */
4300 if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
9ef9088c 4301 TSAN_QUALIFIER int *stat;
acce0557 4302
1fcb4e4d
BK
4303 if (mode & SSL_SESS_CACHE_CLIENT)
4304 stat = &s->session_ctx->stats.sess_connect_good;
4305 else
4306 stat = &s->session_ctx->stats.sess_accept_good;
acce0557 4307 if ((ssl_tsan_load(s->session_ctx, stat) & 0xff) == 0xff)
0f113f3e 4308 SSL_CTX_flush_sessions(s->session_ctx, (unsigned long)time(NULL));
0f113f3e
MC
4309 }
4310}
d02b48c6 4311
3499327b 4312const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx)
0f113f3e
MC
4313{
4314 return ctx->method;
4315}
ba168244 4316
3499327b 4317const SSL_METHOD *SSL_get_ssl_method(const SSL *s)
0f113f3e 4318{
26a7d938 4319 return s->method;
0f113f3e 4320}
d02b48c6 4321
4ebb342f 4322int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
0f113f3e 4323{
0f113f3e 4324 int ret = 1;
38b051a1
TM
4325 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4326
4327 /* TODO(QUIC): Do we want this for QUIC? */
4328 if (sc == NULL
4329 || (s->type != SSL_TYPE_SSL_CONNECTION && s->method != meth))
4330 return 0;
0f113f3e
MC
4331
4332 if (s->method != meth) {
919ba009 4333 const SSL_METHOD *sm = s->method;
38b051a1 4334 int (*hf) (SSL *) = sc->handshake_func;
0f113f3e 4335
919ba009 4336 if (sm->version == meth->version)
0f113f3e
MC
4337 s->method = meth;
4338 else {
38b051a1 4339 sm->ssl_deinit(s);
0f113f3e 4340 s->method = meth;
38b051a1 4341 ret = s->method->ssl_init(s);
0f113f3e
MC
4342 }
4343
919ba009 4344 if (hf == sm->ssl_connect)
38b051a1 4345 sc->handshake_func = meth->ssl_connect;
919ba009 4346 else if (hf == sm->ssl_accept)
38b051a1 4347 sc->handshake_func = meth->ssl_accept;
0f113f3e 4348 }
26a7d938 4349 return ret;
0f113f3e
MC
4350}
4351
4352int SSL_get_error(const SSL *s, int i)
4353{
4354 int reason;
4355 unsigned long l;
4356 BIO *bio;
38b051a1 4357 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
0f113f3e
MC
4358
4359 if (i > 0)
26a7d938 4360 return SSL_ERROR_NONE;
0f113f3e 4361
38b051a1
TM
4362 /* TODO(QUIC): This will need more handling for QUIC_CONNECTIONs */
4363 if (sc == NULL)
4364 return SSL_ERROR_SSL;
4365
0f113f3e
MC
4366 /*
4367 * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
4368 * where we do encode the error
4369 */
4370 if ((l = ERR_peek_error()) != 0) {
4371 if (ERR_GET_LIB(l) == ERR_LIB_SYS)
26a7d938 4372 return SSL_ERROR_SYSCALL;
0f113f3e 4373 else
26a7d938 4374 return SSL_ERROR_SSL;
0f113f3e
MC
4375 }
4376
8051ab2b
MC
4377 if (SSL_want_read(s)) {
4378 bio = SSL_get_rbio(s);
4379 if (BIO_should_read(bio))
26a7d938 4380 return SSL_ERROR_WANT_READ;
8051ab2b
MC
4381 else if (BIO_should_write(bio))
4382 /*
4383 * This one doesn't make too much sense ... We never try to write
4384 * to the rbio, and an application program where rbio and wbio
4385 * are separate couldn't even know what it should wait for.
4386 * However if we ever set s->rwstate incorrectly (so that we have
4387 * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
4388 * wbio *are* the same, this test works around that bug; so it
4389 * might be safer to keep it.
4390 */
26a7d938 4391 return SSL_ERROR_WANT_WRITE;
8051ab2b
MC
4392 else if (BIO_should_io_special(bio)) {
4393 reason = BIO_get_retry_reason(bio);
4394 if (reason == BIO_RR_CONNECT)
26a7d938 4395 return SSL_ERROR_WANT_CONNECT;
8051ab2b 4396 else if (reason == BIO_RR_ACCEPT)
26a7d938 4397 return SSL_ERROR_WANT_ACCEPT;
8051ab2b 4398 else
26a7d938 4399 return SSL_ERROR_SYSCALL; /* unknown */
0f113f3e 4400 }
8051ab2b 4401 }
0f113f3e 4402
8051ab2b 4403 if (SSL_want_write(s)) {
69687aa8 4404 /* Access wbio directly - in order to use the buffered bio if present */
38b051a1 4405 bio = sc->wbio;
8051ab2b 4406 if (BIO_should_write(bio))
26a7d938 4407 return SSL_ERROR_WANT_WRITE;
8051ab2b 4408 else if (BIO_should_read(bio))
2e7dc7cd 4409 /*
8051ab2b 4410 * See above (SSL_want_read(s) with BIO_should_write(bio))
2e7dc7cd 4411 */
26a7d938 4412 return SSL_ERROR_WANT_READ;
8051ab2b
MC
4413 else if (BIO_should_io_special(bio)) {
4414 reason = BIO_get_retry_reason(bio);
4415 if (reason == BIO_RR_CONNECT)
26a7d938 4416 return SSL_ERROR_WANT_CONNECT;
8051ab2b 4417 else if (reason == BIO_RR_ACCEPT)
26a7d938 4418 return SSL_ERROR_WANT_ACCEPT;
8051ab2b 4419 else
26a7d938 4420 return SSL_ERROR_SYSCALL;
0f113f3e 4421 }
07bbc92c 4422 }
6b1bb98f 4423 if (SSL_want_x509_lookup(s))
26a7d938 4424 return SSL_ERROR_WANT_X509_LOOKUP;
0c3eb279
DDO
4425 if (SSL_want_retry_verify(s))
4426 return SSL_ERROR_WANT_RETRY_VERIFY;
6b1bb98f 4427 if (SSL_want_async(s))
8051ab2b 4428 return SSL_ERROR_WANT_ASYNC;
6b1bb98f 4429 if (SSL_want_async_job(s))
8051ab2b 4430 return SSL_ERROR_WANT_ASYNC_JOB;
a9c0d8be
DB
4431 if (SSL_want_client_hello_cb(s))
4432 return SSL_ERROR_WANT_CLIENT_HELLO_CB;
8051ab2b 4433
38b051a1
TM
4434 if ((sc->shutdown & SSL_RECEIVED_SHUTDOWN) &&
4435 (sc->s3.warn_alert == SSL_AD_CLOSE_NOTIFY))
26a7d938 4436 return SSL_ERROR_ZERO_RETURN;
8051ab2b 4437
26a7d938 4438 return SSL_ERROR_SYSCALL;
0f113f3e 4439}
d02b48c6 4440
add2f5ca
MC
4441static int ssl_do_handshake_intern(void *vargs)
4442{
38b051a1
TM
4443 struct ssl_async_args *args = (struct ssl_async_args *)vargs;
4444 SSL *s = args->s;
4445 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
add2f5ca 4446
38b051a1
TM
4447 if (sc == NULL)
4448 return -1;
add2f5ca 4449
38b051a1 4450 return sc->handshake_func(s);
add2f5ca
MC
4451}
4452
4f43d0e7 4453int SSL_do_handshake(SSL *s)
0f113f3e
MC
4454{
4455 int ret = 1;
38b051a1
TM
4456 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4457
4458 /* TODO(QUIC): Special handling for QUIC will be needed */
4459 if (sc == NULL)
4460 return -1;
0f113f3e 4461
38b051a1 4462 if (sc->handshake_func == NULL) {
6849b73c 4463 ERR_raise(ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET);
add2f5ca 4464 return -1;
0f113f3e
MC
4465 }
4466
38b051a1 4467 ossl_statem_check_finish_init(sc, -1);
49e7fe12 4468
c7f47786 4469 s->method->ssl_renegotiate_check(s, 0);
0f113f3e
MC
4470
4471 if (SSL_in_init(s) || SSL_in_before(s)) {
38b051a1 4472 if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
add2f5ca
MC
4473 struct ssl_async_args args;
4474
09134f18 4475 memset(&args, 0, sizeof(args));
add2f5ca
MC
4476 args.s = s;
4477
7fecbf6f 4478 ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
add2f5ca 4479 } else {
38b051a1 4480 ret = sc->handshake_func(s);
add2f5ca 4481 }
0f113f3e 4482 }
add2f5ca 4483 return ret;
0f113f3e
MC
4484}
4485
4f43d0e7 4486void SSL_set_accept_state(SSL *s)
0f113f3e 4487{
38b051a1
TM
4488 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4489
4490 /* TODO(QUIC): Special handling for QUIC will be needed */
4491 if (sc == NULL)
4492 return;
4493
4494 sc->server = 1;
4495 sc->shutdown = 0;
4496 ossl_statem_clear(sc);
4497 sc->handshake_func = s->method->ssl_accept;
4498 clear_ciphers(sc);
0f113f3e 4499}
d02b48c6 4500
4f43d0e7 4501void SSL_set_connect_state(SSL *s)
0f113f3e 4502{
38b051a1
TM
4503 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4504
4505 /* TODO(QUIC): Special handling for QUIC will be needed */
4506 if (sc == NULL)
4507 return;
4508
4509 sc->server = 0;
4510 sc->shutdown = 0;
4511 ossl_statem_clear(sc);
4512 sc->handshake_func = s->method->ssl_connect;
4513 clear_ciphers(sc);
0f113f3e 4514}
d02b48c6 4515
4f43d0e7 4516int ssl_undefined_function(SSL *s)
0f113f3e 4517{
6849b73c 4518 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
26a7d938 4519 return 0;
0f113f3e 4520}
d02b48c6 4521
41a15c4f 4522int ssl_undefined_void_function(void)
0f113f3e 4523{
6849b73c 4524 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
26a7d938 4525 return 0;
0f113f3e 4526}
41a15c4f 4527
0821bcd4 4528int ssl_undefined_const_function(const SSL *s)
0f113f3e 4529{
26a7d938 4530 return 0;
0f113f3e 4531}
0821bcd4 4532
2b8fa1d5 4533const SSL_METHOD *ssl_bad_method(int ver)
0f113f3e 4534{
6849b73c 4535 ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
26a7d938 4536 return NULL;
0f113f3e 4537}
d02b48c6 4538
3eb2aff4 4539const char *ssl_protocol_to_string(int version)
7d650072 4540{
1287dabd 4541 switch (version)
2abacef1
MC
4542 {
4543 case TLS1_3_VERSION:
582a17d6 4544 return "TLSv1.3";
2abacef1
MC
4545
4546 case TLS1_2_VERSION:
7d650072 4547 return "TLSv1.2";
2abacef1
MC
4548
4549 case TLS1_1_VERSION:
7d650072 4550 return "TLSv1.1";
2abacef1
MC
4551
4552 case TLS1_VERSION:
ee3a6c64 4553 return "TLSv1";
2abacef1
MC
4554
4555 case SSL3_VERSION:
7d650072 4556 return "SSLv3";
2abacef1
MC
4557
4558 case DTLS1_BAD_VER:
7d650072 4559 return "DTLSv0.9";
2abacef1
MC
4560
4561 case DTLS1_VERSION:
7d650072 4562 return "DTLSv1";
2abacef1
MC
4563
4564 case DTLS1_2_VERSION:
7d650072 4565 return "DTLSv1.2";
2abacef1
MC
4566
4567 default:
4568 return "unknown";
4569 }
0f113f3e 4570}
d02b48c6 4571
7d650072
KR
4572const char *SSL_get_version(const SSL *s)
4573{
38b051a1
TM
4574 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
4575
4576 /* TODO(QUIC): Should QUIC return QUIC or TLSv1.3? */
4577 if (sc == NULL)
4578 return NULL;
4579
4580 return ssl_protocol_to_string(sc->version);
7d650072
KR
4581}
4582
98732979 4583static int dup_ca_names(STACK_OF(X509_NAME) **dst, STACK_OF(X509_NAME) *src)
0f113f3e
MC
4584{
4585 STACK_OF(X509_NAME) *sk;
4586 X509_NAME *xn;
98732979
MC
4587 int i;
4588
4589 if (src == NULL) {
4590 *dst = NULL;
4591 return 1;
4592 }
4593
4594 if ((sk = sk_X509_NAME_new_null()) == NULL)
4595 return 0;
4596 for (i = 0; i < sk_X509_NAME_num(src); i++) {
4597 xn = X509_NAME_dup(sk_X509_NAME_value(src, i));
4598 if (xn == NULL) {
4599 sk_X509_NAME_pop_free(sk, X509_NAME_free);
4600 return 0;
4601 }
4602 if (sk_X509_NAME_insert(sk, xn, i) == 0) {
4603 X509_NAME_free(xn);
4604 sk_X509_NAME_pop_free(sk, X509_NAME_free);
4605 return 0;
4606 }
4607 }
4608 *dst = sk;
4609
4610 return 1;
4611}
4612
4613SSL *SSL_dup(SSL *s)
4614{
0f113f3e
MC
4615 SSL *ret;
4616 int i;
38b051a1
TM
4617 /* TODO(QUIC): Add a SSL_METHOD function for duplication */
4618 SSL_CONNECTION *retsc;
4619 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
4620
4621 if (sc == NULL)
4622 return NULL;
0f113f3e 4623
919ba009
VD
4624 /* If we're not quiescent, just up_ref! */
4625 if (!SSL_in_init(s) || !SSL_in_before(s)) {
2f545ae4 4626 CRYPTO_UP_REF(&s->references, &i, s->lock);
919ba009
VD
4627 return s;
4628 }
4629
4630 /*
4631 * Otherwise, copy configuration state, and session if set.
4632 */
0f113f3e 4633 if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
26a7d938 4634 return NULL;
38b051a1
TM
4635 if ((retsc = SSL_CONNECTION_FROM_SSL_ONLY(ret)) == NULL)
4636 goto err;
0f113f3e 4637
38b051a1 4638 if (sc->session != NULL) {
919ba009
VD
4639 /*
4640 * Arranges to share the same session via up_ref. This "copies"
4641 * session-id, SSL_METHOD, sid_ctx, and 'cert'
4642 */
61986d32 4643 if (!SSL_copy_session_id(ret, s))
17dd65e6 4644 goto err;
0f113f3e
MC
4645 } else {
4646 /*
4647 * No session has been established yet, so we have to expect that
4648 * s->cert or ret->cert will be changed later -- they should not both
4649 * point to the same object, and thus we can't use
4650 * SSL_copy_session_id.
4651 */
919ba009
VD
4652 if (!SSL_set_ssl_method(ret, s->method))
4653 goto err;
0f113f3e 4654
38b051a1
TM
4655 if (sc->cert != NULL) {
4656 ssl_cert_free(retsc->cert);
4657 retsc->cert = ssl_cert_dup(sc->cert);
4658 if (retsc->cert == NULL)
0f113f3e
MC
4659 goto err;
4660 }
4661
38b051a1
TM
4662 if (!SSL_set_session_id_context(ret, sc->sid_ctx,
4663 (int)sc->sid_ctx_length))
69f68237 4664 goto err;
0f113f3e
MC
4665 }
4666
38b051a1 4667 if (!ssl_dane_dup(retsc, sc))
9f6b22b8 4668 goto err;
38b051a1
TM
4669 retsc->version = sc->version;
4670 retsc->options = sc->options;
4671 retsc->min_proto_version = sc->min_proto_version;
4672 retsc->max_proto_version = sc->max_proto_version;
4673 retsc->mode = sc->mode;
0f113f3e
MC
4674 SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
4675 SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
38b051a1
TM
4676 retsc->msg_callback = sc->msg_callback;
4677 retsc->msg_callback_arg = sc->msg_callback_arg;
0f113f3e
MC
4678 SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
4679 SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
38b051a1 4680 retsc->generate_session_id = sc->generate_session_id;
0f113f3e
MC
4681
4682 SSL_set_info_callback(ret, SSL_get_info_callback(s));
4683
0f113f3e
MC
4684 /* copy app data, a little dangerous perhaps */
4685 if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
4686 goto err;
4687
38b051a1
TM
4688 retsc->server = sc->server;
4689 if (sc->handshake_func) {
4690 if (sc->server)
919ba009
VD
4691 SSL_set_accept_state(ret);
4692 else
4693 SSL_set_connect_state(ret);
4694 }
38b051a1
TM
4695 retsc->shutdown = sc->shutdown;
4696 retsc->hit = sc->hit;
0f113f3e 4697
38b051a1
TM
4698 retsc->default_passwd_callback = sc->default_passwd_callback;
4699 retsc->default_passwd_callback_userdata = sc->default_passwd_callback_userdata;
a974e64a 4700
38b051a1 4701 X509_VERIFY_PARAM_inherit(retsc->param, sc->param);
0f113f3e
MC
4702
4703 /* dup the cipher_list and cipher_list_by_id stacks */
38b051a1
TM
4704 if (sc->cipher_list != NULL) {
4705 if ((retsc->cipher_list = sk_SSL_CIPHER_dup(sc->cipher_list)) == NULL)
0f113f3e
MC
4706 goto err;
4707 }
38b051a1
TM
4708 if (sc->cipher_list_by_id != NULL)
4709 if ((retsc->cipher_list_by_id = sk_SSL_CIPHER_dup(sc->cipher_list_by_id))
0f113f3e
MC
4710 == NULL)
4711 goto err;
4712
4713 /* Dup the client_CA list */
38b051a1
TM
4714 if (!dup_ca_names(&retsc->ca_names, sc->ca_names)
4715 || !dup_ca_names(&retsc->client_ca_names, sc->client_ca_names))
98732979
MC
4716 goto err;
4717
66696478 4718 return ret;
0f113f3e 4719
0f113f3e 4720 err:
66696478
RS
4721 SSL_free(ret);
4722 return NULL;
0f113f3e 4723}
d02b48c6 4724
38b051a1 4725void ssl_clear_cipher_ctx(SSL_CONNECTION *s)
0f113f3e
MC
4726{
4727 if (s->enc_read_ctx != NULL) {
846ec07d 4728 EVP_CIPHER_CTX_free(s->enc_read_ctx);
0f113f3e
MC
4729 s->enc_read_ctx = NULL;
4730 }
4731 if (s->enc_write_ctx != NULL) {
846ec07d 4732 EVP_CIPHER_CTX_free(s->enc_write_ctx);
0f113f3e
MC
4733 s->enc_write_ctx = NULL;
4734 }
09b6c2ef 4735#ifndef OPENSSL_NO_COMP
efa7dd64
RS
4736 COMP_CTX_free(s->expand);
4737 s->expand = NULL;
4738 COMP_CTX_free(s->compress);
4739 s->compress = NULL;
0f113f3e
MC
4740#endif
4741}
d02b48c6 4742
0821bcd4 4743X509 *SSL_get_certificate(const SSL *s)
0f113f3e 4744{
38b051a1
TM
4745 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4746
4747 if (sc == NULL)
4748 return NULL;
4749
4750 if (sc->cert != NULL)
4751 return sc->cert->key->x509;
0f113f3e 4752 else
26a7d938 4753 return NULL;
0f113f3e 4754}
d02b48c6 4755
a25f9adc 4756EVP_PKEY *SSL_get_privatekey(const SSL *s)
0f113f3e 4757{
38b051a1
TM
4758 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
4759
4760 if (sc == NULL)
4761 return NULL;
4762
4763 if (sc->cert != NULL)
4764 return sc->cert->key->privatekey;
0f113f3e 4765 else
26a7d938 4766 return NULL;
0f113f3e 4767}
d02b48c6 4768
a25f9adc 4769X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
0f113f3e
MC
4770{
4771 if (ctx->cert != NULL)
4772 return ctx->cert->key->x509;
4773 else
4774 return NULL;
4775}
a25f9adc
DSH
4776
4777EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
0f113f3e
MC
4778{
4779 if (ctx->cert != NULL)
4780 return ctx->cert->key->privatekey;
4781 else
4782 return NULL;
4783}
a25f9adc 4784
babb3798 4785const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
0f113f3e 4786{
38b051a1
TM
4787 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
4788
4789 if (sc == NULL)
4790 return NULL;
4791
4792 if ((sc->session != NULL) && (sc->session->cipher != NULL))
4793 return sc->session->cipher;
26a7d938 4794 return NULL;
0f113f3e
MC
4795}
4796
0aed6e44
BK
4797const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s)
4798{
38b051a1
TM
4799 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
4800
4801 if (sc == NULL)
4802 return NULL;
4803
4804 return sc->s3.tmp.new_cipher;
0aed6e44
BK
4805}
4806
3499327b 4807const COMP_METHOD *SSL_get_current_compression(const SSL *s)
0f113f3e 4808{
9a555706 4809#ifndef OPENSSL_NO_COMP
38b051a1
TM
4810 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
4811
4812 if (sc == NULL)
4813 return NULL;
4814
1e76110b 4815 return sc->rlayer.wrlmethod->get_compression(sc->rlayer.wrl);
9a555706
RS
4816#else
4817 return NULL;
4818#endif
0f113f3e 4819}
377dcdba 4820
3499327b 4821const COMP_METHOD *SSL_get_current_expansion(const SSL *s)
0f113f3e 4822{
9a555706 4823#ifndef OPENSSL_NO_COMP
38b051a1
TM
4824 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
4825
4826 if (sc == NULL)
4827 return NULL;
4828
1e76110b 4829 return sc->rlayer.rrlmethod->get_compression(sc->rlayer.rrl);
9a555706
RS
4830#else
4831 return NULL;
0f113f3e 4832#endif
9a555706 4833}
0f113f3e 4834
38b051a1 4835int ssl_init_wbio_buffer(SSL_CONNECTION *s)
0f113f3e
MC
4836{
4837 BIO *bbio;
4838
2e7dc7cd
MC
4839 if (s->bbio != NULL) {
4840 /* Already buffered. */
4841 return 1;
0f113f3e 4842 }
46417569 4843
2e7dc7cd
MC
4844 bbio = BIO_new(BIO_f_buffer());
4845 if (bbio == NULL || !BIO_set_read_buffer_size(bbio, 1)) {
4846 BIO_free(bbio);
6849b73c 4847 ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
46417569 4848 return 0;
0f113f3e 4849 }
2e7dc7cd
MC
4850 s->bbio = bbio;
4851 s->wbio = BIO_push(bbio, s->wbio);
46417569 4852
b5cf81f7
MC
4853 s->rlayer.wrlmethod->set1_bio(s->rlayer.wrl, s->wbio);
4854
46417569 4855 return 1;
0f113f3e 4856}
413c4f45 4857
38b051a1 4858int ssl_free_wbio_buffer(SSL_CONNECTION *s)
0f113f3e 4859{
62adbcee 4860 /* callers ensure s is never null */
0f113f3e 4861 if (s->bbio == NULL)
b77f3ed1 4862 return 1;
0f113f3e 4863
2e7dc7cd 4864 s->wbio = BIO_pop(s->wbio);
b5cf81f7
MC
4865 s->rlayer.wrlmethod->set1_bio(s->rlayer.wrl, s->wbio);
4866
0f113f3e
MC
4867 BIO_free(s->bbio);
4868 s->bbio = NULL;
b77f3ed1
MC
4869
4870 return 1;
0f113f3e
MC
4871}
4872
4873void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
4874{
4875 ctx->quiet_shutdown = mode;
4876}
58964a49 4877
0821bcd4 4878int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
0f113f3e 4879{
26a7d938 4880 return ctx->quiet_shutdown;
0f113f3e 4881}
58964a49 4882
0f113f3e
MC
4883void SSL_set_quiet_shutdown(SSL *s, int mode)
4884{
38b051a1
TM
4885 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
4886
4887 /* TODO(QUIC): Do we want this for QUIC? */
4888 if (sc == NULL)
4889 return;
4890
4891 sc->quiet_shutdown = mode;
0f113f3e 4892}
58964a49 4893
0821bcd4 4894int SSL_get_quiet_shutdown(const SSL *s)
0f113f3e 4895{
38b051a1
TM
4896 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
4897
4898 /* TODO(QUIC): Do we want this for QUIC? */
4899 if (sc == NULL)
4900 return 0;
4901
4902 return sc->quiet_shutdown;
0f113f3e 4903}
58964a49 4904
0f113f3e
MC
4905void SSL_set_shutdown(SSL *s, int mode)
4906{
38b051a1
TM
4907 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
4908
4909 /* TODO(QUIC): Do we want this for QUIC? */
4910 if (sc == NULL)
4911 return;
4912
4913 sc->shutdown = mode;
0f113f3e 4914}
58964a49 4915
0821bcd4 4916int SSL_get_shutdown(const SSL *s)
0f113f3e 4917{
38b051a1
TM
4918 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
4919
4920 /* TODO(QUIC): Do we want this for QUIC? */
4921 if (sc == NULL)
4922 return 0;
4923
4924 return sc->shutdown;
0f113f3e 4925}
58964a49 4926
0821bcd4 4927int SSL_version(const SSL *s)
0f113f3e 4928{
38b051a1
TM
4929 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
4930
4931 /* TODO(QUIC): Do we want to report QUIC version this way instead? */
4932 if (sc == NULL)
4933 return 0;
4934
4935 return sc->version;
6546e9b2
AG
4936}
4937
4938int SSL_client_version(const SSL *s)
4939{
38b051a1
TM
4940 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
4941
4942 /* TODO(QUIC): Do we want to report QUIC version this way instead? */
4943 if (sc == NULL)
4944 return 0;
4945
4946 return sc->client_version;
0f113f3e 4947}
58964a49 4948
0821bcd4 4949SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
0f113f3e 4950{
6546e9b2 4951 return ssl->ctx;
0f113f3e
MC
4952}
4953
4954SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
4955{
24a0d393 4956 CERT *new_cert;
38b051a1
TM
4957 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
4958
4959 /* TODO(QUIC): Do we need this for QUIC support? */
4960 if (sc == NULL)
4961 return NULL;
4962
0f113f3e
MC
4963 if (ssl->ctx == ctx)
4964 return ssl->ctx;
0f113f3e 4965 if (ctx == NULL)
38b051a1 4966 ctx = sc->session_ctx;
24a0d393
KR
4967 new_cert = ssl_cert_dup(ctx->cert);
4968 if (new_cert == NULL) {
4969 return NULL;
0f113f3e 4970 }
21181889 4971
38b051a1 4972 if (!custom_exts_copy_flags(&new_cert->custext, &sc->cert->custext)) {
21181889
MC
4973 ssl_cert_free(new_cert);
4974 return NULL;
4975 }
4976
38b051a1
TM
4977 ssl_cert_free(sc->cert);
4978 sc->cert = new_cert;
0f113f3e
MC
4979
4980 /*
4981 * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
4982 * so setter APIs must prevent invalid lengths from entering the system.
4983 */
38b051a1 4984 if (!ossl_assert(sc->sid_ctx_length <= sizeof(sc->sid_ctx)))
380a522f 4985 return NULL;
0f113f3e
MC
4986
4987 /*
4988 * If the session ID context matches that of the parent SSL_CTX,
4989 * inherit it from the new SSL_CTX as well. If however the context does
4990 * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
4991 * leave it unchanged.
4992 */
4993 if ((ssl->ctx != NULL) &&
38b051a1
TM
4994 (sc->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
4995 (memcmp(sc->sid_ctx, ssl->ctx->sid_ctx, sc->sid_ctx_length) == 0)) {
4996 sc->sid_ctx_length = ctx->sid_ctx_length;
4997 memcpy(&sc->sid_ctx, &ctx->sid_ctx, sizeof(sc->sid_ctx));
0f113f3e
MC
4998 }
4999
16203f7b 5000 SSL_CTX_up_ref(ctx);
a230b26e 5001 SSL_CTX_free(ssl->ctx); /* decrement reference count */
0f113f3e
MC
5002 ssl->ctx = ctx;
5003
16203f7b 5004 return ssl->ctx;
0f113f3e 5005}
ed3883d2 5006
4f43d0e7 5007int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
0f113f3e 5008{
d8652be0
MC
5009 return X509_STORE_set_default_paths_ex(ctx->cert_store, ctx->libctx,
5010 ctx->propq);
0f113f3e 5011}
58964a49 5012
d84a7b20
MC
5013int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
5014{
5015 X509_LOOKUP *lookup;
5016
5017 lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir());
5018 if (lookup == NULL)
5019 return 0;
6dcb100f
RL
5020
5021 /* We ignore errors, in case the directory doesn't exist */
5022 ERR_set_mark();
5023
d84a7b20
MC
5024 X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
5025
6dcb100f 5026 ERR_pop_to_mark();
d84a7b20
MC
5027
5028 return 1;
5029}
5030
5031int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
5032{
5033 X509_LOOKUP *lookup;
5034
5035 lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file());
5036 if (lookup == NULL)
5037 return 0;
5038
492bc359 5039 /* We ignore errors, in case the file doesn't exist */
6dcb100f
RL
5040 ERR_set_mark();
5041
d8652be0
MC
5042 X509_LOOKUP_load_file_ex(lookup, NULL, X509_FILETYPE_DEFAULT, ctx->libctx,
5043 ctx->propq);
d84a7b20 5044
6dcb100f
RL
5045 ERR_pop_to_mark();
5046
5047 return 1;
5048}
5049
5050int SSL_CTX_set_default_verify_store(SSL_CTX *ctx)
5051{
5052 X509_LOOKUP *lookup;
5053
5054 lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_store());
5055 if (lookup == NULL)
5056 return 0;
5057
5058 /* We ignore errors, in case the directory doesn't exist */
5059 ERR_set_mark();
5060
d8652be0 5061 X509_LOOKUP_add_store_ex(lookup, NULL, ctx->libctx, ctx->propq);
6dcb100f
RL
5062
5063 ERR_pop_to_mark();
d84a7b20
MC
5064
5065 return 1;
5066}
5067
6dcb100f
RL
5068int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile)
5069{
d8652be0
MC
5070 return X509_STORE_load_file_ex(ctx->cert_store, CAfile, ctx->libctx,
5071 ctx->propq);
6dcb100f
RL
5072}
5073
5074int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath)
5075{
5076 return X509_STORE_load_path(ctx->cert_store, CApath);
5077}
5078
5079int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore)
5080{
d8652be0
MC
5081 return X509_STORE_load_store_ex(ctx->cert_store, CAstore, ctx->libctx,
5082 ctx->propq);
6dcb100f
RL
5083}
5084
303c0028 5085int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
0f113f3e
MC
5086 const char *CApath)
5087{
6dcb100f
RL
5088 if (CAfile == NULL && CApath == NULL)
5089 return 0;
5090 if (CAfile != NULL && !SSL_CTX_load_verify_file(ctx, CAfile))
5091 return 0;
5092 if (CApath != NULL && !SSL_CTX_load_verify_dir(ctx, CApath))
5093 return 0;
5094 return 1;
0f113f3e 5095}
58964a49 5096
45d87a1f 5097void SSL_set_info_callback(SSL *ssl,
0f113f3e
MC
5098 void (*cb) (const SSL *ssl, int type, int val))
5099{
38b051a1
TM
5100 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
5101
5102 if (sc == NULL)
5103 return;
5104
5105 sc->info_callback = cb;
0f113f3e
MC
5106}
5107
5108/*
5109 * One compiler (Diab DCC) doesn't like argument names in returned function
5110 * pointer.
5111 */
5112void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
5113 int /* type */ ,
5114 int /* val */ ) {
38b051a1
TM
5115 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5116
5117 if (sc == NULL)
5118 return NULL;
5119
5120 return sc->info_callback;
0f113f3e 5121}
58964a49 5122
0f113f3e
MC
5123void SSL_set_verify_result(SSL *ssl, long arg)
5124{
38b051a1
TM
5125 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
5126
5127 if (sc == NULL)
5128 return;
5129
5130 sc->verify_result = arg;
0f113f3e 5131}
58964a49 5132
0821bcd4 5133long SSL_get_verify_result(const SSL *ssl)
0f113f3e 5134{
38b051a1
TM
5135 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5136
5137 if (sc == NULL)
5138 return 0;
5139
5140 return sc->verify_result;
0f113f3e
MC
5141}
5142
d9f1c639 5143size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen)
858618e7 5144{
38b051a1
TM
5145 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5146
5147 if (sc == NULL)
5148 return 0;
5149
6b8f5d0d 5150 if (outlen == 0)
38b051a1
TM
5151 return sizeof(sc->s3.client_random);
5152 if (outlen > sizeof(sc->s3.client_random))
5153 outlen = sizeof(sc->s3.client_random);
5154 memcpy(out, sc->s3.client_random, outlen);
d9f1c639 5155 return outlen;
858618e7
NM
5156}
5157
d9f1c639 5158size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen)
858618e7 5159{
38b051a1
TM
5160 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5161
5162 if (sc == NULL)
5163 return 0;
5164
6b8f5d0d 5165 if (outlen == 0)
38b051a1
TM
5166 return sizeof(sc->s3.server_random);
5167 if (outlen > sizeof(sc->s3.server_random))
5168 outlen = sizeof(sc->s3.server_random);
5169 memcpy(out, sc->s3.server_random, outlen);
d9f1c639 5170 return outlen;
858618e7
NM
5171}
5172
d9f1c639 5173size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
a230b26e 5174 unsigned char *out, size_t outlen)
858618e7 5175{
d9f1c639
MC
5176 if (outlen == 0)
5177 return session->master_key_length;
8c1a5343 5178 if (outlen > session->master_key_length)
858618e7
NM
5179 outlen = session->master_key_length;
5180 memcpy(out, session->master_key, outlen);
d9f1c639 5181 return outlen;
858618e7
NM
5182}
5183
725b0f1e 5184int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
911d63f2
MC
5185 size_t len)
5186{
5187 if (len > sizeof(sess->master_key))
5188 return 0;
5189
5190 memcpy(sess->master_key, in, len);
5191 sess->master_key_length = len;
911d63f2
MC
5192 return 1;
5193}
5194
5195
0f113f3e
MC
5196int SSL_set_ex_data(SSL *s, int idx, void *arg)
5197{
26a7d938 5198 return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
0f113f3e
MC
5199}
5200
5201void *SSL_get_ex_data(const SSL *s, int idx)
5202{
26a7d938 5203 return CRYPTO_get_ex_data(&s->ex_data, idx);
0f113f3e
MC
5204}
5205
0f113f3e
MC
5206int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
5207{
26a7d938 5208 return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
0f113f3e
MC
5209}
5210
5211void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
5212{
26a7d938 5213 return CRYPTO_get_ex_data(&s->ex_data, idx);
0f113f3e 5214}
58964a49 5215
0821bcd4 5216X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
0f113f3e 5217{
26a7d938 5218 return ctx->cert_store;
0f113f3e 5219}
413c4f45 5220
0f113f3e
MC
5221void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
5222{
222561fe 5223 X509_STORE_free(ctx->cert_store);
0f113f3e
MC
5224 ctx->cert_store = store;
5225}
413c4f45 5226
b50052db
TS
5227void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store)
5228{
5229 if (store != NULL)
5230 X509_STORE_up_ref(store);
5231 SSL_CTX_set_cert_store(ctx, store);
5232}
5233
0821bcd4 5234int SSL_want(const SSL *s)
0f113f3e 5235{
38b051a1
TM
5236 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5237
5238 if (sc == NULL)
5239 return SSL_NOTHING;
5240
5241 return sc->rwstate;
0f113f3e 5242}
413c4f45 5243
ddac1974
NL
5244#ifndef OPENSSL_NO_PSK
5245int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
0f113f3e
MC
5246{
5247 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
6849b73c 5248 ERR_raise(ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG);
0f113f3e
MC
5249 return 0;
5250 }
df6da24b 5251 OPENSSL_free(ctx->cert->psk_identity_hint);
0f113f3e 5252 if (identity_hint != NULL) {
7644a9ae 5253 ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
df6da24b 5254 if (ctx->cert->psk_identity_hint == NULL)
0f113f3e
MC
5255 return 0;
5256 } else
df6da24b 5257 ctx->cert->psk_identity_hint = NULL;
0f113f3e
MC
5258 return 1;
5259}
ddac1974
NL
5260
5261int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
0f113f3e 5262{
38b051a1
TM
5263 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5264
5265 if (sc == NULL)
0f113f3e
MC
5266 return 0;
5267
0f113f3e 5268 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
6849b73c 5269 ERR_raise(ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG);
0f113f3e
MC
5270 return 0;
5271 }
38b051a1 5272 OPENSSL_free(sc->cert->psk_identity_hint);
0f113f3e 5273 if (identity_hint != NULL) {
38b051a1
TM
5274 sc->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
5275 if (sc->cert->psk_identity_hint == NULL)
0f113f3e
MC
5276 return 0;
5277 } else
38b051a1 5278 sc->cert->psk_identity_hint = NULL;
0f113f3e
MC
5279 return 1;
5280}
ddac1974
NL
5281
5282const char *SSL_get_psk_identity_hint(const SSL *s)
0f113f3e 5283{
38b051a1
TM
5284 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5285
5286 if (sc == NULL || sc->session == NULL)
0f113f3e 5287 return NULL;
38b051a1
TM
5288
5289 return sc->session->psk_identity_hint;
0f113f3e 5290}
ddac1974
NL
5291
5292const char *SSL_get_psk_identity(const SSL *s)
0f113f3e 5293{
38b051a1
TM
5294 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5295
5296 if (sc == NULL || sc->session == NULL)
0f113f3e 5297 return NULL;
38b051a1
TM
5298
5299 return sc->session->psk_identity;
0f113f3e 5300}
7806f3dd 5301
8cbfcc70 5302void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb)
0f113f3e 5303{
38b051a1
TM
5304 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5305
5306 if (sc == NULL)
5307 return;
5308
5309 sc->psk_client_callback = cb;
0f113f3e 5310}
7806f3dd 5311
8cbfcc70 5312void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb)
0f113f3e
MC
5313{
5314 ctx->psk_client_callback = cb;
5315}
7806f3dd 5316
8cbfcc70 5317void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb)
0f113f3e 5318{
38b051a1
TM
5319 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5320
5321 if (sc == NULL)
5322 return;
5323
5324 sc->psk_server_callback = cb;
0f113f3e 5325}
7806f3dd 5326
8cbfcc70 5327void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb)
0f113f3e
MC
5328{
5329 ctx->psk_server_callback = cb;
5330}
5331#endif
5332
f46184bd
MC
5333void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb)
5334{
38b051a1
TM
5335 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5336
5337 if (sc == NULL)
5338 return;
5339
5340 sc->psk_find_session_cb = cb;
f46184bd
MC
5341}
5342
5343void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
5344 SSL_psk_find_session_cb_func cb)
5345{
5346 ctx->psk_find_session_cb = cb;
5347}
5348
5349void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb)
5350{
38b051a1
TM
5351 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5352
5353 if (sc == NULL)
5354 return;
5355
5356 sc->psk_use_session_cb = cb;
f46184bd
MC
5357}
5358
5359void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
5360 SSL_psk_use_session_cb_func cb)
5361{
5362 ctx->psk_use_session_cb = cb;
5363}
5364
0f113f3e
MC
5365void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
5366 void (*cb) (int write_p, int version,
5367 int content_type, const void *buf,
5368 size_t len, SSL *ssl, void *arg))
5369{
5370 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
5371}
5372
5373void SSL_set_msg_callback(SSL *ssl,
5374 void (*cb) (int write_p, int version,
5375 int content_type, const void *buf,
5376 size_t len, SSL *ssl, void *arg))
5377{
5378 SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
5379}
a661b653 5380
7c2d4fee 5381void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
0f113f3e
MC
5382 int (*cb) (SSL *ssl,
5383 int
5384 is_forward_secure))
5385{
5386 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
5387 (void (*)(void))cb);
5388}
5389
7c2d4fee 5390void SSL_set_not_resumable_session_callback(SSL *ssl,
0f113f3e
MC
5391 int (*cb) (SSL *ssl,
5392 int is_forward_secure))
5393{
5394 SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
5395 (void (*)(void))cb);
5396}
5397
c649d10d
TS
5398void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
5399 size_t (*cb) (SSL *ssl, int type,
5400 size_t len, void *arg))
5401{
5402 ctx->record_padding_cb = cb;
5403}
5404
5405void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg)
5406{
5407 ctx->record_padding_arg = arg;
5408}
5409
3499327b 5410void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx)
c649d10d
TS
5411{
5412 return ctx->record_padding_arg;
5413}
5414
5415int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size)
5416{
5417 /* block size of 0 or 1 is basically no padding */
5418 if (block_size == 1)
5419 ctx->block_padding = 0;
5420 else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
5421 ctx->block_padding = block_size;
5422 else
5423 return 0;
5424 return 1;
5425}
5426
a6d36303 5427int SSL_set_record_padding_callback(SSL *ssl,
c649d10d
TS
5428 size_t (*cb) (SSL *ssl, int type,
5429 size_t len, void *arg))
5430{
a6d36303 5431 BIO *b;
38b051a1
TM
5432 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
5433
5434 if (sc == NULL)
5435 return 0;
a6d36303
VF
5436
5437 b = SSL_get_wbio(ssl);
5438 if (b == NULL || !BIO_get_ktls_send(b)) {
eb7d6c2a 5439 sc->rlayer.record_padding_cb = cb;
a6d36303
VF
5440 return 1;
5441 }
5442 return 0;
c649d10d
TS
5443}
5444
5445void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg)
5446{
38b051a1
TM
5447 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
5448
5449 if (sc == NULL)
5450 return;
5451
eb7d6c2a 5452 sc->rlayer.record_padding_arg = arg;
c649d10d
TS
5453}
5454
3499327b 5455void *SSL_get_record_padding_callback_arg(const SSL *ssl)
c649d10d 5456{
38b051a1
TM
5457 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5458
5459 if (sc == NULL)
5460 return NULL;
5461
eb7d6c2a 5462 return sc->rlayer.record_padding_arg;
c649d10d
TS
5463}
5464
5465int SSL_set_block_padding(SSL *ssl, size_t block_size)
5466{
38b051a1
TM
5467 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
5468
5469 if (sc == NULL)
5470 return 0;
5471
c649d10d
TS
5472 /* block size of 0 or 1 is basically no padding */
5473 if (block_size == 1)
eb7d6c2a 5474 sc->rlayer.block_padding = 0;
c649d10d 5475 else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
eb7d6c2a 5476 sc->rlayer.block_padding = block_size;
c649d10d
TS
5477 else
5478 return 0;
5479 return 1;
5480}
5481
9d0a8bb7
MC
5482int SSL_set_num_tickets(SSL *s, size_t num_tickets)
5483{
38b051a1
TM
5484 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5485
5486 if (sc == NULL)
5487 return 0;
5488
5489 sc->num_tickets = num_tickets;
9d0a8bb7
MC
5490
5491 return 1;
5492}
5493
3499327b 5494size_t SSL_get_num_tickets(const SSL *s)
9d0a8bb7 5495{
38b051a1
TM
5496 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5497
5498 if (sc == NULL)
5499 return 0;
5500
5501 return sc->num_tickets;
9d0a8bb7
MC
5502}
5503
5504int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets)
5505{
5506 ctx->num_tickets = num_tickets;
5507
5508 return 1;
5509}
5510
3499327b 5511size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx)
9d0a8bb7
MC
5512{
5513 return ctx->num_tickets;
5514}
5515
0f113f3e
MC
5516/*
5517 * Allocates new EVP_MD_CTX and sets pointer to it into given pointer
8483a003 5518 * variable, freeing EVP_MD_CTX previously stored in that variable, if any.
69687aa8 5519 * If EVP_MD pointer is passed, initializes ctx with this |md|.
48722ff5 5520 * Returns the newly allocated ctx;
8671b898 5521 */
b948e2c5 5522
0f113f3e 5523EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md)
b948e2c5 5524{
0f113f3e 5525 ssl_clear_hash_ctx(hash);
bfb0641f 5526 *hash = EVP_MD_CTX_new();
5f3d93e4 5527 if (*hash == NULL || (md && EVP_DigestInit_ex(*hash, md, NULL) <= 0)) {
bfb0641f 5528 EVP_MD_CTX_free(*hash);
5f3d93e4
MC
5529 *hash = NULL;
5530 return NULL;
5531 }
0f113f3e 5532 return *hash;
b948e2c5 5533}
0f113f3e
MC
5534
5535void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
b948e2c5
DSH
5536{
5537
0d9824c1 5538 EVP_MD_CTX_free(*hash);
0f113f3e 5539 *hash = NULL;
b948e2c5 5540}
a661b653 5541
48fbcbac 5542/* Retrieve handshake hashes */
38b051a1
TM
5543int ssl_handshake_hash(SSL_CONNECTION *s,
5544 unsigned char *out, size_t outlen,
8c1a5343 5545 size_t *hashlen)
48fbcbac 5546{
6e59a892 5547 EVP_MD_CTX *ctx = NULL;
555cbb32 5548 EVP_MD_CTX *hdgst = s->s3.handshake_dgst;
ed576acd 5549 int hashleni = EVP_MD_CTX_get_size(hdgst);
8c1a5343
MC
5550 int ret = 0;
5551
f63a17d6 5552 if (hashleni < 0 || (size_t)hashleni > outlen) {
c48ffbcc 5553 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
28ba2541 5554 goto err;
f63a17d6 5555 }
8c1a5343 5556
bfb0641f 5557 ctx = EVP_MD_CTX_new();
147ed5f9
TL
5558 if (ctx == NULL) {
5559 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
6e59a892 5560 goto err;
147ed5f9 5561 }
8c1a5343 5562
6e59a892 5563 if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
f63a17d6 5564 || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) {
c48ffbcc 5565 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
8c1a5343 5566 goto err;
f63a17d6 5567 }
8c1a5343
MC
5568
5569 *hashlen = hashleni;
5570
5571 ret = 1;
48fbcbac 5572 err:
bfb0641f 5573 EVP_MD_CTX_free(ctx);
48fbcbac
DSH
5574 return ret;
5575}
5576
c04b66b1 5577int SSL_session_reused(const SSL *s)
0f113f3e 5578{
38b051a1
TM
5579 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5580
5581 if (sc == NULL)
5582 return 0;
5583
5584 return sc->hit;
0f113f3e 5585}
08557cf2 5586
69443116 5587int SSL_is_server(const SSL *s)
0f113f3e 5588{
38b051a1
TM
5589 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5590
5591 if (sc == NULL)
5592 return 0;
5593
5594 return sc->server;
0f113f3e 5595}
87adf1fa 5596
00db8c60 5597#ifndef OPENSSL_NO_DEPRECATED_1_1_0
47153c72
RS
5598void SSL_set_debug(SSL *s, int debug)
5599{
5600 /* Old function was do-nothing anyway... */
5601 (void)s;
5602 (void)debug;
5603}
5604#endif
5605
b362ccab 5606void SSL_set_security_level(SSL *s, int level)
0f113f3e 5607{
38b051a1
TM
5608 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5609
5610 if (sc == NULL)
5611 return;
5612
5613 sc->cert->sec_level = level;
0f113f3e 5614}
b362ccab
DSH
5615
5616int SSL_get_security_level(const SSL *s)
0f113f3e 5617{
38b051a1
TM
5618 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5619
5620 if (sc == NULL)
5621 return 0;
5622
5623 return sc->cert->sec_level;
0f113f3e 5624}
b362ccab 5625
0f113f3e 5626void SSL_set_security_callback(SSL *s,
a230b26e
EK
5627 int (*cb) (const SSL *s, const SSL_CTX *ctx,
5628 int op, int bits, int nid,
5629 void *other, void *ex))
0f113f3e 5630{
38b051a1
TM
5631 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5632
5633 if (sc == NULL)
5634 return;
5635
5636 sc->cert->sec_cb = cb;
0f113f3e 5637}
b362ccab 5638
a230b26e
EK
5639int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
5640 const SSL_CTX *ctx, int op,
5641 int bits, int nid, void *other,
5642 void *ex) {
38b051a1
TM
5643 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5644
5645 if (sc == NULL)
5646 return NULL;
5647
5648 return sc->cert->sec_cb;
0f113f3e 5649}
b362ccab
DSH
5650
5651void SSL_set0_security_ex_data(SSL *s, void *ex)
0f113f3e 5652{
38b051a1
TM
5653 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5654
5655 if (sc == NULL)
5656 return;
5657
5658 sc->cert->sec_ex = ex;
0f113f3e 5659}
b362ccab
DSH
5660
5661void *SSL_get0_security_ex_data(const SSL *s)
0f113f3e 5662{
38b051a1
TM
5663 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5664
5665 if (sc == NULL)
5666 return NULL;
5667
5668 return sc->cert->sec_ex;
0f113f3e 5669}
b362ccab
DSH
5670
5671void SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
0f113f3e
MC
5672{
5673 ctx->cert->sec_level = level;
5674}
b362ccab
DSH
5675
5676int SSL_CTX_get_security_level(const SSL_CTX *ctx)
0f113f3e
MC
5677{
5678 return ctx->cert->sec_level;
5679}
b362ccab 5680
0f113f3e 5681void SSL_CTX_set_security_callback(SSL_CTX *ctx,
a230b26e
EK
5682 int (*cb) (const SSL *s, const SSL_CTX *ctx,
5683 int op, int bits, int nid,
5684 void *other, void *ex))
0f113f3e
MC
5685{
5686 ctx->cert->sec_cb = cb;
5687}
b362ccab 5688
e4646a89
KR
5689int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
5690 const SSL_CTX *ctx,
0f113f3e
MC
5691 int op, int bits,
5692 int nid,
5693 void *other,
5694 void *ex) {
5695 return ctx->cert->sec_cb;
5696}
b362ccab
DSH
5697
5698void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex)
0f113f3e
MC
5699{
5700 ctx->cert->sec_ex = ex;
5701}
b362ccab
DSH
5702
5703void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx)
0f113f3e
MC
5704{
5705 return ctx->cert->sec_ex;
5706}
b362ccab 5707
56bd1783 5708uint64_t SSL_CTX_get_options(const SSL_CTX *ctx)
8106cb8b
VD
5709{
5710 return ctx->options;
5711}
a230b26e 5712
56bd1783 5713uint64_t SSL_get_options(const SSL *s)
8106cb8b 5714{
38b051a1
TM
5715 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5716
5717 if (sc == NULL)
5718 return 0;
5719
5720 return sc->options;
8106cb8b 5721}
a230b26e 5722
56bd1783 5723uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op)
8106cb8b
VD
5724{
5725 return ctx->options |= op;
5726}
a230b26e 5727
56bd1783 5728uint64_t SSL_set_options(SSL *s, uint64_t op)
8106cb8b 5729{
38b051a1 5730 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4566dae7 5731 OSSL_PARAM options[2], *opts = options;
38b051a1
TM
5732
5733 if (sc == NULL)
5734 return 0;
5735
4566dae7
MC
5736 sc->options |= op;
5737
5738 *opts++ = OSSL_PARAM_construct_uint64(OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS,
5739 &sc->options);
5740 *opts = OSSL_PARAM_construct_end();
5741
5742 /* Ignore return value */
5743 sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
5744
5745 return sc->options;
8106cb8b 5746}
a230b26e 5747
56bd1783 5748uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op)
8106cb8b
VD
5749{
5750 return ctx->options &= ~op;
5751}
a230b26e 5752
56bd1783 5753uint64_t SSL_clear_options(SSL *s, uint64_t op)
8106cb8b 5754{
38b051a1
TM
5755 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5756
5757 if (sc == NULL)
5758 return 0;
5759
5760 return sc->options &= ~op;
8106cb8b
VD
5761}
5762
696178ed
DSH
5763STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s)
5764{
38b051a1
TM
5765 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5766
5767 if (sc == NULL)
5768 return NULL;
5769
5770 return sc->verified_chain;
696178ed
DSH
5771}
5772
0f113f3e 5773IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
ed29e82a
RP
5774
5775#ifndef OPENSSL_NO_CT
5776
5777/*
5778 * Moves SCTs from the |src| stack to the |dst| stack.
5779 * The source of each SCT will be set to |origin|.
5780 * If |dst| points to a NULL pointer, a new stack will be created and owned by
5781 * the caller.
5782 * Returns the number of SCTs moved, or a negative integer if an error occurs.
5783 */
a230b26e
EK
5784static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
5785 sct_source_t origin)
ed29e82a
RP
5786{
5787 int scts_moved = 0;
5788 SCT *sct = NULL;
5789
5790 if (*dst == NULL) {
5791 *dst = sk_SCT_new_null();
5792 if (*dst == NULL) {
e077455e 5793 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
ed29e82a
RP
5794 goto err;
5795 }
5796 }
5797
30eba7f3
DDO
5798 while (sk_SCT_num(src) > 0) {
5799 sct = sk_SCT_pop(src);
ed29e82a
RP
5800 if (SCT_set_source(sct, origin) != 1)
5801 goto err;
5802
5803 if (sk_SCT_push(*dst, sct) <= 0)
5804 goto err;
5805 scts_moved += 1;
5806 }
5807
5808 return scts_moved;
a230b26e 5809 err:
ed29e82a 5810 if (sct != NULL)
a230b26e 5811 sk_SCT_push(src, sct); /* Put the SCT back */
cc7113e8 5812 return -1;
ed29e82a
RP
5813}
5814
5815/*
a230b26e 5816 * Look for data collected during ServerHello and parse if found.
6b13bd1d 5817 * Returns the number of SCTs extracted.
a230b26e 5818 */
38b051a1 5819static int ct_extract_tls_extension_scts(SSL_CONNECTION *s)
ed29e82a
RP
5820{
5821 int scts_extracted = 0;
5822
aff8c126
RS
5823 if (s->ext.scts != NULL) {
5824 const unsigned char *p = s->ext.scts;
5825 STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len);
ed29e82a
RP
5826
5827 scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION);
5828
5829 SCT_LIST_free(scts);
5830 }
5831
5832 return scts_extracted;
5833}
5834
5835/*
5836 * Checks for an OCSP response and then attempts to extract any SCTs found if it
5837 * contains an SCT X509 extension. They will be stored in |s->scts|.
5838 * Returns:
5839 * - The number of SCTs extracted, assuming an OCSP response exists.
5840 * - 0 if no OCSP response exists or it contains no SCTs.
5841 * - A negative integer if an error occurs.
5842 */
38b051a1 5843static int ct_extract_ocsp_response_scts(SSL_CONNECTION *s)
ed29e82a 5844{
a230b26e 5845# ifndef OPENSSL_NO_OCSP
ed29e82a
RP
5846 int scts_extracted = 0;
5847 const unsigned char *p;
5848 OCSP_BASICRESP *br = NULL;
5849 OCSP_RESPONSE *rsp = NULL;
5850 STACK_OF(SCT) *scts = NULL;
5851 int i;
5852
aff8c126 5853 if (s->ext.ocsp.resp == NULL || s->ext.ocsp.resp_len == 0)
ed29e82a
RP
5854 goto err;
5855
aff8c126
RS
5856 p = s->ext.ocsp.resp;
5857 rsp = d2i_OCSP_RESPONSE(NULL, &p, (int)s->ext.ocsp.resp_len);
ed29e82a
RP
5858 if (rsp == NULL)
5859 goto err;
5860
5861 br = OCSP_response_get1_basic(rsp);
5862 if (br == NULL)
5863 goto err;
5864
5865 for (i = 0; i < OCSP_resp_count(br); ++i) {
5866 OCSP_SINGLERESP *single = OCSP_resp_get0(br, i);
5867
5868 if (single == NULL)
5869 continue;
5870
a230b26e
EK
5871 scts =
5872 OCSP_SINGLERESP_get1_ext_d2i(single, NID_ct_cert_scts, NULL, NULL);
5873 scts_extracted =
5874 ct_move_scts(&s->scts, scts, SCT_SOURCE_OCSP_STAPLED_RESPONSE);
ed29e82a
RP
5875 if (scts_extracted < 0)
5876 goto err;
5877 }
a230b26e 5878 err:
ed29e82a
RP
5879 SCT_LIST_free(scts);
5880 OCSP_BASICRESP_free(br);
5881 OCSP_RESPONSE_free(rsp);
5882 return scts_extracted;
a230b26e 5883# else
3e41ac35
MC
5884 /* Behave as if no OCSP response exists */
5885 return 0;
a230b26e 5886# endif
ed29e82a
RP
5887}
5888
5889/*
5890 * Attempts to extract SCTs from the peer certificate.
5891 * Return the number of SCTs extracted, or a negative integer if an error
5892 * occurs.
5893 */
38b051a1 5894static int ct_extract_x509v3_extension_scts(SSL_CONNECTION *s)
ed29e82a
RP
5895{
5896 int scts_extracted = 0;
3f3c7d26 5897 X509 *cert = s->session != NULL ? s->session->peer : NULL;
ed29e82a
RP
5898
5899 if (cert != NULL) {
5900 STACK_OF(SCT) *scts =
5901 X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL);
5902
5903 scts_extracted =
5904 ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION);
5905
5906 SCT_LIST_free(scts);
5907 }
5908
5909 return scts_extracted;
5910}
5911
5912/*
5913 * Attempts to find all received SCTs by checking TLS extensions, the OCSP
5914 * response (if it exists) and X509v3 extensions in the certificate.
5915 * Returns NULL if an error occurs.
5916 */
5917const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s)
5918{
38b051a1
TM
5919 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5920
5921 if (sc == NULL)
5922 return NULL;
5923
5924 if (!sc->scts_parsed) {
5925 if (ct_extract_tls_extension_scts(sc) < 0 ||
5926 ct_extract_ocsp_response_scts(sc) < 0 ||
5927 ct_extract_x509v3_extension_scts(sc) < 0)
ed29e82a
RP
5928 goto err;
5929
38b051a1 5930 sc->scts_parsed = 1;
ed29e82a 5931 }
38b051a1 5932 return sc->scts;
a230b26e 5933 err:
ed29e82a
RP
5934 return NULL;
5935}
5936
a230b26e 5937static int ct_permissive(const CT_POLICY_EVAL_CTX * ctx,
43341433 5938 const STACK_OF(SCT) *scts, void *unused_arg)
ed29e82a 5939{
43341433
VD
5940 return 1;
5941}
5942
a230b26e 5943static int ct_strict(const CT_POLICY_EVAL_CTX * ctx,
43341433
VD
5944 const STACK_OF(SCT) *scts, void *unused_arg)
5945{
5946 int count = scts != NULL ? sk_SCT_num(scts) : 0;
5947 int i;
ed29e82a 5948
43341433
VD
5949 for (i = 0; i < count; ++i) {
5950 SCT *sct = sk_SCT_value(scts, i);
5951 int status = SCT_get_validation_status(sct);
5952
5953 if (status == SCT_VALIDATION_STATUS_VALID)
5954 return 1;
5955 }
6849b73c 5956 ERR_raise(ERR_LIB_SSL, SSL_R_NO_VALID_SCTS);
43341433
VD
5957 return 0;
5958}
5959
5960int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
5961 void *arg)
5962{
38b051a1
TM
5963 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5964
5965 if (sc == NULL)
5966 return 0;
5967
ed29e82a
RP
5968 /*
5969 * Since code exists that uses the custom extension handler for CT, look
5970 * for this and throw an error if they have already registered to use CT.
5971 */
5972 if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
a230b26e
EK
5973 TLSEXT_TYPE_signed_certificate_timestamp))
5974 {
6849b73c 5975 ERR_raise(ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
43341433 5976 return 0;
ed29e82a
RP
5977 }
5978
ed29e82a 5979 if (callback != NULL) {
a230b26e
EK
5980 /*
5981 * If we are validating CT, then we MUST accept SCTs served via OCSP
5982 */
ed29e82a 5983 if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
43341433 5984 return 0;
ed29e82a
RP
5985 }
5986
38b051a1
TM
5987 sc->ct_validation_callback = callback;
5988 sc->ct_validation_callback_arg = arg;
43341433
VD
5989
5990 return 1;
ed29e82a
RP
5991}
5992
43341433 5993int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
a230b26e 5994 ssl_ct_validation_cb callback, void *arg)
ed29e82a 5995{
ed29e82a
RP
5996 /*
5997 * Since code exists that uses the custom extension handler for CT, look for
5998 * this and throw an error if they have already registered to use CT.
5999 */
6000 if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx,
a230b26e
EK
6001 TLSEXT_TYPE_signed_certificate_timestamp))
6002 {
6849b73c 6003 ERR_raise(ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
43341433 6004 return 0;
ed29e82a
RP
6005 }
6006
6007 ctx->ct_validation_callback = callback;
6008 ctx->ct_validation_callback_arg = arg;
43341433 6009 return 1;
ed29e82a
RP
6010}
6011
43341433 6012int SSL_ct_is_enabled(const SSL *s)
ed29e82a 6013{
38b051a1
TM
6014 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6015
6016 if (sc == NULL)
6017 return 0;
6018
6019 return sc->ct_validation_callback != NULL;
ed29e82a
RP
6020}
6021
43341433 6022int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx)
ed29e82a 6023{
43341433 6024 return ctx->ct_validation_callback != NULL;
ed29e82a
RP
6025}
6026
38b051a1 6027int ssl_validate_ct(SSL_CONNECTION *s)
ed29e82a
RP
6028{
6029 int ret = 0;
3f3c7d26 6030 X509 *cert = s->session != NULL ? s->session->peer : NULL;
43341433 6031 X509 *issuer;
b9aec69a 6032 SSL_DANE *dane = &s->dane;
ed29e82a
RP
6033 CT_POLICY_EVAL_CTX *ctx = NULL;
6034 const STACK_OF(SCT) *scts;
6035
43341433
VD
6036 /*
6037 * If no callback is set, the peer is anonymous, or its chain is invalid,
6038 * skip SCT validation - just return success. Applications that continue
6039 * handshakes without certificates, with unverified chains, or pinned leaf
6040 * certificates are outside the scope of the WebPKI and CT.
6041 *
6042 * The above exclusions notwithstanding the vast majority of peers will
6043 * have rather ordinary certificate chains validated by typical
6044 * applications that perform certificate verification and therefore will
6045 * process SCTs when enabled.
6046 */
6047 if (s->ct_validation_callback == NULL || cert == NULL ||
6048 s->verify_result != X509_V_OK ||
a230b26e 6049 s->verified_chain == NULL || sk_X509_num(s->verified_chain) <= 1)
ed29e82a
RP
6050 return 1;
6051
43341433
VD
6052 /*
6053 * CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3)
6054 * trust-anchors. See https://tools.ietf.org/html/rfc7671#section-4.2
6055 */
6056 if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) {
6057 switch (dane->mtlsa->usage) {
6058 case DANETLS_USAGE_DANE_TA:
6059 case DANETLS_USAGE_DANE_EE:
6060 return 1;
6061 }
ed29e82a
RP
6062 }
6063
38b051a1
TM
6064 ctx = CT_POLICY_EVAL_CTX_new_ex(SSL_CONNECTION_GET_CTX(s)->libctx,
6065 SSL_CONNECTION_GET_CTX(s)->propq);
ed29e82a 6066 if (ctx == NULL) {
e077455e 6067 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CT_LIB);
ed29e82a
RP
6068 goto end;
6069 }
6070
43341433 6071 issuer = sk_X509_value(s->verified_chain, 1);
a1bb7708
RP
6072 CT_POLICY_EVAL_CTX_set1_cert(ctx, cert);
6073 CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer);
38b051a1
TM
6074 CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx,
6075 SSL_CONNECTION_GET_CTX(s)->ctlog_store);
6a71e06d 6076 CT_POLICY_EVAL_CTX_set_time(
38b051a1 6077 ctx, (uint64_t)SSL_SESSION_get_time(s->session) * 1000);
ed29e82a 6078
38b051a1 6079 scts = SSL_get0_peer_scts(SSL_CONNECTION_GET_SSL(s));
ed29e82a 6080
43341433
VD
6081 /*
6082 * This function returns success (> 0) only when all the SCTs are valid, 0
6083 * when some are invalid, and < 0 on various internal errors (out of
6084 * memory, etc.). Having some, or even all, invalid SCTs is not sufficient
6085 * reason to abort the handshake, that decision is up to the callback.
6086 * Therefore, we error out only in the unexpected case that the return
6087 * value is negative.
6088 *
6089 * XXX: One might well argue that the return value of this function is an
f430ba31 6090 * unfortunate design choice. Its job is only to determine the validation
43341433
VD
6091 * status of each of the provided SCTs. So long as it correctly separates
6092 * the wheat from the chaff it should return success. Failure in this case
6093 * ought to correspond to an inability to carry out its duties.
6094 */
6095 if (SCT_LIST_validate(scts, ctx) < 0) {
c48ffbcc 6096 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_SCT_VERIFICATION_FAILED);
ed29e82a
RP
6097 goto end;
6098 }
6099
6100 ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg);
6101 if (ret < 0)
a230b26e 6102 ret = 0; /* This function returns 0 on failure */
f63a17d6 6103 if (!ret)
c48ffbcc 6104 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_CALLBACK_FAILED);
ed29e82a 6105
a230b26e 6106 end:
ed29e82a 6107 CT_POLICY_EVAL_CTX_free(ctx);
f75b34c8
VD
6108 /*
6109 * With SSL_VERIFY_NONE the session may be cached and re-used despite a
6110 * failure return code here. Also the application may wish the complete
6111 * the handshake, and then disconnect cleanly at a higher layer, after
6112 * checking the verification status of the completed connection.
6113 *
6114 * We therefore force a certificate verification failure which will be
6115 * visible via SSL_get_verify_result() and cached as part of any resumed
6116 * session.
6117 *
6118 * Note: the permissive callback is for information gathering only, always
6119 * returns success, and does not affect verification status. Only the
6120 * strict callback or a custom application-specified callback can trigger
6121 * connection failure or record a verification error.
6122 */
6123 if (ret <= 0)
6124 s->verify_result = X509_V_ERR_NO_VALID_SCTS;
ed29e82a
RP
6125 return ret;
6126}
6127
43341433
VD
6128int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode)
6129{
6130 switch (validation_mode) {
6131 default:
6849b73c 6132 ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE);
43341433
VD
6133 return 0;
6134 case SSL_CT_VALIDATION_PERMISSIVE:
6135 return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL);
6136 case SSL_CT_VALIDATION_STRICT:
6137 return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL);
6138 }
6139}
6140
6141int SSL_enable_ct(SSL *s, int validation_mode)
6142{
6143 switch (validation_mode) {
6144 default:
6849b73c 6145 ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE);
43341433
VD
6146 return 0;
6147 case SSL_CT_VALIDATION_PERMISSIVE:
6148 return SSL_set_ct_validation_callback(s, ct_permissive, NULL);
6149 case SSL_CT_VALIDATION_STRICT:
6150 return SSL_set_ct_validation_callback(s, ct_strict, NULL);
6151 }
6152}
6153
ed29e82a
RP
6154int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx)
6155{
328f36c5 6156 return CTLOG_STORE_load_default_file(ctx->ctlog_store);
ed29e82a
RP
6157}
6158
6159int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path)
6160{
6161 return CTLOG_STORE_load_file(ctx->ctlog_store, path);
6162}
6163
a230b26e 6164void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE * logs)
8359b57f
RP
6165{
6166 CTLOG_STORE_free(ctx->ctlog_store);
6167 ctx->ctlog_store = logs;
6168}
6169
6170const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx)
6171{
6172 return ctx->ctlog_store;
6173}
6174
6b1bb98f
BK
6175#endif /* OPENSSL_NO_CT */
6176
a9c0d8be
DB
6177void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
6178 void *arg)
6b1bb98f 6179{
a9c0d8be
DB
6180 c->client_hello_cb = cb;
6181 c->client_hello_cb_arg = arg;
6b1bb98f
BK
6182}
6183
a9c0d8be 6184int SSL_client_hello_isv2(SSL *s)
6b1bb98f 6185{
38b051a1
TM
6186 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6187
6188 if (sc == NULL)
6189 return 0;
6190
6191 if (sc->clienthello == NULL)
6b1bb98f 6192 return 0;
38b051a1 6193 return sc->clienthello->isv2;
6b1bb98f
BK
6194}
6195
a9c0d8be 6196unsigned int SSL_client_hello_get0_legacy_version(SSL *s)
6b1bb98f 6197{
38b051a1
TM
6198 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6199
6200 if (sc == NULL)
6201 return 0;
6202
6203 if (sc->clienthello == NULL)
6b1bb98f 6204 return 0;
38b051a1 6205 return sc->clienthello->legacy_version;
6b1bb98f
BK
6206}
6207
a9c0d8be 6208size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out)
6b1bb98f 6209{
38b051a1
TM
6210 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6211
6212 if (sc == NULL)
6213 return 0;
6214
6215 if (sc->clienthello == NULL)
6b1bb98f
BK
6216 return 0;
6217 if (out != NULL)
38b051a1 6218 *out = sc->clienthello->random;
6b1bb98f
BK
6219 return SSL3_RANDOM_SIZE;
6220}
6221
a9c0d8be 6222size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out)
6b1bb98f 6223{
38b051a1
TM
6224 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6225
6226 if (sc == NULL)
6227 return 0;
6228
6229 if (sc->clienthello == NULL)
6b1bb98f
BK
6230 return 0;
6231 if (out != NULL)
38b051a1
TM
6232 *out = sc->clienthello->session_id;
6233 return sc->clienthello->session_id_len;
6b1bb98f
BK
6234}
6235
a9c0d8be 6236size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out)
6b1bb98f 6237{
38b051a1
TM
6238 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6239
6240 if (sc == NULL)
6241 return 0;
6242
6243 if (sc->clienthello == NULL)
6b1bb98f
BK
6244 return 0;
6245 if (out != NULL)
38b051a1
TM
6246 *out = PACKET_data(&sc->clienthello->ciphersuites);
6247 return PACKET_remaining(&sc->clienthello->ciphersuites);
6b1bb98f
BK
6248}
6249
a9c0d8be 6250size_t SSL_client_hello_get0_compression_methods(SSL *s, const unsigned char **out)
6b1bb98f 6251{
38b051a1
TM
6252 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6253
6254 if (sc == NULL)
6255 return 0;
6256
6257 if (sc->clienthello == NULL)
6b1bb98f
BK
6258 return 0;
6259 if (out != NULL)
38b051a1
TM
6260 *out = sc->clienthello->compressions;
6261 return sc->clienthello->compressions_len;
6b1bb98f
BK
6262}
6263
a9c0d8be 6264int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen)
193b5d76
BK
6265{
6266 RAW_EXTENSION *ext;
6267 int *present;
6268 size_t num = 0, i;
38b051a1 6269 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
193b5d76 6270
38b051a1 6271 if (sc == NULL)
193b5d76 6272 return 0;
38b051a1
TM
6273
6274 if (sc->clienthello == NULL || out == NULL || outlen == NULL)
6275 return 0;
6276 for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
6277 ext = sc->clienthello->pre_proc_exts + i;
193b5d76
BK
6278 if (ext->present)
6279 num++;
6280 }
6fda11ae 6281 if (num == 0) {
6282 *out = NULL;
6283 *outlen = 0;
6284 return 1;
6285 }
e077455e 6286 if ((present = OPENSSL_malloc(sizeof(*present) * num)) == NULL)
193b5d76 6287 return 0;
38b051a1
TM
6288 for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
6289 ext = sc->clienthello->pre_proc_exts + i;
193b5d76
BK
6290 if (ext->present) {
6291 if (ext->received_order >= num)
6292 goto err;
6293 present[ext->received_order] = ext->type;
6294 }
6295 }
6296 *out = present;
6297 *outlen = num;
6298 return 1;
6299 err:
6300 OPENSSL_free(present);
6301 return 0;
6302}
6303
13a53fbf
PL
6304int SSL_client_hello_get_extension_order(SSL *s, uint16_t *exts, size_t *num_exts)
6305{
6306 RAW_EXTENSION *ext;
6307 size_t num = 0, i;
38b051a1
TM
6308 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6309
6310 if (sc == NULL)
6311 return 0;
13a53fbf 6312
38b051a1 6313 if (sc->clienthello == NULL || num_exts == NULL)
13a53fbf 6314 return 0;
38b051a1
TM
6315 for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
6316 ext = sc->clienthello->pre_proc_exts + i;
13a53fbf
PL
6317 if (ext->present)
6318 num++;
6319 }
6320 if (num == 0) {
6321 *num_exts = 0;
6322 return 1;
6323 }
6324 if (exts == NULL) {
6325 *num_exts = num;
6326 return 1;
6327 }
6328 if (*num_exts < num)
6329 return 0;
38b051a1
TM
6330 for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
6331 ext = sc->clienthello->pre_proc_exts + i;
13a53fbf
PL
6332 if (ext->present) {
6333 if (ext->received_order >= num)
6334 return 0;
6335 exts[ext->received_order] = ext->type;
6336 }
6337 }
6338 *num_exts = num;
6339 return 1;
6340}
6341
a9c0d8be 6342int SSL_client_hello_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
6b1bb98f
BK
6343 size_t *outlen)
6344{
6345 size_t i;
6346 RAW_EXTENSION *r;
38b051a1 6347 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6b1bb98f 6348
38b051a1 6349 if (sc == NULL)
6b1bb98f 6350 return 0;
38b051a1
TM
6351
6352 if (sc->clienthello == NULL)
6353 return 0;
6354 for (i = 0; i < sc->clienthello->pre_proc_exts_len; ++i) {
6355 r = sc->clienthello->pre_proc_exts + i;
6b1bb98f
BK
6356 if (r->present && r->type == type) {
6357 if (out != NULL)
6358 *out = PACKET_data(&r->data);
6359 if (outlen != NULL)
6360 *outlen = PACKET_remaining(&r->data);
6361 return 1;
6362 }
6363 }
6364 return 0;
6365}
2faa1b48 6366
a58eb06d
TS
6367int SSL_free_buffers(SSL *ssl)
6368{
38b051a1
TM
6369 RECORD_LAYER *rl;
6370 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
6371
6372 if (sc == NULL)
6373 return 0;
6374
6375 rl = &sc->rlayer;
a58eb06d
TS
6376
6377 if (RECORD_LAYER_read_pending(rl) || RECORD_LAYER_write_pending(rl))
6378 return 0;
6379
6380 RECORD_LAYER_release(rl);
6381 return 1;
6382}
6383
6384int SSL_alloc_buffers(SSL *ssl)
6385{
38b051a1
TM
6386 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
6387
6388 if (sc == NULL)
6389 return 0;
6390
6391 return ssl3_setup_buffers(sc);
a58eb06d
TS
6392}
6393
2faa1b48
CB
6394void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb)
6395{
6396 ctx->keylog_callback = cb;
6397}
6398
6399SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
6400{
6401 return ctx->keylog_callback;
6402}
6403
6404static int nss_keylog_int(const char *prefix,
38b051a1 6405 SSL_CONNECTION *sc,
2faa1b48
CB
6406 const uint8_t *parameter_1,
6407 size_t parameter_1_len,
6408 const uint8_t *parameter_2,
6409 size_t parameter_2_len)
6410{
6411 char *out = NULL;
6412 char *cursor = NULL;
6413 size_t out_len = 0;
6414 size_t i;
6415 size_t prefix_len;
38b051a1 6416 SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(sc);
2faa1b48 6417
38b051a1 6418 if (sctx->keylog_callback == NULL)
20870286 6419 return 1;
2faa1b48
CB
6420
6421 /*
6422 * Our output buffer will contain the following strings, rendered with
6423 * space characters in between, terminated by a NULL character: first the
6424 * prefix, then the first parameter, then the second parameter. The
6425 * meaning of each parameter depends on the specific key material being
6426 * logged. Note that the first and second parameters are encoded in
6427 * hexadecimal, so we need a buffer that is twice their lengths.
6428 */
6429 prefix_len = strlen(prefix);
e931f370 6430 out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3;
e077455e 6431 if ((out = cursor = OPENSSL_malloc(out_len)) == NULL)
2faa1b48 6432 return 0;
2faa1b48
CB
6433
6434 strcpy(cursor, prefix);
6435 cursor += prefix_len;
6436 *cursor++ = ' ';
6437
6438 for (i = 0; i < parameter_1_len; i++) {
6439 sprintf(cursor, "%02x", parameter_1[i]);
6440 cursor += 2;
6441 }
6442 *cursor++ = ' ';
6443
6444 for (i = 0; i < parameter_2_len; i++) {
6445 sprintf(cursor, "%02x", parameter_2[i]);
6446 cursor += 2;
6447 }
6448 *cursor = '\0';
6449
38b051a1 6450 sctx->keylog_callback(SSL_CONNECTION_GET_SSL(sc), (const char *)out);
e931f370 6451 OPENSSL_clear_free(out, out_len);
2faa1b48
CB
6452 return 1;
6453
6454}
6455
38b051a1 6456int ssl_log_rsa_client_key_exchange(SSL_CONNECTION *sc,
2faa1b48
CB
6457 const uint8_t *encrypted_premaster,
6458 size_t encrypted_premaster_len,
6459 const uint8_t *premaster,
6460 size_t premaster_len)
6461{
6462 if (encrypted_premaster_len < 8) {
38b051a1 6463 SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
2faa1b48
CB
6464 return 0;
6465 }
6466
f0deb4d3 6467 /* We only want the first 8 bytes of the encrypted premaster as a tag. */
2faa1b48 6468 return nss_keylog_int("RSA",
38b051a1 6469 sc,
2faa1b48 6470 encrypted_premaster,
f0deb4d3 6471 8,
2faa1b48
CB
6472 premaster,
6473 premaster_len);
6474}
6475
38b051a1 6476int ssl_log_secret(SSL_CONNECTION *sc,
2c7bd692
CB
6477 const char *label,
6478 const uint8_t *secret,
6479 size_t secret_len)
2faa1b48 6480{
2c7bd692 6481 return nss_keylog_int(label,
38b051a1
TM
6482 sc,
6483 sc->s3.client_random,
2c7bd692
CB
6484 SSL3_RANDOM_SIZE,
6485 secret,
6486 secret_len);
2faa1b48
CB
6487}
6488
ccb8e6e0
BK
6489#define SSLV2_CIPHER_LEN 3
6490
38b051a1 6491int ssl_cache_cipherlist(SSL_CONNECTION *s, PACKET *cipher_suites, int sslv2format)
ccb8e6e0 6492{
ccb8e6e0 6493 int n;
ccb8e6e0
BK
6494
6495 n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
6496
6497 if (PACKET_remaining(cipher_suites) == 0) {
c48ffbcc 6498 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_NO_CIPHERS_SPECIFIED);
90134d98 6499 return 0;
ccb8e6e0
BK
6500 }
6501
6502 if (PACKET_remaining(cipher_suites) % n != 0) {
c48ffbcc 6503 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
90134d98 6504 return 0;
ccb8e6e0
BK
6505 }
6506
555cbb32
TS
6507 OPENSSL_free(s->s3.tmp.ciphers_raw);
6508 s->s3.tmp.ciphers_raw = NULL;
6509 s->s3.tmp.ciphers_rawlen = 0;
ccb8e6e0
BK
6510
6511 if (sslv2format) {
6512 size_t numciphers = PACKET_remaining(cipher_suites) / n;
6513 PACKET sslv2ciphers = *cipher_suites;
6514 unsigned int leadbyte;
6515 unsigned char *raw;
6516
6517 /*
6518 * We store the raw ciphers list in SSLv3+ format so we need to do some
6519 * preprocessing to convert the list first. If there are any SSLv2 only
6520 * ciphersuites with a non-zero leading byte then we are going to
6521 * slightly over allocate because we won't store those. But that isn't a
6522 * problem.
6523 */
6524 raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN);
555cbb32 6525 s->s3.tmp.ciphers_raw = raw;
ccb8e6e0 6526 if (raw == NULL) {
e077455e 6527 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
f63a17d6 6528 return 0;
ccb8e6e0 6529 }
555cbb32 6530 for (s->s3.tmp.ciphers_rawlen = 0;
ccb8e6e0
BK
6531 PACKET_remaining(&sslv2ciphers) > 0;
6532 raw += TLS_CIPHER_LEN) {
6533 if (!PACKET_get_1(&sslv2ciphers, &leadbyte)
6534 || (leadbyte == 0
6535 && !PACKET_copy_bytes(&sslv2ciphers, raw,
6536 TLS_CIPHER_LEN))
6537 || (leadbyte != 0
6538 && !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) {
c48ffbcc 6539 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_PACKET);
555cbb32
TS
6540 OPENSSL_free(s->s3.tmp.ciphers_raw);
6541 s->s3.tmp.ciphers_raw = NULL;
6542 s->s3.tmp.ciphers_rawlen = 0;
f63a17d6 6543 return 0;
ccb8e6e0
BK
6544 }
6545 if (leadbyte == 0)
555cbb32 6546 s->s3.tmp.ciphers_rawlen += TLS_CIPHER_LEN;
ccb8e6e0 6547 }
555cbb32
TS
6548 } else if (!PACKET_memdup(cipher_suites, &s->s3.tmp.ciphers_raw,
6549 &s->s3.tmp.ciphers_rawlen)) {
c48ffbcc 6550 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
f63a17d6 6551 return 0;
ccb8e6e0 6552 }
90134d98 6553 return 1;
90134d98
BK
6554}
6555
6556int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
6557 int isv2format, STACK_OF(SSL_CIPHER) **sk,
6558 STACK_OF(SSL_CIPHER) **scsvs)
6559{
90134d98 6560 PACKET pkt;
38b051a1
TM
6561 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6562
6563 if (sc == NULL)
6564 return 0;
90134d98
BK
6565
6566 if (!PACKET_buf_init(&pkt, bytes, len))
6567 return 0;
38b051a1 6568 return ossl_bytes_to_cipher_list(sc, &pkt, sk, scsvs, isv2format, 0);
90134d98
BK
6569}
6570
38b051a1
TM
6571int ossl_bytes_to_cipher_list(SSL_CONNECTION *s, PACKET *cipher_suites,
6572 STACK_OF(SSL_CIPHER) **skp,
6573 STACK_OF(SSL_CIPHER) **scsvs_out,
6574 int sslv2format, int fatal)
90134d98
BK
6575{
6576 const SSL_CIPHER *c;
6577 STACK_OF(SSL_CIPHER) *sk = NULL;
6578 STACK_OF(SSL_CIPHER) *scsvs = NULL;
6579 int n;
6580 /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
6581 unsigned char cipher[SSLV2_CIPHER_LEN];
6582
6583 n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
6584
6585 if (PACKET_remaining(cipher_suites) == 0) {
f63a17d6 6586 if (fatal)
c48ffbcc 6587 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_NO_CIPHERS_SPECIFIED);
f63a17d6 6588 else
6849b73c 6589 ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED);
90134d98
BK
6590 return 0;
6591 }
6592
6593 if (PACKET_remaining(cipher_suites) % n != 0) {
f63a17d6 6594 if (fatal)
c48ffbcc 6595 SSLfatal(s, SSL_AD_DECODE_ERROR,
f63a17d6
MC
6596 SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
6597 else
6849b73c 6598 ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
90134d98
BK
6599 return 0;
6600 }
6601
6602 sk = sk_SSL_CIPHER_new_null();
6603 scsvs = sk_SSL_CIPHER_new_null();
6604 if (sk == NULL || scsvs == NULL) {
f63a17d6 6605 if (fatal)
e077455e 6606 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
f63a17d6 6607 else
e077455e 6608 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
90134d98
BK
6609 goto err;
6610 }
ccb8e6e0
BK
6611
6612 while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
6613 /*
6614 * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
6615 * first byte set to zero, while true SSLv2 ciphers have a non-zero
6616 * first byte. We don't support any true SSLv2 ciphers, so skip them.
6617 */
6618 if (sslv2format && cipher[0] != '\0')
6619 continue;
6620
ccb8e6e0
BK
6621 /* For SSLv2-compat, ignore leading 0-byte. */
6622 c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher, 1);
6623 if (c != NULL) {
90134d98
BK
6624 if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) ||
6625 (!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) {
f63a17d6 6626 if (fatal)
e077455e 6627 SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
f63a17d6 6628 else
e077455e 6629 ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
ccb8e6e0
BK
6630 goto err;
6631 }
6632 }
6633 }
6634 if (PACKET_remaining(cipher_suites) > 0) {
f63a17d6 6635 if (fatal)
c48ffbcc 6636 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_LENGTH);
f63a17d6 6637 else
6849b73c 6638 ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
ccb8e6e0
BK
6639 goto err;
6640 }
6641
90134d98
BK
6642 if (skp != NULL)
6643 *skp = sk;
6644 else
6645 sk_SSL_CIPHER_free(sk);
6646 if (scsvs_out != NULL)
6647 *scsvs_out = scsvs;
6648 else
6649 sk_SSL_CIPHER_free(scsvs);
6650 return 1;
ccb8e6e0
BK
6651 err:
6652 sk_SSL_CIPHER_free(sk);
90134d98
BK
6653 sk_SSL_CIPHER_free(scsvs);
6654 return 0;
ccb8e6e0 6655}
3fc8d856
MC
6656
6657int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data)
6658{
6659 ctx->max_early_data = max_early_data;
6660
6661 return 1;
6662}
6663
46dcb945 6664uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx)
3fc8d856
MC
6665{
6666 return ctx->max_early_data;
6667}
6668
6669int SSL_set_max_early_data(SSL *s, uint32_t max_early_data)
6670{
38b051a1
TM
6671 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6672
6673 if (sc == NULL)
6674 return 0;
6675
6676 sc->max_early_data = max_early_data;
3fc8d856
MC
6677
6678 return 1;
6679}
6680
a8e75d56 6681uint32_t SSL_get_max_early_data(const SSL *s)
3fc8d856 6682{
38b051a1
TM
6683 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6684
6685 if (sc == NULL)
6686 return 0;
6687
6688 return sc->max_early_data;
3fc8d856 6689}
ae3947de 6690
4e8548e8
MC
6691int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data)
6692{
6693 ctx->recv_max_early_data = recv_max_early_data;
6694
6695 return 1;
6696}
6697
6698uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx)
6699{
6700 return ctx->recv_max_early_data;
6701}
6702
6703int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data)
6704{
38b051a1
TM
6705 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6706
6707 if (sc == NULL)
6708 return 0;
6709
6710 sc->recv_max_early_data = recv_max_early_data;
4e8548e8
MC
6711
6712 return 1;
6713}
6714
6715uint32_t SSL_get_recv_max_early_data(const SSL *s)
6716{
38b051a1
TM
6717 const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6718
6719 if (sc == NULL)
6720 return 0;
6721
6722 return sc->recv_max_early_data;
4e8548e8
MC
6723}
6724
38b051a1 6725__owur unsigned int ssl_get_max_send_fragment(const SSL_CONNECTION *sc)
cf72c757
F
6726{
6727 /* Return any active Max Fragment Len extension */
38b051a1
TM
6728 if (sc->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(sc->session))
6729 return GET_MAX_FRAGMENT_LENGTH(sc->session);
cf72c757
F
6730
6731 /* return current SSL connection setting */
38b051a1 6732 return sc->max_send_fragment;
cf72c757
F
6733}
6734
38b051a1 6735__owur unsigned int ssl_get_split_send_fragment(const SSL_CONNECTION *sc)
cf72c757
F
6736{
6737 /* Return a value regarding an active Max Fragment Len extension */
38b051a1
TM
6738 if (sc->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(sc->session)
6739 && sc->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(sc->session))
6740 return GET_MAX_FRAGMENT_LENGTH(sc->session);
cf72c757
F
6741
6742 /* else limit |split_send_fragment| to current |max_send_fragment| */
38b051a1
TM
6743 if (sc->split_send_fragment > sc->max_send_fragment)
6744 return sc->max_send_fragment;
cf72c757
F
6745
6746 /* return current SSL connection setting */
38b051a1 6747 return sc->split_send_fragment;
cf72c757 6748}
042c5753
MC
6749
6750int SSL_stateless(SSL *s)
6751{
6752 int ret;
38b051a1
TM
6753 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6754
6755 /* TODO(QUIC): This will need further work. */
6756 if (sc == NULL)
6757 return 0;
042c5753
MC
6758
6759 /* Ensure there is no state left over from a previous invocation */
6760 if (!SSL_clear(s))
d6bb50a5 6761 return 0;
042c5753
MC
6762
6763 ERR_clear_error();
6764
38b051a1 6765 sc->s3.flags |= TLS1_FLAGS_STATELESS;
042c5753 6766 ret = SSL_accept(s);
38b051a1 6767 sc->s3.flags &= ~TLS1_FLAGS_STATELESS;
042c5753 6768
38b051a1 6769 if (ret > 0 && sc->ext.cookieok)
c36001c3
MC
6770 return 1;
6771
38b051a1 6772 if (sc->hello_retry_request == SSL_HRR_PENDING && !ossl_statem_in_error(sc))
e440f513
MC
6773 return 0;
6774
6775 return -1;
042c5753 6776}
9d75dce3 6777
e97be718
MC
6778void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val)
6779{
6780 ctx->pha_enabled = val;
6781}
6782
32097b33 6783void SSL_set_post_handshake_auth(SSL *ssl, int val)
9d75dce3 6784{
38b051a1
TM
6785 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
6786
6787 if (sc == NULL)
6788 return;
6789
6790 sc->pha_enabled = val;
9d75dce3
TS
6791}
6792
6793int SSL_verify_client_post_handshake(SSL *ssl)
6794{
38b051a1
TM
6795 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
6796
6797 if (sc == NULL)
6798 return 0;
6799
6800 if (!SSL_CONNECTION_IS_TLS13(sc)) {
6849b73c 6801 ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
9d75dce3
TS
6802 return 0;
6803 }
38b051a1 6804 if (!sc->server) {
6849b73c 6805 ERR_raise(ERR_LIB_SSL, SSL_R_NOT_SERVER);
9d75dce3
TS
6806 return 0;
6807 }
6808
6809 if (!SSL_is_init_finished(ssl)) {
6849b73c 6810 ERR_raise(ERR_LIB_SSL, SSL_R_STILL_IN_INIT);
9d75dce3
TS
6811 return 0;
6812 }
6813
38b051a1 6814 switch (sc->post_handshake_auth) {
9d75dce3 6815 case SSL_PHA_NONE:
6849b73c 6816 ERR_raise(ERR_LIB_SSL, SSL_R_EXTENSION_NOT_RECEIVED);
9d75dce3
TS
6817 return 0;
6818 default:
6819 case SSL_PHA_EXT_SENT:
6849b73c 6820 ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
9d75dce3
TS
6821 return 0;
6822 case SSL_PHA_EXT_RECEIVED:
6823 break;
6824 case SSL_PHA_REQUEST_PENDING:
6849b73c 6825 ERR_raise(ERR_LIB_SSL, SSL_R_REQUEST_PENDING);
9d75dce3
TS
6826 return 0;
6827 case SSL_PHA_REQUESTED:
6849b73c 6828 ERR_raise(ERR_LIB_SSL, SSL_R_REQUEST_SENT);
9d75dce3
TS
6829 return 0;
6830 }
6831
38b051a1 6832 sc->post_handshake_auth = SSL_PHA_REQUEST_PENDING;
9d75dce3
TS
6833
6834 /* checks verify_mode and algorithm_auth */
38b051a1
TM
6835 if (!send_certificate_request(sc)) {
6836 sc->post_handshake_auth = SSL_PHA_EXT_RECEIVED; /* restore on error */
6849b73c 6837 ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CONFIG);
9d75dce3
TS
6838 return 0;
6839 }
6840
38b051a1 6841 ossl_statem_set_in_init(sc, 1);
9d75dce3
TS
6842 return 1;
6843}
df0fed9a
TS
6844
6845int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
6846 SSL_CTX_generate_session_ticket_fn gen_cb,
6847 SSL_CTX_decrypt_session_ticket_fn dec_cb,
6848 void *arg)
6849{
6850 ctx->generate_ticket_cb = gen_cb;
6851 ctx->decrypt_ticket_cb = dec_cb;
6852 ctx->ticket_cb_data = arg;
6853 return 1;
6854}
c9598459
MC
6855
6856void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
6857 SSL_allow_early_data_cb_fn cb,
6858 void *arg)
6859{
6860 ctx->allow_early_data_cb = cb;
6861 ctx->allow_early_data_cb_data = arg;
6862}
6863
6864void SSL_set_allow_early_data_cb(SSL *s,
6865 SSL_allow_early_data_cb_fn cb,
6866 void *arg)
6867{
38b051a1
TM
6868 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6869
6870 if (sc == NULL)
6871 return;
6872
6873 sc->allow_early_data_cb = cb;
6874 sc->allow_early_data_cb_data = arg;
c9598459 6875}
c8f6c28a 6876
b4250010 6877const EVP_CIPHER *ssl_evp_cipher_fetch(OSSL_LIB_CTX *libctx,
c8f6c28a
MC
6878 int nid,
6879 const char *properties)
6880{
301fcb28 6881 const EVP_CIPHER *ciph;
5fcb97c6 6882
301fcb28
MC
6883 ciph = tls_get_cipher_from_engine(nid);
6884 if (ciph != NULL)
6885 return ciph;
0618b62c 6886
c8f6c28a 6887 /*
301fcb28
MC
6888 * If there is no engine cipher then we do an explicit fetch. This may fail
6889 * and that could be ok
c8f6c28a 6890 */
5fcb97c6
MC
6891 ERR_set_mark();
6892 ciph = EVP_CIPHER_fetch(libctx, OBJ_nid2sn(nid), properties);
6893 ERR_pop_to_mark();
6894 return ciph;
c8f6c28a
MC
6895}
6896
6897
6898int ssl_evp_cipher_up_ref(const EVP_CIPHER *cipher)
6899{
6900 /* Don't up-ref an implicit EVP_CIPHER */
ed576acd 6901 if (EVP_CIPHER_get0_provider(cipher) == NULL)
c8f6c28a
MC
6902 return 1;
6903
6904 /*
6905 * The cipher was explicitly fetched and therefore it is safe to cast
6906 * away the const
6907 */
6908 return EVP_CIPHER_up_ref((EVP_CIPHER *)cipher);
6909}
6910
6911void ssl_evp_cipher_free(const EVP_CIPHER *cipher)
6912{
6913 if (cipher == NULL)
6914 return;
6915
ed576acd 6916 if (EVP_CIPHER_get0_provider(cipher) != NULL) {
c8f6c28a
MC
6917 /*
6918 * The cipher was explicitly fetched and therefore it is safe to cast
6919 * away the const
6920 */
6921 EVP_CIPHER_free((EVP_CIPHER *)cipher);
6922 }
6923}
6924
b4250010 6925const EVP_MD *ssl_evp_md_fetch(OSSL_LIB_CTX *libctx,
c8f6c28a
MC
6926 int nid,
6927 const char *properties)
6928{
301fcb28 6929 const EVP_MD *md;
5fcb97c6 6930
301fcb28
MC
6931 md = tls_get_digest_from_engine(nid);
6932 if (md != NULL)
6933 return md;
c8f6c28a
MC
6934
6935 /* Otherwise we do an explicit fetch */
5fcb97c6
MC
6936 ERR_set_mark();
6937 md = EVP_MD_fetch(libctx, OBJ_nid2sn(nid), properties);
6938 ERR_pop_to_mark();
6939 return md;
c8f6c28a
MC
6940}
6941
6942int ssl_evp_md_up_ref(const EVP_MD *md)
6943{
6944 /* Don't up-ref an implicit EVP_MD */
ed576acd 6945 if (EVP_MD_get0_provider(md) == NULL)
c8f6c28a
MC
6946 return 1;
6947
6948 /*
6949 * The digest was explicitly fetched and therefore it is safe to cast
6950 * away the const
6951 */
6952 return EVP_MD_up_ref((EVP_MD *)md);
6953}
6954
6955void ssl_evp_md_free(const EVP_MD *md)
6956{
6957 if (md == NULL)
6958 return;
6959
ed576acd 6960 if (EVP_MD_get0_provider(md) != NULL) {
c8f6c28a
MC
6961 /*
6962 * The digest was explicitly fetched and therefore it is safe to cast
6963 * away the const
6964 */
6965 EVP_MD_free((EVP_MD *)md);
6966 }
6967}
163f6dc1
MC
6968
6969int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey)
6970{
38b051a1
TM
6971 SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6972
6973 if (sc == NULL)
6974 return 0;
6975
6976 if (!ssl_security(sc, SSL_SECOP_TMP_DH,
ed576acd 6977 EVP_PKEY_get_security_bits(dhpkey), 0, dhpkey)) {
276d6c68 6978 ERR_raise(ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL);
163f6dc1
MC
6979 return 0;
6980 }
38b051a1
TM
6981 EVP_PKEY_free(sc->cert->dh_tmp);
6982 sc->cert->dh_tmp = dhpkey;
163f6dc1
MC
6983 return 1;
6984}
6985
6986int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey)
6987{
6988 if (!ssl_ctx_security(ctx, SSL_SECOP_TMP_DH,
ed576acd 6989 EVP_PKEY_get_security_bits(dhpkey), 0, dhpkey)) {
276d6c68 6990 ERR_raise(ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL);
163f6dc1
MC
6991 return 0;
6992 }
6993 EVP_PKEY_free(ctx->cert->dh_tmp);
6994 ctx->cert->dh_tmp = dhpkey;
6995 return 1;
6996}