OLD | NEW |
1 diff -pu a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c | 1 diff -pu a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c |
2 --- a/nss/lib/ssl/ssl3con.c 2014-01-17 18:46:51.999581198 -0800 | 2 --- a/nss/lib/ssl/ssl3con.c 2014-01-17 18:46:51.999581198 -0800 |
3 +++ b/nss/lib/ssl/ssl3con.c 2014-01-17 18:47:05.509804656 -0800 | 3 +++ b/nss/lib/ssl/ssl3con.c 2014-01-17 18:47:05.509804656 -0800 |
4 @@ -3473,6 +3473,9 @@ ssl3_HandleAlert(sslSocket *ss, sslBuffe | 4 @@ -3473,6 +3473,9 @@ ssl3_HandleAlert(sslSocket *ss, sslBuffe |
5 case certificate_unknown: error = SSL_ERROR_CERTIFICATE_UNKNOWN_ALERT; | 5 case certificate_unknown: error = SSL_ERROR_CERTIFICATE_UNKNOWN_ALERT; |
6 break; | 6 break; |
7 case illegal_parameter: error = SSL_ERROR_ILLEGAL_PARAMETER_ALERT;break; | 7 case illegal_parameter: error = SSL_ERROR_ILLEGAL_PARAMETER_ALERT;break; |
8 + case inappropriate_fallback: | 8 + case inappropriate_fallback: |
9 + error = SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT; | 9 + error = SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT; |
10 + break; | 10 + break; |
(...skipping 26 matching lines...) Expand all Loading... |
37 + /* make room for SCSV */ | 37 + /* make room for SCSV */ |
38 if (ss->ssl3.hs.sendingSCSV) { | 38 if (ss->ssl3.hs.sendingSCSV) { |
39 - ++num_suites; /* make room for SCSV */ | 39 - ++num_suites; /* make room for SCSV */ |
40 + ++num_suites; | 40 + ++num_suites; |
41 + } | 41 + } |
42 + if (fallbackSCSV) { | 42 + if (fallbackSCSV) { |
43 + ++num_suites; | 43 + ++num_suites; |
44 } | 44 } |
45 | 45 |
46 /* count compression methods */ | 46 /* count compression methods */ |
47 @@ -5353,6 +5365,15 @@ ssl3_SendClientHello(sslSocket *ss, PRBo | 47 @@ -5389,11 +5389,21 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
48 » } | 48 » if (rv != SECSuccess) { |
49 » actual_count++; | 49 » » if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock);
} |
50 } | 50 » » return rv;» /* err set by ssl3_AppendHandshake* */ |
| 51 » } |
| 52 » } |
| 53 } |
| 54 |
51 + if (fallbackSCSV) { | 55 + if (fallbackSCSV) { |
52 + rv = ssl3_AppendHandshakeNumber(ss, TLS_FALLBACK_SCSV, | 56 + rv = ssl3_AppendHandshakeNumber(ss, TLS_FALLBACK_SCSV, |
53 + sizeof(ssl3CipherSuite)); | 57 + sizeof(ssl3CipherSuite)); |
54 + if (rv != SECSuccess) { | 58 + if (rv != SECSuccess) { |
55 + if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } | 59 + if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
56 + return rv; /* err set by ssl3_AppendHandshake* */ | 60 + return rv; /* err set by ssl3_AppendHandshake* */ |
57 + } | 61 + } |
58 + actual_count++; | 62 + actual_count++; |
59 + } | 63 + } |
60 for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { | 64 + |
61 » ssl3CipherSuiteCfg *suite = &ss->cipherSuites[i]; | 65 /* if cards were removed or inserted between count_cipher_suites and |
62 » if (config_match(suite, ss->ssl3.policy, PR_TRUE, &ss->vrange)) { | 66 * generating our list, detect the error here rather than send it off to |
| 67 * the server.. */ |
| 68 if (actual_count != num_suites) { |
63 @@ -8084,6 +8105,19 @@ ssl3_HandleClientHello(sslSocket *ss, SS | 69 @@ -8084,6 +8105,19 @@ ssl3_HandleClientHello(sslSocket *ss, SS |
64 goto loser; /* malformed */ | 70 goto loser; /* malformed */ |
65 } | 71 } |
66 | 72 |
67 + /* If the ClientHello version is less than our maximum version, check for a | 73 + /* If the ClientHello version is less than our maximum version, check for a |
68 + * TLS_FALLBACK_SCSV and reject the connection if found. */ | 74 + * TLS_FALLBACK_SCSV and reject the connection if found. */ |
69 + if (ss->vrange.max > ss->clientHelloVersion) { | 75 + if (ss->vrange.max > ss->clientHelloVersion) { |
70 + for (i = 0; i + 1 < suites.len; i += 2) { | 76 + for (i = 0; i + 1 < suites.len; i += 2) { |
71 + PRUint16 suite_i = (suites.data[i] << 8) | suites.data[i + 1]; | 77 + PRUint16 suite_i = (suites.data[i] << 8) | suites.data[i + 1]; |
72 + if (suite_i != TLS_FALLBACK_SCSV) | 78 + if (suite_i != TLS_FALLBACK_SCSV) |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 ssl_defaults.enableSignedCertTimestamps = on; | 204 ssl_defaults.enableSignedCertTimestamps = on; |
199 break; | 205 break; |
200 | 206 |
201 + case SSL_ENABLE_FALLBACK_SCSV: | 207 + case SSL_ENABLE_FALLBACK_SCSV: |
202 + ssl_defaults.enableFallbackSCSV = on; | 208 + ssl_defaults.enableFallbackSCSV = on; |
203 + break; | 209 + break; |
204 + | 210 + |
205 default: | 211 default: |
206 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 212 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
207 return SECFailure; | 213 return SECFailure; |
OLD | NEW |