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