Rename SSL_write_early() to SSL_write_early_data()
[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_data(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_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1616         return SSL_READ_EARLY_DATA_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_DATA,
1623                    ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1624             return SSL_READ_EARLY_DATA_ERROR;
1625         }
1626         /* fall through */
1627
1628     case SSL_EARLY_DATA_ACCEPT_RETRY:
1629         s->early_data_state = SSL_EARLY_DATA_ACCEPTING;
1630         ret = SSL_accept(s);
1631         if (ret <= 0) {
1632             /* NBIO or error */
1633             s->early_data_state = SSL_EARLY_DATA_ACCEPT_RETRY;
1634             return SSL_READ_EARLY_DATA_ERROR;
1635         }
1636         /* fall through */
1637
1638     case SSL_EARLY_DATA_READ_RETRY:
1639         if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
1640             s->early_data_state = SSL_EARLY_DATA_READING;
1641             ret = SSL_read_ex(s, buf, num, readbytes);
1642             /*
1643              * Record layer will call ssl_end_of_early_data_seen() if we see
1644              * that alert - which updates the early_data_state to
1645              * SSL_EARLY_DATA_FINISHED_READING
1646              */
1647             if (ret > 0 || (ret <= 0 && s->early_data_state
1648                                         != SSL_EARLY_DATA_FINISHED_READING)) {
1649                 s->early_data_state = SSL_EARLY_DATA_READ_RETRY;
1650                 return ret > 0 ? SSL_READ_EARLY_DATA_SUCCESS
1651                                : SSL_READ_EARLY_DATA_ERROR;
1652             }
1653         } else {
1654             s->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
1655         }
1656         *readbytes = 0;
1657         return SSL_READ_EARLY_DATA_FINISH;
1658
1659     default:
1660         SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1661         return SSL_READ_EARLY_DATA_ERROR;
1662     }
1663 }
1664
1665 int ssl_end_of_early_data_seen(SSL *s)
1666 {
1667     if (s->early_data_state == SSL_EARLY_DATA_READING
1668             || s->early_data_state == SSL_EARLY_DATA_READ_RETRY) {
1669         s->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
1670         ossl_statem_finish_early_data(s);
1671         return 1;
1672     }
1673
1674     return 0;
1675 }
1676
1677 int SSL_get_early_data_status(const SSL *s)
1678 {
1679     return s->ext.early_data;
1680 }
1681
1682 static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
1683 {
1684     if (s->handshake_func == NULL) {
1685         SSLerr(SSL_F_SSL_PEEK_INTERNAL, SSL_R_UNINITIALIZED);
1686         return -1;
1687     }
1688
1689     if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
1690         return 0;
1691     }
1692     if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
1693         struct ssl_async_args args;
1694         int ret;
1695
1696         args.s = s;
1697         args.buf = buf;
1698         args.num = num;
1699         args.type = READFUNC;
1700         args.f.func_read = s->method->ssl_peek;
1701
1702         ret = ssl_start_async_job(s, &args, ssl_io_intern);
1703         *readbytes = s->asyncrw;
1704         return ret;
1705     } else {
1706         return s->method->ssl_peek(s, buf, num, readbytes);
1707     }
1708 }
1709
1710 int SSL_peek(SSL *s, void *buf, int num)
1711 {
1712     int ret;
1713     size_t readbytes;
1714
1715     if (num < 0) {
1716         SSLerr(SSL_F_SSL_PEEK, SSL_R_BAD_LENGTH);
1717         return -1;
1718     }
1719
1720     ret = ssl_peek_internal(s, buf, (size_t)num, &readbytes);
1721
1722     /*
1723      * The cast is safe here because ret should be <= INT_MAX because num is
1724      * <= INT_MAX
1725      */
1726     if (ret > 0)
1727         ret = (int)readbytes;
1728
1729     return ret;
1730 }
1731
1732
1733 int SSL_peek_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
1734 {
1735     int ret = ssl_peek_internal(s, buf, num, readbytes);
1736
1737     if (ret < 0)
1738         ret = 0;
1739     return ret;
1740 }
1741
1742 int ssl_write_internal(SSL *s, const void *buf, size_t num, size_t *written)
1743 {
1744     if (s->handshake_func == NULL) {
1745         SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_UNINITIALIZED);
1746         return -1;
1747     }
1748
1749     if (s->shutdown & SSL_SENT_SHUTDOWN) {
1750         s->rwstate = SSL_NOTHING;
1751         SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_PROTOCOL_IS_SHUTDOWN);
1752         return -1;
1753     }
1754
1755     if (s->early_data_state == SSL_EARLY_DATA_WRITE_RETRY) {
1756         /*
1757          * We're still writing early data. We need to stop that so we can write
1758          * normal data
1759          */
1760         if (!ssl_write_early_finish(s))
1761             return 0;
1762     } else if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
1763                 || s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY) {
1764         SSLerr(SSL_F_SSL_WRITE_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1765         return 0;
1766     }
1767     /* If we are a client and haven't sent the Finished we better do that */
1768     ossl_statem_check_finish_init(s, 1);
1769
1770     if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
1771         int ret;
1772         struct ssl_async_args args;
1773
1774         args.s = s;
1775         args.buf = (void *)buf;
1776         args.num = num;
1777         args.type = WRITEFUNC;
1778         args.f.func_write = s->method->ssl_write;
1779
1780         ret = ssl_start_async_job(s, &args, ssl_io_intern);
1781         *written = s->asyncrw;
1782         return ret;
1783     } else {
1784         return s->method->ssl_write(s, buf, num, written);
1785     }
1786 }
1787
1788 int SSL_write(SSL *s, const void *buf, int num)
1789 {
1790     int ret;
1791     size_t written;
1792
1793     if (num < 0) {
1794         SSLerr(SSL_F_SSL_WRITE, SSL_R_BAD_LENGTH);
1795         return -1;
1796     }
1797
1798     ret = ssl_write_internal(s, buf, (size_t)num, &written);
1799
1800     /*
1801      * The cast is safe here because ret should be <= INT_MAX because num is
1802      * <= INT_MAX
1803      */
1804     if (ret > 0)
1805         ret = (int)written;
1806
1807     return ret;
1808 }
1809
1810 int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written)
1811 {
1812     int ret = ssl_write_internal(s, buf, num, written);
1813
1814     if (ret < 0)
1815         ret = 0;
1816     return ret;
1817 }
1818
1819 int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
1820 {
1821     int ret;
1822
1823     if (s->server) {
1824         SSLerr(SSL_F_SSL_WRITE_EARLY, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1825         return 0;
1826     }
1827
1828     switch (s->early_data_state) {
1829     case SSL_EARLY_DATA_NONE:
1830         if (!SSL_in_before(s)
1831                 || s->session == NULL
1832                 || s->session->ext.max_early_data == 0) {
1833             SSLerr(SSL_F_SSL_WRITE_EARLY, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1834             return 0;
1835         }
1836         /* fall through */
1837
1838     case SSL_EARLY_DATA_CONNECT_RETRY:
1839         s->early_data_state = SSL_EARLY_DATA_CONNECTING;
1840         ret = SSL_connect(s);
1841         if (ret <= 0) {
1842             /* NBIO or error */
1843             s->early_data_state = SSL_EARLY_DATA_CONNECT_RETRY;
1844             return 0;
1845         }
1846         /* fall through */
1847
1848     case SSL_EARLY_DATA_WRITE_RETRY:
1849         s->early_data_state = SSL_EARLY_DATA_WRITING;
1850         ret = SSL_write_ex(s, buf, num, written);
1851         s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
1852         return ret;
1853
1854     default:
1855         SSLerr(SSL_F_SSL_WRITE_EARLY, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1856         return 0;
1857     }
1858 }
1859
1860 static int ssl_write_early_finish(SSL *s)
1861 {
1862     int ret;
1863
1864     if (s->early_data_state != SSL_EARLY_DATA_WRITE_RETRY) {
1865         SSLerr(SSL_F_SSL_WRITE_EARLY_FINISH, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1866         return 0;
1867     }
1868
1869     s->early_data_state = SSL_EARLY_DATA_WRITING;
1870     ret = ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_END_OF_EARLY_DATA);
1871     if (ret <= 0) {
1872         s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
1873         return 0;
1874     }
1875     s->early_data_state = SSL_EARLY_DATA_FINISHED_WRITING;
1876     /*
1877      * We set the enc_write_ctx back to NULL because we may end up writing
1878      * in cleartext again if we get a HelloRetryRequest from the server.
1879      */
1880     EVP_CIPHER_CTX_free(s->enc_write_ctx);
1881     s->enc_write_ctx = NULL;
1882     ossl_statem_set_in_init(s, 1);
1883     return 1;
1884 }
1885
1886 int SSL_shutdown(SSL *s)
1887 {
1888     /*
1889      * Note that this function behaves differently from what one might
1890      * expect.  Return values are 0 for no success (yet), 1 for success; but
1891      * calling it once is usually not enough, even if blocking I/O is used
1892      * (see ssl3_shutdown).
1893      */
1894
1895     if (s->handshake_func == NULL) {
1896         SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED);
1897         return -1;
1898     }
1899
1900     if (!SSL_in_init(s)) {
1901         if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
1902             struct ssl_async_args args;
1903
1904             args.s = s;
1905             args.type = OTHERFUNC;
1906             args.f.func_other = s->method->ssl_shutdown;
1907
1908             return ssl_start_async_job(s, &args, ssl_io_intern);
1909         } else {
1910             return s->method->ssl_shutdown(s);
1911         }
1912     } else {
1913         SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_SHUTDOWN_WHILE_IN_INIT);
1914         return -1;
1915     }
1916 }
1917
1918 int SSL_key_update(SSL *s, int updatetype)
1919 {
1920     /*
1921      * TODO(TLS1.3): How will applications know whether TLSv1.3 has been
1922      * negotiated, and that it is appropriate to call SSL_key_update() instead
1923      * of SSL_renegotiate().
1924      */
1925     if (!SSL_IS_TLS13(s)) {
1926         SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_WRONG_SSL_VERSION);
1927         return 0;
1928     }
1929
1930     if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
1931             && updatetype != SSL_KEY_UPDATE_REQUESTED) {
1932         SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_INVALID_KEY_UPDATE_TYPE);
1933         return 0;
1934     }
1935
1936     if (!SSL_is_init_finished(s)) {
1937         SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_STILL_IN_INIT);
1938         return 0;
1939     }
1940
1941     ossl_statem_set_in_init(s, 1);
1942     s->key_update = updatetype;
1943     return 1;
1944 }
1945
1946 int SSL_get_key_update_type(SSL *s)
1947 {
1948     return s->key_update;
1949 }
1950
1951 int SSL_renegotiate(SSL *s)
1952 {
1953     if (SSL_IS_TLS13(s)) {
1954         SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_WRONG_SSL_VERSION);
1955         return 0;
1956     }
1957
1958     if (s->renegotiate == 0)
1959         s->renegotiate = 1;
1960
1961     s->new_session = 1;
1962
1963     return (s->method->ssl_renegotiate(s));
1964 }
1965
1966 int SSL_renegotiate_abbreviated(SSL *s)
1967 {
1968     if (SSL_IS_TLS13(s))
1969         return 0;
1970
1971     if (s->renegotiate == 0)
1972         s->renegotiate = 1;
1973
1974     s->new_session = 0;
1975
1976     return (s->method->ssl_renegotiate(s));
1977 }
1978
1979 int SSL_renegotiate_pending(SSL *s)
1980 {
1981     /*
1982      * becomes true when negotiation is requested; false again once a
1983      * handshake has finished
1984      */
1985     return (s->renegotiate != 0);
1986 }
1987
1988 long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
1989 {
1990     long l;
1991
1992     switch (cmd) {
1993     case SSL_CTRL_GET_READ_AHEAD:
1994         return (RECORD_LAYER_get_read_ahead(&s->rlayer));
1995     case SSL_CTRL_SET_READ_AHEAD:
1996         l = RECORD_LAYER_get_read_ahead(&s->rlayer);
1997         RECORD_LAYER_set_read_ahead(&s->rlayer, larg);
1998         return (l);
1999
2000     case SSL_CTRL_SET_MSG_CALLBACK_ARG:
2001         s->msg_callback_arg = parg;
2002         return 1;
2003
2004     case SSL_CTRL_MODE:
2005         return (s->mode |= larg);
2006     case SSL_CTRL_CLEAR_MODE:
2007         return (s->mode &= ~larg);
2008     case SSL_CTRL_GET_MAX_CERT_LIST:
2009         return (long)(s->max_cert_list);
2010     case SSL_CTRL_SET_MAX_CERT_LIST:
2011         if (larg < 0)
2012             return 0;
2013         l = (long)s->max_cert_list;
2014         s->max_cert_list = (size_t)larg;
2015         return l;
2016     case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
2017         if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
2018             return 0;
2019         s->max_send_fragment = larg;
2020         if (s->max_send_fragment < s->split_send_fragment)
2021             s->split_send_fragment = s->max_send_fragment;
2022         return 1;
2023     case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
2024         if ((size_t)larg > s->max_send_fragment || larg == 0)
2025             return 0;
2026         s->split_send_fragment = larg;
2027         return 1;
2028     case SSL_CTRL_SET_MAX_PIPELINES:
2029         if (larg < 1 || larg > SSL_MAX_PIPELINES)
2030             return 0;
2031         s->max_pipelines = larg;
2032         if (larg > 1)
2033             RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
2034         return 1;
2035     case SSL_CTRL_GET_RI_SUPPORT:
2036         if (s->s3)
2037             return s->s3->send_connection_binding;
2038         else
2039             return 0;
2040     case SSL_CTRL_CERT_FLAGS:
2041         return (s->cert->cert_flags |= larg);
2042     case SSL_CTRL_CLEAR_CERT_FLAGS:
2043         return (s->cert->cert_flags &= ~larg);
2044
2045     case SSL_CTRL_GET_RAW_CIPHERLIST:
2046         if (parg) {
2047             if (s->s3->tmp.ciphers_raw == NULL)
2048                 return 0;
2049             *(unsigned char **)parg = s->s3->tmp.ciphers_raw;
2050             return (int)s->s3->tmp.ciphers_rawlen;
2051         } else {
2052             return TLS_CIPHER_LEN;
2053         }
2054     case SSL_CTRL_GET_EXTMS_SUPPORT:
2055         if (!s->session || SSL_in_init(s) || ossl_statem_get_in_handshake(s))
2056             return -1;
2057         if (s->session->flags & SSL_SESS_FLAG_EXTMS)
2058             return 1;
2059         else
2060             return 0;
2061     case SSL_CTRL_SET_MIN_PROTO_VERSION:
2062         return ssl_set_version_bound(s->ctx->method->version, (int)larg,
2063                                      &s->min_proto_version);
2064     case SSL_CTRL_SET_MAX_PROTO_VERSION:
2065         return ssl_set_version_bound(s->ctx->method->version, (int)larg,
2066                                      &s->max_proto_version);
2067     default:
2068         return (s->method->ssl_ctrl(s, cmd, larg, parg));
2069     }
2070 }
2071
2072 long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
2073 {
2074     switch (cmd) {
2075     case SSL_CTRL_SET_MSG_CALLBACK:
2076         s->msg_callback = (void (*)
2077                            (int write_p, int version, int content_type,
2078                             const void *buf, size_t len, SSL *ssl,
2079                             void *arg))(fp);
2080         return 1;
2081
2082     default:
2083         return (s->method->ssl_callback_ctrl(s, cmd, fp));
2084     }
2085 }
2086
2087 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
2088 {
2089     return ctx->sessions;
2090 }
2091
2092 long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2093 {
2094     long l;
2095     /* For some cases with ctx == NULL perform syntax checks */
2096     if (ctx == NULL) {
2097         switch (cmd) {
2098 #ifndef OPENSSL_NO_EC
2099         case SSL_CTRL_SET_GROUPS_LIST:
2100             return tls1_set_groups_list(NULL, NULL, parg);
2101 #endif
2102         case SSL_CTRL_SET_SIGALGS_LIST:
2103         case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
2104             return tls1_set_sigalgs_list(NULL, parg, 0);
2105         default:
2106             return 0;
2107         }
2108     }
2109
2110     switch (cmd) {
2111     case SSL_CTRL_GET_READ_AHEAD:
2112         return (ctx->read_ahead);
2113     case SSL_CTRL_SET_READ_AHEAD:
2114         l = ctx->read_ahead;
2115         ctx->read_ahead = larg;
2116         return (l);
2117
2118     case SSL_CTRL_SET_MSG_CALLBACK_ARG:
2119         ctx->msg_callback_arg = parg;
2120         return 1;
2121
2122     case SSL_CTRL_GET_MAX_CERT_LIST:
2123         return (long)(ctx->max_cert_list);
2124     case SSL_CTRL_SET_MAX_CERT_LIST:
2125         if (larg < 0)
2126             return 0;
2127         l = (long)ctx->max_cert_list;
2128         ctx->max_cert_list = (size_t)larg;
2129         return l;
2130
2131     case SSL_CTRL_SET_SESS_CACHE_SIZE:
2132         if (larg < 0)
2133             return 0;
2134         l = (long)ctx->session_cache_size;
2135         ctx->session_cache_size = (size_t)larg;
2136         return l;
2137     case SSL_CTRL_GET_SESS_CACHE_SIZE:
2138         return (long)(ctx->session_cache_size);
2139     case SSL_CTRL_SET_SESS_CACHE_MODE:
2140         l = ctx->session_cache_mode;
2141         ctx->session_cache_mode = larg;
2142         return (l);
2143     case SSL_CTRL_GET_SESS_CACHE_MODE:
2144         return (ctx->session_cache_mode);
2145
2146     case SSL_CTRL_SESS_NUMBER:
2147         return (lh_SSL_SESSION_num_items(ctx->sessions));
2148     case SSL_CTRL_SESS_CONNECT:
2149         return (ctx->stats.sess_connect);
2150     case SSL_CTRL_SESS_CONNECT_GOOD:
2151         return (ctx->stats.sess_connect_good);
2152     case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
2153         return (ctx->stats.sess_connect_renegotiate);
2154     case SSL_CTRL_SESS_ACCEPT:
2155         return (ctx->stats.sess_accept);
2156     case SSL_CTRL_SESS_ACCEPT_GOOD:
2157         return (ctx->stats.sess_accept_good);
2158     case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
2159         return (ctx->stats.sess_accept_renegotiate);
2160     case SSL_CTRL_SESS_HIT:
2161         return (ctx->stats.sess_hit);
2162     case SSL_CTRL_SESS_CB_HIT:
2163         return (ctx->stats.sess_cb_hit);
2164     case SSL_CTRL_SESS_MISSES:
2165         return (ctx->stats.sess_miss);
2166     case SSL_CTRL_SESS_TIMEOUTS:
2167         return (ctx->stats.sess_timeout);
2168     case SSL_CTRL_SESS_CACHE_FULL:
2169         return (ctx->stats.sess_cache_full);
2170     case SSL_CTRL_MODE:
2171         return (ctx->mode |= larg);
2172     case SSL_CTRL_CLEAR_MODE:
2173         return (ctx->mode &= ~larg);
2174     case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
2175         if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
2176             return 0;
2177         ctx->max_send_fragment = larg;
2178         if (ctx->max_send_fragment < ctx->split_send_fragment)
2179             ctx->split_send_fragment = ctx->max_send_fragment;
2180         return 1;
2181     case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
2182         if ((size_t)larg > ctx->max_send_fragment || larg == 0)
2183             return 0;
2184         ctx->split_send_fragment = larg;
2185         return 1;
2186     case SSL_CTRL_SET_MAX_PIPELINES:
2187         if (larg < 1 || larg > SSL_MAX_PIPELINES)
2188             return 0;
2189         ctx->max_pipelines = larg;
2190         return 1;
2191     case SSL_CTRL_CERT_FLAGS:
2192         return (ctx->cert->cert_flags |= larg);
2193     case SSL_CTRL_CLEAR_CERT_FLAGS:
2194         return (ctx->cert->cert_flags &= ~larg);
2195     case SSL_CTRL_SET_MIN_PROTO_VERSION:
2196         return ssl_set_version_bound(ctx->method->version, (int)larg,
2197                                      &ctx->min_proto_version);
2198     case SSL_CTRL_SET_MAX_PROTO_VERSION:
2199         return ssl_set_version_bound(ctx->method->version, (int)larg,
2200                                      &ctx->max_proto_version);
2201     default:
2202         return (ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg));
2203     }
2204 }
2205
2206 long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
2207 {
2208     switch (cmd) {
2209     case SSL_CTRL_SET_MSG_CALLBACK:
2210         ctx->msg_callback = (void (*)
2211                              (int write_p, int version, int content_type,
2212                               const void *buf, size_t len, SSL *ssl,
2213                               void *arg))(fp);
2214         return 1;
2215
2216     default:
2217         return (ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp));
2218     }
2219 }
2220
2221 int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
2222 {
2223     if (a->id > b->id)
2224         return 1;
2225     if (a->id < b->id)
2226         return -1;
2227     return 0;
2228 }
2229
2230 int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
2231                           const SSL_CIPHER *const *bp)
2232 {
2233     if ((*ap)->id > (*bp)->id)
2234         return 1;
2235     if ((*ap)->id < (*bp)->id)
2236         return -1;
2237     return 0;
2238 }
2239
2240 /** return a STACK of the ciphers available for the SSL and in order of
2241  * preference */
2242 STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
2243 {
2244     if (s != NULL) {
2245         if (s->cipher_list != NULL) {
2246             return (s->cipher_list);
2247         } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
2248             return (s->ctx->cipher_list);
2249         }
2250     }
2251     return (NULL);
2252 }
2253
2254 STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s)
2255 {
2256     if ((s == NULL) || (s->session == NULL) || !s->server)
2257         return NULL;
2258     return s->session->ciphers;
2259 }
2260
2261 STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s)
2262 {
2263     STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
2264     int i;
2265     ciphers = SSL_get_ciphers(s);
2266     if (!ciphers)
2267         return NULL;
2268     ssl_set_client_disabled(s);
2269     for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
2270         const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
2271         if (!ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED)) {
2272             if (!sk)
2273                 sk = sk_SSL_CIPHER_new_null();
2274             if (!sk)
2275                 return NULL;
2276             if (!sk_SSL_CIPHER_push(sk, c)) {
2277                 sk_SSL_CIPHER_free(sk);
2278                 return NULL;
2279             }
2280         }
2281     }
2282     return sk;
2283 }
2284
2285 /** return a STACK of the ciphers available for the SSL and in order of
2286  * algorithm id */
2287 STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s)
2288 {
2289     if (s != NULL) {
2290         if (s->cipher_list_by_id != NULL) {
2291             return (s->cipher_list_by_id);
2292         } else if ((s->ctx != NULL) && (s->ctx->cipher_list_by_id != NULL)) {
2293             return (s->ctx->cipher_list_by_id);
2294         }
2295     }
2296     return (NULL);
2297 }
2298
2299 /** The old interface to get the same thing as SSL_get_ciphers() */
2300 const char *SSL_get_cipher_list(const SSL *s, int n)
2301 {
2302     const SSL_CIPHER *c;
2303     STACK_OF(SSL_CIPHER) *sk;
2304
2305     if (s == NULL)
2306         return (NULL);
2307     sk = SSL_get_ciphers(s);
2308     if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
2309         return (NULL);
2310     c = sk_SSL_CIPHER_value(sk, n);
2311     if (c == NULL)
2312         return (NULL);
2313     return (c->name);
2314 }
2315
2316 /** return a STACK of the ciphers available for the SSL_CTX and in order of
2317  * preference */
2318 STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
2319 {
2320     if (ctx != NULL)
2321         return ctx->cipher_list;
2322     return NULL;
2323 }
2324
2325 /** specify the ciphers to be used by default by the SSL_CTX */
2326 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
2327 {
2328     STACK_OF(SSL_CIPHER) *sk;
2329
2330     sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list,
2331                                 &ctx->cipher_list_by_id, str, ctx->cert);
2332     /*
2333      * ssl_create_cipher_list may return an empty stack if it was unable to
2334      * find a cipher matching the given rule string (for example if the rule
2335      * string specifies a cipher which has been disabled). This is not an
2336      * error as far as ssl_create_cipher_list is concerned, and hence
2337      * ctx->cipher_list and ctx->cipher_list_by_id has been updated.
2338      */
2339     if (sk == NULL)
2340         return 0;
2341     else if (sk_SSL_CIPHER_num(sk) == 0) {
2342         SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
2343         return 0;
2344     }
2345     return 1;
2346 }
2347
2348 /** specify the ciphers to be used by the SSL */
2349 int SSL_set_cipher_list(SSL *s, const char *str)
2350 {
2351     STACK_OF(SSL_CIPHER) *sk;
2352
2353     sk = ssl_create_cipher_list(s->ctx->method, &s->cipher_list,
2354                                 &s->cipher_list_by_id, str, s->cert);
2355     /* see comment in SSL_CTX_set_cipher_list */
2356     if (sk == NULL)
2357         return 0;
2358     else if (sk_SSL_CIPHER_num(sk) == 0) {
2359         SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
2360         return 0;
2361     }
2362     return 1;
2363 }
2364
2365 char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len)
2366 {
2367     char *p;
2368     STACK_OF(SSL_CIPHER) *sk;
2369     const SSL_CIPHER *c;
2370     int i;
2371
2372     if ((s->session == NULL) || (s->session->ciphers == NULL) || (len < 2))
2373         return (NULL);
2374
2375     p = buf;
2376     sk = s->session->ciphers;
2377
2378     if (sk_SSL_CIPHER_num(sk) == 0)
2379         return NULL;
2380
2381     for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
2382         int n;
2383
2384         c = sk_SSL_CIPHER_value(sk, i);
2385         n = strlen(c->name);
2386         if (n + 1 > len) {
2387             if (p != buf)
2388                 --p;
2389             *p = '\0';
2390             return buf;
2391         }
2392         memcpy(p, c->name, n + 1);
2393         p += n;
2394         *(p++) = ':';
2395         len -= n + 1;
2396     }
2397     p[-1] = '\0';
2398     return (buf);
2399 }
2400
2401 /** return a servername extension value if provided in Client Hello, or NULL.
2402  * So far, only host_name types are defined (RFC 3546).
2403  */
2404
2405 const char *SSL_get_servername(const SSL *s, const int type)
2406 {
2407     if (type != TLSEXT_NAMETYPE_host_name)
2408         return NULL;
2409
2410     return s->session && !s->ext.hostname ?
2411         s->session->ext.hostname : s->ext.hostname;
2412 }
2413
2414 int SSL_get_servername_type(const SSL *s)
2415 {
2416     if (s->session
2417         && (!s->ext.hostname ? s->session->
2418             ext.hostname : s->ext.hostname))
2419         return TLSEXT_NAMETYPE_host_name;
2420     return -1;
2421 }
2422
2423 /*
2424  * SSL_select_next_proto implements the standard protocol selection. It is
2425  * expected that this function is called from the callback set by
2426  * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
2427  * vector of 8-bit, length prefixed byte strings. The length byte itself is
2428  * not included in the length. A byte string of length 0 is invalid. No byte
2429  * string may be truncated. The current, but experimental algorithm for
2430  * selecting the protocol is: 1) If the server doesn't support NPN then this
2431  * is indicated to the callback. In this case, the client application has to
2432  * abort the connection or have a default application level protocol. 2) If
2433  * the server supports NPN, but advertises an empty list then the client
2434  * selects the first protocol in its list, but indicates via the API that this
2435  * fallback case was enacted. 3) Otherwise, the client finds the first
2436  * protocol in the server's list that it supports and selects this protocol.
2437  * This is because it's assumed that the server has better information about
2438  * which protocol a client should use. 4) If the client doesn't support any
2439  * of the server's advertised protocols, then this is treated the same as
2440  * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
2441  * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
2442  */
2443 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
2444                           const unsigned char *server,
2445                           unsigned int server_len,
2446                           const unsigned char *client, unsigned int client_len)
2447 {
2448     unsigned int i, j;
2449     const unsigned char *result;
2450     int status = OPENSSL_NPN_UNSUPPORTED;
2451
2452     /*
2453      * For each protocol in server preference order, see if we support it.
2454      */
2455     for (i = 0; i < server_len;) {
2456         for (j = 0; j < client_len;) {
2457             if (server[i] == client[j] &&
2458                 memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
2459                 /* We found a match */
2460                 result = &server[i];
2461                 status = OPENSSL_NPN_NEGOTIATED;
2462                 goto found;
2463             }
2464             j += client[j];
2465             j++;
2466         }
2467         i += server[i];
2468         i++;
2469     }
2470
2471     /* There's no overlap between our protocols and the server's list. */
2472     result = client;
2473     status = OPENSSL_NPN_NO_OVERLAP;
2474
2475  found:
2476     *out = (unsigned char *)result + 1;
2477     *outlen = result[0];
2478     return status;
2479 }
2480
2481 #ifndef OPENSSL_NO_NEXTPROTONEG
2482 /*
2483  * SSL_get0_next_proto_negotiated sets *data and *len to point to the
2484  * client's requested protocol for this connection and returns 0. If the
2485  * client didn't request any protocol, then *data is set to NULL. Note that
2486  * the client can request any protocol it chooses. The value returned from
2487  * this function need not be a member of the list of supported protocols
2488  * provided by the callback.
2489  */
2490 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
2491                                     unsigned *len)
2492 {
2493     *data = s->ext.npn;
2494     if (!*data) {
2495         *len = 0;
2496     } else {
2497         *len = (unsigned int)s->ext.npn_len;
2498     }
2499 }
2500
2501 /*
2502  * SSL_CTX_set_npn_advertised_cb sets a callback that is called when
2503  * a TLS server needs a list of supported protocols for Next Protocol
2504  * Negotiation. The returned list must be in wire format.  The list is
2505  * returned by setting |out| to point to it and |outlen| to its length. This
2506  * memory will not be modified, but one should assume that the SSL* keeps a
2507  * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
2508  * wishes to advertise. Otherwise, no such extension will be included in the
2509  * ServerHello.
2510  */
2511 void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx,
2512                                    SSL_CTX_npn_advertised_cb_func cb,
2513                                    void *arg)
2514 {
2515     ctx->ext.npn_advertised_cb = cb;
2516     ctx->ext.npn_advertised_cb_arg = arg;
2517 }
2518
2519 /*
2520  * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
2521  * client needs to select a protocol from the server's provided list. |out|
2522  * must be set to point to the selected protocol (which may be within |in|).
2523  * The length of the protocol name must be written into |outlen|. The
2524  * server's advertised protocols are provided in |in| and |inlen|. The
2525  * callback can assume that |in| is syntactically valid. The client must
2526  * select a protocol. It is fatal to the connection if this callback returns
2527  * a value other than SSL_TLSEXT_ERR_OK.
2528  */
2529 void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx,
2530                                SSL_CTX_npn_select_cb_func cb,
2531                                void *arg)
2532 {
2533     ctx->ext.npn_select_cb = cb;
2534     ctx->ext.npn_select_cb_arg = arg;
2535 }
2536 #endif
2537
2538 /*
2539  * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
2540  * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
2541  * length-prefixed strings). Returns 0 on success.
2542  */
2543 int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
2544                             unsigned int protos_len)
2545 {
2546     OPENSSL_free(ctx->ext.alpn);
2547     ctx->ext.alpn = OPENSSL_memdup(protos, protos_len);
2548     if (ctx->ext.alpn == NULL) {
2549         SSLerr(SSL_F_SSL_CTX_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
2550         return 1;
2551     }
2552     ctx->ext.alpn_len = protos_len;
2553
2554     return 0;
2555 }
2556
2557 /*
2558  * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
2559  * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
2560  * length-prefixed strings). Returns 0 on success.
2561  */
2562 int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
2563                         unsigned int protos_len)
2564 {
2565     OPENSSL_free(ssl->ext.alpn);
2566     ssl->ext.alpn = OPENSSL_memdup(protos, protos_len);
2567     if (ssl->ext.alpn == NULL) {
2568         SSLerr(SSL_F_SSL_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
2569         return 1;
2570     }
2571     ssl->ext.alpn_len = protos_len;
2572
2573     return 0;
2574 }
2575
2576 /*
2577  * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
2578  * called during ClientHello processing in order to select an ALPN protocol
2579  * from the client's list of offered protocols.
2580  */
2581 void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
2582                                 SSL_CTX_alpn_select_cb_func cb,
2583                                 void *arg)
2584 {
2585     ctx->ext.alpn_select_cb = cb;
2586     ctx->ext.alpn_select_cb_arg = arg;
2587 }
2588
2589 /*
2590  * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from
2591  * |ssl|. On return it sets |*data| to point to |*len| bytes of protocol name
2592  * (not including the leading length-prefix byte). If the server didn't
2593  * respond with a negotiated protocol then |*len| will be zero.
2594  */
2595 void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
2596                             unsigned int *len)
2597 {
2598     *data = NULL;
2599     if (ssl->s3)
2600         *data = ssl->s3->alpn_selected;
2601     if (*data == NULL)
2602         *len = 0;
2603     else
2604         *len = (unsigned int)ssl->s3->alpn_selected_len;
2605 }
2606
2607 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
2608                                const char *label, size_t llen,
2609                                const unsigned char *p, size_t plen,
2610                                int use_context)
2611 {
2612     if (s->version < TLS1_VERSION && s->version != DTLS1_BAD_VER)
2613         return -1;
2614
2615     return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
2616                                                        llen, p, plen,
2617                                                        use_context);
2618 }
2619
2620 static unsigned long ssl_session_hash(const SSL_SESSION *a)
2621 {
2622     const unsigned char *session_id = a->session_id;
2623     unsigned long l;
2624     unsigned char tmp_storage[4];
2625
2626     if (a->session_id_length < sizeof(tmp_storage)) {
2627         memset(tmp_storage, 0, sizeof(tmp_storage));
2628         memcpy(tmp_storage, a->session_id, a->session_id_length);
2629         session_id = tmp_storage;
2630     }
2631
2632     l = (unsigned long)
2633         ((unsigned long)session_id[0]) |
2634         ((unsigned long)session_id[1] << 8L) |
2635         ((unsigned long)session_id[2] << 16L) |
2636         ((unsigned long)session_id[3] << 24L);
2637     return (l);
2638 }
2639
2640 /*
2641  * NB: If this function (or indeed the hash function which uses a sort of
2642  * coarser function than this one) is changed, ensure
2643  * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
2644  * being able to construct an SSL_SESSION that will collide with any existing
2645  * session with a matching session ID.
2646  */
2647 static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
2648 {
2649     if (a->ssl_version != b->ssl_version)
2650         return (1);
2651     if (a->session_id_length != b->session_id_length)
2652         return (1);
2653     return (memcmp(a->session_id, b->session_id, a->session_id_length));
2654 }
2655
2656 /*
2657  * These wrapper functions should remain rather than redeclaring
2658  * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
2659  * variable. The reason is that the functions aren't static, they're exposed
2660  * via ssl.h.
2661  */
2662
2663 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
2664 {
2665     SSL_CTX *ret = NULL;
2666
2667     if (meth == NULL) {
2668         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED);
2669         return (NULL);
2670     }
2671
2672     if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
2673         return NULL;
2674
2675     if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
2676         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
2677         goto err;
2678     }
2679     ret = OPENSSL_zalloc(sizeof(*ret));
2680     if (ret == NULL)
2681         goto err;
2682
2683     ret->method = meth;
2684     ret->min_proto_version = 0;
2685     ret->max_proto_version = 0;
2686     ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
2687     ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
2688     /* We take the system default. */
2689     ret->session_timeout = meth->get_timeout();
2690     ret->references = 1;
2691     ret->lock = CRYPTO_THREAD_lock_new();
2692     if (ret->lock == NULL) {
2693         SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
2694         OPENSSL_free(ret);
2695         return NULL;
2696     }
2697     ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
2698     ret->verify_mode = SSL_VERIFY_NONE;
2699     if ((ret->cert = ssl_cert_new()) == NULL)
2700         goto err;
2701
2702     ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
2703     if (ret->sessions == NULL)
2704         goto err;
2705     ret->cert_store = X509_STORE_new();
2706     if (ret->cert_store == NULL)
2707         goto err;
2708 #ifndef OPENSSL_NO_CT
2709     ret->ctlog_store = CTLOG_STORE_new();
2710     if (ret->ctlog_store == NULL)
2711         goto err;
2712 #endif
2713     if (!ssl_create_cipher_list(ret->method,
2714                                 &ret->cipher_list, &ret->cipher_list_by_id,
2715                                 SSL_DEFAULT_CIPHER_LIST, ret->cert)
2716         || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
2717         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
2718         goto err2;
2719     }
2720
2721     ret->param = X509_VERIFY_PARAM_new();
2722     if (ret->param == NULL)
2723         goto err;
2724
2725     if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) {
2726         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
2727         goto err2;
2728     }
2729     if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) {
2730         SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
2731         goto err2;
2732     }
2733
2734     if ((ret->client_CA = sk_X509_NAME_new_null()) == NULL)
2735         goto err;
2736
2737     if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data))
2738         goto err;
2739
2740     /* No compression for DTLS */
2741     if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
2742         ret->comp_methods = SSL_COMP_get_compression_methods();
2743
2744     ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
2745     ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
2746
2747     /* Setup RFC5077 ticket keys */
2748     if ((RAND_bytes(ret->ext.tick_key_name,
2749                     sizeof(ret->ext.tick_key_name)) <= 0)
2750         || (RAND_bytes(ret->ext.tick_hmac_key,
2751                        sizeof(ret->ext.tick_hmac_key)) <= 0)
2752         || (RAND_bytes(ret->ext.tick_aes_key,
2753                        sizeof(ret->ext.tick_aes_key)) <= 0))
2754         ret->options |= SSL_OP_NO_TICKET;
2755
2756 #ifndef OPENSSL_NO_SRP
2757     if (!SSL_CTX_SRP_CTX_init(ret))
2758         goto err;
2759 #endif
2760 #ifndef OPENSSL_NO_ENGINE
2761 # ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
2762 #  define eng_strx(x)     #x
2763 #  define eng_str(x)      eng_strx(x)
2764     /* Use specific client engine automatically... ignore errors */
2765     {
2766         ENGINE *eng;
2767         eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
2768         if (!eng) {
2769             ERR_clear_error();
2770             ENGINE_load_builtin_engines();
2771             eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
2772         }
2773         if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
2774             ERR_clear_error();
2775     }
2776 # endif
2777 #endif
2778     /*
2779      * Default is to connect to non-RI servers. When RI is more widely
2780      * deployed might change this.
2781      */
2782     ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
2783     /*
2784      * Disable compression by default to prevent CRIME. Applications can
2785      * re-enable compression by configuring
2786      * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
2787      * or by using the SSL_CONF library.
2788      */
2789     ret->options |= SSL_OP_NO_COMPRESSION;
2790
2791     ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
2792
2793     /*
2794      * Default max early data is a fully loaded single record. Could be split
2795      * across multiple records in practice
2796      */
2797     ret->max_early_data = SSL3_RT_MAX_PLAIN_LENGTH;
2798
2799     return ret;
2800  err:
2801     SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
2802  err2:
2803     SSL_CTX_free(ret);
2804     return NULL;
2805 }
2806
2807 int SSL_CTX_up_ref(SSL_CTX *ctx)
2808 {
2809     int i;
2810
2811     if (CRYPTO_UP_REF(&ctx->references, &i, ctx->lock) <= 0)
2812         return 0;
2813
2814     REF_PRINT_COUNT("SSL_CTX", ctx);
2815     REF_ASSERT_ISNT(i < 2);
2816     return ((i > 1) ? 1 : 0);
2817 }
2818
2819 void SSL_CTX_free(SSL_CTX *a)
2820 {
2821     int i;
2822
2823     if (a == NULL)
2824         return;
2825
2826     CRYPTO_DOWN_REF(&a->references, &i, a->lock);
2827     REF_PRINT_COUNT("SSL_CTX", a);
2828     if (i > 0)
2829         return;
2830     REF_ASSERT_ISNT(i < 0);
2831
2832     X509_VERIFY_PARAM_free(a->param);
2833     dane_ctx_final(&a->dane);
2834
2835     /*
2836      * Free internal session cache. However: the remove_cb() may reference
2837      * the ex_data of SSL_CTX, thus the ex_data store can only be removed
2838      * after the sessions were flushed.
2839      * As the ex_data handling routines might also touch the session cache,
2840      * the most secure solution seems to be: empty (flush) the cache, then
2841      * free ex_data, then finally free the cache.
2842      * (See ticket [openssl.org #212].)
2843      */
2844     if (a->sessions != NULL)
2845         SSL_CTX_flush_sessions(a, 0);
2846
2847     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
2848     lh_SSL_SESSION_free(a->sessions);
2849     X509_STORE_free(a->cert_store);
2850 #ifndef OPENSSL_NO_CT
2851     CTLOG_STORE_free(a->ctlog_store);
2852 #endif
2853     sk_SSL_CIPHER_free(a->cipher_list);
2854     sk_SSL_CIPHER_free(a->cipher_list_by_id);
2855     ssl_cert_free(a->cert);
2856     sk_X509_NAME_pop_free(a->client_CA, X509_NAME_free);
2857     sk_X509_pop_free(a->extra_certs, X509_free);
2858     a->comp_methods = NULL;
2859 #ifndef OPENSSL_NO_SRTP
2860     sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
2861 #endif
2862 #ifndef OPENSSL_NO_SRP
2863     SSL_CTX_SRP_CTX_free(a);
2864 #endif
2865 #ifndef OPENSSL_NO_ENGINE
2866     ENGINE_finish(a->client_cert_engine);
2867 #endif
2868
2869 #ifndef OPENSSL_NO_EC
2870     OPENSSL_free(a->ext.ecpointformats);
2871     OPENSSL_free(a->ext.supportedgroups);
2872 #endif
2873     OPENSSL_free(a->ext.alpn);
2874
2875     CRYPTO_THREAD_lock_free(a->lock);
2876
2877     OPENSSL_free(a);
2878 }
2879
2880 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
2881 {
2882     ctx->default_passwd_callback = cb;
2883 }
2884
2885 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
2886 {
2887     ctx->default_passwd_callback_userdata = u;
2888 }
2889
2890 pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
2891 {
2892     return ctx->default_passwd_callback;
2893 }
2894
2895 void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
2896 {
2897     return ctx->default_passwd_callback_userdata;
2898 }
2899
2900 void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb)
2901 {
2902     s->default_passwd_callback = cb;
2903 }
2904
2905 void SSL_set_default_passwd_cb_userdata(SSL *s, void *u)
2906 {
2907     s->default_passwd_callback_userdata = u;
2908 }
2909
2910 pem_password_cb *SSL_get_default_passwd_cb(SSL *s)
2911 {
2912     return s->default_passwd_callback;
2913 }
2914
2915 void *SSL_get_default_passwd_cb_userdata(SSL *s)
2916 {
2917     return s->default_passwd_callback_userdata;
2918 }
2919
2920 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
2921                                       int (*cb) (X509_STORE_CTX *, void *),
2922                                       void *arg)
2923 {
2924     ctx->app_verify_callback = cb;
2925     ctx->app_verify_arg = arg;
2926 }
2927
2928 void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
2929                         int (*cb) (int, X509_STORE_CTX *))
2930 {
2931     ctx->verify_mode = mode;
2932     ctx->default_verify_callback = cb;
2933 }
2934
2935 void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
2936 {
2937     X509_VERIFY_PARAM_set_depth(ctx->param, depth);
2938 }
2939
2940 void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg)
2941 {
2942     ssl_cert_set_cert_cb(c->cert, cb, arg);
2943 }
2944
2945 void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
2946 {
2947     ssl_cert_set_cert_cb(s->cert, cb, arg);
2948 }
2949
2950 void ssl_set_masks(SSL *s)
2951 {
2952     CERT *c = s->cert;
2953     uint32_t *pvalid = s->s3->tmp.valid_flags;
2954     int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
2955     unsigned long mask_k, mask_a;
2956 #ifndef OPENSSL_NO_EC
2957     int have_ecc_cert, ecdsa_ok;
2958 #endif
2959     if (c == NULL)
2960         return;
2961
2962 #ifndef OPENSSL_NO_DH
2963     dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL || c->dh_tmp_auto);
2964 #else
2965     dh_tmp = 0;
2966 #endif
2967
2968     rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
2969     rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
2970     dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID;
2971 #ifndef OPENSSL_NO_EC
2972     have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID;
2973 #endif
2974     mask_k = 0;
2975     mask_a = 0;
2976
2977 #ifdef CIPHER_DEBUG
2978     fprintf(stderr, "dht=%d re=%d rs=%d ds=%d\n",
2979             dh_tmp, rsa_enc, rsa_sign, dsa_sign);
2980 #endif
2981
2982 #ifndef OPENSSL_NO_GOST
2983     if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) {
2984         mask_k |= SSL_kGOST;
2985         mask_a |= SSL_aGOST12;
2986     }
2987     if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) {
2988         mask_k |= SSL_kGOST;
2989         mask_a |= SSL_aGOST12;
2990     }
2991     if (ssl_has_cert(s, SSL_PKEY_GOST01)) {
2992         mask_k |= SSL_kGOST;
2993         mask_a |= SSL_aGOST01;
2994     }
2995 #endif
2996
2997     if (rsa_enc)
2998         mask_k |= SSL_kRSA;
2999
3000     if (dh_tmp)
3001         mask_k |= SSL_kDHE;
3002
3003     if (rsa_enc || rsa_sign) {
3004         mask_a |= SSL_aRSA;
3005     }
3006
3007     if (dsa_sign) {
3008         mask_a |= SSL_aDSS;
3009     }
3010
3011     mask_a |= SSL_aNULL;
3012
3013     /*
3014      * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
3015      * depending on the key usage extension.
3016      */
3017 #ifndef OPENSSL_NO_EC
3018     if (have_ecc_cert) {
3019         uint32_t ex_kusage;
3020         ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509);
3021         ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE;
3022         if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN))
3023             ecdsa_ok = 0;
3024         if (ecdsa_ok)
3025             mask_a |= SSL_aECDSA;
3026     }
3027 #endif
3028
3029 #ifndef OPENSSL_NO_EC
3030     mask_k |= SSL_kECDHE;
3031 #endif
3032
3033 #ifndef OPENSSL_NO_PSK
3034     mask_k |= SSL_kPSK;
3035     mask_a |= SSL_aPSK;
3036     if (mask_k & SSL_kRSA)
3037         mask_k |= SSL_kRSAPSK;
3038     if (mask_k & SSL_kDHE)
3039         mask_k |= SSL_kDHEPSK;
3040     if (mask_k & SSL_kECDHE)
3041         mask_k |= SSL_kECDHEPSK;
3042 #endif
3043
3044     s->s3->tmp.mask_k = mask_k;
3045     s->s3->tmp.mask_a = mask_a;
3046 }
3047
3048 #ifndef OPENSSL_NO_EC
3049
3050 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
3051 {
3052     if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aECDSA) {
3053         /* key usage, if present, must allow signing */
3054         if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) {
3055             SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
3056                    SSL_R_ECC_CERT_NOT_FOR_SIGNING);
3057             return 0;
3058         }
3059     }
3060     return 1;                   /* all checks are ok */
3061 }
3062
3063 #endif
3064
3065 int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
3066                                    size_t *serverinfo_length)
3067 {
3068     CERT_PKEY *cpk = s->s3->tmp.cert;
3069     *serverinfo_length = 0;
3070
3071     if (cpk == NULL || cpk->serverinfo == NULL)
3072         return 0;
3073
3074     *serverinfo = cpk->serverinfo;
3075     *serverinfo_length = cpk->serverinfo_length;
3076     return 1;
3077 }
3078
3079 void ssl_update_cache(SSL *s, int mode)
3080 {
3081     int i;
3082
3083     /*
3084      * If the session_id_length is 0, we are not supposed to cache it, and it
3085      * would be rather hard to do anyway :-)
3086      */
3087     if (s->session->session_id_length == 0)
3088         return;
3089
3090     i = s->session_ctx->session_cache_mode;
3091     if ((i & mode) && (!s->hit)
3092         && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE)
3093             || SSL_CTX_add_session(s->session_ctx, s->session))
3094         && (s->session_ctx->new_session_cb != NULL)) {
3095         SSL_SESSION_up_ref(s->session);
3096         if (!s->session_ctx->new_session_cb(s, s->session))
3097             SSL_SESSION_free(s->session);
3098     }
3099
3100     /* auto flush every 255 connections */
3101     if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
3102         if ((((mode & SSL_SESS_CACHE_CLIENT)
3103               ? s->session_ctx->stats.sess_connect_good
3104               : s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff) {
3105             SSL_CTX_flush_sessions(s->session_ctx, (unsigned long)time(NULL));
3106         }
3107     }
3108 }
3109
3110 const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx)
3111 {
3112     return ctx->method;
3113 }
3114
3115 const SSL_METHOD *SSL_get_ssl_method(SSL *s)
3116 {
3117     return (s->method);
3118 }
3119
3120 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
3121 {
3122     int ret = 1;
3123
3124     if (s->method != meth) {
3125         const SSL_METHOD *sm = s->method;
3126         int (*hf) (SSL *) = s->handshake_func;
3127
3128         if (sm->version == meth->version)
3129             s->method = meth;
3130         else {
3131             sm->ssl_free(s);
3132             s->method = meth;
3133             ret = s->method->ssl_new(s);
3134         }
3135
3136         if (hf == sm->ssl_connect)
3137             s->handshake_func = meth->ssl_connect;
3138         else if (hf == sm->ssl_accept)
3139             s->handshake_func = meth->ssl_accept;
3140     }
3141     return (ret);
3142 }
3143
3144 int SSL_get_error(const SSL *s, int i)
3145 {
3146     int reason;
3147     unsigned long l;
3148     BIO *bio;
3149
3150     if (i > 0)
3151         return (SSL_ERROR_NONE);
3152
3153     /*
3154      * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
3155      * where we do encode the error
3156      */
3157     if ((l = ERR_peek_error()) != 0) {
3158         if (ERR_GET_LIB(l) == ERR_LIB_SYS)
3159             return (SSL_ERROR_SYSCALL);
3160         else
3161             return (SSL_ERROR_SSL);
3162     }
3163
3164     if (SSL_want_read(s)) {
3165         bio = SSL_get_rbio(s);
3166         if (BIO_should_read(bio))
3167             return (SSL_ERROR_WANT_READ);
3168         else if (BIO_should_write(bio))
3169             /*
3170              * This one doesn't make too much sense ... We never try to write
3171              * to the rbio, and an application program where rbio and wbio
3172              * are separate couldn't even know what it should wait for.
3173              * However if we ever set s->rwstate incorrectly (so that we have
3174              * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
3175              * wbio *are* the same, this test works around that bug; so it
3176              * might be safer to keep it.
3177              */
3178             return (SSL_ERROR_WANT_WRITE);
3179         else if (BIO_should_io_special(bio)) {
3180             reason = BIO_get_retry_reason(bio);
3181             if (reason == BIO_RR_CONNECT)
3182                 return (SSL_ERROR_WANT_CONNECT);
3183             else if (reason == BIO_RR_ACCEPT)
3184                 return (SSL_ERROR_WANT_ACCEPT);
3185             else
3186                 return (SSL_ERROR_SYSCALL); /* unknown */
3187         }
3188     }
3189
3190     if (SSL_want_write(s)) {
3191         /*
3192          * Access wbio directly - in order to use the buffered bio if
3193          * present
3194          */
3195         bio = s->wbio;
3196         if (BIO_should_write(bio))
3197             return (SSL_ERROR_WANT_WRITE);
3198         else if (BIO_should_read(bio))
3199             /*
3200              * See above (SSL_want_read(s) with BIO_should_write(bio))
3201              */
3202             return (SSL_ERROR_WANT_READ);
3203         else if (BIO_should_io_special(bio)) {
3204             reason = BIO_get_retry_reason(bio);
3205             if (reason == BIO_RR_CONNECT)
3206                 return (SSL_ERROR_WANT_CONNECT);
3207             else if (reason == BIO_RR_ACCEPT)
3208                 return (SSL_ERROR_WANT_ACCEPT);
3209             else
3210                 return (SSL_ERROR_SYSCALL);
3211         }
3212     }
3213     if (SSL_want_x509_lookup(s))
3214         return (SSL_ERROR_WANT_X509_LOOKUP);
3215     if (SSL_want_async(s))
3216         return SSL_ERROR_WANT_ASYNC;
3217     if (SSL_want_async_job(s))
3218         return SSL_ERROR_WANT_ASYNC_JOB;
3219     if (SSL_want_early(s))
3220         return SSL_ERROR_WANT_EARLY;
3221
3222     if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
3223         (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY))
3224         return (SSL_ERROR_ZERO_RETURN);
3225
3226     return (SSL_ERROR_SYSCALL);
3227 }
3228
3229 static int ssl_do_handshake_intern(void *vargs)
3230 {
3231     struct ssl_async_args *args;
3232     SSL *s;
3233
3234     args = (struct ssl_async_args *)vargs;
3235     s = args->s;
3236
3237     return s->handshake_func(s);
3238 }
3239
3240 int SSL_do_handshake(SSL *s)
3241 {
3242     int ret = 1;
3243
3244     if (s->handshake_func == NULL) {
3245         SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET);
3246         return -1;
3247     }
3248
3249     if (s->early_data_state == SSL_EARLY_DATA_WRITE_RETRY) {
3250         int edfin;
3251
3252         edfin = ssl_write_early_finish(s);
3253         if (edfin <= 0)
3254             return edfin;
3255     }
3256     ossl_statem_check_finish_init(s, -1);
3257
3258     s->method->ssl_renegotiate_check(s, 0);
3259
3260     if (SSL_in_init(s) || SSL_in_before(s)) {
3261         if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
3262             struct ssl_async_args args;
3263
3264             args.s = s;
3265
3266             ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
3267         } else {
3268             ret = s->handshake_func(s);
3269         }
3270     }
3271     return ret;
3272 }
3273
3274 void SSL_set_accept_state(SSL *s)
3275 {
3276     s->server = 1;
3277     s->shutdown = 0;
3278     ossl_statem_clear(s);
3279     s->handshake_func = s->method->ssl_accept;
3280     clear_ciphers(s);
3281 }
3282
3283 void SSL_set_connect_state(SSL *s)
3284 {
3285     s->server = 0;
3286     s->shutdown = 0;
3287     ossl_statem_clear(s);
3288     s->handshake_func = s->method->ssl_connect;
3289     clear_ciphers(s);
3290 }
3291
3292 int ssl_undefined_function(SSL *s)
3293 {
3294     SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3295     return (0);
3296 }
3297
3298 int ssl_undefined_void_function(void)
3299 {
3300     SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,
3301            ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3302     return (0);
3303 }
3304
3305 int ssl_undefined_const_function(const SSL *s)
3306 {
3307     return (0);
3308 }
3309
3310 const SSL_METHOD *ssl_bad_method(int ver)
3311 {
3312     SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3313     return (NULL);
3314 }
3315
3316 const char *ssl_protocol_to_string(int version)
3317 {
3318     switch(version)
3319     {
3320     case TLS1_3_VERSION:
3321         return "TLSv1.3";
3322
3323     case TLS1_2_VERSION:
3324         return "TLSv1.2";
3325
3326     case TLS1_1_VERSION:
3327         return "TLSv1.1";
3328
3329     case TLS1_VERSION:
3330         return "TLSv1";
3331
3332     case SSL3_VERSION:
3333         return "SSLv3";
3334
3335     case DTLS1_BAD_VER:
3336         return "DTLSv0.9";
3337
3338     case DTLS1_VERSION:
3339         return "DTLSv1";
3340
3341     case DTLS1_2_VERSION:
3342         return "DTLSv1.2";
3343
3344     default:
3345         return "unknown";
3346     }
3347 }
3348
3349 const char *SSL_get_version(const SSL *s)
3350 {
3351     return ssl_protocol_to_string(s->version);
3352 }
3353
3354 SSL *SSL_dup(SSL *s)
3355 {
3356     STACK_OF(X509_NAME) *sk;
3357     X509_NAME *xn;
3358     SSL *ret;
3359     int i;
3360
3361     /* If we're not quiescent, just up_ref! */
3362     if (!SSL_in_init(s) || !SSL_in_before(s)) {
3363         CRYPTO_UP_REF(&s->references, &i, s->lock);
3364         return s;
3365     }
3366
3367     /*
3368      * Otherwise, copy configuration state, and session if set.
3369      */
3370     if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
3371         return (NULL);
3372
3373     if (s->session != NULL) {
3374         /*
3375          * Arranges to share the same session via up_ref.  This "copies"
3376          * session-id, SSL_METHOD, sid_ctx, and 'cert'
3377          */
3378         if (!SSL_copy_session_id(ret, s))
3379             goto err;
3380     } else {
3381         /*
3382          * No session has been established yet, so we have to expect that
3383          * s->cert or ret->cert will be changed later -- they should not both
3384          * point to the same object, and thus we can't use
3385          * SSL_copy_session_id.
3386          */
3387         if (!SSL_set_ssl_method(ret, s->method))
3388             goto err;
3389
3390         if (s->cert != NULL) {
3391             ssl_cert_free(ret->cert);
3392             ret->cert = ssl_cert_dup(s->cert);
3393             if (ret->cert == NULL)
3394                 goto err;
3395         }
3396
3397         if (!SSL_set_session_id_context(ret, s->sid_ctx,
3398                                         (int)s->sid_ctx_length))
3399             goto err;
3400     }
3401
3402     if (!ssl_dane_dup(ret, s))
3403         goto err;
3404     ret->version = s->version;
3405     ret->options = s->options;
3406     ret->mode = s->mode;
3407     SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
3408     SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
3409     ret->msg_callback = s->msg_callback;
3410     ret->msg_callback_arg = s->msg_callback_arg;
3411     SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
3412     SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
3413     ret->generate_session_id = s->generate_session_id;
3414
3415     SSL_set_info_callback(ret, SSL_get_info_callback(s));
3416
3417     /* copy app data, a little dangerous perhaps */
3418     if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
3419         goto err;
3420
3421     /* setup rbio, and wbio */
3422     if (s->rbio != NULL) {
3423         if (!BIO_dup_state(s->rbio, (char *)&ret->rbio))
3424             goto err;
3425     }
3426     if (s->wbio != NULL) {
3427         if (s->wbio != s->rbio) {
3428             if (!BIO_dup_state(s->wbio, (char *)&ret->wbio))
3429                 goto err;
3430         } else {
3431             BIO_up_ref(ret->rbio);
3432             ret->wbio = ret->rbio;
3433         }
3434     }
3435
3436     ret->server = s->server;
3437     if (s->handshake_func) {
3438         if (s->server)
3439             SSL_set_accept_state(ret);
3440         else
3441             SSL_set_connect_state(ret);
3442     }
3443     ret->shutdown = s->shutdown;
3444     ret->hit = s->hit;
3445
3446     ret->default_passwd_callback = s->default_passwd_callback;
3447     ret->default_passwd_callback_userdata = s->default_passwd_callback_userdata;
3448
3449     X509_VERIFY_PARAM_inherit(ret->param, s->param);
3450
3451     /* dup the cipher_list and cipher_list_by_id stacks */
3452     if (s->cipher_list != NULL) {
3453         if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
3454             goto err;
3455     }
3456     if (s->cipher_list_by_id != NULL)
3457         if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id))
3458             == NULL)
3459             goto err;
3460
3461     /* Dup the client_CA list */
3462     if (s->client_CA != NULL) {
3463         if ((sk = sk_X509_NAME_dup(s->client_CA)) == NULL)
3464             goto err;
3465         ret->client_CA = sk;
3466         for (i = 0; i < sk_X509_NAME_num(sk); i++) {
3467             xn = sk_X509_NAME_value(sk, i);
3468             if (sk_X509_NAME_set(sk, i, X509_NAME_dup(xn)) == NULL) {
3469                 X509_NAME_free(xn);
3470                 goto err;
3471             }
3472         }
3473     }
3474     return ret;
3475
3476  err:
3477     SSL_free(ret);
3478     return NULL;
3479 }
3480
3481 void ssl_clear_cipher_ctx(SSL *s)
3482 {
3483     if (s->enc_read_ctx != NULL) {
3484         EVP_CIPHER_CTX_free(s->enc_read_ctx);
3485         s->enc_read_ctx = NULL;
3486     }
3487     if (s->enc_write_ctx != NULL) {
3488         EVP_CIPHER_CTX_free(s->enc_write_ctx);
3489         s->enc_write_ctx = NULL;
3490     }
3491 #ifndef OPENSSL_NO_COMP
3492     COMP_CTX_free(s->expand);
3493     s->expand = NULL;
3494     COMP_CTX_free(s->compress);
3495     s->compress = NULL;
3496 #endif
3497 }
3498
3499 X509 *SSL_get_certificate(const SSL *s)
3500 {
3501     if (s->cert != NULL)
3502         return (s->cert->key->x509);
3503     else
3504         return (NULL);
3505 }
3506
3507 EVP_PKEY *SSL_get_privatekey(const SSL *s)
3508 {
3509     if (s->cert != NULL)
3510         return (s->cert->key->privatekey);
3511     else
3512         return (NULL);
3513 }
3514
3515 X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
3516 {
3517     if (ctx->cert != NULL)
3518         return ctx->cert->key->x509;
3519     else
3520         return NULL;
3521 }
3522
3523 EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
3524 {
3525     if (ctx->cert != NULL)
3526         return ctx->cert->key->privatekey;
3527     else
3528         return NULL;
3529 }
3530
3531 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
3532 {
3533     if ((s->session != NULL) && (s->session->cipher != NULL))
3534         return (s->session->cipher);
3535     return (NULL);
3536 }
3537
3538 const COMP_METHOD *SSL_get_current_compression(SSL *s)
3539 {
3540 #ifndef OPENSSL_NO_COMP
3541     return s->compress ? COMP_CTX_get_method(s->compress) : NULL;
3542 #else
3543     return NULL;
3544 #endif
3545 }
3546
3547 const COMP_METHOD *SSL_get_current_expansion(SSL *s)
3548 {
3549 #ifndef OPENSSL_NO_COMP
3550     return s->expand ? COMP_CTX_get_method(s->expand) : NULL;
3551 #else
3552     return NULL;
3553 #endif
3554 }
3555
3556 int ssl_init_wbio_buffer(SSL *s)
3557 {
3558     BIO *bbio;
3559
3560     if (s->bbio != NULL) {
3561         /* Already buffered. */
3562         return 1;
3563     }
3564
3565     bbio = BIO_new(BIO_f_buffer());
3566     if (bbio == NULL || !BIO_set_read_buffer_size(bbio, 1)) {
3567         BIO_free(bbio);
3568         SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB);
3569         return 0;
3570     }
3571     s->bbio = bbio;
3572     s->wbio = BIO_push(bbio, s->wbio);
3573
3574     return 1;
3575 }
3576
3577 void ssl_free_wbio_buffer(SSL *s)
3578 {
3579     /* callers ensure s is never null */
3580     if (s->bbio == NULL)
3581         return;
3582
3583     s->wbio = BIO_pop(s->wbio);
3584     assert(s->wbio != NULL);
3585     BIO_free(s->bbio);
3586     s->bbio = NULL;
3587 }
3588
3589 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
3590 {
3591     ctx->quiet_shutdown = mode;
3592 }
3593
3594 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
3595 {
3596     return (ctx->quiet_shutdown);
3597 }
3598
3599 void SSL_set_quiet_shutdown(SSL *s, int mode)
3600 {
3601     s->quiet_shutdown = mode;
3602 }
3603
3604 int SSL_get_quiet_shutdown(const SSL *s)
3605 {
3606     return (s->quiet_shutdown);
3607 }
3608
3609 void SSL_set_shutdown(SSL *s, int mode)
3610 {
3611     s->shutdown = mode;
3612 }
3613
3614 int SSL_get_shutdown(const SSL *s)
3615 {
3616     return s->shutdown;
3617 }
3618
3619 int SSL_version(const SSL *s)
3620 {
3621     return s->version;
3622 }
3623
3624 int SSL_client_version(const SSL *s)
3625 {
3626     return s->client_version;
3627 }
3628
3629 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
3630 {
3631     return ssl->ctx;
3632 }
3633
3634 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
3635 {
3636     CERT *new_cert;
3637     if (ssl->ctx == ctx)
3638         return ssl->ctx;
3639     if (ctx == NULL)
3640         ctx = ssl->session_ctx;
3641     new_cert = ssl_cert_dup(ctx->cert);
3642     if (new_cert == NULL) {
3643         return NULL;
3644     }
3645     ssl_cert_free(ssl->cert);
3646     ssl->cert = new_cert;
3647
3648     /*
3649      * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
3650      * so setter APIs must prevent invalid lengths from entering the system.
3651      */
3652     OPENSSL_assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx));
3653
3654     /*
3655      * If the session ID context matches that of the parent SSL_CTX,
3656      * inherit it from the new SSL_CTX as well. If however the context does
3657      * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
3658      * leave it unchanged.
3659      */
3660     if ((ssl->ctx != NULL) &&
3661         (ssl->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
3662         (memcmp(ssl->sid_ctx, ssl->ctx->sid_ctx, ssl->sid_ctx_length) == 0)) {
3663         ssl->sid_ctx_length = ctx->sid_ctx_length;
3664         memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
3665     }
3666
3667     SSL_CTX_up_ref(ctx);
3668     SSL_CTX_free(ssl->ctx);     /* decrement reference count */
3669     ssl->ctx = ctx;
3670
3671     return ssl->ctx;
3672 }
3673
3674 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
3675 {
3676     return (X509_STORE_set_default_paths(ctx->cert_store));
3677 }
3678
3679 int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
3680 {
3681     X509_LOOKUP *lookup;
3682
3683     lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir());
3684     if (lookup == NULL)
3685         return 0;
3686     X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
3687
3688     /* Clear any errors if the default directory does not exist */
3689     ERR_clear_error();
3690
3691     return 1;
3692 }
3693
3694 int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
3695 {
3696     X509_LOOKUP *lookup;
3697
3698     lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file());
3699     if (lookup == NULL)
3700         return 0;
3701
3702     X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
3703
3704     /* Clear any errors if the default file does not exist */
3705     ERR_clear_error();
3706
3707     return 1;
3708 }
3709
3710 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
3711                                   const char *CApath)
3712 {
3713     return (X509_STORE_load_locations(ctx->cert_store, CAfile, CApath));
3714 }
3715
3716 void SSL_set_info_callback(SSL *ssl,
3717                            void (*cb) (const SSL *ssl, int type, int val))
3718 {
3719     ssl->info_callback = cb;
3720 }
3721
3722 /*
3723  * One compiler (Diab DCC) doesn't like argument names in returned function
3724  * pointer.
3725  */
3726 void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
3727                                                int /* type */ ,
3728                                                int /* val */ ) {
3729     return ssl->info_callback;
3730 }
3731
3732 void SSL_set_verify_result(SSL *ssl, long arg)
3733 {
3734     ssl->verify_result = arg;
3735 }
3736
3737 long SSL_get_verify_result(const SSL *ssl)
3738 {
3739     return (ssl->verify_result);
3740 }
3741
3742 size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen)
3743 {
3744     if (outlen == 0)
3745         return sizeof(ssl->s3->client_random);
3746     if (outlen > sizeof(ssl->s3->client_random))
3747         outlen = sizeof(ssl->s3->client_random);
3748     memcpy(out, ssl->s3->client_random, outlen);
3749     return outlen;
3750 }
3751
3752 size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen)
3753 {
3754     if (outlen == 0)
3755         return sizeof(ssl->s3->server_random);
3756     if (outlen > sizeof(ssl->s3->server_random))
3757         outlen = sizeof(ssl->s3->server_random);
3758     memcpy(out, ssl->s3->server_random, outlen);
3759     return outlen;
3760 }
3761
3762 size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
3763                                   unsigned char *out, size_t outlen)
3764 {
3765     if (outlen == 0)
3766         return session->master_key_length;
3767     if (outlen > session->master_key_length)
3768         outlen = session->master_key_length;
3769     memcpy(out, session->master_key, outlen);
3770     return outlen;
3771 }
3772
3773 int SSL_set_ex_data(SSL *s, int idx, void *arg)
3774 {
3775     return (CRYPTO_set_ex_data(&s->ex_data, idx, arg));
3776 }
3777
3778 void *SSL_get_ex_data(const SSL *s, int idx)
3779 {
3780     return (CRYPTO_get_ex_data(&s->ex_data, idx));
3781 }
3782
3783 int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
3784 {
3785     return (CRYPTO_set_ex_data(&s->ex_data, idx, arg));
3786 }
3787
3788 void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
3789 {
3790     return (CRYPTO_get_ex_data(&s->ex_data, idx));
3791 }
3792
3793 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
3794 {
3795     return (ctx->cert_store);
3796 }
3797
3798 void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
3799 {
3800     X509_STORE_free(ctx->cert_store);
3801     ctx->cert_store = store;
3802 }
3803
3804 void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store)
3805 {
3806     if (store != NULL)
3807         X509_STORE_up_ref(store);
3808     SSL_CTX_set_cert_store(ctx, store);
3809 }
3810
3811 int SSL_want(const SSL *s)
3812 {
3813     return (s->rwstate);
3814 }
3815
3816 /**
3817  * \brief Set the callback for generating temporary DH keys.
3818  * \param ctx the SSL context.
3819  * \param dh the callback
3820  */
3821
3822 #ifndef OPENSSL_NO_DH
3823 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
3824                                  DH *(*dh) (SSL *ssl, int is_export,
3825                                             int keylength))
3826 {
3827     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
3828 }
3829
3830 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
3831                                                   int keylength))
3832 {
3833     SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
3834 }
3835 #endif
3836
3837 #ifndef OPENSSL_NO_PSK
3838 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
3839 {
3840     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
3841         SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
3842         return 0;
3843     }
3844     OPENSSL_free(ctx->cert->psk_identity_hint);
3845     if (identity_hint != NULL) {
3846         ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
3847         if (ctx->cert->psk_identity_hint == NULL)
3848             return 0;
3849     } else
3850         ctx->cert->psk_identity_hint = NULL;
3851     return 1;
3852 }
3853
3854 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
3855 {
3856     if (s == NULL)
3857         return 0;
3858
3859     if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
3860         SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
3861         return 0;
3862     }
3863     OPENSSL_free(s->cert->psk_identity_hint);
3864     if (identity_hint != NULL) {
3865         s->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
3866         if (s->cert->psk_identity_hint == NULL)
3867             return 0;
3868     } else
3869         s->cert->psk_identity_hint = NULL;
3870     return 1;
3871 }
3872
3873 const char *SSL_get_psk_identity_hint(const SSL *s)
3874 {
3875     if (s == NULL || s->session == NULL)
3876         return NULL;
3877     return (s->session->psk_identity_hint);
3878 }
3879
3880 const char *SSL_get_psk_identity(const SSL *s)
3881 {
3882     if (s == NULL || s->session == NULL)
3883         return NULL;
3884     return (s->session->psk_identity);
3885 }
3886
3887 void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb)
3888 {
3889     s->psk_client_callback = cb;
3890 }
3891
3892 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb)
3893 {
3894     ctx->psk_client_callback = cb;
3895 }
3896
3897 void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb)
3898 {
3899     s->psk_server_callback = cb;
3900 }
3901
3902 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb)
3903 {
3904     ctx->psk_server_callback = cb;
3905 }
3906 #endif
3907
3908 void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
3909                               void (*cb) (int write_p, int version,
3910                                           int content_type, const void *buf,
3911                                           size_t len, SSL *ssl, void *arg))
3912 {
3913     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
3914 }
3915
3916 void SSL_set_msg_callback(SSL *ssl,
3917                           void (*cb) (int write_p, int version,
3918                                       int content_type, const void *buf,
3919                                       size_t len, SSL *ssl, void *arg))
3920 {
3921     SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
3922 }
3923
3924 void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
3925                                                 int (*cb) (SSL *ssl,
3926                                                            int
3927                                                            is_forward_secure))
3928 {
3929     SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
3930                           (void (*)(void))cb);
3931 }
3932
3933 void SSL_set_not_resumable_session_callback(SSL *ssl,
3934                                             int (*cb) (SSL *ssl,
3935                                                        int is_forward_secure))
3936 {
3937     SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
3938                       (void (*)(void))cb);
3939 }
3940
3941 /*
3942  * Allocates new EVP_MD_CTX and sets pointer to it into given pointer
3943  * variable, freeing EVP_MD_CTX previously stored in that variable, if any.
3944  * If EVP_MD pointer is passed, initializes ctx with this md.
3945  * Returns the newly allocated ctx;
3946  */
3947
3948 EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md)
3949 {
3950     ssl_clear_hash_ctx(hash);
3951     *hash = EVP_MD_CTX_new();
3952     if (*hash == NULL || (md && EVP_DigestInit_ex(*hash, md, NULL) <= 0)) {
3953         EVP_MD_CTX_free(*hash);
3954         *hash = NULL;
3955         return NULL;
3956     }
3957     return *hash;
3958 }
3959
3960 void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
3961 {
3962
3963     EVP_MD_CTX_free(*hash);
3964     *hash = NULL;
3965 }
3966
3967 /* Retrieve handshake hashes */
3968 int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
3969                        size_t *hashlen)
3970 {
3971     EVP_MD_CTX *ctx = NULL;
3972     EVP_MD_CTX *hdgst = s->s3->handshake_dgst;
3973     int hashleni = EVP_MD_CTX_size(hdgst);
3974     int ret = 0;
3975
3976     if (hashleni < 0 || (size_t)hashleni > outlen)
3977         goto err;
3978
3979     ctx = EVP_MD_CTX_new();
3980     if (ctx == NULL)
3981         goto err;
3982
3983     if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
3984         || EVP_DigestFinal_ex(ctx, out, NULL) <= 0)
3985         goto err;
3986
3987     *hashlen = hashleni;
3988
3989     ret = 1;
3990  err:
3991     EVP_MD_CTX_free(ctx);
3992     return ret;
3993 }
3994
3995 int SSL_session_reused(SSL *s)
3996 {
3997     return s->hit;
3998 }
3999
4000 int SSL_is_server(SSL *s)
4001 {
4002     return s->server;
4003 }
4004
4005 #if OPENSSL_API_COMPAT < 0x10100000L
4006 void SSL_set_debug(SSL *s, int debug)
4007 {
4008     /* Old function was do-nothing anyway... */
4009     (void)s;
4010     (void)debug;
4011 }
4012 #endif
4013
4014 void SSL_set_security_level(SSL *s, int level)
4015 {
4016     s->cert->sec_level = level;
4017 }
4018
4019 int SSL_get_security_level(const SSL *s)
4020 {
4021     return s->cert->sec_level;
4022 }
4023
4024 void SSL_set_security_callback(SSL *s,
4025                                int (*cb) (const SSL *s, const SSL_CTX *ctx,
4026                                           int op, int bits, int nid,
4027                                           void *other, void *ex))
4028 {
4029     s->cert->sec_cb = cb;
4030 }
4031
4032 int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
4033                                                 const SSL_CTX *ctx, int op,
4034                                                 int bits, int nid, void *other,
4035                                                 void *ex) {
4036     return s->cert->sec_cb;
4037 }
4038
4039 void SSL_set0_security_ex_data(SSL *s, void *ex)
4040 {
4041     s->cert->sec_ex = ex;
4042 }
4043
4044 void *SSL_get0_security_ex_data(const SSL *s)
4045 {
4046     return s->cert->sec_ex;
4047 }
4048
4049 void SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
4050 {
4051     ctx->cert->sec_level = level;
4052 }
4053
4054 int SSL_CTX_get_security_level(const SSL_CTX *ctx)
4055 {
4056     return ctx->cert->sec_level;
4057 }
4058
4059 void SSL_CTX_set_security_callback(SSL_CTX *ctx,
4060                                    int (*cb) (const SSL *s, const SSL_CTX *ctx,
4061                                               int op, int bits, int nid,
4062                                               void *other, void *ex))
4063 {
4064     ctx->cert->sec_cb = cb;
4065 }
4066
4067 int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
4068                                                           const SSL_CTX *ctx,
4069                                                           int op, int bits,
4070                                                           int nid,
4071                                                           void *other,
4072                                                           void *ex) {
4073     return ctx->cert->sec_cb;
4074 }
4075
4076 void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex)
4077 {
4078     ctx->cert->sec_ex = ex;
4079 }
4080
4081 void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx)
4082 {
4083     return ctx->cert->sec_ex;
4084 }
4085
4086 /*
4087  * Get/Set/Clear options in SSL_CTX or SSL, formerly macros, now functions that
4088  * can return unsigned long, instead of the generic long return value from the
4089  * control interface.
4090  */
4091 unsigned long SSL_CTX_get_options(const SSL_CTX *ctx)
4092 {
4093     return ctx->options;
4094 }
4095
4096 unsigned long SSL_get_options(const SSL *s)
4097 {
4098     return s->options;
4099 }
4100
4101 unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op)
4102 {
4103     return ctx->options |= op;
4104 }
4105
4106 unsigned long SSL_set_options(SSL *s, unsigned long op)
4107 {
4108     return s->options |= op;
4109 }
4110
4111 unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op)
4112 {
4113     return ctx->options &= ~op;
4114 }
4115
4116 unsigned long SSL_clear_options(SSL *s, unsigned long op)
4117 {
4118     return s->options &= ~op;
4119 }
4120
4121 STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s)
4122 {
4123     return s->verified_chain;
4124 }
4125
4126 IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
4127
4128 #ifndef OPENSSL_NO_CT
4129
4130 /*
4131  * Moves SCTs from the |src| stack to the |dst| stack.
4132  * The source of each SCT will be set to |origin|.
4133  * If |dst| points to a NULL pointer, a new stack will be created and owned by
4134  * the caller.
4135  * Returns the number of SCTs moved, or a negative integer if an error occurs.
4136  */
4137 static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
4138                         sct_source_t origin)
4139 {
4140     int scts_moved = 0;
4141     SCT *sct = NULL;
4142
4143     if (*dst == NULL) {
4144         *dst = sk_SCT_new_null();
4145         if (*dst == NULL) {
4146             SSLerr(SSL_F_CT_MOVE_SCTS, ERR_R_MALLOC_FAILURE);
4147             goto err;
4148         }
4149     }
4150
4151     while ((sct = sk_SCT_pop(src)) != NULL) {
4152         if (SCT_set_source(sct, origin) != 1)
4153             goto err;
4154
4155         if (sk_SCT_push(*dst, sct) <= 0)
4156             goto err;
4157         scts_moved += 1;
4158     }
4159
4160     return scts_moved;
4161  err:
4162     if (sct != NULL)
4163         sk_SCT_push(src, sct);  /* Put the SCT back */
4164     return -1;
4165 }
4166
4167 /*
4168  * Look for data collected during ServerHello and parse if found.
4169  * Returns the number of SCTs extracted.
4170  */
4171 static int ct_extract_tls_extension_scts(SSL *s)
4172 {
4173     int scts_extracted = 0;
4174
4175     if (s->ext.scts != NULL) {
4176         const unsigned char *p = s->ext.scts;
4177         STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len);
4178
4179         scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION);
4180
4181         SCT_LIST_free(scts);
4182     }
4183
4184     return scts_extracted;
4185 }
4186
4187 /*
4188  * Checks for an OCSP response and then attempts to extract any SCTs found if it
4189  * contains an SCT X509 extension. They will be stored in |s->scts|.
4190  * Returns:
4191  * - The number of SCTs extracted, assuming an OCSP response exists.
4192  * - 0 if no OCSP response exists or it contains no SCTs.
4193  * - A negative integer if an error occurs.
4194  */
4195 static int ct_extract_ocsp_response_scts(SSL *s)
4196 {
4197 # ifndef OPENSSL_NO_OCSP
4198     int scts_extracted = 0;
4199     const unsigned char *p;
4200     OCSP_BASICRESP *br = NULL;
4201     OCSP_RESPONSE *rsp = NULL;
4202     STACK_OF(SCT) *scts = NULL;
4203     int i;
4204
4205     if (s->ext.ocsp.resp == NULL || s->ext.ocsp.resp_len == 0)
4206         goto err;
4207
4208     p = s->ext.ocsp.resp;
4209     rsp = d2i_OCSP_RESPONSE(NULL, &p, (int)s->ext.ocsp.resp_len);
4210     if (rsp == NULL)
4211         goto err;
4212
4213     br = OCSP_response_get1_basic(rsp);
4214     if (br == NULL)
4215         goto err;
4216
4217     for (i = 0; i < OCSP_resp_count(br); ++i) {
4218         OCSP_SINGLERESP *single = OCSP_resp_get0(br, i);
4219
4220         if (single == NULL)
4221             continue;
4222
4223         scts =
4224             OCSP_SINGLERESP_get1_ext_d2i(single, NID_ct_cert_scts, NULL, NULL);
4225         scts_extracted =
4226             ct_move_scts(&s->scts, scts, SCT_SOURCE_OCSP_STAPLED_RESPONSE);
4227         if (scts_extracted < 0)
4228             goto err;
4229     }
4230  err:
4231     SCT_LIST_free(scts);
4232     OCSP_BASICRESP_free(br);
4233     OCSP_RESPONSE_free(rsp);
4234     return scts_extracted;
4235 # else
4236     /* Behave as if no OCSP response exists */
4237     return 0;
4238 # endif
4239 }
4240
4241 /*
4242  * Attempts to extract SCTs from the peer certificate.
4243  * Return the number of SCTs extracted, or a negative integer if an error
4244  * occurs.
4245  */
4246 static int ct_extract_x509v3_extension_scts(SSL *s)
4247 {
4248     int scts_extracted = 0;
4249     X509 *cert = s->session != NULL ? s->session->peer : NULL;
4250
4251     if (cert != NULL) {
4252         STACK_OF(SCT) *scts =
4253             X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL);
4254
4255         scts_extracted =
4256             ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION);
4257
4258         SCT_LIST_free(scts);
4259     }
4260
4261     return scts_extracted;
4262 }
4263
4264 /*
4265  * Attempts to find all received SCTs by checking TLS extensions, the OCSP
4266  * response (if it exists) and X509v3 extensions in the certificate.
4267  * Returns NULL if an error occurs.
4268  */
4269 const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s)
4270 {
4271     if (!s->scts_parsed) {
4272         if (ct_extract_tls_extension_scts(s) < 0 ||
4273             ct_extract_ocsp_response_scts(s) < 0 ||
4274             ct_extract_x509v3_extension_scts(s) < 0)
4275             goto err;
4276
4277         s->scts_parsed = 1;
4278     }
4279     return s->scts;
4280  err:
4281     return NULL;
4282 }
4283
4284 static int ct_permissive(const CT_POLICY_EVAL_CTX * ctx,
4285                          const STACK_OF(SCT) *scts, void *unused_arg)
4286 {
4287     return 1;
4288 }
4289
4290 static int ct_strict(const CT_POLICY_EVAL_CTX * ctx,
4291                      const STACK_OF(SCT) *scts, void *unused_arg)
4292 {
4293     int count = scts != NULL ? sk_SCT_num(scts) : 0;
4294     int i;
4295
4296     for (i = 0; i < count; ++i) {
4297         SCT *sct = sk_SCT_value(scts, i);
4298         int status = SCT_get_validation_status(sct);
4299
4300         if (status == SCT_VALIDATION_STATUS_VALID)
4301             return 1;
4302     }
4303     SSLerr(SSL_F_CT_STRICT, SSL_R_NO_VALID_SCTS);
4304     return 0;
4305 }
4306
4307 int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
4308                                    void *arg)
4309 {
4310     /*
4311      * Since code exists that uses the custom extension handler for CT, look
4312      * for this and throw an error if they have already registered to use CT.
4313      */
4314     if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
4315                                                           TLSEXT_TYPE_signed_certificate_timestamp))
4316     {
4317         SSLerr(SSL_F_SSL_SET_CT_VALIDATION_CALLBACK,
4318                SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
4319         return 0;
4320     }
4321
4322     if (callback != NULL) {
4323         /*
4324          * If we are validating CT, then we MUST accept SCTs served via OCSP
4325          */
4326         if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
4327             return 0;
4328     }
4329
4330     s->ct_validation_callback = callback;
4331     s->ct_validation_callback_arg = arg;
4332
4333     return 1;
4334 }
4335
4336 int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
4337                                        ssl_ct_validation_cb callback, void *arg)
4338 {
4339     /*
4340      * Since code exists that uses the custom extension handler for CT, look for
4341      * this and throw an error if they have already registered to use CT.
4342      */
4343     if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx,
4344                                                           TLSEXT_TYPE_signed_certificate_timestamp))
4345     {
4346         SSLerr(SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK,
4347                SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
4348         return 0;
4349     }
4350
4351     ctx->ct_validation_callback = callback;
4352     ctx->ct_validation_callback_arg = arg;
4353     return 1;
4354 }
4355
4356 int SSL_ct_is_enabled(const SSL *s)
4357 {
4358     return s->ct_validation_callback != NULL;
4359 }
4360
4361 int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx)
4362 {
4363     return ctx->ct_validation_callback != NULL;
4364 }
4365
4366 int ssl_validate_ct(SSL *s)
4367 {
4368     int ret = 0;
4369     X509 *cert = s->session != NULL ? s->session->peer : NULL;
4370     X509 *issuer;
4371     SSL_DANE *dane = &s->dane;
4372     CT_POLICY_EVAL_CTX *ctx = NULL;
4373     const STACK_OF(SCT) *scts;
4374
4375     /*
4376      * If no callback is set, the peer is anonymous, or its chain is invalid,
4377      * skip SCT validation - just return success.  Applications that continue
4378      * handshakes without certificates, with unverified chains, or pinned leaf
4379      * certificates are outside the scope of the WebPKI and CT.
4380      *
4381      * The above exclusions notwithstanding the vast majority of peers will
4382      * have rather ordinary certificate chains validated by typical
4383      * applications that perform certificate verification and therefore will
4384      * process SCTs when enabled.
4385      */
4386     if (s->ct_validation_callback == NULL || cert == NULL ||
4387         s->verify_result != X509_V_OK ||
4388         s->verified_chain == NULL || sk_X509_num(s->verified_chain) <= 1)
4389         return 1;
4390
4391     /*
4392      * CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3)
4393      * trust-anchors.  See https://tools.ietf.org/html/rfc7671#section-4.2
4394      */
4395     if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) {
4396         switch (dane->mtlsa->usage) {
4397         case DANETLS_USAGE_DANE_TA:
4398         case DANETLS_USAGE_DANE_EE:
4399             return 1;
4400         }
4401     }
4402
4403     ctx = CT_POLICY_EVAL_CTX_new();
4404     if (ctx == NULL) {
4405         SSLerr(SSL_F_SSL_VALIDATE_CT, ERR_R_MALLOC_FAILURE);
4406         goto end;
4407     }
4408
4409     issuer = sk_X509_value(s->verified_chain, 1);
4410     CT_POLICY_EVAL_CTX_set1_cert(ctx, cert);
4411     CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer);
4412     CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx, s->ctx->ctlog_store);
4413     CT_POLICY_EVAL_CTX_set_time(ctx, SSL_SESSION_get_time(SSL_get0_session(s)));
4414
4415     scts = SSL_get0_peer_scts(s);
4416
4417     /*
4418      * This function returns success (> 0) only when all the SCTs are valid, 0
4419      * when some are invalid, and < 0 on various internal errors (out of
4420      * memory, etc.).  Having some, or even all, invalid SCTs is not sufficient
4421      * reason to abort the handshake, that decision is up to the callback.
4422      * Therefore, we error out only in the unexpected case that the return
4423      * value is negative.
4424      *
4425      * XXX: One might well argue that the return value of this function is an
4426      * unfortunate design choice.  Its job is only to determine the validation
4427      * status of each of the provided SCTs.  So long as it correctly separates
4428      * the wheat from the chaff it should return success.  Failure in this case
4429      * ought to correspond to an inability to carry out its duties.
4430      */
4431     if (SCT_LIST_validate(scts, ctx) < 0) {
4432         SSLerr(SSL_F_SSL_VALIDATE_CT, SSL_R_SCT_VERIFICATION_FAILED);
4433         goto end;
4434     }
4435
4436     ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg);
4437     if (ret < 0)
4438         ret = 0;                /* This function returns 0 on failure */
4439
4440  end:
4441     CT_POLICY_EVAL_CTX_free(ctx);
4442     /*
4443      * With SSL_VERIFY_NONE the session may be cached and re-used despite a
4444      * failure return code here.  Also the application may wish the complete
4445      * the handshake, and then disconnect cleanly at a higher layer, after
4446      * checking the verification status of the completed connection.
4447      *
4448      * We therefore force a certificate verification failure which will be
4449      * visible via SSL_get_verify_result() and cached as part of any resumed
4450      * session.
4451      *
4452      * Note: the permissive callback is for information gathering only, always
4453      * returns success, and does not affect verification status.  Only the
4454      * strict callback or a custom application-specified callback can trigger
4455      * connection failure or record a verification error.
4456      */
4457     if (ret <= 0)
4458         s->verify_result = X509_V_ERR_NO_VALID_SCTS;
4459     return ret;
4460 }
4461
4462 int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode)
4463 {
4464     switch (validation_mode) {
4465     default:
4466         SSLerr(SSL_F_SSL_CTX_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
4467         return 0;
4468     case SSL_CT_VALIDATION_PERMISSIVE:
4469         return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL);
4470     case SSL_CT_VALIDATION_STRICT:
4471         return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL);
4472     }
4473 }
4474
4475 int SSL_enable_ct(SSL *s, int validation_mode)
4476 {
4477     switch (validation_mode) {
4478     default:
4479         SSLerr(SSL_F_SSL_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
4480         return 0;
4481     case SSL_CT_VALIDATION_PERMISSIVE:
4482         return SSL_set_ct_validation_callback(s, ct_permissive, NULL);
4483     case SSL_CT_VALIDATION_STRICT:
4484         return SSL_set_ct_validation_callback(s, ct_strict, NULL);
4485     }
4486 }
4487
4488 int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx)
4489 {
4490     return CTLOG_STORE_load_default_file(ctx->ctlog_store);
4491 }
4492
4493 int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path)
4494 {
4495     return CTLOG_STORE_load_file(ctx->ctlog_store, path);
4496 }
4497
4498 void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE * logs)
4499 {
4500     CTLOG_STORE_free(ctx->ctlog_store);
4501     ctx->ctlog_store = logs;
4502 }
4503
4504 const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx)
4505 {
4506     return ctx->ctlog_store;
4507 }
4508
4509 #endif  /* OPENSSL_NO_CT */
4510
4511 void SSL_CTX_set_early_cb(SSL_CTX *c, SSL_early_cb_fn cb, void *arg)
4512 {
4513     c->early_cb = cb;
4514     c->early_cb_arg = arg;
4515 }
4516
4517 int SSL_early_isv2(SSL *s)
4518 {
4519     if (s->clienthello == NULL)
4520         return 0;
4521     return s->clienthello->isv2;
4522 }
4523
4524 unsigned int SSL_early_get0_legacy_version(SSL *s)
4525 {
4526     if (s->clienthello == NULL)
4527         return 0;
4528     return s->clienthello->legacy_version;
4529 }
4530
4531 size_t SSL_early_get0_random(SSL *s, const unsigned char **out)
4532 {
4533     if (s->clienthello == NULL)
4534         return 0;
4535     if (out != NULL)
4536         *out = s->clienthello->random;
4537     return SSL3_RANDOM_SIZE;
4538 }
4539
4540 size_t SSL_early_get0_session_id(SSL *s, const unsigned char **out)
4541 {
4542     if (s->clienthello == NULL)
4543         return 0;
4544     if (out != NULL)
4545         *out = s->clienthello->session_id;
4546     return s->clienthello->session_id_len;
4547 }
4548
4549 size_t SSL_early_get0_ciphers(SSL *s, const unsigned char **out)
4550 {
4551     if (s->clienthello == NULL)
4552         return 0;
4553     if (out != NULL)
4554         *out = PACKET_data(&s->clienthello->ciphersuites);
4555     return PACKET_remaining(&s->clienthello->ciphersuites);
4556 }
4557
4558 size_t SSL_early_get0_compression_methods(SSL *s, const unsigned char **out)
4559 {
4560     if (s->clienthello == NULL)
4561         return 0;
4562     if (out != NULL)
4563         *out = s->clienthello->compressions;
4564     return s->clienthello->compressions_len;
4565 }
4566
4567 int SSL_early_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
4568                        size_t *outlen)
4569 {
4570     size_t i;
4571     RAW_EXTENSION *r;
4572
4573     if (s->clienthello == NULL)
4574         return 0;
4575     for (i = 0; i < s->clienthello->pre_proc_exts_len; ++i) {
4576         r = s->clienthello->pre_proc_exts + i;
4577         if (r->present && r->type == type) {
4578             if (out != NULL)
4579                 *out = PACKET_data(&r->data);
4580             if (outlen != NULL)
4581                 *outlen = PACKET_remaining(&r->data);
4582             return 1;
4583         }
4584     }
4585     return 0;
4586 }
4587
4588 void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb)
4589 {
4590     ctx->keylog_callback = cb;
4591 }
4592
4593 SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
4594 {
4595     return ctx->keylog_callback;
4596 }
4597
4598 static int nss_keylog_int(const char *prefix,
4599                           SSL *ssl,
4600                           const uint8_t *parameter_1,
4601                           size_t parameter_1_len,
4602                           const uint8_t *parameter_2,
4603                           size_t parameter_2_len)
4604 {
4605     char *out = NULL;
4606     char *cursor = NULL;
4607     size_t out_len = 0;
4608     size_t i;
4609     size_t prefix_len;
4610
4611     if (ssl->ctx->keylog_callback == NULL) return 1;
4612
4613     /*
4614      * Our output buffer will contain the following strings, rendered with
4615      * space characters in between, terminated by a NULL character: first the
4616      * prefix, then the first parameter, then the second parameter. The
4617      * meaning of each parameter depends on the specific key material being
4618      * logged. Note that the first and second parameters are encoded in
4619      * hexadecimal, so we need a buffer that is twice their lengths.
4620      */
4621     prefix_len = strlen(prefix);
4622     out_len = prefix_len + (2*parameter_1_len) + (2*parameter_2_len) + 3;
4623     if ((out = cursor = OPENSSL_malloc(out_len)) == NULL) {
4624         SSLerr(SSL_F_NSS_KEYLOG_INT, ERR_R_MALLOC_FAILURE);
4625         return 0;
4626     }
4627
4628     strcpy(cursor, prefix);
4629     cursor += prefix_len;
4630     *cursor++ = ' ';
4631
4632     for (i = 0; i < parameter_1_len; i++) {
4633         sprintf(cursor, "%02x", parameter_1[i]);
4634         cursor += 2;
4635     }
4636     *cursor++ = ' ';
4637
4638     for (i = 0; i < parameter_2_len; i++) {
4639         sprintf(cursor, "%02x", parameter_2[i]);