summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl.h
diff options
context:
space:
mode:
authorryker <>1998-10-05 20:13:14 +0000
committerryker <>1998-10-05 20:13:14 +0000
commitaeeae06a79815dc190061534d47236cec09f9e32 (patch)
tree851692b9c2f9c04f077666855641900f19fdb217 /src/lib/libssl/ssl.h
parenta4f79641824cbf9f60ca9d1168d1fcc46717a82a (diff)
downloadopenbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.gz
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.bz2
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.zip
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs. Note that routines such as sslv2_init and friends that use RSA will not work due to lack of RSA in this library. Needs documentation and help from ports for easy upgrade to full functionality where legally possible.
Diffstat (limited to 'src/lib/libssl/ssl.h')
-rw-r--r--src/lib/libssl/ssl.h1453
1 files changed, 1453 insertions, 0 deletions
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h
new file mode 100644
index 0000000000..cf8f9651b2
--- /dev/null
+++ b/src/lib/libssl/ssl.h
@@ -0,0 +1,1453 @@
1/* ssl/ssl.h */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#ifndef HEADER_SSL_H
60#define HEADER_SSL_H
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66/* SSLeay version number for ASN.1 encoding of the session information */
67/* Version 0 - initial version
68 * Version 1 - added the optional peer certificate
69 */
70#define SSL_SESSION_ASN1_VERSION 0x0001
71
72/* text strings for the ciphers */
73#define SSL_TXT_NULL_WITH_MD5 SSL2_TXT_NULL_WITH_MD5
74#define SSL_TXT_RC4_128_WITH_MD5 SSL2_TXT_RC4_128_WITH_MD5
75#define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5
76#define SSL_TXT_RC2_128_CBC_WITH_MD5 SSL2_TXT_RC2_128_CBC_WITH_MD5
77#define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5
78#define SSL_TXT_IDEA_128_CBC_WITH_MD5 SSL2_TXT_IDEA_128_CBC_WITH_MD5
79#define SSL_TXT_DES_64_CBC_WITH_MD5 SSL2_TXT_DES_64_CBC_WITH_MD5
80#define SSL_TXT_DES_64_CBC_WITH_SHA SSL2_TXT_DES_64_CBC_WITH_SHA
81#define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5
82#define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA
83
84#define SSL_MAX_SSL_SESSION_ID_LENGTH 32
85
86#define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8)
87#define SSL_MAX_KEY_ARG_LENGTH 8
88#define SSL_MAX_MASTER_KEY_LENGTH 48
89
90/* These are used to specify which ciphers to use and not to use */
91#define SSL_TXT_LOW "LOW"
92#define SSL_TXT_MEDIUM "MEDIUM"
93#define SSL_TXT_HIGH "HIGH"
94#define SSL_TXT_kFZA "kFZA"
95#define SSL_TXT_aFZA "aFZA"
96#define SSL_TXT_eFZA "eFZA"
97#define SSL_TXT_FZA "FZA"
98
99#define SSL_TXT_aNULL "aNULL"
100#define SSL_TXT_eNULL "eNULL"
101#define SSL_TXT_NULL "NULL"
102
103#define SSL_TXT_kRSA "kRSA"
104#define SSL_TXT_kDHr "kDHr"
105#define SSL_TXT_kDHd "kDHd"
106#define SSL_TXT_kEDH "kEDH"
107#define SSL_TXT_aRSA "aRSA"
108#define SSL_TXT_aDSS "aDSS"
109#define SSL_TXT_aDH "aDH"
110#define SSL_TXT_DSS "DSS"
111#define SSL_TXT_DH "DH"
112#define SSL_TXT_EDH "EDH"
113#define SSL_TXT_ADH "ADH"
114#define SSL_TXT_RSA "RSA"
115#define SSL_TXT_DES "DES"
116#define SSL_TXT_3DES "3DES"
117#define SSL_TXT_RC4 "RC4"
118#define SSL_TXT_RC2 "RC2"
119#define SSL_TXT_IDEA "IDEA"
120#define SSL_TXT_MD5 "MD5"
121#define SSL_TXT_SHA1 "SHA1"
122#define SSL_TXT_SHA "SHA"
123#define SSL_TXT_EXP "EXP"
124#define SSL_TXT_EXPORT "EXPORT"
125#define SSL_TXT_SSLV2 "SSLv2"
126#define SSL_TXT_SSLV3 "SSLv3"
127#define SSL_TXT_ALL "ALL"
128
129/* 'DEFAULT' at the start of the cipher list insert the following string
130 * in addition to this being the default cipher string */
131#ifndef NO_RSA
132#define SSL_DEFAULT_CIPHER_LIST "ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP"
133#else
134#define SSL_ALLOW_ADH
135#define SSL_DEFAULT_CIPHER_LIST "HIGH:MEDIUM:LOW:ADH+3DES:ADH+RC4:ADH+DES:+EXP"
136#endif
137
138/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
139#define SSL_SENT_SHUTDOWN 1
140#define SSL_RECEIVED_SHUTDOWN 2
141
142#include "crypto.h"
143#include "lhash.h"
144#include "buffer.h"
145#include "bio.h"
146#include "x509.h"
147
148#define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1
149#define SSL_FILETYPE_PEM X509_FILETYPE_PEM
150
151/* This is needed to stop compilers complaining about the
152 * 'struct ssl_st *' function parameters used to prototype callbacks
153 * in SSL_CTX. */
154typedef struct ssl_st *ssl_crock_st;
155
156/* used to hold info on the particular ciphers used */
157typedef struct ssl_cipher_st
158 {
159 int valid;
160 char *name; /* text name */
161 unsigned long id; /* id, 4 bytes, first is version */
162 unsigned long algorithms; /* what ciphers are used */
163 unsigned long algorithm2; /* Extra flags */
164 unsigned long mask; /* used for matching */
165 } SSL_CIPHER;
166
167/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */
168typedef struct ssl_method_st
169 {
170 int version;
171 int (*ssl_new)();
172 void (*ssl_clear)();
173 void (*ssl_free)();
174 int (*ssl_accept)();
175 int (*ssl_connect)();
176 int (*ssl_read)();
177 int (*ssl_peek)();
178 int (*ssl_write)();
179 int (*ssl_shutdown)();
180 int (*ssl_renegotiate)();
181 long (*ssl_ctrl)();
182 long (*ssl_ctx_ctrl)();
183 SSL_CIPHER *(*get_cipher_by_char)();
184 int (*put_cipher_by_char)();
185 int (*ssl_pending)();
186 int (*num_ciphers)();
187 SSL_CIPHER *(*get_cipher)();
188 struct ssl_method_st *(*get_ssl_method)();
189 long (*get_timeout)();
190 struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
191 } SSL_METHOD;
192
193typedef struct ssl_compression_st
194 {
195 char *stuff;
196 } SSL_COMPRESSION;
197
198/* Lets make this into an ASN.1 type structure as follows
199 * SSL_SESSION_ID ::= SEQUENCE {
200 * version INTEGER, -- structure version number
201 * SSLversion INTEGER, -- SSL version number
202 * Cipher OCTET_STRING, -- the 3 byte cipher ID
203 * Session_ID OCTET_STRING, -- the Session ID
204 * Master_key OCTET_STRING, -- the master key
205 * Key_Arg [ 0 ] IMPLICIT OCTET_STRING, -- the optional Key argument
206 * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time
207 * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds
208 * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate
209 * }
210 * Look in ssl/ssl_asn1.c for more details
211 * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).
212 */
213typedef struct ssl_session_st
214 {
215 int ssl_version; /* what ssl version session info is
216 * being kept in here? */
217
218 /* only really used in SSLv2 */
219 unsigned int key_arg_length;
220 unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH];
221 int master_key_length;
222 unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];
223 /* session_id - valid? */
224 unsigned int session_id_length;
225 unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
226
227 int not_resumable;
228
229 /* The cert is the certificate used to establish this connection */
230 struct cert_st /* CERT */ *cert;
231
232 /* This is the cert for the other end. On servers, it will be
233 * the same as cert->x509 */
234 X509 *peer;
235
236 int references;
237 long timeout;
238 long time;
239
240 SSL_COMPRESSION *read_compression;
241 SSL_COMPRESSION *write_compression;
242
243 SSL_CIPHER *cipher;
244 unsigned long cipher_id; /* when ASN.1 loaded, this
245 * needs to be used to load
246 * the 'cipher' structure */
247
248 STACK /* SSL_CIPHER */ *ciphers; /* shared ciphers? */
249
250 CRYPTO_EX_DATA ex_data; /* application specific data */
251
252 /* These are used to make removal of session-ids more
253 * efficient and to implement a maximum cache size. */
254 struct ssl_session_st *prev,*next;
255 } SSL_SESSION;
256
257#define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L
258#define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L
259#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L
260#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L
261#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L
262#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x00000040L
263#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L
264#define SSL_OP_TLS_D5_BUG 0x00000100L
265#define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L
266
267/* If set, only use tmp_dh parameters once */
268#define SSL_OP_SINGLE_DH_USE 0x00100000L
269/* Set to also use the tmp_rsa key when doing RSA operations. */
270#define SSL_OP_EPHEMERAL_RSA 0x00200000L
271
272#define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L
273#define SSL_OP_NON_EXPORT_FIRST 0x40000000L
274#define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x80000000L
275#define SSL_OP_ALL 0x000FFFFFL
276
277#define SSL_CTX_set_options(ctx,op) ((ctx)->options|=(op))
278#define SSL_set_options(ssl,op) ((ssl)->options|=(op))
279
280#define SSL_OP_NO_SSLv2 0x01000000L
281#define SSL_OP_NO_SSLv3 0x02000000L
282#define SSL_OP_NO_TLSv1 0x04000000L
283
284/* Normally you will only use these if your application wants to use
285 * the certificate store in other places, perhaps PKCS7 */
286#define SSL_CTX_get_cert_store(ctx) ((ctx)->cert_store)
287#define SSL_CTX_set_cert_store(ctx,cs) \
288 (X509_STORE_free((ctx)->cert_store),(ctx)->cert_store=(cs))
289
290
291#define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20)
292
293typedef struct ssl_ctx_st
294 {
295 SSL_METHOD *method;
296 unsigned long options;
297
298 STACK /* SSL_CIPHER */ *cipher_list;
299 /* same as above but sorted for lookup */
300 STACK /* SSL_CIPHER */ *cipher_list_by_id;
301
302 struct x509_store_st /* X509_STORE */ *cert_store;
303 struct lhash_st /* LHASH */ *sessions; /* a set of SSL_SESSION's */
304 /* Most session-ids that will be cached, default is
305 * SSL_SESSION_CACHE_SIZE_DEFAULT. 0 is unlimited. */
306 unsigned long session_cache_size;
307 struct ssl_session_st *session_cache_head;
308 struct ssl_session_st *session_cache_tail;
309
310 /* This can have one of 2 values, ored together,
311 * SSL_SESS_CACHE_CLIENT,
312 * SSL_SESS_CACHE_SERVER,
313 * Default is SSL_SESSION_CACHE_SERVER, which means only
314 * SSL_accept which cache SSL_SESSIONS. */
315 int session_cache_mode;
316
317 /* If timeout is not 0, it is the default timeout value set
318 * when SSL_new() is called. This has been put in to make
319 * life easier to set things up */
320 long session_timeout;
321
322 /* If this callback is not null, it will be called each
323 * time a session id is added to the cache. If this function
324 * returns 1, it means that the callback will do a
325 * SSL_SESSION_free() when it has finished using it. Otherwise,
326 * on 0, it means the callback has finished with it.
327 * If remove_session_cb is not null, it will be called when
328 * a session-id is removed from the cache. Again, a return
329 * of 0 mens that SSLeay should not SSL_SESSION_free() since
330 * the application is doing something with it. */
331#ifndef NOPROTO
332 int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess);
333 void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess);
334 SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl,
335 unsigned char *data,int len,int *copy);
336#else
337 int (*new_session_cb)();
338 void (*remove_session_cb)();
339 SSL_SESSION *(*get_session_cb)();
340#endif
341
342 int sess_connect; /* SSL new connection - started */
343 int sess_connect_renegotiate;/* SSL renegotiatene - requested */
344 int sess_connect_good; /* SSL new connection/renegotiate - finished */
345 int sess_accept; /* SSL new accept - started */
346 int sess_accept_renegotiate;/* SSL renegotiatene - requested */
347 int sess_accept_good; /* SSL accept/renegotiate - finished */
348 int sess_miss; /* session lookup misses */
349 int sess_timeout; /* session reuse attempt on timeouted session */
350 int sess_cache_full; /* session removed due to full cache */
351 int sess_hit; /* session reuse actually done */
352 int sess_cb_hit; /* session-id that was not in the cache was
353 * passed back via the callback. This
354 * indicates that the application is supplying
355 * session-id's from other processes -
356 * spooky :-) */
357
358 int references;
359
360 void (*info_callback)();
361
362 /* if defined, these override the X509_verify_cert() calls */
363 int (*app_verify_callback)();
364 char *app_verify_arg;
365
366 /* default values to use in SSL structures */
367 struct cert_st /* CERT */ *default_cert;
368 int default_read_ahead;
369 int default_verify_mode;
370 int (*default_verify_callback)();
371
372 /* Default password callback. */
373 int (*default_passwd_callback)();
374
375 /* get client cert callback */
376 int (*client_cert_cb)(/* SSL *ssl, X509 **x509, EVP_PKEY **pkey */);
377
378 /* what we put in client requests */
379 STACK *client_CA;
380
381 int quiet_shutdown;
382
383 CRYPTO_EX_DATA ex_data;
384
385 EVP_MD *rsa_md5;/* For SSLv2 - name is 'ssl2-md5' */
386 EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */
387 EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */
388 } SSL_CTX;
389
390#define SSL_SESS_CACHE_OFF 0x0000
391#define SSL_SESS_CACHE_CLIENT 0x0001
392#define SSL_SESS_CACHE_SERVER 0x0002
393#define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)
394#define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080
395/* This one, when set, makes the server session-id lookup not look
396 * in the cache. If there is an application get_session callback
397 * defined, this will still get called. */
398#define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100
399
400#define SSL_CTX_sessions(ctx) ((ctx)->sessions)
401/* You will need to include lhash.h to access the following #define */
402#define SSL_CTX_sess_number(ctx) ((ctx)->sessions->num_items)
403#define SSL_CTX_sess_connect(ctx) ((ctx)->sess_connect)
404#define SSL_CTX_sess_connect_good(ctx) ((ctx)->sess_connect_good)
405#define SSL_CTX_sess_accept(ctx) ((ctx)->sess_accept)
406#define SSL_CTX_sess_accept_renegotiate(ctx) ((ctx)->sess_accept_renegotiate)
407#define SSL_CTX_sess_connect_renegotiate(ctx) ((ctx)->sess_connect_renegotiate)
408#define SSL_CTX_sess_accept_good(ctx) ((ctx)->sess_accept_good)
409#define SSL_CTX_sess_hits(ctx) ((ctx)->sess_hit)
410#define SSL_CTX_sess_cb_hits(ctx) ((ctx)->sess_cb_hit)
411#define SSL_CTX_sess_misses(ctx) ((ctx)->sess_miss)
412#define SSL_CTX_sess_timeouts(ctx) ((ctx)->sess_timeout)
413#define SSL_CTX_sess_cache_full(ctx) ((ctx)->sess_cache_full)
414
415#define SSL_CTX_sess_set_cache_size(ctx,t) ((ctx)->session_cache_size=(t))
416#define SSL_CTX_sess_get_cache_size(ctx) ((ctx)->session_cache_size)
417
418#define SSL_CTX_sess_set_new_cb(ctx,cb) ((ctx)->new_session_cb=(cb))
419#define SSL_CTX_sess_get_new_cb(ctx) ((ctx)->new_session_cb)
420#define SSL_CTX_sess_set_remove_cb(ctx,cb) ((ctx)->remove_session_cb=(cb))
421#define SSL_CTX_sess_get_remove_cb(ctx) ((ctx)->remove_session_cb)
422#define SSL_CTX_sess_set_get_cb(ctx,cb) ((ctx)->get_session_cb=(cb))
423#define SSL_CTX_sess_get_get_cb(ctx) ((ctx)->get_session_cb)
424#define SSL_CTX_set_session_cache_mode(ctx,m) ((ctx)->session_cache_mode=(m))
425#define SSL_CTX_get_session_cache_mode(ctx) ((ctx)->session_cache_mode)
426#define SSL_CTX_set_timeout(ctx,t) ((ctx)->session_timeout=(t))
427#define SSL_CTX_get_timeout(ctx) ((ctx)->session_timeout)
428
429#define SSL_CTX_set_info_callback(ctx,cb) ((ctx)->info_callback=(cb))
430#define SSL_CTX_get_info_callback(ctx) ((ctx)->info_callback)
431#define SSL_CTX_set_default_read_ahead(ctx,m) (((ctx)->default_read_ahead)=(m))
432
433#define SSL_CTX_set_client_cert_cb(ctx,cb) ((ctx)->client_cert_cb=(cb))
434#define SSL_CTX_get_client_cert_cb(ctx) ((ctx)->client_cert_cb)
435
436#define SSL_NOTHING 1
437#define SSL_WRITING 2
438#define SSL_READING 3
439#define SSL_X509_LOOKUP 4
440
441/* These will only be used when doing non-blocking IO */
442#define SSL_want(s) ((s)->rwstate)
443#define SSL_want_nothing(s) ((s)->rwstate == SSL_NOTHING)
444#define SSL_want_read(s) ((s)->rwstate == SSL_READING)
445#define SSL_want_write(s) ((s)->rwstate == SSL_WRITING)
446#define SSL_want_x509_lookup(s) ((s)->rwstate == SSL_X509_LOOKUP)
447
448typedef struct ssl_st
449 {
450 /* procol version
451 * 2 for SSLv2
452 * 3 for SSLv3
453 * -3 for SSLv3 but accept SSLv2 */
454 int version;
455 int type; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */
456
457 SSL_METHOD *method; /* SSLv3 */
458
459 /* There are 2 BIO's even though they are normally both the
460 * same. This is so data can be read and written to different
461 * handlers */
462
463#ifdef HEADER_BIO_H
464 BIO *rbio; /* used by SSL_read */
465 BIO *wbio; /* used by SSL_write */
466 BIO *bbio; /* used during session-id reuse to concatinate
467 * messages */
468#else
469 char *rbio; /* used by SSL_read */
470 char *wbio; /* used by SSL_write */
471 char *bbio;
472#endif
473 /* This holds a variable that indicates what we were doing
474 * when a 0 or -1 is returned. This is needed for
475 * non-blocking IO so we know what request needs re-doing when
476 * in SSL_accept or SSL_connect */
477 int rwstate;
478
479 /* true when we are actually in SSL_accept() or SSL_connect() */
480 int in_handshake;
481 int (*handshake_func)();
482
483/* int server;*/ /* are we the server side? */
484
485 int new_session;/* 1 if we are to use a new session */
486 int quiet_shutdown;/* don't send shutdown packets */
487 int shutdown; /* we have shut things down, 0x01 sent, 0x02
488 * for received */
489 int state; /* where we are */
490 int rstate; /* where we are when reading */
491
492 BUF_MEM *init_buf; /* buffer used during init */
493 int init_num; /* amount read/written */
494 int init_off; /* amount read/written */
495
496 /* used internally to point at a raw packet */
497 unsigned char *packet;
498 unsigned int packet_length;
499
500 struct ssl2_ctx_st *s2; /* SSLv2 variables */
501 struct ssl3_ctx_st *s3; /* SSLv3 variables */
502
503 int read_ahead; /* Read as many input bytes as possible */
504 int hit; /* reusing a previous session */
505
506 /* crypto */
507 STACK /* SSL_CIPHER */ *cipher_list;
508 STACK /* SSL_CIPHER */ *cipher_list_by_id;
509
510 /* These are the ones being used, the ones is SSL_SESSION are
511 * the ones to be 'copied' into these ones */
512
513 EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */
514 EVP_MD *read_hash; /* used for mac generation */
515 SSL_COMPRESSION *read_compression; /* compression */
516
517 EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
518 EVP_MD *write_hash; /* used for mac generation */
519 SSL_COMPRESSION *write_compression; /* compression */
520
521 /* session info */
522
523 /* client cert? */
524 /* This is used to hold the server certificate used */
525 struct cert_st /* CERT */ *cert;
526
527 /* This can also be in the session once a session is established */
528 SSL_SESSION *session;
529
530 /* Used in SSL2 and SSL3 */
531 int verify_mode; /* 0 don't care about verify failure.
532 * 1 fail if verify fails */
533 int (*verify_callback)(); /* fail if callback returns 0 */
534 void (*info_callback)(); /* optional informational callback */
535
536 int error; /* error bytes to be written */
537 int error_code; /* actual code */
538
539 SSL_CTX *ctx;
540 /* set this flag to 1 and a sleep(1) is put into all SSL_read()
541 * and SSL_write() calls, good for nbio debuging :-) */
542 int debug;
543
544 /* extra application data */
545 long verify_result;
546 CRYPTO_EX_DATA ex_data;
547
548 /* for server side, keep the list of CA_dn we can use */
549 STACK /* X509_NAME */ *client_CA;
550
551 int references;
552 unsigned long options;
553 int first_packet;
554 } SSL;
555
556#include "ssl2.h"
557#include "ssl3.h"
558#include "tls1.h" /* This is mostly sslv3 with a few tweaks */
559#include "ssl23.h"
560
561/* compatablity */
562#define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)arg))
563#define SSL_get_app_data(s) (SSL_get_ex_data(s,0))
564#define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0,(char *)a))
565#define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0))
566#define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0))
567#define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0,(char *)arg))
568
569/* The following are the possible values for ssl->state are are
570 * used to indicate where we are upto in the SSL connection establishment.
571 * The macros that follow are about the only things you should need to use
572 * and even then, only when using non-blocking IO.
573 * It can also be useful to work out where you were when the connection
574 * failed */
575
576#define SSL_ST_CONNECT 0x1000
577#define SSL_ST_ACCEPT 0x2000
578#define SSL_ST_MASK 0x0FFF
579#define SSL_ST_INIT (SSL_ST_CONNECT|SSL_ST_ACCEPT)
580#define SSL_ST_BEFORE 0x4000
581#define SSL_ST_OK 0x03
582#define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT)
583
584#define SSL_CB_LOOP 0x01
585#define SSL_CB_EXIT 0x02
586#define SSL_CB_READ 0x04
587#define SSL_CB_WRITE 0x08
588#define SSL_CB_ALERT 0x4000 /* used in callback */
589#define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ)
590#define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE)
591#define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP)
592#define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT)
593#define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP)
594#define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT)
595#define SSL_CB_HANDSHAKE_START 0x10
596#define SSL_CB_HANDSHAKE_DONE 0x20
597
598/* Is the SSL_connection established? */
599#define SSL_get_state(a) SSL_state(a)
600#define SSL_is_init_finished(a) (SSL_state(a) == SSL_ST_OK)
601#define SSL_in_init(a) (SSL_state(a)&SSL_ST_INIT)
602#define SSL_in_before(a) (SSL_state(a)&SSL_ST_BEFORE)
603#define SSL_in_connect_init(a) (SSL_state(a)&SSL_ST_CONNECT)
604#define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT)
605
606/* The following 2 states are kept in ssl->rstate when reads fail,
607 * you should not need these */
608#define SSL_ST_READ_HEADER 0xF0
609#define SSL_ST_READ_BODY 0xF1
610#define SSL_ST_READ_DONE 0xF2
611
612/* use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options
613 * are 'ored' with SSL_VERIFY_PEER if they are desired */
614#define SSL_VERIFY_NONE 0x00
615#define SSL_VERIFY_PEER 0x01
616#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02
617#define SSL_VERIFY_CLIENT_ONCE 0x04
618
619/* this is for backward compatablility */
620#if 0 /* NEW_SSLEAY */
621#define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c)
622#define SSL_set_pref_cipher(c,n) SSL_set_cipher_list(c,n)
623#define SSL_add_session(a,b) SSL_CTX_add_session((a),(b))
624#define SSL_remove_session(a,b) SSL_CTX_remove_session((a),(b))
625#define SSL_flush_sessions(a,b) SSL_CTX_flush_sessions((a),(b))
626#endif
627/* More backward compatablity */
628#define SSL_get_cipher(s) \
629 SSL_CIPHER_get_name(SSL_get_current_cipher(s))
630#define SSL_get_cipher_bits(s,np) \
631 SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
632#define SSL_get_cipher_version(s) \
633 SSL_CIPHER_get_version(SSL_get_current_cipher(s))
634#define SSL_get_cipher_name(s) \
635 SSL_CIPHER_get_name(SSL_get_current_cipher(s))
636#define SSL_get_time(a) SSL_SESSION_get_time(a)
637#define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b))
638#define SSL_get_timeout(a) SSL_SESSION_get_timeout(a)
639#define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b))
640
641/* VMS linker has a 31 char name limit */
642#define SSL_CTX_set_cert_verify_callback(a,b,c) \
643 SSL_CTX_set_cert_verify_cb((a),(b),(c))
644
645#if 1 /*SSLEAY_MACROS*/
646#define d2i_SSL_SESSION_bio(bp,s_id) (SSL_SESSION *)ASN1_d2i_bio( \
647 (char *(*)())SSL_SESSION_new,(char *(*)())d2i_SSL_SESSION, \
648 (bp),(unsigned char **)(s_id))
649#define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio(i2d_SSL_SESSION, \
650 bp,(unsigned char *)s_id)
651#define PEM_read_SSL_SESSION(fp,x,cb) (SSL_SESSION *)PEM_ASN1_read( \
652 (char *(*)())d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,fp,(char **)x,cb)
653#define PEM_read_bio_SSL_SESSION(bp,x,cb) (SSL_SESSION *)PEM_ASN1_read_bio( \
654 (char *(*)())d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,bp,(char **)x,cb)
655#define PEM_write_SSL_SESSION(fp,x) \
656 PEM_ASN1_write((int (*)())i2d_SSL_SESSION, \
657 PEM_STRING_SSL_SESSION,fp, (char *)x, NULL,NULL,0,NULL)
658#define PEM_write_bio_SSL_SESSION(bp,x) \
659 PEM_ASN1_write_bio((int (*)())i2d_SSL_SESSION, \
660 PEM_STRING_SSL_SESSION,bp, (char *)x, NULL,NULL,0,NULL)
661#endif
662
663/* These alert types are for SSLv3 and TLSv1 */
664#define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY
665#define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE /* fatal */
666#define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC /* fatal */
667#define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED
668#define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW
669#define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE/* fatal */
670#define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE/* fatal */
671#define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE /* Not for TLS */
672#define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE
673#define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE
674#define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED
675#define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED
676#define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN
677#define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER /* fatal */
678#define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA /* fatal */
679#define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED /* fatal */
680#define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR /* fatal */
681#define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR
682#define SSL_AD_EXPORT_RESTRICION TLS1_AD_EXPORT_RESTRICION/* fatal */
683#define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION /* fatal */
684#define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY/* fatal */
685#define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR /* fatal */
686#define SSL_AD_USER_CANCLED TLS1_AD_USER_CANCLED
687#define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION
688
689#define SSL_ERROR_NONE 0
690#define SSL_ERROR_SSL 1
691#define SSL_ERROR_WANT_READ 2
692#define SSL_ERROR_WANT_WRITE 3
693#define SSL_ERROR_WANT_X509_LOOKUP 4
694#define SSL_ERROR_SYSCALL 5 /* look at errno */
695#define SSL_ERROR_ZERO_RETURN 6
696#define SSL_ERROR_WANT_CONNECT 7
697
698#define SSL_CTRL_NEED_TMP_RSA 1
699#define SSL_CTRL_SET_TMP_RSA 2
700#define SSL_CTRL_SET_TMP_DH 3
701#define SSL_CTRL_SET_TMP_RSA_CB 4
702#define SSL_CTRL_SET_TMP_DH_CB 5
703/* Add these ones */
704#define SSL_CTRL_GET_SESSION_REUSED 6
705#define SSL_CTRL_GET_CLIENT_CERT_REQUEST 7
706#define SSL_CTRL_GET_NUM_RENEGOTIATIONS 8
707#define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 9
708#define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 10
709
710#define SSL_session_reused(ssl) \
711 SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)
712#define SSL_num_renegotiations(ssl) \
713 SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)
714#define SSL_clear_num_renegotiations(ssl) \
715 SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)
716#define SSL_total_renegotiations(ssl) \
717 SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)
718
719#define SSL_CTX_need_tmp_RSA(ctx) \
720 SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)
721#define SSL_CTX_set_tmp_rsa(ctx,rsa) \
722 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)
723#define SSL_CTX_set_tmp_dh(ctx,dh) \
724 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh)
725
726/* For the next 2, the callbacks are
727 * RSA *tmp_rsa_cb(int export)
728 * DH *tmp_dh_cb(int export)
729 */
730#define SSL_CTX_set_tmp_rsa_callback(ctx,cb) \
731 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA_CB,0,(char *)cb)
732#define SSL_CTX_set_tmp_dh_callback(ctx,dh) \
733 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,0,(char *)dh)
734
735#ifndef NOPROTO
736
737#ifdef HEADER_BIO_H
738BIO_METHOD *BIO_f_ssl(void);
739BIO *BIO_new_ssl(SSL_CTX *ctx,int client);
740BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
741BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
742int BIO_ssl_copy_session_id(BIO *to,BIO *from);
743void BIO_ssl_shutdown(BIO *ssl_bio);
744
745#endif
746
747int SSL_CTX_set_cipher_list(SSL_CTX *,char *str);
748SSL_CTX *SSL_CTX_new(SSL_METHOD *meth);
749void SSL_CTX_free(SSL_CTX *);
750void SSL_clear(SSL *s);
751void SSL_CTX_flush_sessions(SSL_CTX *ctx,long tm);
752
753SSL_CIPHER *SSL_get_current_cipher(SSL *s);
754int SSL_CIPHER_get_bits(SSL_CIPHER *c,int *alg_bits);
755char * SSL_CIPHER_get_version(SSL_CIPHER *c);
756char * SSL_CIPHER_get_name(SSL_CIPHER *c);
757
758int SSL_get_fd(SSL *s);
759char * SSL_get_cipher_list(SSL *s,int n);
760char * SSL_get_shared_ciphers(SSL *s, char *buf, int len);
761int SSL_get_read_ahead(SSL * s);
762int SSL_pending(SSL *s);
763#ifndef NO_SOCK
764int SSL_set_fd(SSL *s, int fd);
765int SSL_set_rfd(SSL *s, int fd);
766int SSL_set_wfd(SSL *s, int fd);
767#endif
768#ifdef HEADER_BIO_H
769void SSL_set_bio(SSL *s, BIO *rbio,BIO *wbio);
770BIO * SSL_get_rbio(SSL *s);
771BIO * SSL_get_wbio(SSL *s);
772#endif
773int SSL_set_cipher_list(SSL *s, char *str);
774void SSL_set_read_ahead(SSL *s, int yes);
775int SSL_get_verify_mode(SSL *s);
776int (*SSL_get_verify_callback(SSL *s))();
777void SSL_set_verify(SSL *s, int mode, int (*callback) ());
778int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
779int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);
780int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
781int SSL_use_PrivateKey_ASN1(int pk,SSL *ssl, unsigned char *d, long len);
782int SSL_use_certificate(SSL *ssl, X509 *x);
783int SSL_use_certificate_ASN1(SSL *ssl, int len, unsigned char *d);
784
785#ifndef NO_STDIO
786int SSL_use_RSAPrivateKey_file(SSL *ssl, char *file, int type);
787int SSL_use_PrivateKey_file(SSL *ssl, char *file, int type);
788int SSL_use_certificate_file(SSL *ssl, char *file, int type);
789int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, char *file, int type);
790int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, char *file, int type);
791int SSL_CTX_use_certificate_file(SSL_CTX *ctx, char *file, int type);
792STACK * SSL_load_client_CA_file(char *file);
793#endif
794
795void ERR_load_SSL_strings(void );
796void SSL_load_error_strings(void );
797char * SSL_state_string(SSL *s);
798char * SSL_rstate_string(SSL *s);
799char * SSL_state_string_long(SSL *s);
800char * SSL_rstate_string_long(SSL *s);
801long SSL_SESSION_get_time(SSL_SESSION *s);
802long SSL_SESSION_set_time(SSL_SESSION *s, long t);
803long SSL_SESSION_get_timeout(SSL_SESSION *s);
804long SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
805void SSL_copy_session_id(SSL *to,SSL *from);
806
807SSL_SESSION *SSL_SESSION_new(void);
808unsigned long SSL_SESSION_hash(SSL_SESSION *a);
809int SSL_SESSION_cmp(SSL_SESSION *a,SSL_SESSION *b);
810#ifndef NO_FP_API
811int SSL_SESSION_print_fp(FILE *fp,SSL_SESSION *ses);
812#endif
813#ifdef HEADER_BIO_H
814int SSL_SESSION_print(BIO *fp,SSL_SESSION *ses);
815#endif
816void SSL_SESSION_free(SSL_SESSION *ses);
817int i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp);
818int SSL_set_session(SSL *to, SSL_SESSION *session);
819int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);
820int SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c);
821SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a,unsigned char **pp,long length);
822
823#ifdef HEADER_X509_H
824X509 * SSL_get_peer_certificate(SSL *s);
825#endif
826
827STACK * SSL_get_peer_cert_chain(SSL *s);
828
829int SSL_CTX_get_verify_mode(SSL_CTX *ctx);
830int (*SSL_CTX_get_verify_callback(SSL_CTX *ctx))();
831void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*callback)());
832void SSL_CTX_set_cert_verify_cb(SSL_CTX *ctx, int (*cb)(),char *arg);
833int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
834int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, unsigned char *d, long len);
835int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
836int SSL_CTX_use_PrivateKey_ASN1(int pk,SSL_CTX *ctx,
837 unsigned char *d, long len);
838int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
839int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, unsigned char *d);
840
841void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx,int (*cb)());
842
843int SSL_CTX_check_private_key(SSL_CTX *ctx);
844int SSL_check_private_key(SSL *ctx);
845
846SSL * SSL_new(SSL_CTX *ctx);
847void SSL_clear(SSL *s);
848void SSL_free(SSL *ssl);
849int SSL_accept(SSL *ssl);
850int SSL_connect(SSL *ssl);
851int SSL_read(SSL *ssl,char *buf,int num);
852int SSL_peek(SSL *ssl,char *buf,int num);
853int SSL_write(SSL *ssl,char *buf,int num);
854long SSL_ctrl(SSL *ssl,int cmd, long larg, char *parg);
855long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, char *parg);
856
857int SSL_get_error(SSL *s,int ret_code);
858char * SSL_get_version(SSL *s);
859
860/* This sets the 'default' SSL version that SSL_new() will create */
861int SSL_CTX_set_ssl_version(SSL_CTX *ctx,SSL_METHOD *meth);
862
863SSL_METHOD *SSLv2_method(void); /* SSLv2 */
864SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */
865SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */
866
867SSL_METHOD *SSLv3_method(void); /* SSLv3 */
868SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */
869SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */
870
871SSL_METHOD *SSLv23_method(void); /* SSLv3 but can rollback to v2 */
872SSL_METHOD *SSLv23_server_method(void); /* SSLv3 but can rollback to v2 */
873SSL_METHOD *SSLv23_client_method(void); /* SSLv3 but can rollback to v2 */
874
875SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */
876SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */
877SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */
878
879STACK *SSL_get_ciphers(SSL *s);
880
881int SSL_do_handshake(SSL *s);
882int SSL_renegotiate(SSL *s);
883int SSL_shutdown(SSL *s);
884
885SSL_METHOD *SSL_get_ssl_method(SSL *s);
886int SSL_set_ssl_method(SSL *s,SSL_METHOD *method);
887char *SSL_alert_type_string_long(int value);
888char *SSL_alert_type_string(int value);
889char *SSL_alert_desc_string_long(int value);
890char *SSL_alert_desc_string(int value);
891
892void SSL_set_client_CA_list(SSL *s, STACK *list);
893void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK *list);
894STACK *SSL_get_client_CA_list(SSL *s);
895STACK *SSL_CTX_get_client_CA_list(SSL_CTX *s);
896int SSL_add_client_CA(SSL *ssl,X509 *x);
897int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x);
898
899void SSL_set_connect_state(SSL *s);
900void SSL_set_accept_state(SSL *s);
901
902long SSL_get_default_timeout(SSL *s);
903
904void SSLeay_add_ssl_algorithms(void );
905
906char *SSL_CIPHER_description(SSL_CIPHER *,char *buf,int size);
907STACK *SSL_dup_CA_list(STACK *sk);
908
909SSL *SSL_dup(SSL *ssl);
910
911X509 *SSL_get_certificate(SSL *ssl);
912/* EVP_PKEY */ struct evp_pkey_st *SSL_get_privatekey(SSL *ssl);
913
914void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode);
915int SSL_CTX_get_quiet_shutdown(SSL_CTX *ctx);
916void SSL_set_quiet_shutdown(SSL *ssl,int mode);
917int SSL_get_quiet_shutdown(SSL *ssl);
918void SSL_set_shutdown(SSL *ssl,int mode);
919int SSL_get_shutdown(SSL *ssl);
920int SSL_version(SSL *ssl);
921int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
922int SSL_CTX_load_verify_locations(SSL_CTX *ctx,char *CAfile,char *CApath);
923SSL_SESSION *SSL_get_session(SSL *ssl);
924SSL_CTX *SSL_get_SSL_CTX(SSL *ssl);
925void SSL_set_info_callback(SSL *ssl,void (*cb)());
926void (*SSL_get_info_callback(SSL *ssl))();
927int SSL_state(SSL *ssl);
928
929void SSL_set_verify_result(SSL *ssl,long v);
930long SSL_get_verify_result(SSL *ssl);
931
932int SSL_set_ex_data(SSL *ssl,int idx,char *data);
933char *SSL_get_ex_data(SSL *ssl,int idx);
934int SSL_get_ex_new_index(long argl, char *argp, int (*new_func)(),
935 int (*dup_func)(), void (*free_func)());
936
937int SSL_SESSION_set_ex_data(SSL_SESSION *ss,int idx,char *data);
938char *SSL_SESSION_get_ex_data(SSL_SESSION *ss,int idx);
939int SSL_SESSION_get_ex_new_index(long argl, char *argp, int (*new_func)(),
940 int (*dup_func)(), void (*free_func)());
941
942int SSL_CTX_set_ex_data(SSL_CTX *ssl,int idx,char *data);
943char *SSL_CTX_get_ex_data(SSL_CTX *ssl,int idx);
944int SSL_CTX_get_ex_new_index(long argl, char *argp, int (*new_func)(),
945 int (*dup_func)(), void (*free_func)());
946
947#else
948
949BIO_METHOD *BIO_f_ssl();
950BIO *BIO_new_ssl();
951BIO *BIO_new_ssl_connect();
952BIO *BIO_new_buffer_ssl_connect();
953int BIO_ssl_copy_session_id();
954void BIO_ssl_shutdown();
955
956int SSL_CTX_set_cipher_list();
957SSL_CTX *SSL_CTX_new();
958void SSL_CTX_free();
959void SSL_clear();
960void SSL_CTX_flush_sessions();
961
962SSL_CIPHER *SSL_get_current_cipher();
963int SSL_CIPHER_get_bits();
964char * SSL_CIPHER_get_version();
965char * SSL_CIPHER_get_name();
966
967int SSL_get_fd();
968char * SSL_get_cipher_list();
969char * SSL_get_shared_ciphers();
970int SSL_get_read_ahead();
971int SSL_pending();
972#ifndef NO_SOCK
973int SSL_set_fd();
974int SSL_set_rfd();
975int SSL_set_wfd();
976#endif
977#ifdef HEADER_BIO_H
978void SSL_set_bio();
979BIO * SSL_get_rbio();
980BIO * SSL_get_wbio();
981#endif
982int SSL_set_cipher_list();
983void SSL_set_read_ahead();
984int SSL_get_verify_mode();
985
986void SSL_set_verify();
987int SSL_use_RSAPrivateKey();
988int SSL_use_RSAPrivateKey_ASN1();
989int SSL_use_PrivateKey();
990int SSL_use_PrivateKey_ASN1();
991int SSL_use_certificate();
992int SSL_use_certificate_ASN1();
993
994#ifndef NO_STDIO
995int SSL_use_RSAPrivateKey_file();
996int SSL_use_PrivateKey_file();
997int SSL_use_certificate_file();
998int SSL_CTX_use_RSAPrivateKey_file();
999int SSL_CTX_use_PrivateKey_file();
1000int SSL_CTX_use_certificate_file();
1001STACK * SSL_load_client_CA_file();
1002#endif
1003
1004void ERR_load_SSL_strings();
1005void SSL_load_error_strings();
1006char * SSL_state_string();
1007char * SSL_rstate_string();
1008char * SSL_state_string_long();
1009char * SSL_rstate_string_long();
1010long SSL_SESSION_get_time();
1011long SSL_SESSION_set_time();
1012long SSL_SESSION_get_timeout();
1013long SSL_SESSION_set_timeout();
1014void SSL_copy_session_id();
1015
1016SSL_SESSION *SSL_SESSION_new();
1017unsigned long SSL_SESSION_hash();
1018int SSL_SESSION_cmp();
1019#ifndef NO_FP_API
1020int SSL_SESSION_print_fp();
1021#endif
1022#ifdef HEADER_BIO_H
1023int SSL_SESSION_print();
1024#endif
1025void SSL_SESSION_free();
1026int i2d_SSL_SESSION();
1027int SSL_set_session();
1028int SSL_CTX_add_session();
1029int SSL_CTX_remove_session();
1030SSL_SESSION *d2i_SSL_SESSION();
1031
1032#ifdef HEADER_X509_H
1033X509 * SSL_get_peer_certificate();
1034#endif
1035
1036STACK * SSL_get_peer_cert_chain();
1037
1038int SSL_CTX_get_verify_mode();
1039int (*SSL_CTX_get_verify_callback())();
1040void SSL_CTX_set_verify();
1041void SSL_CTX_set_cert_verify_cb();
1042int SSL_CTX_use_RSAPrivateKey();
1043int SSL_CTX_use_RSAPrivateKey_ASN1();
1044int SSL_CTX_use_PrivateKey();
1045int SSL_CTX_use_PrivateKey_ASN1();
1046int SSL_CTX_use_certificate();
1047int SSL_CTX_use_certificate_ASN1();
1048
1049void SSL_CTX_set_default_passwd_cb();
1050
1051int SSL_CTX_check_private_key();
1052int SSL_check_private_key();
1053
1054SSL * SSL_new();
1055void SSL_clear();
1056void SSL_free();
1057int SSL_accept();
1058int SSL_connect();
1059int SSL_read();
1060int SSL_peek();
1061int SSL_write();
1062long SSL_ctrl();
1063long SSL_CTX_ctrl();
1064
1065int SSL_get_error();
1066char * SSL_get_version();
1067
1068int SSL_CTX_set_ssl_version();
1069
1070SSL_METHOD *SSLv2_method();
1071SSL_METHOD *SSLv2_server_method();
1072SSL_METHOD *SSLv2_client_method();
1073
1074SSL_METHOD *SSLv3_method();
1075SSL_METHOD *SSLv3_server_method();
1076SSL_METHOD *SSLv3_client_method();
1077
1078SSL_METHOD *SSLv23_method();
1079SSL_METHOD *SSLv23_server_method();
1080SSL_METHOD *SSLv23_client_method();
1081
1082SSL_METHOD *TLSv1_method();
1083SSL_METHOD *TLSv1_server_method();
1084SSL_METHOD *TLSv1_client_method();
1085
1086STACK *SSL_get_ciphers();
1087
1088int SSL_do_handshake();
1089int SSL_renegotiate();
1090int SSL_shutdown();
1091
1092SSL_METHOD *SSL_get_ssl_method();
1093int SSL_set_ssl_method();
1094char *SSL_alert_type_string_long();
1095char *SSL_alert_type_string();
1096char *SSL_alert_desc_string_long();
1097char *SSL_alert_desc_string();
1098
1099void SSL_set_client_CA_list();
1100void SSL_CTX_set_client_CA_list();
1101STACK *SSL_get_client_CA_list();
1102STACK *SSL_CTX_get_client_CA_list();
1103int SSL_add_client_CA();
1104int SSL_CTX_add_client_CA();
1105
1106void SSL_set_connect_state();
1107void SSL_set_accept_state();
1108
1109long SSL_get_default_timeout();
1110
1111void SSLeay_add_ssl_algorithms();
1112
1113char *SSL_CIPHER_description();
1114STACK *SSL_dup_CA_list();
1115
1116SSL *SSL_dup();
1117
1118X509 *SSL_get_certificate();
1119/* EVP * */ struct evp_pkey_st *SSL_get_privatekey();
1120
1121#ifdef this_is_for_mk1mf_pl
1122EVP *SSL_get_privatekey();
1123
1124void SSL_CTX_set_quiet_shutdown();
1125int SSL_CTX_get_quiet_shutdown();
1126void SSL_set_quiet_shutdown();
1127int SSL_get_quiet_shutdown();
1128void SSL_set_shutdown();
1129int SSL_get_shutdown();
1130int SSL_version();
1131int SSL_CTX_set_default_verify_paths();
1132int SSL_CTX_load_verify_locations();
1133SSL_SESSION *SSL_get_session();
1134SSL_CTX *SSL_get_SSL_CTX();
1135void SSL_set_info_callback();
1136int (*SSL_get_info_callback())();
1137int SSL_state();
1138void SSL_set_verify_result();
1139long SSL_get_verify_result();
1140
1141int SSL_set_ex_data();
1142char *SSL_get_ex_data();
1143int SSL_get_ex_new_index();
1144
1145int SSL_SESSION_set_ex_data();
1146char *SSL_SESSION_get_ex_data();
1147int SSL_SESSION_get_ex_new_index();
1148
1149int SSL_CTX_set_ex_data();
1150char *SSL_CTX_get_ex_data();
1151int SSL_CTX_get_ex_new_index();
1152
1153#endif
1154
1155#endif
1156
1157/* BEGIN ERROR CODES */
1158/* Error codes for the SSL functions. */
1159
1160/* Function codes. */
1161#define SSL_F_CLIENT_CERTIFICATE 100
1162#define SSL_F_CLIENT_HELLO 101
1163#define SSL_F_CLIENT_MASTER_KEY 102
1164#define SSL_F_D2I_SSL_SESSION 103
1165#define SSL_F_DO_SSL3_WRITE 104
1166#define SSL_F_GET_CLIENT_FINISHED 105
1167#define SSL_F_GET_CLIENT_HELLO 106
1168#define SSL_F_GET_CLIENT_MASTER_KEY 107
1169#define SSL_F_GET_SERVER_FINISHED 108
1170#define SSL_F_GET_SERVER_HELLO 109
1171#define SSL_F_GET_SERVER_VERIFY 110
1172#define SSL_F_I2D_SSL_SESSION 111
1173#define SSL_F_READ_N 112
1174#define SSL_F_REQUEST_CERTIFICATE 113
1175#define SSL_F_SERVER_HELLO 114
1176#define SSL_F_SSL23_ACCEPT 115
1177#define SSL_F_SSL23_CLIENT_HELLO 116
1178#define SSL_F_SSL23_CONNECT 117
1179#define SSL_F_SSL23_GET_CLIENT_HELLO 118
1180#define SSL_F_SSL23_GET_SERVER_HELLO 119
1181#define SSL_F_SSL23_READ 120
1182#define SSL_F_SSL23_WRITE 121
1183#define SSL_F_SSL2_ACCEPT 122
1184#define SSL_F_SSL2_CONNECT 123
1185#define SSL_F_SSL2_ENC_INIT 124
1186#define SSL_F_SSL2_READ 125
1187#define SSL_F_SSL2_SET_CERTIFICATE 126
1188#define SSL_F_SSL2_WRITE 127
1189#define SSL_F_SSL3_ACCEPT 128
1190#define SSL_F_SSL3_CHANGE_CIPHER_STATE 129
1191#define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130
1192#define SSL_F_SSL3_CLIENT_HELLO 131
1193#define SSL_F_SSL3_CONNECT 132
1194#define SSL_F_SSL3_CTX_CTRL 133
1195#define SSL_F_SSL3_ENC 134
1196#define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135
1197#define SSL_F_SSL3_GET_CERT_VERIFY 136
1198#define SSL_F_SSL3_GET_CLIENT_CERTIFICATE 137
1199#define SSL_F_SSL3_GET_CLIENT_HELLO 138
1200#define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE 139
1201#define SSL_F_SSL3_GET_FINISHED 140
1202#define SSL_F_SSL3_GET_KEY_EXCHANGE 141
1203#define SSL_F_SSL3_GET_MESSAGE 142
1204#define SSL_F_SSL3_GET_RECORD 143
1205#define SSL_F_SSL3_GET_SERVER_CERTIFICATE 144
1206#define SSL_F_SSL3_GET_SERVER_DONE 145
1207#define SSL_F_SSL3_GET_SERVER_HELLO 146
1208#define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147
1209#define SSL_F_SSL3_READ_BYTES 148
1210#define SSL_F_SSL3_READ_N 149
1211#define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST 150
1212#define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE 151
1213#define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE 152
1214#define SSL_F_SSL3_SEND_CLIENT_VERIFY 153
1215#define SSL_F_SSL3_SEND_SERVER_CERTIFICATE 154
1216#define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE 155
1217#define SSL_F_SSL3_SETUP_BUFFERS 156
1218#define SSL_F_SSL3_SETUP_KEY_BLOCK 157
1219#define SSL_F_SSL3_WRITE_BYTES 158
1220#define SSL_F_SSL3_WRITE_PENDING 159
1221#define SSL_F_SSL_BAD_METHOD 160
1222#define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161
1223#define SSL_F_SSL_CERT_NEW 162
1224#define SSL_F_SSL_CHECK_PRIVATE_KEY 163
1225#define SSL_F_SSL_CREATE_CIPHER_LIST 164
1226#define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 165
1227#define SSL_F_SSL_CTX_NEW 166
1228#define SSL_F_SSL_CTX_SET_SSL_VERSION 167
1229#define SSL_F_SSL_CTX_USE_CERTIFICATE 168
1230#define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 169
1231#define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 170
1232#define SSL_F_SSL_CTX_USE_PRIVATEKEY 171
1233#define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 172
1234#define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 173
1235#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 174
1236#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 175
1237#define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 176
1238#define SSL_F_SSL_DO_HANDSHAKE 177
1239#define SSL_F_SSL_GET_NEW_SESSION 178
1240#define SSL_F_SSL_GET_SERVER_SEND_CERT 179
1241#define SSL_F_SSL_GET_SIGN_PKEY 180
1242#define SSL_F_SSL_INIT_WBIO_BUFFER 181
1243#define SSL_F_SSL_LOAD_CLIENT_CA_FILE 182
1244#define SSL_F_SSL_NEW 183
1245#define SSL_F_SSL_RSA_PRIVATE_DECRYPT 184
1246#define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 185
1247#define SSL_F_SSL_SESSION_NEW 186
1248#define SSL_F_SSL_SESSION_PRINT_FP 187
1249#define SSL_F_SSL_SET_CERT 188
1250#define SSL_F_SSL_SET_FD 189
1251#define SSL_F_SSL_SET_PKEY 190
1252#define SSL_F_SSL_SET_RFD 191
1253#define SSL_F_SSL_SET_SESSION 192
1254#define SSL_F_SSL_SET_WFD 193
1255#define SSL_F_SSL_UNDEFINED_FUNCTION 194
1256#define SSL_F_SSL_USE_CERTIFICATE 195
1257#define SSL_F_SSL_USE_CERTIFICATE_ASN1 196
1258#define SSL_F_SSL_USE_CERTIFICATE_FILE 197
1259#define SSL_F_SSL_USE_PRIVATEKEY 198
1260#define SSL_F_SSL_USE_PRIVATEKEY_ASN1 199
1261#define SSL_F_SSL_USE_PRIVATEKEY_FILE 200
1262#define SSL_F_SSL_USE_RSAPRIVATEKEY 201
1263#define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 202
1264#define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 203
1265#define SSL_F_SSL_WRITE 204
1266#define SSL_F_TLS1_CHANGE_CIPHER_STATE 205
1267#define SSL_F_TLS1_ENC 206
1268#define SSL_F_TLS1_SETUP_KEY_BLOCK 207
1269#define SSL_F_WRITE_PENDING 208
1270
1271/* Reason codes. */
1272#define SSL_R_APP_DATA_IN_HANDSHAKE 100
1273#define SSL_R_BAD_ALERT_RECORD 101
1274#define SSL_R_BAD_AUTHENTICATION_TYPE 102
1275#define SSL_R_BAD_CHANGE_CIPHER_SPEC 103
1276#define SSL_R_BAD_CHECKSUM 104
1277#define SSL_R_BAD_CLIENT_REQUEST 105
1278#define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106
1279#define SSL_R_BAD_DECOMPRESSION 107
1280#define SSL_R_BAD_DH_G_LENGTH 108
1281#define SSL_R_BAD_DH_PUB_KEY_LENGTH 109
1282#define SSL_R_BAD_DH_P_LENGTH 110
1283#define SSL_R_BAD_DIGEST_LENGTH 111
1284#define SSL_R_BAD_DSA_SIGNATURE 112
1285#define SSL_R_BAD_MAC_DECODE 113
1286#define SSL_R_BAD_MESSAGE_TYPE 114
1287#define SSL_R_BAD_PACKET_LENGTH 115
1288#define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116
1289#define SSL_R_BAD_RESPONSE_ARGUMENT 117
1290#define SSL_R_BAD_RSA_DECRYPT 118
1291#define SSL_R_BAD_RSA_ENCRYPT 119
1292#define SSL_R_BAD_RSA_E_LENGTH 120
1293#define SSL_R_BAD_RSA_MODULUS_LENGTH 121
1294#define SSL_R_BAD_RSA_SIGNATURE 122
1295#define SSL_R_BAD_SIGNATURE 123
1296#define SSL_R_BAD_SSL_FILETYPE 124
1297#define SSL_R_BAD_SSL_SESSION_ID_LENGTH 125
1298#define SSL_R_BAD_STATE 126
1299#define SSL_R_BAD_WRITE_RETRY 127
1300#define SSL_R_BIO_NOT_SET 128
1301#define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129
1302#define SSL_R_BN_LIB 130
1303#define SSL_R_CA_DN_LENGTH_MISMATCH 131
1304#define SSL_R_CA_DN_TOO_LONG 132
1305#define SSL_R_CCS_RECEIVED_EARLY 133
1306#define SSL_R_CERTIFICATE_VERIFY_FAILED 134
1307#define SSL_R_CERT_LENGTH_MISMATCH 135
1308#define SSL_R_CHALLENGE_IS_DIFFERENT 136
1309#define SSL_R_CIPHER_CODE_WRONG_LENGTH 137
1310#define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138
1311#define SSL_R_CIPHER_TABLE_SRC_ERROR 139
1312#define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140
1313#define SSL_R_COMPRESSION_FAILURE 141
1314#define SSL_R_CONNECTION_ID_IS_DIFFERENT 142
1315#define SSL_R_CONNECTION_TYPE_NOT_SET 143
1316#define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 144
1317#define SSL_R_DATA_LENGTH_TOO_LONG 145
1318#define SSL_R_DECRYPTION_FAILED 146
1319#define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 147
1320#define SSL_R_DIGEST_CHECK_FAILED 148
1321#define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 149
1322#define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 150
1323#define SSL_R_EXCESSIVE_MESSAGE_SIZE 151
1324#define SSL_R_EXTRA_DATA_IN_MESSAGE 152
1325#define SSL_R_GOT_A_FIN_BEFORE_A_CCS 153
1326#define SSL_R_HTTPS_PROXY_REQUEST 154
1327#define SSL_R_HTTP_REQUEST 155
1328#define SSL_R_INTERNAL_ERROR 156
1329#define SSL_R_INVALID_CHALLENGE_LENGTH 157
1330#define SSL_R_LENGTH_MISMATCH 158
1331#define SSL_R_LENGTH_TOO_SHORT 159
1332#define SSL_R_LIBRARY_HAS_NO_CIPHERS 160
1333#define SSL_R_MISSING_DH_DSA_CERT 161
1334#define SSL_R_MISSING_DH_KEY 162
1335#define SSL_R_MISSING_DH_RSA_CERT 163
1336#define SSL_R_MISSING_DSA_SIGNING_CERT 164
1337#define SSL_R_MISSING_EXPORT_TMP_DH_KEY 165
1338#define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 166
1339#define SSL_R_MISSING_RSA_CERTIFICATE 167
1340#define SSL_R_MISSING_RSA_ENCRYPTING_CERT 168
1341#define SSL_R_MISSING_RSA_SIGNING_CERT 169
1342#define SSL_R_MISSING_TMP_DH_KEY 170
1343#define SSL_R_MISSING_TMP_RSA_KEY 171
1344#define SSL_R_MISSING_TMP_RSA_PKEY 172
1345#define SSL_R_MISSING_VERIFY_MESSAGE 173
1346#define SSL_R_NON_SSLV2_INITIAL_PACKET 174
1347#define SSL_R_NO_CERTIFICATES_RETURNED 175
1348#define SSL_R_NO_CERTIFICATE_ASSIGNED 176
1349#define SSL_R_NO_CERTIFICATE_RETURNED 177
1350#define SSL_R_NO_CERTIFICATE_SET 178
1351#define SSL_R_NO_CERTIFICATE_SPECIFIED 179
1352#define SSL_R_NO_CIPHERS_AVAILABLE 180
1353#define SSL_R_NO_CIPHERS_PASSED 181
1354#define SSL_R_NO_CIPHERS_SPECIFIED 182
1355#define SSL_R_NO_CIPHER_LIST 183
1356#define SSL_R_NO_CIPHER_MATCH 184
1357#define SSL_R_NO_CLIENT_CERT_RECEIVED 185
1358#define SSL_R_NO_COMPRESSION_SPECIFIED 186
1359#define SSL_R_NO_PRIVATEKEY 187
1360#define SSL_R_NO_PRIVATE_KEY_ASSIGNED 188
1361#define SSL_R_NO_PROTOCOLS_AVAILABLE 189
1362#define SSL_R_NO_PUBLICKEY 190
1363#define SSL_R_NO_SHARED_CIPHER 191
1364#define SSL_R_NULL_SSL_CTX 192
1365#define SSL_R_NULL_SSL_METHOD_PASSED 193
1366#define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 194
1367#define SSL_R_PACKET_LENGTH_TOO_LONG 195
1368#define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 196
1369#define SSL_R_PEER_ERROR 197
1370#define SSL_R_PEER_ERROR_CERTIFICATE 198
1371#define SSL_R_PEER_ERROR_NO_CERTIFICATE 199
1372#define SSL_R_PEER_ERROR_NO_CIPHER 200
1373#define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 201
1374#define SSL_R_PRE_MAC_LENGTH_TOO_LONG 202
1375#define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 203
1376#define SSL_R_PROTOCOL_IS_SHUTDOWN 204
1377#define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR 205
1378#define SSL_R_PUBLIC_KEY_IS_NOT_RSA 206
1379#define SSL_R_PUBLIC_KEY_NOT_RSA 207
1380#define SSL_R_READ_BIO_NOT_SET 208
1381#define SSL_R_READ_WRONG_PACKET_TYPE 209
1382#define SSL_R_RECORD_LENGTH_MISMATCH 210
1383#define SSL_R_RECORD_TOO_LARGE 211
1384#define SSL_R_REQUIRED_CIPHER_MISSING 212
1385#define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO 213
1386#define SSL_R_REUSE_CERT_TYPE_NOT_ZERO 214
1387#define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO 215
1388#define SSL_R_SHORT_READ 216
1389#define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 217
1390#define SSL_R_SSL3_SESSION_ID_TOO_SHORT 218
1391#define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042
1392#define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020
1393#define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045
1394#define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044
1395#define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046
1396#define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030
1397#define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040
1398#define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047
1399#define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041
1400#define SSL_R_SSLV3_ALERT_PEER_ERROR_CERTIFICATE 219
1401#define SSL_R_SSLV3_ALERT_PEER_ERROR_NO_CERTIFICATE 220
1402#define SSL_R_SSLV3_ALERT_PEER_ERROR_NO_CIPHER 221
1403#define SSL_R_SSLV3_ALERT_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 222
1404#define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010
1405#define SSL_R_SSLV3_ALERT_UNKNOWN_REMOTE_ERROR_TYPE 223
1406#define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043
1407#define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 224
1408#define SSL_R_SSL_HANDSHAKE_FAILURE 225
1409#define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 226
1410#define SSL_R_SSL_SESSION_ID_IS_DIFFERENT 227
1411#define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER 228
1412#define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 229
1413#define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 230
1414#define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 231
1415#define SSL_R_UNABLE_TO_DECODE_DH_CERTS 232
1416#define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY 233
1417#define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS 234
1418#define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 235
1419#define SSL_R_UNABLE_TO_FIND_SSL_METHOD 236
1420#define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES 237
1421#define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 238
1422#define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 239
1423#define SSL_R_UNEXPECTED_MESSAGE 240
1424#define SSL_R_UNEXPECTED_RECORD 241
1425#define SSL_R_UNKNOWN_ALERT_TYPE 242
1426#define SSL_R_UNKNOWN_CERTIFICATE_TYPE 243
1427#define SSL_R_UNKNOWN_CIPHER_RETURNED 244
1428#define SSL_R_UNKNOWN_CIPHER_TYPE 245
1429#define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 246
1430#define SSL_R_UNKNOWN_PKEY_TYPE 247
1431#define SSL_R_UNKNOWN_PROTOCOL 248
1432#define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE 249
1433#define SSL_R_UNKNOWN_SSL_VERSION 250
1434#define SSL_R_UNKNOWN_STATE 251
1435#define SSL_R_UNSUPPORTED_CIPHER 252
1436#define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 253
1437#define SSL_R_UNSUPPORTED_PROTOCOL 254
1438#define SSL_R_UNSUPPORTED_SSL_VERSION 255
1439#define SSL_R_WRITE_BIO_NOT_SET 256
1440#define SSL_R_WRONG_CIPHER_RETURNED 257
1441#define SSL_R_WRONG_MESSAGE_TYPE 258
1442#define SSL_R_WRONG_NUMBER_OF_KEY_BITS 259
1443#define SSL_R_WRONG_SIGNATURE_LENGTH 260
1444#define SSL_R_WRONG_SIGNATURE_SIZE 261
1445#define SSL_R_WRONG_SSL_VERSION 262
1446#define SSL_R_WRONG_VERSION_NUMBER 263
1447#define SSL_R_X509_LIB 264
1448
1449#ifdef __cplusplus
1450}
1451#endif
1452#endif
1453