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