LudovicRousseau / pyscard

pyscard smartcard library for python
http://pyscard.sourceforge.net/
GNU Lesser General Public License v2.1
377 stars 108 forks source link

Transmit speed #144

Closed LostOctopus closed 1 year ago

LostOctopus commented 1 year ago

Your system information

Please describe your issue in as much detail as possible:

The transmit command speed differs even if the script is the same. I run the same script but one time on two, the speed is two times slower. After a quick investigation I observe the behavior described below. Using a profiling tool it seems that it comes from SCardTransmit, I guess this correspond to the PCSC driver or maybe the connection with the interface maybe. The script works each time, but it takes twice longer.

Steps for reproducing this issue:

  1. Insert a card in the reader
  2. Run the script, check the speed denoted Speed1
  3. Re-run the same script, the speed is different denoted Speed2
  4. Re-run the same script, the speed go back to Speed1
  5. Re-run the same script, the speed switch to Speed2

Remark the speed is always Speed1 just after inserting the card in the reader. If I remove and insert back the card I stay on Speed1 in all cases.

Code

from smartcard.System import readers
from tqdm import tqdm

if __name__ == '__main__':
    # Init reader
    r = readers()
    print(r)
    connection = r[0].createConnection()
    connection.connect()

    # start run using iteration parameter
    nr_commands = 100
    for i in tqdm(range(nr_commands), desc="Progress"):
        my_cmd = "88A000000B11223344556677880A0B0C08"
        data, sw1, sw2 = connection.transmit(list(bytes.fromhex(my_cmd )))
LudovicRousseau commented 1 year ago

I think the "problem" comes from the reader and/or driver. pyscard has no mechanism to slow down a .transmit().

You can try to write a C program (instead of Python) just to be sure.

You can contact the smart card reader manufacturer.

LostOctopus commented 1 year ago

I changed the reader and effectively this comes from here. Thank you Ludovic. Now I have to find a fast reader.