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