Hi,

The following patch fixes a problem in PKCS11 if you wanted to have multiple keys/certs on big endian machines ......
Some calling applications have the CKO_CERTIFICATE as: 0x10000000 instead of the 0x00000001. This also provides
the fix for CKO_DATA.



--- p11x_objectold.c Mon Mar 14 11:32:07 2005 +++ p11x_object.c Mon Mar 14 11:30:26 2005 @@ -1942,6 +1942,7 @@ P11_Object *object_l; P11_Attrib *attrib; CK_BYTE tag, last; + CK_BYTE classRevCheck[sizeof(CK_ULONG)];

if (!(object->msc_obj = (MSCObjectInfo *)calloc(1, sizeof(MSCObjectInfo))))
rv = CKR_HOST_MEMORY;
@@ -1957,10 +1958,16 @@
object_l->msc_obj &&
!CKR_ERROR(object_GetAttrib(CKA_CLASS, object_l, &attrib)))
{
- if (*((CK_ULONG *)attrib->attrib.pValue) == CKO_CERTIFICATE)
+ memcpy(classRevCheck, attrib->attrib.pValue, sizeof(CK_ULONG));
+ util_byterev(classRevCheck, sizeof(CK_ULONG));
+
+ if ((*((CK_ULONG *)attrib->attrib.pValue) == CKO_CERTIFICATE) ||
+ (*((CK_ULONG *)classRevCheck) == CKO_CERTIFICATE))
{
tag = object_l->msc_obj->objectID[0];
- last = object_l->msc_obj->objectID[1];
+ // Really need to find highest...
+ if (last < object_l->msc_obj->objectID[1])
+ last = object_l->msc_obj->objectID[1];
}
}


@@ -2229,6 +2236,7 @@
     P11_Object *object_l;
     P11_Attrib *attrib;
     CK_BYTE tag, last;
+    CK_BYTE classRevCheck[sizeof(CK_ULONG)];

if (!(object->msc_obj = (MSCObjectInfo *)calloc(1, sizeof(MSCObjectInfo))))
rv = CKR_HOST_MEMORY;
@@ -2244,11 +2252,18 @@
object_l->msc_obj &&
!CKR_ERROR(object_GetAttrib(CKA_CLASS, object_l, &attrib)))
{
- if (*((CK_ULONG *)attrib->attrib.pValue) == CKO_CERTIFICATE)
- {
+ memcpy(classRevCheck, attrib->attrib.pValue, sizeof(CK_ULONG));
+ util_byterev(classRevCheck, sizeof(CK_ULONG));
+
+ if ((*((CK_ULONG *)attrib->attrib.pValue) == CKO_DATA) ||
+ (*((CK_ULONG *)classRevCheck) == CKO_DATA))
+ {
+
tag = object_l->msc_obj->objectID[0];
- last = object_l->msc_obj->objectID[1];
- }
+ // Really need to find highest...
+ if (last < object_l->msc_obj->objectID[1])
+ last = object_l->msc_obj->objectID[1];
+ }
}


             object_l = object_l->next;







------------------------------------------------------------------------ ------------
David Corcoran [EMAIL PROTECTED]
Identity Alliance http://www.identityalliance.com


Smart Cards, Biometrics, Training, Identity Management
------------------------------------------------------------------------ -------------


_______________________________________________
Muscle mailing list
[email protected]
http://lists.drizzle.com/mailman/listinfo/muscle

Reply via email to