summaryrefslogtreecommitdiff
path: root/p11-capi-object.h
diff options
context:
space:
mode:
Diffstat (limited to 'p11-capi-object.h')
-rw-r--r--p11-capi-object.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/p11-capi-object.h b/p11-capi-object.h
new file mode 100644
index 0000000..cd08ae9
--- /dev/null
+++ b/p11-capi-object.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2007 Stef Walter
+ *
+ * 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 P11C_OBJECT_H
+#define P11C_OBJECT_H
+
+#include "p11-capi.h"
+
+/* Debug print something about an object */
+#define DBGO(obj, msg) \
+ p11c_debug("O%d: %s", (obj) ? (obj)->id : 0, (msg))
+
+/* A function to load data for an object */
+typedef CK_RV (*P11cLoadData)(P11cSession* sess, struct _P11cObject* obj,
+ P11cObjectData** objdata);
+
+/* Produce a hash code for an object */
+typedef CK_RV (*P11cHashObject)(struct _P11cObject* obj);
+
+/* Produce a hash code for an object */
+typedef CK_RV (*P11cEqualObject)(struct _P11cObject* one, struct _P11cObject* two);
+
+/* A function to free some data */
+typedef void (*P11cRelease)(void* data);
+
+/* Object functions */
+typedef struct _P11cObjectVtable
+{
+ P11cLoadData load_data;
+ P11cHashObject hash_object;
+ P11cEqualObject equal_object;
+ P11cRelease release;
+}
+P11cObjectVtable;
+
+/* Represents a object we've seen */
+struct _P11cObject
+{
+ CK_OBJECT_HANDLE id;
+ CK_SLOT_ID slot;
+ CK_SESSION_HANDLE session;
+ const P11cObjectVtable* obj_funcs;
+};
+
+/* A function to get an attribute from ObjectData */
+typedef CK_RV (*P11cGetAttribute)(P11cObjectData* objdata, CK_ATTRIBUTE_PTR attr);
+
+/* Object data functions */
+typedef struct _P11cObjectDataVtable
+{
+ P11cGetAttribute get_bool;
+ P11cGetAttribute get_ulong;
+ P11cGetAttribute get_bytes;
+ P11cRelease release;
+}
+P11cObjectDataVtable;
+
+/*
+ * Base class for object data. Different types of
+ * objects extend this with more detailed data
+ */
+struct _P11cObjectData
+{
+ CK_OBJECT_HANDLE object;
+ const P11cObjectDataVtable* data_funcs;
+};
+
+/* Match object data against all the given match attributes */
+CK_BBOO p11c_object_data_match (P11cObjectData* objdata,
+ CK_ATTRIBUTE_PTR matches, CK_ULONG count);
+
+/* Match a single attribute against object data */
+CK_BBOOL p11c_object_data_match_attr (P11cObjectData* objdata,
+ CK_ATTRIBUTE_PTR match);
+
+/* Get a bunch of attributes from object data */
+CK_RV p11c_object_data_get_attrs (P11cObjectData* objdata, CK_ATTRIBUTE_PTR attrs,
+ CK_ULONG count);
+
+/* Debug print something about an object data */
+#define DBGOD(objdata, msg) \
+ p11c_debug("O%d: %s", (objdata) ? (objdata)->obj : 0, (msg))
+
+#endif /* P11C_OBJECT_H */