Index: net/third_party/nss/patches/ciphersuiteversion.patch |
=================================================================== |
--- net/third_party/nss/patches/ciphersuiteversion.patch (revision 242942) |
+++ net/third_party/nss/patches/ciphersuiteversion.patch (working copy) |
@@ -1,169 +0,0 @@ |
-diff --git a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c |
-index bc54c99..1245393 100644 |
---- a/nss/lib/ssl/ssl3con.c |
-+++ b/nss/lib/ssl/ssl3con.c |
-@@ -631,8 +631,9 @@ void SSL_AtomicIncrementLong(long * x) |
- } |
- |
- static PRBool |
--ssl3_CipherSuiteAllowedForVersion(ssl3CipherSuite cipherSuite, |
-- SSL3ProtocolVersion version) |
-+ssl3_CipherSuiteAllowedForVersionRange( |
-+ ssl3CipherSuite cipherSuite, |
-+ const SSLVersionRange *vrange) |
- { |
- switch (cipherSuite) { |
- /* See RFC 4346 A.5. Export cipher suites must not be used in TLS 1.1 or |
-@@ -649,7 +650,9 @@ ssl3_CipherSuiteAllowedForVersion(ssl3CipherSuite cipherSuite, |
- * SSL_DH_ANON_EXPORT_WITH_RC4_40_MD5: never implemented |
- * SSL_DH_ANON_EXPORT_WITH_DES40_CBC_SHA: never implemented |
- */ |
-- return version <= SSL_LIBRARY_VERSION_TLS_1_0; |
-+ return vrange->min <= SSL_LIBRARY_VERSION_TLS_1_0; |
-+ case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305: |
-+ case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305: |
- 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: |
-@@ -661,7 +664,7 @@ ssl3_CipherSuiteAllowedForVersion(ssl3CipherSuite cipherSuite, |
- case TLS_RSA_WITH_AES_128_CBC_SHA256: |
- case TLS_RSA_WITH_AES_128_GCM_SHA256: |
- case TLS_RSA_WITH_NULL_SHA256: |
-- return version >= SSL_LIBRARY_VERSION_TLS_1_2; |
-+ return vrange->max >= SSL_LIBRARY_VERSION_TLS_1_2; |
- default: |
- return PR_TRUE; |
- } |
-@@ -804,7 +807,8 @@ ssl3_config_match_init(sslSocket *ss) |
- } |
- |
- |
--/* return PR_TRUE if suite matches policy and enabled state */ |
-+/* return PR_TRUE if suite matches policy, enabled state and is applicable to |
-+ * the given version range. */ |
- /* It would be a REALLY BAD THING (tm) if we ever permitted the use |
- ** of a cipher that was NOT_ALLOWED. So, if this is ever called with |
- ** policy == SSL_NOT_ALLOWED, report no match. |
-@@ -812,7 +816,8 @@ ssl3_config_match_init(sslSocket *ss) |
- /* adjust suite enabled to the availability of a token that can do the |
- * cipher suite. */ |
- static PRBool |
--config_match(ssl3CipherSuiteCfg *suite, int policy, PRBool enabled) |
-+config_match(ssl3CipherSuiteCfg *suite, int policy, PRBool enabled, |
-+ const SSLVersionRange *vrange) |
- { |
- PORT_Assert(policy != SSL_NOT_ALLOWED && enabled != PR_FALSE); |
- if (policy == SSL_NOT_ALLOWED || !enabled) |
-@@ -820,10 +825,13 @@ config_match(ssl3CipherSuiteCfg *suite, int policy, PRBool enabled) |
- return (PRBool)(suite->enabled && |
- suite->isPresent && |
- suite->policy != SSL_NOT_ALLOWED && |
-- suite->policy <= policy); |
-+ suite->policy <= policy && |
-+ ssl3_CipherSuiteAllowedForVersionRange( |
-+ suite->cipher_suite, vrange)); |
- } |
- |
--/* return number of cipher suites that match policy and enabled state */ |
-+/* return number of cipher suites that match policy, enabled state and are |
-+ * applicable for the configured protocol version range. */ |
- /* called from ssl3_SendClientHello and ssl3_ConstructV2CipherSpecsHack */ |
- static int |
- count_cipher_suites(sslSocket *ss, int policy, PRBool enabled) |
-@@ -834,7 +842,7 @@ count_cipher_suites(sslSocket *ss, int policy, PRBool enabled) |
- return 0; |
- } |
- for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { |
-- if (config_match(&ss->cipherSuites[i], policy, enabled)) |
-+ if (config_match(&ss->cipherSuites[i], policy, enabled, &ss->vrange)) |
- count++; |
- } |
- if (count <= 0) { |
-@@ -5294,7 +5302,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBool resending) |
- } |
- for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { |
- ssl3CipherSuiteCfg *suite = &ss->cipherSuites[i]; |
-- if (config_match(suite, ss->ssl3.policy, PR_TRUE)) { |
-+ if (config_match(suite, ss->ssl3.policy, PR_TRUE, &ss->vrange)) { |
- actual_count++; |
- if (actual_count > num_suites) { |
- /* set error card removal/insertion error */ |
-@@ -6359,15 +6367,19 @@ ssl3_HandleServerHello(sslSocket *ss, SSL3Opaque *b, PRUint32 length) |
- for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { |
- ssl3CipherSuiteCfg *suite = &ss->cipherSuites[i]; |
- if (temp == suite->cipher_suite) { |
-- if (!config_match(suite, ss->ssl3.policy, PR_TRUE)) { |
-+ SSLVersionRange vrange = {ss->version, ss->version}; |
-+ if (!config_match(suite, ss->ssl3.policy, PR_TRUE, &vrange)) { |
-+ /* config_match already checks whether the cipher suite is |
-+ * acceptable for the version, but the check is repeated here |
-+ * in order to give a more precise error code. */ |
-+ if (!ssl3_CipherSuiteAllowedForVersionRange(temp, &vrange)) { |
-+ desc = handshake_failure; |
-+ errCode = SSL_ERROR_CIPHER_DISALLOWED_FOR_VERSION; |
-+ goto alert_loser; |
-+ } |
-+ |
- break; /* failure */ |
- } |
-- if (!ssl3_CipherSuiteAllowedForVersion(suite->cipher_suite, |
-- ss->version)) { |
-- desc = handshake_failure; |
-- errCode = SSL_ERROR_CIPHER_DISALLOWED_FOR_VERSION; |
-- goto alert_loser; |
-- } |
- |
- suite_found = PR_TRUE; |
- break; /* success */ |
-@@ -8008,6 +8020,9 @@ ssl3_HandleClientHello(sslSocket *ss, SSL3Opaque *b, PRUint32 length) |
- */ |
- if (sid) do { |
- ssl3CipherSuiteCfg *suite; |
-+#ifdef PARANOID |
-+ SSLVersionRange vrange = {ss->version, ss->version}; |
-+#endif |
- |
- /* Check that the cached compression method is still enabled. */ |
- if (!compressionEnabled(ss, sid->u.ssl3.compression)) |
-@@ -8036,7 +8051,7 @@ ssl3_HandleClientHello(sslSocket *ss, SSL3Opaque *b, PRUint32 length) |
- * The product policy won't change during the process lifetime. |
- * Implemented ("isPresent") shouldn't change for servers. |
- */ |
-- if (!config_match(suite, ss->ssl3.policy, PR_TRUE)) |
-+ if (!config_match(suite, ss->ssl3.policy, PR_TRUE, &vrange)) |
- break; |
- #else |
- if (!suite->enabled) |
-@@ -8084,9 +8099,8 @@ ssl3_HandleClientHello(sslSocket *ss, SSL3Opaque *b, PRUint32 length) |
- */ |
- for (j = 0; j < ssl_V3_SUITES_IMPLEMENTED; j++) { |
- ssl3CipherSuiteCfg *suite = &ss->cipherSuites[j]; |
-- if (!config_match(suite, ss->ssl3.policy, PR_TRUE) || |
-- !ssl3_CipherSuiteAllowedForVersion(suite->cipher_suite, |
-- ss->version)) { |
-+ SSLVersionRange vrange = {ss->version, ss->version}; |
-+ if (!config_match(suite, ss->ssl3.policy, PR_TRUE, &vrange)) { |
- continue; |
- } |
- for (i = 0; i + 1 < suites.len; i += 2) { |
-@@ -8619,9 +8633,8 @@ ssl3_HandleV2ClientHello(sslSocket *ss, unsigned char *buffer, int length) |
- */ |
- for (j = 0; j < ssl_V3_SUITES_IMPLEMENTED; j++) { |
- ssl3CipherSuiteCfg *suite = &ss->cipherSuites[j]; |
-- if (!config_match(suite, ss->ssl3.policy, PR_TRUE) || |
-- !ssl3_CipherSuiteAllowedForVersion(suite->cipher_suite, |
-- ss->version)) { |
-+ SSLVersionRange vrange = {ss->version, ss->version}; |
-+ if (!config_match(suite, ss->ssl3.policy, PR_TRUE, &vrange)) { |
- continue; |
- } |
- for (i = 0; i+2 < suite_length; i += 3) { |
-@@ -12324,7 +12337,7 @@ ssl3_ConstructV2CipherSpecsHack(sslSocket *ss, unsigned char *cs, int *size) |
- /* ssl3_config_match_init was called by the caller of this function. */ |
- for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { |
- ssl3CipherSuiteCfg *suite = &ss->cipherSuites[i]; |
-- if (config_match(suite, SSL_ALLOWED, PR_TRUE)) { |
-+ if (config_match(suite, SSL_ALLOWED, PR_TRUE, &ss->vrange)) { |
- if (cs != NULL) { |
- *cs++ = 0x00; |
- *cs++ = (suite->cipher_suite >> 8) & 0xFF; |