Saturday, February 15, 2020

I love Free Software

I love Free Software

All the software projects I develop on my free time are Free Software. I also use a LOT of Free Software projects for many different things.

I created this blog just to talk about my activities in Free Software and document what I think is interesting to you.

Sunday, February 2, 2020

User eXperience fixes for "Smart card ATR parsing"

Smart card ATR parsing

My web site/service "Smart card ATR parsing" is used to parse smart card ATR. You can read the previous article "Parsing an ATR: new web site URL" to get some background history.

If you have an ATR I do not already have in my database you can submit it with a description of the corresponding smart card.


I sometimes receive strange ATR to be added the list. For example I just received these 2 ATRs:
What is strange with these 2 ATRs is that:
  1. I already have a shorter version in my list
  2. they have 4 extra bytes at the end
  3. these 4 extra bytes "3B 02 14 50" look like another ATR
At first I thought of a corrupted ATR or a bogus reader or driver that mixes 2 ATRs.
But then I realised that the value "3B 02 14 50" is the default value I use for the ATR input field. So if you copy & paste a new ATR value without removing the default value then the default value is appended to your ATR.


The solution is now obvious. The problem is with my web site.
The value "3B 02 14 50" is now a placeholder= and not a value=. You can copy & paste a new ATR in the input field and the "3B 02 14 50" will disappear.


I was aware of this problem. I used to first select the default value "3B 02 14 50" to replace it with the real ATR. I thought every body would do the same as me. I was wrong and the User eXperience was bad.

The web site should now be more useful to my users and also easier to use.
Do not hesitate to complain if you find a bug or want to suggest a UX improvement.

Friday, January 31, 2020

ATR statistics: TB4 - Global after T=15 in TDi–1

Article from the series "ATR statistics".

TB4 - Global after T=15 in TDi–1

For T=15 protocol TBi the coding is defined in the document ETSI TS 102 221 V10.0.0 (2011-12) chapter "6.3.3 Global Interface byte".

Table 6.7: Coding of the first TBi (i > 2) after T = 15 of the ATR

00000000No additional global interface parameters supported
1--1----Low Impedance drivers and protocol available on the I/O line available (see clause 7.2.1)
11------Inter-Chip USB UICC-Terminal interface supported as defined in TS 102 60
1-1-----UICC-CLF interface supported as defined in TS 102 613
1---1---Secure Channel supported as defined in TS 102 484
1---11--Secured APDU - Platform to Platform required as defined in TS 102 484
NOTE: Any other value is RFU.

207099.90 %
0x8320.10 %

Only 2 cards have a TB4 in the ATR. They are:
The 2 cards use the same value for TB4: 0x83 that is RFU.

GitHub Sponsors

GitHub Sponsors

GitHub now proposes a way to fund the Free Software projects you use. From their presentation page:
A new way to contribute on GitHub
Funding developers and organizations through GitHub Sponsors is one more way to contribute to open source projects you appreciate. Help projects get the resources they need, and recognize contributors working behind the scenes to make open source better for everyone.
With Sponsors, any GitHub user can sponsor any open source developer or organization in the program.
I am now part of the Sponsors project. You can sponsor my Free Software projects on github.
You will find a Sponsor button in each project page. For example:

I am really new to this program so I have no idea how it will work for me and my Free Software projects.
I configured two options: 1 $ per month and 10 $ per month. Maybe I should configure more options. Just tell me.

Other funding systems

I already tried other ways to receive some money.


In 2010 I tried Flattr. See "How to help my projects?" but, as I explained in "My Flattr experience" 4 years later, all the money went to Flattr itself as "tax".
It was not a positive experience.


In 2014 I created a bitcoin account. See "How to help my projects? Send me bitcoins!". After 2 years (in 2016) I made a status in "Bitcoins received for this blog: 2 years later".

Since the bitcoin blockchain is public you can see all the transactions I received so far. In 5 years I received 0.12837149 BTC (around 1000 €) for a total of 10 donations.
That is ~200 € per year or ~15 € per month. That is enough to pay for the VPS I use to host the services.

Maybe I should make more advertising about the possibility to send me bitcoin.


I have no idea how the GitHub (owned by Microsoft) Sponsors program will evolve. I propose to make a status in 2 or 3 years to see how it goes.

Update: 1 Feb 2020

You can access my Sponsor page at

I added new options 2$, 4$ and 8$ per month in addition to the 1$ and 10$ per month to give you more flexibility. Maybe I should have used a Fibonacci suite instead? 🙂

Monday, January 6, 2020

New generator for the CCID readers pages

Since Python 2.x is no more maintained from 1st January 2020 I had to move the script to generate some CCID pages to Python 3.

These pages are the famous ones available from

Technology update

The previous Python script used templayer. templayer is no more maintained since 2009 and only works with Python 2.
I now use Jinja2.

Request for comments

If you see a problem or want to propose a change to these web pages just email me or the pcsclite-muscle mailing list. It is the good time to make suggestions.
It can be about the information provided on the pages or the graphical design of the pages (you may have noted that I am not a website designer).

Saturday, January 4, 2020

New version of pcsc-tools: 1.5.5

I just released a new version of pcsc-tools, a suite of tools for PC/SC.


1.5.5 - 4 January 2020, Ludovic ROUSSEAU
  • 353 new ATRs
  • scriptor: add -u option to make stdout unbuffered

Friday, January 3, 2020

New version of pcsc-lite: 1.8.26

I just released a new version of pcsc-lite 1.8.26.
pcsc-lite is a Free Software implementation of the PC/SC (or WinSCard) API for Unix systems.


1.8.26: Ludovic Rousseau
3 January 2020
  • Use poll() instead of select() to allow file descriptor higher than FD_SETSIZE
  • Enable reader filtering by default
  • pcsc-spy:
    • Do not read output buffer after error
    • Adjust code to handle autoallocated buffers
    • fix year-2038 issue by using long instead of int
  • Android: fix compilation
  • if client/server protocol mismatch:
    • log an explicit message
    • SCardEstablishContext() returns SCARD_E_SERVICE_STOPPED
  • polkit: log the error message if polkit_authority_get_sync() fails
  • Exit with EXIT_SUCCESS on shutdown to please systemd
  • Doxygen: fix minor issues in the documentation
  • Add --disable-documentation option
  • Fix a minor memory leak


The major change is the use of reader filtering by default. No need to rebuild pcsc-lite using --enable-filter any more.
The feature was introduced in 2015 and is documented at "Remove and/or customize PC/SC reader names".

This feature is requested in packages by some users.

To avoid that each GNU/Linux distribution changes the packaging configuration to enable the feature I decided to enable the feature by default in the upstream project.

This change should not have any bad side effect. Only root can modify the configuration file /etc/default/pcscd or the systemd file /etc/systemd/system/pcscd.service.d/override.conf.

For systemd use: sudo systemctl edit pcscd to add something like:

You can get the previous behaviour by using
./configure --disable-filter