mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 18:07:31 +09:00
Replace NSS with Pale Moon's
This commit is contained in:
parent
ff1e5e48bf
commit
8c2e376f94
2870 changed files with 1762232 additions and 1374220 deletions
|
|
@ -20,12 +20,15 @@
|
|||
#include "gcm.h"
|
||||
#include "mpi.h"
|
||||
|
||||
#if (!defined(IS_LITTLE_ENDIAN) && !defined(NSS_X86_OR_X64)) || \
|
||||
(defined(__arm__) && !defined(__ARM_NEON) && !defined(__ARM_NEON__))
|
||||
#if !defined(IS_LITTLE_ENDIAN) && !defined(NSS_X86_OR_X64)
|
||||
// not test yet on big endian platform of arm
|
||||
#undef USE_HW_AES
|
||||
#endif
|
||||
|
||||
#ifdef __powerpc64__
|
||||
#include "ppc-crypto.h"
|
||||
#endif
|
||||
|
||||
#ifdef USE_HW_AES
|
||||
#ifdef NSS_X86_OR_X64
|
||||
#include "intel-aes.h"
|
||||
|
|
@ -36,11 +39,8 @@
|
|||
#ifdef INTEL_GCM
|
||||
#include "intel-gcm.h"
|
||||
#endif /* INTEL_GCM */
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#if _MSC_VER < 1900
|
||||
#define inline
|
||||
#endif
|
||||
#if defined(USE_PPC_CRYPTO) && defined(PPC_GCM)
|
||||
#include "ppc-gcm.h"
|
||||
#endif
|
||||
|
||||
/* Forward declarations */
|
||||
|
|
@ -964,6 +964,7 @@ aes_InitContext(AESContext *cx, const unsigned char *key, unsigned int keysize,
|
|||
} else {
|
||||
rijndael_invkey_expansion(cx, key, Nk);
|
||||
}
|
||||
BLAPI_CLEAR_STACK(256)
|
||||
}
|
||||
cx->worker_cx = cx;
|
||||
cx->destroy = NULL;
|
||||
|
|
@ -1006,6 +1007,7 @@ AES_InitContext(AESContext *cx, const unsigned char *key, unsigned int keysize,
|
|||
}
|
||||
|
||||
/* finally, set up any mode specific contexts */
|
||||
cx->worker_aead = 0;
|
||||
switch (mode) {
|
||||
case NSS_AES_CTS:
|
||||
cx->worker_cx = CTS_CreateContext(cx, cx->worker, iv);
|
||||
|
|
@ -1020,21 +1022,36 @@ AES_InitContext(AESContext *cx, const unsigned char *key, unsigned int keysize,
|
|||
cx->worker_cx = intel_AES_GCM_CreateContext(cx, cx->worker, iv);
|
||||
cx->worker = (freeblCipherFunc)(encrypt ? intel_AES_GCM_EncryptUpdate
|
||||
: intel_AES_GCM_DecryptUpdate);
|
||||
cx->worker_aead = (freeblAeadFunc)(encrypt ? intel_AES_GCM_EncryptAEAD
|
||||
: intel_AES_GCM_DecryptAEAD);
|
||||
cx->destroy = (freeblDestroyFunc)intel_AES_GCM_DestroyContext;
|
||||
cx->isBlock = PR_FALSE;
|
||||
} else
|
||||
#elif defined(USE_PPC_CRYPTO) && defined(PPC_GCM)
|
||||
if (ppc_crypto_support() && (keysize % 8) == 0) {
|
||||
cx->worker_cx = ppc_AES_GCM_CreateContext(cx, cx->worker, iv);
|
||||
cx->worker = (freeblCipherFunc)(encrypt ? ppc_AES_GCM_EncryptUpdate
|
||||
: ppc_AES_GCM_DecryptUpdate);
|
||||
cx->worker_aead = (freeblAeadFunc)(encrypt ? ppc_AES_GCM_EncryptAEAD
|
||||
: ppc_AES_GCM_DecryptAEAD);
|
||||
cx->destroy = (freeblDestroyFunc)ppc_AES_GCM_DestroyContext;
|
||||
cx->isBlock = PR_FALSE;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
cx->worker_cx = GCM_CreateContext(cx, cx->worker, iv);
|
||||
cx->worker = (freeblCipherFunc)(encrypt ? GCM_EncryptUpdate
|
||||
: GCM_DecryptUpdate);
|
||||
cx->worker_aead = (freeblAeadFunc)(encrypt ? GCM_EncryptAEAD
|
||||
: GCM_DecryptAEAD);
|
||||
|
||||
cx->destroy = (freeblDestroyFunc)GCM_DestroyContext;
|
||||
cx->isBlock = PR_FALSE;
|
||||
}
|
||||
break;
|
||||
case NSS_AES_CTR:
|
||||
cx->worker_cx = CTR_CreateContext(cx, cx->worker, iv);
|
||||
#if defined(USE_HW_AES) && defined(_MSC_VER)
|
||||
#if defined(USE_HW_AES) && defined(_MSC_VER) && defined(NSS_X86_OR_X64)
|
||||
if (aesni_support() && (keysize % 8) == 0) {
|
||||
cx->worker = (freeblCipherFunc)CTR_Update_HW_AES;
|
||||
} else
|
||||
|
|
@ -1119,6 +1136,7 @@ AES_Encrypt(AESContext *cx, unsigned char *output,
|
|||
const unsigned char *input, unsigned int inputLen)
|
||||
{
|
||||
/* Check args */
|
||||
SECStatus rv;
|
||||
if (cx == NULL || output == NULL || (input == NULL && inputLen != 0)) {
|
||||
PORT_SetError(SEC_ERROR_INVALID_ARGS);
|
||||
return SECFailure;
|
||||
|
|
@ -1153,8 +1171,10 @@ AES_Encrypt(AESContext *cx, unsigned char *output,
|
|||
}
|
||||
#endif
|
||||
|
||||
return (*cx->worker)(cx->worker_cx, output, outputLen, maxOutputLen,
|
||||
input, inputLen, AES_BLOCK_SIZE);
|
||||
rv = (*cx->worker)(cx->worker_cx, output, outputLen, maxOutputLen,
|
||||
input, inputLen, AES_BLOCK_SIZE);
|
||||
BLAPI_CLEAR_STACK(256)
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1168,6 +1188,7 @@ AES_Decrypt(AESContext *cx, unsigned char *output,
|
|||
unsigned int *outputLen, unsigned int maxOutputLen,
|
||||
const unsigned char *input, unsigned int inputLen)
|
||||
{
|
||||
SECStatus rv;
|
||||
/* Check args */
|
||||
if (cx == NULL || output == NULL || (input == NULL && inputLen != 0)) {
|
||||
PORT_SetError(SEC_ERROR_INVALID_ARGS);
|
||||
|
|
@ -1177,11 +1198,68 @@ AES_Decrypt(AESContext *cx, unsigned char *output,
|
|||
PORT_SetError(SEC_ERROR_INPUT_LEN);
|
||||
return SECFailure;
|
||||
}
|
||||
if ((cx->mode != NSS_AES_GCM) && (maxOutputLen < inputLen)) {
|
||||
PORT_SetError(SEC_ERROR_OUTPUT_LEN);
|
||||
return SECFailure;
|
||||
}
|
||||
*outputLen = inputLen;
|
||||
rv = (*cx->worker)(cx->worker_cx, output, outputLen, maxOutputLen,
|
||||
input, inputLen, AES_BLOCK_SIZE);
|
||||
BLAPI_CLEAR_STACK(256)
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*
|
||||
* AES_Encrypt_AEAD
|
||||
*
|
||||
* Encrypt using GCM or CCM. include the nonce, extra data, and the tag
|
||||
*/
|
||||
SECStatus
|
||||
AES_AEAD(AESContext *cx, unsigned char *output,
|
||||
unsigned int *outputLen, unsigned int maxOutputLen,
|
||||
const unsigned char *input, unsigned int inputLen,
|
||||
void *params, unsigned int paramsLen,
|
||||
const unsigned char *aad, unsigned int aadLen)
|
||||
{
|
||||
SECStatus rv;
|
||||
/* Check args */
|
||||
if (cx == NULL || output == NULL || (input == NULL && inputLen != 0) || (aad == NULL && aadLen != 0) || params == NULL) {
|
||||
PORT_SetError(SEC_ERROR_INVALID_ARGS);
|
||||
return SECFailure;
|
||||
}
|
||||
if (cx->worker_aead == NULL) {
|
||||
PORT_SetError(SEC_ERROR_NOT_INITIALIZED);
|
||||
return SECFailure;
|
||||
}
|
||||
if (maxOutputLen < inputLen) {
|
||||
PORT_SetError(SEC_ERROR_OUTPUT_LEN);
|
||||
return SECFailure;
|
||||
}
|
||||
*outputLen = inputLen;
|
||||
return (*cx->worker)(cx->worker_cx, output, outputLen, maxOutputLen,
|
||||
input, inputLen, AES_BLOCK_SIZE);
|
||||
#if UINT_MAX > MP_32BIT_MAX
|
||||
/*
|
||||
* we can guarentee that GSM won't overlfow if we limit the input to
|
||||
* 2^36 bytes. For simplicity, we are limiting it to 2^32 for now.
|
||||
*
|
||||
* We do it here to cover both hardware and software GCM operations.
|
||||
*/
|
||||
{
|
||||
PR_STATIC_ASSERT(sizeof(unsigned int) > 4);
|
||||
}
|
||||
if (inputLen > MP_32BIT_MAX) {
|
||||
PORT_SetError(SEC_ERROR_OUTPUT_LEN);
|
||||
return SECFailure;
|
||||
}
|
||||
#else
|
||||
/* if we can't pass in a 32_bit number, then no such check needed */
|
||||
{
|
||||
PR_STATIC_ASSERT(sizeof(unsigned int) <= 4);
|
||||
}
|
||||
#endif
|
||||
|
||||
rv = (*cx->worker_aead)(cx->worker_cx, output, outputLen, maxOutputLen,
|
||||
input, inputLen, params, paramsLen, aad, aadLen,
|
||||
AES_BLOCK_SIZE);
|
||||
BLAPI_CLEAR_STACK(256)
|
||||
return rv;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue