* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Mayaqua / openssl / ssl.h
diff --git a/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/openssl/ssl.h b/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/openssl/ssl.h
new file mode 100644 (file)
index 0000000..01b4cc5
--- /dev/null
@@ -0,0 +1,1961 @@
+/* ssl/ssl.h */\r
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\r
+ * All rights reserved.\r
+ *\r
+ * This package is an SSL implementation written\r
+ * by Eric Young (eay@cryptsoft.com).\r
+ * The implementation was written so as to conform with Netscapes SSL.\r
+ * \r
+ * This library is free for commercial and non-commercial use as long as\r
+ * the following conditions are aheared to.  The following conditions\r
+ * apply to all code found in this distribution, be it the RC4, RSA,\r
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\r
+ * included with this distribution is covered by the same copyright terms\r
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).\r
+ * \r
+ * Copyright remains Eric Young's, and as such any Copyright notices in\r
+ * the code are not to be removed.\r
+ * If this package is used in a product, Eric Young should be given attribution\r
+ * as the author of the parts of the library used.\r
+ * This can be in the form of a textual message at program startup or\r
+ * in documentation (online or textual) provided with the package.\r
+ * \r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. All advertising materials mentioning features or use of this software\r
+ *    must display the following acknowledgement:\r
+ *    "This product includes cryptographic software written by\r
+ *     Eric Young (eay@cryptsoft.com)"\r
+ *    The word 'cryptographic' can be left out if the rouines from the library\r
+ *    being used are not cryptographic related :-).\r
+ * 4. If you include any Windows specific code (or a derivative thereof) from \r
+ *    the apps directory (application code) you must include an acknowledgement:\r
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"\r
+ * \r
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ * \r
+ * The licence and distribution terms for any publically available version or\r
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be\r
+ * copied and put under another distribution licence\r
+ * [including the GNU Public Licence.]\r
+ */\r
+/* ====================================================================\r
+ * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer. \r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in\r
+ *    the documentation and/or other materials provided with the\r
+ *    distribution.\r
+ *\r
+ * 3. All advertising materials mentioning features or use of this\r
+ *    software must display the following acknowledgment:\r
+ *    "This product includes software developed by the OpenSSL Project\r
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"\r
+ *\r
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to\r
+ *    endorse or promote products derived from this software without\r
+ *    prior written permission. For written permission, please contact\r
+ *    openssl-core@openssl.org.\r
+ *\r
+ * 5. Products derived from this software may not be called "OpenSSL"\r
+ *    nor may "OpenSSL" appear in their names without prior written\r
+ *    permission of the OpenSSL Project.\r
+ *\r
+ * 6. Redistributions of any form whatsoever must retain the following\r
+ *    acknowledgment:\r
+ *    "This product includes software developed by the OpenSSL Project\r
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\r
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\r
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
+ * OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ====================================================================\r
+ *\r
+ * This product includes cryptographic software written by Eric Young\r
+ * (eay@cryptsoft.com).  This product includes software written by Tim\r
+ * Hudson (tjh@cryptsoft.com).\r
+ *\r
+ */\r
+/* ====================================================================\r
+ * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer. \r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in\r
+ *    the documentation and/or other materials provided with the\r
+ *    distribution.\r
+ *\r
+ * 3. All advertising materials mentioning features or use of this\r
+ *    software must display the following acknowledgment:\r
+ *    "This product includes software developed by the OpenSSL Project\r
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"\r
+ *\r
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to\r
+ *    endorse or promote products derived from this software without\r
+ *    prior written permission. For written permission, please contact\r
+ *    openssl-core@openssl.org.\r
+ *\r
+ * 5. Products derived from this software may not be called "OpenSSL"\r
+ *    nor may "OpenSSL" appear in their names without prior written\r
+ *    permission of the OpenSSL Project.\r
+ *\r
+ * 6. Redistributions of any form whatsoever must retain the following\r
+ *    acknowledgment:\r
+ *    "This product includes software developed by the OpenSSL Project\r
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\r
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\r
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
+ * OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ====================================================================\r
+ *\r
+ * This product includes cryptographic software written by Eric Young\r
+ * (eay@cryptsoft.com).  This product includes software written by Tim\r
+ * Hudson (tjh@cryptsoft.com).\r
+ *\r
+ */\r
+/* ====================================================================\r
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\r
+ * ECC cipher suite support in OpenSSL originally developed by \r
+ * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\r
+ */\r
+\r
+#ifndef HEADER_SSL_H \r
+#define HEADER_SSL_H \r
+\r
+#include <openssl/e_os2.h>\r
+\r
+#ifndef OPENSSL_NO_COMP\r
+#include <openssl/comp.h>\r
+#endif\r
+#ifndef OPENSSL_NO_BIO\r
+#include <openssl/bio.h>\r
+#endif\r
+#ifndef OPENSSL_NO_DEPRECATED\r
+#ifndef OPENSSL_NO_X509\r
+#include <openssl/x509.h>\r
+#endif\r
+#include <openssl/crypto.h>\r
+#include <openssl/lhash.h>\r
+#include <openssl/buffer.h>\r
+#endif\r
+#include <openssl/pem.h>\r
+\r
+#include <openssl/kssl.h>\r
+#include <openssl/safestack.h>\r
+#include <openssl/symhacks.h>\r
+\r
+#ifdef  __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/* SSLeay version number for ASN.1 encoding of the session information */\r
+/* Version 0 - initial version\r
+ * Version 1 - added the optional peer certificate\r
+ */\r
+#define SSL_SESSION_ASN1_VERSION 0x0001\r
+\r
+/* text strings for the ciphers */\r
+#define SSL_TXT_NULL_WITH_MD5          SSL2_TXT_NULL_WITH_MD5                  \r
+#define SSL_TXT_RC4_128_WITH_MD5       SSL2_TXT_RC4_128_WITH_MD5               \r
+#define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5   \r
+#define SSL_TXT_RC2_128_CBC_WITH_MD5   SSL2_TXT_RC2_128_CBC_WITH_MD5           \r
+#define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5   \r
+#define SSL_TXT_IDEA_128_CBC_WITH_MD5  SSL2_TXT_IDEA_128_CBC_WITH_MD5          \r
+#define SSL_TXT_DES_64_CBC_WITH_MD5    SSL2_TXT_DES_64_CBC_WITH_MD5            \r
+#define SSL_TXT_DES_64_CBC_WITH_SHA    SSL2_TXT_DES_64_CBC_WITH_SHA            \r
+#define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5   \r
+#define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA   \r
+\r
+/*    VRS Additional Kerberos5 entries\r
+ */\r
+#define SSL_TXT_KRB5_DES_64_CBC_SHA   SSL3_TXT_KRB5_DES_64_CBC_SHA\r
+#define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA\r
+#define SSL_TXT_KRB5_RC4_128_SHA      SSL3_TXT_KRB5_RC4_128_SHA\r
+#define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA\r
+#define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5       \r
+#define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5       \r
+#define SSL_TXT_KRB5_RC4_128_MD5      SSL3_TXT_KRB5_RC4_128_MD5\r
+#define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5 \r
+\r
+#define SSL_TXT_KRB5_DES_40_CBC_SHA   SSL3_TXT_KRB5_DES_40_CBC_SHA \r
+#define SSL_TXT_KRB5_RC2_40_CBC_SHA   SSL3_TXT_KRB5_RC2_40_CBC_SHA \r
+#define SSL_TXT_KRB5_RC4_40_SHA              SSL3_TXT_KRB5_RC4_40_SHA\r
+#define SSL_TXT_KRB5_DES_40_CBC_MD5   SSL3_TXT_KRB5_DES_40_CBC_MD5 \r
+#define SSL_TXT_KRB5_RC2_40_CBC_MD5   SSL3_TXT_KRB5_RC2_40_CBC_MD5 \r
+#define SSL_TXT_KRB5_RC4_40_MD5              SSL3_TXT_KRB5_RC4_40_MD5\r
+\r
+#define SSL_TXT_KRB5_DES_40_CBC_SHA   SSL3_TXT_KRB5_DES_40_CBC_SHA\r
+#define SSL_TXT_KRB5_DES_40_CBC_MD5   SSL3_TXT_KRB5_DES_40_CBC_MD5\r
+#define SSL_TXT_KRB5_DES_64_CBC_SHA   SSL3_TXT_KRB5_DES_64_CBC_SHA\r
+#define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5\r
+#define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA\r
+#define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5\r
+#define SSL_MAX_KRB5_PRINCIPAL_LENGTH  256\r
+\r
+#define SSL_MAX_SSL_SESSION_ID_LENGTH          32\r
+#define SSL_MAX_SID_CTX_LENGTH                 32\r
+\r
+#define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES    (512/8)\r
+#define SSL_MAX_KEY_ARG_LENGTH                 8\r
+#define SSL_MAX_MASTER_KEY_LENGTH              48\r
+\r
+/* These are used to specify which ciphers to use and not to use */\r
+#define SSL_TXT_LOW            "LOW"\r
+#define SSL_TXT_MEDIUM         "MEDIUM"\r
+#define SSL_TXT_HIGH           "HIGH"\r
+#define SSL_TXT_kFZA           "kFZA"\r
+#define        SSL_TXT_aFZA            "aFZA"\r
+#define SSL_TXT_eFZA           "eFZA"\r
+#define SSL_TXT_FZA            "FZA"\r
+\r
+#define        SSL_TXT_aNULL           "aNULL"\r
+#define        SSL_TXT_eNULL           "eNULL"\r
+#define        SSL_TXT_NULL            "NULL"\r
+\r
+#define SSL_TXT_kKRB5          "kKRB5"\r
+#define SSL_TXT_aKRB5          "aKRB5"\r
+#define SSL_TXT_KRB5           "KRB5"\r
+\r
+#define SSL_TXT_kRSA           "kRSA"\r
+#define SSL_TXT_kDHr           "kDHr"\r
+#define SSL_TXT_kDHd           "kDHd"\r
+#define SSL_TXT_kEDH           "kEDH"\r
+#define        SSL_TXT_aRSA            "aRSA"\r
+#define        SSL_TXT_aDSS            "aDSS"\r
+#define        SSL_TXT_aDH             "aDH"\r
+#define        SSL_TXT_DSS             "DSS"\r
+#define SSL_TXT_DH             "DH"\r
+#define SSL_TXT_EDH            "EDH"\r
+#define SSL_TXT_ADH            "ADH"\r
+#define SSL_TXT_RSA            "RSA"\r
+#define SSL_TXT_DES            "DES"\r
+#define SSL_TXT_3DES           "3DES"\r
+#define SSL_TXT_RC4            "RC4"\r
+#define SSL_TXT_RC2            "RC2"\r
+#define SSL_TXT_IDEA           "IDEA"\r
+#define SSL_TXT_AES            "AES"\r
+#define SSL_TXT_MD5            "MD5"\r
+#define SSL_TXT_SHA1           "SHA1"\r
+#define SSL_TXT_SHA            "SHA"\r
+#define SSL_TXT_EXP            "EXP"\r
+#define SSL_TXT_EXPORT         "EXPORT"\r
+#define SSL_TXT_EXP40          "EXPORT40"\r
+#define SSL_TXT_EXP56          "EXPORT56"\r
+#define SSL_TXT_SSLV2          "SSLv2"\r
+#define SSL_TXT_SSLV3          "SSLv3"\r
+#define SSL_TXT_TLSV1          "TLSv1"\r
+#define SSL_TXT_ALL            "ALL"\r
+#define SSL_TXT_ECC            "ECCdraft" /* ECC ciphersuites are not yet official */\r
+\r
+/*\r
+ * COMPLEMENTOF* definitions. These identifiers are used to (de-select)\r
+ * ciphers normally not being used.\r
+ * Example: "RC4" will activate all ciphers using RC4 including ciphers\r
+ * without authentication, which would normally disabled by DEFAULT (due\r
+ * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT"\r
+ * will make sure that it is also disabled in the specific selection.\r
+ * COMPLEMENTOF* identifiers are portable between version, as adjustments\r
+ * to the default cipher setup will also be included here.\r
+ *\r
+ * COMPLEMENTOFDEFAULT does not experience the same special treatment that\r
+ * DEFAULT gets, as only selection is being done and no sorting as needed\r
+ * for DEFAULT.\r
+ */\r
+#define SSL_TXT_CMPALL         "COMPLEMENTOFALL"\r
+#define SSL_TXT_CMPDEF         "COMPLEMENTOFDEFAULT"\r
+\r
+/* The following cipher list is used by default.\r
+ * It also is substituted when an application-defined cipher list string\r
+ * starts with 'DEFAULT'. */\r
+#define SSL_DEFAULT_CIPHER_LIST        "ALL:!ADH:+RC4:@STRENGTH" /* low priority for RC4 */\r
+\r
+/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */\r
+#define SSL_SENT_SHUTDOWN      1\r
+#define SSL_RECEIVED_SHUTDOWN  2\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#ifdef  __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2)\r
+#define OPENSSL_NO_SSL2\r
+#endif\r
+\r
+#define SSL_FILETYPE_ASN1      X509_FILETYPE_ASN1\r
+#define SSL_FILETYPE_PEM       X509_FILETYPE_PEM\r
+\r
+/* This is needed to stop compilers complaining about the\r
+ * 'struct ssl_st *' function parameters used to prototype callbacks\r
+ * in SSL_CTX. */\r
+typedef struct ssl_st *ssl_crock_st;\r
+\r
+/* used to hold info on the particular ciphers used */\r
+typedef struct ssl_cipher_st\r
+       {\r
+       int valid;\r
+       const char *name;               /* text name */\r
+       unsigned long id;               /* id, 4 bytes, first is version */\r
+       unsigned long algorithms;       /* what ciphers are used */\r
+       unsigned long algo_strength;    /* strength and export flags */\r
+       unsigned long algorithm2;       /* Extra flags */\r
+       int strength_bits;              /* Number of bits really used */\r
+       int alg_bits;                   /* Number of bits for algorithm */\r
+       unsigned long mask;             /* used for matching */\r
+       unsigned long mask_strength;    /* also used for matching */\r
+       } SSL_CIPHER;\r
+\r
+DECLARE_STACK_OF(SSL_CIPHER)\r
+\r
+typedef struct ssl_st SSL;\r
+typedef struct ssl_ctx_st SSL_CTX;\r
+\r
+/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */\r
+typedef struct ssl_method_st\r
+       {\r
+       int version;\r
+       int (*ssl_new)(SSL *s);\r
+       void (*ssl_clear)(SSL *s);\r
+       void (*ssl_free)(SSL *s);\r
+       int (*ssl_accept)(SSL *s);\r
+       int (*ssl_connect)(SSL *s);\r
+       int (*ssl_read)(SSL *s,void *buf,int len);\r
+       int (*ssl_peek)(SSL *s,void *buf,int len);\r
+       int (*ssl_write)(SSL *s,const void *buf,int len);\r
+       int (*ssl_shutdown)(SSL *s);\r
+       int (*ssl_renegotiate)(SSL *s);\r
+       int (*ssl_renegotiate_check)(SSL *s);\r
+       long (*ssl_get_message)(SSL *s, int st1, int stn, int mt, long\r
+               max, int *ok);\r
+       int (*ssl_read_bytes)(SSL *s, int type, unsigned char *buf, int len, \r
+               int peek);\r
+       int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len);\r
+       int (*ssl_dispatch_alert)(SSL *s);\r
+       long (*ssl_ctrl)(SSL *s,int cmd,long larg,void *parg);\r
+       long (*ssl_ctx_ctrl)(SSL_CTX *ctx,int cmd,long larg,void *parg);\r
+       SSL_CIPHER *(*get_cipher_by_char)(const unsigned char *ptr);\r
+       int (*put_cipher_by_char)(const SSL_CIPHER *cipher,unsigned char *ptr);\r
+       int (*ssl_pending)(const SSL *s);\r
+       int (*num_ciphers)(void);\r
+       SSL_CIPHER *(*get_cipher)(unsigned ncipher);\r
+       struct ssl_method_st *(*get_ssl_method)(int version);\r
+       long (*get_timeout)(void);\r
+       struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */\r
+       int (*ssl_version)(void);\r
+       long (*ssl_callback_ctrl)(SSL *s, int cb_id, void (*fp)(void));\r
+       long (*ssl_ctx_callback_ctrl)(SSL_CTX *s, int cb_id, void (*fp)(void));\r
+       } SSL_METHOD;\r
+\r
+/* Lets make this into an ASN.1 type structure as follows\r
+ * SSL_SESSION_ID ::= SEQUENCE {\r
+ *     version                 INTEGER,        -- structure version number\r
+ *     SSLversion              INTEGER,        -- SSL version number\r
+ *     Cipher                  OCTET_STRING,   -- the 3 byte cipher ID\r
+ *     Session_ID              OCTET_STRING,   -- the Session ID\r
+ *     Master_key              OCTET_STRING,   -- the master key\r
+ *     KRB5_principal          OCTET_STRING    -- optional Kerberos principal\r
+ *     Key_Arg [ 0 ] IMPLICIT  OCTET_STRING,   -- the optional Key argument\r
+ *     Time [ 1 ] EXPLICIT     INTEGER,        -- optional Start Time\r
+ *     Timeout [ 2 ] EXPLICIT  INTEGER,        -- optional Timeout ins seconds\r
+ *     Peer [ 3 ] EXPLICIT     X509,           -- optional Peer Certificate\r
+ *     Session_ID_context [ 4 ] EXPLICIT OCTET_STRING,   -- the Session ID context\r
+ *     Verify_result [ 5 ] EXPLICIT INTEGER    -- X509_V_... code for `Peer'\r
+ *     Compression [6] IMPLICIT ASN1_OBJECT    -- compression OID XXXXX\r
+ *     }\r
+ * Look in ssl/ssl_asn1.c for more details\r
+ * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).\r
+ */\r
+typedef struct ssl_session_st\r
+       {\r
+       int ssl_version;        /* what ssl version session info is\r
+                                * being kept in here? */\r
+\r
+       /* only really used in SSLv2 */\r
+       unsigned int key_arg_length;\r
+       unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH];\r
+       int master_key_length;\r
+       unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];\r
+       /* session_id - valid? */\r
+       unsigned int session_id_length;\r
+       unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];\r
+       /* this is used to determine whether the session is being reused in\r
+        * the appropriate context. It is up to the application to set this,\r
+        * via SSL_new */\r
+       unsigned int sid_ctx_length;\r
+       unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];\r
+\r
+#ifndef OPENSSL_NO_KRB5\r
+        unsigned int krb5_client_princ_len;\r
+        unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH];\r
+#endif /* OPENSSL_NO_KRB5 */\r
+\r
+       int not_resumable;\r
+\r
+       /* The cert is the certificate used to establish this connection */\r
+       struct sess_cert_st /* SESS_CERT */ *sess_cert;\r
+\r
+       /* This is the cert for the other end.\r
+        * On clients, it will be the same as sess_cert->peer_key->x509\r
+        * (the latter is not enough as sess_cert is not retained\r
+        * in the external representation of sessions, see ssl_asn1.c). */\r
+       X509 *peer;\r
+       /* when app_verify_callback accepts a session where the peer's certificate\r
+        * is not ok, we must remember the error for session reuse: */\r
+       long verify_result; /* only for servers */\r
+\r
+       int references;\r
+       long timeout;\r
+       long time;\r
+\r
+       int compress_meth;              /* Need to lookup the method */\r
+\r
+       SSL_CIPHER *cipher;\r
+       unsigned long cipher_id;        /* when ASN.1 loaded, this\r
+                                        * needs to be used to load\r
+                                        * the 'cipher' structure */\r
+\r
+       STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */\r
+\r
+       CRYPTO_EX_DATA ex_data; /* application specific data */\r
+\r
+       /* These are used to make removal of session-ids more\r
+        * efficient and to implement a maximum cache size. */\r
+       struct ssl_session_st *prev,*next;\r
+       } SSL_SESSION;\r
+\r
+\r
+#define SSL_OP_MICROSOFT_SESS_ID_BUG                   0x00000001L\r
+#define SSL_OP_NETSCAPE_CHALLENGE_BUG                  0x00000002L\r
+#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG                0x00000008L\r
+#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG             0x00000010L\r
+#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER              0x00000020L\r
+#define SSL_OP_MSIE_SSLV2_RSA_PADDING                  0x00000040L\r
+#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG                        0x00000080L\r
+#define SSL_OP_TLS_D5_BUG                              0x00000100L\r
+#define SSL_OP_TLS_BLOCK_PADDING_BUG                   0x00000200L\r
+\r
+/* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added\r
+ * in OpenSSL 0.9.6d.  Usually (depending on the application protocol)\r
+ * the workaround is not needed.  Unfortunately some broken SSL/TLS\r
+ * implementations cannot handle it at all, which is why we include\r
+ * it in SSL_OP_ALL. */\r
+#define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS              0x00000800L /* added in 0.9.6e */\r
+\r
+/* SSL_OP_ALL: various bug workarounds that should be rather harmless.\r
+ *             This used to be 0x000FFFFFL before 0.9.7. */\r
+#define SSL_OP_ALL                                     0x00000FFFL\r
+\r
+/* DTLS options */\r
+#define SSL_OP_NO_QUERY_MTU                 0x00001000L\r
+/* Turn on Cookie Exchange (on relevant for servers) */\r
+#define SSL_OP_COOKIE_EXCHANGE              0x00002000L\r
+\r
+/* As server, disallow session resumption on renegotiation */\r
+#define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION  0x00010000L\r
+/* If set, always create a new key when using tmp_ecdh parameters */\r
+#define SSL_OP_SINGLE_ECDH_USE                         0x00080000L\r
+/* If set, always create a new key when using tmp_dh parameters */\r
+#define SSL_OP_SINGLE_DH_USE                           0x00100000L\r
+/* Set to always use the tmp_rsa key when doing RSA operations,\r
+ * even when this violates protocol specs */\r
+#define SSL_OP_EPHEMERAL_RSA                           0x00200000L\r
+/* Set on servers to choose the cipher according to the server's\r
+ * preferences */\r
+#define SSL_OP_CIPHER_SERVER_PREFERENCE                        0x00400000L\r
+/* If set, a server will allow a client to issue a SSLv3.0 version number\r
+ * as latest version supported in the premaster secret, even when TLSv1.0\r
+ * (version 3.1) was announced in the client hello. Normally this is\r
+ * forbidden to prevent version rollback attacks. */\r
+#define SSL_OP_TLS_ROLLBACK_BUG                                0x00800000L\r
+\r
+#define SSL_OP_NO_SSLv2                                        0x01000000L\r
+#define SSL_OP_NO_SSLv3                                        0x02000000L\r
+#define SSL_OP_NO_TLSv1                                        0x04000000L\r
+\r
+/* The next flag deliberately changes the ciphertest, this is a check\r
+ * for the PKCS#1 attack */\r
+#define SSL_OP_PKCS1_CHECK_1                           0x08000000L\r
+#define SSL_OP_PKCS1_CHECK_2                           0x10000000L\r
+#define SSL_OP_NETSCAPE_CA_DN_BUG                      0x20000000L\r
+#define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG         0x40000000L\r
+\r
+\r
+/* Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success\r
+ * when just a single record has been written): */\r
+#define SSL_MODE_ENABLE_PARTIAL_WRITE       0x00000001L\r
+/* Make it possible to retry SSL_write() with changed buffer location\r
+ * (buffer contents must stay the same!); this is not the default to avoid\r
+ * the misconception that non-blocking SSL_write() behaves like\r
+ * non-blocking write(): */\r
+#define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L\r
+/* Never bother the application with retries if the transport\r
+ * is blocking: */\r
+#define SSL_MODE_AUTO_RETRY 0x00000004L\r
+/* Don't attempt to automatically build certificate chain */\r
+#define SSL_MODE_NO_AUTO_CHAIN 0x00000008L\r
+\r
+\r
+/* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value,\r
+ * they cannot be used to clear bits. */\r
+\r
+#define SSL_CTX_set_options(ctx,op) \\r
+       SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)\r
+#define SSL_CTX_get_options(ctx) \\r
+       SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL)\r
+#define SSL_set_options(ssl,op) \\r
+       SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL)\r
+#define SSL_get_options(ssl) \\r
+        SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL)\r
+\r
+#define SSL_CTX_set_mode(ctx,op) \\r
+       SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)\r
+#define SSL_CTX_get_mode(ctx) \\r
+       SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)\r
+#define SSL_set_mode(ssl,op) \\r
+       SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)\r
+#define SSL_get_mode(ssl) \\r
+        SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)\r
+#define SSL_set_mtu(ssl, mtu) \\r
+        SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)\r
+\r
+\r
+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));\r
+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));\r
+#define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))\r
+#define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))\r
+\r
+\r
+\r
+#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32)\r
+#define SSL_MAX_CERT_LIST_DEFAULT 1024*30 /* 30k max cert list :-) */\r
+#else\r
+#define SSL_MAX_CERT_LIST_DEFAULT 1024*100 /* 100k max cert list :-) */\r
+#endif\r
+\r
+#define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT     (1024*20)\r
+\r
+/* This callback type is used inside SSL_CTX, SSL, and in the functions that set\r
+ * them. It is used to override the generation of SSL/TLS session IDs in a\r
+ * server. Return value should be zero on an error, non-zero to proceed. Also,\r
+ * callbacks should themselves check if the id they generate is unique otherwise\r
+ * the SSL handshake will fail with an error - callbacks can do this using the\r
+ * 'ssl' value they're passed by;\r
+ *      SSL_has_matching_session_id(ssl, id, *id_len)\r
+ * The length value passed in is set at the maximum size the session ID can be.\r
+ * In SSLv2 this is 16 bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback\r
+ * can alter this length to be less if desired, but under SSLv2 session IDs are\r
+ * supposed to be fixed at 16 bytes so the id will be padded after the callback\r
+ * returns in this case. It is also an error for the callback to set the size to\r
+ * zero. */\r
+typedef int (*GEN_SESSION_CB)(const SSL *ssl, unsigned char *id,\r
+                               unsigned int *id_len);\r
+\r
+typedef struct ssl_comp_st\r
+       {\r
+       int id;\r
+       const char *name;\r
+#ifndef OPENSSL_NO_COMP\r
+       COMP_METHOD *method;\r
+#else\r
+       char *method;\r
+#endif\r
+       } SSL_COMP;\r
+\r
+DECLARE_STACK_OF(SSL_COMP)\r
+\r
+struct ssl_ctx_st\r
+       {\r
+       SSL_METHOD *method;\r
+\r
+       STACK_OF(SSL_CIPHER) *cipher_list;\r
+       /* same as above but sorted for lookup */\r
+       STACK_OF(SSL_CIPHER) *cipher_list_by_id;\r
+\r
+       struct x509_store_st /* X509_STORE */ *cert_store;\r
+       struct lhash_st /* LHASH */ *sessions;  /* a set of SSL_SESSIONs */\r
+       /* Most session-ids that will be cached, default is\r
+        * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */\r
+       unsigned long session_cache_size;\r
+       struct ssl_session_st *session_cache_head;\r
+       struct ssl_session_st *session_cache_tail;\r
+\r
+       /* This can have one of 2 values, ored together,\r
+        * SSL_SESS_CACHE_CLIENT,\r
+        * SSL_SESS_CACHE_SERVER,\r
+        * Default is SSL_SESSION_CACHE_SERVER, which means only\r
+        * SSL_accept which cache SSL_SESSIONS. */\r
+       int session_cache_mode;\r
+\r
+       /* If timeout is not 0, it is the default timeout value set\r
+        * when SSL_new() is called.  This has been put in to make\r
+        * life easier to set things up */\r
+       long session_timeout;\r
+\r
+       /* If this callback is not null, it will be called each\r
+        * time a session id is added to the cache.  If this function\r
+        * returns 1, it means that the callback will do a\r
+        * SSL_SESSION_free() when it has finished using it.  Otherwise,\r
+        * on 0, it means the callback has finished with it.\r
+        * If remove_session_cb is not null, it will be called when\r
+        * a session-id is removed from the cache.  After the call,\r
+        * OpenSSL will SSL_SESSION_free() it. */\r
+       int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess);\r
+       void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess);\r
+       SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl,\r
+               unsigned char *data,int len,int *copy);\r
+\r
+       struct\r
+               {\r
+               int sess_connect;       /* SSL new conn - started */\r
+               int sess_connect_renegotiate;/* SSL reneg - requested */\r
+               int sess_connect_good;  /* SSL new conne/reneg - finished */\r
+               int sess_accept;        /* SSL new accept - started */\r
+               int sess_accept_renegotiate;/* SSL reneg - requested */\r
+               int sess_accept_good;   /* SSL accept/reneg - finished */\r
+               int sess_miss;          /* session lookup misses  */\r
+               int sess_timeout;       /* reuse attempt on timeouted session */\r
+               int sess_cache_full;    /* session removed due to full cache */\r
+               int sess_hit;           /* session reuse actually done */\r
+               int sess_cb_hit;        /* session-id that was not\r
+                                        * in the cache was\r
+                                        * passed back via the callback.  This\r
+                                        * indicates that the application is\r
+                                        * supplying session-id's from other\r
+                                        * processes - spooky :-) */\r
+               } stats;\r
+\r
+       int references;\r
+\r
+       /* if defined, these override the X509_verify_cert() calls */\r
+       int (*app_verify_callback)(X509_STORE_CTX *, void *);\r
+       void *app_verify_arg;\r
+       /* before OpenSSL 0.9.7, 'app_verify_arg' was ignored\r
+        * ('app_verify_callback' was called with just one argument) */\r
+\r
+       /* Default password callback. */\r
+       pem_password_cb *default_passwd_callback;\r
+\r
+       /* Default password callback user data. */\r
+       void *default_passwd_callback_userdata;\r
+\r
+       /* get client cert callback */\r
+       int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey);\r
+\r
+    /* cookie generate callback */\r
+    int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, \r
+        unsigned int *cookie_len);\r
+\r
+    /* verify cookie callback */\r
+    int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie, \r
+        unsigned int cookie_len);\r
+\r
+       CRYPTO_EX_DATA ex_data;\r
+\r
+       const EVP_MD *rsa_md5;/* For SSLv2 - name is 'ssl2-md5' */\r
+       const EVP_MD *md5;      /* For SSLv3/TLSv1 'ssl3-md5' */\r
+       const EVP_MD *sha1;   /* For SSLv3/TLSv1 'ssl3->sha1' */\r
+\r
+       STACK_OF(X509) *extra_certs;\r
+       STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */\r
+\r
+\r
+       /* Default values used when no per-SSL value is defined follow */\r
+\r
+       void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */\r
+\r
+       /* what we put in client cert requests */\r
+       STACK_OF(X509_NAME) *client_CA;\r
+\r
+\r
+       /* Default values to use in SSL structures follow (these are copied by SSL_new) */\r
+\r
+       unsigned long options;\r
+       unsigned long mode;\r
+       long max_cert_list;\r
+\r
+       struct cert_st /* CERT */ *cert;\r
+       int read_ahead;\r
+\r
+       /* callback that allows applications to peek at protocol messages */\r
+       void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);\r
+       void *msg_callback_arg;\r
+\r
+       int verify_mode;\r
+       unsigned int sid_ctx_length;\r
+       unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];\r
+       int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */\r
+\r
+       /* Default generate session ID callback. */\r
+       GEN_SESSION_CB generate_session_id;\r
+\r
+       X509_VERIFY_PARAM *param;\r
+\r
+#if 0\r
+       int purpose;            /* Purpose setting */\r
+       int trust;              /* Trust setting */\r
+#endif\r
+\r
+       int quiet_shutdown;\r
+       };\r
+\r
+#define SSL_SESS_CACHE_OFF                     0x0000\r
+#define SSL_SESS_CACHE_CLIENT                  0x0001\r
+#define SSL_SESS_CACHE_SERVER                  0x0002\r
+#define SSL_SESS_CACHE_BOTH    (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)\r
+#define SSL_SESS_CACHE_NO_AUTO_CLEAR           0x0080\r
+/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */\r
+#define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP      0x0100\r
+#define SSL_SESS_CACHE_NO_INTERNAL_STORE       0x0200\r
+#define SSL_SESS_CACHE_NO_INTERNAL \\r
+       (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)\r
+\r
+  struct lhash_st *SSL_CTX_sessions(SSL_CTX *ctx);\r
+#define SSL_CTX_sess_number(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)\r
+#define SSL_CTX_sess_connect(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)\r
+#define SSL_CTX_sess_connect_good(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)\r
+#define SSL_CTX_sess_connect_renegotiate(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)\r
+#define SSL_CTX_sess_accept(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)\r
+#define SSL_CTX_sess_accept_renegotiate(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)\r
+#define SSL_CTX_sess_accept_good(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)\r
+#define SSL_CTX_sess_hits(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)\r
+#define SSL_CTX_sess_cb_hits(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)\r
+#define SSL_CTX_sess_misses(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)\r
+#define SSL_CTX_sess_timeouts(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)\r
+#define SSL_CTX_sess_cache_full(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)\r
+\r
+#define SSL_CTX_sess_set_new_cb(ctx,cb)        ((ctx)->new_session_cb=(cb))\r
+#define SSL_CTX_sess_get_new_cb(ctx)   ((ctx)->new_session_cb)\r
+#define SSL_CTX_sess_set_remove_cb(ctx,cb)     ((ctx)->remove_session_cb=(cb))\r
+#define SSL_CTX_sess_get_remove_cb(ctx)        ((ctx)->remove_session_cb)\r
+#define SSL_CTX_sess_set_get_cb(ctx,cb)        ((ctx)->get_session_cb=(cb))\r
+#define SSL_CTX_sess_get_get_cb(ctx)   ((ctx)->get_session_cb)\r
+#define SSL_CTX_set_info_callback(ctx,cb)      ((ctx)->info_callback=(cb))\r
+#define SSL_CTX_get_info_callback(ctx)         ((ctx)->info_callback)\r
+#define SSL_CTX_set_client_cert_cb(ctx,cb)     ((ctx)->client_cert_cb=(cb))\r
+#define SSL_CTX_get_client_cert_cb(ctx)                ((ctx)->client_cert_cb)\r
+#define SSL_CTX_set_cookie_generate_cb(ctx,cb) ((ctx)->app_gen_cookie_cb=(cb))\r
+#define SSL_CTX_set_cookie_verify_cb(ctx,cb) ((ctx)->app_verify_cookie_cb=(cb))\r
+\r
+#define SSL_NOTHING    1\r
+#define SSL_WRITING    2\r
+#define SSL_READING    3\r
+#define SSL_X509_LOOKUP        4\r
+\r
+/* These will only be used when doing non-blocking IO */\r
+#define SSL_want_nothing(s)    (SSL_want(s) == SSL_NOTHING)\r
+#define SSL_want_read(s)       (SSL_want(s) == SSL_READING)\r
+#define SSL_want_write(s)      (SSL_want(s) == SSL_WRITING)\r
+#define SSL_want_x509_lookup(s)        (SSL_want(s) == SSL_X509_LOOKUP)\r
+\r
+struct ssl_st\r
+       {\r
+       /* protocol version\r
+        * (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, DTLS1_VERSION)\r
+        */\r
+       int version;\r
+       int type; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */\r
+\r
+       SSL_METHOD *method; /* SSLv3 */\r
+\r
+       /* There are 2 BIO's even though they are normally both the\r
+        * same.  This is so data can be read and written to different\r
+        * handlers */\r
+\r
+#ifndef OPENSSL_NO_BIO\r
+       BIO *rbio; /* used by SSL_read */\r
+       BIO *wbio; /* used by SSL_write */\r
+       BIO *bbio; /* used during session-id reuse to concatenate\r
+                   * messages */\r
+#else\r
+       char *rbio; /* used by SSL_read */\r
+       char *wbio; /* used by SSL_write */\r
+       char *bbio;\r
+#endif\r
+       /* This holds a variable that indicates what we were doing\r
+        * when a 0 or -1 is returned.  This is needed for\r
+        * non-blocking IO so we know what request needs re-doing when\r
+        * in SSL_accept or SSL_connect */\r
+       int rwstate;\r
+\r
+       /* true when we are actually in SSL_accept() or SSL_connect() */\r
+       int in_handshake;\r
+       int (*handshake_func)(SSL *);\r
+\r
+       /* Imagine that here's a boolean member "init" that is\r
+        * switched as soon as SSL_set_{accept/connect}_state\r
+        * is called for the first time, so that "state" and\r
+        * "handshake_func" are properly initialized.  But as\r
+        * handshake_func is == 0 until then, we use this\r
+        * test instead of an "init" member.\r
+        */\r
+\r
+       int server;     /* are we the server side? - mostly used by SSL_clear*/\r
+\r
+       int new_session;/* 1 if we are to use a new session.\r
+                        * 2 if we are a server and are inside a handshake\r
+                        *   (i.e. not just sending a HelloRequest)\r
+                        * NB: For servers, the 'new' session may actually be a previously\r
+                        * cached session or even the previous session unless\r
+                        * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set */\r
+       int quiet_shutdown;/* don't send shutdown packets */\r
+       int shutdown;   /* we have shut things down, 0x01 sent, 0x02\r
+                        * for received */\r
+       int state;      /* where we are */\r
+       int rstate;     /* where we are when reading */\r
+\r
+       BUF_MEM *init_buf;      /* buffer used during init */\r
+       void *init_msg;         /* pointer to handshake message body, set by ssl3_get_message() */\r
+       int init_num;           /* amount read/written */\r
+       int init_off;           /* amount read/written */\r
+\r
+       /* used internally to point at a raw packet */\r
+       unsigned char *packet;\r
+       unsigned int packet_length;\r
+\r
+       struct ssl2_state_st *s2; /* SSLv2 variables */\r
+       struct ssl3_state_st *s3; /* SSLv3 variables */\r
+       struct dtls1_state_st *d1; /* DTLSv1 variables */\r
+\r
+       int read_ahead;         /* Read as many input bytes as possible\r
+                                * (for non-blocking reads) */\r
+\r
+       /* callback that allows applications to peek at protocol messages */\r
+       void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);\r
+       void *msg_callback_arg;\r
+\r
+       int hit;                /* reusing a previous session */\r
+\r
+       X509_VERIFY_PARAM *param;\r
+\r
+#if 0\r
+       int purpose;            /* Purpose setting */\r
+       int trust;              /* Trust setting */\r
+#endif\r
+\r
+       /* crypto */\r
+       STACK_OF(SSL_CIPHER) *cipher_list;\r
+       STACK_OF(SSL_CIPHER) *cipher_list_by_id;\r
+\r
+       /* These are the ones being used, the ones in SSL_SESSION are\r
+        * the ones to be 'copied' into these ones */\r
+\r
+       EVP_CIPHER_CTX *enc_read_ctx;           /* cryptographic state */\r
+       const EVP_MD *read_hash;                /* used for mac generation */\r
+#ifndef OPENSSL_NO_COMP\r
+       COMP_CTX *expand;                       /* uncompress */\r
+#else\r
+       char *expand;\r
+#endif\r
+\r
+       EVP_CIPHER_CTX *enc_write_ctx;          /* cryptographic state */\r
+       const EVP_MD *write_hash;               /* used for mac generation */\r
+#ifndef OPENSSL_NO_COMP\r
+       COMP_CTX *compress;                     /* compression */\r
+#else\r
+       char *compress; \r
+#endif\r
+\r
+       /* session info */\r
+\r
+       /* client cert? */\r
+       /* This is used to hold the server certificate used */\r
+       struct cert_st /* CERT */ *cert;\r
+\r
+       /* the session_id_context is used to ensure sessions are only reused\r
+        * in the appropriate context */\r
+       unsigned int sid_ctx_length;\r
+       unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];\r
+\r
+       /* This can also be in the session once a session is established */\r
+       SSL_SESSION *session;\r
+\r
+       /* Default generate session ID callback. */\r
+       GEN_SESSION_CB generate_session_id;\r
+\r
+       /* Used in SSL2 and SSL3 */\r
+       int verify_mode;        /* 0 don't care about verify failure.\r
+                                * 1 fail if verify fails */\r
+       int (*verify_callback)(int ok,X509_STORE_CTX *ctx); /* fail if callback returns 0 */\r
+\r
+       void (*info_callback)(const SSL *ssl,int type,int val); /* optional informational callback */\r
+\r
+       int error;              /* error bytes to be written */\r
+       int error_code;         /* actual code */\r
+\r
+#ifndef OPENSSL_NO_KRB5\r
+       KSSL_CTX *kssl_ctx;     /* Kerberos 5 context */\r
+#endif /* OPENSSL_NO_KRB5 */\r
+\r
+       SSL_CTX *ctx;\r
+       /* set this flag to 1 and a sleep(1) is put into all SSL_read()\r
+        * and SSL_write() calls, good for nbio debuging :-) */\r
+       int debug;      \r
+\r
+       /* extra application data */\r
+       long verify_result;\r
+       CRYPTO_EX_DATA ex_data;\r
+\r
+       /* for server side, keep the list of CA_dn we can use */\r
+       STACK_OF(X509_NAME) *client_CA;\r
+\r
+       int references;\r
+       unsigned long options; /* protocol behaviour */\r
+       unsigned long mode; /* API behaviour */\r
+       long max_cert_list;\r
+       int first_packet;\r
+       int client_version;     /* what was passed, used for\r
+                                * SSLv3/TLS rollback check */\r
+       };\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#include <openssl/ssl2.h>\r
+#include <openssl/ssl3.h>\r
+#include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */\r
+#include <openssl/dtls1.h> /* Datagram TLS */\r
+#include <openssl/ssl23.h>\r
+\r
+#ifdef  __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/* compatibility */\r
+#define SSL_set_app_data(s,arg)                (SSL_set_ex_data(s,0,(char *)arg))\r
+#define SSL_get_app_data(s)            (SSL_get_ex_data(s,0))\r
+#define SSL_SESSION_set_app_data(s,a)  (SSL_SESSION_set_ex_data(s,0,(char *)a))\r
+#define SSL_SESSION_get_app_data(s)    (SSL_SESSION_get_ex_data(s,0))\r
+#define SSL_CTX_get_app_data(ctx)      (SSL_CTX_get_ex_data(ctx,0))\r
+#define SSL_CTX_set_app_data(ctx,arg)  (SSL_CTX_set_ex_data(ctx,0,(char *)arg))\r
+\r
+/* The following are the possible values for ssl->state are are\r
+ * used to indicate where we are up to in the SSL connection establishment.\r
+ * The macros that follow are about the only things you should need to use\r
+ * and even then, only when using non-blocking IO.\r
+ * It can also be useful to work out where you were when the connection\r
+ * failed */\r
+\r
+#define SSL_ST_CONNECT                 0x1000\r
+#define SSL_ST_ACCEPT                  0x2000\r
+#define SSL_ST_MASK                    0x0FFF\r
+#define SSL_ST_INIT                    (SSL_ST_CONNECT|SSL_ST_ACCEPT)\r
+#define SSL_ST_BEFORE                  0x4000\r
+#define SSL_ST_OK                      0x03\r
+#define SSL_ST_RENEGOTIATE             (0x04|SSL_ST_INIT)\r
+\r
+#define SSL_CB_LOOP                    0x01\r
+#define SSL_CB_EXIT                    0x02\r
+#define SSL_CB_READ                    0x04\r
+#define SSL_CB_WRITE                   0x08\r
+#define SSL_CB_ALERT                   0x4000 /* used in callback */\r
+#define SSL_CB_READ_ALERT              (SSL_CB_ALERT|SSL_CB_READ)\r
+#define SSL_CB_WRITE_ALERT             (SSL_CB_ALERT|SSL_CB_WRITE)\r
+#define SSL_CB_ACCEPT_LOOP             (SSL_ST_ACCEPT|SSL_CB_LOOP)\r
+#define SSL_CB_ACCEPT_EXIT             (SSL_ST_ACCEPT|SSL_CB_EXIT)\r
+#define SSL_CB_CONNECT_LOOP            (SSL_ST_CONNECT|SSL_CB_LOOP)\r
+#define SSL_CB_CONNECT_EXIT            (SSL_ST_CONNECT|SSL_CB_EXIT)\r
+#define SSL_CB_HANDSHAKE_START         0x10\r
+#define SSL_CB_HANDSHAKE_DONE          0x20\r
+\r
+/* Is the SSL_connection established? */\r
+#define SSL_get_state(a)               SSL_state(a)\r
+#define SSL_is_init_finished(a)                (SSL_state(a) == SSL_ST_OK)\r
+#define SSL_in_init(a)                 (SSL_state(a)&SSL_ST_INIT)\r
+#define SSL_in_before(a)               (SSL_state(a)&SSL_ST_BEFORE)\r
+#define SSL_in_connect_init(a)         (SSL_state(a)&SSL_ST_CONNECT)\r
+#define SSL_in_accept_init(a)          (SSL_state(a)&SSL_ST_ACCEPT)\r
+\r
+/* The following 2 states are kept in ssl->rstate when reads fail,\r
+ * you should not need these */\r
+#define SSL_ST_READ_HEADER                     0xF0\r
+#define SSL_ST_READ_BODY                       0xF1\r
+#define SSL_ST_READ_DONE                       0xF2\r
+\r
+/* Obtain latest Finished message\r
+ *   -- that we sent (SSL_get_finished)\r
+ *   -- that we expected from peer (SSL_get_peer_finished).\r
+ * Returns length (0 == no Finished so far), copies up to 'count' bytes. */\r
+size_t SSL_get_finished(const SSL *s, void *buf, size_t count);\r
+size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);\r
+\r
+/* use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options\r
+ * are 'ored' with SSL_VERIFY_PEER if they are desired */\r
+#define SSL_VERIFY_NONE                        0x00\r
+#define SSL_VERIFY_PEER                        0x01\r
+#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT        0x02\r
+#define SSL_VERIFY_CLIENT_ONCE         0x04\r
+\r
+#define OpenSSL_add_ssl_algorithms()   SSL_library_init()\r
+#define SSLeay_add_ssl_algorithms()    SSL_library_init()\r
+\r
+/* this is for backward compatibility */\r
+#if 0 /* NEW_SSLEAY */\r
+#define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c)\r
+#define SSL_set_pref_cipher(c,n)       SSL_set_cipher_list(c,n)\r
+#define SSL_add_session(a,b)            SSL_CTX_add_session((a),(b))\r
+#define SSL_remove_session(a,b)                SSL_CTX_remove_session((a),(b))\r
+#define SSL_flush_sessions(a,b)                SSL_CTX_flush_sessions((a),(b))\r
+#endif\r
+/* More backward compatibility */\r
+#define SSL_get_cipher(s) \\r
+               SSL_CIPHER_get_name(SSL_get_current_cipher(s))\r
+#define SSL_get_cipher_bits(s,np) \\r
+               SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)\r
+#define SSL_get_cipher_version(s) \\r
+               SSL_CIPHER_get_version(SSL_get_current_cipher(s))\r
+#define SSL_get_cipher_name(s) \\r
+               SSL_CIPHER_get_name(SSL_get_current_cipher(s))\r
+#define SSL_get_time(a)                SSL_SESSION_get_time(a)\r
+#define SSL_set_time(a,b)      SSL_SESSION_set_time((a),(b))\r
+#define SSL_get_timeout(a)     SSL_SESSION_get_timeout(a)\r
+#define SSL_set_timeout(a,b)   SSL_SESSION_set_timeout((a),(b))\r
+\r
+#if 1 /*SSLEAY_MACROS*/\r
+#define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)\r
+#define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)\r
+#define PEM_read_SSL_SESSION(fp,x,cb,u) (SSL_SESSION *)PEM_ASN1_read( \\r
+       (char *(*)())d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,fp,(char **)x,cb,u)\r
+#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)\r
+#define PEM_write_SSL_SESSION(fp,x) \\r
+       PEM_ASN1_write((int (*)())i2d_SSL_SESSION, \\r
+               PEM_STRING_SSL_SESSION,fp, (char *)x, NULL,NULL,0,NULL,NULL)\r
+#define PEM_write_bio_SSL_SESSION(bp,x) \\r
+       PEM_ASN1_write_bio_of(SSL_SESSION,i2d_SSL_SESSION,PEM_STRING_SSL_SESSION,bp,x,NULL,NULL,0,NULL,NULL)\r
+#endif\r
+\r
+#define SSL_AD_REASON_OFFSET           1000\r
+/* These alert types are for SSLv3 and TLSv1 */\r
+#define SSL_AD_CLOSE_NOTIFY            SSL3_AD_CLOSE_NOTIFY\r
+#define SSL_AD_UNEXPECTED_MESSAGE      SSL3_AD_UNEXPECTED_MESSAGE /* fatal */\r
+#define SSL_AD_BAD_RECORD_MAC          SSL3_AD_BAD_RECORD_MAC     /* fatal */\r
+#define SSL_AD_DECRYPTION_FAILED       TLS1_AD_DECRYPTION_FAILED\r
+#define SSL_AD_RECORD_OVERFLOW         TLS1_AD_RECORD_OVERFLOW\r
+#define SSL_AD_DECOMPRESSION_FAILURE   SSL3_AD_DECOMPRESSION_FAILURE/* fatal */\r
+#define SSL_AD_HANDSHAKE_FAILURE       SSL3_AD_HANDSHAKE_FAILURE/* fatal */\r
+#define SSL_AD_NO_CERTIFICATE          SSL3_AD_NO_CERTIFICATE /* Not for TLS */\r
+#define SSL_AD_BAD_CERTIFICATE         SSL3_AD_BAD_CERTIFICATE\r
+#define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE\r
+#define SSL_AD_CERTIFICATE_REVOKED     SSL3_AD_CERTIFICATE_REVOKED\r
+#define SSL_AD_CERTIFICATE_EXPIRED     SSL3_AD_CERTIFICATE_EXPIRED\r
+#define SSL_AD_CERTIFICATE_UNKNOWN     SSL3_AD_CERTIFICATE_UNKNOWN\r
+#define SSL_AD_ILLEGAL_PARAMETER       SSL3_AD_ILLEGAL_PARAMETER   /* fatal */\r
+#define SSL_AD_UNKNOWN_CA              TLS1_AD_UNKNOWN_CA      /* fatal */\r
+#define SSL_AD_ACCESS_DENIED           TLS1_AD_ACCESS_DENIED   /* fatal */\r
+#define SSL_AD_DECODE_ERROR            TLS1_AD_DECODE_ERROR    /* fatal */\r
+#define SSL_AD_DECRYPT_ERROR           TLS1_AD_DECRYPT_ERROR\r
+#define SSL_AD_EXPORT_RESTRICTION      TLS1_AD_EXPORT_RESTRICTION/* fatal */\r
+#define SSL_AD_PROTOCOL_VERSION                TLS1_AD_PROTOCOL_VERSION /* fatal */\r
+#define SSL_AD_INSUFFICIENT_SECURITY   TLS1_AD_INSUFFICIENT_SECURITY/* fatal */\r
+#define SSL_AD_INTERNAL_ERROR          TLS1_AD_INTERNAL_ERROR  /* fatal */\r
+#define SSL_AD_USER_CANCELLED          TLS1_AD_USER_CANCELLED\r
+#define SSL_AD_NO_RENEGOTIATION                TLS1_AD_NO_RENEGOTIATION\r
+\r
+#define SSL_ERROR_NONE                 0\r
+#define SSL_ERROR_SSL                  1\r
+#define SSL_ERROR_WANT_READ            2\r
+#define SSL_ERROR_WANT_WRITE           3\r
+#define SSL_ERROR_WANT_X509_LOOKUP     4\r
+#define SSL_ERROR_SYSCALL              5 /* look at error stack/return value/errno */\r
+#define SSL_ERROR_ZERO_RETURN          6\r
+#define SSL_ERROR_WANT_CONNECT         7\r
+#define SSL_ERROR_WANT_ACCEPT          8\r
+\r
+#define SSL_CTRL_NEED_TMP_RSA                  1\r
+#define SSL_CTRL_SET_TMP_RSA                   2\r
+#define SSL_CTRL_SET_TMP_DH                    3\r
+#define SSL_CTRL_SET_TMP_ECDH                  4\r
+#define SSL_CTRL_SET_TMP_RSA_CB                        5\r
+#define SSL_CTRL_SET_TMP_DH_CB                 6\r
+#define SSL_CTRL_SET_TMP_ECDH_CB               7\r
+\r
+#define SSL_CTRL_GET_SESSION_REUSED            8\r
+#define SSL_CTRL_GET_CLIENT_CERT_REQUEST       9\r
+#define SSL_CTRL_GET_NUM_RENEGOTIATIONS                10\r
+#define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS      11\r
+#define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS      12\r
+#define SSL_CTRL_GET_FLAGS                     13\r
+#define SSL_CTRL_EXTRA_CHAIN_CERT              14\r
+\r
+#define SSL_CTRL_SET_MSG_CALLBACK               15\r
+#define SSL_CTRL_SET_MSG_CALLBACK_ARG           16\r
+\r
+/* only applies to datagram connections */\r
+#define SSL_CTRL_SET_MTU                17\r
+/* Stats */\r
+#define SSL_CTRL_SESS_NUMBER                   20\r
+#define SSL_CTRL_SESS_CONNECT                  21\r
+#define SSL_CTRL_SESS_CONNECT_GOOD             22\r
+#define SSL_CTRL_SESS_CONNECT_RENEGOTIATE      23\r
+#define SSL_CTRL_SESS_ACCEPT                   24\r
+#define SSL_CTRL_SESS_ACCEPT_GOOD              25\r
+#define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE       26\r
+#define SSL_CTRL_SESS_HIT                      27\r
+#define SSL_CTRL_SESS_CB_HIT                   28\r
+#define SSL_CTRL_SESS_MISSES                   29\r
+#define SSL_CTRL_SESS_TIMEOUTS                 30\r
+#define SSL_CTRL_SESS_CACHE_FULL               31\r
+#define SSL_CTRL_OPTIONS                       32\r
+#define SSL_CTRL_MODE                          33\r
+\r
+#define SSL_CTRL_GET_READ_AHEAD                        40\r
+#define SSL_CTRL_SET_READ_AHEAD                        41\r
+#define SSL_CTRL_SET_SESS_CACHE_SIZE           42\r
+#define SSL_CTRL_GET_SESS_CACHE_SIZE           43\r
+#define SSL_CTRL_SET_SESS_CACHE_MODE           44\r
+#define SSL_CTRL_GET_SESS_CACHE_MODE           45\r
+\r
+#define SSL_CTRL_GET_MAX_CERT_LIST             50\r
+#define SSL_CTRL_SET_MAX_CERT_LIST             51\r
+\r
+#define SSL_session_reused(ssl) \\r
+       SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)\r
+#define SSL_num_renegotiations(ssl) \\r
+       SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)\r
+#define SSL_clear_num_renegotiations(ssl) \\r
+       SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)\r
+#define SSL_total_renegotiations(ssl) \\r
+       SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)\r
+\r
+#define SSL_CTX_need_tmp_RSA(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)\r
+#define SSL_CTX_set_tmp_rsa(ctx,rsa) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)\r
+#define SSL_CTX_set_tmp_dh(ctx,dh) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh)\r
+#define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)\r
+\r
+#define SSL_need_tmp_RSA(ssl) \\r
+       SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL)\r
+#define SSL_set_tmp_rsa(ssl,rsa) \\r
+       SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)\r
+#define SSL_set_tmp_dh(ssl,dh) \\r
+       SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh)\r
+#define SSL_set_tmp_ecdh(ssl,ecdh) \\r
+       SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)\r
+\r
+#define SSL_CTX_add_extra_chain_cert(ctx,x509) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)\r
+\r
+#ifndef OPENSSL_NO_BIO\r
+BIO_METHOD *BIO_f_ssl(void);\r
+BIO *BIO_new_ssl(SSL_CTX *ctx,int client);\r
+BIO *BIO_new_ssl_connect(SSL_CTX *ctx);\r
+BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);\r
+int BIO_ssl_copy_session_id(BIO *to,BIO *from);\r
+void BIO_ssl_shutdown(BIO *ssl_bio);\r
+\r
+#endif\r
+\r
+int    SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);\r
+SSL_CTX *SSL_CTX_new(SSL_METHOD *meth);\r
+void   SSL_CTX_free(SSL_CTX *);\r
+long SSL_CTX_set_timeout(SSL_CTX *ctx,long t);\r
+long SSL_CTX_get_timeout(const SSL_CTX *ctx);\r
+X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *);\r
+void SSL_CTX_set_cert_store(SSL_CTX *,X509_STORE *);\r
+int SSL_want(const SSL *s);\r
+int    SSL_clear(SSL *s);\r
+\r
+void   SSL_CTX_flush_sessions(SSL_CTX *ctx,long tm);\r
+\r
+SSL_CIPHER *SSL_get_current_cipher(const SSL *s);\r
+int    SSL_CIPHER_get_bits(const SSL_CIPHER *c,int *alg_bits);\r
+char * SSL_CIPHER_get_version(const SSL_CIPHER *c);\r
+const char *   SSL_CIPHER_get_name(const SSL_CIPHER *c);\r
+\r
+int    SSL_get_fd(const SSL *s);\r
+int    SSL_get_rfd(const SSL *s);\r
+int    SSL_get_wfd(const SSL *s);\r
+const char  * SSL_get_cipher_list(const SSL *s,int n);\r
+char * SSL_get_shared_ciphers(const SSL *s, char *buf, int len);\r
+int    SSL_get_read_ahead(const SSL * s);\r
+int    SSL_pending(const SSL *s);\r
+#ifndef OPENSSL_NO_SOCK\r
+int    SSL_set_fd(SSL *s, int fd);\r
+int    SSL_set_rfd(SSL *s, int fd);\r
+int    SSL_set_wfd(SSL *s, int fd);\r
+#endif\r
+#ifndef OPENSSL_NO_BIO\r
+void   SSL_set_bio(SSL *s, BIO *rbio,BIO *wbio);\r
+BIO *  SSL_get_rbio(const SSL *s);\r
+BIO *  SSL_get_wbio(const SSL *s);\r
+#endif\r
+int    SSL_set_cipher_list(SSL *s, const char *str);\r
+void   SSL_set_read_ahead(SSL *s, int yes);\r
+int    SSL_get_verify_mode(const SSL *s);\r
+int    SSL_get_verify_depth(const SSL *s);\r
+int    (*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *);\r
+void   SSL_set_verify(SSL *s, int mode,\r
+                      int (*callback)(int ok,X509_STORE_CTX *ctx));\r
+void   SSL_set_verify_depth(SSL *s, int depth);\r
+#ifndef OPENSSL_NO_RSA\r
+int    SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);\r
+#endif\r
+int    SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);\r
+int    SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);\r
+int    SSL_use_PrivateKey_ASN1(int pk,SSL *ssl, const unsigned char *d, long len);\r
+int    SSL_use_certificate(SSL *ssl, X509 *x);\r
+int    SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);\r
+\r
+#ifndef OPENSSL_NO_STDIO\r
+int    SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);\r
+int    SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);\r
+int    SSL_use_certificate_file(SSL *ssl, const char *file, int type);\r
+int    SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);\r
+int    SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);\r
+int    SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);\r
+int    SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); /* PEM type */\r
+STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);\r
+int    SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,\r
+                                           const char *file);\r
+#ifndef OPENSSL_SYS_VMS\r
+#ifndef OPENSSL_SYS_MACINTOSH_CLASSIC /* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */\r
+int    SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,\r
+                                          const char *dir);\r
+#endif\r
+#endif\r
+\r
+#endif\r
+\r
+void   SSL_load_error_strings(void );\r
+const char *SSL_state_string(const SSL *s);\r
+const char *SSL_rstate_string(const SSL *s);\r
+const char *SSL_state_string_long(const SSL *s);\r
+const char *SSL_rstate_string_long(const SSL *s);\r
+long   SSL_SESSION_get_time(const SSL_SESSION *s);\r
+long   SSL_SESSION_set_time(SSL_SESSION *s, long t);\r
+long   SSL_SESSION_get_timeout(const SSL_SESSION *s);\r
+long   SSL_SESSION_set_timeout(SSL_SESSION *s, long t);\r
+void   SSL_copy_session_id(SSL *to,const SSL *from);\r
+\r
+SSL_SESSION *SSL_SESSION_new(void);\r
+unsigned long SSL_SESSION_hash(const SSL_SESSION *a);\r
+int    SSL_SESSION_cmp(const SSL_SESSION *a,const SSL_SESSION *b);\r
+const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len);\r
+#ifndef OPENSSL_NO_FP_API\r
+int    SSL_SESSION_print_fp(FILE *fp,const SSL_SESSION *ses);\r
+#endif\r
+#ifndef OPENSSL_NO_BIO\r
+int    SSL_SESSION_print(BIO *fp,const SSL_SESSION *ses);\r
+#endif\r
+void   SSL_SESSION_free(SSL_SESSION *ses);\r
+int    i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp);\r
+int    SSL_set_session(SSL *to, SSL_SESSION *session);\r
+int    SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);\r
+int    SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c);\r
+int    SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB);\r
+int    SSL_set_generate_session_id(SSL *, GEN_SESSION_CB);\r
+int    SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,\r
+                                       unsigned int id_len);\r
+SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a,const unsigned char **pp,\r
+                            long length);\r
+\r
+#ifdef HEADER_X509_H\r
+X509 * SSL_get_peer_certificate(const SSL *s);\r
+#endif\r
+\r
+STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s);\r
+\r
+int SSL_CTX_get_verify_mode(const SSL_CTX *ctx);\r
+int SSL_CTX_get_verify_depth(const SSL_CTX *ctx);\r
+int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *);\r
+void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,\r
+                       int (*callback)(int, X509_STORE_CTX *));\r
+void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth);\r
+void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg);\r
+#ifndef OPENSSL_NO_RSA\r
+int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);\r
+#endif\r
+int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len);\r
+int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);\r
+int SSL_CTX_use_PrivateKey_ASN1(int pk,SSL_CTX *ctx,\r
+       const unsigned char *d, long len);\r
+int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);\r
+int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d);\r
+\r
+void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);\r
+void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);\r
+\r
+int SSL_CTX_check_private_key(const SSL_CTX *ctx);\r
+int SSL_check_private_key(const SSL *ctx);\r
+\r
+int    SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx,\r
+                                      unsigned int sid_ctx_len);\r
+\r
+SSL *  SSL_new(SSL_CTX *ctx);\r
+int    SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx,\r
+                                  unsigned int sid_ctx_len);\r
+\r
+int SSL_CTX_set_purpose(SSL_CTX *s, int purpose);\r
+int SSL_set_purpose(SSL *s, int purpose);\r
+int SSL_CTX_set_trust(SSL_CTX *s, int trust);\r
+int SSL_set_trust(SSL *s, int trust);\r
+\r
+void   SSL_free(SSL *ssl);\r
+int    SSL_accept(SSL *ssl);\r
+int    SSL_connect(SSL *ssl);\r
+int    SSL_read(SSL *ssl,void *buf,int num);\r
+int    SSL_peek(SSL *ssl,void *buf,int num);\r
+int    SSL_write(SSL *ssl,const void *buf,int num);\r
+long   SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg);\r
+long   SSL_callback_ctrl(SSL *, int, void (*)(void));\r
+long   SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, void *parg);\r
+long   SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));\r
+\r
+int    SSL_get_error(const SSL *s,int ret_code);\r
+const char *SSL_get_version(const SSL *s);\r
+\r
+/* This sets the 'default' SSL version that SSL_new() will create */\r
+int SSL_CTX_set_ssl_version(SSL_CTX *ctx,SSL_METHOD *meth);\r
+\r
+SSL_METHOD *SSLv2_method(void);                /* SSLv2 */\r
+SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */\r
+SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */\r
+\r
+SSL_METHOD *SSLv3_method(void);                /* SSLv3 */\r
+SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */\r
+SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */\r
+\r
+SSL_METHOD *SSLv23_method(void);       /* SSLv3 but can rollback to v2 */\r
+SSL_METHOD *SSLv23_server_method(void);        /* SSLv3 but can rollback to v2 */\r
+SSL_METHOD *SSLv23_client_method(void);        /* SSLv3 but can rollback to v2 */\r
+\r
+SSL_METHOD *TLSv1_method(void);                /* TLSv1.0 */\r
+SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */\r
+SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */\r
+\r
+SSL_METHOD *DTLSv1_method(void);               /* DTLSv1.0 */\r
+SSL_METHOD *DTLSv1_server_method(void);        /* DTLSv1.0 */\r
+SSL_METHOD *DTLSv1_client_method(void);        /* DTLSv1.0 */\r
+\r
+STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);\r
+\r
+int SSL_do_handshake(SSL *s);\r
+int SSL_renegotiate(SSL *s);\r
+int SSL_renegotiate_pending(SSL *s);\r
+int SSL_shutdown(SSL *s);\r
+\r
+SSL_METHOD *SSL_get_ssl_method(SSL *s);\r
+int SSL_set_ssl_method(SSL *s,SSL_METHOD *method);\r
+const char *SSL_alert_type_string_long(int value);\r
+const char *SSL_alert_type_string(int value);\r
+const char *SSL_alert_desc_string_long(int value);\r
+const char *SSL_alert_desc_string(int value);\r
+\r
+void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);\r
+void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);\r
+STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);\r
+STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s);\r
+int SSL_add_client_CA(SSL *ssl,X509 *x);\r
+int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x);\r
+\r
+void SSL_set_connect_state(SSL *s);\r
+void SSL_set_accept_state(SSL *s);\r
+\r
+long SSL_get_default_timeout(const SSL *s);\r
+\r
+int SSL_library_init(void );\r
+\r
+char *SSL_CIPHER_description(SSL_CIPHER *,char *buf,int size);\r
+STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk);\r
+\r
+SSL *SSL_dup(SSL *ssl);\r
+\r
+X509 *SSL_get_certificate(const SSL *ssl);\r
+/* EVP_PKEY */ struct evp_pkey_st *SSL_get_privatekey(SSL *ssl);\r
+\r
+void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode);\r
+int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);\r
+void SSL_set_quiet_shutdown(SSL *ssl,int mode);\r
+int SSL_get_quiet_shutdown(const SSL *ssl);\r
+void SSL_set_shutdown(SSL *ssl,int mode);\r
+int SSL_get_shutdown(const SSL *ssl);\r
+int SSL_version(const SSL *ssl);\r
+int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);\r
+int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,\r
+       const char *CApath);\r
+#define SSL_get0_session SSL_get_session /* just peek at pointer */\r
+SSL_SESSION *SSL_get_session(const SSL *ssl);\r
+SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */\r
+SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);\r
+void SSL_set_info_callback(SSL *ssl,\r
+                          void (*cb)(const SSL *ssl,int type,int val));\r
+void (*SSL_get_info_callback(const SSL *ssl))(const SSL *ssl,int type,int val);\r
+int SSL_state(const SSL *ssl);\r
+\r
+void SSL_set_verify_result(SSL *ssl,long v);\r
+long SSL_get_verify_result(const SSL *ssl);\r
+\r
+int SSL_set_ex_data(SSL *ssl,int idx,void *data);\r
+void *SSL_get_ex_data(const SSL *ssl,int idx);\r
+int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\r
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\r
+\r
+int SSL_SESSION_set_ex_data(SSL_SESSION *ss,int idx,void *data);\r
+void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss,int idx);\r
+int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\r
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\r
+\r
+int SSL_CTX_set_ex_data(SSL_CTX *ssl,int idx,void *data);\r
+void *SSL_CTX_get_ex_data(const SSL_CTX *ssl,int idx);\r
+int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\r
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\r
+\r
+int SSL_get_ex_data_X509_STORE_CTX_idx(void );\r
+\r
+#define SSL_CTX_sess_set_cache_size(ctx,t) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL)\r
+#define SSL_CTX_sess_get_cache_size(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL)\r
+#define SSL_CTX_set_session_cache_mode(ctx,m) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)\r
+#define SSL_CTX_get_session_cache_mode(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL)\r
+\r
+#define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx)\r
+#define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m)\r
+#define SSL_CTX_get_read_ahead(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)\r
+#define SSL_CTX_set_read_ahead(ctx,m) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)\r
+#define SSL_CTX_get_max_cert_list(ctx) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)\r
+#define SSL_CTX_set_max_cert_list(ctx,m) \\r
+       SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)\r
+#define SSL_get_max_cert_list(ssl) \\r
+       SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)\r
+#define SSL_set_max_cert_list(ssl,m) \\r
+       SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)\r
+\r
+     /* NB: the keylength is only applicable when is_export is true */\r
+#ifndef OPENSSL_NO_RSA\r
+void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,\r
+                                 RSA *(*cb)(SSL *ssl,int is_export,\r
+                                            int keylength));\r
+\r
+void SSL_set_tmp_rsa_callback(SSL *ssl,\r
+                                 RSA *(*cb)(SSL *ssl,int is_export,\r
+                                            int keylength));\r
+#endif\r
+#ifndef OPENSSL_NO_DH\r
+void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,\r
+                                DH *(*dh)(SSL *ssl,int is_export,\r
+                                          int keylength));\r
+void SSL_set_tmp_dh_callback(SSL *ssl,\r
+                                DH *(*dh)(SSL *ssl,int is_export,\r
+                                          int keylength));\r
+#endif\r
+#ifndef OPENSSL_NO_ECDH\r
+void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,\r
+                                EC_KEY *(*ecdh)(SSL *ssl,int is_export,\r
+                                          int keylength));\r
+void SSL_set_tmp_ecdh_callback(SSL *ssl,\r
+                                EC_KEY *(*ecdh)(SSL *ssl,int is_export,\r
+                                          int keylength));\r
+#endif\r
+\r
+#ifndef OPENSSL_NO_COMP\r
+const COMP_METHOD *SSL_get_current_compression(SSL *s);\r
+const COMP_METHOD *SSL_get_current_expansion(SSL *s);\r
+const char *SSL_COMP_get_name(const COMP_METHOD *comp);\r
+STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);\r
+int SSL_COMP_add_compression_method(int id,COMP_METHOD *cm);\r
+#else\r
+const void *SSL_get_current_compression(SSL *s);\r
+const void *SSL_get_current_expansion(SSL *s);\r
+const char *SSL_COMP_get_name(const void *comp);\r
+void *SSL_COMP_get_compression_methods(void);\r
+int SSL_COMP_add_compression_method(int id,void *cm);\r
+#endif\r
+\r
+/* BEGIN ERROR CODES */\r
+/* The following lines are auto generated by the script mkerr.pl. Any changes\r
+ * made after this point may be overwritten when the script is next run.\r
+ */\r
+void ERR_load_SSL_strings(void);\r
+\r
+/* Error codes for the SSL functions. */\r
+\r
+/* Function codes. */\r
+#define SSL_F_CLIENT_CERTIFICATE                        100\r
+#define SSL_F_CLIENT_FINISHED                           238\r
+#define SSL_F_CLIENT_HELLO                              101\r
+#define SSL_F_CLIENT_MASTER_KEY                                 102\r
+#define SSL_F_D2I_SSL_SESSION                           103\r
+#define SSL_F_DO_DTLS1_WRITE                            1003\r
+#define SSL_F_DO_SSL3_WRITE                             104\r
+#define SSL_F_DTLS1_ACCEPT                              1004\r
+#define SSL_F_DTLS1_BUFFER_RECORD                       1005\r
+#define SSL_F_DTLS1_CLIENT_HELLO                        1006\r
+#define SSL_F_DTLS1_CONNECT                             1007\r
+#define SSL_F_DTLS1_ENC                                         1008\r
+#define SSL_F_DTLS1_GET_HELLO_VERIFY                    1009\r
+#define SSL_F_DTLS1_GET_MESSAGE                                 1010\r
+#define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT                1011\r
+#define SSL_F_DTLS1_GET_RECORD                          1012\r
+#define SSL_F_DTLS1_OUTPUT_CERT_CHAIN                   1013\r
+#define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE          1014\r
+#define SSL_F_DTLS1_PROCESS_RECORD                      1015\r
+#define SSL_F_DTLS1_READ_BYTES                          1016\r
+#define SSL_F_DTLS1_READ_FAILED                                 1001\r
+#define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST            1017\r
+#define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE             1018\r
+#define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE            1019\r
+#define SSL_F_DTLS1_SEND_CLIENT_VERIFY                  1020\r
+#define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST           1002\r
+#define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE             1021\r
+#define SSL_F_DTLS1_SEND_SERVER_HELLO                   1022\r
+#define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE            1023\r
+#define SSL_F_DTLS1_WRITE_APP_DATA_BYTES                1024\r
+#define SSL_F_GET_CLIENT_FINISHED                       105\r
+#define SSL_F_GET_CLIENT_HELLO                          106\r
+#define SSL_F_GET_CLIENT_MASTER_KEY                     107\r
+#define SSL_F_GET_SERVER_FINISHED                       108\r
+#define SSL_F_GET_SERVER_HELLO                          109\r
+#define SSL_F_GET_SERVER_VERIFY                                 110\r
+#define SSL_F_I2D_SSL_SESSION                           111\r
+#define SSL_F_READ_N                                    112\r
+#define SSL_F_REQUEST_CERTIFICATE                       113\r
+#define SSL_F_SERVER_FINISH                             239\r
+#define SSL_F_SERVER_HELLO                              114\r
+#define SSL_F_SERVER_VERIFY                             240\r
+#define SSL_F_SSL23_ACCEPT                              115\r
+#define SSL_F_SSL23_CLIENT_HELLO                        116\r
+#define SSL_F_SSL23_CONNECT                             117\r
+#define SSL_F_SSL23_GET_CLIENT_HELLO                    118\r
+#define SSL_F_SSL23_GET_SERVER_HELLO                    119\r
+#define SSL_F_SSL23_PEEK                                237\r
+#define SSL_F_SSL23_READ                                120\r
+#define SSL_F_SSL23_WRITE                               121\r
+#define SSL_F_SSL2_ACCEPT                               122\r
+#define SSL_F_SSL2_CONNECT                              123\r
+#define SSL_F_SSL2_ENC_INIT                             124\r
+#define SSL_F_SSL2_GENERATE_KEY_MATERIAL                241\r
+#define SSL_F_SSL2_PEEK                                         234\r
+#define SSL_F_SSL2_READ                                         125\r
+#define SSL_F_SSL2_READ_INTERNAL                        236\r
+#define SSL_F_SSL2_SET_CERTIFICATE                      126\r
+#define SSL_F_SSL2_WRITE                                127\r
+#define SSL_F_SSL3_ACCEPT                               128\r
+#define SSL_F_SSL3_CALLBACK_CTRL                        233\r
+#define SSL_F_SSL3_CHANGE_CIPHER_STATE                  129\r
+#define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM             130\r
+#define SSL_F_SSL3_CLIENT_HELLO                                 131\r
+#define SSL_F_SSL3_CONNECT                              132\r
+#define SSL_F_SSL3_CTRL                                         213\r
+#define SSL_F_SSL3_CTX_CTRL                             133\r
+#define SSL_F_SSL3_ENC                                  134\r
+#define SSL_F_SSL3_GENERATE_KEY_BLOCK                   238\r
+#define SSL_F_SSL3_GET_CERTIFICATE_REQUEST              135\r
+#define SSL_F_SSL3_GET_CERT_VERIFY                      136\r
+#define SSL_F_SSL3_GET_CLIENT_CERTIFICATE               137\r
+#define SSL_F_SSL3_GET_CLIENT_HELLO                     138\r
+#define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE              139\r
+#define SSL_F_SSL3_GET_FINISHED                                 140\r
+#define SSL_F_SSL3_GET_KEY_EXCHANGE                     141\r
+#define SSL_F_SSL3_GET_MESSAGE                          142\r
+#define SSL_F_SSL3_GET_RECORD                           143\r
+#define SSL_F_SSL3_GET_SERVER_CERTIFICATE               144\r
+#define SSL_F_SSL3_GET_SERVER_DONE                      145\r
+#define SSL_F_SSL3_GET_SERVER_HELLO                     146\r
+#define SSL_F_SSL3_OUTPUT_CERT_CHAIN                    147\r
+#define SSL_F_SSL3_PEEK                                         235\r
+#define SSL_F_SSL3_READ_BYTES                           148\r
+#define SSL_F_SSL3_READ_N                               149\r
+#define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST             150\r
+#define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE              151\r
+#define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE             152\r
+#define SSL_F_SSL3_SEND_CLIENT_VERIFY                   153\r
+#define SSL_F_SSL3_SEND_SERVER_CERTIFICATE              154\r
+#define SSL_F_SSL3_SEND_SERVER_HELLO                    242\r
+#define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE             155\r
+#define SSL_F_SSL3_SETUP_BUFFERS                        156\r
+#define SSL_F_SSL3_SETUP_KEY_BLOCK                      157\r
+#define SSL_F_SSL3_WRITE_BYTES                          158\r
+#define SSL_F_SSL3_WRITE_PENDING                        159\r
+#define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK        215\r
+#define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK       216\r
+#define SSL_F_SSL_BAD_METHOD                            160\r
+#define SSL_F_SSL_BYTES_TO_CIPHER_LIST                  161\r
+#define SSL_F_SSL_CERT_DUP                              221\r
+#define SSL_F_SSL_CERT_INST                             222\r
+#define SSL_F_SSL_CERT_INSTANTIATE                      214\r
+#define SSL_F_SSL_CERT_NEW                              162\r
+#define SSL_F_SSL_CHECK_PRIVATE_KEY                     163\r
+#define SSL_F_SSL_CIPHER_PROCESS_RULESTR                230\r
+#define SSL_F_SSL_CIPHER_STRENGTH_SORT                  231\r
+#define SSL_F_SSL_CLEAR                                         164\r
+#define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD           165\r
+#define SSL_F_SSL_CREATE_CIPHER_LIST                    166\r
+#define SSL_F_SSL_CTRL                                  232\r
+#define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY                         168\r
+#define SSL_F_SSL_CTX_NEW                               169\r
+#define SSL_F_SSL_CTX_SET_CIPHER_LIST                   1026\r
+#define SSL_F_SSL_CTX_SET_PURPOSE                       226\r
+#define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT            219\r
+#define SSL_F_SSL_CTX_SET_SSL_VERSION                   170\r
+#define SSL_F_SSL_CTX_SET_TRUST                                 229\r
+#define SSL_F_SSL_CTX_USE_CERTIFICATE                   171\r
+#define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1              172\r
+#define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE        220\r
+#define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE              173\r
+#define SSL_F_SSL_CTX_USE_PRIVATEKEY                    174\r
+#define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1               175\r
+#define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE               176\r
+#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY                         177\r
+#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1            178\r
+#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE            179\r
+#define SSL_F_SSL_DO_HANDSHAKE                          180\r
+#define SSL_F_SSL_GET_NEW_SESSION                       181\r
+#define SSL_F_SSL_GET_PREV_SESSION                      217\r
+#define SSL_F_SSL_GET_SERVER_SEND_CERT                  182\r
+#define SSL_F_SSL_GET_SIGN_PKEY                                 183\r
+#define SSL_F_SSL_INIT_WBIO_BUFFER                      184\r
+#define SSL_F_SSL_LOAD_CLIENT_CA_FILE                   185\r
+#define SSL_F_SSL_NEW                                   186\r
+#define SSL_F_SSL_PEEK                                  1025\r
+#define SSL_F_SSL_READ                                  223\r
+#define SSL_F_SSL_RSA_PRIVATE_DECRYPT                   187\r
+#define SSL_F_SSL_RSA_PUBLIC_ENCRYPT                    188\r
+#define SSL_F_SSL_SESSION_NEW                           189\r
+#define SSL_F_SSL_SESSION_PRINT_FP                      190\r
+#define SSL_F_SSL_SESS_CERT_NEW                                 225\r
+#define SSL_F_SSL_SET_CERT                              191\r
+#define SSL_F_SSL_SET_CIPHER_LIST                       1027\r
+#define SSL_F_SSL_SET_FD                                192\r
+#define SSL_F_SSL_SET_PKEY                              193\r
+#define SSL_F_SSL_SET_PURPOSE                           227\r
+#define SSL_F_SSL_SET_RFD                               194\r
+#define SSL_F_SSL_SET_SESSION                           195\r
+#define SSL_F_SSL_SET_SESSION_ID_CONTEXT                218\r
+#define SSL_F_SSL_SET_TRUST                             228\r
+#define SSL_F_SSL_SET_WFD                               196\r
+#define SSL_F_SSL_SHUTDOWN                              224\r
+#define SSL_F_SSL_UNDEFINED_CONST_FUNCTION              243\r
+#define SSL_F_SSL_UNDEFINED_FUNCTION                    197\r
+#define SSL_F_SSL_UNDEFINED_VOID_FUNCTION               244\r
+#define SSL_F_SSL_USE_CERTIFICATE                       198\r
+#define SSL_F_SSL_USE_CERTIFICATE_ASN1                  199\r
+#define SSL_F_SSL_USE_CERTIFICATE_FILE                  200\r
+#define SSL_F_SSL_USE_PRIVATEKEY                        201\r
+#define SSL_F_SSL_USE_PRIVATEKEY_ASN1                   202\r
+#define SSL_F_SSL_USE_PRIVATEKEY_FILE                   203\r
+#define SSL_F_SSL_USE_RSAPRIVATEKEY                     204\r
+#define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1                205\r
+#define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE                206\r
+#define SSL_F_SSL_VERIFY_CERT_CHAIN                     207\r
+#define SSL_F_SSL_WRITE                                         208\r
+#define SSL_F_TLS1_CHANGE_CIPHER_STATE                  209\r
+#define SSL_F_TLS1_ENC                                  210\r
+#define SSL_F_TLS1_SETUP_KEY_BLOCK                      211\r
+#define SSL_F_WRITE_PENDING                             212\r
+\r
+/* Reason codes. */\r
+#define SSL_R_APP_DATA_IN_HANDSHAKE                     100\r
+#define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272\r
+#define SSL_R_BAD_ALERT_RECORD                          101\r
+#define SSL_R_BAD_AUTHENTICATION_TYPE                   102\r
+#define SSL_R_BAD_CHANGE_CIPHER_SPEC                    103\r
+#define SSL_R_BAD_CHECKSUM                              104\r
+#define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK             106\r
+#define SSL_R_BAD_DECOMPRESSION                                 107\r
+#define SSL_R_BAD_DH_G_LENGTH                           108\r
+#define SSL_R_BAD_DH_PUB_KEY_LENGTH                     109\r
+#define SSL_R_BAD_DH_P_LENGTH                           110\r
+#define SSL_R_BAD_DIGEST_LENGTH                                 111\r
+#define SSL_R_BAD_DSA_SIGNATURE                                 112\r
+#define SSL_R_BAD_ECC_CERT                              1117\r
+#define SSL_R_BAD_ECDSA_SIGNATURE                       1112\r
+#define SSL_R_BAD_ECPOINT                               1113\r
+#define SSL_R_BAD_HELLO_REQUEST                                 105\r
+#define SSL_R_BAD_LENGTH                                271\r
+#define SSL_R_BAD_MAC_DECODE                            113\r
+#define SSL_R_BAD_MESSAGE_TYPE                          114\r
+#define SSL_R_BAD_PACKET_LENGTH                                 115\r
+#define SSL_R_BAD_PROTOCOL_VERSION_NUMBER               116\r
+#define SSL_R_BAD_RESPONSE_ARGUMENT                     117\r
+#define SSL_R_BAD_RSA_DECRYPT                           118\r
+#define SSL_R_BAD_RSA_ENCRYPT                           119\r
+#define SSL_R_BAD_RSA_E_LENGTH                          120\r
+#define SSL_R_BAD_RSA_MODULUS_LENGTH                    121\r
+#define SSL_R_BAD_RSA_SIGNATURE                                 122\r
+#define SSL_R_BAD_SIGNATURE                             123\r
+#define SSL_R_BAD_SSL_FILETYPE                          124\r
+#define SSL_R_BAD_SSL_SESSION_ID_LENGTH                         125\r
+#define SSL_R_BAD_STATE                                         126\r
+#define SSL_R_BAD_WRITE_RETRY                           127\r
+#define SSL_R_BIO_NOT_SET                               128\r
+#define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG                         129\r
+#define SSL_R_BN_LIB                                    130\r
+#define SSL_R_CA_DN_LENGTH_MISMATCH                     131\r
+#define SSL_R_CA_DN_TOO_LONG                            132\r
+#define SSL_R_CCS_RECEIVED_EARLY                        133\r
+#define SSL_R_CERTIFICATE_VERIFY_FAILED                         134\r
+#define SSL_R_CERT_LENGTH_MISMATCH                      135\r
+#define SSL_R_CHALLENGE_IS_DIFFERENT                    136\r
+#define SSL_R_CIPHER_CODE_WRONG_LENGTH                  137\r
+#define SSL_R_CIPHER_OR_HASH_UNAVAILABLE                138\r
+#define SSL_R_CIPHER_TABLE_SRC_ERROR                    139\r
+#define SSL_R_COMPRESSED_LENGTH_TOO_LONG                140\r
+#define SSL_R_COMPRESSION_FAILURE                       141\r
+#define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE   1120\r
+#define SSL_R_COMPRESSION_LIBRARY_ERROR                         142\r
+#define SSL_R_CONNECTION_ID_IS_DIFFERENT                143\r
+#define SSL_R_CONNECTION_TYPE_NOT_SET                   144\r
+#define SSL_R_COOKIE_MISMATCH                           2002\r
+#define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED             145\r
+#define SSL_R_DATA_LENGTH_TOO_LONG                      146\r
+#define SSL_R_DECRYPTION_FAILED                                 147\r
+#define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC       1109\r
+#define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG           148\r
+#define SSL_R_DIGEST_CHECK_FAILED                       149\r
+#define SSL_R_DUPLICATE_COMPRESSION_ID                  1121\r
+#define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER              1119\r
+#define SSL_R_ENCRYPTED_LENGTH_TOO_LONG                         150\r
+#define SSL_R_ERROR_GENERATING_TMP_RSA_KEY              1092\r
+#define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST             151\r
+#define SSL_R_EXCESSIVE_MESSAGE_SIZE                    152\r
+#define SSL_R_EXTRA_DATA_IN_MESSAGE                     153\r
+#define SSL_R_GOT_A_FIN_BEFORE_A_CCS                    154\r
+#define SSL_R_HTTPS_PROXY_REQUEST                       155\r
+#define SSL_R_HTTP_REQUEST                              156\r
+#define SSL_R_ILLEGAL_PADDING                           1110\r
+#define SSL_R_INVALID_CHALLENGE_LENGTH                  158\r
+#define SSL_R_INVALID_COMMAND                           280\r
+#define SSL_R_INVALID_PURPOSE                           278\r
+#define SSL_R_INVALID_TRUST                             279\r
+#define SSL_R_KEY_ARG_TOO_LONG                          1112\r
+#define SSL_R_KRB5                                      1104\r
+#define SSL_R_KRB5_C_CC_PRINC                           1094\r
+#define SSL_R_KRB5_C_GET_CRED                           1095\r
+#define SSL_R_KRB5_C_INIT                               1096\r
+#define SSL_R_KRB5_C_MK_REQ                             1097\r
+#define SSL_R_KRB5_S_BAD_TICKET                                 1098\r
+#define SSL_R_KRB5_S_INIT                               1099\r
+#define SSL_R_KRB5_S_RD_REQ                             1108\r
+#define SSL_R_KRB5_S_TKT_EXPIRED                        1105\r
+#define SSL_R_KRB5_S_TKT_NYV                            1106\r
+#define SSL_R_KRB5_S_TKT_SKEW                           1107\r
+#define SSL_R_LENGTH_MISMATCH                           159\r
+#define SSL_R_LENGTH_TOO_SHORT                          160\r
+#define SSL_R_LIBRARY_BUG                               274\r
+#define SSL_R_LIBRARY_HAS_NO_CIPHERS                    161\r
+#define SSL_R_MASTER_KEY_TOO_LONG                       1112\r
+#define SSL_R_MESSAGE_TOO_LONG                          1111\r
+#define SSL_R_MISSING_DH_DSA_CERT                       162\r
+#define SSL_R_MISSING_DH_KEY                            163\r
+#define SSL_R_MISSING_DH_RSA_CERT                       164\r
+#define SSL_R_MISSING_DSA_SIGNING_CERT                  165\r
+#define SSL_R_MISSING_EXPORT_TMP_DH_KEY                         166\r
+#define SSL_R_MISSING_EXPORT_TMP_RSA_KEY                167\r
+#define SSL_R_MISSING_RSA_CERTIFICATE                   168\r
+#define SSL_R_MISSING_RSA_ENCRYPTING_CERT               169\r
+#define SSL_R_MISSING_RSA_SIGNING_CERT                  170\r
+#define SSL_R_MISSING_TMP_DH_KEY                        171\r
+#define SSL_R_MISSING_TMP_ECDH_KEY                      1114\r
+#define SSL_R_MISSING_TMP_RSA_KEY                       172\r
+#define SSL_R_MISSING_TMP_RSA_PKEY                      173\r
+#define SSL_R_MISSING_VERIFY_MESSAGE                    174\r
+#define SSL_R_NON_SSLV2_INITIAL_PACKET                  175\r
+#define SSL_R_NO_CERTIFICATES_RETURNED                  176\r
+#define SSL_R_NO_CERTIFICATE_ASSIGNED                   177\r
+#define SSL_R_NO_CERTIFICATE_RETURNED                   178\r
+#define SSL_R_NO_CERTIFICATE_SET                        179\r
+#define SSL_R_NO_CERTIFICATE_SPECIFIED                  180\r
+#define SSL_R_NO_CIPHERS_AVAILABLE                      181\r
+#define SSL_R_NO_CIPHERS_PASSED                                 182\r
+#define SSL_R_NO_CIPHERS_SPECIFIED                      183\r
+#define SSL_R_NO_CIPHER_LIST                            184\r
+#define SSL_R_NO_CIPHER_MATCH                           185\r
+#define SSL_R_NO_CLIENT_CERT_RECEIVED                   186\r
+#define SSL_R_NO_COMPRESSION_SPECIFIED                  187\r
+#define SSL_R_NO_METHOD_SPECIFIED                       188\r
+#define SSL_R_NO_PRIVATEKEY                             189\r
+#define SSL_R_NO_PRIVATE_KEY_ASSIGNED                   190\r
+#define SSL_R_NO_PROTOCOLS_AVAILABLE                    191\r
+#define SSL_R_NO_PUBLICKEY                              192\r
+#define SSL_R_NO_SHARED_CIPHER                          193\r
+#define SSL_R_NO_VERIFY_CALLBACK                        194\r
+#define SSL_R_NULL_SSL_CTX                              195\r
+#define SSL_R_NULL_SSL_METHOD_PASSED                    196\r
+#define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED           197\r
+#define SSL_R_PACKET_LENGTH_TOO_LONG                    198\r
+#define SSL_R_PATH_TOO_LONG                             270\r
+#define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE                 199\r
+#define SSL_R_PEER_ERROR                                200\r
+#define SSL_R_PEER_ERROR_CERTIFICATE                    201\r
+#define SSL_R_PEER_ERROR_NO_CERTIFICATE                         202\r
+#define SSL_R_PEER_ERROR_NO_CIPHER                      203\r
+#define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE   204\r
+#define SSL_R_PRE_MAC_LENGTH_TOO_LONG                   205\r
+#define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS                 206\r
+#define SSL_R_PROTOCOL_IS_SHUTDOWN                      207\r
+#define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR                  208\r
+#define SSL_R_PUBLIC_KEY_IS_NOT_RSA                     209\r
+#define SSL_R_PUBLIC_KEY_NOT_RSA                        210\r
+#define SSL_R_READ_BIO_NOT_SET                          211\r
+#define SSL_R_READ_TIMEOUT_EXPIRED                      2001\r
+#define SSL_R_READ_WRONG_PACKET_TYPE                    212\r
+#define SSL_R_RECORD_LENGTH_MISMATCH                    213\r
+#define SSL_R_RECORD_TOO_LARGE                          214\r
+#define SSL_R_RECORD_TOO_SMALL                          1093\r
+#define SSL_R_REQUIRED_CIPHER_MISSING                   215\r
+#define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO                216\r
+#define SSL_R_REUSE_CERT_TYPE_NOT_ZERO                  217\r
+#define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO                218\r
+#define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED          277\r
+#define SSL_R_SHORT_READ                                219\r
+#define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE     220\r
+#define SSL_R_SSL23_DOING_SESSION_ID_REUSE              221\r
+#define SSL_R_SSL2_CONNECTION_ID_TOO_LONG               1114\r
+#define SSL_R_SSL3_SESSION_ID_TOO_LONG                  1113\r
+#define SSL_R_SSL3_SESSION_ID_TOO_SHORT                         222\r
+#define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE               1042\r
+#define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC                1020\r
+#define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED           1045\r
+#define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED           1044\r
+#define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN           1046\r
+#define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE                 1030\r
+#define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE             1040\r
+#define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER             1047\r
+#define SSL_R_SSLV3_ALERT_NO_CERTIFICATE                1041\r
+#define SSL_R_SSLV3_ALERT_PEER_ERROR_CERTIFICATE        223\r
+#define SSL_R_SSLV3_ALERT_PEER_ERROR_NO_CERTIFICATE     224\r
+#define SSL_R_SSLV3_ALERT_PEER_ERROR_NO_CIPHER          225\r
+#define SSL_R_SSLV3_ALERT_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 226\r
+#define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE            1010\r
+#define SSL_R_SSLV3_ALERT_UNKNOWN_REMOTE_ERROR_TYPE     227\r
+#define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE       1043\r
+#define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION        228\r
+#define SSL_R_SSL_HANDSHAKE_FAILURE                     229\r
+#define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS                230\r
+#define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED            1102\r
+#define SSL_R_SSL_SESSION_ID_CONFLICT                   1103\r
+#define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG           273\r
+#define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH             1101\r
+#define SSL_R_SSL_SESSION_ID_IS_DIFFERENT               231\r
+#define SSL_R_TLSV1_ALERT_ACCESS_DENIED                         1049\r
+#define SSL_R_TLSV1_ALERT_DECODE_ERROR                  1050\r
+#define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED             1021\r
+#define SSL_R_TLSV1_ALERT_DECRYPT_ERROR                         1051\r
+#define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION            1060\r
+#define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY                 1071\r
+#define SSL_R_TLSV1_ALERT_INTERNAL_ERROR                1080\r
+#define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION              1100\r
+#define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION              1070\r
+#define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW               1022\r
+#define SSL_R_TLSV1_ALERT_UNKNOWN_CA                    1048\r
+#define SSL_R_TLSV1_ALERT_USER_CANCELLED                1090\r
+#define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER      232\r
+#define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233\r
+#define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG   234\r
+#define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER           235\r
+#define SSL_R_UNABLE_TO_DECODE_DH_CERTS                         236\r
+#define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS               1115\r
+#define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY              237\r
+#define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS              238\r
+#define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS            1116\r
+#define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS      239\r
+#define SSL_R_UNABLE_TO_FIND_SSL_METHOD                         240\r
+#define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES          241\r
+#define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES          242\r
+#define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES                 243\r
+#define SSL_R_UNEXPECTED_MESSAGE                        244\r
+#define SSL_R_UNEXPECTED_RECORD                                 245\r
+#define SSL_R_UNINITIALIZED                             276\r
+#define SSL_R_UNKNOWN_ALERT_TYPE                        246\r
+#define SSL_R_UNKNOWN_CERTIFICATE_TYPE                  247\r
+#define SSL_R_UNKNOWN_CIPHER_RETURNED                   248\r
+#define SSL_R_UNKNOWN_CIPHER_TYPE                       249\r
+#define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE                         250\r
+#define SSL_R_UNKNOWN_PKEY_TYPE                                 251\r
+#define SSL_R_UNKNOWN_PROTOCOL                          252\r
+#define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE                         253\r
+#define SSL_R_UNKNOWN_SSL_VERSION                       254\r
+#define SSL_R_UNKNOWN_STATE                             255\r
+#define SSL_R_UNSUPPORTED_CIPHER                        256\r
+#define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM                 257\r
+#define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE                1118\r
+#define SSL_R_UNSUPPORTED_OPTION                        1091\r
+#define SSL_R_UNSUPPORTED_PROTOCOL                      258\r
+#define SSL_R_UNSUPPORTED_SSL_VERSION                   259\r
+#define SSL_R_WRITE_BIO_NOT_SET                                 260\r
+#define SSL_R_WRONG_CIPHER_RETURNED                     261\r
+#define SSL_R_WRONG_MESSAGE_TYPE                        262\r
+#define SSL_R_WRONG_NUMBER_OF_KEY_BITS                  263\r
+#define SSL_R_WRONG_SIGNATURE_LENGTH                    264\r
+#define SSL_R_WRONG_SIGNATURE_SIZE                      265\r
+#define SSL_R_WRONG_SSL_VERSION                                 266\r
+#define SSL_R_WRONG_VERSION_NUMBER                      267\r
+#define SSL_R_X509_LIB                                  268\r
+#define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS          269\r
+\r
+#ifdef  __cplusplus\r
+}\r
+#endif\r
+#endif\r