| Index: net/third_party/nss/patches/falsestart.patch
|
| ===================================================================
|
| --- net/third_party/nss/patches/falsestart.patch (revision 75311)
|
| +++ net/third_party/nss/patches/falsestart.patch (working copy)
|
| @@ -1,357 +0,0 @@
|
| -Index: mozilla/security/nss/cmd/strsclnt/strsclnt.c
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/cmd/strsclnt/strsclnt.c,v
|
| -retrieving revision 1.67
|
| -diff -u -p -r1.67 strsclnt.c
|
| ---- mozilla/security/nss/cmd/strsclnt/strsclnt.c 3 Apr 2010 18:27:28 -0000 1.67
|
| -+++ mozilla/security/nss/cmd/strsclnt/strsclnt.c 29 Jul 2010 01:49:04 -0000
|
| -@@ -162,6 +162,7 @@ static PRBool disableLocking = PR_FALSE
|
| - static PRBool ignoreErrors = PR_FALSE;
|
| - static PRBool enableSessionTickets = PR_FALSE;
|
| - static PRBool enableCompression = PR_FALSE;
|
| -+static PRBool enableFalseStart = PR_FALSE;
|
| -
|
| - PRIntervalTime maxInterval = PR_INTERVAL_NO_TIMEOUT;
|
| -
|
| -@@ -197,7 +198,8 @@ Usage(const char *progName)
|
| - " -U means enable throttling up threads\n"
|
| - " -B bypasses the PKCS11 layer for SSL encryption and MACing\n"
|
| - " -u enable TLS Session Ticket extension\n"
|
| -- " -z enable compression\n",
|
| -+ " -z enable compression\n"
|
| -+ " -g enable false start\n",
|
| - progName);
|
| - exit(1);
|
| - }
|
| -@@ -1244,6 +1246,12 @@ client_main(
|
| - errExit("SSL_OptionSet SSL_ENABLE_DEFLATE");
|
| - }
|
| -
|
| -+ if (enableFalseStart) {
|
| -+ rv = SSL_OptionSet(model_sock, SSL_ENABLE_FALSE_START, PR_TRUE);
|
| -+ if (rv != SECSuccess)
|
| -+ errExit("SSL_OptionSet SSL_ENABLE_FALSE_START");
|
| -+ }
|
| -+
|
| - SSL_SetURL(model_sock, hostName);
|
| -
|
| - SSL_AuthCertificateHook(model_sock, mySSLAuthCertificate,
|
| -@@ -1354,7 +1362,7 @@ main(int argc, char **argv)
|
| -
|
| -
|
| - optstate = PL_CreateOptState(argc, argv,
|
| -- "23BC:DNP:TUW:a:c:d:f:in:op:qst:uvw:z");
|
| -+ "23BC:DNP:TUW:a:c:d:f:gin:op:qst:uvw:z");
|
| - while ((status = PL_GetNextOpt(optstate)) == PL_OPT_OK) {
|
| - switch(optstate->option) {
|
| -
|
| -@@ -1384,6 +1392,8 @@ main(int argc, char **argv)
|
| -
|
| - case 'f': fileName = optstate->value; break;
|
| -
|
| -+ case 'g': enableFalseStart = PR_TRUE; break;
|
| -+
|
| - case 'i': ignoreErrors = PR_TRUE; break;
|
| -
|
| - case 'n': nickName = PL_strdup(optstate->value); break;
|
| -Index: mozilla/security/nss/cmd/tstclnt/tstclnt.c
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/cmd/tstclnt/tstclnt.c,v
|
| -retrieving revision 1.62
|
| -diff -u -p -r1.62 tstclnt.c
|
| ---- mozilla/security/nss/cmd/tstclnt/tstclnt.c 10 Feb 2010 18:07:21 -0000 1.62
|
| -+++ mozilla/security/nss/cmd/tstclnt/tstclnt.c 29 Jul 2010 01:49:04 -0000
|
| -@@ -225,6 +225,7 @@ static void Usage(const char *progName)
|
| - fprintf(stderr, "%-20s Renegotiate N times (resuming session if N>1).\n", "-r N");
|
| - fprintf(stderr, "%-20s Enable the session ticket extension.\n", "-u");
|
| - fprintf(stderr, "%-20s Enable compression.\n", "-z");
|
| -+ fprintf(stderr, "%-20s Enable false start.\n", "-g");
|
| - fprintf(stderr, "%-20s Letter(s) chosen from the following list\n",
|
| - "-c ciphers");
|
| - fprintf(stderr,
|
| -@@ -521,6 +522,7 @@ int main(int argc, char **argv)
|
| - int useExportPolicy = 0;
|
| - int enableSessionTickets = 0;
|
| - int enableCompression = 0;
|
| -+ int enableFalseStart = 0;
|
| - PRSocketOptionData opt;
|
| - PRNetAddr addr;
|
| - PRPollDesc pollset[2];
|
| -@@ -551,7 +553,7 @@ int main(int argc, char **argv)
|
| - }
|
| -
|
| - optstate = PL_CreateOptState(argc, argv,
|
| -- "23BSTW:a:c:d:fh:m:n:op:qr:suvw:xz");
|
| -+ "23BSTW:a:c:d:fgh:m:n:op:qr:suvw:xz");
|
| - while ((optstatus = PL_GetNextOpt(optstate)) == PL_OPT_OK) {
|
| - switch (optstate->option) {
|
| - case '?':
|
| -@@ -578,6 +580,8 @@ int main(int argc, char **argv)
|
| -
|
| - case 'c': cipherString = PORT_Strdup(optstate->value); break;
|
| -
|
| -+ case 'g': enableFalseStart = 1; break;
|
| -+
|
| - case 'd': certDir = PORT_Strdup(optstate->value); break;
|
| -
|
| - case 'f': clientSpeaksFirst = PR_TRUE; break;
|
| -@@ -863,7 +867,14 @@ int main(int argc, char **argv)
|
| - SECU_PrintError(progName, "error enabling compression");
|
| - return 1;
|
| - }
|
| --
|
| -+
|
| -+ /* enable false start. */
|
| -+ rv = SSL_OptionSet(s, SSL_ENABLE_FALSE_START, enableFalseStart);
|
| -+ if (rv != SECSuccess) {
|
| -+ SECU_PrintError(progName, "error enabling false start");
|
| -+ return 1;
|
| -+ }
|
| -+
|
| - SSL_SetPKCS11PinArg(s, &pwdata);
|
| -
|
| - SSL_AuthCertificateHook(s, SSL_AuthCertificate, (void *)handle);
|
| -Index: mozilla/security/nss/lib/ssl/ssl.h
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/lib/ssl/ssl.h,v
|
| -retrieving revision 1.38
|
| -diff -u -p -r1.38 ssl.h
|
| ---- mozilla/security/nss/lib/ssl/ssl.h 17 Feb 2010 02:29:07 -0000 1.38
|
| -+++ mozilla/security/nss/lib/ssl/ssl.h 29 Jul 2010 01:49:04 -0000
|
| -@@ -128,6 +128,17 @@ SSL_IMPORT PRFileDesc *SSL_ImportFD(PRFi
|
| - /* Renegotiation Info (RI) */
|
| - /* extension in ALL handshakes. */
|
| - /* default: off */
|
| -+#define SSL_ENABLE_FALSE_START 22 /* Enable SSL false start (off by */
|
| -+ /* default, applies only to */
|
| -+ /* clients). False start is a */
|
| -+/* mode where an SSL client will start sending application data before */
|
| -+/* verifying the server's Finished message. This means that we could end up */
|
| -+/* sending data to an imposter. However, the data will be encrypted and */
|
| -+/* only the true server can derive the session key. Thus, so long as the */
|
| -+/* cipher isn't broken this is safe. Because of this, False Start will only */
|
| -+/* occur on RSA or DH ciphersuites where the cipher's key length is >= 80 */
|
| -+/* bits. The advantage of False Start is that it saves a round trip for */
|
| -+/* client-speaks-first protocols when performing a full handshake. */
|
| -
|
| - #ifdef SSL_DEPRECATED_FUNCTION
|
| - /* Old deprecated function names */
|
| -Index: mozilla/security/nss/lib/ssl/ssl3con.c
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/lib/ssl/ssl3con.c,v
|
| -retrieving revision 1.142
|
| -diff -u -p -r1.142 ssl3con.c
|
| ---- mozilla/security/nss/lib/ssl/ssl3con.c 24 Jun 2010 19:53:20 -0000 1.142
|
| -+++ mozilla/security/nss/lib/ssl/ssl3con.c 29 Jul 2010 01:49:04 -0000
|
| -@@ -5665,7 +5665,17 @@ ssl3_RestartHandshakeAfterCertReq(sslSoc
|
| - return rv;
|
| - }
|
| -
|
| --
|
| -+PRBool
|
| -+ssl3_CanFalseStart(sslSocket *ss) {
|
| -+ return ss->opt.enableFalseStart &&
|
| -+ !ss->sec.isServer &&
|
| -+ !ss->ssl3.hs.isResuming &&
|
| -+ ss->ssl3.cwSpec &&
|
| -+ ss->ssl3.cwSpec->cipher_def->secret_key_size >= 10 &&
|
| -+ (ss->ssl3.hs.kea_def->exchKeyType == ssl_kea_rsa ||
|
| -+ ss->ssl3.hs.kea_def->exchKeyType == ssl_kea_dh ||
|
| -+ ss->ssl3.hs.kea_def->exchKeyType == ssl_kea_ecdh);
|
| -+}
|
| -
|
| - /* Called from ssl3_HandleHandshakeMessage() when it has deciphered a complete
|
| - * ssl3 Server Hello Done message.
|
| -@@ -5737,6 +5747,12 @@ ssl3_HandleServerHelloDone(sslSocket *ss
|
| - ss->ssl3.hs.ws = wait_new_session_ticket;
|
| - else
|
| - ss->ssl3.hs.ws = wait_change_cipher;
|
| -+
|
| -+ /* Do the handshake callback for sslv3 here, if we can false start. */
|
| -+ if (ss->handshakeCallback != NULL && ssl3_CanFalseStart(ss)) {
|
| -+ (ss->handshakeCallback)(ss->fd, ss->handshakeCallbackData);
|
| -+ }
|
| -+
|
| - return SECSuccess;
|
| -
|
| - loser:
|
| -@@ -8476,8 +8492,8 @@ xmit_loser:
|
| - }
|
| - ss->ssl3.hs.ws = idle_handshake;
|
| -
|
| -- /* Do the handshake callback for sslv3 here. */
|
| -- if (ss->handshakeCallback != NULL) {
|
| -+ /* Do the handshake callback for sslv3 here, if we cannot false start. */
|
| -+ if (ss->handshakeCallback != NULL && !ssl3_CanFalseStart(ss)) {
|
| - (ss->handshakeCallback)(ss->fd, ss->handshakeCallbackData);
|
| - }
|
| -
|
| -Index: mozilla/security/nss/lib/ssl/ssl3gthr.c
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/lib/ssl/ssl3gthr.c,v
|
| -retrieving revision 1.9
|
| -diff -u -p -r1.9 ssl3gthr.c
|
| ---- mozilla/security/nss/lib/ssl/ssl3gthr.c 20 Nov 2008 07:37:25 -0000 1.9
|
| -+++ mozilla/security/nss/lib/ssl/ssl3gthr.c 29 Jul 2010 01:49:04 -0000
|
| -@@ -188,6 +188,7 @@ ssl3_GatherCompleteHandshake(sslSocket *
|
| - {
|
| - SSL3Ciphertext cText;
|
| - int rv;
|
| -+ PRBool canFalseStart = PR_FALSE;
|
| -
|
| - PORT_Assert( ss->opt.noLocks || ssl_HaveRecvBufLock(ss) );
|
| - do {
|
| -@@ -207,7 +208,20 @@ ssl3_GatherCompleteHandshake(sslSocket *
|
| - if (rv < 0) {
|
| - return ss->recvdCloseNotify ? 0 : rv;
|
| - }
|
| -- } while (ss->ssl3.hs.ws != idle_handshake && ss->gs.buf.len == 0);
|
| -+
|
| -+ /* If we kicked off a false start in ssl3_HandleServerHelloDone, break
|
| -+ * out of this loop early without finishing the handshake.
|
| -+ */
|
| -+ if (ss->opt.enableFalseStart) {
|
| -+ ssl_GetSSL3HandshakeLock(ss);
|
| -+ canFalseStart = (ss->ssl3.hs.ws == wait_change_cipher ||
|
| -+ ss->ssl3.hs.ws == wait_new_session_ticket) &&
|
| -+ ssl3_CanFalseStart(ss);
|
| -+ ssl_ReleaseSSL3HandshakeLock(ss);
|
| -+ }
|
| -+ } while (ss->ssl3.hs.ws != idle_handshake &&
|
| -+ !canFalseStart &&
|
| -+ ss->gs.buf.len == 0);
|
| -
|
| - ss->gs.readOffset = 0;
|
| - ss->gs.writeOffset = ss->gs.buf.len;
|
| -Index: mozilla/security/nss/lib/ssl/sslimpl.h
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/lib/ssl/sslimpl.h,v
|
| -retrieving revision 1.77
|
| -diff -u -p -r1.77 sslimpl.h
|
| ---- mozilla/security/nss/lib/ssl/sslimpl.h 10 Feb 2010 00:33:50 -0000 1.77
|
| -+++ mozilla/security/nss/lib/ssl/sslimpl.h 29 Jul 2010 01:49:04 -0000
|
| -@@ -333,6 +333,7 @@ typedef struct sslOptionsStr {
|
| - unsigned int enableDeflate : 1; /* 19 */
|
| - unsigned int enableRenegotiation : 2; /* 20-21 */
|
| - unsigned int requireSafeNegotiation : 1; /* 22 */
|
| -+ unsigned int enableFalseStart : 1; /* 23 */
|
| - } sslOptions;
|
| -
|
| - typedef enum { sslHandshakingUndetermined = 0,
|
| -@@ -1250,6 +1251,8 @@ extern void ssl_SetAlwaysBlock(sslS
|
| -
|
| - extern SECStatus ssl_EnableNagleDelay(sslSocket *ss, PRBool enabled);
|
| -
|
| -+extern PRBool ssl3_CanFalseStart(sslSocket *ss);
|
| -+
|
| - #define SSL_LOCK_READER(ss) if (ss->recvLock) PZ_Lock(ss->recvLock)
|
| - #define SSL_UNLOCK_READER(ss) if (ss->recvLock) PZ_Unlock(ss->recvLock)
|
| - #define SSL_LOCK_WRITER(ss) if (ss->sendLock) PZ_Lock(ss->sendLock)
|
| -Index: mozilla/security/nss/lib/ssl/sslsecur.c
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/lib/ssl/sslsecur.c,v
|
| -retrieving revision 1.43
|
| -diff -u -p -r1.43 sslsecur.c
|
| ---- mozilla/security/nss/lib/ssl/sslsecur.c 14 Jan 2010 22:15:25 -0000 1.43
|
| -+++ mozilla/security/nss/lib/ssl/sslsecur.c 29 Jul 2010 01:49:04 -0000
|
| -@@ -1199,8 +1199,17 @@ ssl_SecureSend(sslSocket *ss, const unsi
|
| - ss->writerThread = PR_GetCurrentThread();
|
| - /* If any of these is non-zero, the initial handshake is not done. */
|
| - if (!ss->firstHsDone) {
|
| -+ PRBool canFalseStart = PR_FALSE;
|
| - ssl_Get1stHandshakeLock(ss);
|
| -- if (ss->handshake || ss->nextHandshake || ss->securityHandshake) {
|
| -+ if (ss->version >= SSL_LIBRARY_VERSION_3_0 &&
|
| -+ (ss->ssl3.hs.ws == wait_change_cipher ||
|
| -+ ss->ssl3.hs.ws == wait_finished ||
|
| -+ ss->ssl3.hs.ws == wait_new_session_ticket) &&
|
| -+ ssl3_CanFalseStart(ss)) {
|
| -+ canFalseStart = PR_TRUE;
|
| -+ }
|
| -+ if (!canFalseStart &&
|
| -+ (ss->handshake || ss->nextHandshake || ss->securityHandshake)) {
|
| - rv = ssl_Do1stHandshake(ss);
|
| - }
|
| - ssl_Release1stHandshakeLock(ss);
|
| -Index: mozilla/security/nss/lib/ssl/sslsock.c
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/lib/ssl/sslsock.c,v
|
| -retrieving revision 1.67
|
| -diff -u -p -r1.67 sslsock.c
|
| ---- mozilla/security/nss/lib/ssl/sslsock.c 25 Apr 2010 23:37:38 -0000 1.67
|
| -+++ mozilla/security/nss/lib/ssl/sslsock.c 29 Jul 2010 01:49:04 -0000
|
| -@@ -183,6 +183,7 @@ static sslOptions ssl_defaults = {
|
| - PR_FALSE, /* enableDeflate */
|
| - 2, /* enableRenegotiation (default: requires extension) */
|
| - PR_FALSE, /* requireSafeNegotiation */
|
| -+ PR_FALSE, /* enableFalseStart */
|
| - };
|
| -
|
| - sslSessionIDLookupFunc ssl_sid_lookup;
|
| -@@ -728,6 +729,10 @@ SSL_OptionSet(PRFileDesc *fd, PRInt32 wh
|
| - ss->opt.requireSafeNegotiation = on;
|
| - break;
|
| -
|
| -+ case SSL_ENABLE_FALSE_START:
|
| -+ ss->opt.enableFalseStart = on;
|
| -+ break;
|
| -+
|
| - default:
|
| - PORT_SetError(SEC_ERROR_INVALID_ARGS);
|
| - rv = SECFailure;
|
| -@@ -791,6 +796,7 @@ SSL_OptionGet(PRFileDesc *fd, PRInt32 wh
|
| - on = ss->opt.enableRenegotiation; break;
|
| - case SSL_REQUIRE_SAFE_NEGOTIATION:
|
| - on = ss->opt.requireSafeNegotiation; break;
|
| -+ case SSL_ENABLE_FALSE_START: on = ss->opt.enableFalseStart; break;
|
| -
|
| - default:
|
| - PORT_SetError(SEC_ERROR_INVALID_ARGS);
|
| -@@ -841,6 +847,7 @@ SSL_OptionGetDefault(PRInt32 which, PRBo
|
| - case SSL_REQUIRE_SAFE_NEGOTIATION:
|
| - on = ssl_defaults.requireSafeNegotiation;
|
| - break;
|
| -+ case SSL_ENABLE_FALSE_START: on = ssl_defaults.enableFalseStart; break;
|
| -
|
| - default:
|
| - PORT_SetError(SEC_ERROR_INVALID_ARGS);
|
| -@@ -984,6 +991,10 @@ SSL_OptionSetDefault(PRInt32 which, PRBo
|
| - ssl_defaults.requireSafeNegotiation = on;
|
| - break;
|
| -
|
| -+ case SSL_ENABLE_FALSE_START:
|
| -+ ssl_defaults.enableFalseStart = on;
|
| -+ break;
|
| -+
|
| - default:
|
| - PORT_SetError(SEC_ERROR_INVALID_ARGS);
|
| - return SECFailure;
|
| -Index: mozilla/security/nss/tests/ssl/sslstress.txt
|
| -===================================================================
|
| -RCS file: /cvsroot/mozilla/security/nss/tests/ssl/sslstress.txt,v
|
| -retrieving revision 1.18
|
| -diff -u -p -r1.18 sslstress.txt
|
| ---- mozilla/security/nss/tests/ssl/sslstress.txt 3 Feb 2010 02:25:36 -0000 1.18
|
| -+++ mozilla/security/nss/tests/ssl/sslstress.txt 29 Jul 2010 01:49:04 -0000
|
| -@@ -42,9 +42,11 @@
|
| - noECC 0 _ -c_1000_-C_A Stress SSL2 RC4 128 with MD5
|
| - noECC 0 _ -c_1000_-C_c_-T Stress SSL3 RC4 128 with MD5
|
| - noECC 0 _ -c_1000_-C_c Stress TLS RC4 128 with MD5
|
| -+ noECC 0 _ -c_1000_-C_c_-g Stress TLS RC4 128 with MD5 (false start)
|
| - noECC 0 -u -2_-c_1000_-C_c_-u Stress TLS RC4 128 with MD5 (session ticket)
|
| - noECC 0 -z -2_-c_1000_-C_c_-z Stress TLS RC4 128 with MD5 (compression)
|
| - noECC 0 -u_-z -2_-c_1000_-C_c_-u_-z Stress TLS RC4 128 with MD5 (session ticket, compression)
|
| -+ noECC 0 -u_-z -2_-c_1000_-C_c_-u_-z_-g Stress TLS RC4 128 with MD5 (session ticket, compression, false start)
|
| - SNI 0 -u_-a_Host-sni.Dom -2_-3_-c_1000_-C_c_-u Stress TLS RC4 128 with MD5 (session ticket, SNI)
|
| -
|
| - #
|
| -@@ -55,7 +57,9 @@
|
| - noECC 0 -r_-r -c_100_-C_c_-N_-n_TestUser Stress TLS RC4 128 with MD5 (no reuse, client auth)
|
| - noECC 0 -r_-r_-u -2_-c_100_-C_c_-n_TestUser_-u Stress TLS RC4 128 with MD5 (session ticket, client auth)
|
| - noECC 0 -r_-r_-z -2_-c_100_-C_c_-n_TestUser_-z Stress TLS RC4 128 with MD5 (compression, client auth)
|
| -+ noECC 0 -r_-r_-z -2_-c_100_-C_c_-n_TestUser_-z_-g Stress TLS RC4 128 with MD5 (compression, client auth, false start)
|
| - noECC 0 -r_-r_-u_-z -2_-c_100_-C_c_-n_TestUser_-u_-z Stress TLS RC4 128 with MD5 (session ticket, compression, client auth)
|
| -+ noECC 0 -r_-r_-u_-z -2_-c_100_-C_c_-n_TestUser_-u_-z_-g Stress TLS RC4 128 with MD5 (session ticket, compression, client auth, false start)
|
| - SNI 0 -r_-r_-u_-a_Host-sni.Dom -2_-3_-c_1000_-C_c_-u Stress TLS RC4 128 with MD5 (session ticket, SNI, client auth, default virt host)
|
| - SNI 0 -r_-r_-u_-a_Host-sni.Dom_-k_Host-sni.Dom -2_-3_-c_1000_-C_c_-u_-a_Host-sni.Dom Stress TLS RC4 128 with MD5 (session ticket, SNI, client auth, change virt host)
|
| -
|
|
|