diff options
Diffstat (limited to 'ckcapi.h')
-rw-r--r-- | ckcapi.h | 113 |
1 files changed, 69 insertions, 44 deletions
@@ -48,14 +48,74 @@ #include "ckcapi-util.h" +struct _CkCapiSlot; struct _CkCapiObject; struct _CkCapiObjectData; struct _CkCapiSession; +typedef struct _CkCapiSlot CkCapiSlot; typedef struct _CkCapiObject CkCapiObject; typedef struct _CkCapiObjectData CkCapiObjectData; typedef struct _CkCapiSession CkCapiSession; +/* ------------------------------------------------------------------ + * ckcapi-token.c + */ + +/* Debug print something about an object */ +#define DBGO(obj, msg) \ + ckcapi_debug("O%d: %s", (obj) ? (obj)->id : 0, (msg)) + +/* A function to load data for an object */ +typedef CK_RV (*CkCapiLoadData)(CkCapiSession* sess, struct _CkCapiObject* obj, + CkCapiObjectData** objdata); + +/* A function to free some data */ +typedef void (*CkCapiRelease)(void* data); + +/* Object functions */ +typedef struct _CkCapiObjectVtable +{ + CkCapiLoadData load_data; + CkCapiRelease release; +} +CkCapiObjectVtable; + +/* Represents a object we've seen */ +struct _CkCapiObject +{ + CK_OBJECT_HANDLE id; + CK_SLOT_ID slot; + CK_SESSION_HANDLE session; + const CkCapiObjectVtable* obj_funcs; + void* unique_key; + size_t unique_len; +}; + +/* Register a new object, a handle will be assigned to obj->id */ +CK_RV ckcapi_token_register_object (CK_SLOT_ID slot, CkCapiObject* obj); + +/* Lookup an object for a given object handle */ +CkCapiObject* ckcapi_token_lookup_object (CK_SLOT_ID slot, CK_OBJECT_HANDLE obj); + +/* Clear all objects for all tokens. Only done when finalizing */ +void ckcapi_token_cleanup_all (void); + +/* Get the number of the maximum object handle currently in memory */ +CK_OBJECT_HANDLE ckcapi_token_get_max_handle (void); + +unsigned int ckcapi_token_get_count (void); + +CK_BBOOL ckcapi_token_is_valid (CK_SLOT_ID slot); + +const char* ckcapi_token_get_display_name (CK_SLOT_ID slot); + +const char* ckcapi_token_get_store_name (CK_SLOT_ID slot); + +#define CKCAPI_SLOT_CA 0x00000001 +#define CKCAPI_SLOT_TRUSTED 0x00000002 + +CK_ULONG ckcapi_token_get_flags (CK_SLOT_ID slot); /* ------------------------------------------------------------------ * ckcapi-object.c @@ -64,9 +124,6 @@ typedef struct _CkCapiSession CkCapiSession; /* A function to get an attribute from ObjectData */ typedef CK_RV (*CkCapiGetAttribute)(CkCapiObjectData* objdata, CK_ATTRIBUTE_PTR attr); -/* A function to free some data */ -typedef void (*CkCapiRelease)(void* data); - /* Object data functions */ typedef struct _CkCapiObjectDataVtable { @@ -100,45 +157,10 @@ CK_BBOOL ckcapi_object_data_match_attr (CkCapiObjectData* objdata, 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); - -/* Object functions */ -typedef struct _CkCapiObjectVtable -{ - CkCapiLoadData load_data; - CkCapiRelease release; -} -CkCapiObjectVtable; - -/* Represents a object we've seen */ -struct _CkCapiObject -{ - CK_OBJECT_HANDLE id; - const CkCapiObjectVtable* obj_funcs; - void* unique_key; - size_t unique_len; -}; - -/* Debug print something about an object */ -#define DBGO(obj, msg) \ - ckcapi_debug("O%d: %s", (obj) ? (obj)->id : 0, (msg)) +/* Debug print something about an object data */ #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); - /* * Each object has a unique key which guarantees that we're * not loading the same objects over and over again. @@ -184,9 +206,12 @@ typedef void (*CkCapiSessionCancel) (struct _CkCapiSession* sess); /* Represents an open session */ typedef struct _CkCapiSession { - CK_ULONG id; /* Unique ID for this session */ + CK_SESSION_HANDLE id; /* Unique ID for this session */ + CK_SLOT_ID slot; int in_call; /* Whether this session is use in PKCS#11 function */ + HCERTSTORE store; /* Handle to an open certificate store */ + int operation_type; /* Whether an operation is happening or not */ void* operation_data; /* Data for this operation */ CkCapiSessionCancel operation_cancel; /* Callback to cancel operation when necessary */ @@ -206,7 +231,7 @@ CkCapiSession; ckcapi_debug("S%d: %s", (sess) ? (sess)->id : 0, (msg)) /* Create a session */ -CkCapiSession* ckcapi_session_create (void); +CK_RV ckcapi_session_create (CK_SLOT_ID slot, CkCapiSession** ret); /* Destroy a session */ void ckcapi_session_destroy (CkCapiSession* sess); @@ -221,8 +246,8 @@ CK_RV ckcapi_session_get_lock_ref (CK_ULONG id, int remove, /* Unlock and unreference a session */ void ckcapi_session_unref_unlock (CkCapiSession* sess); -/* Close all sessions */ -void ckcapi_session_close_all (void); +/* Close all sessions on a certain slot/token */ +CK_RV ckcapi_session_close_all (CK_SLOT_ID slot); @@ -271,7 +296,7 @@ void ckcapi_session_enum_object_data (CkCapiSession* sess, CkCapiEnumObjectData enum_func, void* arg); - +void ckcapi_session_cleanup_all (void); /* ------------------------------------------------------------------- * ckcapi-cert.c |