[Pcsclite-muscle] ScardControl under Linux?
Ludovic Rousseau
ludovic.rousseau at gmail.com
Fri Oct 27 10:59:58 UTC 2017
Hello François,
2017-10-27 12:03 GMT+02:00 Francois Grieu <fgrieu at gmail.com>:
> I am trying to issue a ScardControl to a Smart Card reader. The code works
> under Windows (Identiv driver 4.65), but fails with 0x80100016
> (SCARD_E_NOT_TRANSACTED) under Linux Centos 6, pcscd 1.5.2
>
> Am I missing something obvious?
>
> If that matters: the reader is a Teo by Xiring/Ingenico SCR35xx
> (USB\VID_04E6&PID_5410) recognizable by having a green-only led, when the
> Omnikey variant (USB\VID_076B&PID_A022) has a led that briefly goes from
> green to red on card insertion. The ScardControl is intended to adjust the
> clock frequency to 8 MHz (after ATR and PPS negociation). It fails, and CLK
> remains as the default (I guess 4.8 MHz).
>
> The code goes:
>
> // SCM Microsystems Inc. SCR35xx (USB\VID_04E6&PID_5410) control code to
> change Clk
> //
> // To be issued only on this reader, after ATR and PPS negotiation, and
> after
> // deep considerations on the risks.
> //
> // Second parameter controls the clock frequency, according to f =
> 48/(48-n) MHz
> // n : 36 37 38 39 4 41 42 43 44
> // f : 4 4.364 4.8 5.333 6 6.857 8 9.6 12 MHz
> //
> // Many causes conspire to make use of this call risky:
> //
> // * For n>36 and absent a declaration in the ATR, f is larger than the
> minimum
> // for cards (5 MHz during ATR, 4 MHz after) specified by ISO/IEC
> 7816-3).
> // However:
> // - In my practice, the hardware of integrated circuits used for Smart
> Cards
> // manufactured after 2005 (resp. 1995) is explicitly specified to at
> least
> // 8 MHz (resp. 5 MHz), and commonly 10 MHz.
> // - Usually, their software also works to that frequency;
> // - Commonly, it implements the turnaround delay specified by EMV when
> the
> // direction of communication on I/O changes;
> // - When that later condition applies at least, n = 42 works reliably,
> // and I have yet to see n = 43 fail.
> // - A card's TA1 (if present) states a value of f that the card
> promises
> // if usable; for example, TA1=B7h is a promises that the card accepts
> // f = 10 MHz. If it then accepts a PPS to
> // - a card can advertise
> //
> // * Propagation delays and capacitance conspire to deform clock.
> //
> // * For n odd and n>40 (perhaps n=39), the duty cycles is out of
> // ISO/IEC 7816-3 specs ( 40% to 60% ); however, in practice, cards are
> // quite tolerant on that if neither the maximum frequency nor minimum
> low
> // and high time are violated.
> //
> // * There is no insurance that when the clock switches, there is no glitch
> // violating said minimums.
> //
> // * ISO/IEC 7816-3 specs is ambiguous about if a card with TA1=00h or no
> TA1
> // must accept Clk about 4 MHz beyond the ATR; however, it is safe to
> assume
> // that any card made after 1995 does.
> //
> // * The values to use for the SCR35xx are undocumented AFAIK; the control
> code
> // is documented for another SCM reader, search CCID_ESC_CLK_FREQUENCY,
> or
> // http://www.epsys.no/downloads/pdf/RM_MAXX_lite.pdf
> //
> const uint8_t rControlCode[2] = { 0x1F, 42 }; // n = 42, f = 48/(48-n)
> = 8 MHz
> uint8_t vBuf[4]; // placeholder for possible result (ignored)
> vResult = SCardControl (
> gReaderTable[Nb].gCardHandle,
> SCARD_CTL_CODE( 0xDAC ),
> rControlCode,
> sizeof(rControlCode),
> vBuf,
> sizeof(vBuf),
> &dwState
> );
My CCID driver does not know this SCARD_CTL_CODE( 0xDAC ) code.
Maybe you can use a Xiring or Omnikey (proprietary) driver with support of
this control code.
Bye
--
Dr. Ludovic Rousseau
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pcsclite-muscle/attachments/20171027/d5800ff6/attachment-0001.html>
More information about the Pcsclite-muscle
mailing list