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