diff options
author | nelsonb%netscape.com <devnull@localhost> | 2002-12-12 06:05:45 +0000 |
---|---|---|
committer | nelsonb%netscape.com <devnull@localhost> | 2002-12-12 06:05:45 +0000 |
commit | 8b73734345b41dabe737d54180e8345d40a4e93f (patch) | |
tree | ee10a7c132587f6a9e991358d284530bd627cff1 /security/nss/lib/smime/cmsutil.c | |
parent | ed724e99c57dbf66768fde5710465b5728f5cfdd (diff) | |
download | nss-hg-8b73734345b41dabe737d54180e8345d40a4e93f.tar.gz |
Support SHA256, SHA384, and SHA512 hashes in NSS.
Diffstat (limited to 'security/nss/lib/smime/cmsutil.c')
-rw-r--r-- | security/nss/lib/smime/cmsutil.c | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/security/nss/lib/smime/cmsutil.c b/security/nss/lib/smime/cmsutil.c index f7899d881..9c88e4ee9 100644 --- a/security/nss/lib/smime/cmsutil.c +++ b/security/nss/lib/smime/cmsutil.c @@ -178,19 +178,30 @@ NSS_CMSAlgArray_GetIndexByAlgID(SECAlgorithmID **algorithmArray, SECAlgorithmID * algorithm was not found. */ int -NSS_CMSAlgArray_GetIndexByAlgTag(SECAlgorithmID **algorithmArray, SECOidTag algtag) +NSS_CMSAlgArray_GetIndexByAlgTag(SECAlgorithmID **algorithmArray, + SECOidTag algtag) { SECOidData *algid; - int i; + int i = -1; if (algorithmArray == NULL || algorithmArray[0] == NULL) - return -1; + return i; +#ifdef ORDER_N_SQUARED for (i = 0; algorithmArray[i] != NULL; i++) { algid = SECOID_FindOID(&(algorithmArray[i]->algorithm)); if (algid->offset == algtag) break; /* bingo */ } +#else + algid = SECOID_FindOIDByTag(algtag); + if (!algid) + return i; + for (i = 0; algorithmArray[i] != NULL; i++) { + if (SECITEM_ItemsAreEqual(&algorithmArray[i]->algorithm, &algid->oid)) + break; /* bingo */ + } +#endif if (algorithmArray[i] == NULL) return -1; /* not found */ @@ -201,29 +212,9 @@ NSS_CMSAlgArray_GetIndexByAlgTag(SECAlgorithmID **algorithmArray, SECOidTag algt const SECHashObject * NSS_CMSUtil_GetHashObjByAlgID(SECAlgorithmID *algid) { - SECOidData *oiddata; - const SECHashObject *digobj; - - /* here are the algorithms we know */ - oiddata = SECOID_FindOID(&(algid->algorithm)); - if (oiddata == NULL) { - digobj = NULL; - } else { - switch (oiddata->offset) { - case SEC_OID_MD2: - digobj = HASH_GetHashObject(HASH_AlgMD2); - break; - case SEC_OID_MD5: - digobj = HASH_GetHashObject(HASH_AlgMD5); - break; - case SEC_OID_SHA1: - digobj = HASH_GetHashObject(HASH_AlgSHA1); - break; - default: - digobj = NULL; - break; - } - } + SECOidTag oidTag = SECOID_FindOIDTag(&(algid->algorithm)); + const SECHashObject *digobj = HASH_GetHashObjectByOidTag(oidTag); + return digobj; } @@ -243,6 +234,12 @@ NSS_CMSUtil_MakeSignatureAlgorithm(SECOidTag hashalg, SECOidTag encalg) return SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION; case SEC_OID_SHA1: return SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION; + case SEC_OID_SHA256: + return SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION; + case SEC_OID_SHA384: + return SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION; + case SEC_OID_SHA512: + return SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION; default: return SEC_OID_UNKNOWN; } |