Index: net/third_party/nss/patches/tls12hmacsha256.patch |
=================================================================== |
--- net/third_party/nss/patches/tls12hmacsha256.patch (revision 0) |
+++ net/third_party/nss/patches/tls12hmacsha256.patch (revision 0) |
@@ -0,0 +1,472 @@ |
+Index: net/third_party/nss/ssl/sslproto.h |
+=================================================================== |
+--- net/third_party/nss/ssl/sslproto.h (revision 203497) |
++++ net/third_party/nss/ssl/sslproto.h (working copy) |
+@@ -134,6 +134,9 @@ |
+ #define TLS_DHE_DSS_WITH_AES_256_CBC_SHA 0x0038 |
+ #define TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x0039 |
+ #define TLS_DH_ANON_WITH_AES_256_CBC_SHA 0x003A |
++#define TLS_RSA_WITH_NULL_SHA256 0x003B |
++#define TLS_RSA_WITH_AES_128_CBC_SHA256 0x003C |
++#define TLS_RSA_WITH_AES_256_CBC_SHA256 0x003D |
+ |
+ #define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 0x0041 |
+ #define TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x0042 |
+@@ -148,6 +151,8 @@ |
+ #define TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x0063 |
+ #define TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x0065 |
+ #define TLS_DHE_DSS_WITH_RC4_128_SHA 0x0066 |
++#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x0067 |
++#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x006B |
+ |
+ #define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 0x0084 |
+ #define TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x0085 |
+@@ -197,6 +202,9 @@ |
+ #define TLS_ECDH_anon_WITH_AES_128_CBC_SHA 0xC018 |
+ #define TLS_ECDH_anon_WITH_AES_256_CBC_SHA 0xC019 |
+ |
++#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023 |
++#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC027 |
++ |
+ /* Netscape "experimental" cipher suites. */ |
+ #define SSL_RSA_OLDFIPS_WITH_3DES_EDE_CBC_SHA 0xffe0 |
+ #define SSL_RSA_OLDFIPS_WITH_DES_CBC_SHA 0xffe1 |
+Index: net/third_party/nss/ssl/sslt.h |
+=================================================================== |
+--- net/third_party/nss/ssl/sslt.h (revision 203497) |
++++ net/third_party/nss/ssl/sslt.h (working copy) |
+@@ -102,7 +102,8 @@ |
+ ssl_mac_md5 = 1, |
+ ssl_mac_sha = 2, |
+ ssl_hmac_md5 = 3, /* TLS HMAC version of mac_md5 */ |
+- ssl_hmac_sha = 4 /* TLS HMAC version of mac_sha */ |
++ ssl_hmac_sha = 4, /* TLS HMAC version of mac_sha */ |
++ ssl_hmac_sha256 = 5 |
+ } SSLMACAlgorithm; |
+ |
+ typedef enum { |
+Index: net/third_party/nss/ssl/sslinfo.c |
+=================================================================== |
+--- net/third_party/nss/ssl/sslinfo.c (revision 203497) |
++++ net/third_party/nss/ssl/sslinfo.c (working copy) |
+@@ -128,6 +128,7 @@ |
+ #define B_40 128, 40, 40 |
+ #define B_0 0, 0, 0 |
+ |
++#define M_SHA256 "SHA256", ssl_hmac_sha256, 256 |
+ #define M_SHA "SHA1", ssl_mac_sha, 160 |
+ #define M_MD5 "MD5", ssl_mac_md5, 128 |
+ |
+@@ -135,20 +136,24 @@ |
+ /* <------ Cipher suite --------------------> <auth> <KEA> <bulk cipher> <MAC> <FIPS> */ |
+ {0,CS(TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA), S_RSA, K_DHE, C_CAMELLIA, B_256, M_SHA, 0, 0, 0, }, |
+ {0,CS(TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA), S_DSA, K_DHE, C_CAMELLIA, B_256, M_SHA, 0, 0, 0, }, |
++{0,CS(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256), S_RSA, K_DHE, C_AES, B_256, M_SHA256, 1, 0, 0, }, |
+ {0,CS(TLS_DHE_RSA_WITH_AES_256_CBC_SHA), S_RSA, K_DHE, C_AES, B_256, M_SHA, 1, 0, 0, }, |
+ {0,CS(TLS_DHE_DSS_WITH_AES_256_CBC_SHA), S_DSA, K_DHE, C_AES, B_256, M_SHA, 1, 0, 0, }, |
+ {0,CS(TLS_RSA_WITH_CAMELLIA_256_CBC_SHA), S_RSA, K_RSA, C_CAMELLIA, B_256, M_SHA, 0, 0, 0, }, |
++{0,CS(TLS_RSA_WITH_AES_256_CBC_SHA256), S_RSA, K_RSA, C_AES, B_256, M_SHA256, 1, 0, 0, }, |
+ {0,CS(TLS_RSA_WITH_AES_256_CBC_SHA), S_RSA, K_RSA, C_AES, B_256, M_SHA, 1, 0, 0, }, |
+ |
+ {0,CS(TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA), S_RSA, K_DHE, C_CAMELLIA, B_128, M_SHA, 0, 0, 0, }, |
+ {0,CS(TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA), S_DSA, K_DHE, C_CAMELLIA, B_128, M_SHA, 0, 0, 0, }, |
+ {0,CS(TLS_DHE_DSS_WITH_RC4_128_SHA), S_DSA, K_DHE, C_RC4, B_128, M_SHA, 0, 0, 0, }, |
++{0,CS(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256), S_RSA, K_DHE, C_AES, B_128, M_SHA256, 1, 0, 0, }, |
+ {0,CS(TLS_DHE_RSA_WITH_AES_128_CBC_SHA), S_RSA, K_DHE, C_AES, B_128, M_SHA, 1, 0, 0, }, |
+ {0,CS(TLS_DHE_DSS_WITH_AES_128_CBC_SHA), S_DSA, K_DHE, C_AES, B_128, M_SHA, 1, 0, 0, }, |
+ {0,CS(TLS_RSA_WITH_SEED_CBC_SHA), S_RSA, K_RSA, C_SEED,B_128, M_SHA, 1, 0, 0, }, |
+ {0,CS(TLS_RSA_WITH_CAMELLIA_128_CBC_SHA), S_RSA, K_RSA, C_CAMELLIA, B_128, M_SHA, 0, 0, 0, }, |
+ {0,CS(SSL_RSA_WITH_RC4_128_SHA), S_RSA, K_RSA, C_RC4, B_128, M_SHA, 0, 0, 0, }, |
+ {0,CS(SSL_RSA_WITH_RC4_128_MD5), S_RSA, K_RSA, C_RC4, B_128, M_MD5, 0, 0, 0, }, |
++{0,CS(TLS_RSA_WITH_AES_128_CBC_SHA256), S_RSA, K_RSA, C_AES, B_128, M_SHA256, 1, 0, 0, }, |
+ {0,CS(TLS_RSA_WITH_AES_128_CBC_SHA), S_RSA, K_RSA, C_AES, B_128, M_SHA, 1, 0, 0, }, |
+ |
+ {0,CS(SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA), S_RSA, K_DHE, C_3DES,B_3DES,M_SHA, 1, 0, 0, }, |
+@@ -165,6 +170,7 @@ |
+ {0,CS(TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA), S_RSA, K_RSA, C_DES, B_DES, M_SHA, 0, 1, 0, }, |
+ {0,CS(SSL_RSA_EXPORT_WITH_RC4_40_MD5), S_RSA, K_RSA, C_RC4, B_40, M_MD5, 0, 1, 0, }, |
+ {0,CS(SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5), S_RSA, K_RSA, C_RC2, B_40, M_MD5, 0, 1, 0, }, |
++{0,CS(TLS_RSA_WITH_NULL_SHA256), S_RSA, K_RSA, C_NULL,B_0, M_SHA256, 0, 1, 0, }, |
+ {0,CS(SSL_RSA_WITH_NULL_SHA), S_RSA, K_RSA, C_NULL,B_0, M_SHA, 0, 1, 0, }, |
+ {0,CS(SSL_RSA_WITH_NULL_MD5), S_RSA, K_RSA, C_NULL,B_0, M_MD5, 0, 1, 0, }, |
+ |
+@@ -180,6 +186,7 @@ |
+ {0,CS(TLS_ECDHE_ECDSA_WITH_RC4_128_SHA), S_ECDSA, K_ECDHE, C_RC4, B_128, M_SHA, 0, 0, 0, }, |
+ {0,CS(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA), S_ECDSA, K_ECDHE, C_3DES, B_3DES, M_SHA, 1, 0, 0, }, |
+ {0,CS(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA), S_ECDSA, K_ECDHE, C_AES, B_128, M_SHA, 1, 0, 0, }, |
++{0,CS(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256), S_ECDSA, K_ECDHE, C_AES, B_128, M_SHA256, 1, 0, 0, }, |
+ {0,CS(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA), S_ECDSA, K_ECDHE, C_AES, B_256, M_SHA, 1, 0, 0, }, |
+ |
+ {0,CS(TLS_ECDH_RSA_WITH_NULL_SHA), S_RSA, K_ECDH, C_NULL, B_0, M_SHA, 0, 0, 0, }, |
+@@ -192,6 +199,7 @@ |
+ {0,CS(TLS_ECDHE_RSA_WITH_RC4_128_SHA), S_RSA, K_ECDHE, C_RC4, B_128, M_SHA, 0, 0, 0, }, |
+ {0,CS(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA), S_RSA, K_ECDHE, C_3DES, B_3DES, M_SHA, 1, 0, 0, }, |
+ {0,CS(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA), S_RSA, K_ECDHE, C_AES, B_128, M_SHA, 1, 0, 0, }, |
++{0,CS(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256), S_RSA, K_ECDHE, C_AES, B_128, M_SHA256, 1, 0, 0, }, |
+ {0,CS(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA), S_RSA, K_ECDHE, C_AES, B_256, M_SHA, 1, 0, 0, }, |
+ #endif /* NSS_ENABLE_ECC */ |
+ |
+Index: net/third_party/nss/ssl/sslimpl.h |
+=================================================================== |
+--- net/third_party/nss/ssl/sslimpl.h (revision 203497) |
++++ net/third_party/nss/ssl/sslimpl.h (working copy) |
+@@ -71,6 +71,7 @@ |
+ #define mac_sha ssl_mac_sha |
+ #define hmac_md5 ssl_hmac_md5 |
+ #define hmac_sha ssl_hmac_sha |
++#define hmac_sha256 ssl_hmac_sha256 |
+ |
+ #define SET_ERROR_CODE /* reminder */ |
+ #define SEND_ALERT /* reminder */ |
+@@ -290,9 +291,9 @@ |
+ } ssl3CipherSuiteCfg; |
+ |
+ #ifdef NSS_ENABLE_ECC |
+-#define ssl_V3_SUITES_IMPLEMENTED 50 |
++#define ssl_V3_SUITES_IMPLEMENTED 57 |
+ #else |
+-#define ssl_V3_SUITES_IMPLEMENTED 30 |
++#define ssl_V3_SUITES_IMPLEMENTED 35 |
+ #endif /* NSS_ENABLE_ECC */ |
+ |
+ #define MAX_DTLS_SRTP_CIPHER_SUITES 4 |
+Index: net/third_party/nss/ssl/ssl3ecc.c |
+=================================================================== |
+--- net/third_party/nss/ssl/ssl3ecc.c (revision 203497) |
++++ net/third_party/nss/ssl/ssl3ecc.c (working copy) |
+@@ -911,6 +911,7 @@ |
+ static const ssl3CipherSuite ecdhe_ecdsa_suites[] = { |
+ TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, |
+ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
++ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, |
+ TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
+ TLS_ECDHE_ECDSA_WITH_NULL_SHA, |
+ TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, |
+@@ -920,6 +921,7 @@ |
+ static const ssl3CipherSuite ecdhe_rsa_suites[] = { |
+ TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, |
+ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
++ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, |
+ TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
+ TLS_ECDHE_RSA_WITH_NULL_SHA, |
+ TLS_ECDHE_RSA_WITH_RC4_128_SHA, |
+@@ -930,11 +932,13 @@ |
+ static const ssl3CipherSuite ecSuites[] = { |
+ TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, |
+ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
++ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, |
+ TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
+ TLS_ECDHE_ECDSA_WITH_NULL_SHA, |
+ TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, |
+ TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, |
+ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
++ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, |
+ TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
+ TLS_ECDHE_RSA_WITH_NULL_SHA, |
+ TLS_ECDHE_RSA_WITH_RC4_128_SHA, |
+Index: net/third_party/nss/ssl/sslsock.c |
+=================================================================== |
+--- net/third_party/nss/ssl/sslsock.c (revision 203497) |
++++ net/third_party/nss/ssl/sslsock.c (working copy) |
+@@ -38,8 +38,8 @@ |
+ typedef struct cipherPolicyStr cipherPolicy; |
+ |
+ /* This table contains two preconfigured policies: Export and France. |
+-** It is used only by the functions SSL_SetDomesticPolicy, |
+-** SSL_SetExportPolicy, and SSL_SetFrancyPolicy. |
++** It is used only by the functions NSS_SetDomesticPolicy, |
++** NSS_SetExportPolicy, and NSS_SetFrancePolicy. |
+ ** Order of entries is not important. |
+ */ |
+ static cipherPolicy ssl_ciphers[] = { /* Export France */ |
+@@ -62,14 +62,19 @@ |
+ { SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_DHE_DSS_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+- { SSL_RSA_WITH_NULL_SHA, SSL_ALLOWED, SSL_ALLOWED }, |
+ { SSL_RSA_WITH_NULL_MD5, SSL_ALLOWED, SSL_ALLOWED }, |
++ { SSL_RSA_WITH_NULL_SHA, SSL_ALLOWED, SSL_ALLOWED }, |
++ { TLS_RSA_WITH_NULL_SHA256, SSL_ALLOWED, SSL_ALLOWED }, |
+ { TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_DHE_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
++ { TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
++ { TLS_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_DHE_DSS_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_DHE_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
++ { TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
++ { TLS_RSA_WITH_AES_256_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+@@ -89,6 +94,7 @@ |
+ { TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
++ { TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_ECDH_RSA_WITH_NULL_SHA, SSL_ALLOWED, SSL_ALLOWED }, |
+ { TLS_ECDH_RSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+@@ -99,6 +105,7 @@ |
+ { TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
++ { TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ { TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, |
+ #endif /* NSS_ENABLE_ECC */ |
+ { 0, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED } |
+@@ -789,28 +796,20 @@ |
+ rv = SECFailure; |
+ } else { |
+ if (PR_FALSE != on) { |
+- /* TLS 1.2 isn't supported in bypass mode. */ |
+- if (ss->vrange.min >= SSL_LIBRARY_VERSION_TLS_1_2) { |
+- /* If the user requested a minimum version of TLS 1.2 then |
+- * we don't silently downgrade. */ |
+- PORT_SetError(SSL_ERROR_INVALID_VERSION_RANGE); |
+- rv = SECFailure; |
+- break; |
+- } |
+- if (ss->vrange.max >= SSL_LIBRARY_VERSION_TLS_1_2) { |
+- ss->vrange.max = SSL_LIBRARY_VERSION_TLS_1_1; |
+- } |
+- if (PR_SUCCESS == SSL_BypassSetup() ) { |
++ /* PKCS#11 bypass is not supported with TLS 1.2. */ |
++ if (ss->vrange.max >= SSL_LIBRARY_VERSION_TLS_1_2) { |
++ ss->opt.bypassPKCS11 = PR_FALSE; |
++ } else if (PR_SUCCESS == SSL_BypassSetup() ) { |
+ #ifdef NO_PKCS11_BYPASS |
+- ss->opt.bypassPKCS11 = PR_FALSE; |
++ ss->opt.bypassPKCS11 = PR_FALSE; |
+ #else |
+- ss->opt.bypassPKCS11 = on; |
++ ss->opt.bypassPKCS11 = on; |
+ #endif |
+ } else { |
+ rv = SECFailure; |
+ } |
+ } else { |
+- ss->opt.bypassPKCS11 = PR_FALSE; |
++ ss->opt.bypassPKCS11 = PR_FALSE; |
+ } |
+ } |
+ break; |
+Index: net/third_party/nss/ssl/ssl3con.c |
+=================================================================== |
+--- net/third_party/nss/ssl/ssl3con.c (revision 203497) |
++++ net/third_party/nss/ssl/ssl3con.c (working copy) |
+@@ -97,6 +97,7 @@ |
+ { TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_DHE_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
++ { TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
+ { TLS_DHE_DSS_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
+ #ifdef NSS_ENABLE_ECC |
+ { TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+@@ -104,17 +105,21 @@ |
+ #endif /* NSS_ENABLE_ECC */ |
+ { TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
++ { TLS_RSA_WITH_AES_256_CBC_SHA256, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
+ |
+ #ifdef NSS_ENABLE_ECC |
+ { TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
++ { TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
++ { TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ #endif /* NSS_ENABLE_ECC */ |
+ { TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_DHE_DSS_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { TLS_DHE_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
++ { TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
+ { TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
+ #ifdef NSS_ENABLE_ECC |
+ { TLS_ECDH_RSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+@@ -127,6 +132,7 @@ |
+ { SSL_RSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
+ { SSL_RSA_WITH_RC4_128_MD5, SSL_NOT_ALLOWED, PR_TRUE, PR_FALSE}, |
+ { TLS_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
++ { TLS_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, PR_TRUE,PR_FALSE}, |
+ |
+ #ifdef NSS_ENABLE_ECC |
+ { TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+@@ -159,6 +165,7 @@ |
+ { TLS_ECDH_ECDSA_WITH_NULL_SHA, SSL_NOT_ALLOWED, PR_FALSE, PR_FALSE}, |
+ #endif /* NSS_ENABLE_ECC */ |
+ { SSL_RSA_WITH_NULL_SHA, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
++ { TLS_RSA_WITH_NULL_SHA256, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ { SSL_RSA_WITH_NULL_MD5, SSL_NOT_ALLOWED, PR_FALSE,PR_FALSE}, |
+ |
+ }; |
+@@ -282,6 +289,7 @@ |
+ {SSL_NULL_WITH_NULL_NULL, cipher_null, mac_null, kea_null}, |
+ {SSL_RSA_WITH_NULL_MD5, cipher_null, mac_md5, kea_rsa}, |
+ {SSL_RSA_WITH_NULL_SHA, cipher_null, mac_sha, kea_rsa}, |
++ {TLS_RSA_WITH_NULL_SHA256, cipher_null, hmac_sha256, kea_rsa}, |
+ {SSL_RSA_EXPORT_WITH_RC4_40_MD5,cipher_rc4_40, mac_md5, kea_rsa_export}, |
+ {SSL_RSA_WITH_RC4_128_MD5, cipher_rc4, mac_md5, kea_rsa}, |
+ {SSL_RSA_WITH_RC4_128_SHA, cipher_rc4, mac_sha, kea_rsa}, |
+@@ -326,11 +334,15 @@ |
+ |
+ /* New TLS cipher suites */ |
+ {TLS_RSA_WITH_AES_128_CBC_SHA, cipher_aes_128, mac_sha, kea_rsa}, |
++ {TLS_RSA_WITH_AES_128_CBC_SHA256, cipher_aes_128, hmac_sha256, kea_rsa}, |
+ {TLS_DHE_DSS_WITH_AES_128_CBC_SHA, cipher_aes_128, mac_sha, kea_dhe_dss}, |
+ {TLS_DHE_RSA_WITH_AES_128_CBC_SHA, cipher_aes_128, mac_sha, kea_dhe_rsa}, |
++ {TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, cipher_aes_128, hmac_sha256, kea_dhe_rsa}, |
+ {TLS_RSA_WITH_AES_256_CBC_SHA, cipher_aes_256, mac_sha, kea_rsa}, |
++ {TLS_RSA_WITH_AES_256_CBC_SHA256, cipher_aes_256, hmac_sha256, kea_rsa}, |
+ {TLS_DHE_DSS_WITH_AES_256_CBC_SHA, cipher_aes_256, mac_sha, kea_dhe_dss}, |
+ {TLS_DHE_RSA_WITH_AES_256_CBC_SHA, cipher_aes_256, mac_sha, kea_dhe_rsa}, |
++ {TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, cipher_aes_256, hmac_sha256, kea_dhe_rsa}, |
+ #if 0 |
+ {TLS_DH_DSS_WITH_AES_128_CBC_SHA, cipher_aes_128, mac_sha, kea_dh_dss}, |
+ {TLS_DH_RSA_WITH_AES_128_CBC_SHA, cipher_aes_128, mac_sha, kea_dh_rsa}, |
+@@ -372,6 +384,7 @@ |
+ {TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, cipher_rc4, mac_sha, kea_ecdhe_ecdsa}, |
+ {TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, cipher_3des, mac_sha, kea_ecdhe_ecdsa}, |
+ {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, cipher_aes_128, mac_sha, kea_ecdhe_ecdsa}, |
++ {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, cipher_aes_128, hmac_sha256, kea_ecdhe_ecdsa}, |
+ {TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, cipher_aes_256, mac_sha, kea_ecdhe_ecdsa}, |
+ |
+ {TLS_ECDH_RSA_WITH_NULL_SHA, cipher_null, mac_sha, kea_ecdh_rsa}, |
+@@ -384,6 +397,7 @@ |
+ {TLS_ECDHE_RSA_WITH_RC4_128_SHA, cipher_rc4, mac_sha, kea_ecdhe_rsa}, |
+ {TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, cipher_3des, mac_sha, kea_ecdhe_rsa}, |
+ {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, cipher_aes_128, mac_sha, kea_ecdhe_rsa}, |
++ {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, cipher_aes_128, hmac_sha256, kea_ecdhe_rsa}, |
+ {TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, cipher_aes_256, mac_sha, kea_ecdhe_rsa}, |
+ |
+ #if 0 |
+@@ -430,14 +444,17 @@ |
+ #define mmech_sha CKM_SSL3_SHA1_MAC |
+ #define mmech_md5_hmac CKM_MD5_HMAC |
+ #define mmech_sha_hmac CKM_SHA_1_HMAC |
++#define mmech_sha256_hmac CKM_SHA256_HMAC |
+ |
+ static const ssl3MACDef mac_defs[] = { /* indexed by SSL3MACAlgorithm */ |
++ /* pad_size is only used for SSL 3.0 MAC. See RFC 6101 Sec. 5.2.3.1. */ |
+ /* mac mmech pad_size mac_size */ |
+ { mac_null, mmech_null, 0, 0 }, |
+ { mac_md5, mmech_md5, 48, MD5_LENGTH }, |
+ { mac_sha, mmech_sha, 40, SHA1_LENGTH}, |
+- {hmac_md5, mmech_md5_hmac, 48, MD5_LENGTH }, |
+- {hmac_sha, mmech_sha_hmac, 40, SHA1_LENGTH}, |
++ {hmac_md5, mmech_md5_hmac, 0, MD5_LENGTH }, |
++ {hmac_sha, mmech_sha_hmac, 0, SHA1_LENGTH}, |
++ {hmac_sha256, mmech_sha256_hmac, 0, SHA256_LENGTH}, |
+ }; |
+ |
+ /* indexed by SSL3BulkCipher */ |
+@@ -580,6 +597,14 @@ |
+ * SSL_DH_ANON_EXPORT_WITH_DES40_CBC_SHA: never implemented |
+ */ |
+ return version <= SSL_LIBRARY_VERSION_TLS_1_0; |
++ case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: |
++ case TLS_RSA_WITH_AES_256_CBC_SHA256: |
++ case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: |
++ case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: |
++ case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: |
++ case TLS_RSA_WITH_AES_128_CBC_SHA256: |
++ case TLS_RSA_WITH_NULL_SHA256: |
++ return version >= SSL_LIBRARY_VERSION_TLS_1_2; |
+ default: |
+ return PR_TRUE; |
+ } |
+@@ -1334,7 +1359,7 @@ |
+ cipher = suite_def->bulk_cipher_alg; |
+ kea = suite_def->key_exchange_alg; |
+ mac = suite_def->mac_alg; |
+- if (isTLS) |
++ if (mac <= ssl_mac_sha && isTLS) |
+ mac += 2; |
+ |
+ ss->ssl3.hs.suite_def = suite_def; |
+@@ -2060,6 +2085,9 @@ |
+ case ssl_hmac_sha: /* used with TLS */ |
+ hashObj = HASH_GetRawHashObject(HASH_AlgSHA1); |
+ break; |
++ case ssl_hmac_sha256: /* used with TLS */ |
++ hashObj = HASH_GetRawHashObject(HASH_AlgSHA256); |
++ break; |
+ default: |
+ break; |
+ } |
+@@ -3517,6 +3545,13 @@ |
+ key_material_params.ulMacSizeInBits = pwSpec->mac_size * BPB; |
+ key_material_params.ulKeySizeInBits = cipher_def->secret_key_size* BPB; |
+ key_material_params.ulIVSizeInBits = cipher_def->iv_size * BPB; |
++ if (cipher_def->type == type_block && |
++ pwSpec->version >= SSL_LIBRARY_VERSION_TLS_1_1) { |
++ /* Block ciphers in >= TLS 1.1 use a per-record, explicit IV. */ |
++ key_material_params.ulIVSizeInBits = 0; |
++ memset(pwSpec->client.write_iv, 0, cipher_def->iv_size); |
++ memset(pwSpec->server.write_iv, 0, cipher_def->iv_size); |
++ } |
+ |
+ key_material_params.bIsExport = (CK_BBOOL)(kea_def->is_limited); |
+ /* was: (CK_BBOOL)(cipher_def->keygen_mode != kg_strong); */ |
+Index: net/third_party/nss/ssl/sslenum.c |
+=================================================================== |
+--- net/third_party/nss/ssl/sslenum.c (revision 203497) |
++++ net/third_party/nss/ssl/sslenum.c (working copy) |
+@@ -26,6 +26,8 @@ |
+ * |
+ * If new ECC cipher suites are added, also update the ssl3CipherSuite arrays |
+ * in ssl3ecc.c. |
++ * |
++ * Finally, update the ssl_V3_SUITES_IMPLEMENTED macro in sslimpl.h. |
+ */ |
+ const PRUint16 SSL_ImplementedCiphers[] = { |
+ /* 256-bit */ |
+@@ -36,6 +38,7 @@ |
+ TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, |
+ TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, |
+ TLS_DHE_RSA_WITH_AES_256_CBC_SHA, |
++ TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, |
+ TLS_DHE_DSS_WITH_AES_256_CBC_SHA, |
+ #ifdef NSS_ENABLE_ECC |
+ TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, |
+@@ -43,18 +46,22 @@ |
+ #endif /* NSS_ENABLE_ECC */ |
+ TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, |
+ TLS_RSA_WITH_AES_256_CBC_SHA, |
++ TLS_RSA_WITH_AES_256_CBC_SHA256, |
+ |
+ /* 128-bit */ |
+ #ifdef NSS_ENABLE_ECC |
+ TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, |
+ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
++ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, |
+ TLS_ECDHE_RSA_WITH_RC4_128_SHA, |
+ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
++ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, |
+ #endif /* NSS_ENABLE_ECC */ |
+ TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, |
+ TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, |
+ TLS_DHE_DSS_WITH_RC4_128_SHA, |
+ TLS_DHE_RSA_WITH_AES_128_CBC_SHA, |
++ TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, |
+ TLS_DHE_DSS_WITH_AES_128_CBC_SHA, |
+ #ifdef NSS_ENABLE_ECC |
+ TLS_ECDH_RSA_WITH_RC4_128_SHA, |
+@@ -67,6 +74,7 @@ |
+ SSL_RSA_WITH_RC4_128_SHA, |
+ SSL_RSA_WITH_RC4_128_MD5, |
+ TLS_RSA_WITH_AES_128_CBC_SHA, |
++ TLS_RSA_WITH_AES_128_CBC_SHA256, |
+ |
+ /* 112-bit 3DES */ |
+ #ifdef NSS_ENABLE_ECC |
+@@ -104,6 +112,7 @@ |
+ TLS_ECDH_ECDSA_WITH_NULL_SHA, |
+ #endif /* NSS_ENABLE_ECC */ |
+ SSL_RSA_WITH_NULL_SHA, |
++ TLS_RSA_WITH_NULL_SHA256, |
+ SSL_RSA_WITH_NULL_MD5, |
+ |
+ /* SSL2 cipher suites. */ |