ssl.h

Go to the documentation of this file.
00001 /* ssl/ssl.h */
00002 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
00003  * All rights reserved.
00004  *
00005  * This package is an SSL implementation written
00006  * by Eric Young (eay@cryptsoft.com).
00007  * The implementation was written so as to conform with Netscapes SSL.
00008  *
00009  * This library is free for commercial and non-commercial use as long as
00010  * the following conditions are aheared to.  The following conditions
00011  * apply to all code found in this distribution, be it the RC4, RSA,
00012  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
00013  * included with this distribution is covered by the same copyright terms
00014  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
00015  *
00016  * Copyright remains Eric Young's, and as such any Copyright notices in
00017  * the code are not to be removed.
00018  * If this package is used in a product, Eric Young should be given attribution
00019  * as the author of the parts of the library used.
00020  * This can be in the form of a textual message at program startup or
00021  * in documentation (online or textual) provided with the package.
00022  *
00023  * Redistribution and use in source and binary forms, with or without
00024  * modification, are permitted provided that the following conditions
00025  * are met:
00026  * 1. Redistributions of source code must retain the copyright
00027  *    notice, this list of conditions and the following disclaimer.
00028  * 2. Redistributions in binary form must reproduce the above copyright
00029  *    notice, this list of conditions and the following disclaimer in the
00030  *    documentation and/or other materials provided with the distribution.
00031  * 3. All advertising materials mentioning features or use of this software
00032  *    must display the following acknowledgement:
00033  *    "This product includes cryptographic software written by
00034  *     Eric Young (eay@cryptsoft.com)"
00035  *    The word 'cryptographic' can be left out if the rouines from the library
00036  *    being used are not cryptographic related :-).
00037  * 4. If you include any Windows specific code (or a derivative thereof) from
00038  *    the apps directory (application code) you must include an acknowledgement:
00039  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
00040  *
00041  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
00042  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00043  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00044  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
00045  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00046  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00047  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00048  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00049  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00050  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00051  * SUCH DAMAGE.
00052  *
00053  * The licence and distribution terms for any publically available version or
00054  * derivative of this code cannot be changed.  i.e. this code cannot simply be
00055  * copied and put under another distribution licence
00056  * [including the GNU Public Licence.]
00057  */
00058 /* ====================================================================
00059  * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
00060  *
00061  * Redistribution and use in source and binary forms, with or without
00062  * modification, are permitted provided that the following conditions
00063  * are met:
00064  *
00065  * 1. Redistributions of source code must retain the above copyright
00066  *    notice, this list of conditions and the following disclaimer.
00067  *
00068  * 2. Redistributions in binary form must reproduce the above copyright
00069  *    notice, this list of conditions and the following disclaimer in
00070  *    the documentation and/or other materials provided with the
00071  *    distribution.
00072  *
00073  * 3. All advertising materials mentioning features or use of this
00074  *    software must display the following acknowledgment:
00075  *    "This product includes software developed by the OpenSSL Project
00076  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
00077  *
00078  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
00079  *    endorse or promote products derived from this software without
00080  *    prior written permission. For written permission, please contact
00081  *    openssl-core@openssl.org.
00082  *
00083  * 5. Products derived from this software may not be called "OpenSSL"
00084  *    nor may "OpenSSL" appear in their names without prior written
00085  *    permission of the OpenSSL Project.
00086  *
00087  * 6. Redistributions of any form whatsoever must retain the following
00088  *    acknowledgment:
00089  *    "This product includes software developed by the OpenSSL Project
00090  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
00091  *
00092  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
00093  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00094  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00095  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
00096  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00097  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00098  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00099  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
00101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
00103  * OF THE POSSIBILITY OF SUCH DAMAGE.
00104  * ====================================================================
00105  *
00106  * This product includes cryptographic software written by Eric Young
00107  * (eay@cryptsoft.com).  This product includes software written by Tim
00108  * Hudson (tjh@cryptsoft.com).
00109  *
00110  */
00111 /* ====================================================================
00112  * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.
00113  *
00114  * Redistribution and use in source and binary forms, with or without
00115  * modification, are permitted provided that the following conditions
00116  * are met:
00117  *
00118  * 1. Redistributions of source code must retain the above copyright
00119  *    notice, this list of conditions and the following disclaimer.
00120  *
00121  * 2. Redistributions in binary form must reproduce the above copyright
00122  *    notice, this list of conditions and the following disclaimer in
00123  *    the documentation and/or other materials provided with the
00124  *    distribution.
00125  *
00126  * 3. All advertising materials mentioning features or use of this
00127  *    software must display the following acknowledgment:
00128  *    "This product includes software developed by the OpenSSL Project
00129  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
00130  *
00131  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
00132  *    endorse or promote products derived from this software without
00133  *    prior written permission. For written permission, please contact
00134  *    openssl-core@openssl.org.
00135  *
00136  * 5. Products derived from this software may not be called "OpenSSL"
00137  *    nor may "OpenSSL" appear in their names without prior written
00138  *    permission of the OpenSSL Project.
00139  *
00140  * 6. Redistributions of any form whatsoever must retain the following
00141  *    acknowledgment:
00142  *    "This product includes software developed by the OpenSSL Project
00143  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
00144  *
00145  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
00146  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00147  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00148  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
00149  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00150  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00151  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00152  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00153  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
00154  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00155  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
00156  * OF THE POSSIBILITY OF SUCH DAMAGE.
00157  * ====================================================================
00158  *
00159  * This product includes cryptographic software written by Eric Young
00160  * (eay@cryptsoft.com).  This product includes software written by Tim
00161  * Hudson (tjh@cryptsoft.com).
00162  *
00163  */
00164 /* ====================================================================
00165  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
00166  * ECC cipher suite support in OpenSSL originally developed by
00167  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
00168  */
00169 
00170 #ifndef HEADER_SSL_H
00171 #define HEADER_SSL_H
00172 
00173 #include <openssl/e_os2.h>
00174 
00175 #ifndef OPENSSL_NO_COMP
00176 #include <openssl/comp.h>
00177 #endif
00178 #ifndef OPENSSL_NO_BIO
00179 #include <openssl/bio.h>
00180 #endif
00181 #ifndef OPENSSL_NO_DEPRECATED
00182 #ifndef OPENSSL_NO_X509
00183 #include <openssl/x509.h>
00184 #endif
00185 #include <openssl/crypto.h>
00186 #include <openssl/lhash.h>
00187 #include <openssl/buffer.h>
00188 #endif
00189 #include <openssl/pem.h>
00190 
00191 #include <openssl/kssl.h>
00192 #include <openssl/safestack.h>
00193 #include <openssl/symhacks.h>
00194 
00195 #ifdef  __cplusplus
00196 extern "C" {
00197 #endif
00198 
00199 /* SSLeay version number for ASN.1 encoding of the session information */
00200 /* Version 0 - initial version
00201  * Version 1 - added the optional peer certificate
00202  */
00203 #define SSL_SESSION_ASN1_VERSION 0x0001
00204 
00205 /* text strings for the ciphers */
00206 #define SSL_TXT_NULL_WITH_MD5    SSL2_TXT_NULL_WITH_MD5
00207 #define SSL_TXT_RC4_128_WITH_MD5 SSL2_TXT_RC4_128_WITH_MD5
00208 #define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5
00209 #define SSL_TXT_RC2_128_CBC_WITH_MD5   SSL2_TXT_RC2_128_CBC_WITH_MD5
00210 #define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5
00211 #define SSL_TXT_IDEA_128_CBC_WITH_MD5  SSL2_TXT_IDEA_128_CBC_WITH_MD5
00212 #define SSL_TXT_DES_64_CBC_WITH_MD5 SSL2_TXT_DES_64_CBC_WITH_MD5
00213 #define SSL_TXT_DES_64_CBC_WITH_SHA SSL2_TXT_DES_64_CBC_WITH_SHA
00214 #define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5
00215 #define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA
00216 
00217 /*    VRS Additional Kerberos5 entries
00218  */
00219 #define SSL_TXT_KRB5_DES_64_CBC_SHA   SSL3_TXT_KRB5_DES_64_CBC_SHA
00220 #define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA
00221 #define SSL_TXT_KRB5_RC4_128_SHA      SSL3_TXT_KRB5_RC4_128_SHA
00222 #define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA
00223 #define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5
00224 #define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5
00225 #define SSL_TXT_KRB5_RC4_128_MD5      SSL3_TXT_KRB5_RC4_128_MD5
00226 #define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5
00227 
00228 #define SSL_TXT_KRB5_DES_40_CBC_SHA   SSL3_TXT_KRB5_DES_40_CBC_SHA
00229 #define SSL_TXT_KRB5_RC2_40_CBC_SHA   SSL3_TXT_KRB5_RC2_40_CBC_SHA
00230 #define SSL_TXT_KRB5_RC4_40_SHA        SSL3_TXT_KRB5_RC4_40_SHA
00231 #define SSL_TXT_KRB5_DES_40_CBC_MD5   SSL3_TXT_KRB5_DES_40_CBC_MD5
00232 #define SSL_TXT_KRB5_RC2_40_CBC_MD5   SSL3_TXT_KRB5_RC2_40_CBC_MD5
00233 #define SSL_TXT_KRB5_RC4_40_MD5        SSL3_TXT_KRB5_RC4_40_MD5
00234 
00235 #define SSL_TXT_KRB5_DES_40_CBC_SHA   SSL3_TXT_KRB5_DES_40_CBC_SHA
00236 #define SSL_TXT_KRB5_DES_40_CBC_MD5   SSL3_TXT_KRB5_DES_40_CBC_MD5
00237 #define SSL_TXT_KRB5_DES_64_CBC_SHA   SSL3_TXT_KRB5_DES_64_CBC_SHA
00238 #define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5
00239 #define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA
00240 #define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5
00241 #define SSL_MAX_KRB5_PRINCIPAL_LENGTH  256
00242 
00243 #define SSL_MAX_SSL_SESSION_ID_LENGTH     32
00244 #define SSL_MAX_SID_CTX_LENGTH         32
00245 
00246 #define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES  (512/8)
00247 #define SSL_MAX_KEY_ARG_LENGTH         8
00248 #define SSL_MAX_MASTER_KEY_LENGTH      48
00249 
00250 /* These are used to specify which ciphers to use and not to use */
00251 #define SSL_TXT_LOW     "LOW"
00252 #define SSL_TXT_MEDIUM     "MEDIUM"
00253 #define SSL_TXT_HIGH    "HIGH"
00254 #define SSL_TXT_kFZA    "kFZA"
00255 #define  SSL_TXT_aFZA      "aFZA"
00256 #define SSL_TXT_eFZA    "eFZA"
00257 #define SSL_TXT_FZA     "FZA"
00258 
00259 #define  SSL_TXT_aNULL     "aNULL"
00260 #define  SSL_TXT_eNULL     "eNULL"
00261 #define  SSL_TXT_NULL      "NULL"
00262 
00263 #define SSL_TXT_kKRB5      "kKRB5"
00264 #define SSL_TXT_aKRB5      "aKRB5"
00265 #define SSL_TXT_KRB5       "KRB5"
00266 
00267 #define SSL_TXT_kRSA    "kRSA"
00268 #define SSL_TXT_kDHr    "kDHr"
00269 #define SSL_TXT_kDHd    "kDHd"
00270 #define SSL_TXT_kEDH    "kEDH"
00271 #define  SSL_TXT_aRSA      "aRSA"
00272 #define  SSL_TXT_aDSS      "aDSS"
00273 #define  SSL_TXT_aDH    "aDH"
00274 #define  SSL_TXT_DSS    "DSS"
00275 #define SSL_TXT_DH      "DH"
00276 #define SSL_TXT_EDH     "EDH"
00277 #define SSL_TXT_ADH     "ADH"
00278 #define SSL_TXT_RSA     "RSA"
00279 #define SSL_TXT_DES     "DES"
00280 #define SSL_TXT_3DES    "3DES"
00281 #define SSL_TXT_RC4     "RC4"
00282 #define SSL_TXT_RC2     "RC2"
00283 #define SSL_TXT_IDEA    "IDEA"
00284 #define SSL_TXT_AES     "AES"
00285 #define SSL_TXT_CAMELLIA   "CAMELLIA"
00286 #define SSL_TXT_MD5     "MD5"
00287 #define SSL_TXT_SHA1    "SHA1"
00288 #define SSL_TXT_SHA     "SHA"
00289 #define SSL_TXT_EXP     "EXP"
00290 #define SSL_TXT_EXPORT     "EXPORT"
00291 #define SSL_TXT_EXP40      "EXPORT40"
00292 #define SSL_TXT_EXP56      "EXPORT56"
00293 #define SSL_TXT_SSLV2      "SSLv2"
00294 #define SSL_TXT_SSLV3      "SSLv3"
00295 #define SSL_TXT_TLSV1      "TLSv1"
00296 #define SSL_TXT_ALL     "ALL"
00297 #define SSL_TXT_ECC     "ECCdraft" /* ECC ciphersuites are not yet official */
00298 
00299 /*
00300  * COMPLEMENTOF* definitions. These identifiers are used to (de-select)
00301  * ciphers normally not being used.
00302  * Example: "RC4" will activate all ciphers using RC4 including ciphers
00303  * without authentication, which would normally disabled by DEFAULT (due
00304  * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT"
00305  * will make sure that it is also disabled in the specific selection.
00306  * COMPLEMENTOF* identifiers are portable between version, as adjustments
00307  * to the default cipher setup will also be included here.
00308  *
00309  * COMPLEMENTOFDEFAULT does not experience the same special treatment that
00310  * DEFAULT gets, as only selection is being done and no sorting as needed
00311  * for DEFAULT.
00312  */
00313 #define SSL_TXT_CMPALL     "COMPLEMENTOFALL"
00314 #define SSL_TXT_CMPDEF     "COMPLEMENTOFDEFAULT"
00315 
00316 /* The following cipher list is used by default.
00317  * It also is substituted when an application-defined cipher list string
00318  * starts with 'DEFAULT'. */
00319 #ifdef OPENSSL_NO_CAMELLIA
00320 # define SSL_DEFAULT_CIPHER_LIST "ALL:!ADH:+RC4:@STRENGTH" /* low priority for RC4 */
00321 #else
00322 # define SSL_DEFAULT_CIPHER_LIST "AES:CAMELLIA:ALL:!ADH:+RC4:@STRENGTH" /* low priority for RC4 */
00323 #endif
00324 
00325 /* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
00326 #define SSL_SENT_SHUTDOWN  1
00327 #define SSL_RECEIVED_SHUTDOWN 2
00328 
00329 #ifdef __cplusplus
00330 }
00331 #endif
00332 
00333 #ifdef  __cplusplus
00334 extern "C" {
00335 #endif
00336 
00337 #if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2)
00338 #define OPENSSL_NO_SSL2
00339 #endif
00340 
00341 #define SSL_FILETYPE_ASN1  X509_FILETYPE_ASN1
00342 #define SSL_FILETYPE_PEM   X509_FILETYPE_PEM
00343 
00344 /* This is needed to stop compilers complaining about the
00345  * 'struct ssl_st *' function parameters used to prototype callbacks
00346  * in SSL_CTX. */
00347 typedef struct ssl_st *ssl_crock_st;
00348 
00349 /* used to hold info on the particular ciphers used */
00350 typedef struct ssl_cipher_st
00351    {
00352    int valid;
00353    const char *name;    /* text name */
00354    unsigned long id;    /* id, 4 bytes, first is version */
00355    unsigned long algorithms;  /* what ciphers are used */
00356    unsigned long algo_strength;  /* strength and export flags */
00357    unsigned long algorithm2;  /* Extra flags */
00358    int strength_bits;      /* Number of bits really used */
00359    int alg_bits;        /* Number of bits for algorithm */
00360    unsigned long mask;     /* used for matching */
00361    unsigned long mask_strength;  /* also used for matching */
00362    } SSL_CIPHER;
00363 
00364 DECLARE_STACK_OF(SSL_CIPHER)
00365 
00366 typedef struct ssl_st SSL;
00367 typedef struct ssl_ctx_st SSL_CTX;
00368 
00369 /* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */
00370 typedef struct ssl_method_st
00371    {
00372    int version;
00373    int (*ssl_new)(SSL *s);
00374    void (*ssl_clear)(SSL *s);
00375    void (*ssl_free)(SSL *s);
00376    int (*ssl_accept)(SSL *s);
00377    int (*ssl_connect)(SSL *s);
00378    int (*ssl_read)(SSL *s,void *buf,int len);
00379    int (*ssl_peek)(SSL *s,void *buf,int len);
00380    int (*ssl_write)(SSL *s,const void *buf,int len);
00381    int (*ssl_shutdown)(SSL *s);
00382    int (*ssl_renegotiate)(SSL *s);
00383    int (*ssl_renegotiate_check)(SSL *s);
00384    long (*ssl_get_message)(SSL *s, int st1, int stn, int mt, long
00385       max, int *ok);
00386    int (*ssl_read_bytes)(SSL *s, int type, unsigned char *buf, int len,
00387       int peek);
00388    int (*ssl_write_bytes)(SSL *s, int type, const void *buf_, int len);
00389    int (*ssl_dispatch_alert)(SSL *s);
00390    long (*ssl_ctrl)(SSL *s,int cmd,long larg,void *parg);
00391    long (*ssl_ctx_ctrl)(SSL_CTX *ctx,int cmd,long larg,void *parg);
00392    SSL_CIPHER *(*get_cipher_by_char)(const unsigned char *ptr);
00393    int (*put_cipher_by_char)(const SSL_CIPHER *cipher,unsigned char *ptr);
00394    int (*ssl_pending)(const SSL *s);
00395    int (*num_ciphers)(void);
00396    SSL_CIPHER *(*get_cipher)(unsigned ncipher);
00397    struct ssl_method_st *(*get_ssl_method)(int version);
00398    long (*get_timeout)(void);
00399    struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
00400    int (*ssl_version)(void);
00401    long (*ssl_callback_ctrl)(SSL *s, int cb_id, void (*fp)(void));
00402    long (*ssl_ctx_callback_ctrl)(SSL_CTX *s, int cb_id, void (*fp)(void));
00403    } SSL_METHOD;
00404 
00405 /* Lets make this into an ASN.1 type structure as follows
00406  * SSL_SESSION_ID ::= SEQUENCE {
00407  * version     INTEGER, -- structure version number
00408  * SSLversion     INTEGER, -- SSL version number
00409  * Cipher         OCTET_STRING,  -- the 3 byte cipher ID
00410  * Session_ID     OCTET_STRING,  -- the Session ID
00411  * Master_key     OCTET_STRING,  -- the master key
00412  * KRB5_principal    OCTET_STRING   -- optional Kerberos principal
00413  * Key_Arg [ 0 ] IMPLICIT  OCTET_STRING,  -- the optional Key argument
00414  * Time [ 1 ] EXPLICIT  INTEGER, -- optional Start Time
00415  * Timeout [ 2 ] EXPLICIT  INTEGER, -- optional Timeout ins seconds
00416  * Peer [ 3 ] EXPLICIT  X509,    -- optional Peer Certificate
00417  * Session_ID_context [ 4 ] EXPLICIT OCTET_STRING,   -- the Session ID context
00418  * Verify_result [ 5 ] EXPLICIT INTEGER    -- X509_V_... code for `Peer'
00419  * Compression [6] IMPLICIT ASN1_OBJECT   -- compression OID XXXXX
00420  * }
00421  * Look in ssl/ssl_asn1.c for more details
00422  * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).
00423  */
00424 typedef struct ssl_session_st
00425    {
00426    int ssl_version;  /* what ssl version session info is
00427              * being kept in here? */
00428 
00429    /* only really used in SSLv2 */
00430    unsigned int key_arg_length;
00431    unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH];
00432    int master_key_length;
00433    unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];
00434    /* session_id - valid? */
00435    unsigned int session_id_length;
00436    unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
00437    /* this is used to determine whether the session is being reused in
00438     * the appropriate context. It is up to the application to set this,
00439     * via SSL_new */
00440    unsigned int sid_ctx_length;
00441    unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
00442 
00443 #ifndef OPENSSL_NO_KRB5
00444         unsigned int krb5_client_princ_len;
00445         unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH];
00446 #endif /* OPENSSL_NO_KRB5 */
00447 
00448    int not_resumable;
00449 
00450    /* The cert is the certificate used to establish this connection */
00451    struct sess_cert_st /* SESS_CERT */ *sess_cert;
00452 
00453    /* This is the cert for the other end.
00454     * On clients, it will be the same as sess_cert->peer_key->x509
00455     * (the latter is not enough as sess_cert is not retained
00456     * in the external representation of sessions, see ssl_asn1.c). */
00457    X509 *peer;
00458    /* when app_verify_callback accepts a session where the peer's certificate
00459     * is not ok, we must remember the error for session reuse: */
00460    long verify_result; /* only for servers */
00461 
00462    int references;
00463    long timeout;
00464    long time;
00465 
00466    int compress_meth;      /* Need to lookup the method */
00467 
00468    SSL_CIPHER *cipher;
00469    unsigned long cipher_id;   /* when ASN.1 loaded, this
00470                 * needs to be used to load
00471                 * the 'cipher' structure */
00472 
00473    STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */
00474 
00475    CRYPTO_EX_DATA ex_data; /* application specific data */
00476 
00477    /* These are used to make removal of session-ids more
00478     * efficient and to implement a maximum cache size. */
00479    struct ssl_session_st *prev,*next;
00480    } SSL_SESSION;
00481 
00482 
00483 #define SSL_OP_MICROSOFT_SESS_ID_BUG         0x00000001L
00484 #define SSL_OP_NETSCAPE_CHALLENGE_BUG        0x00000002L
00485 #define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG    0x00000008L
00486 #define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG      0x00000010L
00487 #define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER    0x00000020L
00488 #define SSL_OP_MSIE_SSLV2_RSA_PADDING        0x00000040L /* no effect since 0.9.7h and 0.9.8b */
00489 #define SSL_OP_SSLEAY_080_CLIENT_DH_BUG         0x00000080L
00490 #define SSL_OP_TLS_D5_BUG           0x00000100L
00491 #define SSL_OP_TLS_BLOCK_PADDING_BUG         0x00000200L
00492 
00493 /* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added
00494  * in OpenSSL 0.9.6d.  Usually (depending on the application protocol)
00495  * the workaround is not needed.  Unfortunately some broken SSL/TLS
00496  * implementations cannot handle it at all, which is why we include
00497  * it in SSL_OP_ALL. */
00498 #define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS              0x00000800L /* added in 0.9.6e */
00499 
00500 /* SSL_OP_ALL: various bug workarounds that should be rather harmless.
00501  *             This used to be 0x000FFFFFL before 0.9.7. */
00502 #define SSL_OP_ALL               0x00000FFFL
00503 
00504 /* DTLS options */
00505 #define SSL_OP_NO_QUERY_MTU                 0x00001000L
00506 /* Turn on Cookie Exchange (on relevant for servers) */
00507 #define SSL_OP_COOKIE_EXCHANGE              0x00002000L
00508 
00509 /* As server, disallow session resumption on renegotiation */
00510 #define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L
00511 /* If set, always create a new key when using tmp_ecdh parameters */
00512 #define SSL_OP_SINGLE_ECDH_USE            0x00080000L
00513 /* If set, always create a new key when using tmp_dh parameters */
00514 #define SSL_OP_SINGLE_DH_USE           0x00100000L
00515 /* Set to always use the tmp_rsa key when doing RSA operations,
00516  * even when this violates protocol specs */
00517 #define SSL_OP_EPHEMERAL_RSA           0x00200000L
00518 /* Set on servers to choose the cipher according to the server's
00519  * preferences */
00520 #define SSL_OP_CIPHER_SERVER_PREFERENCE         0x00400000L
00521 /* If set, a server will allow a client to issue a SSLv3.0 version number
00522  * as latest version supported in the premaster secret, even when TLSv1.0
00523  * (version 3.1) was announced in the client hello. Normally this is
00524  * forbidden to prevent version rollback attacks. */
00525 #define SSL_OP_TLS_ROLLBACK_BUG           0x00800000L
00526 
00527 #define SSL_OP_NO_SSLv2             0x01000000L
00528 #define SSL_OP_NO_SSLv3             0x02000000L
00529 #define SSL_OP_NO_TLSv1             0x04000000L
00530 
00531 /* The next flag deliberately changes the ciphertest, this is a check
00532  * for the PKCS#1 attack */
00533 #define SSL_OP_PKCS1_CHECK_1           0x08000000L
00534 #define SSL_OP_PKCS1_CHECK_2           0x10000000L
00535 #define SSL_OP_NETSCAPE_CA_DN_BUG         0x20000000L
00536 #define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG     0x40000000L
00537 
00538 
00539 /* Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success
00540  * when just a single record has been written): */
00541 #define SSL_MODE_ENABLE_PARTIAL_WRITE       0x00000001L
00542 /* Make it possible to retry SSL_write() with changed buffer location
00543  * (buffer contents must stay the same!); this is not the default to avoid
00544  * the misconception that non-blocking SSL_write() behaves like
00545  * non-blocking write(): */
00546 #define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L
00547 /* Never bother the application with retries if the transport
00548  * is blocking: */
00549 #define SSL_MODE_AUTO_RETRY 0x00000004L
00550 /* Don't attempt to automatically build certificate chain */
00551 #define SSL_MODE_NO_AUTO_CHAIN 0x00000008L
00552 
00553 
00554 /* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value,
00555  * they cannot be used to clear bits. */
00556 
00557 #define SSL_CTX_set_options(ctx,op) \
00558    SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)
00559 #define SSL_CTX_get_options(ctx) \
00560    SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL)
00561 #define SSL_set_options(ssl,op) \
00562    SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL)
00563 #define SSL_get_options(ssl) \
00564         SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL)
00565 
00566 #define SSL_CTX_set_mode(ctx,op) \
00567    SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
00568 #define SSL_CTX_get_mode(ctx) \
00569    SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)
00570 #define SSL_set_mode(ssl,op) \
00571    SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)
00572 #define SSL_get_mode(ssl) \
00573         SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)
00574 #define SSL_set_mtu(ssl, mtu) \
00575         SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)
00576 
00577 
00578 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));
00579 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));
00580 #define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
00581 #define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
00582 
00583 
00584 
00585 #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32)
00586 #define SSL_MAX_CERT_LIST_DEFAULT 1024*30 /* 30k max cert list :-) */
00587 #else
00588 #define SSL_MAX_CERT_LIST_DEFAULT 1024*100 /* 100k max cert list :-) */
00589 #endif
00590 
00591 #define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT   (1024*20)
00592 
00593 /* This callback type is used inside SSL_CTX, SSL, and in the functions that set
00594  * them. It is used to override the generation of SSL/TLS session IDs in a
00595  * server. Return value should be zero on an error, non-zero to proceed. Also,
00596  * callbacks should themselves check if the id they generate is unique otherwise
00597  * the SSL handshake will fail with an error - callbacks can do this using the
00598  * 'ssl' value they're passed by;
00599  *      SSL_has_matching_session_id(ssl, id, *id_len)
00600  * The length value passed in is set at the maximum size the session ID can be.
00601  * In SSLv2 this is 16 bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback
00602  * can alter this length to be less if desired, but under SSLv2 session IDs are
00603  * supposed to be fixed at 16 bytes so the id will be padded after the callback
00604  * returns in this case. It is also an error for the callback to set the size to
00605  * zero. */
00606 typedef int (*GEN_SESSION_CB)(const SSL *ssl, unsigned char *id,
00607             unsigned int *id_len);
00608 
00609 typedef struct ssl_comp_st
00610    {
00611    int id;
00612    const char *name;
00613 #ifndef OPENSSL_NO_COMP
00614    COMP_METHOD *method;
00615 #else
00616    char *method;
00617 #endif
00618    } SSL_COMP;
00619 
00620 DECLARE_STACK_OF(SSL_COMP)
00621 
00622 struct ssl_ctx_st
00623    {
00624    SSL_METHOD *method;
00625 
00626    STACK_OF(SSL_CIPHER) *cipher_list;
00627    /* same as above but sorted for lookup */
00628    STACK_OF(SSL_CIPHER) *cipher_list_by_id;
00629 
00630    struct x509_store_st /* X509_STORE */ *cert_store;
00631    struct lhash_st /* LHASH */ *sessions; /* a set of SSL_SESSIONs */
00632    /* Most session-ids that will be cached, default is
00633     * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */
00634    unsigned long session_cache_size;
00635    struct ssl_session_st *session_cache_head;
00636    struct ssl_session_st *session_cache_tail;
00637 
00638    /* This can have one of 2 values, ored together,
00639     * SSL_SESS_CACHE_CLIENT,
00640     * SSL_SESS_CACHE_SERVER,
00641     * Default is SSL_SESSION_CACHE_SERVER, which means only
00642     * SSL_accept which cache SSL_SESSIONS. */
00643    int session_cache_mode;
00644 
00645    /* If timeout is not 0, it is the default timeout value set
00646     * when SSL_new() is called.  This has been put in to make
00647     * life easier to set things up */
00648    long session_timeout;
00649 
00650    /* If this callback is not null, it will be called each
00651     * time a session id is added to the cache.  If this function
00652     * returns 1, it means that the callback will do a
00653     * SSL_SESSION_free() when it has finished using it.  Otherwise,
00654     * on 0, it means the callback has finished with it.
00655     * If remove_session_cb is not null, it will be called when
00656     * a session-id is removed from the cache.  After the call,
00657     * OpenSSL will SSL_SESSION_free() it. */
00658    int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess);
00659    void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess);
00660    SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl,
00661       unsigned char *data,int len,int *copy);
00662 
00663    struct
00664       {
00665       int sess_connect; /* SSL new conn - started */
00666       int sess_connect_renegotiate;/* SSL reneg - requested */
00667       int sess_connect_good;  /* SSL new conne/reneg - finished */
00668       int sess_accept;  /* SSL new accept - started */
00669       int sess_accept_renegotiate;/* SSL reneg - requested */
00670       int sess_accept_good;   /* SSL accept/reneg - finished */
00671       int sess_miss;    /* session lookup misses  */
00672       int sess_timeout; /* reuse attempt on timeouted session */
00673       int sess_cache_full; /* session removed due to full cache */
00674       int sess_hit;     /* session reuse actually done */
00675       int sess_cb_hit;  /* session-id that was not
00676                 * in the cache was
00677                 * passed back via the callback.  This
00678                 * indicates that the application is
00679                 * supplying session-id's from other
00680                 * processes - spooky :-) */
00681       } stats;
00682 
00683    int references;
00684 
00685    /* if defined, these override the X509_verify_cert() calls */
00686    int (*app_verify_callback)(X509_STORE_CTX *, void *);
00687    void *app_verify_arg;
00688    /* before OpenSSL 0.9.7, 'app_verify_arg' was ignored
00689     * ('app_verify_callback' was called with just one argument) */
00690 
00691    /* Default password callback. */
00692    pem_password_cb *default_passwd_callback;
00693 
00694    /* Default password callback user data. */
00695    void *default_passwd_callback_userdata;
00696 
00697    /* get client cert callback */
00698    int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
00699 
00700     /* cookie generate callback */
00701     int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie,
00702         unsigned int *cookie_len);
00703 
00704     /* verify cookie callback */
00705     int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie,
00706         unsigned int cookie_len);
00707 
00708    CRYPTO_EX_DATA ex_data;
00709 
00710    const EVP_MD *rsa_md5;/* For SSLv2 - name is 'ssl2-md5' */
00711    const EVP_MD *md5;   /* For SSLv3/TLSv1 'ssl3-md5' */
00712    const EVP_MD *sha1;   /* For SSLv3/TLSv1 'ssl3->sha1' */
00713 
00714    STACK_OF(X509) *extra_certs;
00715    STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */
00716 
00717 
00718    /* Default values used when no per-SSL value is defined follow */
00719 
00720    void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */
00721 
00722    /* what we put in client cert requests */
00723    STACK_OF(X509_NAME) *client_CA;
00724 
00725 
00726    /* Default values to use in SSL structures follow (these are copied by SSL_new) */
00727 
00728    unsigned long options;
00729    unsigned long mode;
00730    long max_cert_list;
00731 
00732    struct cert_st /* CERT */ *cert;
00733    int read_ahead;
00734 
00735    /* callback that allows applications to peek at protocol messages */
00736    void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
00737    void *msg_callback_arg;
00738 
00739    int verify_mode;
00740    unsigned int sid_ctx_length;
00741    unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
00742    int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */
00743 
00744    /* Default generate session ID callback. */
00745    GEN_SESSION_CB generate_session_id;
00746 
00747    X509_VERIFY_PARAM *param;
00748 
00749 #if 0
00750    int purpose;      /* Purpose setting */
00751    int trust;     /* Trust setting */
00752 #endif
00753 
00754    int quiet_shutdown;
00755    };
00756 
00757 #define SSL_SESS_CACHE_OFF       0x0000
00758 #define SSL_SESS_CACHE_CLIENT       0x0001
00759 #define SSL_SESS_CACHE_SERVER       0x0002
00760 #define SSL_SESS_CACHE_BOTH   (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)
00761 #define SSL_SESS_CACHE_NO_AUTO_CLEAR      0x0080
00762 /* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */
00763 #define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100
00764 #define SSL_SESS_CACHE_NO_INTERNAL_STORE  0x0200
00765 #define SSL_SESS_CACHE_NO_INTERNAL \
00766    (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)
00767 
00768   struct lhash_st *SSL_CTX_sessions(SSL_CTX *ctx);
00769 #define SSL_CTX_sess_number(ctx) \
00770    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)
00771 #define SSL_CTX_sess_connect(ctx) \
00772    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)
00773 #define SSL_CTX_sess_connect_good(ctx) \
00774    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)
00775 #define SSL_CTX_sess_connect_renegotiate(ctx) \
00776    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)
00777 #define SSL_CTX_sess_accept(ctx) \
00778    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)
00779 #define SSL_CTX_sess_accept_renegotiate(ctx) \
00780    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)
00781 #define SSL_CTX_sess_accept_good(ctx) \
00782    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)
00783 #define SSL_CTX_sess_hits(ctx) \
00784    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)
00785 #define SSL_CTX_sess_cb_hits(ctx) \
00786    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)
00787 #define SSL_CTX_sess_misses(ctx) \
00788    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)
00789 #define SSL_CTX_sess_timeouts(ctx) \
00790    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)
00791 #define SSL_CTX_sess_cache_full(ctx) \
00792    SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)
00793 
00794 void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess));
00795 int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(struct ssl_st *ssl, SSL_SESSION *sess);
00796 void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess));
00797 void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(struct ssl_ctx_st *ctx, SSL_SESSION *sess);
00798 void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl, unsigned char *data,int len,int *copy));
00799 SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(struct ssl_st *ssl, unsigned char *Data, int len, int *copy);
00800 void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb)(const SSL *ssl,int type,int val));
00801 void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int val);
00802 void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
00803 int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
00804 void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len));
00805 void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len));
00806 
00807 #define SSL_NOTHING  1
00808 #define SSL_WRITING  2
00809 #define SSL_READING  3
00810 #define SSL_X509_LOOKUP 4
00811 
00812 /* These will only be used when doing non-blocking IO */
00813 #define SSL_want_nothing(s)   (SSL_want(s) == SSL_NOTHING)
00814 #define SSL_want_read(s)   (SSL_want(s) == SSL_READING)
00815 #define SSL_want_write(s)  (SSL_want(s) == SSL_WRITING)
00816 #define SSL_want_x509_lookup(s)  (SSL_want(s) == SSL_X509_LOOKUP)
00817 
00818 struct ssl_st
00819    {
00820    /* protocol version
00821     * (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, DTLS1_VERSION)
00822     */
00823    int version;
00824    int type; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */
00825 
00826    SSL_METHOD *method; /* SSLv3 */
00827 
00828    /* There are 2 BIO's even though they are normally both the
00829     * same.  This is so data can be read and written to different
00830     * handlers */
00831 
00832 #ifndef OPENSSL_NO_BIO
00833    BIO *rbio; /* used by SSL_read */
00834    BIO *wbio; /* used by SSL_write */
00835    BIO *bbio; /* used during session-id reuse to concatenate
00836           * messages */
00837 #else
00838    char *rbio; /* used by SSL_read */
00839    char *wbio; /* used by SSL_write */
00840    char *bbio;
00841 #endif
00842    /* This holds a variable that indicates what we were doing
00843     * when a 0 or -1 is returned.  This is needed for
00844     * non-blocking IO so we know what request needs re-doing when
00845     * in SSL_accept or SSL_connect */
00846    int rwstate;
00847 
00848    /* true when we are actually in SSL_accept() or SSL_connect() */
00849    int in_handshake;
00850    int (*handshake_func)(SSL *);
00851 
00852    /* Imagine that here's a boolean member "init" that is
00853     * switched as soon as SSL_set_{accept/connect}_state
00854     * is called for the first time, so that "state" and
00855     * "handshake_func" are properly initialized.  But as
00856     * handshake_func is == 0 until then, we use this
00857     * test instead of an "init" member.
00858     */
00859 
00860    int server; /* are we the server side? - mostly used by SSL_clear*/
00861 
00862    int new_session;/* 1 if we are to use a new session.
00863                     * 2 if we are a server and are inside a handshake
00864                     *   (i.e. not just sending a HelloRequest)
00865                     * NB: For servers, the 'new' session may actually be a previously
00866                     * cached session or even the previous session unless
00867                     * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set */
00868    int quiet_shutdown;/* don't send shutdown packets */
00869    int shutdown;  /* we have shut things down, 0x01 sent, 0x02
00870           * for received */
00871    int state;  /* where we are */
00872    int rstate; /* where we are when reading */
00873 
00874    BUF_MEM *init_buf;   /* buffer used during init */
00875    void *init_msg;      /* pointer to handshake message body, set by ssl3_get_message() */
00876    int init_num;     /* amount read/written */
00877    int init_off;     /* amount read/written */
00878 
00879    /* used internally to point at a raw packet */
00880    unsigned char *packet;
00881    unsigned int packet_length;
00882 
00883    struct ssl2_state_st *s2; /* SSLv2 variables */
00884    struct ssl3_state_st *s3; /* SSLv3 variables */
00885    struct dtls1_state_st *d1; /* DTLSv1 variables */
00886 
00887    int read_ahead;      /* Read as many input bytes as possible
00888                          * (for non-blocking reads) */
00889 
00890    /* callback that allows applications to peek at protocol messages */
00891    void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
00892    void *msg_callback_arg;
00893 
00894    int hit;    /* reusing a previous session */
00895 
00896    X509_VERIFY_PARAM *param;
00897 
00898 #if 0
00899    int purpose;      /* Purpose setting */
00900    int trust;     /* Trust setting */
00901 #endif
00902 
00903    /* crypto */
00904    STACK_OF(SSL_CIPHER) *cipher_list;
00905    STACK_OF(SSL_CIPHER) *cipher_list_by_id;
00906 
00907    /* These are the ones being used, the ones in SSL_SESSION are
00908     * the ones to be 'copied' into these ones */
00909 
00910    EVP_CIPHER_CTX *enc_read_ctx;    /* cryptographic state */
00911    const EVP_MD *read_hash;      /* used for mac generation */
00912 #ifndef OPENSSL_NO_COMP
00913    COMP_CTX *expand;       /* uncompress */
00914 #else
00915    char *expand;
00916 #endif
00917 
00918    EVP_CIPHER_CTX *enc_write_ctx;      /* cryptographic state */
00919    const EVP_MD *write_hash;     /* used for mac generation */
00920 #ifndef OPENSSL_NO_COMP
00921    COMP_CTX *compress;        /* compression */
00922 #else
00923    char *compress;
00924 #endif
00925 
00926    /* session info */
00927 
00928    /* client cert? */
00929    /* This is used to hold the server certificate used */
00930    struct cert_st /* CERT */ *cert;
00931 
00932    /* the session_id_context is used to ensure sessions are only reused
00933     * in the appropriate context */
00934    unsigned int sid_ctx_length;
00935    unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
00936 
00937    /* This can also be in the session once a session is established */
00938    SSL_SESSION *session;
00939 
00940    /* Default generate session ID callback. */
00941    GEN_SESSION_CB generate_session_id;
00942 
00943    /* Used in SSL2 and SSL3 */
00944    int verify_mode;  /* 0 don't care about verify failure.
00945              * 1 fail if verify fails */
00946    int (*verify_callback)(int ok,X509_STORE_CTX *ctx); /* fail if callback returns 0 */
00947 
00948    void (*info_callback)(const SSL *ssl,int type,int val); /* optional informational callback */
00949 
00950    int error;     /* error bytes to be written */
00951    int error_code;      /* actual code */
00952 
00953 #ifndef OPENSSL_NO_KRB5
00954    KSSL_CTX *kssl_ctx;     /* Kerberos 5 context */
00955 #endif   /* OPENSSL_NO_KRB5 */
00956 
00957    SSL_CTX *ctx;
00958    /* set this flag to 1 and a sleep(1) is put into all SSL_read()
00959     * and SSL_write() calls, good for nbio debuging :-) */
00960    int debug;
00961 
00962    /* extra application data */
00963    long verify_result;
00964    CRYPTO_EX_DATA ex_data;
00965 
00966    /* for server side, keep the list of CA_dn we can use */
00967    STACK_OF(X509_NAME) *client_CA;
00968 
00969    int references;
00970    unsigned long options; /* protocol behaviour */
00971    unsigned long mode; /* API behaviour */
00972    long max_cert_list;
00973    int first_packet;
00974    int client_version;  /* what was passed, used for
00975              * SSLv3/TLS rollback check */
00976    };
00977 
00978 #ifdef __cplusplus
00979 }
00980 #endif
00981 
00982 #include <openssl/ssl2.h>
00983 #include <openssl/ssl3.h>
00984 #include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */
00985 #include <openssl/dtls1.h> /* Datagram TLS */
00986 #include <openssl/ssl23.h>
00987 
00988 #ifdef  __cplusplus
00989 extern "C" {
00990 #endif
00991 
00992 /* compatibility */
00993 #define SSL_set_app_data(s,arg)     (SSL_set_ex_data(s,0,(char *)arg))
00994 #define SSL_get_app_data(s)      (SSL_get_ex_data(s,0))
00995 #define SSL_SESSION_set_app_data(s,a)  (SSL_SESSION_set_ex_data(s,0,(char *)a))
00996 #define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0))
00997 #define SSL_CTX_get_app_data(ctx)   (SSL_CTX_get_ex_data(ctx,0))
00998 #define SSL_CTX_set_app_data(ctx,arg)  (SSL_CTX_set_ex_data(ctx,0,(char *)arg))
00999 
01000 /* The following are the possible values for ssl->state are are
01001  * used to indicate where we are up to in the SSL connection establishment.
01002  * The macros that follow are about the only things you should need to use
01003  * and even then, only when using non-blocking IO.
01004  * It can also be useful to work out where you were when the connection
01005  * failed */
01006 
01007 #define SSL_ST_CONNECT        0x1000
01008 #define SSL_ST_ACCEPT         0x2000
01009 #define SSL_ST_MASK        0x0FFF
01010 #define SSL_ST_INIT        (SSL_ST_CONNECT|SSL_ST_ACCEPT)
01011 #define SSL_ST_BEFORE         0x4000
01012 #define SSL_ST_OK       0x03
01013 #define SSL_ST_RENEGOTIATE    (0x04|SSL_ST_INIT)
01014 
01015 #define SSL_CB_LOOP        0x01
01016 #define SSL_CB_EXIT        0x02
01017 #define SSL_CB_READ        0x04
01018 #define SSL_CB_WRITE       0x08
01019 #define SSL_CB_ALERT       0x4000 /* used in callback */
01020 #define SSL_CB_READ_ALERT     (SSL_CB_ALERT|SSL_CB_READ)
01021 #define SSL_CB_WRITE_ALERT    (SSL_CB_ALERT|SSL_CB_WRITE)
01022 #define SSL_CB_ACCEPT_LOOP    (SSL_ST_ACCEPT|SSL_CB_LOOP)
01023 #define SSL_CB_ACCEPT_EXIT    (SSL_ST_ACCEPT|SSL_CB_EXIT)
01024 #define SSL_CB_CONNECT_LOOP      (SSL_ST_CONNECT|SSL_CB_LOOP)
01025 #define SSL_CB_CONNECT_EXIT      (SSL_ST_CONNECT|SSL_CB_EXIT)
01026 #define SSL_CB_HANDSHAKE_START      0x10
01027 #define SSL_CB_HANDSHAKE_DONE    0x20
01028 
01029 /* Is the SSL_connection established? */
01030 #define SSL_get_state(a)      SSL_state(a)
01031 #define SSL_is_init_finished(a)     (SSL_state(a) == SSL_ST_OK)
01032 #define SSL_in_init(a)        (SSL_state(a)&SSL_ST_INIT)
01033 #define SSL_in_before(a)      (SSL_state(a)&SSL_ST_BEFORE)
01034 #define SSL_in_connect_init(a)      (SSL_state(a)&SSL_ST_CONNECT)
01035 #define SSL_in_accept_init(a)    (SSL_state(a)&SSL_ST_ACCEPT)
01036 
01037 /* The following 2 states are kept in ssl->rstate when reads fail,
01038  * you should not need these */
01039 #define SSL_ST_READ_HEADER       0xF0
01040 #define SSL_ST_READ_BODY         0xF1
01041 #define SSL_ST_READ_DONE         0xF2
01042 
01043 /* Obtain latest Finished message
01044  *   -- that we sent (SSL_get_finished)
01045  *   -- that we expected from peer (SSL_get_peer_finished).
01046  * Returns length (0 == no Finished so far), copies up to 'count' bytes. */
01047 size_t SSL_get_finished(const SSL *s, void *buf, size_t count);
01048 size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);
01049 
01050 /* use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options
01051  * are 'ored' with SSL_VERIFY_PEER if they are desired */
01052 #define SSL_VERIFY_NONE       0x00
01053 #define SSL_VERIFY_PEER       0x01
01054 #define SSL_VERIFY_FAIL_IF_NO_PEER_CERT   0x02
01055 #define SSL_VERIFY_CLIENT_ONCE      0x04
01056 
01057 #define OpenSSL_add_ssl_algorithms()   SSL_library_init()
01058 #define SSLeay_add_ssl_algorithms() SSL_library_init()
01059 
01060 /* this is for backward compatibility */
01061 #if 0 /* NEW_SSLEAY */
01062 #define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c)
01063 #define SSL_set_pref_cipher(c,n) SSL_set_cipher_list(c,n)
01064 #define SSL_add_session(a,b)            SSL_CTX_add_session((a),(b))
01065 #define SSL_remove_session(a,b)     SSL_CTX_remove_session((a),(b))
01066 #define SSL_flush_sessions(a,b)     SSL_CTX_flush_sessions((a),(b))
01067 #endif
01068 /* More backward compatibility */
01069 #define SSL_get_cipher(s) \
01070       SSL_CIPHER_get_name(SSL_get_current_cipher(s))
01071 #define SSL_get_cipher_bits(s,np) \
01072       SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
01073 #define SSL_get_cipher_version(s) \
01074       SSL_CIPHER_get_version(SSL_get_current_cipher(s))
01075 #define SSL_get_cipher_name(s) \
01076       SSL_CIPHER_get_name(SSL_get_current_cipher(s))
01077 #define SSL_get_time(a)    SSL_SESSION_get_time(a)
01078 #define SSL_set_time(a,b)  SSL_SESSION_set_time((a),(b))
01079 #define SSL_get_timeout(a) SSL_SESSION_get_timeout(a)
01080 #define SSL_set_timeout(a,b)  SSL_SESSION_set_timeout((a),(b))
01081 
01082 #if 1 /*SSLEAY_MACROS*/
01083 #define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
01084 #define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)
01085 #define PEM_read_SSL_SESSION(fp,x,cb,u) (SSL_SESSION *)PEM_ASN1_read( \
01086    (char *(*)())d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,fp,(char **)x,cb,u)
01087 #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)
01088 #define PEM_write_SSL_SESSION(fp,x) \
01089    PEM_ASN1_write((int (*)())i2d_SSL_SESSION, \
01090       PEM_STRING_SSL_SESSION,fp, (char *)x, NULL,NULL,0,NULL,NULL)
01091 #define PEM_write_bio_SSL_SESSION(bp,x) \
01092    PEM_ASN1_write_bio_of(SSL_SESSION,i2d_SSL_SESSION,PEM_STRING_SSL_SESSION,bp,x,NULL,NULL,0,NULL,NULL)
01093 #endif
01094 
01095 #define SSL_AD_REASON_OFFSET     1000
01096 /* These alert types are for SSLv3 and TLSv1 */
01097 #define SSL_AD_CLOSE_NOTIFY      SSL3_AD_CLOSE_NOTIFY
01098 #define SSL_AD_UNEXPECTED_MESSAGE   SSL3_AD_UNEXPECTED_MESSAGE /* fatal */
01099 #define SSL_AD_BAD_RECORD_MAC    SSL3_AD_BAD_RECORD_MAC     /* fatal */
01100 #define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED
01101 #define SSL_AD_RECORD_OVERFLOW      TLS1_AD_RECORD_OVERFLOW
01102 #define SSL_AD_DECOMPRESSION_FAILURE   SSL3_AD_DECOMPRESSION_FAILURE/* fatal */
01103 #define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE/* fatal */
01104 #define SSL_AD_NO_CERTIFICATE    SSL3_AD_NO_CERTIFICATE /* Not for TLS */
01105 #define SSL_AD_BAD_CERTIFICATE      SSL3_AD_BAD_CERTIFICATE
01106 #define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE
01107 #define SSL_AD_CERTIFICATE_REVOKED  SSL3_AD_CERTIFICATE_REVOKED
01108 #define SSL_AD_CERTIFICATE_EXPIRED  SSL3_AD_CERTIFICATE_EXPIRED
01109 #define SSL_AD_CERTIFICATE_UNKNOWN  SSL3_AD_CERTIFICATE_UNKNOWN
01110 #define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER   /* fatal */
01111 #define SSL_AD_UNKNOWN_CA     TLS1_AD_UNKNOWN_CA   /* fatal */
01112 #define SSL_AD_ACCESS_DENIED     TLS1_AD_ACCESS_DENIED   /* fatal */
01113 #define SSL_AD_DECODE_ERROR      TLS1_AD_DECODE_ERROR /* fatal */
01114 #define SSL_AD_DECRYPT_ERROR     TLS1_AD_DECRYPT_ERROR
01115 #define SSL_AD_EXPORT_RESTRICTION   TLS1_AD_EXPORT_RESTRICTION/* fatal */
01116 #define SSL_AD_PROTOCOL_VERSION     TLS1_AD_PROTOCOL_VERSION /* fatal */
01117 #define SSL_AD_INSUFFICIENT_SECURITY   TLS1_AD_INSUFFICIENT_SECURITY/* fatal */
01118 #define SSL_AD_INTERNAL_ERROR    TLS1_AD_INTERNAL_ERROR  /* fatal */
01119 #define SSL_AD_USER_CANCELLED    TLS1_AD_USER_CANCELLED
01120 #define SSL_AD_NO_RENEGOTIATION     TLS1_AD_NO_RENEGOTIATION
01121 
01122 #define SSL_ERROR_NONE        0
01123 #define SSL_ERROR_SSL         1
01124 #define SSL_ERROR_WANT_READ      2
01125 #define SSL_ERROR_WANT_WRITE     3
01126 #define SSL_ERROR_WANT_X509_LOOKUP  4
01127 #define SSL_ERROR_SYSCALL     5 /* look at error stack/return value/errno */
01128 #define SSL_ERROR_ZERO_RETURN    6
01129 #define SSL_ERROR_WANT_CONNECT      7
01130 #define SSL_ERROR_WANT_ACCEPT    8
01131 
01132 #define SSL_CTRL_NEED_TMP_RSA       1
01133 #define SSL_CTRL_SET_TMP_RSA        2
01134 #define SSL_CTRL_SET_TMP_DH         3
01135 #define SSL_CTRL_SET_TMP_ECDH       4
01136 #define SSL_CTRL_SET_TMP_RSA_CB        5
01137 #define SSL_CTRL_SET_TMP_DH_CB         6
01138 #define SSL_CTRL_SET_TMP_ECDH_CB    7
01139 
01140 #define SSL_CTRL_GET_SESSION_REUSED    8
01141 #define SSL_CTRL_GET_CLIENT_CERT_REQUEST  9
01142 #define SSL_CTRL_GET_NUM_RENEGOTIATIONS      10
01143 #define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11
01144 #define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12
01145 #define SSL_CTRL_GET_FLAGS       13
01146 #define SSL_CTRL_EXTRA_CHAIN_CERT      14
01147 
01148 #define SSL_CTRL_SET_MSG_CALLBACK               15
01149 #define SSL_CTRL_SET_MSG_CALLBACK_ARG           16
01150 
01151 /* only applies to datagram connections */
01152 #define SSL_CTRL_SET_MTU                17
01153 /* Stats */
01154 #define SSL_CTRL_SESS_NUMBER        20
01155 #define SSL_CTRL_SESS_CONNECT       21
01156 #define SSL_CTRL_SESS_CONNECT_GOOD     22
01157 #define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23
01158 #define SSL_CTRL_SESS_ACCEPT        24
01159 #define SSL_CTRL_SESS_ACCEPT_GOOD      25
01160 #define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE  26
01161 #define SSL_CTRL_SESS_HIT        27
01162 #define SSL_CTRL_SESS_CB_HIT        28
01163 #define SSL_CTRL_SESS_MISSES        29
01164 #define SSL_CTRL_SESS_TIMEOUTS         30
01165 #define SSL_CTRL_SESS_CACHE_FULL    31
01166 #define SSL_CTRL_OPTIONS         32
01167 #define SSL_CTRL_MODE            33
01168 
01169 #define SSL_CTRL_GET_READ_AHEAD        40
01170 #define SSL_CTRL_SET_READ_AHEAD        41
01171 #define SSL_CTRL_SET_SESS_CACHE_SIZE      42
01172 #define SSL_CTRL_GET_SESS_CACHE_SIZE      43
01173 #define SSL_CTRL_SET_SESS_CACHE_MODE      44
01174 #define SSL_CTRL_GET_SESS_CACHE_MODE      45
01175 
01176 #define SSL_CTRL_GET_MAX_CERT_LIST     50
01177 #define SSL_CTRL_SET_MAX_CERT_LIST     51
01178 
01179 #define SSL_session_reused(ssl) \
01180    SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)
01181 #define SSL_num_renegotiations(ssl) \
01182    SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)
01183 #define SSL_clear_num_renegotiations(ssl) \
01184    SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)
01185 #define SSL_total_renegotiations(ssl) \
01186    SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)
01187 
01188 #define SSL_CTX_need_tmp_RSA(ctx) \
01189    SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)
01190 #define SSL_CTX_set_tmp_rsa(ctx,rsa) \
01191    SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)
01192 #define SSL_CTX_set_tmp_dh(ctx,dh) \
01193    SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh)
01194 #define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
01195    SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
01196 
01197 #define SSL_need_tmp_RSA(ssl) \
01198    SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL)
01199 #define SSL_set_tmp_rsa(ssl,rsa) \
01200    SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)
01201 #define SSL_set_tmp_dh(ssl,dh) \
01202    SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh)
01203 #define SSL_set_tmp_ecdh(ssl,ecdh) \
01204    SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
01205 
01206 #define SSL_CTX_add_extra_chain_cert(ctx,x509) \
01207    SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
01208 
01209 #ifndef OPENSSL_NO_BIO
01210 BIO_METHOD *BIO_f_ssl(void);
01211 BIO *BIO_new_ssl(SSL_CTX *ctx,int client);
01212 BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
01213 BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
01214 int BIO_ssl_copy_session_id(BIO *to,BIO *from);
01215 void BIO_ssl_shutdown(BIO *ssl_bio);
01216 
01217 #endif
01218 
01219 int   SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);
01220 SSL_CTX *SSL_CTX_new(SSL_METHOD *meth);
01221 void  SSL_CTX_free(SSL_CTX *);
01222 long SSL_CTX_set_timeout(SSL_CTX *ctx,long t);
01223 long SSL_CTX_get_timeout(const SSL_CTX *ctx);
01224 X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *);
01225 void SSL_CTX_set_cert_store(SSL_CTX *,X509_STORE *);
01226 int SSL_want(const SSL *s);
01227 int   SSL_clear(SSL *s);
01228 
01229 void  SSL_CTX_flush_sessions(SSL_CTX *ctx,long tm);
01230 
01231 SSL_CIPHER *SSL_get_current_cipher(const SSL *s);
01232 int   SSL_CIPHER_get_bits(const SSL_CIPHER *c,int *alg_bits);
01233 char *   SSL_CIPHER_get_version(const SSL_CIPHER *c);
01234 const char *   SSL_CIPHER_get_name(const SSL_CIPHER *c);
01235 
01236 int   SSL_get_fd(const SSL *s);
01237 int   SSL_get_rfd(const SSL *s);
01238 int   SSL_get_wfd(const SSL *s);
01239 const char  * SSL_get_cipher_list(const SSL *s,int n);
01240 char *   SSL_get_shared_ciphers(const SSL *s, char *buf, int len);
01241 int   SSL_get_read_ahead(const SSL * s);
01242 int   SSL_pending(const SSL *s);
01243 #ifndef OPENSSL_NO_SOCK
01244 int   SSL_set_fd(SSL *s, int fd);
01245 int   SSL_set_rfd(SSL *s, int fd);
01246 int   SSL_set_wfd(SSL *s, int fd);
01247 #endif
01248 #ifndef OPENSSL_NO_BIO
01249 void  SSL_set_bio(SSL *s, BIO *rbio,BIO *wbio);
01250 BIO * SSL_get_rbio(const SSL *s);
01251 BIO * SSL_get_wbio(const SSL *s);
01252 #endif
01253 int   SSL_set_cipher_list(SSL *s, const char *str);
01254 void  SSL_set_read_ahead(SSL *s, int yes);
01255 int   SSL_get_verify_mode(const SSL *s);
01256 int   SSL_get_verify_depth(const SSL *s);
01257 int   (*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *);
01258 void  SSL_set_verify(SSL *s, int mode,
01259              int (*callback)(int ok,X509_STORE_CTX *ctx));
01260 void  SSL_set_verify_depth(SSL *s, int depth);
01261 #ifndef OPENSSL_NO_RSA
01262 int   SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
01263 #endif
01264 int   SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);
01265 int   SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
01266 int   SSL_use_PrivateKey_ASN1(int pk,SSL *ssl, const unsigned char *d, long len);
01267 int   SSL_use_certificate(SSL *ssl, X509 *x);
01268 int   SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);
01269 
01270 #ifndef OPENSSL_NO_STDIO
01271 int   SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
01272 int   SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
01273 int   SSL_use_certificate_file(SSL *ssl, const char *file, int type);
01274 int   SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);
01275 int   SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
01276 int   SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
01277 int   SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); /* PEM type */
01278 STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);
01279 int   SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
01280                    const char *file);
01281 #ifndef OPENSSL_SYS_VMS
01282 #ifndef OPENSSL_SYS_MACINTOSH_CLASSIC /* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */
01283 int   SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
01284                   const char *dir);
01285 #endif
01286 #endif
01287 
01288 #endif
01289 
01290 void  SSL_load_error_strings(void );
01291 const char *SSL_state_string(const SSL *s);
01292 const char *SSL_rstate_string(const SSL *s);
01293 const char *SSL_state_string_long(const SSL *s);
01294 const char *SSL_rstate_string_long(const SSL *s);
01295 long  SSL_SESSION_get_time(const SSL_SESSION *s);
01296 long  SSL_SESSION_set_time(SSL_SESSION *s, long t);
01297 long  SSL_SESSION_get_timeout(const SSL_SESSION *s);
01298 long  SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
01299 void  SSL_copy_session_id(SSL *to,const SSL *from);
01300 
01301 SSL_SESSION *SSL_SESSION_new(void);
01302 unsigned long SSL_SESSION_hash(const SSL_SESSION *a);
01303 int   SSL_SESSION_cmp(const SSL_SESSION *a,const SSL_SESSION *b);
01304 const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len);
01305 #ifndef OPENSSL_NO_FP_API
01306 int   SSL_SESSION_print_fp(FILE *fp,const SSL_SESSION *ses);
01307 #endif
01308 #ifndef OPENSSL_NO_BIO
01309 int   SSL_SESSION_print(BIO *fp,const SSL_SESSION *ses);
01310 #endif
01311 void  SSL_SESSION_free(SSL_SESSION *ses);
01312 int   i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp);
01313 int   SSL_set_session(SSL *to, SSL_SESSION *session);
01314 int   SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);
01315 int   SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c);
01316 int   SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB);
01317 int   SSL_set_generate_session_id(SSL *, GEN_SESSION_CB);
01318 int   SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
01319                unsigned int id_len);
01320 SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a,const unsigned char **pp,
01321               long length);
01322 
01323 #ifdef HEADER_X509_H
01324 X509 *   SSL_get_peer_certificate(const SSL *s);
01325 #endif
01326 
01327 STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s);
01328 
01329 int SSL_CTX_get_verify_mode(const SSL_CTX *ctx);
01330 int SSL_CTX_get_verify_depth(const SSL_CTX *ctx);
01331 int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *);
01332 void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,
01333          int (*callback)(int, X509_STORE_CTX *));
01334 void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth);
01335 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg);
01336 #ifndef OPENSSL_NO_RSA
01337 int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
01338 #endif
01339 int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len);
01340 int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
01341 int SSL_CTX_use_PrivateKey_ASN1(int pk,SSL_CTX *ctx,
01342    const unsigned char *d, long len);
01343 int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
01344 int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d);
01345 
01346 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);
01347 void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);
01348 
01349 int SSL_CTX_check_private_key(const SSL_CTX *ctx);
01350 int SSL_check_private_key(const SSL *ctx);
01351 
01352 int   SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx,
01353                    unsigned int sid_ctx_len);
01354 
01355 SSL * SSL_new(SSL_CTX *ctx);
01356 int   SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx,
01357                unsigned int sid_ctx_len);
01358 
01359 int SSL_CTX_set_purpose(SSL_CTX *s, int purpose);
01360 int SSL_set_purpose(SSL *s, int purpose);
01361 int SSL_CTX_set_trust(SSL_CTX *s, int trust);
01362 int SSL_set_trust(SSL *s, int trust);
01363 
01364 void  SSL_free(SSL *ssl);
01365 int   SSL_accept(SSL *ssl);
01366 int   SSL_connect(SSL *ssl);
01367 int   SSL_read(SSL *ssl,void *buf,int num);
01368 int   SSL_peek(SSL *ssl,void *buf,int num);
01369 int   SSL_write(SSL *ssl,const void *buf,int num);
01370 long  SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg);
01371 long  SSL_callback_ctrl(SSL *, int, void (*)(void));
01372 long  SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, void *parg);
01373 long  SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));
01374 
01375 int   SSL_get_error(const SSL *s,int ret_code);
01376 const char *SSL_get_version(const SSL *s);
01377 
01378 /* This sets the 'default' SSL version that SSL_new() will create */
01379 int SSL_CTX_set_ssl_version(SSL_CTX *ctx,SSL_METHOD *meth);
01380 
01381 SSL_METHOD *SSLv2_method(void);     /* SSLv2 */
01382 SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */
01383 SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */
01384 
01385 SSL_METHOD *SSLv3_method(void);     /* SSLv3 */
01386 SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */
01387 SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */
01388 
01389 SSL_METHOD *SSLv23_method(void); /* SSLv3 but can rollback to v2 */
01390 SSL_METHOD *SSLv23_server_method(void);   /* SSLv3 but can rollback to v2 */
01391 SSL_METHOD *SSLv23_client_method(void);   /* SSLv3 but can rollback to v2 */
01392 
01393 SSL_METHOD *TLSv1_method(void);     /* TLSv1.0 */
01394 SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */
01395 SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */
01396 
01397 SSL_METHOD *DTLSv1_method(void);    /* DTLSv1.0 */
01398 SSL_METHOD *DTLSv1_server_method(void);   /* DTLSv1.0 */
01399 SSL_METHOD *DTLSv1_client_method(void);   /* DTLSv1.0 */
01400 
01401 STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);
01402 
01403 int SSL_do_handshake(SSL *s);
01404 int SSL_renegotiate(SSL *s);
01405 int SSL_renegotiate_pending(SSL *s);
01406 int SSL_shutdown(SSL *s);
01407 
01408 SSL_METHOD *SSL_get_ssl_method(SSL *s);
01409 int SSL_set_ssl_method(SSL *s,SSL_METHOD *method);
01410 const char *SSL_alert_type_string_long(int value);
01411 const char *SSL_alert_type_string(int value);
01412 const char *SSL_alert_desc_string_long(int value);
01413 const char *SSL_alert_desc_string(int value);
01414 
01415 void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
01416 void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
01417 STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);
01418 STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s);
01419 int SSL_add_client_CA(SSL *ssl,X509 *x);
01420 int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x);
01421 
01422 void SSL_set_connect_state(SSL *s);
01423 void SSL_set_accept_state(SSL *s);
01424 
01425 long SSL_get_default_timeout(const SSL *s);
01426 
01427 int SSL_library_init(void );
01428 
01429 char *SSL_CIPHER_description(SSL_CIPHER *,char *buf,int size);
01430 STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk);
01431 
01432 SSL *SSL_dup(SSL *ssl);
01433 
01434 X509 *SSL_get_certificate(const SSL *ssl);
01435 /* EVP_PKEY */ struct evp_pkey_st *SSL_get_privatekey(SSL *ssl);
01436 
01437 void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode);
01438 int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
01439 void SSL_set_quiet_shutdown(SSL *ssl,int mode);
01440 int SSL_get_quiet_shutdown(const SSL *ssl);
01441 void SSL_set_shutdown(SSL *ssl,int mode);
01442 int SSL_get_shutdown(const SSL *ssl);
01443 int SSL_version(const SSL *ssl);
01444 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
01445 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
01446    const char *CApath);
01447 #define SSL_get0_session SSL_get_session /* just peek at pointer */
01448 SSL_SESSION *SSL_get_session(const SSL *ssl);
01449 SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */
01450 SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
01451 void SSL_set_info_callback(SSL *ssl,
01452             void (*cb)(const SSL *ssl,int type,int val));
01453 void (*SSL_get_info_callback(const SSL *ssl))(const SSL *ssl,int type,int val);
01454 int SSL_state(const SSL *ssl);
01455 
01456 void SSL_set_verify_result(SSL *ssl,long v);
01457 long SSL_get_verify_result(const SSL *ssl);
01458 
01459 int SSL_set_ex_data(SSL *ssl,int idx,void *data);
01460 void *SSL_get_ex_data(const SSL *ssl,int idx);
01461 int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
01462    CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
01463 
01464 int SSL_SESSION_set_ex_data(SSL_SESSION *ss,int idx,void *data);
01465 void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss,int idx);
01466 int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
01467    CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
01468 
01469 int SSL_CTX_set_ex_data(SSL_CTX *ssl,int idx,void *data);
01470 void *SSL_CTX_get_ex_data(const SSL_CTX *ssl,int idx);
01471 int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
01472    CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
01473 
01474 int SSL_get_ex_data_X509_STORE_CTX_idx(void );
01475 
01476 #define SSL_CTX_sess_set_cache_size(ctx,t) \
01477    SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL)
01478 #define SSL_CTX_sess_get_cache_size(ctx) \
01479    SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL)
01480 #define SSL_CTX_set_session_cache_mode(ctx,m) \
01481    SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)
01482 #define SSL_CTX_get_session_cache_mode(ctx) \
01483    SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL)
01484 
01485 #define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx)
01486 #define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m)
01487 #define SSL_CTX_get_read_ahead(ctx) \
01488    SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)
01489 #define SSL_CTX_set_read_ahead(ctx,m) \
01490    SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)
01491 #define SSL_CTX_get_max_cert_list(ctx) \
01492    SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
01493 #define SSL_CTX_set_max_cert_list(ctx,m) \
01494    SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
01495 #define SSL_get_max_cert_list(ssl) \
01496    SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
01497 #define SSL_set_max_cert_list(ssl,m) \
01498    SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
01499 
01500      /* NB: the keylength is only applicable when is_export is true */
01501 #ifndef OPENSSL_NO_RSA
01502 void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,
01503               RSA *(*cb)(SSL *ssl,int is_export,
01504                     int keylength));
01505 
01506 void SSL_set_tmp_rsa_callback(SSL *ssl,
01507               RSA *(*cb)(SSL *ssl,int is_export,
01508                     int keylength));
01509 #endif
01510 #ifndef OPENSSL_NO_DH
01511 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
01512              DH *(*dh)(SSL *ssl,int is_export,
01513                   int keylength));
01514 void SSL_set_tmp_dh_callback(SSL *ssl,
01515              DH *(*dh)(SSL *ssl,int is_export,
01516                   int keylength));
01517 #endif
01518 #ifndef OPENSSL_NO_ECDH
01519 void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,
01520              EC_KEY *(*ecdh)(SSL *ssl,int is_export,
01521                   int keylength));
01522 void SSL_set_tmp_ecdh_callback(SSL *ssl,
01523              EC_KEY *(*ecdh)(SSL *ssl,int is_export,
01524                   int keylength));
01525 #endif
01526 
01527 #ifndef OPENSSL_NO_COMP
01528 const COMP_METHOD *SSL_get_current_compression(SSL *s);
01529 const COMP_METHOD *SSL_get_current_expansion(SSL *s);
01530 const char *SSL_COMP_get_name(const COMP_METHOD *comp);
01531 STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
01532 int SSL_COMP_add_compression_method(int id,COMP_METHOD *cm);
01533 #else
01534 const void *SSL_get_current_compression(SSL *s);
01535 const void *SSL_get_current_expansion(SSL *s);
01536 const char *SSL_COMP_get_name(const void *comp);
01537 void *SSL_COMP_get_compression_methods(void);
01538 int SSL_COMP_add_compression_method(int id,void *cm);
01539 #endif
01540 
01541 /* BEGIN ERROR CODES */
01542 /* The following lines are auto generated by the script mkerr.pl. Any changes
01543  * made after this point may be overwritten when the script is next run.
01544  */
01545 void ERR_load_SSL_strings(void);
01546 
01547 /* Error codes for the SSL functions. */
01548 
01549 /* Function codes. */
01550 #define SSL_F_CLIENT_CERTIFICATE        100
01551 #define SSL_F_CLIENT_FINISHED           167
01552 #define SSL_F_CLIENT_HELLO           101
01553 #define SSL_F_CLIENT_MASTER_KEY            102
01554 #define SSL_F_D2I_SSL_SESSION           103
01555 #define SSL_F_DO_DTLS1_WRITE            245
01556 #define SSL_F_DO_SSL3_WRITE             104
01557 #define SSL_F_DTLS1_ACCEPT           246
01558 #define SSL_F_DTLS1_BUFFER_RECORD          247
01559 #define SSL_F_DTLS1_CLIENT_HELLO        248
01560 #define SSL_F_DTLS1_CONNECT             249
01561 #define SSL_F_DTLS1_ENC              250
01562 #define SSL_F_DTLS1_GET_HELLO_VERIFY          251
01563 #define SSL_F_DTLS1_GET_MESSAGE            252
01564 #define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT      253
01565 #define SSL_F_DTLS1_GET_RECORD             254
01566 #define SSL_F_DTLS1_OUTPUT_CERT_CHAIN         255
01567 #define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE      256
01568 #define SSL_F_DTLS1_PROCESS_RECORD         257
01569 #define SSL_F_DTLS1_READ_BYTES             258
01570 #define SSL_F_DTLS1_READ_FAILED            259
01571 #define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST     260
01572 #define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE      261
01573 #define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE     262
01574 #define SSL_F_DTLS1_SEND_CLIENT_VERIFY        263
01575 #define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST       264
01576 #define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE      265
01577 #define SSL_F_DTLS1_SEND_SERVER_HELLO         266
01578 #define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE     267
01579 #define SSL_F_DTLS1_WRITE_APP_DATA_BYTES      268
01580 #define SSL_F_GET_CLIENT_FINISHED          105
01581 #define SSL_F_GET_CLIENT_HELLO             106
01582 #define SSL_F_GET_CLIENT_MASTER_KEY        107
01583 #define SSL_F_GET_SERVER_FINISHED          108
01584 #define SSL_F_GET_SERVER_HELLO             109
01585 #define SSL_F_GET_SERVER_VERIFY            110
01586 #define SSL_F_I2D_SSL_SESSION           111
01587 #define SSL_F_READ_N              112
01588 #define SSL_F_REQUEST_CERTIFICATE          113
01589 #define SSL_F_SERVER_FINISH             239
01590 #define SSL_F_SERVER_HELLO           114
01591 #define SSL_F_SERVER_VERIFY             240
01592 #define SSL_F_SSL23_ACCEPT           115
01593 #define SSL_F_SSL23_CLIENT_HELLO        116
01594 #define SSL_F_SSL23_CONNECT             117
01595 #define SSL_F_SSL23_GET_CLIENT_HELLO          118
01596 #define SSL_F_SSL23_GET_SERVER_HELLO          119
01597 #define SSL_F_SSL23_PEEK             237
01598 #define SSL_F_SSL23_READ             120
01599 #define SSL_F_SSL23_WRITE            121
01600 #define SSL_F_SSL2_ACCEPT            122
01601 #define SSL_F_SSL2_CONNECT           123
01602 #define SSL_F_SSL2_ENC_INIT             124
01603 #define SSL_F_SSL2_GENERATE_KEY_MATERIAL      241
01604 #define SSL_F_SSL2_PEEK              234
01605 #define SSL_F_SSL2_READ              125
01606 #define SSL_F_SSL2_READ_INTERNAL        236
01607 #define SSL_F_SSL2_SET_CERTIFICATE         126
01608 #define SSL_F_SSL2_WRITE             127
01609 #define SSL_F_SSL3_ACCEPT            128
01610 #define SSL_F_SSL3_CALLBACK_CTRL        233
01611 #define SSL_F_SSL3_CHANGE_CIPHER_STATE        129
01612 #define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM      130
01613 #define SSL_F_SSL3_CLIENT_HELLO            131
01614 #define SSL_F_SSL3_CONNECT           132
01615 #define SSL_F_SSL3_CTRL              213
01616 #define SSL_F_SSL3_CTX_CTRL             133
01617 #define SSL_F_SSL3_ENC               134
01618 #define SSL_F_SSL3_GENERATE_KEY_BLOCK         238
01619 #define SSL_F_SSL3_GET_CERTIFICATE_REQUEST       135
01620 #define SSL_F_SSL3_GET_CERT_VERIFY         136
01621 #define SSL_F_SSL3_GET_CLIENT_CERTIFICATE     137
01622 #define SSL_F_SSL3_GET_CLIENT_HELLO        138
01623 #define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE       139
01624 #define SSL_F_SSL3_GET_FINISHED            140
01625 #define SSL_F_SSL3_GET_KEY_EXCHANGE        141
01626 #define SSL_F_SSL3_GET_MESSAGE             142
01627 #define SSL_F_SSL3_GET_RECORD           143
01628 #define SSL_F_SSL3_GET_SERVER_CERTIFICATE     144
01629 #define SSL_F_SSL3_GET_SERVER_DONE         145
01630 #define SSL_F_SSL3_GET_SERVER_HELLO        146
01631 #define SSL_F_SSL3_OUTPUT_CERT_CHAIN          147
01632 #define SSL_F_SSL3_PEEK              235
01633 #define SSL_F_SSL3_READ_BYTES           148
01634 #define SSL_F_SSL3_READ_N            149
01635 #define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST      150
01636 #define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE       151
01637 #define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE      152
01638 #define SSL_F_SSL3_SEND_CLIENT_VERIFY         153
01639 #define SSL_F_SSL3_SEND_SERVER_CERTIFICATE       154
01640 #define SSL_F_SSL3_SEND_SERVER_HELLO          242
01641 #define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE      155
01642 #define SSL_F_SSL3_SETUP_BUFFERS        156
01643 #define SSL_F_SSL3_SETUP_KEY_BLOCK         157
01644 #define SSL_F_SSL3_WRITE_BYTES             158
01645 #define SSL_F_SSL3_WRITE_PENDING        159
01646 #define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK    215
01647 #define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK   216
01648 #define SSL_F_SSL_BAD_METHOD            160
01649 #define SSL_F_SSL_BYTES_TO_CIPHER_LIST        161
01650 #define SSL_F_SSL_CERT_DUP           221
01651 #define SSL_F_SSL_CERT_INST             222
01652 #define SSL_F_SSL_CERT_INSTANTIATE         214
01653 #define SSL_F_SSL_CERT_NEW           162
01654 #define SSL_F_SSL_CHECK_PRIVATE_KEY        163
01655 #define SSL_F_SSL_CIPHER_PROCESS_RULESTR      230
01656 #define SSL_F_SSL_CIPHER_STRENGTH_SORT        231
01657 #define SSL_F_SSL_CLEAR              164
01658 #define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD       165
01659 #define SSL_F_SSL_CREATE_CIPHER_LIST          166
01660 #define SSL_F_SSL_CTRL               232
01661 #define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY          168
01662 #define SSL_F_SSL_CTX_NEW            169
01663 #define SSL_F_SSL_CTX_SET_CIPHER_LIST         269
01664 #define SSL_F_SSL_CTX_SET_PURPOSE          226
01665 #define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT     219
01666 #define SSL_F_SSL_CTX_SET_SSL_VERSION         170
01667 #define SSL_F_SSL_CTX_SET_TRUST            229
01668 #define SSL_F_SSL_CTX_USE_CERTIFICATE         171
01669 #define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1       172
01670 #define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE    220
01671 #define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE       173
01672 #define SSL_F_SSL_CTX_USE_PRIVATEKEY          174
01673 #define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1     175
01674 #define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE     176
01675 #define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY          177
01676 #define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1     178
01677 #define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE     179
01678 #define SSL_F_SSL_DO_HANDSHAKE             180
01679 #define SSL_F_SSL_GET_NEW_SESSION          181
01680 #define SSL_F_SSL_GET_PREV_SESSION         217
01681 #define SSL_F_SSL_GET_SERVER_SEND_CERT        182
01682 #define SSL_F_SSL_GET_SIGN_PKEY            183
01683 #define SSL_F_SSL_INIT_WBIO_BUFFER         184
01684 #define SSL_F_SSL_LOAD_CLIENT_CA_FILE         185
01685 #define SSL_F_SSL_NEW                186
01686 #define SSL_F_SSL_PEEK               270
01687 #define SSL_F_SSL_READ               223
01688 #define SSL_F_SSL_RSA_PRIVATE_DECRYPT         187
01689 #define SSL_F_SSL_RSA_PUBLIC_ENCRYPT          188
01690 #define SSL_F_SSL_SESSION_NEW           189
01691 #define SSL_F_SSL_SESSION_PRINT_FP         190
01692 #define SSL_F_SSL_SESS_CERT_NEW            225
01693 #define SSL_F_SSL_SET_CERT           191
01694 #define SSL_F_SSL_SET_CIPHER_LIST          271
01695 #define SSL_F_SSL_SET_FD             192
01696 #define SSL_F_SSL_SET_PKEY           193
01697 #define SSL_F_SSL_SET_PURPOSE           227
01698 #define SSL_F_SSL_SET_RFD            194
01699 #define SSL_F_SSL_SET_SESSION           195
01700 #define SSL_F_SSL_SET_SESSION_ID_CONTEXT      218
01701 #define SSL_F_SSL_SET_TRUST             228
01702 #define SSL_F_SSL_SET_WFD            196
01703 #define SSL_F_SSL_SHUTDOWN           224
01704 #define SSL_F_SSL_UNDEFINED_CONST_FUNCTION       243
01705 #define SSL_F_SSL_UNDEFINED_FUNCTION          197
01706 #define SSL_F_SSL_UNDEFINED_VOID_FUNCTION     244
01707 #define SSL_F_SSL_USE_CERTIFICATE          198
01708 #define SSL_F_SSL_USE_CERTIFICATE_ASN1        199
01709 #define SSL_F_SSL_USE_CERTIFICATE_FILE        200
01710 #define SSL_F_SSL_USE_PRIVATEKEY        201
01711 #define SSL_F_SSL_USE_PRIVATEKEY_ASN1         202
01712 #define SSL_F_SSL_USE_PRIVATEKEY_FILE         203
01713 #define SSL_F_SSL_USE_RSAPRIVATEKEY        204
01714 #define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1      205
01715 #define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE      206
01716 #define SSL_F_SSL_VERIFY_CERT_CHAIN        207
01717 #define SSL_F_SSL_WRITE              208
01718 #define SSL_F_TLS1_CHANGE_CIPHER_STATE        209
01719 #define SSL_F_TLS1_ENC               210
01720 #define SSL_F_TLS1_SETUP_KEY_BLOCK         211
01721 #define SSL_F_WRITE_PENDING             212
01722 
01723 /* Reason codes. */
01724 #define SSL_R_APP_DATA_IN_HANDSHAKE        100
01725 #define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272
01726 #define SSL_R_BAD_ALERT_RECORD             101
01727 #define SSL_R_BAD_AUTHENTICATION_TYPE         102
01728 #define SSL_R_BAD_CHANGE_CIPHER_SPEC          103
01729 #define SSL_R_BAD_CHECKSUM           104
01730 #define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK      106
01731 #define SSL_R_BAD_DECOMPRESSION            107
01732 #define SSL_R_BAD_DH_G_LENGTH           108
01733 #define SSL_R_BAD_DH_PUB_KEY_LENGTH        109
01734 #define SSL_R_BAD_DH_P_LENGTH           110
01735 #define SSL_R_BAD_DIGEST_LENGTH            111
01736 #define SSL_R_BAD_DSA_SIGNATURE            112
01737 #define SSL_R_BAD_ECC_CERT           304
01738 #define SSL_R_BAD_ECDSA_SIGNATURE          305
01739 #define SSL_R_BAD_ECPOINT            306
01740 #define SSL_R_BAD_HELLO_REQUEST            105
01741 #define SSL_R_BAD_LENGTH             271
01742 #define SSL_R_BAD_MAC_DECODE            113
01743 #define SSL_R_BAD_MESSAGE_TYPE             114
01744 #define SSL_R_BAD_PACKET_LENGTH            115
01745 #define SSL_R_BAD_PROTOCOL_VERSION_NUMBER     116
01746 #define SSL_R_BAD_RESPONSE_ARGUMENT        117
01747 #define SSL_R_BAD_RSA_DECRYPT           118
01748 #define SSL_R_BAD_RSA_ENCRYPT           119
01749 #define SSL_R_BAD_RSA_E_LENGTH             120
01750 #define SSL_R_BAD_RSA_MODULUS_LENGTH          121
01751 #define SSL_R_BAD_RSA_SIGNATURE            122
01752 #define SSL_R_BAD_SIGNATURE             123
01753 #define SSL_R_BAD_SSL_FILETYPE             124
01754 #define SSL_R_BAD_SSL_SESSION_ID_LENGTH          125
01755 #define SSL_R_BAD_STATE              126
01756 #define SSL_R_BAD_WRITE_RETRY           127
01757 #define SSL_R_BIO_NOT_SET            128
01758 #define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG          129
01759 #define SSL_R_BN_LIB              130
01760 #define SSL_R_CA_DN_LENGTH_MISMATCH        131
01761 #define SSL_R_CA_DN_TOO_LONG            132
01762 #define SSL_R_CCS_RECEIVED_EARLY        133
01763 #define SSL_R_CERTIFICATE_VERIFY_FAILED          134
01764 #define SSL_R_CERT_LENGTH_MISMATCH         135
01765 #define SSL_R_CHALLENGE_IS_DIFFERENT          136
01766 #define SSL_R_CIPHER_CODE_WRONG_LENGTH        137
01767 #define SSL_R_CIPHER_OR_HASH_UNAVAILABLE      138
01768 #define SSL_R_CIPHER_TABLE_SRC_ERROR          139
01769 #define SSL_R_COMPRESSED_LENGTH_TOO_LONG      140
01770 #define SSL_R_COMPRESSION_FAILURE          141
01771 #define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE  307
01772 #define SSL_R_COMPRESSION_LIBRARY_ERROR          142
01773 #define SSL_R_CONNECTION_ID_IS_DIFFERENT      143
01774 #define SSL_R_CONNECTION_TYPE_NOT_SET         144
01775 #define SSL_R_COOKIE_MISMATCH           308
01776 #define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED      145
01777 #define SSL_R_DATA_LENGTH_TOO_LONG         146
01778 #define SSL_R_DECRYPTION_FAILED            147
01779 #define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC   281
01780 #define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG       148
01781 #define SSL_R_DIGEST_CHECK_FAILED          149
01782 #define SSL_R_DUPLICATE_COMPRESSION_ID        309
01783 #define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER       310
01784 #define SSL_R_ENCRYPTED_LENGTH_TOO_LONG          150
01785 #define SSL_R_ERROR_GENERATING_TMP_RSA_KEY       282
01786 #define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST      151
01787 #define SSL_R_EXCESSIVE_MESSAGE_SIZE          152
01788 #define SSL_R_EXTRA_DATA_IN_MESSAGE        153
01789 #define SSL_R_GOT_A_FIN_BEFORE_A_CCS          154
01790 #define SSL_R_HTTPS_PROXY_REQUEST          155
01791 #define SSL_R_HTTP_REQUEST           156
01792 #define SSL_R_ILLEGAL_PADDING           283
01793 #define SSL_R_INVALID_CHALLENGE_LENGTH        158
01794 #define SSL_R_INVALID_COMMAND           280
01795 #define SSL_R_INVALID_PURPOSE           278
01796 #define SSL_R_INVALID_TRUST             279
01797 #define SSL_R_KEY_ARG_TOO_LONG             284
01798 #define SSL_R_KRB5                285
01799 #define SSL_R_KRB5_C_CC_PRINC           286
01800 #define SSL_R_KRB5_C_GET_CRED           287
01801 #define SSL_R_KRB5_C_INIT            288
01802 #define SSL_R_KRB5_C_MK_REQ             289
01803 #define SSL_R_KRB5_S_BAD_TICKET            290
01804 #define SSL_R_KRB5_S_INIT            291
01805 #define SSL_R_KRB5_S_RD_REQ             292
01806 #define SSL_R_KRB5_S_TKT_EXPIRED        293
01807 #define SSL_R_KRB5_S_TKT_NYV            294
01808 #define SSL_R_KRB5_S_TKT_SKEW           295
01809 #define SSL_R_LENGTH_MISMATCH           159
01810 #define SSL_R_LENGTH_TOO_SHORT             160
01811 #define SSL_R_LIBRARY_BUG            274
01812 #define SSL_R_LIBRARY_HAS_NO_CIPHERS          161
01813 #define SSL_R_MESSAGE_TOO_LONG             296
01814 #define SSL_R_MISSING_DH_DSA_CERT          162
01815 #define SSL_R_MISSING_DH_KEY            163
01816 #define SSL_R_MISSING_DH_RSA_CERT          164
01817 #define SSL_R_MISSING_DSA_SIGNING_CERT        165
01818 #define SSL_R_MISSING_EXPORT_TMP_DH_KEY          166
01819 #define SSL_R_MISSING_EXPORT_TMP_RSA_KEY      167
01820 #define SSL_R_MISSING_RSA_CERTIFICATE         168
01821 #define SSL_R_MISSING_RSA_ENCRYPTING_CERT     169
01822 #define SSL_R_MISSING_RSA_SIGNING_CERT        170
01823 #define SSL_R_MISSING_TMP_DH_KEY        171
01824 #define SSL_R_MISSING_TMP_ECDH_KEY         311
01825 #define SSL_R_MISSING_TMP_RSA_KEY          172
01826 #define SSL_R_MISSING_TMP_RSA_PKEY         173
01827 #define SSL_R_MISSING_VERIFY_MESSAGE          174
01828 #define SSL_R_NON_SSLV2_INITIAL_PACKET        175
01829 #define SSL_R_NO_CERTIFICATES_RETURNED        176
01830 #define SSL_R_NO_CERTIFICATE_ASSIGNED         177
01831 #define SSL_R_NO_CERTIFICATE_RETURNED         178
01832 #define SSL_R_NO_CERTIFICATE_SET        179
01833 #define SSL_R_NO_CERTIFICATE_SPECIFIED        180
01834 #define SSL_R_NO_CIPHERS_AVAILABLE         181
01835 #define SSL_R_NO_CIPHERS_PASSED            182
01836 #define SSL_R_NO_CIPHERS_SPECIFIED         183
01837 #define SSL_R_NO_CIPHER_LIST            184
01838 #define SSL_R_NO_CIPHER_MATCH           185
01839 #define SSL_R_NO_CLIENT_CERT_RECEIVED         186
01840 #define SSL_R_NO_COMPRESSION_SPECIFIED        187
01841 #define SSL_R_NO_METHOD_SPECIFIED          188
01842 #define SSL_R_NO_PRIVATEKEY             189
01843 #define SSL_R_NO_PRIVATE_KEY_ASSIGNED         190
01844 #define SSL_R_NO_PROTOCOLS_AVAILABLE          191
01845 #define SSL_R_NO_PUBLICKEY           192
01846 #define SSL_R_NO_SHARED_CIPHER             193
01847 #define SSL_R_NO_VERIFY_CALLBACK        194
01848 #define SSL_R_NULL_SSL_CTX           195
01849 #define SSL_R_NULL_SSL_METHOD_PASSED          196
01850 #define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED       197
01851 #define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE      297
01852 #define SSL_R_PACKET_LENGTH_TOO_LONG          198
01853 #define SSL_R_PATH_TOO_LONG             270
01854 #define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE     199
01855 #define SSL_R_PEER_ERROR             200
01856 #define SSL_R_PEER_ERROR_CERTIFICATE          201
01857 #define SSL_R_PEER_ERROR_NO_CERTIFICATE          202
01858 #define SSL_R_PEER_ERROR_NO_CIPHER         203
01859 #define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE  204
01860 #define SSL_R_PRE_MAC_LENGTH_TOO_LONG         205
01861 #define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS     206
01862 #define SSL_R_PROTOCOL_IS_SHUTDOWN         207
01863 #define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR        208
01864 #define SSL_R_PUBLIC_KEY_IS_NOT_RSA        209
01865 #define SSL_R_PUBLIC_KEY_NOT_RSA        210
01866 #define SSL_R_READ_BIO_NOT_SET             211
01867 #define SSL_R_READ_TIMEOUT_EXPIRED         312
01868 #define SSL_R_READ_WRONG_PACKET_TYPE          212
01869 #define SSL_R_RECORD_LENGTH_MISMATCH          213
01870 #define SSL_R_RECORD_TOO_LARGE             214
01871 #define SSL_R_RECORD_TOO_SMALL             298
01872 #define SSL_R_REQUIRED_CIPHER_MISSING         215
01873 #define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO      216
01874 #define SSL_R_REUSE_CERT_TYPE_NOT_ZERO        217
01875 #define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO      218
01876 #define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED      277
01877 #define SSL_R_SHORT_READ             219
01878 #define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE    220
01879 #define SSL_R_SSL23_DOING_SESSION_ID_REUSE       221
01880 #define SSL_R_SSL2_CONNECTION_ID_TOO_LONG     299
01881 #define SSL_R_SSL3_SESSION_ID_TOO_LONG        300
01882 #define SSL_R_SSL3_SESSION_ID_TOO_SHORT          222
01883 #define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE     1042
01884 #define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC      1020
01885 #define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED       1045
01886 #define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED       1044
01887 #define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN       1046
01888 #define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE     1030
01889 #define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE      1040
01890 #define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER      1047
01891 #define SSL_R_SSLV3_ALERT_NO_CERTIFICATE      1041
01892 #define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE     1010
01893 #define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE   1043
01894 #define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION    228
01895 #define SSL_R_SSL_HANDSHAKE_FAILURE        229
01896 #define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS      230
01897 #define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED     301
01898 #define SSL_R_SSL_SESSION_ID_CONFLICT         302
01899 #define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG       273
01900 #define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH      303
01901 #define SSL_R_SSL_SESSION_ID_IS_DIFFERENT     231
01902 #define SSL_R_TLSV1_ALERT_ACCESS_DENIED          1049
01903 #define SSL_R_TLSV1_ALERT_DECODE_ERROR        1050
01904 #define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED      1021
01905 #define SSL_R_TLSV1_ALERT_DECRYPT_ERROR          1051
01906 #define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION     1060
01907 #define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY     1071
01908 #define SSL_R_TLSV1_ALERT_INTERNAL_ERROR      1080
01909 #define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION       1100
01910 #define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION       1070
01911 #define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW     1022
01912 #define SSL_R_TLSV1_ALERT_UNKNOWN_CA          1048
01913 #define SSL_R_TLSV1_ALERT_USER_CANCELLED      1090
01914 #define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER  232
01915 #define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233
01916 #define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG  234
01917 #define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER       235
01918 #define SSL_R_UNABLE_TO_DECODE_DH_CERTS          236
01919 #define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS     313
01920 #define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY       237
01921 #define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS       238
01922 #define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS     314
01923 #define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS  239
01924 #define SSL_R_UNABLE_TO_FIND_SSL_METHOD          240
01925 #define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES      241
01926 #define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES      242
01927 #define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES     243
01928 #define SSL_R_UNEXPECTED_MESSAGE        244
01929 #define SSL_R_UNEXPECTED_RECORD            245
01930 #define SSL_R_UNINITIALIZED             276
01931 #define SSL_R_UNKNOWN_ALERT_TYPE        246
01932 #define SSL_R_UNKNOWN_CERTIFICATE_TYPE        247
01933 #define SSL_R_UNKNOWN_CIPHER_RETURNED         248
01934 #define SSL_R_UNKNOWN_CIPHER_TYPE          249
01935 #define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE          250
01936 #define SSL_R_UNKNOWN_PKEY_TYPE            251
01937 #define SSL_R_UNKNOWN_PROTOCOL             252
01938 #define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE          253
01939 #define SSL_R_UNKNOWN_SSL_VERSION          254
01940 #define SSL_R_UNKNOWN_STATE             255
01941 #define SSL_R_UNSUPPORTED_CIPHER        256
01942 #define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM     257
01943 #define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE      315
01944 #define SSL_R_UNSUPPORTED_PROTOCOL         258
01945 #define SSL_R_UNSUPPORTED_SSL_VERSION         259
01946 #define SSL_R_WRITE_BIO_NOT_SET            260
01947 #define SSL_R_WRONG_CIPHER_RETURNED        261
01948 #define SSL_R_WRONG_MESSAGE_TYPE        262
01949 #define SSL_R_WRONG_NUMBER_OF_KEY_BITS        263
01950 #define SSL_R_WRONG_SIGNATURE_LENGTH          264
01951 #define SSL_R_WRONG_SIGNATURE_SIZE         265
01952 #define SSL_R_WRONG_SSL_VERSION            266
01953 #define SSL_R_WRONG_VERSION_NUMBER         267
01954 #define SSL_R_X509_LIB               268
01955 #define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS      269
01956 
01957 #ifdef  __cplusplus
01958 }
01959 #endif
01960 #endif

Generated on Thu Aug 20 22:33:05 2009 for OpenXDAS by  doxygen 1.5.6