[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;