OLD | NEW |
1 diff --git a/nss/lib/ssl/SSLerrs.h b/nss/lib/ssl/SSLerrs.h | 1 diff -pu a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c |
2 index c0d26cc..4ff0b7d 100644 | 2 --- a/nss/lib/ssl/ssl3con.c» 2014-01-03 19:44:44.807185186 -0800 |
3 --- a/nss/lib/ssl/SSLerrs.h | 3 +++ b/nss/lib/ssl/ssl3con.c» 2014-01-03 19:44:54.857349534 -0800 |
4 +++ b/nss/lib/ssl/SSLerrs.h | 4 @@ -3473,6 +3473,9 @@ ssl3_HandleAlert(sslSocket *ss, sslBuffe |
5 @@ -421,3 +421,8 @@ ER3(SSL_ERROR_INVALID_CHANNEL_ID_KEY, (SSL_ERROR_BASE + 130)
, | |
6 | |
7 ER3(SSL_ERROR_GET_CHANNEL_ID_FAILED, (SSL_ERROR_BASE + 131), | |
8 "The application could not get a TLS Channel ID.") | |
9 + | |
10 +ER3(SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT, (SSL_ERROR_BASE + 132), | |
11 +"The connection was using a lesser TLS version as a result of a previous" | |
12 +" handshake failure, but the server indicated that it should not have been" | |
13 +" needed.") | |
14 diff --git a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h | |
15 index 24627ed..067938c 100644 | |
16 --- a/nss/lib/ssl/ssl.h | |
17 +++ b/nss/lib/ssl/ssl.h | |
18 @@ -163,6 +163,8 @@ SSL_IMPORT PRFileDesc *DTLS_ImportFD(PRFileDesc *model, PRFi
leDesc *fd); | |
19 #define SSL_ENABLE_OCSP_STAPLING 24 /* Request OCSP stapling (client) */ | |
20 /* Request Signed Certificate Timestamps via TLS extension (client) */ | |
21 #define SSL_ENABLE_SIGNED_CERT_TIMESTAMPS 25 | |
22 +#define SSL_ENABLE_FALLBACK_SCSV 26 /* Send fallback SCSV in | |
23 + * handshakes. */ | |
24 | |
25 #ifdef SSL_DEPRECATED_FUNCTION | |
26 /* Old deprecated function names */ | |
27 diff --git a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c | |
28 index cf7ef32..946f780 100644 | |
29 --- a/nss/lib/ssl/ssl3con.c | |
30 +++ b/nss/lib/ssl/ssl3con.c | |
31 @@ -3469,6 +3469,9 @@ ssl3_HandleAlert(sslSocket *ss, sslBuffer *buf) | |
32 case certificate_unknown: error = SSL_ERROR_CERTIFICATE_UNKNOWN_ALERT; | 5 case certificate_unknown: error = SSL_ERROR_CERTIFICATE_UNKNOWN_ALERT; |
33 break; | 6 break; |
34 case illegal_parameter: error = SSL_ERROR_ILLEGAL_PARAMETER_ALERT;break; | 7 case illegal_parameter: error = SSL_ERROR_ILLEGAL_PARAMETER_ALERT;break; |
35 + case inappropriate_fallback: | 8 + case inappropriate_fallback: |
36 + error = SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT; | 9 + error = SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT; |
37 + break; | 10 + break; |
38 | 11 |
39 /* All alerts below are TLS only. */ | 12 /* All alerts below are TLS only. */ |
40 case unknown_ca: error = SSL_ERROR_UNKNOWN_CA_ALERT; break; | 13 case unknown_ca: error = SSL_ERROR_UNKNOWN_CA_ALERT; break; |
41 @@ -4973,7 +4976,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBool resending) | 14 @@ -4986,6 +4989,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
42 int num_suites; | 15 int num_suites; |
43 int actual_count = 0; | 16 int actual_count = 0; |
44 PRBool isTLS = PR_FALSE; | 17 PRBool isTLS = PR_FALSE; |
45 - PRBool requestingResume = PR_FALSE; | |
46 + PRBool requestingResume = PR_FALSE, fallbackSCSV = PR_FALSE; | 18 + PRBool requestingResume = PR_FALSE, fallbackSCSV = PR_FALSE; |
47 PRInt32 total_exten_len = 0; | 19 PRInt32 total_exten_len = 0; |
48 unsigned paddingExtensionLen; | 20 unsigned paddingExtensionLen; |
49 unsigned numCompressionMethods; | 21 unsigned numCompressionMethods; |
50 @@ -5223,8 +5226,15 @@ ssl3_SendClientHello(sslSocket *ss, PRBool resending) | 22 @@ -5128,6 +5132,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
51 num_suites = count_cipher_suites(ss, ss->ssl3.policy, PR_TRUE); | 23 } |
52 if (!num_suites) | 24 |
| 25 if (sid) { |
| 26 +» requestingResume = PR_TRUE; |
| 27 » SSL_AtomicIncrementLong(& ssl3stats.sch_sid_cache_hits ); |
| 28 |
| 29 » PRINT_BUF(4, (ss, "client, found session-id:", sid->u.ssl3.sessionID, |
| 30 @@ -5246,8 +5251,15 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
| 31 » if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
53 return SECFailure; /* count_cipher_suites has set error code. */ | 32 return SECFailure; /* count_cipher_suites has set error code. */ |
| 33 } |
54 + | 34 + |
55 + fallbackSCSV = ss->opt.enableFallbackSCSV && (!requestingResume || | 35 + fallbackSCSV = ss->opt.enableFallbackSCSV && (!requestingResume || |
56 + ss->version < sid->version); | 36 + ss->version < sid->version); |
57 + /* make room for SCSV */ | 37 + /* make room for SCSV */ |
58 if (ss->ssl3.hs.sendingSCSV) { | 38 if (ss->ssl3.hs.sendingSCSV) { |
59 - ++num_suites; /* make room for SCSV */ | 39 - ++num_suites; /* make room for SCSV */ |
60 + ++num_suites; | 40 + ++num_suites; |
61 + } | 41 + } |
62 + if (fallbackSCSV) { | 42 + if (fallbackSCSV) { |
63 + ++num_suites; | 43 + ++num_suites; |
64 } | 44 } |
65 | 45 |
66 /* count compression methods */ | 46 /* count compression methods */ |
67 @@ -5322,6 +5332,14 @@ ssl3_SendClientHello(sslSocket *ss, PRBool resending) | 47 @@ -5353,6 +5365,15 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
68 } | 48 } |
69 actual_count++; | 49 actual_count++; |
70 } | 50 } |
71 + if (fallbackSCSV) { | 51 + if (fallbackSCSV) { |
72 + rv = ssl3_AppendHandshakeNumber(ss, TLS_FALLBACK_SCSV, | 52 + rv = ssl3_AppendHandshakeNumber(ss, TLS_FALLBACK_SCSV, |
73 + sizeof(ssl3CipherSuite)); | 53 + sizeof(ssl3CipherSuite)); |
74 + if (rv != SECSuccess) { | 54 + if (rv != SECSuccess) { |
| 55 + if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
75 + return rv; /* err set by ssl3_AppendHandshake* */ | 56 + return rv; /* err set by ssl3_AppendHandshake* */ |
76 + } | 57 + } |
77 + actual_count++; | 58 + actual_count++; |
78 + } | 59 + } |
79 for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { | 60 for (i = 0; i < ssl_V3_SUITES_IMPLEMENTED; i++) { |
80 ssl3CipherSuiteCfg *suite = &ss->cipherSuites[i]; | 61 ssl3CipherSuiteCfg *suite = &ss->cipherSuites[i]; |
81 if (config_match(suite, ss->ssl3.policy, PR_TRUE, &ss->vrange)) { | 62 if (config_match(suite, ss->ssl3.policy, PR_TRUE, &ss->vrange)) { |
82 @@ -8037,6 +8055,19 @@ ssl3_HandleClientHello(sslSocket *ss, SSL3Opaque *b, PRUi
nt32 length) | 63 @@ -5416,6 +5437,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
| 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 |
83 goto loser; /* malformed */ | 72 goto loser; /* malformed */ |
84 } | 73 } |
85 | 74 |
86 + /* If the ClientHello version is less than our maximum version, check for a | 75 + /* If the ClientHello version is less than our maximum version, check for a |
87 + * TLS_FALLBACK_SCSV and reject the connection if found. */ | 76 + * TLS_FALLBACK_SCSV and reject the connection if found. */ |
88 + if (ss->vrange.max > ss->clientHelloVersion) { | 77 + if (ss->vrange.max > ss->clientHelloVersion) { |
89 + for (i = 0; i + 1 < suites.len; i += 2) { | 78 + for (i = 0; i + 1 < suites.len; i += 2) { |
90 + PRUint16 suite_i = (suites.data[i] << 8) | suites.data[i + 1]; | 79 + PRUint16 suite_i = (suites.data[i] << 8) | suites.data[i + 1]; |
91 + if (suite_i != TLS_FALLBACK_SCSV) | 80 + if (suite_i != TLS_FALLBACK_SCSV) |
92 + continue; | 81 + continue; |
93 + desc = inappropriate_fallback; | 82 + desc = inappropriate_fallback; |
94 + errCode = SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT; | 83 + errCode = SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT; |
95 + goto alert_loser; | 84 + goto alert_loser; |
96 + } | 85 + } |
97 + } | 86 + } |
98 + | 87 + |
99 /* grab the list of compression methods. */ | 88 /* grab the list of compression methods. */ |
100 rv = ssl3_ConsumeHandshakeVariable(ss, &comps, 1, &b, &length); | 89 rv = ssl3_ConsumeHandshakeVariable(ss, &comps, 1, &b, &length); |
101 if (rv != SECSuccess) { | 90 if (rv != SECSuccess) { |
102 diff --git a/nss/lib/ssl/ssl3prot.h b/nss/lib/ssl/ssl3prot.h | 91 diff -pu a/nss/lib/ssl/ssl3prot.h b/nss/lib/ssl/ssl3prot.h |
103 index 0eab970..4c19ade 100644 | 92 --- a/nss/lib/ssl/ssl3prot.h» 2014-01-03 19:39:28.442012014 -0800 |
104 --- a/nss/lib/ssl/ssl3prot.h | 93 +++ b/nss/lib/ssl/ssl3prot.h» 2014-01-03 19:44:54.857349534 -0800 |
105 +++ b/nss/lib/ssl/ssl3prot.h | |
106 @@ -98,6 +98,7 @@ typedef enum { | 94 @@ -98,6 +98,7 @@ typedef enum { |
107 protocol_version = 70, | 95 protocol_version = 70, |
108 insufficient_security = 71, | 96 insufficient_security = 71, |
109 internal_error = 80, | 97 internal_error = 80, |
110 + inappropriate_fallback = 86, /* could also be sent for SSLv3 */ | 98 + inappropriate_fallback = 86, /* could also be sent for SSLv3 */ |
111 user_canceled = 90, | 99 user_canceled = 90, |
112 no_renegotiation = 100, | 100 no_renegotiation = 100, |
113 | 101 |
114 diff --git a/nss/lib/ssl/sslerr.h b/nss/lib/ssl/sslerr.h | 102 diff -pu a/nss/lib/ssl/sslerr.h b/nss/lib/ssl/sslerr.h |
115 index 5a949c9..82ae7df 100644 | 103 --- a/nss/lib/ssl/sslerr.h» 2014-01-03 19:39:28.442012014 -0800 |
116 --- a/nss/lib/ssl/sslerr.h | 104 +++ b/nss/lib/ssl/sslerr.h» 2014-01-03 19:44:54.877349862 -0800 |
117 +++ b/nss/lib/ssl/sslerr.h | 105 @@ -196,6 +196,7 @@ SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM |
118 @@ -196,6 +196,7 @@ SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM = (SSL_ERROR_BASE +
128), | |
119 SSL_ERROR_BAD_CHANNEL_ID_DATA = (SSL_ERROR_BASE + 129), | 106 SSL_ERROR_BAD_CHANNEL_ID_DATA = (SSL_ERROR_BASE + 129), |
120 SSL_ERROR_INVALID_CHANNEL_ID_KEY = (SSL_ERROR_BASE + 130), | 107 SSL_ERROR_INVALID_CHANNEL_ID_KEY = (SSL_ERROR_BASE + 130), |
121 SSL_ERROR_GET_CHANNEL_ID_FAILED = (SSL_ERROR_BASE + 131), | 108 SSL_ERROR_GET_CHANNEL_ID_FAILED = (SSL_ERROR_BASE + 131), |
122 +SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT = (SSL_ERROR_BASE + 132), | 109 +SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT = (SSL_ERROR_BASE + 132), |
123 | 110 |
124 SSL_ERROR_END_OF_LIST /* let the c compiler determine the value of this. */ | 111 SSL_ERROR_END_OF_LIST /* let the c compiler determine the value of this. */ |
125 } SSLErrorCodes; | 112 } SSLErrorCodes; |
126 diff --git a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h | 113 diff -pu a/nss/lib/ssl/SSLerrs.h b/nss/lib/ssl/SSLerrs.h |
127 index 7521dba..6d0bc15 100644 | 114 --- a/nss/lib/ssl/SSLerrs.h» 2014-01-03 19:39:28.442012014 -0800 |
128 --- a/nss/lib/ssl/sslimpl.h | 115 +++ b/nss/lib/ssl/SSLerrs.h» 2014-01-03 19:44:54.907350351 -0800 |
129 +++ b/nss/lib/ssl/sslimpl.h | 116 @@ -421,3 +421,8 @@ ER3(SSL_ERROR_INVALID_CHANNEL_ID_KEY, (S |
| 117 |
| 118 ER3(SSL_ERROR_GET_CHANNEL_ID_FAILED, (SSL_ERROR_BASE + 131), |
| 119 "The application could not get a TLS Channel ID.") |
| 120 + |
| 121 +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" |
| 123 +" handshake failure, but the server indicated that it should not have been" |
| 124 +" needed.") |
| 125 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 |
| 127 +++ b/nss/lib/ssl/ssl.h»2014-01-03 19:44:54.907350351 -0800 |
| 128 @@ -163,6 +163,8 @@ SSL_IMPORT PRFileDesc *DTLS_ImportFD(PRF |
| 129 #define SSL_ENABLE_OCSP_STAPLING 24 /* Request OCSP stapling (client) */ |
| 130 /* Request Signed Certificate Timestamps via TLS extension (client) */ |
| 131 #define SSL_ENABLE_SIGNED_CERT_TIMESTAMPS 25 |
| 132 +#define SSL_ENABLE_FALLBACK_SCSV 26 /* Send fallback SCSV in |
| 133 + * handshakes. */ |
| 134 |
| 135 #ifdef SSL_DEPRECATED_FUNCTION |
| 136 /* Old deprecated function names */ |
| 137 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 |
| 139 +++ b/nss/lib/ssl/sslimpl.h» 2014-01-03 19:44:54.907350351 -0800 |
130 @@ -336,6 +336,7 @@ typedef struct sslOptionsStr { | 140 @@ -336,6 +336,7 @@ typedef struct sslOptionsStr { |
131 unsigned int cbcRandomIV : 1; /* 24 */ | 141 unsigned int cbcRandomIV : 1; /* 24 */ |
132 unsigned int enableOCSPStapling : 1; /* 25 */ | 142 unsigned int enableOCSPStapling : 1; /* 25 */ |
133 unsigned int enableSignedCertTimestamps : 1; /* 26 */ | 143 unsigned int enableSignedCertTimestamps : 1; /* 26 */ |
134 + unsigned int enableFallbackSCSV : 1; /* 27 */ | 144 + unsigned int enableFallbackSCSV : 1; /* 27 */ |
135 } sslOptions; | 145 } sslOptions; |
136 | 146 |
137 typedef enum { sslHandshakingUndetermined = 0, | 147 typedef enum { sslHandshakingUndetermined = 0, |
138 diff --git a/nss/lib/ssl/sslproto.h b/nss/lib/ssl/sslproto.h | 148 diff -pu a/nss/lib/ssl/sslproto.h b/nss/lib/ssl/sslproto.h |
139 index 6b60a28..621ef37 100644 | 149 --- a/nss/lib/ssl/sslproto.h» 2014-01-03 19:43:07.025586219 -0800 |
140 --- a/nss/lib/ssl/sslproto.h | 150 +++ b/nss/lib/ssl/sslproto.h» 2014-01-03 19:44:54.907350351 -0800 |
141 +++ b/nss/lib/ssl/sslproto.h | |
142 @@ -172,6 +172,11 @@ | 151 @@ -172,6 +172,11 @@ |
143 */ | 152 */ |
144 #define TLS_EMPTY_RENEGOTIATION_INFO_SCSV 0x00FF | 153 #define TLS_EMPTY_RENEGOTIATION_INFO_SCSV 0x00FF |
145 | 154 |
146 +/* TLS_FALLBACK_SCSV is a signaling cipher suite value that indicates that a | 155 +/* TLS_FALLBACK_SCSV is a signaling cipher suite value that indicates that a |
147 + * handshake is the result of TLS version fallback. This value is not IANA | 156 + * handshake is the result of TLS version fallback. This value is not IANA |
148 + * assigned. */ | 157 + * assigned. */ |
149 +#define TLS_FALLBACK_SCSV 0x5600 | 158 +#define TLS_FALLBACK_SCSV 0x5600 |
150 + | 159 + |
151 /* Cipher Suite Values starting with 0xC000 are defined in informational | 160 /* Cipher Suite Values starting with 0xC000 are defined in informational |
152 * RFCs. | 161 * RFCs. |
153 */ | 162 */ |
154 diff --git a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c | 163 diff -pu a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c |
155 index 9f8286c..f7d44d4 100644 | 164 --- a/nss/lib/ssl/sslsock.c» 2014-01-03 19:44:44.807185186 -0800 |
156 --- a/nss/lib/ssl/sslsock.c | 165 +++ b/nss/lib/ssl/sslsock.c» 2014-01-03 19:44:54.907350351 -0800 |
157 +++ b/nss/lib/ssl/sslsock.c | 166 @@ -86,7 +86,8 @@ static sslOptions ssl_defaults = { |
158 @@ -174,7 +174,8 @@ static sslOptions ssl_defaults = { | |
159 PR_FALSE, /* enableFalseStart */ | 167 PR_FALSE, /* enableFalseStart */ |
160 PR_TRUE, /* cbcRandomIV */ | 168 PR_TRUE, /* cbcRandomIV */ |
161 PR_FALSE, /* enableOCSPStapling */ | 169 PR_FALSE, /* enableOCSPStapling */ |
162 - PR_FALSE /* enableSignedCertTimestamps */ | 170 - PR_FALSE /* enableSignedCertTimestamps */ |
163 + PR_FALSE, /* enableSignedCertTimestamps */ | 171 + PR_FALSE, /* enableSignedCertTimestamps */ |
164 + PR_FALSE /* enableFallbackSCSV */ | 172 + PR_FALSE /* enableFallbackSCSV */ |
165 }; | 173 }; |
166 | 174 |
167 /* | 175 /* |
168 @@ -870,6 +871,10 @@ SSL_OptionSet(PRFileDesc *fd, PRInt32 which, PRBool on) | 176 @@ -782,6 +783,10 @@ SSL_OptionSet(PRFileDesc *fd, PRInt32 wh |
169 ss->opt.enableSignedCertTimestamps = on; | 177 ss->opt.enableSignedCertTimestamps = on; |
170 break; | 178 break; |
171 | 179 |
172 + case SSL_ENABLE_FALLBACK_SCSV: | 180 + case SSL_ENABLE_FALLBACK_SCSV: |
173 + ss->opt.enableFallbackSCSV = on; | 181 + ss->opt.enableFallbackSCSV = on; |
174 + break; | 182 + break; |
175 + | 183 + |
176 default: | 184 default: |
177 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 185 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
178 rv = SECFailure; | 186 rv = SECFailure; |
179 @@ -943,6 +948,7 @@ SSL_OptionGet(PRFileDesc *fd, PRInt32 which, PRBool *pOn) | 187 @@ -855,6 +860,7 @@ SSL_OptionGet(PRFileDesc *fd, PRInt32 wh |
180 case SSL_ENABLE_SIGNED_CERT_TIMESTAMPS: | 188 case SSL_ENABLE_SIGNED_CERT_TIMESTAMPS: |
181 on = ss->opt.enableSignedCertTimestamps; | 189 on = ss->opt.enableSignedCertTimestamps; |
182 break; | 190 break; |
183 + case SSL_ENABLE_FALLBACK_SCSV: on = ss->opt.enableFallbackSCSV; break; | 191 + case SSL_ENABLE_FALLBACK_SCSV: on = ss->opt.enableFallbackSCSV; break; |
184 | 192 |
185 default: | 193 default: |
186 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 194 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
187 @@ -1007,6 +1013,9 @@ SSL_OptionGetDefault(PRInt32 which, PRBool *pOn) | 195 @@ -919,6 +925,9 @@ SSL_OptionGetDefault(PRInt32 which, PRBo |
188 case SSL_ENABLE_SIGNED_CERT_TIMESTAMPS: | 196 case SSL_ENABLE_SIGNED_CERT_TIMESTAMPS: |
189 on = ssl_defaults.enableSignedCertTimestamps; | 197 on = ssl_defaults.enableSignedCertTimestamps; |
190 break; | 198 break; |
191 + case SSL_ENABLE_FALLBACK_SCSV: | 199 + case SSL_ENABLE_FALLBACK_SCSV: |
192 + on = ssl_defaults.enableFallbackSCSV; | 200 + on = ssl_defaults.enableFallbackSCSV; |
193 + break; | 201 + break; |
194 | 202 |
195 default: | 203 default: |
196 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 204 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
197 @@ -1178,6 +1187,10 @@ SSL_OptionSetDefault(PRInt32 which, PRBool on) | 205 @@ -1090,6 +1099,10 @@ SSL_OptionSetDefault(PRInt32 which, PRBo |
198 ssl_defaults.enableSignedCertTimestamps = on; | 206 ssl_defaults.enableSignedCertTimestamps = on; |
199 break; | 207 break; |
200 | 208 |
201 + case SSL_ENABLE_FALLBACK_SCSV: | 209 + case SSL_ENABLE_FALLBACK_SCSV: |
202 + ssl_defaults.enableFallbackSCSV = on; | 210 + ssl_defaults.enableFallbackSCSV = on; |
203 + break; | 211 + break; |
204 + | 212 + |
205 default: | 213 default: |
206 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 214 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
207 return SECFailure; | 215 return SECFailure; |
OLD | NEW |