|
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.
|