Skip to content

Commit

Permalink
Bug 1312976 - Fail if exporters are used with SHA-384 suites, r=ekr
Browse files Browse the repository at this point in the history
try: -b do -p all -u ssl,bogo,gtest -t all

Differential Revision: https://nss-review.dev.mozaws.net/D58

--HG--
extra : rebase_source : f03f70dce79313f5c15445bd1635e5b362d427b2
  • Loading branch information
martinthomson committed Nov 22, 2016
1 parent 14062d4 commit b7545f4
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 15 deletions.
22 changes: 13 additions & 9 deletions lib/ssl/ssl3con.c
Expand Up @@ -11021,13 +11021,10 @@ ssl3_ComputeTLSFinished(sslSocket *ss, ssl3CipherSpec *spec,
PK11Context *prf_context;
unsigned int retLen;

PORT_Assert(spec->master_secret);
if (!spec->master_secret) {
const char *label = isServer ? "server finished" : "client finished";
unsigned int len = 15;
HASH_HashType hashType = ssl3_GetTls12HashType(ss);
return ssl3_TLSPRFWithMasterSecret(spec, label, len, hashes->u.raw,
hashes->len, tlsFinished->verify_data,
sizeof tlsFinished->verify_data, hashType);
PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
return SECFailure;
}

if (spec->version < SSL_LIBRARY_VERSION_TLS_1_2) {
Expand Down Expand Up @@ -11060,9 +11057,10 @@ ssl3_ComputeTLSFinished(sslSocket *ss, ssl3CipherSpec *spec,
* ss->ssl3.crSpec).
*/
SECStatus
ssl3_TLSPRFWithMasterSecret(ssl3CipherSpec *spec, const char *label,
unsigned int labelLen, const unsigned char *val, unsigned int valLen,
unsigned char *out, unsigned int outLen, HASH_HashType tls12HashType)
ssl3_TLSPRFWithMasterSecret(sslSocket *ss, ssl3CipherSpec *spec,
const char *label, unsigned int labelLen,
const unsigned char *val, unsigned int valLen,
unsigned char *out, unsigned int outLen)
{
SECStatus rv = SECSuccess;

Expand All @@ -11073,6 +11071,12 @@ ssl3_TLSPRFWithMasterSecret(ssl3CipherSpec *spec, const char *label,
unsigned int retLen;

if (spec->version >= SSL_LIBRARY_VERSION_TLS_1_2) {
/* Bug 1312976 non-SHA256 exporters are broken. */
if (ssl3_GetPrfHashMechanism(ss) != CKM_SHA256) {
PORT_Assert(0);
PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
return SECFailure;
}
mech = CKM_NSS_TLS_PRF_GENERAL_SHA256;
}
prf_context = PK11_CreateContextBySymKey(mech, CKA_SIGN,
Expand Down
5 changes: 2 additions & 3 deletions lib/ssl/sslimpl.h
Expand Up @@ -1842,11 +1842,10 @@ extern HASH_HashType
ssl3_GetTls12HashType(sslSocket *ss);

extern SECStatus
ssl3_TLSPRFWithMasterSecret(ssl3CipherSpec *spec,
ssl3_TLSPRFWithMasterSecret(sslSocket *ss, ssl3CipherSpec *spec,
const char *label, unsigned int labelLen,
const unsigned char *val, unsigned int valLen,
unsigned char *out, unsigned int outLen,
HASH_HashType tls12HashType);
unsigned char *out, unsigned int outLen);

#ifdef TRACE
#define SSL_TRACE(msg) ssl_Trace msg
Expand Down
5 changes: 2 additions & 3 deletions lib/ssl/sslinfo.c
Expand Up @@ -455,9 +455,8 @@ SSL_ExportKeyingMaterial(PRFileDesc *fd,
PORT_SetError(SSL_ERROR_HANDSHAKE_NOT_COMPLETED);
rv = SECFailure;
} else {
HASH_HashType ht = ssl3_GetTls12HashType(ss);
rv = ssl3_TLSPRFWithMasterSecret(ss->ssl3.cwSpec, label, labelLen, val,
valLen, out, outLen, ht);
rv = ssl3_TLSPRFWithMasterSecret(ss, ss->ssl3.cwSpec, label, labelLen,
val, valLen, out, outLen);
}
ssl_ReleaseSpecReadLock(ss);

Expand Down

0 comments on commit b7545f4

Please sign in to comment.