| #!/usr/bin/env python |
| # This is only test code for testing the smartcard communication |
| # by sending a test command and printing the answer of the smartcard. |
| |
| from smartcard.scard import * |
| import smartcard.util |
| |
| SELECT = [0xA0, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00] |
| COMMAND = [0x00, 0x00, 0x00, 0x00] |
| |
| def select(): |
| try: |
| hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER) |
| if hresult != SCARD_S_SUCCESS: |
| raise Exception('Failed to establish context : ' + |
| SCardGetErrorMessage(hresult)) |
| print 'Context established!' |
| |
| try: |
| hresult, readers = SCardListReaders(hcontext, []) |
| if hresult != SCARD_S_SUCCESS: |
| raise Exception('Failed to list readers: ' + |
| SCardGetErrorMessage(hresult)) |
| print 'PCSC Readers:', readers |
| |
| if len(readers) < 1: |
| raise Exception('No smart card readers') |
| |
| reader = readers[0] |
| print "Using reader:", reader |
| |
| try: |
| hresult, hcard, dwActiveProtocol = SCardConnect(hcontext, reader, |
| SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1) |
| if hresult != SCARD_S_SUCCESS: |
| raise Exception('Unable to connect: ' + |
| SCardGetErrorMessage(hresult)) |
| print 'Connected with active protocol', dwActiveProtocol |
| |
| try: |
| hresult, response = SCardTransmit(hcard, dwActiveProtocol, |
| SELECT) |
| if hresult != SCARD_S_SUCCESS: |
| raise Exception('Failed to transmit: ' + |
| SCardGetErrorMessage(hresult)) |
| print 'Select: ' + smartcard.util.toHexString(response, |
| smartcard.util.HEX) |
| hresult, response = SCardTransmit(hcard, dwActiveProtocol, |
| COMMAND) |
| if hresult != SCARD_S_SUCCESS: |
| raise Exception('Failed to transmit: ' + |
| SCardGetErrorMessage(hresult)) |
| print 'Command: ' + smartcard.util.toHexString(response, |
| smartcard.util.HEX) |
| finally: |
| hresult = SCardDisconnect(hcard, SCARD_UNPOWER_CARD) |
| if hresult != SCARD_S_SUCCESS: |
| raise Exception('Failed to disconnect: ' + |
| SCardGetErrorMessage(hresult)) |
| print 'Disconnected' |
| |
| |
| except Exception, message: |
| print "Exception:", message |
| |
| finally: |
| hresult = SCardReleaseContext(hcontext) |
| if hresult != SCARD_S_SUCCESS: |
| raise Exception('Failed to release context: ' + |
| SCardGetErrorMessage(hresult)) |
| print 'Released context.' |
| |
| except Exception, message: |
| print "Exception:", message |