Sample code for 30+ languages & platforms
PowerBuilder

ScMinidriver - Get Smartcard Properties

See more ScMinidriver Examples

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

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
long li_Success
oleobject loo_Scmd
string ls_ReaderName
oleobject loo_Json
string ls_StrVal
long li_BytesAvailable
long li_ContainersAvailable
long li_MaxKeyContainers
long li_CapabilitiesFCertificateCompression
long li_CapabilitiesFKeyGen
long li_KeySizesMinimumBitlen
long li_KeySizesDefaultBitlen
long li_KeySizesMaximumBitlen
long li_KeySizesIncrementalBitlen
long li_ReadOnly
string ls_CacheMode
long li_SupportsWinX509Enrollment
string ls_Guid
string ls_Serial
string ls_PinUserType
string ls_PinUserPurpose
string ls_PinUserCachePolicy
string ls_PinUserPolicyInfo
string ls_PinUserFlags
long li_PinUserAcceptPlainTextPin
long li_PinUserGenerateSessionPin
string ls_PinAdminType
string ls_PinAdminPurpose
string ls_PinAdminCachePolicy
string ls_PinAdminPolicyInfo
string ls_PinAdminFlags
string ls_PinRole3Type
string ls_PinRole3Purpose
string ls_PinRole3CachePolicy
string ls_PinRole3PolicyInfo
string ls_PinRole3Flags
long li_PinRole3AcceptPlainTextPin
long li_PinRole3GenerateSessionPin
string ls_PinRole4Type
string ls_PinRole4Purpose
string ls_PinRole4CachePolicy
string ls_PinRole4PolicyInfo
string ls_PinRole4Flags
long li_PinRole4AcceptPlainTextPin
long li_PinRole4GenerateSessionPin
long i
long li_Count_i

li_Success = 0

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

loo_Scmd = create oleobject
li_rc = loo_Scmd.ConnectToNewObject("Chilkat.ScMinidriver")
if li_rc < 0 then
    destroy loo_Scmd
    MessageBox("Error","Connecting to COM object failed")
    return
end if

//  Reader names (smart card readers or USB tokens) can be discovered
//  via PCSC List Readers or PCSC Find Smart Cards
ls_ReaderName = "Alcor Micro USB Smart Card Reader 0"
li_Success = loo_Scmd.AcquireContext(ls_ReaderName)
if li_Success = 0 then
    Write-Debug loo_Scmd.LastErrorText
    destroy loo_Scmd
    return
end if

loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")

loo_Json.EmitCompact = 0

li_Success = loo_Scmd.GetCardProperties(loo_Json)
if li_Success = 0 then
    Write-Debug loo_Scmd.LastErrorText
    destroy loo_Scmd
    destroy loo_Json
    return
end if

Write-Debug loo_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

li_BytesAvailable = loo_Json.IntOf("bytesAvailable")
li_ContainersAvailable = loo_Json.IntOf("containersAvailable")
li_MaxKeyContainers = loo_Json.IntOf("maxKeyContainers")
li_CapabilitiesFCertificateCompression = loo_Json.BoolOf("capabilities.fCertificateCompression")
li_CapabilitiesFKeyGen = loo_Json.BoolOf("capabilities.fKeyGen")
li_KeySizesMinimumBitlen = loo_Json.IntOf("keySizes.minimumBitlen")
li_KeySizesDefaultBitlen = loo_Json.IntOf("keySizes.defaultBitlen")
li_KeySizesMaximumBitlen = loo_Json.IntOf("keySizes.maximumBitlen")
li_KeySizesIncrementalBitlen = loo_Json.IntOf("keySizes.incrementalBitlen")
li_ReadOnly = loo_Json.BoolOf("readOnly")
ls_CacheMode = loo_Json.StringOf("cacheMode")
li_SupportsWinX509Enrollment = loo_Json.BoolOf("supportsWinX509Enrollment")
ls_Guid = loo_Json.StringOf("guid")
ls_Serial = loo_Json.StringOf("serial")
ls_PinUserType = loo_Json.StringOf("pin.user.type")
ls_PinUserPurpose = loo_Json.StringOf("pin.user.purpose")
ls_PinUserCachePolicy = loo_Json.StringOf("pin.user.cachePolicy")
ls_PinUserPolicyInfo = loo_Json.StringOf("pin.user.policyInfo")
ls_PinUserFlags = loo_Json.StringOf("pin.user.flags")
li_PinUserAcceptPlainTextPin = loo_Json.BoolOf("pin.user.acceptPlainTextPin")
li_PinUserGenerateSessionPin = loo_Json.BoolOf("pin.user.generateSessionPin")
ls_PinAdminType = loo_Json.StringOf("pin.admin.type")
ls_PinAdminPurpose = loo_Json.StringOf("pin.admin.purpose")
ls_PinAdminCachePolicy = loo_Json.StringOf("pin.admin.cachePolicy")
ls_PinAdminPolicyInfo = loo_Json.StringOf("pin.admin.policyInfo")
ls_PinAdminFlags = loo_Json.StringOf("pin.admin.flags")
ls_PinRole3Type = loo_Json.StringOf("pin.role3.type")
ls_PinRole3Purpose = loo_Json.StringOf("pin.role3.purpose")
ls_PinRole3CachePolicy = loo_Json.StringOf("pin.role3.cachePolicy")
ls_PinRole3PolicyInfo = loo_Json.StringOf("pin.role3.policyInfo")
ls_PinRole3Flags = loo_Json.StringOf("pin.role3.flags")
li_PinRole3AcceptPlainTextPin = loo_Json.BoolOf("pin.role3.acceptPlainTextPin")
li_PinRole3GenerateSessionPin = loo_Json.BoolOf("pin.role3.generateSessionPin")
ls_PinRole4Type = loo_Json.StringOf("pin.role4.type")
ls_PinRole4Purpose = loo_Json.StringOf("pin.role4.purpose")
ls_PinRole4CachePolicy = loo_Json.StringOf("pin.role4.cachePolicy")
ls_PinRole4PolicyInfo = loo_Json.StringOf("pin.role4.policyInfo")
ls_PinRole4Flags = loo_Json.StringOf("pin.role4.flags")
li_PinRole4AcceptPlainTextPin = loo_Json.BoolOf("pin.role4.acceptPlainTextPin")
li_PinRole4GenerateSessionPin = loo_Json.BoolOf("pin.role4.generateSessionPin")
i = 0
li_Count_i = loo_Json.SizeOfArray("pins")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("pins[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("pin.user.changePermission")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("pin.user.changePermission[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("pin.user.unblockPermission")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("pin.user.unblockPermission[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("pin.admin.changePermission")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("pin.admin.changePermission[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("pin.role3.changePermission")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("pin.role3.changePermission[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("pin.role3.unblockPermission")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("pin.role3.unblockPermission[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("pin.role4.changePermission")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("pin.role4.changePermission[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("importSupport")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("importSupport[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("algorithms")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("algorithms[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("paddingSchemes")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("paddingSchemes[i]")
    i = i + 1
loop
i = 0
li_Count_i = loo_Json.SizeOfArray("chainingModes")
do while i < li_Count_i
    loo_Json.I = i
    ls_StrVal = loo_Json.StringOf("chainingModes[i]")
    i = i + 1
loop

//  Delete the context when finished with the card.
li_Success = loo_Scmd.DeleteContext()
if li_Success = 0 then
    Write-Debug loo_Scmd.LastErrorText
end if



destroy loo_Scmd
destroy loo_Json