Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: openssl/ssl/s3_lib.c

Issue 2072073002: Delete bundled copy of OpenSSL and replace with README. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/openssl@master
Patch Set: Delete bundled copy of OpenSSL and replace with README. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « openssl/ssl/s3_enc.c ('k') | openssl/ssl/s3_meth.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* ssl/s3_lib.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58 /* ====================================================================
59 * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 * notice, this list of conditions and the following disclaimer in
70 * the documentation and/or other materials provided with the
71 * distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 * software must display the following acknowledgment:
75 * "This product includes software developed by the OpenSSL Project
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 * endorse or promote products derived from this software without
80 * prior written permission. For written permission, please contact
81 * openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 * nor may "OpenSSL" appear in their names without prior written
85 * permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 * acknowledgment:
89 * "This product includes software developed by the OpenSSL Project
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com). This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111 /* ====================================================================
112 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113 *
114 * Portions of the attached software ("Contribution") are developed by
115 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
116 *
117 * The Contribution is licensed pursuant to the OpenSSL open source
118 * license provided above.
119 *
120 * ECC cipher suite support in OpenSSL originally written by
121 * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
122 *
123 */
124 /* ====================================================================
125 * Copyright 2005 Nokia. All rights reserved.
126 *
127 * The portions of the attached software ("Contribution") is developed by
128 * Nokia Corporation and is licensed pursuant to the OpenSSL open source
129 * license.
130 *
131 * The Contribution, originally written by Mika Kousa and Pasi Eronen of
132 * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
133 * support (see RFC 4279) to OpenSSL.
134 *
135 * No patent licenses or other rights except those expressly stated in
136 * the OpenSSL open source license shall be deemed granted or received
137 * expressly, by implication, estoppel, or otherwise.
138 *
139 * No assurances are provided by Nokia that the Contribution does not
140 * infringe the patent or other intellectual property rights of any third
141 * party or that the license provides you with all the necessary rights
142 * to make use of the Contribution.
143 *
144 * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
145 * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
146 * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
147 * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
148 * OTHERWISE.
149 */
150
151 #include <stdio.h>
152 #include <openssl/objects.h>
153 #include "ssl_locl.h"
154 #include "kssl_lcl.h"
155 #ifndef OPENSSL_NO_TLSEXT
156 #ifndef OPENSSL_NO_EC
157 #include "../crypto/ec/ec_lcl.h"
158 #endif /* OPENSSL_NO_EC */
159 #endif /* OPENSSL_NO_TLSEXT */
160 #include <openssl/md5.h>
161 #ifndef OPENSSL_NO_DH
162 #include <openssl/dh.h>
163 #endif
164
165 const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT;
166
167 #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
168
169 /* FIXED_NONCE_LEN is a macro that results in the correct value to set the
170 * fixed nonce length in SSL_CIPHER.algorithms2. It's the inverse of
171 * SSL_CIPHER_AEAD_FIXED_NONCE_LEN. */
172 #define FIXED_NONCE_LEN(x) ((x/2)<<24)
173
174 /* list of available SSLv3 ciphers (sorted by id) */
175 OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
176
177 /* The RSA ciphers */
178 /* Cipher 01 */
179 {
180 1,
181 SSL3_TXT_RSA_NULL_MD5,
182 SSL3_CK_RSA_NULL_MD5,
183 SSL_kRSA,
184 SSL_aRSA,
185 SSL_eNULL,
186 SSL_MD5,
187 SSL_SSLV3,
188 SSL_NOT_EXP|SSL_STRONG_NONE,
189 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
190 0,
191 0,
192 },
193
194 /* Cipher 02 */
195 {
196 1,
197 SSL3_TXT_RSA_NULL_SHA,
198 SSL3_CK_RSA_NULL_SHA,
199 SSL_kRSA,
200 SSL_aRSA,
201 SSL_eNULL,
202 SSL_SHA1,
203 SSL_SSLV3,
204 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
205 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
206 0,
207 0,
208 },
209
210 /* Cipher 03 */
211 {
212 1,
213 SSL3_TXT_RSA_RC4_40_MD5,
214 SSL3_CK_RSA_RC4_40_MD5,
215 SSL_kRSA,
216 SSL_aRSA,
217 SSL_RC4,
218 SSL_MD5,
219 SSL_SSLV3,
220 SSL_EXPORT|SSL_EXP40,
221 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
222 40,
223 128,
224 },
225
226 /* Cipher 04 */
227 {
228 1,
229 SSL3_TXT_RSA_RC4_128_MD5,
230 SSL3_CK_RSA_RC4_128_MD5,
231 SSL_kRSA,
232 SSL_aRSA,
233 SSL_RC4,
234 SSL_MD5,
235 SSL_SSLV3,
236 SSL_NOT_EXP|SSL_MEDIUM,
237 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
238 128,
239 128,
240 },
241
242 /* Cipher 05 */
243 {
244 1,
245 SSL3_TXT_RSA_RC4_128_SHA,
246 SSL3_CK_RSA_RC4_128_SHA,
247 SSL_kRSA,
248 SSL_aRSA,
249 SSL_RC4,
250 SSL_SHA1,
251 SSL_SSLV3,
252 SSL_NOT_EXP|SSL_MEDIUM,
253 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
254 128,
255 128,
256 },
257
258 /* Cipher 06 */
259 {
260 1,
261 SSL3_TXT_RSA_RC2_40_MD5,
262 SSL3_CK_RSA_RC2_40_MD5,
263 SSL_kRSA,
264 SSL_aRSA,
265 SSL_RC2,
266 SSL_MD5,
267 SSL_SSLV3,
268 SSL_EXPORT|SSL_EXP40,
269 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
270 40,
271 128,
272 },
273
274 /* Cipher 07 */
275 #ifndef OPENSSL_NO_IDEA
276 {
277 1,
278 SSL3_TXT_RSA_IDEA_128_SHA,
279 SSL3_CK_RSA_IDEA_128_SHA,
280 SSL_kRSA,
281 SSL_aRSA,
282 SSL_IDEA,
283 SSL_SHA1,
284 SSL_SSLV3,
285 SSL_NOT_EXP|SSL_MEDIUM,
286 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
287 128,
288 128,
289 },
290 #endif
291
292 /* Cipher 08 */
293 {
294 1,
295 SSL3_TXT_RSA_DES_40_CBC_SHA,
296 SSL3_CK_RSA_DES_40_CBC_SHA,
297 SSL_kRSA,
298 SSL_aRSA,
299 SSL_DES,
300 SSL_SHA1,
301 SSL_SSLV3,
302 SSL_EXPORT|SSL_EXP40,
303 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
304 40,
305 56,
306 },
307
308 /* Cipher 09 */
309 {
310 1,
311 SSL3_TXT_RSA_DES_64_CBC_SHA,
312 SSL3_CK_RSA_DES_64_CBC_SHA,
313 SSL_kRSA,
314 SSL_aRSA,
315 SSL_DES,
316 SSL_SHA1,
317 SSL_SSLV3,
318 SSL_NOT_EXP|SSL_LOW,
319 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
320 56,
321 56,
322 },
323
324 /* Cipher 0A */
325 {
326 1,
327 SSL3_TXT_RSA_DES_192_CBC3_SHA,
328 SSL3_CK_RSA_DES_192_CBC3_SHA,
329 SSL_kRSA,
330 SSL_aRSA,
331 SSL_3DES,
332 SSL_SHA1,
333 SSL_SSLV3,
334 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
335 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
336 168,
337 168,
338 },
339
340 /* The DH ciphers */
341 /* Cipher 0B */
342 {
343 0,
344 SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
345 SSL3_CK_DH_DSS_DES_40_CBC_SHA,
346 SSL_kDHd,
347 SSL_aDH,
348 SSL_DES,
349 SSL_SHA1,
350 SSL_SSLV3,
351 SSL_EXPORT|SSL_EXP40,
352 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
353 40,
354 56,
355 },
356
357 /* Cipher 0C */
358 {
359 0, /* not implemented (non-ephemeral DH) */
360 SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
361 SSL3_CK_DH_DSS_DES_64_CBC_SHA,
362 SSL_kDHd,
363 SSL_aDH,
364 SSL_DES,
365 SSL_SHA1,
366 SSL_SSLV3,
367 SSL_NOT_EXP|SSL_LOW,
368 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
369 56,
370 56,
371 },
372
373 /* Cipher 0D */
374 {
375 0, /* not implemented (non-ephemeral DH) */
376 SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
377 SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
378 SSL_kDHd,
379 SSL_aDH,
380 SSL_3DES,
381 SSL_SHA1,
382 SSL_SSLV3,
383 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
384 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
385 168,
386 168,
387 },
388
389 /* Cipher 0E */
390 {
391 0, /* not implemented (non-ephemeral DH) */
392 SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
393 SSL3_CK_DH_RSA_DES_40_CBC_SHA,
394 SSL_kDHr,
395 SSL_aDH,
396 SSL_DES,
397 SSL_SHA1,
398 SSL_SSLV3,
399 SSL_EXPORT|SSL_EXP40,
400 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
401 40,
402 56,
403 },
404
405 /* Cipher 0F */
406 {
407 0, /* not implemented (non-ephemeral DH) */
408 SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
409 SSL3_CK_DH_RSA_DES_64_CBC_SHA,
410 SSL_kDHr,
411 SSL_aDH,
412 SSL_DES,
413 SSL_SHA1,
414 SSL_SSLV3,
415 SSL_NOT_EXP|SSL_LOW,
416 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
417 56,
418 56,
419 },
420
421 /* Cipher 10 */
422 {
423 0, /* not implemented (non-ephemeral DH) */
424 SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
425 SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
426 SSL_kDHr,
427 SSL_aDH,
428 SSL_3DES,
429 SSL_SHA1,
430 SSL_SSLV3,
431 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
432 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
433 168,
434 168,
435 },
436
437 /* The Ephemeral DH ciphers */
438 /* Cipher 11 */
439 {
440 1,
441 SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
442 SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
443 SSL_kEDH,
444 SSL_aDSS,
445 SSL_DES,
446 SSL_SHA1,
447 SSL_SSLV3,
448 SSL_EXPORT|SSL_EXP40,
449 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
450 40,
451 56,
452 },
453
454 /* Cipher 12 */
455 {
456 1,
457 SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
458 SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
459 SSL_kEDH,
460 SSL_aDSS,
461 SSL_DES,
462 SSL_SHA1,
463 SSL_SSLV3,
464 SSL_NOT_EXP|SSL_LOW,
465 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
466 56,
467 56,
468 },
469
470 /* Cipher 13 */
471 {
472 1,
473 SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
474 SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
475 SSL_kEDH,
476 SSL_aDSS,
477 SSL_3DES,
478 SSL_SHA1,
479 SSL_SSLV3,
480 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
481 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
482 168,
483 168,
484 },
485
486 /* Cipher 14 */
487 {
488 1,
489 SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
490 SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
491 SSL_kEDH,
492 SSL_aRSA,
493 SSL_DES,
494 SSL_SHA1,
495 SSL_SSLV3,
496 SSL_EXPORT|SSL_EXP40,
497 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
498 40,
499 56,
500 },
501
502 /* Cipher 15 */
503 {
504 1,
505 SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
506 SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
507 SSL_kEDH,
508 SSL_aRSA,
509 SSL_DES,
510 SSL_SHA1,
511 SSL_SSLV3,
512 SSL_NOT_EXP|SSL_LOW,
513 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
514 56,
515 56,
516 },
517
518 /* Cipher 16 */
519 {
520 1,
521 SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
522 SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
523 SSL_kEDH,
524 SSL_aRSA,
525 SSL_3DES,
526 SSL_SHA1,
527 SSL_SSLV3,
528 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
529 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
530 168,
531 168,
532 },
533
534 /* Cipher 17 */
535 {
536 1,
537 SSL3_TXT_ADH_RC4_40_MD5,
538 SSL3_CK_ADH_RC4_40_MD5,
539 SSL_kEDH,
540 SSL_aNULL,
541 SSL_RC4,
542 SSL_MD5,
543 SSL_SSLV3,
544 SSL_EXPORT|SSL_EXP40,
545 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
546 40,
547 128,
548 },
549
550 /* Cipher 18 */
551 {
552 1,
553 SSL3_TXT_ADH_RC4_128_MD5,
554 SSL3_CK_ADH_RC4_128_MD5,
555 SSL_kEDH,
556 SSL_aNULL,
557 SSL_RC4,
558 SSL_MD5,
559 SSL_SSLV3,
560 SSL_NOT_EXP|SSL_MEDIUM,
561 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
562 128,
563 128,
564 },
565
566 /* Cipher 19 */
567 {
568 1,
569 SSL3_TXT_ADH_DES_40_CBC_SHA,
570 SSL3_CK_ADH_DES_40_CBC_SHA,
571 SSL_kEDH,
572 SSL_aNULL,
573 SSL_DES,
574 SSL_SHA1,
575 SSL_SSLV3,
576 SSL_EXPORT|SSL_EXP40,
577 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
578 40,
579 128,
580 },
581
582 /* Cipher 1A */
583 {
584 1,
585 SSL3_TXT_ADH_DES_64_CBC_SHA,
586 SSL3_CK_ADH_DES_64_CBC_SHA,
587 SSL_kEDH,
588 SSL_aNULL,
589 SSL_DES,
590 SSL_SHA1,
591 SSL_SSLV3,
592 SSL_NOT_EXP|SSL_LOW,
593 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
594 56,
595 56,
596 },
597
598 /* Cipher 1B */
599 {
600 1,
601 SSL3_TXT_ADH_DES_192_CBC_SHA,
602 SSL3_CK_ADH_DES_192_CBC_SHA,
603 SSL_kEDH,
604 SSL_aNULL,
605 SSL_3DES,
606 SSL_SHA1,
607 SSL_SSLV3,
608 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
609 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
610 168,
611 168,
612 },
613
614 /* Fortezza ciphersuite from SSL 3.0 spec */
615 #if 0
616 /* Cipher 1C */
617 {
618 0,
619 SSL3_TXT_FZA_DMS_NULL_SHA,
620 SSL3_CK_FZA_DMS_NULL_SHA,
621 SSL_kFZA,
622 SSL_aFZA,
623 SSL_eNULL,
624 SSL_SHA1,
625 SSL_SSLV3,
626 SSL_NOT_EXP|SSL_STRONG_NONE,
627 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
628 0,
629 0,
630 },
631
632 /* Cipher 1D */
633 {
634 0,
635 SSL3_TXT_FZA_DMS_FZA_SHA,
636 SSL3_CK_FZA_DMS_FZA_SHA,
637 SSL_kFZA,
638 SSL_aFZA,
639 SSL_eFZA,
640 SSL_SHA1,
641 SSL_SSLV3,
642 SSL_NOT_EXP|SSL_STRONG_NONE,
643 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
644 0,
645 0,
646 },
647
648 /* Cipher 1E */
649 {
650 0,
651 SSL3_TXT_FZA_DMS_RC4_SHA,
652 SSL3_CK_FZA_DMS_RC4_SHA,
653 SSL_kFZA,
654 SSL_aFZA,
655 SSL_RC4,
656 SSL_SHA1,
657 SSL_SSLV3,
658 SSL_NOT_EXP|SSL_MEDIUM,
659 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
660 128,
661 128,
662 },
663 #endif
664
665 #ifndef OPENSSL_NO_KRB5
666 /* The Kerberos ciphers*/
667 /* Cipher 1E */
668 {
669 1,
670 SSL3_TXT_KRB5_DES_64_CBC_SHA,
671 SSL3_CK_KRB5_DES_64_CBC_SHA,
672 SSL_kKRB5,
673 SSL_aKRB5,
674 SSL_DES,
675 SSL_SHA1,
676 SSL_SSLV3,
677 SSL_NOT_EXP|SSL_LOW,
678 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
679 56,
680 56,
681 },
682
683 /* Cipher 1F */
684 {
685 1,
686 SSL3_TXT_KRB5_DES_192_CBC3_SHA,
687 SSL3_CK_KRB5_DES_192_CBC3_SHA,
688 SSL_kKRB5,
689 SSL_aKRB5,
690 SSL_3DES,
691 SSL_SHA1,
692 SSL_SSLV3,
693 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
694 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
695 168,
696 168,
697 },
698
699 /* Cipher 20 */
700 {
701 1,
702 SSL3_TXT_KRB5_RC4_128_SHA,
703 SSL3_CK_KRB5_RC4_128_SHA,
704 SSL_kKRB5,
705 SSL_aKRB5,
706 SSL_RC4,
707 SSL_SHA1,
708 SSL_SSLV3,
709 SSL_NOT_EXP|SSL_MEDIUM,
710 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
711 128,
712 128,
713 },
714
715 /* Cipher 21 */
716 {
717 1,
718 SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
719 SSL3_CK_KRB5_IDEA_128_CBC_SHA,
720 SSL_kKRB5,
721 SSL_aKRB5,
722 SSL_IDEA,
723 SSL_SHA1,
724 SSL_SSLV3,
725 SSL_NOT_EXP|SSL_MEDIUM,
726 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
727 128,
728 128,
729 },
730
731 /* Cipher 22 */
732 {
733 1,
734 SSL3_TXT_KRB5_DES_64_CBC_MD5,
735 SSL3_CK_KRB5_DES_64_CBC_MD5,
736 SSL_kKRB5,
737 SSL_aKRB5,
738 SSL_DES,
739 SSL_MD5,
740 SSL_SSLV3,
741 SSL_NOT_EXP|SSL_LOW,
742 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
743 56,
744 56,
745 },
746
747 /* Cipher 23 */
748 {
749 1,
750 SSL3_TXT_KRB5_DES_192_CBC3_MD5,
751 SSL3_CK_KRB5_DES_192_CBC3_MD5,
752 SSL_kKRB5,
753 SSL_aKRB5,
754 SSL_3DES,
755 SSL_MD5,
756 SSL_SSLV3,
757 SSL_NOT_EXP|SSL_HIGH,
758 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
759 168,
760 168,
761 },
762
763 /* Cipher 24 */
764 {
765 1,
766 SSL3_TXT_KRB5_RC4_128_MD5,
767 SSL3_CK_KRB5_RC4_128_MD5,
768 SSL_kKRB5,
769 SSL_aKRB5,
770 SSL_RC4,
771 SSL_MD5,
772 SSL_SSLV3,
773 SSL_NOT_EXP|SSL_MEDIUM,
774 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
775 128,
776 128,
777 },
778
779 /* Cipher 25 */
780 {
781 1,
782 SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
783 SSL3_CK_KRB5_IDEA_128_CBC_MD5,
784 SSL_kKRB5,
785 SSL_aKRB5,
786 SSL_IDEA,
787 SSL_MD5,
788 SSL_SSLV3,
789 SSL_NOT_EXP|SSL_MEDIUM,
790 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
791 128,
792 128,
793 },
794
795 /* Cipher 26 */
796 {
797 1,
798 SSL3_TXT_KRB5_DES_40_CBC_SHA,
799 SSL3_CK_KRB5_DES_40_CBC_SHA,
800 SSL_kKRB5,
801 SSL_aKRB5,
802 SSL_DES,
803 SSL_SHA1,
804 SSL_SSLV3,
805 SSL_EXPORT|SSL_EXP40,
806 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
807 40,
808 56,
809 },
810
811 /* Cipher 27 */
812 {
813 1,
814 SSL3_TXT_KRB5_RC2_40_CBC_SHA,
815 SSL3_CK_KRB5_RC2_40_CBC_SHA,
816 SSL_kKRB5,
817 SSL_aKRB5,
818 SSL_RC2,
819 SSL_SHA1,
820 SSL_SSLV3,
821 SSL_EXPORT|SSL_EXP40,
822 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
823 40,
824 128,
825 },
826
827 /* Cipher 28 */
828 {
829 1,
830 SSL3_TXT_KRB5_RC4_40_SHA,
831 SSL3_CK_KRB5_RC4_40_SHA,
832 SSL_kKRB5,
833 SSL_aKRB5,
834 SSL_RC4,
835 SSL_SHA1,
836 SSL_SSLV3,
837 SSL_EXPORT|SSL_EXP40,
838 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
839 40,
840 128,
841 },
842
843 /* Cipher 29 */
844 {
845 1,
846 SSL3_TXT_KRB5_DES_40_CBC_MD5,
847 SSL3_CK_KRB5_DES_40_CBC_MD5,
848 SSL_kKRB5,
849 SSL_aKRB5,
850 SSL_DES,
851 SSL_MD5,
852 SSL_SSLV3,
853 SSL_EXPORT|SSL_EXP40,
854 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
855 40,
856 56,
857 },
858
859 /* Cipher 2A */
860 {
861 1,
862 SSL3_TXT_KRB5_RC2_40_CBC_MD5,
863 SSL3_CK_KRB5_RC2_40_CBC_MD5,
864 SSL_kKRB5,
865 SSL_aKRB5,
866 SSL_RC2,
867 SSL_MD5,
868 SSL_SSLV3,
869 SSL_EXPORT|SSL_EXP40,
870 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
871 40,
872 128,
873 },
874
875 /* Cipher 2B */
876 {
877 1,
878 SSL3_TXT_KRB5_RC4_40_MD5,
879 SSL3_CK_KRB5_RC4_40_MD5,
880 SSL_kKRB5,
881 SSL_aKRB5,
882 SSL_RC4,
883 SSL_MD5,
884 SSL_SSLV3,
885 SSL_EXPORT|SSL_EXP40,
886 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
887 40,
888 128,
889 },
890 #endif /* OPENSSL_NO_KRB5 */
891
892 /* New AES ciphersuites */
893 /* Cipher 2F */
894 {
895 1,
896 TLS1_TXT_RSA_WITH_AES_128_SHA,
897 TLS1_CK_RSA_WITH_AES_128_SHA,
898 SSL_kRSA,
899 SSL_aRSA,
900 SSL_AES128,
901 SSL_SHA1,
902 SSL_TLSV1,
903 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
904 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
905 128,
906 128,
907 },
908 /* Cipher 30 */
909 {
910 0,
911 TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
912 TLS1_CK_DH_DSS_WITH_AES_128_SHA,
913 SSL_kDHd,
914 SSL_aDH,
915 SSL_AES128,
916 SSL_SHA1,
917 SSL_TLSV1,
918 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
919 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
920 128,
921 128,
922 },
923 /* Cipher 31 */
924 {
925 0,
926 TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
927 TLS1_CK_DH_RSA_WITH_AES_128_SHA,
928 SSL_kDHr,
929 SSL_aDH,
930 SSL_AES128,
931 SSL_SHA1,
932 SSL_TLSV1,
933 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
934 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
935 128,
936 128,
937 },
938 /* Cipher 32 */
939 {
940 1,
941 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
942 TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
943 SSL_kEDH,
944 SSL_aDSS,
945 SSL_AES128,
946 SSL_SHA1,
947 SSL_TLSV1,
948 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
949 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
950 128,
951 128,
952 },
953 /* Cipher 33 */
954 {
955 1,
956 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
957 TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
958 SSL_kEDH,
959 SSL_aRSA,
960 SSL_AES128,
961 SSL_SHA1,
962 SSL_TLSV1,
963 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
964 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
965 128,
966 128,
967 },
968 /* Cipher 34 */
969 {
970 1,
971 TLS1_TXT_ADH_WITH_AES_128_SHA,
972 TLS1_CK_ADH_WITH_AES_128_SHA,
973 SSL_kEDH,
974 SSL_aNULL,
975 SSL_AES128,
976 SSL_SHA1,
977 SSL_TLSV1,
978 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
979 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
980 128,
981 128,
982 },
983
984 /* Cipher 35 */
985 {
986 1,
987 TLS1_TXT_RSA_WITH_AES_256_SHA,
988 TLS1_CK_RSA_WITH_AES_256_SHA,
989 SSL_kRSA,
990 SSL_aRSA,
991 SSL_AES256,
992 SSL_SHA1,
993 SSL_TLSV1,
994 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
995 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
996 256,
997 256,
998 },
999 /* Cipher 36 */
1000 {
1001 0,
1002 TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
1003 TLS1_CK_DH_DSS_WITH_AES_256_SHA,
1004 SSL_kDHd,
1005 SSL_aDH,
1006 SSL_AES256,
1007 SSL_SHA1,
1008 SSL_TLSV1,
1009 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1010 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1011 256,
1012 256,
1013 },
1014
1015 /* Cipher 37 */
1016 {
1017 0, /* not implemented (non-ephemeral DH) */
1018 TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
1019 TLS1_CK_DH_RSA_WITH_AES_256_SHA,
1020 SSL_kDHr,
1021 SSL_aDH,
1022 SSL_AES256,
1023 SSL_SHA1,
1024 SSL_TLSV1,
1025 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1026 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1027 256,
1028 256,
1029 },
1030
1031 /* Cipher 38 */
1032 {
1033 1,
1034 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
1035 TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
1036 SSL_kEDH,
1037 SSL_aDSS,
1038 SSL_AES256,
1039 SSL_SHA1,
1040 SSL_TLSV1,
1041 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1042 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1043 256,
1044 256,
1045 },
1046
1047 /* Cipher 39 */
1048 {
1049 1,
1050 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
1051 TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
1052 SSL_kEDH,
1053 SSL_aRSA,
1054 SSL_AES256,
1055 SSL_SHA1,
1056 SSL_TLSV1,
1057 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1058 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1059 256,
1060 256,
1061 },
1062
1063 /* Cipher 3A */
1064 {
1065 1,
1066 TLS1_TXT_ADH_WITH_AES_256_SHA,
1067 TLS1_CK_ADH_WITH_AES_256_SHA,
1068 SSL_kEDH,
1069 SSL_aNULL,
1070 SSL_AES256,
1071 SSL_SHA1,
1072 SSL_TLSV1,
1073 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1074 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1075 256,
1076 256,
1077 },
1078
1079 /* TLS v1.2 ciphersuites */
1080 /* Cipher 3B */
1081 {
1082 1,
1083 TLS1_TXT_RSA_WITH_NULL_SHA256,
1084 TLS1_CK_RSA_WITH_NULL_SHA256,
1085 SSL_kRSA,
1086 SSL_aRSA,
1087 SSL_eNULL,
1088 SSL_SHA256,
1089 SSL_TLSV1_2,
1090 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
1091 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1092 0,
1093 0,
1094 },
1095
1096 /* Cipher 3C */
1097 {
1098 1,
1099 TLS1_TXT_RSA_WITH_AES_128_SHA256,
1100 TLS1_CK_RSA_WITH_AES_128_SHA256,
1101 SSL_kRSA,
1102 SSL_aRSA,
1103 SSL_AES128,
1104 SSL_SHA256,
1105 SSL_TLSV1_2,
1106 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1107 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1108 128,
1109 128,
1110 },
1111
1112 /* Cipher 3D */
1113 {
1114 1,
1115 TLS1_TXT_RSA_WITH_AES_256_SHA256,
1116 TLS1_CK_RSA_WITH_AES_256_SHA256,
1117 SSL_kRSA,
1118 SSL_aRSA,
1119 SSL_AES256,
1120 SSL_SHA256,
1121 SSL_TLSV1_2,
1122 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1123 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1124 256,
1125 256,
1126 },
1127
1128 /* Cipher 3E */
1129 {
1130 0, /* not implemented (non-ephemeral DH) */
1131 TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
1132 TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
1133 SSL_kDHd,
1134 SSL_aDH,
1135 SSL_AES128,
1136 SSL_SHA256,
1137 SSL_TLSV1_2,
1138 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1139 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1140 128,
1141 128,
1142 },
1143
1144 /* Cipher 3F */
1145 {
1146 0, /* not implemented (non-ephemeral DH) */
1147 TLS1_TXT_DH_RSA_WITH_AES_128_SHA256,
1148 TLS1_CK_DH_RSA_WITH_AES_128_SHA256,
1149 SSL_kDHr,
1150 SSL_aDH,
1151 SSL_AES128,
1152 SSL_SHA256,
1153 SSL_TLSV1_2,
1154 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1155 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1156 128,
1157 128,
1158 },
1159
1160 /* Cipher 40 */
1161 {
1162 1,
1163 TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
1164 TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
1165 SSL_kEDH,
1166 SSL_aDSS,
1167 SSL_AES128,
1168 SSL_SHA256,
1169 SSL_TLSV1_2,
1170 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1171 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1172 128,
1173 128,
1174 },
1175
1176 #ifndef OPENSSL_NO_CAMELLIA
1177 /* Camellia ciphersuites from RFC4132 (128-bit portion) */
1178
1179 /* Cipher 41 */
1180 {
1181 1,
1182 TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
1183 TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
1184 SSL_kRSA,
1185 SSL_aRSA,
1186 SSL_CAMELLIA128,
1187 SSL_SHA1,
1188 SSL_TLSV1,
1189 SSL_NOT_EXP|SSL_HIGH,
1190 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1191 128,
1192 128,
1193 },
1194
1195 /* Cipher 42 */
1196 {
1197 0, /* not implemented (non-ephemeral DH) */
1198 TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
1199 TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
1200 SSL_kDHd,
1201 SSL_aDH,
1202 SSL_CAMELLIA128,
1203 SSL_SHA1,
1204 SSL_TLSV1,
1205 SSL_NOT_EXP|SSL_HIGH,
1206 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1207 128,
1208 128,
1209 },
1210
1211 /* Cipher 43 */
1212 {
1213 0, /* not implemented (non-ephemeral DH) */
1214 TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
1215 TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
1216 SSL_kDHr,
1217 SSL_aDH,
1218 SSL_CAMELLIA128,
1219 SSL_SHA1,
1220 SSL_TLSV1,
1221 SSL_NOT_EXP|SSL_HIGH,
1222 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1223 128,
1224 128,
1225 },
1226
1227 /* Cipher 44 */
1228 {
1229 1,
1230 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
1231 TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
1232 SSL_kEDH,
1233 SSL_aDSS,
1234 SSL_CAMELLIA128,
1235 SSL_SHA1,
1236 SSL_TLSV1,
1237 SSL_NOT_EXP|SSL_HIGH,
1238 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1239 128,
1240 128,
1241 },
1242
1243 /* Cipher 45 */
1244 {
1245 1,
1246 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1247 TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
1248 SSL_kEDH,
1249 SSL_aRSA,
1250 SSL_CAMELLIA128,
1251 SSL_SHA1,
1252 SSL_TLSV1,
1253 SSL_NOT_EXP|SSL_HIGH,
1254 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1255 128,
1256 128,
1257 },
1258
1259 /* Cipher 46 */
1260 {
1261 1,
1262 TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
1263 TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
1264 SSL_kEDH,
1265 SSL_aNULL,
1266 SSL_CAMELLIA128,
1267 SSL_SHA1,
1268 SSL_TLSV1,
1269 SSL_NOT_EXP|SSL_HIGH,
1270 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1271 128,
1272 128,
1273 },
1274 #endif /* OPENSSL_NO_CAMELLIA */
1275
1276 #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
1277 /* New TLS Export CipherSuites from expired ID */
1278 #if 0
1279 /* Cipher 60 */
1280 {
1281 1,
1282 TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
1283 TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
1284 SSL_kRSA,
1285 SSL_aRSA,
1286 SSL_RC4,
1287 SSL_MD5,
1288 SSL_TLSV1,
1289 SSL_EXPORT|SSL_EXP56,
1290 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1291 56,
1292 128,
1293 },
1294
1295 /* Cipher 61 */
1296 {
1297 1,
1298 TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1299 TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
1300 SSL_kRSA,
1301 SSL_aRSA,
1302 SSL_RC2,
1303 SSL_MD5,
1304 SSL_TLSV1,
1305 SSL_EXPORT|SSL_EXP56,
1306 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1307 56,
1308 128,
1309 },
1310 #endif
1311
1312 /* Cipher 62 */
1313 {
1314 1,
1315 TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1316 TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
1317 SSL_kRSA,
1318 SSL_aRSA,
1319 SSL_DES,
1320 SSL_SHA1,
1321 SSL_TLSV1,
1322 SSL_EXPORT|SSL_EXP56,
1323 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1324 56,
1325 56,
1326 },
1327
1328 /* Cipher 63 */
1329 {
1330 1,
1331 TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1332 TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
1333 SSL_kEDH,
1334 SSL_aDSS,
1335 SSL_DES,
1336 SSL_SHA1,
1337 SSL_TLSV1,
1338 SSL_EXPORT|SSL_EXP56,
1339 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1340 56,
1341 56,
1342 },
1343
1344 /* Cipher 64 */
1345 {
1346 1,
1347 TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
1348 TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
1349 SSL_kRSA,
1350 SSL_aRSA,
1351 SSL_RC4,
1352 SSL_SHA1,
1353 SSL_TLSV1,
1354 SSL_EXPORT|SSL_EXP56,
1355 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1356 56,
1357 128,
1358 },
1359
1360 /* Cipher 65 */
1361 {
1362 1,
1363 TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1364 TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
1365 SSL_kEDH,
1366 SSL_aDSS,
1367 SSL_RC4,
1368 SSL_SHA1,
1369 SSL_TLSV1,
1370 SSL_EXPORT|SSL_EXP56,
1371 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1372 56,
1373 128,
1374 },
1375
1376 /* Cipher 66 */
1377 {
1378 1,
1379 TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
1380 TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
1381 SSL_kEDH,
1382 SSL_aDSS,
1383 SSL_RC4,
1384 SSL_SHA1,
1385 SSL_TLSV1,
1386 SSL_NOT_EXP|SSL_MEDIUM,
1387 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1388 128,
1389 128,
1390 },
1391 #endif
1392
1393 /* TLS v1.2 ciphersuites */
1394 /* Cipher 67 */
1395 {
1396 1,
1397 TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
1398 TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
1399 SSL_kEDH,
1400 SSL_aRSA,
1401 SSL_AES128,
1402 SSL_SHA256,
1403 SSL_TLSV1_2,
1404 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1405 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1406 128,
1407 128,
1408 },
1409
1410 /* Cipher 68 */
1411 {
1412 0, /* not implemented (non-ephemeral DH) */
1413 TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
1414 TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
1415 SSL_kDHd,
1416 SSL_aDH,
1417 SSL_AES256,
1418 SSL_SHA256,
1419 SSL_TLSV1_2,
1420 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1421 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1422 256,
1423 256,
1424 },
1425
1426 /* Cipher 69 */
1427 {
1428 0, /* not implemented (non-ephemeral DH) */
1429 TLS1_TXT_DH_RSA_WITH_AES_256_SHA256,
1430 TLS1_CK_DH_RSA_WITH_AES_256_SHA256,
1431 SSL_kDHr,
1432 SSL_aDH,
1433 SSL_AES256,
1434 SSL_SHA256,
1435 SSL_TLSV1_2,
1436 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1437 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1438 256,
1439 256,
1440 },
1441
1442 /* Cipher 6A */
1443 {
1444 1,
1445 TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
1446 TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
1447 SSL_kEDH,
1448 SSL_aDSS,
1449 SSL_AES256,
1450 SSL_SHA256,
1451 SSL_TLSV1_2,
1452 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1453 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1454 256,
1455 256,
1456 },
1457
1458 /* Cipher 6B */
1459 {
1460 1,
1461 TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
1462 TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
1463 SSL_kEDH,
1464 SSL_aRSA,
1465 SSL_AES256,
1466 SSL_SHA256,
1467 SSL_TLSV1_2,
1468 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1469 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1470 256,
1471 256,
1472 },
1473
1474 /* Cipher 6C */
1475 {
1476 1,
1477 TLS1_TXT_ADH_WITH_AES_128_SHA256,
1478 TLS1_CK_ADH_WITH_AES_128_SHA256,
1479 SSL_kEDH,
1480 SSL_aNULL,
1481 SSL_AES128,
1482 SSL_SHA256,
1483 SSL_TLSV1_2,
1484 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1485 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1486 128,
1487 128,
1488 },
1489
1490 /* Cipher 6D */
1491 {
1492 1,
1493 TLS1_TXT_ADH_WITH_AES_256_SHA256,
1494 TLS1_CK_ADH_WITH_AES_256_SHA256,
1495 SSL_kEDH,
1496 SSL_aNULL,
1497 SSL_AES256,
1498 SSL_SHA256,
1499 SSL_TLSV1_2,
1500 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1501 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1502 256,
1503 256,
1504 },
1505
1506 /* GOST Ciphersuites */
1507
1508 {
1509 1,
1510 "GOST94-GOST89-GOST89",
1511 0x3000080,
1512 SSL_kGOST,
1513 SSL_aGOST94,
1514 SSL_eGOST2814789CNT,
1515 SSL_GOST89MAC,
1516 SSL_TLSV1,
1517 SSL_NOT_EXP|SSL_HIGH,
1518 SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC,
1519 256,
1520 256
1521 },
1522 {
1523 1,
1524 "GOST2001-GOST89-GOST89",
1525 0x3000081,
1526 SSL_kGOST,
1527 SSL_aGOST01,
1528 SSL_eGOST2814789CNT,
1529 SSL_GOST89MAC,
1530 SSL_TLSV1,
1531 SSL_NOT_EXP|SSL_HIGH,
1532 SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC,
1533 256,
1534 256
1535 },
1536 {
1537 1,
1538 "GOST94-NULL-GOST94",
1539 0x3000082,
1540 SSL_kGOST,
1541 SSL_aGOST94,
1542 SSL_eNULL,
1543 SSL_GOST94,
1544 SSL_TLSV1,
1545 SSL_NOT_EXP|SSL_STRONG_NONE,
1546 SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
1547 0,
1548 0
1549 },
1550 {
1551 1,
1552 "GOST2001-NULL-GOST94",
1553 0x3000083,
1554 SSL_kGOST,
1555 SSL_aGOST01,
1556 SSL_eNULL,
1557 SSL_GOST94,
1558 SSL_TLSV1,
1559 SSL_NOT_EXP|SSL_STRONG_NONE,
1560 SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
1561 0,
1562 0
1563 },
1564
1565 #ifndef OPENSSL_NO_CAMELLIA
1566 /* Camellia ciphersuites from RFC4132 (256-bit portion) */
1567
1568 /* Cipher 84 */
1569 {
1570 1,
1571 TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
1572 TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
1573 SSL_kRSA,
1574 SSL_aRSA,
1575 SSL_CAMELLIA256,
1576 SSL_SHA1,
1577 SSL_TLSV1,
1578 SSL_NOT_EXP|SSL_HIGH,
1579 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1580 256,
1581 256,
1582 },
1583 /* Cipher 85 */
1584 {
1585 0, /* not implemented (non-ephemeral DH) */
1586 TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1587 TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
1588 SSL_kDHd,
1589 SSL_aDH,
1590 SSL_CAMELLIA256,
1591 SSL_SHA1,
1592 SSL_TLSV1,
1593 SSL_NOT_EXP|SSL_HIGH,
1594 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1595 256,
1596 256,
1597 },
1598
1599 /* Cipher 86 */
1600 {
1601 0, /* not implemented (non-ephemeral DH) */
1602 TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1603 TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
1604 SSL_kDHr,
1605 SSL_aDH,
1606 SSL_CAMELLIA256,
1607 SSL_SHA1,
1608 SSL_TLSV1,
1609 SSL_NOT_EXP|SSL_HIGH,
1610 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1611 256,
1612 256,
1613 },
1614
1615 /* Cipher 87 */
1616 {
1617 1,
1618 TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1619 TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
1620 SSL_kEDH,
1621 SSL_aDSS,
1622 SSL_CAMELLIA256,
1623 SSL_SHA1,
1624 SSL_TLSV1,
1625 SSL_NOT_EXP|SSL_HIGH,
1626 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1627 256,
1628 256,
1629 },
1630
1631 /* Cipher 88 */
1632 {
1633 1,
1634 TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1635 TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
1636 SSL_kEDH,
1637 SSL_aRSA,
1638 SSL_CAMELLIA256,
1639 SSL_SHA1,
1640 SSL_TLSV1,
1641 SSL_NOT_EXP|SSL_HIGH,
1642 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1643 256,
1644 256,
1645 },
1646
1647 /* Cipher 89 */
1648 {
1649 1,
1650 TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
1651 TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
1652 SSL_kEDH,
1653 SSL_aNULL,
1654 SSL_CAMELLIA256,
1655 SSL_SHA1,
1656 SSL_TLSV1,
1657 SSL_NOT_EXP|SSL_HIGH,
1658 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1659 256,
1660 256,
1661 },
1662 #endif /* OPENSSL_NO_CAMELLIA */
1663
1664 #ifndef OPENSSL_NO_PSK
1665 /* Cipher 8A */
1666 {
1667 1,
1668 TLS1_TXT_PSK_WITH_RC4_128_SHA,
1669 TLS1_CK_PSK_WITH_RC4_128_SHA,
1670 SSL_kPSK,
1671 SSL_aPSK,
1672 SSL_RC4,
1673 SSL_SHA1,
1674 SSL_TLSV1,
1675 SSL_NOT_EXP|SSL_MEDIUM,
1676 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1677 128,
1678 128,
1679 },
1680
1681 /* Cipher 8B */
1682 {
1683 1,
1684 TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
1685 TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
1686 SSL_kPSK,
1687 SSL_aPSK,
1688 SSL_3DES,
1689 SSL_SHA1,
1690 SSL_TLSV1,
1691 SSL_NOT_EXP|SSL_HIGH,
1692 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1693 168,
1694 168,
1695 },
1696
1697 /* Cipher 8C */
1698 {
1699 1,
1700 TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
1701 TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
1702 SSL_kPSK,
1703 SSL_aPSK,
1704 SSL_AES128,
1705 SSL_SHA1,
1706 SSL_TLSV1,
1707 SSL_NOT_EXP|SSL_HIGH,
1708 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1709 128,
1710 128,
1711 },
1712
1713 /* Cipher 8D */
1714 {
1715 1,
1716 TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
1717 TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
1718 SSL_kPSK,
1719 SSL_aPSK,
1720 SSL_AES256,
1721 SSL_SHA1,
1722 SSL_TLSV1,
1723 SSL_NOT_EXP|SSL_HIGH,
1724 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1725 256,
1726 256,
1727 },
1728 #endif /* OPENSSL_NO_PSK */
1729
1730 #ifndef OPENSSL_NO_SEED
1731 /* SEED ciphersuites from RFC4162 */
1732
1733 /* Cipher 96 */
1734 {
1735 1,
1736 TLS1_TXT_RSA_WITH_SEED_SHA,
1737 TLS1_CK_RSA_WITH_SEED_SHA,
1738 SSL_kRSA,
1739 SSL_aRSA,
1740 SSL_SEED,
1741 SSL_SHA1,
1742 SSL_TLSV1,
1743 SSL_NOT_EXP|SSL_MEDIUM,
1744 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1745 128,
1746 128,
1747 },
1748
1749 /* Cipher 97 */
1750 {
1751 0, /* not implemented (non-ephemeral DH) */
1752 TLS1_TXT_DH_DSS_WITH_SEED_SHA,
1753 TLS1_CK_DH_DSS_WITH_SEED_SHA,
1754 SSL_kDHd,
1755 SSL_aDH,
1756 SSL_SEED,
1757 SSL_SHA1,
1758 SSL_TLSV1,
1759 SSL_NOT_EXP|SSL_MEDIUM,
1760 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1761 128,
1762 128,
1763 },
1764
1765 /* Cipher 98 */
1766 {
1767 0, /* not implemented (non-ephemeral DH) */
1768 TLS1_TXT_DH_RSA_WITH_SEED_SHA,
1769 TLS1_CK_DH_RSA_WITH_SEED_SHA,
1770 SSL_kDHr,
1771 SSL_aDH,
1772 SSL_SEED,
1773 SSL_SHA1,
1774 SSL_TLSV1,
1775 SSL_NOT_EXP|SSL_MEDIUM,
1776 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1777 128,
1778 128,
1779 },
1780
1781 /* Cipher 99 */
1782 {
1783 1,
1784 TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
1785 TLS1_CK_DHE_DSS_WITH_SEED_SHA,
1786 SSL_kEDH,
1787 SSL_aDSS,
1788 SSL_SEED,
1789 SSL_SHA1,
1790 SSL_TLSV1,
1791 SSL_NOT_EXP|SSL_MEDIUM,
1792 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1793 128,
1794 128,
1795 },
1796
1797 /* Cipher 9A */
1798 {
1799 1,
1800 TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
1801 TLS1_CK_DHE_RSA_WITH_SEED_SHA,
1802 SSL_kEDH,
1803 SSL_aRSA,
1804 SSL_SEED,
1805 SSL_SHA1,
1806 SSL_TLSV1,
1807 SSL_NOT_EXP|SSL_MEDIUM,
1808 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1809 128,
1810 128,
1811 },
1812
1813 /* Cipher 9B */
1814 {
1815 1,
1816 TLS1_TXT_ADH_WITH_SEED_SHA,
1817 TLS1_CK_ADH_WITH_SEED_SHA,
1818 SSL_kEDH,
1819 SSL_aNULL,
1820 SSL_SEED,
1821 SSL_SHA1,
1822 SSL_TLSV1,
1823 SSL_NOT_EXP|SSL_MEDIUM,
1824 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1825 128,
1826 128,
1827 },
1828
1829 #endif /* OPENSSL_NO_SEED */
1830
1831 /* GCM ciphersuites from RFC5288 */
1832
1833 /* Cipher 9C */
1834 {
1835 1,
1836 TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
1837 TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
1838 SSL_kRSA,
1839 SSL_aRSA,
1840 SSL_AES128GCM,
1841 SSL_AEAD,
1842 SSL_TLSV1_2,
1843 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1844 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
1845 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
1846 128,
1847 128,
1848 },
1849
1850 /* Cipher 9D */
1851 {
1852 1,
1853 TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
1854 TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
1855 SSL_kRSA,
1856 SSL_aRSA,
1857 SSL_AES256GCM,
1858 SSL_AEAD,
1859 SSL_TLSV1_2,
1860 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1861 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
1862 256,
1863 256,
1864 },
1865
1866 /* Cipher 9E */
1867 {
1868 1,
1869 TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
1870 TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
1871 SSL_kEDH,
1872 SSL_aRSA,
1873 SSL_AES128GCM,
1874 SSL_AEAD,
1875 SSL_TLSV1_2,
1876 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1877 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
1878 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
1879 128,
1880 128,
1881 },
1882
1883 /* Cipher 9F */
1884 {
1885 1,
1886 TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
1887 TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
1888 SSL_kEDH,
1889 SSL_aRSA,
1890 SSL_AES256GCM,
1891 SSL_AEAD,
1892 SSL_TLSV1_2,
1893 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1894 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
1895 256,
1896 256,
1897 },
1898
1899 /* Cipher A0 */
1900 {
1901 0,
1902 TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256,
1903 TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256,
1904 SSL_kDHr,
1905 SSL_aDH,
1906 SSL_AES128GCM,
1907 SSL_AEAD,
1908 SSL_TLSV1_2,
1909 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1910 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
1911 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
1912 128,
1913 128,
1914 },
1915
1916 /* Cipher A1 */
1917 {
1918 0,
1919 TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384,
1920 TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384,
1921 SSL_kDHr,
1922 SSL_aDH,
1923 SSL_AES256GCM,
1924 SSL_AEAD,
1925 SSL_TLSV1_2,
1926 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1927 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
1928 256,
1929 256,
1930 },
1931
1932 /* Cipher A2 */
1933 {
1934 1,
1935 TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
1936 TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
1937 SSL_kEDH,
1938 SSL_aDSS,
1939 SSL_AES128GCM,
1940 SSL_AEAD,
1941 SSL_TLSV1_2,
1942 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1943 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
1944 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
1945 128,
1946 128,
1947 },
1948
1949 /* Cipher A3 */
1950 {
1951 1,
1952 TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
1953 TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
1954 SSL_kEDH,
1955 SSL_aDSS,
1956 SSL_AES256GCM,
1957 SSL_AEAD,
1958 SSL_TLSV1_2,
1959 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1960 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
1961 256,
1962 256,
1963 },
1964
1965 /* Cipher A4 */
1966 {
1967 0,
1968 TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
1969 TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
1970 SSL_kDHd,
1971 SSL_aDH,
1972 SSL_AES128GCM,
1973 SSL_AEAD,
1974 SSL_TLSV1_2,
1975 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1976 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
1977 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
1978 128,
1979 128,
1980 },
1981
1982 /* Cipher A5 */
1983 {
1984 0,
1985 TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
1986 TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
1987 SSL_kDHd,
1988 SSL_aDH,
1989 SSL_AES256GCM,
1990 SSL_AEAD,
1991 SSL_TLSV1_2,
1992 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1993 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
1994 256,
1995 256,
1996 },
1997
1998 /* Cipher A6 */
1999 {
2000 1,
2001 TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
2002 TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
2003 SSL_kEDH,
2004 SSL_aNULL,
2005 SSL_AES128GCM,
2006 SSL_AEAD,
2007 SSL_TLSV1_2,
2008 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2009 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
2010 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
2011 128,
2012 128,
2013 },
2014
2015 /* Cipher A7 */
2016 {
2017 1,
2018 TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
2019 TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
2020 SSL_kEDH,
2021 SSL_aNULL,
2022 SSL_AES256GCM,
2023 SSL_AEAD,
2024 SSL_TLSV1_2,
2025 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2026 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2027 256,
2028 256,
2029 },
2030
2031 #ifndef OPENSSL_NO_ECDH
2032 /* Cipher C001 */
2033 {
2034 1,
2035 TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
2036 TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
2037 SSL_kECDHe,
2038 SSL_aECDH,
2039 SSL_eNULL,
2040 SSL_SHA1,
2041 SSL_TLSV1,
2042 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
2043 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2044 0,
2045 0,
2046 },
2047
2048 /* Cipher C002 */
2049 {
2050 1,
2051 TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
2052 TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
2053 SSL_kECDHe,
2054 SSL_aECDH,
2055 SSL_RC4,
2056 SSL_SHA1,
2057 SSL_TLSV1,
2058 SSL_NOT_EXP|SSL_MEDIUM,
2059 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2060 128,
2061 128,
2062 },
2063
2064 /* Cipher C003 */
2065 {
2066 1,
2067 TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
2068 TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
2069 SSL_kECDHe,
2070 SSL_aECDH,
2071 SSL_3DES,
2072 SSL_SHA1,
2073 SSL_TLSV1,
2074 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2075 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2076 168,
2077 168,
2078 },
2079
2080 /* Cipher C004 */
2081 {
2082 1,
2083 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
2084 TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
2085 SSL_kECDHe,
2086 SSL_aECDH,
2087 SSL_AES128,
2088 SSL_SHA1,
2089 SSL_TLSV1,
2090 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2091 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2092 128,
2093 128,
2094 },
2095
2096 /* Cipher C005 */
2097 {
2098 1,
2099 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
2100 TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
2101 SSL_kECDHe,
2102 SSL_aECDH,
2103 SSL_AES256,
2104 SSL_SHA1,
2105 SSL_TLSV1,
2106 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2107 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2108 256,
2109 256,
2110 },
2111
2112 /* Cipher C006 */
2113 {
2114 1,
2115 TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
2116 TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
2117 SSL_kEECDH,
2118 SSL_aECDSA,
2119 SSL_eNULL,
2120 SSL_SHA1,
2121 SSL_TLSV1,
2122 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
2123 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2124 0,
2125 0,
2126 },
2127
2128 /* Cipher C007 */
2129 {
2130 1,
2131 TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
2132 TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
2133 SSL_kEECDH,
2134 SSL_aECDSA,
2135 SSL_RC4,
2136 SSL_SHA1,
2137 SSL_TLSV1,
2138 SSL_NOT_EXP|SSL_MEDIUM,
2139 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2140 128,
2141 128,
2142 },
2143
2144 /* Cipher C008 */
2145 {
2146 1,
2147 TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
2148 TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
2149 SSL_kEECDH,
2150 SSL_aECDSA,
2151 SSL_3DES,
2152 SSL_SHA1,
2153 SSL_TLSV1,
2154 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2155 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2156 168,
2157 168,
2158 },
2159
2160 /* Cipher C009 */
2161 {
2162 1,
2163 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
2164 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
2165 SSL_kEECDH,
2166 SSL_aECDSA,
2167 SSL_AES128,
2168 SSL_SHA1,
2169 SSL_TLSV1,
2170 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2171 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2172 128,
2173 128,
2174 },
2175
2176 /* Cipher C00A */
2177 {
2178 1,
2179 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
2180 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
2181 SSL_kEECDH,
2182 SSL_aECDSA,
2183 SSL_AES256,
2184 SSL_SHA1,
2185 SSL_TLSV1,
2186 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2187 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2188 256,
2189 256,
2190 },
2191
2192 /* Cipher C00B */
2193 {
2194 1,
2195 TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
2196 TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
2197 SSL_kECDHr,
2198 SSL_aECDH,
2199 SSL_eNULL,
2200 SSL_SHA1,
2201 SSL_TLSV1,
2202 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
2203 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2204 0,
2205 0,
2206 },
2207
2208 /* Cipher C00C */
2209 {
2210 1,
2211 TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
2212 TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
2213 SSL_kECDHr,
2214 SSL_aECDH,
2215 SSL_RC4,
2216 SSL_SHA1,
2217 SSL_TLSV1,
2218 SSL_NOT_EXP|SSL_MEDIUM,
2219 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2220 128,
2221 128,
2222 },
2223
2224 /* Cipher C00D */
2225 {
2226 1,
2227 TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
2228 TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
2229 SSL_kECDHr,
2230 SSL_aECDH,
2231 SSL_3DES,
2232 SSL_SHA1,
2233 SSL_TLSV1,
2234 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2235 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2236 168,
2237 168,
2238 },
2239
2240 /* Cipher C00E */
2241 {
2242 1,
2243 TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
2244 TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
2245 SSL_kECDHr,
2246 SSL_aECDH,
2247 SSL_AES128,
2248 SSL_SHA1,
2249 SSL_TLSV1,
2250 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2251 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2252 128,
2253 128,
2254 },
2255
2256 /* Cipher C00F */
2257 {
2258 1,
2259 TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
2260 TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
2261 SSL_kECDHr,
2262 SSL_aECDH,
2263 SSL_AES256,
2264 SSL_SHA1,
2265 SSL_TLSV1,
2266 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2267 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2268 256,
2269 256,
2270 },
2271
2272 /* Cipher C010 */
2273 {
2274 1,
2275 TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
2276 TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
2277 SSL_kEECDH,
2278 SSL_aRSA,
2279 SSL_eNULL,
2280 SSL_SHA1,
2281 SSL_TLSV1,
2282 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
2283 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2284 0,
2285 0,
2286 },
2287
2288 /* Cipher C011 */
2289 {
2290 1,
2291 TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
2292 TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
2293 SSL_kEECDH,
2294 SSL_aRSA,
2295 SSL_RC4,
2296 SSL_SHA1,
2297 SSL_TLSV1,
2298 SSL_NOT_EXP|SSL_MEDIUM,
2299 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2300 128,
2301 128,
2302 },
2303
2304 /* Cipher C012 */
2305 {
2306 1,
2307 TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
2308 TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
2309 SSL_kEECDH,
2310 SSL_aRSA,
2311 SSL_3DES,
2312 SSL_SHA1,
2313 SSL_TLSV1,
2314 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2315 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2316 168,
2317 168,
2318 },
2319
2320 /* Cipher C013 */
2321 {
2322 1,
2323 TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
2324 TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
2325 SSL_kEECDH,
2326 SSL_aRSA,
2327 SSL_AES128,
2328 SSL_SHA1,
2329 SSL_TLSV1,
2330 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2331 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2332 128,
2333 128,
2334 },
2335
2336 /* Cipher C014 */
2337 {
2338 1,
2339 TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
2340 TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
2341 SSL_kEECDH,
2342 SSL_aRSA,
2343 SSL_AES256,
2344 SSL_SHA1,
2345 SSL_TLSV1,
2346 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2347 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2348 256,
2349 256,
2350 },
2351
2352 /* Cipher C015 */
2353 {
2354 1,
2355 TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
2356 TLS1_CK_ECDH_anon_WITH_NULL_SHA,
2357 SSL_kEECDH,
2358 SSL_aNULL,
2359 SSL_eNULL,
2360 SSL_SHA1,
2361 SSL_TLSV1,
2362 SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
2363 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2364 0,
2365 0,
2366 },
2367
2368 /* Cipher C016 */
2369 {
2370 1,
2371 TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
2372 TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
2373 SSL_kEECDH,
2374 SSL_aNULL,
2375 SSL_RC4,
2376 SSL_SHA1,
2377 SSL_TLSV1,
2378 SSL_NOT_EXP|SSL_MEDIUM,
2379 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2380 128,
2381 128,
2382 },
2383
2384 /* Cipher C017 */
2385 {
2386 1,
2387 TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
2388 TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
2389 SSL_kEECDH,
2390 SSL_aNULL,
2391 SSL_3DES,
2392 SSL_SHA1,
2393 SSL_TLSV1,
2394 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2395 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2396 168,
2397 168,
2398 },
2399
2400 /* Cipher C018 */
2401 {
2402 1,
2403 TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
2404 TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
2405 SSL_kEECDH,
2406 SSL_aNULL,
2407 SSL_AES128,
2408 SSL_SHA1,
2409 SSL_TLSV1,
2410 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2411 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2412 128,
2413 128,
2414 },
2415
2416 /* Cipher C019 */
2417 {
2418 1,
2419 TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
2420 TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
2421 SSL_kEECDH,
2422 SSL_aNULL,
2423 SSL_AES256,
2424 SSL_SHA1,
2425 SSL_TLSV1,
2426 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2427 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2428 256,
2429 256,
2430 },
2431 #endif /* OPENSSL_NO_ECDH */
2432
2433 #ifndef OPENSSL_NO_SRP
2434 /* Cipher C01A */
2435 {
2436 1,
2437 TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
2438 TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
2439 SSL_kSRP,
2440 SSL_aNULL,
2441 SSL_3DES,
2442 SSL_SHA1,
2443 SSL_TLSV1,
2444 SSL_NOT_EXP|SSL_HIGH,
2445 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2446 168,
2447 168,
2448 },
2449
2450 /* Cipher C01B */
2451 {
2452 1,
2453 TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
2454 TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
2455 SSL_kSRP,
2456 SSL_aRSA,
2457 SSL_3DES,
2458 SSL_SHA1,
2459 SSL_TLSV1,
2460 SSL_NOT_EXP|SSL_HIGH,
2461 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2462 168,
2463 168,
2464 },
2465
2466 /* Cipher C01C */
2467 {
2468 1,
2469 TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
2470 TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
2471 SSL_kSRP,
2472 SSL_aDSS,
2473 SSL_3DES,
2474 SSL_SHA1,
2475 SSL_TLSV1,
2476 SSL_NOT_EXP|SSL_HIGH,
2477 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2478 168,
2479 168,
2480 },
2481
2482 /* Cipher C01D */
2483 {
2484 1,
2485 TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA,
2486 TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA,
2487 SSL_kSRP,
2488 SSL_aNULL,
2489 SSL_AES128,
2490 SSL_SHA1,
2491 SSL_TLSV1,
2492 SSL_NOT_EXP|SSL_HIGH,
2493 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2494 128,
2495 128,
2496 },
2497
2498 /* Cipher C01E */
2499 {
2500 1,
2501 TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
2502 TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
2503 SSL_kSRP,
2504 SSL_aRSA,
2505 SSL_AES128,
2506 SSL_SHA1,
2507 SSL_TLSV1,
2508 SSL_NOT_EXP|SSL_HIGH,
2509 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2510 128,
2511 128,
2512 },
2513
2514 /* Cipher C01F */
2515 {
2516 1,
2517 TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
2518 TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
2519 SSL_kSRP,
2520 SSL_aDSS,
2521 SSL_AES128,
2522 SSL_SHA1,
2523 SSL_TLSV1,
2524 SSL_NOT_EXP|SSL_HIGH,
2525 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2526 128,
2527 128,
2528 },
2529
2530 /* Cipher C020 */
2531 {
2532 1,
2533 TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA,
2534 TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA,
2535 SSL_kSRP,
2536 SSL_aNULL,
2537 SSL_AES256,
2538 SSL_SHA1,
2539 SSL_TLSV1,
2540 SSL_NOT_EXP|SSL_HIGH,
2541 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2542 256,
2543 256,
2544 },
2545
2546 /* Cipher C021 */
2547 {
2548 1,
2549 TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2550 TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2551 SSL_kSRP,
2552 SSL_aRSA,
2553 SSL_AES256,
2554 SSL_SHA1,
2555 SSL_TLSV1,
2556 SSL_NOT_EXP|SSL_HIGH,
2557 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2558 256,
2559 256,
2560 },
2561
2562 /* Cipher C022 */
2563 {
2564 1,
2565 TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2566 TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2567 SSL_kSRP,
2568 SSL_aDSS,
2569 SSL_AES256,
2570 SSL_SHA1,
2571 SSL_TLSV1,
2572 SSL_NOT_EXP|SSL_HIGH,
2573 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2574 256,
2575 256,
2576 },
2577 #endif /* OPENSSL_NO_SRP */
2578 #ifndef OPENSSL_NO_ECDH
2579
2580 /* HMAC based TLS v1.2 ciphersuites from RFC5289 */
2581
2582 /* Cipher C023 */
2583 {
2584 1,
2585 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
2586 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
2587 SSL_kEECDH,
2588 SSL_aECDSA,
2589 SSL_AES128,
2590 SSL_SHA256,
2591 SSL_TLSV1_2,
2592 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2593 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
2594 128,
2595 128,
2596 },
2597
2598 /* Cipher C024 */
2599 {
2600 1,
2601 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
2602 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
2603 SSL_kEECDH,
2604 SSL_aECDSA,
2605 SSL_AES256,
2606 SSL_SHA384,
2607 SSL_TLSV1_2,
2608 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2609 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2610 256,
2611 256,
2612 },
2613
2614 /* Cipher C025 */
2615 {
2616 1,
2617 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256,
2618 TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256,
2619 SSL_kECDHe,
2620 SSL_aECDH,
2621 SSL_AES128,
2622 SSL_SHA256,
2623 SSL_TLSV1_2,
2624 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2625 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
2626 128,
2627 128,
2628 },
2629
2630 /* Cipher C026 */
2631 {
2632 1,
2633 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384,
2634 TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384,
2635 SSL_kECDHe,
2636 SSL_aECDH,
2637 SSL_AES256,
2638 SSL_SHA384,
2639 SSL_TLSV1_2,
2640 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2641 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2642 256,
2643 256,
2644 },
2645
2646 /* Cipher C027 */
2647 {
2648 1,
2649 TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
2650 TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
2651 SSL_kEECDH,
2652 SSL_aRSA,
2653 SSL_AES128,
2654 SSL_SHA256,
2655 SSL_TLSV1_2,
2656 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2657 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
2658 128,
2659 128,
2660 },
2661
2662 /* Cipher C028 */
2663 {
2664 1,
2665 TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
2666 TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
2667 SSL_kEECDH,
2668 SSL_aRSA,
2669 SSL_AES256,
2670 SSL_SHA384,
2671 SSL_TLSV1_2,
2672 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2673 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2674 256,
2675 256,
2676 },
2677
2678 /* Cipher C029 */
2679 {
2680 1,
2681 TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
2682 TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
2683 SSL_kECDHr,
2684 SSL_aECDH,
2685 SSL_AES128,
2686 SSL_SHA256,
2687 SSL_TLSV1_2,
2688 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2689 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
2690 128,
2691 128,
2692 },
2693
2694 /* Cipher C02A */
2695 {
2696 1,
2697 TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
2698 TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
2699 SSL_kECDHr,
2700 SSL_aECDH,
2701 SSL_AES256,
2702 SSL_SHA384,
2703 SSL_TLSV1_2,
2704 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2705 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2706 256,
2707 256,
2708 },
2709
2710 /* GCM based TLS v1.2 ciphersuites from RFC5289 */
2711
2712 /* Cipher C02B */
2713 {
2714 1,
2715 TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
2716 TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
2717 SSL_kEECDH,
2718 SSL_aECDSA,
2719 SSL_AES128GCM,
2720 SSL_AEAD,
2721 SSL_TLSV1_2,
2722 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2723 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
2724 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
2725 128,
2726 128,
2727 },
2728
2729 /* Cipher C02C */
2730 {
2731 1,
2732 TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
2733 TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
2734 SSL_kEECDH,
2735 SSL_aECDSA,
2736 SSL_AES256GCM,
2737 SSL_AEAD,
2738 SSL_TLSV1_2,
2739 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2740 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2741 256,
2742 256,
2743 },
2744
2745 /* Cipher C02D */
2746 {
2747 1,
2748 TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
2749 TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
2750 SSL_kECDHe,
2751 SSL_aECDH,
2752 SSL_AES128GCM,
2753 SSL_AEAD,
2754 SSL_TLSV1_2,
2755 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2756 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
2757 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
2758 128,
2759 128,
2760 },
2761
2762 /* Cipher C02E */
2763 {
2764 1,
2765 TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
2766 TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
2767 SSL_kECDHe,
2768 SSL_aECDH,
2769 SSL_AES256GCM,
2770 SSL_AEAD,
2771 SSL_TLSV1_2,
2772 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2773 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2774 256,
2775 256,
2776 },
2777
2778 /* Cipher C02F */
2779 {
2780 1,
2781 TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
2782 TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
2783 SSL_kEECDH,
2784 SSL_aRSA,
2785 SSL_AES128GCM,
2786 SSL_AEAD,
2787 SSL_TLSV1_2,
2788 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2789 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
2790 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
2791 128,
2792 128,
2793 },
2794
2795 /* Cipher C030 */
2796 {
2797 1,
2798 TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
2799 TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
2800 SSL_kEECDH,
2801 SSL_aRSA,
2802 SSL_AES256GCM,
2803 SSL_AEAD,
2804 SSL_TLSV1_2,
2805 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2806 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2807 256,
2808 256,
2809 },
2810
2811 /* Cipher C031 */
2812 {
2813 1,
2814 TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2815 TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2816 SSL_kECDHr,
2817 SSL_aECDH,
2818 SSL_AES128GCM,
2819 SSL_AEAD,
2820 SSL_TLSV1_2,
2821 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2822 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(4)|
2823 SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
2824 128,
2825 128,
2826 },
2827
2828 /* Cipher C032 */
2829 {
2830 1,
2831 TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2832 TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2833 SSL_kECDHr,
2834 SSL_aECDH,
2835 SSL_AES256GCM,
2836 SSL_AEAD,
2837 SSL_TLSV1_2,
2838 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
2839 SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
2840 256,
2841 256,
2842 },
2843
2844 #endif /* OPENSSL_NO_ECDH */
2845
2846
2847 #ifdef TEMP_GOST_TLS
2848 /* Cipher FF00 */
2849 {
2850 1,
2851 "GOST-MD5",
2852 0x0300ff00,
2853 SSL_kRSA,
2854 SSL_aRSA,
2855 SSL_eGOST2814789CNT,
2856 SSL_MD5,
2857 SSL_TLSV1,
2858 SSL_NOT_EXP|SSL_HIGH,
2859 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2860 256,
2861 256,
2862 },
2863 {
2864 1,
2865 "GOST-GOST94",
2866 0x0300ff01,
2867 SSL_kRSA,
2868 SSL_aRSA,
2869 SSL_eGOST2814789CNT,
2870 SSL_GOST94,
2871 SSL_TLSV1,
2872 SSL_NOT_EXP|SSL_HIGH,
2873 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2874 256,
2875 256
2876 },
2877 {
2878 1,
2879 "GOST-GOST89MAC",
2880 0x0300ff02,
2881 SSL_kRSA,
2882 SSL_aRSA,
2883 SSL_eGOST2814789CNT,
2884 SSL_GOST89MAC,
2885 SSL_TLSV1,
2886 SSL_NOT_EXP|SSL_HIGH,
2887 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
2888 256,
2889 256
2890 },
2891 {
2892 1,
2893 "GOST-GOST89STREAM",
2894 0x0300ff03,
2895 SSL_kRSA,
2896 SSL_aRSA,
2897 SSL_eGOST2814789CNT,
2898 SSL_GOST89MAC,
2899 SSL_TLSV1,
2900 SSL_NOT_EXP|SSL_HIGH,
2901 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC,
2902 256,
2903 256
2904 },
2905 #endif
2906
2907 {
2908 1,
2909 TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
2910 TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305,
2911 SSL_kEECDH,
2912 SSL_aRSA,
2913 SSL_CHACHA20POLY1305,
2914 SSL_AEAD,
2915 SSL_TLSV1_2,
2916 SSL_NOT_EXP|SSL_HIGH,
2917 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(0),
2918 256,
2919 0,
2920 },
2921
2922 {
2923 1,
2924 TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
2925 TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305,
2926 SSL_kEECDH,
2927 SSL_aECDSA,
2928 SSL_CHACHA20POLY1305,
2929 SSL_AEAD,
2930 SSL_TLSV1_2,
2931 SSL_NOT_EXP|SSL_HIGH,
2932 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(0),
2933 256,
2934 0,
2935 },
2936
2937 {
2938 1,
2939 TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
2940 TLS1_CK_DHE_RSA_CHACHA20_POLY1305,
2941 SSL_kEDH,
2942 SSL_aRSA,
2943 SSL_CHACHA20POLY1305,
2944 SSL_AEAD,
2945 SSL_TLSV1_2,
2946 SSL_NOT_EXP|SSL_HIGH,
2947 SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXE D_NONCE_LEN(0),
2948 256,
2949 0,
2950 },
2951
2952 /* end of list */
2953 };
2954
2955 SSL3_ENC_METHOD SSLv3_enc_data={
2956 ssl3_enc,
2957 n_ssl3_mac,
2958 ssl3_setup_key_block,
2959 ssl3_generate_master_secret,
2960 ssl3_change_cipher_state,
2961 ssl3_final_finish_mac,
2962 MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
2963 ssl3_cert_verify_mac,
2964 SSL3_MD_CLIENT_FINISHED_CONST,4,
2965 SSL3_MD_SERVER_FINISHED_CONST,4,
2966 ssl3_alert_code,
2967 (int (*)(SSL *, unsigned char *, size_t, const char *,
2968 size_t, const unsigned char *, size_t,
2969 int use_context))ssl_undefined_function,
2970 };
2971
2972 long ssl3_default_timeout(void)
2973 {
2974 /* 2 hours, the 24 hours mentioned in the SSLv3 spec
2975 * is way too long for http, the cache would over fill */
2976 return(60*60*2);
2977 }
2978
2979 int ssl3_num_ciphers(void)
2980 {
2981 return(SSL3_NUM_CIPHERS);
2982 }
2983
2984 const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
2985 {
2986 if (u < SSL3_NUM_CIPHERS)
2987 return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
2988 else
2989 return(NULL);
2990 }
2991
2992 int ssl3_pending(const SSL *s)
2993 {
2994 if (s->rstate == SSL_ST_READ_BODY)
2995 return 0;
2996
2997 return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.leng th : 0;
2998 }
2999
3000 int ssl3_new(SSL *s)
3001 {
3002 SSL3_STATE *s3;
3003
3004 if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
3005 memset(s3,0,sizeof *s3);
3006 memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
3007 memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
3008
3009 s->s3=s3;
3010
3011 #ifndef OPENSSL_NO_SRP
3012 SSL_SRP_CTX_init(s);
3013 #endif
3014 #if !defined(OPENSSL_NO_TLSEXT)
3015 s->tlsext_channel_id_enabled = s->ctx->tlsext_channel_id_enabled;
3016 if (s->ctx->tlsext_channel_id_private)
3017 s->tlsext_channel_id_private = EVP_PKEY_dup(s->ctx->tlsext_chann el_id_private);
3018 #endif
3019 s->method->ssl_clear(s);
3020 return(1);
3021 err:
3022 return(0);
3023 }
3024
3025 void ssl3_free(SSL *s)
3026 {
3027 if(s == NULL)
3028 return;
3029
3030 #ifdef TLSEXT_TYPE_opaque_prf_input
3031 if (s->s3->client_opaque_prf_input != NULL)
3032 OPENSSL_free(s->s3->client_opaque_prf_input);
3033 if (s->s3->server_opaque_prf_input != NULL)
3034 OPENSSL_free(s->s3->server_opaque_prf_input);
3035 #endif
3036
3037 ssl3_cleanup_key_block(s);
3038 if (s->s3->rbuf.buf != NULL)
3039 ssl3_release_read_buffer(s);
3040 if (s->s3->wbuf.buf != NULL)
3041 ssl3_release_write_buffer(s);
3042 if (s->s3->rrec.comp != NULL)
3043 OPENSSL_free(s->s3->rrec.comp);
3044 #ifndef OPENSSL_NO_DH
3045 if (s->s3->tmp.dh != NULL)
3046 DH_free(s->s3->tmp.dh);
3047 #endif
3048 #ifndef OPENSSL_NO_ECDH
3049 if (s->s3->tmp.ecdh != NULL)
3050 EC_KEY_free(s->s3->tmp.ecdh);
3051 #endif
3052
3053 if (s->s3->tmp.ca_names != NULL)
3054 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
3055 if (s->s3->handshake_buffer) {
3056 BIO_free(s->s3->handshake_buffer);
3057 }
3058 if (s->s3->handshake_dgst) ssl3_free_digest_list(s);
3059 #ifndef OPENSSL_NO_SRP
3060 SSL_SRP_CTX_free(s);
3061 #endif
3062 OPENSSL_cleanse(s->s3,sizeof *s->s3);
3063 OPENSSL_free(s->s3);
3064 s->s3=NULL;
3065 }
3066
3067 void ssl3_clear(SSL *s)
3068 {
3069 unsigned char *rp,*wp;
3070 size_t rlen, wlen;
3071 int init_extra;
3072
3073 #ifdef TLSEXT_TYPE_opaque_prf_input
3074 if (s->s3->client_opaque_prf_input != NULL)
3075 OPENSSL_free(s->s3->client_opaque_prf_input);
3076 s->s3->client_opaque_prf_input = NULL;
3077 if (s->s3->server_opaque_prf_input != NULL)
3078 OPENSSL_free(s->s3->server_opaque_prf_input);
3079 s->s3->server_opaque_prf_input = NULL;
3080 #endif
3081
3082 ssl3_cleanup_key_block(s);
3083 if (s->s3->tmp.ca_names != NULL)
3084 sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
3085
3086 if (s->s3->rrec.comp != NULL)
3087 {
3088 OPENSSL_free(s->s3->rrec.comp);
3089 s->s3->rrec.comp=NULL;
3090 }
3091 #ifndef OPENSSL_NO_DH
3092 if (s->s3->tmp.dh != NULL)
3093 {
3094 DH_free(s->s3->tmp.dh);
3095 s->s3->tmp.dh = NULL;
3096 }
3097 #endif
3098 #ifndef OPENSSL_NO_ECDH
3099 if (s->s3->tmp.ecdh != NULL)
3100 {
3101 EC_KEY_free(s->s3->tmp.ecdh);
3102 s->s3->tmp.ecdh = NULL;
3103 }
3104 #endif
3105
3106 rp = s->s3->rbuf.buf;
3107 wp = s->s3->wbuf.buf;
3108 rlen = s->s3->rbuf.len;
3109 wlen = s->s3->wbuf.len;
3110 init_extra = s->s3->init_extra;
3111 if (s->s3->handshake_buffer) {
3112 BIO_free(s->s3->handshake_buffer);
3113 s->s3->handshake_buffer = NULL;
3114 }
3115 if (s->s3->handshake_dgst) {
3116 ssl3_free_digest_list(s);
3117 }
3118 memset(s->s3,0,sizeof *s->s3);
3119 s->s3->rbuf.buf = rp;
3120 s->s3->wbuf.buf = wp;
3121 s->s3->rbuf.len = rlen;
3122 s->s3->wbuf.len = wlen;
3123 s->s3->init_extra = init_extra;
3124
3125 ssl_free_wbio_buffer(s);
3126
3127 s->packet_length=0;
3128 s->s3->renegotiate=0;
3129 s->s3->total_renegotiations=0;
3130 s->s3->num_renegotiations=0;
3131 s->s3->in_read_app_data=0;
3132 s->version=SSL3_VERSION;
3133
3134 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
3135 if (s->next_proto_negotiated)
3136 {
3137 OPENSSL_free(s->next_proto_negotiated);
3138 s->next_proto_negotiated = NULL;
3139 s->next_proto_negotiated_len = 0;
3140 }
3141 #endif
3142
3143 #if !defined(OPENSSL_NO_TLSEXT)
3144 s->s3->tlsext_channel_id_valid = 0;
3145 #endif
3146 }
3147
3148 #ifndef OPENSSL_NO_SRP
3149 static char * MS_CALLBACK srp_password_from_info_cb(SSL *s, void *arg)
3150 {
3151 return BUF_strdup(s->srp_ctx.info) ;
3152 }
3153 #endif
3154
3155 long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
3156 {
3157 int ret=0;
3158
3159 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
3160 if (
3161 #ifndef OPENSSL_NO_RSA
3162 cmd == SSL_CTRL_SET_TMP_RSA ||
3163 cmd == SSL_CTRL_SET_TMP_RSA_CB ||
3164 #endif
3165 #ifndef OPENSSL_NO_DSA
3166 cmd == SSL_CTRL_SET_TMP_DH ||
3167 cmd == SSL_CTRL_SET_TMP_DH_CB ||
3168 #endif
3169 0)
3170 {
3171 if (!ssl_cert_inst(&s->cert))
3172 {
3173 SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
3174 return(0);
3175 }
3176 }
3177 #endif
3178
3179 switch (cmd)
3180 {
3181 case SSL_CTRL_GET_SESSION_REUSED:
3182 ret=s->hit;
3183 break;
3184 case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
3185 break;
3186 case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
3187 ret=s->s3->num_renegotiations;
3188 break;
3189 case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
3190 ret=s->s3->num_renegotiations;
3191 s->s3->num_renegotiations=0;
3192 break;
3193 case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
3194 ret=s->s3->total_renegotiations;
3195 break;
3196 case SSL_CTRL_GET_FLAGS:
3197 ret=(int)(s->s3->flags);
3198 break;
3199 #ifndef OPENSSL_NO_RSA
3200 case SSL_CTRL_NEED_TMP_RSA:
3201 if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
3202 ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
3203 (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))))
3204 ret = 1;
3205 break;
3206 case SSL_CTRL_SET_TMP_RSA:
3207 {
3208 RSA *rsa = (RSA *)parg;
3209 if (rsa == NULL)
3210 {
3211 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAME TER);
3212 return(ret);
3213 }
3214 if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
3215 {
3216 SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
3217 return(ret);
3218 }
3219 if (s->cert->rsa_tmp != NULL)
3220 RSA_free(s->cert->rsa_tmp);
3221 s->cert->rsa_tmp = rsa;
3222 ret = 1;
3223 }
3224 break;
3225 case SSL_CTRL_SET_TMP_RSA_CB:
3226 {
3227 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3228 return(ret);
3229 }
3230 break;
3231 #endif
3232 #ifndef OPENSSL_NO_DH
3233 case SSL_CTRL_SET_TMP_DH:
3234 {
3235 DH *dh = (DH *)parg;
3236 if (dh == NULL)
3237 {
3238 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAME TER);
3239 return(ret);
3240 }
3241 if ((dh = DHparams_dup(dh)) == NULL)
3242 {
3243 SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
3244 return(ret);
3245 }
3246 if (!(s->options & SSL_OP_SINGLE_DH_USE))
3247 {
3248 if (!DH_generate_key(dh))
3249 {
3250 DH_free(dh);
3251 SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
3252 return(ret);
3253 }
3254 }
3255 if (s->cert->dh_tmp != NULL)
3256 DH_free(s->cert->dh_tmp);
3257 s->cert->dh_tmp = dh;
3258 ret = 1;
3259 }
3260 break;
3261 case SSL_CTRL_SET_TMP_DH_CB:
3262 {
3263 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3264 return(ret);
3265 }
3266 break;
3267 #endif
3268 #ifndef OPENSSL_NO_ECDH
3269 case SSL_CTRL_SET_TMP_ECDH:
3270 {
3271 EC_KEY *ecdh = NULL;
3272
3273 if (parg == NULL)
3274 {
3275 SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
3276 return(ret);
3277 }
3278 if (!EC_KEY_up_ref((EC_KEY *)parg))
3279 {
3280 SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
3281 return(ret);
3282 }
3283 ecdh = (EC_KEY *)parg;
3284 if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
3285 {
3286 if (!EC_KEY_generate_key(ecdh))
3287 {
3288 EC_KEY_free(ecdh);
3289 SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
3290 return(ret);
3291 }
3292 }
3293 if (s->cert->ecdh_tmp != NULL)
3294 EC_KEY_free(s->cert->ecdh_tmp);
3295 s->cert->ecdh_tmp = ecdh;
3296 ret = 1;
3297 }
3298 break;
3299 case SSL_CTRL_SET_TMP_ECDH_CB:
3300 {
3301 SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3302 return(ret);
3303 }
3304 break;
3305 #endif /* !OPENSSL_NO_ECDH */
3306 #ifndef OPENSSL_NO_TLSEXT
3307 case SSL_CTRL_SET_TLSEXT_HOSTNAME:
3308 if (larg == TLSEXT_NAMETYPE_host_name)
3309 {
3310 if (s->tlsext_hostname != NULL)
3311 OPENSSL_free(s->tlsext_hostname);
3312 s->tlsext_hostname = NULL;
3313
3314 ret = 1;
3315 if (parg == NULL)
3316 break;
3317 if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
3318 {
3319 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_S ERVERNAME);
3320 return 0;
3321 }
3322 if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == N ULL)
3323 {
3324 SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
3325 return 0;
3326 }
3327 }
3328 else
3329 {
3330 SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAM E_TYPE);
3331 return 0;
3332 }
3333 break;
3334 case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
3335 s->tlsext_debug_arg=parg;
3336 ret = 1;
3337 break;
3338
3339 #ifdef TLSEXT_TYPE_opaque_prf_input
3340 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT:
3341 if (larg > 12288) /* actual internal limit is 2^16 for the compl ete hello message
3342 * (including the cert chain and everything) * /
3343 {
3344 SSLerr(SSL_F_SSL3_CTRL, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG) ;
3345 break;
3346 }
3347 if (s->tlsext_opaque_prf_input != NULL)
3348 OPENSSL_free(s->tlsext_opaque_prf_input);
3349 if ((size_t)larg == 0)
3350 s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
3351 else
3352 s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)la rg);
3353 if (s->tlsext_opaque_prf_input != NULL)
3354 {
3355 s->tlsext_opaque_prf_input_len = (size_t)larg;
3356 ret = 1;
3357 }
3358 else
3359 s->tlsext_opaque_prf_input_len = 0;
3360 break;
3361 #endif
3362
3363 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
3364 s->tlsext_status_type=larg;
3365 ret = 1;
3366 break;
3367
3368 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
3369 *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
3370 ret = 1;
3371 break;
3372
3373 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
3374 s->tlsext_ocsp_exts = parg;
3375 ret = 1;
3376 break;
3377
3378 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
3379 *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
3380 ret = 1;
3381 break;
3382
3383 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
3384 s->tlsext_ocsp_ids = parg;
3385 ret = 1;
3386 break;
3387
3388 case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
3389 *(unsigned char **)parg = s->tlsext_ocsp_resp;
3390 return s->tlsext_ocsp_resplen;
3391
3392 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
3393 if (s->tlsext_ocsp_resp)
3394 OPENSSL_free(s->tlsext_ocsp_resp);
3395 s->tlsext_ocsp_resp = parg;
3396 s->tlsext_ocsp_resplen = larg;
3397 ret = 1;
3398 break;
3399
3400 #ifndef OPENSSL_NO_HEARTBEATS
3401 case SSL_CTRL_TLS_EXT_SEND_HEARTBEAT:
3402 if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_B AD_VER)
3403 ret = dtls1_heartbeat(s);
3404 else
3405 ret = tls1_heartbeat(s);
3406 break;
3407
3408 case SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING:
3409 ret = s->tlsext_hb_pending;
3410 break;
3411
3412 case SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS:
3413 if (larg)
3414 s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
3415 else
3416 s->tlsext_heartbeat &= ~SSL_TLSEXT_HB_DONT_RECV_REQUESTS ;
3417 ret = 1;
3418 break;
3419 #endif
3420 case SSL_CTRL_CHANNEL_ID:
3421 s->tlsext_channel_id_enabled = 1;
3422 ret = 1;
3423 break;
3424
3425 case SSL_CTRL_SET_CHANNEL_ID:
3426 if (s->server)
3427 break;
3428 s->tlsext_channel_id_enabled = 1;
3429 if (EVP_PKEY_bits(parg) != 256)
3430 {
3431 SSLerr(SSL_F_SSL3_CTRL,SSL_R_CHANNEL_ID_NOT_P256);
3432 break;
3433 }
3434 if (s->tlsext_channel_id_private)
3435 EVP_PKEY_free(s->tlsext_channel_id_private);
3436 s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
3437 ret = 1;
3438 break;
3439
3440 case SSL_CTRL_GET_CHANNEL_ID:
3441 if (!s->server)
3442 break;
3443 if (!s->s3->tlsext_channel_id_valid)
3444 break;
3445 memcpy(parg, s->s3->tlsext_channel_id, larg < 64 ? larg : 64);
3446 return 64;
3447
3448 #endif /* !OPENSSL_NO_TLSEXT */
3449 default:
3450 break;
3451 }
3452 return(ret);
3453 }
3454
3455 long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
3456 {
3457 int ret=0;
3458
3459 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
3460 if (
3461 #ifndef OPENSSL_NO_RSA
3462 cmd == SSL_CTRL_SET_TMP_RSA_CB ||
3463 #endif
3464 #ifndef OPENSSL_NO_DSA
3465 cmd == SSL_CTRL_SET_TMP_DH_CB ||
3466 #endif
3467 0)
3468 {
3469 if (!ssl_cert_inst(&s->cert))
3470 {
3471 SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
3472 return(0);
3473 }
3474 }
3475 #endif
3476
3477 switch (cmd)
3478 {
3479 #ifndef OPENSSL_NO_RSA
3480 case SSL_CTRL_SET_TMP_RSA_CB:
3481 {
3482 s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
3483 }
3484 break;
3485 #endif
3486 #ifndef OPENSSL_NO_DH
3487 case SSL_CTRL_SET_TMP_DH_CB:
3488 {
3489 s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3490 }
3491 break;
3492 #endif
3493 #ifndef OPENSSL_NO_ECDH
3494 case SSL_CTRL_SET_TMP_ECDH_CB:
3495 {
3496 s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
3497 }
3498 break;
3499 #endif
3500 #ifndef OPENSSL_NO_TLSEXT
3501 case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
3502 s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
3503 unsigned char *, int, void *))fp;
3504 break;
3505 #endif
3506 default:
3507 break;
3508 }
3509 return(ret);
3510 }
3511
3512 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
3513 {
3514 CERT *cert;
3515
3516 cert=ctx->cert;
3517
3518 switch (cmd)
3519 {
3520 #ifndef OPENSSL_NO_RSA
3521 case SSL_CTRL_NEED_TMP_RSA:
3522 if ( (cert->rsa_tmp == NULL) &&
3523 ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
3524 (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey ) > (512/8)))
3525 )
3526 return(1);
3527 else
3528 return(0);
3529 /* break; */
3530 case SSL_CTRL_SET_TMP_RSA:
3531 {
3532 RSA *rsa;
3533 int i;
3534
3535 rsa=(RSA *)parg;
3536 i=1;
3537 if (rsa == NULL)
3538 i=0;
3539 else
3540 {
3541 if ((rsa=RSAPrivateKey_dup(rsa)) == NULL)
3542 i=0;
3543 }
3544 if (!i)
3545 {
3546 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB);
3547 return(0);
3548 }
3549 else
3550 {
3551 if (cert->rsa_tmp != NULL)
3552 RSA_free(cert->rsa_tmp);
3553 cert->rsa_tmp=rsa;
3554 return(1);
3555 }
3556 }
3557 /* break; */
3558 case SSL_CTRL_SET_TMP_RSA_CB:
3559 {
3560 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3561 return(0);
3562 }
3563 break;
3564 #endif
3565 #ifndef OPENSSL_NO_DH
3566 case SSL_CTRL_SET_TMP_DH:
3567 {
3568 DH *new=NULL,*dh;
3569
3570 dh=(DH *)parg;
3571 if ((new=DHparams_dup(dh)) == NULL)
3572 {
3573 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
3574 return 0;
3575 }
3576 if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
3577 {
3578 if (!DH_generate_key(new))
3579 {
3580 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
3581 DH_free(new);
3582 return 0;
3583 }
3584 }
3585 if (cert->dh_tmp != NULL)
3586 DH_free(cert->dh_tmp);
3587 cert->dh_tmp=new;
3588 return 1;
3589 }
3590 /*break; */
3591 case SSL_CTRL_SET_TMP_DH_CB:
3592 {
3593 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3594 return(0);
3595 }
3596 break;
3597 #endif
3598 #ifndef OPENSSL_NO_ECDH
3599 case SSL_CTRL_SET_TMP_ECDH:
3600 {
3601 EC_KEY *ecdh = NULL;
3602
3603 if (parg == NULL)
3604 {
3605 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
3606 return 0;
3607 }
3608 ecdh = EC_KEY_dup((EC_KEY *)parg);
3609 if (ecdh == NULL)
3610 {
3611 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_EC_LIB);
3612 return 0;
3613 }
3614 if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
3615 {
3616 if (!EC_KEY_generate_key(ecdh))
3617 {
3618 EC_KEY_free(ecdh);
3619 SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
3620 return 0;
3621 }
3622 }
3623
3624 if (cert->ecdh_tmp != NULL)
3625 {
3626 EC_KEY_free(cert->ecdh_tmp);
3627 }
3628 cert->ecdh_tmp = ecdh;
3629 return 1;
3630 }
3631 /* break; */
3632 case SSL_CTRL_SET_TMP_ECDH_CB:
3633 {
3634 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
3635 return(0);
3636 }
3637 break;
3638 #endif /* !OPENSSL_NO_ECDH */
3639 #ifndef OPENSSL_NO_TLSEXT
3640 case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
3641 ctx->tlsext_servername_arg=parg;
3642 break;
3643 case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
3644 case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
3645 {
3646 unsigned char *keys = parg;
3647 if (!keys)
3648 return 48;
3649 if (larg != 48)
3650 {
3651 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LE NGTH);
3652 return 0;
3653 }
3654 if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
3655 {
3656 memcpy(ctx->tlsext_tick_key_name, keys, 16);
3657 memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
3658 memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
3659 }
3660 else
3661 {
3662 memcpy(keys, ctx->tlsext_tick_key_name, 16);
3663 memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
3664 memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
3665 }
3666 return 1;
3667 }
3668 case SSL_CTRL_CHANNEL_ID:
3669 /* must be called on a server */
3670 if (ctx->method->ssl_accept == ssl_undefined_function)
3671 return 0;
3672 ctx->tlsext_channel_id_enabled=1;
3673 return 1;
3674
3675 #ifdef TLSEXT_TYPE_opaque_prf_input
3676 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG:
3677 ctx->tlsext_opaque_prf_input_callback_arg = parg;
3678 return 1;
3679 #endif
3680
3681 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
3682 ctx->tlsext_status_arg=parg;
3683 return 1;
3684 break;
3685
3686 #ifndef OPENSSL_NO_SRP
3687 case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME:
3688 ctx->srp_ctx.srp_Mask|=SSL_kSRP;
3689 if (ctx->srp_ctx.login != NULL)
3690 OPENSSL_free(ctx->srp_ctx.login);
3691 ctx->srp_ctx.login = NULL;
3692 if (parg == NULL)
3693 break;
3694 if (strlen((const char *)parg) > 255 || strlen((const char *)par g) < 1)
3695 {
3696 SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME);
3697 return 0;
3698 }
3699 if ((ctx->srp_ctx.login = BUF_strdup((char *)parg)) == NULL)
3700 {
3701 SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
3702 return 0;
3703 }
3704 break;
3705 case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD:
3706 ctx->srp_ctx.SRP_give_srp_client_pwd_callback=srp_password_from_ info_cb;
3707 ctx->srp_ctx.info=parg;
3708 break;
3709 case SSL_CTRL_SET_SRP_ARG:
3710 ctx->srp_ctx.srp_Mask|=SSL_kSRP;
3711 ctx->srp_ctx.SRP_cb_arg=parg;
3712 break;
3713
3714 case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH:
3715 ctx->srp_ctx.strength=larg;
3716 break;
3717 #endif
3718 #endif /* !OPENSSL_NO_TLSEXT */
3719
3720 /* A Thawte special :-) */
3721 case SSL_CTRL_EXTRA_CHAIN_CERT:
3722 if (ctx->extra_certs == NULL)
3723 {
3724 if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
3725 return(0);
3726 }
3727 sk_X509_push(ctx->extra_certs,(X509 *)parg);
3728 break;
3729
3730 case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
3731 *(STACK_OF(X509) **)parg = ctx->extra_certs;
3732 break;
3733
3734 case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
3735 if (ctx->extra_certs)
3736 {
3737 sk_X509_pop_free(ctx->extra_certs, X509_free);
3738 ctx->extra_certs = NULL;
3739 }
3740 break;
3741
3742 case SSL_CTRL_SET_CHANNEL_ID:
3743 ctx->tlsext_channel_id_enabled = 1;
3744 if (EVP_PKEY_bits(parg) != 256)
3745 {
3746 SSLerr(SSL_F_SSL3_CTX_CTRL,SSL_R_CHANNEL_ID_NOT_P256);
3747 break;
3748 }
3749 if (ctx->tlsext_channel_id_private)
3750 EVP_PKEY_free(ctx->tlsext_channel_id_private);
3751 ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
3752 break;
3753
3754 default:
3755 return(0);
3756 }
3757 return(1);
3758 }
3759
3760 long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
3761 {
3762 CERT *cert;
3763
3764 cert=ctx->cert;
3765
3766 switch (cmd)
3767 {
3768 #ifndef OPENSSL_NO_RSA
3769 case SSL_CTRL_SET_TMP_RSA_CB:
3770 {
3771 cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
3772 }
3773 break;
3774 #endif
3775 #ifndef OPENSSL_NO_DH
3776 case SSL_CTRL_SET_TMP_DH_CB:
3777 {
3778 cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
3779 }
3780 break;
3781 #endif
3782 #ifndef OPENSSL_NO_ECDH
3783 case SSL_CTRL_SET_TMP_ECDH_CB:
3784 {
3785 cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
3786 }
3787 break;
3788 #endif
3789 #ifndef OPENSSL_NO_TLSEXT
3790 case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
3791 ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
3792 break;
3793
3794 #ifdef TLSEXT_TYPE_opaque_prf_input
3795 case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB:
3796 ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, s ize_t, void *))fp;
3797 break;
3798 #endif
3799
3800 case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
3801 ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
3802 break;
3803
3804 case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
3805 ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *,
3806 unsigned char *,
3807 EVP_CIPHER_CTX *,
3808 HMAC_CTX *, int))fp;
3809 break;
3810
3811 #ifndef OPENSSL_NO_SRP
3812 case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB:
3813 ctx->srp_ctx.srp_Mask|=SSL_kSRP;
3814 ctx->srp_ctx.SRP_verify_param_callback=(int (*)(SSL *,void *))fp ;
3815 break;
3816 case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB:
3817 ctx->srp_ctx.srp_Mask|=SSL_kSRP;
3818 ctx->srp_ctx.TLS_ext_srp_username_callback=(int (*)(SSL *,int *, void *))fp;
3819 break;
3820 case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB:
3821 ctx->srp_ctx.srp_Mask|=SSL_kSRP;
3822 ctx->srp_ctx.SRP_give_srp_client_pwd_callback=(char *(*)(SSL *,v oid *))fp;
3823 break;
3824 #endif
3825 #endif
3826 default:
3827 return(0);
3828 }
3829 return(1);
3830 }
3831
3832 /* This function needs to check if the ciphers required are actually
3833 * available */
3834 const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
3835 {
3836 SSL_CIPHER c;
3837 const SSL_CIPHER *cp;
3838 unsigned long id;
3839
3840 id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
3841 c.id=id;
3842 cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
3843 #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES
3844 if (cp == NULL) fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]);
3845 #endif
3846 if (cp == NULL || cp->valid == 0)
3847 return NULL;
3848 else
3849 return cp;
3850 }
3851
3852 int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
3853 {
3854 long l;
3855
3856 if (p != NULL)
3857 {
3858 l=c->id;
3859 if ((l & 0xff000000) != 0x03000000) return(0);
3860 p[0]=((unsigned char)(l>> 8L))&0xFF;
3861 p[1]=((unsigned char)(l ))&0xFF;
3862 }
3863 return(2);
3864 }
3865
3866 SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
3867 STACK_OF(SSL_CIPHER) *srvr)
3868 {
3869 SSL_CIPHER *c,*ret=NULL;
3870 STACK_OF(SSL_CIPHER) *prio, *allow;
3871 int i,ii,ok;
3872 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC)
3873 unsigned int j;
3874 int ec_ok, ec_nid;
3875 unsigned char ec_search1 = 0, ec_search2 = 0;
3876 #endif
3877 CERT *cert;
3878 unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a;
3879
3880 /* Let's see which ciphers we can support */
3881 cert=s->cert;
3882
3883 #if 0
3884 /* Do not set the compare functions, because this may lead to a
3885 * reordering by "id". We want to keep the original ordering.
3886 * We may pay a price in performance during sk_SSL_CIPHER_find(),
3887 * but would have to pay with the price of sk_SSL_CIPHER_dup().
3888 */
3889 sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
3890 sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
3891 #endif
3892
3893 #ifdef CIPHER_DEBUG
3894 printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr );
3895 for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
3896 {
3897 c=sk_SSL_CIPHER_value(srvr,i);
3898 printf("%p:%s\n",(void *)c,c->name);
3899 }
3900 printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)cln t);
3901 for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
3902 {
3903 c=sk_SSL_CIPHER_value(clnt,i);
3904 printf("%p:%s\n",(void *)c,c->name);
3905 }
3906 #endif
3907
3908 if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)
3909 {
3910 prio = srvr;
3911 allow = clnt;
3912 }
3913 else
3914 {
3915 prio = clnt;
3916 allow = srvr;
3917 }
3918
3919 for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
3920 {
3921 c=sk_SSL_CIPHER_value(prio,i);
3922
3923 /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */
3924 if ((c->algorithm_ssl & SSL_TLSV1_2) &&
3925 (TLS1_get_version(s) < TLS1_2_VERSION))
3926 continue;
3927
3928 ssl_set_cert_masks(cert,c);
3929 mask_k = cert->mask_k;
3930 mask_a = cert->mask_a;
3931 emask_k = cert->export_mask_k;
3932 emask_a = cert->export_mask_a;
3933 #ifndef OPENSSL_NO_SRP
3934 mask_k=cert->mask_k | s->srp_ctx.srp_Mask;
3935 emask_k=cert->export_mask_k | s->srp_ctx.srp_Mask;
3936 #endif
3937
3938 #ifdef KSSL_DEBUG
3939 /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/
3940 #endif /* KSSL_DEBUG */
3941
3942 alg_k=c->algorithm_mkey;
3943 alg_a=c->algorithm_auth;
3944
3945 #ifndef OPENSSL_NO_KRB5
3946 if (alg_k & SSL_kKRB5)
3947 {
3948 if ( !kssl_keytab_is_available(s->kssl_ctx) )
3949 continue;
3950 }
3951 #endif /* OPENSSL_NO_KRB5 */
3952 #ifndef OPENSSL_NO_PSK
3953 /* with PSK there must be server callback set */
3954 if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)
3955 continue;
3956 #endif /* OPENSSL_NO_PSK */
3957
3958 if (SSL_C_IS_EXPORT(c))
3959 {
3960 ok = (alg_k & emask_k) && (alg_a & emask_a);
3961 #ifdef CIPHER_DEBUG
3962 printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok ,alg_k,alg_a,emask_k,emask_a,
3963 (void *)c,c->name);
3964 #endif
3965 }
3966 else
3967 {
3968 ok = (alg_k & mask_k) && (alg_a & mask_a);
3969 #ifdef CIPHER_DEBUG
3970 printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,al g_a,mask_k,mask_a,(void *)c,
3971 c->name);
3972 #endif
3973 }
3974
3975 #ifndef OPENSSL_NO_TLSEXT
3976 #ifndef OPENSSL_NO_EC
3977 if (
3978 /* if we are considering an ECC cipher suite that uses o ur certificate */
3979 (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
3980 /* and we have an ECC certificate */
3981 && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
3982 /* and the client specified a Supported Point Formats ex tension */
3983 && ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL))
3984 /* and our certificate's point is compressed */
3985 && (
3986 (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL)
3987 && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info ->key != NULL)
3988 && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info ->key->public_key != NULL)
3989 && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info ->key->public_key->data != NULL)
3990 && (
3991 (*(s->cert->pkeys[SSL_PKEY_ECC].x509->ce rt_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED)
3992 || (*(s->cert->pkeys[SSL_PKEY_ECC].x509- >cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1)
3993 )
3994 )
3995 )
3996 {
3997 ec_ok = 0;
3998 /* if our certificate's curve is over a field type that the client does not support
3999 * then do not allow this cipher suite to be negotiated */
4000 if (
4001 (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.e c != NULL)
4002 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pke y.ec->group != NULL)
4003 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pke y.ec->group->meth != NULL)
4004 && (EC_METHOD_get_field_type(s->cert->pkeys[SSL_ PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field)
4005 )
4006 {
4007 for (j = 0; j < s->session->tlsext_ecpointformat list_length; j++)
4008 {
4009 if (s->session->tlsext_ecpointformatlist [j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime)
4010 {
4011 ec_ok = 1;
4012 break;
4013 }
4014 }
4015 }
4016 else if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKE Y_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field)
4017 {
4018 for (j = 0; j < s->session->tlsext_ecpointformat list_length; j++)
4019 {
4020 if (s->session->tlsext_ecpointformatlist [j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2)
4021 {
4022 ec_ok = 1;
4023 break;
4024 }
4025 }
4026 }
4027 ok = ok && ec_ok;
4028 }
4029 if (
4030 /* if we are considering an ECC cipher suite that uses o ur certificate */
4031 (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
4032 /* and we have an ECC certificate */
4033 && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
4034 /* and the client specified an EllipticCurves extension */
4035 && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL))
4036 )
4037 {
4038 ec_ok = 0;
4039 if (
4040 (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.e c != NULL)
4041 && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pke y.ec->group != NULL)
4042 )
4043 {
4044 ec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[ SSL_PKEY_ECC].privatekey->pkey.ec->group);
4045 if ((ec_nid == 0)
4046 && (s->cert->pkeys[SSL_PKEY_ECC].private key->pkey.ec->group->meth != NULL)
4047 )
4048 {
4049 if (EC_METHOD_get_field_type(s->cert->pk eys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field)
4050 {
4051 ec_search1 = 0xFF;
4052 ec_search2 = 0x01;
4053 }
4054 else if (EC_METHOD_get_field_type(s->cer t->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteri stic_two_field)
4055 {
4056 ec_search1 = 0xFF;
4057 ec_search2 = 0x02;
4058 }
4059 }
4060 else
4061 {
4062 ec_search1 = 0x00;
4063 ec_search2 = tls1_ec_nid2curve_id(ec_nid );
4064 }
4065 if ((ec_search1 != 0) || (ec_search2 != 0))
4066 {
4067 for (j = 0; j < s->session->tlsext_ellip ticcurvelist_length / 2; j++)
4068 {
4069 if ((s->session->tlsext_elliptic curvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2))
4070 {
4071 ec_ok = 1;
4072 break;
4073 }
4074 }
4075 }
4076 }
4077 ok = ok && ec_ok;
4078 }
4079 if (
4080 /* if we are considering an ECC cipher suite that uses a n ephemeral EC key */
4081 (alg_k & SSL_kEECDH)
4082 /* and we have an ephemeral EC key */
4083 && (s->cert->ecdh_tmp != NULL)
4084 /* and the client specified an EllipticCurves extension */
4085 && ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL))
4086 )
4087 {
4088 ec_ok = 0;
4089 if (s->cert->ecdh_tmp->group != NULL)
4090 {
4091 ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_t mp->group);
4092 if ((ec_nid == 0)
4093 && (s->cert->ecdh_tmp->group->meth != NU LL)
4094 )
4095 {
4096 if (EC_METHOD_get_field_type(s->cert->ec dh_tmp->group->meth) == NID_X9_62_prime_field)
4097 {
4098 ec_search1 = 0xFF;
4099 ec_search2 = 0x01;
4100 }
4101 else if (EC_METHOD_get_field_type(s->cer t->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field)
4102 {
4103 ec_search1 = 0xFF;
4104 ec_search2 = 0x02;
4105 }
4106 }
4107 else
4108 {
4109 ec_search1 = 0x00;
4110 ec_search2 = tls1_ec_nid2curve_id(ec_nid );
4111 }
4112 if ((ec_search1 != 0) || (ec_search2 != 0))
4113 {
4114 for (j = 0; j < s->session->tlsext_ellip ticcurvelist_length / 2; j++)
4115 {
4116 if ((s->session->tlsext_elliptic curvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2))
4117 {
4118 ec_ok = 1;
4119 break;
4120 }
4121 }
4122 }
4123 }
4124 ok = ok && ec_ok;
4125 }
4126 #endif /* OPENSSL_NO_EC */
4127 #endif /* OPENSSL_NO_TLSEXT */
4128
4129 if (!ok) continue;
4130 ii=sk_SSL_CIPHER_find(allow,c);
4131 if (ii >= 0)
4132 {
4133 ret=sk_SSL_CIPHER_value(allow,ii);
4134 break;
4135 }
4136 }
4137 return(ret);
4138 }
4139
4140 int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
4141 {
4142 int ret=0;
4143 unsigned long alg_k;
4144
4145 alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
4146
4147 #ifndef OPENSSL_NO_GOST
4148 if (s->version >= TLS1_VERSION)
4149 {
4150 if (alg_k & SSL_kGOST)
4151 {
4152 p[ret++]=TLS_CT_GOST94_SIGN;
4153 p[ret++]=TLS_CT_GOST01_SIGN;
4154 return(ret);
4155 }
4156 }
4157 #endif
4158
4159 #ifndef OPENSSL_NO_DH
4160 if (alg_k & (SSL_kDHr|SSL_kEDH))
4161 {
4162 # ifndef OPENSSL_NO_RSA
4163 p[ret++]=SSL3_CT_RSA_FIXED_DH;
4164 # endif
4165 # ifndef OPENSSL_NO_DSA
4166 p[ret++]=SSL3_CT_DSS_FIXED_DH;
4167 # endif
4168 }
4169 if ((s->version == SSL3_VERSION) &&
4170 (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
4171 {
4172 # ifndef OPENSSL_NO_RSA
4173 p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
4174 # endif
4175 # ifndef OPENSSL_NO_DSA
4176 p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
4177 # endif
4178 }
4179 #endif /* !OPENSSL_NO_DH */
4180 #ifndef OPENSSL_NO_RSA
4181 p[ret++]=SSL3_CT_RSA_SIGN;
4182 #endif
4183 #ifndef OPENSSL_NO_DSA
4184 p[ret++]=SSL3_CT_DSS_SIGN;
4185 #endif
4186 #ifndef OPENSSL_NO_ECDH
4187 if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION))
4188 {
4189 p[ret++]=TLS_CT_RSA_FIXED_ECDH;
4190 p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
4191 }
4192 #endif
4193
4194 #ifndef OPENSSL_NO_ECDSA
4195 /* ECDSA certs can be used with RSA cipher suites as well
4196 * so we don't need to check for SSL_kECDH or SSL_kEECDH
4197 */
4198 if (s->version >= TLS1_VERSION)
4199 {
4200 p[ret++]=TLS_CT_ECDSA_SIGN;
4201 }
4202 #endif
4203 return(ret);
4204 }
4205
4206 int ssl3_shutdown(SSL *s)
4207 {
4208 int ret;
4209
4210 /* Don't do anything much if we have not done the handshake or
4211 * we don't want to send messages :-) */
4212 if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
4213 {
4214 s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
4215 return(1);
4216 }
4217
4218 if (!(s->shutdown & SSL_SENT_SHUTDOWN))
4219 {
4220 s->shutdown|=SSL_SENT_SHUTDOWN;
4221 #if 1
4222 ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
4223 #endif
4224 /* our shutdown alert has been sent now, and if it still needs
4225 * to be written, s->s3->alert_dispatch will be true */
4226 if (s->s3->alert_dispatch)
4227 return(-1); /* return WANT_WRITE */
4228 }
4229 else if (s->s3->alert_dispatch)
4230 {
4231 /* resend it if not sent */
4232 #if 1
4233 ret=s->method->ssl_dispatch_alert(s);
4234 if(ret == -1)
4235 {
4236 /* we only get to return -1 here the 2nd/Nth
4237 * invocation, we must have already signalled
4238 * return 0 upon a previous invoation,
4239 * return WANT_WRITE */
4240 return(ret);
4241 }
4242 #endif
4243 }
4244 else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
4245 {
4246 /* If we are waiting for a close from our peer, we are closed */
4247 s->method->ssl_read_bytes(s,0,NULL,0,0);
4248 if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
4249 {
4250 return(-1); /* return WANT_READ */
4251 }
4252 }
4253
4254 if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
4255 !s->s3->alert_dispatch)
4256 return(1);
4257 else
4258 return(0);
4259 }
4260
4261 int ssl3_write(SSL *s, const void *buf, int len)
4262 {
4263 int ret,n;
4264
4265 #if 0
4266 if (s->shutdown & SSL_SEND_SHUTDOWN)
4267 {
4268 s->rwstate=SSL_NOTHING;
4269 return(0);
4270 }
4271 #endif
4272 clear_sys_error();
4273 if (s->s3->renegotiate) ssl3_renegotiate_check(s);
4274
4275 /* This is an experimental flag that sends the
4276 * last handshake message in the same packet as the first
4277 * use data - used to see if it helps the TCP protocol during
4278 * session-id reuse */
4279 /* The second test is because the buffer may have been removed */
4280 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
4281 {
4282 /* First time through, we write into the buffer */
4283 if (s->s3->delay_buf_pop_ret == 0)
4284 {
4285 ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
4286 buf,len);
4287 if (ret <= 0) return(ret);
4288
4289 s->s3->delay_buf_pop_ret=ret;
4290 }
4291
4292 s->rwstate=SSL_WRITING;
4293 n=BIO_flush(s->wbio);
4294 if (n <= 0) return(n);
4295 s->rwstate=SSL_NOTHING;
4296
4297 /* We have flushed the buffer, so remove it */
4298 ssl_free_wbio_buffer(s);
4299 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
4300
4301 ret=s->s3->delay_buf_pop_ret;
4302 s->s3->delay_buf_pop_ret=0;
4303 }
4304 else
4305 {
4306 ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
4307 buf,len);
4308 if (ret <= 0) return(ret);
4309 }
4310
4311 return(ret);
4312 }
4313
4314 static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
4315 {
4316 int n,ret;
4317
4318 clear_sys_error();
4319 if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
4320 {
4321 /* Deal with an application that calls SSL_read() when handshake data
4322 * is yet to be written.
4323 */
4324 if (BIO_wpending(s->wbio) > 0)
4325 {
4326 s->rwstate=SSL_WRITING;
4327 n=BIO_flush(s->wbio);
4328 if (n <= 0) return(n);
4329 s->rwstate=SSL_NOTHING;
4330 }
4331 }
4332 if (s->s3->renegotiate) ssl3_renegotiate_check(s);
4333 s->s3->in_read_app_data=1;
4334 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
4335 if ((ret == -1) && (s->s3->in_read_app_data == 2))
4336 {
4337 /* ssl3_read_bytes decided to call s->handshake_func, which
4338 * called ssl3_read_bytes to read handshake data.
4339 * However, ssl3_read_bytes actually found application data
4340 * and thinks that application data makes sense here; so disable
4341 * handshake processing and try to read application data again. */
4342 s->in_handshake++;
4343 ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len ,peek);
4344 s->in_handshake--;
4345 }
4346 else
4347 s->s3->in_read_app_data=0;
4348
4349 return(ret);
4350 }
4351
4352 int ssl3_read(SSL *s, void *buf, int len)
4353 {
4354 return ssl3_read_internal(s, buf, len, 0);
4355 }
4356
4357 int ssl3_peek(SSL *s, void *buf, int len)
4358 {
4359 return ssl3_read_internal(s, buf, len, 1);
4360 }
4361
4362 int ssl3_renegotiate(SSL *s)
4363 {
4364 if (s->handshake_func == NULL)
4365 return(1);
4366
4367 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
4368 return(0);
4369
4370 s->s3->renegotiate=1;
4371 return(1);
4372 }
4373
4374 int ssl3_renegotiate_check(SSL *s)
4375 {
4376 int ret=0;
4377
4378 if (s->s3->renegotiate)
4379 {
4380 if ( (s->s3->rbuf.left == 0) &&
4381 (s->s3->wbuf.left == 0) &&
4382 !SSL_in_init(s))
4383 {
4384 /*
4385 if we are the server, and we have sent a 'RENEGOTIATE' message, we
4386 need to go to SSL_ST_ACCEPT.
4387 */
4388 /* SSL_ST_ACCEPT */
4389 s->state=SSL_ST_RENEGOTIATE;
4390 s->s3->renegotiate=0;
4391 s->s3->num_renegotiations++;
4392 s->s3->total_renegotiations++;
4393 ret=1;
4394 }
4395 }
4396 return(ret);
4397 }
4398 /* If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch
4399 * to new SHA256 PRF and handshake macs
4400 */
4401 long ssl_get_algorithm2(SSL *s)
4402 {
4403 long alg2 = s->s3->tmp.new_cipher->algorithm2;
4404 if (TLS1_get_version(s) >= TLS1_2_VERSION &&
4405 alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF))
4406 return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
4407 return alg2;
4408 }
4409
OLDNEW
« no previous file with comments | « openssl/ssl/s3_enc.c ('k') | openssl/ssl/s3_meth.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698