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; |
-} |