1*99ebb4caSwyllys /* 2*99ebb4caSwyllys * CDDL HEADER START 3*99ebb4caSwyllys * 4*99ebb4caSwyllys * The contents of this file are subject to the terms of the 5*99ebb4caSwyllys * Common Development and Distribution License (the "License"). 6*99ebb4caSwyllys * You may not use this file except in compliance with the License. 7*99ebb4caSwyllys * 8*99ebb4caSwyllys * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*99ebb4caSwyllys * or http://www.opensolaris.org/os/licensing. 10*99ebb4caSwyllys * See the License for the specific language governing permissions 11*99ebb4caSwyllys * and limitations under the License. 12*99ebb4caSwyllys * 13*99ebb4caSwyllys * When distributing Covered Code, include this CDDL HEADER in each 14*99ebb4caSwyllys * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*99ebb4caSwyllys * If applicable, add the following below this CDDL HEADER, with the 16*99ebb4caSwyllys * fields enclosed by brackets "[]" replaced with your own identifying 17*99ebb4caSwyllys * information: Portions Copyright [yyyy] [name of copyright owner] 18*99ebb4caSwyllys * 19*99ebb4caSwyllys * CDDL HEADER END 20*99ebb4caSwyllys * 21*99ebb4caSwyllys * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 22*99ebb4caSwyllys * Use is subject to license terms. 23*99ebb4caSwyllys */ 24*99ebb4caSwyllys #ifndef _KMFPOLICY_H 25*99ebb4caSwyllys #define _KMFPOLICY_H 26*99ebb4caSwyllys 27*99ebb4caSwyllys #pragma ident "%Z%%M% %I% %E% SMI" 28*99ebb4caSwyllys 29*99ebb4caSwyllys #include <kmfapi.h> 30*99ebb4caSwyllys #include <libxml/tree.h> 31*99ebb4caSwyllys #include <libxml/parser.h> 32*99ebb4caSwyllys 33*99ebb4caSwyllys #ifdef __cplusplus 34*99ebb4caSwyllys extern "C" { 35*99ebb4caSwyllys #endif 36*99ebb4caSwyllys 37*99ebb4caSwyllys typedef struct { 38*99ebb4caSwyllys char *name; 39*99ebb4caSwyllys char *serial; 40*99ebb4caSwyllys }KMF_RESP_CERT_POLICY; 41*99ebb4caSwyllys 42*99ebb4caSwyllys typedef struct { 43*99ebb4caSwyllys char *responderURI; 44*99ebb4caSwyllys char *proxy; 45*99ebb4caSwyllys boolean_t uri_from_cert; 46*99ebb4caSwyllys char *response_lifetime; 47*99ebb4caSwyllys boolean_t ignore_response_sign; 48*99ebb4caSwyllys }KMF_OCSP_BASIC_POLICY; 49*99ebb4caSwyllys 50*99ebb4caSwyllys typedef struct { 51*99ebb4caSwyllys KMF_OCSP_BASIC_POLICY basic; 52*99ebb4caSwyllys KMF_RESP_CERT_POLICY resp_cert; 53*99ebb4caSwyllys boolean_t has_resp_cert; 54*99ebb4caSwyllys }KMF_OCSP_POLICY; 55*99ebb4caSwyllys 56*99ebb4caSwyllys typedef struct { 57*99ebb4caSwyllys char *basefilename; 58*99ebb4caSwyllys char *directory; 59*99ebb4caSwyllys char *proxy; 60*99ebb4caSwyllys boolean_t get_crl_uri; 61*99ebb4caSwyllys boolean_t ignore_crl_sign; 62*99ebb4caSwyllys boolean_t ignore_crl_date; 63*99ebb4caSwyllys }KMF_CRL_POLICY; 64*99ebb4caSwyllys 65*99ebb4caSwyllys typedef struct { 66*99ebb4caSwyllys KMF_OCSP_POLICY ocsp_info; 67*99ebb4caSwyllys KMF_CRL_POLICY crl_info; 68*99ebb4caSwyllys }KMF_VALIDATION_POLICY; 69*99ebb4caSwyllys 70*99ebb4caSwyllys typedef struct { 71*99ebb4caSwyllys int eku_count; 72*99ebb4caSwyllys KMF_OID *ekulist; 73*99ebb4caSwyllys }KMF_EKU_POLICY; 74*99ebb4caSwyllys 75*99ebb4caSwyllys 76*99ebb4caSwyllys #define KMF_REVOCATION_METHOD_CRL 0x1 77*99ebb4caSwyllys #define KMF_REVOCATION_METHOD_OCSP 0x2 78*99ebb4caSwyllys 79*99ebb4caSwyllys 80*99ebb4caSwyllys typedef struct { 81*99ebb4caSwyllys char *name; 82*99ebb4caSwyllys KMF_VALIDATION_POLICY validation_info; 83*99ebb4caSwyllys KMF_EKU_POLICY eku_set; 84*99ebb4caSwyllys uint32_t ku_bits; 85*99ebb4caSwyllys boolean_t ignore_date; 86*99ebb4caSwyllys boolean_t ignore_unknown_ekus; 87*99ebb4caSwyllys boolean_t ignore_trust_anchor; 88*99ebb4caSwyllys char *validity_adjusttime; 89*99ebb4caSwyllys char *ta_name; 90*99ebb4caSwyllys char *ta_serial; 91*99ebb4caSwyllys uint32_t revocation; 92*99ebb4caSwyllys } KMF_POLICY_RECORD; 93*99ebb4caSwyllys 94*99ebb4caSwyllys 95*99ebb4caSwyllys /* 96*99ebb4caSwyllys * Short cut for ocsp_info and etc. 97*99ebb4caSwyllys */ 98*99ebb4caSwyllys #define VAL_OCSP validation_info.ocsp_info 99*99ebb4caSwyllys 100*99ebb4caSwyllys #define VAL_OCSP_BASIC VAL_OCSP.basic 101*99ebb4caSwyllys #define VAL_OCSP_RESPONDER_URI VAL_OCSP_BASIC.responderURI 102*99ebb4caSwyllys #define VAL_OCSP_PROXY VAL_OCSP_BASIC.proxy 103*99ebb4caSwyllys #define VAL_OCSP_URI_FROM_CERT VAL_OCSP_BASIC.uri_from_cert 104*99ebb4caSwyllys #define VAL_OCSP_RESP_LIFETIME VAL_OCSP_BASIC.response_lifetime 105*99ebb4caSwyllys #define VAL_OCSP_IGNORE_RESP_SIGN VAL_OCSP_BASIC.ignore_response_sign 106*99ebb4caSwyllys 107*99ebb4caSwyllys #define VAL_OCSP_RESP_CERT VAL_OCSP.resp_cert 108*99ebb4caSwyllys #define VAL_OCSP_RESP_CERT_NAME VAL_OCSP_RESP_CERT.name 109*99ebb4caSwyllys #define VAL_OCSP_RESP_CERT_SERIAL VAL_OCSP_RESP_CERT.serial 110*99ebb4caSwyllys 111*99ebb4caSwyllys /* 112*99ebb4caSwyllys * Short cut for crl_info and etc. 113*99ebb4caSwyllys */ 114*99ebb4caSwyllys #define VAL_CRL validation_info.crl_info 115*99ebb4caSwyllys #define VAL_CRL_BASEFILENAME validation_info.crl_info.basefilename 116*99ebb4caSwyllys #define VAL_CRL_DIRECTORY validation_info.crl_info.directory 117*99ebb4caSwyllys #define VAL_CRL_GET_URI validation_info.crl_info.get_crl_uri 118*99ebb4caSwyllys #define VAL_CRL_PROXY validation_info.crl_info.proxy 119*99ebb4caSwyllys #define VAL_CRL_IGNORE_SIGN validation_info.crl_info.ignore_crl_sign 120*99ebb4caSwyllys #define VAL_CRL_IGNORE_DATE validation_info.crl_info.ignore_crl_date 121*99ebb4caSwyllys 122*99ebb4caSwyllys /* 123*99ebb4caSwyllys * Policy related constant definitions. 124*99ebb4caSwyllys */ 125*99ebb4caSwyllys #define KMF_POLICY_DTD "/usr/share/lib/xml/dtd/kmfpolicy.dtd" 126*99ebb4caSwyllys #define KMF_DEFAULT_POLICY_FILE "/etc/security/kmfpolicy.xml" 127*99ebb4caSwyllys 128*99ebb4caSwyllys #define KMF_DEFAULT_POLICY_NAME "default" 129*99ebb4caSwyllys 130*99ebb4caSwyllys #define KMF_POLICY_ROOT "kmf-policy-db" 131*99ebb4caSwyllys 132*99ebb4caSwyllys #define KULOWBIT 7 133*99ebb4caSwyllys #define KUHIGHBIT 15 134*99ebb4caSwyllys 135*99ebb4caSwyllys #define KMF_POLICY_ELEMENT "kmf-policy" 136*99ebb4caSwyllys #define KMF_POLICY_NAME_ATTR "name" 137*99ebb4caSwyllys #define KMF_OPTIONS_IGNORE_DATE_ATTR "ignore-date" 138*99ebb4caSwyllys #define KMF_OPTIONS_IGNORE_UNKNOWN_EKUS "ignore-unknown-eku" 139*99ebb4caSwyllys #define KMF_OPTIONS_IGNORE_TRUST_ANCHOR "ignore-trust-anchor" 140*99ebb4caSwyllys #define KMF_OPTIONS_VALIDITY_ADJUSTTIME "validity-adjusttime" 141*99ebb4caSwyllys #define KMF_POLICY_TA_NAME_ATTR "ta-name" 142*99ebb4caSwyllys #define KMF_POLICY_TA_SERIAL_ATTR "ta-serial" 143*99ebb4caSwyllys 144*99ebb4caSwyllys #define KMF_VALIDATION_METHODS_ELEMENT "validation-methods" 145*99ebb4caSwyllys 146*99ebb4caSwyllys #define KMF_OCSP_ELEMENT "ocsp" 147*99ebb4caSwyllys #define KMF_OCSP_BASIC_ELEMENT "ocsp-basic" 148*99ebb4caSwyllys #define KMF_OCSP_RESPONDER_ATTR "responder" 149*99ebb4caSwyllys #define KMF_OCSP_PROXY_ATTR "proxy" 150*99ebb4caSwyllys #define KMF_OCSP_URI_ATTR "uri-from-cert" 151*99ebb4caSwyllys #define KMF_OCSP_RESPONSE_LIFETIME_ATTR "response-lifetime" 152*99ebb4caSwyllys #define KMF_OCSP_IGNORE_SIGN_ATTR "ignore-response-sign" 153*99ebb4caSwyllys #define KMF_OCSP_RESPONDER_CERT_ELEMENT "responder-cert" 154*99ebb4caSwyllys 155*99ebb4caSwyllys #define KMF_CERT_NAME_ATTR "name" 156*99ebb4caSwyllys #define KMF_CERT_SERIAL_ATTR "serial" 157*99ebb4caSwyllys 158*99ebb4caSwyllys #define KMF_CRL_ELEMENT "crl" 159*99ebb4caSwyllys #define KMF_CRL_BASENAME_ATTR "basefilename" 160*99ebb4caSwyllys #define KMF_CRL_DIRECTORY_ATTR "directory" 161*99ebb4caSwyllys #define KMF_CRL_GET_URI_ATTR "get-crl-uri" 162*99ebb4caSwyllys #define KMF_CRL_PROXY_ATTR "proxy" 163*99ebb4caSwyllys #define KMF_CRL_IGNORE_SIGN_ATTR "ignore-crl-sign" 164*99ebb4caSwyllys #define KMF_CRL_IGNORE_DATE_ATTR "ignore-crl-date" 165*99ebb4caSwyllys 166*99ebb4caSwyllys #define KMF_KEY_USAGE_SET_ELEMENT "key-usage-set" 167*99ebb4caSwyllys #define KMF_KEY_USAGE_ELEMENT "key-usage" 168*99ebb4caSwyllys #define KMF_KEY_USAGE_USE_ATTR "use" 169*99ebb4caSwyllys 170*99ebb4caSwyllys #define KMF_EKU_ELEMENT "ext-key-usage" 171*99ebb4caSwyllys #define KMF_EKU_NAME_ELEMENT "eku-name" 172*99ebb4caSwyllys #define KMF_EKU_NAME_ATTR "name" 173*99ebb4caSwyllys #define KMF_EKU_OID_ELEMENT "eku-oid" 174*99ebb4caSwyllys #define KMF_EKU_OID_ATTR "oid" 175*99ebb4caSwyllys 176*99ebb4caSwyllys #define TMPFILE_TEMPLATE "policyXXXXXX" 177*99ebb4caSwyllys 178*99ebb4caSwyllys extern char *ku2str(uint32_t); 179*99ebb4caSwyllys extern uint32_t str2ku(char *); 180*99ebb4caSwyllys extern int parsePolicyElement(xmlNodePtr, KMF_POLICY_RECORD *); 181*99ebb4caSwyllys 182*99ebb4caSwyllys extern char *KMF_OID2EKUString(KMF_OID *); 183*99ebb4caSwyllys extern KMF_OID *kmf_ekuname2oid(char *); 184*99ebb4caSwyllys extern KMF_OID *kmf_string2oid(char *); 185*99ebb4caSwyllys 186*99ebb4caSwyllys extern KMF_RETURN KMF_GetPolicy(char *, char *, KMF_POLICY_RECORD *); 187*99ebb4caSwyllys extern KMF_RETURN KMF_AddPolicyToDB(KMF_POLICY_RECORD *, char *, boolean_t); 188*99ebb4caSwyllys extern KMF_RETURN KMF_DeletePolicyFromDB(char *, char *); 189*99ebb4caSwyllys extern KMF_RETURN KMF_VerifyPolicy(KMF_POLICY_RECORD *); 190*99ebb4caSwyllys 191*99ebb4caSwyllys extern void KMF_FreePolicyRecord(KMF_POLICY_RECORD *); 192*99ebb4caSwyllys extern void KMF_FreeEKUPolicy(KMF_EKU_POLICY *); 193*99ebb4caSwyllys 194*99ebb4caSwyllys #ifdef __cplusplus 195*99ebb4caSwyllys } 196*99ebb4caSwyllys #endif 197*99ebb4caSwyllys #endif /* _KMFPOLICY_H */ 198