Thanks Viktor, I found the defect at the function pgp_get_blob() in card-openpgp.c. There are lines:
if (child->id == id) { (void) pgp_read_blob(card, child); *ret = child; return SC_SUCCESS; The problem is either: 1. The child blob does not exist, but there still exists its ID. 2. The result of pgp_read_blob(card, child) is not checked. This function is called by file_select and because it returns SUCCESS, it makes file_select SUCCESS although the blob does not exist. I think fixing 1 is better. What do you think? (Or the ID is pre-defined?) I'm new (and this driver was not written by me), so I'm grateful to receive your guidance. On Fri 04 May 2012 08:18:58 PM ICT, Viktor Tarasov wrote: > Hello Nguyễn, > > > On Fri, May 4, 2012 at 12:04 PM, Nguyễn Hồng Quân <quanngu...@mbm.vn > <mailto:quanngu...@mbm.vn>> wrote: > > The case in this log is that the card is not initialised. It contains > no key. That is the reason why > the blob read failed, the file length is zero, the read binary > returned > zero and final, a key with zero length modulus. > > I think what behavior for this case is conventional. When the card > contains no key, should OpenSC: > - return error > - see it normal and notify: "No key" > - see it normal and notify: Valid key with zero attributes (modulus > length if pubkey). > > > It's not going about the key files > but about the openpgp specific select_file() method. > > Without longly looking into specifications, let us postulate -- valid > 'selectable' EF should have length more then zero. > With this rule, your select_file(EF) procedure should not return > SUCCESS if it cannot get valid FCP and file length. > > By the way, > what are the 'type' and 'ef_structure' of the sc_file data returned by > this 'select' ? > > To resume, > as for me it should be case 'return error'. -- Regards, Quân _______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel