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.md.
Get the current source code from git
git clone --recursive https://salsa.debian.org/rousseau/CCID.git cd CCID ./bootstrap ./configure make
You will need to install dependencies like autoconf-archive.
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).
- If you need to enter the smart card PIN to reproduce the problem then consider changing your PIN before generating the logs as the PIN value will be included in the logs.
- 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
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