Add HMAC ECC ciphersuites from RFC5289. Include SHA384 PRF support and
prohibit use of these ciphersuites for TLS < 1.2
This commit is contained in:
141
ssl/s3_lib.c
141
ssl/s3_lib.c
@@ -2370,6 +2370,140 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
|
||||
256,
|
||||
},
|
||||
#endif /* OPENSSL_NO_SRP */
|
||||
#ifndef OPENSSL_NO_ECDH
|
||||
|
||||
/* HMAC based TLS v1.2 ciphersuites from RFC5289 */
|
||||
|
||||
/* Cipher C023 */
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
|
||||
SSL_kEECDH,
|
||||
SSL_aECDSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
SSL_TLSV1_2,
|
||||
SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
|
||||
/* Cipher C024 */
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
|
||||
SSL_kEECDH,
|
||||
SSL_aECDSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
SSL_TLSV1_2,
|
||||
SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
|
||||
/* Cipher C025 */
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256,
|
||||
TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256,
|
||||
SSL_kECDHe,
|
||||
SSL_aECDH,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
SSL_TLSV1_2,
|
||||
SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
|
||||
/* Cipher C026 */
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384,
|
||||
TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384,
|
||||
SSL_kECDHe,
|
||||
SSL_aECDH,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
SSL_TLSV1_2,
|
||||
SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
|
||||
/* Cipher C027 */
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
|
||||
TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
|
||||
SSL_kEECDH,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
SSL_TLSV1_2,
|
||||
SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
|
||||
/* Cipher C028 */
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
|
||||
TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
|
||||
SSL_kEECDH,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
SSL_TLSV1_2,
|
||||
SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
|
||||
/* Cipher C029 */
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
|
||||
TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
|
||||
SSL_kECDHe,
|
||||
SSL_aECDH,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
SSL_TLSV1_2,
|
||||
SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
|
||||
/* Cipher C02A */
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
|
||||
TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
|
||||
SSL_kECDHe,
|
||||
SSL_aECDH,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
SSL_TLSV1_2,
|
||||
SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
|
||||
#endif /* OPENSSL_NO_ECDH */
|
||||
|
||||
|
||||
#ifdef TEMP_GOST_TLS
|
||||
/* Cipher FF00 */
|
||||
@@ -3226,6 +3360,8 @@ long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
|
||||
return(1);
|
||||
}
|
||||
|
||||
#define DEBUG_PRINT_UNKNOWN_CIPHERSUITES
|
||||
|
||||
/* This function needs to check if the ciphers required are actually
|
||||
* available */
|
||||
const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
|
||||
@@ -3317,6 +3453,11 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
|
||||
{
|
||||
c=sk_SSL_CIPHER_value(prio,i);
|
||||
|
||||
/* Skip TLS v1.2 only ciphersuites if lower than v1.2 */
|
||||
if ((c->algorithm_ssl & SSL_TLSV1_2) &&
|
||||
(TLS1_get_version(s) < TLS1_2_VERSION))
|
||||
continue;
|
||||
|
||||
ssl_set_cert_masks(cert,c);
|
||||
mask_k = cert->mask_k;
|
||||
mask_a = cert->mask_a;
|
||||
|
Reference in New Issue
Block a user