mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 18:07:31 +09:00
re-introduce old nss im too tired for this
This commit is contained in:
parent
3c46be320d
commit
3a838106b9
2871 changed files with 1374431 additions and 1762417 deletions
|
|
@ -16,19 +16,34 @@
|
|||
* field. (SHA-384/512 have 128-bit length.) */
|
||||
#define MAX_HASH_BIT_COUNT_BYTES 16
|
||||
|
||||
/* Some utility functions are needed:
|
||||
*
|
||||
* These macros return the given value with the MSB copied to all the other
|
||||
* bits. They use the fact that an arithmetic shift shifts-in the sign bit.
|
||||
* However, this is not ensured by the C standard so you may need to replace
|
||||
* them with something else on odd CPUs.
|
||||
*
|
||||
* Note: the argument to these macros must be an unsigned int.
|
||||
* */
|
||||
#define DUPLICATE_MSB_TO_ALL(x) ((unsigned int)((int)(x) >> (sizeof(int) * 8 - 1)))
|
||||
#define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x)))
|
||||
|
||||
/* constantTimeGE returns 0xff if a>=b and 0x00 otherwise, where a, b <
|
||||
* MAX_UINT/2. */
|
||||
static unsigned char
|
||||
constantTimeGE(unsigned int a, unsigned int b)
|
||||
{
|
||||
return PORT_CT_GE(a, b);
|
||||
a -= b;
|
||||
return DUPLICATE_MSB_TO_ALL(~a);
|
||||
}
|
||||
|
||||
/* constantTimeEQ8 returns 0xff if a==b and 0x00 otherwise. */
|
||||
static unsigned char
|
||||
constantTimeEQ(unsigned char a, unsigned char b)
|
||||
constantTimeEQ8(unsigned char a, unsigned char b)
|
||||
{
|
||||
return PORT_CT_EQ(a, b);
|
||||
unsigned int c = a ^ b;
|
||||
c--;
|
||||
return DUPLICATE_MSB_TO_ALL_8(c);
|
||||
}
|
||||
|
||||
/* MAC performs a constant time SSLv3/TLS MAC of |dataLen| bytes of |data|,
|
||||
|
|
@ -208,8 +223,8 @@ MAC(unsigned char *mdOut,
|
|||
* constant time, to |macOut|. */
|
||||
for (i = numStartingBlocks; i <= numStartingBlocks + varianceBlocks; i++) {
|
||||
unsigned char block[HASH_BLOCK_LENGTH_MAX];
|
||||
unsigned char isBlockA = constantTimeEQ(i, indexA);
|
||||
unsigned char isBlockB = constantTimeEQ(i, indexB);
|
||||
unsigned char isBlockA = constantTimeEQ8(i, indexA);
|
||||
unsigned char isBlockB = constantTimeEQ8(i, indexB);
|
||||
for (j = 0; j < mdBlockSize; j++) {
|
||||
unsigned char isPastC = isBlockA & constantTimeGE(j, c);
|
||||
unsigned char isPastCPlus1 = isBlockA & constantTimeGE(j, c + 1);
|
||||
|
|
@ -274,11 +289,6 @@ MAC(unsigned char *mdOut,
|
|||
hashObj->end(mdState, mdOut, mdOutLen, mdOutMax);
|
||||
hashObj->destroy(mdState, PR_TRUE);
|
||||
|
||||
PORT_Memset(lengthBytes, 0, sizeof lengthBytes);
|
||||
PORT_Memset(hmacPad, 0, sizeof hmacPad);
|
||||
PORT_Memset(firstBlock, 0, sizeof firstBlock);
|
||||
PORT_Memset(macOut, 0, sizeof macOut);
|
||||
|
||||
return SECSuccess;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue