Get released/stable versions
Go in the Download
section. I provide
.tar.bz2 archives ready to be built
tar xzvf ccid-*.tar.bz2 cd ccid-* ./configure make make install
The latest README is at README.
Get the current source code from git
git clone --recursive https://salsa.debian.org/rousseau/CCID.git cd CCID ./bootstrap ./configure make
Main CCID/ICCD features supported
- Exchange levels
- card protocols
- Protocol Parameter Selection (PPS)
- negociation made by the driver if needed
- highest card/reader communication speed selected
- specific mode supported
- multi-slot readers
- composite CCID devices
- PC/SC v2 part 10 features:
- secure PIN verify (FEATURE_VERIFY_PIN_DIRECT)
- modify PIN entry (FEATURE_MODIFY_PIN_DIRECT)
- reader PIN properties (FEATURE_IFD_PIN_PROPERTIES)
- Multifunctional Card Terminal reader direct (FEATURE_MCT_READER_DIRECT)
- retrieve reader properties in TLV form (FEATURE_GET_TLV_PROPERTIES)
- send CCID escape commands (FEATURE_CCID_ESC_COMMAND)
- Data rates list
- Localize LCD display messages (Gemalto GemPC PIN PAD, Covadis Véga-Alpha)
- Extended APDU (for T=1 cards only and if your reader is in TPDU mode or extended APDU mode. For T=0 cards this is managed by the application itself.)
- SCardGetAttrib() attributes
- ICCD versions A and B
- USB selective suspend
- RAM consumption efficiency for embedded systems using
- CCID descriptor statistics
CCID features not yet supported
- Manage suspend/resume (for example in a laptop)
- Reader clock frequency change
Non CCID features that I do not plan to support
- read/write on memory cards
In fact I may implement one of these features if you have a budget.
How to get support
If you have a problem and want to get support from me you shall include the following information:
- CCID driver version
- pcsc-lite version
- the output of the command "
- Operating system or GNU/Linux distribution name and version
- Hardware details: Standard compatible PC, special board, Raspberry Pi, etc.
- Smart card middleware name and version
- Smart card reader manufacturer name and reader model name
- Smart card name
Then you shall generate a complete log (do not truncate it).
- Kill any running
- (re)start pcscd exactly as described bellow:
sudo LIBCCID_ifdLogLevel=0x000F pcscd --foreground --debug --apdu --color | tee log.txt
- Stop pcscd (using Control-C) after the problem occured and
send me the generated
If you experience a crash of pcscd it is useful for me to have a backtrace.
$ gdb pcscd (gdb) set args --foreground --debug --apdu (gdb) run wait for the crash to happen (gdb) backtrace
Then copy/paste the complete output in your bug report.
If you have general questions or bug reports you should use the Pcsclite-muscle mailing list.
First search the mailing list archives. Maybe your probem has already been reported and solved. If you have not found a solution then subscribe to the Pcsclite-muscle mailing list and send your request to firstname.lastname@example.org..
Check reader's compliance to CCID specification
To know if a smart card reader is CCID compliant and should be supported by this driver but is not listed bellow
Just get the source code of this driver and do:
tar xjvf ccid-x.y.z.tar.bz2 cd ccid-x.y.z ./configure make sudo ./src/parse > output.txt
and send me (email@example.com) the generated
If your reader is CCID compliant and you would like to add it to the list of readers I would also need:
- The URL of a web page describing the reader. Typically the web page of the reader description on the manufacturer web site.
- A picture of the reader. In general a picture is already available on the manufacturer web page described above.
All the readers are also included in a big matrix.
You can use an interactive reader selection tool at: Reader selection.
See Reader Selection: find the smart card reader you search for a presentation of the tool.
The main author is Ludovic Rousseau <firstname.lastname@example.org>.
I reused source code from other free software projects whose authors are:
- Carlos Prados for the PPS and ATR parsing code (taken from his
towitoto driver) in
- Olaf Kirch for the T=1 TPDU code (from the OpenCT package) in
openct/directory. I (Ludovic Rousseau) greatly improved this code.
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 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
The complete licence is available at GNU Lesser General Public License, version 2.1
Supported Operating Systems
GNU/Linux using libusb 1.0.x and later
Apple includes my CCID driver (version 1.3.8, released in June 2008) since Leopard 10.5.6. See the mail from Shawn Geddis to have a list of changes.
Snow Leopard (10.6.x) and later
Mac OS X Snow Leopard (10.6) and later are supported without patches. To build the driver you need to extract the archive and do:
./MacOSX/configure make sudo make install
Mac OS X Leopard (10.5) is supported with a simple patch. To build the driver you need to extract the archive and do:
./MacOSX/configure make sudo make install
NOTE: The execution of
./MacOSX/configure will fail if
you have a space character in your current working directory
NOTE: Apple's version of pcsc-lite installed with Leopard has many bugs and problems.
Mac OS X Tiger (10.4) uses an old pcsc-lite with some problems:
- A missing call to
IFDHSetProtocolParameters()so the reader is not configured correctly regarding to the card ATR.
- A wrong API for
SCardControl()so you can't use a pin pad reader or any other feature provided by
- No way to generate a cold reset. Only a warm reset is
possible. Uncomment the line
MacOSX/configureto fake a card movement after a reset to simulate a cold reset. Note that
SCardReconnect()will then fail with
You can use this (now unmaintained) patch.
The driver should work on Solaris.
I can't test is myself so patches are welcome if needed.
You can find a PC/SC-lite package form Oracle.
The driver is available in the freshport.
The driver is available in pkgsrc as security/ccid.
Other operating systems
It may or may not work.
The drivers are also available as packages libccid