From: <lu...@us...> - 2009-06-14 12:59:43
|
Revision: 292 http://pyscard.svn.sourceforge.net/pyscard/?rev=292&view=rev Author: ludov Date: 2009-06-14 12:20:19 +0000 (Sun, 14 Jun 2009) Log Message: ----------- add PC/SC v2 part 10 feature management Added Paths: ----------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Added: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py (rev 0) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2009-06-14 12:20:19 UTC (rev 292) @@ -0,0 +1,143 @@ +"""PCSCPart10: PC/SC Part 10 (pinpad) + +__author__ = "Ludovic Rousseau" + +Copyright 2009 Ludovic Rosseau +Author: Ludovic Rousseau, mailto:lud...@fr... + +This file is part of pyscard. + +pyscard 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. + +pyscard 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 pyscard; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" + +from smartcard.scard import * + +# constants defined in PC/SC v2 Part 10 +CM_IOCTL_GET_FEATURE_REQUEST = SCARD_CTL_CODE(3400) + +FEATURE_VERIFY_PIN_START = 0x01 +FEATURE_VERIFY_PIN_FINISH = 0x02 +FEATURE_MODIFY_PIN_START = 0x03 +FEATURE_MODIFY_PIN_FINISH = 0x04 +FEATURE_GET_KEY_PRESSED = 0x05 +FEATURE_VERIFY_PIN_DIRECT = 0x06 +FEATURE_MODIFY_PIN_DIRECT = 0x07 +FEATURE_MCT_READERDIRECT = 0x08 +FEATURE_MCT_UNIVERSAL = 0x09 +FEATURE_IFD_PIN_PROPERTIES = 0x0A +FEATURE_ABORT = 0x0B +FEATURE_SET_SPE_MESSAGE = 0x0C +FEATURE_VERIFY_PIN_DIRECT_APP_ID = 0x0D +FEATURE_MODIFY_PIN_DIRECT_APP_ID = 0x0E +FEATURE_WRITE_DISPLAY = 0x0F +FEATURE_GET_KEY = 0x10 +FEATURE_IFD_DISPLAY_PROPERTIES = 0x11 + +Features = { +"FEATURE_VERIFY_PIN_START" : FEATURE_VERIFY_PIN_START, +"FEATURE_VERIFY_PIN_FINISH" : FEATURE_VERIFY_PIN_FINISH, +"FEATURE_MODIFY_PIN_START" : FEATURE_MODIFY_PIN_START, +"FEATURE_MODIFY_PIN_FINISH" : FEATURE_MODIFY_PIN_FINISH, +"FEATURE_GET_KEY_PRESSED" : FEATURE_GET_KEY_PRESSED, +"FEATURE_VERIFY_PIN_DIRECT" : FEATURE_VERIFY_PIN_DIRECT, +"FEATURE_MODIFY_PIN_DIRECT" : FEATURE_MODIFY_PIN_DIRECT, +"FEATURE_MCT_READERDIRECT" : FEATURE_MCT_READERDIRECT, +"FEATURE_MCT_UNIVERSAL" : FEATURE_MCT_UNIVERSAL, +"FEATURE_IFD_PIN_PROPERTIES" : FEATURE_IFD_PIN_PROPERTIES, +"FEATURE_ABORT" : FEATURE_ABORT, +"FEATURE_SET_SPE_MESSAGE" : FEATURE_SET_SPE_MESSAGE, +"FEATURE_VERIFY_PIN_DIRECT_APP_ID" : FEATURE_VERIFY_PIN_DIRECT_APP_ID, +"FEATURE_MODIFY_PIN_DIRECT_APP_ID" : FEATURE_MODIFY_PIN_DIRECT_APP_ID, +"FEATURE_WRITE_DISPLAY" : FEATURE_WRITE_DISPLAY, +"FEATURE_GET_KEY" : FEATURE_GET_KEY, +"FEATURE_IFD_DISPLAY_PROPERTIES" : FEATURE_IFD_DISPLAY_PROPERTIES +} + +# we already have: Features['FEATURE_x'] = FEATURE_x +# we will now also have: Features[FEATURE_x] = 'FEATURE_x' +for k in Features.keys(): + Features[Features[k]] = k + +def getFeatureRequest(cardConnection): + """ Get the list of Part10 features supported by the reader. + + cardConnection: CardConnection object + + return: a list of list [[tag1, value1], [tag2, value2]] + """ + response = cardConnection.control(CM_IOCTL_GET_FEATURE_REQUEST, []) + features = [] + while (len(response) > 0): + tag = response[0] + control = (((((response[2]<<8) + response[3])<<8) + response[4])<<8) + response[5] + features.append([Features[tag], control]) + del response[:6] + return features + +def hasFeature(featureList, feature): + """ return the controlCode for a feature or None + + feature: feature to look for + featureList: feature list as returned by getFeatureRequest() + + return: feature value or None + """ + for f in featureList: + if f[0] == feature or Features[f[0]] == feature: + return f[1] + +def getPinProperties(cardConnection, featureList = None, controlCode = None): + """ return the PIN_PROPERTIES structure + + cardConnection: CardConnection object + featureList: feature list as returned by getFeatureRequest() + controlCode: control code for FEATURE_IFD_PIN_PROPERTIES + + return: a dict """ + if controlCode is None: + if featureList is None: + featureList = getFeatureRequest(cardConnection) + controlCode = hasFeature(featureList, FEATURE_IFD_PIN_PROPERTIES) + + if controlCode is None: + return + + response = cardConnection.control(controlCode, []) + d = { + 'raw': response, + 'LcdLayoutX': response[0], + 'LcdLayoutY': response[1], + 'LcdMaxCharacters': response[2]<<8 + response[3], + 'LcdMaxLines': response[4]<<8 + response[5], + 'EntryValidationCondition': response[6], + 'TimeOut2': response[7] + } + + return d + +if __name__ == '__main__': + """Small sample illustrating the use of PCSCPart10.""" + from smartcard.pcsc.PCSCReader import readers + cc = readers()[0].createConnection() + cc.connect() + + #print cc.control( CM_IOCTL_GET_FEATURE_REQUEST ) + features = getFeatureRequest(cc) + print features + + print hasFeature(features, FEATURE_VERIFY_PIN_START) + print hasFeature(features, FEATURE_VERIFY_PIN_DIRECT) + + print getPinProperties(cc) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2009-12-15 09:12:13
|
Revision: 364 http://pyscard.svn.sourceforge.net/pyscard/?rev=364&view=rev Author: ludov Date: 2009-12-15 09:12:05 +0000 (Tue, 15 Dec 2009) Log Message: ----------- rename FEATURE_MCT_READERDIRECT in FEATURE_MCT_READER_DIRECT to be conform with PCSC v2 part 10 ch. 2.3 Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2009-12-06 11:14:15 UTC (rev 363) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2009-12-15 09:12:05 UTC (rev 364) @@ -34,7 +34,7 @@ FEATURE_GET_KEY_PRESSED = 0x05 FEATURE_VERIFY_PIN_DIRECT = 0x06 FEATURE_MODIFY_PIN_DIRECT = 0x07 -FEATURE_MCT_READERDIRECT = 0x08 +FEATURE_MCT_READER_DIRECT = 0x08 FEATURE_MCT_UNIVERSAL = 0x09 FEATURE_IFD_PIN_PROPERTIES = 0x0A FEATURE_ABORT = 0x0B @@ -53,7 +53,7 @@ "FEATURE_GET_KEY_PRESSED" : FEATURE_GET_KEY_PRESSED, "FEATURE_VERIFY_PIN_DIRECT" : FEATURE_VERIFY_PIN_DIRECT, "FEATURE_MODIFY_PIN_DIRECT" : FEATURE_MODIFY_PIN_DIRECT, -"FEATURE_MCT_READERDIRECT" : FEATURE_MCT_READERDIRECT, +"FEATURE_MCT_READER_DIRECT" : FEATURE_MCT_READER_DIRECT, "FEATURE_MCT_UNIVERSAL" : FEATURE_MCT_UNIVERSAL, "FEATURE_IFD_PIN_PROPERTIES" : FEATURE_IFD_PIN_PROPERTIES, "FEATURE_ABORT" : FEATURE_ABORT, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-07 12:55:59
|
Revision: 401 http://pyscard.svn.sourceforge.net/pyscard/?rev=401&view=rev Author: ludov Date: 2010-05-07 12:55:52 +0000 (Fri, 07 May 2010) Log Message: ----------- getFeatureRequest(): do not fail if a unkown tag is reported by the PCSC driver Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-04-29 14:59:27 UTC (rev 400) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 12:55:52 UTC (rev 401) @@ -82,7 +82,11 @@ while (len(response) > 0): tag = response[0] control = (((((response[2]<<8) + response[3])<<8) + response[4])<<8) + response[5] - features.append([Features[tag], control]) + print tag, control + try: + features.append([Features[tag], control]) + except KeyError: + pass del response[:6] return features This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-07 12:57:45
|
Revision: 402 http://pyscard.svn.sourceforge.net/pyscard/?rev=402&view=rev Author: ludov Date: 2010-05-07 12:57:39 +0000 (Fri, 07 May 2010) Log Message: ----------- getFeatureRequest(): remove debug output Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 12:55:52 UTC (rev 401) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 12:57:39 UTC (rev 402) @@ -82,7 +82,6 @@ while (len(response) > 0): tag = response[0] control = (((((response[2]<<8) + response[3])<<8) + response[4])<<8) + response[5] - print tag, control try: features.append([Features[tag], control]) except KeyError: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-07 13:00:20
|
Revision: 403 http://pyscard.svn.sourceforge.net/pyscard/?rev=403&view=rev Author: ludov Date: 2010-05-07 13:00:13 +0000 (Fri, 07 May 2010) Log Message: ----------- getPinProperties(): update to the PIN_PROPERTIES structure from PCSC v2 part 10 Revision 2.02.06, April 2009 Fields wLcdMaxCharacters and wLcdMaxLines have been removed Revision Links: -------------- http://pyscard.svn.sourceforge.net/pyscard/?rev=2&view=rev Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 12:57:39 UTC (rev 402) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 13:00:13 UTC (rev 403) @@ -122,10 +122,8 @@ 'raw': response, 'LcdLayoutX': response[0], 'LcdLayoutY': response[1], - 'LcdMaxCharacters': response[2]<<8 + response[3], - 'LcdMaxLines': response[4]<<8 + response[5], - 'EntryValidationCondition': response[6], - 'TimeOut2': response[7] + 'EntryValidationCondition': response[2], + 'TimeOut2': response[3] } return d This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-07 13:02:24
|
Revision: 404 http://pyscard.svn.sourceforge.net/pyscard/?rev=404&view=rev Author: ludov Date: 2010-05-07 13:02:18 +0000 (Fri, 07 May 2010) Log Message: ----------- Add FEATURE_GET_TLV_PROPERTIES and FEATURE_CCID_ESC_COMMAND Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 13:00:13 UTC (rev 403) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 13:02:18 UTC (rev 404) @@ -44,6 +44,8 @@ FEATURE_WRITE_DISPLAY = 0x0F FEATURE_GET_KEY = 0x10 FEATURE_IFD_DISPLAY_PROPERTIES = 0x11 +FEATURE_GET_TLV_PROPERTIES = 0x12 +FEATURE_CCID_ESC_COMMAND = 0x13 Features = { "FEATURE_VERIFY_PIN_START" : FEATURE_VERIFY_PIN_START, @@ -62,7 +64,9 @@ "FEATURE_MODIFY_PIN_DIRECT_APP_ID" : FEATURE_MODIFY_PIN_DIRECT_APP_ID, "FEATURE_WRITE_DISPLAY" : FEATURE_WRITE_DISPLAY, "FEATURE_GET_KEY" : FEATURE_GET_KEY, -"FEATURE_IFD_DISPLAY_PROPERTIES" : FEATURE_IFD_DISPLAY_PROPERTIES +"FEATURE_IFD_DISPLAY_PROPERTIES" : FEATURE_IFD_DISPLAY_PROPERTIES, +"FEATURE_GET_TLV_PROPERTIES" : FEATURE_GET_TLV_PROPERTIES, +"FEATURE_CCID_ESC_COMMAND" : FEATURE_CCID_ESC_COMMAND } # we already have: Features['FEATURE_x'] = FEATURE_x This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-07 13:32:06
|
Revision: 405 http://pyscard.svn.sourceforge.net/pyscard/?rev=405&view=rev Author: ludov Date: 2010-05-07 13:31:59 +0000 (Fri, 07 May 2010) Log Message: ----------- Add support of FEATURE_GET_TLV_PROPERTIES from PCSC v2 part 10 revision 2.02.08 April 2010 Revision Links: -------------- http://pyscard.svn.sourceforge.net/pyscard/?rev=2&view=rev Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 13:02:18 UTC (rev 404) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-07 13:31:59 UTC (rev 405) @@ -69,11 +69,36 @@ "FEATURE_CCID_ESC_COMMAND" : FEATURE_CCID_ESC_COMMAND } +# properties returned by FEATURE_GET_TLV_PROPERTIES +PCSCv2_PART10_PROPERTY_wLcdLayout = 1 +PCSCv2_PART10_PROPERTY_bEntryValidationCondition = 2 +PCSCv2_PART10_PROPERTY_bTimeOut2 = 3 +PCSCv2_PART10_PROPERTY_wLcdMaxCharacters = 4 +PCSCv2_PART10_PROPERTY_wLcdMaxLines = 5 +PCSCv2_PART10_PROPERTY_bMinPINSize = 6 +PCSCv2_PART10_PROPERTY_bMaxPINSize = 7 +PCSCv2_PART10_PROPERTY_sFirmwareID = 8 + +Properties = { +"PCSCv2_PART10_PROPERTY_wLcdLayout" : PCSCv2_PART10_PROPERTY_wLcdLayout, +"PCSCv2_PART10_PROPERTY_bEntryValidationCondition": PCSCv2_PART10_PROPERTY_bEntryValidationCondition, +"PCSCv2_PART10_PROPERTY_bTimeOut2": PCSCv2_PART10_PROPERTY_bTimeOut2, +"PCSCv2_PART10_PROPERTY_wLcdMaxCharacters": PCSCv2_PART10_PROPERTY_wLcdMaxCharacters, +"PCSCv2_PART10_PROPERTY_wLcdMaxLines": PCSCv2_PART10_PROPERTY_wLcdMaxLines, +"PCSCv2_PART10_PROPERTY_bMinPINSize": PCSCv2_PART10_PROPERTY_bMinPINSize, +"PCSCv2_PART10_PROPERTY_bMaxPINSize": PCSCv2_PART10_PROPERTY_bMaxPINSize, +"PCSCv2_PART10_PROPERTY_sFirmwareID": PCSCv2_PART10_PROPERTY_sFirmwareID +} + # we already have: Features['FEATURE_x'] = FEATURE_x # we will now also have: Features[FEATURE_x] = 'FEATURE_x' for k in Features.keys(): Features[Features[k]] = k +for k in Properties.keys(): + Properties[Properties[k]] = k + + def getFeatureRequest(cardConnection): """ Get the list of Part10 features supported by the reader. @@ -85,7 +110,7 @@ features = [] while (len(response) > 0): tag = response[0] - control = (((((response[2]<<8) + response[3])<<8) + response[4])<<8) + response[5] + control = (((((response[2] << 8) + response[3]) << 8) + response[4]) << 8) + response[5] try: features.append([Features[tag], control]) except KeyError: @@ -93,6 +118,7 @@ del response[:6] return features + def hasFeature(featureList, feature): """ return the controlCode for a feature or None @@ -105,6 +131,7 @@ if f[0] == feature or Features[f[0]] == feature: return f[1] + def getPinProperties(cardConnection, featureList=None, controlCode=None): """ return the PIN_PROPERTIES structure @@ -132,6 +159,56 @@ return d + +def getTlvProperties(cardConnection, featureList=None, controlCode=None): + """ return the GET_TLV_PROPERTIES structure + + cardConnection: CardConnection object + featureList: feature list as returned by getFeatureRequest() + controlCode: control code for FEATURE_GET_TLV_PROPERTIES + + return: a dict """ + if controlCode is None: + if featureList is None: + featureList = getFeatureRequest(cardConnection) + controlCode = hasFeature(featureList, FEATURE_GET_TLV_PROPERTIES) + + if controlCode is None: + return + + response = cardConnection.control(controlCode, []) + d = { + 'raw': response, + } + + # create a new list to consume it + tmp = list(response) + while tmp: + tag = tmp[0] + len = tmp[1] + data = tmp[2:2 + len] + + if PCSCv2_PART10_PROPERTY_sFirmwareID == tag: + # convert to a string + data = "".join([chr(c) for c in data]) + # we now suppose the value is an integer + elif 1 == len: + # byte + data = data[0] + elif 2 == len: + # 16 bits value + data = data[1] * 256 + data[0] + elif 4 == len: + # 32 bits value + data = ((data[3] * 256 + data[2]) * 256 + data[1]) * 256 + data[0] + + # store the value in the dictionnary + d[Properties[tag]] = data + + del tmp[0:2 + len] + + return d + if __name__ == '__main__': """Small sample illustrating the use of PCSCPart10.""" from smartcard.pcsc.PCSCReader import readers @@ -145,4 +222,12 @@ print hasFeature(features, FEATURE_VERIFY_PIN_START) print hasFeature(features, FEATURE_VERIFY_PIN_DIRECT) - print getPinProperties(cc) + properties = getPinProperties(cc) + print "\nPinProperties:" + for k in properties.keys(): + print " %s: %s" % (k, properties[k]) + + print "\nTlvProperties:" + properties = getTlvProperties(cc) + for k in properties.keys(): + print " %s: %s" % (k, properties[k]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-15 15:03:29
|
Revision: 413 http://pyscard.svn.sourceforge.net/pyscard/?rev=413&view=rev Author: ludov Date: 2010-05-15 15:03:22 +0000 (Sat, 15 May 2010) Log Message: ----------- connect() in SCARD_SHARE_DIRECT mode so that it works even with no smart card inserted. We are talking to the reader/driver, not the card. Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-15 12:55:59 UTC (rev 412) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-15 15:03:22 UTC (rev 413) @@ -213,7 +213,7 @@ """Small sample illustrating the use of PCSCPart10.""" from smartcard.pcsc.PCSCReader import readers cc = readers()[0].createConnection() - cc.connect() + cc.connect(mode=SCARD_SHARE_DIRECT) #print cc.control( CM_IOCTL_GET_FEATURE_REQUEST ) features = getFeatureRequest(cc) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-18 15:06:22
|
Revision: 414 http://pyscard.svn.sourceforge.net/pyscard/?rev=414&view=rev Author: ludov Date: 2010-05-18 15:06:16 +0000 (Tue, 18 May 2010) Log Message: ----------- getPinProperties() & getTlvProperties(): return a valid dictionnary even if the feature is not supported Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-15 15:03:22 UTC (rev 413) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-18 15:06:16 UTC (rev 414) @@ -146,7 +146,7 @@ controlCode = hasFeature(featureList, FEATURE_IFD_PIN_PROPERTIES) if controlCode is None: - return + return { 'raw': [] } response = cardConnection.control(controlCode, []) d = { @@ -174,7 +174,7 @@ controlCode = hasFeature(featureList, FEATURE_GET_TLV_PROPERTIES) if controlCode is None: - return + return { 'raw': [] } response = cardConnection.control(controlCode, []) d = { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-18 15:07:28
|
Revision: 415 http://pyscard.svn.sourceforge.net/pyscard/?rev=415&view=rev Author: ludov Date: 2010-05-18 15:07:22 +0000 (Tue, 18 May 2010) Log Message: ----------- Update copyright date Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-18 15:06:16 UTC (rev 414) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-18 15:07:22 UTC (rev 415) @@ -2,7 +2,7 @@ __author__ = "Ludovic Rousseau" -Copyright 2009 Ludovic Rosseau +Copyright 2009-2010 Ludovic Rosseau Author: Ludovic Rousseau, mailto:lud...@fr... This file is part of pyscard. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-05-20 07:25:12
|
Revision: 416 http://pyscard.svn.sourceforge.net/pyscard/?rev=416&view=rev Author: ludov Date: 2010-05-20 07:25:05 +0000 (Thu, 20 May 2010) Log Message: ----------- add PCSCv2_PART10_PROPERTY_bPPDUSupport Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-18 15:07:22 UTC (rev 415) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-05-20 07:25:05 UTC (rev 416) @@ -78,6 +78,7 @@ PCSCv2_PART10_PROPERTY_bMinPINSize = 6 PCSCv2_PART10_PROPERTY_bMaxPINSize = 7 PCSCv2_PART10_PROPERTY_sFirmwareID = 8 +PCSCv2_PART10_PROPERTY_bPPDUSupport = 9 Properties = { "PCSCv2_PART10_PROPERTY_wLcdLayout" : PCSCv2_PART10_PROPERTY_wLcdLayout, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2010-06-06 15:14:41
|
Revision: 428 http://pyscard.svn.sourceforge.net/pyscard/?rev=428&view=rev Author: ludov Date: 2010-06-06 15:14:35 +0000 (Sun, 06 Jun 2010) Log Message: ----------- make pep8 happy Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-06-06 15:10:44 UTC (rev 427) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2010-06-06 15:14:35 UTC (rev 428) @@ -48,26 +48,25 @@ FEATURE_CCID_ESC_COMMAND = 0x13 Features = { -"FEATURE_VERIFY_PIN_START" : FEATURE_VERIFY_PIN_START, -"FEATURE_VERIFY_PIN_FINISH" : FEATURE_VERIFY_PIN_FINISH, -"FEATURE_MODIFY_PIN_START" : FEATURE_MODIFY_PIN_START, -"FEATURE_MODIFY_PIN_FINISH" : FEATURE_MODIFY_PIN_FINISH, -"FEATURE_GET_KEY_PRESSED" : FEATURE_GET_KEY_PRESSED, -"FEATURE_VERIFY_PIN_DIRECT" : FEATURE_VERIFY_PIN_DIRECT, -"FEATURE_MODIFY_PIN_DIRECT" : FEATURE_MODIFY_PIN_DIRECT, -"FEATURE_MCT_READER_DIRECT" : FEATURE_MCT_READER_DIRECT, -"FEATURE_MCT_UNIVERSAL" : FEATURE_MCT_UNIVERSAL, -"FEATURE_IFD_PIN_PROPERTIES" : FEATURE_IFD_PIN_PROPERTIES, -"FEATURE_ABORT" : FEATURE_ABORT, -"FEATURE_SET_SPE_MESSAGE" : FEATURE_SET_SPE_MESSAGE, -"FEATURE_VERIFY_PIN_DIRECT_APP_ID" : FEATURE_VERIFY_PIN_DIRECT_APP_ID, -"FEATURE_MODIFY_PIN_DIRECT_APP_ID" : FEATURE_MODIFY_PIN_DIRECT_APP_ID, -"FEATURE_WRITE_DISPLAY" : FEATURE_WRITE_DISPLAY, -"FEATURE_GET_KEY" : FEATURE_GET_KEY, -"FEATURE_IFD_DISPLAY_PROPERTIES" : FEATURE_IFD_DISPLAY_PROPERTIES, -"FEATURE_GET_TLV_PROPERTIES" : FEATURE_GET_TLV_PROPERTIES, -"FEATURE_CCID_ESC_COMMAND" : FEATURE_CCID_ESC_COMMAND -} +"FEATURE_VERIFY_PIN_START": FEATURE_VERIFY_PIN_START, +"FEATURE_VERIFY_PIN_FINISH": FEATURE_VERIFY_PIN_FINISH, +"FEATURE_MODIFY_PIN_START": FEATURE_MODIFY_PIN_START, +"FEATURE_MODIFY_PIN_FINISH": FEATURE_MODIFY_PIN_FINISH, +"FEATURE_GET_KEY_PRESSED": FEATURE_GET_KEY_PRESSED, +"FEATURE_VERIFY_PIN_DIRECT": FEATURE_VERIFY_PIN_DIRECT, +"FEATURE_MODIFY_PIN_DIRECT": FEATURE_MODIFY_PIN_DIRECT, +"FEATURE_MCT_READER_DIRECT": FEATURE_MCT_READER_DIRECT, +"FEATURE_MCT_UNIVERSAL": FEATURE_MCT_UNIVERSAL, +"FEATURE_IFD_PIN_PROPERTIES": FEATURE_IFD_PIN_PROPERTIES, +"FEATURE_ABORT": FEATURE_ABORT, +"FEATURE_SET_SPE_MESSAGE": FEATURE_SET_SPE_MESSAGE, +"FEATURE_VERIFY_PIN_DIRECT_APP_ID": FEATURE_VERIFY_PIN_DIRECT_APP_ID, +"FEATURE_MODIFY_PIN_DIRECT_APP_ID": FEATURE_MODIFY_PIN_DIRECT_APP_ID, +"FEATURE_WRITE_DISPLAY": FEATURE_WRITE_DISPLAY, +"FEATURE_GET_KEY": FEATURE_GET_KEY, +"FEATURE_IFD_DISPLAY_PROPERTIES": FEATURE_IFD_DISPLAY_PROPERTIES, +"FEATURE_GET_TLV_PROPERTIES": FEATURE_GET_TLV_PROPERTIES, +"FEATURE_CCID_ESC_COMMAND": FEATURE_CCID_ESC_COMMAND} # properties returned by FEATURE_GET_TLV_PROPERTIES PCSCv2_PART10_PROPERTY_wLcdLayout = 1 @@ -81,15 +80,14 @@ PCSCv2_PART10_PROPERTY_bPPDUSupport = 9 Properties = { -"PCSCv2_PART10_PROPERTY_wLcdLayout" : PCSCv2_PART10_PROPERTY_wLcdLayout, +"PCSCv2_PART10_PROPERTY_wLcdLayout": PCSCv2_PART10_PROPERTY_wLcdLayout, "PCSCv2_PART10_PROPERTY_bEntryValidationCondition": PCSCv2_PART10_PROPERTY_bEntryValidationCondition, "PCSCv2_PART10_PROPERTY_bTimeOut2": PCSCv2_PART10_PROPERTY_bTimeOut2, "PCSCv2_PART10_PROPERTY_wLcdMaxCharacters": PCSCv2_PART10_PROPERTY_wLcdMaxCharacters, "PCSCv2_PART10_PROPERTY_wLcdMaxLines": PCSCv2_PART10_PROPERTY_wLcdMaxLines, "PCSCv2_PART10_PROPERTY_bMinPINSize": PCSCv2_PART10_PROPERTY_bMinPINSize, "PCSCv2_PART10_PROPERTY_bMaxPINSize": PCSCv2_PART10_PROPERTY_bMaxPINSize, -"PCSCv2_PART10_PROPERTY_sFirmwareID": PCSCv2_PART10_PROPERTY_sFirmwareID -} +"PCSCv2_PART10_PROPERTY_sFirmwareID": PCSCv2_PART10_PROPERTY_sFirmwareID} # we already have: Features['FEATURE_x'] = FEATURE_x # we will now also have: Features[FEATURE_x] = 'FEATURE_x' @@ -147,7 +145,7 @@ controlCode = hasFeature(featureList, FEATURE_IFD_PIN_PROPERTIES) if controlCode is None: - return { 'raw': [] } + return {'raw': []} response = cardConnection.control(controlCode, []) d = { @@ -155,8 +153,7 @@ 'LcdLayoutX': response[0], 'LcdLayoutY': response[1], 'EntryValidationCondition': response[2], - 'TimeOut2': response[3] - } + 'TimeOut2': response[3]} return d @@ -175,7 +172,7 @@ controlCode = hasFeature(featureList, FEATURE_GET_TLV_PROPERTIES) if controlCode is None: - return { 'raw': [] } + return {'raw': []} response = cardConnection.control(controlCode, []) d = { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2011-10-12 13:33:37
|
Revision: 543 http://pyscard.svn.sourceforge.net/pyscard/?rev=543&view=rev Author: ludov Date: 2011-10-12 13:33:28 +0000 (Wed, 12 Oct 2011) Log Message: ----------- getTlvProperties(): do not fail if a property tag is not yet known The property name will just be UNKNOWN in that case. If more than one property is unknown then a collision on UNKNOWN will occur and information will be lost. Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2011-09-03 21:35:27 UTC (rev 542) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2011-10-12 13:33:28 UTC (rev 543) @@ -204,7 +204,10 @@ data = ((data[3] * 256 + data[2]) * 256 + data[1]) * 256 + data[0] # store the value in the dictionnary - d[Properties[tag]] = data + try: + d[Properties[tag]] = data + except KeyError: + d["UNKNOWN"] = data del tmp[0:2 + len] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2011-10-12 13:35:02
|
Revision: 544 http://pyscard.svn.sourceforge.net/pyscard/?rev=544&view=rev Author: ludov Date: 2011-10-12 13:34:56 +0000 (Wed, 12 Oct 2011) Log Message: ----------- Add PCSCv2_PART10_PROPERTY_bPPDUSupport Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2011-10-12 13:33:28 UTC (rev 543) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2011-10-12 13:34:56 UTC (rev 544) @@ -87,7 +87,8 @@ "PCSCv2_PART10_PROPERTY_wLcdMaxLines": PCSCv2_PART10_PROPERTY_wLcdMaxLines, "PCSCv2_PART10_PROPERTY_bMinPINSize": PCSCv2_PART10_PROPERTY_bMinPINSize, "PCSCv2_PART10_PROPERTY_bMaxPINSize": PCSCv2_PART10_PROPERTY_bMaxPINSize, -"PCSCv2_PART10_PROPERTY_sFirmwareID": PCSCv2_PART10_PROPERTY_sFirmwareID} +"PCSCv2_PART10_PROPERTY_sFirmwareID": PCSCv2_PART10_PROPERTY_sFirmwareID, +"PCSCv2_PART10_PROPERTY_bPPDUSupport": PCSCv2_PART10_PROPERTY_bPPDUSupport} # we already have: Features['FEATURE_x'] = FEATURE_x # we will now also have: Features[FEATURE_x] = 'FEATURE_x' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2012-03-23 10:00:55
|
Revision: 590 http://pyscard.svn.sourceforge.net/pyscard/?rev=590&view=rev Author: ludov Date: 2012-03-23 10:00:44 +0000 (Fri, 23 Mar 2012) Log Message: ----------- Add 3 new PCSCv2_PART10_PROPERTY_* PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize PCSCv2_PART10_PROPERTY_wIdVendor PCSCv2_PART10_PROPERTY_wIdProduct They are new in PC/SC v2 part 10 version 2.02.09 Modified Paths: -------------- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py Modified: trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py =================================================================== --- trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2012-01-28 15:05:52 UTC (rev 589) +++ trunk/pyscard/src/smartcard/pcsc/PCSCPart10.py 2012-03-23 10:00:44 UTC (rev 590) @@ -78,6 +78,9 @@ PCSCv2_PART10_PROPERTY_bMaxPINSize = 7 PCSCv2_PART10_PROPERTY_sFirmwareID = 8 PCSCv2_PART10_PROPERTY_bPPDUSupport = 9 +PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize = 10 +PCSCv2_PART10_PROPERTY_wIdVendor = 11 +PCSCv2_PART10_PROPERTY_wIdProduct = 12 Properties = { "PCSCv2_PART10_PROPERTY_wLcdLayout": PCSCv2_PART10_PROPERTY_wLcdLayout, @@ -90,7 +93,10 @@ "PCSCv2_PART10_PROPERTY_bMinPINSize": PCSCv2_PART10_PROPERTY_bMinPINSize, "PCSCv2_PART10_PROPERTY_bMaxPINSize": PCSCv2_PART10_PROPERTY_bMaxPINSize, "PCSCv2_PART10_PROPERTY_sFirmwareID": PCSCv2_PART10_PROPERTY_sFirmwareID, -"PCSCv2_PART10_PROPERTY_bPPDUSupport": PCSCv2_PART10_PROPERTY_bPPDUSupport} +"PCSCv2_PART10_PROPERTY_bPPDUSupport": PCSCv2_PART10_PROPERTY_bPPDUSupport, +"PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize": PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize, +"PCSCv2_PART10_PROPERTY_wIdVendor": PCSCv2_PART10_PROPERTY_wIdVendor, +"PCSCv2_PART10_PROPERTY_wIdProduct": PCSCv2_PART10_PROPERTY_wIdProduct} # we already have: Features['FEATURE_x'] = FEATURE_x # we will now also have: Features[FEATURE_x] = 'FEATURE_x' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |