xref: /illumos-gate/usr/src/lib/libkmf/libkmf/common/algoid.c (revision 9525b14bcdeb5b5f6f95ab27c2f48f18bd2ec829)
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 
16 typedef struct {
17 	KMF_OID * AlgOID;
18 	KMF_ALGORITHM_INDEX AlgID;
19 } KMF_OID_ID;
20 
21 /*
22  * The following table defines the mapping of AlgOID's to AlgID's.
23  */
24 static KMF_OID_ID ALGOID_ID_Table[] = {
25 	{(KMF_OID *)&KMFOID_X9CM_DSA, KMF_ALGID_DSA},
26 	{(KMF_OID *)&KMFOID_X9CM_DSAWithSHA1, KMF_ALGID_SHA1WithDSA},
27 	{(KMF_OID *)&KMFOID_SHA1, KMF_ALGID_SHA1},
28 	{(KMF_OID *)&KMFOID_RSA, KMF_ALGID_RSA},
29 	{(KMF_OID *)&KMFOID_DSA, KMF_ALGID_DSA},
30 	{(KMF_OID *)&KMFOID_MD5WithRSA, KMF_ALGID_MD5WithRSA},
31 	{(KMF_OID *)&KMFOID_MD2WithRSA, KMF_ALGID_MD2WithRSA},
32 	{(KMF_OID *)&KMFOID_SHA1WithRSA, KMF_ALGID_SHA1WithRSA},
33 	{(KMF_OID *)&KMFOID_SHA1WithDSA, KMF_ALGID_SHA1WithDSA}
34 };
35 
36 #define	NUM_ALGOIDS ((sizeof (ALGOID_ID_Table))/(sizeof (ALGOID_ID_Table[0])))
37 
38 /*
39  * Name: x509_algid_to_algoid
40  *
41  * Description:
42  * This function maps the specified AlgID to the corresponding
43  * Algorithm OID.
44  *
45  * Parameters:
46  * alg_int - AlgID to be mapped.
47  *
48  * Return value:
49  * Pointer to OID structure and NULL in case of failure.
50  *
51  */
52 KMF_OID *
53 x509_algid_to_algoid(KMF_ALGORITHM_INDEX alg_int)
54 {
55 	int i;
56 
57 	switch (alg_int) {
58 		case KMF_ALGID_NONE:
59 			return (NULL);
60 
61 		default:
62 			for (i = 0; i < NUM_ALGOIDS; i++) {
63 				if (ALGOID_ID_Table[i].AlgID == alg_int)
64 					return (ALGOID_ID_Table[i].AlgOID);
65 			}
66 			break;
67 	}
68 
69 	return (NULL);
70 }
71 
72 /*
73  * Name: x509_algoid_to_algid
74  *
75  * Description:
76  * This function maps the specified Algorithm OID to the corresponding
77  * AlgID.
78  *
79  * Parameters:
80  * Oid - OID to be mapped.
81  *
82  * Return value:
83  * Algorithm ID and KMF_ALGID_NONE in case of failures.
84  */
85 KMF_ALGORITHM_INDEX
86 x509_algoid_to_algid(KMF_OID * Oid)
87 {
88 	int i;
89 
90 	if ((Oid == NULL) || (Oid->Data == NULL) || (Oid->Length == 0)) {
91 		return (KMF_ALGID_NONE);
92 	}
93 
94 	for (i = 0; i < NUM_ALGOIDS; i++) {
95 		if (IsEqualOid(ALGOID_ID_Table[i].AlgOID, Oid))
96 			return (ALGOID_ID_Table[i].AlgID);
97 	}
98 
99 	return (KMF_ALGID_NONE);
100 }
101