14c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ssl/ssl.h */
24c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
34c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * All rights reserved.
44c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
54c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This package is an SSL implementation written
64c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * by Eric Young (eay@cryptsoft.com).
74c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The implementation was written so as to conform with Netscapes SSL.
84c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
94c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This library is free for commercial and non-commercial use as long as
104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the following conditions are aheared to.  The following conditions
114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * apply to all code found in this distribution, be it the RC4, RSA,
124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * included with this distribution is covered by the same copyright terms
144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com).
154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Copyright remains Eric Young's, and as such any Copyright notices in
174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the code are not to be removed.
184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * If this package is used in a product, Eric Young should be given attribution
194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * as the author of the parts of the library used.
204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This can be in the form of a textual message at program startup or
214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * in documentation (online or textual) provided with the package.
224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Redistribution and use in source and binary forms, with or without
244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * modification, are permitted provided that the following conditions
254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * are met:
264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 1. Redistributions of source code must retain the copyright
274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    notice, this list of conditions and the following disclaimer.
284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 2. Redistributions in binary form must reproduce the above copyright
294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    notice, this list of conditions and the following disclaimer in the
304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    documentation and/or other materials provided with the distribution.
314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3. All advertising materials mentioning features or use of this software
324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    must display the following acknowledgement:
334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    "This product includes cryptographic software written by
344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *     Eric Young (eay@cryptsoft.com)"
354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    The word 'cryptographic' can be left out if the rouines from the library
364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    being used are not cryptographic related :-).
374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 4. If you include any Windows specific code (or a derivative thereof) from
384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    the apps directory (application code) you must include an acknowledgement:
394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SUCH DAMAGE.
524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The licence and distribution terms for any publically available version or
544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * derivative of this code cannot be changed.  i.e. this code cannot simply be
554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * copied and put under another distribution licence
564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * [including the GNU Public Licence.]
574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ====================================================================
594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.
604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Redistribution and use in source and binary forms, with or without
624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * modification, are permitted provided that the following conditions
634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * are met:
644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 1. Redistributions of source code must retain the above copyright
664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    notice, this list of conditions and the following disclaimer.
674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 2. Redistributions in binary form must reproduce the above copyright
694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    notice, this list of conditions and the following disclaimer in
704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    the documentation and/or other materials provided with the
714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    distribution.
724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3. All advertising materials mentioning features or use of this
744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    software must display the following acknowledgment:
754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    "This product includes software developed by the OpenSSL Project
764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    endorse or promote products derived from this software without
804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    prior written permission. For written permission, please contact
814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    openssl-core@openssl.org.
824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 5. Products derived from this software may not be called "OpenSSL"
844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    nor may "OpenSSL" appear in their names without prior written
854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    permission of the OpenSSL Project.
864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 6. Redistributions of any form whatsoever must retain the following
884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    acknowledgment:
894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    "This product includes software developed by the OpenSSL Project
904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
1014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
1024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
1034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OF THE POSSIBILITY OF SUCH DAMAGE.
1044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ====================================================================
1054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This product includes cryptographic software written by Eric Young
1074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * (eay@cryptsoft.com).  This product includes software written by Tim
1084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Hudson (tjh@cryptsoft.com).
1094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
1114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ====================================================================
1124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
1134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ECC cipher suite support in OpenSSL originally developed by
1144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
1154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
1164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ====================================================================
1174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Copyright 2005 Nokia. All rights reserved.
1184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The portions of the attached software ("Contribution") is developed by
1204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Nokia Corporation and is licensed pursuant to the OpenSSL open source
1214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * license.
1224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The Contribution, originally written by Mika Kousa and Pasi Eronen of
1244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
1254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * support (see RFC 4279) to OpenSSL.
1264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * No patent licenses or other rights except those expressly stated in
1284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the OpenSSL open source license shall be deemed granted or received
1294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * expressly, by implication, estoppel, or otherwise.
1304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * No assurances are provided by Nokia that the Contribution does not
1324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * infringe the patent or other intellectual property rights of any third
1334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * party or that the license provides you with all the necessary rights
1344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to make use of the Contribution.
1354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
1364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
1374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
1384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
1394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
1404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OTHERWISE.
1414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
1424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef HEADER_SSL_H
1444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define HEADER_SSL_H
1454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/base.h>
1474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/bio.h>
1494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/buf.h>
1504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/hmac.h>
1514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/lhash.h>
1524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/pem.h>
1534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/x509.h>
1544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Some code expected to get the threading functions by including ssl.h. */
1564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/thread.h>
1574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef  __cplusplus
1594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleyextern "C" {
1604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
1614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SSLeay version number for ASN.1 encoding of the session information */
1644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Version 0 - initial version
1654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Version 1 - added the optional peer certificate
1664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
1674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESSION_ASN1_VERSION 0x0001
1684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* text strings for the ciphers */
1704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_NULL_WITH_MD5		SSL2_TXT_NULL_WITH_MD5
1714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_RC4_128_WITH_MD5	SSL2_TXT_RC4_128_WITH_MD5
1724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5
1734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_RC2_128_CBC_WITH_MD5	SSL2_TXT_RC2_128_CBC_WITH_MD5
1744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5
1754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_IDEA_128_CBC_WITH_MD5	SSL2_TXT_IDEA_128_CBC_WITH_MD5
1764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_DES_64_CBC_WITH_MD5	SSL2_TXT_DES_64_CBC_WITH_MD5
1774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_DES_64_CBC_WITH_SHA	SSL2_TXT_DES_64_CBC_WITH_SHA
1784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5
1794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA
1804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MAX_SSL_SESSION_ID_LENGTH		32
1824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MAX_SID_CTX_LENGTH			32
1834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES	(512/8)
1854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MAX_KEY_ARG_LENGTH			8
1864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MAX_MASTER_KEY_LENGTH		48
1874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* These are used to specify which ciphers to use and not to use */
1904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_MEDIUM		"MEDIUM"
1924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_HIGH		"HIGH"
1934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_FIPS		"FIPS"
1944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define	SSL_TXT_aNULL		"aNULL"
1964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_kRSA		"kRSA"
1984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_kEDH		"kEDH"
1994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_kEECDH		"kEECDH"
2004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_kPSK            "kPSK"
2014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define	SSL_TXT_aRSA		"aRSA"
2034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_aECDSA		"aECDSA"
2044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_aPSK            "aPSK"
2054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_DH		"DH"
2074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_EDH		"EDH" /* same as "kEDH:-ADH" */
2084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_ADH		"ADH"
2094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_RSA		"RSA"
2104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_ECDH		"ECDH"
2114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_EECDH		"EECDH" /* same as "kEECDH:-AECDH" */
2124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_AECDH		"AECDH"
2134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_ECDSA		"ECDSA"
2144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_PSK             "PSK"
2154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_3DES		"3DES"
2174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_RC4		"RC4"
2184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_AES128		"AES128"
2194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_AES256		"AES256"
2204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_AES		"AES"
2214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_AES_GCM		"AESGCM"
2224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_CHACHA20	"CHACHA20"
2234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_MD5		"MD5"
2254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_SHA1		"SHA1"
2264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_SHA		"SHA" /* same as "SHA1" */
2274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_SHA256		"SHA256"
2284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_SHA384		"SHA384"
2294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_SSLV3		"SSLv3"
2314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_TLSV1		"TLSv1"
2324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_TLSV1_1		"TLSv1.1"
2334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_TLSV1_2		"TLSv1.2"
2344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_ALL		"ALL"
2364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/*
2384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * COMPLEMENTOF* definitions. These identifiers are used to (de-select)
2394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ciphers normally not being used.
2404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Example: "RC4" will activate all ciphers using RC4 including ciphers
2414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * without authentication, which would normally disabled by DEFAULT (due
2424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT"
2434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * will make sure that it is also disabled in the specific selection.
2444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * COMPLEMENTOF* identifiers are portable between version, as adjustments
2454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to the default cipher setup will also be included here.
2464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
2474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * COMPLEMENTOFDEFAULT does not experience the same special treatment that
2484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * DEFAULT gets, as only selection is being done and no sorting as needed
2494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * for DEFAULT.
2504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
2514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_TXT_CMPDEF		"COMPLEMENTOFDEFAULT"
2524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* The following cipher list is used by default.
2544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It also is substituted when an application-defined cipher list string
2554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * starts with 'DEFAULT'. */
2564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_DEFAULT_CIPHER_LIST	"ALL:!aNULL:!eNULL:!SSLv2"
2574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always
2584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * starts with a reasonable order, and all we have to do for DEFAULT is
2594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * throwing out anonymous and unencrypted ciphersuites!
2604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * (The latter are not actually enabled by ALL, but "ALL:RSA" would enable
2614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * some of them.)
2624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
2634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
2654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SENT_SHUTDOWN	1
2664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_RECEIVED_SHUTDOWN	2
2674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef __cplusplus
2694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley}
2704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
2714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef  __cplusplus
2734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleyextern "C" {
2744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
2754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_FILETYPE_ASN1	X509_FILETYPE_ASN1
2774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_FILETYPE_PEM	X509_FILETYPE_PEM
2784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This is needed to stop compilers complaining about the
2804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 'struct ssl_st *' function parameters used to prototype callbacks
2814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * in SSL_CTX. */
2824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ssl_st *ssl_crock_st;
2834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT;
2844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ssl_method_st SSL_METHOD;
2854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ssl_cipher_st SSL_CIPHER;
2864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ssl_session_st SSL_SESSION;
2874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct tls_sigalgs_st TLS_SIGALGS;
2884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ssl_conf_ctx_st SSL_CONF_CTX;
2894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_STACK_OF(SSL_CIPHER)
2914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/
2934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct srtp_protection_profile_st
2944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley       {
2954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley       const char *name;
2964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley       unsigned long id;
2974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley       } SRTP_PROTECTION_PROFILE;
2984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_STACK_OF(SRTP_PROTECTION_PROFILE)
3004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, int len, void *arg);
3026f2600199c82330240de9a7f65a801b6f606b7b3David Benjamintypedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, STACK_OF(SSL_CIPHER) *peer_ciphers, const SSL_CIPHER **cipher, void *arg);
3034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_SSL_INTERN
3054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* used to hold info on the particular ciphers used */
3074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_cipher_st
3084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	{
3094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int valid;
3104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const char *name;		/* text name */
3114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long id;		/* id, 4 bytes, first is version */
3124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* changed in 0.9.9: these four used to be portions of a single value 'algorithms' */
3144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long algorithm_mkey;	/* key exchange algorithm */
3154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long algorithm_auth;	/* server authentication */
3164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long algorithm_enc;	/* symmetric encryption */
3174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long algorithm_mac;	/* symmetric authentication */
3184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long algorithm_ssl;	/* (major) protocol version */
3194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long algo_strength;	/* strength and export flags */
3214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long algorithm2;	/* Extra flags. See SSL2_CF_* in ssl2.h
3224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   and algorithm2 section in
3234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   ssl_locl.h */
3244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int strength_bits;		/* Number of bits really used */
3254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int alg_bits;			/* Number of bits for algorithm */
3264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	};
3274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */
3304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_method_st
3314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	{
3324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int version;
3334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_new)(SSL *s);
3344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*ssl_clear)(SSL *s);
3354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*ssl_free)(SSL *s);
3364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_accept)(SSL *s);
3374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_connect)(SSL *s);
3384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_read)(SSL *s,void *buf,int len);
3394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_peek)(SSL *s,void *buf,int len);
3404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_write)(SSL *s,const void *buf,int len);
3414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_shutdown)(SSL *s);
3424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_renegotiate)(SSL *s);
3434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_renegotiate_check)(SSL *s);
3444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long (*ssl_get_message)(SSL *s, int st1, int stn, int mt, long
345590cbe970c75973f38aeba4b7146dc0b84b66348David Benjamin		max, int hash_message, int *ok);
3464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_read_bytes)(SSL *s, int type, unsigned char *buf, int len,
3474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int peek);
3484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len);
3494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_dispatch_alert)(SSL *s);
3504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long (*ssl_ctrl)(SSL *s,int cmd,long larg,void *parg);
3514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long (*ssl_ctx_ctrl)(SSL_CTX *ctx,int cmd,long larg,void *parg);
3524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_pending)(const SSL *s);
3534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*num_ciphers)(void);
3544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const SSL_CIPHER *(*get_cipher)(unsigned ncipher);
3554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const struct ssl_method_st *(*get_ssl_method)(int version);
3564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
3574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*ssl_version)(void);
3584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long (*ssl_callback_ctrl)(SSL *s, int cb_id, void (*fp)(void));
3594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long (*ssl_ctx_callback_ctrl)(SSL_CTX *s, int cb_id, void (*fp)(void));
3604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	};
3614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Lets make this into an ASN.1 type structure as follows
3634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SSL_SESSION_ID ::= SEQUENCE {
3644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	version 		INTEGER,	-- structure version number
3654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	SSLversion 		INTEGER,	-- SSL version number
3664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Cipher 			OCTET STRING,	-- the 3 byte cipher ID
3674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Session_ID 		OCTET STRING,	-- the Session ID
3684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Master_key 		OCTET STRING,	-- the master key
3694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Key_Arg [ 0 ] IMPLICIT	OCTET STRING,	-- the optional Key argument
3704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Time [ 1 ] EXPLICIT	INTEGER,	-- optional Start Time
3714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Timeout [ 2 ] EXPLICIT	INTEGER,	-- optional Timeout ins seconds
3724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Peer [ 3 ] EXPLICIT	X509,		-- optional Peer Certificate
3734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Session_ID_context [ 4 ] EXPLICIT OCTET STRING,   -- the Session ID context
3744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Verify_result [ 5 ] EXPLICIT INTEGER,   -- X509_V_... code for `Peer'
3754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	HostName [ 6 ] EXPLICIT OCTET STRING,   -- optional HostName from servername TLS extension
3764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint
3774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	PSK_identity [ 8 ] EXPLICIT OCTET STRING,  -- optional PSK identity
3784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket
3794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Ticket [10]             EXPLICIT OCTET STRING, -- session ticket (clients only)
3804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Compression_meth [11]   EXPLICIT OCTET STRING, -- optional compression method
3814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username
3824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	Peer SHA256 [13]        EXPLICIT OCTET STRING, -- optional SHA256 hash of Peer certifiate
3839169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland *	original handshake hash [14] EXPLICIT OCTET STRING, -- optional original handshake hash
3849169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland *	tlsext_signed_cert_timestamp_list [15] EXPLICIT OCTET STRING, -- optional signed cert timestamp list extension
3856c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin *	ocsp_response [16] EXPLICIT OCTET STRING, -- optional saved OCSP response from the server
3864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *	}
3874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Look in ssl/ssl_asn1.c for more details
3884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).
3894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
3904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_session_st
3914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	{
3924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int ssl_version;	/* what ssl version session info is
3934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				 * being kept in here? */
3944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
3954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* only really used in SSLv2 */
3964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int key_arg_length;
3974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH];
3984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int master_key_length;
3994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];
4004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* session_id - valid? */
4014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int session_id_length;
4024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
4034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* this is used to determine whether the session is being reused in
4044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * the appropriate context. It is up to the application to set this,
4054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * via SSL_new */
4064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int sid_ctx_length;
4074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
4084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *psk_identity_hint;
4104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *psk_identity;
4114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Used to indicate that session resumption is not allowed.
4124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * Applications can also set this bit for a new session via
4134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * not_resumable_session_cb to disable session caching and tickets. */
4144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int not_resumable;
4154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* The cert is the certificate used to establish this connection */
4174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct sess_cert_st /* SESS_CERT */ *sess_cert;
4184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* This is the cert for the other end.
4204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * On clients, it will be the same as sess_cert->peer_key->x509
4214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * (the latter is not enough as sess_cert is not retained
4224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * in the external representation of sessions, see ssl_asn1.c). */
4234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	X509 *peer;
4244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* when app_verify_callback accepts a session where the peer's certificate
4254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * is not ok, we must remember the error for session reuse: */
4264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long verify_result; /* only for servers */
4274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int references;
4294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long timeout;
4304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long time;
4314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const SSL_CIPHER *cipher;
4334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long cipher_id;	/* when ASN.1 loaded, this
4344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					 * needs to be used to load
4354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					 * the 'cipher' structure */
4364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */
4384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	CRYPTO_EX_DATA ex_data; /* application specific data */
4404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* These are used to make removal of session-ids more
4424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * efficient and to implement a maximum cache size. */
4434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct ssl_session_st *prev,*next;
4444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *tlsext_hostname;
4454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	size_t tlsext_ecpointformatlist_length;
4464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char *tlsext_ecpointformatlist; /* peer's list */
4474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	size_t tlsext_ellipticcurvelist_length;
448072334d943ef81d45f75d97cd722b46f1293f773David Benjamin	uint16_t *tlsext_ellipticcurvelist; /* peer's list */
4494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* RFC4507 info */
450e044c3d8a2db07b11a04bda80551b25755471974David Benjamin	uint8_t *tlsext_tick;	/* Session ticket */
4514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	size_t tlsext_ticklen;		/* Session ticket length */
452e044c3d8a2db07b11a04bda80551b25755471974David Benjamin	uint32_t tlsext_tick_lifetime_hint;	/* Session lifetime hint in seconds */
4536c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin
4549169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland	size_t tlsext_signed_cert_timestamp_list_length;
4559169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland	uint8_t *tlsext_signed_cert_timestamp_list; /* Server's list. */
4566c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin
4576c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	/* The OCSP response that came with the session. */
4586c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	size_t ocsp_response_length;
4596c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	uint8_t *ocsp_response;
4606c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin
4614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char peer_sha256_valid;		/* Non-zero if peer_sha256 is valid */
4624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char peer_sha256[SHA256_DIGEST_LENGTH];  /* SHA256 of peer certificate */
4634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* original_handshake_hash contains the handshake hash (either
4654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * SHA-1+MD5 or SHA-2, depending on TLS version) for the original, full
4664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * handshake that created a session. This is used by Channel IDs during
4674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * resumption. */
4684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char original_handshake_hash[EVP_MAX_MD_SIZE];
4694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int original_handshake_hash_len;
4704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	};
4714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
4734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
474c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin/* SSL_OP_LEGACY_SERVER_CONNECT allows initial connection to servers
475c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin * that don't support RI */
4764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_LEGACY_SERVER_CONNECT			0x00000004L
477c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin
478c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin/* SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER allows for record sizes
479c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin * SSL3_RT_MAX_EXTRA bytes above the maximum record size. */
4804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER		0x00000020L
4814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
482c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin/* SSL_OP_TLS_D5_BUG accepts an RSAClientKeyExchange in TLS encoded as
483c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin * SSL3, without a length prefix. */
484c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin#define SSL_OP_TLS_D5_BUG				0x00000100L
4854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
486c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin/* SSL_OP_ALL enables the above bug workarounds that should be rather
487c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin * harmless. */
488c92c2d7a076ca61d61f3c96b837b18bfdfb56cb5David Benjamin#define SSL_OP_ALL					0x00000BFFL
4894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* DTLS options */
4914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_QUERY_MTU                 0x00001000L
4924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Turn on Cookie Exchange (on relevant for servers) */
4934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_COOKIE_EXCHANGE              0x00002000L
4944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Don't use RFC4507 ticket extension */
4954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_TICKET	            0x00004000L
4964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
4974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* As server, disallow session resumption on renegotiation */
4984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION	0x00010000L
4994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Don't use compression even if supported */
5004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_COMPRESSION				0x00020000L
5014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Permit unsafe legacy renegotiation */
5024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION	0x00040000L
5034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* If set, always create a new key when using tmp_ecdh parameters */
5044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_SINGLE_ECDH_USE				0x00080000L
5054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* If set, always create a new key when using tmp_dh parameters */
5064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_SINGLE_DH_USE				0x00100000L
5074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Set to always use the tmp_rsa key when doing RSA operations,
5084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * even when this violates protocol specs */
5094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_CIPHER_SERVER_PREFERENCE			0x00400000L
510a8e3e0e936fea2c512a774e22de03966a91bf6b2David Benjamin/* SSL_OP_TLS_ROLLBACK_BUG does nothing. */
5114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_TLS_ROLLBACK_BUG				0x00800000L
5124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_SSLv2					0x01000000L
5144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_SSLv3					0x02000000L
5154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_TLSv1					0x04000000L
5164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_TLSv1_2				0x08000000L
5174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_TLSv1_1				0x10000000L
5184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_DTLSv1				0x04000000L
5204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_DTLSv1_2				0x08000000L
5214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|\
5234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2)
5244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
525bed8ce78f001c600a143966b932f8e587c35e573Adam Langley/* The following flags do nothing and are included only to make it easier to
526bed8ce78f001c600a143966b932f8e587c35e573Adam Langley * compile code with BoringSSL. */
527bed8ce78f001c600a143966b932f8e587c35e573Adam Langley#define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS		0
528bed8ce78f001c600a143966b932f8e587c35e573Adam Langley#define SSL_OP_MICROSOFT_SESS_ID_BUG			0
529bed8ce78f001c600a143966b932f8e587c35e573Adam Langley#define SSL_OP_NETSCAPE_CHALLENGE_BUG			0
530bed8ce78f001c600a143966b932f8e587c35e573Adam Langley#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG		0
531bed8ce78f001c600a143966b932f8e587c35e573Adam Langley#define SSL_OP_TLS_BLOCK_PADDING_BUG			0
5324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success
5344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * when just a single record has been written): */
5354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_ENABLE_PARTIAL_WRITE       0x00000001L
5364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Make it possible to retry SSL_write() with changed buffer location
5374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * (buffer contents must stay the same!); this is not the default to avoid
5384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the misconception that non-blocking SSL_write() behaves like
5394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * non-blocking write(): */
5404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L
5414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Never bother the application with retries if the transport
5424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * is blocking: */
5434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_AUTO_RETRY 0x00000004L
5444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Don't attempt to automatically build certificate chain */
5454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_NO_AUTO_CHAIN 0x00000008L
5464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Save RAM by releasing read and write buffers when they're empty. (SSL3 and
5474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * TLS only.)  "Released" buffers are put onto a free-list in the context or
5484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * just freed (depending on the context's setting for freelist_max_len). Also
5494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * frees up RAM by releasing the list of client ciphersuites as soon as
5504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * possible (SSL3 and TLS only). This stops SSL_get_shared_ciphers from
5514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * working. */
5524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_RELEASE_BUFFERS 0x00000010L
5534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Send the current time in the Random fields of the ClientHello and
5554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ServerHello records for compatibility with hypothetical implementations
5564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * that require it.
5574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
5584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L
5594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L
5604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Cert related flags */
5624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Many implementations ignore some aspects of the TLS standards such as
5634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * enforcing certifcate chain algorithms. When this is set we enforce them.
5644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
5654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CERT_FLAG_TLS_STRICT		0x00000001L
5664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Perform all sorts of protocol violations for testing purposes */
5684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CERT_FLAG_BROKEN_PROTOCOL		0x10000000
5694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Flags for building certificate chains */
5714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Treat any existing certificates as untrusted CAs */
5724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_BUILD_CHAIN_FLAG_UNTRUSTED		0x1
5734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Don't include root CA in chain */
5744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_BUILD_CHAIN_FLAG_NO_ROOT		0x2
5754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Just check certificates already there */
5764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_BUILD_CHAIN_FLAG_CHECK		0x4
5774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Ignore verification errors */
5784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR	0x8
5794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Clear verification errors from queue */
5804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR	0x10
5814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
5824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Flags returned by SSL_check_chain */
5834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Certificate can be used with this session */
5844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_VALID		0x1
5854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Certificate can also be used for signing */
5864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_SIGN		0x2
5874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EE certificate signing algorithm OK */
5884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_EE_SIGNATURE	0x10
5894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* CA signature algorithms OK */
5904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_CA_SIGNATURE	0x20
5914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* EE certificate parameters OK */
5924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_EE_PARAM	0x40
5934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* CA certificate parameters OK */
5944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_CA_PARAM	0x80
5954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Signing explicitly allowed as opposed to SHA1 fallback */
5964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_EXPLICIT_SIGN	0x100
5974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Client CA issuer names match (always set for server cert) */
5984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_ISSUER_NAME	0x200
5994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Cert type matches client types (always set for server cert) */
6004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_CERT_TYPE	0x400
6014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Cert chain suitable to Suite B */
6024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CERT_PKEY_SUITEB	0x800
6034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_FLAG_CMDLINE		0x1
6054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_FLAG_FILE		0x2
6064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_FLAG_CLIENT		0x4
6074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_FLAG_SERVER		0x8
6084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_FLAG_SHOW_ERRORS	0x10
6094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_FLAG_CERTIFICATE	0x20
6104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Configuration value types */
6114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_TYPE_UNKNOWN		0x0
6124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_TYPE_STRING		0x1
6134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_TYPE_FILE		0x2
6144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CONF_TYPE_DIR		0x3
6154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* When set, clients may send application data before receipt of CCS
6174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * and Finished.  This mode enables full-handshakes to 'complete' in
6184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * one RTT. */
6194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_HANDSHAKE_CUTTHROUGH 0x00000080L
6204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* When set, TLS 1.0 and SSLv3, multi-byte, CBC records will be split in two:
6224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the first record will contain a single byte and the second will contain the
6234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * rest of the bytes. This effectively randomises the IV and prevents BEAST
6244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * attacks. */
6254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_MODE_CBC_RECORD_SPLITTING 0x00000100L
6264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6278eaaa86da3691e7729adc7c19004344633ffc9d1Adam Langley/* SSL_MODE_NO_SESSION_CREATION will cause any attempts to create a session to
6288eaaa86da3691e7729adc7c19004344633ffc9d1Adam Langley * fail with SSL_R_SESSION_MAY_NOT_BE_CREATED. This can be used to enforce that
6298eaaa86da3691e7729adc7c19004344633ffc9d1Adam Langley * session resumption is used for a given SSL*. */
6308eaaa86da3691e7729adc7c19004344633ffc9d1Adam Langley#define SSL_MODE_NO_SESSION_CREATION 0x00000200L
6318eaaa86da3691e7729adc7c19004344633ffc9d1Adam Langley
6324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value,
6334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * they cannot be used to clear bits. */
6344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_options(ctx,op) \
6364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)
6374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_clear_options(ctx,op) \
6384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_OPTIONS,(op),NULL)
6394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_options(ctx) \
6404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL)
6414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_options(ssl,op) \
6424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL)
6434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_clear_options(ssl,op) \
6444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((ssl),SSL_CTRL_CLEAR_OPTIONS,(op),NULL)
6454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_options(ssl) \
6464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley        SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL)
6474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_mode(ctx,op) \
6494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
6504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_clear_mode(ctx,op) \
6514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL)
6524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_mode(ctx) \
6534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)
6544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_clear_mode(ssl,op) \
6554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL)
6564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_mode(ssl,op) \
6574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)
6584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_mode(ssl) \
6594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley        SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)
6604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_mtu(ssl, mtu) \
6614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley        SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)
6624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_secure_renegotiation_support(ssl) \
6644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((SSL*) (ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL)
6654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_cert_flags(ctx,op) \
6674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL)
6684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_cert_flags(s,op) \
6694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL)
6704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_clear_cert_flags(ctx,op) \
6714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
6724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_clear_cert_flags(s,op) \
6734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
6744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
675eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT 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));
676eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT 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));
6774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
6784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
6794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
680859ec3cc09f244348f3c919693817acb01064535David Benjamin/* SSL_CTX_set_keylog_bio sets configures all SSL objects attached to |ctx| to
681859ec3cc09f244348f3c919693817acb01064535David Benjamin * log session material to |keylog_bio|. This is intended for debugging use with
682859ec3cc09f244348f3c919693817acb01064535David Benjamin * tools like Wireshark. |ctx| takes ownership of |keylog_bio|.
683859ec3cc09f244348f3c919693817acb01064535David Benjamin *
684859ec3cc09f244348f3c919693817acb01064535David Benjamin * The format is described in
685859ec3cc09f244348f3c919693817acb01064535David Benjamin * https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format. */
68671dad6860de3d703cee284af45b285b3b907a4eeDavid BenjaminOPENSSL_EXPORT void SSL_CTX_set_keylog_bio(SSL_CTX *ctx, BIO *keylog_bio);
687859ec3cc09f244348f3c919693817acb01064535David Benjamin
6884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_aead_ctx_st;
6904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ssl_aead_ctx_st SSL_AEAD_CTX;
6914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
692ded93581f1674f81faa0dba4b15a842756066ab2Adam Langley#define SSL_MAX_CERT_LIST_DEFAULT 1024*100 /* 100k max cert list */
6934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
6944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT	(1024*20)
6954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
696f4501347c9f709fe3dad745ac96479513a1c9a8dDavid Benjamin#define SSL_DEFAULT_SESSION_TIMEOUT (2 * 60 * 60)
697f4501347c9f709fe3dad745ac96479513a1c9a8dDavid Benjamin
6984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This callback type is used inside SSL_CTX, SSL, and in the functions that set
6994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * them. It is used to override the generation of SSL/TLS session IDs in a
7004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * server. Return value should be zero on an error, non-zero to proceed. Also,
7014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * callbacks should themselves check if the id they generate is unique otherwise
7024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the SSL handshake will fail with an error - callbacks can do this using the
7034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 'ssl' value they're passed by;
7044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *      SSL_has_matching_session_id(ssl, id, *id_len)
7054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The length value passed in is set at the maximum size the session ID can be.
7064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * In SSLv2 this is 16 bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback
7074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * can alter this length to be less if desired, but under SSLv2 session IDs are
7084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * supposed to be fixed at 16 bytes so the id will be padded after the callback
7094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * returns in this case. It is also an error for the callback to set the size to
7104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * zero. */
7114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef int (*GEN_SESSION_CB)(const SSL *ssl, unsigned char *id,
7124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				unsigned int *id_len);
7134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ssl_early_callback_ctx is passed to certain callbacks that are called very
7154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * early on during the server handshake. At this point, much of the SSL*
7164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * hasn't been filled out and only the ClientHello can be depended on. */
7174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_early_callback_ctx
7184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	{
7194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL *ssl;
7204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const unsigned char *client_hello;       size_t client_hello_len;
7214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const unsigned char *session_id;         size_t session_id_len;
7224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const unsigned char *cipher_suites;      size_t cipher_suites_len;
7234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const unsigned char *compression_methods;size_t compression_methods_len;
7244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const unsigned char *extensions;         size_t extensions_len;
7254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	};
7264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SSL_early_callback_ctx_extension_get searches the extensions in |ctx| for
7284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * an extension of the given type. If not found, it returns zero. Otherwise
7294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * it sets |out_data| to point to the extension contents (not including the type
7304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * and length bytes), sets |out_len| to the length of the extension contents
7314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * and returns one. */
732eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT char
7334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleySSL_early_callback_ctx_extension_get(const struct ssl_early_callback_ctx *ctx,
7344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				     uint16_t extension_type,
7354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				     const unsigned char **out_data,
7364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				     size_t *out_len);
7374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ssl_comp_st SSL_COMP;
7394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_SSL_INTERN
7414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_comp_st
7434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	{
7444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int id;
7454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const char *name;
7464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *method;
7474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	};
7484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_STACK_OF(SSL_COMP)
7504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_LHASH_OF(SSL_SESSION);
7514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ssl_cipher_preference_list_st contains a list of SSL_CIPHERs with
7534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * equal-preference groups. For TLS clients, the groups are moot because the
7544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * server picks the cipher and groups cannot be expressed on the wire. However,
7554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * for servers, the equal-preference groups allow the client's preferences to
7564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * be partially respected. (This only has an effect with
7574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SSL_OP_CIPHER_SERVER_PREFERENCE).
7584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
7594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The equal-preference groups are expressed by grouping SSL_CIPHERs together.
7604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * All elements of a group have the same priority: no ordering is expressed
7614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * within a group.
7624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
7634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The values in |ciphers| are in one-to-one correspondence with
7644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |in_group_flags|. (That is, sk_SSL_CIPHER_num(ciphers) is the number of
7654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * bytes in |in_group_flags|.) The bytes in |in_group_flags| are either 1, to
7664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * indicate that the corresponding SSL_CIPHER is not the last element of a
7674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * group, or 0 to indicate that it is.
7684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
7694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * For example, if |in_group_flags| contains all zeros then that indicates a
7704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * traditional, fully-ordered preference. Every SSL_CIPHER is the last element
7714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * of the group (i.e. they are all in a one-element group).
7724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
7734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * For a more complex example, consider:
7744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *   ciphers:        A  B  C  D  E  F
7754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *   in_group_flags: 1  1  0  0  1  0
7764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
7774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * That would express the following, order:
7784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *
7794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    A         E
7804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    B -> D -> F
7814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *    C
7824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */
7834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_cipher_preference_list_st
7844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	{
7854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(SSL_CIPHER) *ciphers;
786bb0a17c5e18a8f8b0416443dc78c08fb7133e37aDavid Benjamin	uint8_t *in_group_flags;
7874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	};
7884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_ctx_st
7904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	{
7914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const SSL_METHOD *method;
7924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
7934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct ssl_cipher_preference_list_st *cipher_list;
7944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* same as above but sorted for lookup */
7954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(SSL_CIPHER) *cipher_list_by_id;
7964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* cipher_list_tls11 is the list of ciphers when TLS 1.1 or greater is
7974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * in use. This only applies to server connections as, for clients, the
7984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * version number is known at connect time and so the cipher list can
7994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * be set then. */
8004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct ssl_cipher_preference_list_st *cipher_list_tls11;
8014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct x509_store_st /* X509_STORE */ *cert_store;
8034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	LHASH_OF(SSL_SESSION) *sessions;
8044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Most session-ids that will be cached, default is
8054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */
8064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long session_cache_size;
8074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct ssl_session_st *session_cache_head;
8084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct ssl_session_st *session_cache_tail;
8094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* This can have one of 2 values, ored together,
8114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * SSL_SESS_CACHE_CLIENT,
8124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * SSL_SESS_CACHE_SERVER,
8134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * Default is SSL_SESSION_CACHE_SERVER, which means only
8144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * SSL_accept which cache SSL_SESSIONS. */
8154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int session_cache_mode;
8164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* If timeout is not 0, it is the default timeout value set
8184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * when SSL_new() is called.  This has been put in to make
8194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * life easier to set things up */
8204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long session_timeout;
8214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* If this callback is not null, it will be called each
8234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * time a session id is added to the cache.  If this function
8244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * returns 1, it means that the callback will do a
8254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * SSL_SESSION_free() when it has finished using it.  Otherwise,
8264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * on 0, it means the callback has finished with it.
8274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * If remove_session_cb is not null, it will be called when
8284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * a session-id is removed from the cache.  After the call,
8294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * OpenSSL will SSL_SESSION_free() it. */
8304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess);
8314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess);
8324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl,
8334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned char *data,int len,int *copy);
8344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct
8364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		{
8374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_connect;	/* SSL new conn - started */
8384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_connect_renegotiate;/* SSL reneg - requested */
8394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_connect_good;	/* SSL new conne/reneg - finished */
8404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_accept;	/* SSL new accept - started */
8414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_accept_renegotiate;/* SSL reneg - requested */
8424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_accept_good;	/* SSL accept/reneg - finished */
8434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_miss;		/* session lookup misses  */
8444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_timeout;	/* reuse attempt on timeouted session */
8454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_cache_full;	/* session removed due to full cache */
8464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_hit;		/* session reuse actually done */
8474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		int sess_cb_hit;	/* session-id that was not
8484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					 * in the cache was
8494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					 * passed back via the callback.  This
8504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					 * indicates that the application is
8514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					 * supplying session-id's from other
8524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					 * processes - spooky :-) */
8534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		} stats;
8544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int references;
8564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* if defined, these override the X509_verify_cert() calls */
8584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*app_verify_callback)(X509_STORE_CTX *, void *);
8594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *app_verify_arg;
8604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* before OpenSSL 0.9.7, 'app_verify_arg' was ignored
8614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * ('app_verify_callback' was called with just one argument) */
8624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Default password callback. */
8644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	pem_password_cb *default_passwd_callback;
8654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Default password callback user data. */
8674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *default_passwd_callback_userdata;
8684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* get client cert callback */
8704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
8714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* get channel id callback */
8734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*channel_id_cb)(SSL *ssl, EVP_PKEY **pkey);
8744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
875fb4ea28bb84875a844cd65a9e4a2167ec884cd48David Benjamin	/* cookie generate callback */
876fb4ea28bb84875a844cd65a9e4a2167ec884cd48David Benjamin	int (*app_gen_cookie_cb)(SSL *ssl, uint8_t *cookie, size_t *cookie_len);
8774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
878fb4ea28bb84875a844cd65a9e4a2167ec884cd48David Benjamin	/* verify cookie callback */
879fb4ea28bb84875a844cd65a9e4a2167ec884cd48David Benjamin	int (*app_verify_cookie_cb)(SSL *ssl, const uint8_t *cookie, size_t cookie_len);
8804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	CRYPTO_EX_DATA ex_data;
8824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(X509) *extra_certs;
8844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Default values used when no per-SSL value is defined follow */
8874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */
8894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* what we put in client cert requests */
8914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(X509_NAME) *client_CA;
8924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Default values to use in SSL structures follow (these are copied by SSL_new) */
8954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
8964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long options;
8974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long mode;
8984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long max_cert_list;
8994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct cert_st /* CERT */ *cert;
9014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int read_ahead;
9024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* callback that allows applications to peek at protocol messages */
9044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
9054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *msg_callback_arg;
9064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int verify_mode;
9084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int sid_ctx_length;
9094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
9104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */
9114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Default generate session ID callback. */
9134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	GEN_SESSION_CB generate_session_id;
9144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	X509_VERIFY_PARAM *param;
9164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* select_certificate_cb is called before most ClientHello processing
9184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * and before the decision whether to resume a session is made.
9194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * It may return one to continue the handshake or zero to cause the
9204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * handshake loop to return with an error and cause SSL_get_error to
9214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * return SSL_ERROR_PENDING_CERTIFICATE. */
9224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*select_certificate_cb) (const struct ssl_early_callback_ctx *);
9234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#if 0
9254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int purpose;		/* Purpose setting */
9264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int trust;		/* Trust setting */
9274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
9284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int quiet_shutdown;
9304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Maximum amount of data to send in one fragment.
9324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * actual record size can be more than this due to
9334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * padding and MAC overheads.
9344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 */
9354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int max_send_fragment;
9364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* TLS extensions servername callback */
9384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*tlsext_servername_callback)(SSL*, int *, void *);
9394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *tlsext_servername_arg;
9404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* RFC 4507 session ticket keys */
9414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char tlsext_tick_key_name[16];
9424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char tlsext_tick_hmac_key[16];
9434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char tlsext_tick_aes_key[16];
9444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Callback to support customisation of ticket key setting */
9454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*tlsext_ticket_key_cb)(SSL *ssl,
9464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					unsigned char *name, unsigned char *iv,
9474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					EVP_CIPHER_CTX *ectx,
9484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 					HMAC_CTX *hctx, int enc);
9494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* certificate status request info */
9514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Callback for status request */
9524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*tlsext_status_cb)(SSL *ssl, void *arg);
9534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *tlsext_status_arg;
9544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *psk_identity_hint;
9564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, char *identity,
9574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned int max_identity_len, unsigned char *psk,
9584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned int max_psk_len);
9594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int (*psk_server_callback)(SSL *ssl, const char *identity,
9604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned char *psk, unsigned int max_psk_len);
9614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
962a40c8625dd42156806934854c28b9da910c44cc9Alex Chernyakhovsky
9634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* retain_only_sha256_of_client_certs is true if we should compute the
9644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * SHA256 hash of the peer's certifiate and then discard it to save
9654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * memory and session space. Only effective on the server side. */
9664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char retain_only_sha256_of_client_certs;
9674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Next protocol negotiation information */
9694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* (for experimental NPN extension). */
9704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* For a server, this contains a callback function by which the set of
9724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * advertised protocols can be provided. */
9734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*next_protos_advertised_cb)(SSL *s, const unsigned char **buf,
9744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			                 unsigned int *len, void *arg);
9754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *next_protos_advertised_cb_arg;
9764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* For a client, this contains a callback function that selects the
9774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * next protocol from the list provided by the server. */
9784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*next_proto_select_cb)(SSL *s, unsigned char **out,
9794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				    unsigned char *outlen,
9804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				    const unsigned char *in,
9814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				    unsigned int inlen,
9824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				    void *arg);
9834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *next_proto_select_cb_arg;
9844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* ALPN information
9864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * (we are in the process of transitioning from NPN to ALPN.) */
9874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
9884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* For a server, this contains a callback function that allows the
9894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * server to select the protocol for the connection.
9904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 *   out: on successful return, this must point to the raw protocol
9914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 *        name (without the length prefix).
9924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 *   outlen: on successful return, this contains the length of |*out|.
9934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 *   in: points to the client's list of supported protocols in
9944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 *       wire-format.
9954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 *   inlen: the length of |in|. */
9964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*alpn_select_cb)(SSL *s,
9974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			      const unsigned char **out,
9984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			      unsigned char *outlen,
9994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			      const unsigned char* in,
10004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			      unsigned int inlen,
10014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			      void *arg);
10024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *alpn_select_cb_arg;
10034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
10044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* For a client, this contains the list of supported protocols in wire
10054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * format. */
10064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char* alpn_client_proto_list;
10074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned alpn_client_proto_list_len;
10084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
10094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley        /* SRTP profiles we are willing to do from RFC 5764 */
10104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;
10114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* EC extension values inherited by SSL structure */
10124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	size_t tlsext_ecpointformatlist_length;
1013072334d943ef81d45f75d97cd722b46f1293f773David Benjamin	uint8_t *tlsext_ecpointformatlist;
10144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	size_t tlsext_ellipticcurvelist_length;
1015072334d943ef81d45f75d97cd722b46f1293f773David Benjamin	uint16_t *tlsext_ellipticcurvelist;
10164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
10174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* If true, a client will advertise the Channel ID extension and a
10184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * server will echo it. */
10194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char tlsext_channel_id_enabled;
10204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* tlsext_channel_id_enabled_new is a hack to support both old and new
10214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * ChannelID signatures. It indicates that a client should advertise the
10224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * new ChannelID extension number. */
10234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char tlsext_channel_id_enabled_new;
10244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* The client's Channel ID private key. */
10254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	EVP_PKEY *tlsext_channel_id_private;
10264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
10279169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland	/* If true, a client will request certificate timestamps. */
10289169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland	char signed_cert_timestamps_enabled;
10296c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin
10306c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	/* If true, a client will request a stapled OCSP response. */
10316c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	char ocsp_stapling_enabled;
1032859ec3cc09f244348f3c919693817acb01064535David Benjamin
1033859ec3cc09f244348f3c919693817acb01064535David Benjamin	/* If not NULL, session key material will be logged to this BIO for
1034859ec3cc09f244348f3c919693817acb01064535David Benjamin	 * debugging purposes. The format matches NSS's and is readable by
1035859ec3cc09f244348f3c919693817acb01064535David Benjamin	 * Wireshark. */
1036859ec3cc09f244348f3c919693817acb01064535David Benjamin	BIO *keylog_bio;
10374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	};
10384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
10394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
10404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
10414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESS_CACHE_OFF			0x0000
10424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESS_CACHE_CLIENT			0x0001
10434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESS_CACHE_SERVER			0x0002
10444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESS_CACHE_BOTH	(SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)
10454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESS_CACHE_NO_AUTO_CLEAR		0x0080
10464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */
10474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP	0x0100
10484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESS_CACHE_NO_INTERNAL_STORE	0x0200
10494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESS_CACHE_NO_INTERNAL \
10504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	(SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)
10514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1052eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx);
10534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_number(ctx) \
10544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)
10554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_connect(ctx) \
10564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)
10574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_connect_good(ctx) \
10584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)
10594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_connect_renegotiate(ctx) \
10604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)
10614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_accept(ctx) \
10624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)
10634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_accept_renegotiate(ctx) \
10644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)
10654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_accept_good(ctx) \
10664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)
10674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_hits(ctx) \
10684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)
10694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_cb_hits(ctx) \
10704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)
10714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_misses(ctx) \
10724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)
10734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_timeouts(ctx) \
10744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)
10754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_cache_full(ctx) \
10764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)
10774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SSL_CTX_enable_tls_channel_id configures a TLS server to accept TLS client
10784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * IDs from clients. Returns 1 on success. */
10794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_enable_tls_channel_id(ctx) \
10804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_CHANNEL_ID,0,NULL)
10814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1082eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess));
1083eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(struct ssl_st *ssl, SSL_SESSION *sess);
1084eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess));
1085eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(struct ssl_ctx_st *ctx, SSL_SESSION *sess);
1086eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl, unsigned char *data,int len,int *copy));
1087eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(struct ssl_st *ssl, unsigned char *Data, int len, int *copy);
10884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SSL_magic_pending_session_ptr returns a magic SSL_SESSION* which indicates
10894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * that the session isn't currently unavailable. SSL_get_error will then return
10904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SSL_ERROR_PENDING_SESSION and the handshake can be retried later when the
10914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * lookup has completed. */
1092eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_SESSION *SSL_magic_pending_session_ptr(void);
1093eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb)(const SSL *ssl,int type,int val));
1094eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int val);
1095eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
1096eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
1097eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_channel_id_cb(SSL_CTX *ctx, void (*channel_id_cb)(SSL *ssl, EVP_PKEY **pkey));
1098eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void (*SSL_CTX_get_channel_id_cb(SSL_CTX *ctx))(SSL *ssl, EVP_PKEY **pkey);
1099fb4ea28bb84875a844cd65a9e4a2167ec884cd48David BenjaminOPENSSL_EXPORT void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, int (*app_gen_cookie_cb)(SSL *ssl, uint8_t *cookie, size_t *cookie_len));
1100fb4ea28bb84875a844cd65a9e4a2167ec884cd48David BenjaminOPENSSL_EXPORT void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, int (*app_verify_cookie_cb)(SSL *ssl, const uint8_t *cookie, size_t cookie_len));
11019169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland
11029169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland
11039169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland/* SSL_enable_signed_cert_timestamps causes |ssl| (which must be the client
11049169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * end of a connection) to request SCTs from the server.
11059169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * See https://tools.ietf.org/html/rfc6962.
11069169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * Returns 1 on success. */
11079169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard MollandOPENSSL_EXPORT int SSL_enable_signed_cert_timestamps(SSL *ssl);
11089169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland
11099169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland/* SSL_CTX_enable_signed_cert_timestamps enables SCT requests on all
11109169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * client SSL objects created from |ctx|. */
11119169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard MollandOPENSSL_EXPORT void SSL_CTX_enable_signed_cert_timestamps(SSL_CTX *ctx);
11129169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland
11136c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin/* SSL_enable_signed_cert_timestamps causes |ssl| (which must be the client end
11146c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin * of a connection) to request a stapled OCSP response from the server. Returns
11156c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin * 1 on success. */
11166c7aed048ca0a335e02dfee10976c5dc8620783eDavid BenjaminOPENSSL_EXPORT int SSL_enable_ocsp_stapling(SSL *ssl);
11176c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin
11186c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin/* SSL_CTX_enable_ocsp_stapling enables OCSP stapling on all client SSL objects
11196c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin * created from |ctx|. */
11206c7aed048ca0a335e02dfee10976c5dc8620783eDavid BenjaminOPENSSL_EXPORT void SSL_CTX_enable_ocsp_stapling(SSL_CTX *ctx);
11216c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin
11229169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland/* SSL_get0_signed_cert_timestamp_list sets |*out| and |*out_len| to point to
11239169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * |*out_len| bytes of SCT information from the server. This is only valid if
11249169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * |ssl| is a client. The SCT information is a SignedCertificateTimestampList
11259169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * (including the two leading length bytes).
11269169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * See https://tools.ietf.org/html/rfc6962#section-3.3
11279169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * If no SCT was received then |*out_len| will be zero on return.
11289169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland *
11299169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland * WARNING: the returned data is not guaranteed to be well formed. */
11309169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard MollandOPENSSL_EXPORT void SSL_get0_signed_cert_timestamp_list(const SSL *ssl, uint8_t **out, size_t *out_len);
11319169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland
11326c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin/* SSL_get0_ocsp_response sets |*out| and |*out_len| to point to |*out_len|
11336c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin * bytes of an OCSP response from the server. This is the DER encoding of an
11346c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin * OCSPResponse type as defined in RFC 2560.
11356c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin *
11366c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin * WARNING: the returned data is not guaranteed to be well formed. */
11376c7aed048ca0a335e02dfee10976c5dc8620783eDavid BenjaminOPENSSL_EXPORT void SSL_get0_ocsp_response(const SSL *ssl, uint8_t **out, size_t *out_len);
11386c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin
1139eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s,
11404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   int (*cb) (SSL *ssl,
11414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley						      const unsigned char **out,
11424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley						      unsigned int *outlen,
11434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley						      void *arg), void *arg);
1144eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s,
11454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				      int (*cb) (SSL *ssl, unsigned char **out,
11464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley						 unsigned char *outlen,
11474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley						 const unsigned char *in,
11484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley						 unsigned int inlen, void *arg),
11494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				      void *arg);
1150eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_get0_next_proto_negotiated(const SSL *s,
11514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				    const uint8_t **data, unsigned *len);
11524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1153eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
11544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			  const unsigned char *in, unsigned int inlen,
11554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			  const unsigned char *client, unsigned int client_len);
11564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
11574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define OPENSSL_NPN_UNSUPPORTED	0
11584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define OPENSSL_NPN_NEGOTIATED	1
11594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define OPENSSL_NPN_NO_OVERLAP	2
11604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1161eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char* protos,
11624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			    unsigned protos_len);
1163eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set_alpn_protos(SSL *ssl, const unsigned char* protos,
11644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			unsigned protos_len);
1165eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_alpn_select_cb(SSL_CTX* ctx,
11664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				int (*cb) (SSL *ssl,
11674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   const unsigned char **out,
11684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   unsigned char *outlen,
11694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   const unsigned char *in,
11704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   unsigned int inlen,
11714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   void *arg),
11724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				void *arg);
1173eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
1174eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley			    unsigned *len);
11754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* the maximum length of the buffer given to callbacks containing the
11764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * resulting identity/psk */
11774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define PSK_MAX_IDENTITY_LEN 128
11784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define PSK_MAX_PSK_LEN 256
1179eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx,
11804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int (*psk_client_callback)(SSL *ssl, const char *hint,
11814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		char *identity, unsigned int max_identity_len, unsigned char *psk,
11824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned int max_psk_len));
1183eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_psk_client_callback(SSL *ssl,
11844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int (*psk_client_callback)(SSL *ssl, const char *hint,
11854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		char *identity, unsigned int max_identity_len, unsigned char *psk,
11864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned int max_psk_len));
1187eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx,
11884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int (*psk_server_callback)(SSL *ssl, const char *identity,
11894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned char *psk, unsigned int max_psk_len));
1190eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_psk_server_callback(SSL *ssl,
11914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int (*psk_server_callback)(SSL *ssl, const char *identity,
11924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned char *psk, unsigned int max_psk_len));
1193eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint);
1194eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint);
1195eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_get_psk_identity_hint(const SSL *s);
1196eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_get_psk_identity(const SSL *s);
1197eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ssl_update_cache(SSL *s, int mode);
1198eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ssl_get_new_session(SSL *s, int session);
11994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_NOTHING	1
12014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_WRITING	2
12024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_READING	3
12034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_X509_LOOKUP	4
12044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CHANNEL_ID_LOOKUP	5
12054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_PENDING_SESSION	7
12064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CERTIFICATE_SELECTION_PENDING	8
12074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* These will only be used when doing non-blocking IO */
12094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_want_nothing(s)	(SSL_want(s) == SSL_NOTHING)
12104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_want_read(s)	(SSL_want(s) == SSL_READING)
12114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_want_write(s)	(SSL_want(s) == SSL_WRITING)
12124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_want_x509_lookup(s)	(SSL_want(s) == SSL_X509_LOOKUP)
12134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_want_channel_id_lookup(s)	(SSL_want(s) == SSL_CHANNEL_ID_LOOKUP)
12144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_want_session(s)	(SSL_want(s) == SSL_PENDING_SESSION)
12154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_want_certificate(s)	(SSL_want(s) == SSL_CERTIFICATE_SELECTION_PENDING)
12164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_SSL_INTERN
12184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct ssl_st
12204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	{
12214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* protocol version
12224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, DTLS1_VERSION)
12234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 */
12244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int version;
12254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int type; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */
12264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const SSL_METHOD *method; /* SSLv3 */
12284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* There are 2 BIO's even though they are normally both the
12304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * same.  This is so data can be read and written to different
12314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * handlers */
12324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_BIO
12344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	BIO *rbio; /* used by SSL_read */
12354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	BIO *wbio; /* used by SSL_write */
12364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	BIO *bbio; /* used during session-id reuse to concatenate
12374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		    * messages */
12384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#else
12394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *rbio; /* used by SSL_read */
12404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *wbio; /* used by SSL_write */
12414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *bbio;
12424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
12434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* This holds a variable that indicates what we were doing
12444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * when a 0 or -1 is returned.  This is needed for
12454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * non-blocking IO so we know what request needs re-doing when
12464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * in SSL_accept or SSL_connect */
12474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int rwstate;
12484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* true when we are actually in SSL_accept() or SSL_connect() */
12504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int in_handshake;
12514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*handshake_func)(SSL *);
12524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Imagine that here's a boolean member "init" that is
12544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * switched as soon as SSL_set_{accept/connect}_state
12554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * is called for the first time, so that "state" and
12564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * "handshake_func" are properly initialized.  But as
12574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * handshake_func is == 0 until then, we use this
12584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * test instead of an "init" member.
12594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 */
12604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int server;	/* are we the server side? - mostly used by SSL_clear*/
12624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int new_session;/* Generate a new session or reuse an old one.
12644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	                 * NB: For servers, the 'new' session may actually be a previously
12654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	                 * cached session or even the previous session unless
12664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	                 * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set */
12674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int quiet_shutdown;/* don't send shutdown packets */
12684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int shutdown;	/* we have shut things down, 0x01 sent, 0x02
12694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			 * for received */
12704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int state;	/* where we are */
12714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int rstate;	/* where we are when reading */
12724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	BUF_MEM *init_buf;	/* buffer used during init */
12744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	uint8_t *init_msg;   	/* pointer to handshake message body, set by ssl3_get_message() */
12754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int init_num;		/* amount read/written */
12764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int init_off;		/* amount read/written */
12774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* used internally to point at a raw packet */
12794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char *packet;
12804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int packet_length;
12814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct ssl3_state_st *s3; /* SSLv3 variables */
12834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct dtls1_state_st *d1; /* DTLSv1 variables */
12844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int read_ahead;		/* Read as many input bytes as possible
12864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	               	 	 * (for non-blocking reads) */
12874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* callback that allows applications to peek at protocol messages */
12894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
12904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *msg_callback_arg;
12914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int hit;		/* reusing a previous session */
12934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	X509_VERIFY_PARAM *param;
12954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
12964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#if 0
12974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int purpose;		/* Purpose setting */
12984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int trust;		/* Trust setting */
12994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
13004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* crypto */
13024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct ssl_cipher_preference_list_st *cipher_list;
13034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(SSL_CIPHER) *cipher_list_by_id;
13044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* These are the ones being used, the ones in SSL_SESSION are
13064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * the ones to be 'copied' into these ones */
13074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_AEAD_CTX *aead_read_ctx;	/* AEAD context. If non-NULL, then
13084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   |enc_read_ctx| and |read_hash| are
13094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   ignored. */
13104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	EVP_CIPHER_CTX *enc_read_ctx;		/* cryptographic state */
13114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	EVP_MD_CTX *read_hash;		/* used for mac generation */
13124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_AEAD_CTX *aead_write_ctx;	/* AEAD context. If non-NULL, then
13144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   |enc_write_ctx| and |write_hash| are
13154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   ignored. */
13164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	EVP_CIPHER_CTX *enc_write_ctx;		/* cryptographic state */
13174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	EVP_MD_CTX *write_hash;		/* used for mac generation */
13184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* session info */
13204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* client cert? */
13224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* This is used to hold the server certificate used */
13234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	struct cert_st /* CERT */ *cert;
13244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* the session_id_context is used to ensure sessions are only reused
13264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * in the appropriate context */
13274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int sid_ctx_length;
13284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
13294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* This can also be in the session once a session is established */
13314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_SESSION *session;
13324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Default generate session ID callback. */
13344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	GEN_SESSION_CB generate_session_id;
13354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Used in SSL2 and SSL3 */
13374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int verify_mode;	/* 0 don't care about verify failure.
13384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				 * 1 fail if verify fails */
13394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int (*verify_callback)(int ok,X509_STORE_CTX *ctx); /* fail if callback returns 0 */
13404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*info_callback)(const SSL *ssl,int type,int val); /* optional informational callback */
13424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* PSK identity hint is stored here only to enable setting a hint on an SSL object before an
13444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * SSL_SESSION is associated with it. Once an SSL_SESSION is associated with this SSL object,
13454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * the psk_identity_hint from the session takes precedence over this one. */
13464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *psk_identity_hint;
13474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, char *identity,
13484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned int max_identity_len, unsigned char *psk,
13494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned int max_psk_len);
13504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int (*psk_server_callback)(SSL *ssl, const char *identity,
13514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		unsigned char *psk, unsigned int max_psk_len);
13524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX *ctx;
13544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* set this flag to 1 and a sleep(1) is put into all SSL_read()
13554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * and SSL_write() calls, good for nbio debuging :-) */
13564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int debug;
13574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* extra application data */
13594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long verify_result;
13604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	CRYPTO_EX_DATA ex_data;
13614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* for server side, keep the list of CA_dn we can use */
13634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(X509_NAME) *client_CA;
13644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int references;
13664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long options; /* protocol behaviour */
13674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned long mode; /* API behaviour */
13684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	long max_cert_list;
13694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int first_packet;
13704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int client_version;	/* what was passed, used for
13714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				 * SSLv3/TLS rollback check */
13724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned int max_send_fragment;
13734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* TLS extension debug callback */
13744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void (*tlsext_debug_cb)(SSL *s, int client_server, int type,
13754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					unsigned char *data, int len,
13764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					void *arg);
13774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *tlsext_debug_arg;
13784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char *tlsext_hostname;
1379ed8270a55c3845abbc85dfeed358597fef059ea9Adam Langley	/* should_ack_sni is true if the SNI extension should be acked. This is
1380ed8270a55c3845abbc85dfeed358597fef059ea9Adam Langley	 * only used by a server. */
1381ed8270a55c3845abbc85dfeed358597fef059ea9Adam Langley	char should_ack_sni;
13824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* RFC4507 session ticket expected to be received or sent */
13834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int tlsext_ticket_expected;
13844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	size_t tlsext_ecpointformatlist_length;
1385072334d943ef81d45f75d97cd722b46f1293f773David Benjamin	uint8_t *tlsext_ecpointformatlist; /* our list */
13864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	size_t tlsext_ellipticcurvelist_length;
1387072334d943ef81d45f75d97cd722b46f1293f773David Benjamin	uint16_t *tlsext_ellipticcurvelist; /* our list */
13884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* TLS Session Ticket extension override */
13904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	TLS_SESSION_TICKET_EXT *tlsext_session_ticket;
13914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* TLS Session Ticket extension callback */
13934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb;
13944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *tls_session_ticket_ext_cb_arg;
13954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
13964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* TLS pre-shared secret session resumption */
13974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	tls_session_secret_cb_fn tls_session_secret_cb;
13984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	void *tls_session_secret_cb_arg;
13994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX * initial_ctx; /* initial ctx, used to store sessions */
14014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Next protocol negotiation. For the client, this is the protocol that
14034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * we sent in NextProtocol and is set when handling ServerHello
14044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * extensions.
14054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 *
14064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * For a server, this is the client's selected_protocol from
14074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * NextProtocol and is set when handling the NextProtocol message,
14084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * before the Finished message. */
14094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	uint8_t *next_proto_negotiated;
14104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	size_t next_proto_negotiated_len;
14114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;  /* What we'll do */
14134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SRTP_PROTECTION_PROFILE *srtp_profile;            /* What's been chosen */
14144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* Copied from the SSL_CTX. For a server, means that we'll accept
14164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * Channel IDs from clients. For a client, means that we'll advertise
14174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * support. */
14184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char tlsext_channel_id_enabled;
14194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* The client's Channel ID private key. */
14204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	EVP_PKEY *tlsext_channel_id_private;
14214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14229169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland	/* Enable signed certificate time stamps. Currently client only. */
14239169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland	char signed_cert_timestamps_enabled;
14249169c964589694a3dac5fecf6465806fb1f8b22bHÃ¥vard Molland
14256c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	/* Enable OCSP stapling. Currently client only.
14266c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	 * TODO(davidben): Add a server-side implementation when it becomes
14276c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	 * necesary. */
14286c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin	char ocsp_stapling_enabled;
14296c7aed048ca0a335e02dfee10976c5dc8620783eDavid Benjamin
14304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* For a client, this contains the list of supported protocols in wire
14314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * format. */
14324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned char* alpn_client_proto_list;
14334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	unsigned alpn_client_proto_list_len;
14344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	int renegotiate;/* 1 if we are renegotiating.
14364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	                 * 2 if we are a server and are inside a handshake
14374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	                 * (i.e. not just sending a HelloRequest) */
14384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	/* fallback_scsv is non-zero iff we are sending the TLS_FALLBACK_SCSV
14404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	 * cipher suite value. Only applies to a client. */
14414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	char fallback_scsv;
14424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	};
14434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
14454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef __cplusplus
14474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley}
14484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
14494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/ssl2.h>
14514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/ssl3.h>
14524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */
14534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/dtls1.h> /* Datagram TLS */
14544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/ssl23.h>
14554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/srtp.h>  /* Support for the use_srtp extension */
14564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef  __cplusplus
14584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleyextern "C" {
14594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
14604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* compatibility */
14624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_app_data(s,arg)		(SSL_set_ex_data(s,0,(char *)arg))
14634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_app_data(s)		(SSL_get_ex_data(s,0))
14644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESSION_set_app_data(s,a)	(SSL_SESSION_set_ex_data(s,0,(char *)a))
14654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_SESSION_get_app_data(s)	(SSL_SESSION_get_ex_data(s,0))
14664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_app_data(ctx)	(SSL_CTX_get_ex_data(ctx,0))
14674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_app_data(ctx,arg)	(SSL_CTX_set_ex_data(ctx,0,(char *)arg))
14684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* The following are the possible values for ssl->state are are
14704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * used to indicate where we are up to in the SSL connection establishment.
14714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The macros that follow are about the only things you should need to use
14724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * and even then, only when using non-blocking IO.
14734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It can also be useful to work out where you were when the connection
14744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * failed */
14754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_CONNECT			0x1000
14774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_ACCEPT			0x2000
14784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_MASK			0x0FFF
14794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_INIT			(SSL_ST_CONNECT|SSL_ST_ACCEPT)
14804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_BEFORE			0x4000
14814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_OK			0x03
14824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_RENEGOTIATE		(0x04|SSL_ST_INIT)
14834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_LOOP			0x01
14854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_EXIT			0x02
14864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_READ			0x04
14874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_WRITE			0x08
14884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_ALERT			0x4000 /* used in callback */
14894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_READ_ALERT		(SSL_CB_ALERT|SSL_CB_READ)
14904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_WRITE_ALERT		(SSL_CB_ALERT|SSL_CB_WRITE)
14914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_ACCEPT_LOOP		(SSL_ST_ACCEPT|SSL_CB_LOOP)
14924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_ACCEPT_EXIT		(SSL_ST_ACCEPT|SSL_CB_EXIT)
14934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_CONNECT_LOOP		(SSL_ST_CONNECT|SSL_CB_LOOP)
14944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_CONNECT_EXIT		(SSL_ST_CONNECT|SSL_CB_EXIT)
14954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_HANDSHAKE_START		0x10
14964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CB_HANDSHAKE_DONE		0x20
14974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
14984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Is the SSL_connection established? */
14994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_state(a)		SSL_state(a)
15004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_is_init_finished(a)		(SSL_state(a) == SSL_ST_OK)
15014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_in_init(a)			((SSL_state(a)&SSL_ST_INIT) && \
15024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					!SSL_cutthrough_complete(a))
15034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_in_before(a)		(SSL_state(a)&SSL_ST_BEFORE)
15044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_in_connect_init(a)		(SSL_state(a)&SSL_ST_CONNECT)
15054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_in_accept_init(a)		(SSL_state(a)&SSL_ST_ACCEPT)
1506f6faa4b7105981ea8f9b29f2b2f7c83fbce1f0c4Adam LangleyOPENSSL_EXPORT int SSL_cutthrough_complete(const SSL *s);
15074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* The following 2 states are kept in ssl->rstate when reads fail,
15094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * you should not need these */
15104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_READ_HEADER			0xF0
15114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_READ_BODY			0xF1
15124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ST_READ_DONE			0xF2
15134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Obtain latest Finished message
15154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *   -- that we sent (SSL_get_finished)
15164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley *   -- that we expected from peer (SSL_get_peer_finished).
15174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Returns length (0 == no Finished so far), copies up to 'count' bytes. */
1518eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT size_t SSL_get_finished(const SSL *s, void *buf, size_t count);
1519eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);
15204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options
15224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * are 'ored' with SSL_VERIFY_PEER if they are desired */
15234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_VERIFY_NONE			0x00
15244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_VERIFY_PEER			0x01
15254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT	0x02
15264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_VERIFY_CLIENT_ONCE		0x04
15274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_VERIFY_PEER_IF_NO_OBC	0x08
15284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define OpenSSL_add_ssl_algorithms()	SSL_library_init()
15304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSLeay_add_ssl_algorithms()	SSL_library_init()
15314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* this is for backward compatibility */
15334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#if 0 /* NEW_SSLEAY */
15344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c)
15354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_pref_cipher(c,n)	SSL_set_cipher_list(c,n)
15364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_add_session(a,b)            SSL_CTX_add_session((a),(b))
15374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_remove_session(a,b)		SSL_CTX_remove_session((a),(b))
15384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_flush_sessions(a,b)		SSL_CTX_flush_sessions((a),(b))
15394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
15404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* More backward compatibility */
15414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_cipher(s) \
15424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		SSL_CIPHER_get_name(SSL_get_current_cipher(s))
15434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_cipher_bits(s,np) \
15444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
15454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_cipher_version(s) \
15464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		SSL_CIPHER_get_version(SSL_get_current_cipher(s))
15474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_cipher_name(s) \
15484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		SSL_CIPHER_get_name(SSL_get_current_cipher(s))
15494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_time(a)		SSL_SESSION_get_time(a)
15504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_time(a,b)	SSL_SESSION_set_time((a),(b))
15514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_timeout(a)	SSL_SESSION_get_timeout(a)
15524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_timeout(a,b)	SSL_SESSION_set_timeout((a),(b))
15534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
15554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)
15564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
15584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15592e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin/* make_errors.go reserves error codes above 1000 for manually-assigned
15602e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin * errors. This value must be kept in sync with reservedReasonCode in
15612e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin * make_errors.h */
15624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_REASON_OFFSET		1000 /* offset to get SSL_R_... value from SSL_AD_... */
15634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* These alert types are for SSLv3 and TLSv1 */
15654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_CLOSE_NOTIFY		SSL3_AD_CLOSE_NOTIFY
15664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_UNEXPECTED_MESSAGE	SSL3_AD_UNEXPECTED_MESSAGE /* fatal */
15674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_BAD_RECORD_MAC		SSL3_AD_BAD_RECORD_MAC     /* fatal */
15684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_DECRYPTION_FAILED	TLS1_AD_DECRYPTION_FAILED
15694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_RECORD_OVERFLOW		TLS1_AD_RECORD_OVERFLOW
15704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_DECOMPRESSION_FAILURE	SSL3_AD_DECOMPRESSION_FAILURE/* fatal */
15714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_HANDSHAKE_FAILURE	SSL3_AD_HANDSHAKE_FAILURE/* fatal */
15724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_NO_CERTIFICATE		SSL3_AD_NO_CERTIFICATE /* Not for TLS */
15734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_BAD_CERTIFICATE		SSL3_AD_BAD_CERTIFICATE
15744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_UNSUPPORTED_CERTIFICATE	SSL3_AD_UNSUPPORTED_CERTIFICATE
15754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_CERTIFICATE_REVOKED	SSL3_AD_CERTIFICATE_REVOKED
15764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_CERTIFICATE_EXPIRED	SSL3_AD_CERTIFICATE_EXPIRED
15774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_CERTIFICATE_UNKNOWN	SSL3_AD_CERTIFICATE_UNKNOWN
15784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_ILLEGAL_PARAMETER	SSL3_AD_ILLEGAL_PARAMETER   /* fatal */
15794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_UNKNOWN_CA		TLS1_AD_UNKNOWN_CA	/* fatal */
15804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_ACCESS_DENIED		TLS1_AD_ACCESS_DENIED	/* fatal */
15814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_DECODE_ERROR		TLS1_AD_DECODE_ERROR	/* fatal */
15824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_DECRYPT_ERROR		TLS1_AD_DECRYPT_ERROR
15834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_EXPORT_RESTRICTION	TLS1_AD_EXPORT_RESTRICTION/* fatal */
15844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_PROTOCOL_VERSION		TLS1_AD_PROTOCOL_VERSION /* fatal */
15854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_INSUFFICIENT_SECURITY	TLS1_AD_INSUFFICIENT_SECURITY/* fatal */
15864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_INTERNAL_ERROR		TLS1_AD_INTERNAL_ERROR	/* fatal */
15874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_USER_CANCELLED		TLS1_AD_USER_CANCELLED
15884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_NO_RENEGOTIATION		TLS1_AD_NO_RENEGOTIATION
15894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_UNSUPPORTED_EXTENSION	TLS1_AD_UNSUPPORTED_EXTENSION
15904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE
15914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_UNRECOGNIZED_NAME	TLS1_AD_UNRECOGNIZED_NAME
15924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE
15934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE
15944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_UNKNOWN_PSK_IDENTITY     TLS1_AD_UNKNOWN_PSK_IDENTITY /* fatal */
15954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_AD_INAPPROPRIATE_FALLBACK	SSL3_AD_INAPPROPRIATE_FALLBACK /* fatal */
15964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
15974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_NONE			0
15984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_SSL			1
15994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_WANT_READ		2
16004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_WANT_WRITE		3
16014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_WANT_X509_LOOKUP	4
16024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_SYSCALL		5 /* look at error stack/return value/errno */
16034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_ZERO_RETURN		6
16044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_WANT_CONNECT		7
16054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_WANT_ACCEPT		8
16064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_WANT_CHANNEL_ID_LOOKUP	9
16074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_PENDING_SESSION	11
16084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_ERROR_PENDING_CERTIFICATE	12
16094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_NEED_TMP_RSA			1
16114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TMP_RSA			2
16124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TMP_DH			3
16134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TMP_ECDH			4
16144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TMP_RSA_CB			5
16154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TMP_DH_CB			6
16164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TMP_ECDH_CB		7
16174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_SESSION_REUSED		8
16194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_CLIENT_CERT_REQUEST	9
16204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_NUM_RENEGOTIATIONS		10
16214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS	11
16224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS	12
16234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_FLAGS			13
16244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_EXTRA_CHAIN_CERT		14
16254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_MSG_CALLBACK               15
16274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_MSG_CALLBACK_ARG           16
16284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* only applies to datagram connections */
16304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_MTU                17
16314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Stats */
16324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_NUMBER			20
16334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_CONNECT			21
16344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_CONNECT_GOOD		22
16354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_CONNECT_RENEGOTIATE	23
16364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_ACCEPT			24
16374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_ACCEPT_GOOD		25
16384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE	26
16394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_HIT			27
16404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_CB_HIT			28
16414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_MISSES			29
16424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_TIMEOUTS			30
16434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SESS_CACHE_FULL		31
16444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_OPTIONS			32
16454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_MODE				33
16464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_READ_AHEAD			40
16484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_READ_AHEAD			41
16494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_SESS_CACHE_SIZE		42
16504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_SESS_CACHE_SIZE		43
16514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_SESS_CACHE_MODE		44
16524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_SESS_CACHE_MODE		45
16534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_MAX_CERT_LIST		50
16554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_MAX_CERT_LIST		51
16564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_MAX_SEND_FRAGMENT		52
16584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* see tls1.h for macros based on these */
16604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB	53
16614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG	54
16624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_HOSTNAME		55
16634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_DEBUG_CB		56
16644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_DEBUG_ARG		57
16654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_TLSEXT_TICKET_KEYS		58
16664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_TICKET_KEYS		59
16674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB	63
16684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG	64
16694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB	72
16714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB	75
16734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB		76
16744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB		77
16754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_SRP_ARG		78
16774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME		79
16784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH		80
16794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD		81
16804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DTLS_CTRL_GET_TIMEOUT		73
16824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DTLS_CTRL_HANDLE_TIMEOUT	74
16834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DTLS_CTRL_LISTEN			75
16844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_RI_SUPPORT			76
16864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CLEAR_OPTIONS			77
16874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CLEAR_MODE			78
16884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_EXTRA_CHAIN_CERTS		82
16904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS	83
16914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CHAIN				88
16934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CHAIN_CERT			89
16944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
16954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_CURVES			90
16964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_CURVES			91
16974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_CURVES_LIST		92
16984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_ECDH_AUTO			94
16994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_SIGALGS			97
17004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_SIGALGS_LIST		98
17014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CERT_FLAGS			99
17024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CLEAR_CERT_FLAGS		100
17034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_CLIENT_SIGALGS		101
17044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_CLIENT_SIGALGS_LIST	102
17054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_CLIENT_CERT_TYPES		103
17064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_CLIENT_CERT_TYPES		104
17074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_BUILD_CERT_CHAIN		105
17084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_VERIFY_CERT_STORE		106
17094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_CHAIN_CERT_STORE		107
17104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_PEER_SIGNATURE_NID		108
17114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_SERVER_TMP_KEY		109
17124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_RAW_CIPHERLIST		110
17134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_EC_POINT_FORMATS		111
17144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_CHAIN_CERTS		115
17164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SELECT_CURRENT_CERT		116
17174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_CHANNEL_ID			117
17194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_GET_CHANNEL_ID			118
17204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_SET_CHANNEL_ID			119
17214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTRL_FALLBACK_SCSV			120
17234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DTLSv1_get_timeout(ssl, arg) \
17254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg)
17264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DTLSv1_handle_timeout(ssl) \
17274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL)
17284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DTLSv1_listen(ssl, peer) \
17294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer)
17304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_session_reused(ssl) \
17324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)
17334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_num_renegotiations(ssl) \
17344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)
17354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_clear_num_renegotiations(ssl) \
17364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)
17374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_total_renegotiations(ssl) \
17384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)
17394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_need_tmp_RSA(ctx) \
17414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)
17424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_tmp_rsa(ctx,rsa) \
17434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)
17444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_tmp_dh(ctx,dh) \
17454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh)
17464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
17474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
17484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_need_tmp_RSA(ssl) \
17504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL)
17514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_tmp_rsa(ssl,rsa) \
17524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)
17534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_tmp_dh(ssl,dh) \
17544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh)
17554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_tmp_ecdh(ssl,ecdh) \
17564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
17574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SSL_enable_tls_channel_id either configures a TLS server to accept TLS client
17594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * IDs from clients, or configure a client to send TLS client IDs to server.
17604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Returns 1 on success. */
17614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_enable_tls_channel_id(s) \
17624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_CHANNEL_ID,0,NULL)
17634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SSL_set1_tls_channel_id configures a TLS client to send a TLS Channel ID to
17644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * compatible servers. private_key must be a P-256 EVP_PKEY*. Returns 1 on
17654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * success. */
17664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_tls_channel_id(s, private_key) \
17674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_SET_CHANNEL_ID,0,(void*)private_key)
17684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_tls_channel_id(ctx, private_key) \
17694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHANNEL_ID,0,(void*)private_key)
17704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SSL_get_tls_channel_id gets the client's TLS Channel ID from a server SSL*
17714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * and copies up to the first |channel_id_len| bytes into |channel_id|. The
17724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Channel ID consists of the client's P-256 public key as an (x,y) pair where
17734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * each is a 32-byte, big-endian field element. Returns 0 if the client didn't
17744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * offer a Channel ID and the length of the complete Channel ID otherwise. */
17754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_tls_channel_id(ctx, channel_id, channel_id_len) \
17764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_GET_CHANNEL_ID,channel_id_len,(void*)channel_id)
17774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_add_extra_chain_cert(ctx,x509) \
17794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
17804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_extra_chain_certs(ctx,px509) \
17814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509)
17824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \
17834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509)
17844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_clear_extra_chain_certs(ctx) \
17854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL)
17864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
17874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set0_chain(ctx,sk) \
17884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk)
17894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_chain(ctx,sk) \
17904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk)
17914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_add0_chain_cert(ctx,x509) \
17924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509)
17934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_add1_chain_cert(ctx,x509) \
17944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509)
17954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get0_chain_certs(ctx,px509) \
17964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
17974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_clear_chain_certs(ctx) \
17984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_set0_chain(ctx,NULL)
17994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_build_cert_chain(ctx, flags) \
18004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
18014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_select_current_cert(ctx,x509) \
18024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509)
18034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set0_verify_cert_store(ctx,st) \
18054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st)
18064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_verify_cert_store(ctx,st) \
18074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st)
18084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set0_chain_cert_store(ctx,st) \
18094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st)
18104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_chain_cert_store(ctx,st) \
18114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st)
18124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set0_chain(ctx,sk) \
18144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk)
18154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_chain(ctx,sk) \
18164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk)
18174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_add0_chain_cert(ctx,x509) \
18184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509)
18194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_add1_chain_cert(ctx,x509) \
18204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509)
18214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get0_chain_certs(ctx,px509) \
18224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
18234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_clear_chain_certs(ctx) \
18244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_set0_chain(ctx,NULL)
18254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_build_cert_chain(s, flags) \
18264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
18274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_select_current_cert(ctx,x509) \
18284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509)
18294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set0_verify_cert_store(s,st) \
18314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st)
18324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_verify_cert_store(s,st) \
18334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st)
18344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set0_chain_cert_store(s,st) \
18354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st)
18364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_chain_cert_store(s,st) \
18374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st)
18384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get1_curves(ctx, s) \
18404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_GET_CURVES,0,(char *)s)
18414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_curves(ctx, clist, clistlen) \
18424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist)
18434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_curves_list(ctx, s) \
18444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s)
18454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_curves(ctx, clist, clistlen) \
18464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist)
18474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_curves_list(ctx, s) \
18484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s)
18494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_ecdh_auto(ctx, onoff) \
18504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL)
18514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_ecdh_auto(s, onoff) \
18524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL)
18534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \
18554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist)
18564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_sigalgs_list(ctx, s) \
18574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s)
18584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_sigalgs(ctx, slist, slistlen) \
18594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,clistlen,(int *)slist)
18604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_sigalgs_list(ctx, s) \
18614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s)
18624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \
18644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)slist)
18654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_client_sigalgs_list(ctx, s) \
18664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s)
18674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_client_sigalgs(ctx, slist, slistlen) \
18684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)slist)
18694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_client_sigalgs_list(ctx, s) \
18704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s)
18714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get0_certificate_types(s, clist) \
18734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)clist)
18744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \
18764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist)
18774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set1_client_certificate_types(s, clist, clistlen) \
18784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist)
18794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_peer_signature_nid(s, pn) \
18814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn)
18824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_server_tmp_key(s, pk) \
18844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk)
18854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get0_raw_cipherlist(s, plst) \
18874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,(char *)plst)
18884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get0_ec_point_formats(s, plst) \
18904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,(char *)plst)
18914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_enable_fallback_scsv(s) \
18934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(s, SSL_CTRL_FALLBACK_SCSV, 0, NULL)
18944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
18954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_BIO
1896eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIO_METHOD *BIO_f_ssl(void);
1897eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIO *BIO_new_ssl(SSL_CTX *ctx,int client);
1898eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
1899eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
1900eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void BIO_ssl_shutdown(BIO *ssl_bio);
19014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
19024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
19034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1904eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);
1905eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_set_cipher_list_tls11(SSL_CTX *,const char *str);
1906eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
1907eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_CTX_free(SSL_CTX *);
1908eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long SSL_CTX_set_timeout(SSL_CTX *ctx,long t);
1909eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long SSL_CTX_get_timeout(const SSL_CTX *ctx);
1910eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *);
1911eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_cert_store(SSL_CTX *,X509_STORE *);
1912eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_want(const SSL *s);
1913eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_clear(SSL *s);
1914eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley
1915eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_CTX_flush_sessions(SSL_CTX *ctx,long tm);
1916eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley
1917eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_CIPHER *SSL_get_current_cipher(const SSL *s);
1918eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CIPHER_get_bits(const SSL_CIPHER *c,int *alg_bits);
1919eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *	SSL_CIPHER_get_version(const SSL_CIPHER *c);
1920eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *	SSL_CIPHER_get_name(const SSL_CIPHER *c);
1921f1df2b3fbffd55e6697e8c8ac21e1639bb479310Adam Langley/* SSL_CIPHER_get_kx_name returns a string that describes the key-exchange
1922f1df2b3fbffd55e6697e8c8ac21e1639bb479310Adam Langley * method used by |c|. For example, "ECDHE-ECDSA". */
1923f1df2b3fbffd55e6697e8c8ac21e1639bb479310Adam LangleyOPENSSL_EXPORT const char *	SSL_CIPHER_get_kx_name(const SSL_CIPHER *cipher);
1924eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned long 	SSL_CIPHER_get_id(const SSL_CIPHER *c);
1925eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley
1926eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_get_fd(const SSL *s);
1927eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_get_rfd(const SSL *s);
1928eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_get_wfd(const SSL *s);
1929eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char  * SSL_get_cipher_list(const SSL *s,int n);
1930eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT char *	SSL_get_shared_ciphers(const SSL *s, char *buf, int len);
1931eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_get_read_ahead(const SSL * s);
1932eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_pending(const SSL *s);
19334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_SOCK
1934eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_set_fd(SSL *s, int fd);
1935eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_set_rfd(SSL *s, int fd);
1936eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_set_wfd(SSL *s, int fd);
19374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
19384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_BIO
1939eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_set_bio(SSL *s, BIO *rbio,BIO *wbio);
1940eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIO *	SSL_get_rbio(const SSL *s);
1941eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIO *	SSL_get_wbio(const SSL *s);
19424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
1943eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_set_cipher_list(SSL *s, const char *str);
1944eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_set_read_ahead(SSL *s, int yes);
1945eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_get_verify_mode(const SSL *s);
1946eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_get_verify_depth(const SSL *s);
1947eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	(*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *);
1948eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_set_verify(SSL *s, int mode, int (*callback)(int ok,X509_STORE_CTX *ctx));
1949eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_set_verify_depth(SSL *s, int depth);
1950eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_cert_cb(SSL *s, int (*cb)(SSL *ssl, void *arg), void *arg);
1951eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
1952eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);
1953eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
1954eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_PrivateKey_ASN1(int pk,SSL *ssl, const unsigned char *d, long len);
1955eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_certificate(SSL *ssl, X509 *x);
1956eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);
19574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
19584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_STDIO
1959eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
1960eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
1961eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_use_certificate_file(SSL *ssl, const char *file, int type);
1962eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);
1963eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
1964eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
1965eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); /* PEM type */
1966eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);
1967eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *file);
19684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_SYS_VMS
19694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_SYS_MACINTOSH_CLASSIC /* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */
1970eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *dir);
19714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
19724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
19734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
19744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
19754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
1976eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_load_error_strings(void );
1977eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_state_string(const SSL *s);
1978eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_rstate_string(const SSL *s);
1979eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_state_string_long(const SSL *s);
1980eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_rstate_string_long(const SSL *s);
1981eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long	SSL_SESSION_get_time(const SSL_SESSION *s);
1982eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long	SSL_SESSION_set_time(SSL_SESSION *s, long t);
1983eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long	SSL_SESSION_get_timeout(const SSL_SESSION *s);
1984eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long	SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
1985eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT X509 *SSL_SESSION_get0_peer(SSL_SESSION *s);
1986eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_SESSION_set1_id_context(SSL_SESSION *s,const unsigned char *sid_ctx, unsigned int sid_ctx_len);
1987eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley
1988eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_SESSION *SSL_SESSION_new(void);
1989eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len);
19904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_FP_API
1991eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_SESSION_print_fp(FILE *fp,const SSL_SESSION *ses);
19924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
19934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_BIO
1994eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_SESSION_print(BIO *fp,const SSL_SESSION *ses);
19954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
1996eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_SESSION_free(SSL_SESSION *ses);
1997eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp);
1998eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_set_session(SSL *to, SSL_SESSION *session);
1999eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);
2000eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c);
2001eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB);
2002eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_set_generate_session_id(SSL *, GEN_SESSION_CB);
2003eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, unsigned int id_len);
2004eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a,const unsigned char **pp, long length);
20054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
20064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef HEADER_X509_H
2007eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT X509 *	SSL_get_peer_certificate(const SSL *s);
20084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
20094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2010eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s);
20114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2012eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_get_verify_mode(const SSL_CTX *ctx);
2013eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_get_verify_depth(const SSL_CTX *ctx);
2014eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *);
2015eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,
20164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			int (*callback)(int, X509_STORE_CTX *));
2017eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth);
2018eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg);
2019eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb)(SSL *ssl, void *arg), void *arg);
2020eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
2021eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len);
2022eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
2023eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_use_PrivateKey_ASN1(int pk,SSL_CTX *ctx,
20244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const unsigned char *d, long len);
2025eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
2026eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d);
20274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2028eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);
2029eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);
20304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2031eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_check_private_key(const SSL_CTX *ctx);
2032eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_check_private_key(const SSL *ctx);
20334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2034eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx, unsigned int sid_ctx_len);
20354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2036eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL *	SSL_new(SSL_CTX *ctx);
2037eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx, unsigned int sid_ctx_len);
20384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2039eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_set_purpose(SSL_CTX *s, int purpose);
2040eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set_purpose(SSL *s, int purpose);
2041eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_set_trust(SSL_CTX *s, int trust);
2042eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set_trust(SSL *s, int trust);
20434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2044eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm);
2045eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm);
20464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2047eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx);
2048eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl);
20494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2050eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_certs_clear(SSL *s);
2051eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void	SSL_free(SSL *ssl);
2052eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int 	SSL_accept(SSL *ssl);
2053eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int 	SSL_connect(SSL *ssl);
2054eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int 	SSL_read(SSL *ssl,void *buf,int num);
2055eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int 	SSL_peek(SSL *ssl,void *buf,int num);
2056eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int 	SSL_write(SSL *ssl,const void *buf,int num);
2057eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long	SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg);
2058eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long	SSL_callback_ctrl(SSL *, int, void (*)(void));
2059eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long	SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, void *parg);
2060eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long	SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));
20614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2062eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int	SSL_get_error(const SSL *s,int ret_code);
20630f4746e207c075291081da66310f0ba1a709c120Adam Langley/* SSL_get_version returns a string describing the TLS version used by |s|. For
20640f4746e207c075291081da66310f0ba1a709c120Adam Langley * example, "TLSv1.2" or "SSLv3". */
2065eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_get_version(const SSL *s);
20660f4746e207c075291081da66310f0ba1a709c120Adam Langley/* SSL_SESSION_get_version returns a string describing the TLS version used by
20670f4746e207c075291081da66310f0ba1a709c120Adam Langley * |sess|. For example, "TLSv1.2" or "SSLv3". */
20680f4746e207c075291081da66310f0ba1a709c120Adam LangleyOPENSSL_EXPORT const char *SSL_SESSION_get_version(const SSL_SESSION *sess);
20694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2070eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CIPHER_is_AES(const SSL_CIPHER *c);
2071eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CIPHER_has_MD5_HMAC(const SSL_CIPHER *c);
2072eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CIPHER_is_AESGCM(const SSL_CIPHER *c);
2073eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CIPHER_is_CHACHA20POLY1305(const SSL_CIPHER *c);
20744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
20754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This sets the 'default' SSL version that SSL_new() will create */
2076eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);
20774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2078eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *SSLv3_method(void);		/* SSLv3 */
2079eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *SSLv3_server_method(void);	/* SSLv3 */
2080eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *SSLv3_client_method(void);	/* SSLv3 */
20814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2082eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *SSLv23_method(void);	/* SSLv3 but can rollback to v2 */
2083eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *SSLv23_server_method(void);	/* SSLv3 but can rollback to v2 */
2084eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *SSLv23_client_method(void);	/* SSLv3 but can rollback to v2 */
20854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2086eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_method(void);		/* TLSv1.0 */
2087eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_server_method(void);	/* TLSv1.0 */
2088eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_client_method(void);	/* TLSv1.0 */
20894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2090eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_1_method(void);		/* TLSv1.1 */
2091eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_1_server_method(void);	/* TLSv1.1 */
2092eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_1_client_method(void);	/* TLSv1.1 */
20934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2094eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_2_method(void);		/* TLSv1.2 */
2095eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_2_server_method(void);	/* TLSv1.2 */
2096eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *TLSv1_2_client_method(void);	/* TLSv1.2 */
20974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
20984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2099eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLSv1_method(void);		/* DTLSv1.0 */
2100eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLSv1_server_method(void);	/* DTLSv1.0 */
2101eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLSv1_client_method(void);	/* DTLSv1.0 */
21024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2103eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLSv1_2_method(void);	/* DTLSv1.2 */
2104eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLSv1_2_server_method(void);	/* DTLSv1.2 */
2105eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLSv1_2_client_method(void);	/* DTLSv1.2 */
21064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2107eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLS_method(void);		/* DTLS 1.0 and 1.2 */
2108eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLS_server_method(void);	/* DTLS 1.0 and 1.2 */
2109eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *DTLS_client_method(void);	/* DTLS 1.0 and 1.2 */
21104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2111eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);
21124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2113eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_do_handshake(SSL *s);
2114eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_renegotiate(SSL *s);
2115eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_renegotiate_abbreviated(SSL *s);
2116eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_renegotiate_pending(SSL *s);
2117eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_shutdown(SSL *s);
21184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2119eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx);
2120eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const SSL_METHOD *SSL_get_ssl_method(SSL *s);
2121eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method);
2122eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_alert_type_string_long(int value);
2123eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_alert_type_string(int value);
2124eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_alert_desc_string_long(int value);
2125eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_alert_desc_string(int value);
21264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2127eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
2128eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
2129eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);
2130eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s);
2131eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_add_client_CA(SSL *ssl,X509 *x);
2132eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x);
21334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2134eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_connect_state(SSL *s);
2135eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_accept_state(SSL *s);
21364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2137eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long SSL_get_default_timeout(const SSL *s);
21384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2139eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_library_init(void );
21404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2141eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_CIPHER_description(const SSL_CIPHER *,char *buf,int size);
2142eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk);
21434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2144eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT X509 *SSL_get_certificate(const SSL *ssl);
2145eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT /* EVP_PKEY */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl);
21464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2147eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);
2148eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);
21494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2150eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode);
2151eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
2152eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_quiet_shutdown(SSL *ssl,int mode);
2153eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_get_quiet_shutdown(const SSL *ssl);
2154eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_shutdown(SSL *ssl,int mode);
2155eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_get_shutdown(const SSL *ssl);
2156eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_version(const SSL *ssl);
2157eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
2158eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
21594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	const char *CApath);
21604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get0_session SSL_get_session /* just peek at pointer */
2161eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_SESSION *SSL_get_session(const SSL *ssl);
2162eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */
2163eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
2164eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx);
2165eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_info_callback(SSL *ssl,
21664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley			   void (*cb)(const SSL *ssl,int type,int val));
2167eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void (*SSL_get_info_callback(const SSL *ssl))(const SSL *ssl,int type,int val);
2168eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_state(const SSL *ssl);
2169eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_state(SSL *ssl, int state);
21704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2171eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_verify_result(SSL *ssl,long v);
2172eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long SSL_get_verify_result(const SSL *ssl);
21734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2174eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set_ex_data(SSL *ssl,int idx,void *data);
2175eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *SSL_get_ex_data(const SSL *ssl,int idx);
2176eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
21774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
21784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2179eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_SESSION_set_ex_data(SSL_SESSION *ss,int idx,void *data);
2180eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss,int idx);
2181eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
21824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
21834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2184eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_set_ex_data(SSL_CTX *ssl,int idx,void *data);
2185eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *SSL_CTX_get_ex_data(const SSL_CTX *ssl,int idx);
2186eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
21874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
21884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2189eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_get_ex_data_X509_STORE_CTX_idx(void );
21904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
21914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_set_cache_size(ctx,t) \
21924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL)
21934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_sess_get_cache_size(ctx) \
21944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL)
21954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_session_cache_mode(ctx,m) \
21964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)
21974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_session_cache_mode(ctx) \
21984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL)
21994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx)
22014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m)
22024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_read_ahead(ctx) \
22034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)
22044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_read_ahead(ctx,m) \
22054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)
22064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_get_max_cert_list(ctx) \
22074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
22084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_max_cert_list(ctx,m) \
22094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
22104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_get_max_cert_list(ssl) \
22114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
22124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_max_cert_list(ssl,m) \
22134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
22144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_CTX_set_max_send_fragment(ctx,m) \
22164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)
22174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_set_max_send_fragment(ssl,m) \
22184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley	SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)
22194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley     /* NB: the keylength is only applicable when is_export is true */
2221eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,
22224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				  RSA *(*cb)(SSL *ssl,int is_export,
22234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					     int keylength));
22244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2225eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_tmp_rsa_callback(SSL *ssl,
22264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				  RSA *(*cb)(SSL *ssl,int is_export,
22274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					     int keylength));
2228eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
22294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				 DH *(*dh)(SSL *ssl,int is_export,
22304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   int keylength));
2231eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_tmp_dh_callback(SSL *ssl,
22324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				 DH *(*dh)(SSL *ssl,int is_export,
22334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   int keylength));
2234eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,
22354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				 EC_KEY *(*ecdh)(SSL *ssl,int is_export,
22364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   int keylength));
2237eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_tmp_ecdh_callback(SSL *ssl,
22384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley				 EC_KEY *(*ecdh)(SSL *ssl,int is_export,
22394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley					   int keylength));
22404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2241eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const void *SSL_get_current_compression(SSL *s);
2242eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const void *SSL_get_current_expansion(SSL *s);
2243eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_COMP_get_name(const void *comp);
2244eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *SSL_COMP_get_compression_methods(void);
2245eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_COMP_add_compression_method(int id,void *cm);
22464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* TLS extensions functions */
2248eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len);
22494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2250eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, void *arg);
22514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Pre-shared secret session resumption functions */
2253eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_set_session_secret_cb(SSL *s, tls_session_secret_cb_fn tls_session_secret_cb, void *arg);
22544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2255eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_set_debug(SSL *s, int debug);
2256eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_cache_hit(SSL *s);
2257eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_is_server(SSL *s);
22584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SSL_get_structure_sizes returns the sizes of the SSL, SSL_CTX and
22604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SSL_SESSION structures so that a test can ensure that outside code agrees on
22614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * these values. */
2262eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_get_structure_sizes(size_t* ssl_size, size_t* ssl_ctx_size, size_t* ssl_session_size);
22634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2264eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT SSL_CONF_CTX *SSL_CONF_CTX_new(void);
2265eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx);
2266eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
2267eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
2268eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags);
2269eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre);
22704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2271eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
2272eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);
22734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2274eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
2275eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
2276eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
22774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_SSL_TRACE
2279eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SSL_trace(int write_p, int version, int content_type,
22804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley		const void *buf, size_t len, SSL *ssl, void *arg);
2281eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c);
22824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
22834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
2284eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ERR_load_SSL_strings(void);
22854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
22874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef  __cplusplus
22884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley}
22894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
22902e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin
22912e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin/* BEGIN ERROR CODES */
22922e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin/* The following lines are auto generated by the script make_errors.go. Any
22932e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin * changes made after this point may be overwritten when the script is next run.
22942e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin */
22954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_PrivateKey_file 100
22964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_write_app_data_bytes 101
22974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_cipher_process_rulestr 102
22984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_set_session_id_context 103
22994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_read 104
23004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_cert_new 105
23014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_heartbeat 106
23024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_digest_cached_records 107
23034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_set_wfd 108
23044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_set_pkey 110
23054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_certificate 111
23064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_read_bytes 112
23074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl23_write 113
23084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_check_client_hello 114
23094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_certificate_ASN1 115
23104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_verify_cert_chain 116
23114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_parse_serverhello_renegotiate_ext 117
23124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_undefined_const_function 118
23134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_server_certificate 119
23144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_get_server_supplemental_data 120
23154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_buffer_record 121
23164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_prepare_clienthello_tlsext 122
23174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_server_hello 123
23184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_send_client_key_exchange 124
23194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_write_bytes 125
23204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_RSAPrivateKey_file 126
23214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_bad_method 127
23224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_connect 128
23234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_connect 129
23244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_RSAPrivateKey 130
23254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_PRF 131
23264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_bytes_to_cipher_list 132
23274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_do_change_cipher_spec 133
23284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_SESSION_set1_id_context 134
23294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_add_serverhello_tlsext 135
23304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_read_authz 136
23314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_client_hello 137
23324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_certificate_request 138
23334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_authz_find_data 139
23344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_add_cert_to_buf 140
23354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_add_serverhello_renegotiate_ext 141
23364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_message 142
23374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_check_srvr_ecc_cert_and_alg 143
23384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_parse_clienthello_tlsext 144
23394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_add_file_cert_subjects_to_stack 145
23404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_ctx_ctrl 146
23414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_record 147
23424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_RSAPrivateKey 148
23434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_certificate_file 149
23444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_load_client_CA_file 151
23454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_preprocess_fragment 152
23464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_check_private_key 153
23474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_cert_status 154
23484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_printf 155
23494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_new 156
23504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl23_accept 157
23514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_authz 158
23524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_undefined_function 159
23534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_send_hello_verify_request 160
23544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_build_cert_chain 161
23554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_SESSION_print_fp 162
23564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_change_cipher_state 163
23574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls12_check_peer_sigalg 164
23584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_sess_cert_new 165
23594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_read_bytes 166
23604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_get_hello_verify 167
23614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_cert_verify_mac 168
23624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl23_client_hello 169
23634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_shutdown 170
23644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_init_wbio_buffer 171
23654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_certificate 172
23664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_RSAPrivateKey_ASN1 173
23674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_set_authz 174
23684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl23_peek 175
23694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_psk_identity_hint 176
23704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_cert_verify 177
23714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_ctx_make_profiles 178
23724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_add_clienthello_use_srtp_ext 179
23734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_client_key_exchange 180
23744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_do_ssl3_write 181
23754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_handshake_mac 182
23764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_setup_key_block 183
23774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_set_fd 184
23784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_check_private_key 185
23798da990677b852daff3f6e4a10d9c80c7b4822a06David Benjamin#define SSL_F_ssl3_send_cert_verify 186
23804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_write_pending 187
23814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_cert_inst 188
23824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_change_cipher_state 189
23834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl23_get_server_hello 190
23844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_write 191
23854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_get_sign_pkey 192
23864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_set_cert 193
23874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_RSAPrivateKey_file 194
23884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_authz 195
23894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_get_new_session 196
23904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_set_session_ticket_ext 197
23914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_add_clienthello_renegotiate_ext 198
23924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_send_server_key_exchange 199
23934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_fprintf 200
23944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_new_session_ticket 201
23954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_certificate_ASN1 202
23964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_add_cert_chain 203
23974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_create_cipher_list 204
23984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_callback_ctrl 205
23994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_set_cipher_list 206
24004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_send_certificate_request 207
24014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_PrivateKey_ASN1 208
24024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_certificate_chain_file 209
24034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_SESSION_new 210
24044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_check_suiteb_cipher_list 211
24054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_scan_clienthello_tlsext 212
24068da990677b852daff3f6e4a10d9c80c7b4822a06David Benjamin#define SSL_F_ssl3_send_client_hello 213
24074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_RSAPrivateKey_ASN1 214
24084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_ctrl 215
24094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_setup_write_buffer 216
24104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_parse_serverhello_use_srtp_ext 217
24118f8040dd4fdf4531391c5653230a6fe3a24cf5bfDavid Benjamin#define SSL_F_ssl3_get_server_key_exchange 218
24124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_send_server_hello 219
24134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_add_dir_cert_subjects_to_stack 220
24144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_check_serverhello_tlsext 221
24154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_server_done 222
24164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_check_cert_and_algorithm 223
24174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_do_dtls1_write 224
24184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_check_timeout_num 225
24194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_export_keying_material 226
24204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_set_session_id_context 227
24214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_set_rfd 228
24224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_send_client_certificate 229
24234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_cert_dup 230
24244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_process_record 231
24254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_new 232
24264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_get_server_cert_index 233
24274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_send_server_supplemental_data 234
24284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_D2I_SSL_SESSION 235
24294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_cipher_strength_sort 236
24304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_get_message 237
24314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl23_connect 238
24324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_heartbeat 239
24334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_read_n 240
24344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_get_prev_session 241
24354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_parse_clienthello_renegotiate_ext 242
24364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_setup_read_buffer 243
24374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_set_ssl_version 244
24384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_peek 245
24394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_send_server_certificate 246
24404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_do_handshake 247
24414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_undefined_void_function 248
24424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_add_serverhello_use_srtp_ext 249
24434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_fclose 250
24444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_use_PrivateKey 251
24454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_certificate_file 252
24464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_PrivateKey 253
24474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_set_session 254
24484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_psk_identity_hint 255
24494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_scan_serverhello_tlsext 256
24504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl23_read 257
24514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_parse_clienthello_use_srtp_ext 258
24524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_accept 259
24534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_client_certificate 260
24544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_PrivateKey_ASN1 261
24554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_get_message_fragment 262
24564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_clear 263
24574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_dtls1_accept 264
24584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_next_proto 265
24594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_set_cipher_list 266
24604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_add_clienthello_tlsext 267
24614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl23_get_client_hello 268
24624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_use_PrivateKey_file 269
24634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_finished 270
24644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_generate_key_block 271
24654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_setup_key_block 272
24664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_new 273
24674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl_parse_serverhello_tlsext 274
24684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_get_channel_id 275
24694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_ssl3_send_channel_id 276
24704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_SSL_CTX_set_cipher_list_tls11 277
24714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_change_cipher_state_cipher 278
24724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_change_cipher_state_aead 279
24734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_aead_ctx_init 280
24744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_F_tls1_check_duplicate_extensions 281
247586271ee9f866cd83d9e37ab1ba1218ebefb336aaDavid Benjamin#define SSL_F_ssl3_expect_change_cipher_spec 282
247698e882ead190c002cff0ef0d964854346bb82389David Benjamin#define SSL_F_ssl23_get_v2_client_hello 283
2477854dd654d1cf168397b6df8d6a4964288d206e2fDavid Benjamin#define SSL_F_ssl3_cert_verify_hash 284
2478859ec3cc09f244348f3c919693817acb01064535David Benjamin#define SSL_F_ssl_ctx_log_rsa_client_key_exchange 285
2479859ec3cc09f244348f3c919693817acb01064535David Benjamin#define SSL_F_ssl_ctx_log_master_secret 286
24804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 100
24814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 101
24824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_NULL_CMD_NAME 102
24834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_RSA_DECRYPT 103
24844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_SHARED_CIPHER 104
24854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH 105
24864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL_HANDSHAKE_FAILURE 106
24874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_TICKET_KEYS_LENGTH 107
24884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PEER_ERROR 108
24894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ECC_CERT_NOT_FOR_SIGNING 109
24904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INCONSISTENT_COMPRESSION 110
24914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_HELLO_REQUEST 111
24924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NULL_SSL_METHOD_PASSED 112
24934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 113
24944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_ECDSA_SIGNATURE 114
24954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION 115
24964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_DH_PUB_KEY_LENGTH 116
24974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_COMPRESSED_LENGTH_TOO_LONG 117
24984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_APP_DATA_IN_HANDSHAKE 118
24994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_PEM_EXTENSIONS 119
25004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SRP_B_LENGTH 120
25014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 121
25024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_DECODE_DH_CERTS 122
25034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_SRP_PARAM 123
25044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_RSA_SIGNING_CERT 124
25054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_DSA_SIGNING_CERT 125
25064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE 126
25074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNEXPECTED_RECORD 127
25084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_DIGEST_LENGTH 128
25094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_READ_TIMEOUT_EXPIRED 129
25104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_C_GET_CRED 130
25114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NULL_SSL_CTX 131
25124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ERROR_GENERATING_TMP_RSA_KEY 134
25134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL3_SESSION_ID_TOO_LONG 135
25144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 136
25154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO 137
25164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_COOKIE_MISMATCH 139
25174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNINITIALIZED 140
25184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_CHANGE_CIPHER_SPEC 141
25194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 142
25204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SRP_G_LENGTH 143
25214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CERTIFICATE_ASSIGNED 144
25224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 145
25234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PEM_NAME_TOO_SHORT 146
25244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PROTOCOL_IS_SHUTDOWN 148
25254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_FIND_SSL_METHOD 149
25264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_MESSAGE_TYPE 150
25274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_RSA_MODULUS_LENGTH 151
25284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PUBLIC_KEY_IS_NOT_RSA 152
25294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 153
25304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CLIENT_CERT_RECEIVED 154
25314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 155
25324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CERT_LENGTH_MISMATCH 156
25334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_EXPORT_TMP_DH_KEY 157
25344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DUPLICATE_COMPRESSION_ID 158
25354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT 159
25364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO 160
25374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DATA_LENGTH_TOO_LONG 161
25384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 162
25394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_SIGNATURE_LENGTH 163
25404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL2_CONNECTION_ID_TOO_LONG 164
25414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_VERSION_NUMBER 165
25424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_RECORD_TOO_LARGE 166
25434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BIO_NOT_SET 167
25444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 168
25454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_PKEY_TYPE 170
25464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CIPHER_CODE_WRONG_LENGTH 171
25474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL_SESSION_ID_CONFLICT 172
25484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_COMMAND 173
25494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_PROTOCOLS_AVAILABLE 174
25504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 175
25514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_LIBRARY_BUG 176
25524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNSUPPORTED_CIPHER 177
25534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_REUSE_CERT_TYPE_NOT_ZERO 178
25544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_SIGNATURE_TYPE 179
25554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 180
25564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PSK_NO_SERVER_CB 181
25574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 182
25584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_TRUST 183
25594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PARSE_TLSEXT 184
25604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_SRTP_PROFILES 185
25614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 186
25624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_STATE 187
25634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_CERTIFICATE_TYPE 188
25644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_CIPHER_RETURNED 189
25654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_DH_G_LENGTH 190
25664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_ALERT_RECORD 191
25674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CIPHER_TABLE_SRC_ERROR 192
25684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE 194
25694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 195
25704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MESSAGE_TOO_LONG 196
25714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_RSA_SIGNATURE 197
25724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_X509_LIB 198
25734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SRP_N_LENGTH 199
25744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SSL_SESSION_ID_LENGTH 200
25754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_CIPHER_TYPE 201
25764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_DH_P_LENGTH 202
25774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_DH_RSA_CERT 203
25784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_METHOD_SPECIFIED 204
25794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 205
25804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MULTIPLE_SGC_RESTARTS 206
25814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS 207
25824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 208
25834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL3_EXT_INVALID_SERVERNAME 209
25844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SRP_S_LENGTH 210
25854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_TMP_RSA_KEY 211
25864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PSK_NO_CLIENT_CB 212
25874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PEM_NAME_BAD_PREFIX 213
25884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_CHECKSUM 214
25894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CIPHER_MATCH 216
25904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_TMP_DH_KEY 217
25914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNSUPPORTED_STATUS_TYPE 218
25924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_AUTHZ_DATA_TYPE 219
25934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CONNECTION_TYPE_NOT_SET 220
25944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_DH_KEY 221
25954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CHANNEL_ID_NOT_P256 222
25964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_SUPPLEMENTAL_DATA_TYPE 223
25974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_PROTOCOL 224
25984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 225
25994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_S_TKT_SKEW 226
26004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PUBLIC_KEY_NOT_RSA 227
26014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 228
26024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_GOST_NOT_SUPPORTED 229
26034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_C_CC_PRINC 230
26044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_PURPOSE 234
26054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_C_MK_REQ 235
26064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SRTP_MKI_VALUE 237
26074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_EVP_DIGESTSIGNINIT_FAILED 238
26084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DIGEST_CHECK_FAILED 239
26094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SRP_A_LENGTH 240
26104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SERVERHELLO_TLSEXT 241
26114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 242
26124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CIPHERS_AVAILABLE 243
26134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_COMPRESSION_FAILURE 244
26144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 245
26154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 246
26164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_RSA_ENCRYPT 247
26174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_EXCESSIVE_MESSAGE_SIZE 248
26184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_COMPRESSION_ALGORITHM 249
26194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SHORT_READ 250
26204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CA_DN_LENGTH_MISMATCH 252
26214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_ECC_CERT 253
26224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NON_SSLV2_INITIAL_PACKET 254
26234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL_SESSION_ID_IS_DIFFERENT 255
26244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_TMP_RSA_PKEY 256
26254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BN_LIB 257
26264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 258
26274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_RSA_ENCRYPTING_CERT 259
26284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_RENEGOTIATION 260
26294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_COMPRESSION_SPECIFIED 261
26304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_CERTIFICATE_TYPE 262
26314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CHANNEL_ID_SIGNATURE_INVALID 264
26324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_READ_BIO_NOT_SET 265
26334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL23_DOING_SESSION_ID_REUSE 266
26344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_RENEGOTIATE_EXT_TOO_LONG 267
26354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_CHALLENGE_LENGTH 268
26364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_LIBRARY_HAS_NO_CIPHERS 270
26374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_CURVE 271
26384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 272
26394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT 275
26404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_RSA_CERTIFICATE 276
26414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_P256_SUPPORT 277
26424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 278
26434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_SERVERINFO_DATA 279
26444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_GOT_CHANNEL_ID_BEFORE_A_CCS 280
26454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 281
26464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_S_BAD_TICKET 282
26474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_EVP_DIGESTSIGNFINAL_FAILED 283
26484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PACKET_LENGTH_TOO_LONG 284
26494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_STATE 285
26504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_USE_SRTP_NOT_NEGOTIATED 286
26514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_RSA_E_LENGTH 287
26524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ILLEGAL_PADDING 288
26534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 289
26544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_VALUE 290
26554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 291
26564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_COMPRESSION_DISABLED 292
26574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_DECOMPRESSION 293
26584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CHALLENGE_IS_DIFFERENT 294
26594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CLIENT_CERT_METHOD 295
26604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 296
26614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_MESSAGE 297
26624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_HTTPS_PROXY_REQUEST 298
26634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_AUTHZ_DATA_TOO_LARGE 299
26644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_S_TKT_EXPIRED 300
26654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CERTIFICATE_SPECIFIED 301
26664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 302
26674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 303
26684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_STATUS_RESPONSE 304
26694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 305
26704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE 306
26714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_TMP_ECDH_KEY 307
26724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CERTIFICATE_VERIFY_FAILED 308
26734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 309
26744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_RENEGOTIATION_ENCODING_ERR 310
26754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_PRIVATEKEY 311
26764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_READ_WRONG_PACKET_TYPE 313
26774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL3_SESSION_ID_TOO_SHORT 314
26784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES 315
26794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS 316
26804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_HTTP_REQUEST 317
26814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_S_INIT 318
26824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_RECORD_LENGTH_MISMATCH 320
26834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_LENGTH 321
26844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_REQUIRED_DIGEST 322
26854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5 323
26864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CCS_RECEIVED_EARLY 325
26874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_ECDSA_SIGNING_CERT 326
26884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_D2I_ECDSA_SIG 327
26894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PATH_TOO_LONG 328
26904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 329
26914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNSUPPORTED_DIGEST_TYPE 330
26924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 331
26934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PEER_ERROR_CERTIFICATE 332
26944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS 333
26954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CERTIFICATE_SET 334
26964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 335
26974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CERTIFICATES_RETURNED 337
26984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_WRITE_RETRY 338
26994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SSL_FILETYPE 339
27004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 340
27014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CIPHERS_SPECIFIED 341
27024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_LENGTH_MISMATCH 342
27034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CIPHERS_PASSED 343
27044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_VERIFY_CALLBACK 344
27054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 345
27064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_NUMBER_OF_KEY_BITS 347
27074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNEXPECTED_MESSAGE 348
27084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_DH_DSA_CERT 349
27094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 350
27104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 351
27114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 352
27124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ILLEGAL_SUITEB_DIGEST 353
27134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_SHARED_SIGATURE_ALGORITHMS 354
27144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CLIENTHELLO_TLSEXT 355
27154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_AUTHZ_DATA 356
27164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_RESPONSE_ARGUMENT 357
27174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR 358
27184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_REQUIRED_CIPHER_MISSING 359
27194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_AUDIT_PROOF 360
27204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PSK_IDENTITY_NOT_FOUND 361
27214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_ALERT_TYPE 362
27224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 363
27234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_AUTHENTICATION_TYPE 365
27244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DECRYPTION_FAILED 366
27254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_SSL_VERSION 367
27264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CERTIFICATE_RETURNED 368
27274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CA_DN_TOO_LONG 370
27284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_GOT_A_FIN_BEFORE_A_CCS 371
27294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_COMPRESSION_LIBRARY_ERROR 372
27304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 374
27314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 375
27324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_ECPOINT 376
27334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_HANDSHAKE_LENGTH 377
27344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_S_RD_REQ 380
27354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PEER_ERROR_NO_CERTIFICATE 381
27364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PRE_MAC_LENGTH_TOO_LONG 382
27374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 383
27384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_DIGEST 384
27394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRONG_SIGNATURE_SIZE 385
27404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SIGNATURE_ALGORITHMS_ERROR 386
27414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING 387
27424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_SIGNATURE 388
27434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_PACKET_LENGTH 389
27444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CANNOT_SERIALIZE_PUBLIC_KEY 390
27454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_RENEGOTIATION_MISMATCH 391
27464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_MAC_LENGTH 392
27474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_PUBLICKEY 393
27484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 394
27494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_MAC_DECODE 395
27504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_PRIVATE_KEY_ASSIGNED 396
27514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_EXTRA_DATA_IN_MESSAGE 397
27524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER 398
27534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CONNECTION_ID_IS_DIFFERENT 399
27544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_VERIFY_MESSAGE 402
27554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_DSA_SIGNATURE 403
27564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_SSL_VERSION 404
27574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KEY_ARG_TOO_LONG 405
27584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_C_INIT 406
27594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NO_CIPHER_LIST 407
27604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_PEER_ERROR_NO_CIPHER 408
27614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_CMD_NAME 409
27624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNKNOWN_CIPHER_RETURNED 410
27634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_RECORD_TOO_SMALL 411
27644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 412
27654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNSUPPORTED_SSL_VERSION 413
27664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY 415
27674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 416
27684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_DATA 417
27694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_KRB5_S_TKT_NYV 418
27704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 420
27714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_BAD_MESSAGE_TYPE 421
27724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MISSING_ECDH_CERT 422
27734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNSUPPORTED_PROTOCOL 423
27744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_SRP_A_CALC 424
27754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_WRITE_BIO_NOT_SET 425
27764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 426
27774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_LENGTH_TOO_SHORT 427
27784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CERT_CB_ERROR 428
27794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DTLS_MESSAGE_TOO_BIG 429
27804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INVALID_SRP_USERNAME 430
27814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_TOO_MANY_EMPTY_FRAGMENTS 431
27824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_NESTED_GROUP 432
27834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNEXPECTED_GROUP_CLOSE 433
27844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_UNEXPECTED_OPERATOR_IN_GROUP 434
27854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_MIXED_SPECIAL_OPERATOR_WITH_GROUPS 435
27864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_INAPPROPRIATE_FALLBACK 436
27874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CLIENTHELLO_PARSE_FAILED 437
27884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_CONNECTION_REJECTED 438
27894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SSL_R_DECODE_ERROR 439
279086271ee9f866cd83d9e37ab1ba1218ebefb336aaDavid Benjamin#define SSL_R_UNPROCESSED_HANDSHAKE_DATA 440
279186271ee9f866cd83d9e37ab1ba1218ebefb336aaDavid Benjamin#define SSL_R_HANDSHAKE_RECORD_BEFORE_CCS 441
27928eaaa86da3691e7729adc7c19004344633ffc9d1Adam Langley#define SSL_R_SESSION_MAY_NOT_BE_CREATED 442
2793d7c5368a0f67e8f393384170fe230bf9f598f4cbDavid Benjamin#define SSL_R_SSLV3_ALERT_CLOSE_NOTIFY 1000
27942e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010
27952e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020
27962e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021
27972e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022
27982e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030
27992e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040
28002e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041
28012e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042
28022e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043
28032e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044
28042e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045
28052e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046
28062e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047
28072e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048
28082e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049
28092e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050
28102e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051
28112e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060
28122e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070
28132e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071
28142e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080
2815d7c5368a0f67e8f393384170fe230bf9f598f4cbDavid Benjamin#define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086
28162e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090
28172e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100
28182e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110
28192e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111
28202e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112
28212e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113
28222e52121acd2befd3ad04953f94fae5e80d84b1a2David Benjamin#define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114
28234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley
28244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif
2825