Thursday, August 30, 2012

New version of pcsc-lite: 1.8.6

I just released a new version of pcsc-lite 1.8.6.

pcsc-lite-1.8.6: Ludovic Rousseau
30 August 2012
  • Fix a problem when only serial drivers are used (no hotplug/USB driver)
  • increase log buffer size from 160 to 2048. Some "long" log lines where truncated.
  • Fix redirection of stdin, stdout and stderr to /dev/null when pcscd is started as a daemon (default)
  • Some other minor improvements and bug corrections

Tuesday, August 28, 2012

Comments on my blog and bug reports

I sometimes get comments on articles of my blog. I can classify them in 3 different categories:
  • spam
  • comments about the article
  • comments about something else


Spams are (manually) rejected.
I do not get many spams.

Comments about the article

I like comments about the article. I accept questions about the article or about a specific point. In general I add an answer immediately (if I know the answer).

Comments about something else

Sometimes I have to moderate comments about something not related to the article.
The application do not allow me to reject the comment and explain why I rejected the comment to the comment author. So I reject the comment and the comment author has no idea of what happened.


For example I got, for the second time, a comment on the Mac OS X Mountain Lion and smart card status article. The comment is:
" Anyone having issues with reading encrypted messages via a CAC within Mountain Lion and Outlook?

I can sign and encrypt, and people can read them, but I cannot decrypt. It is not the card or reader, it works fine on the PC.

It is very strange because if an encrypted email comes in, I briefly can read it in the window pane, but if I revisit the message or double click to open, I get an error and the message is lost forever. Everything worked fine under Lion, only appeared after ML upgrade. "
This comment is not about the article itself and is not a spam.

Problems with Mountain Lion or any other Apple components shall be reported to Apple using, or maybe the Apple CDSA mailing list in this case.

Since I cannot contact the comment author (Mike) and explain why his comment is misplaced I wrote this blog entry.


Just above the comments text array I added a documentation:
Please, do only post comments related to the article above.

For general questions, subscribe to and use the muscle mailing list.

Your comment may be moderated and will not appear until then. No need to repost the same comment.

Maybe the documentation is not visible enough, or not clear enough. Please add your comments :-)


My blog is not a forum.

I do not work at Apple and do not plan to provide Apple support for free.

Thursday, August 9, 2012


PC/SC v2 part 10 standard "Part 10 IFDs with Secure PIN Entry Capabilities" offers a way to get some information from a smart card driver.

I already blogged about this service in

Using the SCardControl(FEATURE_GET_TLV_PROPERTIES, ...) require some code to parse the result TLV buffer.

Library API

The idea of libPCSCv2part10 is to allow application programmers to use a function as simple as give_me_the_value_of_tag_x().

The library provides two functions:
  • PCSCv2Part10_find_TLV_property_by_tag_from_buffer() "low" level
  • PCSCv2Part10_find_TLV_property_by_tag_from_hcard() "high" level

The difference between the two functions is that PCSCv2Part10_find_TLV_property_by_tag_from_hcard() uses a SCARDHANDLE hCard and PCSCv2Part10_find_TLV_property_by_tag_from_buffer() uses a buffer already retrieved using SCardControl(FEATURE_GET_TLV_PROPERTIES, ...)

The API is documented at libPCSCv2part10.

The project is hosted in the contrib/libPCSCv2part10/ directory of the pcsc-lite project.

Sample code

    sample.c: example of use of libPCSCv2part10 helper functions
    Copyright (C) 2012   Ludovic Rousseau

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

 * $Id: sample.c 6416 2012-08-08 09:49:00Z rousseau $

#include <stdio.h>

#ifdef __APPLE__
#include <PCSC/winscard.h>
#include <PCSC/wintypes.h>
#include <winscard.h>
#include <reader.h>

#include "PCSCv2part10.h"

/* PCSC error */
#define PCSC_ERROR_EXIT(rv) \
if (rv != SCARD_S_SUCCESS) \
{ \
 printf("Failed at line %d with %s (0x%lX)\n", __LINE__, pcsc_stringify_error(rv), rv); \
 goto end; \

int main(void)
 LONG rv;
 int value, ret = -1;
 DWORD dwReaders, dwPref;
 char *mszReaders;

 rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);

 rv = SCardListReaders(hContext, NULL, (LPSTR)&mszReaders, &dwReaders);

 /* use first reader */
 printf("Using reaer: %s\n", mszReaders);

 rv = SCardConnect(hContext, mszReaders,
  &hCard, &dwPref);

 /* the interesting part is here */
 ret = PCSCv2Part10_find_TLV_property_by_tag_from_hcard(hCard,
  PCSCv2_PART10_PROPERTY_wIdVendor, &value);
 printf("ret: %d\n", ret);
 printf("value for PCSCv2_PART10_PROPERTY_wIdVendor: 0x%04X\n", value),

 rv = SCardDisconnect(hCard, SCARD_LEAVE_CARD);

 rv = SCardFreeMemory(hContext, mszReaders);

 rv = SCardReleaseContext(hContext);

 return ret;

How to use it

The code is very short. I don't think it is a good idea to make a library with just two functions. My idea is that a project FooBar using the function will just integrate the two files (PCSCv2part10.c and PCSCv2part10.h) into the project FooBar.


The license is GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.


Feel free to use the code, make comments or improvements.

Saturday, August 4, 2012

New version of pcsc-lite: 1.8.5

I just released a new version of pcsc-lite 1.8.5.

pcsc-lite-1.8.5: Ludovic Rousseau
4 August 2012
  • Fix crash when a reader is unplugged while pcscd is in the middle of a PC/SC function
  • SCardBeginTransaction(): fix a bug introduced in version 1.8.4 related to sharing
  • Some other minor improvements and bug corrections

Thursday, August 2, 2012

Mac OS X Mountain Lion and smart card status

The new version of Mac OS X 10.8 called Mountain Lion is now available since July 25th 2012.

Mac OS X Mountain Lion

As I did with the previous major version of OS X Lion I will list changes in Mountain Lion regarding the smart card world.


Same as in Lion.

CCID driver

Same as in Lion.
CCID driver version 1.3.11.

Source code

The source code is provided by Apple from the web site Mac OS X 10.8 Source. The two components are available in:
The source code is not yet available in the subversion repository of the SmartCard Services project.


In Lion 10.7 the versions were 55000 for both SmartCardServices and SmartcardCCID.

So in Mountain Lion the CCID driver has not changed.

The SmartCardServices component (mainly pcsc-lite) has marginally changed. The source code is the same and only build files have been updated:
$ diff -ru SmartCardServices-55000 SmartCardServices-55105|diffstat 
 Info-PCSC.plist                             |    2 
 Makefile-exec.installPhase                  |only
 Makefile.installPhase                       |    3 
 SmartCardServices.xcodeproj/project.pbxproj |  939 +++++-----------------------
 config                                      |only
 5 files changed, 194 insertions(+), 750 deletions(-)


Apple has not updated the smart card components in Mountain Lion. No bug or limitation has been fixed. And no new bug have been introduced.

The CCID driver provided (version 1.3.11) has been released on July 2009, 3 years ago. Since this version 97 readers have been added (72% more).