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