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-03 19:44:44.807185186 -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-03 19:44:54.857349534 -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; |
11 | 11 |
12 /* All alerts below are TLS only. */ | 12 /* All alerts below are TLS only. */ |
13 case unknown_ca: error = SSL_ERROR_UNKNOWN_CA_ALERT; break; | 13 case unknown_ca: error = SSL_ERROR_UNKNOWN_CA_ALERT; break; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 + sizeof(ssl3CipherSuite)); | 53 + sizeof(ssl3CipherSuite)); |
54 + if (rv != SECSuccess) { | 54 + if (rv != SECSuccess) { |
55 + if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } | 55 + if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
56 + return rv; /* err set by ssl3_AppendHandshake* */ | 56 + return rv; /* err set by ssl3_AppendHandshake* */ |
57 + } | 57 + } |
58 + actual_count++; | 58 + actual_count++; |
59 + } | 59 + } |
60 for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { | 60 for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { |
61 ssl3CipherSuiteCfg *suite = &ss->cipherSuites[i]; | 61 ssl3CipherSuiteCfg *suite = &ss->cipherSuites[i]; |
62 if (config_match(suite, ss->ssl3.policy, PR_TRUE, &ss->vrange)) { | 62 if (config_match(suite, ss->ssl3.policy, PR_TRUE, &ss->vrange)) { |
63 @@ -5416,6 +5437,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo | 63 @@ -8084,6 +8105,19 @@ ssl3_HandleClientHello(sslSocket *ss, SS |
64 | |
65 » extLen = ssl3_AppendPaddingExtension(ss, paddingExtensionLen, maxBytes); | |
66 » if (extLen < 0) { | |
67 +» if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } | |
68 » return SECFailure; | |
69 » } | |
70 » maxBytes -= extLen; | |
71 @@ -8083,6 +8105,19 @@ ssl3_HandleClientHello(sslSocket *ss, SS | |
72 goto loser; /* malformed */ | 64 goto loser; /* malformed */ |
73 } | 65 } |
74 | 66 |
75 + /* If the ClientHello version is less than our maximum version, check for a | 67 + /* If the ClientHello version is less than our maximum version, check for a |
76 + * TLS_FALLBACK_SCSV and reject the connection if found. */ | 68 + * TLS_FALLBACK_SCSV and reject the connection if found. */ |
77 + if (ss->vrange.max > ss->clientHelloVersion) { | 69 + if (ss->vrange.max > ss->clientHelloVersion) { |
78 + for (i = 0; i + 1 < suites.len; i += 2) { | 70 + for (i = 0; i + 1 < suites.len; i += 2) { |
79 + PRUint16 suite_i = (suites.data[i] << 8) | suites.data[i + 1]; | 71 + PRUint16 suite_i = (suites.data[i] << 8) | suites.data[i + 1]; |
80 + if (suite_i != TLS_FALLBACK_SCSV) | 72 + if (suite_i != TLS_FALLBACK_SCSV) |
81 + continue; | 73 + continue; |
82 + desc = inappropriate_fallback; | 74 + desc = inappropriate_fallback; |
83 + errCode = SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT; | 75 + errCode = SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT; |
84 + goto alert_loser; | 76 + goto alert_loser; |
85 + } | 77 + } |
86 + } | 78 + } |
87 + | 79 + |
88 /* grab the list of compression methods. */ | 80 /* grab the list of compression methods. */ |
89 rv = ssl3_ConsumeHandshakeVariable(ss, &comps, 1, &b, &length); | 81 rv = ssl3_ConsumeHandshakeVariable(ss, &comps, 1, &b, &length); |
90 if (rv != SECSuccess) { | 82 if (rv != SECSuccess) { |
91 diff -pu a/nss/lib/ssl/ssl3prot.h b/nss/lib/ssl/ssl3prot.h | 83 diff -pu a/nss/lib/ssl/ssl3prot.h b/nss/lib/ssl/ssl3prot.h |
92 --- a/nss/lib/ssl/ssl3prot.h» 2014-01-03 19:39:28.442012014 -0800 | 84 --- a/nss/lib/ssl/ssl3prot.h» 2014-01-17 17:59:03.242109996 -0800 |
93 +++ b/nss/lib/ssl/ssl3prot.h» 2014-01-03 19:44:54.857349534 -0800 | 85 +++ b/nss/lib/ssl/ssl3prot.h» 2014-01-17 18:47:05.509804656 -0800 |
94 @@ -98,6 +98,7 @@ typedef enum { | 86 @@ -98,6 +98,7 @@ typedef enum { |
95 protocol_version = 70, | 87 protocol_version = 70, |
96 insufficient_security = 71, | 88 insufficient_security = 71, |
97 internal_error = 80, | 89 internal_error = 80, |
98 + inappropriate_fallback = 86, /* could also be sent for SSLv3 */ | 90 + inappropriate_fallback = 86, /* could also be sent for SSLv3 */ |
99 user_canceled = 90, | 91 user_canceled = 90, |
100 no_renegotiation = 100, | 92 no_renegotiation = 100, |
101 | 93 |
102 diff -pu a/nss/lib/ssl/sslerr.h b/nss/lib/ssl/sslerr.h | 94 diff -pu a/nss/lib/ssl/sslerr.h b/nss/lib/ssl/sslerr.h |
103 --- a/nss/lib/ssl/sslerr.h» 2014-01-03 19:39:28.442012014 -0800 | 95 --- a/nss/lib/ssl/sslerr.h» 2014-01-17 17:59:03.242109996 -0800 |
104 +++ b/nss/lib/ssl/sslerr.h» 2014-01-03 19:44:54.877349862 -0800 | 96 +++ b/nss/lib/ssl/sslerr.h» 2014-01-17 18:47:05.509804656 -0800 |
105 @@ -196,6 +196,7 @@ SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM | 97 @@ -196,6 +196,7 @@ SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM |
106 SSL_ERROR_BAD_CHANNEL_ID_DATA = (SSL_ERROR_BASE + 129), | 98 SSL_ERROR_BAD_CHANNEL_ID_DATA = (SSL_ERROR_BASE + 129), |
107 SSL_ERROR_INVALID_CHANNEL_ID_KEY = (SSL_ERROR_BASE + 130), | 99 SSL_ERROR_INVALID_CHANNEL_ID_KEY = (SSL_ERROR_BASE + 130), |
108 SSL_ERROR_GET_CHANNEL_ID_FAILED = (SSL_ERROR_BASE + 131), | 100 SSL_ERROR_GET_CHANNEL_ID_FAILED = (SSL_ERROR_BASE + 131), |
109 +SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT = (SSL_ERROR_BASE + 132), | 101 +SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT = (SSL_ERROR_BASE + 132), |
110 | 102 |
111 SSL_ERROR_END_OF_LIST /* let the c compiler determine the value of this. */ | 103 SSL_ERROR_END_OF_LIST /* let the c compiler determine the value of this. */ |
112 } SSLErrorCodes; | 104 } SSLErrorCodes; |
113 diff -pu a/nss/lib/ssl/SSLerrs.h b/nss/lib/ssl/SSLerrs.h | 105 diff -pu a/nss/lib/ssl/SSLerrs.h b/nss/lib/ssl/SSLerrs.h |
114 --- a/nss/lib/ssl/SSLerrs.h» 2014-01-03 19:39:28.442012014 -0800 | 106 --- a/nss/lib/ssl/SSLerrs.h» 2014-01-17 17:59:03.242109996 -0800 |
115 +++ b/nss/lib/ssl/SSLerrs.h» 2014-01-03 19:44:54.907350351 -0800 | 107 +++ b/nss/lib/ssl/SSLerrs.h» 2014-01-17 18:47:05.509804656 -0800 |
116 @@ -421,3 +421,8 @@ ER3(SSL_ERROR_INVALID_CHANNEL_ID_KEY, (S | 108 @@ -421,3 +421,8 @@ ER3(SSL_ERROR_INVALID_CHANNEL_ID_KEY, (S |
117 | 109 |
118 ER3(SSL_ERROR_GET_CHANNEL_ID_FAILED, (SSL_ERROR_BASE + 131), | 110 ER3(SSL_ERROR_GET_CHANNEL_ID_FAILED, (SSL_ERROR_BASE + 131), |
119 "The application could not get a TLS Channel ID.") | 111 "The application could not get a TLS Channel ID.") |
120 + | 112 + |
121 +ER3(SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT, (SSL_ERROR_BASE + 132), | 113 +ER3(SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT, (SSL_ERROR_BASE + 132), |
122 +"The connection was using a lesser TLS version as a result of a previous" | 114 +"The connection was using a lesser TLS version as a result of a previous" |
123 +" handshake failure, but the server indicated that it should not have been" | 115 +" handshake failure, but the server indicated that it should not have been" |
124 +" needed.") | 116 +" needed.") |
125 diff -pu a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h | 117 diff -pu a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h |
126 --- a/nss/lib/ssl/ssl.h»2014-01-03 19:44:44.807185186 -0800 | 118 --- a/nss/lib/ssl/ssl.h»2014-01-17 18:46:51.999581198 -0800 |
127 +++ b/nss/lib/ssl/ssl.h»2014-01-03 19:44:54.907350351 -0800 | 119 +++ b/nss/lib/ssl/ssl.h»2014-01-17 18:48:54.971613341 -0800 |
128 @@ -163,6 +163,8 @@ SSL_IMPORT PRFileDesc *DTLS_ImportFD(PRF | 120 @@ -183,6 +183,8 @@ SSL_IMPORT PRFileDesc *DTLS_ImportFD(PRF |
129 #define SSL_ENABLE_OCSP_STAPLING 24 /* Request OCSP stapling (client) */ | 121 |
130 /* Request Signed Certificate Timestamps via TLS extension (client) */ | 122 /* Request Signed Certificate Timestamps via TLS extension (client) */ |
131 #define SSL_ENABLE_SIGNED_CERT_TIMESTAMPS 25 | 123 #define SSL_ENABLE_SIGNED_CERT_TIMESTAMPS 27 |
132 +#define SSL_ENABLE_FALLBACK_SCSV 26 /* Send fallback SCSV in | 124 +#define SSL_ENABLE_FALLBACK_SCSV 28 /* Send fallback SCSV in |
133 + * handshakes. */ | 125 + * handshakes. */ |
134 | 126 |
135 #ifdef SSL_DEPRECATED_FUNCTION | 127 #ifdef SSL_DEPRECATED_FUNCTION |
136 /* Old deprecated function names */ | 128 /* Old deprecated function names */ |
137 diff -pu a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h | 129 diff -pu a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h |
138 --- a/nss/lib/ssl/sslimpl.h» 2014-01-03 19:44:44.807185186 -0800 | 130 --- a/nss/lib/ssl/sslimpl.h» 2014-01-17 18:46:51.999581198 -0800 |
139 +++ b/nss/lib/ssl/sslimpl.h» 2014-01-03 19:44:54.907350351 -0800 | 131 +++ b/nss/lib/ssl/sslimpl.h» 2014-01-17 18:51:17.963962287 -0800 |
140 @@ -336,6 +336,7 @@ typedef struct sslOptionsStr { | 132 @@ -338,6 +338,7 @@ typedef struct sslOptionsStr { |
141 unsigned int cbcRandomIV : 1; /* 24 */ | 133 unsigned int enableNPN : 1; /* 26 */ |
142 unsigned int enableOCSPStapling» : 1; /* 25 */ | 134 unsigned int enableALPN : 1; /* 27 */ |
143 unsigned int enableSignedCertTimestamps : 1; /* 26 */ | 135 unsigned int enableSignedCertTimestamps : 1; /* 28 */ |
144 + unsigned int enableFallbackSCSV» : 1; /* 27 */ | 136 + unsigned int enableFallbackSCSV : 1; /* 29 */ |
145 } sslOptions; | 137 } sslOptions; |
146 | 138 |
147 typedef enum { sslHandshakingUndetermined = 0, | 139 typedef enum { sslHandshakingUndetermined = 0, |
148 diff -pu a/nss/lib/ssl/sslproto.h b/nss/lib/ssl/sslproto.h | 140 diff -pu a/nss/lib/ssl/sslproto.h b/nss/lib/ssl/sslproto.h |
149 --- a/nss/lib/ssl/sslproto.h» 2014-01-03 19:43:07.025586219 -0800 | 141 --- a/nss/lib/ssl/sslproto.h» 2014-01-17 18:10:16.793281867 -0800 |
150 +++ b/nss/lib/ssl/sslproto.h» 2014-01-03 19:44:54.907350351 -0800 | 142 +++ b/nss/lib/ssl/sslproto.h» 2014-01-17 18:47:05.509804656 -0800 |
151 @@ -172,6 +172,11 @@ | 143 @@ -172,6 +172,11 @@ |
152 */ | 144 */ |
153 #define TLS_EMPTY_RENEGOTIATION_INFO_SCSV 0x00FF | 145 #define TLS_EMPTY_RENEGOTIATION_INFO_SCSV 0x00FF |
154 | 146 |
155 +/* TLS_FALLBACK_SCSV is a signaling cipher suite value that indicates that a | 147 +/* TLS_FALLBACK_SCSV is a signaling cipher suite value that indicates that a |
156 + * handshake is the result of TLS version fallback. This value is not IANA | 148 + * handshake is the result of TLS version fallback. This value is not IANA |
157 + * assigned. */ | 149 + * assigned. */ |
158 +#define TLS_FALLBACK_SCSV 0x5600 | 150 +#define TLS_FALLBACK_SCSV 0x5600 |
159 + | 151 + |
160 /* Cipher Suite Values starting with 0xC000 are defined in informational | 152 /* Cipher Suite Values starting with 0xC000 are defined in informational |
161 * RFCs. | 153 * RFCs. |
162 */ | 154 */ |
163 diff -pu a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c | 155 diff -pu a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c |
164 --- a/nss/lib/ssl/sslsock.c» 2014-01-03 19:44:44.807185186 -0800 | 156 --- a/nss/lib/ssl/sslsock.c» 2014-01-17 18:46:52.009581364 -0800 |
165 +++ b/nss/lib/ssl/sslsock.c» 2014-01-03 19:44:54.907350351 -0800 | 157 +++ b/nss/lib/ssl/sslsock.c» 2014-01-17 18:59:17.931852364 -0800 |
166 @@ -86,7 +86,8 @@ static sslOptions ssl_defaults = { | 158 @@ -88,7 +88,8 @@ static sslOptions ssl_defaults = { |
167 PR_FALSE, /* enableFalseStart */ | |
168 PR_TRUE, /* cbcRandomIV */ | |
169 PR_FALSE, /* enableOCSPStapling */ | 159 PR_FALSE, /* enableOCSPStapling */ |
| 160 PR_TRUE, /* enableNPN */ |
| 161 PR_FALSE, /* enableALPN */ |
170 - PR_FALSE /* enableSignedCertTimestamps */ | 162 - PR_FALSE /* enableSignedCertTimestamps */ |
171 + PR_FALSE, /* enableSignedCertTimestamps */ | 163 + PR_FALSE, /* enableSignedCertTimestamps */ |
172 + PR_FALSE /* enableFallbackSCSV */ | 164 + PR_FALSE /* enableFallbackSCSV */ |
173 }; | 165 }; |
174 | 166 |
175 /* | 167 /* |
176 @@ -782,6 +783,10 @@ SSL_OptionSet(PRFileDesc *fd, PRInt32 wh | 168 @@ -792,6 +793,10 @@ SSL_OptionSet(PRFileDesc *fd, PRInt32 wh |
177 ss->opt.enableSignedCertTimestamps = on; | 169 » ss->opt.enableSignedCertTimestamps = on; |
178 break; | 170 » break; |
179 | 171 |
180 + case SSL_ENABLE_FALLBACK_SCSV: | 172 + case SSL_ENABLE_FALLBACK_SCSV: |
181 + ss->opt.enableFallbackSCSV = on; | 173 + ss->opt.enableFallbackSCSV = on; |
182 + break; | 174 + break; |
183 + | 175 + |
184 default: | 176 default: |
185 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 177 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
186 rv = SECFailure; | 178 rv = SECFailure; |
187 @@ -855,6 +860,7 @@ SSL_OptionGet(PRFileDesc *fd, PRInt32 wh | 179 @@ -867,6 +872,7 @@ SSL_OptionGet(PRFileDesc *fd, PRInt32 wh |
188 case SSL_ENABLE_SIGNED_CERT_TIMESTAMPS: | 180 case SSL_ENABLE_SIGNED_CERT_TIMESTAMPS: |
189 on = ss->opt.enableSignedCertTimestamps; | 181 » on = ss->opt.enableSignedCertTimestamps; |
190 break; | 182 » break; |
191 + case SSL_ENABLE_FALLBACK_SCSV: on = ss->opt.enableFallbackSCSV; break; | 183 + case SSL_ENABLE_FALLBACK_SCSV: on = ss->opt.enableFallbackSCSV; break; |
192 | 184 |
193 default: | 185 default: |
194 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 186 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
195 @@ -919,6 +925,9 @@ SSL_OptionGetDefault(PRInt32 which, PRBo | 187 @@ -933,6 +939,9 @@ SSL_OptionGetDefault(PRInt32 which, PRBo |
196 case SSL_ENABLE_SIGNED_CERT_TIMESTAMPS: | 188 case SSL_ENABLE_SIGNED_CERT_TIMESTAMPS: |
197 on = ssl_defaults.enableSignedCertTimestamps; | 189 » on = ssl_defaults.enableSignedCertTimestamps; |
198 break; | 190 » break; |
199 + case SSL_ENABLE_FALLBACK_SCSV: | 191 + case SSL_ENABLE_FALLBACK_SCSV: |
200 + on = ssl_defaults.enableFallbackSCSV; | 192 +» on = ssl_defaults.enableFallbackSCSV; |
201 + break; | 193 +» break; |
202 | 194 |
203 default: | 195 default: |
204 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 196 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
205 @@ -1090,6 +1099,10 @@ SSL_OptionSetDefault(PRInt32 which, PRBo | 197 @@ -1112,6 +1121,10 @@ SSL_OptionSetDefault(PRInt32 which, PRBo |
206 ssl_defaults.enableSignedCertTimestamps = on; | 198 » ssl_defaults.enableSignedCertTimestamps = on; |
207 break; | 199 » break; |
208 | 200 |
209 + case SSL_ENABLE_FALLBACK_SCSV: | 201 + case SSL_ENABLE_FALLBACK_SCSV: |
210 + ssl_defaults.enableFallbackSCSV = on; | 202 + ssl_defaults.enableFallbackSCSV = on; |
211 + break; | 203 + break; |
212 + | 204 + |
213 default: | 205 default: |
214 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 206 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
215 return SECFailure; | 207 return SECFailure; |
OLD | NEW |