зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1401594 - land NSS NSS_3_34_BETA2 UPGRADE_NSS_RELEASE, r=me
MozReview-Commit-ID: IZcYFTH0x9o --HG-- extra : rebase_source : 224952488b3e4beef03d707aa43c17a095df02f9
This commit is contained in:
Родитель
cfcc47b51e
Коммит
714a126090
|
@ -1915,7 +1915,7 @@ MOZ_ARG_WITH_BOOL(system-nss,
|
|||
_USE_SYSTEM_NSS=1 )
|
||||
|
||||
if test -n "$_USE_SYSTEM_NSS"; then
|
||||
AM_PATH_NSS(3.35, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
|
||||
AM_PATH_NSS(3.34, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
|
||||
fi
|
||||
|
||||
if test -n "$MOZ_SYSTEM_NSS"; then
|
||||
|
|
|
@ -1 +1 @@
|
|||
de7e5e67e878
|
||||
NSS_3_34_BETA2
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
Functions changes summary: 0 Removed, 0 Changed, 4 Added functions
|
||||
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
|
||||
4 Added functions:
|
||||
|
||||
'function SECItem* SEC_CreateSignatureAlgorithmParameters(SECItem*, SECOidTag, SECOidTag, const SECItem*, const SECKEYPrivateKey*)' {SEC_CreateSignatureAlgorithmParameters@@NSS_3.34}
|
||||
'function SECStatus SEC_DerSignDataWithAlgorithmID(SECItem*, const unsigned char*, int, SECKEYPrivateKey*, SECAlgorithmID*)' {SEC_DerSignDataWithAlgorithmID@@NSS_3.34}
|
||||
'function SECStatus SEC_SignDataWithAlgorithmID(SECItem*, const unsigned char*, int, SECKEYPrivateKey*, SECAlgorithmID*)' {SEC_SignDataWithAlgorithmID@@NSS_3.34}
|
||||
'function void SGN_NewContextWithAlgorithmID(SECAlgorithmID*, SECKEYPrivateKey*)' {SGN_NewContextWithAlgorithmID@@NSS_3.34}
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
Functions changes summary: 0 Removed, 1 Changed, 0 Added function
|
||||
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
|
||||
|
||||
1 function with some indirect sub-type change:
|
||||
|
||||
[C]'function SECStatus SSL_GetChannelInfo(SSLChannelInfo*, PRUintn)' at sslinfo.c:26:1 has some indirect sub-type changes:
|
||||
parameter 1 of type 'SSLChannelInfo*' has sub-type changes:
|
||||
in pointed to type 'typedef SSLChannelInfo' at sslt.h:288:1:
|
||||
underlying type 'struct SSLChannelInfoStr' at sslt.h:229:1 changed:
|
||||
type size changed from 896 to 960 bits
|
||||
2 data member insertions:
|
||||
'SSLNamedGroup SSLChannelInfoStr::originalKeaGroup', at offset 864 (in bits) at sslt.h:281:1
|
||||
'PRBool SSLChannelInfoStr::resumed', at offset 896 (in bits) at sslt.h:284:1
|
||||
|
||||
|
|
@ -1 +1 @@
|
|||
NSS_3_34_BRANCH
|
||||
NSS_3_33_BRANCH
|
||||
|
|
|
@ -10,3 +10,4 @@
|
|||
*/
|
||||
|
||||
#error "Do not include this header file."
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <cassert>
|
||||
#include <vector>
|
||||
|
||||
static inline std::vector<uint8_t> hex_string_to_bytes(std::string s) {
|
||||
std::vector<uint8_t> hex_string_to_bytes(std::string s) {
|
||||
std::vector<uint8_t> bytes;
|
||||
for (size_t i = 0; i < s.length(); i += 2) {
|
||||
bytes.push_back(std::stoul(s.substr(i, 2), nullptr, 16));
|
||||
|
|
|
@ -11,7 +11,6 @@ CPPSRCS = \
|
|||
pk11_chacha20poly1305_unittest.cc \
|
||||
pk11_curve25519_unittest.cc \
|
||||
pk11_ecdsa_unittest.cc \
|
||||
pk11_encrypt_derive_unittest.cc \
|
||||
pk11_export_unittest.cc \
|
||||
pk11_pbkdf2_unittest.cc \
|
||||
pk11_prf_unittest.cc \
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
'pk11_chacha20poly1305_unittest.cc',
|
||||
'pk11_curve25519_unittest.cc',
|
||||
'pk11_ecdsa_unittest.cc',
|
||||
'pk11_encrypt_derive_unittest.cc',
|
||||
'pk11_pbkdf2_unittest.cc',
|
||||
'pk11_prf_unittest.cc',
|
||||
'pk11_prng_unittest.cc',
|
||||
|
|
|
@ -0,0 +1,189 @@
|
|||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "ssl.h"
|
||||
#include "sslerr.h"
|
||||
#include "sslproto.h"
|
||||
|
||||
#include "gtest_utils.h"
|
||||
#include "tls_connect.h"
|
||||
#include "tls_filter.h"
|
||||
#include "tls_parser.h"
|
||||
|
||||
namespace nss_test {
|
||||
|
||||
static const uint32_t kServerHelloVersionAlt = SSL_LIBRARY_VERSION_TLS_1_2;
|
||||
static const uint16_t kServerHelloVersionRegular =
|
||||
0x7f00 | TLS_1_3_DRAFT_VERSION;
|
||||
|
||||
class AltHandshakeTest : public TlsConnectStreamTls13 {
|
||||
protected:
|
||||
void SetUp() {
|
||||
TlsConnectStreamTls13::SetUp();
|
||||
client_ccs_recorder_ =
|
||||
std::make_shared<TlsRecordRecorder>(kTlsChangeCipherSpecType);
|
||||
server_handshake_recorder_ =
|
||||
std::make_shared<TlsRecordRecorder>(kTlsHandshakeType);
|
||||
server_ccs_recorder_ =
|
||||
std::make_shared<TlsRecordRecorder>(kTlsChangeCipherSpecType);
|
||||
server_hello_recorder_ =
|
||||
std::make_shared<TlsInspectorRecordHandshakeMessage>(
|
||||
kTlsHandshakeServerHello);
|
||||
}
|
||||
|
||||
void SetAltHandshakeTypeEnabled() {
|
||||
client_->SetAltHandshakeTypeEnabled();
|
||||
server_->SetAltHandshakeTypeEnabled();
|
||||
}
|
||||
|
||||
void InstallFilters() {
|
||||
client_->SetPacketFilter(client_ccs_recorder_);
|
||||
auto chain = std::make_shared<ChainedPacketFilter>(ChainedPacketFilterInit(
|
||||
{server_handshake_recorder_, server_ccs_recorder_,
|
||||
server_hello_recorder_}));
|
||||
server_->SetPacketFilter(chain);
|
||||
}
|
||||
|
||||
void CheckServerHelloRecordVersion(uint16_t record_version) {
|
||||
ASSERT_EQ(record_version,
|
||||
server_handshake_recorder_->record(0).header.version());
|
||||
}
|
||||
|
||||
void CheckServerHelloVersion(uint16_t server_hello_version) {
|
||||
uint32_t ver;
|
||||
ASSERT_TRUE(server_hello_recorder_->buffer().Read(0, 2, &ver));
|
||||
ASSERT_EQ(server_hello_version, ver);
|
||||
}
|
||||
|
||||
void CheckForRegularHandshake() {
|
||||
EXPECT_EQ(0U, client_ccs_recorder_->count());
|
||||
EXPECT_EQ(0U, server_ccs_recorder_->count());
|
||||
CheckServerHelloVersion(kServerHelloVersionRegular);
|
||||
CheckServerHelloRecordVersion(SSL_LIBRARY_VERSION_TLS_1_0);
|
||||
}
|
||||
|
||||
void CheckForAltHandshake() {
|
||||
EXPECT_EQ(1U, client_ccs_recorder_->count());
|
||||
EXPECT_EQ(1U, server_ccs_recorder_->count());
|
||||
CheckServerHelloVersion(kServerHelloVersionAlt);
|
||||
CheckServerHelloRecordVersion(SSL_LIBRARY_VERSION_TLS_1_2);
|
||||
}
|
||||
|
||||
std::shared_ptr<TlsRecordRecorder> client_ccs_recorder_;
|
||||
std::shared_ptr<TlsRecordRecorder> server_handshake_recorder_;
|
||||
std::shared_ptr<TlsRecordRecorder> server_ccs_recorder_;
|
||||
std::shared_ptr<TlsInspectorRecordHandshakeMessage> server_hello_recorder_;
|
||||
};
|
||||
|
||||
TEST_F(AltHandshakeTest, ClientOnly) {
|
||||
client_->SetAltHandshakeTypeEnabled();
|
||||
InstallFilters();
|
||||
Connect();
|
||||
CheckForRegularHandshake();
|
||||
}
|
||||
|
||||
TEST_F(AltHandshakeTest, ServerOnly) {
|
||||
server_->SetAltHandshakeTypeEnabled();
|
||||
InstallFilters();
|
||||
Connect();
|
||||
CheckForRegularHandshake();
|
||||
}
|
||||
|
||||
TEST_F(AltHandshakeTest, Enabled) {
|
||||
SetAltHandshakeTypeEnabled();
|
||||
InstallFilters();
|
||||
Connect();
|
||||
CheckForAltHandshake();
|
||||
}
|
||||
|
||||
TEST_F(AltHandshakeTest, ZeroRtt) {
|
||||
SetAltHandshakeTypeEnabled();
|
||||
SetupForZeroRtt();
|
||||
SetAltHandshakeTypeEnabled();
|
||||
client_->Set0RttEnabled(true);
|
||||
server_->Set0RttEnabled(true);
|
||||
|
||||
InstallFilters();
|
||||
|
||||
ExpectResumption(RESUME_TICKET);
|
||||
ZeroRttSendReceive(true, true);
|
||||
Handshake();
|
||||
ExpectEarlyDataAccepted(true);
|
||||
CheckConnected();
|
||||
|
||||
CheckForAltHandshake();
|
||||
}
|
||||
|
||||
// Neither client nor server has the extension prior to resumption, so the
|
||||
// client doesn't send a CCS before its 0-RTT data.
|
||||
TEST_F(AltHandshakeTest, DisabledBeforeZeroRtt) {
|
||||
SetupForZeroRtt();
|
||||
SetAltHandshakeTypeEnabled();
|
||||
client_->Set0RttEnabled(true);
|
||||
server_->Set0RttEnabled(true);
|
||||
|
||||
InstallFilters();
|
||||
|
||||
ExpectResumption(RESUME_TICKET);
|
||||
ZeroRttSendReceive(true, true);
|
||||
Handshake();
|
||||
ExpectEarlyDataAccepted(true);
|
||||
CheckConnected();
|
||||
|
||||
EXPECT_EQ(0U, client_ccs_recorder_->count());
|
||||
EXPECT_EQ(1U, server_ccs_recorder_->count());
|
||||
CheckServerHelloVersion(kServerHelloVersionAlt);
|
||||
}
|
||||
|
||||
// Both use the alternative in the initial handshake but only the server enables
|
||||
// it on resumption.
|
||||
TEST_F(AltHandshakeTest, ClientDisabledAfterZeroRtt) {
|
||||
SetAltHandshakeTypeEnabled();
|
||||
SetupForZeroRtt();
|
||||
server_->SetAltHandshakeTypeEnabled();
|
||||
client_->Set0RttEnabled(true);
|
||||
server_->Set0RttEnabled(true);
|
||||
|
||||
InstallFilters();
|
||||
|
||||
ExpectResumption(RESUME_TICKET);
|
||||
ZeroRttSendReceive(true, true);
|
||||
Handshake();
|
||||
ExpectEarlyDataAccepted(true);
|
||||
CheckConnected();
|
||||
|
||||
CheckForRegularHandshake();
|
||||
}
|
||||
|
||||
// If the alternative handshake isn't negotiated after 0-RTT, and the client has
|
||||
// it enabled, it will send a ChangeCipherSpec. The server chokes on it if it
|
||||
// hasn't negotiated the alternative handshake.
|
||||
TEST_F(AltHandshakeTest, ServerDisabledAfterZeroRtt) {
|
||||
SetAltHandshakeTypeEnabled();
|
||||
SetupForZeroRtt();
|
||||
client_->SetAltHandshakeTypeEnabled();
|
||||
client_->Set0RttEnabled(true);
|
||||
server_->Set0RttEnabled(true);
|
||||
|
||||
client_->ExpectSendAlert(kTlsAlertEndOfEarlyData);
|
||||
client_->Handshake(); // Send ClientHello (and CCS)
|
||||
|
||||
server_->Handshake(); // Consume the ClientHello, which is OK.
|
||||
client_->ExpectResumption();
|
||||
client_->Handshake(); // Read the server handshake.
|
||||
EXPECT_EQ(TlsAgent::STATE_CONNECTED, client_->state());
|
||||
|
||||
// Now the server reads the CCS instead of more handshake messages.
|
||||
ExpectAlert(server_, kTlsAlertBadRecordMac);
|
||||
server_->Handshake();
|
||||
EXPECT_EQ(TlsAgent::STATE_ERROR, server_->state());
|
||||
client_->Handshake(); // Consume the alert.
|
||||
EXPECT_EQ(TlsAgent::STATE_ERROR, client_->state());
|
||||
}
|
||||
|
||||
} // nss_test
|
|
@ -8,8 +8,6 @@
|
|||
#ifndef FREEBL_POLY1305_H_
|
||||
#define FREEBL_POLY1305_H_
|
||||
|
||||
#include "stddef.h"
|
||||
|
||||
typedef unsigned char poly1305_state[512];
|
||||
|
||||
/* Poly1305Init sets up |state| so that it can be used to calculate an
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
* The format of the version string should be
|
||||
* "<major version>.<minor version>[.<patch level>[.<build number>]][ <ECC>][ <Beta>]"
|
||||
*/
|
||||
#define NSS_VERSION "3.35" _NSS_CUSTOMIZED " Beta"
|
||||
#define NSS_VERSION "3.34" _NSS_CUSTOMIZED " Beta"
|
||||
#define NSS_VMAJOR 3
|
||||
#define NSS_VMINOR 35
|
||||
#define NSS_VMINOR 34
|
||||
#define NSS_VPATCH 0
|
||||
#define NSS_VBUILD 0
|
||||
#define NSS_BETA PR_TRUE
|
||||
|
|
|
@ -421,20 +421,11 @@ static const struct mechanismList mechanisms[] = {
|
|||
#endif
|
||||
/* --------------------- Secret Key Operations ------------------------ */
|
||||
{ CKM_GENERIC_SECRET_KEY_GEN, { 1, 32, CKF_GENERATE }, PR_TRUE },
|
||||
{ CKM_CONCATENATE_BASE_AND_KEY, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_CONCATENATE_BASE_AND_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_CONCATENATE_DATA_AND_BASE, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_XOR_BASE_AND_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_CONCATENATE_BASE_AND_KEY, { 1, 32, CKF_GENERATE }, PR_FALSE },
|
||||
{ CKM_CONCATENATE_BASE_AND_DATA, { 1, 32, CKF_GENERATE }, PR_FALSE },
|
||||
{ CKM_CONCATENATE_DATA_AND_BASE, { 1, 32, CKF_GENERATE }, PR_FALSE },
|
||||
{ CKM_XOR_BASE_AND_DATA, { 1, 32, CKF_GENERATE }, PR_FALSE },
|
||||
{ CKM_EXTRACT_KEY_FROM_KEY, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_DES3_ECB_ENCRYPT_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_DES3_CBC_ENCRYPT_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_AES_ECB_ENCRYPT_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_AES_CBC_ENCRYPT_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_CAMELLIA_ECB_ENCRYPT_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_CAMELLIA_CBC_ENCRYPT_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_SEED_ECB_ENCRYPT_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
{ CKM_SEED_CBC_ENCRYPT_DATA, { 1, 32, CKF_DERIVE }, PR_FALSE },
|
||||
|
||||
/* ---------------------- SSL Key Derivations ------------------------- */
|
||||
{ CKM_SSL3_PRE_MASTER_KEY_GEN, { 48, 48, CKF_GENERATE }, PR_FALSE },
|
||||
{ CKM_SSL3_MASTER_KEY_DERIVE, { 48, 48, CKF_DERIVE }, PR_FALSE },
|
||||
|
|
|
@ -1524,7 +1524,8 @@ NSC_DecryptUpdate(CK_SESSION_HANDLE hSession,
|
|||
maxout -= padoutlen;
|
||||
}
|
||||
/* now save the final block for the next decrypt or the final */
|
||||
PORT_Memcpy(context->padBuf, &pEncryptedPart[ulEncryptedPartLen - context->blockSize],
|
||||
PORT_Memcpy(context->padBuf, &pEncryptedPart[ulEncryptedPartLen -
|
||||
context->blockSize],
|
||||
context->blockSize);
|
||||
context->padDataLength = context->blockSize;
|
||||
ulEncryptedPartLen -= context->padDataLength;
|
||||
|
@ -6240,43 +6241,6 @@ sftk_ANSI_X9_63_kdf(CK_BYTE **key, CK_ULONG key_len,
|
|||
return CKR_MECHANISM_INVALID;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle the derive from a block encryption cipher
|
||||
*/
|
||||
CK_RV
|
||||
sftk_DeriveEncrypt(SFTKCipher encrypt, void *cipherInfo,
|
||||
int blockSize, SFTKObject *key, CK_ULONG keySize,
|
||||
unsigned char *data, CK_ULONG len)
|
||||
{
|
||||
/* large enough for a 512-bit key */
|
||||
unsigned char tmpdata[SFTK_MAX_DERIVE_KEY_SIZE];
|
||||
SECStatus rv;
|
||||
unsigned int outLen;
|
||||
CK_RV crv;
|
||||
|
||||
if ((len % blockSize) != 0) {
|
||||
return CKR_MECHANISM_PARAM_INVALID;
|
||||
}
|
||||
if (len > SFTK_MAX_DERIVE_KEY_SIZE) {
|
||||
return CKR_MECHANISM_PARAM_INVALID;
|
||||
}
|
||||
if (keySize && (len < keySize)) {
|
||||
return CKR_MECHANISM_PARAM_INVALID;
|
||||
}
|
||||
if (keySize == 0) {
|
||||
keySize = len;
|
||||
}
|
||||
|
||||
rv = (*encrypt)(cipherInfo, &tmpdata, &outLen, len, data, len);
|
||||
if (rv != SECSuccess) {
|
||||
crv = sftk_MapCryptError(PORT_GetError());
|
||||
return crv;
|
||||
}
|
||||
|
||||
crv = sftk_forceAttribute(key, CKA_VALUE, tmpdata, keySize);
|
||||
return crv;
|
||||
}
|
||||
|
||||
/*
|
||||
* SSL Key generation given pre master secret
|
||||
*/
|
||||
|
@ -6935,172 +6899,6 @@ NSC_DeriveKey(CK_SESSION_HANDLE hSession,
|
|||
break;
|
||||
}
|
||||
|
||||
case CKM_DES3_ECB_ENCRYPT_DATA:
|
||||
case CKM_DES3_CBC_ENCRYPT_DATA: {
|
||||
void *cipherInfo;
|
||||
unsigned char des3key[MAX_DES3_KEY_SIZE];
|
||||
CK_DES_CBC_ENCRYPT_DATA_PARAMS *desEncryptPtr;
|
||||
int mode;
|
||||
unsigned char *iv;
|
||||
unsigned char *data;
|
||||
CK_ULONG len;
|
||||
|
||||
if (mechanism == CKM_DES3_ECB_ENCRYPT_DATA) {
|
||||
stringPtr = (CK_KEY_DERIVATION_STRING_DATA *)
|
||||
pMechanism->pParameter;
|
||||
mode = NSS_DES_EDE3;
|
||||
iv = NULL;
|
||||
data = stringPtr->pData;
|
||||
len = stringPtr->ulLen;
|
||||
} else {
|
||||
mode = NSS_DES_EDE3_CBC;
|
||||
desEncryptPtr =
|
||||
(CK_DES_CBC_ENCRYPT_DATA_PARAMS *)
|
||||
pMechanism->pParameter;
|
||||
iv = desEncryptPtr->iv;
|
||||
data = desEncryptPtr->pData;
|
||||
len = desEncryptPtr->length;
|
||||
}
|
||||
if (att->attrib.ulValueLen == 16) {
|
||||
PORT_Memcpy(des3key, att->attrib.pValue, 16);
|
||||
PORT_Memcpy(des3key + 16, des3key, 8);
|
||||
} else if (att->attrib.ulValueLen == 24) {
|
||||
PORT_Memcpy(des3key, att->attrib.pValue, 24);
|
||||
} else {
|
||||
crv = CKR_KEY_SIZE_RANGE;
|
||||
break;
|
||||
}
|
||||
cipherInfo = DES_CreateContext(des3key, iv, mode, PR_TRUE);
|
||||
PORT_Memset(des3key, 0, 24);
|
||||
if (cipherInfo == NULL) {
|
||||
crv = CKR_HOST_MEMORY;
|
||||
break;
|
||||
}
|
||||
crv = sftk_DeriveEncrypt((SFTKCipher)DES_Encrypt,
|
||||
cipherInfo, 8, key, keySize,
|
||||
data, len);
|
||||
DES_DestroyContext(cipherInfo, PR_TRUE);
|
||||
break;
|
||||
}
|
||||
|
||||
case CKM_AES_ECB_ENCRYPT_DATA:
|
||||
case CKM_AES_CBC_ENCRYPT_DATA: {
|
||||
void *cipherInfo;
|
||||
CK_AES_CBC_ENCRYPT_DATA_PARAMS *aesEncryptPtr;
|
||||
int mode;
|
||||
unsigned char *iv;
|
||||
unsigned char *data;
|
||||
CK_ULONG len;
|
||||
|
||||
if (mechanism == CKM_AES_ECB_ENCRYPT_DATA) {
|
||||
mode = NSS_AES;
|
||||
iv = NULL;
|
||||
stringPtr = (CK_KEY_DERIVATION_STRING_DATA *)pMechanism->pParameter;
|
||||
data = stringPtr->pData;
|
||||
len = stringPtr->ulLen;
|
||||
} else {
|
||||
aesEncryptPtr =
|
||||
(CK_AES_CBC_ENCRYPT_DATA_PARAMS *)pMechanism->pParameter;
|
||||
mode = NSS_AES_CBC;
|
||||
iv = aesEncryptPtr->iv;
|
||||
data = aesEncryptPtr->pData;
|
||||
len = aesEncryptPtr->length;
|
||||
}
|
||||
|
||||
cipherInfo = AES_CreateContext((unsigned char *)att->attrib.pValue,
|
||||
iv, mode, PR_TRUE,
|
||||
att->attrib.ulValueLen, 16);
|
||||
if (cipherInfo == NULL) {
|
||||
crv = CKR_HOST_MEMORY;
|
||||
break;
|
||||
}
|
||||
crv = sftk_DeriveEncrypt((SFTKCipher)AES_Encrypt,
|
||||
cipherInfo, 16, key, keySize,
|
||||
data, len);
|
||||
AES_DestroyContext(cipherInfo, PR_TRUE);
|
||||
break;
|
||||
}
|
||||
|
||||
case CKM_CAMELLIA_ECB_ENCRYPT_DATA:
|
||||
case CKM_CAMELLIA_CBC_ENCRYPT_DATA: {
|
||||
void *cipherInfo;
|
||||
CK_AES_CBC_ENCRYPT_DATA_PARAMS *aesEncryptPtr;
|
||||
int mode;
|
||||
unsigned char *iv;
|
||||
unsigned char *data;
|
||||
CK_ULONG len;
|
||||
|
||||
if (mechanism == CKM_CAMELLIA_ECB_ENCRYPT_DATA) {
|
||||
stringPtr = (CK_KEY_DERIVATION_STRING_DATA *)
|
||||
pMechanism->pParameter;
|
||||
aesEncryptPtr = NULL;
|
||||
mode = NSS_CAMELLIA;
|
||||
data = stringPtr->pData;
|
||||
len = stringPtr->ulLen;
|
||||
iv = NULL;
|
||||
} else {
|
||||
stringPtr = NULL;
|
||||
aesEncryptPtr = (CK_AES_CBC_ENCRYPT_DATA_PARAMS *)
|
||||
pMechanism->pParameter;
|
||||
mode = NSS_CAMELLIA_CBC;
|
||||
iv = aesEncryptPtr->iv;
|
||||
data = aesEncryptPtr->pData;
|
||||
len = aesEncryptPtr->length;
|
||||
}
|
||||
|
||||
cipherInfo = Camellia_CreateContext((unsigned char *)att->attrib.pValue,
|
||||
iv, mode, PR_TRUE,
|
||||
att->attrib.ulValueLen);
|
||||
if (cipherInfo == NULL) {
|
||||
crv = CKR_HOST_MEMORY;
|
||||
break;
|
||||
}
|
||||
crv = sftk_DeriveEncrypt((SFTKCipher)Camellia_Encrypt,
|
||||
cipherInfo, 16, key, keySize,
|
||||
data, len);
|
||||
Camellia_DestroyContext(cipherInfo, PR_TRUE);
|
||||
break;
|
||||
}
|
||||
|
||||
case CKM_SEED_ECB_ENCRYPT_DATA:
|
||||
case CKM_SEED_CBC_ENCRYPT_DATA: {
|
||||
void *cipherInfo;
|
||||
CK_AES_CBC_ENCRYPT_DATA_PARAMS *aesEncryptPtr;
|
||||
int mode;
|
||||
unsigned char *iv;
|
||||
unsigned char *data;
|
||||
CK_ULONG len;
|
||||
|
||||
if (mechanism == CKM_SEED_ECB_ENCRYPT_DATA) {
|
||||
mode = NSS_SEED;
|
||||
stringPtr = (CK_KEY_DERIVATION_STRING_DATA *)
|
||||
pMechanism->pParameter;
|
||||
aesEncryptPtr = NULL;
|
||||
data = stringPtr->pData;
|
||||
len = stringPtr->ulLen;
|
||||
iv = NULL;
|
||||
} else {
|
||||
mode = NSS_SEED_CBC;
|
||||
aesEncryptPtr = (CK_AES_CBC_ENCRYPT_DATA_PARAMS *)
|
||||
pMechanism->pParameter;
|
||||
iv = aesEncryptPtr->iv;
|
||||
data = aesEncryptPtr->pData;
|
||||
len = aesEncryptPtr->length;
|
||||
}
|
||||
|
||||
cipherInfo = SEED_CreateContext((unsigned char *)att->attrib.pValue,
|
||||
iv, mode, PR_TRUE);
|
||||
if (cipherInfo == NULL) {
|
||||
crv = CKR_HOST_MEMORY;
|
||||
break;
|
||||
}
|
||||
crv = sftk_DeriveEncrypt((SFTKCipher)SEED_Encrypt,
|
||||
cipherInfo, 16, key, keySize,
|
||||
data, len);
|
||||
SEED_DestroyContext(cipherInfo, PR_TRUE);
|
||||
break;
|
||||
}
|
||||
|
||||
case CKM_CONCATENATE_BASE_AND_KEY: {
|
||||
SFTKObject *newKey;
|
||||
|
||||
|
|
|
@ -17,9 +17,9 @@
|
|||
* The format of the version string should be
|
||||
* "<major version>.<minor version>[.<patch level>[.<build number>]][ <ECC>][ <Beta>]"
|
||||
*/
|
||||
#define SOFTOKEN_VERSION "3.35" SOFTOKEN_ECC_STRING " Beta"
|
||||
#define SOFTOKEN_VERSION "3.34" SOFTOKEN_ECC_STRING " Beta"
|
||||
#define SOFTOKEN_VMAJOR 3
|
||||
#define SOFTOKEN_VMINOR 35
|
||||
#define SOFTOKEN_VMINOR 34
|
||||
#define SOFTOKEN_VPATCH 0
|
||||
#define SOFTOKEN_VBUILD 0
|
||||
#define SOFTOKEN_BETA PR_TRUE
|
||||
|
|
|
@ -9,9 +9,6 @@
|
|||
#define _SOFTOKNT_H_
|
||||
|
||||
#define NSS_SOFTOKEN_DEFAULT_CHUNKSIZE 2048
|
||||
#define DES_BLOCK_SIZE 8 /* bytes */
|
||||
#define MAX_DES3_KEY_SIZE 24 /* DES_BLOCK_SIZE * 3 */
|
||||
#define SFTK_MAX_DERIVE_KEY_SIZE 64
|
||||
|
||||
/*
|
||||
* FIPS 140-2 auditing
|
||||
|
|
|
@ -4324,7 +4324,7 @@ ssl3_ConsumeHandshakeNumber(sslSocket *ss, PRUint32 *num, PRUint32 bytes,
|
|||
PRUint8 **b, PRUint32 *length)
|
||||
{
|
||||
PRUint8 *buf = *b;
|
||||
PRUint32 i;
|
||||
int i;
|
||||
|
||||
PORT_Assert(ss->opt.noLocks || ssl_HaveRecvBufLock(ss));
|
||||
PORT_Assert(ss->opt.noLocks || ssl_HaveSSL3HandshakeLock(ss));
|
||||
|
@ -4946,7 +4946,7 @@ ssl3_SendClientHello(sslSocket *ss, sslClientHelloType type)
|
|||
sslSessionID *sid;
|
||||
ssl3CipherSpec *cwSpec;
|
||||
SECStatus rv;
|
||||
unsigned int i;
|
||||
int i;
|
||||
int length;
|
||||
int num_suites;
|
||||
int actual_count = 0;
|
||||
|
@ -6840,9 +6840,8 @@ ssl3_HandleServerHello(sslSocket *ss, PRUint8 *b, PRUint32 length)
|
|||
rv = ssl_ClientSetCipherSuite(ss, ss->version, cipher,
|
||||
PR_TRUE /* init hashes */);
|
||||
if (rv != SECSuccess) {
|
||||
desc = handshake_failure;
|
||||
errCode = PORT_GetError();
|
||||
goto alert_loser;
|
||||
goto loser;
|
||||
}
|
||||
|
||||
rv = ssl3_HandleParsedExtensions(ss, server_hello);
|
||||
|
@ -7141,11 +7140,11 @@ ssl_HandleDHServerKeyExchange(sslSocket *ss, PRUint8 *b, PRUint32 length)
|
|||
}
|
||||
|
||||
rv = NSS_OptionGet(NSS_DH_MIN_KEY_SIZE, &minDH);
|
||||
if (rv != SECSuccess || minDH <= 0) {
|
||||
if (rv != SECSuccess) {
|
||||
minDH = SSL_DH_MIN_P_BITS;
|
||||
}
|
||||
dh_p_bits = SECKEY_BigIntegerBitLength(&dh_p);
|
||||
if (dh_p_bits < (unsigned)minDH) {
|
||||
if (dh_p_bits < minDH) {
|
||||
errCode = SSL_ERROR_WEAK_SERVER_EPHEMERAL_DH_KEY;
|
||||
goto alert_loser;
|
||||
}
|
||||
|
@ -8082,8 +8081,8 @@ SECStatus
|
|||
ssl3_NegotiateCipherSuite(sslSocket *ss, const SECItem *suites,
|
||||
PRBool initHashes)
|
||||
{
|
||||
unsigned int j;
|
||||
unsigned int i;
|
||||
int j;
|
||||
int i;
|
||||
|
||||
for (j = 0; j < ssl_V3_SUITES_IMPLEMENTED; j++) {
|
||||
ssl3CipherSuiteCfg *suite = &ss->cipherSuites[j];
|
||||
|
@ -8683,6 +8682,15 @@ ssl3_HandleClientHello(sslSocket *ss, PRUint8 *b, PRUint32 length)
|
|||
ssl3_DisableNonDTLSSuites(ss);
|
||||
}
|
||||
|
||||
#ifdef PARANOID
|
||||
/* Look for a matching cipher suite. */
|
||||
j = ssl3_config_match_init(ss);
|
||||
if (j <= 0) { /* no ciphers are working/supported by PK11 */
|
||||
errCode = PORT_GetError(); /* error code is already set. */
|
||||
goto alert_loser;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ss->version >= SSL_LIBRARY_VERSION_TLS_1_3) {
|
||||
rv = tls13_HandleClientHelloPart2(ss, &suites, sid);
|
||||
} else {
|
||||
|
@ -8714,7 +8722,7 @@ ssl3_HandleClientHelloPart2(sslSocket *ss,
|
|||
SSL3AlertDescription desc = illegal_parameter;
|
||||
SECStatus rv;
|
||||
unsigned int i;
|
||||
unsigned int j;
|
||||
int j;
|
||||
|
||||
/* If we already have a session for this client, be sure to pick the
|
||||
** same cipher suite and compression method we picked before.
|
||||
|
@ -8746,7 +8754,7 @@ ssl3_HandleClientHelloPart2(sslSocket *ss,
|
|||
break;
|
||||
}
|
||||
PORT_Assert(j > 0);
|
||||
if (j == 0)
|
||||
if (j <= 0)
|
||||
break;
|
||||
#ifdef PARANOID
|
||||
/* Double check that the cached cipher suite is still enabled,
|
||||
|
@ -8783,7 +8791,8 @@ ssl3_HandleClientHelloPart2(sslSocket *ss,
|
|||
|
||||
#ifndef PARANOID
|
||||
/* Look for a matching cipher suite. */
|
||||
if (ssl3_config_match_init(ss) <= 0) {
|
||||
j = ssl3_config_match_init(ss);
|
||||
if (j <= 0) { /* no ciphers are working/supported by PK11 */
|
||||
desc = internal_error;
|
||||
errCode = PORT_GetError(); /* error code is already set. */
|
||||
goto alert_loser;
|
||||
|
@ -9685,12 +9694,12 @@ ssl3_SendCertificateRequest(sslSocket *ss)
|
|||
PRBool isTLS12;
|
||||
const PRUint8 *certTypes;
|
||||
SECStatus rv;
|
||||
PRUint32 length;
|
||||
int length;
|
||||
SECItem *names;
|
||||
unsigned int calen;
|
||||
unsigned int nnames;
|
||||
SECItem *name;
|
||||
unsigned int i;
|
||||
int i;
|
||||
int certTypesLength;
|
||||
PRUint8 sigAlgs[MAX_SIGNATURE_SCHEMES * 2];
|
||||
unsigned int sigAlgsLength = 0;
|
||||
|
@ -10908,8 +10917,7 @@ ssl3_AuthCertificate(sslSocket *ss)
|
|||
}
|
||||
if (pubKey) {
|
||||
KeyType pubKeyType;
|
||||
PRUint32 minKey;
|
||||
PRInt32 optval;
|
||||
PRInt32 minKey;
|
||||
/* This partly fixes Bug 124230 and may cause problems for
|
||||
* callers which depend on the old (wrong) behavior. */
|
||||
ss->sec.authKeyBits = SECKEY_PublicKeyStrengthInBits(pubKey);
|
||||
|
@ -10920,29 +10928,29 @@ ssl3_AuthCertificate(sslSocket *ss)
|
|||
case rsaPssKey:
|
||||
case rsaOaepKey:
|
||||
rv =
|
||||
NSS_OptionGet(NSS_RSA_MIN_KEY_SIZE, &optval);
|
||||
if (rv == SECSuccess && optval > 0) {
|
||||
minKey = (PRUint32)optval;
|
||||
} else {
|
||||
minKey = SSL_RSA_MIN_MODULUS_BITS;
|
||||
NSS_OptionGet(NSS_RSA_MIN_KEY_SIZE, &minKey);
|
||||
if (rv !=
|
||||
SECSuccess) {
|
||||
minKey =
|
||||
SSL_RSA_MIN_MODULUS_BITS;
|
||||
}
|
||||
break;
|
||||
case dsaKey:
|
||||
rv =
|
||||
NSS_OptionGet(NSS_DSA_MIN_KEY_SIZE, &optval);
|
||||
if (rv == SECSuccess && optval > 0) {
|
||||
minKey = (PRUint32)optval;
|
||||
} else {
|
||||
minKey = SSL_DSA_MIN_P_BITS;
|
||||
NSS_OptionGet(NSS_DSA_MIN_KEY_SIZE, &minKey);
|
||||
if (rv !=
|
||||
SECSuccess) {
|
||||
minKey =
|
||||
SSL_DSA_MIN_P_BITS;
|
||||
}
|
||||
break;
|
||||
case dhKey:
|
||||
rv =
|
||||
NSS_OptionGet(NSS_DH_MIN_KEY_SIZE, &optval);
|
||||
if (rv == SECSuccess && optval > 0) {
|
||||
minKey = (PRUint32)optval;
|
||||
} else {
|
||||
minKey = SSL_DH_MIN_P_BITS;
|
||||
NSS_OptionGet(NSS_DH_MIN_KEY_SIZE, &minKey);
|
||||
if (rv !=
|
||||
SECSuccess) {
|
||||
minKey =
|
||||
SSL_DH_MIN_P_BITS;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -2744,6 +2744,9 @@ tls13_SetupPendingCipherSpec(sslSocket *ss, ssl3CipherSpec *spec)
|
|||
|
||||
PORT_Assert(ss->opt.noLocks || ssl_HaveSSL3HandshakeLock(ss));
|
||||
|
||||
ssl_GetSpecWriteLock(ss); /*******************************/
|
||||
|
||||
spec = ss->ssl3.pwSpec;
|
||||
/* Version isn't set when we send 0-RTT data. */
|
||||
spec->version = PR_MAX(SSL_LIBRARY_VERSION_TLS_1_3, ss->version);
|
||||
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
* The format of the version string should be
|
||||
* "<major version>.<minor version>[.<patch level>[.<build number>]][ <Beta>]"
|
||||
*/
|
||||
#define NSSUTIL_VERSION "3.35 Beta"
|
||||
#define NSSUTIL_VERSION "3.34 Beta"
|
||||
#define NSSUTIL_VMAJOR 3
|
||||
#define NSSUTIL_VMINOR 35
|
||||
#define NSSUTIL_VMINOR 34
|
||||
#define NSSUTIL_VPATCH 0
|
||||
#define NSSUTIL_VBUILD 0
|
||||
#define NSSUTIL_BETA PR_TRUE
|
||||
|
|
|
@ -242,7 +242,7 @@ static int
|
|||
pk11uri_CompareByPosition(const char *a, const char *b,
|
||||
const char **attr_names, size_t num_attr_names)
|
||||
{
|
||||
size_t i, j;
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < num_attr_names; i++) {
|
||||
if (strcmp(a, attr_names[i]) == 0) {
|
||||
|
|
|
@ -789,7 +789,7 @@ unsigned int
|
|||
NSS_SecureMemcmpZero(const void *mem, size_t n)
|
||||
{
|
||||
PRUint8 zero = 0;
|
||||
size_t i;
|
||||
int i;
|
||||
for (i = 0; i < n; ++i) {
|
||||
zero |= *(PRUint8 *)((uintptr_t)mem + i);
|
||||
}
|
||||
|
|
|
@ -21,17 +21,16 @@
|
|||
|
||||
# Generate input to certutil
|
||||
certscript() {
|
||||
ca=n
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
sign) echo 0 ;;
|
||||
kex) echo 2 ;;
|
||||
ca) echo 5;echo 6;ca=y ;;
|
||||
ca) echo 5;echo 6 ;;
|
||||
esac; shift
|
||||
done;
|
||||
echo 9
|
||||
echo n
|
||||
echo $ca
|
||||
echo ${ca:-n}
|
||||
echo
|
||||
echo n
|
||||
}
|
||||
|
@ -51,9 +50,9 @@ make_cert() {
|
|||
p256) type_args='-q nistp256';type=ec ;;
|
||||
p384) type_args='-q secp384r1';type=ec ;;
|
||||
p521) type_args='-q secp521r1';type=ec ;;
|
||||
rsa_ca) type_args='-g 1024';trust='CT,CT,CT';type=rsa ;;
|
||||
rsa_ca) type_args='-g 1024';trust='CT,CT,CT';ca=y;type=rsa ;;
|
||||
rsa_chain) type_args='-g 1024';sign='-c rsa_ca';type=rsa;;
|
||||
rsapss_ca) type_args='-g 1024 --pss';trust='CT,CT,CT';type=rsa ;;
|
||||
rsapss_ca) type_args='-g 1024 --pss';trust='CT,CT,CT';ca=y;type=rsa ;;
|
||||
rsapss_chain) type_args='-g 1024';sign='-c rsa_pss_ca';type=rsa;;
|
||||
rsa_ca_rsapss_chain) type_args='-g 1024 --pss-sign';sign='-c rsa_ca';type=rsa;;
|
||||
ecdh_rsa) type_args='-q nistp256';sign='-c rsa_ca';type=ec ;;
|
||||
|
|
Загрузка…
Ссылка в новой задаче