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