[Pcsclite-cvs-commit] r5995 - /trunk/PCSC/src/spy/pcsc-spy.py
rousseau at users.alioth.debian.org
rousseau at users.alioth.debian.org
Tue Oct 4 09:39:02 UTC 2011
Author: rousseau
Date: Tue Oct 4 09:39:02 2011
New Revision: 5995
URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5995
Log:
Parse FEATURE_GET_TLV_PROPERTIES results
Modified:
trunk/PCSC/src/spy/pcsc-spy.py
Modified: trunk/PCSC/src/spy/pcsc-spy.py
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/spy/pcsc-spy.py?rev=5995&op=diff
==============================================================================
--- trunk/PCSC/src/spy/pcsc-spy.py (original)
+++ trunk/PCSC/src/spy/pcsc-spy.py Tue Oct 4 09:39:02 2011
@@ -407,31 +407,12 @@
return [int(x, 16) for x in data.split(" ")]
if dwControlCode == self.CM_IOCTL_GET_FEATURE_REQUEST:
+ print " parsing CM_IOCTL_GET_FEATURE_REQUEST results:"
bRecvLength = int(bRecvLength, 16)
# remove the ASCII part at the end
bRecvBuffer = bRecvBuffer[0:bRecvLength*3-1]
bRecvBuffer = hex2int(bRecvBuffer, bRecvLength)
-
- features = {0x01: "FEATURE_VERIFY_PIN_START",
- 0x02: "FEATURE_VERIFY_PIN_FINISH",
- 0x03: "FEATURE_MODIFY_PIN_START",
- 0x04: "FEATURE_MODIFY_PIN_FINISH",
- 0x05: "FEATURE_GET_KEY_PRESSED",
- 0x06: "FEATURE_VERIFY_PIN_DIRECT",
- 0x07: "FEATURE_MODIFY_PIN_DIRECT",
- 0x08: "FEATURE_MCT_READER_DIRECT",
- 0x09: "FEATURE_MCT_UNIVERSAL",
- 0x0A: "FEATURE_IFD_PIN_PROPERTIES",
- 0x0B: "FEATURE_ABORT",
- 0x0C: "FEATURE_SET_SPE_MESSAGE",
- 0x0D: "FEATURE_VERIFY_PIN_DIRECT_APP_ID",
- 0x0E: "FEATURE_MODIFY_PIN_DIRECT_APP_ID",
- 0x0F: "FEATURE_WRITE_DISPLAY",
- 0x10: "FEATURE_GET_KEY",
- 0x11: "FEATURE_IFD_DISPLAY_PROPERTIES",
- 0x12: "FEATURE_GET_TLV_PROPERTIES",
- 0x13: "FEATURE_CCID_ESC_COMMAND"}
# parse GET_FEATURE_REQUEST results
while bRecvBuffer:
@@ -440,7 +421,8 @@
value = bRecvBuffer[2:2+length]
value_int = value[3] + 256 * (value[2] + 256 * (value[1] + 256 *value[0]))
try:
- self.ControlCodes[value_int] = features[tag]
+ self.ControlCodes[value_int] = self.features[tag]
+ self.__dict__[self.features[tag]] = value_int
except KeyError:
self.ControlCodes[value_int] = "UNKNOWN"
@@ -448,6 +430,42 @@
value_int)
bRecvBuffer = bRecvBuffer[2+length:]
+
+ elif dwControlCode == self.FEATURE_GET_TLV_PROPERTIES:
+ print " parsing FEATURE_GET_TLV_PROPERTIES results:"
+ bRecvLength = int(bRecvLength, 16)
+
+ # remove the ASCII part at the end
+ bRecvBuffer = bRecvBuffer[0:bRecvLength*3-1]
+ bRecvBuffer = hex2int(bRecvBuffer, bRecvLength)
+
+ tlv_properties = {
+ 1: "PCSCv2_PART10_PROPERTY_wLcdLayout",
+ 2: "PCSCv2_PART10_PROPERTY_bEntryValidationCondition",
+ 3: "PCSCv2_PART10_PROPERTY_bTimeOut2",
+ 4: "PCSCv2_PART10_PROPERTY_wLcdMaxCharacters",
+ 5: "PCSCv2_PART10_PROPERTY_wLcdMaxLines",
+ 6: "PCSCv2_PART10_PROPERTY_bMinPINSize",
+ 7: "PCSCv2_PART10_PROPERTY_bMaxPINSize",
+ 8: "PCSCv2_PART10_PROPERTY_sFirmwareID",
+ 9: "PCSCv2_PART10_PROPERTY_bPPDUSupport"}
+
+ # parse GET_TLV_PROPERTIES results
+ while bRecvBuffer:
+ tag = bRecvBuffer[0]
+ length = bRecvBuffer[1]
+ value = bRecvBuffer[2:2 + length]
+
+ try:
+ tag_text = tlv_properties[tag]
+ except KeyError:
+ tag_text = "UNKNOWN"
+
+ print " Tag:", tag_text
+ print " Length: ", length
+ print " Value:", value
+
+ bRecvBuffer = bRecvBuffer[2 + length:]
self._log_rv()
@@ -532,6 +550,26 @@
#import sys
#self.filedesc = sys.stdin
+ self.features = {0x01: "FEATURE_VERIFY_PIN_START",
+ 0x02: "FEATURE_VERIFY_PIN_FINISH",
+ 0x03: "FEATURE_MODIFY_PIN_START",
+ 0x04: "FEATURE_MODIFY_PIN_FINISH",
+ 0x05: "FEATURE_GET_KEY_PRESSED",
+ 0x06: "FEATURE_VERIFY_PIN_DIRECT",
+ 0x07: "FEATURE_MODIFY_PIN_DIRECT",
+ 0x08: "FEATURE_MCT_READER_DIRECT",
+ 0x09: "FEATURE_MCT_UNIVERSAL",
+ 0x0A: "FEATURE_IFD_PIN_PROPERTIES",
+ 0x0B: "FEATURE_ABORT",
+ 0x0C: "FEATURE_SET_SPE_MESSAGE",
+ 0x0D: "FEATURE_VERIFY_PIN_DIRECT_APP_ID",
+ 0x0E: "FEATURE_MODIFY_PIN_DIRECT_APP_ID",
+ 0x0F: "FEATURE_WRITE_DISPLAY",
+ 0x10: "FEATURE_GET_KEY",
+ 0x11: "FEATURE_IFD_DISPLAY_PROPERTIES",
+ 0x12: "FEATURE_GET_TLV_PROPERTIES",
+ 0x13: "FEATURE_CCID_ESC_COMMAND"}
+
def SCARD_CTL_CODE(code):
return 0x42000000 + code
@@ -540,6 +578,9 @@
SCARD_CTL_CODE(1): "IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE",
SCARD_CTL_CODE(3400): "CM_IOCTL_GET_FEATURE_REQUEST"
}
+ # dwControlCode not yet known
+ for key in self.features.keys():
+ self.__dict__[self.features[key]] = -1
def loop(self):
""" loop reading logs """
More information about the Pcsclite-cvs-commit
mailing list