Fix compilation with no-nextprotoneg.
[openssl.git] / ssl / ssl_lib.c
1 /*! \file ssl/ssl_lib.c
2  *  \brief Version independent SSL functions.
3  */
4 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
5  * All rights reserved.
6  *
7  * This package is an SSL implementation written
8  * by Eric Young (eay@cryptsoft.com).
9  * The implementation was written so as to conform with Netscapes SSL.
10  * 
11  * This library is free for commercial and non-commercial use as long as
12  * the following conditions are aheared to.  The following conditions
13  * apply to all code found in this distribution, be it the RC4, RSA,
14  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
15  * included with this distribution is covered by the same copyright terms
16  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
17  * 
18  * Copyright remains Eric Young's, and as such any Copyright notices in
19  * the code are not to be removed.
20  * If this package is used in a product, Eric Young should be given attribution
21  * as the author of the parts of the library used.
22  * This can be in the form of a textual message at program startup or
23  * in documentation (online or textual) provided with the package.
24  * 
25  * Redistribution and use in source and binary forms, with or without
26  * modification, are permitted provided that the following conditions
27  * are met:
28  * 1. Redistributions of source code must retain the copyright
29  *    notice, this list of conditions and the following disclaimer.
30  * 2. Redistributions in binary form must reproduce the above copyright
31  *    notice, this list of conditions and the following disclaimer in the
32  *    documentation and/or other materials provided with the distribution.
33  * 3. All advertising materials mentioning features or use of this software
34  *    must display the following acknowledgement:
35  *    "This product includes cryptographic software written by
36  *     Eric Young (eay@cryptsoft.com)"
37  *    The word 'cryptographic' can be left out if the rouines from the library
38  *    being used are not cryptographic related :-).
39  * 4. If you include any Windows specific code (or a derivative thereof) from 
40  *    the apps directory (application code) you must include an acknowledgement:
41  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
42  * 
43  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
44  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
45  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
47  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
49  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
51  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53  * SUCH DAMAGE.
54  * 
55  * The licence and distribution terms for any publically available version or
56  * derivative of this code cannot be changed.  i.e. this code cannot simply be
57  * copied and put under another distribution licence
58  * [including the GNU Public Licence.]
59  */
60 /* ====================================================================
61  * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
62  *
63  * Redistribution and use in source and binary forms, with or without
64  * modification, are permitted provided that the following conditions
65  * are met:
66  *
67  * 1. Redistributions of source code must retain the above copyright
68  *    notice, this list of conditions and the following disclaimer. 
69  *
70  * 2. Redistributions in binary form must reproduce the above copyright
71  *    notice, this list of conditions and the following disclaimer in
72  *    the documentation and/or other materials provided with the
73  *    distribution.
74  *
75  * 3. All advertising materials mentioning features or use of this
76  *    software must display the following acknowledgment:
77  *    "This product includes software developed by the OpenSSL Project
78  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
79  *
80  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
81  *    endorse or promote products derived from this software without
82  *    prior written permission. For written permission, please contact
83  *    openssl-core@openssl.org.
84  *
85  * 5. Products derived from this software may not be called "OpenSSL"
86  *    nor may "OpenSSL" appear in their names without prior written
87  *    permission of the OpenSSL Project.
88  *
89  * 6. Redistributions of any form whatsoever must retain the following
90  *    acknowledgment:
91  *    "This product includes software developed by the OpenSSL Project
92  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
93  *
94  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
95  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
96  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
97  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
98  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
99  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
100  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
101  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
102  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
103  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
104  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
105  * OF THE POSSIBILITY OF SUCH DAMAGE.
106  * ====================================================================
107  *
108  * This product includes cryptographic software written by Eric Young
109  * (eay@cryptsoft.com).  This product includes software written by Tim
110  * Hudson (tjh@cryptsoft.com).
111  *
112  */
113 /* ====================================================================
114  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
115  * ECC cipher suite support in OpenSSL originally developed by 
116  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
117  */
118 /* ====================================================================
119  * Copyright 2005 Nokia. All rights reserved.
120  *
121  * The portions of the attached software ("Contribution") is developed by
122  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
123  * license.
124  *
125  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
126  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
127  * support (see RFC 4279) to OpenSSL.
128  *
129  * No patent licenses or other rights except those expressly stated in
130  * the OpenSSL open source license shall be deemed granted or received
131  * expressly, by implication, estoppel, or otherwise.
132  *
133  * No assurances are provided by Nokia that the Contribution does not
134  * infringe the patent or other intellectual property rights of any third
135  * party or that the license provides you with all the necessary rights
136  * to make use of the Contribution.
137  *
138  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
139  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
140  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
141  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
142  * OTHERWISE.
143  */
144
145 #ifdef REF_CHECK
146 #  include <assert.h>
147 #endif
148 #include <stdio.h>
149 #include "ssl_locl.h"
150 #include "kssl_lcl.h"
151 #include <openssl/objects.h>
152 #include <openssl/lhash.h>
153 #include <openssl/x509v3.h>
154 #include <openssl/rand.h>
155 #include <openssl/ocsp.h>
156 #ifndef OPENSSL_NO_DH
157 #include <openssl/dh.h>
158 #endif
159 #ifndef OPENSSL_NO_ENGINE
160 #include <openssl/engine.h>
161 #endif
162
163 const char *SSL_version_str=OPENSSL_VERSION_TEXT;
164
165 SSL3_ENC_METHOD ssl3_undef_enc_method={
166         /* evil casts, but these functions are only called if there's a library bug */
167         (int (*)(SSL *,int))ssl_undefined_function,
168         (int (*)(SSL *, unsigned char *, int))ssl_undefined_function,
169         ssl_undefined_function,
170         (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_function,
171         (int (*)(SSL*, int))ssl_undefined_function,
172         (int (*)(SSL *,  const char*, int, unsigned char *))ssl_undefined_function,
173         0,      /* finish_mac_length */
174         (int (*)(SSL *, int, unsigned char *))ssl_undefined_function,
175         NULL,   /* client_finished_label */
176         0,      /* client_finished_label_len */
177         NULL,   /* server_finished_label */
178         0,      /* server_finished_label_len */
179         (int (*)(int))ssl_undefined_function,
180         (int (*)(SSL *, unsigned char *, size_t, const char *,
181                  size_t, const unsigned char *, size_t,
182                  int use_context)) ssl_undefined_function,
183         };
184
185 int SSL_clear(SSL *s)
186         {
187
188         if (s->method == NULL)
189                 {
190                 SSLerr(SSL_F_SSL_CLEAR,SSL_R_NO_METHOD_SPECIFIED);
191                 return(0);
192                 }
193
194         if (ssl_clear_bad_session(s))
195                 {
196                 SSL_SESSION_free(s->session);
197                 s->session=NULL;
198                 }
199
200         s->error=0;
201         s->hit=0;
202         s->shutdown=0;
203
204 #if 0 /* Disabled since version 1.10 of this file (early return not
205        * needed because SSL_clear is not called when doing renegotiation) */
206         /* This is set if we are doing dynamic renegotiation so keep
207          * the old cipher.  It is sort of a SSL_clear_lite :-) */
208         if (s->renegotiate) return(1);
209 #else
210         if (s->renegotiate)
211                 {
212                 SSLerr(SSL_F_SSL_CLEAR,ERR_R_INTERNAL_ERROR);
213                 return 0;
214                 }
215 #endif
216
217         s->type=0;
218
219         s->state=SSL_ST_BEFORE|((s->server)?SSL_ST_ACCEPT:SSL_ST_CONNECT);
220
221         s->version=s->method->version;
222         s->client_version=s->version;
223         s->rwstate=SSL_NOTHING;
224         s->rstate=SSL_ST_READ_HEADER;
225 #if 0
226         s->read_ahead=s->ctx->read_ahead;
227 #endif
228
229         if (s->init_buf != NULL)
230                 {
231                 BUF_MEM_free(s->init_buf);
232                 s->init_buf=NULL;
233                 }
234
235         ssl_clear_cipher_ctx(s);
236         ssl_clear_hash_ctx(&s->read_hash);
237         ssl_clear_hash_ctx(&s->write_hash);
238
239         s->first_packet=0;
240
241 #if 1
242         /* Check to see if we were changed into a different method, if
243          * so, revert back if we are not doing session-id reuse. */
244         if (!s->in_handshake && (s->session == NULL) && (s->method != s->ctx->method))
245                 {
246                 s->method->ssl_free(s);
247                 s->method=s->ctx->method;
248                 if (!s->method->ssl_new(s))
249                         return(0);
250                 }
251         else
252 #endif
253                 s->method->ssl_clear(s);
254         return(1);
255         }
256
257 /** Used to change an SSL_CTXs default SSL method type */
258 int SSL_CTX_set_ssl_version(SSL_CTX *ctx,const SSL_METHOD *meth)
259         {
260         STACK_OF(SSL_CIPHER) *sk;
261
262         ctx->method=meth;
263
264         sk=ssl_create_cipher_list(ctx->method,&(ctx->cipher_list),
265                 &(ctx->cipher_list_by_id),
266                 meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST, ctx->cert);
267         if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0))
268                 {
269                 SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION,SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
270                 return(0);
271                 }
272         return(1);
273         }
274
275 SSL *SSL_new(SSL_CTX *ctx)
276         {
277         SSL *s;
278
279         if (ctx == NULL)
280                 {
281                 SSLerr(SSL_F_SSL_NEW,SSL_R_NULL_SSL_CTX);
282                 return(NULL);
283                 }
284         if (ctx->method == NULL)
285                 {
286                 SSLerr(SSL_F_SSL_NEW,SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
287                 return(NULL);
288                 }
289
290         s=(SSL *)OPENSSL_malloc(sizeof(SSL));
291         if (s == NULL) goto err;
292         memset(s,0,sizeof(SSL));
293
294 #ifndef OPENSSL_NO_KRB5
295         s->kssl_ctx = kssl_ctx_new();
296 #endif  /* OPENSSL_NO_KRB5 */
297
298         s->options=ctx->options;
299         s->mode=ctx->mode;
300         s->max_cert_list=ctx->max_cert_list;
301
302         if (ctx->cert != NULL)
303                 {
304                 /* Earlier library versions used to copy the pointer to
305                  * the CERT, not its contents; only when setting new
306                  * parameters for the per-SSL copy, ssl_cert_new would be
307                  * called (and the direct reference to the per-SSL_CTX
308                  * settings would be lost, but those still were indirectly
309                  * accessed for various purposes, and for that reason they
310                  * used to be known as s->ctx->default_cert).
311                  * Now we don't look at the SSL_CTX's CERT after having
312                  * duplicated it once. */
313
314                 s->cert = ssl_cert_dup(ctx->cert);
315                 if (s->cert == NULL)
316                         goto err;
317                 }
318         else
319                 s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */
320
321         s->read_ahead=ctx->read_ahead;
322         s->msg_callback=ctx->msg_callback;
323         s->msg_callback_arg=ctx->msg_callback_arg;
324         s->verify_mode=ctx->verify_mode;
325 #if 0
326         s->verify_depth=ctx->verify_depth;
327 #endif
328         s->sid_ctx_length=ctx->sid_ctx_length;
329         OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx);
330         memcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx));
331         s->verify_callback=ctx->default_verify_callback;
332         s->generate_session_id=ctx->generate_session_id;
333
334         s->param = X509_VERIFY_PARAM_new();
335         if (!s->param)
336                 goto err;
337         X509_VERIFY_PARAM_inherit(s->param, ctx->param);
338 #if 0
339         s->purpose = ctx->purpose;
340         s->trust = ctx->trust;
341 #endif
342         s->quiet_shutdown=ctx->quiet_shutdown;
343         s->max_send_fragment = ctx->max_send_fragment;
344
345         CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
346         s->ctx=ctx;
347 #ifndef OPENSSL_NO_TLSEXT
348         s->tlsext_debug_cb = 0;
349         s->tlsext_debug_arg = NULL;
350         s->tlsext_ticket_expected = 0;
351         s->tlsext_status_type = -1;
352         s->tlsext_status_expected = 0;
353         s->tlsext_ocsp_ids = NULL;
354         s->tlsext_ocsp_exts = NULL;
355         s->tlsext_ocsp_resp = NULL;
356         s->tlsext_ocsp_resplen = -1;
357         CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
358         s->initial_ctx=ctx;
359 #ifndef OPENSSL_NO_EC
360         if (ctx->tlsext_ecpointformatlist)
361                 {
362                 s->tlsext_ecpointformatlist =
363                         BUF_memdup(ctx->tlsext_ecpointformatlist,
364                                         ctx->tlsext_ecpointformatlist_length);
365                 if (!s->tlsext_ecpointformatlist)
366                         goto err;
367                 s->tlsext_ecpointformatlist_length =
368                                         ctx->tlsext_ecpointformatlist_length;
369                 }
370         if (ctx->tlsext_ellipticcurvelist)
371                 {
372                 s->tlsext_ellipticcurvelist =
373                         BUF_memdup(ctx->tlsext_ellipticcurvelist,
374                                         ctx->tlsext_ellipticcurvelist_length);
375                 if (!s->tlsext_ellipticcurvelist)
376                         goto err;
377                 s->tlsext_ellipticcurvelist_length = 
378                                         ctx->tlsext_ellipticcurvelist_length;
379                 }
380 #endif
381 # ifndef OPENSSL_NO_NEXTPROTONEG
382         s->next_proto_negotiated = NULL;
383 # endif
384
385         if (s->ctx->alpn_client_proto_list)
386                 {
387                 s->alpn_client_proto_list =
388                         OPENSSL_malloc(s->ctx->alpn_client_proto_list_len);
389                 if (s->alpn_client_proto_list == NULL)
390                         goto err;
391                 memcpy(s->alpn_client_proto_list, s->ctx->alpn_client_proto_list,
392                        s->ctx->alpn_client_proto_list_len);
393                 s->alpn_client_proto_list_len = s->ctx->alpn_client_proto_list_len;
394                 }
395 #endif
396
397         s->verify_result=X509_V_OK;
398
399         s->method=ctx->method;
400
401         if (!s->method->ssl_new(s))
402                 goto err;
403
404         s->references=1;
405         s->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1;
406
407         SSL_clear(s);
408
409         CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
410
411 #ifndef OPENSSL_NO_PSK
412         s->psk_client_callback=ctx->psk_client_callback;
413         s->psk_server_callback=ctx->psk_server_callback;
414 #endif
415
416         return(s);
417 err:
418         if (s != NULL)
419                 {
420                 if (s->cert != NULL)
421                         ssl_cert_free(s->cert);
422                 if (s->ctx != NULL)
423                         SSL_CTX_free(s->ctx); /* decrement reference count */
424                 OPENSSL_free(s);
425                 }
426         SSLerr(SSL_F_SSL_NEW,ERR_R_MALLOC_FAILURE);
427         return(NULL);
428         }
429
430 int SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx,
431                                    unsigned int sid_ctx_len)
432     {
433     if(sid_ctx_len > sizeof ctx->sid_ctx)
434         {
435         SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT,SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
436         return 0;
437         }
438     ctx->sid_ctx_length=sid_ctx_len;
439     memcpy(ctx->sid_ctx,sid_ctx,sid_ctx_len);
440
441     return 1;
442     }
443
444 int SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx,
445                                unsigned int sid_ctx_len)
446     {
447     if(sid_ctx_len > SSL_MAX_SID_CTX_LENGTH)
448         {
449         SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT,SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
450         return 0;
451         }
452     ssl->sid_ctx_length=sid_ctx_len;
453     memcpy(ssl->sid_ctx,sid_ctx,sid_ctx_len);
454
455     return 1;
456     }
457
458 int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
459         {
460         CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
461         ctx->generate_session_id = cb;
462         CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
463         return 1;
464         }
465
466 int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
467         {
468         CRYPTO_w_lock(CRYPTO_LOCK_SSL);
469         ssl->generate_session_id = cb;
470         CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
471         return 1;
472         }
473
474 int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
475                                 unsigned int id_len)
476         {
477         /* A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how
478          * we can "construct" a session to give us the desired check - ie. to
479          * find if there's a session in the hash table that would conflict with
480          * any new session built out of this id/id_len and the ssl_version in
481          * use by this SSL. */
482         SSL_SESSION r, *p;
483
484         if(id_len > sizeof r.session_id)
485                 return 0;
486
487         r.ssl_version = ssl->version;
488         r.session_id_length = id_len;
489         memcpy(r.session_id, id, id_len);
490         /* NB: SSLv2 always uses a fixed 16-byte session ID, so even if a
491          * callback is calling us to check the uniqueness of a shorter ID, it
492          * must be compared as a padded-out ID because that is what it will be
493          * converted to when the callback has finished choosing it. */
494         if((r.ssl_version == SSL2_VERSION) &&
495                         (id_len < SSL2_SSL_SESSION_ID_LENGTH))
496                 {
497                 memset(r.session_id + id_len, 0,
498                         SSL2_SSL_SESSION_ID_LENGTH - id_len);
499                 r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH;
500                 }
501
502         CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
503         p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r);
504         CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
505         return (p != NULL);
506         }
507
508 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
509         {
510         return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
511         }
512
513 int SSL_set_purpose(SSL *s, int purpose)
514         {
515         return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
516         }
517
518 int SSL_CTX_set_trust(SSL_CTX *s, int trust)
519         {
520         return X509_VERIFY_PARAM_set_trust(s->param, trust);
521         }
522
523 int SSL_set_trust(SSL *s, int trust)
524         {
525         return X509_VERIFY_PARAM_set_trust(s->param, trust);
526         }
527
528 int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
529         {
530         return X509_VERIFY_PARAM_set1(ctx->param, vpm);
531         }
532
533 int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
534         {
535         return X509_VERIFY_PARAM_set1(ssl->param, vpm);
536         }
537
538 void SSL_certs_clear(SSL *s)
539         {
540         ssl_cert_clear_certs(s->cert);
541         }
542
543 void SSL_free(SSL *s)
544         {
545         int i;
546
547         if(s == NULL)
548             return;
549
550         i=CRYPTO_add(&s->references,-1,CRYPTO_LOCK_SSL);
551 #ifdef REF_PRINT
552         REF_PRINT("SSL",s);
553 #endif
554         if (i > 0) return;
555 #ifdef REF_CHECK
556         if (i < 0)
557                 {
558                 fprintf(stderr,"SSL_free, bad reference count\n");
559                 abort(); /* ok */
560                 }
561 #endif
562
563         if (s->param)
564                 X509_VERIFY_PARAM_free(s->param);
565
566         CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
567
568         if (s->bbio != NULL)
569                 {
570                 /* If the buffering BIO is in place, pop it off */
571                 if (s->bbio == s->wbio)
572                         {
573                         s->wbio=BIO_pop(s->wbio);
574                         }
575                 BIO_free(s->bbio);
576                 s->bbio=NULL;
577                 }
578         if (s->rbio != NULL)
579                 BIO_free_all(s->rbio);
580         if ((s->wbio != NULL) && (s->wbio != s->rbio))
581                 BIO_free_all(s->wbio);
582
583         if (s->init_buf != NULL) BUF_MEM_free(s->init_buf);
584
585         /* add extra stuff */
586         if (s->cipher_list != NULL) sk_SSL_CIPHER_free(s->cipher_list);
587         if (s->cipher_list_by_id != NULL) sk_SSL_CIPHER_free(s->cipher_list_by_id);
588
589         /* Make the next call work :-) */
590         if (s->session != NULL)
591                 {
592                 ssl_clear_bad_session(s);
593                 SSL_SESSION_free(s->session);
594                 }
595
596         ssl_clear_cipher_ctx(s);
597         ssl_clear_hash_ctx(&s->read_hash);
598         ssl_clear_hash_ctx(&s->write_hash);
599
600         if (s->cert != NULL) ssl_cert_free(s->cert);
601         /* Free up if allocated */
602
603 #ifndef OPENSSL_NO_TLSEXT
604         if (s->tlsext_hostname)
605                 OPENSSL_free(s->tlsext_hostname);
606         if (s->initial_ctx) SSL_CTX_free(s->initial_ctx);
607 #ifndef OPENSSL_NO_EC
608         if (s->tlsext_ecpointformatlist) OPENSSL_free(s->tlsext_ecpointformatlist);
609         if (s->tlsext_ellipticcurvelist) OPENSSL_free(s->tlsext_ellipticcurvelist);
610 #endif /* OPENSSL_NO_EC */
611         if (s->tlsext_opaque_prf_input) OPENSSL_free(s->tlsext_opaque_prf_input);
612         if (s->tlsext_ocsp_exts)
613                 sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
614                                                 X509_EXTENSION_free);
615         if (s->tlsext_ocsp_ids)
616                 sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free);
617         if (s->tlsext_ocsp_resp)
618                 OPENSSL_free(s->tlsext_ocsp_resp);
619         if (s->alpn_client_proto_list)
620                 OPENSSL_free(s->alpn_client_proto_list);
621 #endif
622
623         if (s->client_CA != NULL)
624                 sk_X509_NAME_pop_free(s->client_CA,X509_NAME_free);
625
626         if (s->method != NULL) s->method->ssl_free(s);
627
628         if (s->ctx) SSL_CTX_free(s->ctx);
629
630 #ifndef OPENSSL_NO_KRB5
631         if (s->kssl_ctx != NULL)
632                 kssl_ctx_free(s->kssl_ctx);
633 #endif  /* OPENSSL_NO_KRB5 */
634
635 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
636         if (s->next_proto_negotiated)
637                 OPENSSL_free(s->next_proto_negotiated);
638 #endif
639
640         if (s->srtp_profiles)
641             sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
642
643 #ifndef OPENSSL_NO_DANE
644         if (s->tlsa_record && s->tlsa_record!=(void *)-1)
645                 OPENSSL_free(s->tlsa_record);
646 #endif
647
648         OPENSSL_free(s);
649         }
650
651 void SSL_set_bio(SSL *s,BIO *rbio,BIO *wbio)
652         {
653         /* If the output buffering BIO is still in place, remove it
654          */
655         if (s->bbio != NULL)
656                 {
657                 if (s->wbio == s->bbio)
658                         {
659                         s->wbio=s->wbio->next_bio;
660                         s->bbio->next_bio=NULL;
661                         }
662                 }
663         if ((s->rbio != NULL) && (s->rbio != rbio))
664                 BIO_free_all(s->rbio);
665         if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio))
666                 BIO_free_all(s->wbio);
667         s->rbio=rbio;
668         s->wbio=wbio;
669         }
670
671 BIO *SSL_get_rbio(const SSL *s)
672         { return(s->rbio); }
673
674 BIO *SSL_get_wbio(const SSL *s)
675         { return(s->wbio); }
676
677 int SSL_get_fd(const SSL *s)
678         {
679         return(SSL_get_rfd(s));
680         }
681
682 int SSL_get_rfd(const SSL *s)
683         {
684         int ret= -1;
685         BIO *b,*r;
686
687         b=SSL_get_rbio(s);
688         r=BIO_find_type(b,BIO_TYPE_DESCRIPTOR);
689         if (r != NULL)
690                 BIO_get_fd(r,&ret);
691         return(ret);
692         }
693
694 int SSL_get_wfd(const SSL *s)
695         {
696         int ret= -1;
697         BIO *b,*r;
698
699         b=SSL_get_wbio(s);
700         r=BIO_find_type(b,BIO_TYPE_DESCRIPTOR);
701         if (r != NULL)
702                 BIO_get_fd(r,&ret);
703         return(ret);
704         }
705
706 #ifndef OPENSSL_NO_SOCK
707 int SSL_set_fd(SSL *s,int fd)
708         {
709         int ret=0;
710         BIO *bio=NULL;
711
712         bio=BIO_new(BIO_s_socket());
713
714         if (bio == NULL)
715                 {
716                 SSLerr(SSL_F_SSL_SET_FD,ERR_R_BUF_LIB);
717                 goto err;
718                 }
719         BIO_set_fd(bio,fd,BIO_NOCLOSE);
720         SSL_set_bio(s,bio,bio);
721         ret=1;
722 err:
723         return(ret);
724         }
725
726 int SSL_set_wfd(SSL *s,int fd)
727         {
728         int ret=0;
729         BIO *bio=NULL;
730
731         if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_SOCKET)
732                 || ((int)BIO_get_fd(s->rbio,NULL) != fd))
733                 {
734                 bio=BIO_new(BIO_s_socket());
735
736                 if (bio == NULL)
737                         { SSLerr(SSL_F_SSL_SET_WFD,ERR_R_BUF_LIB); goto err; }
738                 BIO_set_fd(bio,fd,BIO_NOCLOSE);
739                 SSL_set_bio(s,SSL_get_rbio(s),bio);
740                 }
741         else
742                 SSL_set_bio(s,SSL_get_rbio(s),SSL_get_rbio(s));
743         ret=1;
744 err:
745         return(ret);
746         }
747
748 int SSL_set_rfd(SSL *s,int fd)
749         {
750         int ret=0;
751         BIO *bio=NULL;
752
753         if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET)
754                 || ((int)BIO_get_fd(s->wbio,NULL) != fd))
755                 {
756                 bio=BIO_new(BIO_s_socket());
757
758                 if (bio == NULL)
759                         {
760                         SSLerr(SSL_F_SSL_SET_RFD,ERR_R_BUF_LIB);
761                         goto err;
762                         }
763                 BIO_set_fd(bio,fd,BIO_NOCLOSE);
764                 SSL_set_bio(s,bio,SSL_get_wbio(s));
765                 }
766         else
767                 SSL_set_bio(s,SSL_get_wbio(s),SSL_get_wbio(s));
768         ret=1;
769 err:
770         return(ret);
771         }
772 #endif
773
774
775 /* return length of latest Finished message we sent, copy to 'buf' */
776 size_t SSL_get_finished(const SSL *s, void *buf, size_t count)
777         {
778         size_t ret = 0;
779         
780         if (s->s3 != NULL)
781                 {
782                 ret = s->s3->tmp.finish_md_len;
783                 if (count > ret)
784                         count = ret;
785                 memcpy(buf, s->s3->tmp.finish_md, count);
786                 }
787         return ret;
788         }
789
790 /* return length of latest Finished message we expected, copy to 'buf' */
791 size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
792         {
793         size_t ret = 0;
794         
795         if (s->s3 != NULL)
796                 {
797                 ret = s->s3->tmp.peer_finish_md_len;
798                 if (count > ret)
799                         count = ret;
800                 memcpy(buf, s->s3->tmp.peer_finish_md, count);
801                 }
802         return ret;
803         }
804
805
806 int SSL_get_verify_mode(const SSL *s)
807         {
808         return(s->verify_mode);
809         }
810
811 int SSL_get_verify_depth(const SSL *s)
812         {
813         return X509_VERIFY_PARAM_get_depth(s->param);
814         }
815
816 int (*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *)
817         {
818         return(s->verify_callback);
819         }
820
821 int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
822         {
823         return(ctx->verify_mode);
824         }
825
826 int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
827         {
828         return X509_VERIFY_PARAM_get_depth(ctx->param);
829         }
830
831 int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *)
832         {
833         return(ctx->default_verify_callback);
834         }
835
836 void SSL_set_verify(SSL *s,int mode,
837                     int (*callback)(int ok,X509_STORE_CTX *ctx))
838         {
839         s->verify_mode=mode;
840         if (callback != NULL)
841                 s->verify_callback=callback;
842         }
843
844 void SSL_set_verify_depth(SSL *s,int depth)
845         {
846         X509_VERIFY_PARAM_set_depth(s->param, depth);
847         }
848
849 void SSL_set_read_ahead(SSL *s,int yes)
850         {
851         s->read_ahead=yes;
852         }
853
854 int SSL_get_read_ahead(const SSL *s)
855         {
856         return(s->read_ahead);
857         }
858
859 int SSL_pending(const SSL *s)
860         {
861         /* SSL_pending cannot work properly if read-ahead is enabled
862          * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)),
863          * and it is impossible to fix since SSL_pending cannot report
864          * errors that may be observed while scanning the new data.
865          * (Note that SSL_pending() is often used as a boolean value,
866          * so we'd better not return -1.)
867          */
868         return(s->method->ssl_pending(s));
869         }
870
871 X509 *SSL_get_peer_certificate(const SSL *s)
872         {
873         X509 *r;
874         
875         if ((s == NULL) || (s->session == NULL))
876                 r=NULL;
877         else
878                 r=s->session->peer;
879
880         if (r == NULL) return(r);
881
882         CRYPTO_add(&r->references,1,CRYPTO_LOCK_X509);
883
884         return(r);
885         }
886
887 STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
888         {
889         STACK_OF(X509) *r;
890         
891         if ((s == NULL) || (s->session == NULL) || (s->session->sess_cert == NULL))
892                 r=NULL;
893         else
894                 r=s->session->sess_cert->cert_chain;
895
896         /* If we are a client, cert_chain includes the peer's own
897          * certificate; if we are a server, it does not. */
898         
899         return(r);
900         }
901
902 /* Now in theory, since the calling process own 't' it should be safe to
903  * modify.  We need to be able to read f without being hassled */
904 void SSL_copy_session_id(SSL *t,const SSL *f)
905         {
906         CERT *tmp;
907
908         /* Do we need to to SSL locking? */
909         SSL_set_session(t,SSL_get_session(f));
910
911         /* what if we are setup as SSLv2 but want to talk SSLv3 or
912          * vice-versa */
913         if (t->method != f->method)
914                 {
915                 t->method->ssl_free(t); /* cleanup current */
916                 t->method=f->method;    /* change method */
917                 t->method->ssl_new(t);  /* setup new */
918                 }
919
920         tmp=t->cert;
921         if (f->cert != NULL)
922                 {
923                 CRYPTO_add(&f->cert->references,1,CRYPTO_LOCK_SSL_CERT);
924                 t->cert=f->cert;
925                 }
926         else
927                 t->cert=NULL;
928         if (tmp != NULL) ssl_cert_free(tmp);
929         SSL_set_session_id_context(t,f->sid_ctx,f->sid_ctx_length);
930         }
931
932 /* Fix this so it checks all the valid key/cert options */
933 int SSL_CTX_check_private_key(const SSL_CTX *ctx)
934         {
935         if (    (ctx == NULL) ||
936                 (ctx->cert == NULL) ||
937                 (ctx->cert->key->x509 == NULL))
938                 {
939                 SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED);
940                 return(0);
941                 }
942         if      (ctx->cert->key->privatekey == NULL)
943                 {
944                 SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,SSL_R_NO_PRIVATE_KEY_ASSIGNED);
945                 return(0);
946                 }
947         return(X509_check_private_key(ctx->cert->key->x509, ctx->cert->key->privatekey));
948         }
949
950 /* Fix this function so that it takes an optional type parameter */
951 int SSL_check_private_key(const SSL *ssl)
952         {
953         if (ssl == NULL)
954                 {
955                 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,ERR_R_PASSED_NULL_PARAMETER);
956                 return(0);
957                 }
958         if (ssl->cert == NULL)
959                 {
960                 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED);
961                 return 0;
962                 }
963         if (ssl->cert->key->x509 == NULL)
964                 {
965                 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED);
966                 return(0);
967                 }
968         if (ssl->cert->key->privatekey == NULL)
969                 {
970                 SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_PRIVATE_KEY_ASSIGNED);
971                 return(0);
972                 }
973         return(X509_check_private_key(ssl->cert->key->x509,
974                 ssl->cert->key->privatekey));
975         }
976
977 int SSL_accept(SSL *s)
978         {
979         if (s->handshake_func == 0)
980                 /* Not properly initialized yet */
981                 SSL_set_accept_state(s);
982
983         return(s->method->ssl_accept(s));
984         }
985
986 int SSL_connect(SSL *s)
987         {
988         if (s->handshake_func == 0)
989                 /* Not properly initialized yet */
990                 SSL_set_connect_state(s);
991
992         return(s->method->ssl_connect(s));
993         }
994
995 long SSL_get_default_timeout(const SSL *s)
996         {
997         return(s->method->get_timeout());
998         }
999
1000 int SSL_read(SSL *s,void *buf,int num)
1001         {
1002         if (s->handshake_func == 0)
1003                 {
1004                 SSLerr(SSL_F_SSL_READ, SSL_R_UNINITIALIZED);
1005                 return -1;
1006                 }
1007
1008         if (s->shutdown & SSL_RECEIVED_SHUTDOWN)
1009                 {
1010                 s->rwstate=SSL_NOTHING;
1011                 return(0);
1012                 }
1013         return(s->method->ssl_read(s,buf,num));
1014         }
1015
1016 int SSL_peek(SSL *s,void *buf,int num)
1017         {
1018         if (s->handshake_func == 0)
1019                 {
1020                 SSLerr(SSL_F_SSL_PEEK, SSL_R_UNINITIALIZED);
1021                 return -1;
1022                 }
1023
1024         if (s->shutdown & SSL_RECEIVED_SHUTDOWN)
1025                 {
1026                 return(0);
1027                 }
1028         return(s->method->ssl_peek(s,buf,num));
1029         }
1030
1031 int SSL_write(SSL *s,const void *buf,int num)
1032         {
1033         if (s->handshake_func == 0)
1034                 {
1035                 SSLerr(SSL_F_SSL_WRITE, SSL_R_UNINITIALIZED);
1036                 return -1;
1037                 }
1038
1039         if (s->shutdown & SSL_SENT_SHUTDOWN)
1040                 {
1041                 s->rwstate=SSL_NOTHING;
1042                 SSLerr(SSL_F_SSL_WRITE,SSL_R_PROTOCOL_IS_SHUTDOWN);
1043                 return(-1);
1044                 }
1045         return(s->method->ssl_write(s,buf,num));
1046         }
1047
1048 int SSL_shutdown(SSL *s)
1049         {
1050         /* Note that this function behaves differently from what one might
1051          * expect.  Return values are 0 for no success (yet),
1052          * 1 for success; but calling it once is usually not enough,
1053          * even if blocking I/O is used (see ssl3_shutdown).
1054          */
1055
1056         if (s->handshake_func == 0)
1057                 {
1058                 SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED);
1059                 return -1;
1060                 }
1061
1062         if ((s != NULL) && !SSL_in_init(s))
1063                 return(s->method->ssl_shutdown(s));
1064         else
1065                 return(1);
1066         }
1067
1068 int SSL_renegotiate(SSL *s)
1069         {
1070         if (s->renegotiate == 0)
1071                 s->renegotiate=1;
1072
1073         s->new_session=1;
1074
1075         return(s->method->ssl_renegotiate(s));
1076         }
1077
1078 int SSL_renegotiate_abbreviated(SSL *s)
1079         {
1080         if (s->renegotiate == 0)
1081                 s->renegotiate=1;
1082
1083         s->new_session=0;
1084
1085         return(s->method->ssl_renegotiate(s));
1086         }
1087
1088 int SSL_renegotiate_pending(SSL *s)
1089         {
1090         /* becomes true when negotiation is requested;
1091          * false again once a handshake has finished */
1092         return (s->renegotiate != 0);
1093         }
1094
1095 long SSL_ctrl(SSL *s,int cmd,long larg,void *parg)
1096         {
1097         long l;
1098
1099         switch (cmd)
1100                 {
1101         case SSL_CTRL_GET_READ_AHEAD:
1102                 return(s->read_ahead);
1103         case SSL_CTRL_SET_READ_AHEAD:
1104                 l=s->read_ahead;
1105                 s->read_ahead=larg;
1106                 return(l);
1107
1108         case SSL_CTRL_SET_MSG_CALLBACK_ARG:
1109                 s->msg_callback_arg = parg;
1110                 return 1;
1111
1112         case SSL_CTRL_OPTIONS:
1113                 return(s->options|=larg);
1114         case SSL_CTRL_CLEAR_OPTIONS:
1115                 return(s->options&=~larg);
1116         case SSL_CTRL_MODE:
1117                 return(s->mode|=larg);
1118         case SSL_CTRL_CLEAR_MODE:
1119                 return(s->mode &=~larg);
1120         case SSL_CTRL_GET_MAX_CERT_LIST:
1121                 return(s->max_cert_list);
1122         case SSL_CTRL_SET_MAX_CERT_LIST:
1123                 l=s->max_cert_list;
1124                 s->max_cert_list=larg;
1125                 return(l);
1126         case SSL_CTRL_SET_MTU:
1127 #ifndef OPENSSL_NO_DTLS1
1128                 if (larg < (long)dtls1_min_mtu())
1129                         return 0;
1130 #endif
1131
1132                 if (SSL_IS_DTLS(s))
1133                         {
1134                         s->d1->mtu = larg;
1135                         return larg;
1136                         }
1137                 return 0;
1138         case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
1139                 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
1140                         return 0;
1141                 s->max_send_fragment = larg;
1142                 return 1;
1143         case SSL_CTRL_GET_RI_SUPPORT:
1144                 if (s->s3)
1145                         return s->s3->send_connection_binding;
1146                 else return 0;
1147         case SSL_CTRL_CERT_FLAGS:
1148                 return(s->cert->cert_flags|=larg);
1149         case SSL_CTRL_CLEAR_CERT_FLAGS:
1150                 return(s->cert->cert_flags &=~larg);
1151
1152         case SSL_CTRL_GET_RAW_CIPHERLIST:
1153                 if (parg)
1154                         {
1155                         if (s->cert->ciphers_raw == NULL)
1156                                 return 0;
1157                         *(unsigned char **)parg = s->cert->ciphers_raw;
1158                         return (int)s->cert->ciphers_rawlen;
1159                         }
1160                 else
1161                         return ssl_put_cipher_by_char(s,NULL,NULL);
1162 #ifndef OPENSSL_NO_DANE
1163         case SSL_CTRL_PULL_TLSA_RECORD:
1164                 parg = SSL_get_tlsa_record_byname (parg,larg,s->version<0xF000?1:0);
1165                 /* yes, fall through */
1166         case SSL_CTRL_SET_TLSA_RECORD:
1167                 s->tlsa_record = parg;
1168                 return 1;
1169 #endif
1170         default:
1171                 return(s->method->ssl_ctrl(s,cmd,larg,parg));
1172                 }
1173         }
1174
1175 long SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
1176         {
1177         switch(cmd)
1178                 {
1179         case SSL_CTRL_SET_MSG_CALLBACK:
1180                 s->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp);
1181                 return 1;
1182                 
1183         default:
1184                 return(s->method->ssl_callback_ctrl(s,cmd,fp));
1185                 }
1186         }
1187
1188 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
1189         {
1190         return ctx->sessions;
1191         }
1192
1193 long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd,long larg,void *parg)
1194         {
1195         long l;
1196         /* For some cases with ctx == NULL perform syntax checks */
1197         if (ctx == NULL)
1198                 {
1199                 switch (cmd)
1200                         {
1201 #ifndef OPENSSL_NO_EC
1202                 case SSL_CTRL_SET_CURVES_LIST:
1203                         return tls1_set_curves_list(NULL, NULL, parg);
1204 #endif
1205                 case SSL_CTRL_SET_SIGALGS_LIST:
1206                 case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
1207                         return tls1_set_sigalgs_list(NULL, parg, 0);
1208                 default:
1209                         return 0;
1210                         }
1211                 }
1212
1213         switch (cmd)
1214                 {
1215         case SSL_CTRL_GET_READ_AHEAD:
1216                 return(ctx->read_ahead);
1217         case SSL_CTRL_SET_READ_AHEAD:
1218                 l=ctx->read_ahead;
1219                 ctx->read_ahead=larg;
1220                 return(l);
1221                 
1222         case SSL_CTRL_SET_MSG_CALLBACK_ARG:
1223                 ctx->msg_callback_arg = parg;
1224                 return 1;
1225
1226         case SSL_CTRL_GET_MAX_CERT_LIST:
1227                 return(ctx->max_cert_list);
1228         case SSL_CTRL_SET_MAX_CERT_LIST:
1229                 l=ctx->max_cert_list;
1230                 ctx->max_cert_list=larg;
1231                 return(l);
1232
1233         case SSL_CTRL_SET_SESS_CACHE_SIZE:
1234                 l=ctx->session_cache_size;
1235                 ctx->session_cache_size=larg;
1236                 return(l);
1237         case SSL_CTRL_GET_SESS_CACHE_SIZE:
1238                 return(ctx->session_cache_size);
1239         case SSL_CTRL_SET_SESS_CACHE_MODE:
1240                 l=ctx->session_cache_mode;
1241                 ctx->session_cache_mode=larg;
1242                 return(l);
1243         case SSL_CTRL_GET_SESS_CACHE_MODE:
1244                 return(ctx->session_cache_mode);
1245
1246         case SSL_CTRL_SESS_NUMBER:
1247                 return(lh_SSL_SESSION_num_items(ctx->sessions));
1248         case SSL_CTRL_SESS_CONNECT:
1249                 return(ctx->stats.sess_connect);
1250         case SSL_CTRL_SESS_CONNECT_GOOD:
1251                 return(ctx->stats.sess_connect_good);
1252         case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
1253                 return(ctx->stats.sess_connect_renegotiate);
1254         case SSL_CTRL_SESS_ACCEPT:
1255                 return(ctx->stats.sess_accept);
1256         case SSL_CTRL_SESS_ACCEPT_GOOD:
1257                 return(ctx->stats.sess_accept_good);
1258         case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
1259                 return(ctx->stats.sess_accept_renegotiate);
1260         case SSL_CTRL_SESS_HIT:
1261                 return(ctx->stats.sess_hit);
1262         case SSL_CTRL_SESS_CB_HIT:
1263                 return(ctx->stats.sess_cb_hit);
1264         case SSL_CTRL_SESS_MISSES:
1265                 return(ctx->stats.sess_miss);
1266         case SSL_CTRL_SESS_TIMEOUTS:
1267                 return(ctx->stats.sess_timeout);
1268         case SSL_CTRL_SESS_CACHE_FULL:
1269                 return(ctx->stats.sess_cache_full);
1270         case SSL_CTRL_OPTIONS:
1271                 return(ctx->options|=larg);
1272         case SSL_CTRL_CLEAR_OPTIONS:
1273                 return(ctx->options&=~larg);
1274         case SSL_CTRL_MODE:
1275                 return(ctx->mode|=larg);
1276         case SSL_CTRL_CLEAR_MODE:
1277                 return(ctx->mode&=~larg);
1278         case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
1279                 if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
1280                         return 0;
1281                 ctx->max_send_fragment = larg;
1282                 return 1;
1283         case SSL_CTRL_CERT_FLAGS:
1284                 return(ctx->cert->cert_flags|=larg);
1285         case SSL_CTRL_CLEAR_CERT_FLAGS:
1286                 return(ctx->cert->cert_flags &=~larg);
1287         default:
1288                 return(ctx->method->ssl_ctx_ctrl(ctx,cmd,larg,parg));
1289                 }
1290         }
1291
1292 long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
1293         {
1294         switch(cmd)
1295                 {
1296         case SSL_CTRL_SET_MSG_CALLBACK:
1297                 ctx->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp);
1298                 return 1;
1299
1300         default:
1301                 return(ctx->method->ssl_ctx_callback_ctrl(ctx,cmd,fp));
1302                 }
1303         }
1304
1305 int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
1306         {
1307         long l;
1308
1309         l=a->id-b->id;
1310         if (l == 0L)
1311                 return(0);
1312         else
1313                 return((l > 0)?1:-1);
1314         }
1315
1316 int ssl_cipher_ptr_id_cmp(const SSL_CIPHER * const *ap,
1317                         const SSL_CIPHER * const *bp)
1318         {
1319         long l;
1320
1321         l=(*ap)->id-(*bp)->id;
1322         if (l == 0L)
1323                 return(0);
1324         else
1325                 return((l > 0)?1:-1);
1326         }
1327
1328 /** return a STACK of the ciphers available for the SSL and in order of
1329  * preference */
1330 STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
1331         {
1332         if (s != NULL)
1333                 {
1334                 if (s->cipher_list != NULL)
1335                         {
1336                         return(s->cipher_list);
1337                         }
1338                 else if ((s->ctx != NULL) &&
1339                         (s->ctx->cipher_list != NULL))
1340                         {
1341                         return(s->ctx->cipher_list);
1342                         }
1343                 }
1344         return(NULL);
1345         }
1346
1347 /** return a STACK of the ciphers available for the SSL and in order of
1348  * algorithm id */
1349 STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s)
1350         {
1351         if (s != NULL)
1352                 {
1353                 if (s->cipher_list_by_id != NULL)
1354                         {
1355                         return(s->cipher_list_by_id);
1356                         }
1357                 else if ((s->ctx != NULL) &&
1358                         (s->ctx->cipher_list_by_id != NULL))
1359                         {
1360                         return(s->ctx->cipher_list_by_id);
1361                         }
1362                 }
1363         return(NULL);
1364         }
1365
1366 /** The old interface to get the same thing as SSL_get_ciphers() */
1367 const char *SSL_get_cipher_list(const SSL *s,int n)
1368         {
1369         SSL_CIPHER *c;
1370         STACK_OF(SSL_CIPHER) *sk;
1371
1372         if (s == NULL) return(NULL);
1373         sk=SSL_get_ciphers(s);
1374         if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
1375                 return(NULL);
1376         c=sk_SSL_CIPHER_value(sk,n);
1377         if (c == NULL) return(NULL);
1378         return(c->name);
1379         }
1380
1381 /** specify the ciphers to be used by default by the SSL_CTX */
1382 int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
1383         {
1384         STACK_OF(SSL_CIPHER) *sk;
1385         
1386         sk=ssl_create_cipher_list(ctx->method,&ctx->cipher_list,
1387                 &ctx->cipher_list_by_id,str, ctx->cert);
1388         /* ssl_create_cipher_list may return an empty stack if it
1389          * was unable to find a cipher matching the given rule string
1390          * (for example if the rule string specifies a cipher which
1391          * has been disabled). This is not an error as far as
1392          * ssl_create_cipher_list is concerned, and hence
1393          * ctx->cipher_list and ctx->cipher_list_by_id has been
1394          * updated. */
1395         if (sk == NULL)
1396                 return 0;
1397         else if (sk_SSL_CIPHER_num(sk) == 0)
1398                 {
1399                 SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
1400                 return 0;
1401                 }
1402         return 1;
1403         }
1404
1405 /** specify the ciphers to be used by the SSL */
1406 int SSL_set_cipher_list(SSL *s,const char *str)
1407         {
1408         STACK_OF(SSL_CIPHER) *sk;
1409         
1410         sk=ssl_create_cipher_list(s->ctx->method,&s->cipher_list,
1411                 &s->cipher_list_by_id,str, s->cert);
1412         /* see comment in SSL_CTX_set_cipher_list */
1413         if (sk == NULL)
1414                 return 0;
1415         else if (sk_SSL_CIPHER_num(sk) == 0)
1416                 {
1417                 SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
1418                 return 0;
1419                 }
1420         return 1;
1421         }
1422
1423 /* works well for SSLv2, not so good for SSLv3 */
1424 char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len)
1425         {
1426         char *p;
1427         STACK_OF(SSL_CIPHER) *sk;
1428         SSL_CIPHER *c;
1429         int i;
1430
1431         if ((s->session == NULL) || (s->session->ciphers == NULL) ||
1432                 (len < 2))
1433                 return(NULL);
1434
1435         p=buf;
1436         sk=s->session->ciphers;
1437         for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
1438                 {
1439                 int n;
1440
1441                 c=sk_SSL_CIPHER_value(sk,i);
1442                 n=strlen(c->name);
1443                 if (n+1 > len)
1444                         {
1445                         if (p != buf)
1446                                 --p;
1447                         *p='\0';
1448                         return buf;
1449                         }
1450                 strcpy(p,c->name);
1451                 p+=n;
1452                 *(p++)=':';
1453                 len-=n+1;
1454                 }
1455         p[-1]='\0';
1456         return(buf);
1457         }
1458
1459 int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p,
1460                              int (*put_cb)(const SSL_CIPHER *, unsigned char *))
1461         {
1462         int i,j=0;
1463         SSL_CIPHER *c;
1464         CERT *ct = s->cert;
1465         unsigned char *q;
1466         int no_scsv = s->renegotiate;
1467         /* Set disabled masks for this session */
1468         ssl_set_client_disabled(s);
1469
1470         if (sk == NULL) return(0);
1471         q=p;
1472
1473         for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
1474                 {
1475                 c=sk_SSL_CIPHER_value(sk,i);
1476                 /* Skip disabled ciphers */
1477                 if (c->algorithm_ssl & ct->mask_ssl ||
1478                         c->algorithm_mkey & ct->mask_k ||
1479                         c->algorithm_auth & ct->mask_a)
1480                         continue;
1481 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
1482                 if (c->id == SSL3_CK_SCSV)
1483                         {
1484                         if (no_scsv)
1485                                 continue;
1486                         else
1487                                 no_scsv = 1;
1488                         }
1489 #endif
1490                 j = put_cb ? put_cb(c,p) : ssl_put_cipher_by_char(s,c,p);
1491                 p+=j;
1492                 }
1493         /* If p == q, no ciphers and caller indicates an error. Otherwise
1494          * add SCSV if not renegotiating.
1495          */
1496         if (p != q && !no_scsv)
1497                 {
1498                 static SSL_CIPHER scsv =
1499                         {
1500                         0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
1501                         };
1502                 j = put_cb ? put_cb(&scsv,p) : ssl_put_cipher_by_char(s,&scsv,p);
1503                 p+=j;
1504 #ifdef OPENSSL_RI_DEBUG
1505                 fprintf(stderr, "SCSV sent by client\n");
1506 #endif
1507                 }
1508
1509         return(p-q);
1510         }
1511
1512 STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num,
1513                                                STACK_OF(SSL_CIPHER) **skp)
1514         {
1515         const SSL_CIPHER *c;
1516         STACK_OF(SSL_CIPHER) *sk;
1517         int i,n;
1518         if (s->s3)
1519                 s->s3->send_connection_binding = 0;
1520
1521         n=ssl_put_cipher_by_char(s,NULL,NULL);
1522         if ((num%n) != 0)
1523                 {
1524                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
1525                 return(NULL);
1526                 }
1527         if ((skp == NULL) || (*skp == NULL))
1528                 sk=sk_SSL_CIPHER_new_null(); /* change perhaps later */
1529         else
1530                 {
1531                 sk= *skp;
1532                 sk_SSL_CIPHER_zero(sk);
1533                 }
1534
1535         if (s->cert->ciphers_raw)
1536                 OPENSSL_free(s->cert->ciphers_raw);
1537         s->cert->ciphers_raw = BUF_memdup(p, num);
1538         if (s->cert->ciphers_raw == NULL)
1539                 {
1540                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,ERR_R_MALLOC_FAILURE);
1541                 goto err;
1542                 }
1543         s->cert->ciphers_rawlen = (size_t)num;
1544
1545         for (i=0; i<num; i+=n)
1546                 {
1547                 /* Check for SCSV */
1548                 if (s->s3 && (n != 3 || !p[0]) &&
1549                         (p[n-2] == ((SSL3_CK_SCSV >> 8) & 0xff)) &&
1550                         (p[n-1] == (SSL3_CK_SCSV & 0xff)))
1551                         {
1552                         /* SCSV fatal if renegotiating */
1553                         if (s->renegotiate)
1554                                 {
1555                                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
1556                                 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE); 
1557                                 goto err;
1558                                 }
1559                         s->s3->send_connection_binding = 1;
1560                         p += n;
1561 #ifdef OPENSSL_RI_DEBUG
1562                         fprintf(stderr, "SCSV received by server\n");
1563 #endif
1564                         continue;
1565                         }
1566
1567                 c=ssl_get_cipher_by_char(s,p);
1568                 p+=n;
1569                 if (c != NULL)
1570                         {
1571                         if (!sk_SSL_CIPHER_push(sk,c))
1572                                 {
1573                                 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,ERR_R_MALLOC_FAILURE);
1574                                 goto err;
1575                                 }
1576                         }
1577                 }
1578
1579         if (skp != NULL)
1580                 *skp=sk;
1581         return(sk);
1582 err:
1583         if ((skp == NULL) || (*skp == NULL))
1584                 sk_SSL_CIPHER_free(sk);
1585         return(NULL);
1586         }
1587
1588
1589 #ifndef OPENSSL_NO_TLSEXT
1590 /** return a servername extension value if provided in Client Hello, or NULL.
1591  * So far, only host_name types are defined (RFC 3546).
1592  */
1593
1594 const char *SSL_get_servername(const SSL *s, const int type)
1595         {
1596         if (type != TLSEXT_NAMETYPE_host_name)
1597                 return NULL;
1598
1599         return s->session && !s->tlsext_hostname ?
1600                 s->session->tlsext_hostname :
1601                 s->tlsext_hostname;
1602         }
1603
1604 int SSL_get_servername_type(const SSL *s)
1605         {
1606         if (s->session && (!s->tlsext_hostname ? s->session->tlsext_hostname : s->tlsext_hostname))
1607                 return TLSEXT_NAMETYPE_host_name;
1608         return -1;
1609         }
1610
1611 /* SSL_select_next_proto implements the standard protocol selection. It is
1612  * expected that this function is called from the callback set by
1613  * SSL_CTX_set_next_proto_select_cb.
1614  *
1615  * The protocol data is assumed to be a vector of 8-bit, length prefixed byte
1616  * strings. The length byte itself is not included in the length. A byte
1617  * string of length 0 is invalid. No byte string may be truncated.
1618  *
1619  * The current, but experimental algorithm for selecting the protocol is:
1620  *
1621  * 1) If the server doesn't support NPN then this is indicated to the
1622  * callback. In this case, the client application has to abort the connection
1623  * or have a default application level protocol.
1624  *
1625  * 2) If the server supports NPN, but advertises an empty list then the
1626  * client selects the first protcol in its list, but indicates via the
1627  * API that this fallback case was enacted.
1628  *
1629  * 3) Otherwise, the client finds the first protocol in the server's list
1630  * that it supports and selects this protocol. This is because it's
1631  * assumed that the server has better information about which protocol
1632  * a client should use.
1633  *
1634  * 4) If the client doesn't support any of the server's advertised
1635  * protocols, then this is treated the same as case 2.
1636  *
1637  * It returns either
1638  * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or
1639  * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
1640  */
1641 int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *server, unsigned int server_len, const unsigned char *client, unsigned int client_len)
1642         {
1643         unsigned int i, j;
1644         const unsigned char *result;
1645         int status = OPENSSL_NPN_UNSUPPORTED;
1646
1647         /* For each protocol in server preference order, see if we support it. */
1648         for (i = 0; i < server_len; )
1649                 {
1650                 for (j = 0; j < client_len; )
1651                         {
1652                         if (server[i] == client[j] &&
1653                             memcmp(&server[i+1], &client[j+1], server[i]) == 0)
1654                                 {
1655                                 /* We found a match */
1656                                 result = &server[i];
1657                                 status = OPENSSL_NPN_NEGOTIATED;
1658                                 goto found;
1659                                 }
1660                         j += client[j];
1661                         j++;
1662                         }
1663                 i += server[i];
1664                 i++;
1665                 }
1666
1667         /* There's no overlap between our protocols and the server's list. */
1668         result = client;
1669         status = OPENSSL_NPN_NO_OVERLAP;
1670
1671         found:
1672         *out = (unsigned char *) result + 1;
1673         *outlen = result[0];
1674         return status;
1675         }
1676
1677 # ifndef OPENSSL_NO_NEXTPROTONEG
1678 /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's
1679  * requested protocol for this connection and returns 0. If the client didn't
1680  * request any protocol, then *data is set to NULL.
1681  *
1682  * Note that the client can request any protocol it chooses. The value returned
1683  * from this function need not be a member of the list of supported protocols
1684  * provided by the callback.
1685  */
1686 void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len)
1687         {
1688         *data = s->next_proto_negotiated;
1689         if (!*data) {
1690                 *len = 0;
1691         } else {
1692                 *len = s->next_proto_negotiated_len;
1693         }
1694 }
1695
1696 /* SSL_CTX_set_next_protos_advertised_cb sets a callback that is called when a
1697  * TLS server needs a list of supported protocols for Next Protocol
1698  * Negotiation. The returned list must be in wire format.  The list is returned
1699  * by setting |out| to point to it and |outlen| to its length. This memory will
1700  * not be modified, but one should assume that the SSL* keeps a reference to
1701  * it.
1702  *
1703  * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no
1704  * such extension will be included in the ServerHello. */
1705 void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg), void *arg)
1706         {
1707         ctx->next_protos_advertised_cb = cb;
1708         ctx->next_protos_advertised_cb_arg = arg;
1709         }
1710
1711 /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
1712  * client needs to select a protocol from the server's provided list. |out|
1713  * must be set to point to the selected protocol (which may be within |in|).
1714  * The length of the protocol name must be written into |outlen|. The server's
1715  * advertised protocols are provided in |in| and |inlen|. The callback can
1716  * assume that |in| is syntactically valid.
1717  *
1718  * The client must select a protocol. It is fatal to the connection if this
1719  * callback returns a value other than SSL_TLSEXT_ERR_OK.
1720  */
1721 void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg)
1722         {
1723         ctx->next_proto_select_cb = cb;
1724         ctx->next_proto_select_cb_arg = arg;
1725         }
1726 # endif
1727
1728 int SSL_CTX_set_custom_cli_ext(SSL_CTX *ctx, unsigned short ext_type,
1729                                custom_cli_ext_first_cb_fn fn1, 
1730                                custom_cli_ext_second_cb_fn fn2, void* arg)
1731         {
1732         size_t i;
1733         custom_cli_ext_record* record;
1734
1735         /* Check for duplicates */
1736         for (i=0; i < ctx->custom_cli_ext_records_count; i++)
1737                 if (ext_type == ctx->custom_cli_ext_records[i].ext_type)
1738                         return 0;
1739
1740         ctx->custom_cli_ext_records = OPENSSL_realloc(ctx->custom_cli_ext_records,
1741                                                       (ctx->custom_cli_ext_records_count + 1) * 
1742                                                       sizeof(custom_cli_ext_record));
1743         if (!ctx->custom_cli_ext_records) {
1744                 ctx->custom_cli_ext_records_count = 0;
1745                 return 0;
1746         }
1747         ctx->custom_cli_ext_records_count++;
1748         record = &ctx->custom_cli_ext_records[ctx->custom_cli_ext_records_count - 1];
1749         record->ext_type = ext_type;
1750         record->fn1 = fn1;
1751         record->fn2 = fn2;
1752         record->arg = arg;
1753         return 1;
1754         }
1755
1756 int SSL_CTX_set_custom_srv_ext(SSL_CTX *ctx, unsigned short ext_type,
1757                                custom_srv_ext_first_cb_fn fn1, 
1758                                custom_srv_ext_second_cb_fn fn2, void* arg)
1759         {
1760         size_t i;
1761         custom_srv_ext_record* record;
1762
1763         /* Check for duplicates */      
1764         for (i=0; i < ctx->custom_srv_ext_records_count; i++)
1765                 if (ext_type == ctx->custom_srv_ext_records[i].ext_type)
1766                         return 0;
1767
1768         ctx->custom_srv_ext_records = OPENSSL_realloc(ctx->custom_srv_ext_records,
1769                                                       (ctx->custom_srv_ext_records_count + 1) * 
1770                                                       sizeof(custom_srv_ext_record));
1771         if (!ctx->custom_srv_ext_records) {
1772                 ctx->custom_srv_ext_records_count = 0;
1773                 return 0;
1774         }
1775         ctx->custom_srv_ext_records_count++;
1776         record = &ctx->custom_srv_ext_records[ctx->custom_srv_ext_records_count - 1];
1777         record->ext_type = ext_type;
1778         record->fn1 = fn1;
1779         record->fn2 = fn2;
1780         record->arg = arg;
1781         return 1;
1782         }
1783
1784 /* SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
1785  * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
1786  * length-prefixed strings).
1787  *
1788  * Returns 0 on success. */
1789 int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char* protos,
1790                             unsigned protos_len)
1791         {
1792         if (ctx->alpn_client_proto_list)
1793                 OPENSSL_free(ctx->alpn_client_proto_list);
1794
1795         ctx->alpn_client_proto_list = OPENSSL_malloc(protos_len);
1796         if (!ctx->alpn_client_proto_list)
1797                 return 1;
1798         memcpy(ctx->alpn_client_proto_list, protos, protos_len);
1799         ctx->alpn_client_proto_list_len = protos_len;
1800
1801         return 0;
1802         }
1803
1804 /* SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
1805  * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
1806  * length-prefixed strings).
1807  *
1808  * Returns 0 on success. */
1809 int SSL_set_alpn_protos(SSL *ssl, const unsigned char* protos,
1810                         unsigned protos_len)
1811         {
1812         if (ssl->alpn_client_proto_list)
1813                 OPENSSL_free(ssl->alpn_client_proto_list);
1814
1815         ssl->alpn_client_proto_list = OPENSSL_malloc(protos_len);
1816         if (!ssl->alpn_client_proto_list)
1817                 return 1;
1818         memcpy(ssl->alpn_client_proto_list, protos, protos_len);
1819         ssl->alpn_client_proto_list_len = protos_len;
1820
1821         return 0;
1822         }
1823
1824 /* SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is called
1825  * during ClientHello processing in order to select an ALPN protocol from the
1826  * client's list of offered protocols. */
1827 void SSL_CTX_set_alpn_select_cb(SSL_CTX* ctx,
1828                                 int (*cb) (SSL *ssl,
1829                                            const unsigned char **out,
1830                                            unsigned char *outlen,
1831                                            const unsigned char *in,
1832                                            unsigned int inlen,
1833                                            void *arg),
1834                                 void *arg)
1835         {
1836         ctx->alpn_select_cb = cb;
1837         ctx->alpn_select_cb_arg = arg;
1838         }
1839
1840 /* SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
1841  * On return it sets |*data| to point to |*len| bytes of protocol name (not
1842  * including the leading length-prefix byte). If the server didn't respond with
1843  * a negotiated protocol then |*len| will be zero. */
1844 void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
1845                             unsigned *len)
1846         {
1847         *data = NULL;
1848         if (ssl->s3)
1849                 *data = ssl->s3->alpn_selected;
1850         if (*data == NULL)
1851                 *len = 0;
1852         else
1853                 *len = ssl->s3->alpn_selected_len;
1854         }
1855 #endif /* !OPENSSL_NO_TLSEXT */
1856
1857 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
1858         const char *label, size_t llen, const unsigned char *p, size_t plen,
1859         int use_context)
1860         {
1861         if (s->version < TLS1_VERSION)
1862                 return -1;
1863
1864         return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
1865                                                            llen, p, plen,
1866                                                            use_context);
1867         }
1868
1869 static unsigned long ssl_session_hash(const SSL_SESSION *a)
1870         {
1871         unsigned long l;
1872
1873         l=(unsigned long)
1874                 ((unsigned int) a->session_id[0]     )|
1875                 ((unsigned int) a->session_id[1]<< 8L)|
1876                 ((unsigned long)a->session_id[2]<<16L)|
1877                 ((unsigned long)a->session_id[3]<<24L);
1878         return(l);
1879         }
1880
1881 /* NB: If this function (or indeed the hash function which uses a sort of
1882  * coarser function than this one) is changed, ensure
1883  * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being
1884  * able to construct an SSL_SESSION that will collide with any existing session
1885  * with a matching session ID. */
1886 static int ssl_session_cmp(const SSL_SESSION *a,const SSL_SESSION *b)
1887         {
1888         if (a->ssl_version != b->ssl_version)
1889                 return(1);
1890         if (a->session_id_length != b->session_id_length)
1891                 return(1);
1892         return(memcmp(a->session_id,b->session_id,a->session_id_length));
1893         }
1894
1895 /* These wrapper functions should remain rather than redeclaring
1896  * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
1897  * variable. The reason is that the functions aren't static, they're exposed via
1898  * ssl.h. */
1899 static IMPLEMENT_LHASH_HASH_FN(ssl_session, SSL_SESSION)
1900 static IMPLEMENT_LHASH_COMP_FN(ssl_session, SSL_SESSION)
1901
1902 SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
1903         {
1904         SSL_CTX *ret=NULL;
1905
1906         if (meth == NULL)
1907                 {
1908                 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_NULL_SSL_METHOD_PASSED);
1909                 return(NULL);
1910                 }
1911
1912 #ifdef OPENSSL_FIPS
1913         if (FIPS_mode() && (meth->version < TLS1_VERSION))      
1914                 {
1915                 SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE);
1916                 return NULL;
1917                 }
1918 #endif
1919
1920         if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0)
1921                 {
1922                 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
1923                 goto err;
1924                 }
1925         ret=(SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX));
1926         if (ret == NULL)
1927                 goto err;
1928
1929         memset(ret,0,sizeof(SSL_CTX));
1930
1931         ret->method=meth;
1932
1933         ret->cert_store=NULL;
1934         ret->session_cache_mode=SSL_SESS_CACHE_SERVER;
1935         ret->session_cache_size=SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
1936         ret->session_cache_head=NULL;
1937         ret->session_cache_tail=NULL;
1938
1939         /* We take the system default */
1940         ret->session_timeout=meth->get_timeout();
1941
1942         ret->new_session_cb=0;
1943         ret->remove_session_cb=0;
1944         ret->get_session_cb=0;
1945         ret->generate_session_id=0;
1946
1947         memset((char *)&ret->stats,0,sizeof(ret->stats));
1948
1949         ret->references=1;
1950         ret->quiet_shutdown=0;
1951
1952 /*      ret->cipher=NULL;*/
1953 /*      ret->s2->challenge=NULL;
1954         ret->master_key=NULL;
1955         ret->key_arg=NULL;
1956         ret->s2->conn_id=NULL; */
1957
1958         ret->info_callback=NULL;
1959
1960         ret->app_verify_callback=0;
1961         ret->app_verify_arg=NULL;
1962
1963         ret->max_cert_list=SSL_MAX_CERT_LIST_DEFAULT;
1964         ret->read_ahead=0;
1965         ret->msg_callback=0;
1966         ret->msg_callback_arg=NULL;
1967         ret->verify_mode=SSL_VERIFY_NONE;
1968 #if 0
1969         ret->verify_depth=-1; /* Don't impose a limit (but x509_lu.c does) */
1970 #endif
1971         ret->sid_ctx_length=0;
1972         ret->default_verify_callback=NULL;
1973         if ((ret->cert=ssl_cert_new()) == NULL)
1974                 goto err;
1975
1976         ret->default_passwd_callback=0;
1977         ret->default_passwd_callback_userdata=NULL;
1978         ret->client_cert_cb=0;
1979         ret->app_gen_cookie_cb=0;
1980         ret->app_verify_cookie_cb=0;
1981
1982         ret->sessions=lh_SSL_SESSION_new();
1983         if (ret->sessions == NULL) goto err;
1984         ret->cert_store=X509_STORE_new();
1985         if (ret->cert_store == NULL) goto err;
1986
1987         ssl_create_cipher_list(ret->method,
1988                 &ret->cipher_list,&ret->cipher_list_by_id,
1989                 meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST, ret->cert);
1990         if (ret->cipher_list == NULL
1991             || sk_SSL_CIPHER_num(ret->cipher_list) <= 0)
1992                 {
1993                 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_LIBRARY_HAS_NO_CIPHERS);
1994                 goto err2;
1995                 }
1996
1997         ret->param = X509_VERIFY_PARAM_new();
1998         if (!ret->param)
1999                 goto err;
2000
2001         if ((ret->rsa_md5=EVP_get_digestbyname("ssl2-md5")) == NULL)
2002                 {
2003                 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES);
2004                 goto err2;
2005                 }
2006         if ((ret->md5=EVP_get_digestbyname("ssl3-md5")) == NULL)
2007                 {
2008                 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
2009                 goto err2;
2010                 }
2011         if ((ret->sha1=EVP_get_digestbyname("ssl3-sha1")) == NULL)
2012                 {
2013                 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
2014                 goto err2;
2015                 }
2016
2017         if ((ret->client_CA=sk_X509_NAME_new_null()) == NULL)
2018                 goto err;
2019
2020         CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data);
2021
2022         ret->extra_certs=NULL;
2023         /* No compression for DTLS */
2024         if (meth->version != DTLS1_VERSION)
2025                 ret->comp_methods=SSL_COMP_get_compression_methods();
2026
2027         ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
2028
2029 #ifndef OPENSSL_NO_TLSEXT
2030         ret->tlsext_servername_callback = 0;
2031         ret->tlsext_servername_arg = NULL;
2032         /* Setup RFC4507 ticket keys */
2033         if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0)
2034                 || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0)
2035                 || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0))
2036                 ret->options |= SSL_OP_NO_TICKET;
2037
2038         ret->tlsext_status_cb = 0;
2039         ret->tlsext_status_arg = NULL;
2040
2041 # ifndef OPENSSL_NO_NEXTPROTONEG
2042         ret->next_protos_advertised_cb = 0;
2043         ret->next_proto_select_cb = 0;
2044 # endif
2045 #endif
2046 #ifndef OPENSSL_NO_PSK
2047         ret->psk_identity_hint=NULL;
2048         ret->psk_client_callback=NULL;
2049         ret->psk_server_callback=NULL;
2050 #endif
2051 #ifndef OPENSSL_NO_SRP
2052         SSL_CTX_SRP_CTX_init(ret);
2053 #endif
2054         ret->custom_cli_ext_records = NULL;
2055         ret->custom_cli_ext_records_count = 0;
2056         ret->custom_srv_ext_records = NULL;
2057         ret->custom_srv_ext_records_count = 0;
2058 #ifndef OPENSSL_NO_BUF_FREELISTS
2059         ret->freelist_max_len = SSL_MAX_BUF_FREELIST_LEN_DEFAULT;
2060         ret->rbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
2061         if (!ret->rbuf_freelist)
2062                 goto err;
2063         ret->rbuf_freelist->chunklen = 0;
2064         ret->rbuf_freelist->len = 0;
2065         ret->rbuf_freelist->head = NULL;
2066         ret->wbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
2067         if (!ret->wbuf_freelist)
2068                 {
2069                 OPENSSL_free(ret->rbuf_freelist);
2070                 goto err;
2071                 }
2072         ret->wbuf_freelist->chunklen = 0;
2073         ret->wbuf_freelist->len = 0;
2074         ret->wbuf_freelist->head = NULL;
2075 #endif
2076 #ifndef OPENSSL_NO_ENGINE
2077         ret->client_cert_engine = NULL;
2078 #ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
2079 #define eng_strx(x)     #x
2080 #define eng_str(x)      eng_strx(x)
2081         /* Use specific client engine automatically... ignore errors */
2082         {
2083         ENGINE *eng;
2084         eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
2085         if (!eng)
2086                 {
2087                 ERR_clear_error();
2088                 ENGINE_load_builtin_engines();
2089                 eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
2090                 }
2091         if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
2092                 ERR_clear_error();
2093         }
2094 #endif
2095 #endif
2096         /* Default is to connect to non-RI servers. When RI is more widely
2097          * deployed might change this.
2098          */
2099         ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
2100
2101         return(ret);
2102 err:
2103         SSLerr(SSL_F_SSL_CTX_NEW,ERR_R_MALLOC_FAILURE);
2104 err2:
2105         if (ret != NULL) SSL_CTX_free(ret);
2106         return(NULL);
2107         }
2108
2109 #if 0
2110 static void SSL_COMP_free(SSL_COMP *comp)
2111     { OPENSSL_free(comp); }
2112 #endif
2113
2114 #ifndef OPENSSL_NO_BUF_FREELISTS
2115 static void
2116 ssl_buf_freelist_free(SSL3_BUF_FREELIST *list)
2117         {
2118         SSL3_BUF_FREELIST_ENTRY *ent, *next;
2119         for (ent = list->head; ent; ent = next)
2120                 {
2121                 next = ent->next;
2122                 OPENSSL_free(ent);
2123                 }
2124         OPENSSL_free(list);
2125         }
2126 #endif
2127
2128 void SSL_CTX_free(SSL_CTX *a)
2129         {
2130         int i;
2131
2132         if (a == NULL) return;
2133
2134         i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_SSL_CTX);
2135 #ifdef REF_PRINT
2136         REF_PRINT("SSL_CTX",a);
2137 #endif
2138         if (i > 0) return;
2139 #ifdef REF_CHECK
2140         if (i < 0)
2141                 {
2142                 fprintf(stderr,"SSL_CTX_free, bad reference count\n");
2143                 abort(); /* ok */
2144                 }
2145 #endif
2146
2147         if (a->param)
2148                 X509_VERIFY_PARAM_free(a->param);
2149
2150         /*
2151          * Free internal session cache. However: the remove_cb() may reference
2152          * the ex_data of SSL_CTX, thus the ex_data store can only be removed
2153          * after the sessions were flushed.
2154          * As the ex_data handling routines might also touch the session cache,
2155          * the most secure solution seems to be: empty (flush) the cache, then
2156          * free ex_data, then finally free the cache.
2157          * (See ticket [openssl.org #212].)
2158          */
2159         if (a->sessions != NULL)
2160                 SSL_CTX_flush_sessions(a,0);
2161
2162         CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
2163
2164         if (a->sessions != NULL)
2165                 lh_SSL_SESSION_free(a->sessions);
2166
2167         if (a->cert_store != NULL)
2168                 X509_STORE_free(a->cert_store);
2169         if (a->cipher_list != NULL)
2170                 sk_SSL_CIPHER_free(a->cipher_list);
2171         if (a->cipher_list_by_id != NULL)
2172                 sk_SSL_CIPHER_free(a->cipher_list_by_id);
2173         if (a->cert != NULL)
2174                 ssl_cert_free(a->cert);
2175         if (a->client_CA != NULL)
2176                 sk_X509_NAME_pop_free(a->client_CA,X509_NAME_free);
2177         if (a->extra_certs != NULL)
2178                 sk_X509_pop_free(a->extra_certs,X509_free);
2179 #if 0 /* This should never be done, since it removes a global database */
2180         if (a->comp_methods != NULL)
2181                 sk_SSL_COMP_pop_free(a->comp_methods,SSL_COMP_free);
2182 #else
2183         a->comp_methods = NULL;
2184 #endif
2185
2186         if (a->srtp_profiles)
2187                 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
2188
2189 #ifndef OPENSSL_NO_PSK
2190         if (a->psk_identity_hint)
2191                 OPENSSL_free(a->psk_identity_hint);
2192 #endif
2193 #ifndef OPENSSL_NO_SRP
2194         SSL_CTX_SRP_CTX_free(a);
2195 #endif
2196 #ifndef OPENSSL_NO_TLSEXT
2197         OPENSSL_free(a->custom_cli_ext_records);
2198         OPENSSL_free(a->custom_srv_ext_records);
2199 #endif
2200 #ifndef OPENSSL_NO_ENGINE
2201         if (a->client_cert_engine)
2202                 ENGINE_finish(a->client_cert_engine);
2203 #endif
2204
2205 #ifndef OPENSSL_NO_BUF_FREELISTS
2206         if (a->wbuf_freelist)
2207                 ssl_buf_freelist_free(a->wbuf_freelist);
2208         if (a->rbuf_freelist)
2209                 ssl_buf_freelist_free(a->rbuf_freelist);
2210 #endif
2211 #ifndef OPENSSL_NO_TLSEXT
2212 # ifndef OPENSSL_NO_EC
2213         if (a->tlsext_ecpointformatlist)
2214                 OPENSSL_free(a->tlsext_ecpointformatlist);
2215         if (a->tlsext_ellipticcurvelist)
2216                 OPENSSL_free(a->tlsext_ellipticcurvelist);
2217 # endif /* OPENSSL_NO_EC */
2218         if (a->alpn_client_proto_list != NULL)
2219                 OPENSSL_free(a->alpn_client_proto_list);
2220 #endif
2221
2222         OPENSSL_free(a);
2223         }
2224
2225 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
2226         {
2227         ctx->default_passwd_callback=cb;
2228         }
2229
2230 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *u)
2231         {
2232         ctx->default_passwd_callback_userdata=u;
2233         }
2234
2235 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg)
2236         {
2237         ctx->app_verify_callback=cb;
2238         ctx->app_verify_arg=arg;
2239         }
2240
2241 void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*cb)(int, X509_STORE_CTX *))
2242         {
2243         ctx->verify_mode=mode;
2244         ctx->default_verify_callback=cb;
2245         }
2246
2247 void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth)
2248         {
2249         X509_VERIFY_PARAM_set_depth(ctx->param, depth);
2250         }
2251
2252 void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb)(SSL *ssl, void *arg), void *arg)
2253         {
2254         ssl_cert_set_cert_cb(c->cert, cb, arg);
2255         }
2256
2257 void SSL_set_cert_cb(SSL *s, int (*cb)(SSL *ssl, void *arg), void *arg)
2258         {
2259         ssl_cert_set_cert_cb(s->cert, cb, arg);
2260         }
2261
2262 void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
2263         {
2264         CERT_PKEY *cpk;
2265         int rsa_enc,rsa_tmp,rsa_sign,dh_tmp,dh_rsa,dh_dsa,dsa_sign;
2266         int rsa_enc_export,dh_rsa_export,dh_dsa_export;
2267         int rsa_tmp_export,dh_tmp_export,kl;
2268         unsigned long mask_k,mask_a,emask_k,emask_a;
2269 #ifndef OPENSSL_NO_ECDSA
2270         int have_ecc_cert, ecdsa_ok, ecc_pkey_size;
2271 #endif
2272 #ifndef OPENSSL_NO_ECDH
2273         int have_ecdh_tmp, ecdh_ok;
2274 #endif
2275 #ifndef OPENSSL_NO_EC
2276         X509 *x = NULL;
2277         EVP_PKEY *ecc_pkey = NULL;
2278         int signature_nid = 0, pk_nid = 0, md_nid = 0;
2279 #endif
2280         if (c == NULL) return;
2281
2282         kl=SSL_C_EXPORT_PKEYLENGTH(cipher);
2283
2284 #ifndef OPENSSL_NO_RSA
2285         rsa_tmp=(c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL);
2286         rsa_tmp_export=(c->rsa_tmp_cb != NULL ||
2287                 (rsa_tmp && RSA_size(c->rsa_tmp)*8 <= kl));
2288 #else
2289         rsa_tmp=rsa_tmp_export=0;
2290 #endif
2291 #ifndef OPENSSL_NO_DH
2292         dh_tmp=(c->dh_tmp != NULL || c->dh_tmp_cb != NULL);
2293         dh_tmp_export=(c->dh_tmp_cb != NULL ||
2294                 (dh_tmp && DH_size(c->dh_tmp)*8 <= kl));
2295 #else
2296         dh_tmp=dh_tmp_export=0;
2297 #endif
2298
2299 #ifndef OPENSSL_NO_ECDH
2300         have_ecdh_tmp=(c->ecdh_tmp || c->ecdh_tmp_cb || c->ecdh_tmp_auto);
2301 #endif
2302         cpk= &(c->pkeys[SSL_PKEY_RSA_ENC]);
2303         rsa_enc= cpk->valid_flags & CERT_PKEY_VALID;
2304         rsa_enc_export=(rsa_enc && EVP_PKEY_size(cpk->privatekey)*8 <= kl);
2305         cpk= &(c->pkeys[SSL_PKEY_RSA_SIGN]);
2306         rsa_sign= cpk->valid_flags & CERT_PKEY_SIGN;
2307         cpk= &(c->pkeys[SSL_PKEY_DSA_SIGN]);
2308         dsa_sign= cpk->valid_flags & CERT_PKEY_SIGN;
2309         cpk= &(c->pkeys[SSL_PKEY_DH_RSA]);
2310         dh_rsa=  cpk->valid_flags & CERT_PKEY_VALID;
2311         dh_rsa_export=(dh_rsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl);
2312         cpk= &(c->pkeys[SSL_PKEY_DH_DSA]);
2313 /* FIX THIS EAY EAY EAY */
2314         dh_dsa=  cpk->valid_flags & CERT_PKEY_VALID;
2315         dh_dsa_export=(dh_dsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl);
2316         cpk= &(c->pkeys[SSL_PKEY_ECC]);
2317 #ifndef OPENSSL_NO_EC
2318         have_ecc_cert= cpk->valid_flags & CERT_PKEY_VALID;
2319 #endif
2320         mask_k=0;
2321         mask_a=0;
2322         emask_k=0;
2323         emask_a=0;
2324
2325         
2326
2327 #ifdef CIPHER_DEBUG
2328         printf("rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n",
2329                 rsa_tmp,rsa_tmp_export,dh_tmp,have_ecdh_tmp,
2330                 rsa_enc,rsa_enc_export,rsa_sign,dsa_sign,dh_rsa,dh_dsa);
2331 #endif
2332         
2333         cpk = &(c->pkeys[SSL_PKEY_GOST01]);
2334         if (cpk->x509 != NULL && cpk->privatekey !=NULL) {
2335                 mask_k |= SSL_kGOST;
2336                 mask_a |= SSL_aGOST01;
2337         }
2338         cpk = &(c->pkeys[SSL_PKEY_GOST94]);
2339         if (cpk->x509 != NULL && cpk->privatekey !=NULL) {
2340                 mask_k |= SSL_kGOST;
2341                 mask_a |= SSL_aGOST94;
2342         }
2343
2344         if (rsa_enc || (rsa_tmp && rsa_sign))
2345                 mask_k|=SSL_kRSA;
2346         if (rsa_enc_export || (rsa_tmp_export && (rsa_sign || rsa_enc)))
2347                 emask_k|=SSL_kRSA;
2348
2349 #if 0
2350         /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */
2351         if (    (dh_tmp || dh_rsa || dh_dsa) &&
2352                 (rsa_enc || rsa_sign || dsa_sign))
2353                 mask_k|=SSL_kEDH;
2354         if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) &&
2355                 (rsa_enc || rsa_sign || dsa_sign))
2356                 emask_k|=SSL_kEDH;
2357 #endif
2358
2359         if (dh_tmp_export)
2360                 emask_k|=SSL_kEDH;
2361
2362         if (dh_tmp)
2363                 mask_k|=SSL_kEDH;
2364
2365         if (dh_rsa) mask_k|=SSL_kDHr;
2366         if (dh_rsa_export) emask_k|=SSL_kDHr;
2367
2368         if (dh_dsa) mask_k|=SSL_kDHd;
2369         if (dh_dsa_export) emask_k|=SSL_kDHd;
2370
2371         if (emask_k & (SSL_kDHr|SSL_kDHd))
2372                 mask_a |= SSL_aDH;
2373
2374         if (rsa_enc || rsa_sign)
2375                 {
2376                 mask_a|=SSL_aRSA;
2377                 emask_a|=SSL_aRSA;
2378                 }
2379
2380         if (dsa_sign)
2381                 {
2382                 mask_a|=SSL_aDSS;
2383                 emask_a|=SSL_aDSS;
2384                 }
2385
2386         mask_a|=SSL_aNULL;
2387         emask_a|=SSL_aNULL;
2388
2389 #ifndef OPENSSL_NO_KRB5
2390         mask_k|=SSL_kKRB5;
2391         mask_a|=SSL_aKRB5;
2392         emask_k|=SSL_kKRB5;
2393         emask_a|=SSL_aKRB5;
2394 #endif
2395
2396         /* An ECC certificate may be usable for ECDH and/or
2397          * ECDSA cipher suites depending on the key usage extension.
2398          */
2399 #ifndef OPENSSL_NO_EC
2400         if (have_ecc_cert)
2401                 {
2402                 cpk = &c->pkeys[SSL_PKEY_ECC];
2403                 x = cpk->x509;
2404                 /* This call populates extension flags (ex_flags) */
2405                 X509_check_purpose(x, -1, 0);
2406                 ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
2407                     (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1;
2408                 ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
2409                     (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1;
2410                 if (!(cpk->valid_flags & CERT_PKEY_SIGN))
2411                         ecdsa_ok = 0;
2412                 ecc_pkey = X509_get_pubkey(x);
2413                 ecc_pkey_size = (ecc_pkey != NULL) ?
2414                     EVP_PKEY_bits(ecc_pkey) : 0;
2415                 EVP_PKEY_free(ecc_pkey);
2416                 if ((x->sig_alg) && (x->sig_alg->algorithm))
2417                         {
2418                         signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
2419                         OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
2420                         }
2421 #ifndef OPENSSL_NO_ECDH
2422                 if (ecdh_ok)
2423                         {
2424
2425                         if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa)
2426                                 {
2427                                 mask_k|=SSL_kECDHr;
2428                                 mask_a|=SSL_aECDH;
2429                                 if (ecc_pkey_size <= 163)
2430                                         {
2431                                         emask_k|=SSL_kECDHr;
2432                                         emask_a|=SSL_aECDH;
2433                                         }
2434                                 }
2435
2436                         if (pk_nid == NID_X9_62_id_ecPublicKey)
2437                                 {
2438                                 mask_k|=SSL_kECDHe;
2439                                 mask_a|=SSL_aECDH;
2440                                 if (ecc_pkey_size <= 163)
2441                                         {
2442                                         emask_k|=SSL_kECDHe;
2443                                         emask_a|=SSL_aECDH;
2444                                         }
2445                                 }
2446                         }
2447 #endif
2448 #ifndef OPENSSL_NO_ECDSA
2449                 if (ecdsa_ok)
2450                         {
2451                         mask_a|=SSL_aECDSA;
2452                         emask_a|=SSL_aECDSA;
2453                         }
2454 #endif
2455                 }
2456 #endif
2457
2458 #ifndef OPENSSL_NO_ECDH
2459         if (have_ecdh_tmp)
2460                 {
2461                 mask_k|=SSL_kEECDH;
2462                 emask_k|=SSL_kEECDH;
2463                 }
2464 #endif
2465
2466 #ifndef OPENSSL_NO_PSK
2467         mask_k |= SSL_kPSK;
2468         mask_a |= SSL_aPSK;
2469         emask_k |= SSL_kPSK;
2470         emask_a |= SSL_aPSK;
2471 #endif
2472
2473         c->mask_k=mask_k;
2474         c->mask_a=mask_a;
2475         c->export_mask_k=emask_k;
2476         c->export_mask_a=emask_a;
2477         c->valid=1;
2478         }
2479
2480 /* This handy macro borrowed from crypto/x509v3/v3_purp.c */
2481 #define ku_reject(x, usage) \
2482         (((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage)))
2483
2484 #ifndef OPENSSL_NO_EC
2485
2486 int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
2487         {
2488         unsigned long alg_k, alg_a;
2489         EVP_PKEY *pkey = NULL;
2490         int keysize = 0;
2491         int signature_nid = 0, md_nid = 0, pk_nid = 0;
2492         const SSL_CIPHER *cs = s->s3->tmp.new_cipher;
2493
2494         alg_k = cs->algorithm_mkey;
2495         alg_a = cs->algorithm_auth;
2496
2497         if (SSL_C_IS_EXPORT(cs))
2498                 {
2499                 /* ECDH key length in export ciphers must be <= 163 bits */
2500                 pkey = X509_get_pubkey(x);
2501                 if (pkey == NULL) return 0;
2502                 keysize = EVP_PKEY_bits(pkey);
2503                 EVP_PKEY_free(pkey);
2504                 if (keysize > 163) return 0;
2505                 }
2506
2507         /* This call populates the ex_flags field correctly */
2508         X509_check_purpose(x, -1, 0);
2509         if ((x->sig_alg) && (x->sig_alg->algorithm))
2510                 {
2511                 signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
2512                 OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
2513                 }
2514         if (alg_k & SSL_kECDHe || alg_k & SSL_kECDHr)
2515                 {
2516                 /* key usage, if present, must allow key agreement */
2517                 if (ku_reject(x, X509v3_KU_KEY_AGREEMENT))
2518                         {
2519                         SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT);
2520                         return 0;
2521                         }
2522                 if ((alg_k & SSL_kECDHe) && TLS1_get_version(s) < TLS1_2_VERSION)
2523                         {
2524                         /* signature alg must be ECDSA */
2525                         if (pk_nid != NID_X9_62_id_ecPublicKey)
2526                                 {
2527                                 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE);
2528                                 return 0;
2529                                 }
2530                         }
2531                 if ((alg_k & SSL_kECDHr) && TLS1_get_version(s) < TLS1_2_VERSION)
2532                         {
2533                         /* signature alg must be RSA */
2534
2535                         if (pk_nid != NID_rsaEncryption && pk_nid != NID_rsa)
2536                                 {
2537                                 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE);
2538                                 return 0;
2539                                 }
2540                         }
2541                 }
2542         if (alg_a & SSL_aECDSA)
2543                 {
2544                 /* key usage, if present, must allow signing */
2545                 if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE))
2546                         {
2547                         SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_SIGNING);
2548                         return 0;
2549                         }
2550                 }
2551
2552         return 1;  /* all checks are ok */
2553         }
2554
2555 #endif
2556
2557 static int ssl_get_server_cert_index(const SSL *s)
2558         {
2559         int idx;
2560         idx = ssl_cipher_get_cert_index(s->s3->tmp.new_cipher);
2561         if (idx == SSL_PKEY_RSA_ENC && !s->cert->pkeys[SSL_PKEY_RSA_ENC].x509)
2562                 idx = SSL_PKEY_RSA_SIGN;
2563         if (idx == -1)
2564                 SSLerr(SSL_F_SSL_GET_SERVER_CERT_INDEX,ERR_R_INTERNAL_ERROR);
2565         return idx;
2566         }
2567
2568 CERT_PKEY *ssl_get_server_send_pkey(const SSL *s)
2569         {
2570         CERT *c;
2571         int i;
2572
2573         c = s->cert;
2574         ssl_set_cert_masks(c, s->s3->tmp.new_cipher);
2575
2576 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
2577         /* Broken protocol test: return last used certificate: which may
2578          * mismatch the one expected.
2579          */
2580         if (c->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
2581                 return c->key;
2582 #endif
2583
2584         i = ssl_get_server_cert_index(s);
2585
2586         /* This may or may not be an error. */
2587         if (i < 0)
2588                 return NULL;
2589
2590         /* May be NULL. */
2591         return &c->pkeys[i];
2592         }
2593
2594 EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd)
2595         {
2596         unsigned long alg_a;
2597         CERT *c;
2598         int idx = -1;
2599
2600         alg_a = cipher->algorithm_auth;
2601         c=s->cert;
2602
2603 #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
2604         /* Broken protocol test: use last key: which may
2605          * mismatch the one expected.
2606          */
2607         if (c->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
2608                 idx = c->key - c->pkeys;
2609         else
2610 #endif
2611
2612         if ((alg_a & SSL_aDSS) &&
2613                 (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL))
2614                 idx = SSL_PKEY_DSA_SIGN;
2615         else if (alg_a & SSL_aRSA)
2616                 {
2617                 if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL)
2618                         idx = SSL_PKEY_RSA_SIGN;
2619                 else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL)
2620                         idx = SSL_PKEY_RSA_ENC;
2621                 }
2622         else if ((alg_a & SSL_aECDSA) &&
2623                  (c->pkeys[SSL_PKEY_ECC].privatekey != NULL))
2624                 idx = SSL_PKEY_ECC;
2625         if (idx == -1)
2626                 {
2627                 SSLerr(SSL_F_SSL_GET_SIGN_PKEY,ERR_R_INTERNAL_ERROR);
2628                 return(NULL);
2629                 }
2630         if (pmd)
2631                 *pmd = c->pkeys[idx].digest;
2632         return c->pkeys[idx].privatekey;
2633         }
2634
2635 #ifndef OPENSSL_NO_TLSEXT
2636 unsigned char *ssl_get_authz_data(SSL *s, size_t *authz_length)
2637         {
2638         CERT *c;
2639         int i;
2640
2641         c = s->cert;
2642         i = ssl_get_server_cert_index(s);
2643
2644         if (i == -1)
2645                 return NULL;
2646
2647         *authz_length = 0;
2648         if (c->pkeys[i].authz == NULL)
2649                 return(NULL);
2650         *authz_length = c->pkeys[i].authz_length;
2651
2652         return c->pkeys[i].authz;
2653         }
2654
2655 int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
2656                                    size_t *serverinfo_length)
2657         {
2658         CERT *c = NULL;
2659         int i = 0;
2660         *serverinfo_length = 0;
2661
2662         c = s->cert;
2663         i = ssl_get_server_cert_index(s);
2664
2665         if (i == -1)
2666                 return 0;
2667         if (c->pkeys[i].serverinfo == NULL)
2668                 return 0;
2669
2670         *serverinfo = c->pkeys[i].serverinfo;
2671         *serverinfo_length = c->pkeys[i].serverinfo_length;
2672         return 1;
2673         }
2674 #endif
2675
2676 void ssl_update_cache(SSL *s,int mode)
2677         {
2678         int i;
2679
2680         /* If the session_id_length is 0, we are not supposed to cache it,
2681          * and it would be rather hard to do anyway :-) */
2682         if (s->session->session_id_length == 0) return;
2683
2684         i=s->session_ctx->session_cache_mode;
2685         if ((i & mode) && (!s->hit)
2686                 && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE)
2687                     || SSL_CTX_add_session(s->session_ctx,s->session))
2688                 && (s->session_ctx->new_session_cb != NULL))
2689                 {
2690                 CRYPTO_add(&s->session->references,1,CRYPTO_LOCK_SSL_SESSION);
2691                 if (!s->session_ctx->new_session_cb(s,s->session))
2692                         SSL_SESSION_free(s->session);
2693                 }
2694
2695         /* auto flush every 255 connections */
2696         if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) &&
2697                 ((i & mode) == mode))
2698                 {
2699                 if (  (((mode & SSL_SESS_CACHE_CLIENT)
2700                         ?s->session_ctx->stats.sess_connect_good
2701                         :s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff)
2702                         {
2703                         SSL_CTX_flush_sessions(s->session_ctx,(unsigned long)time(NULL));
2704                         }
2705                 }
2706         }
2707
2708 const SSL_METHOD *SSL_get_ssl_method(SSL *s)
2709         {
2710         return(s->method);
2711         }
2712
2713 int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
2714         {
2715         int conn= -1;
2716         int ret=1;
2717
2718         if (s->method != meth)
2719                 {
2720                 if (s->handshake_func != NULL)
2721                         conn=(s->handshake_func == s->method->ssl_connect);
2722
2723                 if (s->method->version == meth->version)
2724                         s->method=meth;
2725                 else
2726                         {
2727                         s->method->ssl_free(s);
2728                         s->method=meth;
2729                         ret=s->method->ssl_new(s);
2730                         }
2731
2732                 if (conn == 1)
2733                         s->handshake_func=meth->ssl_connect;
2734                 else if (conn == 0)
2735                         s->handshake_func=meth->ssl_accept;
2736                 }
2737         return(ret);
2738         }
2739
2740 int SSL_get_error(const SSL *s,int i)
2741         {
2742         int reason;
2743         unsigned long l;
2744         BIO *bio;
2745
2746         if (i > 0) return(SSL_ERROR_NONE);
2747
2748         /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake
2749          * etc, where we do encode the error */
2750         if ((l=ERR_peek_error()) != 0)
2751                 {
2752                 if (ERR_GET_LIB(l) == ERR_LIB_SYS)
2753                         return(SSL_ERROR_SYSCALL);
2754                 else
2755                         return(SSL_ERROR_SSL);
2756                 }
2757
2758         if ((i < 0) && SSL_want_read(s))
2759                 {
2760                 bio=SSL_get_rbio(s);
2761                 if (BIO_should_read(bio))
2762                         return(SSL_ERROR_WANT_READ);
2763                 else if (BIO_should_write(bio))
2764                         /* This one doesn't make too much sense ... We never try
2765                          * to write to the rbio, and an application program where
2766                          * rbio and wbio are separate couldn't even know what it
2767                          * should wait for.
2768                          * However if we ever set s->rwstate incorrectly
2769                          * (so that we have SSL_want_read(s) instead of
2770                          * SSL_want_write(s)) and rbio and wbio *are* the same,
2771                          * this test works around that bug; so it might be safer
2772                          * to keep it. */
2773                         return(SSL_ERROR_WANT_WRITE);
2774                 else if (BIO_should_io_special(bio))
2775                         {
2776                         reason=BIO_get_retry_reason(bio);
2777                         if (reason == BIO_RR_CONNECT)
2778                                 return(SSL_ERROR_WANT_CONNECT);
2779                         else if (reason == BIO_RR_ACCEPT)
2780                                 return(SSL_ERROR_WANT_ACCEPT);
2781                         else
2782                                 return(SSL_ERROR_SYSCALL); /* unknown */
2783                         }
2784                 }
2785
2786         if ((i < 0) && SSL_want_write(s))
2787                 {
2788                 bio=SSL_get_wbio(s);
2789                 if (BIO_should_write(bio))
2790                         return(SSL_ERROR_WANT_WRITE);
2791                 else if (BIO_should_read(bio))
2792                         /* See above (SSL_want_read(s) with BIO_should_write(bio)) */
2793                         return(SSL_ERROR_WANT_READ);
2794                 else if (BIO_should_io_special(bio))
2795                         {
2796                         reason=BIO_get_retry_reason(bio);
2797                         if (reason == BIO_RR_CONNECT)
2798                                 return(SSL_ERROR_WANT_CONNECT);
2799                         else if (reason == BIO_RR_ACCEPT)
2800                                 return(SSL_ERROR_WANT_ACCEPT);
2801                         else
2802                                 return(SSL_ERROR_SYSCALL);
2803                         }
2804                 }
2805         if ((i < 0) && SSL_want_x509_lookup(s))
2806                 {
2807                 return(SSL_ERROR_WANT_X509_LOOKUP);
2808                 }
2809
2810         if (i == 0)
2811                 {
2812                 if (s->version == SSL2_VERSION)
2813                         {
2814                         /* assume it is the socket being closed */
2815                         return(SSL_ERROR_ZERO_RETURN);
2816                         }
2817                 else
2818                         {
2819                         if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
2820                                 (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY))
2821                                 return(SSL_ERROR_ZERO_RETURN);
2822                         }
2823                 }
2824         return(SSL_ERROR_SYSCALL);
2825         }
2826
2827 int SSL_do_handshake(SSL *s)
2828         {
2829         int ret=1;
2830
2831         if (s->handshake_func == NULL)
2832                 {
2833                 SSLerr(SSL_F_SSL_DO_HANDSHAKE,SSL_R_CONNECTION_TYPE_NOT_SET);
2834                 return(-1);
2835                 }
2836
2837         s->method->ssl_renegotiate_check(s);
2838
2839         if (SSL_in_init(s) || SSL_in_before(s))
2840                 {
2841                 ret=s->handshake_func(s);
2842                 }
2843         return(ret);
2844         }
2845
2846 /* For the next 2 functions, SSL_clear() sets shutdown and so
2847  * one of these calls will reset it */
2848 void SSL_set_accept_state(SSL *s)
2849         {
2850         s->server=1;
2851         s->shutdown=0;
2852         s->state=SSL_ST_ACCEPT|SSL_ST_BEFORE;
2853         s->handshake_func=s->method->ssl_accept;
2854         /* clear the current cipher */
2855         ssl_clear_cipher_ctx(s);
2856         ssl_clear_hash_ctx(&s->read_hash);
2857         ssl_clear_hash_ctx(&s->write_hash);
2858         }
2859
2860 void SSL_set_connect_state(SSL *s)
2861         {
2862         s->server=0;
2863         s->shutdown=0;
2864         s->state=SSL_ST_CONNECT|SSL_ST_BEFORE;
2865         s->handshake_func=s->method->ssl_connect;
2866         /* clear the current cipher */
2867         ssl_clear_cipher_ctx(s);
2868         ssl_clear_hash_ctx(&s->read_hash);
2869         ssl_clear_hash_ctx(&s->write_hash);
2870         }
2871
2872 int ssl_undefined_function(SSL *s)
2873         {
2874         SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2875         return(0);
2876         }
2877
2878 int ssl_undefined_void_function(void)
2879         {
2880         SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2881         return(0);
2882         }
2883
2884 int ssl_undefined_const_function(const SSL *s)
2885         {
2886         SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2887         return(0);
2888         }
2889
2890 SSL_METHOD *ssl_bad_method(int ver)
2891         {
2892         SSLerr(SSL_F_SSL_BAD_METHOD,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2893         return(NULL);
2894         }
2895
2896 const char *SSL_get_version(const SSL *s)
2897         {
2898         if (s->version == TLS1_2_VERSION)
2899                 return("TLSv1.2");
2900         else if (s->version == TLS1_1_VERSION)
2901                 return("TLSv1.1");
2902         else if (s->version == TLS1_VERSION)
2903                 return("TLSv1");
2904         else if (s->version == SSL3_VERSION)
2905                 return("SSLv3");
2906         else if (s->version == SSL2_VERSION)
2907                 return("SSLv2");
2908         else
2909                 return("unknown");
2910         }
2911
2912 SSL *SSL_dup(SSL *s)
2913         {
2914         STACK_OF(X509_NAME) *sk;
2915         X509_NAME *xn;
2916         SSL *ret;
2917         int i;
2918         
2919         if ((ret=SSL_new(SSL_get_SSL_CTX(s))) == NULL)
2920             return(NULL);
2921
2922         ret->version = s->version;
2923         ret->type = s->type;
2924         ret->method = s->method;
2925
2926         if (s->session != NULL)
2927                 {
2928                 /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */
2929                 SSL_copy_session_id(ret,s);
2930                 }
2931         else
2932                 {
2933                 /* No session has been established yet, so we have to expect
2934                  * that s->cert or ret->cert will be changed later --
2935                  * they should not both point to the same object,
2936                  * and thus we can't use SSL_copy_session_id. */
2937
2938                 ret->method->ssl_free(ret);
2939                 ret->method = s->method;
2940                 ret->method->ssl_new(ret);
2941
2942                 if (s->cert != NULL)
2943                         {
2944                         if (ret->cert != NULL)
2945                                 {
2946                                 ssl_cert_free(ret->cert);
2947                                 }
2948                         ret->cert = ssl_cert_dup(s->cert);
2949                         if (ret->cert == NULL)
2950                                 goto err;
2951                         }
2952                                 
2953                 SSL_set_session_id_context(ret,
2954                         s->sid_ctx, s->sid_ctx_length);
2955                 }
2956
2957         ret->options=s->options;
2958         ret->mode=s->mode;
2959         SSL_set_max_cert_list(ret,SSL_get_max_cert_list(s));
2960         SSL_set_read_ahead(ret,SSL_get_read_ahead(s));
2961         ret->msg_callback = s->msg_callback;
2962         ret->msg_callback_arg = s->msg_callback_arg;
2963         SSL_set_verify(ret,SSL_get_verify_mode(s),
2964                 SSL_get_verify_callback(s));
2965         SSL_set_verify_depth(ret,SSL_get_verify_depth(s));
2966         ret->generate_session_id = s->generate_session_id;
2967
2968         SSL_set_info_callback(ret,SSL_get_info_callback(s));
2969         
2970         ret->debug=s->debug;
2971
2972         /* copy app data, a little dangerous perhaps */
2973         if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
2974                 goto err;
2975
2976         /* setup rbio, and wbio */
2977         if (s->rbio != NULL)
2978                 {
2979                 if (!BIO_dup_state(s->rbio,(char *)&ret->rbio))
2980                         goto err;
2981                 }
2982         if (s->wbio != NULL)
2983                 {
2984                 if (s->wbio != s->rbio)
2985                         {
2986                         if (!BIO_dup_state(s->wbio,(char *)&ret->wbio))
2987                                 goto err;
2988                         }
2989                 else
2990                         ret->wbio=ret->rbio;
2991                 }
2992         ret->rwstate = s->rwstate;
2993         ret->in_handshake = s->in_handshake;
2994         ret->handshake_func = s->handshake_func;
2995         ret->server = s->server;
2996         ret->renegotiate = s->renegotiate;
2997         ret->new_session = s->new_session;
2998         ret->quiet_shutdown = s->quiet_shutdown;
2999         ret->shutdown=s->shutdown;
3000         ret->state=s->state; /* SSL_dup does not really work at any state, though */
3001         ret->rstate=s->rstate;
3002         ret->init_num = 0; /* would have to copy ret->init_buf, ret->init_msg, ret->init_num, ret->init_off */
3003         ret->hit=s->hit;
3004
3005         X509_VERIFY_PARAM_inherit(ret->param, s->param);
3006
3007         /* dup the cipher_list and cipher_list_by_id stacks */
3008         if (s->cipher_list != NULL)
3009                 {
3010                 if ((ret->cipher_list=sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
3011                         goto err;
3012                 }
3013         if (s->cipher_list_by_id != NULL)
3014                 if ((ret->cipher_list_by_id=sk_SSL_CIPHER_dup(s->cipher_list_by_id))
3015                         == NULL)
3016                         goto err;
3017
3018         /* Dup the client_CA list */
3019         if (s->client_CA != NULL)
3020                 {
3021                 if ((sk=sk_X509_NAME_dup(s->client_CA)) == NULL) goto err;
3022                 ret->client_CA=sk;
3023                 for (i=0; i<sk_X509_NAME_num(sk); i++)
3024                         {
3025                         xn=sk_X509_NAME_value(sk,i);
3026                         if (sk_X509_NAME_set(sk,i,X509_NAME_dup(xn)) == NULL)
3027                                 {
3028                                 X509_NAME_free(xn);
3029                                 goto err;
3030                                 }
3031                         }
3032                 }
3033
3034         if (0)
3035                 {
3036 err:
3037                 if (ret != NULL) SSL_free(ret);
3038                 ret=NULL;
3039                 }
3040         return(ret);
3041         }
3042
3043 void ssl_clear_cipher_ctx(SSL *s)
3044         {
3045         if (s->enc_read_ctx != NULL)
3046                 {
3047                 EVP_CIPHER_CTX_cleanup(s->enc_read_ctx);
3048                 OPENSSL_free(s->enc_read_ctx);
3049                 s->enc_read_ctx=NULL;
3050                 }
3051         if (s->enc_write_ctx != NULL)
3052                 {
3053                 EVP_CIPHER_CTX_cleanup(s->enc_write_ctx);
3054                 OPENSSL_free(s->enc_write_ctx);
3055                 s->enc_write_ctx=NULL;
3056                 }
3057 #ifndef OPENSSL_NO_COMP
3058         if (s->expand != NULL)
3059                 {
3060                 COMP_CTX_free(s->expand);
3061                 s->expand=NULL;
3062                 }
3063         if (s->compress != NULL)
3064                 {
3065                 COMP_CTX_free(s->compress);
3066                 s->compress=NULL;
3067                 }
3068 #endif
3069         }
3070
3071 /* Fix this function so that it takes an optional type parameter */
3072 X509 *SSL_get_certificate(const SSL *s)
3073         {
3074         if (s->cert != NULL)
3075                 return(s->cert->key->x509);
3076         else
3077                 return(NULL);
3078         }
3079
3080 /* Fix this function so that it takes an optional type parameter */
3081 EVP_PKEY *SSL_get_privatekey(SSL *s)
3082         {
3083         if (s->cert != NULL)
3084                 return(s->cert->key->privatekey);
3085         else
3086                 return(NULL);
3087         }
3088
3089 const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
3090         {
3091         if ((s->session != NULL) && (s->session->cipher != NULL))
3092                 return(s->session->cipher);
3093         return(NULL);
3094         }
3095 #ifdef OPENSSL_NO_COMP
3096 const void *SSL_get_current_compression(SSL *s)
3097         {
3098         return NULL;
3099         }
3100 const void *SSL_get_current_expansion(SSL *s)
3101         {
3102         return NULL;
3103         }
3104 #else
3105
3106 const COMP_METHOD *SSL_get_current_compression(SSL *s)
3107         {
3108         if (s->compress != NULL)
3109                 return(s->compress->meth);
3110         return(NULL);
3111         }
3112
3113 const COMP_METHOD *SSL_get_current_expansion(SSL *s)
3114         {
3115         if (s->expand != NULL)
3116                 return(s->expand->meth);
3117         return(NULL);
3118         }
3119 #endif
3120
3121 int ssl_init_wbio_buffer(SSL *s,int push)
3122         {
3123         BIO *bbio;
3124
3125         if (s->bbio == NULL)
3126                 {
3127                 bbio=BIO_new(BIO_f_buffer());
3128                 if (bbio == NULL) return(0);
3129                 s->bbio=bbio;
3130                 }
3131         else
3132                 {
3133                 bbio=s->bbio;
3134                 if (s->bbio == s->wbio)
3135                         s->wbio=BIO_pop(s->wbio);
3136                 }
3137         (void)BIO_reset(bbio);
3138 /*      if (!BIO_set_write_buffer_size(bbio,16*1024)) */
3139         if (!BIO_set_read_buffer_size(bbio,1))
3140                 {
3141                 SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER,ERR_R_BUF_LIB);
3142                 return(0);
3143                 }
3144         if (push)
3145                 {
3146                 if (s->wbio != bbio)
3147                         s->wbio=BIO_push(bbio,s->wbio);
3148                 }
3149         else
3150                 {
3151                 if (s->wbio == bbio)
3152                         s->wbio=BIO_pop(bbio);
3153                 }
3154         return(1);
3155         }
3156
3157 void ssl_free_wbio_buffer(SSL *s)
3158         {
3159         if (s->bbio == NULL) return;
3160
3161         if (s->bbio == s->wbio)
3162                 {
3163                 /* remove buffering */
3164                 s->wbio=BIO_pop(s->wbio);
3165 #ifdef REF_CHECK /* not the usual REF_CHECK, but this avoids adding one more preprocessor symbol */
3166                 assert(s->wbio != NULL);
3167 #endif
3168         }
3169         BIO_free(s->bbio);
3170         s->bbio=NULL;
3171         }
3172         
3173 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode)
3174         {
3175         ctx->quiet_shutdown=mode;
3176         }
3177
3178 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
3179         {
3180         return(ctx->quiet_shutdown);
3181         }
3182
3183 void SSL_set_quiet_shutdown(SSL *s,int mode)
3184         {
3185         s->quiet_shutdown=mode;
3186         }
3187
3188 int SSL_get_quiet_shutdown(const SSL *s)
3189         {
3190         return(s->quiet_shutdown);
3191         }
3192
3193 void SSL_set_shutdown(SSL *s,int mode)
3194         {
3195         s->shutdown=mode;
3196         }
3197
3198 int SSL_get_shutdown(const SSL *s)
3199         {
3200         return(s->shutdown);
3201         }
3202
3203 int SSL_version(const SSL *s)
3204         {
3205         return(s->version);
3206         }
3207
3208 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
3209         {
3210         return(ssl->ctx);
3211         }
3212
3213 SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx)
3214         {
3215         if (ssl->ctx == ctx)
3216                 return ssl->ctx;
3217 #ifndef OPENSSL_NO_TLSEXT
3218         if (ctx == NULL)
3219                 ctx = ssl->initial_ctx;
3220 #endif
3221         if (ssl->cert != NULL)
3222                 ssl_cert_free(ssl->cert);
3223         ssl->cert = ssl_cert_dup(ctx->cert);
3224         CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
3225         if (ssl->ctx != NULL)
3226                 SSL_CTX_free(ssl->ctx); /* decrement reference count */
3227         ssl->ctx = ctx;
3228         return(ssl->ctx);
3229         }
3230
3231 #ifndef OPENSSL_NO_STDIO
3232 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
3233         {
3234         return(X509_STORE_set_default_paths(ctx->cert_store));
3235         }
3236
3237 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
3238                 const char *CApath)
3239         {
3240         return(X509_STORE_load_locations(ctx->cert_store,CAfile,CApath));
3241         }
3242 #endif
3243
3244 void SSL_set_info_callback(SSL *ssl,
3245         void (*cb)(const SSL *ssl,int type,int val))
3246         {
3247         ssl->info_callback=cb;
3248         }
3249
3250 /* One compiler (Diab DCC) doesn't like argument names in returned
3251    function pointer.  */
3252 void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,int /*val*/)
3253         {
3254         return ssl->info_callback;
3255         }
3256
3257 int SSL_state(const SSL *ssl)
3258         {
3259         return(ssl->state);
3260         }
3261
3262 void SSL_set_state(SSL *ssl, int state)
3263         {
3264         ssl->state = state;
3265         }
3266
3267 void SSL_set_verify_result(SSL *ssl,long arg)
3268         {
3269         ssl->verify_result=arg;
3270         }
3271
3272 long SSL_get_verify_result(const SSL *ssl)
3273         {
3274         return(ssl->verify_result);
3275         }
3276
3277 int SSL_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func,
3278                          CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func)
3279         {
3280         return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp,
3281                                 new_func, dup_func, free_func);
3282         }
3283
3284 int SSL_set_ex_data(SSL *s,int idx,void *arg)
3285         {
3286         return(CRYPTO_set_ex_data(&s->ex_data,idx,arg));
3287         }
3288
3289 void *SSL_get_ex_data(const SSL *s,int idx)
3290         {
3291         return(CRYPTO_get_ex_data(&s->ex_data,idx));
3292         }
3293
3294 int SSL_CTX_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func,
3295                              CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func)
3296         {
3297         return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp,
3298                                 new_func, dup_func, free_func);
3299         }
3300
3301 int SSL_CTX_set_ex_data(SSL_CTX *s,int idx,void *arg)
3302         {
3303         return(CRYPTO_set_ex_data(&s->ex_data,idx,arg));
3304         }
3305
3306 void *SSL_CTX_get_ex_data(const SSL_CTX *s,int idx)
3307         {
3308         return(CRYPTO_get_ex_data(&s->ex_data,idx));
3309         }
3310
3311 int ssl_ok(SSL *s)
3312         {
3313         return(1);
3314         }
3315
3316 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
3317         {
3318         return(ctx->cert_store);
3319         }
3320
3321 void SSL_CTX_set_cert_store(SSL_CTX *ctx,X509_STORE *store)
3322         {
3323         if (ctx->cert_store != NULL)
3324                 X509_STORE_free(ctx->cert_store);
3325         ctx->cert_store=store;
3326         }
3327
3328 int SSL_want(const SSL *s)
3329         {
3330         return(s->rwstate);
3331         }
3332
3333 /*!
3334  * \brief Set the callback for generating temporary RSA keys.
3335  * \param ctx the SSL context.
3336  * \param cb the callback
3337  */
3338
3339 #ifndef OPENSSL_NO_RSA
3340 void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,RSA *(*cb)(SSL *ssl,
3341                                                           int is_export,
3342                                                           int keylength))
3343     {
3344     SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb);
3345     }
3346
3347 void SSL_set_tmp_rsa_callback(SSL *ssl,RSA *(*cb)(SSL *ssl,
3348                                                   int is_export,
3349                                                   int keylength))
3350     {
3351     SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb);
3352     }
3353 #endif
3354
3355 #ifdef DOXYGEN
3356 /*!
3357  * \brief The RSA temporary key callback function.
3358  * \param ssl the SSL session.
3359  * \param is_export \c TRUE if the temp RSA key is for an export ciphersuite.
3360  * \param keylength if \c is_export is \c TRUE, then \c keylength is the size
3361  * of the required key in bits.
3362  * \return the temporary RSA key.
3363  * \sa SSL_CTX_set_tmp_rsa_callback, SSL_set_tmp_rsa_callback
3364  */
3365
3366 RSA *cb(SSL *ssl,int is_export,int keylength)
3367     {}
3368 #endif
3369
3370 /*!
3371  * \brief Set the callback for generating temporary DH keys.
3372  * \param ctx the SSL context.
3373  * \param dh the callback
3374  */
3375
3376 #ifndef OPENSSL_NO_DH
3377 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,DH *(*dh)(SSL *ssl,int is_export,
3378                                                         int keylength))
3379         {
3380         SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh);
3381         }
3382
3383 void SSL_set_tmp_dh_callback(SSL *ssl,DH *(*dh)(SSL *ssl,int is_export,
3384                                                 int keylength))
3385         {
3386         SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh);
3387         }
3388 #endif
3389
3390 #ifndef OPENSSL_NO_ECDH
3391 void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,EC_KEY *(*ecdh)(SSL *ssl,int is_export,
3392                                                                 int keylength))
3393         {
3394         SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh);
3395         }
3396
3397 void SSL_set_tmp_ecdh_callback(SSL *ssl,EC_KEY *(*ecdh)(SSL *ssl,int is_export,
3398                                                         int keylength))
3399         {
3400         SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh);
3401         }
3402 #endif
3403
3404 #ifndef OPENSSL_NO_PSK
3405 int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
3406         {
3407         if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN)
3408                 {
3409                 SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
3410                 return 0;
3411                 }
3412         if (ctx->psk_identity_hint != NULL)
3413                 OPENSSL_free(ctx->psk_identity_hint);
3414         if (identity_hint != NULL)
3415                 {
3416                 ctx->psk_identity_hint = BUF_strdup(identity_hint);
3417                 if (ctx->psk_identity_hint == NULL)
3418                         return 0;
3419                 }
3420         else
3421                 ctx->psk_identity_hint = NULL;
3422         return 1;
3423         }
3424
3425 int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
3426         {
3427         if (s == NULL)
3428                 return 0;
3429
3430         if (s->session == NULL)
3431                 return 1; /* session not created yet, ignored */
3432
3433         if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN)
3434                 {
3435                 SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
3436                 return 0;
3437                 }
3438         if (s->session->psk_identity_hint != NULL)
3439                 OPENSSL_free(s->session->psk_identity_hint);
3440         if (identity_hint != NULL)
3441                 {
3442                 s->session->psk_identity_hint = BUF_strdup(identity_hint);
3443                 if (s->session->psk_identity_hint == NULL)
3444                         return 0;
3445                 }
3446         else
3447                 s->session->psk_identity_hint = NULL;
3448         return 1;
3449         }
3450
3451 const char *SSL_get_psk_identity_hint(const SSL *s)
3452         {
3453         if (s == NULL || s->session == NULL)
3454                 return NULL;
3455         return(s->session->psk_identity_hint);
3456         }
3457
3458 const char *SSL_get_psk_identity(const SSL *s)
3459         {
3460         if (s == NULL || s->session == NULL)
3461                 return NULL;
3462         return(s->session->psk_identity);
3463         }
3464
3465 void SSL_set_psk_client_callback(SSL *s,
3466     unsigned int (*cb)(SSL *ssl, const char *hint,
3467                        char *identity, unsigned int max_identity_len, unsigned char *psk,
3468                        unsigned int max_psk_len))
3469         {
3470         s->psk_client_callback = cb;
3471         }
3472
3473 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx,
3474     unsigned int (*cb)(SSL *ssl, const char *hint,
3475                        char *identity, unsigned int max_identity_len, unsigned char *psk,
3476                        unsigned int max_psk_len))
3477         {
3478         ctx->psk_client_callback = cb;
3479         }
3480
3481 void SSL_set_psk_server_callback(SSL *s,
3482     unsigned int (*cb)(SSL *ssl, const char *identity,
3483                        unsigned char *psk, unsigned int max_psk_len))
3484         {
3485         s->psk_server_callback = cb;
3486         }
3487
3488 void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx,
3489     unsigned int (*cb)(SSL *ssl, const char *identity,
3490                        unsigned char *psk, unsigned int max_psk_len))
3491         {
3492         ctx->psk_server_callback = cb;
3493         }
3494 #endif
3495
3496 void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))
3497         {
3498         SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
3499         }
3500 void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))
3501         {
3502         SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
3503         }
3504
3505 /* Allocates new EVP_MD_CTX and sets pointer to it into given pointer
3506  * vairable, freeing  EVP_MD_CTX previously stored in that variable, if
3507  * any. If EVP_MD pointer is passed, initializes ctx with this md
3508  * Returns newly allocated ctx;
3509  */
3510
3511 EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash,const EVP_MD *md) 
3512 {
3513         ssl_clear_hash_ctx(hash);
3514         *hash = EVP_MD_CTX_create();
3515         if (md) EVP_DigestInit_ex(*hash,md,NULL);
3516         return *hash;
3517 }
3518 void ssl_clear_hash_ctx(EVP_MD_CTX **hash) 
3519 {
3520
3521         if (*hash) EVP_MD_CTX_destroy(*hash);
3522         *hash=NULL;
3523 }
3524
3525 void SSL_set_debug(SSL *s, int debug)
3526         {
3527         s->debug = debug;
3528         }
3529
3530 int SSL_cache_hit(SSL *s)
3531         {
3532         return s->hit;
3533         }
3534
3535 int SSL_is_server(SSL *s)
3536         {
3537         return s->server;
3538         }
3539
3540 #if defined(_WINDLL) && defined(OPENSSL_SYS_WIN16)
3541 #include "../crypto/bio/bss_file.c"
3542 #endif
3543
3544 IMPLEMENT_STACK_OF(SSL_CIPHER)
3545 IMPLEMENT_STACK_OF(SSL_COMP)
3546 IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER,
3547                                     ssl_cipher_id);