s3_lib.c 127.8 KB
Newer Older
R
Rich Salz 已提交
1
/*
M
Matt Caswell 已提交
2
 * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
3
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
4
 * Copyright 2005 Nokia. All rights reserved.
B
Bodo Möller 已提交
5
 *
6
 * Licensed under the Apache License 2.0 (the "License").  You may not use
R
Rich Salz 已提交
7 8 9
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
B
Bodo Möller 已提交
10
 */
R
Rich Salz 已提交
11

12
#include <stdio.h>
13
#include <openssl/objects.h>
14
#include "internal/nelem.h"
15
#include "ssl_local.h"
16
#include <openssl/md5.h>
R
Rich Salz 已提交
17
#include <openssl/dh.h>
18
#include <openssl/rand.h>
19
#include <openssl/trace.h>
R
Rich Salz 已提交
20
#include "internal/cryptlib.h"
21

22
#define TLS13_NUM_CIPHERS       OSSL_NELEM(tls13_ciphers)
D
Dr. Stephen Henson 已提交
23
#define SSL3_NUM_CIPHERS        OSSL_NELEM(ssl3_ciphers)
24
#define SSL3_NUM_SCSVS          OSSL_NELEM(ssl3_scsvs)
25

26 27 28 29 30 31 32 33
/* TLSv1.3 downgrade protection sentinel values */
const unsigned char tls11downgrade[] = {
    0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x00
};
const unsigned char tls12downgrade[] = {
    0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x01
};

34 35 36 37 38 39 40
/* The list of available TLSv1.3 ciphers */
static SSL_CIPHER tls13_ciphers[] = {
    {
        1,
        TLS1_3_RFC_AES_128_GCM_SHA256,
        TLS1_3_RFC_AES_128_GCM_SHA256,
        TLS1_3_CK_AES_128_GCM_SHA256,
41 42
        SSL_kANY,
        SSL_aANY,
43 44 45
        SSL_AES128GCM,
        SSL_AEAD,
        TLS1_3_VERSION, TLS1_3_VERSION,
46
        0, 0,
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
        SSL_HIGH,
        SSL_HANDSHAKE_MAC_SHA256,
        128,
        128,
    }, {
        1,
        TLS1_3_RFC_AES_256_GCM_SHA384,
        TLS1_3_RFC_AES_256_GCM_SHA384,
        TLS1_3_CK_AES_256_GCM_SHA384,
        SSL_kANY,
        SSL_aANY,
        SSL_AES256GCM,
        SSL_AEAD,
        TLS1_3_VERSION, TLS1_3_VERSION,
        0, 0,
        SSL_HIGH,
        SSL_HANDSHAKE_MAC_SHA384,
        256,
        256,
    },
#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
    {
        1,
        TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
        TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
        TLS1_3_CK_CHACHA20_POLY1305_SHA256,
        SSL_kANY,
        SSL_aANY,
        SSL_CHACHA20POLY1305,
        SSL_AEAD,
        TLS1_3_VERSION, TLS1_3_VERSION,
        0, 0,
        SSL_HIGH,
        SSL_HANDSHAKE_MAC_SHA256,
        256,
        256,
    },
#endif
    {
        1,
        TLS1_3_RFC_AES_128_CCM_SHA256,
        TLS1_3_RFC_AES_128_CCM_SHA256,
        TLS1_3_CK_AES_128_CCM_SHA256,
        SSL_kANY,
        SSL_aANY,
        SSL_AES128CCM,
        SSL_AEAD,
        TLS1_3_VERSION, TLS1_3_VERSION,
        0, 0,
        SSL_NOT_DEFAULT | SSL_HIGH,
        SSL_HANDSHAKE_MAC_SHA256,
        128,
        128,
    }, {
        1,
        TLS1_3_RFC_AES_128_CCM_8_SHA256,
        TLS1_3_RFC_AES_128_CCM_8_SHA256,
        TLS1_3_CK_AES_128_CCM_8_SHA256,
        SSL_kANY,
        SSL_aANY,
        SSL_AES128CCM8,
        SSL_AEAD,
        TLS1_3_VERSION, TLS1_3_VERSION,
        0, 0,
        SSL_NOT_DEFAULT | SSL_HIGH,
        SSL_HANDSHAKE_MAC_SHA256,
        128,
        128,
    }
};

R
Rich Salz 已提交
118
/*
R
Rich Salz 已提交
119
 * The list of available ciphers, mostly organized into the following
R
Rich Salz 已提交
120 121 122 123 124
 * groups:
 *      Always there
 *      EC
 *      PSK
 *      SRP (within that: RSA EC PSK)
P
Pauli 已提交
125
 *      Cipher families: Chacha/poly, Camellia, Gost, IDEA, SEED
R
Rich Salz 已提交
126 127
 *      Weak ciphers
 */
E
Emilia Kasper 已提交
128
static SSL_CIPHER ssl3_ciphers[] = {
129 130 131
    {
     1,
     SSL3_TXT_RSA_NULL_MD5,
132
     SSL3_RFC_RSA_NULL_MD5,
133 134 135 136 137
     SSL3_CK_RSA_NULL_MD5,
     SSL_kRSA,
     SSL_aRSA,
     SSL_eNULL,
     SSL_MD5,
138
     SSL3_VERSION, TLS1_2_VERSION,
139
     DTLS1_BAD_VER, DTLS1_2_VERSION,
140
     SSL_STRONG_NONE,
141 142 143 144 145 146 147
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
    {
     1,
     SSL3_TXT_RSA_NULL_SHA,
148
     SSL3_RFC_RSA_NULL_SHA,
149 150 151 152 153
     SSL3_CK_RSA_NULL_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_eNULL,
     SSL_SHA1,
154
     SSL3_VERSION, TLS1_2_VERSION,
155
     DTLS1_BAD_VER, DTLS1_2_VERSION,
156
     SSL_STRONG_NONE | SSL_FIPS,
157 158 159 160
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
161
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
162 163 164
    {
     1,
     SSL3_TXT_RSA_DES_192_CBC3_SHA,
165
     SSL3_RFC_RSA_DES_192_CBC3_SHA,
166 167 168 169 170
     SSL3_CK_RSA_DES_192_CBC3_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_3DES,
     SSL_SHA1,
171
     SSL3_VERSION, TLS1_2_VERSION,
172
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
173
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
174 175 176 177 178 179 180
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
    {
     1,
     SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA,
181
     SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA,
182 183 184 185 186
     SSL3_CK_DHE_DSS_DES_192_CBC3_SHA,
     SSL_kDHE,
     SSL_aDSS,
     SSL_3DES,
     SSL_SHA1,
187
     SSL3_VERSION, TLS1_2_VERSION,
188
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
189
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
190 191 192 193 194 195 196
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
    {
     1,
     SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA,
197
     SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA,
198 199 200 201 202
     SSL3_CK_DHE_RSA_DES_192_CBC3_SHA,
     SSL_kDHE,
     SSL_aRSA,
     SSL_3DES,
     SSL_SHA1,
203
     SSL3_VERSION, TLS1_2_VERSION,
204
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
205
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
206 207 208 209 210 211 212
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
    {
     1,
     SSL3_TXT_ADH_DES_192_CBC_SHA,
213
     SSL3_RFC_ADH_DES_192_CBC_SHA,
214 215 216 217 218
     SSL3_CK_ADH_DES_192_CBC_SHA,
     SSL_kDHE,
     SSL_aNULL,
     SSL_3DES,
     SSL_SHA1,
219
     SSL3_VERSION, TLS1_2_VERSION,
220
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
221
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
222 223 224 225
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
226
#endif
227 228 229
    {
     1,
     TLS1_TXT_RSA_WITH_AES_128_SHA,
230
     TLS1_RFC_RSA_WITH_AES_128_SHA,
231 232 233 234 235
     TLS1_CK_RSA_WITH_AES_128_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_AES128,
     SSL_SHA1,
236
     SSL3_VERSION, TLS1_2_VERSION,
237
     DTLS1_BAD_VER, DTLS1_2_VERSION,
238
     SSL_HIGH | SSL_FIPS,
239 240 241 242 243 244 245
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
246
     TLS1_RFC_DHE_DSS_WITH_AES_128_SHA,
247 248 249 250 251
     TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
     SSL_kDHE,
     SSL_aDSS,
     SSL_AES128,
     SSL_SHA1,
252
     SSL3_VERSION, TLS1_2_VERSION,
253
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
254
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
255 256 257 258 259 260 261
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
262
     TLS1_RFC_DHE_RSA_WITH_AES_128_SHA,
263 264 265 266 267
     TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
     SSL_kDHE,
     SSL_aRSA,
     SSL_AES128,
     SSL_SHA1,
268
     SSL3_VERSION, TLS1_2_VERSION,
269
     DTLS1_BAD_VER, DTLS1_2_VERSION,
270
     SSL_HIGH | SSL_FIPS,
271 272 273 274 275 276 277
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ADH_WITH_AES_128_SHA,
278
     TLS1_RFC_ADH_WITH_AES_128_SHA,
279 280 281 282 283
     TLS1_CK_ADH_WITH_AES_128_SHA,
     SSL_kDHE,
     SSL_aNULL,
     SSL_AES128,
     SSL_SHA1,
284
     SSL3_VERSION, TLS1_2_VERSION,
285
     DTLS1_BAD_VER, DTLS1_2_VERSION,
286
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
287 288 289 290 291 292 293
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_RSA_WITH_AES_256_SHA,
294
     TLS1_RFC_RSA_WITH_AES_256_SHA,
295 296 297 298 299
     TLS1_CK_RSA_WITH_AES_256_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_AES256,
     SSL_SHA1,
300
     SSL3_VERSION, TLS1_2_VERSION,
301
     DTLS1_BAD_VER, DTLS1_2_VERSION,
302
     SSL_HIGH | SSL_FIPS,
303 304 305 306 307 308 309
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
310
     TLS1_RFC_DHE_DSS_WITH_AES_256_SHA,
311 312 313 314 315
     TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
     SSL_kDHE,
     SSL_aDSS,
     SSL_AES256,
     SSL_SHA1,
316
     SSL3_VERSION, TLS1_2_VERSION,
317
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
318
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
319 320 321 322 323 324 325
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
326
     TLS1_RFC_DHE_RSA_WITH_AES_256_SHA,
327 328 329 330 331
     TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
     SSL_kDHE,
     SSL_aRSA,
     SSL_AES256,
     SSL_SHA1,
332
     SSL3_VERSION, TLS1_2_VERSION,
333
     DTLS1_BAD_VER, DTLS1_2_VERSION,
334
     SSL_HIGH | SSL_FIPS,
335 336 337 338 339 340 341
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ADH_WITH_AES_256_SHA,
342
     TLS1_RFC_ADH_WITH_AES_256_SHA,
343 344 345 346 347
     TLS1_CK_ADH_WITH_AES_256_SHA,
     SSL_kDHE,
     SSL_aNULL,
     SSL_AES256,
     SSL_SHA1,
348
     SSL3_VERSION, TLS1_2_VERSION,
349
     DTLS1_BAD_VER, DTLS1_2_VERSION,
350
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
351 352 353 354 355 356 357
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_RSA_WITH_NULL_SHA256,
358
     TLS1_RFC_RSA_WITH_NULL_SHA256,
359 360 361 362 363
     TLS1_CK_RSA_WITH_NULL_SHA256,
     SSL_kRSA,
     SSL_aRSA,
     SSL_eNULL,
     SSL_SHA256,
364 365
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
366
     SSL_STRONG_NONE | SSL_FIPS,
367 368 369 370 371 372 373
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
    {
     1,
     TLS1_TXT_RSA_WITH_AES_128_SHA256,
374
     TLS1_RFC_RSA_WITH_AES_128_SHA256,
375 376 377 378 379
     TLS1_CK_RSA_WITH_AES_128_SHA256,
     SSL_kRSA,
     SSL_aRSA,
     SSL_AES128,
     SSL_SHA256,
380 381
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
382
     SSL_HIGH | SSL_FIPS,
383 384 385 386 387 388 389
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_RSA_WITH_AES_256_SHA256,
390
     TLS1_RFC_RSA_WITH_AES_256_SHA256,
391 392 393 394 395
     TLS1_CK_RSA_WITH_AES_256_SHA256,
     SSL_kRSA,
     SSL_aRSA,
     SSL_AES256,
     SSL_SHA256,
396 397
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
398
     SSL_HIGH | SSL_FIPS,
399 400 401 402 403 404 405
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
406
     TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256,
407 408 409 410 411
     TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
     SSL_kDHE,
     SSL_aDSS,
     SSL_AES128,
     SSL_SHA256,
412 413
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
414
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
415 416 417 418 419 420 421
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
422
     TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256,
423 424 425 426 427
     TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
     SSL_kDHE,
     SSL_aRSA,
     SSL_AES128,
     SSL_SHA256,
428 429
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
430
     SSL_HIGH | SSL_FIPS,
431 432 433 434 435 436 437
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
438
     TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256,
439 440 441 442 443
     TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
     SSL_kDHE,
     SSL_aDSS,
     SSL_AES256,
     SSL_SHA256,
444 445
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
446
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
447 448 449 450 451 452 453
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
454
     TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256,
455 456 457 458 459
     TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
     SSL_kDHE,
     SSL_aRSA,
     SSL_AES256,
     SSL_SHA256,
460 461
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
462
     SSL_HIGH | SSL_FIPS,
463 464 465 466 467 468 469
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ADH_WITH_AES_128_SHA256,
470
     TLS1_RFC_ADH_WITH_AES_128_SHA256,
471 472 473 474 475
     TLS1_CK_ADH_WITH_AES_128_SHA256,
     SSL_kDHE,
     SSL_aNULL,
     SSL_AES128,
     SSL_SHA256,
476 477
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
478
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
479 480 481 482 483 484 485
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ADH_WITH_AES_256_SHA256,
486
     TLS1_RFC_ADH_WITH_AES_256_SHA256,
487 488 489 490 491
     TLS1_CK_ADH_WITH_AES_256_SHA256,
     SSL_kDHE,
     SSL_aNULL,
     SSL_AES256,
     SSL_SHA256,
492 493
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
494
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
495 496 497 498 499 500
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
501
     TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
502
     TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
503 504 505 506 507 508 509 510 511 512 513 514
     TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
     SSL_kRSA,
     SSL_aRSA,
     SSL_AES128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
515 516
    {
     1,
R
Rich Salz 已提交
517
     TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
518
     TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
519
     TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
520 521
     SSL_kRSA,
     SSL_aRSA,
R
Rich Salz 已提交
522 523 524 525 526 527
     SSL_AES256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
528 529 530 531 532
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
533
     TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
534
     TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
535
     TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
536
     SSL_kDHE,
R
Rich Salz 已提交
537 538 539 540 541 542 543 544 545
     SSL_aRSA,
     SSL_AES128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
546 547 548
     },
    {
     1,
R
Rich Salz 已提交
549
     TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
550
     TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
551
     TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
552 553
     SSL_kDHE,
     SSL_aRSA,
R
Rich Salz 已提交
554 555 556 557 558 559
     SSL_AES256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
560 561 562 563 564
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
565
     TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
566
     TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
567
     TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
568
     SSL_kDHE,
R
Rich Salz 已提交
569 570 571 572 573 574 575
     SSL_aDSS,
     SSL_AES128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
576 577 578 579 580
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
581
     TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
582
     TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
583 584 585 586 587 588 589 590 591 592 593
     TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
     SSL_kDHE,
     SSL_aDSS,
     SSL_AES256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
594 595 596
     },
    {
     1,
R
Rich Salz 已提交
597
     TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
598
     TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
599 600 601 602 603 604 605 606 607
     TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
     SSL_kDHE,
     SSL_aNULL,
     SSL_AES128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
608 609 610 611 612
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
613
     TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
614
     TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
615 616 617 618 619 620 621 622 623
     TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
     SSL_kDHE,
     SSL_aNULL,
     SSL_AES256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
624 625 626
     256,
     256,
     },
627 628
    {
     1,
R
Rich Salz 已提交
629
     TLS1_TXT_RSA_WITH_AES_128_CCM,
630
     TLS1_RFC_RSA_WITH_AES_128_CCM,
R
Rich Salz 已提交
631 632 633 634 635 636 637 638 639
     TLS1_CK_RSA_WITH_AES_128_CCM,
     SSL_kRSA,
     SSL_aRSA,
     SSL_AES128CCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
640 641 642 643 644
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
645
     TLS1_TXT_RSA_WITH_AES_256_CCM,
646
     TLS1_RFC_RSA_WITH_AES_256_CCM,
R
Rich Salz 已提交
647 648 649 650 651 652 653 654 655 656 657
     TLS1_CK_RSA_WITH_AES_256_CCM,
     SSL_kRSA,
     SSL_aRSA,
     SSL_AES256CCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
658 659 660
     },
    {
     1,
R
Rich Salz 已提交
661
     TLS1_TXT_DHE_RSA_WITH_AES_128_CCM,
662
     TLS1_RFC_DHE_RSA_WITH_AES_128_CCM,
R
Rich Salz 已提交
663 664 665 666 667 668 669 670 671
     TLS1_CK_DHE_RSA_WITH_AES_128_CCM,
     SSL_kDHE,
     SSL_aRSA,
     SSL_AES128CCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
672 673 674 675 676
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
677
     TLS1_TXT_DHE_RSA_WITH_AES_256_CCM,
678
     TLS1_RFC_DHE_RSA_WITH_AES_256_CCM,
R
Rich Salz 已提交
679 680 681 682 683 684 685 686 687
     TLS1_CK_DHE_RSA_WITH_AES_256_CCM,
     SSL_kDHE,
     SSL_aRSA,
     SSL_AES256CCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
688 689 690 691 692
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
693
     TLS1_TXT_RSA_WITH_AES_128_CCM_8,
694
     TLS1_RFC_RSA_WITH_AES_128_CCM_8,
R
Rich Salz 已提交
695 696
     TLS1_CK_RSA_WITH_AES_128_CCM_8,
     SSL_kRSA,
697
     SSL_aRSA,
R
Rich Salz 已提交
698
     SSL_AES128CCM8,
699
     SSL_AEAD,
700 701
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
702
     SSL_NOT_DEFAULT | SSL_HIGH,
703 704 705 706 707 708
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
709
     TLS1_TXT_RSA_WITH_AES_256_CCM_8,
710
     TLS1_RFC_RSA_WITH_AES_256_CCM_8,
R
Rich Salz 已提交
711
     TLS1_CK_RSA_WITH_AES_256_CCM_8,
712 713
     SSL_kRSA,
     SSL_aRSA,
R
Rich Salz 已提交
714
     SSL_AES256CCM8,
715
     SSL_AEAD,
716 717
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
718 719
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
720 721 722 723 724
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
725
     TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8,
726
     TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8,
R
Rich Salz 已提交
727
     TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8,
728 729
     SSL_kDHE,
     SSL_aRSA,
R
Rich Salz 已提交
730
     SSL_AES128CCM8,
731
     SSL_AEAD,
732 733
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
734
     SSL_NOT_DEFAULT | SSL_HIGH,
735 736 737 738 739 740
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
741
     TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8,
742
     TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8,
R
Rich Salz 已提交
743
     TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8,
744 745
     SSL_kDHE,
     SSL_aRSA,
R
Rich Salz 已提交
746
     SSL_AES256CCM8,
747
     SSL_AEAD,
748 749
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
750 751
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
752 753 754 755 756
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
757
     TLS1_TXT_PSK_WITH_AES_128_CCM,
758
     TLS1_RFC_PSK_WITH_AES_128_CCM,
R
Rich Salz 已提交
759 760 761 762
     TLS1_CK_PSK_WITH_AES_128_CCM,
     SSL_kPSK,
     SSL_aPSK,
     SSL_AES128CCM,
763
     SSL_AEAD,
764 765
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
766
     SSL_NOT_DEFAULT | SSL_HIGH,
767 768 769 770 771 772
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
773
     TLS1_TXT_PSK_WITH_AES_256_CCM,
774
     TLS1_RFC_PSK_WITH_AES_256_CCM,
R
Rich Salz 已提交
775 776 777 778
     TLS1_CK_PSK_WITH_AES_256_CCM,
     SSL_kPSK,
     SSL_aPSK,
     SSL_AES256CCM,
779
     SSL_AEAD,
780 781
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
782 783
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
784 785 786 787 788
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
789
     TLS1_TXT_DHE_PSK_WITH_AES_128_CCM,
790
     TLS1_RFC_DHE_PSK_WITH_AES_128_CCM,
R
Rich Salz 已提交
791 792 793 794
     TLS1_CK_DHE_PSK_WITH_AES_128_CCM,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_AES128CCM,
795
     SSL_AEAD,
796 797
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
798
     SSL_NOT_DEFAULT | SSL_HIGH,
799 800 801 802 803 804
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
805
     TLS1_TXT_DHE_PSK_WITH_AES_256_CCM,
806
     TLS1_RFC_DHE_PSK_WITH_AES_256_CCM,
R
Rich Salz 已提交
807 808 809 810
     TLS1_CK_DHE_PSK_WITH_AES_256_CCM,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_AES256CCM,
811
     SSL_AEAD,
812 813
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
814 815
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
816 817 818
     256,
     256,
     },
819 820
    {
     1,
R
Rich Salz 已提交
821
     TLS1_TXT_PSK_WITH_AES_128_CCM_8,
822
     TLS1_RFC_PSK_WITH_AES_128_CCM_8,
R
Rich Salz 已提交
823
     TLS1_CK_PSK_WITH_AES_128_CCM_8,
824 825
     SSL_kPSK,
     SSL_aPSK,
R
Rich Salz 已提交
826
     SSL_AES128CCM8,
827
     SSL_AEAD,
828 829
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
830
     SSL_NOT_DEFAULT | SSL_HIGH,
831 832 833 834 835 836
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
837
     TLS1_TXT_PSK_WITH_AES_256_CCM_8,
838
     TLS1_RFC_PSK_WITH_AES_256_CCM_8,
R
Rich Salz 已提交
839
     TLS1_CK_PSK_WITH_AES_256_CCM_8,
840 841
     SSL_kPSK,
     SSL_aPSK,
R
Rich Salz 已提交
842
     SSL_AES256CCM8,
843
     SSL_AEAD,
844 845
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
846 847
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
848 849 850
     256,
     256,
     },
851 852
    {
     1,
R
Rich Salz 已提交
853
     TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8,
854
     TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8,
R
Rich Salz 已提交
855
     TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8,
856 857
     SSL_kDHEPSK,
     SSL_aPSK,
R
Rich Salz 已提交
858
     SSL_AES128CCM8,
859
     SSL_AEAD,
860 861
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
862
     SSL_NOT_DEFAULT | SSL_HIGH,
863 864 865 866 867 868
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
869
     TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8,
870
     TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8,
R
Rich Salz 已提交
871 872
     TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8,
     SSL_kDHEPSK,
873
     SSL_aPSK,
R
Rich Salz 已提交
874
     SSL_AES256CCM8,
875
     SSL_AEAD,
876 877
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
878 879
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
880 881 882 883 884
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
885
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM,
886
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM,
R
Rich Salz 已提交
887 888 889 890
     TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_AES128CCM,
891
     SSL_AEAD,
892 893
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
894
     SSL_NOT_DEFAULT | SSL_HIGH,
895 896 897 898 899 900
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
901
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM,
902
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM,
R
Rich Salz 已提交
903 904 905 906
     TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_AES256CCM,
907
     SSL_AEAD,
908 909
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
910 911
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
912 913 914 915 916
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
917
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8,
918
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8,
R
Rich Salz 已提交
919 920 921 922 923 924 925 926 927
     TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_AES128CCM8,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
928 929 930 931 932
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
933
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8,
934
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8,
R
Rich Salz 已提交
935 936 937 938 939 940 941 942 943
     TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_AES256CCM8,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
944 945 946 947 948
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
949
     TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
950
     TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA,
R
Rich Salz 已提交
951 952 953
     TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
     SSL_kECDHE,
     SSL_aECDSA,
954
     SSL_eNULL,
R
Rich Salz 已提交
955
     SSL_SHA1,
T
Todd Short 已提交
956
     TLS1_VERSION, TLS1_2_VERSION,
957
     DTLS1_BAD_VER, DTLS1_2_VERSION,
958
     SSL_STRONG_NONE | SSL_FIPS,
959 960 961 962
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
963
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
964 965
    {
     1,
R
Rich Salz 已提交
966
     TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
967
     TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
R
Rich Salz 已提交
968 969 970 971 972
     TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_3DES,
     SSL_SHA1,
T
Todd Short 已提交
973
     TLS1_VERSION, TLS1_2_VERSION,
974
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
975
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
R
Rich Salz 已提交
976 977 978
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
979
     },
980
# endif
981 982
    {
     1,
R
Rich Salz 已提交
983
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
984
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
985 986 987
     TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
     SSL_kECDHE,
     SSL_aECDSA,
988
     SSL_AES128,
R
Rich Salz 已提交
989
     SSL_SHA1,
T
Todd Short 已提交
990
     TLS1_VERSION, TLS1_2_VERSION,
991
     DTLS1_BAD_VER, DTLS1_2_VERSION,
992
     SSL_HIGH | SSL_FIPS,
993 994 995 996 997 998
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
999
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
1000
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
1001 1002 1003
     TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
     SSL_kECDHE,
     SSL_aECDSA,
1004
     SSL_AES256,
R
Rich Salz 已提交
1005
     SSL_SHA1,
T
Todd Short 已提交
1006
     TLS1_VERSION, TLS1_2_VERSION,
1007
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1008
     SSL_HIGH | SSL_FIPS,
R
Rich Salz 已提交
1009
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1010 1011 1012 1013 1014
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1015
     TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
1016
     TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA,
R
Rich Salz 已提交
1017 1018 1019
     TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
     SSL_kECDHE,
     SSL_aRSA,
1020
     SSL_eNULL,
R
Rich Salz 已提交
1021
     SSL_SHA1,
T
Todd Short 已提交
1022
     TLS1_VERSION, TLS1_2_VERSION,
1023
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1024
     SSL_STRONG_NONE | SSL_FIPS,
1025 1026 1027 1028
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
1029
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1030 1031
    {
     1,
R
Rich Salz 已提交
1032
     TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
1033
     TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
R
Rich Salz 已提交
1034 1035 1036 1037 1038
     TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
     SSL_kECDHE,
     SSL_aRSA,
     SSL_3DES,
     SSL_SHA1,
T
Todd Short 已提交
1039
     TLS1_VERSION, TLS1_2_VERSION,
1040
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1041
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
R
Rich Salz 已提交
1042 1043 1044
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
1045
     },
1046
# endif
1047 1048
    {
     1,
R
Rich Salz 已提交
1049
     TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
1050
     TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
1051 1052
     TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
     SSL_kECDHE,
1053 1054
     SSL_aRSA,
     SSL_AES128,
R
Rich Salz 已提交
1055
     SSL_SHA1,
T
Todd Short 已提交
1056
     TLS1_VERSION, TLS1_2_VERSION,
1057
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1058
     SSL_HIGH | SSL_FIPS,
1059 1060 1061 1062 1063 1064
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1065
     TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
1066
     TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
1067 1068
     TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
     SSL_kECDHE,
1069 1070
     SSL_aRSA,
     SSL_AES256,
R
Rich Salz 已提交
1071
     SSL_SHA1,
T
Todd Short 已提交
1072
     TLS1_VERSION, TLS1_2_VERSION,
1073
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1074
     SSL_HIGH | SSL_FIPS,
R
Rich Salz 已提交
1075
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1076 1077 1078 1079 1080
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1081
     TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
1082
     TLS1_RFC_ECDH_anon_WITH_NULL_SHA,
R
Rich Salz 已提交
1083 1084 1085
     TLS1_CK_ECDH_anon_WITH_NULL_SHA,
     SSL_kECDHE,
     SSL_aNULL,
1086
     SSL_eNULL,
R
Rich Salz 已提交
1087
     SSL_SHA1,
T
Todd Short 已提交
1088
     TLS1_VERSION, TLS1_2_VERSION,
1089
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1090
     SSL_STRONG_NONE | SSL_FIPS,
1091 1092 1093 1094
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
1095
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1096 1097
    {
     1,
R
Rich Salz 已提交
1098
     TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
1099
     TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA,
R
Rich Salz 已提交
1100 1101 1102 1103 1104
     TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
     SSL_kECDHE,
     SSL_aNULL,
     SSL_3DES,
     SSL_SHA1,
T
Todd Short 已提交
1105
     TLS1_VERSION, TLS1_2_VERSION,
1106
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1107
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
R
Rich Salz 已提交
1108 1109 1110
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
1111
     },
1112
# endif
1113 1114
    {
     1,
R
Rich Salz 已提交
1115
     TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
1116
     TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
1117 1118 1119 1120 1121
     TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
     SSL_kECDHE,
     SSL_aNULL,
     SSL_AES128,
     SSL_SHA1,
T
Todd Short 已提交
1122
     TLS1_VERSION, TLS1_2_VERSION,
1123
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1124 1125 1126 1127 1128
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
1129 1130
    {
     1,
R
Rich Salz 已提交
1131
     TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
1132
     TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
1133 1134 1135 1136 1137
     TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
     SSL_kECDHE,
     SSL_aNULL,
     SSL_AES256,
     SSL_SHA1,
T
Todd Short 已提交
1138
     TLS1_VERSION, TLS1_2_VERSION,
1139
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1140 1141 1142 1143 1144 1145 1146 1147
     SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
1148
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256,
R
Rich Salz 已提交
1149 1150 1151 1152
     TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_AES128,
1153
     SSL_SHA256,
1154 1155
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
1156
     SSL_HIGH | SSL_FIPS,
1157 1158 1159 1160 1161 1162
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1163
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
1164
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384,
R
Rich Salz 已提交
1165 1166 1167 1168 1169
     TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_AES256,
     SSL_SHA384,
1170 1171
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
1172 1173 1174 1175
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
1176 1177 1178
     },
    {
     1,
R
Rich Salz 已提交
1179
     TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
1180
     TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256,
R
Rich Salz 已提交
1181 1182 1183 1184
     TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
     SSL_kECDHE,
     SSL_aRSA,
     SSL_AES128,
1185
     SSL_SHA256,
1186 1187
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
1188
     SSL_HIGH | SSL_FIPS,
1189 1190 1191 1192 1193 1194
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1195
     TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
1196
     TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384,
R
Rich Salz 已提交
1197 1198
     TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
     SSL_kECDHE,
1199
     SSL_aRSA,
R
Rich Salz 已提交
1200 1201
     SSL_AES256,
     SSL_SHA384,
1202 1203
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
1204 1205
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1206 1207 1208 1209 1210
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1211
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
1212
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
1213 1214 1215 1216 1217
     TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_AES128GCM,
     SSL_AEAD,
1218 1219
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
1220
     SSL_HIGH | SSL_FIPS,
1221
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
R
Rich Salz 已提交
1222 1223 1224 1225 1226 1227
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
1228
     TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
1229 1230 1231 1232 1233 1234 1235 1236 1237
     TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_AES256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1238 1239 1240 1241 1242
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1243
     TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
1244
     TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
1245 1246
     TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
     SSL_kECDHE,
1247
     SSL_aRSA,
R
Rich Salz 已提交
1248 1249
     SSL_AES128GCM,
     SSL_AEAD,
1250 1251
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
1252
     SSL_HIGH | SSL_FIPS,
1253
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
R
Rich Salz 已提交
1254 1255
     128,
     128,
1256 1257 1258
     },
    {
     1,
R
Rich Salz 已提交
1259
     TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
1260
     TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
1261 1262 1263 1264 1265
     TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
     SSL_kECDHE,
     SSL_aRSA,
     SSL_AES256GCM,
     SSL_AEAD,
1266 1267
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
R
Rich Salz 已提交
1268 1269
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1270 1271 1272 1273 1274
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1275
     TLS1_TXT_PSK_WITH_NULL_SHA,
1276
     TLS1_RFC_PSK_WITH_NULL_SHA,
R
Rich Salz 已提交
1277 1278 1279
     TLS1_CK_PSK_WITH_NULL_SHA,
     SSL_kPSK,
     SSL_aPSK,
1280 1281
     SSL_eNULL,
     SSL_SHA1,
1282
     SSL3_VERSION, TLS1_2_VERSION,
1283
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1284
     SSL_STRONG_NONE | SSL_FIPS,
1285 1286 1287 1288 1289 1290
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
    {
     1,
R
Rich Salz 已提交
1291
     TLS1_TXT_DHE_PSK_WITH_NULL_SHA,
1292
     TLS1_RFC_DHE_PSK_WITH_NULL_SHA,
R
Rich Salz 已提交
1293 1294 1295 1296
     TLS1_CK_DHE_PSK_WITH_NULL_SHA,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_eNULL,
1297
     SSL_SHA1,
1298
     SSL3_VERSION, TLS1_2_VERSION,
1299
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1300
     SSL_STRONG_NONE | SSL_FIPS,
1301
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
R
Rich Salz 已提交
1302 1303
     0,
     0,
1304 1305 1306
     },
    {
     1,
R
Rich Salz 已提交
1307
     TLS1_TXT_RSA_PSK_WITH_NULL_SHA,
1308
     TLS1_RFC_RSA_PSK_WITH_NULL_SHA,
R
Rich Salz 已提交
1309 1310 1311 1312 1313 1314
     TLS1_CK_RSA_PSK_WITH_NULL_SHA,
     SSL_kRSAPSK,
     SSL_aRSA,
     SSL_eNULL,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1315
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1316 1317 1318 1319 1320
     SSL_STRONG_NONE | SSL_FIPS,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
1321
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
R
Rich Salz 已提交
1322 1323 1324
    {
     1,
     TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
1325
     TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA,
R
Rich Salz 已提交
1326 1327 1328
     TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
     SSL_kPSK,
     SSL_aPSK,
1329 1330
     SSL_3DES,
     SSL_SHA1,
1331
     SSL3_VERSION, TLS1_2_VERSION,
1332
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1333
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1334 1335 1336 1337
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
1338
# endif
1339 1340
    {
     1,
R
Rich Salz 已提交
1341
     TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
1342
     TLS1_RFC_PSK_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
1343 1344 1345
     TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
     SSL_kPSK,
     SSL_aPSK,
1346 1347
     SSL_AES128,
     SSL_SHA1,
1348
     SSL3_VERSION, TLS1_2_VERSION,
1349
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1350
     SSL_HIGH | SSL_FIPS,
1351 1352 1353 1354 1355 1356
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1357
     TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
1358
     TLS1_RFC_PSK_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
1359 1360 1361
     TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
     SSL_kPSK,
     SSL_aPSK,
1362 1363
     SSL_AES256,
     SSL_SHA1,
1364
     SSL3_VERSION, TLS1_2_VERSION,
1365
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1366
     SSL_HIGH | SSL_FIPS,
1367 1368 1369 1370
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
1371
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1372 1373
    {
     1,
R
Rich Salz 已提交
1374
     TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
1375
     TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
R
Rich Salz 已提交
1376 1377 1378 1379
     TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_3DES,
1380
     SSL_SHA1,
1381
     SSL3_VERSION, TLS1_2_VERSION,
1382
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1383
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1384
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
R
Rich Salz 已提交
1385 1386
     112,
     168,
1387
     },
1388
# endif
1389 1390
    {
     1,
R
Rich Salz 已提交
1391
     TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA,
1392
     TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
1393 1394 1395 1396 1397 1398
     TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_AES128,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1399
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1400
     SSL_HIGH | SSL_FIPS,
1401 1402 1403 1404 1405 1406
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1407
     TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA,
1408
     TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
1409 1410 1411 1412 1413 1414
     TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_AES256,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1415
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1416 1417 1418 1419 1420
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
1421
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
R
Rich Salz 已提交
1422 1423 1424
    {
     1,
     TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
1425
     TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
R
Rich Salz 已提交
1426 1427
     TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
     SSL_kRSAPSK,
1428 1429 1430
     SSL_aRSA,
     SSL_3DES,
     SSL_SHA1,
1431
     SSL3_VERSION, TLS1_2_VERSION,
1432
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1433
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1434 1435 1436 1437
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
1438
# endif
1439 1440
    {
     1,
R
Rich Salz 已提交
1441
     TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA,
1442
     TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
1443 1444
     TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA,
     SSL_kRSAPSK,
1445 1446 1447
     SSL_aRSA,
     SSL_AES128,
     SSL_SHA1,
1448
     SSL3_VERSION, TLS1_2_VERSION,
1449
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1450
     SSL_HIGH | SSL_FIPS,
1451 1452 1453 1454 1455 1456
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1457
     TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA,
1458
     TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
1459 1460
     TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA,
     SSL_kRSAPSK,
1461 1462 1463
     SSL_aRSA,
     SSL_AES256,
     SSL_SHA1,
1464
     SSL3_VERSION, TLS1_2_VERSION,
1465
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1466
     SSL_HIGH | SSL_FIPS,
1467 1468 1469 1470 1471 1472
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1473
     TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256,
1474
     TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
1475 1476 1477 1478 1479 1480 1481 1482 1483
     TLS1_CK_PSK_WITH_AES_128_GCM_SHA256,
     SSL_kPSK,
     SSL_aPSK,
     SSL_AES128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1484 1485 1486 1487 1488
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1489
     TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384,
1490
     TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501
     TLS1_CK_PSK_WITH_AES_256_GCM_SHA384,
     SSL_kPSK,
     SSL_aPSK,
     SSL_AES256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
1502 1503 1504
     },
    {
     1,
R
Rich Salz 已提交
1505
     TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256,
1506
     TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
1507 1508 1509 1510 1511 1512 1513 1514 1515
     TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_AES128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
1516 1517 1518 1519 1520
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1521
     TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384,
1522
     TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
1523 1524 1525 1526 1527 1528 1529 1530 1531
     TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_AES256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1532 1533 1534 1535 1536
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1537
     TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256,
1538
     TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256,
R
Rich Salz 已提交
1539 1540
     TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256,
     SSL_kRSAPSK,
1541
     SSL_aRSA,
R
Rich Salz 已提交
1542 1543 1544 1545 1546 1547 1548 1549
     SSL_AES128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
1550 1551 1552
     },
    {
     1,
R
Rich Salz 已提交
1553
     TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384,
1554
     TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384,
R
Rich Salz 已提交
1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565
     TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384,
     SSL_kRSAPSK,
     SSL_aRSA,
     SSL_AES256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
1566 1567 1568
     },
    {
     1,
R
Rich Salz 已提交
1569
     TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256,
1570
     TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256,
R
Rich Salz 已提交
1571 1572 1573
     TLS1_CK_PSK_WITH_AES_128_CBC_SHA256,
     SSL_kPSK,
     SSL_aPSK,
1574
     SSL_AES128,
R
Rich Salz 已提交
1575 1576
     SSL_SHA256,
     TLS1_VERSION, TLS1_2_VERSION,
1577
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1578
     SSL_HIGH | SSL_FIPS,
1579 1580 1581 1582 1583 1584
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1585
     TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384,
1586
     TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384,
R
Rich Salz 已提交
1587 1588 1589 1590 1591 1592
     TLS1_CK_PSK_WITH_AES_256_CBC_SHA384,
     SSL_kPSK,
     SSL_aPSK,
     SSL_AES256,
     SSL_SHA384,
     TLS1_VERSION, TLS1_2_VERSION,
1593
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1594 1595 1596 1597
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
1598 1599 1600
     },
    {
     1,
R
Rich Salz 已提交
1601
     TLS1_TXT_PSK_WITH_NULL_SHA256,
1602
     TLS1_RFC_PSK_WITH_NULL_SHA256,
R
Rich Salz 已提交
1603 1604 1605 1606 1607 1608
     TLS1_CK_PSK_WITH_NULL_SHA256,
     SSL_kPSK,
     SSL_aPSK,
     SSL_eNULL,
     SSL_SHA256,
     TLS1_VERSION, TLS1_2_VERSION,
1609
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1610
     SSL_STRONG_NONE | SSL_FIPS,
1611
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
R
Rich Salz 已提交
1612 1613
     0,
     0,
1614 1615 1616
     },
    {
     1,
R
Rich Salz 已提交
1617
     TLS1_TXT_PSK_WITH_NULL_SHA384,
1618
     TLS1_RFC_PSK_WITH_NULL_SHA384,
R
Rich Salz 已提交
1619 1620 1621 1622 1623 1624
     TLS1_CK_PSK_WITH_NULL_SHA384,
     SSL_kPSK,
     SSL_aPSK,
     SSL_eNULL,
     SSL_SHA384,
     TLS1_VERSION, TLS1_2_VERSION,
1625
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1626 1627 1628 1629
     SSL_STRONG_NONE | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     0,
     0,
1630 1631 1632
     },
    {
     1,
R
Rich Salz 已提交
1633
     TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256,
1634
     TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256,
R
Rich Salz 已提交
1635 1636 1637 1638 1639 1640
     TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_AES128,
     SSL_SHA256,
     TLS1_VERSION, TLS1_2_VERSION,
1641
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1642
     SSL_HIGH | SSL_FIPS,
1643
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
R
Rich Salz 已提交
1644 1645
     128,
     128,
1646 1647 1648
     },
    {
     1,
R
Rich Salz 已提交
1649
     TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384,
1650
     TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384,
R
Rich Salz 已提交
1651 1652 1653
     TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384,
     SSL_kDHEPSK,
     SSL_aPSK,
1654
     SSL_AES256,
R
Rich Salz 已提交
1655 1656
     SSL_SHA384,
     TLS1_VERSION, TLS1_2_VERSION,
1657
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1658 1659
     SSL_HIGH | SSL_FIPS,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
1660 1661 1662 1663 1664
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1665
     TLS1_TXT_DHE_PSK_WITH_NULL_SHA256,
1666
     TLS1_RFC_DHE_PSK_WITH_NULL_SHA256,
R
Rich Salz 已提交
1667 1668 1669 1670
     TLS1_CK_DHE_PSK_WITH_NULL_SHA256,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_eNULL,
1671
     SSL_SHA256,
R
Rich Salz 已提交
1672
     TLS1_VERSION, TLS1_2_VERSION,
1673
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1674 1675 1676 1677
     SSL_STRONG_NONE | SSL_FIPS,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
1678 1679 1680
     },
    {
     1,
R
Rich Salz 已提交
1681
     TLS1_TXT_DHE_PSK_WITH_NULL_SHA384,
1682
     TLS1_RFC_DHE_PSK_WITH_NULL_SHA384,
R
Rich Salz 已提交
1683 1684 1685 1686
     TLS1_CK_DHE_PSK_WITH_NULL_SHA384,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_eNULL,
1687
     SSL_SHA384,
R
Rich Salz 已提交
1688
     TLS1_VERSION, TLS1_2_VERSION,
1689
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1690
     SSL_STRONG_NONE | SSL_FIPS,
1691
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
R
Rich Salz 已提交
1692 1693
     0,
     0,
1694 1695 1696
     },
    {
     1,
R
Rich Salz 已提交
1697
     TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256,
1698
     TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256,
R
Rich Salz 已提交
1699 1700
     TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256,
     SSL_kRSAPSK,
1701 1702 1703
     SSL_aRSA,
     SSL_AES128,
     SSL_SHA256,
R
Rich Salz 已提交
1704
     TLS1_VERSION, TLS1_2_VERSION,
1705
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1706
     SSL_HIGH | SSL_FIPS,
R
Rich Salz 已提交
1707
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
1708 1709 1710 1711 1712
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
1713
     TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384,
1714
     TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384,
R
Rich Salz 已提交
1715 1716
     TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384,
     SSL_kRSAPSK,
1717 1718 1719
     SSL_aRSA,
     SSL_AES256,
     SSL_SHA384,
R
Rich Salz 已提交
1720
     TLS1_VERSION, TLS1_2_VERSION,
1721
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1722
     SSL_HIGH | SSL_FIPS,
1723 1724 1725 1726 1727 1728
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
R
Rich Salz 已提交
1729
     TLS1_TXT_RSA_PSK_WITH_NULL_SHA256,
1730
     TLS1_RFC_RSA_PSK_WITH_NULL_SHA256,
R
Rich Salz 已提交
1731 1732
     TLS1_CK_RSA_PSK_WITH_NULL_SHA256,
     SSL_kRSAPSK,
1733
     SSL_aRSA,
R
Rich Salz 已提交
1734 1735 1736
     SSL_eNULL,
     SSL_SHA256,
     TLS1_VERSION, TLS1_2_VERSION,
1737
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1738 1739 1740 1741
     SSL_STRONG_NONE | SSL_FIPS,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
1742 1743 1744
     },
    {
     1,
R
Rich Salz 已提交
1745
     TLS1_TXT_RSA_PSK_WITH_NULL_SHA384,
1746
     TLS1_RFC_RSA_PSK_WITH_NULL_SHA384,
R
Rich Salz 已提交
1747 1748
     TLS1_CK_RSA_PSK_WITH_NULL_SHA384,
     SSL_kRSAPSK,
1749
     SSL_aRSA,
R
Rich Salz 已提交
1750 1751 1752
     SSL_eNULL,
     SSL_SHA384,
     TLS1_VERSION, TLS1_2_VERSION,
1753
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1754
     SSL_STRONG_NONE | SSL_FIPS,
1755
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
R
Rich Salz 已提交
1756 1757
     0,
     0,
1758
     },
1759
#  ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
1760 1761 1762
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
1763
     TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
1764 1765 1766 1767 1768
     TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_3DES,
     SSL_SHA1,
T
Todd Short 已提交
1769
     TLS1_VERSION, TLS1_2_VERSION,
1770
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1771
     SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
1772 1773 1774 1775
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
1776
#  endif
1777 1778 1779
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA,
1780
     TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA,
1781 1782 1783 1784 1785
     TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_AES128,
     SSL_SHA1,
T
Todd Short 已提交
1786
     TLS1_VERSION, TLS1_2_VERSION,
1787
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1788
     SSL_HIGH | SSL_FIPS,
1789 1790 1791 1792 1793 1794 1795
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA,
1796
     TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA,
1797 1798 1799 1800 1801
     TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_AES256,
     SSL_SHA1,
T
Todd Short 已提交
1802
     TLS1_VERSION, TLS1_2_VERSION,
1803
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1804
     SSL_HIGH | SSL_FIPS,
1805 1806 1807 1808 1809 1810 1811
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
1812
     TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
1813 1814 1815 1816 1817
     TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_AES128,
     SSL_SHA256,
1818
     TLS1_VERSION, TLS1_2_VERSION,
1819
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1820
     SSL_HIGH | SSL_FIPS,
1821 1822 1823 1824 1825 1826 1827
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
1828
     TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
1829 1830 1831 1832 1833
     TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_AES256,
     SSL_SHA384,
1834
     TLS1_VERSION, TLS1_2_VERSION,
1835
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1836
     SSL_HIGH | SSL_FIPS,
1837 1838 1839 1840 1841 1842 1843
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA,
1844
     TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA,
1845 1846 1847 1848 1849
     TLS1_CK_ECDHE_PSK_WITH_NULL_SHA,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_eNULL,
     SSL_SHA1,
T
Todd Short 已提交
1850
     TLS1_VERSION, TLS1_2_VERSION,
1851
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1852
     SSL_STRONG_NONE | SSL_FIPS,
1853 1854 1855 1856 1857 1858 1859
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256,
1860
     TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256,
1861 1862 1863 1864 1865
     TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_eNULL,
     SSL_SHA256,
1866
     TLS1_VERSION, TLS1_2_VERSION,
1867
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1868
     SSL_STRONG_NONE | SSL_FIPS,
1869 1870 1871 1872 1873 1874 1875
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     0,
     0,
     },
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384,
1876
     TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384,
1877 1878 1879 1880 1881
     TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_eNULL,
     SSL_SHA384,
1882
     TLS1_VERSION, TLS1_2_VERSION,
1883
     DTLS1_BAD_VER, DTLS1_2_VERSION,
1884
     SSL_STRONG_NONE | SSL_FIPS,
1885 1886 1887 1888 1889
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     0,
     0,
     },

1890
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
R
Rich Salz 已提交
1891 1892 1893
    {
     1,
     TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
1894
     TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
R
Rich Salz 已提交
1895 1896 1897 1898 1899 1900
     TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
     SSL_kSRP,
     SSL_aSRP,
     SSL_3DES,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1901
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1902
     SSL_NOT_DEFAULT | SSL_MEDIUM,
R
Rich Salz 已提交
1903 1904 1905 1906 1907 1908 1909
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
    {
     1,
     TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
1910
     TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
R
Rich Salz 已提交
1911 1912 1913 1914 1915 1916
     TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
     SSL_kSRP,
     SSL_aRSA,
     SSL_3DES,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1917
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1918
     SSL_NOT_DEFAULT | SSL_MEDIUM,
R
Rich Salz 已提交
1919 1920 1921 1922 1923 1924 1925
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
    {
     1,
     TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
1926
     TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
R
Rich Salz 已提交
1927 1928 1929 1930 1931 1932
     TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
     SSL_kSRP,
     SSL_aDSS,
     SSL_3DES,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1933
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1934
     SSL_NOT_DEFAULT | SSL_MEDIUM,
R
Rich Salz 已提交
1935 1936 1937 1938
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     112,
     168,
     },
1939
# endif
R
Rich Salz 已提交
1940 1941 1942
    {
     1,
     TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA,
1943
     TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
1944 1945 1946 1947 1948 1949
     TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA,
     SSL_kSRP,
     SSL_aSRP,
     SSL_AES128,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1950
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1951 1952 1953 1954 1955 1956 1957 1958
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
1959
     TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
1960 1961 1962 1963 1964 1965
     TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
     SSL_kSRP,
     SSL_aRSA,
     SSL_AES128,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1966
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1967 1968 1969 1970 1971 1972 1973 1974
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
1975
     TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
R
Rich Salz 已提交
1976 1977 1978 1979 1980 1981
     TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
     SSL_kSRP,
     SSL_aDSS,
     SSL_AES128,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1982
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1983 1984 1985 1986 1987 1988 1989 1990
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA,
1991
     TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
1992 1993 1994 1995 1996 1997
     TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA,
     SSL_kSRP,
     SSL_aSRP,
     SSL_AES256,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
1998
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
1999 2000 2001 2002 2003 2004 2005 2006
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
2007
     TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
2008 2009 2010 2011 2012 2013
     TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
     SSL_kSRP,
     SSL_aRSA,
     SSL_AES256,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2014
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2015 2016 2017 2018 2019 2020 2021 2022
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
2023
     TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
R
Rich Salz 已提交
2024 2025 2026 2027 2028 2029
     TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
     SSL_kSRP,
     SSL_aDSS,
     SSL_AES256,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2030
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2031 2032 2033 2034 2035 2036 2037 2038 2039 2040
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },

#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
2041
     TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305,
R
Rich Salz 已提交
2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056
     TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305,
     SSL_kDHE,
     SSL_aRSA,
     SSL_CHACHA20POLY1305,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
2057
     TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305,
R
Rich Salz 已提交
2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072
     TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305,
     SSL_kECDHE,
     SSL_aRSA,
     SSL_CHACHA20POLY1305,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
2073
     TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
R
Rich Salz 已提交
2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088
     TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_CHACHA20POLY1305,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_PSK_WITH_CHACHA20_POLY1305,
2089
     TLS1_RFC_PSK_WITH_CHACHA20_POLY1305,
R
Rich Salz 已提交
2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104
     TLS1_CK_PSK_WITH_CHACHA20_POLY1305,
     SSL_kPSK,
     SSL_aPSK,
     SSL_CHACHA20POLY1305,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305,
2105
     TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305,
R
Rich Salz 已提交
2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120
     TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_CHACHA20POLY1305,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305,
2121
     TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305,
R
Rich Salz 已提交
2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136
     TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_CHACHA20POLY1305,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305,
2137
     TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305,
R
Rich Salz 已提交
2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149
     TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305,
     SSL_kRSAPSK,
     SSL_aRSA,
     SSL_CHACHA20POLY1305,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
E
Emilia Kasper 已提交
2150 2151
#endif                          /* !defined(OPENSSL_NO_CHACHA) &&
                                 * !defined(OPENSSL_NO_POLY1305) */
R
Rich Salz 已提交
2152 2153 2154 2155 2156

#ifndef OPENSSL_NO_CAMELLIA
    {
     1,
     TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2157
     TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256,
R
Rich Salz 已提交
2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172
     TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kRSA,
     SSL_aRSA,
     SSL_CAMELLIA128,
     SSL_SHA256,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
2173
     TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
R
Rich Salz 已提交
2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188
     TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kEDH,
     SSL_aDSS,
     SSL_CAMELLIA128,
     SSL_SHA256,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2189
     TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
R
Rich Salz 已提交
2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204
     TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kEDH,
     SSL_aRSA,
     SSL_CAMELLIA128,
     SSL_SHA256,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256,
2205
     TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256,
R
Rich Salz 已提交
2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220
     TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kEDH,
     SSL_aNULL,
     SSL_CAMELLIA128,
     SSL_SHA256,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2221
     TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256,
R
Rich Salz 已提交
2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236
     TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256,
     SSL_kRSA,
     SSL_aRSA,
     SSL_CAMELLIA256,
     SSL_SHA256,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
2237
     TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
R
Rich Salz 已提交
2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252
     TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
     SSL_kEDH,
     SSL_aDSS,
     SSL_CAMELLIA256,
     SSL_SHA256,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
2253
     TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
R
Rich Salz 已提交
2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268
     TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
     SSL_kEDH,
     SSL_aRSA,
     SSL_CAMELLIA256,
     SSL_SHA256,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256,
2269
     TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256,
R
Rich Salz 已提交
2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284
     TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256,
     SSL_kEDH,
     SSL_aNULL,
     SSL_CAMELLIA256,
     SSL_SHA256,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
2285
     TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA,
R
Rich Salz 已提交
2286 2287 2288 2289 2290 2291
     TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_CAMELLIA256,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2292
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2293 2294 2295 2296 2297 2298 2299 2300
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
2301
     TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
R
Rich Salz 已提交
2302 2303 2304 2305 2306 2307
     TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
     SSL_kDHE,
     SSL_aDSS,
     SSL_CAMELLIA256,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2308
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2309 2310 2311 2312 2313 2314 2315 2316
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
2317
     TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
R
Rich Salz 已提交
2318 2319 2320 2321 2322 2323
     TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
     SSL_kDHE,
     SSL_aRSA,
     SSL_CAMELLIA256,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2324
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2325 2326 2327 2328 2329 2330 2331 2332
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
2333
     TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA,
R
Rich Salz 已提交
2334 2335 2336 2337 2338 2339
     TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
     SSL_kDHE,
     SSL_aNULL,
     SSL_CAMELLIA256,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2340
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2341 2342 2343 2344 2345 2346 2347 2348
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
2349
     TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA,
R
Rich Salz 已提交
2350 2351 2352 2353 2354 2355
     TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_CAMELLIA128,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2356
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2357 2358 2359 2360 2361 2362 2363 2364
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
2365
     TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
R
Rich Salz 已提交
2366 2367 2368 2369 2370 2371
     TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
     SSL_kDHE,
     SSL_aDSS,
     SSL_CAMELLIA128,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2372
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2373 2374 2375 2376 2377 2378 2379 2380
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
2381
     TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
R
Rich Salz 已提交
2382 2383 2384 2385 2386 2387
     TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
     SSL_kDHE,
     SSL_aRSA,
     SSL_CAMELLIA128,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2388
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2389 2390 2391 2392 2393 2394 2395 2396
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
2397
     TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA,
R
Rich Salz 已提交
2398 2399 2400 2401 2402 2403
     TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
     SSL_kDHE,
     SSL_aNULL,
     SSL_CAMELLIA128,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2404
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2405 2406 2407 2408 2409 2410
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
    {
2411 2412
     1,
     TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
2413
     TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
2414 2415 2416 2417 2418
     TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_CAMELLIA128,
     SSL_SHA256,
2419 2420
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2421
     SSL_NOT_DEFAULT | SSL_HIGH,
2422 2423
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
E
Emilia Kasper 已提交
2424 2425
     128,
     },
R
Rich Salz 已提交
2426
    {
2427 2428
     1,
     TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
2429
     TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
2430 2431 2432 2433 2434
     TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_CAMELLIA256,
     SSL_SHA384,
2435 2436
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2437
     SSL_NOT_DEFAULT | SSL_HIGH,
2438 2439
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
E
Emilia Kasper 已提交
2440 2441
     256,
     },
R
Rich Salz 已提交
2442
    {
2443 2444
     1,
     TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2445
     TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
2446 2447 2448 2449 2450
     TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kECDHE,
     SSL_aRSA,
     SSL_CAMELLIA128,
     SSL_SHA256,
2451 2452
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2453
     SSL_NOT_DEFAULT | SSL_HIGH,
2454 2455
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
E
Emilia Kasper 已提交
2456 2457
     128,
     },
R
Rich Salz 已提交
2458
    {
2459 2460
     1,
     TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
2461
     TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
2462 2463 2464 2465 2466
     TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
     SSL_kECDHE,
     SSL_aRSA,
     SSL_CAMELLIA256,
     SSL_SHA384,
2467 2468
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2469
     SSL_NOT_DEFAULT | SSL_HIGH,
2470 2471
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
E
Emilia Kasper 已提交
2472 2473
     256,
     },
R
Rich Salz 已提交
2474
    {
2475 2476
     1,
     TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2477
     TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2478 2479 2480 2481 2482
     TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kPSK,
     SSL_aPSK,
     SSL_CAMELLIA128,
     SSL_SHA256,
2483
     TLS1_VERSION, TLS1_2_VERSION,
2484
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2485
     SSL_NOT_DEFAULT | SSL_HIGH,
2486 2487
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
E
Emilia Kasper 已提交
2488 2489
     128,
     },
R
Rich Salz 已提交
2490
    {
2491 2492
     1,
     TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2493
     TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2494 2495 2496 2497 2498
     TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384,
     SSL_kPSK,
     SSL_aPSK,
     SSL_CAMELLIA256,
     SSL_SHA384,
2499
     TLS1_VERSION, TLS1_2_VERSION,
2500
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2501
     SSL_NOT_DEFAULT | SSL_HIGH,
2502 2503
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
E
Emilia Kasper 已提交
2504 2505
     256,
     },
R
Rich Salz 已提交
2506
    {
2507 2508
     1,
     TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2509
     TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2510 2511 2512 2513 2514
     TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_CAMELLIA128,
     SSL_SHA256,
2515
     TLS1_VERSION, TLS1_2_VERSION,
2516
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2517
     SSL_NOT_DEFAULT | SSL_HIGH,
2518 2519
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
E
Emilia Kasper 已提交
2520 2521
     128,
     },
R
Rich Salz 已提交
2522
    {
2523 2524
     1,
     TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2525
     TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2526 2527 2528 2529 2530
     TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_CAMELLIA256,
     SSL_SHA384,
2531
     TLS1_VERSION, TLS1_2_VERSION,
2532
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2533
     SSL_NOT_DEFAULT | SSL_HIGH,
2534 2535
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
E
Emilia Kasper 已提交
2536 2537
     256,
     },
R
Rich Salz 已提交
2538
    {
2539 2540
     1,
     TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2541
     TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2542 2543 2544 2545 2546
     TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kRSAPSK,
     SSL_aRSA,
     SSL_CAMELLIA128,
     SSL_SHA256,
2547
     TLS1_VERSION, TLS1_2_VERSION,
2548
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2549
     SSL_NOT_DEFAULT | SSL_HIGH,
2550 2551
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
E
Emilia Kasper 已提交
2552 2553
     128,
     },
R
Rich Salz 已提交
2554
    {
2555 2556
     1,
     TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2557
     TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2558 2559 2560 2561 2562
     TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
     SSL_kRSAPSK,
     SSL_aRSA,
     SSL_CAMELLIA256,
     SSL_SHA384,
2563
     TLS1_VERSION, TLS1_2_VERSION,
2564
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2565
     SSL_NOT_DEFAULT | SSL_HIGH,
2566 2567
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
E
Emilia Kasper 已提交
2568 2569
     256,
     },
2570 2571
    {
     1,
R
Rich Salz 已提交
2572
     TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
2573
     TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
R
Rich Salz 已提交
2574 2575
     TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
     SSL_kECDHEPSK,
2576
     SSL_aPSK,
R
Rich Salz 已提交
2577 2578 2579
     SSL_CAMELLIA128,
     SSL_SHA256,
     TLS1_VERSION, TLS1_2_VERSION,
2580
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2581
     SSL_NOT_DEFAULT | SSL_HIGH,
R
Rich Salz 已提交
2582
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2583
     128,
E
Emilia Kasper 已提交
2584 2585
     128,
     },
2586 2587
    {
     1,
R
Rich Salz 已提交
2588
     TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
2589
     TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
R
Rich Salz 已提交
2590 2591
     TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
     SSL_kECDHEPSK,
2592
     SSL_aPSK,
R
Rich Salz 已提交
2593 2594 2595
     SSL_CAMELLIA256,
     SSL_SHA384,
     TLS1_VERSION, TLS1_2_VERSION,
2596
     DTLS1_BAD_VER, DTLS1_2_VERSION,
E
Emilia Kasper 已提交
2597
     SSL_NOT_DEFAULT | SSL_HIGH,
R
Rich Salz 已提交
2598
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
2599
     256,
E
Emilia Kasper 已提交
2600 2601 2602
     256,
     },
#endif                          /* OPENSSL_NO_CAMELLIA */
2603

P
Pauli 已提交
2604
#ifndef OPENSSL_NO_GOST
2605 2606
    {
     1,
R
Rich Salz 已提交
2607
     "GOST2001-GOST89-GOST89",
2608
     "TLS_GOSTR341001_WITH_28147_CNT_IMIT",
R
Rich Salz 已提交
2609 2610 2611 2612 2613 2614
     0x3000081,
     SSL_kGOST,
     SSL_aGOST01,
     SSL_eGOST2814789CNT,
     SSL_GOST89MAC,
     TLS1_VERSION, TLS1_2_VERSION,
2615
     0, 0,
R
Rich Salz 已提交
2616 2617
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC,
2618
     256,
E
Emilia Kasper 已提交
2619 2620
     256,
     },
R
Rich Salz 已提交
2621 2622 2623
    {
     1,
     "GOST2001-NULL-GOST94",
2624
     "TLS_GOSTR341001_WITH_NULL_GOSTR3411",
R
Rich Salz 已提交
2625 2626 2627 2628 2629 2630
     0x3000083,
     SSL_kGOST,
     SSL_aGOST01,
     SSL_eNULL,
     SSL_GOST94,
     TLS1_VERSION, TLS1_2_VERSION,
2631
     0, 0,
R
Rich Salz 已提交
2632 2633 2634
     SSL_STRONG_NONE,
     SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94,
     0,
E
Emilia Kasper 已提交
2635 2636
     0,
     },
R
Rich Salz 已提交
2637 2638 2639
    {
     1,
     "GOST2012-GOST8912-GOST8912",
2640
     NULL,
R
Rich Salz 已提交
2641 2642 2643 2644 2645 2646
     0x0300ff85,
     SSL_kGOST,
     SSL_aGOST12 | SSL_aGOST01,
     SSL_eGOST2814789CNT12,
     SSL_GOST89MAC12,
     TLS1_VERSION, TLS1_2_VERSION,
2647
     0, 0,
R
Rich Salz 已提交
2648 2649
     SSL_HIGH,
     SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
2650
     256,
E
Emilia Kasper 已提交
2651 2652
     256,
     },
R
Rich Salz 已提交
2653 2654 2655
    {
     1,
     "GOST2012-NULL-GOST12",
2656
     NULL,
R
Rich Salz 已提交
2657 2658 2659 2660 2661 2662
     0x0300ff87,
     SSL_kGOST,
     SSL_aGOST12 | SSL_aGOST01,
     SSL_eNULL,
     SSL_GOST12_256,
     TLS1_VERSION, TLS1_2_VERSION,
2663
     0, 0,
R
Rich Salz 已提交
2664 2665 2666
     SSL_STRONG_NONE,
     SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
     0,
E
Emilia Kasper 已提交
2667 2668 2669
     0,
     },
#endif                          /* OPENSSL_NO_GOST */
2670

R
Rich Salz 已提交
2671
#ifndef OPENSSL_NO_IDEA
2672 2673
    {
     1,
R
Rich Salz 已提交
2674
     SSL3_TXT_RSA_IDEA_128_SHA,
2675
     SSL3_RFC_RSA_IDEA_128_SHA,
R
Rich Salz 已提交
2676 2677 2678 2679 2680 2681
     SSL3_CK_RSA_IDEA_128_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_IDEA,
     SSL_SHA1,
     SSL3_VERSION, TLS1_1_VERSION,
2682
     DTLS1_BAD_VER, DTLS1_VERSION,
R
Rich Salz 已提交
2683 2684
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2685 2686 2687
     128,
     128,
     },
R
Rich Salz 已提交
2688
#endif
2689

R
Rich Salz 已提交
2690
#ifndef OPENSSL_NO_SEED
2691 2692
    {
     1,
R
Rich Salz 已提交
2693
     TLS1_TXT_RSA_WITH_SEED_SHA,
2694
     TLS1_RFC_RSA_WITH_SEED_SHA,
R
Rich Salz 已提交
2695 2696 2697 2698 2699 2700
     TLS1_CK_RSA_WITH_SEED_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_SEED,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2701
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2702 2703 2704 2705
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
2706 2707 2708
     },
    {
     1,
R
Rich Salz 已提交
2709
     TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
2710
     TLS1_RFC_DHE_DSS_WITH_SEED_SHA,
R
Rich Salz 已提交
2711 2712 2713 2714 2715 2716
     TLS1_CK_DHE_DSS_WITH_SEED_SHA,
     SSL_kDHE,
     SSL_aDSS,
     SSL_SEED,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2717
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2718 2719
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2720 2721 2722 2723 2724
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
2725
     TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
2726
     TLS1_RFC_DHE_RSA_WITH_SEED_SHA,
R
Rich Salz 已提交
2727 2728 2729 2730 2731 2732
     TLS1_CK_DHE_RSA_WITH_SEED_SHA,
     SSL_kDHE,
     SSL_aRSA,
     SSL_SEED,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2733
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2734 2735 2736 2737
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
2738 2739 2740
     },
    {
     1,
R
Rich Salz 已提交
2741
     TLS1_TXT_ADH_WITH_SEED_SHA,
2742
     TLS1_RFC_ADH_WITH_SEED_SHA,
R
Rich Salz 已提交
2743 2744 2745 2746 2747 2748
     TLS1_CK_ADH_WITH_SEED_SHA,
     SSL_kDHE,
     SSL_aNULL,
     SSL_SEED,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
2749
     DTLS1_BAD_VER, DTLS1_2_VERSION,
R
Rich Salz 已提交
2750 2751
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2752 2753 2754
     128,
     128,
     },
E
Emilia Kasper 已提交
2755
#endif                          /* OPENSSL_NO_SEED */
2756

R
Rich Salz 已提交
2757 2758 2759 2760
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
    {
     1,
     SSL3_TXT_RSA_RC4_128_MD5,
2761
     SSL3_RFC_RSA_RC4_128_MD5,
R
Rich Salz 已提交
2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773
     SSL3_CK_RSA_RC4_128_MD5,
     SSL_kRSA,
     SSL_aRSA,
     SSL_RC4,
     SSL_MD5,
     SSL3_VERSION, TLS1_2_VERSION,
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
     },
2774 2775
    {
     1,
R
Rich Salz 已提交
2776
     SSL3_TXT_RSA_RC4_128_SHA,
2777
     SSL3_RFC_RSA_RC4_128_SHA,
R
Rich Salz 已提交
2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788
     SSL3_CK_RSA_RC4_128_SHA,
     SSL_kRSA,
     SSL_aRSA,
     SSL_RC4,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
2789 2790 2791
     },
    {
     1,
R
Rich Salz 已提交
2792
     SSL3_TXT_ADH_RC4_128_MD5,
2793
     SSL3_RFC_ADH_RC4_128_MD5,
R
Rich Salz 已提交
2794 2795 2796 2797 2798 2799 2800 2801 2802
     SSL3_CK_ADH_RC4_128_MD5,
     SSL_kDHE,
     SSL_aNULL,
     SSL_RC4,
     SSL_MD5,
     SSL3_VERSION, TLS1_2_VERSION,
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
2803 2804 2805 2806 2807
     128,
     128,
     },
    {
     1,
R
Rich Salz 已提交
2808
     TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA,
2809
     TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA,
R
Rich Salz 已提交
2810 2811 2812 2813 2814
     TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA,
     SSL_kECDHEPSK,
     SSL_aPSK,
     SSL_RC4,
     SSL_SHA1,
T
Todd Short 已提交
2815
     TLS1_VERSION, TLS1_2_VERSION,
R
Rich Salz 已提交
2816 2817 2818 2819 2820
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
2821
     },
A
Andy Polyakov 已提交
2822 2823
    {
     1,
R
Rich Salz 已提交
2824
     TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
2825
     TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA,
R
Rich Salz 已提交
2826
     TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
A
Andy Polyakov 已提交
2827
     SSL_kECDHE,
R
Rich Salz 已提交
2828 2829 2830
     SSL_aNULL,
     SSL_RC4,
     SSL_SHA1,
T
Todd Short 已提交
2831
     TLS1_VERSION, TLS1_2_VERSION,
R
Rich Salz 已提交
2832 2833 2834 2835 2836
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
A
Andy Polyakov 已提交
2837 2838 2839
     },
    {
     1,
R
Rich Salz 已提交
2840
     TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
2841
     TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA,
R
Rich Salz 已提交
2842
     TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
A
Andy Polyakov 已提交
2843 2844
     SSL_kECDHE,
     SSL_aECDSA,
R
Rich Salz 已提交
2845 2846
     SSL_RC4,
     SSL_SHA1,
T
Todd Short 已提交
2847
     TLS1_VERSION, TLS1_2_VERSION,
R
Rich Salz 已提交
2848 2849 2850 2851 2852
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
A
Andy Polyakov 已提交
2853 2854 2855
     },
    {
     1,
R
Rich Salz 已提交
2856
     TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
2857
     TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA,
R
Rich Salz 已提交
2858 2859
     TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
     SSL_kECDHE,
A
Andy Polyakov 已提交
2860
     SSL_aRSA,
R
Rich Salz 已提交
2861 2862
     SSL_RC4,
     SSL_SHA1,
T
Todd Short 已提交
2863
     TLS1_VERSION, TLS1_2_VERSION,
R
Rich Salz 已提交
2864 2865 2866 2867 2868
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
A
Andy Polyakov 已提交
2869 2870 2871
     },
    {
     1,
R
Rich Salz 已提交
2872
     TLS1_TXT_PSK_WITH_RC4_128_SHA,
2873
     TLS1_RFC_PSK_WITH_RC4_128_SHA,
R
Rich Salz 已提交
2874
     TLS1_CK_PSK_WITH_RC4_128_SHA,
A
Andy Polyakov 已提交
2875 2876
     SSL_kPSK,
     SSL_aPSK,
R
Rich Salz 已提交
2877 2878 2879 2880 2881 2882 2883 2884
     SSL_RC4,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
A
Andy Polyakov 已提交
2885 2886 2887
     },
    {
     1,
R
Rich Salz 已提交
2888
     TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA,
2889
     TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA,
R
Rich Salz 已提交
2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900
     TLS1_CK_RSA_PSK_WITH_RC4_128_SHA,
     SSL_kRSAPSK,
     SSL_aRSA,
     SSL_RC4,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
A
Andy Polyakov 已提交
2901 2902 2903
     },
    {
     1,
R
Rich Salz 已提交
2904
     TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA,
2905
     TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA,
R
Rich Salz 已提交
2906
     TLS1_CK_DHE_PSK_WITH_RC4_128_SHA,
A
Andy Polyakov 已提交
2907 2908
     SSL_kDHEPSK,
     SSL_aPSK,
R
Rich Salz 已提交
2909 2910 2911 2912 2913 2914 2915 2916
     SSL_RC4,
     SSL_SHA1,
     SSL3_VERSION, TLS1_2_VERSION,
     0, 0,
     SSL_NOT_DEFAULT | SSL_MEDIUM,
     SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
     128,
     128,
A
Andy Polyakov 已提交
2917
     },
E
Emilia Kasper 已提交
2918
#endif                          /* OPENSSL_NO_WEAK_SSL_CIPHERS */
2919

2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177
#ifndef OPENSSL_NO_ARIA
    {
     1,
     TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256,
     TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256,
     TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256,
     SSL_kRSA,
     SSL_aRSA,
     SSL_ARIA128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384,
     TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384,
     TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384,
     SSL_kRSA,
     SSL_aRSA,
     SSL_ARIA256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
     TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
     TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
     SSL_kDHE,
     SSL_aRSA,
     SSL_ARIA128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
     TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
     TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
     SSL_kDHE,
     SSL_aRSA,
     SSL_ARIA256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
     TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
     TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
     SSL_kDHE,
     SSL_aDSS,
     SSL_ARIA128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
     TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
     TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
     SSL_kDHE,
     SSL_aDSS,
     SSL_ARIA256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
     TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
     TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_ARIA128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
     TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
     TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
     SSL_kECDHE,
     SSL_aECDSA,
     SSL_ARIA256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
     TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
     TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
     SSL_kECDHE,
     SSL_aRSA,
     SSL_ARIA128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
     TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
     TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
     SSL_kECDHE,
     SSL_aRSA,
     SSL_ARIA256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256,
     TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256,
     TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256,
     SSL_kPSK,
     SSL_aPSK,
     SSL_ARIA128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384,
     TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384,
     TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384,
     SSL_kPSK,
     SSL_aPSK,
     SSL_ARIA256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
     TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
     TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_ARIA128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
     TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
     TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
     SSL_kDHEPSK,
     SSL_aPSK,
     SSL_ARIA256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
    {
     1,
     TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
     TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
     TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
     SSL_kRSAPSK,
     SSL_aRSA,
     SSL_ARIA128GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
     128,
     128,
     },
    {
     1,
     TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
     TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
     TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
     SSL_kRSAPSK,
     SSL_aRSA,
     SSL_ARIA256GCM,
     SSL_AEAD,
     TLS1_2_VERSION, TLS1_2_VERSION,
     DTLS1_2_VERSION, DTLS1_2_VERSION,
     SSL_NOT_DEFAULT | SSL_HIGH,
     SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
     256,
     256,
     },
#endif /* OPENSSL_NO_ARIA */
3178 3179
};

3180 3181 3182 3183 3184 3185 3186 3187 3188
/*
 * The list of known Signalling Cipher-Suite Value "ciphers", non-valid
 * values stuffed into the ciphers field of the wire protocol for signalling
 * purposes.
 */
static SSL_CIPHER ssl3_scsvs[] = {
    {
     0,
     "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
3189
     "TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
3190 3191 3192 3193 3194 3195
     SSL3_CK_SCSV,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    },
    {
     0,
     "TLS_FALLBACK_SCSV",
3196
     "TLS_FALLBACK_SCSV",
3197 3198 3199 3200 3201
     SSL3_CK_FALLBACK_SCSV,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    },
};

R
Rich Salz 已提交
3202 3203 3204 3205 3206
static int cipher_compare(const void *a, const void *b)
{
    const SSL_CIPHER *ap = (const SSL_CIPHER *)a;
    const SSL_CIPHER *bp = (const SSL_CIPHER *)b;

R
Richard Levitte 已提交
3207 3208 3209
    if (ap->id == bp->id)
        return 0;
    return ap->id < bp->id ? -1 : 1;
R
Rich Salz 已提交
3210 3211 3212 3213
}

void ssl_sort_cipher_list(void)
{
3214 3215
    qsort(tls13_ciphers, TLS13_NUM_CIPHERS, sizeof(tls13_ciphers[0]),
          cipher_compare);
R
Rich Salz 已提交
3216
    qsort(ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(ssl3_ciphers[0]),
R
Rich Salz 已提交
3217
          cipher_compare);
R
Rich Salz 已提交
3218
    qsort(ssl3_scsvs, SSL3_NUM_SCSVS, sizeof(ssl3_scsvs[0]), cipher_compare);
R
Rich Salz 已提交
3219 3220
}

B
Bernd Edlinger 已提交
3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234
static int ssl_undefined_function_1(SSL *ssl, unsigned char *r, size_t s,
                                    const char * t, size_t u,
                                    const unsigned char * v, size_t w, int x)
{
    (void)r;
    (void)s;
    (void)t;
    (void)u;
    (void)v;
    (void)w;
    (void)x;
    return ssl_undefined_function(ssl);
}

3235 3236 3237 3238 3239 3240 3241 3242 3243 3244
const SSL3_ENC_METHOD SSLv3_enc_data = {
    ssl3_enc,
    n_ssl3_mac,
    ssl3_setup_key_block,
    ssl3_generate_master_secret,
    ssl3_change_cipher_state,
    ssl3_final_finish_mac,
    SSL3_MD_CLIENT_FINISHED_CONST, 4,
    SSL3_MD_SERVER_FINISHED_CONST, 4,
    ssl3_alert_code,
B
Bernd Edlinger 已提交
3245
    ssl_undefined_function_1,
3246
    0,
M
Matt Caswell 已提交
3247
    ssl3_set_handshake_header,
3248
    tls_close_construct_packet,
3249 3250
    ssl3_handshake_write
};
3251

3252
long ssl3_default_timeout(void)
3253 3254 3255 3256 3257 3258 3259
{
    /*
     * 2 hours, the 24 hours mentioned in the SSLv3 spec is way too long for
     * http, the cache would over fill
     */
    return (60 * 60 * 2);
}
3260

U
Ulf Möller 已提交
3261
int ssl3_num_ciphers(void)
3262
{
K
KaoruToda 已提交
3263
    return SSL3_NUM_CIPHERS;
3264
}
3265

3266
const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
3267 3268
{
    if (u < SSL3_NUM_CIPHERS)
K
KaoruToda 已提交
3269
        return &(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]);
3270
    else
K
KaoruToda 已提交
3271
        return NULL;
3272
}
3273

M
Matt Caswell 已提交
3274
int ssl3_set_handshake_header(SSL *s, WPACKET *pkt, int htype)
3275
{
3276 3277 3278 3279
    /* No header in the event of a CCS */
    if (htype == SSL3_MT_CHANGE_CIPHER_SPEC)
        return 1;

3280
    /* Set the content type and 3 bytes for the message len */
3281
    if (!WPACKET_put_bytes_u8(pkt, htype)
M
Matt Caswell 已提交
3282
            || !WPACKET_start_sub_packet_u24(pkt))
3283 3284 3285 3286 3287
        return 0;

    return 1;
}

D
Dr. Stephen Henson 已提交
3288
int ssl3_handshake_write(SSL *s)
3289 3290 3291
{
    return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
}
D
Dr. Stephen Henson 已提交
3292

U
Ulf Möller 已提交
3293
int ssl3_new(SSL *s)
3294
{
B
Ben Laurie 已提交
3295
#ifndef OPENSSL_NO_SRP
V
Viktor Dukhovni 已提交
3296
    if (!SSL_SRP_CTX_init(s))
M
Matt Caswell 已提交
3297
        return 0;
B
Ben Laurie 已提交
3298
#endif
3299 3300 3301 3302

    if (!s->method->ssl_clear(s))
        return 0;

M
Matt Caswell 已提交
3303
    return 1;
3304
}
3305

U
Ulf Möller 已提交
3306
void ssl3_free(SSL *s)
3307
{
3308
    if (s == NULL)
3309
        return;
B
Ben Laurie 已提交
3310

3311
    ssl3_cleanup_key_block(s);
3312

D
Dr. Stephen Henson 已提交
3313
#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
3314 3315 3316 3317
    EVP_PKEY_free(s->s3.peer_tmp);
    s->s3.peer_tmp = NULL;
    EVP_PKEY_free(s->s3.tmp.pkey);
    s->s3.tmp.pkey = NULL;
B
Bodo Möller 已提交
3318 3319
#endif

3320 3321 3322
    ssl_evp_cipher_free(s->s3.tmp.new_sym_enc);
    ssl_evp_md_free(s->s3.tmp.new_hash);

3323 3324 3325 3326 3327 3328
    OPENSSL_free(s->s3.tmp.ctype);
    sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
    OPENSSL_free(s->s3.tmp.ciphers_raw);
    OPENSSL_clear_free(s->s3.tmp.pms, s->s3.tmp.pmslen);
    OPENSSL_free(s->s3.tmp.peer_sigalgs);
    OPENSSL_free(s->s3.tmp.peer_cert_sigalgs);
3329
    ssl3_free_digest_list(s);
3330 3331
    OPENSSL_free(s->s3.alpn_selected);
    OPENSSL_free(s->s3.alpn_proposed);
A
Adam Langley 已提交
3332

B
Ben Laurie 已提交
3333
#ifndef OPENSSL_NO_SRP
3334
    SSL_SRP_CTX_free(s);
B
Ben Laurie 已提交
3335
#endif
3336
    memset(&s->s3, 0, sizeof(s->s3));
3337
}
3338

3339
int ssl3_clear(SSL *s)
3340 3341
{
    ssl3_cleanup_key_block(s);
3342 3343 3344 3345 3346 3347
    OPENSSL_free(s->s3.tmp.ctype);
    sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
    OPENSSL_free(s->s3.tmp.ciphers_raw);
    OPENSSL_clear_free(s->s3.tmp.pms, s->s3.tmp.pmslen);
    OPENSSL_free(s->s3.tmp.peer_sigalgs);
    OPENSSL_free(s->s3.tmp.peer_cert_sigalgs);
3348

D
Dr. Stephen Henson 已提交
3349
#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
3350 3351
    EVP_PKEY_free(s->s3.tmp.pkey);
    EVP_PKEY_free(s->s3.peer_tmp);
E
Emilia Kasper 已提交
3352
#endif                          /* !OPENSSL_NO_EC */
3353

3354
    ssl3_free_digest_list(s);
3355

3356 3357
    OPENSSL_free(s->s3.alpn_selected);
    OPENSSL_free(s->s3.alpn_proposed);
3358

T
Todd Short 已提交
3359
    /* NULL/zero-out everything in the s3 struct */
3360
    memset(&s->s3, 0, sizeof(s->s3));
3361

3362 3363
    if (!ssl_free_wbio_buffer(s))
        return 0;
3364 3365

    s->version = SSL3_VERSION;
B
Ben Laurie 已提交
3366

3367
#if !defined(OPENSSL_NO_NEXTPROTONEG)
R
Rich Salz 已提交
3368 3369 3370
    OPENSSL_free(s->ext.npn);
    s->ext.npn = NULL;
    s->ext.npn_len = 0;
B
Ben Laurie 已提交
3371
#endif
3372 3373

    return 1;
3374
}
3375

B
Ben Laurie 已提交
3376
#ifndef OPENSSL_NO_SRP
3377 3378
static char *srp_password_from_info_cb(SSL *s, void *arg)
{
R
Rich Salz 已提交
3379
    return OPENSSL_strdup(s->srp_ctx.info);
3380
}
B
Ben Laurie 已提交
3381 3382
#endif

E
Emilia Kasper 已提交
3383
static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
3384

3385
long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
3386 3387
{
    int ret = 0;
3388

3389 3390 3391 3392
    switch (cmd) {
    case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
        break;
    case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
3393
        ret = s->s3.num_renegotiations;
3394 3395
        break;
    case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
3396 3397
        ret = s->s3.num_renegotiations;
        s->s3.num_renegotiations = 0;
3398 3399
        break;
    case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
3400
        ret = s->s3.total_renegotiations;
3401 3402
        break;
    case SSL_CTRL_GET_FLAGS:
3403
        ret = (int)(s->s3.flags);
3404
        break;
3405
#ifndef OPENSSL_NO_DH
3406 3407 3408
    case SSL_CTRL_SET_TMP_DH:
        {
            DH *dh = (DH *)parg;
3409
            EVP_PKEY *pkdh = NULL;
3410 3411
            if (dh == NULL) {
                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
A
Antoine Salon 已提交
3412
                return 0;
3413
            }
3414 3415 3416 3417 3418
            pkdh = ssl_dh_to_pkey(dh);
            if (pkdh == NULL) {
                SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
                return 0;
            }
3419
            if (!ssl_security(s, SSL_SECOP_TMP_DH,
3420
                              EVP_PKEY_security_bits(pkdh), 0, pkdh)) {
3421
                SSLerr(SSL_F_SSL3_CTRL, SSL_R_DH_KEY_TOO_SMALL);
3422
                EVP_PKEY_free(pkdh);
A
Antoine Salon 已提交
3423
                return 0;
3424
            }
3425 3426
            EVP_PKEY_free(s->cert->dh_tmp);
            s->cert->dh_tmp = pkdh;
A
Antoine Salon 已提交
3427
            return 1;
3428 3429 3430 3431 3432
        }
        break;
    case SSL_CTRL_SET_TMP_DH_CB:
        {
            SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
K
KaoruToda 已提交
3433
            return ret;
3434 3435 3436 3437
        }
    case SSL_CTRL_SET_DH_AUTO:
        s->cert->dh_tmp_auto = larg;
        return 1;
3438
#endif
3439
#ifndef OPENSSL_NO_EC
3440 3441
    case SSL_CTRL_SET_TMP_ECDH:
        {
3442 3443
            const EC_GROUP *group = NULL;
            int nid;
3444 3445 3446

            if (parg == NULL) {
                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
3447
                return 0;
3448
            }
3449 3450 3451 3452
            group = EC_KEY_get0_group((const EC_KEY *)parg);
            if (group == NULL) {
                SSLerr(SSL_F_SSL3_CTRL, EC_R_MISSING_PARAMETERS);
                return 0;
3453
            }
3454 3455 3456
            nid = EC_GROUP_get_curve_name(group);
            if (nid == NID_undef)
                return 0;
R
Rich Salz 已提交
3457 3458
            return tls1_set_groups(&s->ext.supportedgroups,
                                   &s->ext.supportedgroups_len,
3459
                                   &nid, 1);
3460 3461
        }
        break;
3462
#endif                          /* !OPENSSL_NO_EC */
3463
    case SSL_CTRL_SET_TLSEXT_HOSTNAME:
3464 3465 3466 3467 3468 3469 3470 3471 3472
        /*
         * TODO(OpenSSL1.2)
         * This API is only used for a client to set what SNI it will request
         * from the server, but we currently allow it to be used on servers
         * as well, which is a programming error.  Currently we just clear
         * the field in SSL_do_handshake() for server SSLs, but when we can
         * make ABI-breaking changes, we may want to make use of this API
         * an error on server SSLs.
         */
3473
        if (larg == TLSEXT_NAMETYPE_host_name) {
V
Viktor Dukhovni 已提交
3474 3475
            size_t len;

R
Rich Salz 已提交
3476 3477
            OPENSSL_free(s->ext.hostname);
            s->ext.hostname = NULL;
3478 3479 3480 3481

            ret = 1;
            if (parg == NULL)
                break;
V
Viktor Dukhovni 已提交
3482 3483
            len = strlen((char *)parg);
            if (len == 0 || len > TLSEXT_MAXLEN_host_name) {
3484 3485 3486
                SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
                return 0;
            }
R
Rich Salz 已提交
3487
            if ((s->ext.hostname = OPENSSL_strdup((char *)parg)) == NULL) {
3488 3489 3490 3491 3492 3493 3494 3495 3496
                SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
                return 0;
            }
        } else {
            SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
            return 0;
        }
        break;
    case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
R
Rich Salz 已提交
3497
        s->ext.debug_arg = parg;
3498 3499 3500
        ret = 1;
        break;

3501
    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
R
Rich Salz 已提交
3502
        ret = s->ext.status_type;
3503 3504
        break;

3505
    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
R
Rich Salz 已提交
3506
        s->ext.status_type = larg;
3507 3508 3509 3510
        ret = 1;
        break;

    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
R
Rich Salz 已提交
3511
        *(STACK_OF(X509_EXTENSION) **)parg = s->ext.ocsp.exts;
3512 3513 3514 3515
        ret = 1;
        break;

    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
R
Rich Salz 已提交
3516
        s->ext.ocsp.exts = parg;
3517 3518 3519 3520
        ret = 1;
        break;

    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
R
Rich Salz 已提交
3521
        *(STACK_OF(OCSP_RESPID) **)parg = s->ext.ocsp.ids;
3522 3523 3524 3525
        ret = 1;
        break;

    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
R
Rich Salz 已提交
3526
        s->ext.ocsp.ids = parg;
3527 3528 3529 3530
        ret = 1;
        break;

    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
R
Rich Salz 已提交
3531 3532 3533
        *(unsigned char **)parg = s->ext.ocsp.resp;
        if (s->ext.ocsp.resp_len == 0
                || s->ext.ocsp.resp_len > LONG_MAX)
M
Matt Caswell 已提交
3534
            return -1;
R
Rich Salz 已提交
3535
        return (long)s->ext.ocsp.resp_len;
3536 3537

    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
R
Rich Salz 已提交
3538 3539 3540
        OPENSSL_free(s->ext.ocsp.resp);
        s->ext.ocsp.resp = parg;
        s->ext.ocsp.resp_len = larg;
3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557
        ret = 1;
        break;

    case SSL_CTRL_CHAIN:
        if (larg)
            return ssl_cert_set1_chain(s, NULL, (STACK_OF(X509) *)parg);
        else
            return ssl_cert_set0_chain(s, NULL, (STACK_OF(X509) *)parg);

    case SSL_CTRL_CHAIN_CERT:
        if (larg)
            return ssl_cert_add1_chain_cert(s, NULL, (X509 *)parg);
        else
            return ssl_cert_add0_chain_cert(s, NULL, (X509 *)parg);

    case SSL_CTRL_GET_CHAIN_CERTS:
        *(STACK_OF(X509) **)parg = s->cert->key->chain;
3558
        ret = 1;
3559 3560 3561 3562 3563 3564 3565 3566 3567 3568
        break;

    case SSL_CTRL_SELECT_CURRENT_CERT:
        return ssl_cert_select_current(s->cert, (X509 *)parg);

    case SSL_CTRL_SET_CURRENT_CERT:
        if (larg == SSL_CERT_SET_SERVER) {
            const SSL_CIPHER *cipher;
            if (!s->server)
                return 0;
3569
            cipher = s->s3.tmp.new_cipher;
D
Dr. Stephen Henson 已提交
3570
            if (cipher == NULL)
3571 3572 3573 3574 3575 3576 3577
                return 0;
            /*
             * No certificate for unauthenticated ciphersuites or using SRP
             * authentication
             */
            if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
                return 2;
3578
            if (s->s3.tmp.cert == NULL)
3579
                return 0;
3580
            s->cert->key = s->s3.tmp.cert;
3581 3582 3583
            return 1;
        }
        return ssl_cert_set_current(s->cert, larg);
3584

M
Matt Caswell 已提交
3585
#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
3586
    case SSL_CTRL_GET_GROUPS:
3587
        {
D
Dr. Stephen Henson 已提交
3588
            uint16_t *clist;
3589
            size_t clistlen;
R
Rich Salz 已提交
3590

3591 3592
            if (!s->session)
                return 0;
3593 3594
            clist = s->ext.peer_supportedgroups;
            clistlen = s->ext.peer_supportedgroups_len;
3595 3596 3597
            if (parg) {
                size_t i;
                int *cptr = parg;
3598

3599
                for (i = 0; i < clistlen; i++) {
3600 3601 3602 3603
                    const TLS_GROUP_INFO *cinf = tls1_group_id_lookup(clist[i]);

                    if (cinf != NULL)
                        cptr[i] = cinf->nid;
3604
                    else
D
Dr. Stephen Henson 已提交
3605
                        cptr[i] = TLSEXT_nid_unknown | clist[i];
3606 3607 3608 3609 3610
                }
            }
            return (int)clistlen;
        }

3611
    case SSL_CTRL_SET_GROUPS:
R
Rich Salz 已提交
3612 3613
        return tls1_set_groups(&s->ext.supportedgroups,
                               &s->ext.supportedgroups_len, parg, larg);
3614

3615
    case SSL_CTRL_SET_GROUPS_LIST:
R
Rich Salz 已提交
3616 3617
        return tls1_set_groups_list(&s->ext.supportedgroups,
                                    &s->ext.supportedgroups_len, parg);
3618

3619
    case SSL_CTRL_GET_SHARED_GROUP:
3620 3621
        {
            uint16_t id = tls1_shared_group(s, larg);
3622

3623 3624
            if (larg != -1)
                return tls1_group_id2nid(id);
3625 3626
            return id;
        }
3627 3628 3629
    case SSL_CTRL_GET_NEGOTIATED_GROUP:
        ret = tls1_group_id2nid(s->s3.group_id);
        break;
M
Matt Caswell 已提交
3630
#endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
M
Matt Caswell 已提交
3631

3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646
    case SSL_CTRL_SET_SIGALGS:
        return tls1_set_sigalgs(s->cert, parg, larg, 0);

    case SSL_CTRL_SET_SIGALGS_LIST:
        return tls1_set_sigalgs_list(s->cert, parg, 0);

    case SSL_CTRL_SET_CLIENT_SIGALGS:
        return tls1_set_sigalgs(s->cert, parg, larg, 1);

    case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
        return tls1_set_sigalgs_list(s->cert, parg, 1);

    case SSL_CTRL_GET_CLIENT_CERT_TYPES:
        {
            const unsigned char **pctype = parg;
3647
            if (s->server || !s->s3.tmp.cert_req)
3648 3649
                return 0;
            if (pctype)
3650 3651
                *pctype = s->s3.tmp.ctype;
            return s->s3.tmp.ctype_len;
3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668
        }

    case SSL_CTRL_SET_CLIENT_CERT_TYPES:
        if (!s->server)
            return 0;
        return ssl3_set_req_cert_type(s->cert, parg, larg);

    case SSL_CTRL_BUILD_CERT_CHAIN:
        return ssl_build_cert_chain(s, NULL, larg);

    case SSL_CTRL_SET_VERIFY_CERT_STORE:
        return ssl_cert_set_cert_store(s->cert, parg, 0, larg);

    case SSL_CTRL_SET_CHAIN_CERT_STORE:
        return ssl_cert_set_cert_store(s->cert, parg, 1, larg);

    case SSL_CTRL_GET_PEER_SIGNATURE_NID:
3669
        if (s->s3.tmp.peer_sigalg == NULL)
3670
            return 0;
3671
        *(int *)parg = s->s3.tmp.peer_sigalg->hash;
3672
        return 1;
3673

3674
    case SSL_CTRL_GET_SIGNATURE_NID:
3675
        if (s->s3.tmp.sigalg == NULL)
3676
            return 0;
3677
        *(int *)parg = s->s3.tmp.sigalg->hash;
3678 3679 3680
        return 1;

    case SSL_CTRL_GET_PEER_TMP_KEY:
D
Dr. Stephen Henson 已提交
3681
#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
3682
        if (s->session == NULL || s->s3.peer_tmp == NULL) {
3683
            return 0;
D
Dr. Stephen Henson 已提交
3684
        } else {
3685 3686
            EVP_PKEY_up_ref(s->s3.peer_tmp);
            *(EVP_PKEY **)parg = s->s3.peer_tmp;
D
Dr. Stephen Henson 已提交
3687
            return 1;
3688
        }
D
Dr. Stephen Henson 已提交
3689 3690 3691
#else
        return 0;
#endif
3692 3693 3694

    case SSL_CTRL_GET_TMP_KEY:
#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
3695
        if (s->session == NULL || s->s3.tmp.pkey == NULL) {
3696 3697
            return 0;
        } else {
3698 3699
            EVP_PKEY_up_ref(s->s3.tmp.pkey);
            *(EVP_PKEY **)parg = s->s3.tmp.pkey;
3700 3701 3702 3703 3704 3705
            return 1;
        }
#else
        return 0;
#endif

3706
#ifndef OPENSSL_NO_EC
3707 3708 3709
    case SSL_CTRL_GET_EC_POINT_FORMATS:
        {
            const unsigned char **pformat = parg;
R
Rich Salz 已提交
3710

3711
            if (s->ext.peer_ecpointformats == NULL)
3712
                return 0;
3713 3714
            *pformat = s->ext.peer_ecpointformats;
            return (int)s->ext.peer_ecpointformats_len;
3715
        }
3716
#endif
B
Bodo Moeller 已提交
3717

3718 3719 3720
    default:
        break;
    }
K
KaoruToda 已提交
3721
    return ret;
3722 3723 3724 3725 3726
}

long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
{
    int ret = 0;
3727

3728
    switch (cmd) {
3729
#ifndef OPENSSL_NO_DH
3730 3731 3732 3733 3734
    case SSL_CTRL_SET_TMP_DH_CB:
        {
            s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
        }
        break;
3735
#endif
3736
    case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
R
Rich Salz 已提交
3737
        s->ext.debug_cb = (void (*)(SSL *, int, int,
R
Rich Salz 已提交
3738
                                    const unsigned char *, int, void *))fp;
3739
        break;
3740

3741 3742 3743 3744 3745 3746 3747 3748
    case SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB:
        {
            s->not_resumable_session_cb = (int (*)(SSL *, int))fp;
        }
        break;
    default:
        break;
    }
K
KaoruToda 已提交
3749
    return ret;
3750
}
3751

3752
long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
3753 3754
{
    switch (cmd) {
3755
#ifndef OPENSSL_NO_DH
3756 3757
    case SSL_CTRL_SET_TMP_DH:
        {
3758 3759 3760 3761
            DH *dh = (DH *)parg;
            EVP_PKEY *pkdh = NULL;
            if (dh == NULL) {
                SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_PASSED_NULL_PARAMETER);
3762 3763
                return 0;
            }
3764 3765 3766
            pkdh = ssl_dh_to_pkey(dh);
            if (pkdh == NULL) {
                SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
3767 3768
                return 0;
            }
3769 3770 3771 3772
            if (!ssl_ctx_security(ctx, SSL_SECOP_TMP_DH,
                                  EVP_PKEY_security_bits(pkdh), 0, pkdh)) {
                SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_DH_KEY_TOO_SMALL);
                EVP_PKEY_free(pkdh);
A
Antoine Salon 已提交
3773
                return 0;
3774
            }
3775 3776
            EVP_PKEY_free(ctx->cert->dh_tmp);
            ctx->cert->dh_tmp = pkdh;
3777 3778 3779 3780 3781
            return 1;
        }
    case SSL_CTRL_SET_TMP_DH_CB:
        {
            SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
K
KaoruToda 已提交
3782
            return 0;
3783 3784 3785 3786
        }
    case SSL_CTRL_SET_DH_AUTO:
        ctx->cert->dh_tmp_auto = larg;
        return 1;
3787
#endif
3788
#ifndef OPENSSL_NO_EC
3789 3790
    case SSL_CTRL_SET_TMP_ECDH:
        {
3791 3792
            const EC_GROUP *group = NULL;
            int nid;
3793 3794

            if (parg == NULL) {
3795
                SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_PASSED_NULL_PARAMETER);
3796 3797
                return 0;
            }
3798 3799 3800
            group = EC_KEY_get0_group((const EC_KEY *)parg);
            if (group == NULL) {
                SSLerr(SSL_F_SSL3_CTX_CTRL, EC_R_MISSING_PARAMETERS);
3801 3802
                return 0;
            }
3803 3804 3805
            nid = EC_GROUP_get_curve_name(group);
            if (nid == NID_undef)
                return 0;
R
Rich Salz 已提交
3806 3807
            return tls1_set_groups(&ctx->ext.supportedgroups,
                                   &ctx->ext.supportedgroups_len,
3808
                                   &nid, 1);
3809
        }
3810
#endif                          /* !OPENSSL_NO_EC */
3811
    case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
R
Rich Salz 已提交
3812
        ctx->ext.servername_arg = parg;
3813 3814 3815 3816 3817
        break;
    case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
    case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
        {
            unsigned char *keys = parg;
R
Rich Salz 已提交
3818
            long tick_keylen = (sizeof(ctx->ext.tick_key_name) +
3819 3820
                                sizeof(ctx->ext.secure->tick_hmac_key) +
                                sizeof(ctx->ext.secure->tick_aes_key));
K
Kurt Roeckx 已提交
3821
            if (keys == NULL)
R
Rich Salz 已提交
3822 3823
                return tick_keylen;
            if (larg != tick_keylen) {
3824 3825 3826 3827
                SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
                return 0;
            }
            if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) {
R
Rich Salz 已提交
3828 3829
                memcpy(ctx->ext.tick_key_name, keys,
                       sizeof(ctx->ext.tick_key_name));
3830
                memcpy(ctx->ext.secure->tick_hmac_key,
R
Rich Salz 已提交
3831
                       keys + sizeof(ctx->ext.tick_key_name),
3832 3833
                       sizeof(ctx->ext.secure->tick_hmac_key));
                memcpy(ctx->ext.secure->tick_aes_key,
R
Rich Salz 已提交
3834
                       keys + sizeof(ctx->ext.tick_key_name) +
3835 3836
                       sizeof(ctx->ext.secure->tick_hmac_key),
                       sizeof(ctx->ext.secure->tick_aes_key));
3837
            } else {
R
Rich Salz 已提交
3838 3839 3840
                memcpy(keys, ctx->ext.tick_key_name,
                       sizeof(ctx->ext.tick_key_name));
                memcpy(keys + sizeof(ctx->ext.tick_key_name),
3841 3842
                       ctx->ext.secure->tick_hmac_key,
                       sizeof(ctx->ext.secure->tick_hmac_key));
R
Rich Salz 已提交
3843
                memcpy(keys + sizeof(ctx->ext.tick_key_name) +
3844 3845 3846
                       sizeof(ctx->ext.secure->tick_hmac_key),
                       ctx->ext.secure->tick_aes_key,
                       sizeof(ctx->ext.secure->tick_aes_key));
3847 3848 3849 3850
            }
            return 1;
        }

3851
    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
R
Rich Salz 已提交
3852
        return ctx->ext.status_type;
3853

3854
    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
R
Rich Salz 已提交
3855
        ctx->ext.status_type = larg;
3856 3857
        break;

3858
    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
R
Rich Salz 已提交
3859
        ctx->ext.status_arg = parg;
3860 3861
        return 1;

3862
    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG:
R
Rich Salz 已提交
3863
        *(void**)parg = ctx->ext.status_arg;
3864 3865 3866
        break;

    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB:
R
Rich Salz 已提交
3867
        *(int (**)(SSL*, void*))parg = ctx->ext.status_cb;
3868 3869
        break;

3870
#ifndef OPENSSL_NO_SRP
3871 3872
    case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME:
        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
R
Rich Salz 已提交
3873
        OPENSSL_free(ctx->srp_ctx.login);
3874 3875 3876
        ctx->srp_ctx.login = NULL;
        if (parg == NULL)
            break;
E
Emilia Kasper 已提交
3877
        if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) {
3878 3879 3880
            SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME);
            return 0;
        }
R
Rich Salz 已提交
3881
        if ((ctx->srp_ctx.login = OPENSSL_strdup((char *)parg)) == NULL) {
3882 3883 3884 3885 3886 3887 3888
            SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
            return 0;
        }
        break;
    case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD:
        ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
            srp_password_from_info_cb;
3889 3890
        if (ctx->srp_ctx.info != NULL)
            OPENSSL_free(ctx->srp_ctx.info);
3891
        if ((ctx->srp_ctx.info = OPENSSL_strdup((char *)parg)) == NULL) {
3892 3893 3894
            SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
            return 0;
        }
3895 3896 3897 3898 3899 3900 3901 3902 3903
        break;
    case SSL_CTRL_SET_SRP_ARG:
        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
        ctx->srp_ctx.SRP_cb_arg = parg;
        break;

    case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH:
        ctx->srp_ctx.strength = larg;
        break;
3904
#endif
3905

M
Matt Caswell 已提交
3906
#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
3907
    case SSL_CTRL_SET_GROUPS:
R
Rich Salz 已提交
3908 3909
        return tls1_set_groups(&ctx->ext.supportedgroups,
                               &ctx->ext.supportedgroups_len,
3910 3911
                               parg, larg);

3912
    case SSL_CTRL_SET_GROUPS_LIST:
R
Rich Salz 已提交
3913 3914
        return tls1_set_groups_list(&ctx->ext.supportedgroups,
                                    &ctx->ext.supportedgroups_len,
3915
                                    parg);
M
Matt Caswell 已提交
3916
#endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
M
Matt Caswell 已提交
3917

3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944
    case SSL_CTRL_SET_SIGALGS:
        return tls1_set_sigalgs(ctx->cert, parg, larg, 0);

    case SSL_CTRL_SET_SIGALGS_LIST:
        return tls1_set_sigalgs_list(ctx->cert, parg, 0);

    case SSL_CTRL_SET_CLIENT_SIGALGS:
        return tls1_set_sigalgs(ctx->cert, parg, larg, 1);

    case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
        return tls1_set_sigalgs_list(ctx->cert, parg, 1);

    case SSL_CTRL_SET_CLIENT_CERT_TYPES:
        return ssl3_set_req_cert_type(ctx->cert, parg, larg);

    case SSL_CTRL_BUILD_CERT_CHAIN:
        return ssl_build_cert_chain(NULL, ctx, larg);

    case SSL_CTRL_SET_VERIFY_CERT_STORE:
        return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);

    case SSL_CTRL_SET_CHAIN_CERT_STORE:
        return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);

        /* A Thawte special :-) */
    case SSL_CTRL_EXTRA_CHAIN_CERT:
        if (ctx->extra_certs == NULL) {
3945 3946 3947 3948 3949 3950 3951 3952
            if ((ctx->extra_certs = sk_X509_new_null()) == NULL) {
                SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
                return 0;
            }
        }
        if (!sk_X509_push(ctx->extra_certs, (X509 *)parg)) {
            SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
            return 0;
3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963
        }
        break;

    case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
        if (ctx->extra_certs == NULL && larg == 0)
            *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
        else
            *(STACK_OF(X509) **)parg = ctx->extra_certs;
        break;

    case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
R
Rich Salz 已提交
3964 3965
        sk_X509_pop_free(ctx->extra_certs, X509_free);
        ctx->extra_certs = NULL;
3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990
        break;

    case SSL_CTRL_CHAIN:
        if (larg)
            return ssl_cert_set1_chain(NULL, ctx, (STACK_OF(X509) *)parg);
        else
            return ssl_cert_set0_chain(NULL, ctx, (STACK_OF(X509) *)parg);

    case SSL_CTRL_CHAIN_CERT:
        if (larg)
            return ssl_cert_add1_chain_cert(NULL, ctx, (X509 *)parg);
        else
            return ssl_cert_add0_chain_cert(NULL, ctx, (X509 *)parg);

    case SSL_CTRL_GET_CHAIN_CERTS:
        *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
        break;

    case SSL_CTRL_SELECT_CURRENT_CERT:
        return ssl_cert_select_current(ctx->cert, (X509 *)parg);

    case SSL_CTRL_SET_CURRENT_CERT:
        return ssl_cert_set_current(ctx->cert, larg);

    default:
K
KaoruToda 已提交
3991
        return 0;
3992
    }
3993
    return 1;
3994 3995 3996 3997 3998
}

long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
{
    switch (cmd) {
3999
#ifndef OPENSSL_NO_DH
4000 4001
    case SSL_CTRL_SET_TMP_DH_CB:
        {
M
Matt Caswell 已提交
4002
            ctx->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
4003 4004
        }
        break;
4005
#endif
4006
    case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
R
Rich Salz 已提交
4007
        ctx->ext.servername_cb = (int (*)(SSL *, int *, void *))fp;
4008 4009 4010
        break;

    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
R
Rich Salz 已提交
4011
        ctx->ext.status_cb = (int (*)(SSL *, void *))fp;
4012 4013
        break;

P
Pauli 已提交
4014
# ifndef OPENSSL_NO_DEPRECATED_3_0
4015
    case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
R
Rich Salz 已提交
4016
        ctx->ext.ticket_key_cb = (int (*)(SSL *, unsigned char *,
4017 4018 4019 4020
                                             unsigned char *,
                                             EVP_CIPHER_CTX *,
                                             HMAC_CTX *, int))fp;
        break;
P
Pauli 已提交
4021
#endif
4022

4023
#ifndef OPENSSL_NO_SRP
4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037
    case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB:
        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
        ctx->srp_ctx.SRP_verify_param_callback = (int (*)(SSL *, void *))fp;
        break;
    case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB:
        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
        ctx->srp_ctx.TLS_ext_srp_username_callback =
            (int (*)(SSL *, int *, void *))fp;
        break;
    case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB:
        ctx->srp_ctx.srp_Mask |= SSL_kSRP;
        ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
            (char *(*)(SSL *, void *))fp;
        break;
4038
#endif
4039 4040 4041 4042 4043 4044
    case SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB:
        {
            ctx->not_resumable_session_cb = (int (*)(SSL *, int))fp;
        }
        break;
    default:
K
KaoruToda 已提交
4045
        return 0;
4046
    }
4047
    return 1;
4048
}
4049

P
Pauli 已提交
4050 4051 4052 4053 4054 4055 4056 4057
int SSL_CTX_set_tlsext_ticket_key_evp_cb
    (SSL_CTX *ctx, int (*fp)(SSL *, unsigned char *, unsigned char *,
                             EVP_CIPHER_CTX *, EVP_MAC_CTX *, int))
{
    ctx->ext.ticket_key_evp_cb = fp;
    return 1;
}

4058 4059 4060
const SSL_CIPHER *ssl3_get_cipher_by_id(uint32_t id)
{
    SSL_CIPHER c;
4061
    const SSL_CIPHER *cp;
4062 4063

    c.id = id;
4064 4065 4066
    cp = OBJ_bsearch_ssl_cipher_id(&c, tls13_ciphers, TLS13_NUM_CIPHERS);
    if (cp != NULL)
        return cp;
4067 4068 4069 4070
    cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
    if (cp != NULL)
        return cp;
    return OBJ_bsearch_ssl_cipher_id(&c, ssl3_scsvs, SSL3_NUM_SCSVS);
4071 4072
}

4073 4074
const SSL_CIPHER *ssl3_get_cipher_by_std_name(const char *stdname)
{
4075 4076 4077
    SSL_CIPHER *c = NULL, *tbl;
    SSL_CIPHER *alltabs[] = {tls13_ciphers, ssl3_ciphers};
    size_t i, j, tblsize[] = {TLS13_NUM_CIPHERS, SSL3_NUM_CIPHERS};
4078

4079
    /* this is not efficient, necessary to optimize this? */
4080 4081 4082 4083 4084 4085 4086 4087
    for (j = 0; j < OSSL_NELEM(alltabs); j++) {
        for (i = 0, tbl = alltabs[j]; i < tblsize[j]; i++, tbl++) {
            if (tbl->stdname == NULL)
                continue;
            if (strcmp(stdname, tbl->stdname) == 0) {
                c = tbl;
                break;
            }
4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101
        }
    }
    if (c == NULL) {
        tbl = ssl3_scsvs;
        for (i = 0; i < SSL3_NUM_SCSVS; i++, tbl++) {
            if (strcmp(stdname, tbl->stdname) == 0) {
                c = tbl;
                break;
            }
        }
    }
    return c;
}

4102 4103 4104 4105
/*
 * This function needs to check if the ciphers required are actually
 * available
 */
4106
const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
4107
{
4108
    return ssl3_get_cipher_by_id(SSL3_CK_CIPHERSUITE_FLAG
4109 4110
                                 | ((uint32_t)p[0] << 8L)
                                 | (uint32_t)p[1]);
4111
}
4112

M
Matt Caswell 已提交
4113
int ssl3_put_cipher_by_char(const SSL_CIPHER *c, WPACKET *pkt, size_t *len)
4114
{
4115
    if ((c->id & 0xff000000) != SSL3_CK_CIPHERSUITE_FLAG) {
4116 4117 4118 4119
        *len = 0;
        return 1;
    }

4120
    if (!WPACKET_put_bytes_u16(pkt, c->id & 0xffff))
4121 4122 4123 4124 4125 4126
        return 0;

    *len = 2;
    return 1;
}

4127 4128 4129 4130 4131 4132 4133 4134
/*
 * ssl3_choose_cipher - choose a cipher from those offered by the client
 * @s: SSL connection
 * @clnt: ciphers offered by the client
 * @srvr: ciphers enabled on the server?
 *
 * Returns the selected cipher or NULL when no common ciphers.
 */
4135
const SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
E
Emilia Kasper 已提交
4136
                                     STACK_OF(SSL_CIPHER) *srvr)
4137
{
4138
    const SSL_CIPHER *c, *ret = NULL;
4139
    STACK_OF(SSL_CIPHER) *prio, *allow;
4140
    int i, ii, ok, prefer_sha256 = 0;
4141
    unsigned long alg_k = 0, alg_a = 0, mask_k = 0, mask_a = 0;
4142 4143 4144
#ifndef OPENSSL_NO_CHACHA
    STACK_OF(SSL_CIPHER) *prio_chacha = NULL;
#endif
4145

4146
    /* Let's see which ciphers we can support */
4147

4148 4149 4150 4151 4152 4153
    /*
     * Do not set the compare functions, because this may lead to a
     * reordering by "id". We want to keep the original ordering. We may pay
     * a price in performance during sk_SSL_CIPHER_find(), but would have to
     * pay with the price of sk_SSL_CIPHER_dup().
     */
4154

4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168
    OSSL_TRACE_BEGIN(TLS_CIPHER) {
        BIO_printf(trc_out, "Server has %d from %p:\n",
                   sk_SSL_CIPHER_num(srvr), (void *)srvr);
        for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) {
            c = sk_SSL_CIPHER_value(srvr, i);
            BIO_printf(trc_out, "%p:%s\n", (void *)c, c->name);
        }
        BIO_printf(trc_out, "Client sent %d from %p:\n",
                   sk_SSL_CIPHER_num(clnt), (void *)clnt);
        for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) {
            c = sk_SSL_CIPHER_value(clnt, i);
            BIO_printf(trc_out, "%p:%s\n", (void *)c, c->name);
        }
    } OSSL_TRACE_END(TLS_CIPHER);
B
Ben Laurie 已提交
4169

4170 4171 4172 4173 4174
    /* SUITE-B takes precedence over server preference and ChaCha priortiy */
    if (tls1_suiteb(s)) {
        prio = srvr;
        allow = clnt;
    } else if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
4175 4176
        prio = srvr;
        allow = clnt;
4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194
#ifndef OPENSSL_NO_CHACHA
        /* If ChaCha20 is at the top of the client preference list,
           and there are ChaCha20 ciphers in the server list, then
           temporarily prioritize all ChaCha20 ciphers in the servers list. */
        if (s->options & SSL_OP_PRIORITIZE_CHACHA && sk_SSL_CIPHER_num(clnt) > 0) {
            c = sk_SSL_CIPHER_value(clnt, 0);
            if (c->algorithm_enc == SSL_CHACHA20POLY1305) {
                /* ChaCha20 is client preferred, check server... */
                int num = sk_SSL_CIPHER_num(srvr);
                int found = 0;
                for (i = 0; i < num; i++) {
                    c = sk_SSL_CIPHER_value(srvr, i);
                    if (c->algorithm_enc == SSL_CHACHA20POLY1305) {
                        found = 1;
                        break;
                    }
                }
                if (found) {
T
Todd Short 已提交
4195
                    prio_chacha = sk_SSL_CIPHER_new_reserve(NULL, num);
4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216
                    /* if reserve fails, then there's likely a memory issue */
                    if (prio_chacha != NULL) {
                        /* Put all ChaCha20 at the top, starting with the one we just found */
                        sk_SSL_CIPHER_push(prio_chacha, c);
                        for (i++; i < num; i++) {
                            c = sk_SSL_CIPHER_value(srvr, i);
                            if (c->algorithm_enc == SSL_CHACHA20POLY1305)
                                sk_SSL_CIPHER_push(prio_chacha, c);
                        }
                        /* Pull in the rest */
                        for (i = 0; i < num; i++) {
                            c = sk_SSL_CIPHER_value(srvr, i);
                            if (c->algorithm_enc != SSL_CHACHA20POLY1305)
                                sk_SSL_CIPHER_push(prio_chacha, c);
                        }
                        prio = prio_chacha;
                    }
                }
            }
        }
# endif
4217 4218 4219 4220 4221
    } else {
        prio = clnt;
        allow = srvr;
    }

4222
    if (SSL_IS_TLS13(s)) {
M
Matt Caswell 已提交
4223
#ifndef OPENSSL_NO_PSK
4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239
        int j;

        /*
         * If we allow "old" style PSK callbacks, and we have no certificate (so
         * we're not going to succeed without a PSK anyway), and we're in
         * TLSv1.3 then the default hash for a PSK is SHA-256 (as per the
         * TLSv1.3 spec). Therefore we should prioritise ciphersuites using
         * that.
         */
        if (s->psk_server_callback != NULL) {
            for (j = 0; j < SSL_PKEY_NUM && !ssl_has_cert(s, j); j++);
            if (j == SSL_PKEY_NUM) {
                /* There are no certificates */
                prefer_sha256 = 1;
            }
        }
M
Matt Caswell 已提交
4240
#endif
4241
    } else {
4242 4243 4244
        tls1_set_cert_validity(s);
        ssl_set_masks(s);
    }
4245 4246 4247 4248

    for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
        c = sk_SSL_CIPHER_value(prio, i);

4249 4250
        /* Skip ciphers not supported by the protocol version */
        if (!SSL_IS_DTLS(s) &&
E
Emilia Kasper 已提交
4251
            ((s->version < c->min_tls) || (s->version > c->max_tls)))
4252
            continue;
4253
        if (SSL_IS_DTLS(s) &&
E
Emilia Kasper 已提交
4254 4255
            (DTLS_VERSION_LT(s->version, c->min_dtls) ||
             DTLS_VERSION_GT(s->version, c->max_dtls)))
4256
            continue;
4257

4258 4259 4260 4261 4262
        /*
         * Since TLS 1.3 ciphersuites can be used with any auth or
         * key exchange scheme skip tests.
         */
        if (!SSL_IS_TLS13(s)) {
4263 4264
            mask_k = s->s3.tmp.mask_k;
            mask_a = s->s3.tmp.mask_a;
B
Ben Laurie 已提交
4265
#ifndef OPENSSL_NO_SRP
4266 4267 4268 4269
            if (s->srp_ctx.srp_Mask & SSL_kSRP) {
                mask_k |= SSL_kSRP;
                mask_a |= SSL_aSRP;
            }
B
Ben Laurie 已提交
4270
#endif
4271

4272 4273
            alg_k = c->algorithm_mkey;
            alg_a = c->algorithm_auth;
4274

4275
#ifndef OPENSSL_NO_PSK
4276 4277 4278
            /* with PSK there must be server callback set */
            if ((alg_k & SSL_PSK) && s->psk_server_callback == NULL)
                continue;
4279 4280
#endif                          /* OPENSSL_NO_PSK */

4281
            ok = (alg_k & mask_k) && (alg_a & mask_a);
4282 4283 4284
            OSSL_TRACE7(TLS_CIPHER,
                        "%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",
                        ok, alg_k, alg_a, mask_k, mask_a, (void *)c, c->name);
4285

E
Emilia Kasper 已提交
4286
#ifndef OPENSSL_NO_EC
4287 4288 4289 4290 4291 4292
            /*
             * if we are considering an ECC cipher suite that uses an ephemeral
             * EC key check it
             */
            if (alg_k & SSL_kECDHE)
                ok = ok && tls1_check_ec_tmp_key(s, c->id);
E
Emilia Kasper 已提交
4293
#endif                          /* OPENSSL_NO_EC */
4294

4295 4296 4297
            if (!ok)
                continue;
        }
4298 4299 4300 4301
        ii = sk_SSL_CIPHER_find(allow, c);
        if (ii >= 0) {
            /* Check security callback permits this cipher */
            if (!ssl_security(s, SSL_SECOP_CIPHER_SHARED,
4302
                              c->strength_bits, 0, (void *)c))
4303
                continue;
4304
#if !defined(OPENSSL_NO_EC)
4305
            if ((alg_k & SSL_kECDHE) && (alg_a & SSL_aECDSA)
4306
                && s->s3.is_probably_safari) {
4307 4308 4309 4310
                if (!ret)
                    ret = sk_SSL_CIPHER_value(allow, ii);
                continue;
            }
4311
#endif
4312 4313 4314
            if (prefer_sha256) {
                const SSL_CIPHER *tmp = sk_SSL_CIPHER_value(allow, ii);

4315 4316 4317 4318 4319 4320
                /*
                 * TODO: When there are no more legacy digests we can just use
                 * OSSL_DIGEST_NAME_SHA2_256 instead of calling OBJ_nid2sn
                 */
                if (EVP_MD_is_a(ssl_md(s->ctx, tmp->algorithm2),
                                       OBJ_nid2sn(NID_sha256))) {
4321 4322 4323 4324 4325 4326 4327
                    ret = tmp;
                    break;
                }
                if (ret == NULL)
                    ret = tmp;
                continue;
            }
4328 4329 4330 4331
            ret = sk_SSL_CIPHER_value(allow, ii);
            break;
        }
    }
4332 4333 4334
#ifndef OPENSSL_NO_CHACHA
    sk_SSL_CIPHER_free(prio_chacha);
#endif
K
KaoruToda 已提交
4335
    return ret;
4336
}
4337

4338
int ssl3_get_req_cert_type(SSL *s, WPACKET *pkt)
4339
{
4340
    uint32_t alg_k, alg_a = 0;
4341 4342

    /* If we have custom certificate types set, use them */
4343 4344
    if (s->cert->ctype)
        return WPACKET_memcpy(pkt, s->cert->ctype, s->cert->ctype_len);
4345 4346 4347
    /* Get mask of algorithms disabled by signature list */
    ssl_set_sig_mask(&alg_a, s, SSL_SECOP_SIGALG_MASK);

4348
    alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
4349

D
Dr. Stephen Henson 已提交
4350
#ifndef OPENSSL_NO_GOST
4351 4352 4353 4354
    if (s->version >= TLS1_VERSION && (alg_k & SSL_kGOST))
            return WPACKET_put_bytes_u8(pkt, TLS_CT_GOST01_SIGN)
                    && WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_SIGN)
                    && WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_512_SIGN);
D
Dr. Stephen Henson 已提交
4355 4356
#endif

D
Dr. Stephen Henson 已提交
4357
    if ((s->version == SSL3_VERSION) && (alg_k & SSL_kDHE)) {
4358
#ifndef OPENSSL_NO_DH
4359
# ifndef OPENSSL_NO_RSA
4360 4361
        if (!WPACKET_put_bytes_u8(pkt, SSL3_CT_RSA_EPHEMERAL_DH))
            return 0;
4362 4363
# endif
# ifndef OPENSSL_NO_DSA
4364 4365
        if (!WPACKET_put_bytes_u8(pkt, SSL3_CT_DSS_EPHEMERAL_DH))
            return 0;
4366 4367
# endif
#endif                          /* !OPENSSL_NO_DH */
B
Ben Laurie 已提交
4368
    }
4369
#ifndef OPENSSL_NO_RSA
4370 4371
    if (!(alg_a & SSL_aRSA) && !WPACKET_put_bytes_u8(pkt, SSL3_CT_RSA_SIGN))
        return 0;
4372
#endif
4373
#ifndef OPENSSL_NO_DSA
4374 4375
    if (!(alg_a & SSL_aDSS) && !WPACKET_put_bytes_u8(pkt, SSL3_CT_DSS_SIGN))
        return 0;
4376
#endif
4377
#ifndef OPENSSL_NO_EC
4378
    /*
D
Dr. Stephen Henson 已提交
4379
     * ECDSA certs can be used with RSA cipher suites too so we don't
4380 4381
     * need to check for SSL_kECDH or SSL_kECDHE
     */
4382 4383 4384 4385
    if (s->version >= TLS1_VERSION
            && !(alg_a & SSL_aECDSA)
            && !WPACKET_put_bytes_u8(pkt, TLS_CT_ECDSA_SIGN))
        return 0;
4386
#endif
4387
    return 1;
4388
}
4389

4390
static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
4391
{
4392 4393 4394 4395
    OPENSSL_free(c->ctype);
    c->ctype = NULL;
    c->ctype_len = 0;
    if (p == NULL || len == 0)
4396 4397 4398
        return 1;
    if (len > 0xff)
        return 0;
4399 4400
    c->ctype = OPENSSL_memdup(p, len);
    if (c->ctype == NULL)
4401
        return 0;
4402
    c->ctype_len = len;
4403 4404
    return 1;
}
4405

U
Ulf Möller 已提交
4406
int ssl3_shutdown(SSL *s)
4407 4408 4409 4410 4411 4412 4413
{
    int ret;

    /*
     * Don't do anything much if we have not done the handshake or we don't
     * want to send messages :-)
     */
M
Matt Caswell 已提交
4414
    if (s->quiet_shutdown || SSL_in_before(s)) {
4415
        s->shutdown = (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
4416
        return 1;
4417 4418 4419 4420 4421 4422 4423
    }

    if (!(s->shutdown & SSL_SENT_SHUTDOWN)) {
        s->shutdown |= SSL_SENT_SHUTDOWN;
        ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
        /*
         * our shutdown alert has been sent now, and if it still needs to be
4424
         * written, s->s3.alert_dispatch will be true
4425
         */
4426
        if (s->s3.alert_dispatch)
K
KaoruToda 已提交
4427
            return -1;        /* return WANT_WRITE */
4428
    } else if (s->s3.alert_dispatch) {
4429 4430 4431 4432 4433
        /* resend it if not sent */
        ret = s->method->ssl_dispatch_alert(s);
        if (ret == -1) {
            /*
             * we only get to return -1 here the 2nd/Nth invocation, we must
F
FdaSilvaYY 已提交
4434
             * have already signalled return 0 upon a previous invocation,
4435 4436
             * return WANT_WRITE
             */
K
KaoruToda 已提交
4437
            return ret;
4438 4439
        }
    } else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
4440
        size_t readbytes;
4441 4442 4443
        /*
         * If we are waiting for a close from our peer, we are closed
         */
4444
        s->method->ssl_read_bytes(s, 0, NULL, NULL, 0, 0, &readbytes);
4445
        if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
4446
            return -1;        /* return WANT_READ */
4447 4448 4449 4450
        }
    }

    if ((s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN)) &&
4451
        !s->s3.alert_dispatch)
4452
        return 1;
4453
    else
K
KaoruToda 已提交
4454
        return 0;
4455
}
4456

M
Matt Caswell 已提交
4457
int ssl3_write(SSL *s, const void *buf, size_t len, size_t *written)
4458 4459
{
    clear_sys_error();
4460
    if (s->s3.renegotiate)
4461
        ssl3_renegotiate_check(s, 0);
4462

M
Matt Caswell 已提交
4463 4464
    return s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
                                      written);
4465
}
4466

4467
static int ssl3_read_internal(SSL *s, void *buf, size_t len, int peek,
4468
                              size_t *readbytes)
4469 4470 4471 4472
{
    int ret;

    clear_sys_error();
4473
    if (s->s3.renegotiate)
4474
        ssl3_renegotiate_check(s, 0);
4475
    s->s3.in_read_app_data = 1;
4476
    ret =
4477
        s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, NULL, buf, len,
4478
                                  peek, readbytes);
4479
    if ((ret == -1) && (s->s3.in_read_app_data == 2)) {
4480 4481 4482 4483 4484 4485 4486
        /*
         * ssl3_read_bytes decided to call s->handshake_func, which called
         * ssl3_read_bytes to read handshake data. However, ssl3_read_bytes
         * actually found application data and thinks that application data
         * makes sense here; so disable handshake processing and try to read
         * application data again.
         */
M
Matt Caswell 已提交
4487
        ossl_statem_set_in_handshake(s, 1);
4488
        ret =
4489
            s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, NULL, buf,
4490
                                      len, peek, readbytes);
M
Matt Caswell 已提交
4491
        ossl_statem_set_in_handshake(s, 0);
4492
    } else
4493
        s->s3.in_read_app_data = 0;
4494

4495
    return ret;
4496
}
4497

4498
int ssl3_read(SSL *s, void *buf, size_t len, size_t *readbytes)
4499
{
4500
    return ssl3_read_internal(s, buf, len, 0, readbytes);
4501
}
4502

4503
int ssl3_peek(SSL *s, void *buf, size_t len, size_t *readbytes)
4504
{
4505
    return ssl3_read_internal(s, buf, len, 1, readbytes);
4506
}
4507

U
Ulf Möller 已提交
4508
int ssl3_renegotiate(SSL *s)
4509 4510
{
    if (s->handshake_func == NULL)
4511
        return 1;
4512

4513
    s->s3.renegotiate = 1;
4514
    return 1;
4515
}
4516

4517 4518 4519 4520 4521 4522 4523 4524 4525
/*
 * Check if we are waiting to do a renegotiation and if so whether now is a
 * good time to do it. If |initok| is true then we are being called from inside
 * the state machine so ignore the result of SSL_in_init(s). Otherwise we
 * should not do a renegotiation if SSL_in_init(s) is true. Returns 1 if we
 * should do a renegotiation now and sets up the state machine for it. Otherwise
 * returns 0.
 */
int ssl3_renegotiate_check(SSL *s, int initok)
4526 4527 4528
{
    int ret = 0;

4529
    if (s->s3.renegotiate) {
4530 4531
        if (!RECORD_LAYER_read_pending(&s->rlayer)
            && !RECORD_LAYER_write_pending(&s->rlayer)
4532
            && (initok || !SSL_in_init(s))) {
4533 4534
            /*
             * if we are the server, and we have sent a 'RENEGOTIATE'
M
Matt Caswell 已提交
4535 4536
             * message, we need to set the state machine into the renegotiate
             * state.
4537
             */
M
Matt Caswell 已提交
4538
            ossl_statem_set_renegotiate(s);
4539 4540 4541
            s->s3.renegotiate = 0;
            s->s3.num_renegotiations++;
            s->s3.total_renegotiations++;
4542 4543 4544
            ret = 1;
        }
    }
4545
    return ret;
4546 4547
}

4548
/*
4549 4550
 * If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF and
 * handshake macs if required.
D
Dr. Stephen Henson 已提交
4551 4552
 *
 * If PSK and using SHA384 for TLS < 1.2 switch to default.
4553 4554
 */
long ssl_get_algorithm2(SSL *s)
4555
{
4556
    long alg2;
4557
    if (s->s3.tmp.new_cipher == NULL)
4558
        return -1;
4559
    alg2 = s->s3.tmp.new_cipher->algorithm2;
D
Dr. Stephen Henson 已提交
4560 4561 4562
    if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF) {
        if (alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF))
            return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
4563
    } else if (s->s3.tmp.new_cipher->algorithm_mkey & SSL_PSK) {
D
Dr. Stephen Henson 已提交
4564 4565 4566
        if (alg2 == (SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384))
            return SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF;
    }
4567 4568
    return alg2;
}
4569 4570 4571 4572 4573

/*
 * Fill a ClientRandom or ServerRandom field of length len. Returns <= 0 on
 * failure, 1 on success.
 */
4574 4575
int ssl_fill_hello_random(SSL *s, int server, unsigned char *result, size_t len,
                          DOWNGRADE dgrd)
4576
{
4577
    int send_time = 0, ret;
4578 4579 4580 4581 4582 4583 4584 4585 4586 4587

    if (len < 4)
        return 0;
    if (server)
        send_time = (s->mode & SSL_MODE_SEND_SERVERHELLO_TIME) != 0;
    else
        send_time = (s->mode & SSL_MODE_SEND_CLIENTHELLO_TIME) != 0;
    if (send_time) {
        unsigned long Time = (unsigned long)time(NULL);
        unsigned char *p = result;
R
Rich Salz 已提交
4588

4589
        l2n(Time, p);
4590
        ret = RAND_bytes_ex(s->ctx->libctx, p, len - 4);
4591
    } else {
4592
        ret = RAND_bytes_ex(s->ctx->libctx, result, len);
4593
    }
4594

4595
    if (ret > 0) {
4596 4597 4598
        if (!ossl_assert(sizeof(tls11downgrade) < len)
                || !ossl_assert(sizeof(tls12downgrade) < len))
             return 0;
4599 4600 4601 4602 4603 4604 4605
        if (dgrd == DOWNGRADE_TO_1_2)
            memcpy(result + len - sizeof(tls12downgrade), tls12downgrade,
                   sizeof(tls12downgrade));
        else if (dgrd == DOWNGRADE_TO_1_1)
            memcpy(result + len - sizeof(tls11downgrade), tls11downgrade,
                   sizeof(tls11downgrade));
    }
4606

4607
    return ret;
4608
}
4609 4610 4611 4612

int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
                               int free_pms)
{
4613
    unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
4614 4615
    int ret = 0;

4616
    if (alg_k & SSL_PSK) {
4617
#ifndef OPENSSL_NO_PSK
4618
        unsigned char *pskpms, *t;
4619
        size_t psklen = s->s3.tmp.psklen;
4620 4621 4622 4623 4624 4625 4626 4627 4628 4629
        size_t pskpmslen;

        /* create PSK premaster_secret */

        /* For plain PSK "other_secret" is psklen zeroes */
        if (alg_k & SSL_kPSK)
            pmslen = psklen;

        pskpmslen = 4 + pmslen + psklen;
        pskpms = OPENSSL_malloc(pskpmslen);
4630
        if (pskpms == NULL)
4631
            goto err;
4632 4633 4634 4635 4636 4637 4638 4639
        t = pskpms;
        s2n(pmslen, t);
        if (alg_k & SSL_kPSK)
            memset(t, 0, pmslen);
        else
            memcpy(t, pms, pmslen);
        t += pmslen;
        s2n(psklen, t);
4640
        memcpy(t, s->s3.tmp.psk, psklen);
4641

4642 4643
        OPENSSL_clear_free(s->s3.tmp.psk, psklen);
        s->s3.tmp.psk = NULL;
4644 4645
        if (!s->method->ssl3_enc->generate_master_secret(s,
                    s->session->master_key,pskpms, pskpmslen,
4646
                    &s->session->master_key_length)) {
4647
            OPENSSL_clear_free(pskpms, pskpmslen);
4648
            /* SSLfatal() already called */
4649
            goto err;
4650
        }
4651
        OPENSSL_clear_free(pskpms, pskpmslen);
4652 4653 4654
#else
        /* Should never happen */
        goto err;
4655
#endif
4656
    } else {
4657 4658
        if (!s->method->ssl3_enc->generate_master_secret(s,
                s->session->master_key, pms, pmslen,
4659 4660
                &s->session->master_key_length)) {
            /* SSLfatal() already called */
4661
            goto err;
4662
        }
4663 4664
    }

4665
    ret = 1;
4666
 err:
4667 4668 4669 4670 4671 4672
    if (pms) {
        if (free_pms)
            OPENSSL_clear_free(pms, pmslen);
        else
            OPENSSL_cleanse(pms, pmslen);
    }
4673
    if (s->server == 0)
4674
        s->s3.tmp.pms = NULL;
4675
    return ret;
4676
}
4677

D
Dr. Stephen Henson 已提交
4678
/* Generate a private key from parameters */
4679
EVP_PKEY *ssl_generate_pkey(SSL *s, EVP_PKEY *pm)
4680 4681 4682
{
    EVP_PKEY_CTX *pctx = NULL;
    EVP_PKEY *pkey = NULL;
D
Dr. Stephen Henson 已提交
4683 4684 4685

    if (pm == NULL)
        return NULL;
4686
    pctx = EVP_PKEY_CTX_new_from_pkey(s->ctx->libctx, pm, s->ctx->propq);
D
Dr. Stephen Henson 已提交
4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699
    if (pctx == NULL)
        goto err;
    if (EVP_PKEY_keygen_init(pctx) <= 0)
        goto err;
    if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
        EVP_PKEY_free(pkey);
        pkey = NULL;
    }

    err:
    EVP_PKEY_CTX_free(pctx);
    return pkey;
}
R
raja-ashok 已提交
4700

4701
/* Generate a private key from a group ID */
M
Matt Caswell 已提交
4702
#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
4703
EVP_PKEY *ssl_generate_pkey_group(SSL *s, uint16_t id)
D
Dr. Stephen Henson 已提交
4704
{
R
raja-ashok 已提交
4705
    const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
D
Dr. Stephen Henson 已提交
4706 4707
    EVP_PKEY_CTX *pctx = NULL;
    EVP_PKEY *pkey = NULL;
4708
    uint16_t gtype;
R
raja-ashok 已提交
4709 4710 4711
# ifndef OPENSSL_NO_DH
    DH *dh = NULL;
# endif
D
Dr. Stephen Henson 已提交
4712

4713 4714 4715
    if (ginf == NULL) {
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
                 ERR_R_INTERNAL_ERROR);
D
Dr. Stephen Henson 已提交
4716
        goto err;
4717
    }
R
raja-ashok 已提交
4718
    gtype = ginf->flags & TLS_GROUP_TYPE;
4719 4720 4721 4722 4723
    /*
     * TODO(3.0): Convert these EVP_PKEY_CTX_new_id calls to ones that take
     * s->ctx->libctx and s->ctx->propq when keygen has been updated to be
     * provider aware.
     */
R
raja-ashok 已提交
4724 4725 4726 4727
# ifndef OPENSSL_NO_DH
    if (gtype == TLS_GROUP_FFDHE)
        pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DH, NULL);
#  ifndef OPENSSL_NO_EC
4728
    else
R
raja-ashok 已提交
4729 4730 4731 4732 4733 4734 4735 4736 4737 4738
#  endif
# endif
# ifndef OPENSSL_NO_EC
    {
        if (gtype == TLS_GROUP_CURVE_CUSTOM)
            pctx = EVP_PKEY_CTX_new_id(ginf->nid, NULL);
        else
            pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
    }
# endif
4739 4740 4741
    if (pctx == NULL) {
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
                 ERR_R_MALLOC_FAILURE);
4742
        goto err;
4743 4744 4745 4746
    }
    if (EVP_PKEY_keygen_init(pctx) <= 0) {
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
                 ERR_R_EVP_LIB);
4747
        goto err;
4748
    }
R
raja-ashok 已提交
4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780
# ifndef OPENSSL_NO_DH
    if (gtype == TLS_GROUP_FFDHE) {
        if ((pkey = EVP_PKEY_new()) == NULL
                || (dh = DH_new_by_nid(ginf->nid)) == NULL
                || !EVP_PKEY_assign(pkey, EVP_PKEY_DH, dh)) {
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
                    ERR_R_EVP_LIB);
            DH_free(dh);
            EVP_PKEY_free(pkey);
            pkey = NULL;
            goto err;
        }
        if (EVP_PKEY_CTX_set_dh_nid(pctx, ginf->nid) <= 0) {
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
                    ERR_R_EVP_LIB);
            EVP_PKEY_free(pkey);
            pkey = NULL;
            goto err;
        }
    }
#  ifndef OPENSSL_NO_EC
    else
#  endif
# endif
# ifndef OPENSSL_NO_EC
    {
        if (gtype != TLS_GROUP_CURVE_CUSTOM
                && EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, ginf->nid) <= 0) {
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
                     ERR_R_EVP_LIB);
            goto err;
        }
4781
    }
R
raja-ashok 已提交
4782
# endif
4783
    if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
4784 4785
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
                 ERR_R_EVP_LIB);
4786 4787 4788 4789
        EVP_PKEY_free(pkey);
        pkey = NULL;
    }

E
Emilia Kasper 已提交
4790
 err:
4791 4792 4793
    EVP_PKEY_CTX_free(pctx);
    return pkey;
}
M
Matt Caswell 已提交
4794
#endif
4795 4796 4797 4798 4799 4800 4801 4802 4803

/*
 * Generate parameters from a group ID
 */
EVP_PKEY *ssl_generate_param_group(uint16_t id)
{
    EVP_PKEY_CTX *pctx = NULL;
    EVP_PKEY *pkey = NULL;
    const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
R
raja-ashok 已提交
4804
    int pkey_ctx_id;
4805 4806 4807 4808

    if (ginf == NULL)
        goto err;

R
raja-ashok 已提交
4809
    if ((ginf->flags & TLS_GROUP_TYPE) == TLS_GROUP_CURVE_CUSTOM) {
4810 4811 4812 4813 4814 4815 4816
        pkey = EVP_PKEY_new();
        if (pkey != NULL && EVP_PKEY_set_type(pkey, ginf->nid))
            return pkey;
        EVP_PKEY_free(pkey);
        return NULL;
    }

4817 4818 4819 4820 4821
    /*
     * TODO(3.0): Convert this EVP_PKEY_CTX_new_id call to one that takes
     * s->ctx->libctx and s->ctx->propq when paramgen has been updated to be
     * provider aware.
     */
R
raja-ashok 已提交
4822 4823 4824
    pkey_ctx_id = (ginf->flags & TLS_GROUP_FFDHE)
                        ? EVP_PKEY_DH : EVP_PKEY_EC;
    pctx = EVP_PKEY_CTX_new_id(pkey_ctx_id, NULL);
4825 4826 4827 4828
    if (pctx == NULL)
        goto err;
    if (EVP_PKEY_paramgen_init(pctx) <= 0)
        goto err;
M
Matt Caswell 已提交
4829
# ifndef OPENSSL_NO_DH
R
raja-ashok 已提交
4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843
    if (ginf->flags & TLS_GROUP_FFDHE) {
        if (EVP_PKEY_CTX_set_dh_nid(pctx, ginf->nid) <= 0)
            goto err;
    }
#  ifndef OPENSSL_NO_EC
    else
#  endif
# endif
# ifndef OPENSSL_NO_EC
    {
        if (EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, ginf->nid) <= 0)
            goto err;
    }
# endif
4844 4845 4846 4847 4848 4849 4850 4851 4852
    if (EVP_PKEY_paramgen(pctx, &pkey) <= 0) {
        EVP_PKEY_free(pkey);
        pkey = NULL;
    }

 err:
    EVP_PKEY_CTX_free(pctx);
    return pkey;
}
E
Emilia Kasper 已提交
4853

4854 4855
/* Derive secrets for ECDH/DH */
int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey, int gensecret)
4856 4857 4858 4859 4860 4861
{
    int rv = 0;
    unsigned char *pms = NULL;
    size_t pmslen = 0;
    EVP_PKEY_CTX *pctx;

4862 4863 4864
    if (privkey == NULL || pubkey == NULL) {
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
                 ERR_R_INTERNAL_ERROR);
4865
        return 0;
4866
    }
4867

4868
    pctx = EVP_PKEY_CTX_new_from_pkey(s->ctx->libctx, privkey, s->ctx->propq);
4869 4870 4871 4872

    if (EVP_PKEY_derive_init(pctx) <= 0
        || EVP_PKEY_derive_set_peer(pctx, pubkey) <= 0
        || EVP_PKEY_derive(pctx, NULL, &pmslen) <= 0) {
4873 4874
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
                 ERR_R_INTERNAL_ERROR);
4875 4876 4877
        goto err;
    }

M
Matt Caswell 已提交
4878
#ifndef OPENSSL_NO_DH
R
raja-ashok 已提交
4879 4880
    if (SSL_IS_TLS13(s) &&  EVP_PKEY_id(privkey) == EVP_PKEY_DH)
        EVP_PKEY_CTX_set_dh_pad(pctx, 1);
M
Matt Caswell 已提交
4881
#endif
R
raja-ashok 已提交
4882

4883
    pms = OPENSSL_malloc(pmslen);
4884 4885 4886
    if (pms == NULL) {
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
                 ERR_R_MALLOC_FAILURE);
4887
        goto err;
4888
    }
4889

4890 4891 4892
    if (EVP_PKEY_derive(pctx, pms, &pmslen) <= 0) {
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
                 ERR_R_INTERNAL_ERROR);
4893
        goto err;
4894
    }
4895

4896
    if (gensecret) {
4897
        /* SSLfatal() called as appropriate in the below functions */
4898 4899
        if (SSL_IS_TLS13(s)) {
            /*
4900 4901
             * If we are resuming then we already generated the early secret
             * when we created the ClientHello, so don't recreate it.
4902
             */
4903 4904 4905 4906
            if (!s->hit)
                rv = tls13_generate_secret(s, ssl_handshake_md(s), NULL, NULL,
                                           0,
                                           (unsigned char *)&s->early_secret);
4907 4908 4909
            else
                rv = 1;

4910
            rv = rv && tls13_generate_handshake_secret(s, pms, pmslen);
4911
        } else {
4912
            rv = ssl_generate_master_secret(s, pms, pmslen, 0);
4913
        }
4914
    } else {
4915
        /* Save premaster secret */
4916 4917
        s->s3.tmp.pms = pms;
        s->s3.tmp.pmslen = pmslen;
4918 4919 4920 4921
        pms = NULL;
        rv = 1;
    }

E
Emilia Kasper 已提交
4922
 err:
4923 4924 4925 4926
    OPENSSL_clear_free(pms, pmslen);
    EVP_PKEY_CTX_free(pctx);
    return rv;
}
D
Dr. Stephen Henson 已提交
4927

B
Ben Laurie 已提交
4928
#ifndef OPENSSL_NO_DH
D
Dr. Stephen Henson 已提交
4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940
EVP_PKEY *ssl_dh_to_pkey(DH *dh)
{
    EVP_PKEY *ret;
    if (dh == NULL)
        return NULL;
    ret = EVP_PKEY_new();
    if (EVP_PKEY_set1_DH(ret, dh) <= 0) {
        EVP_PKEY_free(ret);
        return NULL;
    }
    return ret;
}
B
Ben Laurie 已提交
4941
#endif