El dt 09 de 05 del 2006 a les 15:23 +0200, en/na Nils Larsch va escriure: > Albert Solana wrote: > > Hi all, > > > > Using the command "pkcs11-tool -O -l" to list all objects on a smart > > card, I have some errors on some public key objects: > > > > warning: PKCS11 function C_GetAttributeValue(MODULUS_BITS) failed: rv = > > CKR_ATTRIBUTE_TYPE_INVALID (0x12) > > > > However, I have realized that there are duplicated public keys objects, > > corresponding to the same public key. This occurs because when > > create_tokens > > is called OpenSC creates a pkcs11 object for any object listed on pkcs#15 > > structure. So, on __pkcs15_create_pubkey_object call, the public keys > > objects > > listed on pkcs15 structure are created. And, on __pkcs15_create_cert_object > > call > > a public key object is created for any certificate listed on pkcs15 > > structure, > > without checking whether a public key object with the same ID already > > exists. > > > > I think that this behaviour is reasonable if there is no public key created > > for its respective certificate, but creates another object for the same > > public key. > > So whenever I used the above command, OpenSC shows errors retrieving info > > on the > > objects created from pkcs15 structure, the first ones. And the info of the > > ones created > > from the respective cert objects is well shown. > > > > I suggest a solution and I attach a patch which I've tested and solved the > > problem: > > > > Whenever a certificate pkcs11 object is being created using > > __pkcs15_create_cert_object, it creates also its public key. I think it > > would be > > better to check if there is already a public key object with the same ID as > > the > > certificate one. If it exists, a function should fill the missing > > information > > from the certificate despite of creating a new object. > > > > Sorry for my heavy and long mail. > > Could you check my patch and apply it on OpenSC code? > > > > Thanks a lot, > > > > > > ------------------------------------------------------------------------ > > > > Index: src/pkcs11/framework-pkcs15.c > > =================================================================== > > --- src/pkcs11/framework-pkcs15.c (revision 2884) > > +++ src/pkcs11/framework-pkcs15.c (working copy) > > @@ -254,6 +254,40 @@ > > return 0; > > } > > > > +static int public_key_created(struct pkcs15_fw_data *fw_data, > > + const unsigned int num_objects, > > + const u8 *id, > > + const size_t size_id, > > + struct pkcs15_any_object **obj2) > > +{ > > + int found = 0; > > + int ii=0; > > + > > + while(ii<num_objects && !found) { > > + > > + if (!fw_data->objects[ii]->p15_object) { > > + ii++; > > + continue; > > + } > > + if ((fw_data->objects[ii]->p15_object->type != SC_PKCS15_TYPE_PUBKEY) > > && > > + (fw_data->objects[ii]->p15_object->type != SC_PKCS15_TYPE_PUBKEY_RSA) && > > + (fw_data->objects[ii]->p15_object->type != SC_PKCS15_TYPE_PUBKEY_DSA)) { > > + ii++; > > + continue; > > + } > > + if (memcmp(fw_data->objects[ii]->p15_object->data, id, size_id) == 0) { > > this is not so nice as this makes some implicit assumptions about > the layout of the sc_pkcs15_*_info types.
I realize that, but i haven't found any other way to implement it. > Otherwise the patch looks ok. So, I deduce that the patch is going to be committed. > > Cheers, > Nils Thanks, -- Albert Solana Berengué [EMAIL PROTECTED] C3PO, S.L. http://www.c3po.es C/Bertran, 113 - 08023 Barcelona Tel. 93 417 99 55 - Fax. 93 253 12 80 _______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel