Lua
Lua
ScMinidriver - Get Smartcard Properties
See more ScMinidriver Examples
Gets information about the smart card currently inserted in the reader (or USB token).Chilkat Lua Downloads
local chilkat = require("chilkat")
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
local scmd = chilkat.ScMinidriver.new()
-- Reader names (smart card readers or USB tokens) can be discovered
-- via PCSC List Readers or PCSC Find Smart Cards
local readerName = "Alcor Micro USB Smart Card Reader 0"
local success = scmd:acquire_context(readerName)
if not success then
print(scmd.last_error_text)
return
end
local json = chilkat.JsonObject.new()
json.emit_compact = false
success = scmd:get_card_properties(json)
if not success then
print(scmd.last_error_text)
return
end
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
local strVal = ""
local bytesAvailable = json:int_of("bytesAvailable")
local containersAvailable = json:int_of("containersAvailable")
local maxKeyContainers = json:int_of("maxKeyContainers")
local capabilitiesFCertificateCompression = json:bool_of("capabilities.fCertificateCompression")
local capabilitiesFKeyGen = json:bool_of("capabilities.fKeyGen")
local keySizesMinimumBitlen = json:int_of("keySizes.minimumBitlen")
local keySizesDefaultBitlen = json:int_of("keySizes.defaultBitlen")
local keySizesMaximumBitlen = json:int_of("keySizes.maximumBitlen")
local keySizesIncrementalBitlen = json:int_of("keySizes.incrementalBitlen")
local readOnly = json:bool_of("readOnly")
local cacheMode = json:string_of("cacheMode")
local supportsWinX509Enrollment = json:bool_of("supportsWinX509Enrollment")
local guid = json:string_of("guid")
local serial = json:string_of("serial")
local pinUserType = json:string_of("pin.user.type")
local pinUserPurpose = json:string_of("pin.user.purpose")
local pinUserCachePolicy = json:string_of("pin.user.cachePolicy")
local pinUserPolicyInfo = json:string_of("pin.user.policyInfo")
local pinUserFlags = json:string_of("pin.user.flags")
local pinUserAcceptPlainTextPin = json:bool_of("pin.user.acceptPlainTextPin")
local pinUserGenerateSessionPin = json:bool_of("pin.user.generateSessionPin")
local pinAdminType = json:string_of("pin.admin.type")
local pinAdminPurpose = json:string_of("pin.admin.purpose")
local pinAdminCachePolicy = json:string_of("pin.admin.cachePolicy")
local pinAdminPolicyInfo = json:string_of("pin.admin.policyInfo")
local pinAdminFlags = json:string_of("pin.admin.flags")
local pinRole3Type = json:string_of("pin.role3.type")
local pinRole3Purpose = json:string_of("pin.role3.purpose")
local pinRole3CachePolicy = json:string_of("pin.role3.cachePolicy")
local pinRole3PolicyInfo = json:string_of("pin.role3.policyInfo")
local pinRole3Flags = json:string_of("pin.role3.flags")
local pinRole3AcceptPlainTextPin = json:bool_of("pin.role3.acceptPlainTextPin")
local pinRole3GenerateSessionPin = json:bool_of("pin.role3.generateSessionPin")
local pinRole4Type = json:string_of("pin.role4.type")
local pinRole4Purpose = json:string_of("pin.role4.purpose")
local pinRole4CachePolicy = json:string_of("pin.role4.cachePolicy")
local pinRole4PolicyInfo = json:string_of("pin.role4.policyInfo")
local pinRole4Flags = json:string_of("pin.role4.flags")
local pinRole4AcceptPlainTextPin = json:bool_of("pin.role4.acceptPlainTextPin")
local pinRole4GenerateSessionPin = json:bool_of("pin.role4.generateSessionPin")
local i = 0
local count_i = json:size_of_array("pins")
while i < count_i do
json.i = i
strVal = json:string_of("pins[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("pin.user.changePermission")
while i < count_i do
json.i = i
strVal = json:string_of("pin.user.changePermission[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("pin.user.unblockPermission")
while i < count_i do
json.i = i
strVal = json:string_of("pin.user.unblockPermission[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("pin.admin.changePermission")
while i < count_i do
json.i = i
strVal = json:string_of("pin.admin.changePermission[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("pin.role3.changePermission")
while i < count_i do
json.i = i
strVal = json:string_of("pin.role3.changePermission[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("pin.role3.unblockPermission")
while i < count_i do
json.i = i
strVal = json:string_of("pin.role3.unblockPermission[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("pin.role4.changePermission")
while i < count_i do
json.i = i
strVal = json:string_of("pin.role4.changePermission[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("importSupport")
while i < count_i do
json.i = i
strVal = json:string_of("importSupport[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("algorithms")
while i < count_i do
json.i = i
strVal = json:string_of("algorithms[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("paddingSchemes")
while i < count_i do
json.i = i
strVal = json:string_of("paddingSchemes[i]")
i = i + 1
end
i = 0
count_i = json:size_of_array("chainingModes")
while i < count_i do
json.i = i
strVal = json:string_of("chainingModes[i]")
i = i + 1
end
-- Delete the context when finished with the card.
success = scmd:delete_context()
if not success then
print(scmd.last_error_text)
end