| 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:36:09.938766379 -0800 | 2 --- a/nss/lib/ssl/ssl3con.c» 2014-01-18 10:39:50.799150460 -0800 |
| 3 +++ b/nss/lib/ssl/ssl3con.c» 2014-01-03 19:37:50.360408300 -0800 | 3 +++ b/nss/lib/ssl/ssl3con.c» 2014-01-18 10:40:15.489552270 -0800 |
| 4 @@ -55,6 +55,7 @@ static SECStatus ssl3_SendCertificateSta | 4 @@ -55,6 +55,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 @@ -6198,6 +6199,15 @@ ssl3_HandleServerHello(sslSocket *ss, SS | 12 @@ -6221,6 +6222,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 @@ -6480,7 +6490,7 @@ ssl3_HandleServerHello(sslSocket *ss, SS | 28 @@ -6503,7 +6513,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 @@ -6506,6 +6516,27 @@ ssl3_HandleServerHello(sslSocket *ss, SS | 37 @@ -6529,6 +6539,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 @@ -7467,7 +7498,14 @@ ssl3_SendClientSecondRound(sslSocket *ss | 65 @@ -7490,7 +7521,14 @@ ssl3_SendClientSecondRound(sslSocket *ss |
| 66 if (rv != SECSuccess) { | 66 if (rv != SECSuccess) { |
| 67 goto loser; /* err code was set. */ | 67 goto loser; /* err code was set. */ |
| 68 } | 68 } |
| 69 + } | 69 + } |
| 70 | 70 |
| 71 + rv = ssl3_SendEncryptedExtensions(ss); | 71 + rv = ssl3_SendEncryptedExtensions(ss); |
| 72 + if (rv != SECSuccess) { | 72 + if (rv != SECSuccess) { |
| 73 + goto loser; /* err code was set. */ | 73 + goto loser; /* err code was set. */ |
| 74 + } | 74 + } |
| 75 + | 75 + |
| 76 + if (!ss->firstHsDone) { | 76 + if (!ss->firstHsDone) { |
| 77 if (ss->opt.enableFalseStart) { | 77 if (ss->opt.enableFalseStart) { |
| 78 if (!ss->ssl3.hs.authCertificatePending) { | 78 if (!ss->ssl3.hs.authCertificatePending) { |
| 79 /* When we fix bug 589047, we will need to know whether we are | 79 /* When we fix bug 589047, we will need to know whether we are |
| 80 @@ -7504,6 +7542,33 @@ ssl3_SendClientSecondRound(sslSocket *ss | 80 @@ -7527,6 +7565,33 @@ ssl3_SendClientSecondRound(sslSocket *ss |
| 81 | 81 |
| 82 ssl_ReleaseXmitBufLock(ss); /*******************************
/ | 82 ssl_ReleaseXmitBufLock(ss); /*******************************
/ |
| 83 | 83 |
| 84 + if (!ss->ssl3.hs.isResuming && | 84 + if (!ss->ssl3.hs.isResuming && |
| 85 + ssl3_ExtensionNegotiated(ss, ssl_channel_id_xtn)) { | 85 + ssl3_ExtensionNegotiated(ss, ssl_channel_id_xtn)) { |
| 86 + /* If we are negotiating ChannelID on a full handshake then we record | 86 + /* If we are negotiating ChannelID on a full handshake then we record |
| 87 + * the handshake hashes in |sid| at this point. They will be needed in | 87 + * the handshake hashes in |sid| at this point. They will be needed in |
| 88 + * the event that we resume this session and use ChannelID on the | 88 + * the event that we resume this session and use ChannelID on the |
| 89 + * resumption handshake. */ | 89 + * resumption handshake. */ |
| 90 + SSL3Hashes hashes; | 90 + SSL3Hashes hashes; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 104 + originalHandshakeHash->data = PORT_Alloc(hashes.len); | 104 + originalHandshakeHash->data = PORT_Alloc(hashes.len); |
| 105 + if (!originalHandshakeHash->data) | 105 + if (!originalHandshakeHash->data) |
| 106 + return SECFailure; | 106 + return SECFailure; |
| 107 + originalHandshakeHash->len = hashes.len; | 107 + originalHandshakeHash->len = hashes.len; |
| 108 + memcpy(originalHandshakeHash->data, hashes.u.raw, hashes.len); | 108 + memcpy(originalHandshakeHash->data, hashes.u.raw, hashes.len); |
| 109 + } | 109 + } |
| 110 + | 110 + |
| 111 if (ssl3_ExtensionNegotiated(ss, ssl_session_ticket_xtn)) | 111 if (ssl3_ExtensionNegotiated(ss, ssl_session_ticket_xtn)) |
| 112 ss->ssl3.hs.ws = wait_new_session_ticket; | 112 ss->ssl3.hs.ws = wait_new_session_ticket; |
| 113 else | 113 else |
| 114 @@ -10469,6 +10534,184 @@ ssl3_RecordKeyLog(sslSocket *ss) | 114 @@ -10494,6 +10559,184 @@ ssl3_RecordKeyLog(sslSocket *ss) |
| 115 } | 115 } |
| 116 | 116 |
| 117 /* called from ssl3_SendClientSecondRound | 117 /* called from ssl3_SendClientSecondRound |
| 118 + * ssl3_HandleFinished | 118 + * ssl3_HandleFinished |
| 119 + */ | 119 + */ |
| 120 +static SECStatus | 120 +static SECStatus |
| 121 +ssl3_SendEncryptedExtensions(sslSocket *ss) | 121 +ssl3_SendEncryptedExtensions(sslSocket *ss) |
| 122 +{ | 122 +{ |
| 123 + static const char CHANNEL_ID_MAGIC[] = "TLS Channel ID signature"; | 123 + static const char CHANNEL_ID_MAGIC[] = "TLS Channel ID signature"; |
| 124 + static const char CHANNEL_ID_RESUMPTION_MAGIC[] = "Resumption"; | 124 + static const char CHANNEL_ID_RESUMPTION_MAGIC[] = "Resumption"; |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 + ss->ssl3.channelID = channelID; | 289 + ss->ssl3.channelID = channelID; |
| 290 + ss->ssl3.channelIDPub = channelIDPub; | 290 + ss->ssl3.channelIDPub = channelIDPub; |
| 291 + | 291 + |
| 292 + return SECSuccess; | 292 + return SECSuccess; |
| 293 +} | 293 +} |
| 294 + | 294 + |
| 295 +/* called from ssl3_SendClientSecondRound | 295 +/* called from ssl3_SendClientSecondRound |
| 296 * ssl3_HandleClientHello | 296 * ssl3_HandleClientHello |
| 297 * ssl3_HandleFinished | 297 * ssl3_HandleFinished |
| 298 */ | 298 */ |
| 299 @@ -10728,11 +10971,16 @@ ssl3_HandleFinished(sslSocket *ss, SSL3O | 299 @@ -10753,11 +10996,16 @@ ssl3_HandleFinished(sslSocket *ss, SSL3O |
| 300 flags = ssl_SEND_FLAG_FORCE_INTO_BUFFER; | 300 flags = ssl_SEND_FLAG_FORCE_INTO_BUFFER; |
| 301 } | 301 } |
| 302 | 302 |
| 303 - if (!isServer && !ss->firstHsDone) { | 303 - if (!isServer && !ss->firstHsDone) { |
| 304 - rv = ssl3_SendNextProto(ss); | 304 - rv = ssl3_SendNextProto(ss); |
| 305 - if (rv != SECSuccess) { | 305 - if (rv != SECSuccess) { |
| 306 - goto xmit_loser; /* err code was set. */ | 306 - goto xmit_loser; /* err code was set. */ |
| 307 + if (!isServer) { | 307 + if (!isServer) { |
| 308 + if (!ss->firstHsDone) { | 308 + if (!ss->firstHsDone) { |
| 309 + rv = ssl3_SendNextProto(ss); | 309 + rv = ssl3_SendNextProto(ss); |
| 310 + if (rv != SECSuccess) { | 310 + if (rv != SECSuccess) { |
| 311 + goto xmit_loser; /* err code was set. */ | 311 + goto xmit_loser; /* err code was set. */ |
| 312 + } | 312 + } |
| 313 } | 313 } |
| 314 + rv = ssl3_SendEncryptedExtensions(ss); | 314 + rv = ssl3_SendEncryptedExtensions(ss); |
| 315 + if (rv != SECSuccess) | 315 + if (rv != SECSuccess) |
| 316 + goto xmit_loser; /* err code was set. */ | 316 + goto xmit_loser; /* err code was set. */ |
| 317 } | 317 } |
| 318 | 318 |
| 319 if (IS_DTLS(ss)) { | 319 if (IS_DTLS(ss)) { |
| 320 @@ -12212,6 +12460,11 @@ ssl3_DestroySSL3Info(sslSocket *ss) | 320 @@ -12237,6 +12485,11 @@ ssl3_DestroySSL3Info(sslSocket *ss) |
| 321 ssl_FreePlatformKey(ss->ssl3.platformClientKey); | 321 ssl_FreePlatformKey(ss->ssl3.platformClientKey); |
| 322 #endif /* NSS_PLATFORM_CLIENT_AUTH */ | 322 #endif /* NSS_PLATFORM_CLIENT_AUTH */ |
| 323 | 323 |
| 324 + if (ss->ssl3.channelID) | 324 + if (ss->ssl3.channelID) |
| 325 + SECKEY_DestroyPrivateKey(ss->ssl3.channelID); | 325 + SECKEY_DestroyPrivateKey(ss->ssl3.channelID); |
| 326 + if (ss->ssl3.channelIDPub) | 326 + if (ss->ssl3.channelIDPub) |
| 327 + SECKEY_DestroyPublicKey(ss->ssl3.channelIDPub); | 327 + SECKEY_DestroyPublicKey(ss->ssl3.channelIDPub); |
| 328 + | 328 + |
| 329 if (ss->ssl3.peerCertArena != NULL) | 329 if (ss->ssl3.peerCertArena != NULL) |
| 330 ssl3_CleanupPeerCerts(ss); | 330 ssl3_CleanupPeerCerts(ss); |
| 331 | 331 |
| 332 diff -pu a/nss/lib/ssl/ssl3ext.c b/nss/lib/ssl/ssl3ext.c | 332 diff -pu a/nss/lib/ssl/ssl3ext.c b/nss/lib/ssl/ssl3ext.c |
| 333 --- a/nss/lib/ssl/ssl3ext.c» 2014-01-03 19:31:09.783859095 -0800 | 333 --- a/nss/lib/ssl/ssl3ext.c» 2014-01-18 10:39:50.749149654 -0800 |
| 334 +++ b/nss/lib/ssl/ssl3ext.c» 2014-01-03 19:36:25.379018825 -0800 | 334 +++ b/nss/lib/ssl/ssl3ext.c» 2014-01-18 10:43:52.543083984 -0800 |
| 335 @@ -60,6 +60,10 @@ static PRInt32 ssl3_SendUseSRTPXtn(sslSo | 335 @@ -64,6 +64,10 @@ static PRInt32 ssl3_SendUseSRTPXtn(sslSo |
| 336 PRUint32 maxBytes); | 336 PRUint32 maxBytes); |
| 337 static SECStatus ssl3_HandleUseSRTPXtn(sslSocket * ss, PRUint16 ex_type, | 337 static SECStatus ssl3_HandleUseSRTPXtn(sslSocket * ss, PRUint16 ex_type, |
| 338 SECItem *data); | 338 SECItem *data); |
| 339 +static SECStatus ssl3_ClientHandleChannelIDXtn(sslSocket *ss, | 339 +static SECStatus ssl3_ClientHandleChannelIDXtn(sslSocket *ss, |
| 340 + PRUint16 ex_type, SECItem *data); | 340 + PRUint16 ex_type, SECItem *data); |
| 341 +static PRInt32 ssl3_ClientSendChannelIDXtn(sslSocket *ss, PRBool append, | 341 +static PRInt32 ssl3_ClientSendChannelIDXtn(sslSocket *ss, PRBool append, |
| 342 + PRUint32 maxBytes); | 342 + PRUint32 maxBytes); |
| 343 static SECStatus ssl3_ServerSendStatusRequestXtn(sslSocket * ss, | 343 static SECStatus ssl3_ServerSendStatusRequestXtn(sslSocket * ss, |
| 344 PRBool append, PRUint32 maxBytes); | 344 PRBool append, PRUint32 maxBytes); |
| 345 static SECStatus ssl3_ServerHandleStatusRequestXtn(sslSocket *ss, | 345 static SECStatus ssl3_ServerHandleStatusRequestXtn(sslSocket *ss, |
| 346 @@ -248,6 +252,7 @@ static const ssl3HelloExtensionHandler s | 346 @@ -253,6 +257,7 @@ static const ssl3HelloExtensionHandler s |
| 347 { ssl_renegotiation_info_xtn, &ssl3_HandleRenegotiationInfoXtn }, | |
| 348 { ssl_next_proto_nego_xtn, &ssl3_ClientHandleNextProtoNegoXtn }, | 347 { ssl_next_proto_nego_xtn, &ssl3_ClientHandleNextProtoNegoXtn }, |
| 348 { ssl_app_layer_protocol_xtn, &ssl3_ClientHandleAppProtoXtn }, |
| 349 { ssl_use_srtp_xtn, &ssl3_HandleUseSRTPXtn }, | 349 { ssl_use_srtp_xtn, &ssl3_HandleUseSRTPXtn }, |
| 350 + { ssl_channel_id_xtn, &ssl3_ClientHandleChannelIDXtn }, | 350 + { ssl_channel_id_xtn, &ssl3_ClientHandleChannelIDXtn }, |
| 351 { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn }, | 351 { ssl_cert_status_xtn, &ssl3_ClientHandleStatusRequestXtn }, |
| 352 { -1, NULL } | 352 { -1, NULL } |
| 353 }; | 353 }; |
| 354 @@ -274,6 +279,7 @@ ssl3HelloExtensionSender clientHelloSend | 354 @@ -280,6 +285,7 @@ ssl3HelloExtensionSender clientHelloSend |
| 355 { ssl_session_ticket_xtn, &ssl3_SendSessionTicketXtn }, | |
| 356 { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn }, | 355 { ssl_next_proto_nego_xtn, &ssl3_ClientSendNextProtoNegoXtn }, |
| 356 { ssl_app_layer_protocol_xtn, &ssl3_ClientSendAppProtoXtn }, |
| 357 { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn }, | 357 { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn }, |
| 358 + { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn }, | 358 + { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn }, |
| 359 { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn }, | 359 { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn }, |
| 360 { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn } | 360 { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn } |
| 361 /* any extra entries will appear as { 0, NULL } */ | 361 /* any extra entries will appear as { 0, NULL } */ |
| 362 @@ -669,6 +675,61 @@ ssl3_ClientSendNextProtoNegoXtn(sslSocke | 362 @@ -795,6 +801,61 @@ loser: |
| 363 } | 363 return -1; |
| 364 } |
| 364 | 365 |
| 365 return extension_length; | |
| 366 + | |
| 367 +loser: | |
| 368 + return -1; | |
| 369 +} | |
| 370 + | |
| 371 +static SECStatus | 366 +static SECStatus |
| 372 +ssl3_ClientHandleChannelIDXtn(sslSocket *ss, PRUint16 ex_type, | 367 +ssl3_ClientHandleChannelIDXtn(sslSocket *ss, PRUint16 ex_type, |
| 373 + SECItem *data) | 368 + SECItem *data) |
| 374 +{ | 369 +{ |
| 375 + PORT_Assert(ss->getChannelID != NULL); | 370 + PORT_Assert(ss->getChannelID != NULL); |
| 376 + | 371 + |
| 377 + if (data->len) { | 372 + if (data->len) { |
| 378 + PORT_SetError(SSL_ERROR_BAD_CHANNEL_ID_DATA); | 373 + PORT_SetError(SSL_ERROR_BAD_CHANNEL_ID_DATA); |
| 379 + return SECFailure; | 374 + return SECFailure; |
| 380 + } | 375 + } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 411 + if (rv != SECSuccess) | 406 + if (rv != SECSuccess) |
| 412 + goto loser; | 407 + goto loser; |
| 413 + rv = ssl3_AppendHandshakeNumber(ss, 0, 2); | 408 + rv = ssl3_AppendHandshakeNumber(ss, 0, 2); |
| 414 + if (rv != SECSuccess) | 409 + if (rv != SECSuccess) |
| 415 + goto loser; | 410 + goto loser; |
| 416 + ss->xtnData.advertised[ss->xtnData.numAdvertised++] = | 411 + ss->xtnData.advertised[ss->xtnData.numAdvertised++] = |
| 417 + ssl_channel_id_xtn; | 412 + ssl_channel_id_xtn; |
| 418 + } | 413 + } |
| 419 + | 414 + |
| 420 + return extension_length; | 415 + return extension_length; |
| 421 | 416 + |
| 422 loser: | 417 +loser: |
| 423 return -1; | 418 + return -1; |
| 419 +} |
| 420 + |
| 421 static SECStatus |
| 422 ssl3_ClientHandleStatusRequestXtn(sslSocket *ss, PRUint16 ex_type, |
| 423 SECItem *data) |
| 424 diff -pu a/nss/lib/ssl/ssl3prot.h b/nss/lib/ssl/ssl3prot.h | 424 diff -pu a/nss/lib/ssl/ssl3prot.h b/nss/lib/ssl/ssl3prot.h |
| 425 --- a/nss/lib/ssl/ssl3prot.h» 2014-01-03 19:28:03.550814608 -0800 | 425 --- a/nss/lib/ssl/ssl3prot.h» 2014-01-18 10:39:34.278881614 -0800 |
| 426 +++ b/nss/lib/ssl/ssl3prot.h» 2014-01-03 19:36:25.379018825 -0800 | 426 +++ b/nss/lib/ssl/ssl3prot.h» 2014-01-18 10:40:15.499552430 -0800 |
| 427 @@ -129,7 +129,8 @@ typedef enum { | 427 @@ -129,7 +129,8 @@ typedef enum { |
| 428 client_key_exchange = 16, | 428 client_key_exchange = 16, |
| 429 finished = 20, | 429 finished = 20, |
| 430 certificate_status = 22, | 430 certificate_status = 22, |
| 431 - next_proto = 67 | 431 - next_proto = 67 |
| 432 + next_proto = 67, | 432 + next_proto = 67, |
| 433 + encrypted_extensions= 203 | 433 + encrypted_extensions= 203 |
| 434 } SSL3HandshakeType; | 434 } SSL3HandshakeType; |
| 435 | 435 |
| 436 typedef struct { | 436 typedef struct { |
| 437 diff -pu a/nss/lib/ssl/sslauth.c b/nss/lib/ssl/sslauth.c | 437 diff -pu a/nss/lib/ssl/sslauth.c b/nss/lib/ssl/sslauth.c |
| 438 --- a/nss/lib/ssl/sslauth.c» 2014-01-03 19:31:09.783859095 -0800 | 438 --- a/nss/lib/ssl/sslauth.c» 2014-01-18 10:39:50.749149654 -0800 |
| 439 +++ b/nss/lib/ssl/sslauth.c» 2014-01-03 19:36:25.379018825 -0800 | 439 +++ b/nss/lib/ssl/sslauth.c» 2014-01-18 10:40:15.499552430 -0800 |
| 440 @@ -216,6 +216,24 @@ SSL_GetClientAuthDataHook(PRFileDesc *s, | 440 @@ -216,6 +216,24 @@ SSL_GetClientAuthDataHook(PRFileDesc *s, |
| 441 return SECSuccess; | 441 return SECSuccess; |
| 442 } | 442 } |
| 443 | 443 |
| 444 +SECStatus | 444 +SECStatus |
| 445 +SSL_SetClientChannelIDCallback(PRFileDesc *fd, | 445 +SSL_SetClientChannelIDCallback(PRFileDesc *fd, |
| 446 + SSLClientChannelIDCallback callback, | 446 + SSLClientChannelIDCallback callback, |
| 447 + void *arg) { | 447 + void *arg) { |
| 448 + sslSocket *ss = ssl_FindSocket(fd); | 448 + sslSocket *ss = ssl_FindSocket(fd); |
| 449 + | 449 + |
| 450 + if (!ss) { | 450 + if (!ss) { |
| 451 + SSL_DBG(("%d: SSL[%d]: bad socket in SSL_SetClientChannelIDCallback", | 451 + SSL_DBG(("%d: SSL[%d]: bad socket in SSL_SetClientChannelIDCallback", |
| 452 + SSL_GETPID(), fd)); | 452 + SSL_GETPID(), fd)); |
| 453 + return SECFailure; | 453 + return SECFailure; |
| 454 + } | 454 + } |
| 455 + | 455 + |
| 456 + ss->getChannelID = callback; | 456 + ss->getChannelID = callback; |
| 457 + ss->getChannelIDArg = arg; | 457 + ss->getChannelIDArg = arg; |
| 458 + | 458 + |
| 459 + return SECSuccess; | 459 + return SECSuccess; |
| 460 +} | 460 +} |
| 461 + | 461 + |
| 462 #ifdef NSS_PLATFORM_CLIENT_AUTH | 462 #ifdef NSS_PLATFORM_CLIENT_AUTH |
| 463 /* NEED LOCKS IN HERE. */ | 463 /* NEED LOCKS IN HERE. */ |
| 464 SECStatus | 464 SECStatus |
| 465 diff -pu a/nss/lib/ssl/sslerr.h b/nss/lib/ssl/sslerr.h | 465 diff -pu a/nss/lib/ssl/sslerr.h b/nss/lib/ssl/sslerr.h |
| 466 --- a/nss/lib/ssl/sslerr.h» 2014-01-03 19:28:03.550814608 -0800 | 466 --- a/nss/lib/ssl/sslerr.h» 2014-01-18 10:39:34.288881780 -0800 |
| 467 +++ b/nss/lib/ssl/sslerr.h» 2014-01-03 19:36:25.379018825 -0800 | 467 +++ b/nss/lib/ssl/sslerr.h» 2014-01-18 10:40:15.499552430 -0800 |
| 468 @@ -193,6 +193,10 @@ SSL_ERROR_UNSUPPORTED_HASH_ALGORITHM = ( | 468 @@ -193,6 +193,10 @@ SSL_ERROR_UNSUPPORTED_HASH_ALGORITHM = ( |
| 469 SSL_ERROR_DIGEST_FAILURE = (SSL_ERROR_BASE + 127), | 469 SSL_ERROR_DIGEST_FAILURE = (SSL_ERROR_BASE + 127), |
| 470 SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM = (SSL_ERROR_BASE + 128), | 470 SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM = (SSL_ERROR_BASE + 128), |
| 471 | 471 |
| 472 +SSL_ERROR_BAD_CHANNEL_ID_DATA = (SSL_ERROR_BASE + 129), | 472 +SSL_ERROR_BAD_CHANNEL_ID_DATA = (SSL_ERROR_BASE + 129), |
| 473 +SSL_ERROR_INVALID_CHANNEL_ID_KEY = (SSL_ERROR_BASE + 130), | 473 +SSL_ERROR_INVALID_CHANNEL_ID_KEY = (SSL_ERROR_BASE + 130), |
| 474 +SSL_ERROR_GET_CHANNEL_ID_FAILED = (SSL_ERROR_BASE + 131), | 474 +SSL_ERROR_GET_CHANNEL_ID_FAILED = (SSL_ERROR_BASE + 131), |
| 475 + | 475 + |
| 476 SSL_ERROR_END_OF_LIST /* let the c compiler determine the value of this. */ | 476 SSL_ERROR_END_OF_LIST /* let the c compiler determine the value of this. */ |
| 477 } SSLErrorCodes; | 477 } SSLErrorCodes; |
| 478 #endif /* NO_SECURITY_ERROR_ENUM */ | 478 #endif /* NO_SECURITY_ERROR_ENUM */ |
| 479 diff -pu a/nss/lib/ssl/SSLerrs.h b/nss/lib/ssl/SSLerrs.h | 479 diff -pu a/nss/lib/ssl/SSLerrs.h b/nss/lib/ssl/SSLerrs.h |
| 480 --- a/nss/lib/ssl/SSLerrs.h» 2014-01-03 19:28:03.540814444 -0800 | 480 --- a/nss/lib/ssl/SSLerrs.h» 2014-01-18 10:39:34.238880964 -0800 |
| 481 +++ b/nss/lib/ssl/SSLerrs.h» 2014-01-03 19:36:25.379018825 -0800 | 481 +++ b/nss/lib/ssl/SSLerrs.h» 2014-01-18 10:40:15.499552430 -0800 |
| 482 @@ -412,3 +412,12 @@ ER3(SSL_ERROR_DIGEST_FAILURE, (SSL_ERROR | 482 @@ -412,3 +412,12 @@ ER3(SSL_ERROR_DIGEST_FAILURE, (SSL_ERROR |
| 483 | 483 |
| 484 ER3(SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM, (SSL_ERROR_BASE + 128), | 484 ER3(SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM, (SSL_ERROR_BASE + 128), |
| 485 "Incorrect signature algorithm specified in a digitally-signed element.") | 485 "Incorrect signature algorithm specified in a digitally-signed element.") |
| 486 + | 486 + |
| 487 +ER3(SSL_ERROR_BAD_CHANNEL_ID_DATA, (SSL_ERROR_BASE + 129), | 487 +ER3(SSL_ERROR_BAD_CHANNEL_ID_DATA, (SSL_ERROR_BASE + 129), |
| 488 +"SSL received a malformed TLS Channel ID extension.") | 488 +"SSL received a malformed TLS Channel ID extension.") |
| 489 + | 489 + |
| 490 +ER3(SSL_ERROR_INVALID_CHANNEL_ID_KEY, (SSL_ERROR_BASE + 130), | 490 +ER3(SSL_ERROR_INVALID_CHANNEL_ID_KEY, (SSL_ERROR_BASE + 130), |
| 491 +"The application provided an invalid TLS Channel ID key.") | 491 +"The application provided an invalid TLS Channel ID key.") |
| 492 + | 492 + |
| 493 +ER3(SSL_ERROR_GET_CHANNEL_ID_FAILED, (SSL_ERROR_BASE + 131), | 493 +ER3(SSL_ERROR_GET_CHANNEL_ID_FAILED, (SSL_ERROR_BASE + 131), |
| 494 +"The application could not get a TLS Channel ID.") | 494 +"The application could not get a TLS Channel ID.") |
| 495 diff -pu a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h | 495 diff -pu a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h |
| 496 --- a/nss/lib/ssl/ssl.h»2014-01-03 19:36:09.938766379 -0800 | 496 --- a/nss/lib/ssl/ssl.h»2014-01-18 10:39:50.799150460 -0800 |
| 497 +++ b/nss/lib/ssl/ssl.h»2014-01-03 19:36:25.379018825 -0800 | 497 +++ b/nss/lib/ssl/ssl.h»2014-01-18 10:40:15.499552430 -0800 |
| 498 @@ -985,6 +985,34 @@ SSL_IMPORT SECStatus SSL_HandshakeNegoti | 498 @@ -1015,6 +1015,34 @@ SSL_IMPORT SECStatus SSL_HandshakeNegoti |
| 499 SSL_IMPORT SECStatus SSL_HandshakeResumedSession(PRFileDesc *fd, | 499 SSL_IMPORT SECStatus SSL_HandshakeResumedSession(PRFileDesc *fd, |
| 500 PRBool *last_handshake_resumed
); | 500 PRBool *last_handshake_resumed
); |
| 501 | 501 |
| 502 +/* See SSL_SetClientChannelIDCallback for usage. If the callback returns | 502 +/* See SSL_SetClientChannelIDCallback for usage. If the callback returns |
| 503 + * SECWouldBlock then SSL_RestartHandshakeAfterChannelIDReq should be called in | 503 + * SECWouldBlock then SSL_RestartHandshakeAfterChannelIDReq should be called in |
| 504 + * the future to restart the handshake. On SECSuccess, the callback must have | 504 + * the future to restart the handshake. On SECSuccess, the callback must have |
| 505 + * written a P-256, EC key pair to |*out_public_key| and |*out_private_key|. */ | 505 + * written a P-256, EC key pair to |*out_public_key| and |*out_private_key|. */ |
| 506 +typedef SECStatus (PR_CALLBACK *SSLClientChannelIDCallback)( | 506 +typedef SECStatus (PR_CALLBACK *SSLClientChannelIDCallback)( |
| 507 + void *arg, | 507 + void *arg, |
| 508 + PRFileDesc *fd, | 508 + PRFileDesc *fd, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 524 + * extension to be advertised. */ | 524 + * extension to be advertised. */ |
| 525 +SSL_IMPORT SECStatus SSL_SetClientChannelIDCallback( | 525 +SSL_IMPORT SECStatus SSL_SetClientChannelIDCallback( |
| 526 + PRFileDesc *fd, | 526 + PRFileDesc *fd, |
| 527 + SSLClientChannelIDCallback callback, | 527 + SSLClientChannelIDCallback callback, |
| 528 + void *arg); | 528 + void *arg); |
| 529 + | 529 + |
| 530 /* | 530 /* |
| 531 ** How long should we wait before retransmitting the next flight of | 531 ** How long should we wait before retransmitting the next flight of |
| 532 ** the DTLS handshake? Returns SECFailure if not DTLS or not in a | 532 ** the DTLS handshake? Returns SECFailure if not DTLS or not in a |
| 533 diff -pu a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h | 533 diff -pu a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h |
| 534 --- a/nss/lib/ssl/sslimpl.h» 2014-01-03 19:36:09.938766379 -0800 | 534 --- a/nss/lib/ssl/sslimpl.h» 2014-01-18 10:39:50.799150460 -0800 |
| 535 +++ b/nss/lib/ssl/sslimpl.h» 2014-01-03 19:36:25.379018825 -0800 | 535 +++ b/nss/lib/ssl/sslimpl.h» 2014-01-18 10:40:15.499552430 -0800 |
| 536 @@ -700,6 +700,14 @@ struct sslSessionIDStr { | 536 @@ -709,6 +709,14 @@ struct sslSessionIDStr { |
| 537 | 537 |
| 538 SECItem srvName; | 538 SECItem srvName; |
| 539 | 539 |
| 540 + /* originalHandshakeHash contains the hash of the original, full | 540 + /* originalHandshakeHash contains the hash of the original, full |
| 541 + * handshake prior to the server's final flow. This is either a | 541 + * handshake prior to the server's final flow. This is either a |
| 542 + * SHA-1/MD5 combination (for TLS < 1.2) or the TLS PRF hash (for | 542 + * SHA-1/MD5 combination (for TLS < 1.2) or the TLS PRF hash (for |
| 543 + * TLS 1.2). This is recorded and used only when ChannelID is | 543 + * TLS 1.2). This is recorded and used only when ChannelID is |
| 544 + * negotiated as it's used to bind the ChannelID signature on the | 544 + * negotiated as it's used to bind the ChannelID signature on the |
| 545 + * resumption handshake to the original handshake. */ | 545 + * resumption handshake to the original handshake. */ |
| 546 + SECItem originalHandshakeHash; | 546 + SECItem originalHandshakeHash; |
| 547 + | 547 + |
| 548 /* This lock is lazily initialized by CacheSID when a sid is first | 548 /* This lock is lazily initialized by CacheSID when a sid is first |
| 549 * cached. Before then, there is no need to lock anything because | 549 * cached. Before then, there is no need to lock anything because |
| 550 * the sid isn't being shared by anything. | 550 * the sid isn't being shared by anything. |
| 551 @@ -969,6 +977,9 @@ struct ssl3StateStr { | 551 @@ -978,6 +986,9 @@ struct ssl3StateStr { |
| 552 CERTCertificateList *clientCertChain; /* used by client */ | 552 CERTCertificateList *clientCertChain; /* used by client */ |
| 553 PRBool sendEmptyCert; /* used by client */ | 553 PRBool sendEmptyCert; /* used by client */ |
| 554 | 554 |
| 555 + SECKEYPrivateKey *channelID; /* used by client */ | 555 + SECKEYPrivateKey *channelID; /* used by client */ |
| 556 + SECKEYPublicKey *channelIDPub; /* used by client */ | 556 + SECKEYPublicKey *channelIDPub; /* used by client */ |
| 557 + | 557 + |
| 558 int policy; | 558 int policy; |
| 559 /* This says what cipher suites we can do, and should | 559 /* This says what cipher suites we can do, and should |
| 560 * be either SSL_ALLOWED or SSL_RESTRICTED | 560 * be either SSL_ALLOWED or SSL_RESTRICTED |
| 561 @@ -1246,6 +1257,8 @@ const unsigned char * preferredCipher; | 561 @@ -1255,6 +1266,8 @@ const unsigned char * preferredCipher; |
| 562 void *pkcs11PinArg; | 562 void *pkcs11PinArg; |
| 563 SSLNextProtoCallback nextProtoCallback; | 563 SSLNextProtoCallback nextProtoCallback; |
| 564 void *nextProtoArg; | 564 void *nextProtoArg; |
| 565 + SSLClientChannelIDCallback getChannelID; | 565 + SSLClientChannelIDCallback getChannelID; |
| 566 + void *getChannelIDArg; | 566 + void *getChannelIDArg; |
| 567 | 567 |
| 568 PRIntervalTime rTimeout; /* timeout for NSPR I/O */ | 568 PRIntervalTime rTimeout; /* timeout for NSPR I/O */ |
| 569 PRIntervalTime wTimeout; /* timeout for NSPR I/O */ | 569 PRIntervalTime wTimeout; /* timeout for NSPR I/O */ |
| 570 @@ -1590,6 +1603,11 @@ extern SECStatus ssl3_RestartHandshakeAf | 570 @@ -1599,6 +1612,11 @@ extern SECStatus ssl3_RestartHandshakeAf |
| 571 SECKEYPrivateKey * key, | 571 SECKEYPrivateKey * key, |
| 572 CERTCertificateList *certChain); | 572 CERTCertificateList *certChain); |
| 573 | 573 |
| 574 +extern SECStatus ssl3_RestartHandshakeAfterChannelIDReq( | 574 +extern SECStatus ssl3_RestartHandshakeAfterChannelIDReq( |
| 575 + sslSocket *ss, | 575 + sslSocket *ss, |
| 576 + SECKEYPublicKey *channelIDPub, | 576 + SECKEYPublicKey *channelIDPub, |
| 577 + SECKEYPrivateKey *channelID); | 577 + SECKEYPrivateKey *channelID); |
| 578 + | 578 + |
| 579 extern SECStatus ssl3_AuthCertificateComplete(sslSocket *ss, PRErrorCode error)
; | 579 extern SECStatus ssl3_AuthCertificateComplete(sslSocket *ss, PRErrorCode error)
; |
| 580 | 580 |
| 581 /* | 581 /* |
| 582 diff -pu a/nss/lib/ssl/sslnonce.c b/nss/lib/ssl/sslnonce.c | 582 diff -pu a/nss/lib/ssl/sslnonce.c b/nss/lib/ssl/sslnonce.c |
| 583 --- a/nss/lib/ssl/sslnonce.c» 2014-01-03 19:30:40.073373382 -0800 | 583 --- a/nss/lib/ssl/sslnonce.c» 2014-01-18 10:39:50.739149486 -0800 |
| 584 +++ b/nss/lib/ssl/sslnonce.c» 2014-01-03 19:36:25.379018825 -0800 | 584 +++ b/nss/lib/ssl/sslnonce.c» 2014-01-18 10:40:15.499552430 -0800 |
| 585 @@ -182,6 +182,9 @@ ssl_DestroySID(sslSessionID *sid) | 585 @@ -180,6 +180,9 @@ ssl_DestroySID(sslSessionID *sid) |
| 586 if (sid->u.ssl3.srvName.data) { | 586 if (sid->u.ssl3.srvName.data) { |
| 587 SECITEM_FreeItem(&sid->u.ssl3.srvName, PR_FALSE); | 587 SECITEM_FreeItem(&sid->u.ssl3.srvName, PR_FALSE); |
| 588 } | 588 } |
| 589 + if (sid->u.ssl3.originalHandshakeHash.data) { | 589 + if (sid->u.ssl3.originalHandshakeHash.data) { |
| 590 + SECITEM_FreeItem(&sid->u.ssl3.originalHandshakeHash, PR_FALSE); | 590 + SECITEM_FreeItem(&sid->u.ssl3.originalHandshakeHash, PR_FALSE); |
| 591 + } | 591 + } |
| 592 | 592 |
| 593 if (sid->u.ssl3.lock) { | 593 if (sid->u.ssl3.lock) { |
| 594 PR_DestroyRWLock(sid->u.ssl3.lock); | 594 PR_DestroyRWLock(sid->u.ssl3.lock); |
| 595 diff -pu a/nss/lib/ssl/sslsecur.c b/nss/lib/ssl/sslsecur.c | 595 diff -pu a/nss/lib/ssl/sslsecur.c b/nss/lib/ssl/sslsecur.c |
| 596 --- a/nss/lib/ssl/sslsecur.c» 2014-01-03 19:36:09.938766379 -0800 | 596 --- a/nss/lib/ssl/sslsecur.c» 2014-01-18 10:39:50.799150460 -0800 |
| 597 +++ b/nss/lib/ssl/sslsecur.c» 2014-01-03 19:36:25.379018825 -0800 | 597 +++ b/nss/lib/ssl/sslsecur.c» 2014-01-18 10:40:15.499552430 -0800 |
| 598 @@ -1584,6 +1584,42 @@ SSL_RestartHandshakeAfterCertReq(PRFileD | 598 @@ -1584,6 +1584,42 @@ SSL_RestartHandshakeAfterCertReq(PRFileD |
| 599 return ret; | 599 return ret; |
| 600 } | 600 } |
| 601 | 601 |
| 602 +SECStatus | 602 +SECStatus |
| 603 +SSL_RestartHandshakeAfterChannelIDReq(PRFileDesc * fd, | 603 +SSL_RestartHandshakeAfterChannelIDReq(PRFileDesc * fd, |
| 604 + SECKEYPublicKey * channelIDPub, | 604 + SECKEYPublicKey * channelIDPub, |
| 605 + SECKEYPrivateKey *channelID) | 605 + SECKEYPrivateKey *channelID) |
| 606 +{ | 606 +{ |
| 607 + sslSocket * ss = ssl_FindSocket(fd); | 607 + sslSocket * ss = ssl_FindSocket(fd); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 632 +loser: | 632 +loser: |
| 633 + SECKEY_DestroyPublicKey(channelIDPub); | 633 + SECKEY_DestroyPublicKey(channelIDPub); |
| 634 + SECKEY_DestroyPrivateKey(channelID); | 634 + SECKEY_DestroyPrivateKey(channelID); |
| 635 + return SECFailure; | 635 + return SECFailure; |
| 636 +} | 636 +} |
| 637 + | 637 + |
| 638 /* DO NOT USE. This function was exported in ssl.def with the wrong signature; | 638 /* DO NOT USE. This function was exported in ssl.def with the wrong signature; |
| 639 * this implementation exists to maintain link-time compatibility. | 639 * this implementation exists to maintain link-time compatibility. |
| 640 */ | 640 */ |
| 641 diff -pu a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c | 641 diff -pu a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c |
| 642 --- a/nss/lib/ssl/sslsock.c» 2014-01-03 19:32:06.914793097 -0800 | 642 --- a/nss/lib/ssl/sslsock.c» 2014-01-18 10:39:50.769149984 -0800 |
| 643 +++ b/nss/lib/ssl/sslsock.c» 2014-01-03 19:36:25.379018825 -0800 | 643 +++ b/nss/lib/ssl/sslsock.c» 2014-01-18 10:40:15.499552430 -0800 |
| 644 @@ -274,6 +274,8 @@ ssl_DupSocket(sslSocket *os) | 644 @@ -276,6 +276,8 @@ ssl_DupSocket(sslSocket *os) |
| 645 ss->canFalseStartCallback = os->canFalseStartCallback; | 645 ss->canFalseStartCallback = os->canFalseStartCallback; |
| 646 ss->canFalseStartCallbackData = os->canFalseStartCallbackData; | 646 ss->canFalseStartCallbackData = os->canFalseStartCallbackData; |
| 647 ss->pkcs11PinArg = os->pkcs11PinArg; | 647 ss->pkcs11PinArg = os->pkcs11PinArg; |
| 648 + ss->getChannelID = os->getChannelID; | 648 + ss->getChannelID = os->getChannelID; |
| 649 + ss->getChannelIDArg = os->getChannelIDArg; | 649 + ss->getChannelIDArg = os->getChannelIDArg; |
| 650 | 650 |
| 651 /* Create security data */ | 651 /* Create security data */ |
| 652 rv = ssl_CopySecurityInfo(ss, os); | 652 rv = ssl_CopySecurityInfo(ss, os); |
| 653 @@ -1669,6 +1671,10 @@ SSL_ReconfigFD(PRFileDesc *model, PRFile | 653 @@ -1691,6 +1693,10 @@ SSL_ReconfigFD(PRFileDesc *model, PRFile |
| 654 ss->handshakeCallbackData = sm->handshakeCallbackData; | 654 ss->handshakeCallbackData = sm->handshakeCallbackData; |
| 655 if (sm->pkcs11PinArg) | 655 if (sm->pkcs11PinArg) |
| 656 ss->pkcs11PinArg = sm->pkcs11PinArg; | 656 ss->pkcs11PinArg = sm->pkcs11PinArg; |
| 657 + if (sm->getChannelID) | 657 + if (sm->getChannelID) |
| 658 + ss->getChannelID = sm->getChannelID; | 658 + ss->getChannelID = sm->getChannelID; |
| 659 + if (sm->getChannelIDArg) | 659 + if (sm->getChannelIDArg) |
| 660 + ss->getChannelIDArg = sm->getChannelIDArg; | 660 + ss->getChannelIDArg = sm->getChannelIDArg; |
| 661 return fd; | 661 return fd; |
| 662 loser: | 662 loser: |
| 663 return NULL; | 663 return NULL; |
| 664 @@ -2946,6 +2952,8 @@ ssl_NewSocket(PRBool makeLocks, SSLProto | 664 @@ -2968,6 +2974,8 @@ ssl_NewSocket(PRBool makeLocks, SSLProto |
| 665 ss->badCertArg = NULL; | 665 ss->badCertArg = NULL; |
| 666 ss->pkcs11PinArg = NULL; | 666 ss->pkcs11PinArg = NULL; |
| 667 ss->ephemeralECDHKeyPair = NULL; | 667 ss->ephemeralECDHKeyPair = NULL; |
| 668 + ss->getChannelID = NULL; | 668 + ss->getChannelID = NULL; |
| 669 + ss->getChannelIDArg = NULL; | 669 + ss->getChannelIDArg = NULL; |
| 670 | 670 |
| 671 ssl_ChooseOps(ss); | 671 ssl_ChooseOps(ss); |
| 672 ssl2_InitSocketPolicy(ss); | 672 ssl2_InitSocketPolicy(ss); |
| 673 diff -pu a/nss/lib/ssl/sslt.h b/nss/lib/ssl/sslt.h | 673 diff -pu a/nss/lib/ssl/sslt.h b/nss/lib/ssl/sslt.h |
| 674 --- a/nss/lib/ssl/sslt.h» 2014-01-03 19:28:03.560814773 -0800 | 674 --- a/nss/lib/ssl/sslt.h» 2014-01-18 10:39:34.328882426 -0800 |
| 675 +++ b/nss/lib/ssl/sslt.h» 2014-01-03 19:36:25.379018825 -0800 | 675 +++ b/nss/lib/ssl/sslt.h» 2014-01-18 10:40:15.499552430 -0800 |
| 676 @@ -189,9 +189,10 @@ typedef enum { | 676 @@ -190,10 +190,11 @@ typedef enum { |
| 677 ssl_use_srtp_xtn = 14, | 677 ssl_app_layer_protocol_xtn = 16, |
| 678 ssl_session_ticket_xtn = 35, | 678 ssl_session_ticket_xtn = 35, |
| 679 ssl_next_proto_nego_xtn = 13172, | 679 ssl_next_proto_nego_xtn = 13172, |
| 680 + ssl_channel_id_xtn = 30032, | 680 + ssl_channel_id_xtn = 30032, |
| 681 ssl_padding_xtn = 35655, |
| 681 ssl_renegotiation_info_xtn = 0xff01 /* experimental number */ | 682 ssl_renegotiation_info_xtn = 0xff01 /* experimental number */ |
| 682 } SSLExtensionType; | 683 } SSLExtensionType; |
| 683 | 684 |
| 684 -#define SSL_MAX_EXTENSIONS 9 | 685 -#define SSL_MAX_EXTENSIONS 10 /* doesn't include ssl_padding_xtn. *
/ |
| 685 +#define SSL_MAX_EXTENSIONS 10 | 686 +#define SSL_MAX_EXTENSIONS 11 /* doesn't include ssl_padding_xtn. *
/ |
| 686 | 687 |
| 687 #endif /* __sslt_h_ */ | 688 #endif /* __sslt_h_ */ |
| OLD | NEW |