99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys/*
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * CDDL HEADER START
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys *
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * The contents of this file are subject to the terms of the
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * Common Development and Distribution License (the "License").
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * You may not use this file except in compliance with the License.
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys *
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * or http://www.opensolaris.org/os/licensing.
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * See the License for the specific language governing permissions
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * and limitations under the License.
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys *
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * When distributing Covered Code, include this CDDL HEADER in each
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * If applicable, add the following below this CDDL HEADER, with the
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * fields enclosed by brackets "[]" replaced with your own identifying
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * information: Portions Copyright [yyyy] [name of copyright owner]
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys *
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * CDDL HEADER END
269e59f9a28bf47e0f463e64fc5af4a408b73b21Jan Pechanec *
269e59f9a28bf47e0f463e64fc5af4a408b73b21Jan Pechanec * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#ifndef _KMFAPIP_H
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define _KMFAPIP_H
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#include <kmfapi.h>
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#include <kmfpolicy.h>
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#ifdef __cplusplus
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysextern "C" {
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys/* Plugin function table */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllystypedef struct {
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys ushort_t version;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*ConfigureKeystore) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*FindCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys void (*FreeKMFCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_X509_DER_CERT *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*StoreCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*ImportCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*ImportCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*DeleteCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*DeleteCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*CreateKeypair) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*FindKey) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*EncodePubkeyData) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*SignData) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_OID *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*DeleteKey) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*ListCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*FindCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*FindCertInCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*GetErrorString) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys char **);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_RETURN (*FindPrikeyByCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*DecryptData) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_OID *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_RETURN (*ExportPK12)(
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*CreateSymKey) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*GetSymKeyValue) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RAW_SYM_KEY *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*SetTokenPin) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_RETURN (*StoreKey) (
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_HANDLE_T,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys int,
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTRIBUTE *);
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys void (*Finalize) ();
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys} KMF_PLUGIN_FUNCLIST;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllystypedef struct {
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys KMF_ATTR_TYPE type;
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys boolean_t null_value_ok; /* Is the pValue required */
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys uint32_t minlen;
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys uint32_t maxlen;
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys} KMF_ATTRIBUTE_TESTER;
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllystypedef struct {
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEYSTORE_TYPE type;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys char *applications;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys char *path;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys void *dldesc;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_PLUGIN_FUNCLIST *funclist;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys} KMF_PLUGIN;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllystypedef struct _KMF_PLUGIN_LIST {
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_PLUGIN *plugin;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys struct _KMF_PLUGIN_LIST *next;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys} KMF_PLUGIN_LIST;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllystypedef struct _kmf_handle {
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys /*
30a5e8fa1253cb33980ee4514743cf683f584b4ewyllys * session handle opened by kmf_select_token() to talk
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * to a specific slot in Crypto framework. It is used
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * by pkcs11 plugin module.
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys CK_SESSION_HANDLE pk11handle;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ERROR lasterr;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_POLICY_RECORD *policy;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_PLUGIN_LIST *plugins;
269e59f9a28bf47e0f463e64fc5af4a408b73b21Jan Pechanec KMF_MAPPER_STATE *mapstate;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys} KMF_HANDLE;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define CLEAR_ERROR(h, rv) { \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys if (h == NULL) { \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys rv = KMF_ERR_BAD_PARAMETER; \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys } else { \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys h->lasterr.errcode = 0; \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys h->lasterr.kstype = 0; \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys rv = KMF_OK; \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys } \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys}
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_PLUGIN_INIT_SYMBOL "KMF_Plugin_Initialize"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#ifndef KMF_PLUGIN_PATH
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#if defined(__sparcv9)
257873cfc1dd3337766407f80397db60a56f2f5aJohn.Zolnowsky@Sun.COM#define KMF_PLUGIN_PATH "/lib/crypto/sparcv9/"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#elif defined(__sparc)
257873cfc1dd3337766407f80397db60a56f2f5aJohn.Zolnowsky@Sun.COM#define KMF_PLUGIN_PATH "/lib/crypto/"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#elif defined(__i386)
257873cfc1dd3337766407f80397db60a56f2f5aJohn.Zolnowsky@Sun.COM#define KMF_PLUGIN_PATH "/lib/crypto/"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#elif defined(__amd64)
257873cfc1dd3337766407f80397db60a56f2f5aJohn.Zolnowsky@Sun.COM#define KMF_PLUGIN_PATH "/lib/crypto/amd64/"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif /* !KMF_PLUGIN_PATH */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_PLUGIN_FUNCLIST *KMF_Plugin_Initialize();
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN
d00756ccb34596a328f8a15d1965da5412d366d0wyllysVerifyDataWithKey(KMF_HANDLE_T, KMF_DATA *, KMF_ALGORITHM_INDEX,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_DATA *, KMF_DATA *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllys
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_BOOL pkcs_algid_to_keytype(
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_ALGORITHM_INDEX, CK_KEY_TYPE *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllys
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersollextern KMF_RETURN PKCS_DigestData(KMF_HANDLE_T,
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersoll CK_SESSION_HANDLE, CK_MECHANISM_TYPE,
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersoll KMF_DATA *, KMF_DATA *, boolean_t);
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersoll
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN PKCS_VerifyData(
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_HANDLE *,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_ALGORITHM_INDEX,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_X509_SPKI *,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_DATA *, KMF_DATA *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllys
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN PKCS_EncryptData(
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_HANDLE *,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_ALGORITHM_INDEX,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_X509_SPKI *,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_DATA *,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_DATA *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllys
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_PLUGIN *FindPlugin(KMF_HANDLE_T, KMF_KEYSTORE_TYPE);
d00756ccb34596a328f8a15d1965da5412d366d0wyllys
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_BOOL IsEqualOid(KMF_OID *, KMF_OID *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllys
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN copy_algoid(KMF_X509_ALGORITHM_IDENTIFIER *destid,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_X509_ALGORITHM_IDENTIFIER *srcid);
d00756ccb34596a328f8a15d1965da5412d366d0wyllys
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_OID *x509_algid_to_algoid(KMF_ALGORITHM_INDEX);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_ALGORITHM_INDEX x509_algoid_to_algid(KMF_OID *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllys
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN GetIDFromSPKI(KMF_X509_SPKI *, KMF_DATA *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN kmf_select_token(KMF_HANDLE_T, char *, int);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN kmf_set_altname(KMF_X509_EXTENSIONS *,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_OID *, int, KMF_GENERALNAMECHOICES, char *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN GetSequenceContents(char *, size_t, char **, size_t *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_X509_EXTENSION *FindExtn(KMF_X509_EXTENSIONS *, KMF_OID *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN add_an_extension(KMF_X509_EXTENSIONS *exts,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys KMF_X509_EXTENSION *newextn);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN set_integer(KMF_DATA *, void *, int);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern void free_keyidlist(KMF_OID *, int);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN copy_data(KMF_DATA *, KMF_DATA *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern void Cleanup_PK11_Session(KMF_HANDLE_T handle);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern void free_dp_name(KMF_CRL_DIST_POINT *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern void free_dp(KMF_CRL_DIST_POINT *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN set_key_usage_extension(KMF_X509_EXTENSIONS *,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys int, uint32_t);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN init_pk11();
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN test_attributes(int, KMF_ATTRIBUTE_TESTER *,
d00756ccb34596a328f8a15d1965da5412d366d0wyllys int, KMF_ATTRIBUTE_TESTER *, int, KMF_ATTRIBUTE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys/* Indexes into the key parts array for RSA keys */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_RSA_MODULUS (0)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_RSA_PUBLIC_EXPONENT (1)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_RSA_PRIVATE_EXPONENT (2)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_RSA_PRIME1 (3)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_RSA_PRIME2 (4)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_RSA_EXPONENT1 (5)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_RSA_EXPONENT2 (6)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_RSA_COEFFICIENT (7)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys/* Key part counts for RSA keys */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_NUMBER_RSA_PUBLIC_KEY_PARTS (2)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_NUMBER_RSA_PRIVATE_KEY_PARTS (8)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys/* Key part counts for DSA keys */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_NUMBER_DSA_PUBLIC_KEY_PARTS (4)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_NUMBER_DSA_PRIVATE_KEY_PARTS (4)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys/* Indexes into the key parts array for DSA keys */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_DSA_PRIME (0)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_DSA_SUB_PRIME (1)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_DSA_BASE (2)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_DSA_PUBLIC_VALUE (3)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersoll#define KMF_ECDSA_PARAMS (0)
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersoll#define KMF_ECDSA_POINT (1)
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersoll
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#ifndef max
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define max(a, b) ((a) < (b) ? (b) : (a))
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys/* Maximum key parts for all algorithms */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_MAX_PUBLIC_KEY_PARTS \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys (max(KMF_NUMBER_RSA_PUBLIC_KEY_PARTS, \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_NUMBER_DSA_PUBLIC_KEY_PARTS))
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_MAX_PRIVATE_KEY_PARTS \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys (max(KMF_NUMBER_RSA_PRIVATE_KEY_PARTS, \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_NUMBER_DSA_PRIVATE_KEY_PARTS))
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_MAX_KEY_PARTS \
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys (max(KMF_MAX_PUBLIC_KEY_PARTS, KMF_MAX_PRIVATE_KEY_PARTS))
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllystypedef enum {
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ALGMODE_NONE = 0,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ALGMODE_CUSTOM,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ALGMODE_PUBLIC_KEY,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ALGMODE_PRIVATE_KEY,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ALGMODE_PKCS1_EMSA_V15
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys} KMF_SIGNATURE_MODE;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_CERT_PRINTABLE_LEN 1024
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define SHA1_HASH_LENGTH 20
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define OCSPREQ_TEMPNAME "/tmp/ocsp.reqXXXXXX"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define OCSPRESP_TEMPNAME "/tmp/ocsp.respXXXXXX"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee#define _PATH_KMF_CONF "/etc/crypto/kmf.conf"
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee#define CONF_MODULEPATH "modulepath="
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee#define CONF_OPTION "option="
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee
431deaa01ac039d796fdfaf86b909a75e7d9ac48hyleetypedef struct {
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee char *keystore;
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee char *modulepath;
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee char *option;
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee KMF_KEYSTORE_TYPE kstype;
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee} conf_entry_t;
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee
431deaa01ac039d796fdfaf86b909a75e7d9ac48hyleetypedef struct conf_entrylist {
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee conf_entry_t *entry;
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee struct conf_entrylist *next;
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee} conf_entrylist_t;
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersollextern KMF_RETURN get_pk11_data(KMF_ALGORITHM_INDEX,
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersoll CK_KEY_TYPE *, CK_MECHANISM_TYPE *, CK_MECHANISM_TYPE *, boolean_t);
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersollextern KMF_RETURN kmf_create_pk11_session(CK_SESSION_HANDLE *,
e65e5c2d2f32a99e8c5f740cabae9075dab03ce7Wyllys Ingersoll CK_MECHANISM_TYPE, CK_FLAGS);
431deaa01ac039d796fdfaf86b909a75e7d9ac48hyleeextern KMF_RETURN get_entrylist(conf_entrylist_t **);
431deaa01ac039d796fdfaf86b909a75e7d9ac48hyleeextern void free_entrylist(conf_entrylist_t *);
431deaa01ac039d796fdfaf86b909a75e7d9ac48hyleeextern void free_entry(conf_entry_t *);
431deaa01ac039d796fdfaf86b909a75e7d9ac48hyleeextern conf_entry_t *dup_entry(conf_entry_t *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern boolean_t is_valid_keystore_type(KMF_KEYSTORE_TYPE);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_BOOL is_eku_present(KMF_X509EXT_EKU *, KMF_OID *);
d00756ccb34596a328f8a15d1965da5412d366d0wyllysextern KMF_RETURN parse_eku_data(const KMF_DATA *, KMF_X509EXT_EKU *);
269e59f9a28bf47e0f463e64fc5af4a408b73b21Jan Pechanecextern KMF_RETURN copy_extension_data(KMF_X509_EXTENSION *,
269e59f9a28bf47e0f463e64fc5af4a408b73b21Jan Pechanec KMF_X509_EXTENSION *);
269e59f9a28bf47e0f463e64fc5af4a408b73b21Jan Pechanecextern char *get_mapper_pathname(char *, char *);
431deaa01ac039d796fdfaf86b909a75e7d9ac48hylee
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#ifdef __cplusplus
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys}
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif /* _KMFAPIP_H */