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