[Pcsclite-cvs-commit] CVS PKCS11/src
CVS User corcoran-guest
ludovic.rousseau@free.fr
Thu, 17 Mar 2005 20:55:14 -0700
Update of /cvsroot/muscleapps/PKCS11/src
In directory haydn:/tmp/cvs-serv9003
Modified Files:
p11x_object.c
Log Message:
Fixes an endian issue when creating multiple keys/certs on big endian machines.
Also fixes the creation of generic data objects
--- /cvsroot/muscleapps/PKCS11/src/p11x_object.c 2004/11/28 15:02:52 1.44
+++ /cvsroot/muscleapps/PKCS11/src/p11x_object.c 2005/03/18 03:55:13 1.45
@@ -1,6 +1,6 @@
/******************************************************************************
**
-** $Id: p11x_object.c,v 1.44 2004/11/28 15:02:52 rousseau Exp $
+** $Id: p11x_object.c,v 1.45 2005/03/18 03:55:13 corcoran-guest Exp $
**
** Package: PKCS-11
** Author : Chris Osgood <oznet@mac.com>
@@ -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;