diff options
Diffstat (limited to 'ckcapi.h')
-rw-r--r-- | ckcapi.h | 140 |
1 files changed, 101 insertions, 39 deletions
@@ -1,3 +1,21 @@ +/* + * Copyright (C) 2007 Nate Nielsen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ #ifndef CKCAPI_H #define CKCAPI_H @@ -70,6 +88,18 @@ struct _CkCapiObjectData const CkCapiObjectDataVtable* data_funcs; }; +/* Match object data against all the given match attributes */ +CK_BBOOL ckcapi_object_data_match (CkCapiObjectData* objdata, + CK_ATTRIBUTE_PTR matches, CK_ULONG count); + +/* Match a single attribute against object data */ +CK_BBOOL ckcapi_object_data_match_attr (CkCapiObjectData* objdata, + CK_ATTRIBUTE_PTR match); + +/* Get a bunch of attributes from object data */ +CK_RV ckcapi_object_data_get_attrs (CkCapiObjectData* objdata, CK_ATTRIBUTE_PTR attrs, + CK_ULONG count); + /* A function to load data for an object */ typedef CK_RV (*CkCapiLoadData)(CkCapiSession* sess, struct _CkCapiObject* obj, CkCapiObjectData** objdata); @@ -97,24 +127,18 @@ struct _CkCapiObject #define DBGOD(objdata, msg) \ ckcapi_debug("O%d: %s", (objdata) ? (objdata)->obj : 0, (msg)) +/* Get the number of the maximum object handle currently in memory */ CK_OBJECT_HANDLE ckcapi_object_get_max_handle (void); +/* Lookup an object for a given object handle */ CkCapiObject* ckcapi_object_lookup (CkCapiSession* sess, CK_OBJECT_HANDLE obj); +/* Register a new object, a handle will be assigned to obj->id */ CK_RV ckcapi_object_register (CkCapiSession* sess, CkCapiObject* obj); +/* Clear all objects. Only done when finalizing */ void ckcapi_object_clear_all (void); - -CK_BBOOL ckcapi_object_data_match (CkCapiObjectData* objdata, - CK_ATTRIBUTE_PTR matches, CK_ULONG count); - -CK_BBOOL ckcapi_object_data_match_attr (CkCapiObjectData* objdata, - CK_ATTRIBUTE_PTR match); - -CK_RV ckcapi_object_data_get_attrs (CkCapiObjectData* objdata, CK_ATTRIBUTE_PTR attrs, - CK_ULONG count); - /* * Each object has a unique key which guarantees that we're * not loading the same objects over and over again. @@ -154,8 +178,10 @@ enum OPERATION_FIND = 1, }; +/* Callback to cancel a current operation */ typedef void (*CkCapiSessionCancel) (struct _CkCapiSession* sess); +/* Represents an open session */ typedef struct _CkCapiSession { CK_ULONG id; /* Unique ID for this session */ @@ -175,35 +201,75 @@ typedef struct _CkCapiSession } CkCapiSession; +/* Debug print something related to a session */ #define DBGS(sess, msg) \ ckcapi_debug("S%d: %s", (sess) ? (sess)->id : 0, (msg)) -CkCapiSession* ckcapi_session_create(void); -void ckcapi_session_destroy(CkCapiSession* sess); -CK_RV ckcapi_session_register(CkCapiSession* sess); -CK_RV ckcapi_session_get_lock_ref(CK_ULONG id, int remove, CkCapiSession **sess); -void ckcapi_session_unref_unlock(CkCapiSession* sess); -void ckcapi_session_close_all(); +/* Create a session */ +CkCapiSession* ckcapi_session_create (void); + +/* Destroy a session */ +void ckcapi_session_destroy (CkCapiSession* sess); + +/* Register a new session */ +CK_RV ckcapi_session_register (CkCapiSession* sess); + +/* Get a session from a handle, and lock it */ +CK_RV ckcapi_session_get_lock_ref (CK_ULONG id, int remove, + CkCapiSession **sess); + +/* Unlock and unreference a session */ +void ckcapi_session_unref_unlock (CkCapiSession* sess); + +/* Close all sessions */ +void ckcapi_session_close_all (void); -CK_RV ckcapi_session_find_init (CkCapiSession* sess, CK_ATTRIBUTE_PTR templ, CK_ULONG count); -CK_RV ckcapi_session_find (CkCapiSession* sess, CK_OBJECT_HANDLE_PTR objects, - CK_ULONG max_object_count, CK_ULONG_PTR object_count); -CK_RV ckcapi_session_find_final (CkCapiSession* sess); -CK_RV ckcapi_session_get_object_data (CkCapiSession* sess, CkCapiObject* obj, - CkCapiObjectData** objdata); -CK_RV ckcapi_session_get_object_data_for (CkCapiSession* sess, CK_OBJECT_HANDLE hand, +/* Start a find operation on a session */ +CK_RV ckcapi_session_find_init (CkCapiSession* sess, + CK_ATTRIBUTE_PTR templ, + CK_ULONG count); + +/* Return results from a find operation */ +CK_RV ckcapi_session_find (CkCapiSession* sess, + CK_OBJECT_HANDLE_PTR objects, + CK_ULONG max_object_count, + CK_ULONG_PTR object_count); + +/* End a find operation */ +CK_RV ckcapi_session_find_final (CkCapiSession* sess); + + + + +/* Get object data for an object */ +CK_RV ckcapi_session_get_object_data (CkCapiSession* sess, + CkCapiObject* obj, CkCapiObjectData** objdata); -void ckcapi_session_take_object_data (CkCapiSession* sess, CkCapiObject* obj, - CkCapiObjectData* objdata); +/* Get object data for an object handle */ +CK_RV ckcapi_session_get_object_data_for (CkCapiSession* sess, + CK_OBJECT_HANDLE hand, + CkCapiObjectData** objdata); -void ckcapi_session_clear_object_data (CkCapiSession* sess, CkCapiObject* obj); +/* Set object data for an object */ +void ckcapi_session_take_object_data (CkCapiSession* sess, + CkCapiObject* obj, + CkCapiObjectData* objdata); -typedef void (*CkCapiEnumObjectData)(CkCapiSession* sess, CkCapiObject* obj, CkCapiObjectData* data, void* arg); +/* Clear object data for an object */ +void ckcapi_session_clear_object_data (CkCapiSession* sess, + CkCapiObject* obj); -void ckcapi_session_enum_object_data (CkCapiSession* sess, CkCapiEnumObjectData enum_func, void* arg); +/* Enumerate object data for all objects */ +typedef void (*CkCapiEnumObjectData) (CkCapiSession* sess, + CkCapiObject* obj, + CkCapiObjectData* data, + void* arg); +void ckcapi_session_enum_object_data (CkCapiSession* sess, + CkCapiEnumObjectData enum_func, + void* arg); @@ -211,24 +277,23 @@ void ckcapi_session_enum_object_data (CkCapiSession* sess, CkCapiEnumObjectData * ckcapi-cert.c */ -CK_RV ckcapi_cert_find (CkCapiSession* sess, CK_OBJECT_CLASS cls, +/* Find certificates matching criteria */ +CK_RV ckcapi_cert_find (CkCapiSession* sess, CK_OBJECT_CLASS cls, CK_ATTRIBUTE_PTR match, CK_ULONG count, CkCapiArray* arr); -CK_RV ckcapi_cert_find_specific (CkCapiSession* sess, CK_OBJECT_CLASS cls, - CK_ATTRIBUTE_PTR issuer, CK_ATTRIBUTE_PTR serial, - CK_OBJECT_HANDLE_PTR obj); /* Called by trust stuff */ -CK_RV -ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr); +CK_RV ckcapi_cert_certificate_get_bytes (PCCERT_CONTEXT cert, + CK_ATTRIBUTE_PTR attr); +PCCERT_CONTEXT ckcapi_cert_object_data_get_certificate (CkCapiObjectData* objdata); -PCCERT_CONTEXT ckcapi_cert_object_data_get_certificate (CkCapiObjectData* objdata); /* ------------------------------------------------------------------- * ckcapi-builtin.c */ +/* Find builtin objects matching criteria */ CK_RV ckcapi_builtin_find (CkCapiSession* sess, CK_OBJECT_CLASS cls, CK_ATTRIBUTE_PTR match, CK_ULONG count, CkCapiArray* arr); @@ -237,14 +302,11 @@ CK_RV ckcapi_builtin_find (CkCapiSession* sess, CK_OBJECT_CLASS cls, * ckcapi-trust.c */ +/* Find trust objects matching criteria */ CK_RV ckcapi_trust_find (CkCapiSession* sess, CK_OBJECT_CLASS cls, CK_ATTRIBUTE_PTR match, CK_ULONG count, CkCapiArray* arr); -CK_RV ckcapi_trust_find_specific (CkCapiSession* sess, CK_OBJECT_CLASS cls, - CK_ATTRIBUTE_PTR issuer, CK_ATTRIBUTE_PTR serial, - CK_OBJECT_HANDLE_PTR obj); - /* ------------------------------------------------------------------ * cryptoki-capi.c * |