OLD | NEW |
1 diff -pu -r a/net/third_party/nss/ssl/ssl3con.c b/net/third_party/nss/ssl/ssl3co
n.c | 1 diff -pu a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c |
2 --- a/net/third_party/nss/ssl/ssl3con.c»2012-11-09 15:57:12.838336618 -0800 | 2 --- a/nss/lib/ssl/ssl3con.c» 2013-04-27 09:23:52.361985404 -0700 |
3 +++ b/net/third_party/nss/ssl/ssl3con.c»2012-11-09 16:11:46.721027895 -0800 | 3 +++ b/nss/lib/ssl/ssl3con.c» 2013-04-27 09:24:01.302111964 -0700 |
4 @@ -53,6 +53,7 @@ static SECStatus ssl3_SendCertificate( | 4 @@ -54,6 +54,7 @@ static SECStatus ssl3_SendCertificateSta |
5 static SECStatus ssl3_SendEmptyCertificate( sslSocket *ss); | 5 static SECStatus ssl3_SendEmptyCertificate( sslSocket *ss); |
6 static SECStatus ssl3_SendCertificateRequest(sslSocket *ss); | 6 static SECStatus ssl3_SendCertificateRequest(sslSocket *ss); |
7 static SECStatus ssl3_SendNextProto( sslSocket *ss); | 7 static SECStatus ssl3_SendNextProto( sslSocket *ss); |
8 +static SECStatus ssl3_SendEncryptedExtensions(sslSocket *ss); | 8 +static SECStatus ssl3_SendEncryptedExtensions(sslSocket *ss); |
9 static SECStatus ssl3_SendFinished( sslSocket *ss, PRInt32 flags); | 9 static SECStatus ssl3_SendFinished( sslSocket *ss, PRInt32 flags); |
10 static SECStatus ssl3_SendServerHello( sslSocket *ss); | 10 static SECStatus ssl3_SendServerHello( sslSocket *ss); |
11 static SECStatus ssl3_SendServerHelloDone( sslSocket *ss); | 11 static SECStatus ssl3_SendServerHelloDone( sslSocket *ss); |
12 @@ -5330,6 +5331,15 @@ ssl3_HandleServerHello(sslSocket *ss, SS | 12 @@ -5454,6 +5455,15 @@ ssl3_HandleServerHello(sslSocket *ss, SS |
13 } | 13 } |
14 #endif /* NSS_PLATFORM_CLIENT_AUTH */ | 14 #endif /* NSS_PLATFORM_CLIENT_AUTH */ |
15 | 15 |
16 + if (ss->ssl3.channelID != NULL) { | 16 + if (ss->ssl3.channelID != NULL) { |
17 + SECKEY_DestroyPrivateKey(ss->ssl3.channelID); | 17 + SECKEY_DestroyPrivateKey(ss->ssl3.channelID); |
18 + ss->ssl3.channelID = NULL; | 18 + ss->ssl3.channelID = NULL; |
19 + } | 19 + } |
20 + if (ss->ssl3.channelIDPub != NULL) { | 20 + if (ss->ssl3.channelIDPub != NULL) { |
21 + SECKEY_DestroyPublicKey(ss->ssl3.channelIDPub); | 21 + SECKEY_DestroyPublicKey(ss->ssl3.channelIDPub); |
22 + ss->ssl3.channelIDPub = NULL; | 22 + ss->ssl3.channelIDPub = NULL; |
23 + } | 23 + } |
24 + | 24 + |
25 temp = ssl3_ConsumeHandshakeNumber(ss, 2, &b, &length); | 25 temp = ssl3_ConsumeHandshakeNumber(ss, 2, &b, &length); |
26 if (temp < 0) { | 26 if (temp < 0) { |
27 goto loser; /* alert has been sent */ | 27 goto loser; /* alert has been sent */ |
28 @@ -5603,7 +5613,7 @@ ssl3_HandleServerHello(sslSocket *ss, SS | 28 @@ -5726,7 +5736,7 @@ ssl3_HandleServerHello(sslSocket *ss, SS |
29 if (rv != SECSuccess) { | 29 if (rv != SECSuccess) { |
30 goto alert_loser; /* err code was set */ | 30 goto alert_loser; /* err code was set */ |
31 } | 31 } |
32 - return SECSuccess; | 32 - return SECSuccess; |
33 + goto winner; | 33 + goto winner; |
34 } while (0); | 34 } while (0); |
35 | 35 |
36 if (sid_match) | 36 if (sid_match) |
37 @@ -5629,6 +5639,27 @@ ssl3_HandleServerHello(sslSocket *ss, SS | 37 @@ -5752,6 +5762,27 @@ ssl3_HandleServerHello(sslSocket *ss, SS |
38 | 38 |
39 ss->ssl3.hs.isResuming = PR_FALSE; | 39 ss->ssl3.hs.isResuming = PR_FALSE; |
40 ss->ssl3.hs.ws = wait_server_cert; | 40 ss->ssl3.hs.ws = wait_server_cert; |
41 + | 41 + |
42 +winner: | 42 +winner: |
43 + /* If we will need a ChannelID key then we make the callback now. This | 43 + /* If we will need a ChannelID key then we make the callback now. This |
44 + * allows the handshake to be restarted cleanly if the callback returns | 44 + * allows the handshake to be restarted cleanly if the callback returns |
45 + * SECWouldBlock. */ | 45 + * SECWouldBlock. */ |
46 + if (ssl3_ExtensionNegotiated(ss, ssl_channel_id_xtn)) { | 46 + if (ssl3_ExtensionNegotiated(ss, ssl_channel_id_xtn)) { |
47 + rv = ss->getChannelID(ss->getChannelIDArg, ss->fd, | 47 + rv = ss->getChannelID(ss->getChannelIDArg, ss->fd, |
48 + &ss->ssl3.channelIDPub, &ss->ssl3.channelID); | 48 + &ss->ssl3.channelIDPub, &ss->ssl3.channelID); |
49 + if (rv == SECWouldBlock) { | 49 + if (rv == SECWouldBlock) { |
50 + ssl3_SetAlwaysBlock(ss); | 50 + ssl3_SetAlwaysBlock(ss); |
51 + return rv; | 51 + return rv; |
52 + } | 52 + } |
53 + if (rv != SECSuccess || | 53 + if (rv != SECSuccess || |
54 + ss->ssl3.channelIDPub == NULL || | 54 + ss->ssl3.channelIDPub == NULL || |
55 + ss->ssl3.channelID == NULL) { | 55 + ss->ssl3.channelID == NULL) { |
56 + PORT_SetError(SSL_ERROR_GET_CHANNEL_ID_FAILED); | 56 + PORT_SetError(SSL_ERROR_GET_CHANNEL_ID_FAILED); |
57 + desc = internal_error; | 57 + desc = internal_error; |
58 + goto alert_loser; | 58 + goto alert_loser; |
59 + } | 59 + } |
60 + } | 60 + } |
61 + | 61 + |
62 return SECSuccess; | 62 return SECSuccess; |
63 | 63 |
64 alert_loser: | 64 alert_loser: |
65 @@ -6385,6 +6416,10 @@ ssl3_SendClientSecondRound(sslSocket *ss | 65 @@ -6506,6 +6537,10 @@ ssl3_SendClientSecondRound(sslSocket *ss |
66 goto loser; /* err code was set. */ | 66 goto loser; /* err code was set. */ |
67 } | 67 } |
68 } | 68 } |
69 + rv = ssl3_SendEncryptedExtensions(ss); | 69 + rv = ssl3_SendEncryptedExtensions(ss); |
70 + if (rv != SECSuccess) { | 70 + if (rv != SECSuccess) { |
71 + goto loser; /* err code was set. */ | 71 + goto loser; /* err code was set. */ |
72 + } | 72 + } |
73 | 73 |
74 rv = ssl3_SendFinished(ss, 0); | 74 rv = ssl3_SendFinished(ss, 0); |
75 if (rv != SECSuccess) { | 75 if (rv != SECSuccess) { |
76 @@ -9102,6 +9137,164 @@ ssl3_RecordKeyLog(sslSocket *ss) | 76 @@ -9286,6 +9321,164 @@ ssl3_RecordKeyLog(sslSocket *ss) |
77 return; | 77 return; |
78 } | 78 } |
79 | 79 |
80 +/* called from ssl3_SendClientSecondRound | 80 +/* called from ssl3_SendClientSecondRound |
81 + * ssl3_HandleFinished | 81 + * ssl3_HandleFinished |
82 + */ | 82 + */ |
83 +static SECStatus | 83 +static SECStatus |
84 +ssl3_SendEncryptedExtensions(sslSocket *ss) | 84 +ssl3_SendEncryptedExtensions(sslSocket *ss) |
85 +{ | 85 +{ |
86 + static const char CHANNEL_ID_MAGIC[] = "TLS Channel ID signature"; | 86 + static const char CHANNEL_ID_MAGIC[] = "TLS Channel ID signature"; |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 + ss->handshake = ssl_GatherRecord1stHandshake; | 231 + ss->handshake = ssl_GatherRecord1stHandshake; |
232 + ss->ssl3.channelID = channelID; | 232 + ss->ssl3.channelID = channelID; |
233 + ss->ssl3.channelIDPub = channelIDPub; | 233 + ss->ssl3.channelIDPub = channelIDPub; |
234 + | 234 + |
235 + return SECSuccess; | 235 + return SECSuccess; |
236 +} | 236 +} |
237 + | 237 + |
238 /* called from ssl3_HandleServerHelloDone | 238 /* called from ssl3_HandleServerHelloDone |
239 * ssl3_HandleClientHello | 239 * ssl3_HandleClientHello |
240 * ssl3_HandleFinished | 240 * ssl3_HandleFinished |
241 @@ -9355,11 +9548,16 @@ ssl3_HandleFinished(sslSocket *ss, SSL3O | 241 @@ -9539,11 +9732,16 @@ ssl3_HandleFinished(sslSocket *ss, SSL3O |
242 flags = ssl_SEND_FLAG_FORCE_INTO_BUFFER; | 242 flags = ssl_SEND_FLAG_FORCE_INTO_BUFFER; |
243 } | 243 } |
244 | 244 |
245 - if (!isServer && !ss->firstHsDone) { | 245 - if (!isServer && !ss->firstHsDone) { |
246 - rv = ssl3_SendNextProto(ss); | 246 - rv = ssl3_SendNextProto(ss); |
247 - if (rv != SECSuccess) { | 247 - if (rv != SECSuccess) { |
248 - goto xmit_loser; /* err code was set. */ | 248 - goto xmit_loser; /* err code was set. */ |
249 + if (!isServer) { | 249 + if (!isServer) { |
250 + if (!ss->firstHsDone) { | 250 + if (!ss->firstHsDone) { |
251 + rv = ssl3_SendNextProto(ss); | 251 + rv = ssl3_SendNextProto(ss); |
252 + if (rv != SECSuccess) { | 252 + if (rv != SECSuccess) { |
253 + goto xmit_loser; /* err code was set. */ | 253 + goto xmit_loser; /* err code was set. */ |
254 + } | 254 + } |
255 } | 255 } |
256 + rv = ssl3_SendEncryptedExtensions(ss); | 256 + rv = ssl3_SendEncryptedExtensions(ss); |
257 + if (rv != SECSuccess) | 257 + if (rv != SECSuccess) |
258 + goto xmit_loser; /* err code was set. */ | 258 + goto xmit_loser; /* err code was set. */ |
259 } | 259 } |
260 | 260 |
261 if (IS_DTLS(ss)) { | 261 if (IS_DTLS(ss)) { |
262 @@ -10623,6 +10821,11 @@ ssl3_DestroySSL3Info(sslSocket *ss) | 262 @@ -10985,6 +11183,11 @@ ssl3_DestroySSL3Info(sslSocket *ss) |
263 ssl_FreePlatformKey(ss->ssl3.platformClientKey); | 263 ssl_FreePlatformKey(ss->ssl3.platformClientKey); |
264 #endif /* NSS_PLATFORM_CLIENT_AUTH */ | 264 #endif /* NSS_PLATFORM_CLIENT_AUTH */ |
265 | 265 |
266 + if (ss->ssl3.channelID) | 266 + if (ss->ssl3.channelID) |
267 + SECKEY_DestroyPrivateKey(ss->ssl3.channelID); | 267 + SECKEY_DestroyPrivateKey(ss->ssl3.channelID); |
268 + if (ss->ssl3.channelIDPub) | 268 + if (ss->ssl3.channelIDPub) |
269 + SECKEY_DestroyPublicKey(ss->ssl3.channelIDPub); | 269 + SECKEY_DestroyPublicKey(ss->ssl3.channelIDPub); |
270 + | 270 + |
271 if (ss->ssl3.peerCertArena != NULL) | 271 if (ss->ssl3.peerCertArena != NULL) |
272 ssl3_CleanupPeerCerts(ss); | 272 ssl3_CleanupPeerCerts(ss); |
273 | 273 |
274 diff -pu -r a/net/third_party/nss/ssl/ssl3ext.c b/net/third_party/nss/ssl/ssl3ex
t.c | 274 diff -pu a/nss/lib/ssl/ssl3ext.c b/nss/lib/ssl/ssl3ext.c |
275 --- a/net/third_party/nss/ssl/ssl3ext.c»2012-11-09 15:57:12.838336618 -0800 | 275 --- a/nss/lib/ssl/ssl3ext.c» 2013-04-27 09:21:28.339946428 -0700 |
276 +++ b/net/third_party/nss/ssl/ssl3ext.c»2012-11-09 16:04:14.414475097 -0800 | 276 +++ b/nss/lib/ssl/ssl3ext.c» 2013-04-27 09:36:58.433109462 -0700 |
277 @@ -61,6 +61,10 @@ static PRInt32 ssl3_SendUseSRTPXtn(sslSo | 277 @@ -61,6 +61,10 @@ static PRInt32 ssl3_SendUseSRTPXtn(sslSo |
278 PRUint32 maxBytes); | 278 PRUint32 maxBytes); |
279 static SECStatus ssl3_HandleUseSRTPXtn(sslSocket * ss, PRUint16 ex_type, | 279 static SECStatus ssl3_HandleUseSRTPXtn(sslSocket * ss, PRUint16 ex_type, |
280 SECItem *data); | 280 SECItem *data); |
281 +static SECStatus ssl3_ClientHandleChannelIDXtn(sslSocket *ss, | 281 +static SECStatus ssl3_ClientHandleChannelIDXtn(sslSocket *ss, |
282 + PRUint16 ex_type, SECItem *data); | 282 + PRUint16 ex_type, SECItem *data); |
283 +static PRInt32 ssl3_ClientSendChannelIDXtn(sslSocket *ss, PRBool append, | 283 +static PRInt32 ssl3_ClientSendChannelIDXtn(sslSocket *ss, PRBool append, |
284 + PRUint32 maxBytes); | 284 + PRUint32 maxBytes); |
285 | 285 static SECStatus ssl3_ServerSendStatusRequestXtn(sslSocket * ss, |
286 /* | 286 PRBool append, PRUint32 maxBytes); |
287 * Write bytes. Using this function means the SECItem structure | 287 static SECStatus ssl3_ServerHandleStatusRequestXtn(sslSocket *ss, |
288 @@ -234,6 +238,7 @@ static const ssl3HelloExtensionHandler s | 288 @@ -244,6 +248,7 @@ static const ssl3HelloExtensionHandler s |
289 { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn }, | 289 { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn }, |
290 { ssl_next_proto_nego_xtn, &ssl3_ClientHandleNextProtoNegoXtn }, | 290 { ssl_next_proto_nego_xtn, &ssl3_ClientHandleNextProtoNegoXtn }, |
291 { ssl_use_srtp_xtn, &ssl3_HandleUseSRTPXtn }, | 291 { ssl_use_srtp_xtn, &ssl3_HandleUseSRTPXtn }, |
292 + { ssl_channel_id_xtn, &ssl3_ClientHandleChannelIDXtn }, | 292 + { ssl_channel_id_xtn, &ssl3_ClientHandleChannelIDXtn }, |
293 { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn }, | 293 { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn }, |
294 { -1, NULL } | 294 { -1, NULL } |
295 }; | 295 }; |
296 @@ -260,6 +265,7 @@ ssl3HelloExtensionSender clientHelloSend | 296 @@ -270,6 +275,7 @@ ssl3HelloExtensionSender clientHelloSend |
297 { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn }, | 297 { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn }, |
298 { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn }, | 298 { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn }, |
299 { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn }, | 299 { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn }, |
300 + { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn }, | 300 + { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn }, |
301 { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn } | 301 { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn } |
302 /* any extra entries will appear as { 0, NULL } */ | 302 /* any extra entries will appear as { 0, NULL } */ |
303 }; | 303 }; |
304 @@ -650,6 +656,52 @@ loser: | 304 @@ -655,6 +661,52 @@ ssl3_ClientSendNextProtoNegoXtn(sslSocke |
305 return -1; | 305 } |
306 } | |
307 | 306 |
| 307 return extension_length; |
| 308 + |
| 309 +loser: |
| 310 + return -1; |
| 311 +} |
| 312 + |
308 +static SECStatus | 313 +static SECStatus |
309 +ssl3_ClientHandleChannelIDXtn(sslSocket *ss, PRUint16 ex_type, | 314 +ssl3_ClientHandleChannelIDXtn(sslSocket *ss, PRUint16 ex_type, |
310 + SECItem *data) | 315 + SECItem *data) |
311 +{ | 316 +{ |
312 + PORT_Assert(ss->getChannelID != NULL); | 317 + PORT_Assert(ss->getChannelID != NULL); |
313 + | 318 + |
314 + if (data->len) { | 319 + if (data->len) { |
315 + PORT_SetError(SSL_ERROR_BAD_CHANNEL_ID_DATA); | 320 + PORT_SetError(SSL_ERROR_BAD_CHANNEL_ID_DATA); |
316 + return SECFailure; | 321 + return SECFailure; |
317 + } | 322 + } |
(...skipping 21 matching lines...) Expand all Loading... |
339 + if (rv != SECSuccess) | 344 + if (rv != SECSuccess) |
340 + goto loser; | 345 + goto loser; |
341 + rv = ssl3_AppendHandshakeNumber(ss, 0, 2); | 346 + rv = ssl3_AppendHandshakeNumber(ss, 0, 2); |
342 + if (rv != SECSuccess) | 347 + if (rv != SECSuccess) |
343 + goto loser; | 348 + goto loser; |
344 + ss->xtnData.advertised[ss->xtnData.numAdvertised++] = | 349 + ss->xtnData.advertised[ss->xtnData.numAdvertised++] = |
345 + ssl_channel_id_xtn; | 350 + ssl_channel_id_xtn; |
346 + } | 351 + } |
347 + | 352 + |
348 + return extension_length; | 353 + return extension_length; |
349 + | 354 |
350 +loser: | 355 loser: |
351 + return -1; | 356 return -1; |
352 +} | 357 diff -pu a/nss/lib/ssl/ssl3prot.h b/nss/lib/ssl/ssl3prot.h |
353 + | 358 --- a/nss/lib/ssl/ssl3prot.h» 2013-04-27 09:17:17.216390477 -0700 |
354 SECStatus | 359 +++ b/nss/lib/ssl/ssl3prot.h» 2013-04-27 09:24:01.302111964 -0700 |
355 ssl3_ClientHandleStatusRequestXtn(sslSocket *ss, PRUint16 ex_type, | |
356 » » » » SECItem *data) | |
357 diff -pu -r a/net/third_party/nss/ssl/ssl3prot.h b/net/third_party/nss/ssl/ssl3p
rot.h | |
358 --- a/net/third_party/nss/ssl/ssl3prot.h» 2012-11-09 15:34:12.258133766 -0
800 | |
359 +++ b/net/third_party/nss/ssl/ssl3prot.h» 2012-11-09 15:58:06.979126989 -0
800 | |
360 @@ -130,7 +130,8 @@ typedef enum { | 360 @@ -130,7 +130,8 @@ typedef enum { |
361 client_key_exchange = 16, | 361 client_key_exchange = 16, |
362 finished = 20, | 362 finished = 20, |
363 certificate_status»= 22, | 363 certificate_status = 22, |
364 - next_proto = 67 | 364 - next_proto = 67 |
365 + next_proto = 67, | 365 + next_proto = 67, |
366 + encrypted_extensions= 203 | 366 + encrypted_extensions= 203 |
367 } SSL3HandshakeType; | 367 } SSL3HandshakeType; |
368 | 368 |
369 typedef struct { | 369 typedef struct { |
370 diff -pu -r a/net/third_party/nss/ssl/sslauth.c b/net/third_party/nss/ssl/sslaut
h.c | 370 diff -pu a/nss/lib/ssl/sslauth.c b/nss/lib/ssl/sslauth.c |
371 --- a/net/third_party/nss/ssl/sslauth.c»2012-11-09 15:39:36.892892416 -0800 | 371 --- a/nss/lib/ssl/sslauth.c» 2013-04-27 09:21:28.339946428 -0700 |
372 +++ b/net/third_party/nss/ssl/sslauth.c»2012-11-09 15:58:06.979126989 -0800 | 372 +++ b/nss/lib/ssl/sslauth.c» 2013-04-27 09:24:01.302111964 -0700 |
373 @@ -219,6 +219,24 @@ SSL_GetClientAuthDataHook(PRFileDesc *s, | 373 @@ -220,6 +220,24 @@ SSL_GetClientAuthDataHook(PRFileDesc *s, |
374 return SECSuccess; | 374 return SECSuccess; |
375 } | 375 } |
376 | 376 |
377 +SECStatus | 377 +SECStatus |
378 +SSL_SetClientChannelIDCallback(PRFileDesc *fd, | 378 +SSL_SetClientChannelIDCallback(PRFileDesc *fd, |
379 + SSLClientChannelIDCallback callback, | 379 + SSLClientChannelIDCallback callback, |
380 + void *arg) { | 380 + void *arg) { |
381 + sslSocket *ss = ssl_FindSocket(fd); | 381 + sslSocket *ss = ssl_FindSocket(fd); |
382 + | 382 + |
383 + if (!ss) { | 383 + if (!ss) { |
384 + SSL_DBG(("%d: SSL[%d]: bad socket in SSL_SetClientChannelIDCallback", | 384 + SSL_DBG(("%d: SSL[%d]: bad socket in SSL_SetClientChannelIDCallback", |
385 + SSL_GETPID(), fd)); | 385 + SSL_GETPID(), fd)); |
386 + return SECFailure; | 386 + return SECFailure; |
387 + } | 387 + } |
388 + | 388 + |
389 + ss->getChannelID = callback; | 389 + ss->getChannelID = callback; |
390 + ss->getChannelIDArg = arg; | 390 + ss->getChannelIDArg = arg; |
391 + | 391 + |
392 + return SECSuccess; | 392 + return SECSuccess; |
393 +} | 393 +} |
394 + | 394 + |
395 #ifdef NSS_PLATFORM_CLIENT_AUTH | 395 #ifdef NSS_PLATFORM_CLIENT_AUTH |
396 /* NEED LOCKS IN HERE. */ | 396 /* NEED LOCKS IN HERE. */ |
397 SECStatus | 397 SECStatus |
398 diff -pu -r a/net/third_party/nss/ssl/sslerr.h b/net/third_party/nss/ssl/sslerr.
h | 398 diff -pu a/nss/lib/ssl/sslerr.h b/nss/lib/ssl/sslerr.h |
399 --- a/net/third_party/nss/ssl/sslerr.h» 2012-11-09 15:34:12.258133766 -0800 | 399 --- a/nss/lib/ssl/sslerr.h» 2013-04-27 09:17:17.216390477 -0700 |
400 +++ b/net/third_party/nss/ssl/sslerr.h» 2012-11-09 16:00:57.921621448 -0800 | 400 +++ b/nss/lib/ssl/sslerr.h» 2013-04-27 09:24:01.302111964 -0700 |
401 @@ -190,6 +190,10 @@ SSL_ERROR_FEATURE_NOT_SUPPORTED_FOR_VERS | 401 @@ -190,6 +190,10 @@ SSL_ERROR_FEATURE_NOT_SUPPORTED_FOR_VERS |
402 | 402 |
403 SSL_ERROR_RX_UNEXPECTED_CERT_STATUS = (SSL_ERROR_BASE + 125), | 403 SSL_ERROR_RX_UNEXPECTED_CERT_STATUS = (SSL_ERROR_BASE + 125), |
404 | 404 |
405 +SSL_ERROR_BAD_CHANNEL_ID_DATA = (SSL_ERROR_BASE + 126), | 405 +SSL_ERROR_BAD_CHANNEL_ID_DATA = (SSL_ERROR_BASE + 126), |
406 +SSL_ERROR_INVALID_CHANNEL_ID_KEY = (SSL_ERROR_BASE + 127), | 406 +SSL_ERROR_INVALID_CHANNEL_ID_KEY = (SSL_ERROR_BASE + 127), |
407 +SSL_ERROR_GET_CHANNEL_ID_FAILED = (SSL_ERROR_BASE + 128), | 407 +SSL_ERROR_GET_CHANNEL_ID_FAILED = (SSL_ERROR_BASE + 128), |
408 + | 408 + |
409 SSL_ERROR_END_OF_LIST /* let the c compiler determine the value of this. */ | 409 SSL_ERROR_END_OF_LIST /* let the c compiler determine the value of this. */ |
410 } SSLErrorCodes; | 410 } SSLErrorCodes; |
411 #endif /* NO_SECURITY_ERROR_ENUM */ | 411 #endif /* NO_SECURITY_ERROR_ENUM */ |
412 diff -pu -r a/net/third_party/nss/ssl/SSLerrs.h b/net/third_party/nss/ssl/SSLerr
s.h | 412 diff -pu a/nss/lib/ssl/SSLerrs.h b/nss/lib/ssl/SSLerrs.h |
413 --- a/net/third_party/nss/ssl/SSLerrs.h»2012-11-09 15:34:12.258133766 -0800 | 413 --- a/nss/lib/ssl/SSLerrs.h» 2013-04-27 09:16:26.795676403 -0700 |
414 +++ b/net/third_party/nss/ssl/SSLerrs.h»2012-11-09 16:00:11.540944794 -0800 | 414 +++ b/nss/lib/ssl/SSLerrs.h» 2013-04-27 09:24:01.302111964 -0700 |
415 @@ -403,3 +403,12 @@ ER3(SSL_ERROR_FEATURE_NOT_SUPPORTED_FOR_ | 415 @@ -403,3 +403,12 @@ ER3(SSL_ERROR_FEATURE_NOT_SUPPORTED_FOR_ |
416 | 416 |
417 ER3(SSL_ERROR_RX_UNEXPECTED_CERT_STATUS, (SSL_ERROR_BASE + 125), | 417 ER3(SSL_ERROR_RX_UNEXPECTED_CERT_STATUS, (SSL_ERROR_BASE + 125), |
418 "SSL received an unexpected Certificate Status handshake message.") | 418 "SSL received an unexpected Certificate Status handshake message.") |
419 + | 419 + |
420 +ER3(SSL_ERROR_BAD_CHANNEL_ID_DATA, (SSL_ERROR_BASE + 126), | 420 +ER3(SSL_ERROR_BAD_CHANNEL_ID_DATA, (SSL_ERROR_BASE + 126), |
421 +"SSL received a malformed TLS Channel ID extension.") | 421 +"SSL received a malformed TLS Channel ID extension.") |
422 + | 422 + |
423 +ER3(SSL_ERROR_INVALID_CHANNEL_ID_KEY, (SSL_ERROR_BASE + 127), | 423 +ER3(SSL_ERROR_INVALID_CHANNEL_ID_KEY, (SSL_ERROR_BASE + 127), |
424 +"The application provided an invalid TLS Channel ID key.") | 424 +"The application provided an invalid TLS Channel ID key.") |
425 + | 425 + |
426 +ER3(SSL_ERROR_GET_CHANNEL_ID_FAILED, (SSL_ERROR_BASE + 128), | 426 +ER3(SSL_ERROR_GET_CHANNEL_ID_FAILED, (SSL_ERROR_BASE + 128), |
427 +"The application could not get a TLS Channel ID.") | 427 +"The application could not get a TLS Channel ID.") |
428 diff -pu -r a/net/third_party/nss/ssl/ssl.h b/net/third_party/nss/ssl/ssl.h | 428 diff -pu a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h |
429 --- a/net/third_party/nss/ssl/ssl.h» 2012-11-09 15:53:13.884846338 -0800 | 429 --- a/nss/lib/ssl/ssl.h»2013-04-27 09:23:52.361985404 -0700 |
430 +++ b/net/third_party/nss/ssl/ssl.h» 2012-11-09 15:58:06.969126842 -0800 | 430 +++ b/nss/lib/ssl/ssl.h»2013-04-27 09:24:01.302111964 -0700 |
431 @@ -935,6 +935,34 @@ SSL_IMPORT SECStatus SSL_HandshakeNegoti | 431 @@ -960,6 +960,34 @@ SSL_IMPORT SECStatus SSL_HandshakeNegoti |
432 SSL_IMPORT SECStatus SSL_HandshakeResumedSession(PRFileDesc *fd, | 432 SSL_IMPORT SECStatus SSL_HandshakeResumedSession(PRFileDesc *fd, |
433 PRBool *last_handshake_resumed
); | 433 PRBool *last_handshake_resumed
); |
434 | 434 |
435 +/* See SSL_SetClientChannelIDCallback for usage. If the callback returns | 435 +/* See SSL_SetClientChannelIDCallback for usage. If the callback returns |
436 + * SECWouldBlock then SSL_RestartHandshakeAfterChannelIDReq should be called in | 436 + * SECWouldBlock then SSL_RestartHandshakeAfterChannelIDReq should be called in |
437 + * the future to restart the handshake. On SECSuccess, the callback must have | 437 + * the future to restart the handshake. On SECSuccess, the callback must have |
438 + * written a P-256, EC key pair to |*out_public_key| and |*out_private_key|. */ | 438 + * written a P-256, EC key pair to |*out_public_key| and |*out_private_key|. */ |
439 +typedef SECStatus (PR_CALLBACK *SSLClientChannelIDCallback)( | 439 +typedef SECStatus (PR_CALLBACK *SSLClientChannelIDCallback)( |
440 + void *arg, | 440 + void *arg, |
441 + PRFileDesc *fd, | 441 + PRFileDesc *fd, |
(...skipping 14 matching lines...) Expand all Loading... |
456 + * a client socket and setting this callback causes the TLS Channel ID | 456 + * a client socket and setting this callback causes the TLS Channel ID |
457 + * extension to be advertised. */ | 457 + * extension to be advertised. */ |
458 +SSL_IMPORT SECStatus SSL_SetClientChannelIDCallback( | 458 +SSL_IMPORT SECStatus SSL_SetClientChannelIDCallback( |
459 + PRFileDesc *fd, | 459 + PRFileDesc *fd, |
460 + SSLClientChannelIDCallback callback, | 460 + SSLClientChannelIDCallback callback, |
461 + void *arg); | 461 + void *arg); |
462 + | 462 + |
463 /* | 463 /* |
464 ** How long should we wait before retransmitting the next flight of | 464 ** How long should we wait before retransmitting the next flight of |
465 ** the DTLS handshake? Returns SECFailure if not DTLS or not in a | 465 ** the DTLS handshake? Returns SECFailure if not DTLS or not in a |
466 diff -pu -r a/net/third_party/nss/ssl/sslimpl.h b/net/third_party/nss/ssl/sslimp
l.h | 466 diff -pu a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h |
467 --- a/net/third_party/nss/ssl/sslimpl.h»2012-11-09 15:53:13.884846338 -0800 | 467 --- a/nss/lib/ssl/sslimpl.h» 2013-04-27 09:23:52.361985404 -0700 |
468 +++ b/net/third_party/nss/ssl/sslimpl.h»2012-11-09 15:58:06.979126989 -0800 | 468 +++ b/nss/lib/ssl/sslimpl.h» 2013-04-27 09:24:01.302111964 -0700 |
469 @@ -894,6 +894,9 @@ struct ssl3StateStr { | 469 @@ -887,6 +887,9 @@ struct ssl3StateStr { |
470 CERTCertificateList *clientCertChain; /* used by client */ | 470 CERTCertificateList *clientCertChain; /* used by client */ |
471 PRBool sendEmptyCert; /* used by client */ | 471 PRBool sendEmptyCert; /* used by client */ |
472 | 472 |
473 + SECKEYPrivateKey *channelID; /* used by client */ | 473 + SECKEYPrivateKey *channelID; /* used by client */ |
474 + SECKEYPublicKey *channelIDPub; /* used by client */ | 474 + SECKEYPublicKey *channelIDPub; /* used by client */ |
475 + | 475 + |
476 int policy; | 476 int policy; |
477 /* This says what cipher suites we can do, and should | 477 /* This says what cipher suites we can do, and should |
478 * be either SSL_ALLOWED or SSL_RESTRICTED | 478 * be either SSL_ALLOWED or SSL_RESTRICTED |
479 @@ -1165,6 +1168,8 @@ const unsigned char * preferredCipher; | 479 @@ -1158,6 +1161,8 @@ const unsigned char * preferredCipher; |
480 void *pkcs11PinArg; | 480 void *pkcs11PinArg; |
481 SSLNextProtoCallback nextProtoCallback; | 481 SSLNextProtoCallback nextProtoCallback; |
482 void *nextProtoArg; | 482 void *nextProtoArg; |
483 + SSLClientChannelIDCallback getChannelID; | 483 + SSLClientChannelIDCallback getChannelID; |
484 + void *getChannelIDArg; | 484 + void *getChannelIDArg; |
485 | 485 |
486 PRIntervalTime rTimeout; /* timeout for NSPR I/O */ | 486 PRIntervalTime rTimeout; /* timeout for NSPR I/O */ |
487 PRIntervalTime wTimeout; /* timeout for NSPR I/O */ | 487 PRIntervalTime wTimeout; /* timeout for NSPR I/O */ |
488 @@ -1495,6 +1500,11 @@ extern SECStatus ssl3_RestartHandshakeAf | 488 @@ -1489,6 +1494,11 @@ extern SECStatus ssl3_RestartHandshakeAf |
489 SECKEYPrivateKey * key, | 489 SECKEYPrivateKey * key, |
490 CERTCertificateList *certChain); | 490 CERTCertificateList *certChain); |
491 | 491 |
492 +extern SECStatus ssl3_RestartHandshakeAfterChannelIDReq( | 492 +extern SECStatus ssl3_RestartHandshakeAfterChannelIDReq( |
493 + sslSocket *ss, | 493 + sslSocket *ss, |
494 + SECKEYPublicKey *channelIDPub, | 494 + SECKEYPublicKey *channelIDPub, |
495 + SECKEYPrivateKey *channelID); | 495 + SECKEYPrivateKey *channelID); |
496 + | 496 + |
497 extern SECStatus ssl3_AuthCertificateComplete(sslSocket *ss, PRErrorCode error)
; | 497 extern SECStatus ssl3_AuthCertificateComplete(sslSocket *ss, PRErrorCode error)
; |
498 | 498 |
499 /* | 499 /* |
500 diff -pu -r a/net/third_party/nss/ssl/sslsecur.c b/net/third_party/nss/ssl/sslse
cur.c | 500 diff -pu a/nss/lib/ssl/sslsecur.c b/nss/lib/ssl/sslsecur.c |
501 --- a/net/third_party/nss/ssl/sslsecur.c» 2012-11-09 15:53:13.884846338 -0
800 | 501 --- a/nss/lib/ssl/sslsecur.c» 2013-04-27 09:23:52.371985544 -0700 |
502 +++ b/net/third_party/nss/ssl/sslsecur.c» 2012-11-09 15:58:06.979126989 -0
800 | 502 +++ b/nss/lib/ssl/sslsecur.c» 2013-04-27 09:24:01.302111964 -0700 |
503 @@ -1503,6 +1503,42 @@ SSL_RestartHandshakeAfterCertReq(PRFileD | 503 @@ -1503,6 +1503,42 @@ SSL_RestartHandshakeAfterCertReq(PRFileD |
504 return ret; | 504 return ret; |
505 } | 505 } |
506 | 506 |
507 +SECStatus | 507 +SECStatus |
508 +SSL_RestartHandshakeAfterChannelIDReq(PRFileDesc * fd, | 508 +SSL_RestartHandshakeAfterChannelIDReq(PRFileDesc * fd, |
509 + SECKEYPublicKey * channelIDPub, | 509 + SECKEYPublicKey * channelIDPub, |
510 + SECKEYPrivateKey *channelID) | 510 + SECKEYPrivateKey *channelID) |
511 +{ | 511 +{ |
512 + sslSocket * ss = ssl_FindSocket(fd); | 512 + sslSocket * ss = ssl_FindSocket(fd); |
(...skipping 23 matching lines...) Expand all Loading... |
536 + | 536 + |
537 +loser: | 537 +loser: |
538 + SECKEY_DestroyPublicKey(channelIDPub); | 538 + SECKEY_DestroyPublicKey(channelIDPub); |
539 + SECKEY_DestroyPrivateKey(channelID); | 539 + SECKEY_DestroyPrivateKey(channelID); |
540 + return SECFailure; | 540 + return SECFailure; |
541 +} | 541 +} |
542 + | 542 + |
543 /* DO NOT USE. This function was exported in ssl.def with the wrong signature; | 543 /* DO NOT USE. This function was exported in ssl.def with the wrong signature; |
544 * this implementation exists to maintain link-time compatibility. | 544 * this implementation exists to maintain link-time compatibility. |
545 */ | 545 */ |
546 diff -pu -r a/net/third_party/nss/ssl/sslsock.c b/net/third_party/nss/ssl/sslsoc
k.c | 546 diff -pu a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c |
547 --- a/net/third_party/nss/ssl/sslsock.c»2012-11-09 15:48:41.260860199 -0800 | 547 --- a/nss/lib/ssl/sslsock.c» 2013-04-27 09:23:12.121415729 -0700 |
548 +++ b/net/third_party/nss/ssl/sslsock.c»2012-11-09 15:58:06.979126989 -0800 | 548 +++ b/nss/lib/ssl/sslsock.c» 2013-04-27 09:24:01.312112105 -0700 |
549 @@ -346,6 +346,8 @@ ssl_DupSocket(sslSocket *os) | 549 @@ -348,6 +348,8 @@ ssl_DupSocket(sslSocket *os) |
550 ss->handshakeCallback = os->handshakeCallback; | 550 ss->handshakeCallback = os->handshakeCallback; |
551 ss->handshakeCallbackData = os->handshakeCallbackData; | 551 ss->handshakeCallbackData = os->handshakeCallbackData; |
552 ss->pkcs11PinArg = os->pkcs11PinArg; | 552 ss->pkcs11PinArg = os->pkcs11PinArg; |
553 + ss->getChannelID = os->getChannelID; | 553 + ss->getChannelID = os->getChannelID; |
554 + ss->getChannelIDArg = os->getChannelIDArg; | 554 + ss->getChannelIDArg = os->getChannelIDArg; |
555 | 555 |
556 /* Create security data */ | 556 /* Create security data */ |
557 rv = ssl_CopySecurityInfo(ss, os); | 557 rv = ssl_CopySecurityInfo(ss, os); |
558 @@ -1736,6 +1738,10 @@ SSL_ReconfigFD(PRFileDesc *model, PRFile | 558 @@ -1749,6 +1751,10 @@ SSL_ReconfigFD(PRFileDesc *model, PRFile |
559 ss->handshakeCallbackData = sm->handshakeCallbackData; | 559 ss->handshakeCallbackData = sm->handshakeCallbackData; |
560 if (sm->pkcs11PinArg) | 560 if (sm->pkcs11PinArg) |
561 ss->pkcs11PinArg = sm->pkcs11PinArg; | 561 ss->pkcs11PinArg = sm->pkcs11PinArg; |
562 + if (sm->getChannelID) | 562 + if (sm->getChannelID) |
563 + ss->getChannelID = sm->getChannelID; | 563 + ss->getChannelID = sm->getChannelID; |
564 + if (sm->getChannelIDArg) | 564 + if (sm->getChannelIDArg) |
565 + ss->getChannelIDArg = sm->getChannelIDArg; | 565 + ss->getChannelIDArg = sm->getChannelIDArg; |
566 return fd; | 566 return fd; |
567 loser: | 567 loser: |
568 return NULL; | 568 return NULL; |
569 @@ -2988,6 +2994,8 @@ ssl_NewSocket(PRBool makeLocks, SSLProto | 569 @@ -3024,6 +3030,8 @@ ssl_NewSocket(PRBool makeLocks, SSLProto |
570 » ss->handleBadCert = NULL; | |
571 ss->badCertArg = NULL; | 570 ss->badCertArg = NULL; |
572 ss->pkcs11PinArg = NULL; | 571 ss->pkcs11PinArg = NULL; |
| 572 ss->ephemeralECDHKeyPair = NULL; |
573 + ss->getChannelID = NULL; | 573 + ss->getChannelID = NULL; |
574 + ss->getChannelIDArg = NULL; | 574 + ss->getChannelIDArg = NULL; |
575 | 575 |
576 ssl_ChooseOps(ss); | 576 ssl_ChooseOps(ss); |
577 ssl2_InitSocketPolicy(ss); | 577 ssl2_InitSocketPolicy(ss); |
578 diff -pu -r a/net/third_party/nss/ssl/sslt.h b/net/third_party/nss/ssl/sslt.h | 578 diff -pu a/nss/lib/ssl/sslt.h b/nss/lib/ssl/sslt.h |
579 --- a/net/third_party/nss/ssl/sslt.h» 2012-11-09 15:34:12.268133912 -0800 | 579 --- a/nss/lib/ssl/sslt.h» 2013-04-27 09:17:17.226390616 -0700 |
580 +++ b/net/third_party/nss/ssl/sslt.h» 2012-11-09 15:58:55.569836197 -0800 | 580 +++ b/nss/lib/ssl/sslt.h» 2013-04-27 09:24:01.312112105 -0700 |
581 @@ -183,9 +183,10 @@ typedef enum { | 581 @@ -183,9 +183,10 @@ typedef enum { |
582 ssl_use_srtp_xtn = 14, | 582 ssl_use_srtp_xtn = 14, |
583 ssl_session_ticket_xtn = 35, | 583 ssl_session_ticket_xtn = 35, |
584 ssl_next_proto_nego_xtn = 13172, | 584 ssl_next_proto_nego_xtn = 13172, |
585 + ssl_channel_id_xtn = 30031, | 585 + ssl_channel_id_xtn = 30031, |
586 ssl_renegotiation_info_xtn = 0xff01 /* experimental number */ | 586 ssl_renegotiation_info_xtn = 0xff01 /* experimental number */ |
587 } SSLExtensionType; | 587 } SSLExtensionType; |
588 | 588 |
589 -#define SSL_MAX_EXTENSIONS 8 | 589 -#define SSL_MAX_EXTENSIONS 8 |
590 +#define SSL_MAX_EXTENSIONS 9 | 590 +#define SSL_MAX_EXTENSIONS 9 |
591 | 591 |
592 #endif /* __sslt_h_ */ | 592 #endif /* __sslt_h_ */ |
OLD | NEW |