From 94c63a237d77654bab2ea34146b06fd4b0acfc99 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Tue, 9 Dec 2008 03:47:01 +0000 Subject: Use better and faster hashing of objects. --- ckcapi-cert.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'ckcapi-cert.c') 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 */ -- cgit v1.2.3