kmfapiP.h revision 99ebb4ca412cb0a19d77a3899a87c055b9c30fa8
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
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys/*
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * Use is subject to license terms.
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#ifndef _KMFAPIP_H
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define _KMFAPIP_H
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#pragma ident "%Z%%M% %I% %E% SMI"
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,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_CONFIG_PARAMS *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*FindCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_FINDCERT_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_X509_DER_CERT *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys uint32_t *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys void (*FreeKMFCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_X509_DER_CERT *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*StoreCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_STORECERT_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*ImportCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_IMPORTCERT_PARAMS *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*ImportCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_IMPORTCRL_PARAMS *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*DeleteCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DELETECERT_PARAMS *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*DeleteCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DELETECRL_PARAMS *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*CreateKeypair) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_CREATEKEYPAIR_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*FindKey) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_FINDKEY_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys uint32_t *);
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,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DELETEKEY_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys boolean_t);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*ListCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_LISTCRL_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys char **);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*FindCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_FINDCRL_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys char **,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys int *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*FindCertInCRL) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_FINDCERTINCRL_PARAMS *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*GetErrorString) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys char **);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*GetPrikeyByCert) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_CRYPTOWITHCERT_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_ALG);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*DecryptData) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_OID *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*ExportP12)(
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_EXPORTP12_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys int, KMF_X509_DER_CERT *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys int, KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys char *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*StorePrivateKey)(
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_STOREKEY_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RAW_KEY_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_RETURN (*CreateSymKey) (
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE_T,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_CREATESYMKEY_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_KEY_HANDLE *);
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,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_SETPIN_PARAMS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_CREDENTIAL *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys void (*Finalize) ();
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys} KMF_PLUGIN_FUNCLIST;
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
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 /*
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys * session handle opened by KMF_SelectToken() 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;
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)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_PLUGIN_PATH "/usr/lib/security/sparcv9/"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#elif defined(__sparc)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_PLUGIN_PATH "/usr/lib/security/"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#elif defined(__i386)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_PLUGIN_PATH "/usr/lib/security/"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#elif defined(__amd64)
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#define KMF_PLUGIN_PATH "/usr/lib/security/amd64/"
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif /* !KMF_PLUGIN_PATH */
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_PLUGIN_FUNCLIST *KMF_Plugin_Initialize();
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysSignCert(KMF_HANDLE_T, const KMF_DATA *, KMF_KEY_HANDLE *, KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysVerifyCertWithKey(KMF_HANDLE_T, KMF_DATA *, const KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysVerifyCertWithCert(KMF_HANDLE_T, const KMF_DATA *, const KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysVerifyDataWithCert(KMF_HANDLE_T, KMF_DATA *, KMF_DATA *, const KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysVerifyDataWithKey(KMF_HANDLE_T, KMF_DATA *, KMF_ALGORITHM_INDEX, KMF_DATA *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysEncryptWithCert(KMF_HANDLE_T, KMF_DATA *, KMF_DATA *, KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysDecryptWithCert(KMF_HANDLE_T, KMF_DATA *, KMF_KEY_HANDLE *, KMF_DATA *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysSignCsr(KMF_HANDLE_T, const KMF_DATA *, KMF_KEY_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_X509_ALGORITHM_IDENTIFIER *, KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_BOOL PKCS_ConvertAlgorithmId2PKCSKeyType(
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ALGORITHM_INDEX, CK_KEY_TYPE *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN PKCS_VerifyData(
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ALGORITHM_INDEX,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_X509_SPKI *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *, KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN PKCS_EncryptData(
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_HANDLE *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_ALGORITHM_INDEX,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_X509_SPKI *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_PLUGIN *FindPlugin(KMF_HANDLE_T, KMF_KEYSTORE_TYPE);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_BOOL IsEqualOid(KMF_OID *, KMF_OID *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_OID *X509_AlgIdToAlgorithmOid(KMF_ALGORITHM_INDEX);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_ALGORITHM_INDEX X509_AlgorithmOidToAlgId(KMF_OID *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN GetIDFromSPKI(KMF_X509_SPKI *, KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysCK_RV DigestData(CK_SESSION_HANDLE, KMF_DATA *, KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN KMF_SetAltName(KMF_X509_EXTENSIONS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_OID *, int, KMF_GENERALNAMECHOICES, char *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN GetSequenceContents(char *, size_t, char **, size_t *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_X509_EXTENSION *FindExtn(KMF_X509_EXTENSIONS *, KMF_OID *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN add_an_extension(KMF_X509_EXTENSIONS *exts,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys KMF_X509_EXTENSION *newextn);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN set_integer(KMF_DATA *, void *, int);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysvoid free_keyidlist(KMF_OID *, int);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN copy_data(KMF_DATA *, KMF_DATA *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysvoid Cleanup_PK11_Session(KMF_HANDLE_T handle);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysvoid free_dp_name(KMF_CRL_DIST_POINT *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysvoid free_dp(KMF_CRL_DIST_POINT *);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN set_key_usage_extension(KMF_X509_EXTENSIONS *,
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys int, uint32_t);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysint is_pk11_ready();
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllysKMF_RETURN KMF_SelectToken(KMF_HANDLE_T, char *, int);
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys
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
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
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#ifdef __cplusplus
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys}
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif
99ebb4ca412cb0a19d77a3899a87c055b9c30fa8wyllys#endif /* _KMFAPIP_H */