OSDN Git Service

Update OpenSSL to 1.0.2a.
[ffftp/ffftp.git] / contrib / openssl / include / openssl / tls1.h
1 /* ssl/tls1.h */\r
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\r
3  * All rights reserved.\r
4  *\r
5  * This package is an SSL implementation written\r
6  * by Eric Young (eay@cryptsoft.com).\r
7  * The implementation was written so as to conform with Netscapes SSL.\r
8  *\r
9  * This library is free for commercial and non-commercial use as long as\r
10  * the following conditions are aheared to.  The following conditions\r
11  * apply to all code found in this distribution, be it the RC4, RSA,\r
12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\r
13  * included with this distribution is covered by the same copyright terms\r
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).\r
15  *\r
16  * Copyright remains Eric Young's, and as such any Copyright notices in\r
17  * the code are not to be removed.\r
18  * If this package is used in a product, Eric Young should be given attribution\r
19  * as the author of the parts of the library used.\r
20  * This can be in the form of a textual message at program startup or\r
21  * in documentation (online or textual) provided with the package.\r
22  *\r
23  * Redistribution and use in source and binary forms, with or without\r
24  * modification, are permitted provided that the following conditions\r
25  * are met:\r
26  * 1. Redistributions of source code must retain the copyright\r
27  *    notice, this list of conditions and the following disclaimer.\r
28  * 2. Redistributions in binary form must reproduce the above copyright\r
29  *    notice, this list of conditions and the following disclaimer in the\r
30  *    documentation and/or other materials provided with the distribution.\r
31  * 3. All advertising materials mentioning features or use of this software\r
32  *    must display the following acknowledgement:\r
33  *    "This product includes cryptographic software written by\r
34  *     Eric Young (eay@cryptsoft.com)"\r
35  *    The word 'cryptographic' can be left out if the rouines from the library\r
36  *    being used are not cryptographic related :-).\r
37  * 4. If you include any Windows specific code (or a derivative thereof) from\r
38  *    the apps directory (application code) you must include an acknowledgement:\r
39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"\r
40  *\r
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\r
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
51  * SUCH DAMAGE.\r
52  *\r
53  * The licence and distribution terms for any publically available version or\r
54  * derivative of this code cannot be changed.  i.e. this code cannot simply be\r
55  * copied and put under another distribution licence\r
56  * [including the GNU Public Licence.]\r
57  */\r
58 /* ====================================================================\r
59  * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.\r
60  *\r
61  * Redistribution and use in source and binary forms, with or without\r
62  * modification, are permitted provided that the following conditions\r
63  * are met:\r
64  *\r
65  * 1. Redistributions of source code must retain the above copyright\r
66  *    notice, this list of conditions and the following disclaimer.\r
67  *\r
68  * 2. Redistributions in binary form must reproduce the above copyright\r
69  *    notice, this list of conditions and the following disclaimer in\r
70  *    the documentation and/or other materials provided with the\r
71  *    distribution.\r
72  *\r
73  * 3. All advertising materials mentioning features or use of this\r
74  *    software must display the following acknowledgment:\r
75  *    "This product includes software developed by the OpenSSL Project\r
76  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"\r
77  *\r
78  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to\r
79  *    endorse or promote products derived from this software without\r
80  *    prior written permission. For written permission, please contact\r
81  *    openssl-core@openssl.org.\r
82  *\r
83  * 5. Products derived from this software may not be called "OpenSSL"\r
84  *    nor may "OpenSSL" appear in their names without prior written\r
85  *    permission of the OpenSSL Project.\r
86  *\r
87  * 6. Redistributions of any form whatsoever must retain the following\r
88  *    acknowledgment:\r
89  *    "This product includes software developed by the OpenSSL Project\r
90  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"\r
91  *\r
92  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\r
93  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
94  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
95  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\r
96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
98  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
99  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
103  * OF THE POSSIBILITY OF SUCH DAMAGE.\r
104  * ====================================================================\r
105  *\r
106  * This product includes cryptographic software written by Eric Young\r
107  * (eay@cryptsoft.com).  This product includes software written by Tim\r
108  * Hudson (tjh@cryptsoft.com).\r
109  *\r
110  */\r
111 /* ====================================================================\r
112  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\r
113  *\r
114  * Portions of the attached software ("Contribution") are developed by\r
115  * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.\r
116  *\r
117  * The Contribution is licensed pursuant to the OpenSSL open source\r
118  * license provided above.\r
119  *\r
120  * ECC cipher suite support in OpenSSL originally written by\r
121  * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.\r
122  *\r
123  */\r
124 /* ====================================================================\r
125  * Copyright 2005 Nokia. All rights reserved.\r
126  *\r
127  * The portions of the attached software ("Contribution") is developed by\r
128  * Nokia Corporation and is licensed pursuant to the OpenSSL open source\r
129  * license.\r
130  *\r
131  * The Contribution, originally written by Mika Kousa and Pasi Eronen of\r
132  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites\r
133  * support (see RFC 4279) to OpenSSL.\r
134  *\r
135  * No patent licenses or other rights except those expressly stated in\r
136  * the OpenSSL open source license shall be deemed granted or received\r
137  * expressly, by implication, estoppel, or otherwise.\r
138  *\r
139  * No assurances are provided by Nokia that the Contribution does not\r
140  * infringe the patent or other intellectual property rights of any third\r
141  * party or that the license provides you with all the necessary rights\r
142  * to make use of the Contribution.\r
143  *\r
144  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN\r
145  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA\r
146  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY\r
147  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR\r
148  * OTHERWISE.\r
149  */\r
150 \r
151 #ifndef HEADER_TLS1_H\r
152 # define HEADER_TLS1_H\r
153 \r
154 # include <openssl/buffer.h>\r
155 \r
156 #ifdef  __cplusplus\r
157 extern "C" {\r
158 #endif\r
159 \r
160 # define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES    0\r
161 \r
162 # define TLS1_VERSION                    0x0301\r
163 # define TLS1_1_VERSION                  0x0302\r
164 # define TLS1_2_VERSION                  0x0303\r
165 # define TLS_MAX_VERSION                 TLS1_2_VERSION\r
166 \r
167 # define TLS1_VERSION_MAJOR              0x03\r
168 # define TLS1_VERSION_MINOR              0x01\r
169 \r
170 # define TLS1_1_VERSION_MAJOR            0x03\r
171 # define TLS1_1_VERSION_MINOR            0x02\r
172 \r
173 # define TLS1_2_VERSION_MAJOR            0x03\r
174 # define TLS1_2_VERSION_MINOR            0x03\r
175 \r
176 # define TLS1_get_version(s) \\r
177                 ((s->version >> 8) == TLS1_VERSION_MAJOR ? s->version : 0)\r
178 \r
179 # define TLS1_get_client_version(s) \\r
180                 ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0)\r
181 \r
182 # define TLS1_AD_DECRYPTION_FAILED       21\r
183 # define TLS1_AD_RECORD_OVERFLOW         22\r
184 # define TLS1_AD_UNKNOWN_CA              48/* fatal */\r
185 # define TLS1_AD_ACCESS_DENIED           49/* fatal */\r
186 # define TLS1_AD_DECODE_ERROR            50/* fatal */\r
187 # define TLS1_AD_DECRYPT_ERROR           51\r
188 # define TLS1_AD_EXPORT_RESTRICTION      60/* fatal */\r
189 # define TLS1_AD_PROTOCOL_VERSION        70/* fatal */\r
190 # define TLS1_AD_INSUFFICIENT_SECURITY   71/* fatal */\r
191 # define TLS1_AD_INTERNAL_ERROR          80/* fatal */\r
192 # define TLS1_AD_INAPPROPRIATE_FALLBACK  86/* fatal */\r
193 # define TLS1_AD_USER_CANCELLED          90\r
194 # define TLS1_AD_NO_RENEGOTIATION        100\r
195 /* codes 110-114 are from RFC3546 */\r
196 # define TLS1_AD_UNSUPPORTED_EXTENSION   110\r
197 # define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111\r
198 # define TLS1_AD_UNRECOGNIZED_NAME       112\r
199 # define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113\r
200 # define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114\r
201 # define TLS1_AD_UNKNOWN_PSK_IDENTITY    115/* fatal */\r
202 \r
203 /* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */\r
204 # define TLSEXT_TYPE_server_name                 0\r
205 # define TLSEXT_TYPE_max_fragment_length         1\r
206 # define TLSEXT_TYPE_client_certificate_url      2\r
207 # define TLSEXT_TYPE_trusted_ca_keys             3\r
208 # define TLSEXT_TYPE_truncated_hmac              4\r
209 # define TLSEXT_TYPE_status_request              5\r
210 /* ExtensionType values from RFC4681 */\r
211 # define TLSEXT_TYPE_user_mapping                6\r
212 /* ExtensionType values from RFC5878 */\r
213 # define TLSEXT_TYPE_client_authz                7\r
214 # define TLSEXT_TYPE_server_authz                8\r
215 /* ExtensionType values from RFC6091 */\r
216 # define TLSEXT_TYPE_cert_type           9\r
217 \r
218 /* ExtensionType values from RFC4492 */\r
219 # define TLSEXT_TYPE_elliptic_curves             10\r
220 # define TLSEXT_TYPE_ec_point_formats            11\r
221 \r
222 /* ExtensionType value from RFC5054 */\r
223 # define TLSEXT_TYPE_srp                         12\r
224 \r
225 /* ExtensionType values from RFC5246 */\r
226 # define TLSEXT_TYPE_signature_algorithms        13\r
227 \r
228 /* ExtensionType value from RFC5764 */\r
229 # define TLSEXT_TYPE_use_srtp    14\r
230 \r
231 /* ExtensionType value from RFC5620 */\r
232 # define TLSEXT_TYPE_heartbeat   15\r
233 \r
234 /* ExtensionType value from draft-ietf-tls-applayerprotoneg-00 */\r
235 # define TLSEXT_TYPE_application_layer_protocol_negotiation 16\r
236 \r
237 /*\r
238  * ExtensionType value for TLS padding extension.\r
239  * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml\r
240  * http://tools.ietf.org/html/draft-agl-tls-padding-03\r
241  */\r
242 # define TLSEXT_TYPE_padding     21\r
243 \r
244 /* ExtensionType value from RFC4507 */\r
245 # define TLSEXT_TYPE_session_ticket              35\r
246 \r
247 /* ExtensionType value from draft-rescorla-tls-opaque-prf-input-00.txt */\r
248 # if 0\r
249 /*\r
250  * will have to be provided externally for now ,\r
251  * i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183\r
252  * using whatever extension number you'd like to try\r
253  */\r
254 #  define TLSEXT_TYPE_opaque_prf_input           ??\r
255 # endif\r
256 \r
257 /* Temporary extension type */\r
258 # define TLSEXT_TYPE_renegotiate                 0xff01\r
259 \r
260 # ifndef OPENSSL_NO_NEXTPROTONEG\r
261 /* This is not an IANA defined extension number */\r
262 #  define TLSEXT_TYPE_next_proto_neg              13172\r
263 # endif\r
264 \r
265 /* NameType value from RFC 3546 */\r
266 # define TLSEXT_NAMETYPE_host_name 0\r
267 /* status request value from RFC 3546 */\r
268 # define TLSEXT_STATUSTYPE_ocsp 1\r
269 \r
270 /* ECPointFormat values from draft-ietf-tls-ecc-12 */\r
271 # define TLSEXT_ECPOINTFORMAT_first                      0\r
272 # define TLSEXT_ECPOINTFORMAT_uncompressed               0\r
273 # define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime  1\r
274 # define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2  2\r
275 # define TLSEXT_ECPOINTFORMAT_last                       2\r
276 \r
277 /* Signature and hash algorithms from RFC 5246 */\r
278 \r
279 # define TLSEXT_signature_anonymous                      0\r
280 # define TLSEXT_signature_rsa                            1\r
281 # define TLSEXT_signature_dsa                            2\r
282 # define TLSEXT_signature_ecdsa                          3\r
283 \r
284 /* Total number of different signature algorithms */\r
285 # define TLSEXT_signature_num                            4\r
286 \r
287 # define TLSEXT_hash_none                                0\r
288 # define TLSEXT_hash_md5                                 1\r
289 # define TLSEXT_hash_sha1                                2\r
290 # define TLSEXT_hash_sha224                              3\r
291 # define TLSEXT_hash_sha256                              4\r
292 # define TLSEXT_hash_sha384                              5\r
293 # define TLSEXT_hash_sha512                              6\r
294 \r
295 /* Total number of different digest algorithms */\r
296 \r
297 # define TLSEXT_hash_num                                 7\r
298 \r
299 /* Flag set for unrecognised algorithms */\r
300 # define TLSEXT_nid_unknown                              0x1000000\r
301 \r
302 /* ECC curves */\r
303 \r
304 # define TLSEXT_curve_P_256                              23\r
305 # define TLSEXT_curve_P_384                              24\r
306 \r
307 # ifndef OPENSSL_NO_TLSEXT\r
308 \r
309 #  define TLSEXT_MAXLEN_host_name 255\r
310 \r
311 const char *SSL_get_servername(const SSL *s, const int type);\r
312 int SSL_get_servername_type(const SSL *s);\r
313 /*\r
314  * SSL_export_keying_material exports a value derived from the master secret,\r
315  * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and\r
316  * optional context. (Since a zero length context is allowed, the |use_context|\r
317  * flag controls whether a context is included.) It returns 1 on success and\r
318  * zero otherwise.\r
319  */\r
320 int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,\r
321                                const char *label, size_t llen,\r
322                                const unsigned char *p, size_t plen,\r
323                                int use_context);\r
324 \r
325 int SSL_get_sigalgs(SSL *s, int idx,\r
326                     int *psign, int *phash, int *psignandhash,\r
327                     unsigned char *rsig, unsigned char *rhash);\r
328 \r
329 int SSL_get_shared_sigalgs(SSL *s, int idx,\r
330                            int *psign, int *phash, int *psignandhash,\r
331                            unsigned char *rsig, unsigned char *rhash);\r
332 \r
333 int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain);\r
334 \r
335 #  define SSL_set_tlsext_host_name(s,name) \\r
336 SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name)\r
337 \r
338 #  define SSL_set_tlsext_debug_callback(ssl, cb) \\r
339 SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,(void (*)(void))cb)\r
340 \r
341 #  define SSL_set_tlsext_debug_arg(ssl, arg) \\r
342 SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0, (void *)arg)\r
343 \r
344 #  define SSL_set_tlsext_status_type(ssl, type) \\r
345 SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type, NULL)\r
346 \r
347 #  define SSL_get_tlsext_status_exts(ssl, arg) \\r
348 SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg)\r
349 \r
350 #  define SSL_set_tlsext_status_exts(ssl, arg) \\r
351 SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg)\r
352 \r
353 #  define SSL_get_tlsext_status_ids(ssl, arg) \\r
354 SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg)\r
355 \r
356 #  define SSL_set_tlsext_status_ids(ssl, arg) \\r
357 SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg)\r
358 \r
359 #  define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \\r
360 SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)arg)\r
361 \r
362 #  define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \\r
363 SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen, (void *)arg)\r
364 \r
365 #  define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \\r
366 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb)\r
367 \r
368 #  define SSL_TLSEXT_ERR_OK 0\r
369 #  define SSL_TLSEXT_ERR_ALERT_WARNING 1\r
370 #  define SSL_TLSEXT_ERR_ALERT_FATAL 2\r
371 #  define SSL_TLSEXT_ERR_NOACK 3\r
372 \r
373 #  define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \\r
374 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg)\r
375 \r
376 #  define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \\r
377         SSL_CTX_ctrl((ctx),SSL_CTRL_GET_TLSEXT_TICKET_KEYS,(keylen),(keys))\r
378 #  define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \\r
379         SSL_CTX_ctrl((ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,(keylen),(keys))\r
380 \r
381 #  define SSL_CTX_set_tlsext_status_cb(ssl, cb) \\r
382 SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb)\r
383 \r
384 #  define SSL_CTX_set_tlsext_status_arg(ssl, arg) \\r
385 SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg)\r
386 \r
387 #  define SSL_set_tlsext_opaque_prf_input(s, src, len) \\r
388 SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src)\r
389 #  define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \\r
390 SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb)\r
391 #  define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \\r
392 SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg)\r
393 \r
394 #  define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \\r
395 SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb)\r
396 \r
397 #  ifndef OPENSSL_NO_HEARTBEATS\r
398 #   define SSL_TLSEXT_HB_ENABLED                           0x01\r
399 #   define SSL_TLSEXT_HB_DONT_SEND_REQUESTS        0x02\r
400 #   define SSL_TLSEXT_HB_DONT_RECV_REQUESTS        0x04\r
401 \r
402 #   define SSL_get_tlsext_heartbeat_pending(ssl) \\r
403         SSL_ctrl((ssl),SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING,0,NULL)\r
404 #   define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \\r
405         SSL_ctrl((ssl),SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL)\r
406 #  endif\r
407 # endif\r
408 \r
409 /* PSK ciphersuites from 4279 */\r
410 # define TLS1_CK_PSK_WITH_RC4_128_SHA                    0x0300008A\r
411 # define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA               0x0300008B\r
412 # define TLS1_CK_PSK_WITH_AES_128_CBC_SHA                0x0300008C\r
413 # define TLS1_CK_PSK_WITH_AES_256_CBC_SHA                0x0300008D\r
414 \r
415 /*\r
416  * Additional TLS ciphersuites from expired Internet Draft\r
417  * draft-ietf-tls-56-bit-ciphersuites-01.txt (available if\r
418  * TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see s3_lib.c).  We\r
419  * actually treat them like SSL 3.0 ciphers, which we probably shouldn't.\r
420  * Note that the first two are actually not in the IDs.\r
421  */\r
422 # define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5          0x03000060/* not in\r
423                                                                     * ID */\r
424 # define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5      0x03000061/* not in\r
425                                                                     * ID */\r
426 # define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA         0x03000062\r
427 # define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA     0x03000063\r
428 # define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA          0x03000064\r
429 # define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA      0x03000065\r
430 # define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA                0x03000066\r
431 \r
432 /* AES ciphersuites from RFC3268 */\r
433 \r
434 # define TLS1_CK_RSA_WITH_AES_128_SHA                    0x0300002F\r
435 # define TLS1_CK_DH_DSS_WITH_AES_128_SHA                 0x03000030\r
436 # define TLS1_CK_DH_RSA_WITH_AES_128_SHA                 0x03000031\r
437 # define TLS1_CK_DHE_DSS_WITH_AES_128_SHA                0x03000032\r
438 # define TLS1_CK_DHE_RSA_WITH_AES_128_SHA                0x03000033\r
439 # define TLS1_CK_ADH_WITH_AES_128_SHA                    0x03000034\r
440 \r
441 # define TLS1_CK_RSA_WITH_AES_256_SHA                    0x03000035\r
442 # define TLS1_CK_DH_DSS_WITH_AES_256_SHA                 0x03000036\r
443 # define TLS1_CK_DH_RSA_WITH_AES_256_SHA                 0x03000037\r
444 # define TLS1_CK_DHE_DSS_WITH_AES_256_SHA                0x03000038\r
445 # define TLS1_CK_DHE_RSA_WITH_AES_256_SHA                0x03000039\r
446 # define TLS1_CK_ADH_WITH_AES_256_SHA                    0x0300003A\r
447 \r
448 /* TLS v1.2 ciphersuites */\r
449 # define TLS1_CK_RSA_WITH_NULL_SHA256                    0x0300003B\r
450 # define TLS1_CK_RSA_WITH_AES_128_SHA256                 0x0300003C\r
451 # define TLS1_CK_RSA_WITH_AES_256_SHA256                 0x0300003D\r
452 # define TLS1_CK_DH_DSS_WITH_AES_128_SHA256              0x0300003E\r
453 # define TLS1_CK_DH_RSA_WITH_AES_128_SHA256              0x0300003F\r
454 # define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256             0x03000040\r
455 \r
456 /* Camellia ciphersuites from RFC4132 */\r
457 # define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA           0x03000041\r
458 # define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA        0x03000042\r
459 # define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA        0x03000043\r
460 # define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA       0x03000044\r
461 # define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA       0x03000045\r
462 # define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA           0x03000046\r
463 \r
464 /* TLS v1.2 ciphersuites */\r
465 # define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256             0x03000067\r
466 # define TLS1_CK_DH_DSS_WITH_AES_256_SHA256              0x03000068\r
467 # define TLS1_CK_DH_RSA_WITH_AES_256_SHA256              0x03000069\r
468 # define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256             0x0300006A\r
469 # define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256             0x0300006B\r
470 # define TLS1_CK_ADH_WITH_AES_128_SHA256                 0x0300006C\r
471 # define TLS1_CK_ADH_WITH_AES_256_SHA256                 0x0300006D\r
472 \r
473 /* Camellia ciphersuites from RFC4132 */\r
474 # define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA           0x03000084\r
475 # define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA        0x03000085\r
476 # define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA        0x03000086\r
477 # define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA       0x03000087\r
478 # define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA       0x03000088\r
479 # define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA           0x03000089\r
480 \r
481 /* SEED ciphersuites from RFC4162 */\r
482 # define TLS1_CK_RSA_WITH_SEED_SHA                       0x03000096\r
483 # define TLS1_CK_DH_DSS_WITH_SEED_SHA                    0x03000097\r
484 # define TLS1_CK_DH_RSA_WITH_SEED_SHA                    0x03000098\r
485 # define TLS1_CK_DHE_DSS_WITH_SEED_SHA                   0x03000099\r
486 # define TLS1_CK_DHE_RSA_WITH_SEED_SHA                   0x0300009A\r
487 # define TLS1_CK_ADH_WITH_SEED_SHA                       0x0300009B\r
488 \r
489 /* TLS v1.2 GCM ciphersuites from RFC5288 */\r
490 # define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256             0x0300009C\r
491 # define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384             0x0300009D\r
492 # define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256         0x0300009E\r
493 # define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384         0x0300009F\r
494 # define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256          0x030000A0\r
495 # define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384          0x030000A1\r
496 # define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256         0x030000A2\r
497 # define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384         0x030000A3\r
498 # define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256          0x030000A4\r
499 # define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384          0x030000A5\r
500 # define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256             0x030000A6\r
501 # define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384             0x030000A7\r
502 \r
503 /*\r
504  * ECC ciphersuites from draft-ietf-tls-ecc-12.txt with changes soon to be in\r
505  * draft 13\r
506  */\r
507 # define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA                0x0300C001\r
508 # define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA             0x0300C002\r
509 # define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA        0x0300C003\r
510 # define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA         0x0300C004\r
511 # define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA         0x0300C005\r
512 \r
513 # define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA               0x0300C006\r
514 # define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA            0x0300C007\r
515 # define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA       0x0300C008\r
516 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA        0x0300C009\r
517 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA        0x0300C00A\r
518 \r
519 # define TLS1_CK_ECDH_RSA_WITH_NULL_SHA                  0x0300C00B\r
520 # define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA               0x0300C00C\r
521 # define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA          0x0300C00D\r
522 # define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA           0x0300C00E\r
523 # define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA           0x0300C00F\r
524 \r
525 # define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA                 0x0300C010\r
526 # define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA              0x0300C011\r
527 # define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA         0x0300C012\r
528 # define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA          0x0300C013\r
529 # define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA          0x0300C014\r
530 \r
531 # define TLS1_CK_ECDH_anon_WITH_NULL_SHA                 0x0300C015\r
532 # define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA              0x0300C016\r
533 # define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA         0x0300C017\r
534 # define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA          0x0300C018\r
535 # define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA          0x0300C019\r
536 \r
537 /* SRP ciphersuites from RFC 5054 */\r
538 # define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA           0x0300C01A\r
539 # define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA       0x0300C01B\r
540 # define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA       0x0300C01C\r
541 # define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA            0x0300C01D\r
542 # define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA        0x0300C01E\r
543 # define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA        0x0300C01F\r
544 # define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA            0x0300C020\r
545 # define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA        0x0300C021\r
546 # define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA        0x0300C022\r
547 \r
548 /* ECDH HMAC based ciphersuites from RFC5289 */\r
549 \r
550 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256         0x0300C023\r
551 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384         0x0300C024\r
552 # define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256          0x0300C025\r
553 # define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384          0x0300C026\r
554 # define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256           0x0300C027\r
555 # define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384           0x0300C028\r
556 # define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256            0x0300C029\r
557 # define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384            0x0300C02A\r
558 \r
559 /* ECDH GCM based ciphersuites from RFC5289 */\r
560 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256     0x0300C02B\r
561 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384     0x0300C02C\r
562 # define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256      0x0300C02D\r
563 # define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384      0x0300C02E\r
564 # define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256       0x0300C02F\r
565 # define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384       0x0300C030\r
566 # define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256        0x0300C031\r
567 # define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384        0x0300C032\r
568 \r
569 /*\r
570  * XXX * Backward compatibility alert: + * Older versions of OpenSSL gave\r
571  * some DHE ciphers names with "EDH" + * instead of "DHE".  Going forward, we\r
572  * should be using DHE + * everywhere, though we may indefinitely maintain\r
573  * aliases for users + * or configurations that used "EDH" +\r
574  */\r
575 # define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5         "EXP1024-RC4-MD5"\r
576 # define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5     "EXP1024-RC2-CBC-MD5"\r
577 # define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA        "EXP1024-DES-CBC-SHA"\r
578 # define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA    "EXP1024-DHE-DSS-DES-CBC-SHA"\r
579 # define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA         "EXP1024-RC4-SHA"\r
580 # define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA     "EXP1024-DHE-DSS-RC4-SHA"\r
581 # define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA               "DHE-DSS-RC4-SHA"\r
582 \r
583 /* AES ciphersuites from RFC3268 */\r
584 # define TLS1_TXT_RSA_WITH_AES_128_SHA                   "AES128-SHA"\r
585 # define TLS1_TXT_DH_DSS_WITH_AES_128_SHA                "DH-DSS-AES128-SHA"\r
586 # define TLS1_TXT_DH_RSA_WITH_AES_128_SHA                "DH-RSA-AES128-SHA"\r
587 # define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA               "DHE-DSS-AES128-SHA"\r
588 # define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA               "DHE-RSA-AES128-SHA"\r
589 # define TLS1_TXT_ADH_WITH_AES_128_SHA                   "ADH-AES128-SHA"\r
590 \r
591 # define TLS1_TXT_RSA_WITH_AES_256_SHA                   "AES256-SHA"\r
592 # define TLS1_TXT_DH_DSS_WITH_AES_256_SHA                "DH-DSS-AES256-SHA"\r
593 # define TLS1_TXT_DH_RSA_WITH_AES_256_SHA                "DH-RSA-AES256-SHA"\r
594 # define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA               "DHE-DSS-AES256-SHA"\r
595 # define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA               "DHE-RSA-AES256-SHA"\r
596 # define TLS1_TXT_ADH_WITH_AES_256_SHA                   "ADH-AES256-SHA"\r
597 \r
598 /* ECC ciphersuites from draft-ietf-tls-ecc-01.txt (Mar 15, 2001) */\r
599 # define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA               "ECDH-ECDSA-NULL-SHA"\r
600 # define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA            "ECDH-ECDSA-RC4-SHA"\r
601 # define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA       "ECDH-ECDSA-DES-CBC3-SHA"\r
602 # define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA        "ECDH-ECDSA-AES128-SHA"\r
603 # define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA        "ECDH-ECDSA-AES256-SHA"\r
604 \r
605 # define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA              "ECDHE-ECDSA-NULL-SHA"\r
606 # define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA           "ECDHE-ECDSA-RC4-SHA"\r
607 # define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA      "ECDHE-ECDSA-DES-CBC3-SHA"\r
608 # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA       "ECDHE-ECDSA-AES128-SHA"\r
609 # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA       "ECDHE-ECDSA-AES256-SHA"\r
610 \r
611 # define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA                 "ECDH-RSA-NULL-SHA"\r
612 # define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA              "ECDH-RSA-RC4-SHA"\r
613 # define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA         "ECDH-RSA-DES-CBC3-SHA"\r
614 # define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA          "ECDH-RSA-AES128-SHA"\r
615 # define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA          "ECDH-RSA-AES256-SHA"\r
616 \r
617 # define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA                "ECDHE-RSA-NULL-SHA"\r
618 # define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA             "ECDHE-RSA-RC4-SHA"\r
619 # define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA        "ECDHE-RSA-DES-CBC3-SHA"\r
620 # define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA         "ECDHE-RSA-AES128-SHA"\r
621 # define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA         "ECDHE-RSA-AES256-SHA"\r
622 \r
623 # define TLS1_TXT_ECDH_anon_WITH_NULL_SHA                "AECDH-NULL-SHA"\r
624 # define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA             "AECDH-RC4-SHA"\r
625 # define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA        "AECDH-DES-CBC3-SHA"\r
626 # define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA         "AECDH-AES128-SHA"\r
627 # define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA         "AECDH-AES256-SHA"\r
628 \r
629 /* PSK ciphersuites from RFC 4279 */\r
630 # define TLS1_TXT_PSK_WITH_RC4_128_SHA                   "PSK-RC4-SHA"\r
631 # define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA              "PSK-3DES-EDE-CBC-SHA"\r
632 # define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA               "PSK-AES128-CBC-SHA"\r
633 # define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA               "PSK-AES256-CBC-SHA"\r
634 \r
635 /* SRP ciphersuite from RFC 5054 */\r
636 # define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA          "SRP-3DES-EDE-CBC-SHA"\r
637 # define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA      "SRP-RSA-3DES-EDE-CBC-SHA"\r
638 # define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA      "SRP-DSS-3DES-EDE-CBC-SHA"\r
639 # define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA           "SRP-AES-128-CBC-SHA"\r
640 # define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA       "SRP-RSA-AES-128-CBC-SHA"\r
641 # define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA       "SRP-DSS-AES-128-CBC-SHA"\r
642 # define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA           "SRP-AES-256-CBC-SHA"\r
643 # define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA       "SRP-RSA-AES-256-CBC-SHA"\r
644 # define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA       "SRP-DSS-AES-256-CBC-SHA"\r
645 \r
646 /* Camellia ciphersuites from RFC4132 */\r
647 # define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA          "CAMELLIA128-SHA"\r
648 # define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA       "DH-DSS-CAMELLIA128-SHA"\r
649 # define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA       "DH-RSA-CAMELLIA128-SHA"\r
650 # define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA      "DHE-DSS-CAMELLIA128-SHA"\r
651 # define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA      "DHE-RSA-CAMELLIA128-SHA"\r
652 # define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA          "ADH-CAMELLIA128-SHA"\r
653 \r
654 # define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA          "CAMELLIA256-SHA"\r
655 # define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA       "DH-DSS-CAMELLIA256-SHA"\r
656 # define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA       "DH-RSA-CAMELLIA256-SHA"\r
657 # define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA      "DHE-DSS-CAMELLIA256-SHA"\r
658 # define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA      "DHE-RSA-CAMELLIA256-SHA"\r
659 # define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA          "ADH-CAMELLIA256-SHA"\r
660 \r
661 /* SEED ciphersuites from RFC4162 */\r
662 # define TLS1_TXT_RSA_WITH_SEED_SHA                      "SEED-SHA"\r
663 # define TLS1_TXT_DH_DSS_WITH_SEED_SHA                   "DH-DSS-SEED-SHA"\r
664 # define TLS1_TXT_DH_RSA_WITH_SEED_SHA                   "DH-RSA-SEED-SHA"\r
665 # define TLS1_TXT_DHE_DSS_WITH_SEED_SHA                  "DHE-DSS-SEED-SHA"\r
666 # define TLS1_TXT_DHE_RSA_WITH_SEED_SHA                  "DHE-RSA-SEED-SHA"\r
667 # define TLS1_TXT_ADH_WITH_SEED_SHA                      "ADH-SEED-SHA"\r
668 \r
669 /* TLS v1.2 ciphersuites */\r
670 # define TLS1_TXT_RSA_WITH_NULL_SHA256                   "NULL-SHA256"\r
671 # define TLS1_TXT_RSA_WITH_AES_128_SHA256                "AES128-SHA256"\r
672 # define TLS1_TXT_RSA_WITH_AES_256_SHA256                "AES256-SHA256"\r
673 # define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256             "DH-DSS-AES128-SHA256"\r
674 # define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256             "DH-RSA-AES128-SHA256"\r
675 # define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256            "DHE-DSS-AES128-SHA256"\r
676 # define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256            "DHE-RSA-AES128-SHA256"\r
677 # define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256             "DH-DSS-AES256-SHA256"\r
678 # define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256             "DH-RSA-AES256-SHA256"\r
679 # define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256            "DHE-DSS-AES256-SHA256"\r
680 # define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256            "DHE-RSA-AES256-SHA256"\r
681 # define TLS1_TXT_ADH_WITH_AES_128_SHA256                "ADH-AES128-SHA256"\r
682 # define TLS1_TXT_ADH_WITH_AES_256_SHA256                "ADH-AES256-SHA256"\r
683 \r
684 /* TLS v1.2 GCM ciphersuites from RFC5288 */\r
685 # define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256            "AES128-GCM-SHA256"\r
686 # define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384            "AES256-GCM-SHA384"\r
687 # define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256        "DHE-RSA-AES128-GCM-SHA256"\r
688 # define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384        "DHE-RSA-AES256-GCM-SHA384"\r
689 # define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256         "DH-RSA-AES128-GCM-SHA256"\r
690 # define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384         "DH-RSA-AES256-GCM-SHA384"\r
691 # define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256        "DHE-DSS-AES128-GCM-SHA256"\r
692 # define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384        "DHE-DSS-AES256-GCM-SHA384"\r
693 # define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256         "DH-DSS-AES128-GCM-SHA256"\r
694 # define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384         "DH-DSS-AES256-GCM-SHA384"\r
695 # define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256            "ADH-AES128-GCM-SHA256"\r
696 # define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384            "ADH-AES256-GCM-SHA384"\r
697 \r
698 /* ECDH HMAC based ciphersuites from RFC5289 */\r
699 \r
700 # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256    "ECDHE-ECDSA-AES128-SHA256"\r
701 # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384    "ECDHE-ECDSA-AES256-SHA384"\r
702 # define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256     "ECDH-ECDSA-AES128-SHA256"\r
703 # define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384     "ECDH-ECDSA-AES256-SHA384"\r
704 # define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256      "ECDHE-RSA-AES128-SHA256"\r
705 # define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384      "ECDHE-RSA-AES256-SHA384"\r
706 # define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256       "ECDH-RSA-AES128-SHA256"\r
707 # define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384       "ECDH-RSA-AES256-SHA384"\r
708 \r
709 /* ECDH GCM based ciphersuites from RFC5289 */\r
710 # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256    "ECDHE-ECDSA-AES128-GCM-SHA256"\r
711 # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384    "ECDHE-ECDSA-AES256-GCM-SHA384"\r
712 # define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256     "ECDH-ECDSA-AES128-GCM-SHA256"\r
713 # define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384     "ECDH-ECDSA-AES256-GCM-SHA384"\r
714 # define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256      "ECDHE-RSA-AES128-GCM-SHA256"\r
715 # define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384      "ECDHE-RSA-AES256-GCM-SHA384"\r
716 # define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256       "ECDH-RSA-AES128-GCM-SHA256"\r
717 # define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384       "ECDH-RSA-AES256-GCM-SHA384"\r
718 \r
719 # define TLS_CT_RSA_SIGN                 1\r
720 # define TLS_CT_DSS_SIGN                 2\r
721 # define TLS_CT_RSA_FIXED_DH             3\r
722 # define TLS_CT_DSS_FIXED_DH             4\r
723 # define TLS_CT_ECDSA_SIGN               64\r
724 # define TLS_CT_RSA_FIXED_ECDH           65\r
725 # define TLS_CT_ECDSA_FIXED_ECDH         66\r
726 # define TLS_CT_GOST94_SIGN              21\r
727 # define TLS_CT_GOST01_SIGN              22\r
728 /*\r
729  * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see\r
730  * comment there)\r
731  */\r
732 # define TLS_CT_NUMBER                   9\r
733 \r
734 # define TLS1_FINISH_MAC_LENGTH          12\r
735 \r
736 # define TLS_MD_MAX_CONST_SIZE                   20\r
737 # define TLS_MD_CLIENT_FINISH_CONST              "client finished"\r
738 # define TLS_MD_CLIENT_FINISH_CONST_SIZE         15\r
739 # define TLS_MD_SERVER_FINISH_CONST              "server finished"\r
740 # define TLS_MD_SERVER_FINISH_CONST_SIZE         15\r
741 # define TLS_MD_SERVER_WRITE_KEY_CONST           "server write key"\r
742 # define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE      16\r
743 # define TLS_MD_KEY_EXPANSION_CONST              "key expansion"\r
744 # define TLS_MD_KEY_EXPANSION_CONST_SIZE         13\r
745 # define TLS_MD_CLIENT_WRITE_KEY_CONST           "client write key"\r
746 # define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE      16\r
747 # define TLS_MD_SERVER_WRITE_KEY_CONST           "server write key"\r
748 # define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE      16\r
749 # define TLS_MD_IV_BLOCK_CONST                   "IV block"\r
750 # define TLS_MD_IV_BLOCK_CONST_SIZE              8\r
751 # define TLS_MD_MASTER_SECRET_CONST              "master secret"\r
752 # define TLS_MD_MASTER_SECRET_CONST_SIZE         13\r
753 \r
754 # ifdef CHARSET_EBCDIC\r
755 #  undef TLS_MD_CLIENT_FINISH_CONST\r
756 /*\r
757  * client finished\r
758  */\r
759 #  define TLS_MD_CLIENT_FINISH_CONST    "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64"\r
760 \r
761 #  undef TLS_MD_SERVER_FINISH_CONST\r
762 /*\r
763  * server finished\r
764  */\r
765 #  define TLS_MD_SERVER_FINISH_CONST    "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64"\r
766 \r
767 #  undef TLS_MD_SERVER_WRITE_KEY_CONST\r
768 /*\r
769  * server write key\r
770  */\r
771 #  define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79"\r
772 \r
773 #  undef TLS_MD_KEY_EXPANSION_CONST\r
774 /*\r
775  * key expansion\r
776  */\r
777 #  define TLS_MD_KEY_EXPANSION_CONST    "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e"\r
778 \r
779 #  undef TLS_MD_CLIENT_WRITE_KEY_CONST\r
780 /*\r
781  * client write key\r
782  */\r
783 #  define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79"\r
784 \r
785 #  undef TLS_MD_SERVER_WRITE_KEY_CONST\r
786 /*\r
787  * server write key\r
788  */\r
789 #  define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79"\r
790 \r
791 #  undef TLS_MD_IV_BLOCK_CONST\r
792 /*\r
793  * IV block\r
794  */\r
795 #  define TLS_MD_IV_BLOCK_CONST         "\x49\x56\x20\x62\x6c\x6f\x63\x6b"\r
796 \r
797 #  undef TLS_MD_MASTER_SECRET_CONST\r
798 /*\r
799  * master secret\r
800  */\r
801 #  define TLS_MD_MASTER_SECRET_CONST    "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74"\r
802 # endif\r
803 \r
804 /* TLS Session Ticket extension struct */\r
805 struct tls_session_ticket_ext_st {\r
806     unsigned short length;\r
807     void *data;\r
808 };\r
809 \r
810 #ifdef  __cplusplus\r
811 }\r
812 #endif\r
813 #endif\r