I have been doing some more testing. The current cardmod code is assuming the PCSC card handles are set at the CardAcquireContext and not changed. The cardmod then initializes OpenSC, and and connects to the card, and calls sc_pkcs15_bind, and reads objects off the card.
But if the card is removed and a new card inserted, the BaseCSP may establish a second context, then uses the first context again but pass in new handles! Cardmod does not update its cached information. This is the situation where the user inserted the wrong card, and then inserted a different card. Other CSPs that use OpenSC pkcs11 , don't try and pass in the provided handles but let reader-pcsc find the readers and cards using reader-pcsc.c using new PCSC handles. If there is only one reader this can work. But if there are more then one reader, some additional code is need in the CSP to get the reader name from the BaseCSP handles, and pass in the reader name to OpenSC so the same reader is used. So what is the better way to do this? Use the PCSC handles passed from the BaseCSP, or get the reader name, and get pkcs11 to use this reader? I hope to test this week changes to have cardmod detect the change in handles, and do the right thing. On 1/28/2011 4:24 PM, Douglas E. Engert wrote: > > Other CSPs have been able to use the OpenSC opensc-pkcs11.dll > which uses the standard reader-pcsc.c code. This would imply that > they let reader-pcsc.c get its own handles to the card, and don't > use the one provided by the caller of the CSP. > > So why does cardmod require so many modifications to reader-pcsc.c? And to answer some of my own questions... I guess so that the handles are not lost. But this ads a lot of extra code to reader-pcsc.c > > The modifications also turn off: detect_card_presents, lock unlock, > release, wait_for_event and reset. I would expect some of these to > be critical to any CSP or mini-driver? Some of these functions like card removal must be being done by the BaseCSP. Locking and reset may not be. > > Why does the cardmod reader-pcsc.c need to load the constant > winscard.dll, when the normal pcsc code loads the DEFAULT_PCSC_PROVIDER > that is defined in the Configure/Makefiles as winscard.dll? > I think more of the reader-pcsc.c code be shared. -- Douglas E. Engert <deeng...@anl.gov> Argonne National Laboratory 9700 South Cass Avenue Argonne, Illinois 60439 (630) 252-5444 _______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel