summaryrefslogtreecommitdiff
path: root/ckcapi-cert.c
diff options
context:
space:
mode:
Diffstat (limited to 'ckcapi-cert.c')
-rw-r--r--ckcapi-cert.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/ckcapi-cert.c b/ckcapi-cert.c
index fb3603a..4fe1d41 100644
--- a/ckcapi-cert.c
+++ b/ckcapi-cert.c
@@ -354,6 +354,25 @@ cert_load_data(CkCapiSession* sess, CkCapiObject* obj, CkCapiObjectData** objdat
return CKR_OK;
}
+static unsigned int
+cert_hash_func(CkCapiObject* obj)
+{
+ CertObject* cobj = (CertObject*)obj;
+ return ckcapi_hash_data(cobj->issuer.pbData, cobj->issuer.cbData) ^
+ ckcapi_hash_data(cobj->serial.pbData, cobj->serial.cbData);
+}
+
+static int
+cert_equal_func(CkCapiObject* a, CkCapiObject* b)
+{
+ CertObject* ca = (CertObject*)a;
+ CertObject* cb = (CertObject*)b;
+ return ca->issuer.cbData == cb->issuer.cbData &&
+ memcmp(ca->issuer.pbData, cb->issuer.pbData, ca->issuer.cbData) == 0 &&
+ ca->serial.cbData == cb->serial.cbData &&
+ memcmp(ca->serial.pbData, cb->serial.pbData, ca->serial.cbData) == 0;
+}
+
static void
cert_object_release(void* data)
{
@@ -364,6 +383,8 @@ cert_object_release(void* data)
static const CkCapiObjectVtable cert_object_vtable = {
cert_load_data,
+ cert_hash_func,
+ cert_equal_func,
cert_object_release,
};
@@ -585,8 +606,6 @@ register_cert_object(CkCapiSession* sess, PCCERT_CONTEXT cert, CkCapiObject** ob
cobj->otype = OBJECT_CERT;
cobj->obj.id = 0;
- cobj->obj.unique_key = UNIQUE_KEY_AT(cobj, otype);
- cobj->obj.unique_len = UNIQUE_KEY_VAR_LEN(cobj, otype, otype, len);
cobj->obj.obj_funcs = &cert_object_vtable;
/* Copy Issuer data in */