summaryrefslogtreecommitdiff
path: root/security/nss/lib/smime/cmsutil.c
diff options
context:
space:
mode:
authornelsonb%netscape.com <devnull@localhost>2002-12-12 06:05:45 +0000
committernelsonb%netscape.com <devnull@localhost>2002-12-12 06:05:45 +0000
commit8b73734345b41dabe737d54180e8345d40a4e93f (patch)
treeee10a7c132587f6a9e991358d284530bd627cff1 /security/nss/lib/smime/cmsutil.c
parented724e99c57dbf66768fde5710465b5728f5cfdd (diff)
downloadnss-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.c49
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;
}