s3_lib.c revision 1.2 1 1.1 christos /* ssl/s3_lib.c */
2 1.1 christos /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
3 1.1 christos * All rights reserved.
4 1.1 christos *
5 1.1 christos * This package is an SSL implementation written
6 1.1 christos * by Eric Young (eay (at) cryptsoft.com).
7 1.1 christos * The implementation was written so as to conform with Netscapes SSL.
8 1.1 christos *
9 1.1 christos * This library is free for commercial and non-commercial use as long as
10 1.1 christos * the following conditions are aheared to. The following conditions
11 1.1 christos * apply to all code found in this distribution, be it the RC4, RSA,
12 1.1 christos * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 1.1 christos * included with this distribution is covered by the same copyright terms
14 1.1 christos * except that the holder is Tim Hudson (tjh (at) cryptsoft.com).
15 1.1 christos *
16 1.1 christos * Copyright remains Eric Young's, and as such any Copyright notices in
17 1.1 christos * the code are not to be removed.
18 1.1 christos * If this package is used in a product, Eric Young should be given attribution
19 1.1 christos * as the author of the parts of the library used.
20 1.1 christos * This can be in the form of a textual message at program startup or
21 1.1 christos * in documentation (online or textual) provided with the package.
22 1.1 christos *
23 1.1 christos * Redistribution and use in source and binary forms, with or without
24 1.1 christos * modification, are permitted provided that the following conditions
25 1.1 christos * are met:
26 1.1 christos * 1. Redistributions of source code must retain the copyright
27 1.1 christos * notice, this list of conditions and the following disclaimer.
28 1.1 christos * 2. Redistributions in binary form must reproduce the above copyright
29 1.1 christos * notice, this list of conditions and the following disclaimer in the
30 1.1 christos * documentation and/or other materials provided with the distribution.
31 1.1 christos * 3. All advertising materials mentioning features or use of this software
32 1.1 christos * must display the following acknowledgement:
33 1.1 christos * "This product includes cryptographic software written by
34 1.1 christos * Eric Young (eay (at) cryptsoft.com)"
35 1.1 christos * The word 'cryptographic' can be left out if the rouines from the library
36 1.1 christos * being used are not cryptographic related :-).
37 1.1 christos * 4. If you include any Windows specific code (or a derivative thereof) from
38 1.1 christos * the apps directory (application code) you must include an acknowledgement:
39 1.1 christos * "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)"
40 1.1 christos *
41 1.1 christos * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 1.1 christos * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 1.1 christos * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 1.1 christos * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 1.1 christos * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 1.1 christos * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 1.1 christos * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 1.1 christos * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 1.1 christos * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 1.1 christos * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 1.1 christos * SUCH DAMAGE.
52 1.1 christos *
53 1.1 christos * The licence and distribution terms for any publically available version or
54 1.1 christos * derivative of this code cannot be changed. i.e. this code cannot simply be
55 1.1 christos * copied and put under another distribution licence
56 1.1 christos * [including the GNU Public Licence.]
57 1.1 christos */
58 1.1 christos /* ====================================================================
59 1.1 christos * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
60 1.1 christos *
61 1.1 christos * Redistribution and use in source and binary forms, with or without
62 1.1 christos * modification, are permitted provided that the following conditions
63 1.1 christos * are met:
64 1.1 christos *
65 1.1 christos * 1. Redistributions of source code must retain the above copyright
66 1.1 christos * notice, this list of conditions and the following disclaimer.
67 1.1 christos *
68 1.1 christos * 2. Redistributions in binary form must reproduce the above copyright
69 1.1 christos * notice, this list of conditions and the following disclaimer in
70 1.1 christos * the documentation and/or other materials provided with the
71 1.1 christos * distribution.
72 1.1 christos *
73 1.1 christos * 3. All advertising materials mentioning features or use of this
74 1.1 christos * software must display the following acknowledgment:
75 1.1 christos * "This product includes software developed by the OpenSSL Project
76 1.1 christos * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 1.1 christos *
78 1.1 christos * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 1.1 christos * endorse or promote products derived from this software without
80 1.1 christos * prior written permission. For written permission, please contact
81 1.1 christos * openssl-core (at) openssl.org.
82 1.1 christos *
83 1.1 christos * 5. Products derived from this software may not be called "OpenSSL"
84 1.1 christos * nor may "OpenSSL" appear in their names without prior written
85 1.1 christos * permission of the OpenSSL Project.
86 1.1 christos *
87 1.1 christos * 6. Redistributions of any form whatsoever must retain the following
88 1.1 christos * acknowledgment:
89 1.1 christos * "This product includes software developed by the OpenSSL Project
90 1.1 christos * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 1.1 christos *
92 1.1 christos * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 1.1 christos * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 1.1 christos * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 1.1 christos * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 1.1 christos * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 1.1 christos * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 1.1 christos * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 1.1 christos * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 1.1 christos * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 1.1 christos * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 1.1 christos * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 1.1 christos * OF THE POSSIBILITY OF SUCH DAMAGE.
104 1.1 christos * ====================================================================
105 1.1 christos *
106 1.1 christos * This product includes cryptographic software written by Eric Young
107 1.1 christos * (eay (at) cryptsoft.com). This product includes software written by Tim
108 1.1 christos * Hudson (tjh (at) cryptsoft.com).
109 1.1 christos *
110 1.1 christos */
111 1.1 christos /* ====================================================================
112 1.1 christos * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113 1.1 christos *
114 1.1 christos * Portions of the attached software ("Contribution") are developed by
115 1.1 christos * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
116 1.1 christos *
117 1.1 christos * The Contribution is licensed pursuant to the OpenSSL open source
118 1.1 christos * license provided above.
119 1.1 christos *
120 1.1 christos * ECC cipher suite support in OpenSSL originally written by
121 1.1 christos * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
122 1.1 christos *
123 1.1 christos */
124 1.1 christos /* ====================================================================
125 1.1 christos * Copyright 2005 Nokia. All rights reserved.
126 1.1 christos *
127 1.1 christos * The portions of the attached software ("Contribution") is developed by
128 1.1 christos * Nokia Corporation and is licensed pursuant to the OpenSSL open source
129 1.1 christos * license.
130 1.1 christos *
131 1.1 christos * The Contribution, originally written by Mika Kousa and Pasi Eronen of
132 1.1 christos * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
133 1.1 christos * support (see RFC 4279) to OpenSSL.
134 1.1 christos *
135 1.1 christos * No patent licenses or other rights except those expressly stated in
136 1.1 christos * the OpenSSL open source license shall be deemed granted or received
137 1.1 christos * expressly, by implication, estoppel, or otherwise.
138 1.1 christos *
139 1.1 christos * No assurances are provided by Nokia that the Contribution does not
140 1.1 christos * infringe the patent or other intellectual property rights of any third
141 1.1 christos * party or that the license provides you with all the necessary rights
142 1.1 christos * to make use of the Contribution.
143 1.1 christos *
144 1.1 christos * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
145 1.1 christos * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
146 1.1 christos * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
147 1.1 christos * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
148 1.1 christos * OTHERWISE.
149 1.1 christos */
150 1.1 christos
151 1.1 christos #include <stdio.h>
152 1.1 christos #include <openssl/objects.h>
153 1.1 christos #include "ssl_locl.h"
154 1.1 christos #include "kssl_lcl.h"
155 1.1 christos #ifndef OPENSSL_NO_TLSEXT
156 1.1 christos #ifndef OPENSSL_NO_EC
157 1.1 christos #include "../crypto/ec/ec_lcl.h"
158 1.1 christos #endif /* OPENSSL_NO_EC */
159 1.1 christos #endif /* OPENSSL_NO_TLSEXT */
160 1.1 christos #include <openssl/md5.h>
161 1.1 christos #ifndef OPENSSL_NO_DH
162 1.1 christos #include <openssl/dh.h>
163 1.1 christos #endif
164 1.1 christos
165 1.1 christos const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT;
166 1.1 christos
167 1.1 christos #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
168 1.1 christos
169 1.1 christos /* list of available SSLv3 ciphers (sorted by id) */
170 1.1 christos OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
171 1.1 christos
172 1.1 christos /* The RSA ciphers */
173 1.1 christos /* Cipher 01 */
174 1.1 christos {
175 1.1 christos 1,
176 1.1 christos SSL3_TXT_RSA_NULL_MD5,
177 1.1 christos SSL3_CK_RSA_NULL_MD5,
178 1.1 christos SSL_kRSA,
179 1.1 christos SSL_aRSA,
180 1.1 christos SSL_eNULL,
181 1.1 christos SSL_MD5,
182 1.1 christos SSL_SSLV3,
183 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
184 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
185 1.1 christos 0,
186 1.1 christos 0,
187 1.1 christos },
188 1.1 christos
189 1.1 christos /* Cipher 02 */
190 1.1 christos {
191 1.1 christos 1,
192 1.1 christos SSL3_TXT_RSA_NULL_SHA,
193 1.1 christos SSL3_CK_RSA_NULL_SHA,
194 1.1 christos SSL_kRSA,
195 1.1 christos SSL_aRSA,
196 1.1 christos SSL_eNULL,
197 1.1 christos SSL_SHA1,
198 1.1 christos SSL_SSLV3,
199 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
200 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
201 1.1 christos 0,
202 1.1 christos 0,
203 1.1 christos },
204 1.1 christos
205 1.1 christos /* Cipher 03 */
206 1.1 christos {
207 1.1 christos 1,
208 1.1 christos SSL3_TXT_RSA_RC4_40_MD5,
209 1.1 christos SSL3_CK_RSA_RC4_40_MD5,
210 1.1 christos SSL_kRSA,
211 1.1 christos SSL_aRSA,
212 1.1 christos SSL_RC4,
213 1.1 christos SSL_MD5,
214 1.1 christos SSL_SSLV3,
215 1.1 christos SSL_EXPORT|SSL_EXP40,
216 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
217 1.1 christos 40,
218 1.1 christos 128,
219 1.1 christos },
220 1.1 christos
221 1.1 christos /* Cipher 04 */
222 1.1 christos {
223 1.1 christos 1,
224 1.1 christos SSL3_TXT_RSA_RC4_128_MD5,
225 1.1 christos SSL3_CK_RSA_RC4_128_MD5,
226 1.1 christos SSL_kRSA,
227 1.1 christos SSL_aRSA,
228 1.1 christos SSL_RC4,
229 1.1 christos SSL_MD5,
230 1.1 christos SSL_SSLV3,
231 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
232 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
233 1.1 christos 128,
234 1.1 christos 128,
235 1.1 christos },
236 1.1 christos
237 1.1 christos /* Cipher 05 */
238 1.1 christos {
239 1.1 christos 1,
240 1.1 christos SSL3_TXT_RSA_RC4_128_SHA,
241 1.1 christos SSL3_CK_RSA_RC4_128_SHA,
242 1.1 christos SSL_kRSA,
243 1.1 christos SSL_aRSA,
244 1.1 christos SSL_RC4,
245 1.1 christos SSL_SHA1,
246 1.1 christos SSL_SSLV3,
247 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
248 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
249 1.1 christos 128,
250 1.1 christos 128,
251 1.1 christos },
252 1.1 christos
253 1.1 christos /* Cipher 06 */
254 1.1 christos {
255 1.1 christos 1,
256 1.1 christos SSL3_TXT_RSA_RC2_40_MD5,
257 1.1 christos SSL3_CK_RSA_RC2_40_MD5,
258 1.1 christos SSL_kRSA,
259 1.1 christos SSL_aRSA,
260 1.1 christos SSL_RC2,
261 1.1 christos SSL_MD5,
262 1.1 christos SSL_SSLV3,
263 1.1 christos SSL_EXPORT|SSL_EXP40,
264 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
265 1.1 christos 40,
266 1.1 christos 128,
267 1.1 christos },
268 1.1 christos
269 1.1 christos /* Cipher 07 */
270 1.1 christos #ifndef OPENSSL_NO_IDEA
271 1.1 christos {
272 1.1 christos 1,
273 1.1 christos SSL3_TXT_RSA_IDEA_128_SHA,
274 1.1 christos SSL3_CK_RSA_IDEA_128_SHA,
275 1.1 christos SSL_kRSA,
276 1.1 christos SSL_aRSA,
277 1.1 christos SSL_IDEA,
278 1.1 christos SSL_SHA1,
279 1.1 christos SSL_SSLV3,
280 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
281 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
282 1.1 christos 128,
283 1.1 christos 128,
284 1.1 christos },
285 1.1 christos #endif
286 1.1 christos
287 1.1 christos /* Cipher 08 */
288 1.1 christos {
289 1.1 christos 1,
290 1.1 christos SSL3_TXT_RSA_DES_40_CBC_SHA,
291 1.1 christos SSL3_CK_RSA_DES_40_CBC_SHA,
292 1.1 christos SSL_kRSA,
293 1.1 christos SSL_aRSA,
294 1.1 christos SSL_DES,
295 1.1 christos SSL_SHA1,
296 1.1 christos SSL_SSLV3,
297 1.1 christos SSL_EXPORT|SSL_EXP40,
298 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
299 1.1 christos 40,
300 1.1 christos 56,
301 1.1 christos },
302 1.1 christos
303 1.1 christos /* Cipher 09 */
304 1.1 christos {
305 1.1 christos 1,
306 1.1 christos SSL3_TXT_RSA_DES_64_CBC_SHA,
307 1.1 christos SSL3_CK_RSA_DES_64_CBC_SHA,
308 1.1 christos SSL_kRSA,
309 1.1 christos SSL_aRSA,
310 1.1 christos SSL_DES,
311 1.1 christos SSL_SHA1,
312 1.1 christos SSL_SSLV3,
313 1.1 christos SSL_NOT_EXP|SSL_LOW,
314 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
315 1.1 christos 56,
316 1.1 christos 56,
317 1.1 christos },
318 1.1 christos
319 1.1 christos /* Cipher 0A */
320 1.1 christos {
321 1.1 christos 1,
322 1.1 christos SSL3_TXT_RSA_DES_192_CBC3_SHA,
323 1.1 christos SSL3_CK_RSA_DES_192_CBC3_SHA,
324 1.1 christos SSL_kRSA,
325 1.1 christos SSL_aRSA,
326 1.1 christos SSL_3DES,
327 1.1 christos SSL_SHA1,
328 1.1 christos SSL_SSLV3,
329 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
330 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
331 1.1 christos 168,
332 1.1 christos 168,
333 1.1 christos },
334 1.1 christos
335 1.1 christos /* The DH ciphers */
336 1.1 christos /* Cipher 0B */
337 1.1 christos {
338 1.1 christos 0,
339 1.1 christos SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
340 1.1 christos SSL3_CK_DH_DSS_DES_40_CBC_SHA,
341 1.1 christos SSL_kDHd,
342 1.1 christos SSL_aDH,
343 1.1 christos SSL_DES,
344 1.1 christos SSL_SHA1,
345 1.1 christos SSL_SSLV3,
346 1.1 christos SSL_EXPORT|SSL_EXP40,
347 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
348 1.1 christos 40,
349 1.1 christos 56,
350 1.1 christos },
351 1.1 christos
352 1.1 christos /* Cipher 0C */
353 1.1 christos {
354 1.1 christos 0, /* not implemented (non-ephemeral DH) */
355 1.1 christos SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
356 1.1 christos SSL3_CK_DH_DSS_DES_64_CBC_SHA,
357 1.1 christos SSL_kDHd,
358 1.1 christos SSL_aDH,
359 1.1 christos SSL_DES,
360 1.1 christos SSL_SHA1,
361 1.1 christos SSL_SSLV3,
362 1.1 christos SSL_NOT_EXP|SSL_LOW,
363 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
364 1.1 christos 56,
365 1.1 christos 56,
366 1.1 christos },
367 1.1 christos
368 1.1 christos /* Cipher 0D */
369 1.1 christos {
370 1.1 christos 0, /* not implemented (non-ephemeral DH) */
371 1.1 christos SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
372 1.1 christos SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
373 1.1 christos SSL_kDHd,
374 1.1 christos SSL_aDH,
375 1.1 christos SSL_3DES,
376 1.1 christos SSL_SHA1,
377 1.1 christos SSL_SSLV3,
378 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
379 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
380 1.1 christos 168,
381 1.1 christos 168,
382 1.1 christos },
383 1.1 christos
384 1.1 christos /* Cipher 0E */
385 1.1 christos {
386 1.1 christos 0, /* not implemented (non-ephemeral DH) */
387 1.1 christos SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
388 1.1 christos SSL3_CK_DH_RSA_DES_40_CBC_SHA,
389 1.1 christos SSL_kDHr,
390 1.1 christos SSL_aDH,
391 1.1 christos SSL_DES,
392 1.1 christos SSL_SHA1,
393 1.1 christos SSL_SSLV3,
394 1.1 christos SSL_EXPORT|SSL_EXP40,
395 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
396 1.1 christos 40,
397 1.1 christos 56,
398 1.1 christos },
399 1.1 christos
400 1.1 christos /* Cipher 0F */
401 1.1 christos {
402 1.1 christos 0, /* not implemented (non-ephemeral DH) */
403 1.1 christos SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
404 1.1 christos SSL3_CK_DH_RSA_DES_64_CBC_SHA,
405 1.1 christos SSL_kDHr,
406 1.1 christos SSL_aDH,
407 1.1 christos SSL_DES,
408 1.1 christos SSL_SHA1,
409 1.1 christos SSL_SSLV3,
410 1.1 christos SSL_NOT_EXP|SSL_LOW,
411 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
412 1.1 christos 56,
413 1.1 christos 56,
414 1.1 christos },
415 1.1 christos
416 1.1 christos /* Cipher 10 */
417 1.1 christos {
418 1.1 christos 0, /* not implemented (non-ephemeral DH) */
419 1.1 christos SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
420 1.1 christos SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
421 1.1 christos SSL_kDHr,
422 1.1 christos SSL_aDH,
423 1.1 christos SSL_3DES,
424 1.1 christos SSL_SHA1,
425 1.1 christos SSL_SSLV3,
426 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
427 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
428 1.1 christos 168,
429 1.1 christos 168,
430 1.1 christos },
431 1.1 christos
432 1.1 christos /* The Ephemeral DH ciphers */
433 1.1 christos /* Cipher 11 */
434 1.1 christos {
435 1.1 christos 1,
436 1.1 christos SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
437 1.1 christos SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
438 1.1 christos SSL_kEDH,
439 1.1 christos SSL_aDSS,
440 1.1 christos SSL_DES,
441 1.1 christos SSL_SHA1,
442 1.1 christos SSL_SSLV3,
443 1.1 christos SSL_EXPORT|SSL_EXP40,
444 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
445 1.1 christos 40,
446 1.1 christos 56,
447 1.1 christos },
448 1.1 christos
449 1.1 christos /* Cipher 12 */
450 1.1 christos {
451 1.1 christos 1,
452 1.1 christos SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
453 1.1 christos SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
454 1.1 christos SSL_kEDH,
455 1.1 christos SSL_aDSS,
456 1.1 christos SSL_DES,
457 1.1 christos SSL_SHA1,
458 1.1 christos SSL_SSLV3,
459 1.1 christos SSL_NOT_EXP|SSL_LOW,
460 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
461 1.1 christos 56,
462 1.1 christos 56,
463 1.1 christos },
464 1.1 christos
465 1.1 christos /* Cipher 13 */
466 1.1 christos {
467 1.1 christos 1,
468 1.1 christos SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
469 1.1 christos SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
470 1.1 christos SSL_kEDH,
471 1.1 christos SSL_aDSS,
472 1.1 christos SSL_3DES,
473 1.1 christos SSL_SHA1,
474 1.1 christos SSL_SSLV3,
475 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
476 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
477 1.1 christos 168,
478 1.1 christos 168,
479 1.1 christos },
480 1.1 christos
481 1.1 christos /* Cipher 14 */
482 1.1 christos {
483 1.1 christos 1,
484 1.1 christos SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
485 1.1 christos SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
486 1.1 christos SSL_kEDH,
487 1.1 christos SSL_aRSA,
488 1.1 christos SSL_DES,
489 1.1 christos SSL_SHA1,
490 1.1 christos SSL_SSLV3,
491 1.1 christos SSL_EXPORT|SSL_EXP40,
492 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
493 1.1 christos 40,
494 1.1 christos 56,
495 1.1 christos },
496 1.1 christos
497 1.1 christos /* Cipher 15 */
498 1.1 christos {
499 1.1 christos 1,
500 1.1 christos SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
501 1.1 christos SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
502 1.1 christos SSL_kEDH,
503 1.1 christos SSL_aRSA,
504 1.1 christos SSL_DES,
505 1.1 christos SSL_SHA1,
506 1.1 christos SSL_SSLV3,
507 1.1 christos SSL_NOT_EXP|SSL_LOW,
508 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
509 1.1 christos 56,
510 1.1 christos 56,
511 1.1 christos },
512 1.1 christos
513 1.1 christos /* Cipher 16 */
514 1.1 christos {
515 1.1 christos 1,
516 1.1 christos SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
517 1.1 christos SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
518 1.1 christos SSL_kEDH,
519 1.1 christos SSL_aRSA,
520 1.1 christos SSL_3DES,
521 1.1 christos SSL_SHA1,
522 1.1 christos SSL_SSLV3,
523 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
524 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
525 1.1 christos 168,
526 1.1 christos 168,
527 1.1 christos },
528 1.1 christos
529 1.1 christos /* Cipher 17 */
530 1.1 christos {
531 1.1 christos 1,
532 1.1 christos SSL3_TXT_ADH_RC4_40_MD5,
533 1.1 christos SSL3_CK_ADH_RC4_40_MD5,
534 1.1 christos SSL_kEDH,
535 1.1 christos SSL_aNULL,
536 1.1 christos SSL_RC4,
537 1.1 christos SSL_MD5,
538 1.1 christos SSL_SSLV3,
539 1.1 christos SSL_EXPORT|SSL_EXP40,
540 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
541 1.1 christos 40,
542 1.1 christos 128,
543 1.1 christos },
544 1.1 christos
545 1.1 christos /* Cipher 18 */
546 1.1 christos {
547 1.1 christos 1,
548 1.1 christos SSL3_TXT_ADH_RC4_128_MD5,
549 1.1 christos SSL3_CK_ADH_RC4_128_MD5,
550 1.1 christos SSL_kEDH,
551 1.1 christos SSL_aNULL,
552 1.1 christos SSL_RC4,
553 1.1 christos SSL_MD5,
554 1.1 christos SSL_SSLV3,
555 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
556 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
557 1.1 christos 128,
558 1.1 christos 128,
559 1.1 christos },
560 1.1 christos
561 1.1 christos /* Cipher 19 */
562 1.1 christos {
563 1.1 christos 1,
564 1.1 christos SSL3_TXT_ADH_DES_40_CBC_SHA,
565 1.1 christos SSL3_CK_ADH_DES_40_CBC_SHA,
566 1.1 christos SSL_kEDH,
567 1.1 christos SSL_aNULL,
568 1.1 christos SSL_DES,
569 1.1 christos SSL_SHA1,
570 1.1 christos SSL_SSLV3,
571 1.1 christos SSL_EXPORT|SSL_EXP40,
572 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
573 1.1 christos 40,
574 1.1 christos 128,
575 1.1 christos },
576 1.1 christos
577 1.1 christos /* Cipher 1A */
578 1.1 christos {
579 1.1 christos 1,
580 1.1 christos SSL3_TXT_ADH_DES_64_CBC_SHA,
581 1.1 christos SSL3_CK_ADH_DES_64_CBC_SHA,
582 1.1 christos SSL_kEDH,
583 1.1 christos SSL_aNULL,
584 1.1 christos SSL_DES,
585 1.1 christos SSL_SHA1,
586 1.1 christos SSL_SSLV3,
587 1.1 christos SSL_NOT_EXP|SSL_LOW,
588 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
589 1.1 christos 56,
590 1.1 christos 56,
591 1.1 christos },
592 1.1 christos
593 1.1 christos /* Cipher 1B */
594 1.1 christos {
595 1.1 christos 1,
596 1.1 christos SSL3_TXT_ADH_DES_192_CBC_SHA,
597 1.1 christos SSL3_CK_ADH_DES_192_CBC_SHA,
598 1.1 christos SSL_kEDH,
599 1.1 christos SSL_aNULL,
600 1.1 christos SSL_3DES,
601 1.1 christos SSL_SHA1,
602 1.1 christos SSL_SSLV3,
603 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
604 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
605 1.1 christos 168,
606 1.1 christos 168,
607 1.1 christos },
608 1.1 christos
609 1.1 christos /* Fortezza ciphersuite from SSL 3.0 spec */
610 1.1 christos #if 0
611 1.1 christos /* Cipher 1C */
612 1.1 christos {
613 1.1 christos 0,
614 1.1 christos SSL3_TXT_FZA_DMS_NULL_SHA,
615 1.1 christos SSL3_CK_FZA_DMS_NULL_SHA,
616 1.1 christos SSL_kFZA,
617 1.1 christos SSL_aFZA,
618 1.1 christos SSL_eNULL,
619 1.1 christos SSL_SHA1,
620 1.1 christos SSL_SSLV3,
621 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
622 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
623 1.1 christos 0,
624 1.1 christos 0,
625 1.1 christos },
626 1.1 christos
627 1.1 christos /* Cipher 1D */
628 1.1 christos {
629 1.1 christos 0,
630 1.1 christos SSL3_TXT_FZA_DMS_FZA_SHA,
631 1.1 christos SSL3_CK_FZA_DMS_FZA_SHA,
632 1.1 christos SSL_kFZA,
633 1.1 christos SSL_aFZA,
634 1.1 christos SSL_eFZA,
635 1.1 christos SSL_SHA1,
636 1.1 christos SSL_SSLV3,
637 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
638 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
639 1.1 christos 0,
640 1.1 christos 0,
641 1.1 christos },
642 1.1 christos
643 1.1 christos /* Cipher 1E */
644 1.1 christos {
645 1.1 christos 0,
646 1.1 christos SSL3_TXT_FZA_DMS_RC4_SHA,
647 1.1 christos SSL3_CK_FZA_DMS_RC4_SHA,
648 1.1 christos SSL_kFZA,
649 1.1 christos SSL_aFZA,
650 1.1 christos SSL_RC4,
651 1.1 christos SSL_SHA1,
652 1.1 christos SSL_SSLV3,
653 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
654 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
655 1.1 christos 128,
656 1.1 christos 128,
657 1.1 christos },
658 1.1 christos #endif
659 1.1 christos
660 1.1 christos #ifndef OPENSSL_NO_KRB5
661 1.1 christos /* The Kerberos ciphers*/
662 1.1 christos /* Cipher 1E */
663 1.1 christos {
664 1.1 christos 1,
665 1.1 christos SSL3_TXT_KRB5_DES_64_CBC_SHA,
666 1.1 christos SSL3_CK_KRB5_DES_64_CBC_SHA,
667 1.1 christos SSL_kKRB5,
668 1.1 christos SSL_aKRB5,
669 1.1 christos SSL_DES,
670 1.1 christos SSL_SHA1,
671 1.1 christos SSL_SSLV3,
672 1.1 christos SSL_NOT_EXP|SSL_LOW,
673 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
674 1.1 christos 56,
675 1.1 christos 56,
676 1.1 christos },
677 1.1 christos
678 1.1 christos /* Cipher 1F */
679 1.1 christos {
680 1.1 christos 1,
681 1.1 christos SSL3_TXT_KRB5_DES_192_CBC3_SHA,
682 1.1 christos SSL3_CK_KRB5_DES_192_CBC3_SHA,
683 1.1 christos SSL_kKRB5,
684 1.1 christos SSL_aKRB5,
685 1.1 christos SSL_3DES,
686 1.1 christos SSL_SHA1,
687 1.1 christos SSL_SSLV3,
688 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
689 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
690 1.1 christos 168,
691 1.1 christos 168,
692 1.1 christos },
693 1.1 christos
694 1.1 christos /* Cipher 20 */
695 1.1 christos {
696 1.1 christos 1,
697 1.1 christos SSL3_TXT_KRB5_RC4_128_SHA,
698 1.1 christos SSL3_CK_KRB5_RC4_128_SHA,
699 1.1 christos SSL_kKRB5,
700 1.1 christos SSL_aKRB5,
701 1.1 christos SSL_RC4,
702 1.1 christos SSL_SHA1,
703 1.1 christos SSL_SSLV3,
704 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
705 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
706 1.1 christos 128,
707 1.1 christos 128,
708 1.1 christos },
709 1.1 christos
710 1.1 christos /* Cipher 21 */
711 1.1 christos {
712 1.1 christos 1,
713 1.1 christos SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
714 1.1 christos SSL3_CK_KRB5_IDEA_128_CBC_SHA,
715 1.1 christos SSL_kKRB5,
716 1.1 christos SSL_aKRB5,
717 1.1 christos SSL_IDEA,
718 1.1 christos SSL_SHA1,
719 1.1 christos SSL_SSLV3,
720 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
721 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
722 1.1 christos 128,
723 1.1 christos 128,
724 1.1 christos },
725 1.1 christos
726 1.1 christos /* Cipher 22 */
727 1.1 christos {
728 1.1 christos 1,
729 1.1 christos SSL3_TXT_KRB5_DES_64_CBC_MD5,
730 1.1 christos SSL3_CK_KRB5_DES_64_CBC_MD5,
731 1.1 christos SSL_kKRB5,
732 1.1 christos SSL_aKRB5,
733 1.1 christos SSL_DES,
734 1.1 christos SSL_MD5,
735 1.1 christos SSL_SSLV3,
736 1.1 christos SSL_NOT_EXP|SSL_LOW,
737 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
738 1.1 christos 56,
739 1.1 christos 56,
740 1.1 christos },
741 1.1 christos
742 1.1 christos /* Cipher 23 */
743 1.1 christos {
744 1.1 christos 1,
745 1.1 christos SSL3_TXT_KRB5_DES_192_CBC3_MD5,
746 1.1 christos SSL3_CK_KRB5_DES_192_CBC3_MD5,
747 1.1 christos SSL_kKRB5,
748 1.1 christos SSL_aKRB5,
749 1.1 christos SSL_3DES,
750 1.1 christos SSL_MD5,
751 1.1 christos SSL_SSLV3,
752 1.1 christos SSL_NOT_EXP|SSL_HIGH,
753 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
754 1.1 christos 168,
755 1.1 christos 168,
756 1.1 christos },
757 1.1 christos
758 1.1 christos /* Cipher 24 */
759 1.1 christos {
760 1.1 christos 1,
761 1.1 christos SSL3_TXT_KRB5_RC4_128_MD5,
762 1.1 christos SSL3_CK_KRB5_RC4_128_MD5,
763 1.1 christos SSL_kKRB5,
764 1.1 christos SSL_aKRB5,
765 1.1 christos SSL_RC4,
766 1.1 christos SSL_MD5,
767 1.1 christos SSL_SSLV3,
768 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
769 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
770 1.1 christos 128,
771 1.1 christos 128,
772 1.1 christos },
773 1.1 christos
774 1.1 christos /* Cipher 25 */
775 1.1 christos {
776 1.1 christos 1,
777 1.1 christos SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
778 1.1 christos SSL3_CK_KRB5_IDEA_128_CBC_MD5,
779 1.1 christos SSL_kKRB5,
780 1.1 christos SSL_aKRB5,
781 1.1 christos SSL_IDEA,
782 1.1 christos SSL_MD5,
783 1.1 christos SSL_SSLV3,
784 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
785 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
786 1.1 christos 128,
787 1.1 christos 128,
788 1.1 christos },
789 1.1 christos
790 1.1 christos /* Cipher 26 */
791 1.1 christos {
792 1.1 christos 1,
793 1.1 christos SSL3_TXT_KRB5_DES_40_CBC_SHA,
794 1.1 christos SSL3_CK_KRB5_DES_40_CBC_SHA,
795 1.1 christos SSL_kKRB5,
796 1.1 christos SSL_aKRB5,
797 1.1 christos SSL_DES,
798 1.1 christos SSL_SHA1,
799 1.1 christos SSL_SSLV3,
800 1.1 christos SSL_EXPORT|SSL_EXP40,
801 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
802 1.1 christos 40,
803 1.1 christos 56,
804 1.1 christos },
805 1.1 christos
806 1.1 christos /* Cipher 27 */
807 1.1 christos {
808 1.1 christos 1,
809 1.1 christos SSL3_TXT_KRB5_RC2_40_CBC_SHA,
810 1.1 christos SSL3_CK_KRB5_RC2_40_CBC_SHA,
811 1.1 christos SSL_kKRB5,
812 1.1 christos SSL_aKRB5,
813 1.1 christos SSL_RC2,
814 1.1 christos SSL_SHA1,
815 1.1 christos SSL_SSLV3,
816 1.1 christos SSL_EXPORT|SSL_EXP40,
817 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
818 1.1 christos 40,
819 1.1 christos 128,
820 1.1 christos },
821 1.1 christos
822 1.1 christos /* Cipher 28 */
823 1.1 christos {
824 1.1 christos 1,
825 1.1 christos SSL3_TXT_KRB5_RC4_40_SHA,
826 1.1 christos SSL3_CK_KRB5_RC4_40_SHA,
827 1.1 christos SSL_kKRB5,
828 1.1 christos SSL_aKRB5,
829 1.1 christos SSL_RC4,
830 1.1 christos SSL_SHA1,
831 1.1 christos SSL_SSLV3,
832 1.1 christos SSL_EXPORT|SSL_EXP40,
833 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
834 1.1 christos 40,
835 1.1 christos 128,
836 1.1 christos },
837 1.1 christos
838 1.1 christos /* Cipher 29 */
839 1.1 christos {
840 1.1 christos 1,
841 1.1 christos SSL3_TXT_KRB5_DES_40_CBC_MD5,
842 1.1 christos SSL3_CK_KRB5_DES_40_CBC_MD5,
843 1.1 christos SSL_kKRB5,
844 1.1 christos SSL_aKRB5,
845 1.1 christos SSL_DES,
846 1.1 christos SSL_MD5,
847 1.1 christos SSL_SSLV3,
848 1.1 christos SSL_EXPORT|SSL_EXP40,
849 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
850 1.1 christos 40,
851 1.1 christos 56,
852 1.1 christos },
853 1.1 christos
854 1.1 christos /* Cipher 2A */
855 1.1 christos {
856 1.1 christos 1,
857 1.1 christos SSL3_TXT_KRB5_RC2_40_CBC_MD5,
858 1.1 christos SSL3_CK_KRB5_RC2_40_CBC_MD5,
859 1.1 christos SSL_kKRB5,
860 1.1 christos SSL_aKRB5,
861 1.1 christos SSL_RC2,
862 1.1 christos SSL_MD5,
863 1.1 christos SSL_SSLV3,
864 1.1 christos SSL_EXPORT|SSL_EXP40,
865 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
866 1.1 christos 40,
867 1.1 christos 128,
868 1.1 christos },
869 1.1 christos
870 1.1 christos /* Cipher 2B */
871 1.1 christos {
872 1.1 christos 1,
873 1.1 christos SSL3_TXT_KRB5_RC4_40_MD5,
874 1.1 christos SSL3_CK_KRB5_RC4_40_MD5,
875 1.1 christos SSL_kKRB5,
876 1.1 christos SSL_aKRB5,
877 1.1 christos SSL_RC4,
878 1.1 christos SSL_MD5,
879 1.1 christos SSL_SSLV3,
880 1.1 christos SSL_EXPORT|SSL_EXP40,
881 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
882 1.1 christos 40,
883 1.1 christos 128,
884 1.1 christos },
885 1.1 christos #endif /* OPENSSL_NO_KRB5 */
886 1.1 christos
887 1.1 christos /* New AES ciphersuites */
888 1.1 christos /* Cipher 2F */
889 1.1 christos {
890 1.1 christos 1,
891 1.1 christos TLS1_TXT_RSA_WITH_AES_128_SHA,
892 1.1 christos TLS1_CK_RSA_WITH_AES_128_SHA,
893 1.1 christos SSL_kRSA,
894 1.1 christos SSL_aRSA,
895 1.1 christos SSL_AES128,
896 1.1 christos SSL_SHA1,
897 1.1 christos SSL_TLSV1,
898 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
899 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
900 1.1 christos 128,
901 1.1 christos 128,
902 1.1 christos },
903 1.1 christos /* Cipher 30 */
904 1.1 christos {
905 1.1 christos 0,
906 1.1 christos TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
907 1.1 christos TLS1_CK_DH_DSS_WITH_AES_128_SHA,
908 1.1 christos SSL_kDHd,
909 1.1 christos SSL_aDH,
910 1.1 christos SSL_AES128,
911 1.1 christos SSL_SHA1,
912 1.1 christos SSL_TLSV1,
913 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
914 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
915 1.1 christos 128,
916 1.1 christos 128,
917 1.1 christos },
918 1.1 christos /* Cipher 31 */
919 1.1 christos {
920 1.1 christos 0,
921 1.1 christos TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
922 1.1 christos TLS1_CK_DH_RSA_WITH_AES_128_SHA,
923 1.1 christos SSL_kDHr,
924 1.1 christos SSL_aDH,
925 1.1 christos SSL_AES128,
926 1.1 christos SSL_SHA1,
927 1.1 christos SSL_TLSV1,
928 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
929 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
930 1.1 christos 128,
931 1.1 christos 128,
932 1.1 christos },
933 1.1 christos /* Cipher 32 */
934 1.1 christos {
935 1.1 christos 1,
936 1.1 christos TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
937 1.1 christos TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
938 1.1 christos SSL_kEDH,
939 1.1 christos SSL_aDSS,
940 1.1 christos SSL_AES128,
941 1.1 christos SSL_SHA1,
942 1.1 christos SSL_TLSV1,
943 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
944 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
945 1.1 christos 128,
946 1.1 christos 128,
947 1.1 christos },
948 1.1 christos /* Cipher 33 */
949 1.1 christos {
950 1.1 christos 1,
951 1.1 christos TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
952 1.1 christos TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
953 1.1 christos SSL_kEDH,
954 1.1 christos SSL_aRSA,
955 1.1 christos SSL_AES128,
956 1.1 christos SSL_SHA1,
957 1.1 christos SSL_TLSV1,
958 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
959 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
960 1.1 christos 128,
961 1.1 christos 128,
962 1.1 christos },
963 1.1 christos /* Cipher 34 */
964 1.1 christos {
965 1.1 christos 1,
966 1.1 christos TLS1_TXT_ADH_WITH_AES_128_SHA,
967 1.1 christos TLS1_CK_ADH_WITH_AES_128_SHA,
968 1.1 christos SSL_kEDH,
969 1.1 christos SSL_aNULL,
970 1.1 christos SSL_AES128,
971 1.1 christos SSL_SHA1,
972 1.1 christos SSL_TLSV1,
973 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
974 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
975 1.1 christos 128,
976 1.1 christos 128,
977 1.1 christos },
978 1.1 christos
979 1.1 christos /* Cipher 35 */
980 1.1 christos {
981 1.1 christos 1,
982 1.1 christos TLS1_TXT_RSA_WITH_AES_256_SHA,
983 1.1 christos TLS1_CK_RSA_WITH_AES_256_SHA,
984 1.1 christos SSL_kRSA,
985 1.1 christos SSL_aRSA,
986 1.1 christos SSL_AES256,
987 1.1 christos SSL_SHA1,
988 1.1 christos SSL_TLSV1,
989 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
990 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
991 1.1 christos 256,
992 1.1 christos 256,
993 1.1 christos },
994 1.1 christos /* Cipher 36 */
995 1.1 christos {
996 1.1 christos 0,
997 1.1 christos TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
998 1.1 christos TLS1_CK_DH_DSS_WITH_AES_256_SHA,
999 1.1 christos SSL_kDHd,
1000 1.1 christos SSL_aDH,
1001 1.1 christos SSL_AES256,
1002 1.1 christos SSL_SHA1,
1003 1.1 christos SSL_TLSV1,
1004 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1005 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1006 1.1 christos 256,
1007 1.1 christos 256,
1008 1.1 christos },
1009 1.1 christos
1010 1.1 christos /* Cipher 37 */
1011 1.1 christos {
1012 1.1 christos 0, /* not implemented (non-ephemeral DH) */
1013 1.1 christos TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
1014 1.1 christos TLS1_CK_DH_RSA_WITH_AES_256_SHA,
1015 1.1 christos SSL_kDHr,
1016 1.1 christos SSL_aDH,
1017 1.1 christos SSL_AES256,
1018 1.1 christos SSL_SHA1,
1019 1.1 christos SSL_TLSV1,
1020 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1021 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1022 1.1 christos 256,
1023 1.1 christos 256,
1024 1.1 christos },
1025 1.1 christos
1026 1.1 christos /* Cipher 38 */
1027 1.1 christos {
1028 1.1 christos 1,
1029 1.1 christos TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
1030 1.1 christos TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
1031 1.1 christos SSL_kEDH,
1032 1.1 christos SSL_aDSS,
1033 1.1 christos SSL_AES256,
1034 1.1 christos SSL_SHA1,
1035 1.1 christos SSL_TLSV1,
1036 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1037 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1038 1.1 christos 256,
1039 1.1 christos 256,
1040 1.1 christos },
1041 1.1 christos
1042 1.1 christos /* Cipher 39 */
1043 1.1 christos {
1044 1.1 christos 1,
1045 1.1 christos TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
1046 1.1 christos TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
1047 1.1 christos SSL_kEDH,
1048 1.1 christos SSL_aRSA,
1049 1.1 christos SSL_AES256,
1050 1.1 christos SSL_SHA1,
1051 1.1 christos SSL_TLSV1,
1052 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1053 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1054 1.1 christos 256,
1055 1.1 christos 256,
1056 1.1 christos },
1057 1.1 christos
1058 1.1 christos /* Cipher 3A */
1059 1.1 christos {
1060 1.1 christos 1,
1061 1.1 christos TLS1_TXT_ADH_WITH_AES_256_SHA,
1062 1.1 christos TLS1_CK_ADH_WITH_AES_256_SHA,
1063 1.1 christos SSL_kEDH,
1064 1.1 christos SSL_aNULL,
1065 1.1 christos SSL_AES256,
1066 1.1 christos SSL_SHA1,
1067 1.1 christos SSL_TLSV1,
1068 1.1 christos SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1069 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1070 1.1 christos 256,
1071 1.1 christos 256,
1072 1.1 christos },
1073 1.1 christos
1074 1.1 christos #ifndef OPENSSL_NO_CAMELLIA
1075 1.1 christos /* Camellia ciphersuites from RFC4132 (128-bit portion) */
1076 1.1 christos
1077 1.1 christos /* Cipher 41 */
1078 1.1 christos {
1079 1.1 christos 1,
1080 1.1 christos TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
1081 1.1 christos TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
1082 1.1 christos SSL_kRSA,
1083 1.1 christos SSL_aRSA,
1084 1.1 christos SSL_CAMELLIA128,
1085 1.1 christos SSL_SHA1,
1086 1.1 christos SSL_TLSV1,
1087 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1088 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1089 1.1 christos 128,
1090 1.1 christos 128,
1091 1.1 christos },
1092 1.1 christos
1093 1.1 christos /* Cipher 42 */
1094 1.1 christos {
1095 1.1 christos 0, /* not implemented (non-ephemeral DH) */
1096 1.1 christos TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
1097 1.1 christos TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
1098 1.1 christos SSL_kDHd,
1099 1.1 christos SSL_aDH,
1100 1.1 christos SSL_CAMELLIA128,
1101 1.1 christos SSL_SHA1,
1102 1.1 christos SSL_TLSV1,
1103 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1104 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1105 1.1 christos 128,
1106 1.1 christos 128,
1107 1.1 christos },
1108 1.1 christos
1109 1.1 christos /* Cipher 43 */
1110 1.1 christos {
1111 1.1 christos 0, /* not implemented (non-ephemeral DH) */
1112 1.1 christos TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
1113 1.1 christos TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
1114 1.1 christos SSL_kDHr,
1115 1.1 christos SSL_aDH,
1116 1.1 christos SSL_CAMELLIA128,
1117 1.1 christos SSL_SHA1,
1118 1.1 christos SSL_TLSV1,
1119 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1120 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1121 1.1 christos 128,
1122 1.1 christos 128,
1123 1.1 christos },
1124 1.1 christos
1125 1.1 christos /* Cipher 44 */
1126 1.1 christos {
1127 1.1 christos 1,
1128 1.1 christos TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
1129 1.1 christos TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
1130 1.1 christos SSL_kEDH,
1131 1.1 christos SSL_aDSS,
1132 1.1 christos SSL_CAMELLIA128,
1133 1.1 christos SSL_SHA1,
1134 1.1 christos SSL_TLSV1,
1135 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1136 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1137 1.1 christos 128,
1138 1.1 christos 128,
1139 1.1 christos },
1140 1.1 christos
1141 1.1 christos /* Cipher 45 */
1142 1.1 christos {
1143 1.1 christos 1,
1144 1.1 christos TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1145 1.1 christos TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1146 1.1 christos SSL_kEDH,
1147 1.1 christos SSL_aRSA,
1148 1.1 christos SSL_CAMELLIA128,
1149 1.1 christos SSL_SHA1,
1150 1.1 christos SSL_TLSV1,
1151 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1152 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1153 1.1 christos 128,
1154 1.1 christos 128,
1155 1.1 christos },
1156 1.1 christos
1157 1.1 christos /* Cipher 46 */
1158 1.1 christos {
1159 1.1 christos 1,
1160 1.1 christos TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
1161 1.1 christos TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
1162 1.1 christos SSL_kEDH,
1163 1.1 christos SSL_aNULL,
1164 1.1 christos SSL_CAMELLIA128,
1165 1.1 christos SSL_SHA1,
1166 1.1 christos SSL_TLSV1,
1167 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1168 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1169 1.1 christos 128,
1170 1.1 christos 128,
1171 1.1 christos },
1172 1.1 christos #endif /* OPENSSL_NO_CAMELLIA */
1173 1.1 christos
1174 1.1 christos #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
1175 1.1 christos /* New TLS Export CipherSuites from expired ID */
1176 1.1 christos #if 0
1177 1.1 christos /* Cipher 60 */
1178 1.1 christos {
1179 1.1 christos 1,
1180 1.1 christos TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
1181 1.1 christos TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
1182 1.1 christos SSL_kRSA,
1183 1.1 christos SSL_aRSA,
1184 1.1 christos SSL_RC4,
1185 1.1 christos SSL_MD5,
1186 1.1 christos SSL_TLSV1,
1187 1.1 christos SSL_EXPORT|SSL_EXP56,
1188 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1189 1.1 christos 56,
1190 1.1 christos 128,
1191 1.1 christos },
1192 1.1 christos
1193 1.1 christos /* Cipher 61 */
1194 1.1 christos {
1195 1.1 christos 1,
1196 1.1 christos TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1197 1.1 christos TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1198 1.1 christos SSL_kRSA,
1199 1.1 christos SSL_aRSA,
1200 1.1 christos SSL_RC2,
1201 1.1 christos SSL_MD5,
1202 1.1 christos SSL_TLSV1,
1203 1.1 christos SSL_EXPORT|SSL_EXP56,
1204 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1205 1.1 christos 56,
1206 1.1 christos 128,
1207 1.1 christos },
1208 1.1 christos #endif
1209 1.1 christos
1210 1.1 christos /* Cipher 62 */
1211 1.1 christos {
1212 1.1 christos 1,
1213 1.1 christos TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1214 1.1 christos TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1215 1.1 christos SSL_kRSA,
1216 1.1 christos SSL_aRSA,
1217 1.1 christos SSL_DES,
1218 1.1 christos SSL_SHA1,
1219 1.1 christos SSL_TLSV1,
1220 1.1 christos SSL_EXPORT|SSL_EXP56,
1221 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1222 1.1 christos 56,
1223 1.1 christos 56,
1224 1.1 christos },
1225 1.1 christos
1226 1.1 christos /* Cipher 63 */
1227 1.1 christos {
1228 1.1 christos 1,
1229 1.1 christos TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1230 1.1 christos TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1231 1.1 christos SSL_kEDH,
1232 1.1 christos SSL_aDSS,
1233 1.1 christos SSL_DES,
1234 1.1 christos SSL_SHA1,
1235 1.1 christos SSL_TLSV1,
1236 1.1 christos SSL_EXPORT|SSL_EXP56,
1237 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1238 1.1 christos 56,
1239 1.1 christos 56,
1240 1.1 christos },
1241 1.1 christos
1242 1.1 christos /* Cipher 64 */
1243 1.1 christos {
1244 1.1 christos 1,
1245 1.1 christos TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
1246 1.1 christos TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
1247 1.1 christos SSL_kRSA,
1248 1.1 christos SSL_aRSA,
1249 1.1 christos SSL_RC4,
1250 1.1 christos SSL_SHA1,
1251 1.1 christos SSL_TLSV1,
1252 1.1 christos SSL_EXPORT|SSL_EXP56,
1253 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1254 1.1 christos 56,
1255 1.1 christos 128,
1256 1.1 christos },
1257 1.1 christos
1258 1.1 christos /* Cipher 65 */
1259 1.1 christos {
1260 1.1 christos 1,
1261 1.1 christos TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1262 1.1 christos TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1263 1.1 christos SSL_kEDH,
1264 1.1 christos SSL_aDSS,
1265 1.1 christos SSL_RC4,
1266 1.1 christos SSL_SHA1,
1267 1.1 christos SSL_TLSV1,
1268 1.1 christos SSL_EXPORT|SSL_EXP56,
1269 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1270 1.1 christos 56,
1271 1.1 christos 128,
1272 1.1 christos },
1273 1.1 christos
1274 1.1 christos /* Cipher 66 */
1275 1.1 christos {
1276 1.1 christos 1,
1277 1.1 christos TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
1278 1.1 christos TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
1279 1.1 christos SSL_kEDH,
1280 1.1 christos SSL_aDSS,
1281 1.1 christos SSL_RC4,
1282 1.1 christos SSL_SHA1,
1283 1.1 christos SSL_TLSV1,
1284 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1285 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1286 1.1 christos 128,
1287 1.1 christos 128,
1288 1.1 christos },
1289 1.1 christos #endif
1290 1.1 christos {
1291 1.1 christos 1,
1292 1.1 christos "GOST94-GOST89-GOST89",
1293 1.1 christos 0x3000080,
1294 1.1 christos SSL_kGOST,
1295 1.1 christos SSL_aGOST94,
1296 1.1 christos SSL_eGOST2814789CNT,
1297 1.1 christos SSL_GOST89MAC,
1298 1.1 christos SSL_TLSV1,
1299 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1300 1.1 christos SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC,
1301 1.1 christos 256,
1302 1.1 christos 256
1303 1.1 christos },
1304 1.1 christos {
1305 1.1 christos 1,
1306 1.1 christos "GOST2001-GOST89-GOST89",
1307 1.1 christos 0x3000081,
1308 1.1 christos SSL_kGOST,
1309 1.1 christos SSL_aGOST01,
1310 1.1 christos SSL_eGOST2814789CNT,
1311 1.1 christos SSL_GOST89MAC,
1312 1.1 christos SSL_TLSV1,
1313 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1314 1.1 christos SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC,
1315 1.1 christos 256,
1316 1.1 christos 256
1317 1.1 christos },
1318 1.1 christos {
1319 1.1 christos 1,
1320 1.1 christos "GOST94-NULL-GOST94",
1321 1.1 christos 0x3000082,
1322 1.1 christos SSL_kGOST,
1323 1.1 christos SSL_aGOST94,
1324 1.1 christos SSL_eNULL,
1325 1.1 christos SSL_GOST94,
1326 1.1 christos SSL_TLSV1,
1327 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
1328 1.1 christos SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
1329 1.1 christos 0,
1330 1.1 christos 0
1331 1.1 christos },
1332 1.1 christos {
1333 1.1 christos 1,
1334 1.1 christos "GOST2001-NULL-GOST94",
1335 1.1 christos 0x3000083,
1336 1.1 christos SSL_kGOST,
1337 1.1 christos SSL_aGOST01,
1338 1.1 christos SSL_eNULL,
1339 1.1 christos SSL_GOST94,
1340 1.1 christos SSL_TLSV1,
1341 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
1342 1.1 christos SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
1343 1.1 christos 0,
1344 1.1 christos 0
1345 1.1 christos },
1346 1.1 christos
1347 1.1 christos #ifndef OPENSSL_NO_CAMELLIA
1348 1.1 christos /* Camellia ciphersuites from RFC4132 (256-bit portion) */
1349 1.1 christos
1350 1.1 christos /* Cipher 84 */
1351 1.1 christos {
1352 1.1 christos 1,
1353 1.1 christos TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
1354 1.1 christos TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
1355 1.1 christos SSL_kRSA,
1356 1.1 christos SSL_aRSA,
1357 1.1 christos SSL_CAMELLIA256,
1358 1.1 christos SSL_SHA1,
1359 1.1 christos SSL_TLSV1,
1360 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1361 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1362 1.1 christos 256,
1363 1.1 christos 256,
1364 1.1 christos },
1365 1.1 christos /* Cipher 85 */
1366 1.1 christos {
1367 1.1 christos 0, /* not implemented (non-ephemeral DH) */
1368 1.1 christos TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1369 1.1 christos TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1370 1.1 christos SSL_kDHd,
1371 1.1 christos SSL_aDH,
1372 1.1 christos SSL_CAMELLIA256,
1373 1.1 christos SSL_SHA1,
1374 1.1 christos SSL_TLSV1,
1375 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1376 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1377 1.1 christos 256,
1378 1.1 christos 256,
1379 1.1 christos },
1380 1.1 christos
1381 1.1 christos /* Cipher 86 */
1382 1.1 christos {
1383 1.1 christos 0, /* not implemented (non-ephemeral DH) */
1384 1.1 christos TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1385 1.1 christos TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1386 1.1 christos SSL_kDHr,
1387 1.1 christos SSL_aDH,
1388 1.1 christos SSL_CAMELLIA256,
1389 1.1 christos SSL_SHA1,
1390 1.1 christos SSL_TLSV1,
1391 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1392 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1393 1.1 christos 256,
1394 1.1 christos 256,
1395 1.1 christos },
1396 1.1 christos
1397 1.1 christos /* Cipher 87 */
1398 1.1 christos {
1399 1.1 christos 1,
1400 1.1 christos TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1401 1.1 christos TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1402 1.1 christos SSL_kEDH,
1403 1.1 christos SSL_aDSS,
1404 1.1 christos SSL_CAMELLIA256,
1405 1.1 christos SSL_SHA1,
1406 1.1 christos SSL_TLSV1,
1407 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1408 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1409 1.1 christos 256,
1410 1.1 christos 256,
1411 1.1 christos },
1412 1.1 christos
1413 1.1 christos /* Cipher 88 */
1414 1.1 christos {
1415 1.1 christos 1,
1416 1.1 christos TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1417 1.1 christos TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1418 1.1 christos SSL_kEDH,
1419 1.1 christos SSL_aRSA,
1420 1.1 christos SSL_CAMELLIA256,
1421 1.1 christos SSL_SHA1,
1422 1.1 christos SSL_TLSV1,
1423 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1424 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1425 1.1 christos 256,
1426 1.1 christos 256,
1427 1.1 christos },
1428 1.1 christos
1429 1.1 christos /* Cipher 89 */
1430 1.1 christos {
1431 1.1 christos 1,
1432 1.1 christos TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
1433 1.1 christos TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
1434 1.1 christos SSL_kEDH,
1435 1.1 christos SSL_aNULL,
1436 1.1 christos SSL_CAMELLIA256,
1437 1.1 christos SSL_SHA1,
1438 1.1 christos SSL_TLSV1,
1439 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1440 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1441 1.1 christos 256,
1442 1.1 christos 256,
1443 1.1 christos },
1444 1.1 christos #endif /* OPENSSL_NO_CAMELLIA */
1445 1.1 christos
1446 1.1 christos #ifndef OPENSSL_NO_PSK
1447 1.1 christos /* Cipher 8A */
1448 1.1 christos {
1449 1.1 christos 1,
1450 1.1 christos TLS1_TXT_PSK_WITH_RC4_128_SHA,
1451 1.1 christos TLS1_CK_PSK_WITH_RC4_128_SHA,
1452 1.1 christos SSL_kPSK,
1453 1.1 christos SSL_aPSK,
1454 1.1 christos SSL_RC4,
1455 1.1 christos SSL_SHA1,
1456 1.1 christos SSL_TLSV1,
1457 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1458 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1459 1.1 christos 128,
1460 1.1 christos 128,
1461 1.1 christos },
1462 1.1 christos
1463 1.1 christos /* Cipher 8B */
1464 1.1 christos {
1465 1.1 christos 1,
1466 1.1 christos TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
1467 1.1 christos TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
1468 1.1 christos SSL_kPSK,
1469 1.1 christos SSL_aPSK,
1470 1.1 christos SSL_3DES,
1471 1.1 christos SSL_SHA1,
1472 1.1 christos SSL_TLSV1,
1473 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1474 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1475 1.1 christos 168,
1476 1.1 christos 168,
1477 1.1 christos },
1478 1.1 christos
1479 1.1 christos /* Cipher 8C */
1480 1.1 christos {
1481 1.1 christos 1,
1482 1.1 christos TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
1483 1.1 christos TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
1484 1.1 christos SSL_kPSK,
1485 1.1 christos SSL_aPSK,
1486 1.1 christos SSL_AES128,
1487 1.1 christos SSL_SHA1,
1488 1.1 christos SSL_TLSV1,
1489 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1490 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1491 1.1 christos 128,
1492 1.1 christos 128,
1493 1.1 christos },
1494 1.1 christos
1495 1.1 christos /* Cipher 8D */
1496 1.1 christos {
1497 1.1 christos 1,
1498 1.1 christos TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
1499 1.1 christos TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
1500 1.1 christos SSL_kPSK,
1501 1.1 christos SSL_aPSK,
1502 1.1 christos SSL_AES256,
1503 1.1 christos SSL_SHA1,
1504 1.1 christos SSL_TLSV1,
1505 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1506 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1507 1.1 christos 256,
1508 1.1 christos 256,
1509 1.1 christos },
1510 1.1 christos #endif /* OPENSSL_NO_PSK */
1511 1.1 christos
1512 1.1 christos #ifndef OPENSSL_NO_SEED
1513 1.1 christos /* SEED ciphersuites from RFC4162 */
1514 1.1 christos
1515 1.1 christos /* Cipher 96 */
1516 1.1 christos {
1517 1.1 christos 1,
1518 1.1 christos TLS1_TXT_RSA_WITH_SEED_SHA,
1519 1.1 christos TLS1_CK_RSA_WITH_SEED_SHA,
1520 1.1 christos SSL_kRSA,
1521 1.1 christos SSL_aRSA,
1522 1.1 christos SSL_SEED,
1523 1.1 christos SSL_SHA1,
1524 1.1 christos SSL_TLSV1,
1525 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1526 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1527 1.1 christos 128,
1528 1.1 christos 128,
1529 1.1 christos },
1530 1.1 christos
1531 1.1 christos /* Cipher 97 */
1532 1.1 christos {
1533 1.1 christos 0, /* not implemented (non-ephemeral DH) */
1534 1.1 christos TLS1_TXT_DH_DSS_WITH_SEED_SHA,
1535 1.1 christos TLS1_CK_DH_DSS_WITH_SEED_SHA,
1536 1.1 christos SSL_kDHd,
1537 1.1 christos SSL_aDH,
1538 1.1 christos SSL_SEED,
1539 1.1 christos SSL_SHA1,
1540 1.1 christos SSL_TLSV1,
1541 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1542 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1543 1.1 christos 128,
1544 1.1 christos 128,
1545 1.1 christos },
1546 1.1 christos
1547 1.1 christos /* Cipher 98 */
1548 1.1 christos {
1549 1.1 christos 0, /* not implemented (non-ephemeral DH) */
1550 1.1 christos TLS1_TXT_DH_RSA_WITH_SEED_SHA,
1551 1.1 christos TLS1_CK_DH_RSA_WITH_SEED_SHA,
1552 1.1 christos SSL_kDHr,
1553 1.1 christos SSL_aDH,
1554 1.1 christos SSL_SEED,
1555 1.1 christos SSL_SHA1,
1556 1.1 christos SSL_TLSV1,
1557 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1558 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1559 1.1 christos 128,
1560 1.1 christos 128,
1561 1.1 christos },
1562 1.1 christos
1563 1.1 christos /* Cipher 99 */
1564 1.1 christos {
1565 1.1 christos 1,
1566 1.1 christos TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
1567 1.1 christos TLS1_CK_DHE_DSS_WITH_SEED_SHA,
1568 1.1 christos SSL_kEDH,
1569 1.1 christos SSL_aDSS,
1570 1.1 christos SSL_SEED,
1571 1.1 christos SSL_SHA1,
1572 1.1 christos SSL_TLSV1,
1573 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1574 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1575 1.1 christos 128,
1576 1.1 christos 128,
1577 1.1 christos },
1578 1.1 christos
1579 1.1 christos /* Cipher 9A */
1580 1.1 christos {
1581 1.1 christos 1,
1582 1.1 christos TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
1583 1.1 christos TLS1_CK_DHE_RSA_WITH_SEED_SHA,
1584 1.1 christos SSL_kEDH,
1585 1.1 christos SSL_aRSA,
1586 1.1 christos SSL_SEED,
1587 1.1 christos SSL_SHA1,
1588 1.1 christos SSL_TLSV1,
1589 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1590 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1591 1.1 christos 128,
1592 1.1 christos 128,
1593 1.1 christos },
1594 1.1 christos
1595 1.1 christos /* Cipher 9B */
1596 1.1 christos {
1597 1.1 christos 1,
1598 1.1 christos TLS1_TXT_ADH_WITH_SEED_SHA,
1599 1.1 christos TLS1_CK_ADH_WITH_SEED_SHA,
1600 1.1 christos SSL_kEDH,
1601 1.1 christos SSL_aNULL,
1602 1.1 christos SSL_SEED,
1603 1.1 christos SSL_SHA1,
1604 1.1 christos SSL_TLSV1,
1605 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1606 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1607 1.1 christos 128,
1608 1.1 christos 128,
1609 1.1 christos },
1610 1.1 christos
1611 1.1 christos #endif /* OPENSSL_NO_SEED */
1612 1.1 christos
1613 1.1 christos #ifndef OPENSSL_NO_ECDH
1614 1.1 christos /* Cipher C001 */
1615 1.1 christos {
1616 1.1 christos 1,
1617 1.1 christos TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
1618 1.1 christos TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
1619 1.1 christos SSL_kECDHe,
1620 1.1 christos SSL_aECDH,
1621 1.1 christos SSL_eNULL,
1622 1.1 christos SSL_SHA1,
1623 1.1 christos SSL_TLSV1,
1624 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
1625 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1626 1.1 christos 0,
1627 1.1 christos 0,
1628 1.1 christos },
1629 1.1 christos
1630 1.1 christos /* Cipher C002 */
1631 1.1 christos {
1632 1.1 christos 1,
1633 1.1 christos TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
1634 1.1 christos TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
1635 1.1 christos SSL_kECDHe,
1636 1.1 christos SSL_aECDH,
1637 1.1 christos SSL_RC4,
1638 1.1 christos SSL_SHA1,
1639 1.1 christos SSL_TLSV1,
1640 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1641 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1642 1.1 christos 128,
1643 1.1 christos 128,
1644 1.1 christos },
1645 1.1 christos
1646 1.1 christos /* Cipher C003 */
1647 1.1 christos {
1648 1.1 christos 1,
1649 1.1 christos TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
1650 1.1 christos TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
1651 1.1 christos SSL_kECDHe,
1652 1.1 christos SSL_aECDH,
1653 1.1 christos SSL_3DES,
1654 1.1 christos SSL_SHA1,
1655 1.1 christos SSL_TLSV1,
1656 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1657 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1658 1.1 christos 168,
1659 1.1 christos 168,
1660 1.1 christos },
1661 1.1 christos
1662 1.1 christos /* Cipher C004 */
1663 1.1 christos {
1664 1.1 christos 1,
1665 1.1 christos TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1666 1.1 christos TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1667 1.1 christos SSL_kECDHe,
1668 1.1 christos SSL_aECDH,
1669 1.1 christos SSL_AES128,
1670 1.1 christos SSL_SHA1,
1671 1.1 christos SSL_TLSV1,
1672 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1673 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1674 1.1 christos 128,
1675 1.1 christos 128,
1676 1.1 christos },
1677 1.1 christos
1678 1.1 christos /* Cipher C005 */
1679 1.1 christos {
1680 1.1 christos 1,
1681 1.1 christos TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
1682 1.1 christos TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
1683 1.1 christos SSL_kECDHe,
1684 1.1 christos SSL_aECDH,
1685 1.1 christos SSL_AES256,
1686 1.1 christos SSL_SHA1,
1687 1.1 christos SSL_TLSV1,
1688 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1689 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1690 1.1 christos 256,
1691 1.1 christos 256,
1692 1.1 christos },
1693 1.1 christos
1694 1.1 christos /* Cipher C006 */
1695 1.1 christos {
1696 1.1 christos 1,
1697 1.1 christos TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
1698 1.1 christos TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
1699 1.1 christos SSL_kEECDH,
1700 1.1 christos SSL_aECDSA,
1701 1.1 christos SSL_eNULL,
1702 1.1 christos SSL_SHA1,
1703 1.1 christos SSL_TLSV1,
1704 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
1705 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1706 1.1 christos 0,
1707 1.1 christos 0,
1708 1.1 christos },
1709 1.1 christos
1710 1.1 christos /* Cipher C007 */
1711 1.1 christos {
1712 1.1 christos 1,
1713 1.1 christos TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
1714 1.1 christos TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
1715 1.1 christos SSL_kEECDH,
1716 1.1 christos SSL_aECDSA,
1717 1.1 christos SSL_RC4,
1718 1.1 christos SSL_SHA1,
1719 1.1 christos SSL_TLSV1,
1720 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1721 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1722 1.1 christos 128,
1723 1.1 christos 128,
1724 1.1 christos },
1725 1.1 christos
1726 1.1 christos /* Cipher C008 */
1727 1.1 christos {
1728 1.1 christos 1,
1729 1.1 christos TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
1730 1.1 christos TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
1731 1.1 christos SSL_kEECDH,
1732 1.1 christos SSL_aECDSA,
1733 1.1 christos SSL_3DES,
1734 1.1 christos SSL_SHA1,
1735 1.1 christos SSL_TLSV1,
1736 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1737 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1738 1.1 christos 168,
1739 1.1 christos 168,
1740 1.1 christos },
1741 1.1 christos
1742 1.1 christos /* Cipher C009 */
1743 1.1 christos {
1744 1.1 christos 1,
1745 1.1 christos TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
1746 1.1 christos TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
1747 1.1 christos SSL_kEECDH,
1748 1.1 christos SSL_aECDSA,
1749 1.1 christos SSL_AES128,
1750 1.1 christos SSL_SHA1,
1751 1.1 christos SSL_TLSV1,
1752 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1753 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1754 1.1 christos 128,
1755 1.1 christos 128,
1756 1.1 christos },
1757 1.1 christos
1758 1.1 christos /* Cipher C00A */
1759 1.1 christos {
1760 1.1 christos 1,
1761 1.1 christos TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1762 1.1 christos TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1763 1.1 christos SSL_kEECDH,
1764 1.1 christos SSL_aECDSA,
1765 1.1 christos SSL_AES256,
1766 1.1 christos SSL_SHA1,
1767 1.1 christos SSL_TLSV1,
1768 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1769 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1770 1.1 christos 256,
1771 1.1 christos 256,
1772 1.1 christos },
1773 1.1 christos
1774 1.1 christos /* Cipher C00B */
1775 1.1 christos {
1776 1.1 christos 1,
1777 1.1 christos TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
1778 1.1 christos TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
1779 1.1 christos SSL_kECDHr,
1780 1.1 christos SSL_aECDH,
1781 1.1 christos SSL_eNULL,
1782 1.1 christos SSL_SHA1,
1783 1.1 christos SSL_TLSV1,
1784 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
1785 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1786 1.1 christos 0,
1787 1.1 christos 0,
1788 1.1 christos },
1789 1.1 christos
1790 1.1 christos /* Cipher C00C */
1791 1.1 christos {
1792 1.1 christos 1,
1793 1.1 christos TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
1794 1.1 christos TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
1795 1.1 christos SSL_kECDHr,
1796 1.1 christos SSL_aECDH,
1797 1.1 christos SSL_RC4,
1798 1.1 christos SSL_SHA1,
1799 1.1 christos SSL_TLSV1,
1800 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1801 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1802 1.1 christos 128,
1803 1.1 christos 128,
1804 1.1 christos },
1805 1.1 christos
1806 1.1 christos /* Cipher C00D */
1807 1.1 christos {
1808 1.1 christos 1,
1809 1.1 christos TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
1810 1.1 christos TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
1811 1.1 christos SSL_kECDHr,
1812 1.1 christos SSL_aECDH,
1813 1.1 christos SSL_3DES,
1814 1.1 christos SSL_SHA1,
1815 1.1 christos SSL_TLSV1,
1816 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1817 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1818 1.1 christos 168,
1819 1.1 christos 168,
1820 1.1 christos },
1821 1.1 christos
1822 1.1 christos /* Cipher C00E */
1823 1.1 christos {
1824 1.1 christos 1,
1825 1.1 christos TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
1826 1.1 christos TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
1827 1.1 christos SSL_kECDHr,
1828 1.1 christos SSL_aECDH,
1829 1.1 christos SSL_AES128,
1830 1.1 christos SSL_SHA1,
1831 1.1 christos SSL_TLSV1,
1832 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1833 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1834 1.1 christos 128,
1835 1.1 christos 128,
1836 1.1 christos },
1837 1.1 christos
1838 1.1 christos /* Cipher C00F */
1839 1.1 christos {
1840 1.1 christos 1,
1841 1.1 christos TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
1842 1.1 christos TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
1843 1.1 christos SSL_kECDHr,
1844 1.1 christos SSL_aECDH,
1845 1.1 christos SSL_AES256,
1846 1.1 christos SSL_SHA1,
1847 1.1 christos SSL_TLSV1,
1848 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1849 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1850 1.1 christos 256,
1851 1.1 christos 256,
1852 1.1 christos },
1853 1.1 christos
1854 1.1 christos /* Cipher C010 */
1855 1.1 christos {
1856 1.1 christos 1,
1857 1.1 christos TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
1858 1.1 christos TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
1859 1.1 christos SSL_kEECDH,
1860 1.1 christos SSL_aRSA,
1861 1.1 christos SSL_eNULL,
1862 1.1 christos SSL_SHA1,
1863 1.1 christos SSL_TLSV1,
1864 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
1865 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1866 1.1 christos 0,
1867 1.1 christos 0,
1868 1.1 christos },
1869 1.1 christos
1870 1.1 christos /* Cipher C011 */
1871 1.1 christos {
1872 1.1 christos 1,
1873 1.1 christos TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
1874 1.1 christos TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
1875 1.1 christos SSL_kEECDH,
1876 1.1 christos SSL_aRSA,
1877 1.1 christos SSL_RC4,
1878 1.1 christos SSL_SHA1,
1879 1.1 christos SSL_TLSV1,
1880 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1881 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1882 1.1 christos 128,
1883 1.1 christos 128,
1884 1.1 christos },
1885 1.1 christos
1886 1.1 christos /* Cipher C012 */
1887 1.1 christos {
1888 1.1 christos 1,
1889 1.1 christos TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1890 1.1 christos TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1891 1.1 christos SSL_kEECDH,
1892 1.1 christos SSL_aRSA,
1893 1.1 christos SSL_3DES,
1894 1.1 christos SSL_SHA1,
1895 1.1 christos SSL_TLSV1,
1896 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1897 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1898 1.1 christos 168,
1899 1.1 christos 168,
1900 1.1 christos },
1901 1.1 christos
1902 1.1 christos /* Cipher C013 */
1903 1.1 christos {
1904 1.1 christos 1,
1905 1.1 christos TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1906 1.1 christos TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1907 1.1 christos SSL_kEECDH,
1908 1.1 christos SSL_aRSA,
1909 1.1 christos SSL_AES128,
1910 1.1 christos SSL_SHA1,
1911 1.1 christos SSL_TLSV1,
1912 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1913 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1914 1.1 christos 128,
1915 1.1 christos 128,
1916 1.1 christos },
1917 1.1 christos
1918 1.1 christos /* Cipher C014 */
1919 1.1 christos {
1920 1.1 christos 1,
1921 1.1 christos TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1922 1.1 christos TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1923 1.1 christos SSL_kEECDH,
1924 1.1 christos SSL_aRSA,
1925 1.1 christos SSL_AES256,
1926 1.1 christos SSL_SHA1,
1927 1.1 christos SSL_TLSV1,
1928 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1929 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1930 1.1 christos 256,
1931 1.1 christos 256,
1932 1.1 christos },
1933 1.1 christos
1934 1.1 christos /* Cipher C015 */
1935 1.1 christos {
1936 1.1 christos 1,
1937 1.1 christos TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
1938 1.1 christos TLS1_CK_ECDH_anon_WITH_NULL_SHA,
1939 1.1 christos SSL_kEECDH,
1940 1.1 christos SSL_aNULL,
1941 1.1 christos SSL_eNULL,
1942 1.1 christos SSL_SHA1,
1943 1.1 christos SSL_TLSV1,
1944 1.1 christos SSL_NOT_EXP|SSL_STRONG_NONE,
1945 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1946 1.1 christos 0,
1947 1.1 christos 0,
1948 1.1 christos },
1949 1.1 christos
1950 1.1 christos /* Cipher C016 */
1951 1.1 christos {
1952 1.1 christos 1,
1953 1.1 christos TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
1954 1.1 christos TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
1955 1.1 christos SSL_kEECDH,
1956 1.1 christos SSL_aNULL,
1957 1.1 christos SSL_RC4,
1958 1.1 christos SSL_SHA1,
1959 1.1 christos SSL_TLSV1,
1960 1.1 christos SSL_NOT_EXP|SSL_MEDIUM,
1961 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1962 1.1 christos 128,
1963 1.1 christos 128,
1964 1.1 christos },
1965 1.1 christos
1966 1.1 christos /* Cipher C017 */
1967 1.1 christos {
1968 1.1 christos 1,
1969 1.1 christos TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
1970 1.1 christos TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
1971 1.1 christos SSL_kEECDH,
1972 1.1 christos SSL_aNULL,
1973 1.1 christos SSL_3DES,
1974 1.1 christos SSL_SHA1,
1975 1.1 christos SSL_TLSV1,
1976 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1977 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1978 1.1 christos 168,
1979 1.1 christos 168,
1980 1.1 christos },
1981 1.1 christos
1982 1.1 christos /* Cipher C018 */
1983 1.1 christos {
1984 1.1 christos 1,
1985 1.1 christos TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
1986 1.1 christos TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
1987 1.1 christos SSL_kEECDH,
1988 1.1 christos SSL_aNULL,
1989 1.1 christos SSL_AES128,
1990 1.1 christos SSL_SHA1,
1991 1.1 christos SSL_TLSV1,
1992 1.1 christos SSL_NOT_EXP|SSL_HIGH,
1993 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1994 1.1 christos 128,
1995 1.1 christos 128,
1996 1.1 christos },
1997 1.1 christos
1998 1.1 christos /* Cipher C019 */
1999 1.1 christos {
2000 1.1 christos 1,
2001 1.1 christos TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
2002 1.1 christos TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
2003 1.1 christos SSL_kEECDH,
2004 1.1 christos SSL_aNULL,
2005 1.1 christos SSL_AES256,
2006 1.1 christos SSL_SHA1,
2007 1.1 christos SSL_TLSV1,
2008 1.1 christos SSL_NOT_EXP|SSL_HIGH,
2009 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2010 1.1 christos 256,
2011 1.1 christos 256,
2012 1.1 christos },
2013 1.1 christos #endif /* OPENSSL_NO_ECDH */
2014 1.1 christos
2015 1.1 christos #ifdef TEMP_GOST_TLS
2016 1.1 christos /* Cipher FF00 */
2017 1.1 christos {
2018 1.1 christos 1,
2019 1.1 christos "GOST-MD5",
2020 1.1 christos 0x0300ff00,
2021 1.1 christos SSL_kRSA,
2022 1.1 christos SSL_aRSA,
2023 1.1 christos SSL_eGOST2814789CNT,
2024 1.1 christos SSL_MD5,
2025 1.1 christos SSL_TLSV1,
2026 1.1 christos SSL_NOT_EXP|SSL_HIGH,
2027 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2028 1.1 christos 256,
2029 1.1 christos 256,
2030 1.1 christos },
2031 1.1 christos {
2032 1.1 christos 1,
2033 1.1 christos "GOST-GOST94",
2034 1.1 christos 0x0300ff01,
2035 1.1 christos SSL_kRSA,
2036 1.1 christos SSL_aRSA,
2037 1.1 christos SSL_eGOST2814789CNT,
2038 1.1 christos SSL_GOST94,
2039 1.1 christos SSL_TLSV1,
2040 1.1 christos SSL_NOT_EXP|SSL_HIGH,
2041 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2042 1.1 christos 256,
2043 1.1 christos 256
2044 1.1 christos },
2045 1.1 christos {
2046 1.1 christos 1,
2047 1.1 christos "GOST-GOST89MAC",
2048 1.1 christos 0x0300ff02,
2049 1.1 christos SSL_kRSA,
2050 1.1 christos SSL_aRSA,
2051 1.1 christos SSL_eGOST2814789CNT,
2052 1.1 christos SSL_GOST89MAC,
2053 1.1 christos SSL_TLSV1,
2054 1.1 christos SSL_NOT_EXP|SSL_HIGH,
2055 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2056 1.1 christos 256,
2057 1.1 christos 256
2058 1.1 christos },
2059 1.1 christos {
2060 1.1 christos 1,
2061 1.1 christos "GOST-GOST89STREAM",
2062 1.1 christos 0x0300ff03,
2063 1.1 christos SSL_kRSA,
2064 1.1 christos SSL_aRSA,
2065 1.1 christos SSL_eGOST2814789CNT,
2066 1.1 christos SSL_GOST89MAC,
2067 1.1 christos SSL_TLSV1,
2068 1.1 christos SSL_NOT_EXP|SSL_HIGH,
2069 1.1 christos SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC,
2070 1.1 christos 256,
2071 1.1 christos 256
2072 1.1 christos },
2073 1.1 christos #endif
2074 1.1 christos
2075 1.1 christos /* end of list */
2076 1.1 christos };
2077 1.1 christos
2078 1.1 christos SSL3_ENC_METHOD SSLv3_enc_data={
2079 1.1 christos ssl3_enc,
2080 1.1 christos n_ssl3_mac,
2081 1.1 christos ssl3_setup_key_block,
2082 1.1 christos ssl3_generate_master_secret,
2083 1.1 christos ssl3_change_cipher_state,
2084 1.1 christos ssl3_final_finish_mac,
2085 1.1 christos MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
2086 1.1 christos ssl3_cert_verify_mac,
2087 1.1 christos SSL3_MD_CLIENT_FINISHED_CONST,4,
2088 1.1 christos SSL3_MD_SERVER_FINISHED_CONST,4,
2089 1.1 christos ssl3_alert_code,
2090 1.1 christos };
2091 1.1 christos
2092 1.1 christos long ssl3_default_timeout(void)
2093 1.1 christos {
2094 1.1 christos /* 2 hours, the 24 hours mentioned in the SSLv3 spec
2095 1.1 christos * is way too long for http, the cache would over fill */
2096 1.1 christos return(60*60*2);
2097 1.1 christos }
2098 1.1 christos
2099 1.1 christos int ssl3_num_ciphers(void)
2100 1.1 christos {
2101 1.1 christos return(SSL3_NUM_CIPHERS);
2102 1.1 christos }
2103 1.1 christos
2104 1.1 christos const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
2105 1.1 christos {
2106 1.1 christos if (u < SSL3_NUM_CIPHERS)
2107 1.1 christos return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
2108 1.1 christos else
2109 1.1 christos return(NULL);
2110 1.1 christos }
2111 1.1 christos
2112 1.1 christos int ssl3_pending(const SSL *s)
2113 1.1 christos {
2114 1.1 christos if (s->rstate == SSL_ST_READ_BODY)
2115 1.1 christos return 0;
2116 1.1 christos
2117 1.1 christos return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
2118 1.1 christos }
2119 1.1 christos
2120 1.1 christos int ssl3_new(SSL *s)
2121 1.1 christos {
2122 1.1 christos SSL3_STATE *s3;
2123 1.1 christos
2124 1.1 christos if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
2125 1.1 christos memset(s3,0,sizeof *s3);
2126 1.1 christos memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
2127 1.1 christos memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
2128 1.1 christos
2129 1.1 christos s->s3=s3;
2130 1.1 christos
2131 1.1 christos s->method->ssl_clear(s);
2132 1.1 christos return(1);
2133 1.1 christos err:
2134 1.1 christos return(0);
2135 1.1 christos }
2136 1.1 christos
2137 1.1 christos void ssl3_free(SSL *s)
2138 1.1 christos {
2139 1.1 christos if(s == NULL)
2140 1.1 christos return;
2141 1.1 christos
2142 1.1 christos #ifdef TLSEXT_TYPE_opaque_prf_input
2143 1.1 christos if (s->s3->client_opaque_prf_input != NULL)
2144 1.1 christos OPENSSL_free(s->s3->client_opaque_prf_input);
2145 1.1 christos if (s->s3->server_opaque_prf_input != NULL)
2146 1.1 christos OPENSSL_free(s->s3->server_opaque_prf_input);
2147 1.1 christos #endif
2148 1.1 christos
2149 1.1 christos ssl3_cleanup_key_block(s);
2150 1.1 christos if (s->s3->rbuf.buf != NULL)
2151 1.1 christos ssl3_release_read_buffer(s);
2152 1.1 christos if (s->s3->wbuf.buf != NULL)
2153 1.1 christos ssl3_release_write_buffer(s);
2154 1.1 christos if (s->s3->rrec.comp != NULL)
2155 1.1 christos OPENSSL_free(s->s3->rrec.comp);
2156 1.1 christos #ifndef OPENSSL_NO_DH
2157 1.1 christos if (s->s3->tmp.dh != NULL)
2158 1.1 christos DH_free(s->s3->tmp.dh);
2159 1.1 christos #endif
2160 1.1 christos #ifndef OPENSSL_NO_ECDH
2161 1.1 christos if (s->s3->tmp.ecdh != NULL)
2162 1.1 christos EC_KEY_free(s->s3->tmp.ecdh);
2163 1.1 christos #endif
2164 1.1 christos
2165 1.1 christos if (s->s3->tmp.ca_names != NULL)
2166 1.1 christos sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2167 1.1 christos if (s->s3->handshake_buffer) {
2168 1.1 christos BIO_free(s->s3->handshake_buffer);
2169 1.1 christos }
2170 1.1 christos if (s->s3->handshake_dgst) ssl3_free_digest_list(s);
2171 1.1 christos OPENSSL_cleanse(s->s3,sizeof *s->s3);
2172 1.1 christos OPENSSL_free(s->s3);
2173 1.1 christos s->s3=NULL;
2174 1.1 christos }
2175 1.1 christos
2176 1.1 christos void ssl3_clear(SSL *s)
2177 1.1 christos {
2178 1.1 christos unsigned char *rp,*wp;
2179 1.1 christos size_t rlen, wlen;
2180 1.1 christos
2181 1.1 christos #ifdef TLSEXT_TYPE_opaque_prf_input
2182 1.1 christos if (s->s3->client_opaque_prf_input != NULL)
2183 1.1 christos OPENSSL_free(s->s3->client_opaque_prf_input);
2184 1.1 christos s->s3->client_opaque_prf_input = NULL;
2185 1.1 christos if (s->s3->server_opaque_prf_input != NULL)
2186 1.1 christos OPENSSL_free(s->s3->server_opaque_prf_input);
2187 1.1 christos s->s3->server_opaque_prf_input = NULL;
2188 1.1 christos #endif
2189 1.1 christos
2190 1.1 christos ssl3_cleanup_key_block(s);
2191 1.1 christos if (s->s3->tmp.ca_names != NULL)
2192 1.1 christos sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2193 1.1 christos
2194 1.1 christos if (s->s3->rrec.comp != NULL)
2195 1.1 christos {
2196 1.1 christos OPENSSL_free(s->s3->rrec.comp);
2197 1.1 christos s->s3->rrec.comp=NULL;
2198 1.1 christos }
2199 1.1 christos #ifndef OPENSSL_NO_DH
2200 1.1 christos if (s->s3->tmp.dh != NULL)
2201 1.1 christos DH_free(s->s3->tmp.dh);
2202 1.1 christos #endif
2203 1.1 christos #ifndef OPENSSL_NO_ECDH
2204 1.1 christos if (s->s3->tmp.ecdh != NULL)
2205 1.1 christos EC_KEY_free(s->s3->tmp.ecdh);
2206 1.1 christos #endif
2207 1.1 christos
2208 1.1 christos rp = s->s3->rbuf.buf;
2209 1.1 christos wp = s->s3->wbuf.buf;
2210 1.1 christos rlen = s->s3->rbuf.len;
2211 1.1 christos wlen = s->s3->wbuf.len;
2212 1.1 christos if (s->s3->handshake_buffer) {
2213 1.1 christos BIO_free(s->s3->handshake_buffer);
2214 1.1 christos }
2215 1.1 christos if (s->s3->handshake_dgst) {
2216 1.1 christos ssl3_free_digest_list(s);
2217 1.1 christos }
2218 1.1 christos memset(s->s3,0,sizeof *s->s3);
2219 1.1 christos s->s3->rbuf.buf = rp;
2220 1.1 christos s->s3->wbuf.buf = wp;
2221 1.1 christos s->s3->rbuf.len = rlen;
2222 1.1 christos s->s3->wbuf.len = wlen;
2223 1.1 christos
2224 1.1 christos ssl_free_wbio_buffer(s);
2225 1.1 christos
2226 1.1 christos s->packet_length=0;
2227 1.1 christos s->s3->renegotiate=0;
2228 1.1 christos s->s3->total_renegotiations=0;
2229 1.1 christos s->s3->num_renegotiations=0;
2230 1.1 christos s->s3->in_read_app_data=0;
2231 1.1 christos s->version=SSL3_VERSION;
2232 1.1 christos }
2233 1.1 christos
2234 1.1 christos long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
2235 1.1 christos {
2236 1.1 christos int ret=0;
2237 1.1 christos
2238 1.1 christos #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
2239 1.1 christos if (
2240 1.1 christos #ifndef OPENSSL_NO_RSA
2241 1.1 christos cmd == SSL_CTRL_SET_TMP_RSA ||
2242 1.1 christos cmd == SSL_CTRL_SET_TMP_RSA_CB ||
2243 1.1 christos #endif
2244 1.1 christos #ifndef OPENSSL_NO_DSA
2245 1.1 christos cmd == SSL_CTRL_SET_TMP_DH ||
2246 1.1 christos cmd == SSL_CTRL_SET_TMP_DH_CB ||
2247 1.1 christos #endif
2248 1.1 christos 0)
2249 1.1 christos {
2250 1.1 christos if (!ssl_cert_inst(&s->cert))
2251 1.1 christos {
2252 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
2253 1.1 christos return(0);
2254 1.1 christos }
2255 1.1 christos }
2256 1.1 christos #endif
2257 1.1 christos
2258 1.1 christos switch (cmd)
2259 1.1 christos {
2260 1.1 christos case SSL_CTRL_GET_SESSION_REUSED:
2261 1.1 christos ret=s->hit;
2262 1.1 christos break;
2263 1.1 christos case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
2264 1.1 christos break;
2265 1.1 christos case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
2266 1.1 christos ret=s->s3->num_renegotiations;
2267 1.1 christos break;
2268 1.1 christos case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
2269 1.1 christos ret=s->s3->num_renegotiations;
2270 1.1 christos s->s3->num_renegotiations=0;
2271 1.1 christos break;
2272 1.1 christos case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
2273 1.1 christos ret=s->s3->total_renegotiations;
2274 1.1 christos break;
2275 1.1 christos case SSL_CTRL_GET_FLAGS:
2276 1.1 christos ret=(int)(s->s3->flags);
2277 1.1 christos break;
2278 1.1 christos #ifndef OPENSSL_NO_RSA
2279 1.1 christos case SSL_CTRL_NEED_TMP_RSA:
2280 1.1 christos if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
2281 1.1 christos ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
2282 1.1 christos (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))))
2283 1.1 christos ret = 1;
2284 1.1 christos break;
2285 1.1 christos case SSL_CTRL_SET_TMP_RSA:
2286 1.1 christos {
2287 1.1 christos RSA *rsa = (RSA *)parg;
2288 1.1 christos if (rsa == NULL)
2289 1.1 christos {
2290 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
2291 1.1 christos return(ret);
2292 1.1 christos }
2293 1.1 christos if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
2294 1.1 christos {
2295 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
2296 1.1 christos return(ret);
2297 1.1 christos }
2298 1.1 christos if (s->cert->rsa_tmp != NULL)
2299 1.1 christos RSA_free(s->cert->rsa_tmp);
2300 1.1 christos s->cert->rsa_tmp = rsa;
2301 1.1 christos ret = 1;
2302 1.1 christos }
2303 1.1 christos break;
2304 1.1 christos case SSL_CTRL_SET_TMP_RSA_CB:
2305 1.1 christos {
2306 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2307 1.1 christos return(ret);
2308 1.1 christos }
2309 1.1 christos break;
2310 1.1 christos #endif
2311 1.1 christos #ifndef OPENSSL_NO_DH
2312 1.1 christos case SSL_CTRL_SET_TMP_DH:
2313 1.1 christos {
2314 1.1 christos DH *dh = (DH *)parg;
2315 1.1 christos if (dh == NULL)
2316 1.1 christos {
2317 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
2318 1.1 christos return(ret);
2319 1.1 christos }
2320 1.1 christos if ((dh = DHparams_dup(dh)) == NULL)
2321 1.1 christos {
2322 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
2323 1.1 christos return(ret);
2324 1.1 christos }
2325 1.1 christos if (!(s->options & SSL_OP_SINGLE_DH_USE))
2326 1.1 christos {
2327 1.1 christos if (!DH_generate_key(dh))
2328 1.1 christos {
2329 1.1 christos DH_free(dh);
2330 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
2331 1.1 christos return(ret);
2332 1.1 christos }
2333 1.1 christos }
2334 1.1 christos if (s->cert->dh_tmp != NULL)
2335 1.1 christos DH_free(s->cert->dh_tmp);
2336 1.1 christos s->cert->dh_tmp = dh;
2337 1.1 christos ret = 1;
2338 1.1 christos }
2339 1.1 christos break;
2340 1.1 christos case SSL_CTRL_SET_TMP_DH_CB:
2341 1.1 christos {
2342 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2343 1.1 christos return(ret);
2344 1.1 christos }
2345 1.1 christos break;
2346 1.1 christos #endif
2347 1.1 christos #ifndef OPENSSL_NO_ECDH
2348 1.1 christos case SSL_CTRL_SET_TMP_ECDH:
2349 1.1 christos {
2350 1.1 christos EC_KEY *ecdh = NULL;
2351 1.1 christos
2352 1.1 christos if (parg == NULL)
2353 1.1 christos {
2354 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
2355 1.1 christos return(ret);
2356 1.1 christos }
2357 1.1 christos if (!EC_KEY_up_ref((EC_KEY *)parg))
2358 1.1 christos {
2359 1.1 christos SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
2360 1.1 christos return(ret);
2361 1.1 christos }
2362 1.1 christos ecdh = (EC_KEY *)parg;
2363 1.1 christos if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
2364 1.1 christos {
2365 1.1 christos if (!EC_KEY_generate_key(ecdh))
2366 1.1 christos {
2367 1.1 christos EC_KEY_free(ecdh);
2368 1.1 christos SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
2369 1.1 christos return(ret);
2370 1.1 christos }
2371 1.1 christos }
2372 1.1 christos if (s->cert->ecdh_tmp != NULL)
2373 1.1 christos EC_KEY_free(s->cert->ecdh_tmp);
2374 1.1 christos s->cert->ecdh_tmp = ecdh;
2375 1.1 christos ret = 1;
2376 1.1 christos }
2377 1.1 christos break;
2378 1.1 christos case SSL_CTRL_SET_TMP_ECDH_CB:
2379 1.1 christos {
2380 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2381 1.1 christos return(ret);
2382 1.1 christos }
2383 1.1 christos break;
2384 1.1 christos #endif /* !OPENSSL_NO_ECDH */
2385 1.1 christos #ifndef OPENSSL_NO_TLSEXT
2386 1.1 christos case SSL_CTRL_SET_TLSEXT_HOSTNAME:
2387 1.1 christos if (larg == TLSEXT_NAMETYPE_host_name)
2388 1.1 christos {
2389 1.1 christos if (s->tlsext_hostname != NULL)
2390 1.1 christos OPENSSL_free(s->tlsext_hostname);
2391 1.1 christos s->tlsext_hostname = NULL;
2392 1.1 christos
2393 1.1 christos ret = 1;
2394 1.1 christos if (parg == NULL)
2395 1.1 christos break;
2396 1.1 christos if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
2397 1.1 christos {
2398 1.1 christos SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
2399 1.1 christos return 0;
2400 1.1 christos }
2401 1.1 christos if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
2402 1.1 christos {
2403 1.1 christos SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
2404 1.1 christos return 0;
2405 1.1 christos }
2406 1.1 christos }
2407 1.1 christos else
2408 1.1 christos {
2409 1.1 christos SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
2410 1.1 christos return 0;
2411 1.1 christos }
2412 1.1 christos break;
2413 1.1 christos case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
2414 1.1 christos s->tlsext_debug_arg=parg;
2415 1.1 christos ret = 1;
2416 1.1 christos break;
2417 1.1 christos
2418 1.1 christos #ifdef TLSEXT_TYPE_opaque_prf_input
2419 1.1 christos case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT:
2420 1.1 christos if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message
2421 1.1 christos * (including the cert chain and everything) */
2422 1.1 christos {
2423 1.1 christos SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG);
2424 1.1 christos break;
2425 1.1 christos }
2426 1.1 christos if (s->tlsext_opaque_prf_input != NULL)
2427 1.1 christos OPENSSL_free(s->tlsext_opaque_prf_input);
2428 1.1 christos if ((size_t)larg == 0)
2429 1.1 christos s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
2430 1.1 christos else
2431 1.1 christos s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg);
2432 1.1 christos if (s->tlsext_opaque_prf_input != NULL)
2433 1.1 christos {
2434 1.1 christos s->tlsext_opaque_prf_input_len = (size_t)larg;
2435 1.1 christos ret = 1;
2436 1.1 christos }
2437 1.1 christos else
2438 1.1 christos s->tlsext_opaque_prf_input_len = 0;
2439 1.1 christos break;
2440 1.1 christos #endif
2441 1.1 christos
2442 1.1 christos case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
2443 1.1 christos s->tlsext_status_type=larg;
2444 1.1 christos ret = 1;
2445 1.1 christos break;
2446 1.1 christos
2447 1.1 christos case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
2448 1.1 christos *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
2449 1.1 christos ret = 1;
2450 1.1 christos break;
2451 1.1 christos
2452 1.1 christos case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
2453 1.1 christos s->tlsext_ocsp_exts = parg;
2454 1.1 christos ret = 1;
2455 1.1 christos break;
2456 1.1 christos
2457 1.1 christos case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
2458 1.1 christos *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
2459 1.1 christos ret = 1;
2460 1.1 christos break;
2461 1.1 christos
2462 1.1 christos case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
2463 1.1 christos s->tlsext_ocsp_ids = parg;
2464 1.1 christos ret = 1;
2465 1.1 christos break;
2466 1.1 christos
2467 1.1 christos case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
2468 1.1 christos *(unsigned char **)parg = s->tlsext_ocsp_resp;
2469 1.1 christos return s->tlsext_ocsp_resplen;
2470 1.1 christos
2471 1.1 christos case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
2472 1.1 christos if (s->tlsext_ocsp_resp)
2473 1.1 christos OPENSSL_free(s->tlsext_ocsp_resp);
2474 1.1 christos s->tlsext_ocsp_resp = parg;
2475 1.1 christos s->tlsext_ocsp_resplen = larg;
2476 1.1 christos ret = 1;
2477 1.1 christos break;
2478 1.1 christos
2479 1.1 christos #endif /* !OPENSSL_NO_TLSEXT */
2480 1.1 christos default:
2481 1.1 christos break;
2482 1.1 christos }
2483 1.1 christos return(ret);
2484 1.1 christos }
2485 1.1 christos
2486 1.1 christos long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
2487 1.1 christos {
2488 1.1 christos int ret=0;
2489 1.1 christos
2490 1.1 christos #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
2491 1.1 christos if (
2492 1.1 christos #ifndef OPENSSL_NO_RSA
2493 1.1 christos cmd == SSL_CTRL_SET_TMP_RSA_CB ||
2494 1.1 christos #endif
2495 1.1 christos #ifndef OPENSSL_NO_DSA
2496 1.1 christos cmd == SSL_CTRL_SET_TMP_DH_CB ||
2497 1.1 christos #endif
2498 1.1 christos 0)
2499 1.1 christos {
2500 1.1 christos if (!ssl_cert_inst(&s->cert))
2501 1.1 christos {
2502 1.1 christos SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
2503 1.1 christos return(0);
2504 1.1 christos }
2505 1.1 christos }
2506 1.1 christos #endif
2507 1.1 christos
2508 1.1 christos switch (cmd)
2509 1.1 christos {
2510 1.1 christos #ifndef OPENSSL_NO_RSA
2511 1.1 christos case SSL_CTRL_SET_TMP_RSA_CB:
2512 1.1 christos {
2513 1.1 christos s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
2514 1.1 christos }
2515 1.1 christos break;
2516 1.1 christos #endif
2517 1.1 christos #ifndef OPENSSL_NO_DH
2518 1.1 christos case SSL_CTRL_SET_TMP_DH_CB:
2519 1.1 christos {
2520 1.1 christos s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
2521 1.1 christos }
2522 1.1 christos break;
2523 1.1 christos #endif
2524 1.1 christos #ifndef OPENSSL_NO_ECDH
2525 1.1 christos case SSL_CTRL_SET_TMP_ECDH_CB:
2526 1.1 christos {
2527 1.1 christos s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
2528 1.1 christos }
2529 1.1 christos break;
2530 1.1 christos #endif
2531 1.1 christos #ifndef OPENSSL_NO_TLSEXT
2532 1.1 christos case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
2533 1.1 christos s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
2534 1.1 christos unsigned char *, int, void *))fp;
2535 1.1 christos break;
2536 1.1 christos #endif
2537 1.1 christos default:
2538 1.1 christos break;
2539 1.1 christos }
2540 1.1 christos return(ret);
2541 1.1 christos }
2542 1.1 christos
2543 1.1 christos long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2544 1.1 christos {
2545 1.1 christos CERT *cert;
2546 1.1 christos
2547 1.1 christos cert=ctx->cert;
2548 1.1 christos
2549 1.1 christos switch (cmd)
2550 1.1 christos {
2551 1.1 christos #ifndef OPENSSL_NO_RSA
2552 1.1 christos case SSL_CTRL_NEED_TMP_RSA:
2553 1.1 christos if ( (cert->rsa_tmp == NULL) &&
2554 1.1 christos ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
2555 1.1 christos (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))
2556 1.1 christos )
2557 1.1 christos return(1);
2558 1.1 christos else
2559 1.1 christos return(0);
2560 1.1 christos /* break; */
2561 1.1 christos case SSL_CTRL_SET_TMP_RSA:
2562 1.1 christos {
2563 1.1 christos RSA *rsa;
2564 1.1 christos int i;
2565 1.1 christos
2566 1.1 christos rsa=(RSA *)parg;
2567 1.1 christos i=1;
2568 1.1 christos if (rsa == NULL)
2569 1.1 christos i=0;
2570 1.1 christos else
2571 1.1 christos {
2572 1.1 christos if ((rsa=RSAPrivateKey_dup(rsa)) == NULL)
2573 1.1 christos i=0;
2574 1.1 christos }
2575 1.1 christos if (!i)
2576 1.1 christos {
2577 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB);
2578 1.1 christos return(0);
2579 1.1 christos }
2580 1.1 christos else
2581 1.1 christos {
2582 1.1 christos if (cert->rsa_tmp != NULL)
2583 1.1 christos RSA_free(cert->rsa_tmp);
2584 1.1 christos cert->rsa_tmp=rsa;
2585 1.1 christos return(1);
2586 1.1 christos }
2587 1.1 christos }
2588 1.1 christos /* break; */
2589 1.1 christos case SSL_CTRL_SET_TMP_RSA_CB:
2590 1.1 christos {
2591 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2592 1.1 christos return(0);
2593 1.1 christos }
2594 1.1 christos break;
2595 1.1 christos #endif
2596 1.1 christos #ifndef OPENSSL_NO_DH
2597 1.1 christos case SSL_CTRL_SET_TMP_DH:
2598 1.1 christos {
2599 1.1 christos DH *new=NULL,*dh;
2600 1.1 christos
2601 1.1 christos dh=(DH *)parg;
2602 1.1 christos if ((new=DHparams_dup(dh)) == NULL)
2603 1.1 christos {
2604 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
2605 1.1 christos return 0;
2606 1.1 christos }
2607 1.1 christos if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
2608 1.1 christos {
2609 1.1 christos if (!DH_generate_key(new))
2610 1.1 christos {
2611 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
2612 1.1 christos DH_free(new);
2613 1.1 christos return 0;
2614 1.1 christos }
2615 1.1 christos }
2616 1.1 christos if (cert->dh_tmp != NULL)
2617 1.1 christos DH_free(cert->dh_tmp);
2618 1.1 christos cert->dh_tmp=new;
2619 1.1 christos return 1;
2620 1.1 christos }
2621 1.1 christos /*break; */
2622 1.1 christos case SSL_CTRL_SET_TMP_DH_CB:
2623 1.1 christos {
2624 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2625 1.1 christos return(0);
2626 1.1 christos }
2627 1.1 christos break;
2628 1.1 christos #endif
2629 1.1 christos #ifndef OPENSSL_NO_ECDH
2630 1.1 christos case SSL_CTRL_SET_TMP_ECDH:
2631 1.1 christos {
2632 1.1 christos EC_KEY *ecdh = NULL;
2633 1.1 christos
2634 1.1 christos if (parg == NULL)
2635 1.1 christos {
2636 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
2637 1.1 christos return 0;
2638 1.1 christos }
2639 1.1 christos ecdh = EC_KEY_dup((EC_KEY *)parg);
2640 1.1 christos if (ecdh == NULL)
2641 1.1 christos {
2642 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB);
2643 1.1 christos return 0;
2644 1.1 christos }
2645 1.1 christos if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
2646 1.1 christos {
2647 1.1 christos if (!EC_KEY_generate_key(ecdh))
2648 1.1 christos {
2649 1.1 christos EC_KEY_free(ecdh);
2650 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
2651 1.1 christos return 0;
2652 1.1 christos }
2653 1.1 christos }
2654 1.1 christos
2655 1.1 christos if (cert->ecdh_tmp != NULL)
2656 1.1 christos {
2657 1.1 christos EC_KEY_free(cert->ecdh_tmp);
2658 1.1 christos }
2659 1.1 christos cert->ecdh_tmp = ecdh;
2660 1.1 christos return 1;
2661 1.1 christos }
2662 1.1 christos /* break; */
2663 1.1 christos case SSL_CTRL_SET_TMP_ECDH_CB:
2664 1.1 christos {
2665 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2666 1.1 christos return(0);
2667 1.1 christos }
2668 1.1 christos break;
2669 1.1 christos #endif /* !OPENSSL_NO_ECDH */
2670 1.1 christos #ifndef OPENSSL_NO_TLSEXT
2671 1.1 christos case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
2672 1.1 christos ctx->tlsext_servername_arg=parg;
2673 1.1 christos break;
2674 1.1 christos case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
2675 1.1 christos case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
2676 1.1 christos {
2677 1.1 christos unsigned char *keys = parg;
2678 1.1 christos if (!keys)
2679 1.1 christos return 48;
2680 1.1 christos if (larg != 48)
2681 1.1 christos {
2682 1.1 christos SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
2683 1.1 christos return 0;
2684 1.1 christos }
2685 1.1 christos if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
2686 1.1 christos {
2687 1.1 christos memcpy(ctx->tlsext_tick_key_name, keys, 16);
2688 1.1 christos memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
2689 1.1 christos memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
2690 1.1 christos }
2691 1.1 christos else
2692 1.1 christos {
2693 1.1 christos memcpy(keys, ctx->tlsext_tick_key_name, 16);
2694 1.1 christos memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
2695 1.1 christos memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
2696 1.1 christos }
2697 1.1 christos return 1;
2698 1.1 christos }
2699 1.1 christos
2700 1.1 christos #ifdef TLSEXT_TYPE_opaque_prf_input
2701 1.1 christos case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG:
2702 1.1 christos ctx->tlsext_opaque_prf_input_callback_arg = parg;
2703 1.1 christos return 1;
2704 1.1 christos #endif
2705 1.1 christos
2706 1.1 christos case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
2707 1.1 christos ctx->tlsext_status_arg=parg;
2708 1.1 christos return 1;
2709 1.1 christos break;
2710 1.1 christos
2711 1.1 christos #endif /* !OPENSSL_NO_TLSEXT */
2712 1.1 christos
2713 1.1 christos /* A Thawte special :-) */
2714 1.1 christos case SSL_CTRL_EXTRA_CHAIN_CERT:
2715 1.1 christos if (ctx->extra_certs == NULL)
2716 1.1 christos {
2717 1.1 christos if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
2718 1.1 christos return(0);
2719 1.1 christos }
2720 1.1 christos sk_X509_push(ctx->extra_certs,(X509 *)parg);
2721 1.1 christos break;
2722 1.1 christos
2723 1.1 christos default:
2724 1.1 christos return(0);
2725 1.1 christos }
2726 1.1 christos return(1);
2727 1.1 christos }
2728 1.1 christos
2729 1.1 christos long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
2730 1.1 christos {
2731 1.1 christos CERT *cert;
2732 1.1 christos
2733 1.1 christos cert=ctx->cert;
2734 1.1 christos
2735 1.1 christos switch (cmd)
2736 1.1 christos {
2737 1.1 christos #ifndef OPENSSL_NO_RSA
2738 1.1 christos case SSL_CTRL_SET_TMP_RSA_CB:
2739 1.1 christos {
2740 1.1 christos cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
2741 1.1 christos }
2742 1.1 christos break;
2743 1.1 christos #endif
2744 1.1 christos #ifndef OPENSSL_NO_DH
2745 1.1 christos case SSL_CTRL_SET_TMP_DH_CB:
2746 1.1 christos {
2747 1.1 christos cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
2748 1.1 christos }
2749 1.1 christos break;
2750 1.1 christos #endif
2751 1.1 christos #ifndef OPENSSL_NO_ECDH
2752 1.1 christos case SSL_CTRL_SET_TMP_ECDH_CB:
2753 1.1 christos {
2754 1.1 christos cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
2755 1.1 christos }
2756 1.1 christos break;
2757 1.1 christos #endif
2758 1.1 christos #ifndef OPENSSL_NO_TLSEXT
2759 1.1 christos case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
2760 1.1 christos ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
2761 1.1 christos break;
2762 1.1 christos
2763 1.1 christos #ifdef TLSEXT_TYPE_opaque_prf_input
2764 1.1 christos case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB:
2765 1.1 christos ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, size_t, void *))fp;
2766 1.1 christos break;
2767 1.1 christos #endif
2768 1.1 christos
2769 1.1 christos case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
2770 1.1 christos ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
2771 1.1 christos break;
2772 1.1 christos
2773 1.1 christos case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
2774 1.1 christos ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *,
2775 1.1 christos unsigned char *,
2776 1.1 christos EVP_CIPHER_CTX *,
2777 1.1 christos HMAC_CTX *, int))fp;
2778 1.1 christos break;
2779 1.1 christos
2780 1.1 christos #endif
2781 1.1 christos default:
2782 1.1 christos return(0);
2783 1.1 christos }
2784 1.1 christos return(1);
2785 1.1 christos }
2786 1.1 christos
2787 1.1 christos /* This function needs to check if the ciphers required are actually
2788 1.1 christos * available */
2789 1.1 christos const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
2790 1.1 christos {
2791 1.1 christos SSL_CIPHER c;
2792 1.1 christos const SSL_CIPHER *cp;
2793 1.1 christos unsigned long id;
2794 1.1 christos
2795 1.1 christos id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
2796 1.1 christos c.id=id;
2797 1.1 christos cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
2798 1.1 christos if (cp == NULL || cp->valid == 0)
2799 1.1 christos return NULL;
2800 1.1 christos else
2801 1.1 christos return cp;
2802 1.1 christos }
2803 1.1 christos
2804 1.1 christos int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
2805 1.1 christos {
2806 1.1 christos long l;
2807 1.1 christos
2808 1.1 christos if (p != NULL)
2809 1.1 christos {
2810 1.1 christos l=c->id;
2811 1.1 christos if ((l & 0xff000000) != 0x03000000) return(0);
2812 1.1 christos p[0]=((unsigned char)(l>> 8L))&0xFF;
2813 1.1 christos p[1]=((unsigned char)(l ))&0xFF;
2814 1.1 christos }
2815 1.1 christos return(2);
2816 1.1 christos }
2817 1.1 christos
2818 1.1 christos SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
2819 1.1 christos STACK_OF(SSL_CIPHER) *srvr)
2820 1.1 christos {
2821 1.1 christos SSL_CIPHER *c,*ret=NULL;
2822 1.1 christos STACK_OF(SSL_CIPHER) *prio, *allow;
2823 1.1 christos int i,ii,ok;
2824 1.1 christos #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC)
2825 1.1 christos unsigned int j;
2826 1.1 christos int ec_ok, ec_nid;
2827 1.1 christos unsigned char ec_search1 = 0, ec_search2 = 0;
2828 1.1 christos #endif
2829 1.1 christos CERT *cert;
2830 1.1 christos unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a;
2831 1.1 christos
2832 1.1 christos /* Let's see which ciphers we can support */
2833 1.1 christos cert=s->cert;
2834 1.1 christos
2835 1.1 christos #if 0
2836 1.1 christos /* Do not set the compare functions, because this may lead to a
2837 1.1 christos * reordering by "id". We want to keep the original ordering.
2838 1.1 christos * We may pay a price in performance during sk_SSL_CIPHER_find(),
2839 1.1 christos * but would have to pay with the price of sk_SSL_CIPHER_dup().
2840 1.1 christos */
2841 1.1 christos sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
2842 1.1 christos sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
2843 1.1 christos #endif
2844 1.1 christos
2845 1.1 christos #ifdef CIPHER_DEBUG
2846 1.1 christos printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr);
2847 1.1 christos for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
2848 1.1 christos {
2849 1.1 christos c=sk_SSL_CIPHER_value(srvr,i);
2850 1.1 christos printf("%p:%s\n",(void *)c,c->name);
2851 1.1 christos }
2852 1.1 christos printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt);
2853 1.1 christos for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
2854 1.1 christos {
2855 1.1 christos c=sk_SSL_CIPHER_value(clnt,i);
2856 1.1 christos printf("%p:%s\n",(void *)c,c->name);
2857 1.1 christos }
2858 1.1 christos #endif
2859 1.1 christos
2860 1.1 christos if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)
2861 1.1 christos {
2862 1.1 christos prio = srvr;
2863 1.1 christos allow = clnt;
2864 1.1 christos }
2865 1.1 christos else
2866 1.1 christos {
2867 1.1 christos prio = clnt;
2868 1.1 christos allow = srvr;
2869 1.1 christos }
2870 1.1 christos
2871 1.1 christos for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
2872 1.1 christos {
2873 1.1 christos c=sk_SSL_CIPHER_value(prio,i);
2874 1.1 christos
2875 1.1 christos ssl_set_cert_masks(cert,c);
2876 1.1 christos mask_k = cert->mask_k;
2877 1.1 christos mask_a = cert->mask_a;
2878 1.1 christos emask_k = cert->export_mask_k;
2879 1.1 christos emask_a = cert->export_mask_a;
2880 1.1 christos
2881 1.1 christos #ifdef KSSL_DEBUG
2882 1.1 christos /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/
2883 1.1 christos #endif /* KSSL_DEBUG */
2884 1.1 christos
2885 1.1 christos alg_k=c->algorithm_mkey;
2886 1.1 christos alg_a=c->algorithm_auth;
2887 1.1 christos
2888 1.1 christos #ifndef OPENSSL_NO_KRB5
2889 1.1 christos if (alg_k & SSL_kKRB5)
2890 1.1 christos {
2891 1.1 christos if ( !kssl_keytab_is_available(s->kssl_ctx) )
2892 1.1 christos continue;
2893 1.1 christos }
2894 1.1 christos #endif /* OPENSSL_NO_KRB5 */
2895 1.1 christos #ifndef OPENSSL_NO_PSK
2896 1.1 christos /* with PSK there must be server callback set */
2897 1.1 christos if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)
2898 1.1 christos continue;
2899 1.1 christos #endif /* OPENSSL_NO_PSK */
2900 1.1 christos
2901 1.1 christos if (SSL_C_IS_EXPORT(c))
2902 1.1 christos {
2903 1.1 christos ok = (alg_k & emask_k) && (alg_a & emask_a);
2904 1.1 christos #ifdef CIPHER_DEBUG
2905 1.1 christos printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a,
2906 1.1 christos (void *)c,c->name);
2907 1.1 christos #endif
2908 1.1 christos }
2909 1.1 christos else
2910 1.1 christos {
2911 1.1 christos ok = (alg_k & mask_k) && (alg_a & mask_a);
2912 1.1 christos #ifdef CIPHER_DEBUG
2913 1.1 christos printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c,
2914 1.1 christos c->name);
2915 1.1 christos #endif
2916 1.1 christos }
2917 1.1 christos
2918 1.1 christos #ifndef OPENSSL_NO_TLSEXT
2919 1.1 christos #ifndef OPENSSL_NO_EC
2920 1.1 christos if (
2921 1.1 christos /* if we are considering an ECC cipher suite that uses our certificate */
2922 1.1 christos (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
2923 1.1 christos /* and we have an ECC certificate */
2924 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
2925 1.1 christos /* and the client specified a Supported Point Formats extension */
2926 1.1 christos && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL))
2927 1.1 christos /* and our certificate's point is compressed */
2928 1.1 christos && (
2929 1.1 christos (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL)
2930 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL)
2931 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL)
2932 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL)
2933 1.1 christos && (
2934 1.1 christos (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED)
2935 1.1 christos || (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1)
2936 1.1 christos )
2937 1.1 christos )
2938 1.1 christos )
2939 1.1 christos {
2940 1.1 christos ec_ok = 0;
2941 1.1 christos /* if our certificate's curve is over a field type that the client does not support
2942 1.1 christos * then do not allow this cipher suite to be negotiated */
2943 1.1 christos if (
2944 1.1 christos (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)
2945 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL)
2946 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL)
2947 1.1 christos && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field)
2948 1.1 christos )
2949 1.1 christos {
2950 1.1 christos for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++)
2951 1.1 christos {
2952 1.1 christos if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime)
2953 1.1 christos {
2954 1.1 christos ec_ok = 1;
2955 1.1 christos break;
2956 1.1 christos }
2957 1.1 christos }
2958 1.1 christos }
2959 1.1 christos else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field)
2960 1.1 christos {
2961 1.1 christos for (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++)
2962 1.1 christos {
2963 1.1 christos if (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2)
2964 1.1 christos {
2965 1.1 christos ec_ok = 1;
2966 1.1 christos break;
2967 1.1 christos }
2968 1.1 christos }
2969 1.1 christos }
2970 1.1 christos ok = ok && ec_ok;
2971 1.1 christos }
2972 1.1 christos if (
2973 1.1 christos /* if we are considering an ECC cipher suite that uses our certificate */
2974 1.1 christos (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
2975 1.1 christos /* and we have an ECC certificate */
2976 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
2977 1.1 christos /* and the client specified an EllipticCurves extension */
2978 1.1 christos && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL))
2979 1.1 christos )
2980 1.1 christos {
2981 1.1 christos ec_ok = 0;
2982 1.1 christos if (
2983 1.1 christos (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)
2984 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL)
2985 1.1 christos )
2986 1.1 christos {
2987 1.1 christos ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group);
2988 1.1 christos if ((ec_nid == 0)
2989 1.1 christos && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL)
2990 1.1 christos )
2991 1.1 christos {
2992 1.1 christos if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field)
2993 1.1 christos {
2994 1.1 christos ec_search1 = 0xFF;
2995 1.1 christos ec_search2 = 0x01;
2996 1.1 christos }
2997 1.1 christos else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field)
2998 1.1 christos {
2999 1.1 christos ec_search1 = 0xFF;
3000 1.1 christos ec_search2 = 0x02;
3001 1.1 christos }
3002 1.1 christos }
3003 1.1 christos else
3004 1.1 christos {
3005 1.1 christos ec_search1 = 0x00;
3006 1.1 christos ec_search2 = tls1_ec_nid2curve_id(ec_nid);
3007 1.1 christos }
3008 1.1 christos if ((ec_search1 != 0) || (ec_search2 != 0))
3009 1.1 christos {
3010 1.1 christos for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++)
3011 1.1 christos {
3012 1.1 christos if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2))
3013 1.1 christos {
3014 1.1 christos ec_ok = 1;
3015 1.1 christos break;
3016 1.1 christos }
3017 1.1 christos }
3018 1.1 christos }
3019 1.1 christos }
3020 1.1 christos ok = ok && ec_ok;
3021 1.1 christos }
3022 1.1 christos if (
3023 1.1 christos /* if we are considering an ECC cipher suite that uses an ephemeral EC key */
3024 1.1 christos (alg_k & SSL_kEECDH)
3025 1.1 christos /* and we have an ephemeral EC key */
3026 1.1 christos && (s->cert->ecdh_tmp != NULL)
3027 1.1 christos /* and the client specified an EllipticCurves extension */
3028 1.1 christos && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL))
3029 1.1 christos )
3030 1.1 christos {
3031 1.1 christos ec_ok = 0;
3032 1.1 christos if (s->cert->ecdh_tmp->group != NULL)
3033 1.1 christos {
3034 1.1 christos ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group);
3035 1.1 christos if ((ec_nid == 0)
3036 1.1 christos && (s->cert->ecdh_tmp->group->meth != NULL)
3037 1.1 christos )
3038 1.1 christos {
3039 1.1 christos if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field)
3040 1.1 christos {
3041 1.1 christos ec_search1 = 0xFF;
3042 1.1 christos ec_search2 = 0x01;
3043 1.1 christos }
3044 1.1 christos else if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field)
3045 1.1 christos {
3046 1.1 christos ec_search1 = 0xFF;
3047 1.1 christos ec_search2 = 0x02;
3048 1.1 christos }
3049 1.1 christos }
3050 1.1 christos else
3051 1.1 christos {
3052 1.1 christos ec_search1 = 0x00;
3053 1.1 christos ec_search2 = tls1_ec_nid2curve_id(ec_nid);
3054 1.1 christos }
3055 1.1 christos if ((ec_search1 != 0) || (ec_search2 != 0))
3056 1.1 christos {
3057 1.1 christos for (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++)
3058 1.1 christos {
3059 1.1 christos if ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2))
3060 1.1 christos {
3061 1.1 christos ec_ok = 1;
3062 1.1 christos break;
3063 1.1 christos }
3064 1.1 christos }
3065 1.1 christos }
3066 1.1 christos }
3067 1.1 christos ok = ok && ec_ok;
3068 1.1 christos }
3069 1.1 christos #endif /* OPENSSL_NO_EC */
3070 1.1 christos #endif /* OPENSSL_NO_TLSEXT */
3071 1.1 christos
3072 1.1 christos if (!ok) continue;
3073 1.1 christos ii=sk_SSL_CIPHER_find(allow,c);
3074 1.1 christos if (ii >= 0)
3075 1.1 christos {
3076 1.1 christos ret=sk_SSL_CIPHER_value(allow,ii);
3077 1.1 christos break;
3078 1.1 christos }
3079 1.1 christos }
3080 1.1 christos return(ret);
3081 1.1 christos }
3082 1.1 christos
3083 1.1 christos int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
3084 1.1 christos {
3085 1.1 christos int ret=0;
3086 1.1 christos unsigned long alg_k;
3087 1.1 christos
3088 1.1 christos alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
3089 1.1 christos
3090 1.1 christos #ifndef OPENSSL_NO_GOST
3091 1.1 christos if (s->version >= TLS1_VERSION)
3092 1.1 christos {
3093 1.1 christos if (alg_k & SSL_kGOST)
3094 1.1 christos {
3095 1.1 christos p[ret++]=TLS_CT_GOST94_SIGN;
3096 1.1 christos p[ret++]=TLS_CT_GOST01_SIGN;
3097 1.1 christos return(ret);
3098 1.1 christos }
3099 1.1 christos }
3100 1.1 christos #endif
3101 1.1 christos
3102 1.1 christos #ifndef OPENSSL_NO_DH
3103 1.1 christos if (alg_k & (SSL_kDHr|SSL_kEDH))
3104 1.1 christos {
3105 1.1 christos # ifndef OPENSSL_NO_RSA
3106 1.1 christos p[ret++]=SSL3_CT_RSA_FIXED_DH;
3107 1.1 christos # endif
3108 1.1 christos # ifndef OPENSSL_NO_DSA
3109 1.1 christos p[ret++]=SSL3_CT_DSS_FIXED_DH;
3110 1.1 christos # endif
3111 1.1 christos }
3112 1.1 christos if ((s->version == SSL3_VERSION) &&
3113 1.1 christos (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
3114 1.1 christos {
3115 1.1 christos # ifndef OPENSSL_NO_RSA
3116 1.1 christos p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
3117 1.1 christos # endif
3118 1.1 christos # ifndef OPENSSL_NO_DSA
3119 1.1 christos p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
3120 1.1 christos # endif
3121 1.1 christos }
3122 1.1 christos #endif /* !OPENSSL_NO_DH */
3123 1.1 christos #ifndef OPENSSL_NO_RSA
3124 1.1 christos p[ret++]=SSL3_CT_RSA_SIGN;
3125 1.1 christos #endif
3126 1.1 christos #ifndef OPENSSL_NO_DSA
3127 1.1 christos p[ret++]=SSL3_CT_DSS_SIGN;
3128 1.1 christos #endif
3129 1.1 christos #ifndef OPENSSL_NO_ECDH
3130 1.1 christos if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION))
3131 1.1 christos {
3132 1.1 christos p[ret++]=TLS_CT_RSA_FIXED_ECDH;
3133 1.1 christos p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
3134 1.1 christos }
3135 1.1 christos #endif
3136 1.1 christos
3137 1.1 christos #ifndef OPENSSL_NO_ECDSA
3138 1.1 christos /* ECDSA certs can be used with RSA cipher suites as well
3139 1.1 christos * so we don't need to check for SSL_kECDH or SSL_kEECDH
3140 1.1 christos */
3141 1.1 christos if (s->version >= TLS1_VERSION)
3142 1.1 christos {
3143 1.1 christos p[ret++]=TLS_CT_ECDSA_SIGN;
3144 1.1 christos }
3145 1.1 christos #endif
3146 1.1 christos return(ret);
3147 1.1 christos }
3148 1.1 christos
3149 1.1 christos int ssl3_shutdown(SSL *s)
3150 1.1 christos {
3151 1.1 christos int ret;
3152 1.1 christos
3153 1.1 christos /* Don't do anything much if we have not done the handshake or
3154 1.1 christos * we don't want to send messages :-) */
3155 1.1 christos if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
3156 1.1 christos {
3157 1.1 christos s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
3158 1.1 christos return(1);
3159 1.1 christos }
3160 1.1 christos
3161 1.1 christos if (!(s->shutdown & SSL_SENT_SHUTDOWN))
3162 1.1 christos {
3163 1.1 christos s->shutdown|=SSL_SENT_SHUTDOWN;
3164 1.1 christos #if 1
3165 1.1 christos ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
3166 1.1 christos #endif
3167 1.1 christos /* our shutdown alert has been sent now, and if it still needs
3168 1.1 christos * to be written, s->s3->alert_dispatch will be true */
3169 1.1 christos if (s->s3->alert_dispatch)
3170 1.1 christos return(-1); /* return WANT_WRITE */
3171 1.1 christos }
3172 1.1 christos else if (s->s3->alert_dispatch)
3173 1.1 christos {
3174 1.1 christos /* resend it if not sent */
3175 1.1 christos #if 1
3176 1.1 christos ret=s->method->ssl_dispatch_alert(s);
3177 1.1 christos if(ret == -1)
3178 1.1 christos {
3179 1.1 christos /* we only get to return -1 here the 2nd/Nth
3180 1.1 christos * invocation, we must have already signalled
3181 1.1 christos * return 0 upon a previous invoation,
3182 1.1 christos * return WANT_WRITE */
3183 1.1 christos return(ret);
3184 1.1 christos }
3185 1.1 christos #endif
3186 1.1 christos }
3187 1.1 christos else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
3188 1.1 christos {
3189 1.1 christos /* If we are waiting for a close from our peer, we are closed */
3190 1.1 christos s->method->ssl_read_bytes(s,0,NULL,0,0);
3191 1.1 christos if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
3192 1.1 christos {
3193 1.1 christos return(-1); /* return WANT_READ */
3194 1.1 christos }
3195 1.1 christos }
3196 1.1 christos
3197 1.1 christos if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
3198 1.1 christos !s->s3->alert_dispatch)
3199 1.1 christos return(1);
3200 1.1 christos else
3201 1.1 christos return(0);
3202 1.1 christos }
3203 1.1 christos
3204 1.1 christos int ssl3_write(SSL *s, const void *buf, int len)
3205 1.1 christos {
3206 1.1 christos int ret,n;
3207 1.1 christos
3208 1.1 christos #if 0
3209 1.1 christos if (s->shutdown & SSL_SEND_SHUTDOWN)
3210 1.1 christos {
3211 1.1 christos s->rwstate=SSL_NOTHING;
3212 1.1 christos return(0);
3213 1.1 christos }
3214 1.1 christos #endif
3215 1.1 christos clear_sys_error();
3216 1.1 christos if (s->s3->renegotiate) ssl3_renegotiate_check(s);
3217 1.1 christos
3218 1.1 christos /* This is an experimental flag that sends the
3219 1.1 christos * last handshake message in the same packet as the first
3220 1.1 christos * use data - used to see if it helps the TCP protocol during
3221 1.1 christos * session-id reuse */
3222 1.1 christos /* The second test is because the buffer may have been removed */
3223 1.1 christos if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
3224 1.1 christos {
3225 1.1 christos /* First time through, we write into the buffer */
3226 1.1 christos if (s->s3->delay_buf_pop_ret == 0)
3227 1.1 christos {
3228 1.1 christos ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
3229 1.1 christos buf,len);
3230 1.1 christos if (ret <= 0) return(ret);
3231 1.1 christos
3232 1.1 christos s->s3->delay_buf_pop_ret=ret;
3233 1.1 christos }
3234 1.1 christos
3235 1.1 christos s->rwstate=SSL_WRITING;
3236 1.1 christos n=BIO_flush(s->wbio);
3237 1.1 christos if (n <= 0) return(n);
3238 1.1 christos s->rwstate=SSL_NOTHING;
3239 1.1 christos
3240 1.1 christos /* We have flushed the buffer, so remove it */
3241 1.1 christos ssl_free_wbio_buffer(s);
3242 1.1 christos s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
3243 1.1 christos
3244 1.1 christos ret=s->s3->delay_buf_pop_ret;
3245 1.1 christos s->s3->delay_buf_pop_ret=0;
3246 1.1 christos }
3247 1.1 christos else
3248 1.1 christos {
3249 1.1 christos ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
3250 1.1 christos buf,len);
3251 1.1 christos if (ret <= 0) return(ret);
3252 1.1 christos }
3253 1.1 christos
3254 1.1 christos return(ret);
3255 1.1 christos }
3256 1.1 christos
3257 1.1 christos static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
3258 1.1 christos {
3259 1.1 christos int ret;
3260 1.1 christos
3261 1.1 christos clear_sys_error();
3262 1.1 christos if (s->s3->renegotiate) ssl3_renegotiate_check(s);
3263 1.1 christos s->s3->in_read_app_data=1;
3264 1.1 christos ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
3265 1.1 christos if ((ret == -1) && (s->s3->in_read_app_data == 2))
3266 1.1 christos {
3267 1.1 christos /* ssl3_read_bytes decided to call s->handshake_func, which
3268 1.1 christos * called ssl3_read_bytes to read handshake data.
3269 1.1 christos * However, ssl3_read_bytes actually found application data
3270 1.1 christos * and thinks that application data makes sense here; so disable
3271 1.1 christos * handshake processing and try to read application data again. */
3272 1.1 christos s->in_handshake++;
3273 1.1 christos ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
3274 1.1 christos s->in_handshake--;
3275 1.1 christos }
3276 1.1 christos else
3277 1.1 christos s->s3->in_read_app_data=0;
3278 1.1 christos
3279 1.1 christos return(ret);
3280 1.1 christos }
3281 1.1 christos
3282 1.1 christos int ssl3_read(SSL *s, void *buf, int len)
3283 1.1 christos {
3284 1.1 christos return ssl3_read_internal(s, buf, len, 0);
3285 1.1 christos }
3286 1.1 christos
3287 1.1 christos int ssl3_peek(SSL *s, void *buf, int len)
3288 1.1 christos {
3289 1.1 christos return ssl3_read_internal(s, buf, len, 1);
3290 1.1 christos }
3291 1.1 christos
3292 1.1 christos int ssl3_renegotiate(SSL *s)
3293 1.1 christos {
3294 1.1 christos if (s->handshake_func == NULL)
3295 1.1 christos return(1);
3296 1.1 christos
3297 1.1 christos if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
3298 1.1 christos return(0);
3299 1.1 christos
3300 1.2 christos if (1)
3301 1.2 christos return(0);
3302 1.1 christos s->s3->renegotiate=1;
3303 1.1 christos return(1);
3304 1.1 christos }
3305 1.1 christos
3306 1.1 christos int ssl3_renegotiate_check(SSL *s)
3307 1.1 christos {
3308 1.1 christos int ret=0;
3309 1.1 christos
3310 1.1 christos if (s->s3->renegotiate)
3311 1.1 christos {
3312 1.1 christos if ( (s->s3->rbuf.left == 0) &&
3313 1.1 christos (s->s3->wbuf.left == 0) &&
3314 1.1 christos !SSL_in_init(s))
3315 1.1 christos {
3316 1.1 christos /*
3317 1.1 christos if we are the server, and we have sent a 'RENEGOTIATE' message, we
3318 1.1 christos need to go to SSL_ST_ACCEPT.
3319 1.1 christos */
3320 1.1 christos /* SSL_ST_ACCEPT */
3321 1.1 christos s->state=SSL_ST_RENEGOTIATE;
3322 1.1 christos s->s3->renegotiate=0;
3323 1.1 christos s->s3->num_renegotiations++;
3324 1.1 christos s->s3->total_renegotiations++;
3325 1.1 christos ret=1;
3326 1.1 christos }
3327 1.1 christos }
3328 1.1 christos return(ret);
3329 1.1 christos }
3330 1.1 christos
3331