summaryrefslogtreecommitdiff
path: root/src/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/object.c')
-rw-r--r--src/object.c48
1 files changed, 46 insertions, 2 deletions
diff --git a/src/object.c b/src/object.c
index 87f89e2..fe4e801 100644
--- a/src/object.c
+++ b/src/object.c
@@ -364,7 +364,6 @@ p11t_object_find(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR attrs,
{
CK_OBJECT_HANDLE_PTR objects;
CK_ATTRIBUTE dummy_attr;
- CK_ULONG count;
assert(p11t_module_funcs);
@@ -387,7 +386,7 @@ p11t_object_find(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR attrs,
return NULL;
}
- if(!count)
+ if(!*n_objects)
{
free(objects);
return NULL;
@@ -396,3 +395,48 @@ p11t_object_find(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR attrs,
return objects;
}
+CK_OBJECT_HANDLE
+p11t_object_find_one(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR attrs,
+ CK_ULONG n_attrs)
+{
+ CK_OBJECT_HANDLE object;
+ CK_ULONG count;
+
+ assert(p11t_module_funcs);
+
+ if((p11t_module_funcs->C_FindObjectsInit)(session, attrs, n_attrs) != CKR_OK)
+ return CK_INVALID;
+
+ if((p11t_module_funcs->C_FindObjects)(session, &object, 1, &count) != CKR_OK)
+ return CK_INVALID;
+
+ if(count != 1)
+ return CK_INVALID;
+
+ return object;
+}
+
+
+int
+p11t_object_get(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object,
+ CK_ATTRIBUTE_PTR attrs, CK_ULONG count)
+{
+ CK_RV rv;
+
+ assert(p11t_module_funcs);
+
+ if(!count)
+ return 1;
+
+ rv = (p11t_module_funcs->C_GetAttributeValue)(session, object, attrs, count);
+ switch(rv)
+ {
+ case CKR_OK:
+ case CKR_BUFFER_TOO_SMALL:
+ case CKR_ATTRIBUTE_TYPE_INVALID:
+ case CKR_ATTRIBUTE_SENSITIVE:
+ return 1;
+ }
+
+ return 0;
+}