]> git.ipfire.org Git - thirdparty/openssl.git/blame - ssl/ssl_lib.c
Allow NULL for some _free routines.
[thirdparty/openssl.git] / ssl / ssl_lib.c
CommitLineData
0f113f3e 1/*
48e5119a 2 * Copyright 1995-2018 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 *
846e33c7
RS
6 * Licensed under the OpenSSL license (the "License"). You may not use
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>
7b63c0fa 13#include "ssl_locl.h"
ec577822 14#include <openssl/objects.h>
bb7cd4e3 15#include <openssl/x509v3.h>
6434abbf 16#include <openssl/rand.h>
6decf943 17#include <openssl/rand_drbg.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>
67dc995e 23#include "internal/cryptlib.h"
cd420b0b 24#include "internal/refcount.h"
0f113f3e 25
df2ee0e2 26const char SSL_version_str[] = OPENSSL_VERSION_TEXT;
0f113f3e 27
fce78bd4
BE
28static int ssl_undefined_function_1(SSL *ssl, SSL3_RECORD *r, size_t s, int t)
29{
30 (void)r;
31 (void)s;
32 (void)t;
33 return ssl_undefined_function(ssl);
34}
35
36static int ssl_undefined_function_2(SSL *ssl, SSL3_RECORD *r, unsigned char *s,
37 int t)
38{
39 (void)r;
40 (void)s;
41 (void)t;
42 return ssl_undefined_function(ssl);
43}
44
45static int ssl_undefined_function_3(SSL *ssl, unsigned char *r,
46 unsigned char *s, size_t t, size_t *u)
47{
48 (void)r;
49 (void)s;
50 (void)t;
51 (void)u;
52 return ssl_undefined_function(ssl);
53}
54
55static int ssl_undefined_function_4(SSL *ssl, int r)
56{
57 (void)r;
58 return ssl_undefined_function(ssl);
59}
60
61static size_t ssl_undefined_function_5(SSL *ssl, const char *r, size_t s,
62 unsigned char *t)
63{
64 (void)r;
65 (void)s;
66 (void)t;
67 return ssl_undefined_function(ssl);
68}
69
70static int ssl_undefined_function_6(int r)
71{
72 (void)r;
73 return ssl_undefined_function(NULL);
74}
75
76static int ssl_undefined_function_7(SSL *ssl, unsigned char *r, size_t s,
77 const char *t, size_t u,
78 const unsigned char *v, size_t w, int x)
79{
80 (void)r;
81 (void)s;
82 (void)t;
83 (void)u;
84 (void)v;
85 (void)w;
86 (void)x;
87 return ssl_undefined_function(ssl);
88}
89
0f113f3e 90SSL3_ENC_METHOD ssl3_undef_enc_method = {
fce78bd4
BE
91 ssl_undefined_function_1,
92 ssl_undefined_function_2,
0f113f3e 93 ssl_undefined_function,
fce78bd4
BE
94 ssl_undefined_function_3,
95 ssl_undefined_function_4,
96 ssl_undefined_function_5,
0f113f3e
MC
97 NULL, /* client_finished_label */
98 0, /* client_finished_label_len */
99 NULL, /* server_finished_label */
100 0, /* server_finished_label_len */
fce78bd4
BE
101 ssl_undefined_function_6,
102 ssl_undefined_function_7,
0f113f3e 103};
d02b48c6 104
07bbc92c
MC
105struct ssl_async_args {
106 SSL *s;
107 void *buf;
348240c6 108 size_t num;
a230b26e 109 enum { READFUNC, WRITEFUNC, OTHERFUNC } type;
add2f5ca 110 union {
eda75751 111 int (*func_read) (SSL *, void *, size_t, size_t *);
7ee8627f 112 int (*func_write) (SSL *, const void *, size_t, size_t *);
a230b26e 113 int (*func_other) (SSL *);
add2f5ca 114 } f;
07bbc92c
MC
115};
116
919ba009
VD
117static const struct {
118 uint8_t mtype;
119 uint8_t ord;
a230b26e 120 int nid;
919ba009 121} dane_mds[] = {
a230b26e
EK
122 {
123 DANETLS_MATCHING_FULL, 0, NID_undef
124 },
125 {
126 DANETLS_MATCHING_2256, 1, NID_sha256
127 },
128 {
129 DANETLS_MATCHING_2512, 2, NID_sha512
130 },
919ba009
VD
131};
132
133static int dane_ctx_enable(struct dane_ctx_st *dctx)
134{
135 const EVP_MD **mdevp;
136 uint8_t *mdord;
137 uint8_t mdmax = DANETLS_MATCHING_LAST;
a230b26e 138 int n = ((int)mdmax) + 1; /* int to handle PrivMatch(255) */
919ba009
VD
139 size_t i;
140
5ae4ceb9
VD
141 if (dctx->mdevp != NULL)
142 return 1;
143
919ba009
VD
144 mdevp = OPENSSL_zalloc(n * sizeof(*mdevp));
145 mdord = OPENSSL_zalloc(n * sizeof(*mdord));
146
147 if (mdord == NULL || mdevp == NULL) {
b3bd3d5a 148 OPENSSL_free(mdord);
919ba009
VD
149 OPENSSL_free(mdevp);
150 SSLerr(SSL_F_DANE_CTX_ENABLE, ERR_R_MALLOC_FAILURE);
151 return 0;
152 }
153
154 /* Install default entries */
155 for (i = 0; i < OSSL_NELEM(dane_mds); ++i) {
156 const EVP_MD *md;
157
158 if (dane_mds[i].nid == NID_undef ||
159 (md = EVP_get_digestbynid(dane_mds[i].nid)) == NULL)
160 continue;
161 mdevp[dane_mds[i].mtype] = md;
162 mdord[dane_mds[i].mtype] = dane_mds[i].ord;
163 }
164
165 dctx->mdevp = mdevp;
166 dctx->mdord = mdord;
167 dctx->mdmax = mdmax;
168
169 return 1;
170}
171
172static void dane_ctx_final(struct dane_ctx_st *dctx)
173{
174 OPENSSL_free(dctx->mdevp);
175 dctx->mdevp = NULL;
176
177 OPENSSL_free(dctx->mdord);
178 dctx->mdord = NULL;
179 dctx->mdmax = 0;
180}
181
182static void tlsa_free(danetls_record *t)
183{
184 if (t == NULL)
185 return;
186 OPENSSL_free(t->data);
187 EVP_PKEY_free(t->spki);
188 OPENSSL_free(t);
189}
190
b9aec69a 191static void dane_final(SSL_DANE *dane)
919ba009
VD
192{
193 sk_danetls_record_pop_free(dane->trecs, tlsa_free);
194 dane->trecs = NULL;
195
196 sk_X509_pop_free(dane->certs, X509_free);
197 dane->certs = NULL;
198
199 X509_free(dane->mcert);
200 dane->mcert = NULL;
201 dane->mtlsa = NULL;
202 dane->mdpth = -1;
203 dane->pdpth = -1;
204}
205
206/*
207 * dane_copy - Copy dane configuration, sans verification state.
208 */
209static int ssl_dane_dup(SSL *to, SSL *from)
210{
211 int num;
212 int i;
213
214 if (!DANETLS_ENABLED(&from->dane))
215 return 1;
216
e431363f 217 num = sk_danetls_record_num(from->dane.trecs);
919ba009 218 dane_final(&to->dane);
5ae4ceb9 219 to->dane.flags = from->dane.flags;
9f6b22b8 220 to->dane.dctx = &to->ctx->dane;
7a908204 221 to->dane.trecs = sk_danetls_record_new_reserve(NULL, num);
9f6b22b8
VD
222
223 if (to->dane.trecs == NULL) {
224 SSLerr(SSL_F_SSL_DANE_DUP, ERR_R_MALLOC_FAILURE);
225 return 0;
226 }
919ba009 227
919ba009
VD
228 for (i = 0; i < num; ++i) {
229 danetls_record *t = sk_danetls_record_value(from->dane.trecs, i);
9f6b22b8 230
919ba009
VD
231 if (SSL_dane_tlsa_add(to, t->usage, t->selector, t->mtype,
232 t->data, t->dlen) <= 0)
233 return 0;
234 }
235 return 1;
236}
237
a230b26e
EK
238static int dane_mtype_set(struct dane_ctx_st *dctx,
239 const EVP_MD *md, uint8_t mtype, uint8_t ord)
919ba009
VD
240{
241 int i;
242
243 if (mtype == DANETLS_MATCHING_FULL && md != NULL) {
a230b26e 244 SSLerr(SSL_F_DANE_MTYPE_SET, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL);
919ba009
VD
245 return 0;
246 }
247
248 if (mtype > dctx->mdmax) {
249 const EVP_MD **mdevp;
250 uint8_t *mdord;
a230b26e 251 int n = ((int)mtype) + 1;
919ba009
VD
252
253 mdevp = OPENSSL_realloc(dctx->mdevp, n * sizeof(*mdevp));
254 if (mdevp == NULL) {
255 SSLerr(SSL_F_DANE_MTYPE_SET, ERR_R_MALLOC_FAILURE);
256 return -1;
257 }
258 dctx->mdevp = mdevp;
259
260 mdord = OPENSSL_realloc(dctx->mdord, n * sizeof(*mdord));
261 if (mdord == NULL) {
262 SSLerr(SSL_F_DANE_MTYPE_SET, ERR_R_MALLOC_FAILURE);
263 return -1;
264 }
265 dctx->mdord = mdord;
266
267 /* Zero-fill any gaps */
a230b26e 268 for (i = dctx->mdmax + 1; i < mtype; ++i) {
919ba009
VD
269 mdevp[i] = NULL;
270 mdord[i] = 0;
271 }
272
273 dctx->mdmax = mtype;
274 }
275
276 dctx->mdevp[mtype] = md;
277 /* Coerce ordinal of disabled matching types to 0 */
278 dctx->mdord[mtype] = (md == NULL) ? 0 : ord;
279
280 return 1;
281}
282
b9aec69a 283static const EVP_MD *tlsa_md_get(SSL_DANE *dane, uint8_t mtype)
919ba009
VD
284{
285 if (mtype > dane->dctx->mdmax)
286 return NULL;
287 return dane->dctx->mdevp[mtype];
288}
289
a230b26e
EK
290static int dane_tlsa_add(SSL_DANE *dane,
291 uint8_t usage,
292 uint8_t selector,
a41a6120 293 uint8_t mtype, unsigned const char *data, size_t dlen)
919ba009
VD
294{
295 danetls_record *t;
296 const EVP_MD *md = NULL;
297 int ilen = (int)dlen;
298 int i;
9f6b22b8 299 int num;
919ba009
VD
300
301 if (dane->trecs == NULL) {
302 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_NOT_ENABLED);
303 return -1;
304 }
305
306 if (ilen < 0 || dlen != (size_t)ilen) {
307 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_DATA_LENGTH);
308 return 0;
309 }
310
311 if (usage > DANETLS_USAGE_LAST) {
312 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE);
313 return 0;
314 }
315
316 if (selector > DANETLS_SELECTOR_LAST) {
317 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_SELECTOR);
318 return 0;
319 }
320
321 if (mtype != DANETLS_MATCHING_FULL) {
322 md = tlsa_md_get(dane, mtype);
323 if (md == NULL) {
324 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE);
325 return 0;
326 }
327 }
328
329 if (md != NULL && dlen != (size_t)EVP_MD_size(md)) {
330 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH);
331 return 0;
332 }
333 if (!data) {
334 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_NULL_DATA);
335 return 0;
336 }
337
338 if ((t = OPENSSL_zalloc(sizeof(*t))) == NULL) {
339 SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
340 return -1;
341 }
342
343 t->usage = usage;
344 t->selector = selector;
345 t->mtype = mtype;
348240c6 346 t->data = OPENSSL_malloc(dlen);
919ba009
VD
347 if (t->data == NULL) {
348 tlsa_free(t);
349 SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
350 return -1;
351 }
348240c6
MC
352 memcpy(t->data, data, dlen);
353 t->dlen = dlen;
919ba009
VD
354
355 /* Validate and cache full certificate or public key */
356 if (mtype == DANETLS_MATCHING_FULL) {
357 const unsigned char *p = data;
358 X509 *cert = NULL;
359 EVP_PKEY *pkey = NULL;
360
361 switch (selector) {
362 case DANETLS_SELECTOR_CERT:
348240c6 363 if (!d2i_X509(&cert, &p, ilen) || p < data ||
919ba009
VD
364 dlen != (size_t)(p - data)) {
365 tlsa_free(t);
366 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
367 return 0;
368 }
369 if (X509_get0_pubkey(cert) == NULL) {
370 tlsa_free(t);
371 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
372 return 0;
373 }
374
375 if ((DANETLS_USAGE_BIT(usage) & DANETLS_TA_MASK) == 0) {
376 X509_free(cert);
377 break;
378 }
379
380 /*
381 * For usage DANE-TA(2), we support authentication via "2 0 0" TLSA
382 * records that contain full certificates of trust-anchors that are
383 * not present in the wire chain. For usage PKIX-TA(0), we augment
384 * the chain with untrusted Full(0) certificates from DNS, in case
385 * they are missing from the chain.
386 */
387 if ((dane->certs == NULL &&
388 (dane->certs = sk_X509_new_null()) == NULL) ||
389 !sk_X509_push(dane->certs, cert)) {
390 SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
391 X509_free(cert);
392 tlsa_free(t);
393 return -1;
394 }
395 break;
396
397 case DANETLS_SELECTOR_SPKI:
348240c6 398 if (!d2i_PUBKEY(&pkey, &p, ilen) || p < data ||
919ba009
VD
399 dlen != (size_t)(p - data)) {
400 tlsa_free(t);
401 SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY);
402 return 0;
403 }
404
405 /*
406 * For usage DANE-TA(2), we support authentication via "2 1 0" TLSA
407 * records that contain full bare keys of trust-anchors that are
408 * not present in the wire chain.
409 */
410 if (usage == DANETLS_USAGE_DANE_TA)
411 t->spki = pkey;
412 else
413 EVP_PKEY_free(pkey);
414 break;
415 }
416 }
417
418 /*-
419 * Find the right insertion point for the new record.
420 *
421 * See crypto/x509/x509_vfy.c. We sort DANE-EE(3) records first, so that
422 * they can be processed first, as they require no chain building, and no
423 * expiration or hostname checks. Because DANE-EE(3) is numerically
424 * largest, this is accomplished via descending sort by "usage".
425 *
426 * We also sort in descending order by matching ordinal to simplify
427 * the implementation of digest agility in the verification code.
428 *
429 * The choice of order for the selector is not significant, so we
430 * use the same descending order for consistency.
431 */
9f6b22b8
VD
432 num = sk_danetls_record_num(dane->trecs);
433 for (i = 0; i < num; ++i) {
919ba009 434 danetls_record *rec = sk_danetls_record_value(dane->trecs, i);
9f6b22b8 435
919ba009
VD
436 if (rec->usage > usage)
437 continue;
438 if (rec->usage < usage)
439 break;
440 if (rec->selector > selector)
441 continue;
442 if (rec->selector < selector)
443 break;
444 if (dane->dctx->mdord[rec->mtype] > dane->dctx->mdord[mtype])
445 continue;
446 break;
447 }
448
449 if (!sk_danetls_record_insert(dane->trecs, t, i)) {
450 tlsa_free(t);
451 SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
452 return -1;
453 }
454 dane->umask |= DANETLS_USAGE_BIT(usage);
455
456 return 1;
457}
458
c8feba72
BK
459/*
460 * Return 0 if there is only one version configured and it was disabled
461 * at configure time. Return 1 otherwise.
462 */
463static int ssl_check_allowed_versions(int min_version, int max_version)
464{
465 int minisdtls = 0, maxisdtls = 0;
466
467 /* Figure out if we're doing DTLS versions or TLS versions */
468 if (min_version == DTLS1_BAD_VER
469 || min_version >> 8 == DTLS1_VERSION_MAJOR)
470 minisdtls = 1;
471 if (max_version == DTLS1_BAD_VER
472 || max_version >> 8 == DTLS1_VERSION_MAJOR)
473 maxisdtls = 1;
474 /* A wildcard version of 0 could be DTLS or TLS. */
475 if ((minisdtls && !maxisdtls && max_version != 0)
476 || (maxisdtls && !minisdtls && min_version != 0)) {
477 /* Mixing DTLS and TLS versions will lead to sadness; deny it. */
478 return 0;
479 }
480
481 if (minisdtls || maxisdtls) {
482 /* Do DTLS version checks. */
483 if (min_version == 0)
484 /* Ignore DTLS1_BAD_VER */
485 min_version = DTLS1_VERSION;
486 if (max_version == 0)
487 max_version = DTLS1_2_VERSION;
488#ifdef OPENSSL_NO_DTLS1_2
489 if (max_version == DTLS1_2_VERSION)
490 max_version = DTLS1_VERSION;
491#endif
492#ifdef OPENSSL_NO_DTLS1
493 if (min_version == DTLS1_VERSION)
494 min_version = DTLS1_2_VERSION;
495#endif
79b4444d
DMSP
496 /* Done massaging versions; do the check. */
497 if (0
c8feba72
BK
498#ifdef OPENSSL_NO_DTLS1
499 || (DTLS_VERSION_GE(min_version, DTLS1_VERSION)
500 && DTLS_VERSION_GE(DTLS1_VERSION, max_version))
501#endif
502#ifdef OPENSSL_NO_DTLS1_2
503 || (DTLS_VERSION_GE(min_version, DTLS1_2_VERSION)
504 && DTLS_VERSION_GE(DTLS1_2_VERSION, max_version))
505#endif
506 )
507 return 0;
508 } else {
509 /* Regular TLS version checks. */
79b4444d
DMSP
510 if (min_version == 0)
511 min_version = SSL3_VERSION;
512 if (max_version == 0)
513 max_version = TLS1_3_VERSION;
c8feba72 514#ifdef OPENSSL_NO_TLS1_3
79b4444d
DMSP
515 if (max_version == TLS1_3_VERSION)
516 max_version = TLS1_2_VERSION;
c8feba72
BK
517#endif
518#ifdef OPENSSL_NO_TLS1_2
79b4444d
DMSP
519 if (max_version == TLS1_2_VERSION)
520 max_version = TLS1_1_VERSION;
c8feba72
BK
521#endif
522#ifdef OPENSSL_NO_TLS1_1
79b4444d
DMSP
523 if (max_version == TLS1_1_VERSION)
524 max_version = TLS1_VERSION;
c8feba72
BK
525#endif
526#ifdef OPENSSL_NO_TLS1
79b4444d
DMSP
527 if (max_version == TLS1_VERSION)
528 max_version = SSL3_VERSION;
c8feba72
BK
529#endif
530#ifdef OPENSSL_NO_SSL3
79b4444d
DMSP
531 if (min_version == SSL3_VERSION)
532 min_version = TLS1_VERSION;
c8feba72
BK
533#endif
534#ifdef OPENSSL_NO_TLS1
79b4444d
DMSP
535 if (min_version == TLS1_VERSION)
536 min_version = TLS1_1_VERSION;
c8feba72
BK
537#endif
538#ifdef OPENSSL_NO_TLS1_1
79b4444d
DMSP
539 if (min_version == TLS1_1_VERSION)
540 min_version = TLS1_2_VERSION;
c8feba72
BK
541#endif
542#ifdef OPENSSL_NO_TLS1_2
79b4444d
DMSP
543 if (min_version == TLS1_2_VERSION)
544 min_version = TLS1_3_VERSION;
c8feba72 545#endif
79b4444d
DMSP
546 /* Done massaging versions; do the check. */
547 if (0
c8feba72
BK
548#ifdef OPENSSL_NO_SSL3
549 || (min_version <= SSL3_VERSION && SSL3_VERSION <= max_version)
550#endif
551#ifdef OPENSSL_NO_TLS1
552 || (min_version <= TLS1_VERSION && TLS1_VERSION <= max_version)
553#endif
554#ifdef OPENSSL_NO_TLS1_1
555 || (min_version <= TLS1_1_VERSION && TLS1_1_VERSION <= max_version)
556#endif
557#ifdef OPENSSL_NO_TLS1_2
558 || (min_version <= TLS1_2_VERSION && TLS1_2_VERSION <= max_version)
559#endif
560#ifdef OPENSSL_NO_TLS1_3
561 || (min_version <= TLS1_3_VERSION && TLS1_3_VERSION <= max_version)
562#endif
563 )
564 return 0;
565 }
566 return 1;
567}
568
d31fb0b5
RS
569static void clear_ciphers(SSL *s)
570{
571 /* clear the current cipher */
572 ssl_clear_cipher_ctx(s);
573 ssl_clear_hash_ctx(&s->read_hash);
574 ssl_clear_hash_ctx(&s->write_hash);
575}
576
4f43d0e7 577int SSL_clear(SSL *s)
0f113f3e 578{
0f113f3e
MC
579 if (s->method == NULL) {
580 SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED);
a89325e4 581 return 0;
0f113f3e 582 }
d02b48c6 583
0f113f3e
MC
584 if (ssl_clear_bad_session(s)) {
585 SSL_SESSION_free(s->session);
586 s->session = NULL;
587 }
9368f865
MC
588 SSL_SESSION_free(s->psksession);
589 s->psksession = NULL;
add8d0e9
MC
590 OPENSSL_free(s->psksession_id);
591 s->psksession_id = NULL;
592 s->psksession_id_len = 0;
808d1601 593 s->hello_retry_request = 0;
d62bfb39 594
0f113f3e
MC
595 s->error = 0;
596 s->hit = 0;
597 s->shutdown = 0;
d02b48c6 598
0f113f3e
MC
599 if (s->renegotiate) {
600 SSLerr(SSL_F_SSL_CLEAR, ERR_R_INTERNAL_ERROR);
601 return 0;
602 }
d02b48c6 603
fe3a3291 604 ossl_statem_clear(s);
413c4f45 605
0f113f3e
MC
606 s->version = s->method->version;
607 s->client_version = s->version;
608 s->rwstate = SSL_NOTHING;
d02b48c6 609
25aaa98a
RS
610 BUF_MEM_free(s->init_buf);
611 s->init_buf = NULL;
d31fb0b5 612 clear_ciphers(s);
0f113f3e 613 s->first_packet = 0;
d02b48c6 614
44c04a2e
MC
615 s->key_update = SSL_KEY_UPDATE_NONE;
616
88834998
TS
617 EVP_MD_CTX_free(s->pha_dgst);
618 s->pha_dgst = NULL;
619
919ba009
VD
620 /* Reset DANE verification result state */
621 s->dane.mdpth = -1;
622 s->dane.pdpth = -1;
623 X509_free(s->dane.mcert);
624 s->dane.mcert = NULL;
625 s->dane.mtlsa = NULL;
626
627 /* Clear the verification result peername */
628 X509_VERIFY_PARAM_move_peername(s->param, NULL);
629
0f113f3e
MC
630 /*
631 * Check to see if we were changed into a different method, if so, revert
24252537 632 * back.
0f113f3e 633 */
24252537 634 if (s->method != s->ctx->method) {
0f113f3e
MC
635 s->method->ssl_free(s);
636 s->method = s->ctx->method;
637 if (!s->method->ssl_new(s))
a89325e4 638 return 0;
b77f3ed1
MC
639 } else {
640 if (!s->method->ssl_clear(s))
641 return 0;
642 }
33d23b87 643
af9752e5 644 RECORD_LAYER_clear(&s->rlayer);
33d23b87 645
a89325e4 646 return 1;
0f113f3e 647}
d02b48c6 648
4f43d0e7 649/** Used to change an SSL_CTXs default SSL method type */
0f113f3e
MC
650int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
651{
652 STACK_OF(SSL_CIPHER) *sk;
653
654 ctx->method = meth;
655
f865b081
MC
656 sk = ssl_create_cipher_list(ctx->method,
657 ctx->tls13_ciphersuites,
658 &(ctx->cipher_list),
0f113f3e
MC
659 &(ctx->cipher_list_by_id),
660 SSL_DEFAULT_CIPHER_LIST, ctx->cert);
661 if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
a230b26e 662 SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
26a7d938 663 return 0;
0f113f3e 664 }
208fb891 665 return 1;
0f113f3e 666}
d02b48c6 667
4f43d0e7 668SSL *SSL_new(SSL_CTX *ctx)
0f113f3e
MC
669{
670 SSL *s;
671
672 if (ctx == NULL) {
673 SSLerr(SSL_F_SSL_NEW, SSL_R_NULL_SSL_CTX);
26a7d938 674 return NULL;
0f113f3e
MC
675 }
676 if (ctx->method == NULL) {
677 SSLerr(SSL_F_SSL_NEW, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
26a7d938 678 return NULL;
0f113f3e
MC
679 }
680
b51bce94 681 s = OPENSSL_zalloc(sizeof(*s));
0f113f3e
MC
682 if (s == NULL)
683 goto err;
0f113f3e 684
e6b10c34 685 s->references = 1;
16203f7b 686 s->lock = CRYPTO_THREAD_lock_new();
e6b10c34
BE
687 if (s->lock == NULL) {
688 OPENSSL_free(s);
689 s = NULL;
ae3947de 690 goto err;
e6b10c34 691 }
ae3947de 692
c036e210 693 RECORD_LAYER_init(&s->rlayer, s);
28d59af8 694
0f113f3e 695 s->options = ctx->options;
5ae4ceb9 696 s->dane.flags = ctx->dane.flags;
7946ab33
KR
697 s->min_proto_version = ctx->min_proto_version;
698 s->max_proto_version = ctx->max_proto_version;
0f113f3e
MC
699 s->mode = ctx->mode;
700 s->max_cert_list = ctx->max_cert_list;
3fc8d856 701 s->max_early_data = ctx->max_early_data;
0f113f3e 702
f865b081
MC
703 /* Shallow copy of the ciphersuites stack */
704 s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites);
705 if (s->tls13_ciphersuites == NULL)
706 goto err;
707
2c382349
KR
708 /*
709 * Earlier library versions used to copy the pointer to the CERT, not
710 * its contents; only when setting new parameters for the per-SSL
711 * copy, ssl_cert_new would be called (and the direct reference to
712 * the per-SSL_CTX settings would be lost, but those still were
713 * indirectly accessed for various purposes, and for that reason they
714 * used to be known as s->ctx->default_cert). Now we don't look at the
715 * SSL_CTX's CERT after having duplicated it once.
716 */
717 s->cert = ssl_cert_dup(ctx->cert);
718 if (s->cert == NULL)
719 goto err;
0f113f3e 720
52e1d7b1 721 RECORD_LAYER_set_read_ahead(&s->rlayer, ctx->read_ahead);
0f113f3e
MC
722 s->msg_callback = ctx->msg_callback;
723 s->msg_callback_arg = ctx->msg_callback_arg;
724 s->verify_mode = ctx->verify_mode;
725 s->not_resumable_session_cb = ctx->not_resumable_session_cb;
c649d10d
TS
726 s->record_padding_cb = ctx->record_padding_cb;
727 s->record_padding_arg = ctx->record_padding_arg;
728 s->block_padding = ctx->block_padding;
0f113f3e 729 s->sid_ctx_length = ctx->sid_ctx_length;
cbe29648 730 if (!ossl_assert(s->sid_ctx_length <= sizeof(s->sid_ctx)))
380a522f 731 goto err;
0f113f3e
MC
732 memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
733 s->verify_callback = ctx->default_verify_callback;
734 s->generate_session_id = ctx->generate_session_id;
735
736 s->param = X509_VERIFY_PARAM_new();
a71edf3b 737 if (s->param == NULL)
0f113f3e
MC
738 goto err;
739 X509_VERIFY_PARAM_inherit(s->param, ctx->param);
0f113f3e 740 s->quiet_shutdown = ctx->quiet_shutdown;
cf72c757
F
741
742 s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
0f113f3e 743 s->max_send_fragment = ctx->max_send_fragment;
d102d9df
MC
744 s->split_send_fragment = ctx->split_send_fragment;
745 s->max_pipelines = ctx->max_pipelines;
94777c9c
MC
746 if (s->max_pipelines > 1)
747 RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
dad78fb1
MC
748 if (ctx->default_read_buf_len > 0)
749 SSL_set_default_read_buffer_len(s, ctx->default_read_buf_len);
bf21446a 750
16203f7b 751 SSL_CTX_up_ref(ctx);
0f113f3e 752 s->ctx = ctx;
aff8c126
RS
753 s->ext.debug_cb = 0;
754 s->ext.debug_arg = NULL;
755 s->ext.ticket_expected = 0;
756 s->ext.status_type = ctx->ext.status_type;
757 s->ext.status_expected = 0;
758 s->ext.ocsp.ids = NULL;
759 s->ext.ocsp.exts = NULL;
760 s->ext.ocsp.resp = NULL;
761 s->ext.ocsp.resp_len = 0;
16203f7b 762 SSL_CTX_up_ref(ctx);
222da979 763 s->session_ctx = ctx;
a230b26e 764#ifndef OPENSSL_NO_EC
aff8c126
RS
765 if (ctx->ext.ecpointformats) {
766 s->ext.ecpointformats =
767 OPENSSL_memdup(ctx->ext.ecpointformats,
768 ctx->ext.ecpointformats_len);
769 if (!s->ext.ecpointformats)
0f113f3e 770 goto err;
aff8c126
RS
771 s->ext.ecpointformats_len =
772 ctx->ext.ecpointformats_len;
773 }
774 if (ctx->ext.supportedgroups) {
775 s->ext.supportedgroups =
776 OPENSSL_memdup(ctx->ext.supportedgroups,
9e84a42d 777 ctx->ext.supportedgroups_len
b92d7b62 778 * sizeof(*ctx->ext.supportedgroups));
aff8c126 779 if (!s->ext.supportedgroups)
0f113f3e 780 goto err;
aff8c126 781 s->ext.supportedgroups_len = ctx->ext.supportedgroups_len;
0f113f3e 782 }
a230b26e
EK
783#endif
784#ifndef OPENSSL_NO_NEXTPROTONEG
aff8c126 785 s->ext.npn = NULL;
a230b26e 786#endif
6f017a8f 787
aff8c126
RS
788 if (s->ctx->ext.alpn) {
789 s->ext.alpn = OPENSSL_malloc(s->ctx->ext.alpn_len);
790 if (s->ext.alpn == NULL)
0f113f3e 791 goto err;
aff8c126
RS
792 memcpy(s->ext.alpn, s->ctx->ext.alpn, s->ctx->ext.alpn_len);
793 s->ext.alpn_len = s->ctx->ext.alpn_len;
0f113f3e 794 }
d02b48c6 795
696178ed 796 s->verified_chain = NULL;
0f113f3e 797 s->verify_result = X509_V_OK;
d02b48c6 798
a974e64a
MC
799 s->default_passwd_callback = ctx->default_passwd_callback;
800 s->default_passwd_callback_userdata = ctx->default_passwd_callback_userdata;
801
0f113f3e 802 s->method = ctx->method;
d02b48c6 803
44c04a2e
MC
804 s->key_update = SSL_KEY_UPDATE_NONE;
805
0f113f3e
MC
806 if (!s->method->ssl_new(s))
807 goto err;
d02b48c6 808
0f113f3e 809 s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1;
bf21446a 810
61986d32 811 if (!SSL_clear(s))
69f68237 812 goto err;
58964a49 813
25a807bc
F
814 if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data))
815 goto err;
58964a49 816
ddac1974 817#ifndef OPENSSL_NO_PSK
0f113f3e
MC
818 s->psk_client_callback = ctx->psk_client_callback;
819 s->psk_server_callback = ctx->psk_server_callback;
ddac1974 820#endif
f46184bd
MC
821 s->psk_find_session_cb = ctx->psk_find_session_cb;
822 s->psk_use_session_cb = ctx->psk_use_session_cb;
ddac1974 823
07bbc92c
MC
824 s->job = NULL;
825
ed29e82a
RP
826#ifndef OPENSSL_NO_CT
827 if (!SSL_set_ct_validation_callback(s, ctx->ct_validation_callback,
a230b26e 828 ctx->ct_validation_callback_arg))
ed29e82a
RP
829 goto err;
830#endif
831
16203f7b 832 return s;
0f113f3e 833 err:
62adbcee 834 SSL_free(s);
0f113f3e 835 SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE);
16203f7b 836 return NULL;
0f113f3e 837}
d02b48c6 838
e417070c
RS
839int SSL_is_dtls(const SSL *s)
840{
841 return SSL_IS_DTLS(s) ? 1 : 0;
842}
843
c5ebfcab 844int SSL_up_ref(SSL *s)
a18a31e4 845{
16203f7b 846 int i;
c5ebfcab 847
2f545ae4 848 if (CRYPTO_UP_REF(&s->references, &i, s->lock) <= 0)
c5ebfcab
F
849 return 0;
850
851 REF_PRINT_COUNT("SSL", s);
852 REF_ASSERT_ISNT(i < 2);
853 return ((i > 1) ? 1 : 0);
a18a31e4
MC
854}
855
0f113f3e
MC
856int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
857 unsigned int sid_ctx_len)
858{
cbe29648 859 if (sid_ctx_len > sizeof(ctx->sid_ctx)) {
0f113f3e
MC
860 SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT,
861 SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
862 return 0;
863 }
864 ctx->sid_ctx_length = sid_ctx_len;
865 memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
4eb77b26
BM
866
867 return 1;
0f113f3e 868}
4eb77b26 869
0f113f3e
MC
870int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
871 unsigned int sid_ctx_len)
872{
873 if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
874 SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT,
875 SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
876 return 0;
877 }
878 ssl->sid_ctx_length = sid_ctx_len;
879 memcpy(ssl->sid_ctx, sid_ctx, sid_ctx_len);
b4cadc6e
BL
880
881 return 1;
0f113f3e 882}
b4cadc6e 883
dc644fe2 884int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
0f113f3e 885{
16203f7b 886 CRYPTO_THREAD_write_lock(ctx->lock);
0f113f3e 887 ctx->generate_session_id = cb;
16203f7b 888 CRYPTO_THREAD_unlock(ctx->lock);
0f113f3e
MC
889 return 1;
890}
dc644fe2
GT
891
892int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
0f113f3e 893{
16203f7b 894 CRYPTO_THREAD_write_lock(ssl->lock);
0f113f3e 895 ssl->generate_session_id = cb;
16203f7b 896 CRYPTO_THREAD_unlock(ssl->lock);
0f113f3e
MC
897 return 1;
898}
dc644fe2 899
f85c9904 900int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
0f113f3e
MC
901 unsigned int id_len)
902{
903 /*
904 * A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how
69687aa8 905 * we can "construct" a session to give us the desired check - i.e. to
0f113f3e
MC
906 * find if there's a session in the hash table that would conflict with
907 * any new session built out of this id/id_len and the ssl_version in use
908 * by this SSL.
909 */
910 SSL_SESSION r, *p;
911
cbe29648 912 if (id_len > sizeof(r.session_id))
0f113f3e
MC
913 return 0;
914
915 r.ssl_version = ssl->version;
916 r.session_id_length = id_len;
917 memcpy(r.session_id, id, id_len);
918
e2bb9b9b
TS
919 CRYPTO_THREAD_read_lock(ssl->session_ctx->lock);
920 p = lh_SSL_SESSION_retrieve(ssl->session_ctx->sessions, &r);
921 CRYPTO_THREAD_unlock(ssl->session_ctx->lock);
0f113f3e
MC
922 return (p != NULL);
923}
dc644fe2 924
bb7cd4e3 925int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
0f113f3e
MC
926{
927 return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
928}
bb7cd4e3
DSH
929
930int SSL_set_purpose(SSL *s, int purpose)
0f113f3e
MC
931{
932 return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
933}
926a56bf 934
bb7cd4e3 935int SSL_CTX_set_trust(SSL_CTX *s, int trust)
0f113f3e
MC
936{
937 return X509_VERIFY_PARAM_set_trust(s->param, trust);
938}
bb7cd4e3
DSH
939
940int SSL_set_trust(SSL *s, int trust)
0f113f3e
MC
941{
942 return X509_VERIFY_PARAM_set_trust(s->param, trust);
943}
bb7cd4e3 944
919ba009
VD
945int SSL_set1_host(SSL *s, const char *hostname)
946{
947 return X509_VERIFY_PARAM_set1_host(s->param, hostname, 0);
948}
949
950int SSL_add1_host(SSL *s, const char *hostname)
951{
952 return X509_VERIFY_PARAM_add1_host(s->param, hostname, 0);
953}
954
955void SSL_set_hostflags(SSL *s, unsigned int flags)
956{
957 X509_VERIFY_PARAM_set_hostflags(s->param, flags);
958}
959
4588cb44 960const char *SSL_get0_peername(SSL *s)
919ba009
VD
961{
962 return X509_VERIFY_PARAM_get0_peername(s->param);
963}
964
965int SSL_CTX_dane_enable(SSL_CTX *ctx)
966{
967 return dane_ctx_enable(&ctx->dane);
968}
969
5ae4ceb9
VD
970unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags)
971{
972 unsigned long orig = ctx->dane.flags;
973
974 ctx->dane.flags |= flags;
975 return orig;
976}
977
978unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags)
979{
980 unsigned long orig = ctx->dane.flags;
981
982 ctx->dane.flags &= ~flags;
983 return orig;
984}
985
919ba009
VD
986int SSL_dane_enable(SSL *s, const char *basedomain)
987{
b9aec69a 988 SSL_DANE *dane = &s->dane;
919ba009
VD
989
990 if (s->ctx->dane.mdmax == 0) {
991 SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_CONTEXT_NOT_DANE_ENABLED);
992 return 0;
993 }
994 if (dane->trecs != NULL) {
995 SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_DANE_ALREADY_ENABLED);
996 return 0;
997 }
998
8d887efa
VD
999 /*
1000 * Default SNI name. This rejects empty names, while set1_host below
1001 * accepts them and disables host name checks. To avoid side-effects with
1002 * invalid input, set the SNI name first.
1003 */
aff8c126 1004 if (s->ext.hostname == NULL) {
dccd20d1 1005 if (!SSL_set_tlsext_host_name(s, basedomain)) {
8d887efa 1006 SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
dccd20d1 1007 return -1;
8d887efa
VD
1008 }
1009 }
1010
919ba009
VD
1011 /* Primary RFC6125 reference identifier */
1012 if (!X509_VERIFY_PARAM_set1_host(s->param, basedomain, 0)) {
1013 SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
1014 return -1;
1015 }
1016
919ba009
VD
1017 dane->mdpth = -1;
1018 dane->pdpth = -1;
1019 dane->dctx = &s->ctx->dane;
1020 dane->trecs = sk_danetls_record_new_null();
1021
1022 if (dane->trecs == NULL) {
1023 SSLerr(SSL_F_SSL_DANE_ENABLE, ERR_R_MALLOC_FAILURE);
1024 return -1;
1025 }
1026 return 1;
1027}
1028
5ae4ceb9
VD
1029unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags)
1030{
1031 unsigned long orig = ssl->dane.flags;
1032
1033 ssl->dane.flags |= flags;
1034 return orig;
1035}
1036
1037unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags)
1038{
1039 unsigned long orig = ssl->dane.flags;
1040
1041 ssl->dane.flags &= ~flags;
1042 return orig;
1043}
1044
919ba009
VD
1045int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki)
1046{
b9aec69a 1047 SSL_DANE *dane = &s->dane;
919ba009 1048
c0a445a9 1049 if (!DANETLS_ENABLED(dane) || s->verify_result != X509_V_OK)
919ba009
VD
1050 return -1;
1051 if (dane->mtlsa) {
1052 if (mcert)
1053 *mcert = dane->mcert;
1054 if (mspki)
1055 *mspki = (dane->mcert == NULL) ? dane->mtlsa->spki : NULL;
1056 }
1057 return dane->mdpth;
1058}
1059
1060int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
1061 uint8_t *mtype, unsigned const char **data, size_t *dlen)
1062{
b9aec69a 1063 SSL_DANE *dane = &s->dane;
919ba009 1064
c0a445a9 1065 if (!DANETLS_ENABLED(dane) || s->verify_result != X509_V_OK)
919ba009
VD
1066 return -1;
1067 if (dane->mtlsa) {
1068 if (usage)
1069 *usage = dane->mtlsa->usage;
1070 if (selector)
1071 *selector = dane->mtlsa->selector;
1072 if (mtype)
1073 *mtype = dane->mtlsa->mtype;
1074 if (data)
1075 *data = dane->mtlsa->data;
1076 if (dlen)
1077 *dlen = dane->mtlsa->dlen;
1078 }
1079 return dane->mdpth;
1080}
1081
b9aec69a 1082SSL_DANE *SSL_get0_dane(SSL *s)
919ba009
VD
1083{
1084 return &s->dane;
1085}
1086
1087int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
a41a6120 1088 uint8_t mtype, unsigned const char *data, size_t dlen)
919ba009
VD
1089{
1090 return dane_tlsa_add(&s->dane, usage, selector, mtype, data, dlen);
1091}
1092
a230b26e
EK
1093int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype,
1094 uint8_t ord)
919ba009
VD
1095{
1096 return dane_mtype_set(&ctx->dane, md, mtype, ord);
1097}
1098
ccf11751 1099int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
0f113f3e
MC
1100{
1101 return X509_VERIFY_PARAM_set1(ctx->param, vpm);
1102}
ccf11751
DSH
1103
1104int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
0f113f3e
MC
1105{
1106 return X509_VERIFY_PARAM_set1(ssl->param, vpm);
1107}
ccf11751 1108
7af31968 1109X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
0f113f3e
MC
1110{
1111 return ctx->param;
1112}
7af31968
DSH
1113
1114X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
0f113f3e
MC
1115{
1116 return ssl->param;
1117}
7af31968 1118
a5ee80b9 1119void SSL_certs_clear(SSL *s)
0f113f3e
MC
1120{
1121 ssl_cert_clear_certs(s->cert);
1122}
a5ee80b9 1123
4f43d0e7 1124void SSL_free(SSL *s)
0f113f3e
MC
1125{
1126 int i;
58964a49 1127
e6e9170d
RS
1128 if (s == NULL)
1129 return;
2f545ae4 1130 CRYPTO_DOWN_REF(&s->references, &i, s->lock);
f3f1cf84 1131 REF_PRINT_COUNT("SSL", s);
0f113f3e
MC
1132 if (i > 0)
1133 return;
f3f1cf84 1134 REF_ASSERT_ISNT(i < 0);
d02b48c6 1135
222561fe 1136 X509_VERIFY_PARAM_free(s->param);
919ba009 1137 dane_final(&s->dane);
0f113f3e
MC
1138 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
1139
b77f3ed1 1140 /* Ignore return value */
2e7dc7cd
MC
1141 ssl_free_wbio_buffer(s);
1142
65e2d672 1143 BIO_free_all(s->wbio);
325cfa85 1144 BIO_free_all(s->rbio);
0f113f3e 1145
25aaa98a 1146 BUF_MEM_free(s->init_buf);
0f113f3e
MC
1147
1148 /* add extra stuff */
25aaa98a
RS
1149 sk_SSL_CIPHER_free(s->cipher_list);
1150 sk_SSL_CIPHER_free(s->cipher_list_by_id);
f865b081 1151 sk_SSL_CIPHER_free(s->tls13_ciphersuites);
0f113f3e
MC
1152
1153 /* Make the next call work :-) */
1154 if (s->session != NULL) {
1155 ssl_clear_bad_session(s);
1156 SSL_SESSION_free(s->session);
1157 }
9368f865 1158 SSL_SESSION_free(s->psksession);
add8d0e9 1159 OPENSSL_free(s->psksession_id);
0f113f3e 1160
d31fb0b5 1161 clear_ciphers(s);
d02b48c6 1162
e0e920b1 1163 ssl_cert_free(s->cert);
0f113f3e 1164 /* Free up if allocated */
d02b48c6 1165
aff8c126 1166 OPENSSL_free(s->ext.hostname);
222da979 1167 SSL_CTX_free(s->session_ctx);
e481f9b9 1168#ifndef OPENSSL_NO_EC
aff8c126
RS
1169 OPENSSL_free(s->ext.ecpointformats);
1170 OPENSSL_free(s->ext.supportedgroups);
a230b26e 1171#endif /* OPENSSL_NO_EC */
aff8c126 1172 sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts, X509_EXTENSION_free);
3e41ac35 1173#ifndef OPENSSL_NO_OCSP
aff8c126 1174 sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
3e41ac35 1175#endif
ed29e82a
RP
1176#ifndef OPENSSL_NO_CT
1177 SCT_LIST_free(s->scts);
aff8c126 1178 OPENSSL_free(s->ext.scts);
ed29e82a 1179#endif
aff8c126
RS
1180 OPENSSL_free(s->ext.ocsp.resp);
1181 OPENSSL_free(s->ext.alpn);
cfef5027 1182 OPENSSL_free(s->ext.tls13_cookie);
6b1bb98f 1183 OPENSSL_free(s->clienthello);
9d75dce3
TS
1184 OPENSSL_free(s->pha_context);
1185 EVP_MD_CTX_free(s->pha_dgst);
0f113f3e 1186
fa7c2637 1187 sk_X509_NAME_pop_free(s->ca_names, X509_NAME_free);
0f113f3e 1188
696178ed
DSH
1189 sk_X509_pop_free(s->verified_chain, X509_free);
1190
0f113f3e
MC
1191 if (s->method != NULL)
1192 s->method->ssl_free(s);
1193
f161995e 1194 RECORD_LAYER_release(&s->rlayer);
33d23b87 1195
e0e920b1 1196 SSL_CTX_free(s->ctx);
7c3908dd 1197
ff75a257
MC
1198 ASYNC_WAIT_CTX_free(s->waitctx);
1199
e481f9b9 1200#if !defined(OPENSSL_NO_NEXTPROTONEG)
aff8c126 1201 OPENSSL_free(s->ext.npn);
ee2ffc27
BL
1202#endif
1203
e783bae2 1204#ifndef OPENSSL_NO_SRTP
25aaa98a 1205 sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
0f113f3e
MC
1206#endif
1207
16203f7b
AG
1208 CRYPTO_THREAD_lock_free(s->lock);
1209
0f113f3e
MC
1210 OPENSSL_free(s);
1211}
1212
65e2d672 1213void SSL_set0_rbio(SSL *s, BIO *rbio)
3ffbe008 1214{
65e2d672 1215 BIO_free_all(s->rbio);
3ffbe008
MC
1216 s->rbio = rbio;
1217}
1218
65e2d672 1219void SSL_set0_wbio(SSL *s, BIO *wbio)
0f113f3e
MC
1220{
1221 /*
1222 * If the output buffering BIO is still in place, remove it
1223 */
2e7dc7cd
MC
1224 if (s->bbio != NULL)
1225 s->wbio = BIO_pop(s->wbio);
1226
65e2d672 1227 BIO_free_all(s->wbio);
0f113f3e 1228 s->wbio = wbio;
2e7dc7cd
MC
1229
1230 /* Re-attach |bbio| to the new |wbio|. */
1231 if (s->bbio != NULL)
1232 s->wbio = BIO_push(s->bbio, s->wbio);
0f113f3e 1233}
d02b48c6 1234
3ffbe008
MC
1235void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio)
1236{
65e2d672
MC
1237 /*
1238 * For historical reasons, this function has many different cases in
1239 * ownership handling.
1240 */
1241
1242 /* If nothing has changed, do nothing */
1243 if (rbio == SSL_get_rbio(s) && wbio == SSL_get_wbio(s))
1244 return;
1245
1246 /*
1247 * If the two arguments are equal then one fewer reference is granted by the
1248 * caller than we want to take
1249 */
1250 if (rbio != NULL && rbio == wbio)
1251 BIO_up_ref(rbio);
1252
1253 /*
1254 * If only the wbio is changed only adopt one reference.
1255 */
1256 if (rbio == SSL_get_rbio(s)) {
1257 SSL_set0_wbio(s, wbio);
1258 return;
1259 }
1260 /*
1261 * There is an asymmetry here for historical reasons. If only the rbio is
1262 * changed AND the rbio and wbio were originally different, then we only
1263 * adopt one reference.
1264 */
1265 if (wbio == SSL_get_wbio(s) && SSL_get_rbio(s) != SSL_get_wbio(s)) {
1266 SSL_set0_rbio(s, rbio);
1267 return;
1268 }
1269
1270 /* Otherwise, adopt both references. */
1271 SSL_set0_rbio(s, rbio);
1272 SSL_set0_wbio(s, wbio);
3ffbe008
MC
1273}
1274
0821bcd4 1275BIO *SSL_get_rbio(const SSL *s)
0f113f3e 1276{
2e7dc7cd 1277 return s->rbio;
0f113f3e 1278}
d02b48c6 1279
0821bcd4 1280BIO *SSL_get_wbio(const SSL *s)
0f113f3e 1281{
2e7dc7cd
MC
1282 if (s->bbio != NULL) {
1283 /*
1284 * If |bbio| is active, the true caller-configured BIO is its
1285 * |next_bio|.
1286 */
1287 return BIO_next(s->bbio);
1288 }
1289 return s->wbio;
0f113f3e 1290}
d02b48c6 1291
0821bcd4 1292int SSL_get_fd(const SSL *s)
0f113f3e 1293{
2e7dc7cd 1294 return SSL_get_rfd(s);
0f113f3e 1295}
24cbf3ef 1296
0821bcd4 1297int SSL_get_rfd(const SSL *s)
0f113f3e
MC
1298{
1299 int ret = -1;
1300 BIO *b, *r;
1301
1302 b = SSL_get_rbio(s);
1303 r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
1304 if (r != NULL)
1305 BIO_get_fd(r, &ret);
26a7d938 1306 return ret;
0f113f3e 1307}
d02b48c6 1308
0821bcd4 1309int SSL_get_wfd(const SSL *s)
0f113f3e
MC
1310{
1311 int ret = -1;
1312 BIO *b, *r;
1313
1314 b = SSL_get_wbio(s);
1315 r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
1316 if (r != NULL)
1317 BIO_get_fd(r, &ret);
26a7d938 1318 return ret;
0f113f3e 1319}
24cbf3ef 1320
bc36ee62 1321#ifndef OPENSSL_NO_SOCK
0f113f3e
MC
1322int SSL_set_fd(SSL *s, int fd)
1323{
1324 int ret = 0;
1325 BIO *bio = NULL;
1326
1327 bio = BIO_new(BIO_s_socket());
1328
1329 if (bio == NULL) {
1330 SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB);
1331 goto err;
1332 }
1333 BIO_set_fd(bio, fd, BIO_NOCLOSE);
1334 SSL_set_bio(s, bio, bio);
1335 ret = 1;
1336 err:
26a7d938 1337 return ret;
0f113f3e 1338}
d02b48c6 1339
0f113f3e
MC
1340int SSL_set_wfd(SSL *s, int fd)
1341{
2e7dc7cd 1342 BIO *rbio = SSL_get_rbio(s);
0f113f3e 1343
2e7dc7cd
MC
1344 if (rbio == NULL || BIO_method_type(rbio) != BIO_TYPE_SOCKET
1345 || (int)BIO_get_fd(rbio, NULL) != fd) {
1346 BIO *bio = BIO_new(BIO_s_socket());
0f113f3e
MC
1347
1348 if (bio == NULL) {
1349 SSLerr(SSL_F_SSL_SET_WFD, ERR_R_BUF_LIB);
2e7dc7cd 1350 return 0;
0f113f3e
MC
1351 }
1352 BIO_set_fd(bio, fd, BIO_NOCLOSE);
65e2d672 1353 SSL_set0_wbio(s, bio);
2e7dc7cd 1354 } else {
65e2d672
MC
1355 BIO_up_ref(rbio);
1356 SSL_set0_wbio(s, rbio);
2e7dc7cd
MC
1357 }
1358 return 1;
0f113f3e
MC
1359}
1360
1361int SSL_set_rfd(SSL *s, int fd)
1362{
2e7dc7cd 1363 BIO *wbio = SSL_get_wbio(s);
0f113f3e 1364
2e7dc7cd
MC
1365 if (wbio == NULL || BIO_method_type(wbio) != BIO_TYPE_SOCKET
1366 || ((int)BIO_get_fd(wbio, NULL) != fd)) {
1367 BIO *bio = BIO_new(BIO_s_socket());
0f113f3e
MC
1368
1369 if (bio == NULL) {
1370 SSLerr(SSL_F_SSL_SET_RFD, ERR_R_BUF_LIB);
2e7dc7cd 1371 return 0;
0f113f3e
MC
1372 }
1373 BIO_set_fd(bio, fd, BIO_NOCLOSE);
65e2d672 1374 SSL_set0_rbio(s, bio);
2e7dc7cd 1375 } else {
65e2d672
MC
1376 BIO_up_ref(wbio);
1377 SSL_set0_rbio(s, wbio);
2e7dc7cd
MC
1378 }
1379
1380 return 1;
0f113f3e
MC
1381}
1382#endif
ca03109c
BM
1383
1384/* return length of latest Finished message we sent, copy to 'buf' */
0821bcd4 1385size_t SSL_get_finished(const SSL *s, void *buf, size_t count)
0f113f3e
MC
1386{
1387 size_t ret = 0;
1388
1389 if (s->s3 != NULL) {
1390 ret = s->s3->tmp.finish_md_len;
1391 if (count > ret)
1392 count = ret;
1393 memcpy(buf, s->s3->tmp.finish_md, count);
1394 }
1395 return ret;
1396}
ca03109c
BM
1397
1398/* return length of latest Finished message we expected, copy to 'buf' */
0821bcd4 1399size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
0f113f3e
MC
1400{
1401 size_t ret = 0;
ca03109c 1402
0f113f3e
MC
1403 if (s->s3 != NULL) {
1404 ret = s->s3->tmp.peer_finish_md_len;
1405 if (count > ret)
1406 count = ret;
1407 memcpy(buf, s->s3->tmp.peer_finish_md, count);
1408 }
1409 return ret;
1410}
ca03109c 1411
0821bcd4 1412int SSL_get_verify_mode(const SSL *s)
0f113f3e 1413{
26a7d938 1414 return s->verify_mode;
0f113f3e 1415}
d02b48c6 1416
0821bcd4 1417int SSL_get_verify_depth(const SSL *s)
0f113f3e
MC
1418{
1419 return X509_VERIFY_PARAM_get_depth(s->param);
1420}
7f89714e 1421
0f113f3e 1422int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *) {
26a7d938 1423 return s->verify_callback;
0f113f3e 1424}
d02b48c6 1425
0821bcd4 1426int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
0f113f3e 1427{
26a7d938 1428 return ctx->verify_mode;
0f113f3e 1429}
d02b48c6 1430
0821bcd4 1431int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
0f113f3e
MC
1432{
1433 return X509_VERIFY_PARAM_get_depth(ctx->param);
1434}
1435
1436int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, X509_STORE_CTX *) {
26a7d938 1437 return ctx->default_verify_callback;
0f113f3e
MC
1438}
1439
1440void SSL_set_verify(SSL *s, int mode,
1441 int (*callback) (int ok, X509_STORE_CTX *ctx))
1442{
1443 s->verify_mode = mode;
1444 if (callback != NULL)
1445 s->verify_callback = callback;
1446}
1447
1448void SSL_set_verify_depth(SSL *s, int depth)
1449{
1450 X509_VERIFY_PARAM_set_depth(s->param, depth);
1451}
1452
1453void SSL_set_read_ahead(SSL *s, int yes)
1454{
52e1d7b1 1455 RECORD_LAYER_set_read_ahead(&s->rlayer, yes);
0f113f3e 1456}
d02b48c6 1457
0821bcd4 1458int SSL_get_read_ahead(const SSL *s)
0f113f3e 1459{
52e1d7b1 1460 return RECORD_LAYER_get_read_ahead(&s->rlayer);
0f113f3e 1461}
d02b48c6 1462
0821bcd4 1463int SSL_pending(const SSL *s)
0f113f3e 1464{
8b0e934a
MC
1465 size_t pending = s->method->ssl_pending(s);
1466
0f113f3e
MC
1467 /*
1468 * SSL_pending cannot work properly if read-ahead is enabled
1469 * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), and it is
1470 * impossible to fix since SSL_pending cannot report errors that may be
1471 * observed while scanning the new data. (Note that SSL_pending() is
1472 * often used as a boolean value, so we'd better not return -1.)
8b0e934a
MC
1473 *
1474 * SSL_pending also cannot work properly if the value >INT_MAX. In that case
1475 * we just return INT_MAX.
0f113f3e 1476 */
348240c6 1477 return pending < INT_MAX ? (int)pending : INT_MAX;
0f113f3e 1478}
d02b48c6 1479
49580f25
MC
1480int SSL_has_pending(const SSL *s)
1481{
1482 /*
1483 * Similar to SSL_pending() but returns a 1 to indicate that we have
1484 * unprocessed data available or 0 otherwise (as opposed to the number of
1485 * bytes available). Unlike SSL_pending() this will take into account
1486 * read_ahead data. A 1 return simply indicates that we have unprocessed
1487 * data. That data may not result in any application data, or we may fail
1488 * to parse the records for some reason.
1489 */
b8c49611 1490 if (RECORD_LAYER_processed_read_pending(&s->rlayer))
49580f25
MC
1491 return 1;
1492
1493 return RECORD_LAYER_read_pending(&s->rlayer);
1494}
1495
0821bcd4 1496X509 *SSL_get_peer_certificate(const SSL *s)
0f113f3e
MC
1497{
1498 X509 *r;
d02b48c6 1499
0f113f3e
MC
1500 if ((s == NULL) || (s->session == NULL))
1501 r = NULL;
1502 else
1503 r = s->session->peer;
d02b48c6 1504
0f113f3e 1505 if (r == NULL)
26a7d938 1506 return r;
d02b48c6 1507
05f0fb9f 1508 X509_up_ref(r);
0f113f3e 1509
26a7d938 1510 return r;
0f113f3e 1511}
d02b48c6 1512
0821bcd4 1513STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
0f113f3e
MC
1514{
1515 STACK_OF(X509) *r;
1516
c34b0f99 1517 if ((s == NULL) || (s->session == NULL))
0f113f3e
MC
1518 r = NULL;
1519 else
c34b0f99 1520 r = s->session->peer_chain;
0f113f3e
MC
1521
1522 /*
1523 * If we are a client, cert_chain includes the peer's own certificate; if
1524 * we are a server, it does not.
1525 */
1526
26a7d938 1527 return r;
0f113f3e
MC
1528}
1529
1530/*
1531 * Now in theory, since the calling process own 't' it should be safe to
1532 * modify. We need to be able to read f without being hassled
1533 */
17dd65e6 1534int SSL_copy_session_id(SSL *t, const SSL *f)
0f113f3e 1535{
16203f7b 1536 int i;
0f113f3e 1537 /* Do we need to to SSL locking? */
61986d32 1538 if (!SSL_set_session(t, SSL_get_session(f))) {
17dd65e6 1539 return 0;
69f68237 1540 }
0f113f3e
MC
1541
1542 /*
87d9cafa 1543 * what if we are setup for one protocol version but want to talk another
0f113f3e
MC
1544 */
1545 if (t->method != f->method) {
919ba009
VD
1546 t->method->ssl_free(t);
1547 t->method = f->method;
1548 if (t->method->ssl_new(t) == 0)
1549 return 0;
0f113f3e
MC
1550 }
1551
2f545ae4 1552 CRYPTO_UP_REF(&f->cert->references, &i, f->cert->lock);
24a0d393
KR
1553 ssl_cert_free(t->cert);
1554 t->cert = f->cert;
348240c6 1555 if (!SSL_set_session_id_context(t, f->sid_ctx, (int)f->sid_ctx_length)) {
17dd65e6 1556 return 0;
69f68237 1557 }
17dd65e6
MC
1558
1559 return 1;
0f113f3e 1560}
d02b48c6 1561
58964a49 1562/* Fix this so it checks all the valid key/cert options */
0821bcd4 1563int SSL_CTX_check_private_key(const SSL_CTX *ctx)
0f113f3e 1564{
a230b26e
EK
1565 if ((ctx == NULL) || (ctx->cert->key->x509 == NULL)) {
1566 SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
26a7d938 1567 return 0;
0f113f3e
MC
1568 }
1569 if (ctx->cert->key->privatekey == NULL) {
a230b26e 1570 SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
26a7d938 1571 return 0;
0f113f3e 1572 }
26a7d938
K
1573 return X509_check_private_key
1574 (ctx->cert->key->x509, ctx->cert->key->privatekey);
0f113f3e 1575}
d02b48c6 1576
58964a49 1577/* Fix this function so that it takes an optional type parameter */
0821bcd4 1578int SSL_check_private_key(const SSL *ssl)
0f113f3e
MC
1579{
1580 if (ssl == NULL) {
1581 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, ERR_R_PASSED_NULL_PARAMETER);
26a7d938 1582 return 0;
0f113f3e 1583 }
0f113f3e
MC
1584 if (ssl->cert->key->x509 == NULL) {
1585 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
26a7d938 1586 return 0;
0f113f3e
MC
1587 }
1588 if (ssl->cert->key->privatekey == NULL) {
1589 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
26a7d938 1590 return 0;
0f113f3e 1591 }
26a7d938
K
1592 return X509_check_private_key(ssl->cert->key->x509,
1593 ssl->cert->key->privatekey);
0f113f3e 1594}
d02b48c6 1595
07bbc92c
MC
1596int SSL_waiting_for_async(SSL *s)
1597{
e8aa8b6c 1598 if (s->job)
82676094
MC
1599 return 1;
1600
07bbc92c
MC
1601 return 0;
1602}
1603
ff75a257 1604int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds)
f4da39d2 1605{
ff75a257
MC
1606 ASYNC_WAIT_CTX *ctx = s->waitctx;
1607
1608 if (ctx == NULL)
1609 return 0;
1610 return ASYNC_WAIT_CTX_get_all_fds(ctx, fds, numfds);
1611}
f4da39d2 1612
ff75a257
MC
1613int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds,
1614 OSSL_ASYNC_FD *delfd, size_t *numdelfds)
1615{
1616 ASYNC_WAIT_CTX *ctx = s->waitctx;
1617
1618 if (ctx == NULL)
1619 return 0;
1620 return ASYNC_WAIT_CTX_get_changed_fds(ctx, addfd, numaddfds, delfd,
1621 numdelfds);
f4da39d2
MC
1622}
1623
4f43d0e7 1624int SSL_accept(SSL *s)
0f113f3e 1625{
c4c32155 1626 if (s->handshake_func == NULL) {
0f113f3e
MC
1627 /* Not properly initialized yet */
1628 SSL_set_accept_state(s);
07bbc92c 1629 }
add2f5ca
MC
1630
1631 return SSL_do_handshake(s);
0f113f3e 1632}
d02b48c6 1633
4f43d0e7 1634int SSL_connect(SSL *s)
0f113f3e 1635{
c4c32155 1636 if (s->handshake_func == NULL) {
0f113f3e
MC
1637 /* Not properly initialized yet */
1638 SSL_set_connect_state(s);
add2f5ca 1639 }
b31b04d9 1640
add2f5ca 1641 return SSL_do_handshake(s);
0f113f3e 1642}
d02b48c6 1643
0821bcd4 1644long SSL_get_default_timeout(const SSL *s)
0f113f3e 1645{
26a7d938 1646 return s->method->get_timeout();
0f113f3e
MC
1647}
1648
7fecbf6f 1649static int ssl_start_async_job(SSL *s, struct ssl_async_args *args,
a230b26e
EK
1650 int (*func) (void *))
1651{
add2f5ca 1652 int ret;
ff75a257
MC
1653 if (s->waitctx == NULL) {
1654 s->waitctx = ASYNC_WAIT_CTX_new();
1655 if (s->waitctx == NULL)
1656 return -1;
1657 }
e8aa8b6c 1658 switch (ASYNC_start_job(&s->job, s->waitctx, &ret, func, args,
a230b26e 1659 sizeof(struct ssl_async_args))) {
add2f5ca
MC
1660 case ASYNC_ERR:
1661 s->rwstate = SSL_NOTHING;
7fecbf6f 1662 SSLerr(SSL_F_SSL_START_ASYNC_JOB, SSL_R_FAILED_TO_INIT_ASYNC);
add2f5ca
MC
1663 return -1;
1664 case ASYNC_PAUSE:
1665 s->rwstate = SSL_ASYNC_PAUSED;
1666 return -1;
fc7f190c
MC
1667 case ASYNC_NO_JOBS:
1668 s->rwstate = SSL_ASYNC_NO_JOBS;
1669 return -1;
add2f5ca
MC
1670 case ASYNC_FINISH:
1671 s->job = NULL;
1672 return ret;
1673 default:
1674 s->rwstate = SSL_NOTHING;
7fecbf6f 1675 SSLerr(SSL_F_SSL_START_ASYNC_JOB, ERR_R_INTERNAL_ERROR);
add2f5ca
MC
1676 /* Shouldn't happen */
1677 return -1;
1678 }
1679}
07bbc92c 1680
add2f5ca 1681static int ssl_io_intern(void *vargs)
07bbc92c
MC
1682{
1683 struct ssl_async_args *args;
1684 SSL *s;
1685 void *buf;
348240c6 1686 size_t num;
07bbc92c
MC
1687
1688 args = (struct ssl_async_args *)vargs;
1689 s = args->s;
1690 buf = args->buf;
1691 num = args->num;
ec447924
MC
1692 switch (args->type) {
1693 case READFUNC:
7ee8627f 1694 return args->f.func_read(s, buf, num, &s->asyncrw);
ec447924 1695 case WRITEFUNC:
7ee8627f 1696 return args->f.func_write(s, buf, num, &s->asyncrw);
ec447924
MC
1697 case OTHERFUNC:
1698 return args->f.func_other(s);
1699 }
1700 return -1;
07bbc92c
MC
1701}
1702
4ee7d3f9 1703int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
0f113f3e 1704{
c4c32155 1705 if (s->handshake_func == NULL) {
4ee7d3f9 1706 SSLerr(SSL_F_SSL_READ_INTERNAL, SSL_R_UNINITIALIZED);
0f113f3e
MC
1707 return -1;
1708 }
1709
1710 if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
1711 s->rwstate = SSL_NOTHING;
4ee7d3f9 1712 return 0;
0f113f3e 1713 }
07bbc92c 1714
564547e4
MC
1715 if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
1716 || s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY) {
0a5ece5b
MC
1717 SSLerr(SSL_F_SSL_READ_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1718 return 0;
1719 }
564547e4
MC
1720 /*
1721 * If we are a client and haven't received the ServerHello etc then we
1722 * better do that
1723 */
1724 ossl_statem_check_finish_init(s, 0);
0a5ece5b 1725
e8aa8b6c 1726 if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
add2f5ca 1727 struct ssl_async_args args;
eda75751 1728 int ret;
add2f5ca
MC
1729
1730 args.s = s;
1731 args.buf = buf;
1732 args.num = num;
ec447924
MC
1733 args.type = READFUNC;
1734 args.f.func_read = s->method->ssl_read;
add2f5ca 1735
eda75751 1736 ret = ssl_start_async_job(s, &args, ssl_io_intern);
54105ddd 1737 *readbytes = s->asyncrw;
eda75751 1738 return ret;
07bbc92c 1739 } else {
54105ddd 1740 return s->method->ssl_read(s, buf, num, readbytes);
07bbc92c 1741 }
0f113f3e
MC
1742}
1743
4ee7d3f9 1744int SSL_read(SSL *s, void *buf, int num)
eda75751
MC
1745{
1746 int ret;
54105ddd 1747 size_t readbytes;
eda75751
MC
1748
1749 if (num < 0) {
4ee7d3f9 1750 SSLerr(SSL_F_SSL_READ, SSL_R_BAD_LENGTH);
eda75751
MC
1751 return -1;
1752 }
1753
4ee7d3f9 1754 ret = ssl_read_internal(s, buf, (size_t)num, &readbytes);
eda75751
MC
1755
1756 /*
1757 * The cast is safe here because ret should be <= INT_MAX because num is
1758 * <= INT_MAX
1759 */
1760 if (ret > 0)
54105ddd 1761 ret = (int)readbytes;
eda75751
MC
1762
1763 return ret;
1764}
1765
4ee7d3f9
KR
1766int SSL_read_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
1767{
1768 int ret = ssl_read_internal(s, buf, num, readbytes);
1769
1770 if (ret < 0)
1771 ret = 0;
1772 return ret;
1773}
1774
f533fbd4 1775int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes)
d781d247
MC
1776{
1777 int ret;
1778
1779 if (!s->server) {
f533fbd4
MC
1780 SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1781 return SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
1782 }
1783
d781d247
MC
1784 switch (s->early_data_state) {
1785 case SSL_EARLY_DATA_NONE:
1786 if (!SSL_in_before(s)) {
f533fbd4
MC
1787 SSLerr(SSL_F_SSL_READ_EARLY_DATA,
1788 ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1789 return SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
1790 }
1791 /* fall through */
1792
1793 case SSL_EARLY_DATA_ACCEPT_RETRY:
1794 s->early_data_state = SSL_EARLY_DATA_ACCEPTING;
1795 ret = SSL_accept(s);
1796 if (ret <= 0) {
1797 /* NBIO or error */
1798 s->early_data_state = SSL_EARLY_DATA_ACCEPT_RETRY;
f533fbd4 1799 return SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
1800 }
1801 /* fall through */
1802
1803 case SSL_EARLY_DATA_READ_RETRY:
1804 if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
1805 s->early_data_state = SSL_EARLY_DATA_READING;
1806 ret = SSL_read_ex(s, buf, num, readbytes);
1807 /*
ef6c191b
MC
1808 * State machine will update early_data_state to
1809 * SSL_EARLY_DATA_FINISHED_READING if we get an EndOfEarlyData
1810 * message
d781d247
MC
1811 */
1812 if (ret > 0 || (ret <= 0 && s->early_data_state
1813 != SSL_EARLY_DATA_FINISHED_READING)) {
1814 s->early_data_state = SSL_EARLY_DATA_READ_RETRY;
f533fbd4
MC
1815 return ret > 0 ? SSL_READ_EARLY_DATA_SUCCESS
1816 : SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
1817 }
1818 } else {
1819 s->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
1820 }
1821 *readbytes = 0;
f533fbd4 1822 return SSL_READ_EARLY_DATA_FINISH;
d781d247
MC
1823
1824 default:
f533fbd4
MC
1825 SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1826 return SSL_READ_EARLY_DATA_ERROR;
d781d247
MC
1827 }
1828}
1829
f5b519c4 1830int SSL_get_early_data_status(const SSL *s)
1ea4d09a
MC
1831{
1832 return s->ext.early_data;
1833}
1834
4ee7d3f9 1835static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
0f113f3e 1836{
c4c32155 1837 if (s->handshake_func == NULL) {
4ee7d3f9 1838 SSLerr(SSL_F_SSL_PEEK_INTERNAL, SSL_R_UNINITIALIZED);
0f113f3e
MC
1839 return -1;
1840 }
1841
1842 if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
4ee7d3f9 1843 return 0;
0f113f3e 1844 }
e8aa8b6c 1845 if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
add2f5ca 1846 struct ssl_async_args args;
eda75751 1847 int ret;
0f113f3e 1848
add2f5ca
MC
1849 args.s = s;
1850 args.buf = buf;
1851 args.num = num;
ec447924
MC
1852 args.type = READFUNC;
1853 args.f.func_read = s->method->ssl_peek;
07bbc92c 1854
eda75751 1855 ret = ssl_start_async_job(s, &args, ssl_io_intern);
54105ddd 1856 *readbytes = s->asyncrw;
eda75751 1857 return ret;
add2f5ca 1858 } else {
54105ddd 1859 return s->method->ssl_peek(s, buf, num, readbytes);
add2f5ca 1860 }
07bbc92c
MC
1861}
1862
4ee7d3f9 1863int SSL_peek(SSL *s, void *buf, int num)
7ee8627f
MC
1864{
1865 int ret;
4ee7d3f9 1866 size_t readbytes;
7ee8627f
MC
1867
1868 if (num < 0) {
4ee7d3f9 1869 SSLerr(SSL_F_SSL_PEEK, SSL_R_BAD_LENGTH);
7ee8627f
MC
1870 return -1;
1871 }
1872
4ee7d3f9 1873 ret = ssl_peek_internal(s, buf, (size_t)num, &readbytes);
7ee8627f
MC
1874
1875 /*
1876 * The cast is safe here because ret should be <= INT_MAX because num is
1877 * <= INT_MAX
1878 */
1879 if (ret > 0)
4ee7d3f9 1880 ret = (int)readbytes;
7ee8627f
MC
1881
1882 return ret;
1883}
1884
4ee7d3f9
KR
1885
1886int SSL_peek_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
1887{
1888 int ret = ssl_peek_internal(s, buf, num, readbytes);
1889
1890 if (ret < 0)
1891 ret = 0;
1892 return ret;
1893}
1894
1895int ssl_write_internal(SSL *s, const void *buf, size_t num, size_t *written)
0f113f3e 1896{
c4c32155 1897 if (s->handshake_func == NULL) {
4ee7d3f9 1898 SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_UNINITIALIZED);
0f113f3e
MC
1899 return -1;
1900 }
1901
1902 if (s->shutdown & SSL_SENT_SHUTDOWN) {
1903 s->rwstate = SSL_NOTHING;
4ee7d3f9
KR
1904 SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_PROTOCOL_IS_SHUTDOWN);
1905 return -1;
0f113f3e 1906 }
07bbc92c 1907
ef6c191b 1908 if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
09f28874
MC
1909 || s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY
1910 || s->early_data_state == SSL_EARLY_DATA_READ_RETRY) {
0a5ece5b 1911 SSLerr(SSL_F_SSL_WRITE_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
49e7fe12 1912 return 0;
0a5ece5b 1913 }
564547e4
MC
1914 /* If we are a client and haven't sent the Finished we better do that */
1915 ossl_statem_check_finish_init(s, 1);
49e7fe12 1916
e8aa8b6c 1917 if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
7ee8627f 1918 int ret;
add2f5ca
MC
1919 struct ssl_async_args args;
1920
1921 args.s = s;
1922 args.buf = (void *)buf;
1923 args.num = num;
ec447924
MC
1924 args.type = WRITEFUNC;
1925 args.f.func_write = s->method->ssl_write;
add2f5ca 1926
7ee8627f
MC
1927 ret = ssl_start_async_job(s, &args, ssl_io_intern);
1928 *written = s->asyncrw;
1929 return ret;
07bbc92c 1930 } else {
7ee8627f 1931 return s->method->ssl_write(s, buf, num, written);
07bbc92c 1932 }
0f113f3e 1933}
d02b48c6 1934
4ee7d3f9
KR
1935int SSL_write(SSL *s, const void *buf, int num)
1936{
1937 int ret;
1938 size_t written;
1939
1940 if (num < 0) {
1941 SSLerr(SSL_F_SSL_WRITE, SSL_R_BAD_LENGTH);
1942 return -1;
1943 }
1944
1945 ret = ssl_write_internal(s, buf, (size_t)num, &written);
1946
1947 /*
1948 * The cast is safe here because ret should be <= INT_MAX because num is
1949 * <= INT_MAX
1950 */
1951 if (ret > 0)
1952 ret = (int)written;
1953
1954 return ret;
1955}
1956
1957int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written)
1958{
1959 int ret = ssl_write_internal(s, buf, num, written);
1960
1961 if (ret < 0)
1962 ret = 0;
1963 return ret;
1964}
1965
0665b4ed 1966int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
49e7fe12 1967{
a0cb628b 1968 int ret, early_data_state;
2a8db717 1969 size_t writtmp;
f7414b08 1970 uint32_t partialwrite;
49e7fe12 1971
49e7fe12
MC
1972 switch (s->early_data_state) {
1973 case SSL_EARLY_DATA_NONE:
09f28874
MC
1974 if (s->server
1975 || !SSL_in_before(s)
add8d0e9
MC
1976 || ((s->session == NULL || s->session->ext.max_early_data == 0)
1977 && (s->psk_use_session_cb == NULL))) {
09f28874
MC
1978 SSLerr(SSL_F_SSL_WRITE_EARLY_DATA,
1979 ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
49e7fe12
MC
1980 return 0;
1981 }
1982 /* fall through */
1983
1984 case SSL_EARLY_DATA_CONNECT_RETRY:
1985 s->early_data_state = SSL_EARLY_DATA_CONNECTING;
1986 ret = SSL_connect(s);
1987 if (ret <= 0) {
1988 /* NBIO or error */
1989 s->early_data_state = SSL_EARLY_DATA_CONNECT_RETRY;
1990 return 0;
1991 }
1992 /* fall through */
1993
1994 case SSL_EARLY_DATA_WRITE_RETRY:
1995 s->early_data_state = SSL_EARLY_DATA_WRITING;
f7414b08
MC
1996 /*
1997 * We disable partial write for early data because we don't keep track
1998 * of how many bytes we've written between the SSL_write_ex() call and
1999 * the flush if the flush needs to be retried)
2000 */
2001 partialwrite = s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE;
2002 s->mode &= ~SSL_MODE_ENABLE_PARTIAL_WRITE;
2a8db717 2003 ret = SSL_write_ex(s, buf, num, &writtmp);
f7414b08 2004 s->mode |= partialwrite;
2a8db717
MC
2005 if (!ret) {
2006 s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
2007 return ret;
2008 }
2009 s->early_data_state = SSL_EARLY_DATA_WRITE_FLUSH;
2010 /* fall through */
2011
2012 case SSL_EARLY_DATA_WRITE_FLUSH:
2013 /* The buffering BIO is still in place so we need to flush it */
2014 if (statem_flush(s) != 1)
2015 return 0;
2a8db717 2016 *written = num;
49e7fe12 2017 s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
2a8db717 2018 return 1;
49e7fe12 2019
116d0da5 2020 case SSL_EARLY_DATA_FINISHED_READING:
a0cb628b
MC
2021 case SSL_EARLY_DATA_READ_RETRY:
2022 early_data_state = s->early_data_state;
09f28874
MC
2023 /* We are a server writing to an unauthenticated client */
2024 s->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
2025 ret = SSL_write_ex(s, buf, num, written);
bbea9f2c 2026 s->early_data_state = early_data_state;
09f28874
MC
2027 return ret;
2028
49e7fe12 2029 default:
09f28874 2030 SSLerr(SSL_F_SSL_WRITE_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
49e7fe12
MC
2031 return 0;
2032 }
2033}
2034
4f43d0e7 2035int SSL_shutdown(SSL *s)
0f113f3e
MC
2036{
2037 /*
2038 * Note that this function behaves differently from what one might
2039 * expect. Return values are 0 for no success (yet), 1 for success; but
2040 * calling it once is usually not enough, even if blocking I/O is used
2041 * (see ssl3_shutdown).
2042 */
2043
c4c32155 2044 if (s->handshake_func == NULL) {
0f113f3e
MC
2045 SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED);
2046 return -1;
2047 }
2048
64f9f406 2049 if (!SSL_in_init(s)) {
e8aa8b6c 2050 if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
64f9f406 2051 struct ssl_async_args args;
ec447924 2052
64f9f406
MC
2053 args.s = s;
2054 args.type = OTHERFUNC;
2055 args.f.func_other = s->method->ssl_shutdown;
ec447924 2056
64f9f406
MC
2057 return ssl_start_async_job(s, &args, ssl_io_intern);
2058 } else {
2059 return s->method->ssl_shutdown(s);
2060 }
ec447924 2061 } else {
64f9f406
MC
2062 SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_SHUTDOWN_WHILE_IN_INIT);
2063 return -1;
ec447924 2064 }
0f113f3e 2065}
d02b48c6 2066
4fbfe86a 2067int SSL_key_update(SSL *s, int updatetype)
44c04a2e 2068{
f14afcaa 2069 /*
a9998e2f 2070 * TODO(TLS1.3): How will applications know whether TLSv1.3 has been
f14afcaa
MC
2071 * negotiated, and that it is appropriate to call SSL_key_update() instead
2072 * of SSL_renegotiate().
2073 */
44c04a2e
MC
2074 if (!SSL_IS_TLS13(s)) {
2075 SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_WRONG_SSL_VERSION);
2076 return 0;
2077 }
2078
2079 if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
2080 && updatetype != SSL_KEY_UPDATE_REQUESTED) {
2081 SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_INVALID_KEY_UPDATE_TYPE);
2082 return 0;
2083 }
2084
2085 if (!SSL_is_init_finished(s)) {
2086 SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_STILL_IN_INIT);
2087 return 0;
2088 }
2089
2090 ossl_statem_set_in_init(s, 1);
44c04a2e 2091 s->key_update = updatetype;
44c04a2e
MC
2092 return 1;
2093}
2094
4fbfe86a 2095int SSL_get_key_update_type(SSL *s)
53d1d07d
MC
2096{
2097 return s->key_update;
2098}
2099
4f43d0e7 2100int SSL_renegotiate(SSL *s)
0f113f3e 2101{
44c04a2e
MC
2102 if (SSL_IS_TLS13(s)) {
2103 SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_WRONG_SSL_VERSION);
2c0980d2 2104 return 0;
44c04a2e 2105 }
cda6b998 2106
db0f35dd
TS
2107 if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
2108 SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_NO_RENEGOTIATION);
2109 return 0;
2110 }
44959ee4 2111
db0f35dd 2112 s->renegotiate = 1;
0f113f3e 2113 s->new_session = 1;
44959ee4 2114
26a7d938 2115 return s->method->ssl_renegotiate(s);
0f113f3e 2116}
d02b48c6 2117
44959ee4 2118int SSL_renegotiate_abbreviated(SSL *s)
0f113f3e 2119{
db0f35dd
TS
2120 if (SSL_IS_TLS13(s)) {
2121 SSLerr(SSL_F_SSL_RENEGOTIATE_ABBREVIATED, SSL_R_WRONG_SSL_VERSION);
2c0980d2 2122 return 0;
db0f35dd 2123 }
cda6b998 2124
db0f35dd
TS
2125 if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
2126 SSLerr(SSL_F_SSL_RENEGOTIATE_ABBREVIATED, SSL_R_NO_RENEGOTIATION);
2127 return 0;
2128 }
c519e89f 2129
db0f35dd 2130 s->renegotiate = 1;
0f113f3e 2131 s->new_session = 0;
c519e89f 2132
26a7d938 2133 return s->method->ssl_renegotiate(s);
0f113f3e 2134}
44959ee4 2135
6b0e9fac 2136int SSL_renegotiate_pending(SSL *s)
0f113f3e
MC
2137{
2138 /*
2139 * becomes true when negotiation is requested; false again once a
2140 * handshake has finished
2141 */
2142 return (s->renegotiate != 0);
2143}
2144
2145long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
2146{
2147 long l;
2148
2149 switch (cmd) {
2150 case SSL_CTRL_GET_READ_AHEAD:
26a7d938 2151 return RECORD_LAYER_get_read_ahead(&s->rlayer);
0f113f3e 2152 case SSL_CTRL_SET_READ_AHEAD:
52e1d7b1
MC
2153 l = RECORD_LAYER_get_read_ahead(&s->rlayer);
2154 RECORD_LAYER_set_read_ahead(&s->rlayer, larg);
26a7d938 2155 return l;
0f113f3e
MC
2156
2157 case SSL_CTRL_SET_MSG_CALLBACK_ARG:
2158 s->msg_callback_arg = parg;
2159 return 1;
2160
0f113f3e
MC
2161 case SSL_CTRL_MODE:
2162 return (s->mode |= larg);
2163 case SSL_CTRL_CLEAR_MODE:
2164 return (s->mode &= ~larg);
2165 case SSL_CTRL_GET_MAX_CERT_LIST:
26a7d938 2166 return (long)s->max_cert_list;
0f113f3e 2167 case SSL_CTRL_SET_MAX_CERT_LIST:
348240c6
MC
2168 if (larg < 0)
2169 return 0;
2170 l = (long)s->max_cert_list;
2171 s->max_cert_list = (size_t)larg;
2172 return l;
0f113f3e
MC
2173 case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
2174 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
2175 return 0;
2176 s->max_send_fragment = larg;
d102d9df
MC
2177 if (s->max_send_fragment < s->split_send_fragment)
2178 s->split_send_fragment = s->max_send_fragment;
2179 return 1;
2180 case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
7ee8627f 2181 if ((size_t)larg > s->max_send_fragment || larg == 0)
d102d9df
MC
2182 return 0;
2183 s->split_send_fragment = larg;
0f113f3e 2184 return 1;
d102d9df
MC
2185 case SSL_CTRL_SET_MAX_PIPELINES:
2186 if (larg < 1 || larg > SSL_MAX_PIPELINES)
2187 return 0;
2188 s->max_pipelines = larg;
94777c9c
MC
2189 if (larg > 1)
2190 RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
07077415 2191 return 1;
0f113f3e
MC
2192 case SSL_CTRL_GET_RI_SUPPORT:
2193 if (s->s3)
2194 return s->s3->send_connection_binding;
2195 else
2196 return 0;
2197 case SSL_CTRL_CERT_FLAGS:
2198 return (s->cert->cert_flags |= larg);
2199 case SSL_CTRL_CLEAR_CERT_FLAGS:
2200 return (s->cert->cert_flags &= ~larg);
2201
2202 case SSL_CTRL_GET_RAW_CIPHERLIST:
2203 if (parg) {
76106e60 2204 if (s->s3->tmp.ciphers_raw == NULL)
0f113f3e 2205 return 0;
76106e60
DSH
2206 *(unsigned char **)parg = s->s3->tmp.ciphers_raw;
2207 return (int)s->s3->tmp.ciphers_rawlen;
e9fa092e
EK
2208 } else {
2209 return TLS_CIPHER_LEN;
2210 }
c5364614 2211 case SSL_CTRL_GET_EXTMS_SUPPORT:
024f543c 2212 if (!s->session || SSL_in_init(s) || ossl_statem_get_in_handshake(s))
a230b26e 2213 return -1;
dccd20d1 2214 if (s->session->flags & SSL_SESS_FLAG_EXTMS)
c5364614
DSH
2215 return 1;
2216 else
2217 return 0;
7946ab33 2218 case SSL_CTRL_SET_MIN_PROTO_VERSION:
c8feba72
BK
2219 return ssl_check_allowed_versions(larg, s->max_proto_version)
2220 && ssl_set_version_bound(s->ctx->method->version, (int)larg,
2221 &s->min_proto_version);
3edabd3c
CH
2222 case SSL_CTRL_GET_MIN_PROTO_VERSION:
2223 return s->min_proto_version;
7946ab33 2224 case SSL_CTRL_SET_MAX_PROTO_VERSION:
c8feba72
BK
2225 return ssl_check_allowed_versions(s->min_proto_version, larg)
2226 && ssl_set_version_bound(s->ctx->method->version, (int)larg,
2227 &s->max_proto_version);
3edabd3c
CH
2228 case SSL_CTRL_GET_MAX_PROTO_VERSION:
2229 return s->max_proto_version;
0f113f3e 2230 default:
26a7d938 2231 return s->method->ssl_ctrl(s, cmd, larg, parg);
0f113f3e
MC
2232 }
2233}
2234
2235long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
2236{
2237 switch (cmd) {
2238 case SSL_CTRL_SET_MSG_CALLBACK:
2239 s->msg_callback = (void (*)
2240 (int write_p, int version, int content_type,
2241 const void *buf, size_t len, SSL *ssl,
2242 void *arg))(fp);
2243 return 1;
2244
2245 default:
26a7d938 2246 return s->method->ssl_callback_ctrl(s, cmd, fp);
0f113f3e
MC
2247 }
2248}
d3442bc7 2249
3c1d6bbc 2250LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
0f113f3e
MC
2251{
2252 return ctx->sessions;
2253}
2254
2255long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2256{
2257 long l;
1fcb4e4d 2258 int i;
0f113f3e
MC
2259 /* For some cases with ctx == NULL perform syntax checks */
2260 if (ctx == NULL) {
2261 switch (cmd) {
14536c8c 2262#ifndef OPENSSL_NO_EC
de4d764e
MC
2263 case SSL_CTRL_SET_GROUPS_LIST:
2264 return tls1_set_groups_list(NULL, NULL, parg);
0f113f3e
MC
2265#endif
2266 case SSL_CTRL_SET_SIGALGS_LIST:
2267 case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
2268 return tls1_set_sigalgs_list(NULL, parg, 0);
2269 default:
2270 return 0;
2271 }
2272 }
2273
2274 switch (cmd) {
2275 case SSL_CTRL_GET_READ_AHEAD:
26a7d938 2276 return ctx->read_ahead;
0f113f3e
MC
2277 case SSL_CTRL_SET_READ_AHEAD:
2278 l = ctx->read_ahead;
2279 ctx->read_ahead = larg;
26a7d938 2280 return l;
0f113f3e
MC
2281
2282 case SSL_CTRL_SET_MSG_CALLBACK_ARG:
2283 ctx->msg_callback_arg = parg;
2284 return 1;
2285
2286 case SSL_CTRL_GET_MAX_CERT_LIST:
26a7d938 2287 return (long)ctx->max_cert_list;
0f113f3e 2288 case SSL_CTRL_SET_MAX_CERT_LIST:
348240c6
MC
2289 if (larg < 0)
2290 return 0;
2291 l = (long)ctx->max_cert_list;
2292 ctx->max_cert_list = (size_t)larg;
2293 return l;
0f113f3e
MC
2294
2295 case SSL_CTRL_SET_SESS_CACHE_SIZE:
348240c6
MC
2296 if (larg < 0)
2297 return 0;
2298 l = (long)ctx->session_cache_size;
2299 ctx->session_cache_size = (size_t)larg;
2300 return l;
0f113f3e 2301 case SSL_CTRL_GET_SESS_CACHE_SIZE:
26a7d938 2302 return (long)ctx->session_cache_size;
0f113f3e
MC
2303 case SSL_CTRL_SET_SESS_CACHE_MODE:
2304 l = ctx->session_cache_mode;
2305 ctx->session_cache_mode = larg;
26a7d938 2306 return l;
0f113f3e 2307 case SSL_CTRL_GET_SESS_CACHE_MODE:
26a7d938 2308 return ctx->session_cache_mode;
0f113f3e
MC
2309
2310 case SSL_CTRL_SESS_NUMBER:
26a7d938 2311 return lh_SSL_SESSION_num_items(ctx->sessions);
0f113f3e 2312 case SSL_CTRL_SESS_CONNECT:
1fcb4e4d
BK
2313 return CRYPTO_atomic_read(&ctx->stats.sess_connect, &i, ctx->lock)
2314 ? i : 0;
0f113f3e 2315 case SSL_CTRL_SESS_CONNECT_GOOD:
1fcb4e4d
BK
2316 return CRYPTO_atomic_read(&ctx->stats.sess_connect_good, &i, ctx->lock)
2317 ? i : 0;
0f113f3e 2318 case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
1fcb4e4d
BK
2319 return CRYPTO_atomic_read(&ctx->stats.sess_connect_renegotiate, &i,
2320 ctx->lock)
2321 ? i : 0;
0f113f3e 2322 case SSL_CTRL_SESS_ACCEPT:
1fcb4e4d
BK
2323 return CRYPTO_atomic_read(&ctx->stats.sess_accept, &i, ctx->lock)
2324 ? i : 0;
0f113f3e 2325 case SSL_CTRL_SESS_ACCEPT_GOOD:
1fcb4e4d
BK
2326 return CRYPTO_atomic_read(&ctx->stats.sess_accept_good, &i, ctx->lock)
2327 ? i : 0;
0f113f3e 2328 case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
1fcb4e4d
BK
2329 return CRYPTO_atomic_read(&ctx->stats.sess_accept_renegotiate, &i,
2330 ctx->lock)
2331 ? i : 0;
0f113f3e 2332 case SSL_CTRL_SESS_HIT:
1fcb4e4d
BK
2333 return CRYPTO_atomic_read(&ctx->stats.sess_hit, &i, ctx->lock)
2334 ? i : 0;
0f113f3e 2335 case SSL_CTRL_SESS_CB_HIT:
1fcb4e4d
BK
2336 return CRYPTO_atomic_read(&ctx->stats.sess_cb_hit, &i, ctx->lock)
2337 ? i : 0;
0f113f3e 2338 case SSL_CTRL_SESS_MISSES:
1fcb4e4d
BK
2339 return CRYPTO_atomic_read(&ctx->stats.sess_miss, &i, ctx->lock)
2340 ? i : 0;
0f113f3e 2341 case SSL_CTRL_SESS_TIMEOUTS:
1fcb4e4d
BK
2342 return CRYPTO_atomic_read(&ctx->stats.sess_timeout, &i, ctx->lock)
2343 ? i : 0;
0f113f3e 2344 case SSL_CTRL_SESS_CACHE_FULL:
1fcb4e4d
BK
2345 return CRYPTO_atomic_read(&ctx->stats.sess_cache_full, &i, ctx->lock)
2346 ? i : 0;
0f113f3e
MC
2347 case SSL_CTRL_MODE:
2348 return (ctx->mode |= larg);
2349 case SSL_CTRL_CLEAR_MODE:
2350 return (ctx->mode &= ~larg);
2351 case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
2352 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
2353 return 0;
2354 ctx->max_send_fragment = larg;
d102d9df 2355 if (ctx->max_send_fragment < ctx->split_send_fragment)
bfb155c1 2356 ctx->split_send_fragment = ctx->max_send_fragment;
0f113f3e 2357 return 1;
d102d9df 2358 case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
7ee8627f 2359 if ((size_t)larg > ctx->max_send_fragment || larg == 0)
d102d9df
MC
2360 return 0;
2361 ctx->split_send_fragment = larg;
2362 return 1;
2363 case SSL_CTRL_SET_MAX_PIPELINES:
2364 if (larg < 1 || larg > SSL_MAX_PIPELINES)
2365 return 0;
2366 ctx->max_pipelines = larg;
07077415 2367 return 1;
0f113f3e
MC
2368 case SSL_CTRL_CERT_FLAGS:
2369 return (ctx->cert->cert_flags |= larg);
2370 case SSL_CTRL_CLEAR_CERT_FLAGS:
2371 return (ctx->cert->cert_flags &= ~larg);
7946ab33 2372 case SSL_CTRL_SET_MIN_PROTO_VERSION:
c8feba72
BK
2373 return ssl_check_allowed_versions(larg, ctx->max_proto_version)
2374 && ssl_set_version_bound(ctx->method->version, (int)larg,
2375 &ctx->min_proto_version);
3edabd3c
CH
2376 case SSL_CTRL_GET_MIN_PROTO_VERSION:
2377 return ctx->min_proto_version;
7946ab33 2378 case SSL_CTRL_SET_MAX_PROTO_VERSION:
c8feba72
BK
2379 return ssl_check_allowed_versions(ctx->min_proto_version, larg)
2380 && ssl_set_version_bound(ctx->method->version, (int)larg,
2381 &ctx->max_proto_version);
3edabd3c
CH
2382 case SSL_CTRL_GET_MAX_PROTO_VERSION:
2383 return ctx->max_proto_version;
0f113f3e 2384 default:
26a7d938 2385 return ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg);
0f113f3e
MC
2386 }
2387}
2388
2389long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
2390{
2391 switch (cmd) {
2392 case SSL_CTRL_SET_MSG_CALLBACK:
2393 ctx->msg_callback = (void (*)
2394 (int write_p, int version, int content_type,
2395 const void *buf, size_t len, SSL *ssl,
2396 void *arg))(fp);
2397 return 1;
2398
2399 default:
26a7d938 2400 return ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp);
0f113f3e
MC
2401 }
2402}
d3442bc7 2403
ccd86b68 2404int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
0f113f3e 2405{
90d9e49a
DSH
2406 if (a->id > b->id)
2407 return 1;
2408 if (a->id < b->id)
2409 return -1;
2410 return 0;
0f113f3e
MC
2411}
2412
2413int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
2414 const SSL_CIPHER *const *bp)
2415{
90d9e49a
DSH
2416 if ((*ap)->id > (*bp)->id)
2417 return 1;
2418 if ((*ap)->id < (*bp)->id)
2419 return -1;
2420 return 0;
0f113f3e 2421}
d02b48c6 2422
4f43d0e7 2423/** return a STACK of the ciphers available for the SSL and in order of
d02b48c6 2424 * preference */
0821bcd4 2425STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
0f113f3e
MC
2426{
2427 if (s != NULL) {
2428 if (s->cipher_list != NULL) {
26a7d938 2429 return s->cipher_list;
0f113f3e 2430 } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
26a7d938 2431 return s->ctx->cipher_list;
0f113f3e
MC
2432 }
2433 }
26a7d938 2434 return NULL;
0f113f3e
MC
2435}
2436
831eef2c
NM
2437STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s)
2438{
2439 if ((s == NULL) || (s->session == NULL) || !s->server)
2440 return NULL;
2441 return s->session->ciphers;
2442}
2443
8b8e5bed 2444STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s)
0f113f3e
MC
2445{
2446 STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
2447 int i;
1d0c08b4 2448
0f113f3e
MC
2449 ciphers = SSL_get_ciphers(s);
2450 if (!ciphers)
2451 return NULL;
1d0c08b4
MC
2452 if (!ssl_set_client_disabled(s))
2453 return NULL;
0f113f3e
MC
2454 for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
2455 const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
8af91fd9 2456 if (!ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) {
0f113f3e
MC
2457 if (!sk)
2458 sk = sk_SSL_CIPHER_new_null();
2459 if (!sk)
2460 return NULL;
2461 if (!sk_SSL_CIPHER_push(sk, c)) {
2462 sk_SSL_CIPHER_free(sk);
2463 return NULL;
2464 }
2465 }
2466 }
2467 return sk;
2468}
8b8e5bed 2469
4f43d0e7 2470/** return a STACK of the ciphers available for the SSL and in order of
d02b48c6 2471 * algorithm id */
f73e07cf 2472STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s)
0f113f3e
MC
2473{
2474 if (s != NULL) {
2475 if (s->cipher_list_by_id != NULL) {
26a7d938 2476 return s->cipher_list_by_id;
0f113f3e 2477 } else if ((s->ctx != NULL) && (s->ctx->cipher_list_by_id != NULL)) {
26a7d938 2478 return s->ctx->cipher_list_by_id;
0f113f3e
MC
2479 }
2480 }
26a7d938 2481 return NULL;
0f113f3e 2482}
d02b48c6 2483
4f43d0e7 2484/** The old interface to get the same thing as SSL_get_ciphers() */
0f113f3e
MC
2485const char *SSL_get_cipher_list(const SSL *s, int n)
2486{
4a640fb6 2487 const SSL_CIPHER *c;
0f113f3e
MC
2488 STACK_OF(SSL_CIPHER) *sk;
2489
2490 if (s == NULL)
26a7d938 2491 return NULL;
0f113f3e
MC
2492 sk = SSL_get_ciphers(s);
2493 if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
26a7d938 2494 return NULL;
0f113f3e
MC
2495 c = sk_SSL_CIPHER_value(sk, n);
2496 if (c == NULL)
26a7d938
K
2497 return NULL;
2498 return c->name;
0f113f3e 2499}
d02b48c6 2500
9d5ac953
KY
2501/** return a STACK of the ciphers available for the SSL_CTX and in order of
2502 * preference */
2503STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
2504{
2505 if (ctx != NULL)
2506 return ctx->cipher_list;
2507 return NULL;
2508}
2509
25f923dd 2510/** specify the ciphers to be used by default by the SSL_CTX */
018e57c7 2511int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
0f113f3e
MC
2512{
2513 STACK_OF(SSL_CIPHER) *sk;
2514
f865b081
MC
2515 sk = ssl_create_cipher_list(ctx->method, ctx->tls13_ciphersuites,
2516 &ctx->cipher_list, &ctx->cipher_list_by_id, str,
2517 ctx->cert);
0f113f3e
MC
2518 /*
2519 * ssl_create_cipher_list may return an empty stack if it was unable to
2520 * find a cipher matching the given rule string (for example if the rule
2521 * string specifies a cipher which has been disabled). This is not an
2522 * error as far as ssl_create_cipher_list is concerned, and hence
2523 * ctx->cipher_list and ctx->cipher_list_by_id has been updated.
2524 */
2525 if (sk == NULL)
2526 return 0;
2527 else if (sk_SSL_CIPHER_num(sk) == 0) {
2528 SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
2529 return 0;
2530 }
2531 return 1;
2532}
d02b48c6 2533
4f43d0e7 2534/** specify the ciphers to be used by the SSL */
0f113f3e
MC
2535int SSL_set_cipher_list(SSL *s, const char *str)
2536{
2537 STACK_OF(SSL_CIPHER) *sk;
2538
f865b081
MC
2539 sk = ssl_create_cipher_list(s->ctx->method, s->tls13_ciphersuites,
2540 &s->cipher_list, &s->cipher_list_by_id, str,
2541 s->cert);
0f113f3e
MC
2542 /* see comment in SSL_CTX_set_cipher_list */
2543 if (sk == NULL)
2544 return 0;
2545 else if (sk_SSL_CIPHER_num(sk) == 0) {
2546 SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
2547 return 0;
2548 }
2549 return 1;
2550}
d02b48c6 2551
f865b081
MC
2552static int ciphersuite_cb(const char *elem, int len, void *arg)
2553{
2554 STACK_OF(SSL_CIPHER) *ciphersuites = (STACK_OF(SSL_CIPHER) *)arg;
2555 const SSL_CIPHER *cipher;
2556 /* Arbitrary sized temp buffer for the cipher name. Should be big enough */
2557 char name[80];
2558
2559 if (len > (int)(sizeof(name) - 1)) {
2560 SSLerr(SSL_F_CIPHERSUITE_CB, SSL_R_NO_CIPHER_MATCH);
2561 return 0;
2562 }
2563
2564 memcpy(name, elem, len);
2565 name[len] = '\0';
2566
2567 cipher = ssl3_get_cipher_by_std_name(name);
2568 if (cipher == NULL) {
2569 SSLerr(SSL_F_CIPHERSUITE_CB, SSL_R_NO_CIPHER_MATCH);
2570 return 0;
2571 }
2572
2573 if (!sk_SSL_CIPHER_push(ciphersuites, cipher)) {
2574 SSLerr(SSL_F_CIPHERSUITE_CB, ERR_R_INTERNAL_ERROR);
2575 return 0;
2576 }
2577
2578 return 1;
2579}
2580
2581static int set_ciphersuites(STACK_OF(SSL_CIPHER) **currciphers, const char *str)
2582{
2583 STACK_OF(SSL_CIPHER) *newciphers = sk_SSL_CIPHER_new_null();
2584
2585 if (newciphers == NULL)
2586 return 0;
2587
2588 /* Parse the list. We explicitly allow an empty list */
2589 if (*str != '\0'
2590 && !CONF_parse_list(str, ':', 1, ciphersuite_cb, newciphers)) {
2591 sk_SSL_CIPHER_free(newciphers);
2592 return 0;
2593 }
2594 sk_SSL_CIPHER_free(*currciphers);
2595 *currciphers = newciphers;
2596
2597 return 1;
2598}
2599
2600static int update_cipher_list(STACK_OF(SSL_CIPHER) *cipher_list,
2601 STACK_OF(SSL_CIPHER) *tls13_ciphersuites)
2602{
2603 int i;
2604
2605 /*
2606 * Delete any existing TLSv1.3 ciphersuites. These are always first in the
2607 * list.
2608 */
2609 while (sk_SSL_CIPHER_num(cipher_list) > 0
2610 && sk_SSL_CIPHER_value(cipher_list, 0)->min_tls == TLS1_3_VERSION)
2611 sk_SSL_CIPHER_delete(cipher_list, 0);
2612
2613 /* Insert the new TLSv1.3 ciphersuites */
2614 for (i = 0; i < sk_SSL_CIPHER_num(tls13_ciphersuites); i++)
2615 sk_SSL_CIPHER_insert(cipher_list,
2616 sk_SSL_CIPHER_value(tls13_ciphersuites, i), i);
2617
2618 return 1;
2619}
2620
2621int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str)
2622{
2623 int ret = set_ciphersuites(&(ctx->tls13_ciphersuites), str);
2624
2625 if (ret && ctx->cipher_list != NULL) {
2626 /* We already have a cipher_list, so we need to update it */
2627 return update_cipher_list(ctx->cipher_list, ctx->tls13_ciphersuites);
2628 }
2629
2630 return ret;
2631}
2632
2633int SSL_set_ciphersuites(SSL *s, const char *str)
2634{
2635 int ret = set_ciphersuites(&(s->tls13_ciphersuites), str);
2636
2637 if (ret && s->cipher_list != NULL) {
2638 /* We already have a cipher_list, so we need to update it */
2639 return update_cipher_list(s->cipher_list, s->tls13_ciphersuites);
2640 }
2641
2642 return ret;
2643}
2644
0f113f3e
MC
2645char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len)
2646{
2647 char *p;
2648 STACK_OF(SSL_CIPHER) *sk;
4a640fb6 2649 const SSL_CIPHER *c;
0f113f3e
MC
2650 int i;
2651
2652 if ((s->session == NULL) || (s->session->ciphers == NULL) || (len < 2))
26a7d938 2653 return NULL;
0f113f3e
MC
2654
2655 p = buf;
2656 sk = s->session->ciphers;
2657
2658 if (sk_SSL_CIPHER_num(sk) == 0)
2659 return NULL;
2660
2661 for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
2662 int n;
2663
2664 c = sk_SSL_CIPHER_value(sk, i);
2665 n = strlen(c->name);
2666 if (n + 1 > len) {
2667 if (p != buf)
2668 --p;
2669 *p = '\0';
2670 return buf;
2671 }
4cacc9d5 2672 strcpy(p, c->name);
0f113f3e
MC
2673 p += n;
2674 *(p++) = ':';
2675 len -= n + 1;
2676 }
2677 p[-1] = '\0';
26a7d938 2678 return buf;
0f113f3e
MC
2679}
2680
52b8dad8 2681/** return a servername extension value if provided in Client Hello, or NULL.
f1fd4544 2682 * So far, only host_name types are defined (RFC 3546).
ed3883d2
BM
2683 */
2684
f1fd4544 2685const char *SSL_get_servername(const SSL *s, const int type)
0f113f3e
MC
2686{
2687 if (type != TLSEXT_NAMETYPE_host_name)
2688 return NULL;
a13c20f6 2689
aff8c126
RS
2690 return s->session && !s->ext.hostname ?
2691 s->session->ext.hostname : s->ext.hostname;
0f113f3e 2692}
ed3883d2 2693
f1fd4544 2694int SSL_get_servername_type(const SSL *s)
0f113f3e
MC
2695{
2696 if (s->session
aff8c126
RS
2697 && (!s->ext.hostname ? s->session->
2698 ext.hostname : s->ext.hostname))
0f113f3e
MC
2699 return TLSEXT_NAMETYPE_host_name;
2700 return -1;
2701}
ee2ffc27 2702
0f113f3e
MC
2703/*
2704 * SSL_select_next_proto implements the standard protocol selection. It is
ee2ffc27 2705 * expected that this function is called from the callback set by
0f113f3e
MC
2706 * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
2707 * vector of 8-bit, length prefixed byte strings. The length byte itself is
2708 * not included in the length. A byte string of length 0 is invalid. No byte
2709 * string may be truncated. The current, but experimental algorithm for
2710 * selecting the protocol is: 1) If the server doesn't support NPN then this
2711 * is indicated to the callback. In this case, the client application has to
2712 * abort the connection or have a default application level protocol. 2) If
2713 * the server supports NPN, but advertises an empty list then the client
f430ba31 2714 * selects the first protocol in its list, but indicates via the API that this
0f113f3e
MC
2715 * fallback case was enacted. 3) Otherwise, the client finds the first
2716 * protocol in the server's list that it supports and selects this protocol.
2717 * This is because it's assumed that the server has better information about
2718 * which protocol a client should use. 4) If the client doesn't support any
2719 * of the server's advertised protocols, then this is treated the same as
2720 * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
2721 * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
ee2ffc27 2722 */
0f113f3e
MC
2723int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
2724 const unsigned char *server,
2725 unsigned int server_len,
a230b26e 2726 const unsigned char *client, unsigned int client_len)
0f113f3e
MC
2727{
2728 unsigned int i, j;
2729 const unsigned char *result;
2730 int status = OPENSSL_NPN_UNSUPPORTED;
2731
2732 /*
2733 * For each protocol in server preference order, see if we support it.
2734 */
2735 for (i = 0; i < server_len;) {
2736 for (j = 0; j < client_len;) {
2737 if (server[i] == client[j] &&
2738 memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
2739 /* We found a match */
2740 result = &server[i];
2741 status = OPENSSL_NPN_NEGOTIATED;
2742 goto found;
2743 }
2744 j += client[j];
2745 j++;
2746 }
2747 i += server[i];
2748 i++;
2749 }
2750
2751 /* There's no overlap between our protocols and the server's list. */
2752 result = client;
2753 status = OPENSSL_NPN_NO_OVERLAP;
2754
2755 found:
2756 *out = (unsigned char *)result + 1;
2757 *outlen = result[0];
2758 return status;
2759}
ee2ffc27 2760
e481f9b9 2761#ifndef OPENSSL_NO_NEXTPROTONEG
0f113f3e
MC
2762/*
2763 * SSL_get0_next_proto_negotiated sets *data and *len to point to the
2764 * client's requested protocol for this connection and returns 0. If the
2765 * client didn't request any protocol, then *data is set to NULL. Note that
2766 * the client can request any protocol it chooses. The value returned from
2767 * this function need not be a member of the list of supported protocols
ee2ffc27
BL
2768 * provided by the callback.
2769 */
0f113f3e
MC
2770void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
2771 unsigned *len)
2772{
aff8c126 2773 *data = s->ext.npn;
0f113f3e
MC
2774 if (!*data) {
2775 *len = 0;
2776 } else {
aff8c126 2777 *len = (unsigned int)s->ext.npn_len;
0f113f3e
MC
2778 }
2779}
2780
2781/*
aff8c126 2782 * SSL_CTX_set_npn_advertised_cb sets a callback that is called when
0f113f3e
MC
2783 * a TLS server needs a list of supported protocols for Next Protocol
2784 * Negotiation. The returned list must be in wire format. The list is
2785 * returned by setting |out| to point to it and |outlen| to its length. This
2786 * memory will not be modified, but one should assume that the SSL* keeps a
2787 * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
2788 * wishes to advertise. Otherwise, no such extension will be included in the
2789 * ServerHello.
2790 */
aff8c126 2791void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx,
8cbfcc70 2792 SSL_CTX_npn_advertised_cb_func cb,
aff8c126 2793 void *arg)
0f113f3e 2794{
aff8c126
RS
2795 ctx->ext.npn_advertised_cb = cb;
2796 ctx->ext.npn_advertised_cb_arg = arg;
0f113f3e
MC
2797}
2798
2799/*
2800 * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
ee2ffc27
BL
2801 * client needs to select a protocol from the server's provided list. |out|
2802 * must be set to point to the selected protocol (which may be within |in|).
0f113f3e
MC
2803 * The length of the protocol name must be written into |outlen|. The
2804 * server's advertised protocols are provided in |in| and |inlen|. The
2805 * callback can assume that |in| is syntactically valid. The client must
2806 * select a protocol. It is fatal to the connection if this callback returns
2807 * a value other than SSL_TLSEXT_ERR_OK.
ee2ffc27 2808 */
aff8c126 2809void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx,
8cbfcc70 2810 SSL_CTX_npn_select_cb_func cb,
aff8c126 2811 void *arg)
0f113f3e 2812{
aff8c126
RS
2813 ctx->ext.npn_select_cb = cb;
2814 ctx->ext.npn_select_cb_arg = arg;
0f113f3e 2815}
e481f9b9 2816#endif
a398f821 2817
0f113f3e
MC
2818/*
2819 * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
6f017a8f 2820 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
0f113f3e
MC
2821 * length-prefixed strings). Returns 0 on success.
2822 */
2823int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
817cd0d5 2824 unsigned int protos_len)
0f113f3e 2825{
aff8c126
RS
2826 OPENSSL_free(ctx->ext.alpn);
2827 ctx->ext.alpn = OPENSSL_memdup(protos, protos_len);
2828 if (ctx->ext.alpn == NULL) {
72e9be3d 2829 SSLerr(SSL_F_SSL_CTX_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
0f113f3e 2830 return 1;
72e9be3d 2831 }
aff8c126 2832 ctx->ext.alpn_len = protos_len;
0f113f3e
MC
2833
2834 return 0;
2835}
2836
2837/*
2838 * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
6f017a8f 2839 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
0f113f3e
MC
2840 * length-prefixed strings). Returns 0 on success.
2841 */
2842int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
817cd0d5 2843 unsigned int protos_len)
0f113f3e 2844{
aff8c126
RS
2845 OPENSSL_free(ssl->ext.alpn);
2846 ssl->ext.alpn = OPENSSL_memdup(protos, protos_len);
2847 if (ssl->ext.alpn == NULL) {
72e9be3d 2848 SSLerr(SSL_F_SSL_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
0f113f3e 2849 return 1;
72e9be3d 2850 }
aff8c126 2851 ssl->ext.alpn_len = protos_len;
0f113f3e
MC
2852
2853 return 0;
2854}
2855
2856/*
2857 * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
2858 * called during ClientHello processing in order to select an ALPN protocol
2859 * from the client's list of offered protocols.
2860 */
2861void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
8cbfcc70
RS
2862 SSL_CTX_alpn_select_cb_func cb,
2863 void *arg)
0f113f3e 2864{
aff8c126
RS
2865 ctx->ext.alpn_select_cb = cb;
2866 ctx->ext.alpn_select_cb_arg = arg;
0f113f3e
MC
2867}
2868
2869/*
69687aa8
F
2870 * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
2871 * On return it sets |*data| to point to |*len| bytes of protocol name
0f113f3e
MC
2872 * (not including the leading length-prefix byte). If the server didn't
2873 * respond with a negotiated protocol then |*len| will be zero.
2874 */
6f017a8f 2875void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
817cd0d5 2876 unsigned int *len)
0f113f3e
MC
2877{
2878 *data = NULL;
2879 if (ssl->s3)
2880 *data = ssl->s3->alpn_selected;
2881 if (*data == NULL)
2882 *len = 0;
2883 else
348240c6 2884 *len = (unsigned int)ssl->s3->alpn_selected_len;
0f113f3e
MC
2885}
2886
74b4b494 2887int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
0f113f3e 2888 const char *label, size_t llen,
23cec1f4 2889 const unsigned char *context, size_t contextlen,
0f113f3e
MC
2890 int use_context)
2891{
c8a18468 2892 if (s->version < TLS1_VERSION && s->version != DTLS1_BAD_VER)
0f113f3e 2893 return -1;
e0af0405 2894
0f113f3e 2895 return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
23cec1f4
MC
2896 llen, context,
2897 contextlen, use_context);
0f113f3e 2898}
e0af0405 2899
b38ede80
TT
2900int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen,
2901 const char *label, size_t llen,
2902 const unsigned char *context,
2903 size_t contextlen)
2904{
2905 if (s->version != TLS1_3_VERSION)
2906 return 0;
2907
2908 return tls13_export_keying_material_early(s, out, olen, label, llen,
2909 context, contextlen);
2910}
2911
3c1d6bbc 2912static unsigned long ssl_session_hash(const SSL_SESSION *a)
0f113f3e 2913{
bd5d27c1 2914 const unsigned char *session_id = a->session_id;
0f113f3e 2915 unsigned long l;
bd5d27c1
DB
2916 unsigned char tmp_storage[4];
2917
2918 if (a->session_id_length < sizeof(tmp_storage)) {
2919 memset(tmp_storage, 0, sizeof(tmp_storage));
2920 memcpy(tmp_storage, a->session_id, a->session_id_length);
2921 session_id = tmp_storage;
2922 }
0f113f3e
MC
2923
2924 l = (unsigned long)
bd5d27c1
DB
2925 ((unsigned long)session_id[0]) |
2926 ((unsigned long)session_id[1] << 8L) |
2927 ((unsigned long)session_id[2] << 16L) |
2928 ((unsigned long)session_id[3] << 24L);
26a7d938 2929 return l;
0f113f3e
MC
2930}
2931
2932/*
2933 * NB: If this function (or indeed the hash function which uses a sort of
dc644fe2 2934 * coarser function than this one) is changed, ensure
0f113f3e
MC
2935 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
2936 * being able to construct an SSL_SESSION that will collide with any existing
2937 * session with a matching session ID.
2938 */
2939static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
2940{
2941 if (a->ssl_version != b->ssl_version)
208fb891 2942 return 1;
0f113f3e 2943 if (a->session_id_length != b->session_id_length)
208fb891 2944 return 1;
26a7d938 2945 return memcmp(a->session_id, b->session_id, a->session_id_length);
0f113f3e
MC
2946}
2947
2948/*
2949 * These wrapper functions should remain rather than redeclaring
d0fa136c 2950 * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
0f113f3e
MC
2951 * variable. The reason is that the functions aren't static, they're exposed
2952 * via ssl.h.
2953 */
97b17195 2954
4ebb342f 2955SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
0f113f3e
MC
2956{
2957 SSL_CTX *ret = NULL;
2958
2959 if (meth == NULL) {
2960 SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED);
26a7d938 2961 return NULL;
0f113f3e
MC
2962 }
2963
0fc32b07
MC
2964 if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
2965 return NULL;
7fa792d1 2966
0f113f3e
MC
2967 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
2968 SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
2969 goto err;
2970 }
b51bce94 2971 ret = OPENSSL_zalloc(sizeof(*ret));
0f113f3e
MC
2972 if (ret == NULL)
2973 goto err;
2974
0f113f3e 2975 ret->method = meth;
7946ab33
KR
2976 ret->min_proto_version = 0;
2977 ret->max_proto_version = 0;
0f113f3e
MC
2978 ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
2979 ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
64b25758 2980 /* We take the system default. */
0f113f3e 2981 ret->session_timeout = meth->get_timeout();
0f113f3e 2982 ret->references = 1;
16203f7b
AG
2983 ret->lock = CRYPTO_THREAD_lock_new();
2984 if (ret->lock == NULL) {
2985 SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
2986 OPENSSL_free(ret);
2987 return NULL;
2988 }
0f113f3e 2989 ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
0f113f3e 2990 ret->verify_mode = SSL_VERIFY_NONE;
0f113f3e
MC
2991 if ((ret->cert = ssl_cert_new()) == NULL)
2992 goto err;
2993
62d0577e 2994 ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
0f113f3e
MC
2995 if (ret->sessions == NULL)
2996 goto err;
2997 ret->cert_store = X509_STORE_new();
2998 if (ret->cert_store == NULL)
2999 goto err;
ed29e82a
RP
3000#ifndef OPENSSL_NO_CT
3001 ret->ctlog_store = CTLOG_STORE_new();
3002 if (ret->ctlog_store == NULL)
3003 goto err;
3004#endif
f865b081 3005
fa25763b 3006 if (!SSL_CTX_set_ciphersuites(ret, TLS_DEFAULT_CIPHERSUITES))
f865b081
MC
3007 goto err;
3008
61986d32 3009 if (!ssl_create_cipher_list(ret->method,
f865b081 3010 ret->tls13_ciphersuites,
a230b26e
EK
3011 &ret->cipher_list, &ret->cipher_list_by_id,
3012 SSL_DEFAULT_CIPHER_LIST, ret->cert)
3013 || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
0f113f3e
MC
3014 SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
3015 goto err2;
3016 }
3017
3018 ret->param = X509_VERIFY_PARAM_new();
a71edf3b 3019 if (ret->param == NULL)
0f113f3e
MC
3020 goto err;
3021
3022 if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) {
3023 SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
3024 goto err2;
3025 }
3026 if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) {
3027 SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
3028 goto err2;
3029 }
3030
fa7c2637 3031 if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL)
0f113f3e
MC
3032 goto err;
3033
25a807bc
F
3034 if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data))
3035 goto err;
0f113f3e 3036
4bfb96f2
TS
3037 if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL)
3038 goto err;
3039
0f113f3e
MC
3040 /* No compression for DTLS */
3041 if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
3042 ret->comp_methods = SSL_COMP_get_compression_methods();
3043
3044 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
d102d9df 3045 ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
566dda07 3046
4e2e1ec9 3047 /* Setup RFC5077 ticket keys */
aff8c126
RS
3048 if ((RAND_bytes(ret->ext.tick_key_name,
3049 sizeof(ret->ext.tick_key_name)) <= 0)
4bfb96f2
TS
3050 || (RAND_bytes(ret->ext.secure->tick_hmac_key,
3051 sizeof(ret->ext.secure->tick_hmac_key)) <= 0)
3052 || (RAND_bytes(ret->ext.secure->tick_aes_key,
3053 sizeof(ret->ext.secure->tick_aes_key)) <= 0))
0f113f3e 3054 ret->options |= SSL_OP_NO_TICKET;
6434abbf 3055
43054d3d
MC
3056 if (RAND_bytes(ret->ext.cookie_hmac_key,
3057 sizeof(ret->ext.cookie_hmac_key)) <= 0)
3058 goto err;
3059
edc032b5 3060#ifndef OPENSSL_NO_SRP
61986d32 3061 if (!SSL_CTX_SRP_CTX_init(ret))
69f68237 3062 goto err;
edc032b5 3063#endif
4db9677b 3064#ifndef OPENSSL_NO_ENGINE
0f113f3e
MC
3065# ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
3066# define eng_strx(x) #x
3067# define eng_str(x) eng_strx(x)
3068 /* Use specific client engine automatically... ignore errors */
3069 {
3070 ENGINE *eng;
3071 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
3072 if (!eng) {
3073 ERR_clear_error();
3074 ENGINE_load_builtin_engines();
3075 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
3076 }
3077 if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
3078 ERR_clear_error();
3079 }
3080# endif
3081#endif
3082 /*
3083 * Default is to connect to non-RI servers. When RI is more widely
3084 * deployed might change this.
3085 */
3086 ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
dc5744cb
EK
3087 /*
3088 * Disable compression by default to prevent CRIME. Applications can
3089 * re-enable compression by configuring
3090 * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
a5816a5a
MC
3091 * or by using the SSL_CONF library. Similarly we also enable TLSv1.3
3092 * middlebox compatibility by default. This may be disabled by default in
3093 * a later OpenSSL version.
dc5744cb 3094 */
a5816a5a 3095 ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
0f113f3e 3096
aff8c126 3097 ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
ba261f71 3098
bfa9a9af 3099 /*
c39e4048
BK
3100 * We cannot usefully set a default max_early_data here (which gets
3101 * propagated in SSL_new(), for the following reason: setting the
3102 * SSL field causes tls_construct_stoc_early_data() to tell the
3103 * client that early data will be accepted when constructing a TLS 1.3
3104 * session ticket, and the client will accordingly send us early data
3105 * when using that ticket (if the client has early data to send).
3106 * However, in order for the early data to actually be consumed by
3107 * the application, the application must also have calls to
3108 * SSL_read_early_data(); otherwise we'll just skip past the early data
3109 * and ignore it. So, since the application must add calls to
3110 * SSL_read_early_data(), we also require them to add
3111 * calls to SSL_CTX_set_max_early_data() in order to use early data,
3112 * eliminating the bandwidth-wasting early data in the case described
3113 * above.
bfa9a9af 3114 */
c39e4048 3115 ret->max_early_data = 0;
bfa9a9af 3116
8a5ed9dc
TM
3117 ssl_ctx_system_config(ret);
3118
16203f7b 3119 return ret;
0f113f3e
MC
3120 err:
3121 SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
3122 err2:
e0e920b1 3123 SSL_CTX_free(ret);
16203f7b 3124 return NULL;
0f113f3e 3125}
d02b48c6 3126
c5ebfcab 3127int SSL_CTX_up_ref(SSL_CTX *ctx)
a18a31e4 3128{
16203f7b 3129 int i;
c5ebfcab 3130
2f545ae4 3131 if (CRYPTO_UP_REF(&ctx->references, &i, ctx->lock) <= 0)
c5ebfcab
F
3132 return 0;
3133
3134 REF_PRINT_COUNT("SSL_CTX", ctx);
3135 REF_ASSERT_ISNT(i < 2);
3136 return ((i > 1) ? 1 : 0);
a18a31e4
MC
3137}
3138
4f43d0e7 3139void SSL_CTX_free(SSL_CTX *a)
0f113f3e
MC
3140{
3141 int i;
d02b48c6 3142
0f113f3e
MC
3143 if (a == NULL)
3144 return;
d02b48c6 3145
2f545ae4 3146 CRYPTO_DOWN_REF(&a->references, &i, a->lock);
f3f1cf84 3147 REF_PRINT_COUNT("SSL_CTX", a);
0f113f3e
MC
3148 if (i > 0)
3149 return;
f3f1cf84 3150 REF_ASSERT_ISNT(i < 0);
0f113f3e 3151
222561fe 3152 X509_VERIFY_PARAM_free(a->param);
919ba009 3153 dane_ctx_final(&a->dane);
0f113f3e
MC
3154
3155 /*
3156 * Free internal session cache. However: the remove_cb() may reference
3157 * the ex_data of SSL_CTX, thus the ex_data store can only be removed
3158 * after the sessions were flushed.
3159 * As the ex_data handling routines might also touch the session cache,
3160 * the most secure solution seems to be: empty (flush) the cache, then
3161 * free ex_data, then finally free the cache.
3162 * (See ticket [openssl.org #212].)
3163 */
3164 if (a->sessions != NULL)
3165 SSL_CTX_flush_sessions(a, 0);
3166
3167 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
25aaa98a 3168 lh_SSL_SESSION_free(a->sessions);
222561fe 3169 X509_STORE_free(a->cert_store);
ed29e82a
RP
3170#ifndef OPENSSL_NO_CT
3171 CTLOG_STORE_free(a->ctlog_store);
3172#endif
25aaa98a
RS
3173 sk_SSL_CIPHER_free(a->cipher_list);
3174 sk_SSL_CIPHER_free(a->cipher_list_by_id);
f865b081 3175 sk_SSL_CIPHER_free(a->tls13_ciphersuites);
e0e920b1 3176 ssl_cert_free(a->cert);
fa7c2637 3177 sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);
222561fe 3178 sk_X509_pop_free(a->extra_certs, X509_free);
0f113f3e 3179 a->comp_methods = NULL;
e783bae2 3180#ifndef OPENSSL_NO_SRTP
25aaa98a 3181 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
e783bae2 3182#endif
edc032b5 3183#ifndef OPENSSL_NO_SRP
0f113f3e 3184 SSL_CTX_SRP_CTX_free(a);
edc032b5 3185#endif
bdfe932d 3186#ifndef OPENSSL_NO_ENGINE
7c96dbcd 3187 ENGINE_finish(a->client_cert_engine);
ddac1974 3188#endif
8671b898 3189
e481f9b9 3190#ifndef OPENSSL_NO_EC
aff8c126
RS
3191 OPENSSL_free(a->ext.ecpointformats);
3192 OPENSSL_free(a->ext.supportedgroups);
8671b898 3193#endif
aff8c126 3194 OPENSSL_free(a->ext.alpn);
4bfb96f2 3195 OPENSSL_secure_free(a->ext.secure);
8671b898 3196
16203f7b
AG
3197 CRYPTO_THREAD_lock_free(a->lock);
3198
0f113f3e
MC
3199 OPENSSL_free(a);
3200}
d02b48c6 3201
3ae76679 3202void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
0f113f3e
MC
3203{
3204 ctx->default_passwd_callback = cb;
3205}
3206
3207void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
3208{
3209 ctx->default_passwd_callback_userdata = u;
3210}
3211
0c452abc
CH
3212pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
3213{
3214 return ctx->default_passwd_callback;
3215}
3216
3217void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
3218{
3219 return ctx->default_passwd_callback_userdata;
3220}
3221
a974e64a
MC
3222void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb)
3223{
3224 s->default_passwd_callback = cb;
3225}
3226
3227void SSL_set_default_passwd_cb_userdata(SSL *s, void *u)
3228{
3229 s->default_passwd_callback_userdata = u;
3230}
3231
0c452abc
CH
3232pem_password_cb *SSL_get_default_passwd_cb(SSL *s)
3233{
3234 return s->default_passwd_callback;
3235}
3236
3237void *SSL_get_default_passwd_cb_userdata(SSL *s)
3238{
3239 return s->default_passwd_callback_userdata;
3240}
3241
0f113f3e
MC
3242void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
3243 int (*cb) (X509_STORE_CTX *, void *),
3244 void *arg)
3245{
3246 ctx->app_verify_callback = cb;
3247 ctx->app_verify_arg = arg;
3248}
3249
3250void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
3251 int (*cb) (int, X509_STORE_CTX *))
3252{
3253 ctx->verify_mode = mode;
3254 ctx->default_verify_callback = cb;
3255}
3256
3257void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
3258{
3259 X509_VERIFY_PARAM_set_depth(ctx->param, depth);
3260}
3261
a230b26e 3262void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg)
0f113f3e
MC
3263{
3264 ssl_cert_set_cert_cb(c->cert, cb, arg);
3265}
3266
3267void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
3268{
3269 ssl_cert_set_cert_cb(s->cert, cb, arg);
3270}
18d71588 3271
2cf28d61 3272void ssl_set_masks(SSL *s)
0f113f3e 3273{
6383d316 3274 CERT *c = s->cert;
f7d53487 3275 uint32_t *pvalid = s->s3->tmp.valid_flags;
bc71f910 3276 int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
361a1191 3277 unsigned long mask_k, mask_a;
10bf4fc2 3278#ifndef OPENSSL_NO_EC
361a1191 3279 int have_ecc_cert, ecdsa_ok;
14536c8c 3280#endif
0f113f3e
MC
3281 if (c == NULL)
3282 return;
d02b48c6 3283
bc36ee62 3284#ifndef OPENSSL_NO_DH
0f113f3e 3285 dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL || c->dh_tmp_auto);
d02b48c6 3286#else
361a1191 3287 dh_tmp = 0;
d02b48c6
RE
3288#endif
3289
d0ff28f8 3290 rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
38e8f3cd
DSH
3291 rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
3292 dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID;
14536c8c 3293#ifndef OPENSSL_NO_EC
6383d316 3294 have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID;
14536c8c 3295#endif
0f113f3e
MC
3296 mask_k = 0;
3297 mask_a = 0;
0e1dba93 3298
d02b48c6 3299#ifdef CIPHER_DEBUG
b7557ccf
AG
3300 fprintf(stderr, "dht=%d re=%d rs=%d ds=%d\n",
3301 dh_tmp, rsa_enc, rsa_sign, dsa_sign);
0f113f3e
MC
3302#endif
3303
2a9b9654 3304#ifndef OPENSSL_NO_GOST
4020c0b3 3305 if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) {
e44380a9
DB
3306 mask_k |= SSL_kGOST;
3307 mask_a |= SSL_aGOST12;
3308 }
4020c0b3 3309 if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) {
e44380a9
DB
3310 mask_k |= SSL_kGOST;
3311 mask_a |= SSL_aGOST12;
3312 }
4020c0b3 3313 if (ssl_has_cert(s, SSL_PKEY_GOST01)) {
0f113f3e
MC
3314 mask_k |= SSL_kGOST;
3315 mask_a |= SSL_aGOST01;
3316 }
2a9b9654 3317#endif
0f113f3e 3318
361a1191 3319 if (rsa_enc)
0f113f3e 3320 mask_k |= SSL_kRSA;
d02b48c6 3321
0f113f3e
MC
3322 if (dh_tmp)
3323 mask_k |= SSL_kDHE;
d02b48c6 3324
6aaa29fb
DSH
3325 /*
3326 * If we only have an RSA-PSS certificate allow RSA authentication
3327 * if TLS 1.2 and peer supports it.
3328 */
3329
3330 if (rsa_enc || rsa_sign || (ssl_has_cert(s, SSL_PKEY_RSA_PSS_SIGN)
3331 && pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_EXPLICIT_SIGN
3332 && TLS1_get_version(s) == TLS1_2_VERSION))
0f113f3e 3333 mask_a |= SSL_aRSA;
d02b48c6 3334
0f113f3e
MC
3335 if (dsa_sign) {
3336 mask_a |= SSL_aDSS;
0f113f3e 3337 }
d02b48c6 3338
0f113f3e 3339 mask_a |= SSL_aNULL;
d02b48c6 3340
0f113f3e
MC
3341 /*
3342 * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
3343 * depending on the key usage extension.
3344 */
14536c8c 3345#ifndef OPENSSL_NO_EC
0f113f3e 3346 if (have_ecc_cert) {
a8d8e06b 3347 uint32_t ex_kusage;
4020c0b3 3348 ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509);
a8d8e06b 3349 ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE;
6383d316 3350 if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN))
0f113f3e 3351 ecdsa_ok = 0;
c7c46256 3352 if (ecdsa_ok)
0f113f3e 3353 mask_a |= SSL_aECDSA;
0f113f3e 3354 }
b2021556
DSH
3355 /* Allow Ed25519 for TLS 1.2 if peer supports it */
3356 if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED25519)
3357 && pvalid[SSL_PKEY_ED25519] & CERT_PKEY_EXPLICIT_SIGN
3358 && TLS1_get_version(s) == TLS1_2_VERSION)
3359 mask_a |= SSL_aECDSA;
0e1d6ecf
MC
3360
3361 /* Allow Ed448 for TLS 1.2 if peer supports it */
3362 if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED448)
3363 && pvalid[SSL_PKEY_ED448] & CERT_PKEY_EXPLICIT_SIGN
3364 && TLS1_get_version(s) == TLS1_2_VERSION)
3365 mask_a |= SSL_aECDSA;
14536c8c 3366#endif
ea262260 3367
10bf4fc2 3368#ifndef OPENSSL_NO_EC
fe6ef247 3369 mask_k |= SSL_kECDHE;
ea262260 3370#endif
ddac1974
NL
3371
3372#ifndef OPENSSL_NO_PSK
0f113f3e
MC
3373 mask_k |= SSL_kPSK;
3374 mask_a |= SSL_aPSK;
526f94ad
DSH
3375 if (mask_k & SSL_kRSA)
3376 mask_k |= SSL_kRSAPSK;
3377 if (mask_k & SSL_kDHE)
3378 mask_k |= SSL_kDHEPSK;
3379 if (mask_k & SSL_kECDHE)
3380 mask_k |= SSL_kECDHEPSK;
ddac1974
NL
3381#endif
3382
4d69f9e6
DSH
3383 s->s3->tmp.mask_k = mask_k;
3384 s->s3->tmp.mask_a = mask_a;
0f113f3e 3385}
d02b48c6 3386
ef236ec3
DSH
3387#ifndef OPENSSL_NO_EC
3388
a2f9200f 3389int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
0f113f3e 3390{
ce0c1f2b 3391 if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aECDSA) {
0f113f3e 3392 /* key usage, if present, must allow signing */
ce0c1f2b 3393 if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) {
0f113f3e
MC
3394 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
3395 SSL_R_ECC_CERT_NOT_FOR_SIGNING);
3396 return 0;
3397 }
3398 }
0f113f3e
MC
3399 return 1; /* all checks are ok */
3400}
ea262260 3401
ef236ec3
DSH
3402#endif
3403
a398f821 3404int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
0f113f3e
MC
3405 size_t *serverinfo_length)
3406{
a497cf25 3407 CERT_PKEY *cpk = s->s3->tmp.cert;
0f113f3e
MC
3408 *serverinfo_length = 0;
3409
a497cf25 3410 if (cpk == NULL || cpk->serverinfo == NULL)
0f113f3e
MC
3411 return 0;
3412
a497cf25
DSH
3413 *serverinfo = cpk->serverinfo;
3414 *serverinfo_length = cpk->serverinfo_length;
0f113f3e
MC
3415 return 1;
3416}
0f113f3e
MC
3417
3418void ssl_update_cache(SSL *s, int mode)
3419{
3420 int i;
3421
3422 /*
3423 * If the session_id_length is 0, we are not supposed to cache it, and it
3424 * would be rather hard to do anyway :-)
3425 */
3426 if (s->session->session_id_length == 0)
3427 return;
3428
d316cdcf
BK
3429 /*
3430 * If sid_ctx_length is 0 there is no specific application context
3431 * associated with this session, so when we try to resume it and
3432 * SSL_VERIFY_PEER is requested, we have no indication that this is
3433 * actually a session for the proper application context, and the
3434 * *handshake* will fail, not just the resumption attempt.
3435 * Do not cache these sessions that are not resumable.
3436 */
3437 if (s->session->sid_ctx_length == 0
3438 && (s->verify_mode & SSL_VERIFY_PEER) != 0)
3439 return;
3440
0f113f3e 3441 i = s->session_ctx->session_cache_mode;
5d61491c
MC
3442 if ((i & mode) != 0
3443 && (!s->hit || SSL_IS_TLS13(s))
3444 && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) != 0
0f113f3e 3445 || SSL_CTX_add_session(s->session_ctx, s->session))
5d61491c 3446 && s->session_ctx->new_session_cb != NULL) {
16203f7b 3447 SSL_SESSION_up_ref(s->session);
0f113f3e
MC
3448 if (!s->session_ctx->new_session_cb(s, s->session))
3449 SSL_SESSION_free(s->session);
3450 }
3451
3452 /* auto flush every 255 connections */
3453 if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
1fcb4e4d
BK
3454 int *stat, val;
3455 if (mode & SSL_SESS_CACHE_CLIENT)
3456 stat = &s->session_ctx->stats.sess_connect_good;
3457 else
3458 stat = &s->session_ctx->stats.sess_accept_good;
3459 if (CRYPTO_atomic_read(stat, &val, s->session_ctx->lock)
3460 && (val & 0xff) == 0xff)
0f113f3e 3461 SSL_CTX_flush_sessions(s->session_ctx, (unsigned long)time(NULL));
0f113f3e
MC
3462 }
3463}
d02b48c6 3464
ba168244 3465const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx)
0f113f3e
MC
3466{
3467 return ctx->method;
3468}
ba168244 3469
4ebb342f 3470const SSL_METHOD *SSL_get_ssl_method(SSL *s)
0f113f3e 3471{
26a7d938 3472 return s->method;
0f113f3e 3473}
d02b48c6 3474
4ebb342f 3475int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
0f113f3e 3476{
0f113f3e
MC
3477 int ret = 1;
3478
3479 if (s->method != meth) {
919ba009 3480 const SSL_METHOD *sm = s->method;
a230b26e 3481 int (*hf) (SSL *) = s->handshake_func;
0f113f3e 3482
919ba009 3483 if (sm->version == meth->version)
0f113f3e
MC
3484 s->method = meth;
3485 else {
919ba009 3486 sm->ssl_free(s);
0f113f3e
MC
3487 s->method = meth;
3488 ret = s->method->ssl_new(s);
3489 }
3490
919ba009 3491 if (hf == sm->ssl_connect)
0f113f3e 3492 s->handshake_func = meth->ssl_connect;
919ba009 3493 else if (hf == sm->ssl_accept)
0f113f3e
MC
3494 s->handshake_func = meth->ssl_accept;
3495 }
26a7d938 3496 return ret;
0f113f3e
MC
3497}
3498
3499int SSL_get_error(const SSL *s, int i)
3500{
3501 int reason;
3502 unsigned long l;
3503 BIO *bio;
3504
3505 if (i > 0)
26a7d938 3506 return SSL_ERROR_NONE;
0f113f3e
MC
3507
3508 /*
3509 * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
3510 * where we do encode the error
3511 */
3512 if ((l = ERR_peek_error()) != 0) {
3513 if (ERR_GET_LIB(l) == ERR_LIB_SYS)
26a7d938 3514 return SSL_ERROR_SYSCALL;
0f113f3e 3515 else
26a7d938 3516 return SSL_ERROR_SSL;
0f113f3e
MC
3517 }
3518
8051ab2b
MC
3519 if (SSL_want_read(s)) {
3520 bio = SSL_get_rbio(s);
3521 if (BIO_should_read(bio))
26a7d938 3522 return SSL_ERROR_WANT_READ;
8051ab2b
MC
3523 else if (BIO_should_write(bio))
3524 /*
3525 * This one doesn't make too much sense ... We never try to write
3526 * to the rbio, and an application program where rbio and wbio
3527 * are separate couldn't even know what it should wait for.
3528 * However if we ever set s->rwstate incorrectly (so that we have
3529 * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
3530 * wbio *are* the same, this test works around that bug; so it
3531 * might be safer to keep it.
3532 */
26a7d938 3533 return SSL_ERROR_WANT_WRITE;
8051ab2b
MC
3534 else if (BIO_should_io_special(bio)) {
3535 reason = BIO_get_retry_reason(bio);
3536 if (reason == BIO_RR_CONNECT)
26a7d938 3537 return SSL_ERROR_WANT_CONNECT;
8051ab2b 3538 else if (reason == BIO_RR_ACCEPT)
26a7d938 3539 return SSL_ERROR_WANT_ACCEPT;
8051ab2b 3540 else
26a7d938 3541 return SSL_ERROR_SYSCALL; /* unknown */
0f113f3e 3542 }
8051ab2b 3543 }
0f113f3e 3544
8051ab2b 3545 if (SSL_want_write(s)) {
69687aa8 3546 /* Access wbio directly - in order to use the buffered bio if present */
8051ab2b
MC
3547 bio = s->wbio;
3548 if (BIO_should_write(bio))
26a7d938 3549 return SSL_ERROR_WANT_WRITE;
8051ab2b 3550 else if (BIO_should_read(bio))
2e7dc7cd 3551 /*
8051ab2b 3552 * See above (SSL_want_read(s) with BIO_should_write(bio))
2e7dc7cd 3553 */
26a7d938 3554 return SSL_ERROR_WANT_READ;
8051ab2b
MC
3555 else if (BIO_should_io_special(bio)) {
3556 reason = BIO_get_retry_reason(bio);
3557 if (reason == BIO_RR_CONNECT)
26a7d938 3558 return SSL_ERROR_WANT_CONNECT;
8051ab2b 3559 else if (reason == BIO_RR_ACCEPT)
26a7d938 3560 return SSL_ERROR_WANT_ACCEPT;
8051ab2b 3561 else
26a7d938 3562 return SSL_ERROR_SYSCALL;
0f113f3e 3563 }
07bbc92c 3564 }
6b1bb98f 3565 if (SSL_want_x509_lookup(s))
26a7d938 3566 return SSL_ERROR_WANT_X509_LOOKUP;
6b1bb98f 3567 if (SSL_want_async(s))
8051ab2b 3568 return SSL_ERROR_WANT_ASYNC;
6b1bb98f 3569 if (SSL_want_async_job(s))
8051ab2b 3570 return SSL_ERROR_WANT_ASYNC_JOB;
a9c0d8be
DB
3571 if (SSL_want_client_hello_cb(s))
3572 return SSL_ERROR_WANT_CLIENT_HELLO_CB;
8051ab2b
MC
3573
3574 if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
3575 (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY))
26a7d938 3576 return SSL_ERROR_ZERO_RETURN;
8051ab2b 3577
26a7d938 3578 return SSL_ERROR_SYSCALL;
0f113f3e 3579}
d02b48c6 3580
add2f5ca
MC
3581static int ssl_do_handshake_intern(void *vargs)
3582{
3583 struct ssl_async_args *args;
3584 SSL *s;
3585
3586 args = (struct ssl_async_args *)vargs;
3587 s = args->s;
3588
3589 return s->handshake_func(s);
3590}
3591
4f43d0e7 3592int SSL_do_handshake(SSL *s)
0f113f3e
MC
3593{
3594 int ret = 1;
3595
3596 if (s->handshake_func == NULL) {
3597 SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET);
add2f5ca 3598 return -1;
0f113f3e
MC
3599 }
3600
3eaa4170 3601 ossl_statem_check_finish_init(s, -1);
49e7fe12 3602
c7f47786 3603 s->method->ssl_renegotiate_check(s, 0);
0f113f3e 3604
190b9a03
PY
3605 if (SSL_is_server(s)) {
3606 /* clear SNI settings at server-side */
3607 OPENSSL_free(s->ext.hostname);
3608 s->ext.hostname = NULL;
3609 }
3610
0f113f3e 3611 if (SSL_in_init(s) || SSL_in_before(s)) {
e8aa8b6c 3612 if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
add2f5ca
MC
3613 struct ssl_async_args args;
3614
3615 args.s = s;
3616
7fecbf6f 3617 ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
add2f5ca
MC
3618 } else {
3619 ret = s->handshake_func(s);
3620 }
0f113f3e 3621 }
add2f5ca 3622 return ret;
0f113f3e
MC
3623}
3624
4f43d0e7 3625void SSL_set_accept_state(SSL *s)
0f113f3e
MC
3626{
3627 s->server = 1;
3628 s->shutdown = 0;
fe3a3291 3629 ossl_statem_clear(s);
0f113f3e 3630 s->handshake_func = s->method->ssl_accept;
d31fb0b5 3631 clear_ciphers(s);
0f113f3e 3632}
d02b48c6 3633
4f43d0e7 3634void SSL_set_connect_state(SSL *s)
0f113f3e
MC
3635{
3636 s->server = 0;
3637 s->shutdown = 0;
fe3a3291 3638 ossl_statem_clear(s);
0f113f3e 3639 s->handshake_func = s->method->ssl_connect;
d31fb0b5 3640 clear_ciphers(s);
0f113f3e 3641}
d02b48c6 3642
4f43d0e7 3643int ssl_undefined_function(SSL *s)
0f113f3e
MC
3644{
3645 SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
26a7d938 3646 return 0;
0f113f3e 3647}
d02b48c6 3648
41a15c4f 3649int ssl_undefined_void_function(void)
0f113f3e
MC
3650{
3651 SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,
3652 ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
26a7d938 3653 return 0;
0f113f3e 3654}
41a15c4f 3655
0821bcd4 3656int ssl_undefined_const_function(const SSL *s)
0f113f3e 3657{
26a7d938 3658 return 0;
0f113f3e 3659}
0821bcd4 3660
2b8fa1d5 3661const SSL_METHOD *ssl_bad_method(int ver)
0f113f3e
MC
3662{
3663 SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
26a7d938 3664 return NULL;
0f113f3e 3665}
d02b48c6 3666
3eb2aff4 3667const char *ssl_protocol_to_string(int version)
7d650072 3668{
2abacef1
MC
3669 switch(version)
3670 {
3671 case TLS1_3_VERSION:
582a17d6 3672 return "TLSv1.3";
2abacef1
MC
3673
3674 case TLS1_2_VERSION:
7d650072 3675 return "TLSv1.2";
2abacef1
MC
3676
3677 case TLS1_1_VERSION:
7d650072 3678 return "TLSv1.1";
2abacef1
MC
3679
3680 case TLS1_VERSION:
ee3a6c64 3681 return "TLSv1";
2abacef1
MC
3682
3683 case SSL3_VERSION:
7d650072 3684 return "SSLv3";
2abacef1
MC
3685
3686 case DTLS1_BAD_VER:
7d650072 3687 return "DTLSv0.9";
2abacef1
MC
3688
3689 case DTLS1_VERSION:
7d650072 3690 return "DTLSv1";
2abacef1
MC
3691
3692 case DTLS1_2_VERSION:
7d650072 3693 return "DTLSv1.2";
2abacef1
MC
3694
3695 default:
3696 return "unknown";
3697 }
0f113f3e 3698}
d02b48c6 3699
7d650072
KR
3700const char *SSL_get_version(const SSL *s)
3701{
3eb2aff4 3702 return ssl_protocol_to_string(s->version);
7d650072
KR
3703}
3704
4f43d0e7 3705SSL *SSL_dup(SSL *s)
0f113f3e
MC
3706{
3707 STACK_OF(X509_NAME) *sk;
3708 X509_NAME *xn;
3709 SSL *ret;
3710 int i;
3711
919ba009
VD
3712 /* If we're not quiescent, just up_ref! */
3713 if (!SSL_in_init(s) || !SSL_in_before(s)) {
2f545ae4 3714 CRYPTO_UP_REF(&s->references, &i, s->lock);
919ba009
VD
3715 return s;
3716 }
3717
3718 /*
3719 * Otherwise, copy configuration state, and session if set.
3720 */
0f113f3e 3721 if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
26a7d938 3722 return NULL;
0f113f3e 3723
0f113f3e 3724 if (s->session != NULL) {
919ba009
VD
3725 /*
3726 * Arranges to share the same session via up_ref. This "copies"
3727 * session-id, SSL_METHOD, sid_ctx, and 'cert'
3728 */
61986d32 3729 if (!SSL_copy_session_id(ret, s))
17dd65e6 3730 goto err;
0f113f3e
MC
3731 } else {
3732 /*
3733 * No session has been established yet, so we have to expect that
3734 * s->cert or ret->cert will be changed later -- they should not both
3735 * point to the same object, and thus we can't use
3736 * SSL_copy_session_id.
3737 */
919ba009
VD
3738 if (!SSL_set_ssl_method(ret, s->method))
3739 goto err;
0f113f3e
MC
3740
3741 if (s->cert != NULL) {
e0e920b1 3742 ssl_cert_free(ret->cert);
0f113f3e
MC
3743 ret->cert = ssl_cert_dup(s->cert);
3744 if (ret->cert == NULL)
3745 goto err;
3746 }
3747
348240c6
MC
3748 if (!SSL_set_session_id_context(ret, s->sid_ctx,
3749 (int)s->sid_ctx_length))
69f68237 3750 goto err;
0f113f3e
MC
3751 }
3752
9f6b22b8
VD
3753 if (!ssl_dane_dup(ret, s))
3754 goto err;
919ba009 3755 ret->version = s->version;
0f113f3e
MC
3756 ret->options = s->options;
3757 ret->mode = s->mode;
3758 SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
3759 SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
3760 ret->msg_callback = s->msg_callback;
3761 ret->msg_callback_arg = s->msg_callback_arg;
3762 SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
3763 SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
3764 ret->generate_session_id = s->generate_session_id;
3765
3766 SSL_set_info_callback(ret, SSL_get_info_callback(s));
3767
0f113f3e
MC
3768 /* copy app data, a little dangerous perhaps */
3769 if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
3770 goto err;
3771
3772 /* setup rbio, and wbio */
3773 if (s->rbio != NULL) {
3774 if (!BIO_dup_state(s->rbio, (char *)&ret->rbio))
3775 goto err;
3776 }
3777 if (s->wbio != NULL) {
3778 if (s->wbio != s->rbio) {
3779 if (!BIO_dup_state(s->wbio, (char *)&ret->wbio))
3780 goto err;
65e2d672
MC
3781 } else {
3782 BIO_up_ref(ret->rbio);
0f113f3e 3783 ret->wbio = ret->rbio;
65e2d672 3784 }
0f113f3e 3785 }
919ba009 3786
0f113f3e 3787 ret->server = s->server;
919ba009
VD
3788 if (s->handshake_func) {
3789 if (s->server)
3790 SSL_set_accept_state(ret);
3791 else
3792 SSL_set_connect_state(ret);
3793 }
0f113f3e 3794 ret->shutdown = s->shutdown;
0f113f3e
MC
3795 ret->hit = s->hit;
3796
a974e64a
MC
3797 ret->default_passwd_callback = s->default_passwd_callback;
3798 ret->default_passwd_callback_userdata = s->default_passwd_callback_userdata;
3799
0f113f3e
MC
3800 X509_VERIFY_PARAM_inherit(ret->param, s->param);
3801
3802 /* dup the cipher_list and cipher_list_by_id stacks */
3803 if (s->cipher_list != NULL) {
3804 if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
3805 goto err;
3806 }
3807 if (s->cipher_list_by_id != NULL)
3808 if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id))
3809 == NULL)
3810 goto err;
3811
3812 /* Dup the client_CA list */
fa7c2637
DSH
3813 if (s->ca_names != NULL) {
3814 if ((sk = sk_X509_NAME_dup(s->ca_names)) == NULL)
0f113f3e 3815 goto err;
fa7c2637 3816 ret->ca_names = sk;
0f113f3e
MC
3817 for (i = 0; i < sk_X509_NAME_num(sk); i++) {
3818 xn = sk_X509_NAME_value(sk, i);
3819 if (sk_X509_NAME_set(sk, i, X509_NAME_dup(xn)) == NULL) {
3820 X509_NAME_free(xn);
3821 goto err;
3822 }
3823 }
3824 }
66696478 3825 return ret;
0f113f3e 3826
0f113f3e 3827 err:
66696478
RS
3828 SSL_free(ret);
3829 return NULL;
0f113f3e 3830}
d02b48c6 3831
4f43d0e7 3832void ssl_clear_cipher_ctx(SSL *s)
0f113f3e
MC
3833{
3834 if (s->enc_read_ctx != NULL) {
846ec07d 3835 EVP_CIPHER_CTX_free(s->enc_read_ctx);
0f113f3e
MC
3836 s->enc_read_ctx = NULL;
3837 }
3838 if (s->enc_write_ctx != NULL) {
846ec07d 3839 EVP_CIPHER_CTX_free(s->enc_write_ctx);
0f113f3e
MC
3840 s->enc_write_ctx = NULL;
3841 }
09b6c2ef 3842#ifndef OPENSSL_NO_COMP
efa7dd64
RS
3843 COMP_CTX_free(s->expand);
3844 s->expand = NULL;
3845 COMP_CTX_free(s->compress);
3846 s->compress = NULL;
0f113f3e
MC
3847#endif
3848}
d02b48c6 3849
0821bcd4 3850X509 *SSL_get_certificate(const SSL *s)
0f113f3e
MC
3851{
3852 if (s->cert != NULL)
26a7d938 3853 return s->cert->key->x509;
0f113f3e 3854 else
26a7d938 3855 return NULL;
0f113f3e 3856}
d02b48c6 3857
a25f9adc 3858EVP_PKEY *SSL_get_privatekey(const SSL *s)
0f113f3e
MC
3859{
3860 if (s->cert != NULL)
26a7d938 3861 return s->cert->key->privatekey;
0f113f3e 3862 else
26a7d938 3863 return NULL;
0f113f3e 3864}
d02b48c6 3865
a25f9adc 3866X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
0f113f3e
MC
3867{
3868 if (ctx->cert != NULL)
3869 return ctx->cert->key->x509;
3870 else
3871 return NULL;
3872}
a25f9adc
DSH
3873
3874EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
0f113f3e
MC
3875{
3876 if (ctx->cert != NULL)
3877 return ctx->cert->key->privatekey;
3878 else
3879 return NULL;
3880}
a25f9adc 3881
babb3798 3882const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
0f113f3e
MC
3883{
3884 if ((s->session != NULL) && (s->session->cipher != NULL))
26a7d938
K
3885 return s->session->cipher;
3886 return NULL;
0f113f3e
MC
3887}
3888
0aed6e44
BK
3889const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s)
3890{
3891 return s->s3->tmp.new_cipher;
3892}
3893
377dcdba 3894const COMP_METHOD *SSL_get_current_compression(SSL *s)
0f113f3e 3895{
9a555706
RS
3896#ifndef OPENSSL_NO_COMP
3897 return s->compress ? COMP_CTX_get_method(s->compress) : NULL;
3898#else
3899 return NULL;
3900#endif
0f113f3e 3901}
377dcdba
RL
3902
3903const COMP_METHOD *SSL_get_current_expansion(SSL *s)
0f113f3e 3904{
9a555706
RS
3905#ifndef OPENSSL_NO_COMP
3906 return s->expand ? COMP_CTX_get_method(s->expand) : NULL;
3907#else
3908 return NULL;
0f113f3e 3909#endif
9a555706 3910}
0f113f3e 3911
46417569 3912int ssl_init_wbio_buffer(SSL *s)
0f113f3e
MC
3913{
3914 BIO *bbio;
3915
2e7dc7cd
MC
3916 if (s->bbio != NULL) {
3917 /* Already buffered. */
3918 return 1;
0f113f3e 3919 }
46417569 3920
2e7dc7cd
MC
3921 bbio = BIO_new(BIO_f_buffer());
3922 if (bbio == NULL || !BIO_set_read_buffer_size(bbio, 1)) {
3923 BIO_free(bbio);
0f113f3e 3924 SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB);
46417569 3925 return 0;
0f113f3e 3926 }
2e7dc7cd
MC
3927 s->bbio = bbio;
3928 s->wbio = BIO_push(bbio, s->wbio);
46417569
MC
3929
3930 return 1;
0f113f3e 3931}
413c4f45 3932
b77f3ed1 3933int ssl_free_wbio_buffer(SSL *s)
0f113f3e 3934{
62adbcee 3935 /* callers ensure s is never null */
0f113f3e 3936 if (s->bbio == NULL)
b77f3ed1 3937 return 1;
0f113f3e 3938
2e7dc7cd 3939 s->wbio = BIO_pop(s->wbio);
b77f3ed1
MC
3940 if (!ossl_assert(s->wbio != NULL))
3941 return 0;
0f113f3e
MC
3942 BIO_free(s->bbio);
3943 s->bbio = NULL;
b77f3ed1
MC
3944
3945 return 1;
0f113f3e
MC
3946}
3947
3948void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
3949{
3950 ctx->quiet_shutdown = mode;
3951}
58964a49 3952
0821bcd4 3953int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
0f113f3e 3954{
26a7d938 3955 return ctx->quiet_shutdown;
0f113f3e 3956}
58964a49 3957
0f113f3e
MC
3958void SSL_set_quiet_shutdown(SSL *s, int mode)
3959{
3960 s->quiet_shutdown = mode;
3961}
58964a49 3962
0821bcd4 3963int SSL_get_quiet_shutdown(const SSL *s)
0f113f3e 3964{
26a7d938 3965 return s->quiet_shutdown;
0f113f3e 3966}
58964a49 3967
0f113f3e
MC
3968void SSL_set_shutdown(SSL *s, int mode)
3969{
3970 s->shutdown = mode;
3971}
58964a49 3972
0821bcd4 3973int SSL_get_shutdown(const SSL *s)
0f113f3e 3974{
6546e9b2 3975 return s->shutdown;
0f113f3e 3976}
58964a49 3977
0821bcd4 3978int SSL_version(const SSL *s)
0f113f3e 3979{
6546e9b2
AG
3980 return s->version;
3981}
3982
3983int SSL_client_version(const SSL *s)
3984{
3985 return s->client_version;
0f113f3e 3986}
58964a49 3987
0821bcd4 3988SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
0f113f3e 3989{
6546e9b2 3990 return ssl->ctx;
0f113f3e
MC
3991}
3992
3993SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
3994{
24a0d393 3995 CERT *new_cert;
0f113f3e
MC
3996 if (ssl->ctx == ctx)
3997 return ssl->ctx;
0f113f3e 3998 if (ctx == NULL)
222da979 3999 ctx = ssl->session_ctx;
24a0d393
KR
4000 new_cert = ssl_cert_dup(ctx->cert);
4001 if (new_cert == NULL) {
4002 return NULL;
0f113f3e 4003 }
21181889
MC
4004
4005 if (!custom_exts_copy_flags(&new_cert->custext, &ssl->cert->custext)) {
4006 ssl_cert_free(new_cert);
4007 return NULL;
4008 }
4009
24a0d393
KR
4010 ssl_cert_free(ssl->cert);
4011 ssl->cert = new_cert;
0f113f3e
MC
4012
4013 /*
4014 * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
4015 * so setter APIs must prevent invalid lengths from entering the system.
4016 */
380a522f
MC
4017 if (!ossl_assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx)))
4018 return NULL;
0f113f3e
MC
4019
4020 /*
4021 * If the session ID context matches that of the parent SSL_CTX,
4022 * inherit it from the new SSL_CTX as well. If however the context does
4023 * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
4024 * leave it unchanged.
4025 */
4026 if ((ssl->ctx != NULL) &&
4027 (ssl->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
4028 (memcmp(ssl->sid_ctx, ssl->ctx->sid_ctx, ssl->sid_ctx_length) == 0)) {
4029 ssl->sid_ctx_length = ctx->sid_ctx_length;
4030 memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
4031 }
4032
16203f7b 4033 SSL_CTX_up_ref(ctx);
a230b26e 4034 SSL_CTX_free(ssl->ctx); /* decrement reference count */
0f113f3e
MC
4035 ssl->ctx = ctx;
4036
16203f7b 4037 return ssl->ctx;
0f113f3e 4038}
ed3883d2 4039
4f43d0e7 4040int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
0f113f3e 4041{
26a7d938 4042 return X509_STORE_set_default_paths(ctx->cert_store);
0f113f3e 4043}
58964a49 4044
d84a7b20
MC
4045int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
4046{
4047 X509_LOOKUP *lookup;
4048
4049 lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir());
4050 if (lookup == NULL)
4051 return 0;
4052 X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
4053
4054 /* Clear any errors if the default directory does not exist */
4055 ERR_clear_error();
4056
4057 return 1;
4058}
4059
4060int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
4061{
4062 X509_LOOKUP *lookup;
4063
4064 lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file());
4065 if (lookup == NULL)
4066 return 0;
4067
4068 X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
4069
4070 /* Clear any errors if the default file does not exist */
4071 ERR_clear_error();
4072
4073 return 1;
4074}
4075
303c0028 4076int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
0f113f3e
MC
4077 const char *CApath)
4078{
26a7d938 4079 return X509_STORE_load_locations(ctx->cert_store, CAfile, CApath);
0f113f3e 4080}
58964a49 4081
45d87a1f 4082void SSL_set_info_callback(SSL *ssl,
0f113f3e
MC
4083 void (*cb) (const SSL *ssl, int type, int val))
4084{
4085 ssl->info_callback = cb;
4086}
4087
4088/*
4089 * One compiler (Diab DCC) doesn't like argument names in returned function
4090 * pointer.
4091 */
4092void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
4093 int /* type */ ,
4094 int /* val */ ) {
4095 return ssl->info_callback;
4096}
58964a49 4097
0f113f3e
MC
4098void SSL_set_verify_result(SSL *ssl, long arg)
4099{
4100 ssl->verify_result = arg;
4101}
58964a49 4102
0821bcd4 4103long SSL_get_verify_result(const SSL *ssl)
0f113f3e 4104{
26a7d938 4105 return ssl->verify_result;
0f113f3e
MC
4106}
4107
d9f1c639 4108size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen)
858618e7 4109{
6b8f5d0d 4110 if (outlen == 0)
858618e7
NM
4111 return sizeof(ssl->s3->client_random);
4112 if (outlen > sizeof(ssl->s3->client_random))
4113 outlen = sizeof(ssl->s3->client_random);
4114 memcpy(out, ssl->s3->client_random, outlen);
d9f1c639 4115 return outlen;
858618e7
NM
4116}
4117
d9f1c639 4118size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen)
858618e7 4119{
6b8f5d0d 4120 if (outlen == 0)
858618e7
NM
4121 return sizeof(ssl->s3->server_random);
4122 if (outlen > sizeof(ssl->s3->server_random))
4123 outlen = sizeof(ssl->s3->server_random);
4124 memcpy(out, ssl->s3->server_random, outlen);
d9f1c639 4125 return outlen;
858618e7
NM
4126}
4127
d9f1c639 4128size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
a230b26e 4129 unsigned char *out, size_t outlen)
858618e7 4130{
d9f1c639
MC
4131 if (outlen == 0)
4132 return session->master_key_length;
8c1a5343 4133 if (outlen > session->master_key_length)
858618e7
NM
4134 outlen = session->master_key_length;
4135 memcpy(out, session->master_key, outlen);
d9f1c639 4136 return outlen;
858618e7
NM
4137}
4138
725b0f1e 4139int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
911d63f2
MC
4140 size_t len)
4141{
4142 if (len > sizeof(sess->master_key))
4143 return 0;
4144
4145 memcpy(sess->master_key, in, len);
4146 sess->master_key_length = len;
911d63f2
MC
4147 return 1;
4148}
4149
4150
0f113f3e
MC
4151int SSL_set_ex_data(SSL *s, int idx, void *arg)
4152{
26a7d938 4153 return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
0f113f3e
MC
4154}
4155
4156void *SSL_get_ex_data(const SSL *s, int idx)
4157{
26a7d938 4158 return CRYPTO_get_ex_data(&s->ex_data, idx);
0f113f3e
MC
4159}
4160
0f113f3e
MC
4161int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
4162{
26a7d938 4163 return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
0f113f3e
MC
4164}
4165
4166void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
4167{
26a7d938 4168 return CRYPTO_get_ex_data(&s->ex_data, idx);
0f113f3e 4169}
58964a49 4170
0821bcd4 4171X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
0f113f3e 4172{
26a7d938 4173 return ctx->cert_store;
0f113f3e 4174}
413c4f45 4175
0f113f3e
MC
4176void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
4177{
222561fe 4178 X509_STORE_free(ctx->cert_store);
0f113f3e
MC
4179 ctx->cert_store = store;
4180}
413c4f45 4181
b50052db
TS
4182void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store)
4183{
4184 if (store != NULL)
4185 X509_STORE_up_ref(store);
4186 SSL_CTX_set_cert_store(ctx, store);
4187}
4188
0821bcd4 4189int SSL_want(const SSL *s)
0f113f3e 4190{
26a7d938 4191 return s->rwstate;
0f113f3e 4192}
413c4f45 4193
0f113f3e 4194/**
4f43d0e7
BL
4195 * \brief Set the callback for generating temporary DH keys.
4196 * \param ctx the SSL context.
4197 * \param dh the callback
4198 */
4199
bc36ee62 4200#ifndef OPENSSL_NO_DH
0f113f3e
MC
4201void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
4202 DH *(*dh) (SSL *ssl, int is_export,
4203 int keylength))
4204{
4205 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
4206}
f8c3c05d 4207
0f113f3e
MC
4208void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
4209 int keylength))
4210{
4211 SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
4212}
79df9d62 4213#endif
15d21c2d 4214
ddac1974
NL
4215#ifndef OPENSSL_NO_PSK
4216int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
0f113f3e
MC
4217{
4218 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
a230b26e 4219 SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
0f113f3e
MC
4220 return 0;
4221 }
df6da24b 4222 OPENSSL_free(ctx->cert->psk_identity_hint);
0f113f3e 4223 if (identity_hint != NULL) {
7644a9ae 4224 ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
df6da24b 4225 if (ctx->cert->psk_identity_hint == NULL)
0f113f3e
MC
4226 return 0;
4227 } else
df6da24b 4228 ctx->cert->psk_identity_hint = NULL;
0f113f3e
MC
4229 return 1;
4230}
ddac1974
NL
4231
4232int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
0f113f3e
MC
4233{
4234 if (s == NULL)
4235 return 0;
4236
0f113f3e
MC
4237 if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
4238 SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
4239 return 0;
4240 }
df6da24b 4241 OPENSSL_free(s->cert->psk_identity_hint);
0f113f3e 4242 if (identity_hint != NULL) {
7644a9ae 4243 s->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
df6da24b 4244 if (s->cert->psk_identity_hint == NULL)
0f113f3e
MC
4245 return 0;
4246 } else
df6da24b 4247 s->cert->psk_identity_hint = NULL;
0f113f3e
MC
4248 return 1;
4249}
ddac1974
NL
4250
4251const char *SSL_get_psk_identity_hint(const SSL *s)
0f113f3e
MC
4252{
4253 if (s == NULL || s->session == NULL)
4254 return NULL;
26a7d938 4255 return s->session->psk_identity_hint;
0f113f3e 4256}
ddac1974
NL
4257
4258const char *SSL_get_psk_identity(const SSL *s)
0f113f3e
MC
4259{
4260 if (s == NULL || s->session == NULL)
4261 return NULL;
26a7d938 4262 return s->session->psk_identity;
0f113f3e 4263}
7806f3dd 4264
8cbfcc70 4265void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb)
0f113f3e
MC
4266{
4267 s->psk_client_callback = cb;
4268}
7806f3dd 4269
8cbfcc70 4270void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb)
0f113f3e
MC
4271{
4272 ctx->psk_client_callback = cb;
4273}
7806f3dd 4274
8cbfcc70 4275void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb)
0f113f3e
MC
4276{
4277 s->psk_server_callback = cb;
4278}
7806f3dd 4279
8cbfcc70 4280void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb)
0f113f3e
MC
4281{
4282 ctx->psk_server_callback = cb;
4283}
4284#endif
4285
f46184bd
MC
4286void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb)
4287{
4288 s->psk_find_session_cb = cb;
4289}
4290
4291void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
4292 SSL_psk_find_session_cb_func cb)
4293{
4294 ctx->psk_find_session_cb = cb;
4295}
4296
4297void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb)
4298{
4299 s->psk_use_session_cb = cb;
4300}
4301
4302void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
4303 SSL_psk_use_session_cb_func cb)
4304{
4305 ctx->psk_use_session_cb = cb;
4306}
4307
0f113f3e
MC
4308void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
4309 void (*cb) (int write_p, int version,
4310 int content_type, const void *buf,
4311 size_t len, SSL *ssl, void *arg))
4312{
4313 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
4314}
4315
4316void SSL_set_msg_callback(SSL *ssl,
4317 void (*cb) (int write_p, int version,
4318 int content_type, const void *buf,
4319 size_t len, SSL *ssl, void *arg))
4320{
4321 SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
4322}
a661b653 4323
7c2d4fee 4324void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
0f113f3e
MC
4325 int (*cb) (SSL *ssl,
4326 int
4327 is_forward_secure))
4328{
4329 SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
4330 (void (*)(void))cb);
4331}
4332
7c2d4fee 4333void SSL_set_not_resumable_session_callback(SSL *ssl,
0f113f3e
MC
4334 int (*cb) (SSL *ssl,
4335 int is_forward_secure))
4336{
4337 SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
4338 (void (*)(void))cb);
4339}
4340
c649d10d
TS
4341void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
4342 size_t (*cb) (SSL *ssl, int type,
4343 size_t len, void *arg))
4344{
4345 ctx->record_padding_cb = cb;
4346}
4347
4348void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg)
4349{
4350 ctx->record_padding_arg = arg;
4351}
4352
4353void *SSL_CTX_get_record_padding_callback_arg(SSL_CTX *ctx)
4354{
4355 return ctx->record_padding_arg;
4356}
4357
4358int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size)
4359{
4360 /* block size of 0 or 1 is basically no padding */
4361 if (block_size == 1)
4362 ctx->block_padding = 0;
4363 else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
4364 ctx->block_padding = block_size;
4365 else
4366 return 0;
4367 return 1;
4368}
4369
4370void SSL_set_record_padding_callback(SSL *ssl,
4371 size_t (*cb) (SSL *ssl, int type,
4372 size_t len, void *arg))
4373{
4374 ssl->record_padding_cb = cb;
4375}
4376
4377void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg)
4378{
4379 ssl->record_padding_arg = arg;
4380}
4381
4382void *SSL_get_record_padding_callback_arg(SSL *ssl)
4383{
4384 return ssl->record_padding_arg;
4385}
4386
4387int SSL_set_block_padding(SSL *ssl, size_t block_size)
4388{
4389 /* block size of 0 or 1 is basically no padding */
4390 if (block_size == 1)
4391 ssl->block_padding = 0;
4392 else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
4393 ssl->block_padding = block_size;
4394 else
4395 return 0;
4396 return 1;
4397}
4398
0f113f3e
MC
4399/*
4400 * Allocates new EVP_MD_CTX and sets pointer to it into given pointer
8483a003 4401 * variable, freeing EVP_MD_CTX previously stored in that variable, if any.
69687aa8 4402 * If EVP_MD pointer is passed, initializes ctx with this |md|.
48722ff5 4403 * Returns the newly allocated ctx;
8671b898 4404 */
b948e2c5 4405
0f113f3e 4406EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md)
b948e2c5 4407{
0f113f3e 4408 ssl_clear_hash_ctx(hash);
bfb0641f 4409 *hash = EVP_MD_CTX_new();
5f3d93e4 4410 if (*hash == NULL || (md && EVP_DigestInit_ex(*hash, md, NULL) <= 0)) {
bfb0641f 4411 EVP_MD_CTX_free(*hash);
5f3d93e4
MC
4412 *hash = NULL;
4413 return NULL;
4414 }
0f113f3e 4415 return *hash;
b948e2c5 4416}
0f113f3e
MC
4417
4418void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
b948e2c5
DSH
4419{
4420
0d9824c1 4421 EVP_MD_CTX_free(*hash);
0f113f3e 4422 *hash = NULL;
b948e2c5 4423}
a661b653 4424
48fbcbac 4425/* Retrieve handshake hashes */
8c1a5343
MC
4426int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
4427 size_t *hashlen)
48fbcbac 4428{
6e59a892 4429 EVP_MD_CTX *ctx = NULL;
28ba2541 4430 EVP_MD_CTX *hdgst = s->s3->handshake_dgst;
8c1a5343
MC
4431 int hashleni = EVP_MD_CTX_size(hdgst);
4432 int ret = 0;
4433
f63a17d6
MC
4434 if (hashleni < 0 || (size_t)hashleni > outlen) {
4435 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
4436 ERR_R_INTERNAL_ERROR);
28ba2541 4437 goto err;
f63a17d6 4438 }
8c1a5343 4439
bfb0641f 4440 ctx = EVP_MD_CTX_new();
8c1a5343 4441 if (ctx == NULL)
6e59a892 4442 goto err;
8c1a5343 4443
6e59a892 4444 if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
f63a17d6
MC
4445 || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) {
4446 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
4447 ERR_R_INTERNAL_ERROR);
8c1a5343 4448 goto err;
f63a17d6 4449 }
8c1a5343
MC
4450
4451 *hashlen = hashleni;
4452
4453 ret = 1;
48fbcbac 4454 err:
bfb0641f 4455 EVP_MD_CTX_free(ctx);
48fbcbac
DSH
4456 return ret;
4457}
4458
b577fd0b 4459int SSL_session_reused(SSL *s)
0f113f3e
MC
4460{
4461 return s->hit;
4462}
08557cf2 4463
69443116 4464int SSL_is_server(const SSL *s)
0f113f3e
MC
4465{
4466 return s->server;
4467}
87adf1fa 4468
47153c72
RS
4469#if OPENSSL_API_COMPAT < 0x10100000L
4470void SSL_set_debug(SSL *s, int debug)
4471{
4472 /* Old function was do-nothing anyway... */
4473 (void)s;
4474 (void)debug;
4475}
4476#endif
4477
b362ccab 4478void SSL_set_security_level(SSL *s, int level)
0f113f3e
MC
4479{
4480 s->cert->sec_level = level;
4481}
b362ccab
DSH
4482
4483int SSL_get_security_level(const SSL *s)
0f113f3e
MC
4484{
4485 return s->cert->sec_level;
4486}
b362ccab 4487
0f113f3e 4488void SSL_set_security_callback(SSL *s,
a230b26e
EK
4489 int (*cb) (const SSL *s, const SSL_CTX *ctx,
4490 int op, int bits, int nid,
4491 void *other, void *ex))
0f113f3e
MC
4492{
4493 s->cert->sec_cb = cb;
4494}
b362ccab 4495
a230b26e
EK
4496int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
4497 const SSL_CTX *ctx, int op,
4498 int bits, int nid, void *other,
4499 void *ex) {
0f113f3e
MC
4500 return s->cert->sec_cb;
4501}
b362ccab
DSH
4502
4503void SSL_set0_security_ex_data(SSL *s, void *ex)
0f113f3e
MC
4504{
4505 s->cert->sec_ex = ex;
4506}
b362ccab
DSH
4507
4508void *SSL_get0_security_ex_data(const SSL *s)
0f113f3e
MC
4509{
4510 return s->cert->sec_ex;
4511}
b362ccab
DSH
4512
4513void SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
0f113f3e
MC
4514{
4515 ctx->cert->sec_level = level;
4516}
b362ccab
DSH
4517
4518int SSL_CTX_get_security_level(const SSL_CTX *ctx)
0f113f3e
MC
4519{
4520 return ctx->cert->sec_level;
4521}
b362ccab 4522
0f113f3e 4523void SSL_CTX_set_security_callback(SSL_CTX *ctx,
a230b26e
EK
4524 int (*cb) (const SSL *s, const SSL_CTX *ctx,
4525 int op, int bits, int nid,
4526 void *other, void *ex))
0f113f3e
MC
4527{
4528 ctx->cert->sec_cb = cb;
4529}
b362ccab 4530
e4646a89
KR
4531int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
4532 const SSL_CTX *ctx,
0f113f3e
MC
4533 int op, int bits,
4534 int nid,
4535 void *other,
4536 void *ex) {
4537 return ctx->cert->sec_cb;
4538}
b362ccab
DSH
4539
4540void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex)
0f113f3e
MC
4541{
4542 ctx->cert->sec_ex = ex;
4543}
b362ccab
DSH
4544
4545void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx)
0f113f3e
MC
4546{
4547 return ctx->cert->sec_ex;
4548}
b362ccab 4549
8106cb8b
VD
4550/*
4551 * Get/Set/Clear options in SSL_CTX or SSL, formerly macros, now functions that
4552 * can return unsigned long, instead of the generic long return value from the
4553 * control interface.
4554 */
4555unsigned long SSL_CTX_get_options(const SSL_CTX *ctx)
4556{
4557 return ctx->options;
4558}
a230b26e
EK
4559
4560unsigned long SSL_get_options(const SSL *s)
8106cb8b
VD
4561{
4562 return s->options;
4563}
a230b26e 4564
8106cb8b
VD
4565unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op)
4566{
4567 return ctx->options |= op;
4568}
a230b26e 4569
8106cb8b
VD
4570unsigned long SSL_set_options(SSL *s, unsigned long op)
4571{
4572 return s->options |= op;
4573}
a230b26e 4574
8106cb8b
VD
4575unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op)
4576{
4577 return ctx->options &= ~op;
4578}
a230b26e 4579
8106cb8b
VD
4580unsigned long SSL_clear_options(SSL *s, unsigned long op)
4581{
4582 return s->options &= ~op;
4583}
4584
696178ed
DSH
4585STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s)
4586{
4587 return s->verified_chain;
4588}
4589
0f113f3e 4590IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
ed29e82a
RP
4591
4592#ifndef OPENSSL_NO_CT
4593
4594/*
4595 * Moves SCTs from the |src| stack to the |dst| stack.
4596 * The source of each SCT will be set to |origin|.
4597 * If |dst| points to a NULL pointer, a new stack will be created and owned by
4598 * the caller.
4599 * Returns the number of SCTs moved, or a negative integer if an error occurs.
4600 */
a230b26e
EK
4601static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
4602 sct_source_t origin)
ed29e82a
RP
4603{
4604 int scts_moved = 0;
4605 SCT *sct = NULL;
4606
4607 if (*dst == NULL) {
4608 *dst = sk_SCT_new_null();
4609 if (*dst == NULL) {
4610 SSLerr(SSL_F_CT_MOVE_SCTS, ERR_R_MALLOC_FAILURE);
4611 goto err;
4612 }
4613 }
4614
4615 while ((sct = sk_SCT_pop(src)) != NULL) {
4616 if (SCT_set_source(sct, origin) != 1)
4617 goto err;
4618
4619 if (sk_SCT_push(*dst, sct) <= 0)
4620 goto err;
4621 scts_moved += 1;
4622 }
4623
4624 return scts_moved;
a230b26e 4625 err:
ed29e82a 4626 if (sct != NULL)
a230b26e 4627 sk_SCT_push(src, sct); /* Put the SCT back */
cc7113e8 4628 return -1;
ed29e82a
RP
4629}
4630
4631/*
a230b26e 4632 * Look for data collected during ServerHello and parse if found.
6b13bd1d 4633 * Returns the number of SCTs extracted.
a230b26e 4634 */
ed29e82a
RP
4635static int ct_extract_tls_extension_scts(SSL *s)
4636{
4637 int scts_extracted = 0;
4638
aff8c126
RS
4639 if (s->ext.scts != NULL) {
4640 const unsigned char *p = s->ext.scts;
4641 STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len);
ed29e82a
RP
4642
4643 scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION);
4644
4645 SCT_LIST_free(scts);
4646 }
4647
4648 return scts_extracted;
4649}
4650
4651/*
4652 * Checks for an OCSP response and then attempts to extract any SCTs found if it
4653 * contains an SCT X509 extension. They will be stored in |s->scts|.
4654 * Returns:
4655 * - The number of SCTs extracted, assuming an OCSP response exists.
4656 * - 0 if no OCSP response exists or it contains no SCTs.
4657 * - A negative integer if an error occurs.
4658 */
4659static int ct_extract_ocsp_response_scts(SSL *s)
4660{
a230b26e 4661# ifndef OPENSSL_NO_OCSP
ed29e82a
RP
4662 int scts_extracted = 0;
4663 const unsigned char *p;
4664 OCSP_BASICRESP *br = NULL;
4665 OCSP_RESPONSE *rsp = NULL;
4666 STACK_OF(SCT) *scts = NULL;
4667 int i;
4668
aff8c126 4669 if (s->ext.ocsp.resp == NULL || s->ext.ocsp.resp_len == 0)
ed29e82a
RP
4670 goto err;
4671
aff8c126
RS
4672 p = s->ext.ocsp.resp;
4673 rsp = d2i_OCSP_RESPONSE(NULL, &p, (int)s->ext.ocsp.resp_len);
ed29e82a
RP
4674 if (rsp == NULL)
4675 goto err;
4676
4677 br = OCSP_response_get1_basic(rsp);
4678 if (br == NULL)
4679 goto err;
4680
4681 for (i = 0; i < OCSP_resp_count(br); ++i) {
4682 OCSP_SINGLERESP *single = OCSP_resp_get0(br, i);
4683
4684 if (single == NULL)
4685 continue;
4686
a230b26e
EK
4687 scts =
4688 OCSP_SINGLERESP_get1_ext_d2i(single, NID_ct_cert_scts, NULL, NULL);
4689 scts_extracted =
4690 ct_move_scts(&s->scts, scts, SCT_SOURCE_OCSP_STAPLED_RESPONSE);
ed29e82a
RP
4691 if (scts_extracted < 0)
4692 goto err;
4693 }
a230b26e 4694 err:
ed29e82a
RP
4695 SCT_LIST_free(scts);
4696 OCSP_BASICRESP_free(br);
4697 OCSP_RESPONSE_free(rsp);
4698 return scts_extracted;
a230b26e 4699# else
3e41ac35
MC
4700 /* Behave as if no OCSP response exists */
4701 return 0;
a230b26e 4702# endif
ed29e82a
RP
4703}
4704
4705/*
4706 * Attempts to extract SCTs from the peer certificate.
4707 * Return the number of SCTs extracted, or a negative integer if an error
4708 * occurs.
4709 */
4710static int ct_extract_x509v3_extension_scts(SSL *s)
4711{
4712 int scts_extracted = 0;
3f3c7d26 4713 X509 *cert = s->session != NULL ? s->session->peer : NULL;
ed29e82a
RP
4714
4715 if (cert != NULL) {
4716 STACK_OF(SCT) *scts =
4717 X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL);
4718
4719 scts_extracted =
4720 ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION);
4721
4722 SCT_LIST_free(scts);
4723 }
4724
4725 return scts_extracted;
4726}
4727
4728/*
4729 * Attempts to find all received SCTs by checking TLS extensions, the OCSP
4730 * response (if it exists) and X509v3 extensions in the certificate.
4731 * Returns NULL if an error occurs.
4732 */
4733const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s)
4734{
4735 if (!s->scts_parsed) {
4736 if (ct_extract_tls_extension_scts(s) < 0 ||
4737 ct_extract_ocsp_response_scts(s) < 0 ||
4738 ct_extract_x509v3_extension_scts(s) < 0)
4739 goto err;
4740
4741 s->scts_parsed = 1;
4742 }
4743 return s->scts;
a230b26e 4744 err:
ed29e82a
RP
4745 return NULL;
4746}
4747
a230b26e 4748static int ct_permissive(const CT_POLICY_EVAL_CTX * ctx,
43341433 4749 const STACK_OF(SCT) *scts, void *unused_arg)
ed29e82a 4750{
43341433
VD
4751 return 1;
4752}
4753
a230b26e 4754static int ct_strict(const CT_POLICY_EVAL_CTX * ctx,
43341433
VD
4755 const STACK_OF(SCT) *scts, void *unused_arg)
4756{
4757 int count = scts != NULL ? sk_SCT_num(scts) : 0;
4758 int i;
ed29e82a 4759
43341433
VD
4760 for (i = 0; i < count; ++i) {
4761 SCT *sct = sk_SCT_value(scts, i);
4762 int status = SCT_get_validation_status(sct);
4763
4764 if (status == SCT_VALIDATION_STATUS_VALID)
4765 return 1;
4766 }
4767 SSLerr(SSL_F_CT_STRICT, SSL_R_NO_VALID_SCTS);
4768 return 0;
4769}
4770
4771int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
4772 void *arg)
4773{
ed29e82a
RP
4774 /*
4775 * Since code exists that uses the custom extension handler for CT, look
4776 * for this and throw an error if they have already registered to use CT.
4777 */
4778 if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
a230b26e
EK
4779 TLSEXT_TYPE_signed_certificate_timestamp))
4780 {
ed29e82a
RP
4781 SSLerr(SSL_F_SSL_SET_CT_VALIDATION_CALLBACK,
4782 SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
43341433 4783 return 0;
ed29e82a
RP
4784 }
4785
ed29e82a 4786 if (callback != NULL) {
a230b26e
EK
4787 /*
4788 * If we are validating CT, then we MUST accept SCTs served via OCSP
4789 */
ed29e82a 4790 if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
43341433 4791 return 0;
ed29e82a
RP
4792 }
4793
43341433
VD
4794 s->ct_validation_callback = callback;
4795 s->ct_validation_callback_arg = arg;
4796
4797 return 1;
ed29e82a
RP
4798}
4799
43341433 4800int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
a230b26e 4801 ssl_ct_validation_cb callback, void *arg)
ed29e82a 4802{
ed29e82a
RP
4803 /*
4804 * Since code exists that uses the custom extension handler for CT, look for
4805 * this and throw an error if they have already registered to use CT.
4806 */
4807 if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx,
a230b26e
EK
4808 TLSEXT_TYPE_signed_certificate_timestamp))
4809 {
ed29e82a
RP
4810 SSLerr(SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK,
4811 SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
43341433 4812 return 0;
ed29e82a
RP
4813 }
4814
4815 ctx->ct_validation_callback = callback;
4816 ctx->ct_validation_callback_arg = arg;
43341433 4817 return 1;
ed29e82a
RP
4818}
4819
43341433 4820int SSL_ct_is_enabled(const SSL *s)
ed29e82a 4821{
43341433 4822 return s->ct_validation_callback != NULL;
ed29e82a
RP
4823}
4824
43341433 4825int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx)
ed29e82a 4826{
43341433 4827 return ctx->ct_validation_callback != NULL;
ed29e82a
RP
4828}
4829
4d482ee2 4830int ssl_validate_ct(SSL *s)
ed29e82a
RP
4831{
4832 int ret = 0;
3f3c7d26 4833 X509 *cert = s->session != NULL ? s->session->peer : NULL;
43341433 4834 X509 *issuer;
b9aec69a 4835 SSL_DANE *dane = &s->dane;
ed29e82a
RP
4836 CT_POLICY_EVAL_CTX *ctx = NULL;
4837 const STACK_OF(SCT) *scts;
4838
43341433
VD
4839 /*
4840 * If no callback is set, the peer is anonymous, or its chain is invalid,
4841 * skip SCT validation - just return success. Applications that continue
4842 * handshakes without certificates, with unverified chains, or pinned leaf
4843 * certificates are outside the scope of the WebPKI and CT.
4844 *
4845 * The above exclusions notwithstanding the vast majority of peers will
4846 * have rather ordinary certificate chains validated by typical
4847 * applications that perform certificate verification and therefore will
4848 * process SCTs when enabled.
4849 */
4850 if (s->ct_validation_callback == NULL || cert == NULL ||
4851 s->verify_result != X509_V_OK ||
a230b26e 4852 s->verified_chain == NULL || sk_X509_num(s->verified_chain) <= 1)
ed29e82a
RP
4853 return 1;
4854
43341433
VD
4855 /*
4856 * CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3)
4857 * trust-anchors. See https://tools.ietf.org/html/rfc7671#section-4.2
4858 */
4859 if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) {
4860 switch (dane->mtlsa->usage) {
4861 case DANETLS_USAGE_DANE_TA:
4862 case DANETLS_USAGE_DANE_EE:
4863 return 1;
4864 }
ed29e82a
RP
4865 }
4866
ed29e82a
RP
4867 ctx = CT_POLICY_EVAL_CTX_new();
4868 if (ctx == NULL) {
f63a17d6
MC
4869 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_VALIDATE_CT,
4870 ERR_R_MALLOC_FAILURE);
ed29e82a
RP
4871 goto end;
4872 }
4873
43341433 4874 issuer = sk_X509_value(s->verified_chain, 1);
a1bb7708
RP
4875 CT_POLICY_EVAL_CTX_set1_cert(ctx, cert);
4876 CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer);
4877 CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx, s->ctx->ctlog_store);
6a71e06d
RP
4878 CT_POLICY_EVAL_CTX_set_time(
4879 ctx, (uint64_t)SSL_SESSION_get_time(SSL_get0_session(s)) * 1000);
ed29e82a
RP
4880
4881 scts = SSL_get0_peer_scts(s);
4882
43341433
VD
4883 /*
4884 * This function returns success (> 0) only when all the SCTs are valid, 0
4885 * when some are invalid, and < 0 on various internal errors (out of
4886 * memory, etc.). Having some, or even all, invalid SCTs is not sufficient
4887 * reason to abort the handshake, that decision is up to the callback.
4888 * Therefore, we error out only in the unexpected case that the return
4889 * value is negative.
4890 *
4891 * XXX: One might well argue that the return value of this function is an
f430ba31 4892 * unfortunate design choice. Its job is only to determine the validation
43341433
VD
4893 * status of each of the provided SCTs. So long as it correctly separates
4894 * the wheat from the chaff it should return success. Failure in this case
4895 * ought to correspond to an inability to carry out its duties.
4896 */
4897 if (SCT_LIST_validate(scts, ctx) < 0) {
f63a17d6
MC
4898 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT,
4899 SSL_R_SCT_VERIFICATION_FAILED);
ed29e82a
RP
4900 goto end;
4901 }
4902
4903 ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg);
4904 if (ret < 0)
a230b26e 4905 ret = 0; /* This function returns 0 on failure */
f63a17d6
MC
4906 if (!ret)
4907 SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT,
4908 SSL_R_CALLBACK_FAILED);
ed29e82a 4909
a230b26e 4910 end:
ed29e82a 4911 CT_POLICY_EVAL_CTX_free(ctx);
f75b34c8
VD
4912 /*
4913 * With SSL_VERIFY_NONE the session may be cached and re-used despite a
4914 * failure return code here. Also the application may wish the complete
4915 * the handshake, and then disconnect cleanly at a higher layer, after
4916 * checking the verification status of the completed connection.
4917 *
4918 * We therefore force a certificate verification failure which will be
4919 * visible via SSL_get_verify_result() and cached as part of any resumed
4920 * session.
4921 *
4922 * Note: the permissive callback is for information gathering only, always
4923 * returns success, and does not affect verification status. Only the
4924 * strict callback or a custom application-specified callback can trigger
4925 * connection failure or record a verification error.
4926 */
4927 if (ret <= 0)
4928 s->verify_result = X509_V_ERR_NO_VALID_SCTS;
ed29e82a
RP
4929 return ret;
4930}
4931
43341433
VD
4932int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode)
4933{
4934 switch (validation_mode) {
4935 default:
4936 SSLerr(SSL_F_SSL_CTX_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
4937 return 0;
4938 case SSL_CT_VALIDATION_PERMISSIVE:
4939 return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL);
4940 case SSL_CT_VALIDATION_STRICT:
4941 return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL);
4942 }
4943}
4944
4945int SSL_enable_ct(SSL *s, int validation_mode)
4946{
4947 switch (validation_mode) {
4948 default:
4949 SSLerr(SSL_F_SSL_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
4950 return 0;
4951 case SSL_CT_VALIDATION_PERMISSIVE:
4952 return SSL_set_ct_validation_callback(s, ct_permissive, NULL);
4953 case SSL_CT_VALIDATION_STRICT:
4954 return SSL_set_ct_validation_callback(s, ct_strict, NULL);
4955 }
4956}
4957
ed29e82a
RP
4958int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx)
4959{
328f36c5 4960 return CTLOG_STORE_load_default_file(ctx->ctlog_store);
ed29e82a
RP
4961}
4962
4963int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path)
4964{
4965 return CTLOG_STORE_load_file(ctx->ctlog_store, path);
4966}
4967
a230b26e 4968void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE * logs)
8359b57f
RP
4969{
4970 CTLOG_STORE_free(ctx->ctlog_store);
4971 ctx->ctlog_store = logs;
4972}
4973
4974const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx)
4975{
4976 return ctx->ctlog_store;
4977}
4978
6b1bb98f
BK
4979#endif /* OPENSSL_NO_CT */
4980
a9c0d8be
DB
4981void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
4982 void *arg)
6b1bb98f 4983{
a9c0d8be
DB
4984 c->client_hello_cb = cb;
4985 c->client_hello_cb_arg = arg;
6b1bb98f
BK
4986}
4987
a9c0d8be 4988int SSL_client_hello_isv2(SSL *s)
6b1bb98f
BK
4989{
4990 if (s->clienthello == NULL)
4991 return 0;
4992 return s->clienthello->isv2;
4993}
4994
a9c0d8be 4995unsigned int SSL_client_hello_get0_legacy_version(SSL *s)
6b1bb98f
BK
4996{
4997 if (s->clienthello == NULL)
4998 return 0;
4999 return s->clienthello->legacy_version;
5000}
5001
a9c0d8be 5002size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out)
6b1bb98f
BK
5003{
5004 if (s->clienthello == NULL)
5005 return 0;
5006 if (out != NULL)
5007 *out = s->clienthello->random;
5008 return SSL3_RANDOM_SIZE;
5009}
5010
a9c0d8be 5011size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out)
6b1bb98f
BK
5012{
5013 if (s->clienthello == NULL)
5014 return 0;
5015 if (out != NULL)
5016 *out = s->clienthello->session_id;
5017 return s->clienthello->session_id_len;
5018}
5019
a9c0d8be 5020size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out)
6b1bb98f
BK
5021{
5022 if (s->clienthello == NULL)
5023 return 0;
5024 if (out != NULL)
5025 *out = PACKET_data(&s->clienthello->ciphersuites);
5026 return PACKET_remaining(&s->clienthello->ciphersuites);
5027}
5028
a9c0d8be 5029size_t SSL_client_hello_get0_compression_methods(SSL *s, const unsigned char **out)
6b1bb98f
BK
5030{
5031 if (s->clienthello == NULL)
5032 return 0;
5033 if (out != NULL)
5034 *out = s->clienthello->compressions;
5035 return s->clienthello->compressions_len;
5036}
5037
a9c0d8be 5038int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen)
193b5d76
BK
5039{
5040 RAW_EXTENSION *ext;
5041 int *present;
5042 size_t num = 0, i;
5043
5044 if (s->clienthello == NULL || out == NULL || outlen == NULL)
5045 return 0;
5046 for (i = 0; i < s->clienthello->pre_proc_exts_len; i++) {
5047 ext = s->clienthello->pre_proc_exts + i;
5048 if (ext->present)
5049 num++;
5050 }
5051 present = OPENSSL_malloc(sizeof(*present) * num);
5052 if (present == NULL)
5053 return 0;
5054 for (i = 0; i < s->clienthello->pre_proc_exts_len; i++) {
5055 ext = s->clienthello->pre_proc_exts + i;
5056 if (ext->present) {
5057 if (ext->received_order >= num)
5058 goto err;
5059 present[ext->received_order] = ext->type;
5060 }
5061 }
5062 *out = present;
5063 *outlen = num;
5064 return 1;
5065 err:
5066 OPENSSL_free(present);
5067 return 0;
5068}
5069
a9c0d8be 5070int SSL_client_hello_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
6b1bb98f
BK
5071 size_t *outlen)
5072{
5073 size_t i;
5074 RAW_EXTENSION *r;
5075
5076 if (s->clienthello == NULL)
5077 return 0;
5078 for (i = 0; i < s->clienthello->pre_proc_exts_len; ++i) {
5079 r = s->clienthello->pre_proc_exts + i;
5080 if (r->present && r->type == type) {
5081 if (out != NULL)
5082 *out = PACKET_data(&r->data);
5083 if (outlen != NULL)
5084 *outlen = PACKET_remaining(&r->data);
5085 return 1;
5086 }
5087 }
5088 return 0;
5089}
2faa1b48 5090
a58eb06d
TS
5091int SSL_free_buffers(SSL *ssl)
5092{
5093 RECORD_LAYER *rl = &ssl->rlayer;
5094
5095 if (RECORD_LAYER_read_pending(rl) || RECORD_LAYER_write_pending(rl))
5096 return 0;
5097
5098 RECORD_LAYER_release(rl);
5099 return 1;
5100}
5101
5102int SSL_alloc_buffers(SSL *ssl)
5103{
5104 return ssl3_setup_buffers(ssl);
5105}
5106
2faa1b48
CB
5107void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb)
5108{
5109 ctx->keylog_callback = cb;
5110}
5111
5112SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
5113{
5114 return ctx->keylog_callback;
5115}
5116
5117static int nss_keylog_int(const char *prefix,
5118 SSL *ssl,
5119 const uint8_t *parameter_1,
5120 size_t parameter_1_len,
5121 const uint8_t *parameter_2,
5122 size_t parameter_2_len)
5123{
5124 char *out = NULL;
5125 char *cursor = NULL;
5126 size_t out_len = 0;
5127 size_t i;
5128 size_t prefix_len;
5129
5130 if (ssl->ctx->keylog_callback == NULL) return 1;
5131
5132 /*
5133 * Our output buffer will contain the following strings, rendered with
5134 * space characters in between, terminated by a NULL character: first the
5135 * prefix, then the first parameter, then the second parameter. The
5136 * meaning of each parameter depends on the specific key material being
5137 * logged. Note that the first and second parameters are encoded in
5138 * hexadecimal, so we need a buffer that is twice their lengths.
5139 */
5140 prefix_len = strlen(prefix);
5141 out_len = prefix_len + (2*parameter_1_len) + (2*parameter_2_len) + 3;
5142 if ((out = cursor = OPENSSL_malloc(out_len)) == NULL) {
f63a17d6
MC
5143 SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, SSL_F_NSS_KEYLOG_INT,
5144 ERR_R_MALLOC_FAILURE);
2faa1b48
CB
5145 return 0;
5146 }
5147
5148 strcpy(cursor, prefix);
5149 cursor += prefix_len;
5150 *cursor++ = ' ';
5151
5152 for (i = 0; i < parameter_1_len; i++) {
5153 sprintf(cursor, "%02x", parameter_1[i]);
5154 cursor += 2;
5155 }
5156 *cursor++ = ' ';
5157
5158 for (i = 0; i < parameter_2_len; i++) {
5159 sprintf(cursor, "%02x", parameter_2[i]);
5160 cursor += 2;
5161 }
5162 *cursor = '\0';
5163
5164 ssl->ctx->keylog_callback(ssl, (const char *)out);
5165 OPENSSL_free(out);
5166 return 1;
5167
5168}
5169
5170int ssl_log_rsa_client_key_exchange(SSL *ssl,
5171 const uint8_t *encrypted_premaster,
5172 size_t encrypted_premaster_len,
5173 const uint8_t *premaster,
5174 size_t premaster_len)
5175{
5176 if (encrypted_premaster_len < 8) {
f63a17d6
MC
5177 SSLfatal(ssl, SSL_AD_INTERNAL_ERROR,
5178 SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
2faa1b48
CB
5179 return 0;
5180 }
5181
f0deb4d3 5182 /* We only want the first 8 bytes of the encrypted premaster as a tag. */
2faa1b48
CB
5183 return nss_keylog_int("RSA",
5184 ssl,
5185 encrypted_premaster,
f0deb4d3 5186 8,
2faa1b48
CB
5187 premaster,
5188 premaster_len);
5189}
5190
2c7bd692
CB
5191int ssl_log_secret(SSL *ssl,
5192 const char *label,
5193 const uint8_t *secret,
5194 size_t secret_len)
2faa1b48 5195{
2c7bd692 5196 return nss_keylog_int(label,
2faa1b48 5197 ssl,
2c7bd692
CB
5198 ssl->s3->client_random,
5199 SSL3_RANDOM_SIZE,
5200 secret,
5201 secret_len);
2faa1b48
CB
5202}
5203
ccb8e6e0
BK
5204#define SSLV2_CIPHER_LEN 3
5205
f63a17d6 5206int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format)
ccb8e6e0 5207{
ccb8e6e0 5208 int n;
ccb8e6e0
BK
5209
5210 n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
5211
5212 if (PACKET_remaining(cipher_suites) == 0) {
f63a17d6
MC
5213 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL_CACHE_CIPHERLIST,
5214 SSL_R_NO_CIPHERS_SPECIFIED);
90134d98 5215 return 0;
ccb8e6e0
BK
5216 }
5217
5218 if (PACKET_remaining(cipher_suites) % n != 0) {
f63a17d6 5219 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
dd5a4279 5220 SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
90134d98 5221 return 0;
ccb8e6e0
BK
5222 }
5223
5224 OPENSSL_free(s->s3->tmp.ciphers_raw);
5225 s->s3->tmp.ciphers_raw = NULL;
5226 s->s3->tmp.ciphers_rawlen = 0;
5227
5228 if (sslv2format) {
5229 size_t numciphers = PACKET_remaining(cipher_suites) / n;
5230 PACKET sslv2ciphers = *cipher_suites;
5231 unsigned int leadbyte;
5232 unsigned char *raw;
5233
5234 /*
5235 * We store the raw ciphers list in SSLv3+ format so we need to do some
5236 * preprocessing to convert the list first. If there are any SSLv2 only
5237 * ciphersuites with a non-zero leading byte then we are going to
5238 * slightly over allocate because we won't store those. But that isn't a
5239 * problem.
5240 */
5241 raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN);
5242 s->s3->tmp.ciphers_raw = raw;
5243 if (raw == NULL) {
f63a17d6
MC
5244 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
5245 ERR_R_MALLOC_FAILURE);
5246 return 0;
ccb8e6e0
BK
5247 }
5248 for (s->s3->tmp.ciphers_rawlen = 0;
5249 PACKET_remaining(&sslv2ciphers) > 0;
5250 raw += TLS_CIPHER_LEN) {
5251 if (!PACKET_get_1(&sslv2ciphers, &leadbyte)
5252 || (leadbyte == 0
5253 && !PACKET_copy_bytes(&sslv2ciphers, raw,
5254 TLS_CIPHER_LEN))
5255 || (leadbyte != 0
5256 && !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) {
f63a17d6
MC
5257 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
5258 SSL_R_BAD_PACKET);
ccb8e6e0
BK
5259 OPENSSL_free(s->s3->tmp.ciphers_raw);
5260 s->s3->tmp.ciphers_raw = NULL;
5261 s->s3->tmp.ciphers_rawlen = 0;
f63a17d6 5262 return 0;
ccb8e6e0
BK
5263 }
5264 if (leadbyte == 0)
5265 s->s3->tmp.ciphers_rawlen += TLS_CIPHER_LEN;
5266 }
5267 } else if (!PACKET_memdup(cipher_suites, &s->s3->tmp.ciphers_raw,
5268 &s->s3->tmp.ciphers_rawlen)) {
f63a17d6
MC
5269 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
5270 ERR_R_INTERNAL_ERROR);
5271 return 0;
ccb8e6e0 5272 }
90134d98 5273 return 1;
90134d98
BK
5274}
5275
5276int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
5277 int isv2format, STACK_OF(SSL_CIPHER) **sk,
5278 STACK_OF(SSL_CIPHER) **scsvs)
5279{
90134d98
BK
5280 PACKET pkt;
5281
5282 if (!PACKET_buf_init(&pkt, bytes, len))
5283 return 0;
f63a17d6 5284 return bytes_to_cipher_list(s, &pkt, sk, scsvs, isv2format, 0);
90134d98
BK
5285}
5286
5287int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
5288 STACK_OF(SSL_CIPHER) **skp,
5289 STACK_OF(SSL_CIPHER) **scsvs_out,
f63a17d6 5290 int sslv2format, int fatal)
90134d98
BK
5291{
5292 const SSL_CIPHER *c;
5293 STACK_OF(SSL_CIPHER) *sk = NULL;
5294 STACK_OF(SSL_CIPHER) *scsvs = NULL;
5295 int n;
5296 /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
5297 unsigned char cipher[SSLV2_CIPHER_LEN];
5298
5299 n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
5300
5301 if (PACKET_remaining(cipher_suites) == 0) {
f63a17d6
MC
5302 if (fatal)
5303 SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_BYTES_TO_CIPHER_LIST,
5304 SSL_R_NO_CIPHERS_SPECIFIED);
5305 else
5306 SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, SSL_R_NO_CIPHERS_SPECIFIED);
90134d98
BK
5307 return 0;
5308 }
5309
5310 if (PACKET_remaining(cipher_suites) % n != 0) {
f63a17d6
MC
5311 if (fatal)
5312 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
5313 SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
5314 else
5315 SSLerr(SSL_F_BYTES_TO_CIPHER_LIST,
5316 SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
90134d98
BK
5317 return 0;
5318 }
5319
5320 sk = sk_SSL_CIPHER_new_null();
5321 scsvs = sk_SSL_CIPHER_new_null();
5322 if (sk == NULL || scsvs == NULL) {
f63a17d6
MC
5323 if (fatal)
5324 SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
5325 ERR_R_MALLOC_FAILURE);
5326 else
5327 SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
90134d98
BK
5328 goto err;
5329 }
ccb8e6e0
BK
5330
5331 while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
5332 /*
5333 * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
5334 * first byte set to zero, while true SSLv2 ciphers have a non-zero
5335 * first byte. We don't support any true SSLv2 ciphers, so skip them.
5336 */
5337 if (sslv2format && cipher[0] != '\0')
5338 continue;
5339
ccb8e6e0
BK
5340 /* For SSLv2-compat, ignore leading 0-byte. */
5341 c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher, 1);
5342 if (c != NULL) {
90134d98
BK
5343 if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) ||
5344 (!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) {
f63a17d6
MC
5345 if (fatal)
5346 SSLfatal(s, SSL_AD_INTERNAL_ERROR,
5347 SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
5348 else
5349 SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
ccb8e6e0
BK
5350 goto err;
5351 }
5352 }
5353 }
5354 if (PACKET_remaining(cipher_suites) > 0) {
f63a17d6
MC
5355 if (fatal)
5356 SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
5357 SSL_R_BAD_LENGTH);
5358 else
5359 SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, SSL_R_BAD_LENGTH);
ccb8e6e0
BK
5360 goto err;
5361 }
5362
90134d98
BK
5363 if (skp != NULL)
5364 *skp = sk;
5365 else
5366 sk_SSL_CIPHER_free(sk);
5367 if (scsvs_out != NULL)
5368 *scsvs_out = scsvs;
5369 else
5370 sk_SSL_CIPHER_free(scsvs);
5371 return 1;
ccb8e6e0
BK
5372 err:
5373 sk_SSL_CIPHER_free(sk);
90134d98
BK
5374 sk_SSL_CIPHER_free(scsvs);
5375 return 0;
ccb8e6e0 5376}
3fc8d856
MC
5377
5378int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data)
5379{
5380 ctx->max_early_data = max_early_data;
5381
5382 return 1;
5383}
5384
46dcb945 5385uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx)
3fc8d856
MC
5386{
5387 return ctx->max_early_data;
5388}
5389
5390int SSL_set_max_early_data(SSL *s, uint32_t max_early_data)
5391{
5392 s->max_early_data = max_early_data;
5393
5394 return 1;
5395}
5396
a8e75d56 5397uint32_t SSL_get_max_early_data(const SSL *s)
3fc8d856
MC
5398{
5399 return s->max_early_data;
5400}
ae3947de 5401
cf72c757
F
5402__owur unsigned int ssl_get_max_send_fragment(const SSL *ssl)
5403{
5404 /* Return any active Max Fragment Len extension */
5405 if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session))
5406 return GET_MAX_FRAGMENT_LENGTH(ssl->session);
5407
5408 /* return current SSL connection setting */
5409 return ssl->max_send_fragment;
5410}
5411
5412__owur unsigned int ssl_get_split_send_fragment(const SSL *ssl)
5413{
5414 /* Return a value regarding an active Max Fragment Len extension */
5415 if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session)
5416 && ssl->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(ssl->session))
5417 return GET_MAX_FRAGMENT_LENGTH(ssl->session);
5418
5419 /* else limit |split_send_fragment| to current |max_send_fragment| */
5420 if (ssl->split_send_fragment > ssl->max_send_fragment)
5421 return ssl->max_send_fragment;
5422
5423 /* return current SSL connection setting */
5424 return ssl->split_send_fragment;
5425}
042c5753
MC
5426
5427int SSL_stateless(SSL *s)
5428{
5429 int ret;
5430
5431 /* Ensure there is no state left over from a previous invocation */
5432 if (!SSL_clear(s))
d6bb50a5 5433 return 0;
042c5753
MC
5434
5435 ERR_clear_error();
5436
5437 s->s3->flags |= TLS1_FLAGS_STATELESS;
5438 ret = SSL_accept(s);
5439 s->s3->flags &= ~TLS1_FLAGS_STATELESS;
5440
d6bb50a5 5441 if (ret > 0 && s->ext.cookieok)
c36001c3
MC
5442 return 1;
5443
e440f513
MC
5444 if (s->hello_retry_request == SSL_HRR_PENDING && !ossl_statem_in_error(s))
5445 return 0;
5446
5447 return -1;
042c5753 5448}
9d75dce3
TS
5449
5450void SSL_force_post_handshake_auth(SSL *ssl)
5451{
5452 ssl->pha_forced = 1;
5453}
5454
5455int SSL_verify_client_post_handshake(SSL *ssl)
5456{
5457 if (!SSL_IS_TLS13(ssl)) {
5458 SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_WRONG_SSL_VERSION);
5459 return 0;
5460 }
5461 if (!ssl->server) {
5462 SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_NOT_SERVER);
5463 return 0;
5464 }
5465
5466 if (!SSL_is_init_finished(ssl)) {
5467 SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_STILL_IN_INIT);
5468 return 0;
5469 }
5470
5471 switch (ssl->post_handshake_auth) {
5472 case SSL_PHA_NONE:
5473 SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_EXTENSION_NOT_RECEIVED);
5474 return 0;
5475 default:
5476 case SSL_PHA_EXT_SENT:
5477 SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, ERR_R_INTERNAL_ERROR);
5478 return 0;
5479 case SSL_PHA_EXT_RECEIVED:
5480 break;
5481 case SSL_PHA_REQUEST_PENDING:
5482 SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_REQUEST_PENDING);
5483 return 0;
5484 case SSL_PHA_REQUESTED:
5485 SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_REQUEST_SENT);
5486 return 0;
5487 }
5488
5489 ssl->post_handshake_auth = SSL_PHA_REQUEST_PENDING;
5490
5491 /* checks verify_mode and algorithm_auth */
5492 if (!send_certificate_request(ssl)) {
5493 ssl->post_handshake_auth = SSL_PHA_EXT_RECEIVED; /* restore on error */
5494 SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_INVALID_CONFIG);
5495 return 0;
5496 }
5497
5498 ossl_statem_set_in_init(ssl, 1);
5499 return 1;
5500}
df0fed9a
TS
5501
5502int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
5503 SSL_CTX_generate_session_ticket_fn gen_cb,
5504 SSL_CTX_decrypt_session_ticket_fn dec_cb,
5505 void *arg)
5506{
5507 ctx->generate_ticket_cb = gen_cb;
5508 ctx->decrypt_ticket_cb = dec_cb;
5509 ctx->ticket_cb_data = arg;
5510 return 1;
5511}