Sample code for 30+ languages & platforms
AutoIt

ScMinidriver - Get Smartcard Properties

See more ScMinidriver Examples

Gets information about the smart card currently inserted in the reader (or USB token).

Chilkat AutoIt Downloads

AutoIt
Local $bSuccess = False

;  This example requires the Chilkat API to have been previously unlocked.
;  See Global Unlock Sample for sample code.

$oScmd = ObjCreate("Chilkat.ScMinidriver")

;  Reader names (smart card readers or USB tokens) can be discovered
;  via PCSC List Readers or PCSC Find Smart Cards
Local $sReaderName = "Alcor Micro USB Smart Card Reader 0"
$bSuccess = $oScmd.AcquireContext($sReaderName)
If ($bSuccess = False) Then
    ConsoleWrite($oScmd.LastErrorText & @CRLF)
    Exit
EndIf

$oJson = ObjCreate("Chilkat.JsonObject")
$oJson.EmitCompact = False

$bSuccess = $oScmd.GetCardProperties($oJson)
If ($bSuccess = False) Then
    ConsoleWrite($oScmd.LastErrorText & @CRLF)
    Exit
EndIf

ConsoleWrite($oJson.Emit() & @CRLF)

;  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 $iBytesAvailable = $oJson.IntOf("bytesAvailable")
Local $iContainersAvailable = $oJson.IntOf("containersAvailable")
Local $iMaxKeyContainers = $oJson.IntOf("maxKeyContainers")
Local $bCapabilitiesFCertificateCompression = $oJson.BoolOf("capabilities.fCertificateCompression")
Local $bCapabilitiesFKeyGen = $oJson.BoolOf("capabilities.fKeyGen")
Local $iKeySizesMinimumBitlen = $oJson.IntOf("keySizes.minimumBitlen")
Local $iKeySizesDefaultBitlen = $oJson.IntOf("keySizes.defaultBitlen")
Local $iKeySizesMaximumBitlen = $oJson.IntOf("keySizes.maximumBitlen")
Local $iKeySizesIncrementalBitlen = $oJson.IntOf("keySizes.incrementalBitlen")
Local $bReadOnly = $oJson.BoolOf("readOnly")
Local $sCacheMode = $oJson.StringOf("cacheMode")
Local $bSupportsWinX509Enrollment = $oJson.BoolOf("supportsWinX509Enrollment")
Local $sGuid = $oJson.StringOf("guid")
Local $serial = $oJson.StringOf("serial")
Local $sPinUserType = $oJson.StringOf("pin.user.type")
Local $sPinUserPurpose = $oJson.StringOf("pin.user.purpose")
Local $sPinUserCachePolicy = $oJson.StringOf("pin.user.cachePolicy")
Local $sPinUserPolicyInfo = $oJson.StringOf("pin.user.policyInfo")
Local $sPinUserFlags = $oJson.StringOf("pin.user.flags")
Local $bPinUserAcceptPlainTextPin = $oJson.BoolOf("pin.user.acceptPlainTextPin")
Local $bPinUserGenerateSessionPin = $oJson.BoolOf("pin.user.generateSessionPin")
Local $sPinAdminType = $oJson.StringOf("pin.admin.type")
Local $sPinAdminPurpose = $oJson.StringOf("pin.admin.purpose")
Local $sPinAdminCachePolicy = $oJson.StringOf("pin.admin.cachePolicy")
Local $sPinAdminPolicyInfo = $oJson.StringOf("pin.admin.policyInfo")
Local $sPinAdminFlags = $oJson.StringOf("pin.admin.flags")
Local $sPinRole3Type = $oJson.StringOf("pin.role3.type")
Local $sPinRole3Purpose = $oJson.StringOf("pin.role3.purpose")
Local $sPinRole3CachePolicy = $oJson.StringOf("pin.role3.cachePolicy")
Local $sPinRole3PolicyInfo = $oJson.StringOf("pin.role3.policyInfo")
Local $sPinRole3Flags = $oJson.StringOf("pin.role3.flags")
Local $bPinRole3AcceptPlainTextPin = $oJson.BoolOf("pin.role3.acceptPlainTextPin")
Local $bPinRole3GenerateSessionPin = $oJson.BoolOf("pin.role3.generateSessionPin")
Local $sPinRole4Type = $oJson.StringOf("pin.role4.type")
Local $sPinRole4Purpose = $oJson.StringOf("pin.role4.purpose")
Local $sPinRole4CachePolicy = $oJson.StringOf("pin.role4.cachePolicy")
Local $sPinRole4PolicyInfo = $oJson.StringOf("pin.role4.policyInfo")
Local $sPinRole4Flags = $oJson.StringOf("pin.role4.flags")
Local $bPinRole4AcceptPlainTextPin = $oJson.BoolOf("pin.role4.acceptPlainTextPin")
Local $bPinRole4GenerateSessionPin = $oJson.BoolOf("pin.role4.generateSessionPin")
Local $i = 0
Local $iCount_i = $oJson.SizeOfArray("pins")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("pins[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("pin.user.changePermission")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("pin.user.changePermission[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("pin.user.unblockPermission")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("pin.user.unblockPermission[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("pin.admin.changePermission")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("pin.admin.changePermission[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("pin.role3.changePermission")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("pin.role3.changePermission[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("pin.role3.unblockPermission")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("pin.role3.unblockPermission[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("pin.role4.changePermission")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("pin.role4.changePermission[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("importSupport")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("importSupport[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("algorithms")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("algorithms[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("paddingSchemes")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("paddingSchemes[i]")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJson.SizeOfArray("chainingModes")
While $i < $iCount_i
    $oJson.I = $i
    $strVal = $oJson.StringOf("chainingModes[i]")
    $i = $i + 1
Wend

;  Delete the context when finished with the card.
$bSuccess = $oScmd.DeleteContext()
If ($bSuccess = False) Then
    ConsoleWrite($oScmd.LastErrorText & @CRLF)
EndIf