199ebb4caSwyllys /*
299ebb4caSwyllys * Copyright (c) 1995-2000 Intel Corporation. All rights reserved.
39a767088Shaimay */
49a767088Shaimay /*
5*e65e5c2dSWyllys Ingersoll * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
699ebb4caSwyllys * Use is subject to license terms.
799ebb4caSwyllys */
899ebb4caSwyllys
999ebb4caSwyllys #include <stdlib.h>
1099ebb4caSwyllys #include <string.h>
1199ebb4caSwyllys
1299ebb4caSwyllys #include <kmfapiP.h>
1399ebb4caSwyllys
1499ebb4caSwyllys typedef struct {
1599ebb4caSwyllys KMF_OID * AlgOID;
1699ebb4caSwyllys KMF_ALGORITHM_INDEX AlgID;
1799ebb4caSwyllys } KMF_OID_ID;
1899ebb4caSwyllys
1999ebb4caSwyllys /*
2099ebb4caSwyllys * The following table defines the mapping of AlgOID's to AlgID's.
2199ebb4caSwyllys */
2299ebb4caSwyllys static KMF_OID_ID ALGOID_ID_Table[] = {
2302744e81Swyllys {(KMF_OID *)&KMFOID_X9CM_DSA, KMF_ALGID_DSA},
2402744e81Swyllys {(KMF_OID *)&KMFOID_X9CM_DSAWithSHA1, KMF_ALGID_SHA1WithDSA},
2502744e81Swyllys {(KMF_OID *)&KMFOID_SHA1, KMF_ALGID_SHA1},
2602744e81Swyllys {(KMF_OID *)&KMFOID_RSA, KMF_ALGID_RSA},
2702744e81Swyllys {(KMF_OID *)&KMFOID_DSA, KMF_ALGID_DSA},
2802744e81Swyllys {(KMF_OID *)&KMFOID_MD5WithRSA, KMF_ALGID_MD5WithRSA},
2902744e81Swyllys {(KMF_OID *)&KMFOID_SHA1WithRSA, KMF_ALGID_SHA1WithRSA},
30*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA1WithDSA, KMF_ALGID_SHA1WithDSA},
31*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA256WithDSA, KMF_ALGID_SHA256WithDSA},
32*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA1WithECDSA, KMF_ALGID_SHA1WithECDSA},
33*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA256WithECDSA, KMF_ALGID_SHA256WithECDSA},
34*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA256WithRSA, KMF_ALGID_SHA256WithRSA},
35*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA384WithECDSA, KMF_ALGID_SHA384WithECDSA},
36*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA384WithRSA, KMF_ALGID_SHA384WithRSA},
37*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA512WithECDSA, KMF_ALGID_SHA512WithECDSA},
38*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_SHA512WithRSA, KMF_ALGID_SHA512WithRSA},
39*e65e5c2dSWyllys Ingersoll {(KMF_OID *)&KMFOID_EC_PUBLIC_KEY, KMF_ALGID_ECDSA}
4099ebb4caSwyllys };
4199ebb4caSwyllys
4299ebb4caSwyllys #define NUM_ALGOIDS ((sizeof (ALGOID_ID_Table))/(sizeof (ALGOID_ID_Table[0])))
4399ebb4caSwyllys
4499ebb4caSwyllys /*
4530a5e8faSwyllys * Name: x509_algid_to_algoid
4699ebb4caSwyllys *
4799ebb4caSwyllys * Description:
4899ebb4caSwyllys * This function maps the specified AlgID to the corresponding
4999ebb4caSwyllys * Algorithm OID.
5099ebb4caSwyllys *
5199ebb4caSwyllys * Parameters:
5299ebb4caSwyllys * alg_int - AlgID to be mapped.
5399ebb4caSwyllys *
5499ebb4caSwyllys * Return value:
5599ebb4caSwyllys * Pointer to OID structure and NULL in case of failure.
5699ebb4caSwyllys *
5799ebb4caSwyllys */
5899ebb4caSwyllys KMF_OID *
x509_algid_to_algoid(KMF_ALGORITHM_INDEX alg_int)5930a5e8faSwyllys x509_algid_to_algoid(KMF_ALGORITHM_INDEX alg_int)
6099ebb4caSwyllys {
6199ebb4caSwyllys int i;
6299ebb4caSwyllys
6399ebb4caSwyllys switch (alg_int) {
6499ebb4caSwyllys case KMF_ALGID_NONE:
6599ebb4caSwyllys return (NULL);
6699ebb4caSwyllys
6799ebb4caSwyllys default:
6899ebb4caSwyllys for (i = 0; i < NUM_ALGOIDS; i++) {
6999ebb4caSwyllys if (ALGOID_ID_Table[i].AlgID == alg_int)
7099ebb4caSwyllys return (ALGOID_ID_Table[i].AlgOID);
7199ebb4caSwyllys }
7299ebb4caSwyllys break;
7399ebb4caSwyllys }
7499ebb4caSwyllys
7599ebb4caSwyllys return (NULL);
7699ebb4caSwyllys }
7799ebb4caSwyllys
7899ebb4caSwyllys /*
7930a5e8faSwyllys * Name: x509_algoid_to_algid
8099ebb4caSwyllys *
8199ebb4caSwyllys * Description:
8299ebb4caSwyllys * This function maps the specified Algorithm OID to the corresponding
8399ebb4caSwyllys * AlgID.
8499ebb4caSwyllys *
8599ebb4caSwyllys * Parameters:
8699ebb4caSwyllys * Oid - OID to be mapped.
8799ebb4caSwyllys *
8899ebb4caSwyllys * Return value:
8999ebb4caSwyllys * Algorithm ID and KMF_ALGID_NONE in case of failures.
9099ebb4caSwyllys */
9199ebb4caSwyllys KMF_ALGORITHM_INDEX
x509_algoid_to_algid(KMF_OID * Oid)9230a5e8faSwyllys x509_algoid_to_algid(KMF_OID * Oid)
9399ebb4caSwyllys {
9499ebb4caSwyllys int i;
9599ebb4caSwyllys
9630a5e8faSwyllys if ((Oid == NULL) || (Oid->Data == NULL) || (Oid->Length == 0)) {
9799ebb4caSwyllys return (KMF_ALGID_NONE);
9899ebb4caSwyllys }
9999ebb4caSwyllys
10099ebb4caSwyllys for (i = 0; i < NUM_ALGOIDS; i++) {
10199ebb4caSwyllys if (IsEqualOid(ALGOID_ID_Table[i].AlgOID, Oid))
10299ebb4caSwyllys return (ALGOID_ID_Table[i].AlgID);
10399ebb4caSwyllys }
10499ebb4caSwyllys
10599ebb4caSwyllys return (KMF_ALGID_NONE);
10699ebb4caSwyllys }
107