xref: /illumos-gate/usr/src/lib/libkmf/libkmf/common/algoid.c (revision 150d2c5288c645a1c1a7d2bee61199a3729406c7)
1 /*
2  * Copyright (c) 1995-2000 Intel Corporation. All rights reserved.
3  */
4 /*
5  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
6  * Use is subject to license terms.
7  */
8 
9 #pragma ident	"%Z%%M%	%I%	%E% SMI"
10 
11 #include <stdlib.h>
12 #include <string.h>
13 
14 #include <kmfapiP.h>
15 #include <oidsalg.h>
16 
17 typedef struct {
18 	KMF_OID * AlgOID;
19 	KMF_ALGORITHM_INDEX AlgID;
20 } KMF_OID_ID;
21 
22 /*
23  * The following table defines the mapping of AlgOID's to AlgID's.
24  */
25 static KMF_OID_ID ALGOID_ID_Table[] = {
26 	{&KMFOID_X9CM_DSA, KMF_ALGID_DSA},
27 	{&KMFOID_X9CM_DSAWithSHA1, KMF_ALGID_SHA1WithDSA},
28 	{&KMFOID_SHA1, KMF_ALGID_SHA1},
29 	{&KMFOID_RSA, KMF_ALGID_RSA},
30 	{&KMFOID_DSA, KMF_ALGID_DSA},
31 	{&KMFOID_MD5WithRSA, KMF_ALGID_MD5WithRSA},
32 	{&KMFOID_MD2WithRSA, KMF_ALGID_MD2WithRSA},
33 	{&KMFOID_SHA1WithRSA, KMF_ALGID_SHA1WithRSA},
34 	{&KMFOID_SHA1WithDSA, KMF_ALGID_SHA1WithDSA}
35 };
36 
37 #define	NUM_ALGOIDS ((sizeof (ALGOID_ID_Table))/(sizeof (ALGOID_ID_Table[0])))
38 
39 /*
40  * Name: X509_AlgIdToAlgorithmOid
41  *
42  * Description:
43  * This function maps the specified AlgID to the corresponding
44  * Algorithm OID.
45  *
46  * Parameters:
47  * alg_int - AlgID to be mapped.
48  *
49  * Return value:
50  * Pointer to OID structure and NULL in case of failure.
51  *
52  */
53 KMF_OID *
54 X509_AlgIdToAlgorithmOid(KMF_ALGORITHM_INDEX alg_int)
55 {
56 	int i;
57 
58 	switch (alg_int) {
59 		case KMF_ALGID_NONE:
60 			return (NULL);
61 
62 		default:
63 			for (i = 0; i < NUM_ALGOIDS; i++) {
64 				if (ALGOID_ID_Table[i].AlgID == alg_int)
65 					return (ALGOID_ID_Table[i].AlgOID);
66 			}
67 			break;
68 	}
69 
70 	return (NULL);
71 }
72 
73 /*
74  * Name: X509_AlgorithmOidToAlgId
75  *
76  * Description:
77  * This function maps the specified Algorithm OID to the corresponding
78  * AlgID.
79  *
80  * Parameters:
81  * Oid - OID to be mapped.
82  *
83  * Return value:
84  * Algorithm ID and KMF_ALGID_NONE in case of failures.
85  */
86 KMF_ALGORITHM_INDEX
87 X509_AlgorithmOidToAlgId(KMF_OID * Oid)
88 {
89 	int i;
90 
91 	if ((Oid == NULL) ||
92 		(Oid->Data == NULL) ||
93 		(Oid->Length == 0)) {
94 		return (KMF_ALGID_NONE);
95 	}
96 
97 	for (i = 0; i < NUM_ALGOIDS; i++) {
98 		if (IsEqualOid(ALGOID_ID_Table[i].AlgOID, Oid))
99 			return (ALGOID_ID_Table[i].AlgID);
100 	}
101 
102 	return (KMF_ALGID_NONE);
103 }
104