| Index: crypto/third_party/nss/rsawrapr.c
|
| diff --git a/crypto/third_party/nss/rsawrapr.c b/crypto/third_party/nss/rsawrapr.c
|
| deleted file mode 100644
|
| index 73e498f937d1f02470a389d4075be7c2e7cc5e16..0000000000000000000000000000000000000000
|
| --- a/crypto/third_party/nss/rsawrapr.c
|
| +++ /dev/null
|
| @@ -1,160 +0,0 @@
|
| -/*
|
| - * PKCS#1 encoding and decoding functions.
|
| - * This file is believed to contain no code licensed from other parties.
|
| - *
|
| - * 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 "seccomon.h"
|
| -#include "secerr.h"
|
| -#include "sechash.h"
|
| -
|
| -/* Needed for RSA-PSS functions */
|
| -static const unsigned char eightZeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
| -
|
| -/*
|
| - * Mask generation function MGF1 as defined in PKCS #1 v2.1 / RFC 3447.
|
| - */
|
| -static SECStatus
|
| -MGF1(HASH_HashType hashAlg, unsigned char *mask, unsigned int maskLen,
|
| - const unsigned char *mgfSeed, unsigned int mgfSeedLen)
|
| -{
|
| - unsigned int digestLen;
|
| - PRUint32 counter, rounds;
|
| - unsigned char *tempHash, *temp;
|
| - const SECHashObject *hash;
|
| - void *hashContext;
|
| - unsigned char C[4];
|
| -
|
| - hash = HASH_GetHashObject(hashAlg);
|
| - if (hash == NULL)
|
| - return SECFailure;
|
| -
|
| - hashContext = (*hash->create)();
|
| - rounds = (maskLen + hash->length - 1) / hash->length;
|
| - for (counter = 0; counter < rounds; counter++) {
|
| - C[0] = (unsigned char)((counter >> 24) & 0xff);
|
| - C[1] = (unsigned char)((counter >> 16) & 0xff);
|
| - C[2] = (unsigned char)((counter >> 8) & 0xff);
|
| - C[3] = (unsigned char)(counter & 0xff);
|
| -
|
| - /* This could be optimized when the clone functions in
|
| - * rawhash.c are implemented. */
|
| - (*hash->begin)(hashContext);
|
| - (*hash->update)(hashContext, mgfSeed, mgfSeedLen);
|
| - (*hash->update)(hashContext, C, sizeof C);
|
| -
|
| - tempHash = mask + counter * hash->length;
|
| - if (counter != (rounds-1)) {
|
| - (*hash->end)(hashContext, tempHash, &digestLen, hash->length);
|
| - } else { /* we're in the last round and need to cut the hash */
|
| - temp = (unsigned char *)PORT_Alloc(hash->length);
|
| - (*hash->end)(hashContext, temp, &digestLen, hash->length);
|
| - PORT_Memcpy(tempHash, temp, maskLen - counter * hash->length);
|
| - PORT_Free(temp);
|
| - }
|
| - }
|
| - (*hash->destroy)(hashContext, PR_TRUE);
|
| -
|
| - return SECSuccess;
|
| -}
|
| -
|
| -/*
|
| - * Verify a RSA-PSS signature.
|
| - * Described in RFC 3447, section 9.1.2.
|
| - * We use mHash instead of M as input.
|
| - * emBits from the RFC is just modBits - 1, see section 8.1.2.
|
| - * We only support MGF1 as the MGF.
|
| - *
|
| - * NOTE: this code assumes modBits is a multiple of 8.
|
| - */
|
| -SECStatus
|
| -emsa_pss_verify(const unsigned char *mHash,
|
| - const unsigned char *em, unsigned int emLen,
|
| - HASH_HashType hashAlg, HASH_HashType maskHashAlg,
|
| - unsigned int sLen)
|
| -{
|
| - const SECHashObject *hash;
|
| - void *hash_context;
|
| - unsigned char *db;
|
| - unsigned char *H_; /* H' from the RFC */
|
| - unsigned int i, dbMaskLen;
|
| - SECStatus rv;
|
| -
|
| - hash = HASH_GetHashObject(hashAlg);
|
| - dbMaskLen = emLen - hash->length - 1;
|
| -
|
| - /* Step 3 + 4 + 6 */
|
| - if ((emLen < (hash->length + sLen + 2)) ||
|
| - (em[emLen - 1] != 0xbc) ||
|
| - ((em[0] & 0x80) != 0)) {
|
| - PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
|
| - return SECFailure;
|
| - }
|
| -
|
| - /* Step 7 */
|
| - db = (unsigned char *)PORT_Alloc(dbMaskLen);
|
| - if (db == NULL) {
|
| - PORT_SetError(SEC_ERROR_NO_MEMORY);
|
| - return SECFailure;
|
| - }
|
| - /* &em[dbMaskLen] points to H, used as mgfSeed */
|
| - MGF1(maskHashAlg, db, dbMaskLen, &em[dbMaskLen], hash->length);
|
| -
|
| - /* Step 8 */
|
| - for (i = 0; i < dbMaskLen; i++) {
|
| - db[i] ^= em[i];
|
| - }
|
| -
|
| - /* Step 9 */
|
| - db[0] &= 0x7f;
|
| -
|
| - /* Step 10 */
|
| - for (i = 0; i < (dbMaskLen - sLen - 1); i++) {
|
| - if (db[i] != 0) {
|
| - PORT_Free(db);
|
| - PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
|
| - return SECFailure;
|
| - }
|
| - }
|
| - if (db[dbMaskLen - sLen - 1] != 0x01) {
|
| - PORT_Free(db);
|
| - PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
|
| - return SECFailure;
|
| - }
|
| -
|
| - /* Step 12 + 13 */
|
| - H_ = (unsigned char *)PORT_Alloc(hash->length);
|
| - if (H_ == NULL) {
|
| - PORT_Free(db);
|
| - PORT_SetError(SEC_ERROR_NO_MEMORY);
|
| - return SECFailure;
|
| - }
|
| - hash_context = (*hash->create)();
|
| - if (hash_context == NULL) {
|
| - PORT_Free(db);
|
| - PORT_Free(H_);
|
| - PORT_SetError(SEC_ERROR_NO_MEMORY);
|
| - return SECFailure;
|
| - }
|
| - (*hash->begin)(hash_context);
|
| - (*hash->update)(hash_context, eightZeros, 8);
|
| - (*hash->update)(hash_context, mHash, hash->length);
|
| - (*hash->update)(hash_context, &db[dbMaskLen - sLen], sLen);
|
| - (*hash->end)(hash_context, H_, &i, hash->length);
|
| - (*hash->destroy)(hash_context, PR_TRUE);
|
| -
|
| - PORT_Free(db);
|
| -
|
| - /* Step 14 */
|
| - if (PORT_Memcmp(H_, &em[dbMaskLen], hash->length) != 0) {
|
| - PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
|
| - rv = SECFailure;
|
| - } else {
|
| - rv = SECSuccess;
|
| - }
|
| -
|
| - PORT_Free(H_);
|
| - return rv;
|
| -}
|
|
|