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