summaryrefslogtreecommitdiff
path: root/ckcapi.h
diff options
context:
space:
mode:
Diffstat (limited to 'ckcapi.h')
-rw-r--r--ckcapi.h113
1 files changed, 69 insertions, 44 deletions
diff --git a/ckcapi.h b/ckcapi.h
index b6b8daf..4ccd1cb 100644
--- a/ckcapi.h
+++ b/ckcapi.h
@@ -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