199ebb4caSwyllys /* 299ebb4caSwyllys * CDDL HEADER START 399ebb4caSwyllys * 499ebb4caSwyllys * The contents of this file are subject to the terms of the 599ebb4caSwyllys * Common Development and Distribution License (the "License"). 699ebb4caSwyllys * You may not use this file except in compliance with the License. 799ebb4caSwyllys * 899ebb4caSwyllys * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 999ebb4caSwyllys * or http://www.opensolaris.org/os/licensing. 1099ebb4caSwyllys * See the License for the specific language governing permissions 1199ebb4caSwyllys * and limitations under the License. 1299ebb4caSwyllys * 1399ebb4caSwyllys * When distributing Covered Code, include this CDDL HEADER in each 1499ebb4caSwyllys * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1599ebb4caSwyllys * If applicable, add the following below this CDDL HEADER, with the 1699ebb4caSwyllys * fields enclosed by brackets "[]" replaced with your own identifying 1799ebb4caSwyllys * information: Portions Copyright [yyyy] [name of copyright owner] 1899ebb4caSwyllys * 1999ebb4caSwyllys * CDDL HEADER END 2099ebb4caSwyllys */ 2199ebb4caSwyllys /* 22*02744e81Swyllys * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 2399ebb4caSwyllys * Use is subject to license terms. 2499ebb4caSwyllys */ 2599ebb4caSwyllys #ifndef _KMFAPIP_H 2699ebb4caSwyllys #define _KMFAPIP_H 2799ebb4caSwyllys 2899ebb4caSwyllys #pragma ident "%Z%%M% %I% %E% SMI" 2999ebb4caSwyllys 3099ebb4caSwyllys #include <kmfapi.h> 3199ebb4caSwyllys #include <kmfpolicy.h> 3299ebb4caSwyllys 3399ebb4caSwyllys #ifdef __cplusplus 3499ebb4caSwyllys extern "C" { 3599ebb4caSwyllys #endif 3699ebb4caSwyllys 3799ebb4caSwyllys /* Plugin function table */ 3899ebb4caSwyllys typedef struct { 3999ebb4caSwyllys ushort_t version; 4099ebb4caSwyllys KMF_RETURN (*ConfigureKeystore) ( 4199ebb4caSwyllys KMF_HANDLE_T, 4299ebb4caSwyllys KMF_CONFIG_PARAMS *); 4399ebb4caSwyllys 4499ebb4caSwyllys KMF_RETURN (*FindCert) ( 4599ebb4caSwyllys KMF_HANDLE_T, 4699ebb4caSwyllys KMF_FINDCERT_PARAMS *, 4799ebb4caSwyllys KMF_X509_DER_CERT *, 4899ebb4caSwyllys uint32_t *); 4999ebb4caSwyllys 5099ebb4caSwyllys void (*FreeKMFCert) ( 5199ebb4caSwyllys KMF_HANDLE_T, 5299ebb4caSwyllys KMF_X509_DER_CERT *); 5399ebb4caSwyllys 5499ebb4caSwyllys KMF_RETURN (*StoreCert) ( 5599ebb4caSwyllys KMF_HANDLE_T, 5699ebb4caSwyllys KMF_STORECERT_PARAMS *, 5799ebb4caSwyllys KMF_DATA *); 5899ebb4caSwyllys 5999ebb4caSwyllys KMF_RETURN (*ImportCert) ( 6099ebb4caSwyllys KMF_HANDLE_T, 6199ebb4caSwyllys KMF_IMPORTCERT_PARAMS *); 6299ebb4caSwyllys 6399ebb4caSwyllys KMF_RETURN (*ImportCRL) ( 6499ebb4caSwyllys KMF_HANDLE_T, 6599ebb4caSwyllys KMF_IMPORTCRL_PARAMS *); 6699ebb4caSwyllys 6799ebb4caSwyllys KMF_RETURN (*DeleteCert) ( 6899ebb4caSwyllys KMF_HANDLE_T, 6999ebb4caSwyllys KMF_DELETECERT_PARAMS *); 7099ebb4caSwyllys 7199ebb4caSwyllys KMF_RETURN (*DeleteCRL) ( 7299ebb4caSwyllys KMF_HANDLE_T, 7399ebb4caSwyllys KMF_DELETECRL_PARAMS *); 7499ebb4caSwyllys 7599ebb4caSwyllys KMF_RETURN (*CreateKeypair) ( 7699ebb4caSwyllys KMF_HANDLE_T, 7799ebb4caSwyllys KMF_CREATEKEYPAIR_PARAMS *, 7899ebb4caSwyllys KMF_KEY_HANDLE *, 7999ebb4caSwyllys KMF_KEY_HANDLE *); 8099ebb4caSwyllys 8199ebb4caSwyllys KMF_RETURN (*FindKey) ( 8299ebb4caSwyllys KMF_HANDLE_T, 8399ebb4caSwyllys KMF_FINDKEY_PARAMS *, 8499ebb4caSwyllys KMF_KEY_HANDLE *, 8599ebb4caSwyllys uint32_t *); 8699ebb4caSwyllys 8799ebb4caSwyllys KMF_RETURN (*EncodePubkeyData) ( 8899ebb4caSwyllys KMF_HANDLE_T, 8999ebb4caSwyllys KMF_KEY_HANDLE *, 9099ebb4caSwyllys KMF_DATA *); 9199ebb4caSwyllys 9299ebb4caSwyllys KMF_RETURN (*SignData) ( 9399ebb4caSwyllys KMF_HANDLE_T, 9499ebb4caSwyllys KMF_KEY_HANDLE *, 9599ebb4caSwyllys KMF_OID *, 9699ebb4caSwyllys KMF_DATA *, 9799ebb4caSwyllys KMF_DATA *); 9899ebb4caSwyllys 9999ebb4caSwyllys KMF_RETURN (*DeleteKey) ( 10099ebb4caSwyllys KMF_HANDLE_T, 10199ebb4caSwyllys KMF_DELETEKEY_PARAMS *, 10299ebb4caSwyllys KMF_KEY_HANDLE *, 10399ebb4caSwyllys boolean_t); 10499ebb4caSwyllys 10599ebb4caSwyllys KMF_RETURN (*ListCRL) ( 10699ebb4caSwyllys KMF_HANDLE_T, 10799ebb4caSwyllys KMF_LISTCRL_PARAMS *, 10899ebb4caSwyllys char **); 10999ebb4caSwyllys 11099ebb4caSwyllys KMF_RETURN (*FindCRL) ( 11199ebb4caSwyllys KMF_HANDLE_T, 11299ebb4caSwyllys KMF_FINDCRL_PARAMS *, 11399ebb4caSwyllys char **, 11499ebb4caSwyllys int *); 11599ebb4caSwyllys 11699ebb4caSwyllys KMF_RETURN (*FindCertInCRL) ( 11799ebb4caSwyllys KMF_HANDLE_T, 11899ebb4caSwyllys KMF_FINDCERTINCRL_PARAMS *); 11999ebb4caSwyllys 12099ebb4caSwyllys KMF_RETURN (*GetErrorString) ( 12199ebb4caSwyllys KMF_HANDLE_T, 12299ebb4caSwyllys char **); 12399ebb4caSwyllys 12499ebb4caSwyllys KMF_RETURN (*GetPrikeyByCert) ( 12599ebb4caSwyllys KMF_HANDLE_T, 12699ebb4caSwyllys KMF_CRYPTOWITHCERT_PARAMS *, 12799ebb4caSwyllys KMF_DATA *, 12899ebb4caSwyllys KMF_KEY_HANDLE *, 12999ebb4caSwyllys KMF_KEY_ALG); 13099ebb4caSwyllys 13199ebb4caSwyllys KMF_RETURN (*DecryptData) ( 13299ebb4caSwyllys KMF_HANDLE_T, 13399ebb4caSwyllys KMF_KEY_HANDLE *, 13499ebb4caSwyllys KMF_OID *, 13599ebb4caSwyllys KMF_DATA *, 13699ebb4caSwyllys KMF_DATA *); 13799ebb4caSwyllys 13899ebb4caSwyllys KMF_RETURN (*ExportP12)( 13999ebb4caSwyllys KMF_HANDLE_T, 14099ebb4caSwyllys KMF_EXPORTP12_PARAMS *, 14199ebb4caSwyllys int, KMF_X509_DER_CERT *, 14299ebb4caSwyllys int, KMF_KEY_HANDLE *, 14399ebb4caSwyllys char *); 14499ebb4caSwyllys 14599ebb4caSwyllys KMF_RETURN (*StorePrivateKey)( 14699ebb4caSwyllys KMF_HANDLE_T, 14799ebb4caSwyllys KMF_STOREKEY_PARAMS *, 14899ebb4caSwyllys KMF_RAW_KEY_DATA *); 14999ebb4caSwyllys 15099ebb4caSwyllys KMF_RETURN (*CreateSymKey) ( 15199ebb4caSwyllys KMF_HANDLE_T, 15299ebb4caSwyllys KMF_CREATESYMKEY_PARAMS *, 15399ebb4caSwyllys KMF_KEY_HANDLE *); 15499ebb4caSwyllys 15599ebb4caSwyllys KMF_RETURN (*GetSymKeyValue) ( 15699ebb4caSwyllys KMF_HANDLE_T, 15799ebb4caSwyllys KMF_KEY_HANDLE *, 15899ebb4caSwyllys KMF_RAW_SYM_KEY *); 15999ebb4caSwyllys 16099ebb4caSwyllys KMF_RETURN (*SetTokenPin) ( 16199ebb4caSwyllys KMF_HANDLE_T, 16299ebb4caSwyllys KMF_SETPIN_PARAMS *, 16399ebb4caSwyllys KMF_CREDENTIAL *); 16499ebb4caSwyllys 165*02744e81Swyllys KMF_RETURN (*VerifyDataWithCert) ( 166*02744e81Swyllys KMF_HANDLE_T, 167*02744e81Swyllys KMF_ALGORITHM_INDEX, 168*02744e81Swyllys KMF_DATA *, 169*02744e81Swyllys KMF_DATA *, 170*02744e81Swyllys KMF_DATA *); 171*02744e81Swyllys 17299ebb4caSwyllys void (*Finalize) (); 17399ebb4caSwyllys 17499ebb4caSwyllys } KMF_PLUGIN_FUNCLIST; 17599ebb4caSwyllys 17699ebb4caSwyllys typedef struct { 17799ebb4caSwyllys KMF_KEYSTORE_TYPE type; 17899ebb4caSwyllys char *applications; 17999ebb4caSwyllys char *path; 18099ebb4caSwyllys void *dldesc; 18199ebb4caSwyllys KMF_PLUGIN_FUNCLIST *funclist; 18299ebb4caSwyllys } KMF_PLUGIN; 18399ebb4caSwyllys 18499ebb4caSwyllys typedef struct _KMF_PLUGIN_LIST { 18599ebb4caSwyllys KMF_PLUGIN *plugin; 18699ebb4caSwyllys struct _KMF_PLUGIN_LIST *next; 18799ebb4caSwyllys } KMF_PLUGIN_LIST; 18899ebb4caSwyllys 18999ebb4caSwyllys typedef struct _kmf_handle { 19099ebb4caSwyllys /* 19199ebb4caSwyllys * session handle opened by KMF_SelectToken() to talk 19299ebb4caSwyllys * to a specific slot in Crypto framework. It is used 19399ebb4caSwyllys * by pkcs11 plugin module. 19499ebb4caSwyllys */ 19599ebb4caSwyllys CK_SESSION_HANDLE pk11handle; 19699ebb4caSwyllys KMF_ERROR lasterr; 19799ebb4caSwyllys KMF_POLICY_RECORD *policy; 19899ebb4caSwyllys KMF_PLUGIN_LIST *plugins; 19999ebb4caSwyllys } KMF_HANDLE; 20099ebb4caSwyllys 20199ebb4caSwyllys #define CLEAR_ERROR(h, rv) { \ 20299ebb4caSwyllys if (h == NULL) { \ 20399ebb4caSwyllys rv = KMF_ERR_BAD_PARAMETER; \ 20499ebb4caSwyllys } else { \ 20599ebb4caSwyllys h->lasterr.errcode = 0; \ 20699ebb4caSwyllys h->lasterr.kstype = 0; \ 20799ebb4caSwyllys rv = KMF_OK; \ 20899ebb4caSwyllys } \ 20999ebb4caSwyllys } 21099ebb4caSwyllys 21199ebb4caSwyllys #define KMF_PLUGIN_INIT_SYMBOL "KMF_Plugin_Initialize" 21299ebb4caSwyllys 21399ebb4caSwyllys #ifndef KMF_PLUGIN_PATH 21499ebb4caSwyllys #if defined(__sparcv9) 21599ebb4caSwyllys #define KMF_PLUGIN_PATH "/usr/lib/security/sparcv9/" 21699ebb4caSwyllys #elif defined(__sparc) 21799ebb4caSwyllys #define KMF_PLUGIN_PATH "/usr/lib/security/" 21899ebb4caSwyllys #elif defined(__i386) 21999ebb4caSwyllys #define KMF_PLUGIN_PATH "/usr/lib/security/" 22099ebb4caSwyllys #elif defined(__amd64) 22199ebb4caSwyllys #define KMF_PLUGIN_PATH "/usr/lib/security/amd64/" 22299ebb4caSwyllys #endif 22399ebb4caSwyllys #endif /* !KMF_PLUGIN_PATH */ 22499ebb4caSwyllys 22599ebb4caSwyllys KMF_PLUGIN_FUNCLIST *KMF_Plugin_Initialize(); 22699ebb4caSwyllys 22799ebb4caSwyllys KMF_RETURN 22899ebb4caSwyllys VerifyDataWithKey(KMF_HANDLE_T, KMF_DATA *, KMF_ALGORITHM_INDEX, KMF_DATA *, 22999ebb4caSwyllys KMF_DATA *); 23099ebb4caSwyllys 23199ebb4caSwyllys KMF_RETURN 23299ebb4caSwyllys SignCsr(KMF_HANDLE_T, const KMF_DATA *, KMF_KEY_HANDLE *, 23399ebb4caSwyllys KMF_X509_ALGORITHM_IDENTIFIER *, KMF_DATA *); 23499ebb4caSwyllys 23599ebb4caSwyllys KMF_BOOL PKCS_ConvertAlgorithmId2PKCSKeyType( 23699ebb4caSwyllys KMF_ALGORITHM_INDEX, CK_KEY_TYPE *); 23799ebb4caSwyllys 23899ebb4caSwyllys KMF_RETURN PKCS_VerifyData( 23999ebb4caSwyllys KMF_HANDLE *, 24099ebb4caSwyllys KMF_ALGORITHM_INDEX, 24199ebb4caSwyllys KMF_X509_SPKI *, 24299ebb4caSwyllys KMF_DATA *, KMF_DATA *); 24399ebb4caSwyllys 24499ebb4caSwyllys KMF_RETURN PKCS_EncryptData( 24599ebb4caSwyllys KMF_HANDLE *, 24699ebb4caSwyllys KMF_ALGORITHM_INDEX, 24799ebb4caSwyllys KMF_X509_SPKI *, 24899ebb4caSwyllys KMF_DATA *, 24999ebb4caSwyllys KMF_DATA *); 25099ebb4caSwyllys 25199ebb4caSwyllys KMF_PLUGIN *FindPlugin(KMF_HANDLE_T, KMF_KEYSTORE_TYPE); 25299ebb4caSwyllys 25399ebb4caSwyllys KMF_BOOL IsEqualOid(KMF_OID *, KMF_OID *); 25499ebb4caSwyllys 25599ebb4caSwyllys KMF_OID *X509_AlgIdToAlgorithmOid(KMF_ALGORITHM_INDEX); 25699ebb4caSwyllys KMF_ALGORITHM_INDEX X509_AlgorithmOidToAlgId(KMF_OID *); 257*02744e81Swyllys KMF_RETURN PKCS_AcquirePublicKeyHandle(CK_SESSION_HANDLE ckSession, 258*02744e81Swyllys const KMF_X509_SPKI *, CK_KEY_TYPE, CK_OBJECT_HANDLE *, 259*02744e81Swyllys KMF_BOOL *); 260*02744e81Swyllys 26199ebb4caSwyllys KMF_RETURN GetIDFromSPKI(KMF_X509_SPKI *, KMF_DATA *); 26299ebb4caSwyllys CK_RV DigestData(CK_SESSION_HANDLE, KMF_DATA *, KMF_DATA *); 26399ebb4caSwyllys 26499ebb4caSwyllys KMF_RETURN KMF_SetAltName(KMF_X509_EXTENSIONS *, 26599ebb4caSwyllys KMF_OID *, int, KMF_GENERALNAMECHOICES, char *); 26699ebb4caSwyllys KMF_RETURN GetSequenceContents(char *, size_t, char **, size_t *); 26799ebb4caSwyllys KMF_X509_EXTENSION *FindExtn(KMF_X509_EXTENSIONS *, KMF_OID *); 26899ebb4caSwyllys KMF_RETURN add_an_extension(KMF_X509_EXTENSIONS *exts, 26999ebb4caSwyllys KMF_X509_EXTENSION *newextn); 27099ebb4caSwyllys KMF_RETURN set_integer(KMF_DATA *, void *, int); 27199ebb4caSwyllys void free_keyidlist(KMF_OID *, int); 27299ebb4caSwyllys KMF_RETURN copy_data(KMF_DATA *, KMF_DATA *); 27399ebb4caSwyllys void Cleanup_PK11_Session(KMF_HANDLE_T handle); 27499ebb4caSwyllys void free_dp_name(KMF_CRL_DIST_POINT *); 27599ebb4caSwyllys void free_dp(KMF_CRL_DIST_POINT *); 27699ebb4caSwyllys KMF_RETURN set_key_usage_extension(KMF_X509_EXTENSIONS *, 27799ebb4caSwyllys int, uint32_t); 27899ebb4caSwyllys int is_pk11_ready(); 27999ebb4caSwyllys KMF_RETURN KMF_SelectToken(KMF_HANDLE_T, char *, int); 28099ebb4caSwyllys 28199ebb4caSwyllys 28299ebb4caSwyllys /* Indexes into the key parts array for RSA keys */ 28399ebb4caSwyllys #define KMF_RSA_MODULUS (0) 28499ebb4caSwyllys #define KMF_RSA_PUBLIC_EXPONENT (1) 28599ebb4caSwyllys #define KMF_RSA_PRIVATE_EXPONENT (2) 28699ebb4caSwyllys #define KMF_RSA_PRIME1 (3) 28799ebb4caSwyllys #define KMF_RSA_PRIME2 (4) 28899ebb4caSwyllys #define KMF_RSA_EXPONENT1 (5) 28999ebb4caSwyllys #define KMF_RSA_EXPONENT2 (6) 29099ebb4caSwyllys #define KMF_RSA_COEFFICIENT (7) 29199ebb4caSwyllys 29299ebb4caSwyllys /* Key part counts for RSA keys */ 29399ebb4caSwyllys #define KMF_NUMBER_RSA_PUBLIC_KEY_PARTS (2) 29499ebb4caSwyllys #define KMF_NUMBER_RSA_PRIVATE_KEY_PARTS (8) 29599ebb4caSwyllys 29699ebb4caSwyllys /* Key part counts for DSA keys */ 29799ebb4caSwyllys #define KMF_NUMBER_DSA_PUBLIC_KEY_PARTS (4) 29899ebb4caSwyllys #define KMF_NUMBER_DSA_PRIVATE_KEY_PARTS (4) 29999ebb4caSwyllys 30099ebb4caSwyllys /* Indexes into the key parts array for DSA keys */ 30199ebb4caSwyllys #define KMF_DSA_PRIME (0) 30299ebb4caSwyllys #define KMF_DSA_SUB_PRIME (1) 30399ebb4caSwyllys #define KMF_DSA_BASE (2) 30499ebb4caSwyllys #define KMF_DSA_PUBLIC_VALUE (3) 30599ebb4caSwyllys 30699ebb4caSwyllys #ifndef max 30799ebb4caSwyllys #define max(a, b) ((a) < (b) ? (b) : (a)) 30899ebb4caSwyllys #endif 30999ebb4caSwyllys 31099ebb4caSwyllys /* Maximum key parts for all algorithms */ 31199ebb4caSwyllys #define KMF_MAX_PUBLIC_KEY_PARTS \ 31299ebb4caSwyllys (max(KMF_NUMBER_RSA_PUBLIC_KEY_PARTS, \ 31399ebb4caSwyllys KMF_NUMBER_DSA_PUBLIC_KEY_PARTS)) 31499ebb4caSwyllys 31599ebb4caSwyllys #define KMF_MAX_PRIVATE_KEY_PARTS \ 31699ebb4caSwyllys (max(KMF_NUMBER_RSA_PRIVATE_KEY_PARTS, \ 31799ebb4caSwyllys KMF_NUMBER_DSA_PRIVATE_KEY_PARTS)) 31899ebb4caSwyllys 31999ebb4caSwyllys #define KMF_MAX_KEY_PARTS \ 32099ebb4caSwyllys (max(KMF_MAX_PUBLIC_KEY_PARTS, KMF_MAX_PRIVATE_KEY_PARTS)) 32199ebb4caSwyllys 32299ebb4caSwyllys typedef enum { 32399ebb4caSwyllys KMF_ALGMODE_NONE = 0, 32499ebb4caSwyllys KMF_ALGMODE_CUSTOM, 32599ebb4caSwyllys KMF_ALGMODE_PUBLIC_KEY, 32699ebb4caSwyllys KMF_ALGMODE_PRIVATE_KEY, 32799ebb4caSwyllys KMF_ALGMODE_PKCS1_EMSA_V15 32899ebb4caSwyllys } KMF_SIGNATURE_MODE; 32999ebb4caSwyllys 33099ebb4caSwyllys #define KMF_CERT_PRINTABLE_LEN 1024 33199ebb4caSwyllys #define SHA1_HASH_LENGTH 20 33299ebb4caSwyllys 33399ebb4caSwyllys #define OCSPREQ_TEMPNAME "/tmp/ocsp.reqXXXXXX" 33499ebb4caSwyllys #define OCSPRESP_TEMPNAME "/tmp/ocsp.respXXXXXX" 33599ebb4caSwyllys 33699ebb4caSwyllys #ifdef __cplusplus 33799ebb4caSwyllys } 33899ebb4caSwyllys #endif 33999ebb4caSwyllys #endif /* _KMFAPIP_H */ 340