| Index: mozilla/security/nss/lib/util/secdig.c | 
| =================================================================== | 
| --- mozilla/security/nss/lib/util/secdig.c	(revision 191424) | 
| +++ mozilla/security/nss/lib/util/secdig.c	(working copy) | 
| @@ -1,181 +0,0 @@ | 
| -/* 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/. */ | 
| -/* $Id: secdig.c,v 1.11 2012/04/25 14:50:16 gerv%gerv.net Exp $ */ | 
| -#include "secdig.h" | 
| - | 
| -#include "secoid.h" | 
| -#include "secasn1.h" | 
| -#include "secerr.h" | 
| - | 
| -/* | 
| - * XXX Want to have a SGN_DecodeDigestInfo, like: | 
| - *	SGNDigestInfo *SGN_DecodeDigestInfo(SECItem *didata); | 
| - * that creates a pool and allocates from it and decodes didata into | 
| - * the newly allocated DigestInfo structure.  Then fix secvfy.c (it | 
| - * will no longer need an arena itself) to call this and then call | 
| - * DestroyDigestInfo when it is done, then can remove the old template | 
| - * above and keep our new template static and "hidden". | 
| - */ | 
| - | 
| -/* | 
| - * XXX It might be nice to combine the following two functions (create | 
| - * and encode).  I think that is all anybody ever wants to do anyway. | 
| - */ | 
| - | 
| -SECItem * | 
| -SGN_EncodeDigestInfo(PRArenaPool *poolp, SECItem *dest, SGNDigestInfo *diginfo) | 
| -{ | 
| -    return SEC_ASN1EncodeItem (poolp, dest, diginfo, sgn_DigestInfoTemplate); | 
| -} | 
| - | 
| -SGNDigestInfo * | 
| -SGN_CreateDigestInfo(SECOidTag algorithm, unsigned char *sig, unsigned len) | 
| -{ | 
| -    SGNDigestInfo *di; | 
| -    SECStatus rv; | 
| -    PRArenaPool *arena; | 
| -    SECItem *null_param; | 
| -    SECItem dummy_value; | 
| - | 
| -    switch (algorithm) { | 
| -      case SEC_OID_MD2: | 
| -      case SEC_OID_MD5: | 
| -      case SEC_OID_SHA1: | 
| -      case SEC_OID_SHA224: | 
| -      case SEC_OID_SHA256: | 
| -      case SEC_OID_SHA384: | 
| -      case SEC_OID_SHA512: | 
| -	break; | 
| -      default: | 
| -	PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); | 
| -	return NULL; | 
| -    } | 
| - | 
| -    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); | 
| -    if (arena == NULL) { | 
| -	return NULL; | 
| -    } | 
| - | 
| -    di = (SGNDigestInfo *) PORT_ArenaZAlloc(arena, sizeof(SGNDigestInfo)); | 
| -    if (di == NULL) { | 
| -	PORT_FreeArena(arena, PR_FALSE); | 
| -	return NULL; | 
| -    } | 
| - | 
| -    di->arena = arena; | 
| - | 
| -    /* | 
| -     * PKCS #1 specifies that the AlgorithmID must have a NULL parameter | 
| -     * (as opposed to no parameter at all). | 
| -     */ | 
| -    dummy_value.data = NULL; | 
| -    dummy_value.len = 0; | 
| -    null_param = SEC_ASN1EncodeItem(NULL, NULL, &dummy_value, SEC_NullTemplate); | 
| -    if (null_param == NULL) { | 
| -	goto loser; | 
| -    } | 
| - | 
| -    rv = SECOID_SetAlgorithmID(arena, &di->digestAlgorithm, algorithm, | 
| -			       null_param); | 
| - | 
| -    SECITEM_FreeItem(null_param, PR_TRUE); | 
| - | 
| -    if (rv != SECSuccess) { | 
| -	goto loser; | 
| -    } | 
| - | 
| -    di->digest.data = (unsigned char *) PORT_ArenaAlloc(arena, len); | 
| -    if (di->digest.data == NULL) { | 
| -	goto loser; | 
| -    } | 
| - | 
| -    di->digest.len = len; | 
| -    PORT_Memcpy(di->digest.data, sig, len); | 
| -    return di; | 
| - | 
| -  loser: | 
| -    SGN_DestroyDigestInfo(di); | 
| -    return NULL; | 
| -} | 
| - | 
| -SGNDigestInfo * | 
| -SGN_DecodeDigestInfo(SECItem *didata) | 
| -{ | 
| -    PRArenaPool *arena; | 
| -    SGNDigestInfo *di; | 
| -    SECStatus rv = SECFailure; | 
| -    SECItem      diCopy   = {siBuffer, NULL, 0}; | 
| - | 
| -    arena = PORT_NewArena(SEC_ASN1_DEFAULT_ARENA_SIZE); | 
| -    if(arena == NULL) | 
| -	return NULL; | 
| - | 
| -    rv = SECITEM_CopyItem(arena, &diCopy, didata); | 
| -    if (rv != SECSuccess) { | 
| -	PORT_FreeArena(arena, PR_FALSE); | 
| -    	return NULL; | 
| -    } | 
| - | 
| -    di = (SGNDigestInfo *)PORT_ArenaZAlloc(arena, sizeof(SGNDigestInfo)); | 
| -    if (di != NULL) { | 
| -	di->arena = arena; | 
| -	rv = SEC_QuickDERDecodeItem(arena, di, sgn_DigestInfoTemplate, &diCopy); | 
| -    } | 
| - | 
| -    if ((di == NULL) || (rv != SECSuccess)) { | 
| -	PORT_FreeArena(arena, PR_FALSE); | 
| -	di = NULL; | 
| -    } | 
| - | 
| -    return di; | 
| -} | 
| - | 
| -void | 
| -SGN_DestroyDigestInfo(SGNDigestInfo *di) | 
| -{ | 
| -    if (di && di->arena) { | 
| -	PORT_FreeArena(di->arena, PR_FALSE); | 
| -    } | 
| - | 
| -    return; | 
| -} | 
| - | 
| -SECStatus | 
| -SGN_CopyDigestInfo(PRArenaPool *poolp, SGNDigestInfo *a, SGNDigestInfo *b) | 
| -{ | 
| -    SECStatus rv; | 
| -    void *mark; | 
| - | 
| -    if((poolp == NULL) || (a == NULL) || (b == NULL)) | 
| -	return SECFailure; | 
| - | 
| -    mark = PORT_ArenaMark(poolp); | 
| -    a->arena = poolp; | 
| -    rv = SECOID_CopyAlgorithmID(poolp, &a->digestAlgorithm, | 
| -	&b->digestAlgorithm); | 
| -    if (rv == SECSuccess) | 
| -	rv = SECITEM_CopyItem(poolp, &a->digest, &b->digest); | 
| - | 
| -    if (rv != SECSuccess) { | 
| -	PORT_ArenaRelease(poolp, mark); | 
| -    } else { | 
| -	PORT_ArenaUnmark(poolp, mark); | 
| -    } | 
| - | 
| -    return rv; | 
| -} | 
| - | 
| -SECComparison | 
| -SGN_CompareDigestInfo(SGNDigestInfo *a, SGNDigestInfo *b) | 
| -{ | 
| -    SECComparison rv; | 
| - | 
| -    /* Check signature algorithm's */ | 
| -    rv = SECOID_CompareAlgorithmID(&a->digestAlgorithm, &b->digestAlgorithm); | 
| -    if (rv) return rv; | 
| - | 
| -    /* Compare signature block length's */ | 
| -    rv = SECITEM_CompareItem(&a->digest, &b->digest); | 
| -    return rv; | 
| -} | 
|  |