Index: net/third_party/nss/patches/secret_exporter.patch |
diff --git a/net/third_party/nss/patches/secret_exporter.patch b/net/third_party/nss/patches/secret_exporter.patch |
index 8e042521c4e33d5e2bb11f1d7b948f726e1aea63..7e6eaa05ae79eeec24c015ac30fdfaeb04e6b630 100644 |
--- a/net/third_party/nss/patches/secret_exporter.patch |
+++ b/net/third_party/nss/patches/secret_exporter.patch |
@@ -1,4 +1,4 @@ |
-commit 58913147a052b19246ac946077484d033d309287 |
+commit c92170f883e6cfdc2c2dc6dbb49d3e6b8e9928f1 |
Author: Adam Langley <agl@chromium.org> |
Date: Thu Jul 21 11:34:32 2011 -0400 |
@@ -17,32 +17,34 @@ index 7ef15db..1993d3e 100644 |
SSL_GetStapledOCSPResponse; |
SSL_HandshakeResumedSession; |
diff --git a/mozilla/security/nss/lib/ssl/ssl.h b/mozilla/security/nss/lib/ssl/ssl.h |
-index 53ca301..1537aae 100644 |
+index 53ca301..6b364bb 100644 |
--- a/mozilla/security/nss/lib/ssl/ssl.h |
+++ b/mozilla/security/nss/lib/ssl/ssl.h |
-@@ -686,6 +686,17 @@ SSL_IMPORT SECStatus SSL_GetCipherSuiteInfo(PRUint16 cipherSuite, |
+@@ -686,6 +686,19 @@ SSL_IMPORT SECStatus SSL_GetCipherSuiteInfo(PRUint16 cipherSuite, |
/* Returnes negotiated through SNI host info. */ |
SSL_IMPORT SECItem *SSL_GetNegotiatedHostInfo(PRFileDesc *fd); |
+/* Export keying material according to RFC 5705. |
+** fd must correspond to a TLS 1.0 or higher socket and out must |
-+** already be allocated. |
++** already be allocated. If contextLen is zero it uses the no-context |
++** construction from the RFC. |
+*/ |
+SSL_IMPORT SECStatus SSL_ExportKeyingMaterial(PRFileDesc *fd, |
+ const char *label, |
++ unsigned int labelLen, |
+ const unsigned char *context, |
-+ unsigned int contextlen, |
++ unsigned int contextLen, |
+ unsigned char *out, |
-+ unsigned int outlen); |
++ unsigned int outLen); |
+ |
/* |
** Return a new reference to the certificate that was most recently sent |
** to the peer on this SSL/TLS connection, or NULL if none has been sent. |
diff --git a/mozilla/security/nss/lib/ssl/ssl3con.c b/mozilla/security/nss/lib/ssl/ssl3con.c |
-index c39b8f8..dee5555 100644 |
+index 66071d2..3bda2f3 100644 |
--- a/mozilla/security/nss/lib/ssl/ssl3con.c |
+++ b/mozilla/security/nss/lib/ssl/ssl3con.c |
-@@ -8442,18 +8442,17 @@ ssl3_RestartHandshakeAfterServerCert(sslSocket *ss) |
+@@ -8443,33 +8443,33 @@ ssl3_RestartHandshakeAfterServerCert(sslSocket *ss) |
return rv; |
} |
@@ -67,11 +69,15 @@ index c39b8f8..dee5555 100644 |
- label = isServer ? "server finished" : "client finished"; |
- len = 15; |
+ SECStatus rv = SECSuccess; |
-+ unsigned int retLen; |
if (spec->master_secret && !spec->bypassCiphers) { |
SECItem param = {siBuffer, NULL, 0}; |
-@@ -8464,11 +8463,11 @@ ssl3_ComputeTLSFinished(ssl3CipherSpec *spec, |
+ PK11Context *prf_context = |
+ PK11_CreateContextBySymKey(CKM_TLS_PRF_GENERAL, CKA_SIGN, |
+ spec->master_secret, ¶m); |
++ unsigned int retLen; |
++ |
+ if (!prf_context) |
return SECFailure; |
rv = PK11_DigestBegin(prf_context); |
@@ -88,7 +94,7 @@ index c39b8f8..dee5555 100644 |
PK11_DestroyContext(prf_context, PR_TRUE); |
} else { |
-@@ -8477,17 +8476,34 @@ ssl3_ComputeTLSFinished(ssl3CipherSpec *spec, |
+@@ -8478,17 +8478,36 @@ ssl3_ComputeTLSFinished(ssl3CipherSpec *spec, |
SECItem outData = { siBuffer, }; |
PRBool isFIPS = PR_FALSE; |
@@ -116,10 +122,12 @@ index c39b8f8..dee5555 100644 |
+{ |
+ const char * label; |
+ SECStatus rv; |
++ unsigned int len; |
+ |
+ label = isServer ? "server finished" : "client finished"; |
++ len = 15; |
+ |
-+ rv = ssl3_TLSPRFWithMasterSecret(spec, label, 15, hashes->md5, |
++ rv = ssl3_TLSPRFWithMasterSecret(spec, label, len, hashes->md5, |
+ sizeof *hashes, tlsFinished->verify_data, |
+ sizeof tlsFinished->verify_data); |
+ |
@@ -147,7 +155,7 @@ index df30029..073616f 100644 |
void FNV1A64_Init(PRUint64 *digest); |
diff --git a/mozilla/security/nss/lib/ssl/sslinfo.c b/mozilla/security/nss/lib/ssl/sslinfo.c |
-index 96377b0..9a58b4d 100644 |
+index 96377b0..cf870c7 100644 |
--- a/mozilla/security/nss/lib/ssl/sslinfo.c |
+++ b/mozilla/security/nss/lib/ssl/sslinfo.c |
@@ -20,6 +20,7 @@ |
@@ -158,24 +166,18 @@ index 96377b0..9a58b4d 100644 |
* |
* Alternatively, the contents of this file may be used under the terms of |
* either the GNU General Public License Version 2 or later (the "GPL"), or |
-@@ -38,6 +39,7 @@ |
- #include "ssl.h" |
- #include "sslimpl.h" |
- #include "sslproto.h" |
-+#include "pk11func.h" |
- |
- static const char * |
- ssl_GetCompressionMethodName(SSLCompressionMethod compression) |
-@@ -316,6 +318,67 @@ SSL_IsExportCipherSuite(PRUint16 cipherSuite) |
+@@ -316,6 +317,69 @@ SSL_IsExportCipherSuite(PRUint16 cipherSuite) |
return PR_FALSE; |
} |
-+/* Export keying material according to draft-ietf-tls-extractor-06. |
++/* Export keying material according to RFC 5705. |
+** fd must correspond to a TLS 1.0 or higher socket, out must |
+** be already allocated. |
+*/ |
+SECStatus |
-+SSL_ExportKeyingMaterial(PRFileDesc *fd, const char *label, |
++SSL_ExportKeyingMaterial(PRFileDesc *fd, |
++ const char *label, |
++ unsigned int labelLen, |
+ const unsigned char *context, |
+ unsigned int contextLen, |
+ unsigned char *out, |
@@ -198,11 +200,6 @@ index 96377b0..9a58b4d 100644 |
+ return SECFailure; |
+ } |
+ |
-+ if (ss->ssl3.hs.ws != idle_handshake) { |
-+ PORT_SetError(SSL_ERROR_HANDSHAKE_NOT_COMPLETED); |
-+ return SECFailure; |
-+ } |
-+ |
+ valLen = SSL3_RANDOM_LENGTH * 2; |
+ if (contextLen > 0) |
+ valLen += 2 /* uint16 length */ + contextLen; |
@@ -223,11 +220,16 @@ index 96377b0..9a58b4d 100644 |
+ PORT_Assert(i == valLen); |
+ |
+ ssl_GetSpecReadLock(ss); |
-+ rv = ssl3_TLSPRFWithMasterSecret(ss->ssl3.crSpec, label, strlen(label), val, valLen, out, outLen); |
++ if (!ss->ssl3.cwSpec->master_secret && !ss->ssl3.cwSpec->msItem.len) { |
++ PORT_SetError(SSL_ERROR_HANDSHAKE_NOT_COMPLETED); |
++ rv = SECFailure; |
++ } else { |
++ rv = ssl3_TLSPRFWithMasterSecret(ss->ssl3.cwSpec, label, labelLen, val, |
++ valLen, out, outLen); |
++ } |
+ ssl_ReleaseSpecReadLock(ss); |
+ |
-+ if (val != NULL) |
-+ PORT_ZFree(val, valLen); |
++ PORT_ZFree(val, valLen); |
+ return rv; |
+} |
+ |