CkPython
CkPython
ScMinidriver - Get Smartcard Properties
See more ScMinidriver Examples
Gets information about the smart card currently inserted in the reader (or USB token).Chilkat CkPython Downloads
import sys
import chilkat
success = False
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
scmd = chilkat.CkScMinidriver()
# Reader names (smart card readers or USB tokens) can be discovered
# via PCSC List Readers or PCSC Find Smart Cards
readerName = "Alcor Micro USB Smart Card Reader 0"
success = scmd.AcquireContext(readerName)
if (success == False):
print(scmd.lastErrorText())
sys.exit()
json = chilkat.CkJsonObject()
json.put_EmitCompact(False)
success = scmd.GetCardProperties(json)
if (success == False):
print(scmd.lastErrorText())
sys.exit()
print(json.emit())
# Here is sample output:
# See below for sample code to parse the JSON.
#
# NOTE: Not all smart cards support all properties.
# The GetCardProperties method will return information for all properties supported by the card.
# {
# "bytesAvailable": 74752,
# "containersAvailable": 18,
# "maxKeyContainers": 20,
# "capabilities": {
# "fCertificateCompression": false,
# "fKeyGen": true
# },
# "keySizes": {
# "minimumBitlen": 2048,
# "defaultBitlen": 2048,
# "maximumBitlen": 4096,
# "incrementalBitlen": 1024
# },
# "readOnly": false,
# "cacheMode": "global",
# "supportsWinX509Enrollment": true,
# "guid": "1201803d-03e6-772a-3d80-0112e6032a77",
# "serial": "e6032a773d800112e6032a77",
# "pins": [
# "user",
# "admin",
# "role3",
# "role4"
# ],
# "pin": {
# "user": {
# "type": "regular",
# "purpose": "primaryCard",
# "changePermission": [
# "user"
# ],
# "unblockPermission": [
# "admin"
# ],
# "cachePolicy": "normal",
# "policyInfo": "00000000",
# "flags": "00000000",
# "acceptPlainTextPin": true,
# "generateSessionPin": false
# },
# "admin": {
# "type": "challenge/response",
# "purpose": "administrator",
# "changePermission": [
# "admin"
# ],
# "cachePolicy": "normal",
# "policyInfo": "00000000",
# "flags": "00000000"
# },
# "role3": {
# "type": "regular",
# "purpose": "digitalSignature",
# "changePermission": [
# "role3"
# ],
# "unblockPermission": [
# "role4"
# ],
# "cachePolicy": "alwaysPrompt",
# "policyInfo": "00000000",
# "flags": "00000000",
# "acceptPlainTextPin": true,
# "generateSessionPin": false
# },
# "role4": {
# "type": "regular",
# "purpose": "unblockOnly",
# "changePermission": [
# "role4"
# ],
# "cachePolicy": "normal",
# "policyInfo": "00000000",
# "flags": "00000000",
# "acceptPlainTextPin": true,
# "generateSessionPin": false
# }
# },
# "importSupport": [
# "plainText",
# "rsaKeyest",
# "eccKeyest",
# "symmetric"
# ],
# "algorithms": [
# "AES"
# ],
# "paddingSchemes": [
# "block",
# "pkcs1",
# "pss",
# "oaep"
# ],
# "chainingModes": [
# "ChainingModeCBC"
# ]
# }
# Use this online tool to generate parsing code from sample JSON:
# Generate Parsing Code from JSON
bytesAvailable = json.IntOf("bytesAvailable")
containersAvailable = json.IntOf("containersAvailable")
maxKeyContainers = json.IntOf("maxKeyContainers")
capabilitiesFCertificateCompression = json.BoolOf("capabilities.fCertificateCompression")
capabilitiesFKeyGen = json.BoolOf("capabilities.fKeyGen")
keySizesMinimumBitlen = json.IntOf("keySizes.minimumBitlen")
keySizesDefaultBitlen = json.IntOf("keySizes.defaultBitlen")
keySizesMaximumBitlen = json.IntOf("keySizes.maximumBitlen")
keySizesIncrementalBitlen = json.IntOf("keySizes.incrementalBitlen")
readOnly = json.BoolOf("readOnly")
cacheMode = json.stringOf("cacheMode")
supportsWinX509Enrollment = json.BoolOf("supportsWinX509Enrollment")
guid = json.stringOf("guid")
serial = json.stringOf("serial")
pinUserType = json.stringOf("pin.user.type")
pinUserPurpose = json.stringOf("pin.user.purpose")
pinUserCachePolicy = json.stringOf("pin.user.cachePolicy")
pinUserPolicyInfo = json.stringOf("pin.user.policyInfo")
pinUserFlags = json.stringOf("pin.user.flags")
pinUserAcceptPlainTextPin = json.BoolOf("pin.user.acceptPlainTextPin")
pinUserGenerateSessionPin = json.BoolOf("pin.user.generateSessionPin")
pinAdminType = json.stringOf("pin.admin.type")
pinAdminPurpose = json.stringOf("pin.admin.purpose")
pinAdminCachePolicy = json.stringOf("pin.admin.cachePolicy")
pinAdminPolicyInfo = json.stringOf("pin.admin.policyInfo")
pinAdminFlags = json.stringOf("pin.admin.flags")
pinRole3Type = json.stringOf("pin.role3.type")
pinRole3Purpose = json.stringOf("pin.role3.purpose")
pinRole3CachePolicy = json.stringOf("pin.role3.cachePolicy")
pinRole3PolicyInfo = json.stringOf("pin.role3.policyInfo")
pinRole3Flags = json.stringOf("pin.role3.flags")
pinRole3AcceptPlainTextPin = json.BoolOf("pin.role3.acceptPlainTextPin")
pinRole3GenerateSessionPin = json.BoolOf("pin.role3.generateSessionPin")
pinRole4Type = json.stringOf("pin.role4.type")
pinRole4Purpose = json.stringOf("pin.role4.purpose")
pinRole4CachePolicy = json.stringOf("pin.role4.cachePolicy")
pinRole4PolicyInfo = json.stringOf("pin.role4.policyInfo")
pinRole4Flags = json.stringOf("pin.role4.flags")
pinRole4AcceptPlainTextPin = json.BoolOf("pin.role4.acceptPlainTextPin")
pinRole4GenerateSessionPin = json.BoolOf("pin.role4.generateSessionPin")
i = 0
count_i = json.SizeOfArray("pins")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("pins[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("pin.user.changePermission")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("pin.user.changePermission[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("pin.user.unblockPermission")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("pin.user.unblockPermission[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("pin.admin.changePermission")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("pin.admin.changePermission[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("pin.role3.changePermission")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("pin.role3.changePermission[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("pin.role3.unblockPermission")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("pin.role3.unblockPermission[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("pin.role4.changePermission")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("pin.role4.changePermission[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("importSupport")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("importSupport[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("algorithms")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("algorithms[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("paddingSchemes")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("paddingSchemes[i]")
i = i + 1
i = 0
count_i = json.SizeOfArray("chainingModes")
while i < count_i :
json.put_I(i)
strVal = json.stringOf("chainingModes[i]")
i = i + 1
# Delete the context when finished with the card.
success = scmd.DeleteContext()
if (success == False):
print(scmd.lastErrorText())