os/ossrv/ssl/libcrypto/inc/include/openssl/ssl.h
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/ossrv/ssl/libcrypto/inc/include/openssl/ssl.h	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,2010 @@
     1.4 +/* ssl/ssl.h */
     1.5 +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
     1.6 + * All rights reserved.
     1.7 + *
     1.8 + * This package is an SSL implementation written
     1.9 + * by Eric Young (eay@cryptsoft.com).
    1.10 + * The implementation was written so as to conform with Netscapes SSL.
    1.11 + * 
    1.12 + * This library is free for commercial and non-commercial use as long as
    1.13 + * the following conditions are aheared to.  The following conditions
    1.14 + * apply to all code found in this distribution, be it the RC4, RSA,
    1.15 + * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
    1.16 + * included with this distribution is covered by the same copyright terms
    1.17 + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
    1.18 + * 
    1.19 + * Copyright remains Eric Young's, and as such any Copyright notices in
    1.20 + * the code are not to be removed.
    1.21 + * If this package is used in a product, Eric Young should be given attribution
    1.22 + * as the author of the parts of the library used.
    1.23 + * This can be in the form of a textual message at program startup or
    1.24 + * in documentation (online or textual) provided with the package.
    1.25 + * 
    1.26 + * Redistribution and use in source and binary forms, with or without
    1.27 + * modification, are permitted provided that the following conditions
    1.28 + * are met:
    1.29 + * 1. Redistributions of source code must retain the copyright
    1.30 + *    notice, this list of conditions and the following disclaimer.
    1.31 + * 2. Redistributions in binary form must reproduce the above copyright
    1.32 + *    notice, this list of conditions and the following disclaimer in the
    1.33 + *    documentation and/or other materials provided with the distribution.
    1.34 + * 3. All advertising materials mentioning features or use of this software
    1.35 + *    must display the following acknowledgement:
    1.36 + *    "This product includes cryptographic software written by
    1.37 + *     Eric Young (eay@cryptsoft.com)"
    1.38 + *    The word 'cryptographic' can be left out if the rouines from the library
    1.39 + *    being used are not cryptographic related :-).
    1.40 + * 4. If you include any Windows specific code (or a derivative thereof) from 
    1.41 + *    the apps directory (application code) you must include an acknowledgement:
    1.42 + *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
    1.43 + * 
    1.44 + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
    1.45 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1.46 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    1.47 + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    1.48 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    1.49 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    1.50 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    1.51 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    1.52 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    1.53 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    1.54 + * SUCH DAMAGE.
    1.55 + * 
    1.56 + * The licence and distribution terms for any publically available version or
    1.57 + * derivative of this code cannot be changed.  i.e. this code cannot simply be
    1.58 + * copied and put under another distribution licence
    1.59 + * [including the GNU Public Licence.]
    1.60 + */
    1.61 +/* ====================================================================
    1.62 + * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
    1.63 + *
    1.64 + * Redistribution and use in source and binary forms, with or without
    1.65 + * modification, are permitted provided that the following conditions
    1.66 + * are met:
    1.67 + *
    1.68 + * 1. Redistributions of source code must retain the above copyright
    1.69 + *    notice, this list of conditions and the following disclaimer. 
    1.70 + *
    1.71 + * 2. Redistributions in binary form must reproduce the above copyright
    1.72 + *    notice, this list of conditions and the following disclaimer in
    1.73 + *    the documentation and/or other materials provided with the
    1.74 + *    distribution.
    1.75 + *
    1.76 + * 3. All advertising materials mentioning features or use of this
    1.77 + *    software must display the following acknowledgment:
    1.78 + *    "This product includes software developed by the OpenSSL Project
    1.79 + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
    1.80 + *
    1.81 + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
    1.82 + *    endorse or promote products derived from this software without
    1.83 + *    prior written permission. For written permission, please contact
    1.84 + *    openssl-core@openssl.org.
    1.85 + *
    1.86 + * 5. Products derived from this software may not be called "OpenSSL"
    1.87 + *    nor may "OpenSSL" appear in their names without prior written
    1.88 + *    permission of the OpenSSL Project.
    1.89 + *
    1.90 + * 6. Redistributions of any form whatsoever must retain the following
    1.91 + *    acknowledgment:
    1.92 + *    "This product includes software developed by the OpenSSL Project
    1.93 + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
    1.94 + *
    1.95 + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
    1.96 + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1.97 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    1.98 + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
    1.99 + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   1.100 + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   1.101 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   1.102 + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   1.103 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   1.104 + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   1.105 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   1.106 + * OF THE POSSIBILITY OF SUCH DAMAGE.
   1.107 + * ====================================================================
   1.108 + *
   1.109 + * This product includes cryptographic software written by Eric Young
   1.110 + * (eay@cryptsoft.com).  This product includes software written by Tim
   1.111 + * Hudson (tjh@cryptsoft.com).
   1.112 + *
   1.113 + */
   1.114 +/* ====================================================================
   1.115 + * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.
   1.116 + *
   1.117 + * Redistribution and use in source and binary forms, with or without
   1.118 + * modification, are permitted provided that the following conditions
   1.119 + * are met:
   1.120 + *
   1.121 + * 1. Redistributions of source code must retain the above copyright
   1.122 + *    notice, this list of conditions and the following disclaimer. 
   1.123 + *
   1.124 + * 2. Redistributions in binary form must reproduce the above copyright
   1.125 + *    notice, this list of conditions and the following disclaimer in
   1.126 + *    the documentation and/or other materials provided with the
   1.127 + *    distribution.
   1.128 + *
   1.129 + * 3. All advertising materials mentioning features or use of this
   1.130 + *    software must display the following acknowledgment:
   1.131 + *    "This product includes software developed by the OpenSSL Project
   1.132 + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
   1.133 + *
   1.134 + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
   1.135 + *    endorse or promote products derived from this software without
   1.136 + *    prior written permission. For written permission, please contact
   1.137 + *    openssl-core@openssl.org.
   1.138 + *
   1.139 + * 5. Products derived from this software may not be called "OpenSSL"
   1.140 + *    nor may "OpenSSL" appear in their names without prior written
   1.141 + *    permission of the OpenSSL Project.
   1.142 + *
   1.143 + * 6. Redistributions of any form whatsoever must retain the following
   1.144 + *    acknowledgment:
   1.145 + *    "This product includes software developed by the OpenSSL Project
   1.146 + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
   1.147 + *
   1.148 + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
   1.149 + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   1.150 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   1.151 + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
   1.152 + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   1.153 + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   1.154 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   1.155 + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   1.156 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   1.157 + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   1.158 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   1.159 + * OF THE POSSIBILITY OF SUCH DAMAGE.
   1.160 + * ====================================================================
   1.161 + *
   1.162 + * This product includes cryptographic software written by Eric Young
   1.163 + * (eay@cryptsoft.com).  This product includes software written by Tim
   1.164 + * Hudson (tjh@cryptsoft.com).
   1.165 + *
   1.166 + */
   1.167 +/* ====================================================================
   1.168 + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
   1.169 + * ECC cipher suite support in OpenSSL originally developed by 
   1.170 + * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
   1.171 + */
   1.172 +
   1.173 +#ifndef HEADER_SSL_H 
   1.174 +#define HEADER_SSL_H 
   1.175 +
   1.176 +#if (defined(__SYMBIAN32__) && !defined(SYMBIAN))
   1.177 +#define SYMBIAN
   1.178 +#endif
   1.179 +
   1.180 +#include <openssl/e_os2.h>
   1.181 +
   1.182 +#ifndef OPENSSL_NO_COMP
   1.183 +#include <openssl/comp.h>
   1.184 +#endif
   1.185 +#ifndef OPENSSL_NO_BIO
   1.186 +#include <openssl/bio.h>
   1.187 +#endif
   1.188 +#ifndef OPENSSL_NO_DEPRECATED
   1.189 +#ifndef OPENSSL_NO_X509
   1.190 +#include <openssl/x509.h>
   1.191 +#endif
   1.192 +#include <openssl/crypto.h>
   1.193 +#include <openssl/lhash.h>
   1.194 +#include <openssl/buffer.h>
   1.195 +#endif
   1.196 +#include <openssl/pem.h>
   1.197 +
   1.198 +#include <openssl/kssl.h>
   1.199 +#include <openssl/safestack.h>
   1.200 +#include <openssl/symhacks.h>
   1.201 +
   1.202 +#ifdef  __cplusplus
   1.203 +extern "C" {
   1.204 +#endif
   1.205 +
   1.206 +/* SSLeay version number for ASN.1 encoding of the session information */
   1.207 +/* Version 0 - initial version
   1.208 + * Version 1 - added the optional peer certificate
   1.209 + */
   1.210 +#define SSL_SESSION_ASN1_VERSION 0x0001
   1.211 +
   1.212 +/* text strings for the ciphers */
   1.213 +#define SSL_TXT_NULL_WITH_MD5		SSL2_TXT_NULL_WITH_MD5			
   1.214 +#define SSL_TXT_RC4_128_WITH_MD5	SSL2_TXT_RC4_128_WITH_MD5		
   1.215 +#define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5	
   1.216 +#define SSL_TXT_RC2_128_CBC_WITH_MD5	SSL2_TXT_RC2_128_CBC_WITH_MD5		
   1.217 +#define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5	
   1.218 +#define SSL_TXT_IDEA_128_CBC_WITH_MD5	SSL2_TXT_IDEA_128_CBC_WITH_MD5		
   1.219 +#define SSL_TXT_DES_64_CBC_WITH_MD5	SSL2_TXT_DES_64_CBC_WITH_MD5		
   1.220 +#define SSL_TXT_DES_64_CBC_WITH_SHA	SSL2_TXT_DES_64_CBC_WITH_SHA		
   1.221 +#define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5	
   1.222 +#define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA	
   1.223 +
   1.224 +/*    VRS Additional Kerberos5 entries
   1.225 + */
   1.226 +#define SSL_TXT_KRB5_DES_64_CBC_SHA   SSL3_TXT_KRB5_DES_64_CBC_SHA
   1.227 +#define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA
   1.228 +#define SSL_TXT_KRB5_RC4_128_SHA      SSL3_TXT_KRB5_RC4_128_SHA
   1.229 +#define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA
   1.230 +#define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5       
   1.231 +#define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5       
   1.232 +#define SSL_TXT_KRB5_RC4_128_MD5      SSL3_TXT_KRB5_RC4_128_MD5
   1.233 +#define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5 
   1.234 +
   1.235 +#define SSL_TXT_KRB5_DES_40_CBC_SHA   SSL3_TXT_KRB5_DES_40_CBC_SHA 
   1.236 +#define SSL_TXT_KRB5_RC2_40_CBC_SHA   SSL3_TXT_KRB5_RC2_40_CBC_SHA 
   1.237 +#define SSL_TXT_KRB5_RC4_40_SHA	      SSL3_TXT_KRB5_RC4_40_SHA
   1.238 +#define SSL_TXT_KRB5_DES_40_CBC_MD5   SSL3_TXT_KRB5_DES_40_CBC_MD5 
   1.239 +#define SSL_TXT_KRB5_RC2_40_CBC_MD5   SSL3_TXT_KRB5_RC2_40_CBC_MD5 
   1.240 +#define SSL_TXT_KRB5_RC4_40_MD5	      SSL3_TXT_KRB5_RC4_40_MD5
   1.241 +
   1.242 +#define SSL_TXT_KRB5_DES_40_CBC_SHA   SSL3_TXT_KRB5_DES_40_CBC_SHA
   1.243 +#define SSL_TXT_KRB5_DES_40_CBC_MD5   SSL3_TXT_KRB5_DES_40_CBC_MD5
   1.244 +#define SSL_TXT_KRB5_DES_64_CBC_SHA   SSL3_TXT_KRB5_DES_64_CBC_SHA
   1.245 +#define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5
   1.246 +#define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA
   1.247 +#define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5
   1.248 +#define SSL_MAX_KRB5_PRINCIPAL_LENGTH  256
   1.249 +
   1.250 +#define SSL_MAX_SSL_SESSION_ID_LENGTH		32
   1.251 +#define SSL_MAX_SID_CTX_LENGTH			32
   1.252 +
   1.253 +#define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES	(512/8)
   1.254 +#define SSL_MAX_KEY_ARG_LENGTH			8
   1.255 +#define SSL_MAX_MASTER_KEY_LENGTH		48
   1.256 +
   1.257 +/* These are used to specify which ciphers to use and not to use */
   1.258 +#define SSL_TXT_LOW		"LOW"
   1.259 +#define SSL_TXT_MEDIUM		"MEDIUM"
   1.260 +#define SSL_TXT_HIGH		"HIGH"
   1.261 +#define SSL_TXT_kFZA		"kFZA"
   1.262 +#define	SSL_TXT_aFZA		"aFZA"
   1.263 +#define SSL_TXT_eFZA		"eFZA"
   1.264 +#define SSL_TXT_FZA		"FZA"
   1.265 +
   1.266 +#define	SSL_TXT_aNULL		"aNULL"
   1.267 +#define	SSL_TXT_eNULL		"eNULL"
   1.268 +#define	SSL_TXT_NULL		"NULL"
   1.269 +
   1.270 +#define SSL_TXT_kKRB5     	"kKRB5"
   1.271 +#define SSL_TXT_aKRB5     	"aKRB5"
   1.272 +#define SSL_TXT_KRB5      	"KRB5"
   1.273 +
   1.274 +#define SSL_TXT_kRSA		"kRSA"
   1.275 +#define SSL_TXT_kDHr		"kDHr"
   1.276 +#define SSL_TXT_kDHd		"kDHd"
   1.277 +#define SSL_TXT_kEDH		"kEDH"
   1.278 +#define	SSL_TXT_aRSA		"aRSA"
   1.279 +#define	SSL_TXT_aDSS		"aDSS"
   1.280 +#define	SSL_TXT_aDH		"aDH"
   1.281 +#define	SSL_TXT_DSS		"DSS"
   1.282 +#define SSL_TXT_DH		"DH"
   1.283 +#define SSL_TXT_EDH		"EDH"
   1.284 +#define SSL_TXT_ADH		"ADH"
   1.285 +#define SSL_TXT_RSA		"RSA"
   1.286 +#define SSL_TXT_DES		"DES"
   1.287 +#define SSL_TXT_3DES		"3DES"
   1.288 +#define SSL_TXT_RC4		"RC4"
   1.289 +#define SSL_TXT_RC2		"RC2"
   1.290 +#define SSL_TXT_IDEA		"IDEA"
   1.291 +#define SSL_TXT_AES		"AES"
   1.292 +#define SSL_TXT_MD5		"MD5"
   1.293 +#define SSL_TXT_SHA1		"SHA1"
   1.294 +#define SSL_TXT_SHA		"SHA"
   1.295 +#define SSL_TXT_EXP		"EXP"
   1.296 +#define SSL_TXT_EXPORT		"EXPORT"
   1.297 +#define SSL_TXT_EXP40		"EXPORT40"
   1.298 +#define SSL_TXT_EXP56		"EXPORT56"
   1.299 +#define SSL_TXT_SSLV2		"SSLv2"
   1.300 +#define SSL_TXT_SSLV3		"SSLv3"
   1.301 +#define SSL_TXT_TLSV1		"TLSv1"
   1.302 +#define SSL_TXT_ALL		"ALL"
   1.303 +#define SSL_TXT_ECC		"ECCdraft" /* ECC ciphersuites are not yet official */
   1.304 +
   1.305 +/*
   1.306 + * COMPLEMENTOF* definitions. These identifiers are used to (de-select)
   1.307 + * ciphers normally not being used.
   1.308 + * Example: "RC4" will activate all ciphers using RC4 including ciphers
   1.309 + * without authentication, which would normally disabled by DEFAULT (due
   1.310 + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT"
   1.311 + * will make sure that it is also disabled in the specific selection.
   1.312 + * COMPLEMENTOF* identifiers are portable between version, as adjustments
   1.313 + * to the default cipher setup will also be included here.
   1.314 + *
   1.315 + * COMPLEMENTOFDEFAULT does not experience the same special treatment that
   1.316 + * DEFAULT gets, as only selection is being done and no sorting as needed
   1.317 + * for DEFAULT.
   1.318 + */
   1.319 +#define SSL_TXT_CMPALL		"COMPLEMENTOFALL"
   1.320 +#define SSL_TXT_CMPDEF		"COMPLEMENTOFDEFAULT"
   1.321 +
   1.322 +/* The following cipher list is used by default.
   1.323 + * It also is substituted when an application-defined cipher list string
   1.324 + * starts with 'DEFAULT'. */
   1.325 +#define SSL_DEFAULT_CIPHER_LIST	"AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" /* low priority for RC4 */
   1.326 +
   1.327 +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
   1.328 +#define SSL_SENT_SHUTDOWN	1
   1.329 +#define SSL_RECEIVED_SHUTDOWN	2
   1.330 +
   1.331 +#ifdef __cplusplus
   1.332 +}
   1.333 +#endif
   1.334 +
   1.335 +#ifdef  __cplusplus
   1.336 +extern "C" {
   1.337 +#endif
   1.338 +
   1.339 +#if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2)
   1.340 +#define OPENSSL_NO_SSL2
   1.341 +#endif
   1.342 +
   1.343 +#define SSL_FILETYPE_ASN1	X509_FILETYPE_ASN1
   1.344 +#define SSL_FILETYPE_PEM	X509_FILETYPE_PEM
   1.345 +
   1.346 +/* This is needed to stop compilers complaining about the
   1.347 + * 'struct ssl_st *' function parameters used to prototype callbacks
   1.348 + * in SSL_CTX. */
   1.349 +typedef struct ssl_st *ssl_crock_st;
   1.350 +
   1.351 +/* used to hold info on the particular ciphers used */
   1.352 +typedef struct ssl_cipher_st
   1.353 +	{
   1.354 +	int valid;
   1.355 +	const char *name;		/* text name */
   1.356 +	unsigned long id;		/* id, 4 bytes, first is version */
   1.357 +	unsigned long algorithms;	/* what ciphers are used */
   1.358 +	unsigned long algo_strength;	/* strength and export flags */
   1.359 +	unsigned long algorithm2;	/* Extra flags */
   1.360 +	int strength_bits;		/* Number of bits really used */
   1.361 +	int alg_bits;			/* Number of bits for algorithm */
   1.362 +	unsigned long mask;		/* used for matching */
   1.363 +	unsigned long mask_strength;	/* also used for matching */
   1.364 +	} SSL_CIPHER;
   1.365 +
   1.366 +DECLARE_STACK_OF(SSL_CIPHER)
   1.367 +
   1.368 +typedef struct ssl_st SSL;
   1.369 +typedef struct ssl_ctx_st SSL_CTX;
   1.370 +
   1.371 +/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */
   1.372 +typedef struct ssl_method_st
   1.373 +	{
   1.374 +	int version;
   1.375 +	int (*ssl_new)(SSL *s);
   1.376 +	void (*ssl_clear)(SSL *s);
   1.377 +	void (*ssl_free)(SSL *s);
   1.378 +	int (*ssl_accept)(SSL *s);
   1.379 +	int (*ssl_connect)(SSL *s);
   1.380 +	int (*ssl_read)(SSL *s,void *buf,int len);
   1.381 +	int (*ssl_peek)(SSL *s,void *buf,int len);
   1.382 +	int (*ssl_write)(SSL *s,const void *buf,int len);
   1.383 +	int (*ssl_shutdown)(SSL *s);
   1.384 +	int (*ssl_renegotiate)(SSL *s);
   1.385 +	int (*ssl_renegotiate_check)(SSL *s);
   1.386 +	long (*ssl_get_message)(SSL *s, int st1, int stn, int mt, long
   1.387 +		max, int *ok);
   1.388 +	int (*ssl_read_bytes)(SSL *s, int type, unsigned char *buf, int len, 
   1.389 +		int peek);
   1.390 +	int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len);
   1.391 +	int (*ssl_dispatch_alert)(SSL *s);
   1.392 +	long (*ssl_ctrl)(SSL *s,int cmd,long larg,void *parg);
   1.393 +	long (*ssl_ctx_ctrl)(SSL_CTX *ctx,int cmd,long larg,void *parg);
   1.394 +	SSL_CIPHER *(*get_cipher_by_char)(const unsigned char *ptr);
   1.395 +	int (*put_cipher_by_char)(const SSL_CIPHER *cipher,unsigned char *ptr);
   1.396 +	int (*ssl_pending)(const SSL *s);
   1.397 +	int (*num_ciphers)(void);
   1.398 +	SSL_CIPHER *(*get_cipher)(unsigned ncipher);
   1.399 +	struct ssl_method_st *(*get_ssl_method)(int version);
   1.400 +	long (*get_timeout)(void);
   1.401 +	struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
   1.402 +	int (*ssl_version)(void);
   1.403 +	long (*ssl_callback_ctrl)(SSL *s, int cb_id, void (*fp)(void));
   1.404 +	long (*ssl_ctx_callback_ctrl)(SSL_CTX *s, int cb_id, void (*fp)(void));
   1.405 +	} SSL_METHOD;
   1.406 +
   1.407 +/* Lets make this into an ASN.1 type structure as follows
   1.408 + * SSL_SESSION_ID ::= SEQUENCE {
   1.409 + *	version 		INTEGER,	-- structure version number
   1.410 + *	SSLversion 		INTEGER,	-- SSL version number
   1.411 + *	Cipher 			OCTET_STRING,	-- the 3 byte cipher ID
   1.412 + *	Session_ID 		OCTET_STRING,	-- the Session ID
   1.413 + *	Master_key 		OCTET_STRING,	-- the master key
   1.414 + *	KRB5_principal		OCTET_STRING	-- optional Kerberos principal
   1.415 + *	Key_Arg [ 0 ] IMPLICIT	OCTET_STRING,	-- the optional Key argument
   1.416 + *	Time [ 1 ] EXPLICIT	INTEGER,	-- optional Start Time
   1.417 + *	Timeout [ 2 ] EXPLICIT	INTEGER,	-- optional Timeout ins seconds
   1.418 + *	Peer [ 3 ] EXPLICIT	X509,		-- optional Peer Certificate
   1.419 + *	Session_ID_context [ 4 ] EXPLICIT OCTET_STRING,   -- the Session ID context
   1.420 + *	Verify_result [ 5 ] EXPLICIT INTEGER    -- X509_V_... code for `Peer'
   1.421 + *	Compression [6] IMPLICIT ASN1_OBJECT	-- compression OID XXXXX
   1.422 + *	}
   1.423 + * Look in ssl/ssl_asn1.c for more details
   1.424 + * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).
   1.425 + */
   1.426 +typedef struct ssl_session_st
   1.427 +	{
   1.428 +	int ssl_version;	/* what ssl version session info is
   1.429 +				 * being kept in here? */
   1.430 +
   1.431 +	/* only really used in SSLv2 */
   1.432 +	unsigned int key_arg_length;
   1.433 +	unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH];
   1.434 +	int master_key_length;
   1.435 +	unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];
   1.436 +	/* session_id - valid? */
   1.437 +	unsigned int session_id_length;
   1.438 +	unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
   1.439 +	/* this is used to determine whether the session is being reused in
   1.440 +	 * the appropriate context. It is up to the application to set this,
   1.441 +	 * via SSL_new */
   1.442 +	unsigned int sid_ctx_length;
   1.443 +	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
   1.444 +
   1.445 +#ifndef OPENSSL_NO_KRB5
   1.446 +        unsigned int krb5_client_princ_len;
   1.447 +        unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH];
   1.448 +#endif /* OPENSSL_NO_KRB5 */
   1.449 +
   1.450 +	int not_resumable;
   1.451 +
   1.452 +	/* The cert is the certificate used to establish this connection */
   1.453 +	struct sess_cert_st /* SESS_CERT */ *sess_cert;
   1.454 +
   1.455 +	/* This is the cert for the other end.
   1.456 +	 * On clients, it will be the same as sess_cert->peer_key->x509
   1.457 +	 * (the latter is not enough as sess_cert is not retained
   1.458 +	 * in the external representation of sessions, see ssl_asn1.c). */
   1.459 +	X509 *peer;
   1.460 +	/* when app_verify_callback accepts a session where the peer's certificate
   1.461 +	 * is not ok, we must remember the error for session reuse: */
   1.462 +	long verify_result; /* only for servers */
   1.463 +
   1.464 +	int references;
   1.465 +	long timeout;
   1.466 +	long time;
   1.467 +
   1.468 +	int compress_meth;		/* Need to lookup the method */
   1.469 +
   1.470 +	SSL_CIPHER *cipher;
   1.471 +	unsigned long cipher_id;	/* when ASN.1 loaded, this
   1.472 +					 * needs to be used to load
   1.473 +					 * the 'cipher' structure */
   1.474 +
   1.475 +	STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */
   1.476 +
   1.477 +	CRYPTO_EX_DATA ex_data; /* application specific data */
   1.478 +
   1.479 +	/* These are used to make removal of session-ids more
   1.480 +	 * efficient and to implement a maximum cache size. */
   1.481 +	struct ssl_session_st *prev,*next;
   1.482 +
   1.483 +	} SSL_SESSION;
   1.484 +
   1.485 +
   1.486 +#define SSL_OP_MICROSOFT_SESS_ID_BUG			0x00000001L
   1.487 +#define SSL_OP_NETSCAPE_CHALLENGE_BUG			0x00000002L
   1.488 +#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG		0x00000008L
   1.489 +#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG		0x00000010L
   1.490 +#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER		0x00000020L
   1.491 +#define SSL_OP_MSIE_SSLV2_RSA_PADDING			0x00000040L /* no effect since 0.9.7h and 0.9.8b */
   1.492 +#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG			0x00000080L
   1.493 +#define SSL_OP_TLS_D5_BUG				0x00000100L
   1.494 +#define SSL_OP_TLS_BLOCK_PADDING_BUG			0x00000200L
   1.495 +
   1.496 +/* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added
   1.497 + * in OpenSSL 0.9.6d.  Usually (depending on the application protocol)
   1.498 + * the workaround is not needed.  Unfortunately some broken SSL/TLS
   1.499 + * implementations cannot handle it at all, which is why we include
   1.500 + * it in SSL_OP_ALL. */
   1.501 +#define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS              0x00000800L /* added in 0.9.6e */
   1.502 +
   1.503 +/* SSL_OP_ALL: various bug workarounds that should be rather harmless.
   1.504 + *             This used to be 0x000FFFFFL before 0.9.7. */
   1.505 +#define SSL_OP_ALL					0x00000FFFL
   1.506 +
   1.507 +/* DTLS options */
   1.508 +#define SSL_OP_NO_QUERY_MTU                 0x00001000L
   1.509 +/* Turn on Cookie Exchange (on relevant for servers) */
   1.510 +#define SSL_OP_COOKIE_EXCHANGE              0x00002000L
   1.511 +/* Don't use RFC4507 ticket extension */
   1.512 +#define SSL_OP_NO_TICKET	            0x00004000L
   1.513 +
   1.514 +/* As server, disallow session resumption on renegotiation */
   1.515 +#define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION	0x00010000L
   1.516 +/* If set, always create a new key when using tmp_ecdh parameters */
   1.517 +#define SSL_OP_SINGLE_ECDH_USE				0x00080000L
   1.518 +/* If set, always create a new key when using tmp_dh parameters */
   1.519 +#define SSL_OP_SINGLE_DH_USE				0x00100000L
   1.520 +/* Set to always use the tmp_rsa key when doing RSA operations,
   1.521 + * even when this violates protocol specs */
   1.522 +#define SSL_OP_EPHEMERAL_RSA				0x00200000L
   1.523 +/* Set on servers to choose the cipher according to the server's
   1.524 + * preferences */
   1.525 +#define SSL_OP_CIPHER_SERVER_PREFERENCE			0x00400000L
   1.526 +/* If set, a server will allow a client to issue a SSLv3.0 version number
   1.527 + * as latest version supported in the premaster secret, even when TLSv1.0
   1.528 + * (version 3.1) was announced in the client hello. Normally this is
   1.529 + * forbidden to prevent version rollback attacks. */
   1.530 +#define SSL_OP_TLS_ROLLBACK_BUG				0x00800000L
   1.531 +
   1.532 +#define SSL_OP_NO_SSLv2					0x01000000L
   1.533 +#define SSL_OP_NO_SSLv3					0x02000000L
   1.534 +#define SSL_OP_NO_TLSv1					0x04000000L
   1.535 +
   1.536 +/* The next flag deliberately changes the ciphertest, this is a check
   1.537 + * for the PKCS#1 attack */
   1.538 +#define SSL_OP_PKCS1_CHECK_1				0x08000000L
   1.539 +#define SSL_OP_PKCS1_CHECK_2				0x10000000L
   1.540 +#define SSL_OP_NETSCAPE_CA_DN_BUG			0x20000000L
   1.541 +#define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG		0x40000000L
   1.542 +
   1.543 +
   1.544 +/* Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success
   1.545 + * when just a single record has been written): */
   1.546 +#define SSL_MODE_ENABLE_PARTIAL_WRITE       0x00000001L
   1.547 +/* Make it possible to retry SSL_write() with changed buffer location
   1.548 + * (buffer contents must stay the same!); this is not the default to avoid
   1.549 + * the misconception that non-blocking SSL_write() behaves like
   1.550 + * non-blocking write(): */
   1.551 +#define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L
   1.552 +/* Never bother the application with retries if the transport
   1.553 + * is blocking: */
   1.554 +#define SSL_MODE_AUTO_RETRY 0x00000004L
   1.555 +/* Don't attempt to automatically build certificate chain */
   1.556 +#define SSL_MODE_NO_AUTO_CHAIN 0x00000008L
   1.557 +
   1.558 +
   1.559 +/* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value,
   1.560 + * they cannot be used to clear bits. */
   1.561 +
   1.562 +#define SSL_CTX_set_options(ctx,op) \
   1.563 +	SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)
   1.564 +#define SSL_CTX_get_options(ctx) \
   1.565 +	SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL)
   1.566 +#define SSL_set_options(ssl,op) \
   1.567 +	SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL)
   1.568 +#define SSL_get_options(ssl) \
   1.569 +        SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL)
   1.570 +
   1.571 +#define SSL_CTX_set_mode(ctx,op) \
   1.572 +	SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
   1.573 +#define SSL_CTX_get_mode(ctx) \
   1.574 +	SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)
   1.575 +#define SSL_set_mode(ssl,op) \
   1.576 +	SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)
   1.577 +#define SSL_get_mode(ssl) \
   1.578 +        SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)
   1.579 +#define SSL_set_mtu(ssl, mtu) \
   1.580 +        SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)
   1.581 +
   1.582 +
   1.583 +IMPORT_C 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));
   1.584 +IMPORT_C 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));
   1.585 +#define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
   1.586 +#define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
   1.587 +
   1.588 +
   1.589 +
   1.590 +#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32)
   1.591 +#define SSL_MAX_CERT_LIST_DEFAULT 1024*30 /* 30k max cert list :-) */
   1.592 +#else
   1.593 +#define SSL_MAX_CERT_LIST_DEFAULT 1024*100 /* 100k max cert list :-) */
   1.594 +#endif
   1.595 +
   1.596 +#define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT	(1024*20)
   1.597 +
   1.598 +/* This callback type is used inside SSL_CTX, SSL, and in the functions that set
   1.599 + * them. It is used to override the generation of SSL/TLS session IDs in a
   1.600 + * server. Return value should be zero on an error, non-zero to proceed. Also,
   1.601 + * callbacks should themselves check if the id they generate is unique otherwise
   1.602 + * the SSL handshake will fail with an error - callbacks can do this using the
   1.603 + * 'ssl' value they're passed by;
   1.604 + *      SSL_has_matching_session_id(ssl, id, *id_len)
   1.605 + * The length value passed in is set at the maximum size the session ID can be.
   1.606 + * In SSLv2 this is 16 bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback
   1.607 + * can alter this length to be less if desired, but under SSLv2 session IDs are
   1.608 + * supposed to be fixed at 16 bytes so the id will be padded after the callback
   1.609 + * returns in this case. It is also an error for the callback to set the size to
   1.610 + * zero. */
   1.611 +typedef int (*GEN_SESSION_CB)(const SSL *ssl, unsigned char *id,
   1.612 +				unsigned int *id_len);
   1.613 +
   1.614 +typedef struct ssl_comp_st
   1.615 +	{
   1.616 +	int id;
   1.617 +	const char *name;
   1.618 +#ifndef OPENSSL_NO_COMP
   1.619 +	COMP_METHOD *method;
   1.620 +#else
   1.621 +	char *method;
   1.622 +#endif
   1.623 +	} SSL_COMP;
   1.624 +
   1.625 +DECLARE_STACK_OF(SSL_COMP)
   1.626 +
   1.627 +struct ssl_ctx_st
   1.628 +	{
   1.629 +	SSL_METHOD *method;
   1.630 +
   1.631 +	STACK_OF(SSL_CIPHER) *cipher_list;
   1.632 +	/* same as above but sorted for lookup */
   1.633 +	STACK_OF(SSL_CIPHER) *cipher_list_by_id;
   1.634 +
   1.635 +	struct x509_store_st /* X509_STORE */ *cert_store;
   1.636 +	struct lhash_st /* LHASH */ *sessions;	/* a set of SSL_SESSIONs */
   1.637 +	/* Most session-ids that will be cached, default is
   1.638 +	 * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */
   1.639 +	unsigned long session_cache_size;
   1.640 +	struct ssl_session_st *session_cache_head;
   1.641 +	struct ssl_session_st *session_cache_tail;
   1.642 +
   1.643 +	/* This can have one of 2 values, ored together,
   1.644 +	 * SSL_SESS_CACHE_CLIENT,
   1.645 +	 * SSL_SESS_CACHE_SERVER,
   1.646 +	 * Default is SSL_SESSION_CACHE_SERVER, which means only
   1.647 +	 * SSL_accept which cache SSL_SESSIONS. */
   1.648 +	int session_cache_mode;
   1.649 +
   1.650 +	/* If timeout is not 0, it is the default timeout value set
   1.651 +	 * when SSL_new() is called.  This has been put in to make
   1.652 +	 * life easier to set things up */
   1.653 +	long session_timeout;
   1.654 +
   1.655 +	/* If this callback is not null, it will be called each
   1.656 +	 * time a session id is added to the cache.  If this function
   1.657 +	 * returns 1, it means that the callback will do a
   1.658 +	 * SSL_SESSION_free() when it has finished using it.  Otherwise,
   1.659 +	 * on 0, it means the callback has finished with it.
   1.660 +	 * If remove_session_cb is not null, it will be called when
   1.661 +	 * a session-id is removed from the cache.  After the call,
   1.662 +	 * OpenSSL will SSL_SESSION_free() it. */
   1.663 +	int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess);
   1.664 +	void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess);
   1.665 +	SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl,
   1.666 +		unsigned char *data,int len,int *copy);
   1.667 +
   1.668 +	struct
   1.669 +		{
   1.670 +		int sess_connect;	/* SSL new conn - started */
   1.671 +		int sess_connect_renegotiate;/* SSL reneg - requested */
   1.672 +		int sess_connect_good;	/* SSL new conne/reneg - finished */
   1.673 +		int sess_accept;	/* SSL new accept - started */
   1.674 +		int sess_accept_renegotiate;/* SSL reneg - requested */
   1.675 +		int sess_accept_good;	/* SSL accept/reneg - finished */
   1.676 +		int sess_miss;		/* session lookup misses  */
   1.677 +		int sess_timeout;	/* reuse attempt on timeouted session */
   1.678 +		int sess_cache_full;	/* session removed due to full cache */
   1.679 +		int sess_hit;		/* session reuse actually done */
   1.680 +		int sess_cb_hit;	/* session-id that was not
   1.681 +					 * in the cache was
   1.682 +					 * passed back via the callback.  This
   1.683 +					 * indicates that the application is
   1.684 +					 * supplying session-id's from other
   1.685 +					 * processes - spooky :-) */
   1.686 +		} stats;
   1.687 +
   1.688 +	int references;
   1.689 +
   1.690 +	/* if defined, these override the X509_verify_cert() calls */
   1.691 +	int (*app_verify_callback)(X509_STORE_CTX *, void *);
   1.692 +	void *app_verify_arg;
   1.693 +	/* before OpenSSL 0.9.7, 'app_verify_arg' was ignored
   1.694 +	 * ('app_verify_callback' was called with just one argument) */
   1.695 +
   1.696 +	/* Default password callback. */
   1.697 +	pem_password_cb *default_passwd_callback;
   1.698 +
   1.699 +	/* Default password callback user data. */
   1.700 +	void *default_passwd_callback_userdata;
   1.701 +
   1.702 +	/* get client cert callback */
   1.703 +	int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
   1.704 +
   1.705 +    /* cookie generate callback */
   1.706 +    int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, 
   1.707 +        unsigned int *cookie_len);
   1.708 +
   1.709 +    /* verify cookie callback */
   1.710 +    int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie, 
   1.711 +        unsigned int cookie_len);
   1.712 +
   1.713 +	CRYPTO_EX_DATA ex_data;
   1.714 +
   1.715 +	const EVP_MD *rsa_md5;/* For SSLv2 - name is 'ssl2-md5' */
   1.716 +	const EVP_MD *md5;	/* For SSLv3/TLSv1 'ssl3-md5' */
   1.717 +	const EVP_MD *sha1;   /* For SSLv3/TLSv1 'ssl3->sha1' */
   1.718 +
   1.719 +	STACK_OF(X509) *extra_certs;
   1.720 +	STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */
   1.721 +
   1.722 +
   1.723 +	/* Default values used when no per-SSL value is defined follow */
   1.724 +
   1.725 +	void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */
   1.726 +
   1.727 +	/* what we put in client cert requests */
   1.728 +	STACK_OF(X509_NAME) *client_CA;
   1.729 +
   1.730 +
   1.731 +	/* Default values to use in SSL structures follow (these are copied by SSL_new) */
   1.732 +
   1.733 +	unsigned long options;
   1.734 +	unsigned long mode;
   1.735 +	long max_cert_list;
   1.736 +
   1.737 +	struct cert_st /* CERT */ *cert;
   1.738 +	int read_ahead;
   1.739 +
   1.740 +	/* callback that allows applications to peek at protocol messages */
   1.741 +	void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
   1.742 +	void *msg_callback_arg;
   1.743 +
   1.744 +	int verify_mode;
   1.745 +	unsigned int sid_ctx_length;
   1.746 +	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
   1.747 +	int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */
   1.748 +
   1.749 +	/* Default generate session ID callback. */
   1.750 +	GEN_SESSION_CB generate_session_id;
   1.751 +
   1.752 +	X509_VERIFY_PARAM *param;
   1.753 +
   1.754 +#if 0
   1.755 +	int purpose;		/* Purpose setting */
   1.756 +	int trust;		/* Trust setting */
   1.757 +#endif
   1.758 +
   1.759 +	int quiet_shutdown;
   1.760 +
   1.761 +
   1.762 +
   1.763 +	};
   1.764 +
   1.765 +#define SSL_SESS_CACHE_OFF			0x0000
   1.766 +#define SSL_SESS_CACHE_CLIENT			0x0001
   1.767 +#define SSL_SESS_CACHE_SERVER			0x0002
   1.768 +#define SSL_SESS_CACHE_BOTH	(SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)
   1.769 +#define SSL_SESS_CACHE_NO_AUTO_CLEAR		0x0080
   1.770 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */
   1.771 +#define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP	0x0100
   1.772 +#define SSL_SESS_CACHE_NO_INTERNAL_STORE	0x0200
   1.773 +#define SSL_SESS_CACHE_NO_INTERNAL \
   1.774 +	(SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)
   1.775 +
   1.776 +IMPORT_C  struct lhash_st *SSL_CTX_sessions(SSL_CTX *ctx);
   1.777 +#define SSL_CTX_sess_number(ctx) \
   1.778 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)
   1.779 +#define SSL_CTX_sess_connect(ctx) \
   1.780 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)
   1.781 +#define SSL_CTX_sess_connect_good(ctx) \
   1.782 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)
   1.783 +#define SSL_CTX_sess_connect_renegotiate(ctx) \
   1.784 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)
   1.785 +#define SSL_CTX_sess_accept(ctx) \
   1.786 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)
   1.787 +#define SSL_CTX_sess_accept_renegotiate(ctx) \
   1.788 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)
   1.789 +#define SSL_CTX_sess_accept_good(ctx) \
   1.790 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)
   1.791 +#define SSL_CTX_sess_hits(ctx) \
   1.792 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)
   1.793 +#define SSL_CTX_sess_cb_hits(ctx) \
   1.794 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)
   1.795 +#define SSL_CTX_sess_misses(ctx) \
   1.796 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)
   1.797 +#define SSL_CTX_sess_timeouts(ctx) \
   1.798 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)
   1.799 +#define SSL_CTX_sess_cache_full(ctx) \
   1.800 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)
   1.801 +
   1.802 +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess));
   1.803 +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(struct ssl_st *ssl, SSL_SESSION *sess);
   1.804 +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess));
   1.805 +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(struct ssl_ctx_st *ctx, SSL_SESSION *sess);
   1.806 +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));
   1.807 +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(struct ssl_st *ssl, unsigned char *Data, int len, int *copy);
   1.808 +void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb)(const SSL *ssl,int type,int val));
   1.809 +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int val);
   1.810 +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
   1.811 +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
   1.812 +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len));
   1.813 +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len));
   1.814 +
   1.815 +#define SSL_NOTHING	1
   1.816 +#define SSL_WRITING	2
   1.817 +#define SSL_READING	3
   1.818 +#define SSL_X509_LOOKUP	4
   1.819 +
   1.820 +/* These will only be used when doing non-blocking IO */
   1.821 +#define SSL_want_nothing(s)	(SSL_want(s) == SSL_NOTHING)
   1.822 +#define SSL_want_read(s)	(SSL_want(s) == SSL_READING)
   1.823 +#define SSL_want_write(s)	(SSL_want(s) == SSL_WRITING)
   1.824 +#define SSL_want_x509_lookup(s)	(SSL_want(s) == SSL_X509_LOOKUP)
   1.825 +
   1.826 +struct ssl_st
   1.827 +	{
   1.828 +	/* protocol version
   1.829 +	 * (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, DTLS1_VERSION)
   1.830 +	 */
   1.831 +	int version;
   1.832 +	int type; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */
   1.833 +
   1.834 +	SSL_METHOD *method; /* SSLv3 */
   1.835 +
   1.836 +	/* There are 2 BIO's even though they are normally both the
   1.837 +	 * same.  This is so data can be read and written to different
   1.838 +	 * handlers */
   1.839 +
   1.840 +#ifndef OPENSSL_NO_BIO
   1.841 +	BIO *rbio; /* used by SSL_read */
   1.842 +	BIO *wbio; /* used by SSL_write */
   1.843 +	BIO *bbio; /* used during session-id reuse to concatenate
   1.844 +		    * messages */
   1.845 +#else
   1.846 +	char *rbio; /* used by SSL_read */
   1.847 +	char *wbio; /* used by SSL_write */
   1.848 +	char *bbio;
   1.849 +#endif
   1.850 +	/* This holds a variable that indicates what we were doing
   1.851 +	 * when a 0 or -1 is returned.  This is needed for
   1.852 +	 * non-blocking IO so we know what request needs re-doing when
   1.853 +	 * in SSL_accept or SSL_connect */
   1.854 +	int rwstate;
   1.855 +
   1.856 +	/* true when we are actually in SSL_accept() or SSL_connect() */
   1.857 +	int in_handshake;
   1.858 +	int (*handshake_func)(SSL *);
   1.859 +
   1.860 +	/* Imagine that here's a boolean member "init" that is
   1.861 +	 * switched as soon as SSL_set_{accept/connect}_state
   1.862 +	 * is called for the first time, so that "state" and
   1.863 +	 * "handshake_func" are properly initialized.  But as
   1.864 +	 * handshake_func is == 0 until then, we use this
   1.865 +	 * test instead of an "init" member.
   1.866 +	 */
   1.867 +
   1.868 +	int server;	/* are we the server side? - mostly used by SSL_clear*/
   1.869 +
   1.870 +	int new_session;/* 1 if we are to use a new session.
   1.871 +	                 * 2 if we are a server and are inside a handshake
   1.872 +	                 *   (i.e. not just sending a HelloRequest)
   1.873 +	                 * NB: For servers, the 'new' session may actually be a previously
   1.874 +	                 * cached session or even the previous session unless
   1.875 +	                 * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set */
   1.876 +	int quiet_shutdown;/* don't send shutdown packets */
   1.877 +	int shutdown;	/* we have shut things down, 0x01 sent, 0x02
   1.878 +			 * for received */
   1.879 +	int state;	/* where we are */
   1.880 +	int rstate;	/* where we are when reading */
   1.881 +
   1.882 +	BUF_MEM *init_buf;	/* buffer used during init */
   1.883 +	void *init_msg;   	/* pointer to handshake message body, set by ssl3_get_message() */
   1.884 +	int init_num;		/* amount read/written */
   1.885 +	int init_off;		/* amount read/written */
   1.886 +
   1.887 +	/* used internally to point at a raw packet */
   1.888 +	unsigned char *packet;
   1.889 +	unsigned int packet_length;
   1.890 +
   1.891 +	struct ssl2_state_st *s2; /* SSLv2 variables */
   1.892 +	struct ssl3_state_st *s3; /* SSLv3 variables */
   1.893 +	struct dtls1_state_st *d1; /* DTLSv1 variables */
   1.894 +
   1.895 +	int read_ahead;		/* Read as many input bytes as possible
   1.896 +	               	 	 * (for non-blocking reads) */
   1.897 +
   1.898 +	/* callback that allows applications to peek at protocol messages */
   1.899 +	void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
   1.900 +	void *msg_callback_arg;
   1.901 +
   1.902 +	int hit;		/* reusing a previous session */
   1.903 +
   1.904 +	X509_VERIFY_PARAM *param;
   1.905 +
   1.906 +#if 0
   1.907 +	int purpose;		/* Purpose setting */
   1.908 +	int trust;		/* Trust setting */
   1.909 +#endif
   1.910 +
   1.911 +	/* crypto */
   1.912 +	STACK_OF(SSL_CIPHER) *cipher_list;
   1.913 +	STACK_OF(SSL_CIPHER) *cipher_list_by_id;
   1.914 +
   1.915 +	/* These are the ones being used, the ones in SSL_SESSION are
   1.916 +	 * the ones to be 'copied' into these ones */
   1.917 +
   1.918 +	EVP_CIPHER_CTX *enc_read_ctx;		/* cryptographic state */
   1.919 +	const EVP_MD *read_hash;		/* used for mac generation */
   1.920 +#ifndef OPENSSL_NO_COMP
   1.921 +	COMP_CTX *expand;			/* uncompress */
   1.922 +#else
   1.923 +	char *expand;
   1.924 +#endif
   1.925 +
   1.926 +	EVP_CIPHER_CTX *enc_write_ctx;		/* cryptographic state */
   1.927 +	const EVP_MD *write_hash;		/* used for mac generation */
   1.928 +#ifndef OPENSSL_NO_COMP
   1.929 +	COMP_CTX *compress;			/* compression */
   1.930 +#else
   1.931 +	char *compress;	
   1.932 +#endif
   1.933 +
   1.934 +	/* session info */
   1.935 +
   1.936 +	/* client cert? */
   1.937 +	/* This is used to hold the server certificate used */
   1.938 +	struct cert_st /* CERT */ *cert;
   1.939 +
   1.940 +	/* the session_id_context is used to ensure sessions are only reused
   1.941 +	 * in the appropriate context */
   1.942 +	unsigned int sid_ctx_length;
   1.943 +	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
   1.944 +
   1.945 +	/* This can also be in the session once a session is established */
   1.946 +	SSL_SESSION *session;
   1.947 +
   1.948 +	/* Default generate session ID callback. */
   1.949 +	GEN_SESSION_CB generate_session_id;
   1.950 +
   1.951 +	/* Used in SSL2 and SSL3 */
   1.952 +	int verify_mode;	/* 0 don't care about verify failure.
   1.953 +				 * 1 fail if verify fails */
   1.954 +	int (*verify_callback)(int ok,X509_STORE_CTX *ctx); /* fail if callback returns 0 */
   1.955 +
   1.956 +	void (*info_callback)(const SSL *ssl,int type,int val); /* optional informational callback */
   1.957 +
   1.958 +	int error;		/* error bytes to be written */
   1.959 +	int error_code;		/* actual code */
   1.960 +
   1.961 +#ifndef OPENSSL_NO_KRB5
   1.962 +	KSSL_CTX *kssl_ctx;     /* Kerberos 5 context */
   1.963 +#endif	/* OPENSSL_NO_KRB5 */
   1.964 +
   1.965 +	SSL_CTX *ctx;
   1.966 +	/* set this flag to 1 and a sleep(1) is put into all SSL_read()
   1.967 +	 * and SSL_write() calls, good for nbio debuging :-) */
   1.968 +	int debug;	
   1.969 +
   1.970 +	/* extra application data */
   1.971 +	long verify_result;
   1.972 +	CRYPTO_EX_DATA ex_data;
   1.973 +
   1.974 +	/* for server side, keep the list of CA_dn we can use */
   1.975 +	STACK_OF(X509_NAME) *client_CA;
   1.976 +
   1.977 +	int references;
   1.978 +	unsigned long options; /* protocol behaviour */
   1.979 +	unsigned long mode; /* API behaviour */
   1.980 +	long max_cert_list;
   1.981 +	int first_packet;
   1.982 +	int client_version;	/* what was passed, used for
   1.983 +				 * SSLv3/TLS rollback check */
   1.984 +
   1.985 +	};
   1.986 +
   1.987 +#ifdef __cplusplus
   1.988 +}
   1.989 +#endif
   1.990 +
   1.991 +#include <openssl/ssl2.h>
   1.992 +#include <openssl/ssl3.h>
   1.993 +#include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */
   1.994 +#include <openssl/dtls1.h> /* Datagram TLS */
   1.995 +#include <openssl/ssl23.h>
   1.996 +
   1.997 +#ifdef  __cplusplus
   1.998 +extern "C" {
   1.999 +#endif
  1.1000 +
  1.1001 +/* compatibility */
  1.1002 +#define SSL_set_app_data(s,arg)		(SSL_set_ex_data(s,0,(char *)arg))
  1.1003 +#define SSL_get_app_data(s)		(SSL_get_ex_data(s,0))
  1.1004 +#define SSL_SESSION_set_app_data(s,a)	(SSL_SESSION_set_ex_data(s,0,(char *)a))
  1.1005 +#define SSL_SESSION_get_app_data(s)	(SSL_SESSION_get_ex_data(s,0))
  1.1006 +#define SSL_CTX_get_app_data(ctx)	(SSL_CTX_get_ex_data(ctx,0))
  1.1007 +#define SSL_CTX_set_app_data(ctx,arg)	(SSL_CTX_set_ex_data(ctx,0,(char *)arg))
  1.1008 +
  1.1009 +/* The following are the possible values for ssl->state are are
  1.1010 + * used to indicate where we are up to in the SSL connection establishment.
  1.1011 + * The macros that follow are about the only things you should need to use
  1.1012 + * and even then, only when using non-blocking IO.
  1.1013 + * It can also be useful to work out where you were when the connection
  1.1014 + * failed */
  1.1015 +
  1.1016 +#define SSL_ST_CONNECT			0x1000
  1.1017 +#define SSL_ST_ACCEPT			0x2000
  1.1018 +#define SSL_ST_MASK			0x0FFF
  1.1019 +#define SSL_ST_INIT			(SSL_ST_CONNECT|SSL_ST_ACCEPT)
  1.1020 +#define SSL_ST_BEFORE			0x4000
  1.1021 +#define SSL_ST_OK			0x03
  1.1022 +#define SSL_ST_RENEGOTIATE		(0x04|SSL_ST_INIT)
  1.1023 +
  1.1024 +#define SSL_CB_LOOP			0x01
  1.1025 +#define SSL_CB_EXIT			0x02
  1.1026 +#define SSL_CB_READ			0x04
  1.1027 +#define SSL_CB_WRITE			0x08
  1.1028 +#define SSL_CB_ALERT			0x4000 /* used in callback */
  1.1029 +#define SSL_CB_READ_ALERT		(SSL_CB_ALERT|SSL_CB_READ)
  1.1030 +#define SSL_CB_WRITE_ALERT		(SSL_CB_ALERT|SSL_CB_WRITE)
  1.1031 +#define SSL_CB_ACCEPT_LOOP		(SSL_ST_ACCEPT|SSL_CB_LOOP)
  1.1032 +#define SSL_CB_ACCEPT_EXIT		(SSL_ST_ACCEPT|SSL_CB_EXIT)
  1.1033 +#define SSL_CB_CONNECT_LOOP		(SSL_ST_CONNECT|SSL_CB_LOOP)
  1.1034 +#define SSL_CB_CONNECT_EXIT		(SSL_ST_CONNECT|SSL_CB_EXIT)
  1.1035 +#define SSL_CB_HANDSHAKE_START		0x10
  1.1036 +#define SSL_CB_HANDSHAKE_DONE		0x20
  1.1037 +
  1.1038 +/* Is the SSL_connection established? */
  1.1039 +#define SSL_get_state(a)		SSL_state(a)
  1.1040 +#define SSL_is_init_finished(a)		(SSL_state(a) == SSL_ST_OK)
  1.1041 +#define SSL_in_init(a)			(SSL_state(a)&SSL_ST_INIT)
  1.1042 +#define SSL_in_before(a)		(SSL_state(a)&SSL_ST_BEFORE)
  1.1043 +#define SSL_in_connect_init(a)		(SSL_state(a)&SSL_ST_CONNECT)
  1.1044 +#define SSL_in_accept_init(a)		(SSL_state(a)&SSL_ST_ACCEPT)
  1.1045 +
  1.1046 +/* The following 2 states are kept in ssl->rstate when reads fail,
  1.1047 + * you should not need these */
  1.1048 +#define SSL_ST_READ_HEADER			0xF0
  1.1049 +#define SSL_ST_READ_BODY			0xF1
  1.1050 +#define SSL_ST_READ_DONE			0xF2
  1.1051 +
  1.1052 +/* Obtain latest Finished message
  1.1053 + *   -- that we sent (SSL_get_finished)
  1.1054 + *   -- that we expected from peer (SSL_get_peer_finished).
  1.1055 + * Returns length (0 == no Finished so far), copies up to 'count' bytes. */
  1.1056 +IMPORT_C size_t SSL_get_finished(const SSL *s, void *buf, size_t count);
  1.1057 +IMPORT_C size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);
  1.1058 +
  1.1059 +/* use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options
  1.1060 + * are 'ored' with SSL_VERIFY_PEER if they are desired */
  1.1061 +#define SSL_VERIFY_NONE			0x00
  1.1062 +#define SSL_VERIFY_PEER			0x01
  1.1063 +#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT	0x02
  1.1064 +#define SSL_VERIFY_CLIENT_ONCE		0x04
  1.1065 +
  1.1066 +#define OpenSSL_add_ssl_algorithms()	SSL_library_init()
  1.1067 +#define SSLeay_add_ssl_algorithms()	SSL_library_init()
  1.1068 +
  1.1069 +/* this is for backward compatibility */
  1.1070 +#if 0 /* NEW_SSLEAY */
  1.1071 +#define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c)
  1.1072 +#define SSL_set_pref_cipher(c,n)	SSL_set_cipher_list(c,n)
  1.1073 +#define SSL_add_session(a,b)            SSL_CTX_add_session((a),(b))
  1.1074 +#define SSL_remove_session(a,b)		SSL_CTX_remove_session((a),(b))
  1.1075 +#define SSL_flush_sessions(a,b)		SSL_CTX_flush_sessions((a),(b))
  1.1076 +#endif
  1.1077 +/* More backward compatibility */
  1.1078 +#define SSL_get_cipher(s) \
  1.1079 +		SSL_CIPHER_get_name(SSL_get_current_cipher(s))
  1.1080 +#define SSL_get_cipher_bits(s,np) \
  1.1081 +		SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
  1.1082 +#define SSL_get_cipher_version(s) \
  1.1083 +		SSL_CIPHER_get_version(SSL_get_current_cipher(s))
  1.1084 +#define SSL_get_cipher_name(s) \
  1.1085 +		SSL_CIPHER_get_name(SSL_get_current_cipher(s))
  1.1086 +#define SSL_get_time(a)		SSL_SESSION_get_time(a)
  1.1087 +#define SSL_set_time(a,b)	SSL_SESSION_set_time((a),(b))
  1.1088 +#define SSL_get_timeout(a)	SSL_SESSION_get_timeout(a)
  1.1089 +#define SSL_set_timeout(a,b)	SSL_SESSION_set_timeout((a),(b))
  1.1090 +
  1.1091 +#if 1 /*SSLEAY_MACROS*/
  1.1092 +#define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
  1.1093 +#define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)
  1.1094 +#define PEM_read_SSL_SESSION(fp,x,cb,u) (SSL_SESSION *)PEM_ASN1_read( \
  1.1095 +	(char *(*)())d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,fp,(char **)x,cb,u)
  1.1096 +#define PEM_read_bio_SSL_SESSION(bp,x,cb,u) PEM_ASN1_read_bio_of(SSL_SESSION,d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,bp,x,cb,u)
  1.1097 +#define PEM_write_SSL_SESSION(fp,x) \
  1.1098 +	PEM_ASN1_write((int (*)())i2d_SSL_SESSION, \
  1.1099 +		PEM_STRING_SSL_SESSION,fp, (char *)x, NULL,NULL,0,NULL,NULL)
  1.1100 +#define PEM_write_bio_SSL_SESSION(bp,x) \
  1.1101 +	PEM_ASN1_write_bio_of(SSL_SESSION,i2d_SSL_SESSION,PEM_STRING_SSL_SESSION,bp,x,NULL,NULL,0,NULL,NULL)
  1.1102 +#endif
  1.1103 +
  1.1104 +#define SSL_AD_REASON_OFFSET		1000
  1.1105 +/* These alert types are for SSLv3 and TLSv1 */
  1.1106 +#define SSL_AD_CLOSE_NOTIFY		SSL3_AD_CLOSE_NOTIFY
  1.1107 +#define SSL_AD_UNEXPECTED_MESSAGE	SSL3_AD_UNEXPECTED_MESSAGE /* fatal */
  1.1108 +#define SSL_AD_BAD_RECORD_MAC		SSL3_AD_BAD_RECORD_MAC     /* fatal */
  1.1109 +#define SSL_AD_DECRYPTION_FAILED	TLS1_AD_DECRYPTION_FAILED
  1.1110 +#define SSL_AD_RECORD_OVERFLOW		TLS1_AD_RECORD_OVERFLOW
  1.1111 +#define SSL_AD_DECOMPRESSION_FAILURE	SSL3_AD_DECOMPRESSION_FAILURE/* fatal */
  1.1112 +#define SSL_AD_HANDSHAKE_FAILURE	SSL3_AD_HANDSHAKE_FAILURE/* fatal */
  1.1113 +#define SSL_AD_NO_CERTIFICATE		SSL3_AD_NO_CERTIFICATE /* Not for TLS */
  1.1114 +#define SSL_AD_BAD_CERTIFICATE		SSL3_AD_BAD_CERTIFICATE
  1.1115 +#define SSL_AD_UNSUPPORTED_CERTIFICATE	SSL3_AD_UNSUPPORTED_CERTIFICATE
  1.1116 +#define SSL_AD_CERTIFICATE_REVOKED	SSL3_AD_CERTIFICATE_REVOKED
  1.1117 +#define SSL_AD_CERTIFICATE_EXPIRED	SSL3_AD_CERTIFICATE_EXPIRED
  1.1118 +#define SSL_AD_CERTIFICATE_UNKNOWN	SSL3_AD_CERTIFICATE_UNKNOWN
  1.1119 +#define SSL_AD_ILLEGAL_PARAMETER	SSL3_AD_ILLEGAL_PARAMETER   /* fatal */
  1.1120 +#define SSL_AD_UNKNOWN_CA		TLS1_AD_UNKNOWN_CA	/* fatal */
  1.1121 +#define SSL_AD_ACCESS_DENIED		TLS1_AD_ACCESS_DENIED	/* fatal */
  1.1122 +#define SSL_AD_DECODE_ERROR		TLS1_AD_DECODE_ERROR	/* fatal */
  1.1123 +#define SSL_AD_DECRYPT_ERROR		TLS1_AD_DECRYPT_ERROR
  1.1124 +#define SSL_AD_EXPORT_RESTRICTION	TLS1_AD_EXPORT_RESTRICTION/* fatal */
  1.1125 +#define SSL_AD_PROTOCOL_VERSION		TLS1_AD_PROTOCOL_VERSION /* fatal */
  1.1126 +#define SSL_AD_INSUFFICIENT_SECURITY	TLS1_AD_INSUFFICIENT_SECURITY/* fatal */
  1.1127 +#define SSL_AD_INTERNAL_ERROR		TLS1_AD_INTERNAL_ERROR	/* fatal */
  1.1128 +#define SSL_AD_USER_CANCELLED		TLS1_AD_USER_CANCELLED
  1.1129 +#define SSL_AD_NO_RENEGOTIATION		TLS1_AD_NO_RENEGOTIATION
  1.1130 +#define SSL_AD_UNSUPPORTED_EXTENSION	TLS1_AD_UNSUPPORTED_EXTENSION
  1.1131 +#define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE
  1.1132 +#define SSL_AD_UNRECOGNIZED_NAME	TLS1_AD_UNRECOGNIZED_NAME
  1.1133 +
  1.1134 +#define SSL_ERROR_NONE			0
  1.1135 +#define SSL_ERROR_SSL			1
  1.1136 +#define SSL_ERROR_WANT_READ		2
  1.1137 +#define SSL_ERROR_WANT_WRITE		3
  1.1138 +#define SSL_ERROR_WANT_X509_LOOKUP	4
  1.1139 +#define SSL_ERROR_SYSCALL		5 /* look at error stack/return value/errno */
  1.1140 +#define SSL_ERROR_ZERO_RETURN		6
  1.1141 +#define SSL_ERROR_WANT_CONNECT		7
  1.1142 +#define SSL_ERROR_WANT_ACCEPT		8
  1.1143 +
  1.1144 +#define SSL_CTRL_NEED_TMP_RSA			1
  1.1145 +#define SSL_CTRL_SET_TMP_RSA			2
  1.1146 +#define SSL_CTRL_SET_TMP_DH			3
  1.1147 +#define SSL_CTRL_SET_TMP_ECDH			4
  1.1148 +#define SSL_CTRL_SET_TMP_RSA_CB			5
  1.1149 +#define SSL_CTRL_SET_TMP_DH_CB			6
  1.1150 +#define SSL_CTRL_SET_TMP_ECDH_CB		7
  1.1151 +
  1.1152 +#define SSL_CTRL_GET_SESSION_REUSED		8
  1.1153 +#define SSL_CTRL_GET_CLIENT_CERT_REQUEST	9
  1.1154 +#define SSL_CTRL_GET_NUM_RENEGOTIATIONS		10
  1.1155 +#define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS	11
  1.1156 +#define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS	12
  1.1157 +#define SSL_CTRL_GET_FLAGS			13
  1.1158 +#define SSL_CTRL_EXTRA_CHAIN_CERT		14
  1.1159 +
  1.1160 +#define SSL_CTRL_SET_MSG_CALLBACK               15
  1.1161 +#define SSL_CTRL_SET_MSG_CALLBACK_ARG           16
  1.1162 +
  1.1163 +/* only applies to datagram connections */
  1.1164 +#define SSL_CTRL_SET_MTU                17
  1.1165 +/* Stats */
  1.1166 +#define SSL_CTRL_SESS_NUMBER			20
  1.1167 +#define SSL_CTRL_SESS_CONNECT			21
  1.1168 +#define SSL_CTRL_SESS_CONNECT_GOOD		22
  1.1169 +#define SSL_CTRL_SESS_CONNECT_RENEGOTIATE	23
  1.1170 +#define SSL_CTRL_SESS_ACCEPT			24
  1.1171 +#define SSL_CTRL_SESS_ACCEPT_GOOD		25
  1.1172 +#define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE	26
  1.1173 +#define SSL_CTRL_SESS_HIT			27
  1.1174 +#define SSL_CTRL_SESS_CB_HIT			28
  1.1175 +#define SSL_CTRL_SESS_MISSES			29
  1.1176 +#define SSL_CTRL_SESS_TIMEOUTS			30
  1.1177 +#define SSL_CTRL_SESS_CACHE_FULL		31
  1.1178 +#define SSL_CTRL_OPTIONS			32
  1.1179 +#define SSL_CTRL_MODE				33
  1.1180 +
  1.1181 +#define SSL_CTRL_GET_READ_AHEAD			40
  1.1182 +#define SSL_CTRL_SET_READ_AHEAD			41
  1.1183 +#define SSL_CTRL_SET_SESS_CACHE_SIZE		42
  1.1184 +#define SSL_CTRL_GET_SESS_CACHE_SIZE		43
  1.1185 +#define SSL_CTRL_SET_SESS_CACHE_MODE		44
  1.1186 +#define SSL_CTRL_GET_SESS_CACHE_MODE		45
  1.1187 +
  1.1188 +#define SSL_CTRL_GET_MAX_CERT_LIST		50
  1.1189 +#define SSL_CTRL_SET_MAX_CERT_LIST		51
  1.1190 +
  1.1191 +#define SSL_session_reused(ssl) \
  1.1192 +	SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)
  1.1193 +#define SSL_num_renegotiations(ssl) \
  1.1194 +	SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)
  1.1195 +#define SSL_clear_num_renegotiations(ssl) \
  1.1196 +	SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)
  1.1197 +#define SSL_total_renegotiations(ssl) \
  1.1198 +	SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)
  1.1199 +
  1.1200 +#define SSL_CTX_need_tmp_RSA(ctx) \
  1.1201 +	SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)
  1.1202 +#define SSL_CTX_set_tmp_rsa(ctx,rsa) \
  1.1203 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)
  1.1204 +#define SSL_CTX_set_tmp_dh(ctx,dh) \
  1.1205 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh)
  1.1206 +#define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
  1.1207 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
  1.1208 +
  1.1209 +#define SSL_need_tmp_RSA(ssl) \
  1.1210 +	SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL)
  1.1211 +#define SSL_set_tmp_rsa(ssl,rsa) \
  1.1212 +	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)
  1.1213 +#define SSL_set_tmp_dh(ssl,dh) \
  1.1214 +	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh)
  1.1215 +#define SSL_set_tmp_ecdh(ssl,ecdh) \
  1.1216 +	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
  1.1217 +
  1.1218 +#define SSL_CTX_add_extra_chain_cert(ctx,x509) \
  1.1219 +	SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
  1.1220 +
  1.1221 +#ifndef OPENSSL_NO_BIO
  1.1222 +IMPORT_C BIO_METHOD *BIO_f_ssl(void);
  1.1223 +IMPORT_C BIO *BIO_new_ssl(SSL_CTX *ctx,int client);
  1.1224 +IMPORT_C BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
  1.1225 +IMPORT_C BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
  1.1226 +IMPORT_C int BIO_ssl_copy_session_id(BIO *to,BIO *from);
  1.1227 +IMPORT_C void BIO_ssl_shutdown(BIO *ssl_bio);
  1.1228 +
  1.1229 +#endif
  1.1230 +
  1.1231 +IMPORT_C int	SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);
  1.1232 +IMPORT_C SSL_CTX *SSL_CTX_new(SSL_METHOD *meth);
  1.1233 +IMPORT_C void	SSL_CTX_free(SSL_CTX *);
  1.1234 +IMPORT_C long SSL_CTX_set_timeout(SSL_CTX *ctx,long t);
  1.1235 +IMPORT_C long SSL_CTX_get_timeout(const SSL_CTX *ctx);
  1.1236 +IMPORT_C X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *);
  1.1237 +IMPORT_C void SSL_CTX_set_cert_store(SSL_CTX *,X509_STORE *);
  1.1238 +IMPORT_C int SSL_want(const SSL *s);
  1.1239 +IMPORT_C int	SSL_clear(SSL *s);
  1.1240 +
  1.1241 +IMPORT_C void	SSL_CTX_flush_sessions(SSL_CTX *ctx,long tm);
  1.1242 +IMPORT_C void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,
  1.1243 +	int (*cb)(struct ssl_st *ssl,SSL_SESSION *sess));
  1.1244 +IMPORT_C int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(SSL *ssl, SSL_SESSION *sess);
  1.1245 +
  1.1246 +IMPORT_C void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
  1.1247 +	void (*cb)(SSL_CTX *ctx,SSL_SESSION *sess));
  1.1248 +IMPORT_C void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(SSL_CTX * ctx,SSL_SESSION *sess);	
  1.1249 +IMPORT_C void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
  1.1250 +	SSL_SESSION *(*cb)(struct ssl_st *ssl,
  1.1251 +	         unsigned char *data,int len,int *copy));
  1.1252 +IMPORT_C SSL_SESSION * (*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl,
  1.1253 +	unsigned char *data,int len,int *copy);
  1.1254 +IMPORT_C void SSL_CTX_set_info_callback(SSL_CTX *ctx, 
  1.1255 +	void (*cb)(const SSL *ssl,int type,int val));
  1.1256 +IMPORT_C void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int val);
  1.1257 +IMPORT_C void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,
  1.1258 +	int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
  1.1259 +IMPORT_C int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL * ssl, X509 ** x509 , EVP_PKEY **pkey);
  1.1260 +IMPORT_C void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,
  1.1261 +	int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len));
  1.1262 +IMPORT_C void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,
  1.1263 +	int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len));
  1.1264 +
  1.1265 +
  1.1266 +IMPORT_C SSL_CIPHER *SSL_get_current_cipher(const SSL *s);
  1.1267 +IMPORT_C int	SSL_CIPHER_get_bits(const SSL_CIPHER *c,int *alg_bits);
  1.1268 +IMPORT_C char *	SSL_CIPHER_get_version(const SSL_CIPHER *c);
  1.1269 +IMPORT_C const char *	SSL_CIPHER_get_name(const SSL_CIPHER *c);
  1.1270 +
  1.1271 +IMPORT_C int	SSL_get_fd(const SSL *s);
  1.1272 +IMPORT_C int	SSL_get_rfd(const SSL *s);
  1.1273 +IMPORT_C int	SSL_get_wfd(const SSL *s);
  1.1274 +IMPORT_C const char  * SSL_get_cipher_list(const SSL *s,int n);
  1.1275 +IMPORT_C char *	SSL_get_shared_ciphers(const SSL *s, char *buf, int len);
  1.1276 +IMPORT_C int	SSL_get_read_ahead(const SSL * s);
  1.1277 +IMPORT_C int	SSL_pending(const SSL *s);
  1.1278 +#ifndef OPENSSL_NO_SOCK
  1.1279 +IMPORT_C int	SSL_set_fd(SSL *s, int fd);
  1.1280 +IMPORT_C int	SSL_set_rfd(SSL *s, int fd);
  1.1281 +IMPORT_C int	SSL_set_wfd(SSL *s, int fd);
  1.1282 +#endif
  1.1283 +#ifndef OPENSSL_NO_BIO
  1.1284 +IMPORT_C void	SSL_set_bio(SSL *s, BIO *rbio,BIO *wbio);
  1.1285 +IMPORT_C BIO *	SSL_get_rbio(const SSL *s);
  1.1286 +IMPORT_C BIO *	SSL_get_wbio(const SSL *s);
  1.1287 +#endif
  1.1288 +IMPORT_C int	SSL_set_cipher_list(SSL *s, const char *str);
  1.1289 +IMPORT_C void	SSL_set_read_ahead(SSL *s, int yes);
  1.1290 +IMPORT_C int	SSL_get_verify_mode(const SSL *s);
  1.1291 +IMPORT_C int	SSL_get_verify_depth(const SSL *s);
  1.1292 +IMPORT_C int	(*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *);
  1.1293 +IMPORT_C void	SSL_set_verify(SSL *s, int mode,
  1.1294 +		       int (*callback)(int ok,X509_STORE_CTX *ctx));
  1.1295 +IMPORT_C void	SSL_set_verify_depth(SSL *s, int depth);
  1.1296 +#ifndef OPENSSL_NO_RSA
  1.1297 +IMPORT_C int	SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
  1.1298 +#endif
  1.1299 +IMPORT_C int	SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);
  1.1300 +IMPORT_C int	SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
  1.1301 +IMPORT_C int	SSL_use_PrivateKey_ASN1(int pk,SSL *ssl, const unsigned char *d, long len);
  1.1302 +IMPORT_C int	SSL_use_certificate(SSL *ssl, X509 *x);
  1.1303 +IMPORT_C int	SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);
  1.1304 +
  1.1305 +#ifndef OPENSSL_NO_STDIO
  1.1306 +IMPORT_C int	SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
  1.1307 +IMPORT_C int	SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
  1.1308 +IMPORT_C int	SSL_use_certificate_file(SSL *ssl, const char *file, int type);
  1.1309 +IMPORT_C int	SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);
  1.1310 +IMPORT_C int	SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
  1.1311 +IMPORT_C int	SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
  1.1312 +IMPORT_C int	SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); /* PEM type */
  1.1313 +IMPORT_C STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);
  1.1314 +IMPORT_C int	SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
  1.1315 +					    const char *file);
  1.1316 +#ifndef OPENSSL_SYS_VMS
  1.1317 +#ifndef OPENSSL_SYS_MACINTOSH_CLASSIC /* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */
  1.1318 +IMPORT_C int	SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
  1.1319 +					   const char *dir);
  1.1320 +#endif
  1.1321 +#endif
  1.1322 +
  1.1323 +#endif
  1.1324 +
  1.1325 +IMPORT_C void	SSL_load_error_strings(void );
  1.1326 +IMPORT_C const char *SSL_state_string(const SSL *s);
  1.1327 +IMPORT_C const char *SSL_rstate_string(const SSL *s);
  1.1328 +IMPORT_C const char *SSL_state_string_long(const SSL *s);
  1.1329 +IMPORT_C const char *SSL_rstate_string_long(const SSL *s);
  1.1330 +IMPORT_C long	SSL_SESSION_get_time(const SSL_SESSION *s);
  1.1331 +IMPORT_C long	SSL_SESSION_set_time(SSL_SESSION *s, long t);
  1.1332 +IMPORT_C long	SSL_SESSION_get_timeout(const SSL_SESSION *s);
  1.1333 +IMPORT_C long	SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
  1.1334 +IMPORT_C void	SSL_copy_session_id(SSL *to,const SSL *from);
  1.1335 +
  1.1336 +IMPORT_C SSL_SESSION *SSL_SESSION_new(void);
  1.1337 +IMPORT_C unsigned long SSL_SESSION_hash(const SSL_SESSION *a);
  1.1338 +IMPORT_C const char *SSL_get_servername(const SSL *s, const int type);
  1.1339 +IMPORT_C int SSL_get_servername_type(const SSL *s);
  1.1340 +IMPORT_C int	SSL_SESSION_cmp(const SSL_SESSION *a,const SSL_SESSION *b);
  1.1341 +IMPORT_C const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len);
  1.1342 +#ifndef OPENSSL_NO_FP_API
  1.1343 +IMPORT_C int	SSL_SESSION_print_fp(FILE *fp,const SSL_SESSION *ses);
  1.1344 +#endif
  1.1345 +#ifndef OPENSSL_NO_BIO
  1.1346 +IMPORT_C int	SSL_SESSION_print(BIO *fp,const SSL_SESSION *ses);
  1.1347 +#endif
  1.1348 +IMPORT_C void	SSL_SESSION_free(SSL_SESSION *ses);
  1.1349 +IMPORT_C int	i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp);
  1.1350 +IMPORT_C int	SSL_set_session(SSL *to, SSL_SESSION *session);
  1.1351 +IMPORT_C int	SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);
  1.1352 +IMPORT_C int	SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c);
  1.1353 +IMPORT_C int	SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB);
  1.1354 +IMPORT_C int	SSL_set_generate_session_id(SSL *, GEN_SESSION_CB);
  1.1355 +IMPORT_C int	SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
  1.1356 +					unsigned int id_len);
  1.1357 +IMPORT_C SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a,const unsigned char **pp,
  1.1358 +			     long length);
  1.1359 +
  1.1360 +#ifdef HEADER_X509_H
  1.1361 +IMPORT_C X509 *	SSL_get_peer_certificate(const SSL *s);
  1.1362 +#endif
  1.1363 +
  1.1364 +IMPORT_C STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s);
  1.1365 +
  1.1366 +IMPORT_C int SSL_CTX_get_verify_mode(const SSL_CTX *ctx);
  1.1367 +IMPORT_C int SSL_CTX_get_verify_depth(const SSL_CTX *ctx);
  1.1368 +IMPORT_C int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *);
  1.1369 +IMPORT_C void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,
  1.1370 +			int (*callback)(int, X509_STORE_CTX *));
  1.1371 +IMPORT_C void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth);
  1.1372 +IMPORT_C void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg);
  1.1373 +#ifndef OPENSSL_NO_RSA
  1.1374 +IMPORT_C int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
  1.1375 +#endif
  1.1376 +IMPORT_C int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len);
  1.1377 +IMPORT_C int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
  1.1378 +IMPORT_C int SSL_CTX_use_PrivateKey_ASN1(int pk,SSL_CTX *ctx,
  1.1379 +	const unsigned char *d, long len);
  1.1380 +IMPORT_C int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
  1.1381 +IMPORT_C int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d);
  1.1382 +
  1.1383 +IMPORT_C void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);
  1.1384 +IMPORT_C void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);
  1.1385 +
  1.1386 +IMPORT_C int SSL_CTX_check_private_key(const SSL_CTX *ctx);
  1.1387 +IMPORT_C int SSL_check_private_key(const SSL *ctx);
  1.1388 +
  1.1389 +IMPORT_C int	SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx,
  1.1390 +				       unsigned int sid_ctx_len);
  1.1391 +
  1.1392 +IMPORT_C SSL *	SSL_new(SSL_CTX *ctx);
  1.1393 +IMPORT_C int	SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx,
  1.1394 +				   unsigned int sid_ctx_len);
  1.1395 +
  1.1396 +IMPORT_C int SSL_CTX_set_purpose(SSL_CTX *s, int purpose);
  1.1397 +IMPORT_C int SSL_set_purpose(SSL *s, int purpose);
  1.1398 +IMPORT_C int SSL_CTX_set_trust(SSL_CTX *s, int trust);
  1.1399 +IMPORT_C int SSL_set_trust(SSL *s, int trust);
  1.1400 +
  1.1401 +IMPORT_C void	SSL_free(SSL *ssl);
  1.1402 +IMPORT_C int 	SSL_accept(SSL *ssl);
  1.1403 +IMPORT_C int 	SSL_connect(SSL *ssl);
  1.1404 +IMPORT_C int 	SSL_read(SSL *ssl,void *buf,int num);
  1.1405 +IMPORT_C int 	SSL_peek(SSL *ssl,void *buf,int num);
  1.1406 +IMPORT_C int 	SSL_write(SSL *ssl,const void *buf,int num);
  1.1407 +IMPORT_C long	SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg);
  1.1408 +IMPORT_C long	SSL_callback_ctrl(SSL *, int, void (*)(void));
  1.1409 +IMPORT_C long	SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, void *parg);
  1.1410 +IMPORT_C long	SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));
  1.1411 +
  1.1412 +IMPORT_C int	SSL_get_error(const SSL *s,int ret_code);
  1.1413 +IMPORT_C const char *SSL_get_version(const SSL *s);
  1.1414 +
  1.1415 +/* This sets the 'default' SSL version that SSL_new() will create */
  1.1416 +IMPORT_C int SSL_CTX_set_ssl_version(SSL_CTX *ctx,SSL_METHOD *meth);
  1.1417 +
  1.1418 +IMPORT_C SSL_METHOD *SSLv2_method(void);		/* SSLv2 */
  1.1419 +IMPORT_C SSL_METHOD *SSLv2_server_method(void);	/* SSLv2 */
  1.1420 +IMPORT_C SSL_METHOD *SSLv2_client_method(void);	/* SSLv2 */
  1.1421 +
  1.1422 +IMPORT_C SSL_METHOD *SSLv3_method(void);		/* SSLv3 */
  1.1423 +IMPORT_C SSL_METHOD *SSLv3_server_method(void);	/* SSLv3 */
  1.1424 +IMPORT_C SSL_METHOD *SSLv3_client_method(void);	/* SSLv3 */
  1.1425 +
  1.1426 +IMPORT_C SSL_METHOD *SSLv23_method(void);	/* SSLv3 but can rollback to v2 */
  1.1427 +IMPORT_C SSL_METHOD *SSLv23_server_method(void);	/* SSLv3 but can rollback to v2 */
  1.1428 +IMPORT_C SSL_METHOD *SSLv23_client_method(void);	/* SSLv3 but can rollback to v2 */
  1.1429 +
  1.1430 +IMPORT_C SSL_METHOD *TLSv1_method(void);		/* TLSv1.0 */
  1.1431 +IMPORT_C SSL_METHOD *TLSv1_server_method(void);	/* TLSv1.0 */
  1.1432 +IMPORT_C SSL_METHOD *TLSv1_client_method(void);	/* TLSv1.0 */
  1.1433 +
  1.1434 +IMPORT_C SSL_METHOD *DTLSv1_method(void);		/* DTLSv1.0 */
  1.1435 +IMPORT_C SSL_METHOD *DTLSv1_server_method(void);	/* DTLSv1.0 */
  1.1436 +IMPORT_C SSL_METHOD *DTLSv1_client_method(void);	/* DTLSv1.0 */
  1.1437 +
  1.1438 +IMPORT_C STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);
  1.1439 +
  1.1440 +IMPORT_C int SSL_do_handshake(SSL *s);
  1.1441 +IMPORT_C int SSL_renegotiate(SSL *s);
  1.1442 +IMPORT_C int SSL_renegotiate_pending(SSL *s);
  1.1443 +IMPORT_C int SSL_shutdown(SSL *s);
  1.1444 +
  1.1445 +IMPORT_C SSL_METHOD *SSL_get_ssl_method(SSL *s);
  1.1446 +IMPORT_C int SSL_set_ssl_method(SSL *s,SSL_METHOD *method);
  1.1447 +IMPORT_C const char *SSL_alert_type_string_long(int value);
  1.1448 +IMPORT_C const char *SSL_alert_type_string(int value);
  1.1449 +IMPORT_C const char *SSL_alert_desc_string_long(int value);
  1.1450 +IMPORT_C const char *SSL_alert_desc_string(int value);
  1.1451 +
  1.1452 +IMPORT_C void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
  1.1453 +IMPORT_C void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
  1.1454 +IMPORT_C STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);
  1.1455 +IMPORT_C STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s);
  1.1456 +IMPORT_C int SSL_add_client_CA(SSL *ssl,X509 *x);
  1.1457 +IMPORT_C int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x);
  1.1458 +
  1.1459 +IMPORT_C void SSL_set_connect_state(SSL *s);
  1.1460 +IMPORT_C void SSL_set_accept_state(SSL *s);
  1.1461 +
  1.1462 +IMPORT_C long SSL_get_default_timeout(const SSL *s);
  1.1463 +
  1.1464 +IMPORT_C int SSL_library_init(void );
  1.1465 +
  1.1466 +IMPORT_C char *SSL_CIPHER_description(SSL_CIPHER *,char *buf,int size);
  1.1467 +IMPORT_C STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk);
  1.1468 +
  1.1469 +IMPORT_C SSL *SSL_dup(SSL *ssl);
  1.1470 +
  1.1471 +IMPORT_C X509 *SSL_get_certificate(const SSL *ssl);
  1.1472 +IMPORT_C /* EVP_PKEY */ struct evp_pkey_st *SSL_get_privatekey(SSL *ssl);
  1.1473 +
  1.1474 +IMPORT_C void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode);
  1.1475 +IMPORT_C int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
  1.1476 +IMPORT_C void SSL_set_quiet_shutdown(SSL *ssl,int mode);
  1.1477 +IMPORT_C int SSL_get_quiet_shutdown(const SSL *ssl);
  1.1478 +IMPORT_C void SSL_set_shutdown(SSL *ssl,int mode);
  1.1479 +IMPORT_C int SSL_get_shutdown(const SSL *ssl);
  1.1480 +IMPORT_C int SSL_version(const SSL *ssl);
  1.1481 +IMPORT_C int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
  1.1482 +IMPORT_C int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
  1.1483 +	const char *CApath);
  1.1484 +#define SSL_get0_session SSL_get_session /* just peek at pointer */
  1.1485 +IMPORT_C SSL_SESSION *SSL_get_session(const SSL *ssl);
  1.1486 +IMPORT_C SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */
  1.1487 +IMPORT_C SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
  1.1488 +IMPORT_C SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx);
  1.1489 +IMPORT_C void SSL_set_info_callback(SSL *ssl,
  1.1490 +			   void (*cb)(const SSL *ssl,int type,int val));
  1.1491 +IMPORT_C void (*SSL_get_info_callback(const SSL *ssl))(const SSL *ssl,int type,int val);
  1.1492 +IMPORT_C int SSL_state(const SSL *ssl);
  1.1493 +
  1.1494 +IMPORT_C void SSL_set_verify_result(SSL *ssl,long v);
  1.1495 +IMPORT_C long SSL_get_verify_result(const SSL *ssl);
  1.1496 +
  1.1497 +IMPORT_C int SSL_set_ex_data(SSL *ssl,int idx,void *data);
  1.1498 +IMPORT_C void *SSL_get_ex_data(const SSL *ssl,int idx);
  1.1499 +IMPORT_C int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
  1.1500 +	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
  1.1501 +
  1.1502 +IMPORT_C int SSL_SESSION_set_ex_data(SSL_SESSION *ss,int idx,void *data);
  1.1503 +IMPORT_C void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss,int idx);
  1.1504 +IMPORT_C int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
  1.1505 +	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
  1.1506 +
  1.1507 +IMPORT_C int SSL_CTX_set_ex_data(SSL_CTX *ssl,int idx,void *data);
  1.1508 +IMPORT_C void *SSL_CTX_get_ex_data(const SSL_CTX *ssl,int idx);
  1.1509 +IMPORT_C int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
  1.1510 +	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
  1.1511 +
  1.1512 +IMPORT_C int SSL_get_ex_data_X509_STORE_CTX_idx(void );
  1.1513 +
  1.1514 +#define SSL_CTX_sess_set_cache_size(ctx,t) \
  1.1515 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL)
  1.1516 +#define SSL_CTX_sess_get_cache_size(ctx) \
  1.1517 +	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL)
  1.1518 +#define SSL_CTX_set_session_cache_mode(ctx,m) \
  1.1519 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)
  1.1520 +#define SSL_CTX_get_session_cache_mode(ctx) \
  1.1521 +	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL)
  1.1522 +
  1.1523 +#define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx)
  1.1524 +#define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m)
  1.1525 +#define SSL_CTX_get_read_ahead(ctx) \
  1.1526 +	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)
  1.1527 +#define SSL_CTX_set_read_ahead(ctx,m) \
  1.1528 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)
  1.1529 +#define SSL_CTX_get_max_cert_list(ctx) \
  1.1530 +	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
  1.1531 +#define SSL_CTX_set_max_cert_list(ctx,m) \
  1.1532 +	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
  1.1533 +#define SSL_get_max_cert_list(ssl) \
  1.1534 +	SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
  1.1535 +#define SSL_set_max_cert_list(ssl,m) \
  1.1536 +	SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
  1.1537 +
  1.1538 +     /* NB: the keylength is only applicable when is_export is true */
  1.1539 +#ifndef OPENSSL_NO_RSA
  1.1540 +IMPORT_C void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,
  1.1541 +				  RSA *(*cb)(SSL *ssl,int is_export,
  1.1542 +					     int keylength));
  1.1543 +
  1.1544 +IMPORT_C void SSL_set_tmp_rsa_callback(SSL *ssl,
  1.1545 +				  RSA *(*cb)(SSL *ssl,int is_export,
  1.1546 +					     int keylength));
  1.1547 +#endif
  1.1548 +#ifndef OPENSSL_NO_DH
  1.1549 +IMPORT_C void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
  1.1550 +				 DH *(*dh)(SSL *ssl,int is_export,
  1.1551 +					   int keylength));
  1.1552 +IMPORT_C void SSL_set_tmp_dh_callback(SSL *ssl,
  1.1553 +				 DH *(*dh)(SSL *ssl,int is_export,
  1.1554 +					   int keylength));
  1.1555 +#endif
  1.1556 +#ifndef OPENSSL_NO_ECDH
  1.1557 +IMPORT_C void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,
  1.1558 +				 EC_KEY *(*ecdh)(SSL *ssl,int is_export,
  1.1559 +					   int keylength));
  1.1560 +IMPORT_C void SSL_set_tmp_ecdh_callback(SSL *ssl,
  1.1561 +				 EC_KEY *(*ecdh)(SSL *ssl,int is_export,
  1.1562 +					   int keylength));
  1.1563 +#endif
  1.1564 +
  1.1565 +#ifndef OPENSSL_NO_COMP
  1.1566 +IMPORT_C const COMP_METHOD *SSL_get_current_compression(SSL *s);
  1.1567 +IMPORT_C const COMP_METHOD *SSL_get_current_expansion(SSL *s);
  1.1568 +IMPORT_C const char *SSL_COMP_get_name(const COMP_METHOD *comp);
  1.1569 +IMPORT_C STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
  1.1570 +IMPORT_C int SSL_COMP_add_compression_method(int id,COMP_METHOD *cm);
  1.1571 +#else
  1.1572 +IMPORT_C const void *SSL_get_current_compression(SSL *s);
  1.1573 +IMPORT_C const void *SSL_get_current_expansion(SSL *s);
  1.1574 +IMPORT_C const char *SSL_COMP_get_name(const void *comp);
  1.1575 +IMPORT_C void *SSL_COMP_get_compression_methods(void);
  1.1576 +IMPORT_C int SSL_COMP_add_compression_method(int id,void *cm);
  1.1577 +#endif
  1.1578 +
  1.1579 +/* BEGIN ERROR CODES */
  1.1580 +/* The following lines are auto generated by the script mkerr.pl. Any changes
  1.1581 + * made after this point may be overwritten when the script is next run.
  1.1582 + */
  1.1583 +IMPORT_C void ERR_load_SSL_strings(void);
  1.1584 +
  1.1585 +/* Error codes for the SSL functions. */
  1.1586 +
  1.1587 +/* Function codes. */
  1.1588 +#define SSL_F_CLIENT_CERTIFICATE			 100
  1.1589 +#define SSL_F_CLIENT_FINISHED				 167
  1.1590 +#define SSL_F_CLIENT_HELLO				 101
  1.1591 +#define SSL_F_CLIENT_MASTER_KEY				 102
  1.1592 +#define SSL_F_D2I_SSL_SESSION				 103
  1.1593 +#define SSL_F_DO_DTLS1_WRITE				 245
  1.1594 +#define SSL_F_DO_SSL3_WRITE				 104
  1.1595 +#define SSL_F_DTLS1_ACCEPT				 246
  1.1596 +#define SSL_F_DTLS1_BUFFER_RECORD			 247
  1.1597 +#define SSL_F_DTLS1_CLIENT_HELLO			 248
  1.1598 +#define SSL_F_DTLS1_CONNECT				 249
  1.1599 +#define SSL_F_DTLS1_ENC					 250
  1.1600 +#define SSL_F_DTLS1_GET_HELLO_VERIFY			 251
  1.1601 +#define SSL_F_DTLS1_GET_MESSAGE				 252
  1.1602 +#define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT		 253
  1.1603 +#define SSL_F_DTLS1_GET_RECORD				 254
  1.1604 +#define SSL_F_DTLS1_OUTPUT_CERT_CHAIN			 255
  1.1605 +#define SSL_F_DTLS1_PREPROCESS_FRAGMENT			 277
  1.1606 +#define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE		 256
  1.1607 +#define SSL_F_DTLS1_PROCESS_RECORD			 257
  1.1608 +#define SSL_F_DTLS1_READ_BYTES				 258
  1.1609 +#define SSL_F_DTLS1_READ_FAILED				 259
  1.1610 +#define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST		 260
  1.1611 +#define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE		 261
  1.1612 +#define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE		 262
  1.1613 +#define SSL_F_DTLS1_SEND_CLIENT_VERIFY			 263
  1.1614 +#define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST		 264
  1.1615 +#define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE		 265
  1.1616 +#define SSL_F_DTLS1_SEND_SERVER_HELLO			 266
  1.1617 +#define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE		 267
  1.1618 +#define SSL_F_DTLS1_WRITE_APP_DATA_BYTES		 268
  1.1619 +#define SSL_F_GET_CLIENT_FINISHED			 105
  1.1620 +#define SSL_F_GET_CLIENT_HELLO				 106
  1.1621 +#define SSL_F_GET_CLIENT_MASTER_KEY			 107
  1.1622 +#define SSL_F_GET_SERVER_FINISHED			 108
  1.1623 +#define SSL_F_GET_SERVER_HELLO				 109
  1.1624 +#define SSL_F_GET_SERVER_VERIFY				 110
  1.1625 +#define SSL_F_I2D_SSL_SESSION				 111
  1.1626 +#define SSL_F_READ_N					 112
  1.1627 +#define SSL_F_REQUEST_CERTIFICATE			 113
  1.1628 +#define SSL_F_SERVER_FINISH				 239
  1.1629 +#define SSL_F_SERVER_HELLO				 114
  1.1630 +#define SSL_F_SERVER_VERIFY				 240
  1.1631 +#define SSL_F_SSL23_ACCEPT				 115
  1.1632 +#define SSL_F_SSL23_CLIENT_HELLO			 116
  1.1633 +#define SSL_F_SSL23_CONNECT				 117
  1.1634 +#define SSL_F_SSL23_GET_CLIENT_HELLO			 118
  1.1635 +#define SSL_F_SSL23_GET_SERVER_HELLO			 119
  1.1636 +#define SSL_F_SSL23_PEEK				 237
  1.1637 +#define SSL_F_SSL23_READ				 120
  1.1638 +#define SSL_F_SSL23_WRITE				 121
  1.1639 +#define SSL_F_SSL2_ACCEPT				 122
  1.1640 +#define SSL_F_SSL2_CONNECT				 123
  1.1641 +#define SSL_F_SSL2_ENC_INIT				 124
  1.1642 +#define SSL_F_SSL2_GENERATE_KEY_MATERIAL		 241
  1.1643 +#define SSL_F_SSL2_PEEK					 234
  1.1644 +#define SSL_F_SSL2_READ					 125
  1.1645 +#define SSL_F_SSL2_READ_INTERNAL			 236
  1.1646 +#define SSL_F_SSL2_SET_CERTIFICATE			 126
  1.1647 +#define SSL_F_SSL2_WRITE				 127
  1.1648 +#define SSL_F_SSL3_ACCEPT				 128
  1.1649 +#define SSL_F_SSL3_CALLBACK_CTRL			 233
  1.1650 +#define SSL_F_SSL3_CHANGE_CIPHER_STATE			 129
  1.1651 +#define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM		 130
  1.1652 +#define SSL_F_SSL3_CLIENT_HELLO				 131
  1.1653 +#define SSL_F_SSL3_CONNECT				 132
  1.1654 +#define SSL_F_SSL3_CTRL					 213
  1.1655 +#define SSL_F_SSL3_CTX_CTRL				 133
  1.1656 +#define SSL_F_SSL3_ENC					 134
  1.1657 +#define SSL_F_SSL3_GENERATE_KEY_BLOCK			 238
  1.1658 +#define SSL_F_SSL3_GET_CERTIFICATE_REQUEST		 135
  1.1659 +#define SSL_F_SSL3_GET_CERT_VERIFY			 136
  1.1660 +#define SSL_F_SSL3_GET_CLIENT_CERTIFICATE		 137
  1.1661 +#define SSL_F_SSL3_GET_CLIENT_HELLO			 138
  1.1662 +#define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE		 139
  1.1663 +#define SSL_F_SSL3_GET_FINISHED				 140
  1.1664 +#define SSL_F_SSL3_GET_KEY_EXCHANGE			 141
  1.1665 +#define SSL_F_SSL3_GET_MESSAGE				 142
  1.1666 +#define SSL_F_SSL3_GET_NEW_SESSION_TICKET		 283
  1.1667 +#define SSL_F_SSL3_GET_RECORD				 143
  1.1668 +#define SSL_F_SSL3_GET_SERVER_CERTIFICATE		 144
  1.1669 +#define SSL_F_SSL3_GET_SERVER_DONE			 145
  1.1670 +#define SSL_F_SSL3_GET_SERVER_HELLO			 146
  1.1671 +#define SSL_F_SSL3_NEW_SESSION_TICKET			 284
  1.1672 +#define SSL_F_SSL3_OUTPUT_CERT_CHAIN			 147
  1.1673 +#define SSL_F_SSL3_PEEK					 235
  1.1674 +#define SSL_F_SSL3_READ_BYTES				 148
  1.1675 +#define SSL_F_SSL3_READ_N				 149
  1.1676 +#define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST		 150
  1.1677 +#define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE		 151
  1.1678 +#define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE		 152
  1.1679 +#define SSL_F_SSL3_SEND_CLIENT_VERIFY			 153
  1.1680 +#define SSL_F_SSL3_SEND_SERVER_CERTIFICATE		 154
  1.1681 +#define SSL_F_SSL3_SEND_SERVER_HELLO			 242
  1.1682 +#define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE		 155
  1.1683 +#define SSL_F_SSL3_SETUP_BUFFERS			 156
  1.1684 +#define SSL_F_SSL3_SETUP_KEY_BLOCK			 157
  1.1685 +#define SSL_F_SSL3_WRITE_BYTES				 158
  1.1686 +#define SSL_F_SSL3_WRITE_PENDING			 159
  1.1687 +#define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT		 272
  1.1688 +#define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK	 215
  1.1689 +#define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK	 216
  1.1690 +#define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT		 273
  1.1691 +#define SSL_F_SSL_BAD_METHOD				 160
  1.1692 +#define SSL_F_SSL_BYTES_TO_CIPHER_LIST			 161
  1.1693 +#define SSL_F_SSL_CERT_DUP				 221
  1.1694 +#define SSL_F_SSL_CERT_INST				 222
  1.1695 +#define SSL_F_SSL_CERT_INSTANTIATE			 214
  1.1696 +#define SSL_F_SSL_CERT_NEW				 162
  1.1697 +#define SSL_F_SSL_CHECK_PRIVATE_KEY			 163
  1.1698 +#define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT		 274
  1.1699 +#define SSL_F_SSL_CIPHER_PROCESS_RULESTR		 230
  1.1700 +#define SSL_F_SSL_CIPHER_STRENGTH_SORT			 231
  1.1701 +#define SSL_F_SSL_CLEAR					 164
  1.1702 +#define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD		 165
  1.1703 +#define SSL_F_SSL_CREATE_CIPHER_LIST			 166
  1.1704 +#define SSL_F_SSL_CTRL					 232
  1.1705 +#define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY			 168
  1.1706 +#define SSL_F_SSL_CTX_NEW				 169
  1.1707 +#define SSL_F_SSL_CTX_SET_CIPHER_LIST			 269
  1.1708 +#define SSL_F_SSL_CTX_SET_PURPOSE			 226
  1.1709 +#define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT		 219
  1.1710 +#define SSL_F_SSL_CTX_SET_SSL_VERSION			 170
  1.1711 +#define SSL_F_SSL_CTX_SET_TRUST				 229
  1.1712 +#define SSL_F_SSL_CTX_USE_CERTIFICATE			 171
  1.1713 +#define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1		 172
  1.1714 +#define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE	 220
  1.1715 +#define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE		 173
  1.1716 +#define SSL_F_SSL_CTX_USE_PRIVATEKEY			 174
  1.1717 +#define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1		 175
  1.1718 +#define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE		 176
  1.1719 +#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY			 177
  1.1720 +#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1		 178
  1.1721 +#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE		 179
  1.1722 +#define SSL_F_SSL_DO_HANDSHAKE				 180
  1.1723 +#define SSL_F_SSL_GET_NEW_SESSION			 181
  1.1724 +#define SSL_F_SSL_GET_PREV_SESSION			 217
  1.1725 +#define SSL_F_SSL_GET_SERVER_SEND_CERT			 182
  1.1726 +#define SSL_F_SSL_GET_SIGN_PKEY				 183
  1.1727 +#define SSL_F_SSL_INIT_WBIO_BUFFER			 184
  1.1728 +#define SSL_F_SSL_LOAD_CLIENT_CA_FILE			 185
  1.1729 +#define SSL_F_SSL_NEW					 186
  1.1730 +#define SSL_F_SSL_PEEK					 270
  1.1731 +#define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT		 275
  1.1732 +#define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT		 276
  1.1733 +#define SSL_F_SSL_READ					 223
  1.1734 +#define SSL_F_SSL_RSA_PRIVATE_DECRYPT			 187
  1.1735 +#define SSL_F_SSL_RSA_PUBLIC_ENCRYPT			 188
  1.1736 +#define SSL_F_SSL_SESSION_NEW				 189
  1.1737 +#define SSL_F_SSL_SESSION_PRINT_FP			 190
  1.1738 +#define SSL_F_SSL_SESS_CERT_NEW				 225
  1.1739 +#define SSL_F_SSL_SET_CERT				 191
  1.1740 +#define SSL_F_SSL_SET_CIPHER_LIST			 271
  1.1741 +#define SSL_F_SSL_SET_FD				 192
  1.1742 +#define SSL_F_SSL_SET_PKEY				 193
  1.1743 +#define SSL_F_SSL_SET_PURPOSE				 227
  1.1744 +#define SSL_F_SSL_SET_RFD				 194
  1.1745 +#define SSL_F_SSL_SET_SESSION				 195
  1.1746 +#define SSL_F_SSL_SET_SESSION_ID_CONTEXT		 218
  1.1747 +#define SSL_F_SSL_SET_TRUST				 228
  1.1748 +#define SSL_F_SSL_SET_WFD				 196
  1.1749 +#define SSL_F_SSL_SHUTDOWN				 224
  1.1750 +#define SSL_F_SSL_UNDEFINED_CONST_FUNCTION		 243
  1.1751 +#define SSL_F_SSL_UNDEFINED_FUNCTION			 197
  1.1752 +#define SSL_F_SSL_UNDEFINED_VOID_FUNCTION		 244
  1.1753 +#define SSL_F_SSL_USE_CERTIFICATE			 198
  1.1754 +#define SSL_F_SSL_USE_CERTIFICATE_ASN1			 199
  1.1755 +#define SSL_F_SSL_USE_CERTIFICATE_FILE			 200
  1.1756 +#define SSL_F_SSL_USE_PRIVATEKEY			 201
  1.1757 +#define SSL_F_SSL_USE_PRIVATEKEY_ASN1			 202
  1.1758 +#define SSL_F_SSL_USE_PRIVATEKEY_FILE			 203
  1.1759 +#define SSL_F_SSL_USE_RSAPRIVATEKEY			 204
  1.1760 +#define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1		 205
  1.1761 +#define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE		 206
  1.1762 +#define SSL_F_SSL_VERIFY_CERT_CHAIN			 207
  1.1763 +#define SSL_F_SSL_WRITE					 208
  1.1764 +#define SSL_F_TLS1_CHANGE_CIPHER_STATE			 209
  1.1765 +#define SSL_F_TLS1_ENC					 210
  1.1766 +#define SSL_F_TLS1_SETUP_KEY_BLOCK			 211
  1.1767 +#define SSL_F_WRITE_PENDING				 212
  1.1768 +
  1.1769 +/* Reason codes. */
  1.1770 +#define SSL_R_APP_DATA_IN_HANDSHAKE			 100
  1.1771 +#define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272
  1.1772 +#define SSL_R_BAD_ALERT_RECORD				 101
  1.1773 +#define SSL_R_BAD_AUTHENTICATION_TYPE			 102
  1.1774 +#define SSL_R_BAD_CHANGE_CIPHER_SPEC			 103
  1.1775 +#define SSL_R_BAD_CHECKSUM				 104
  1.1776 +#define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK		 106
  1.1777 +#define SSL_R_BAD_DECOMPRESSION				 107
  1.1778 +#define SSL_R_BAD_DH_G_LENGTH				 108
  1.1779 +#define SSL_R_BAD_DH_PUB_KEY_LENGTH			 109
  1.1780 +#define SSL_R_BAD_DH_P_LENGTH				 110
  1.1781 +#define SSL_R_BAD_DIGEST_LENGTH				 111
  1.1782 +#define SSL_R_BAD_DSA_SIGNATURE				 112
  1.1783 +#define SSL_R_BAD_ECC_CERT				 304
  1.1784 +#define SSL_R_BAD_ECDSA_SIGNATURE			 305
  1.1785 +#define SSL_R_BAD_ECPOINT				 306
  1.1786 +#define SSL_R_BAD_HELLO_REQUEST				 105
  1.1787 +#define SSL_R_BAD_LENGTH				 271
  1.1788 +#define SSL_R_BAD_MAC_DECODE				 113
  1.1789 +#define SSL_R_BAD_MESSAGE_TYPE				 114
  1.1790 +#define SSL_R_BAD_PACKET_LENGTH				 115
  1.1791 +#define SSL_R_BAD_PROTOCOL_VERSION_NUMBER		 116
  1.1792 +#define SSL_R_BAD_RESPONSE_ARGUMENT			 117
  1.1793 +#define SSL_R_BAD_RSA_DECRYPT				 118
  1.1794 +#define SSL_R_BAD_RSA_ENCRYPT				 119
  1.1795 +#define SSL_R_BAD_RSA_E_LENGTH				 120
  1.1796 +#define SSL_R_BAD_RSA_MODULUS_LENGTH			 121
  1.1797 +#define SSL_R_BAD_RSA_SIGNATURE				 122
  1.1798 +#define SSL_R_BAD_SIGNATURE				 123
  1.1799 +#define SSL_R_BAD_SSL_FILETYPE				 124
  1.1800 +#define SSL_R_BAD_SSL_SESSION_ID_LENGTH			 125
  1.1801 +#define SSL_R_BAD_STATE					 126
  1.1802 +#define SSL_R_BAD_WRITE_RETRY				 127
  1.1803 +#define SSL_R_BIO_NOT_SET				 128
  1.1804 +#define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG			 129
  1.1805 +#define SSL_R_BN_LIB					 130
  1.1806 +#define SSL_R_CA_DN_LENGTH_MISMATCH			 131
  1.1807 +#define SSL_R_CA_DN_TOO_LONG				 132
  1.1808 +#define SSL_R_CCS_RECEIVED_EARLY			 133
  1.1809 +#define SSL_R_CERTIFICATE_VERIFY_FAILED			 134
  1.1810 +#define SSL_R_CERT_LENGTH_MISMATCH			 135
  1.1811 +#define SSL_R_CHALLENGE_IS_DIFFERENT			 136
  1.1812 +#define SSL_R_CIPHER_CODE_WRONG_LENGTH			 137
  1.1813 +#define SSL_R_CIPHER_OR_HASH_UNAVAILABLE		 138
  1.1814 +#define SSL_R_CIPHER_TABLE_SRC_ERROR			 139
  1.1815 +#define SSL_R_CLIENTHELLO_TLSEXT			 157
  1.1816 +#define SSL_R_COMPRESSED_LENGTH_TOO_LONG		 140
  1.1817 +#define SSL_R_COMPRESSION_FAILURE			 141
  1.1818 +#define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE	 307
  1.1819 +#define SSL_R_COMPRESSION_LIBRARY_ERROR			 142
  1.1820 +#define SSL_R_CONNECTION_ID_IS_DIFFERENT		 143
  1.1821 +#define SSL_R_CONNECTION_TYPE_NOT_SET			 144
  1.1822 +#define SSL_R_COOKIE_MISMATCH				 308
  1.1823 +#define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED		 145
  1.1824 +#define SSL_R_DATA_LENGTH_TOO_LONG			 146
  1.1825 +#define SSL_R_DECRYPTION_FAILED				 147
  1.1826 +#define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC	 281
  1.1827 +#define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG		 148
  1.1828 +#define SSL_R_DIGEST_CHECK_FAILED			 149
  1.1829 +#define SSL_R_DUPLICATE_COMPRESSION_ID			 309
  1.1830 +#define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER		 310
  1.1831 +#define SSL_R_ENCRYPTED_LENGTH_TOO_LONG			 150
  1.1832 +#define SSL_R_ERROR_GENERATING_TMP_RSA_KEY		 282
  1.1833 +#define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST		 151
  1.1834 +#define SSL_R_EXCESSIVE_MESSAGE_SIZE			 152
  1.1835 +#define SSL_R_EXTRA_DATA_IN_MESSAGE			 153
  1.1836 +#define SSL_R_GOT_A_FIN_BEFORE_A_CCS			 154
  1.1837 +#define SSL_R_HTTPS_PROXY_REQUEST			 155
  1.1838 +#define SSL_R_HTTP_REQUEST				 156
  1.1839 +#define SSL_R_ILLEGAL_PADDING				 283
  1.1840 +#define SSL_R_INVALID_CHALLENGE_LENGTH			 158
  1.1841 +#define SSL_R_INVALID_COMMAND				 280
  1.1842 +#define SSL_R_INVALID_PURPOSE				 278
  1.1843 +#define SSL_R_INVALID_TICKET_KEYS_LENGTH		 275
  1.1844 +#define SSL_R_INVALID_TRUST				 279
  1.1845 +#define SSL_R_KEY_ARG_TOO_LONG				 284
  1.1846 +#define SSL_R_KRB5					 285
  1.1847 +#define SSL_R_KRB5_C_CC_PRINC				 286
  1.1848 +#define SSL_R_KRB5_C_GET_CRED				 287
  1.1849 +#define SSL_R_KRB5_C_INIT				 288
  1.1850 +#define SSL_R_KRB5_C_MK_REQ				 289
  1.1851 +#define SSL_R_KRB5_S_BAD_TICKET				 290
  1.1852 +#define SSL_R_KRB5_S_INIT				 291
  1.1853 +#define SSL_R_KRB5_S_RD_REQ				 292
  1.1854 +#define SSL_R_KRB5_S_TKT_EXPIRED			 293
  1.1855 +#define SSL_R_KRB5_S_TKT_NYV				 294
  1.1856 +#define SSL_R_KRB5_S_TKT_SKEW				 295
  1.1857 +#define SSL_R_LENGTH_MISMATCH				 159
  1.1858 +#define SSL_R_LENGTH_TOO_SHORT				 160
  1.1859 +#define SSL_R_LIBRARY_BUG				 274
  1.1860 +#define SSL_R_LIBRARY_HAS_NO_CIPHERS			 161
  1.1861 +#define SSL_R_MESSAGE_TOO_LONG				 296
  1.1862 +#define SSL_R_MISSING_DH_DSA_CERT			 162
  1.1863 +#define SSL_R_MISSING_DH_KEY				 163
  1.1864 +#define SSL_R_MISSING_DH_RSA_CERT			 164
  1.1865 +#define SSL_R_MISSING_DSA_SIGNING_CERT			 165
  1.1866 +#define SSL_R_MISSING_EXPORT_TMP_DH_KEY			 166
  1.1867 +#define SSL_R_MISSING_EXPORT_TMP_RSA_KEY		 167
  1.1868 +#define SSL_R_MISSING_RSA_CERTIFICATE			 168
  1.1869 +#define SSL_R_MISSING_RSA_ENCRYPTING_CERT		 169
  1.1870 +#define SSL_R_MISSING_RSA_SIGNING_CERT			 170
  1.1871 +#define SSL_R_MISSING_TMP_DH_KEY			 171
  1.1872 +#define SSL_R_MISSING_TMP_ECDH_KEY			 311
  1.1873 +#define SSL_R_MISSING_TMP_RSA_KEY			 172
  1.1874 +#define SSL_R_MISSING_TMP_RSA_PKEY			 173
  1.1875 +#define SSL_R_MISSING_VERIFY_MESSAGE			 174
  1.1876 +#define SSL_R_NON_SSLV2_INITIAL_PACKET			 175
  1.1877 +#define SSL_R_NO_CERTIFICATES_RETURNED			 176
  1.1878 +#define SSL_R_NO_CERTIFICATE_ASSIGNED			 177
  1.1879 +#define SSL_R_NO_CERTIFICATE_RETURNED			 178
  1.1880 +#define SSL_R_NO_CERTIFICATE_SET			 179
  1.1881 +#define SSL_R_NO_CERTIFICATE_SPECIFIED			 180
  1.1882 +#define SSL_R_NO_CIPHERS_AVAILABLE			 181
  1.1883 +#define SSL_R_NO_CIPHERS_PASSED				 182
  1.1884 +#define SSL_R_NO_CIPHERS_SPECIFIED			 183
  1.1885 +#define SSL_R_NO_CIPHER_LIST				 184
  1.1886 +#define SSL_R_NO_CIPHER_MATCH				 185
  1.1887 +#define SSL_R_NO_CLIENT_CERT_RECEIVED			 186
  1.1888 +#define SSL_R_NO_COMPRESSION_SPECIFIED			 187
  1.1889 +#define SSL_R_NO_METHOD_SPECIFIED			 188
  1.1890 +#define SSL_R_NO_PRIVATEKEY				 189
  1.1891 +#define SSL_R_NO_PRIVATE_KEY_ASSIGNED			 190
  1.1892 +#define SSL_R_NO_PROTOCOLS_AVAILABLE			 191
  1.1893 +#define SSL_R_NO_PUBLICKEY				 192
  1.1894 +#define SSL_R_NO_SHARED_CIPHER				 193
  1.1895 +#define SSL_R_NO_VERIFY_CALLBACK			 194
  1.1896 +#define SSL_R_NULL_SSL_CTX				 195
  1.1897 +#define SSL_R_NULL_SSL_METHOD_PASSED			 196
  1.1898 +#define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED		 197
  1.1899 +#define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE		 297
  1.1900 +#define SSL_R_PACKET_LENGTH_TOO_LONG			 198
  1.1901 +#define SSL_R_PARSE_TLSEXT				 223
  1.1902 +#define SSL_R_PATH_TOO_LONG				 270
  1.1903 +#define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE		 199
  1.1904 +#define SSL_R_PEER_ERROR				 200
  1.1905 +#define SSL_R_PEER_ERROR_CERTIFICATE			 201
  1.1906 +#define SSL_R_PEER_ERROR_NO_CERTIFICATE			 202
  1.1907 +#define SSL_R_PEER_ERROR_NO_CIPHER			 203
  1.1908 +#define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE	 204
  1.1909 +#define SSL_R_PRE_MAC_LENGTH_TOO_LONG			 205
  1.1910 +#define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS		 206
  1.1911 +#define SSL_R_PROTOCOL_IS_SHUTDOWN			 207
  1.1912 +#define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR			 208
  1.1913 +#define SSL_R_PUBLIC_KEY_IS_NOT_RSA			 209
  1.1914 +#define SSL_R_PUBLIC_KEY_NOT_RSA			 210
  1.1915 +#define SSL_R_READ_BIO_NOT_SET				 211
  1.1916 +#define SSL_R_READ_TIMEOUT_EXPIRED			 312
  1.1917 +#define SSL_R_READ_WRONG_PACKET_TYPE			 212
  1.1918 +#define SSL_R_RECORD_LENGTH_MISMATCH			 213
  1.1919 +#define SSL_R_RECORD_TOO_LARGE				 214
  1.1920 +#define SSL_R_RECORD_TOO_SMALL				 298
  1.1921 +#define SSL_R_REQUIRED_CIPHER_MISSING			 215
  1.1922 +#define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO		 216
  1.1923 +#define SSL_R_REUSE_CERT_TYPE_NOT_ZERO			 217
  1.1924 +#define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO		 218
  1.1925 +#define SSL_R_SERVERHELLO_TLSEXT			 224
  1.1926 +#define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED		 277
  1.1927 +#define SSL_R_SHORT_READ				 219
  1.1928 +#define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE	 220
  1.1929 +#define SSL_R_SSL23_DOING_SESSION_ID_REUSE		 221
  1.1930 +#define SSL_R_SSL2_CONNECTION_ID_TOO_LONG		 299
  1.1931 +#define SSL_R_SSL3_EXT_INVALID_SERVERNAME		 225
  1.1932 +#define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE		 226
  1.1933 +#define SSL_R_SSL3_SESSION_ID_TOO_LONG			 300
  1.1934 +#define SSL_R_SSL3_SESSION_ID_TOO_SHORT			 222
  1.1935 +#define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE		 1042
  1.1936 +#define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC		 1020
  1.1937 +#define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED		 1045
  1.1938 +#define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED		 1044
  1.1939 +#define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN		 1046
  1.1940 +#define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE		 1030
  1.1941 +#define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE		 1040
  1.1942 +#define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER		 1047
  1.1943 +#define SSL_R_SSLV3_ALERT_NO_CERTIFICATE		 1041
  1.1944 +#define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE		 1010
  1.1945 +#define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE	 1043
  1.1946 +#define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION	 228
  1.1947 +#define SSL_R_SSL_HANDSHAKE_FAILURE			 229
  1.1948 +#define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS		 230
  1.1949 +#define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED		 301
  1.1950 +#define SSL_R_SSL_SESSION_ID_CONFLICT			 302
  1.1951 +#define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG		 273
  1.1952 +#define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH		 303
  1.1953 +#define SSL_R_SSL_SESSION_ID_IS_DIFFERENT		 231
  1.1954 +#define SSL_R_TLSV1_ALERT_ACCESS_DENIED			 1049
  1.1955 +#define SSL_R_TLSV1_ALERT_DECODE_ERROR			 1050
  1.1956 +#define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED		 1021
  1.1957 +#define SSL_R_TLSV1_ALERT_DECRYPT_ERROR			 1051
  1.1958 +#define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION		 1060
  1.1959 +#define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY		 1071
  1.1960 +#define SSL_R_TLSV1_ALERT_INTERNAL_ERROR		 1080
  1.1961 +#define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION		 1100
  1.1962 +#define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION		 1070
  1.1963 +#define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW		 1022
  1.1964 +#define SSL_R_TLSV1_ALERT_UNKNOWN_CA			 1048
  1.1965 +#define SSL_R_TLSV1_ALERT_USER_CANCELLED		 1090
  1.1966 +#define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER	 232
  1.1967 +#define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST		 227
  1.1968 +#define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233
  1.1969 +#define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG	 234
  1.1970 +#define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER		 235
  1.1971 +#define SSL_R_UNABLE_TO_DECODE_DH_CERTS			 236
  1.1972 +#define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS		 313
  1.1973 +#define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY		 237
  1.1974 +#define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS		 238
  1.1975 +#define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS		 314
  1.1976 +#define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS	 239
  1.1977 +#define SSL_R_UNABLE_TO_FIND_SSL_METHOD			 240
  1.1978 +#define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES		 241
  1.1979 +#define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES		 242
  1.1980 +#define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES		 243
  1.1981 +#define SSL_R_UNEXPECTED_MESSAGE			 244
  1.1982 +#define SSL_R_UNEXPECTED_RECORD				 245
  1.1983 +#define SSL_R_UNINITIALIZED				 276
  1.1984 +#define SSL_R_UNKNOWN_ALERT_TYPE			 246
  1.1985 +#define SSL_R_UNKNOWN_CERTIFICATE_TYPE			 247
  1.1986 +#define SSL_R_UNKNOWN_CIPHER_RETURNED			 248
  1.1987 +#define SSL_R_UNKNOWN_CIPHER_TYPE			 249
  1.1988 +#define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE			 250
  1.1989 +#define SSL_R_UNKNOWN_PKEY_TYPE				 251
  1.1990 +#define SSL_R_UNKNOWN_PROTOCOL				 252
  1.1991 +#define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE			 253
  1.1992 +#define SSL_R_UNKNOWN_SSL_VERSION			 254
  1.1993 +#define SSL_R_UNKNOWN_STATE				 255
  1.1994 +#define SSL_R_UNSUPPORTED_CIPHER			 256
  1.1995 +#define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM		 257
  1.1996 +#define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE		 315
  1.1997 +#define SSL_R_UNSUPPORTED_PROTOCOL			 258
  1.1998 +#define SSL_R_UNSUPPORTED_SSL_VERSION			 259
  1.1999 +#define SSL_R_WRITE_BIO_NOT_SET				 260
  1.2000 +#define SSL_R_WRONG_CIPHER_RETURNED			 261
  1.2001 +#define SSL_R_WRONG_MESSAGE_TYPE			 262
  1.2002 +#define SSL_R_WRONG_NUMBER_OF_KEY_BITS			 263
  1.2003 +#define SSL_R_WRONG_SIGNATURE_LENGTH			 264
  1.2004 +#define SSL_R_WRONG_SIGNATURE_SIZE			 265
  1.2005 +#define SSL_R_WRONG_SSL_VERSION				 266
  1.2006 +#define SSL_R_WRONG_VERSION_NUMBER			 267
  1.2007 +#define SSL_R_X509_LIB					 268
  1.2008 +#define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS		 269
  1.2009 +
  1.2010 +#ifdef  __cplusplus
  1.2011 +}
  1.2012 +#endif
  1.2013 +#endif