summaryrefslogtreecommitdiff
path: root/ckcapi.h
diff options
context:
space:
mode:
Diffstat (limited to 'ckcapi.h')
-rw-r--r--ckcapi.h140
1 files changed, 101 insertions, 39 deletions
diff --git a/ckcapi.h b/ckcapi.h
index f166528..ddb9d75 100644
--- a/ckcapi.h
+++ b/ckcapi.h
@@ -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
*