Sample code for 30+ languages & platforms
B4X

ScMinidriver - Get Smartcard Properties

See more ScMinidriver Examples

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

Chilkat B4X Downloads

B4X
Dim success As Boolean = False

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

Dim scmd As ChilkatScMinidriver
scmd.Initialize

'  Reader names (smart card readers or USB tokens) can be discovered
'  via PCSC List Readers or PCSC Find Smart Cards
Dim readerName As String = "Alcor Micro USB Smart Card Reader 0"
success = scmd.AcquireContext(readerName)
If success = False Then
    Log(scmd.LastErrorText)
    Return
End If


Dim json As ChilkatJsonObject
json.Initialize
json.EmitCompact = False

success = scmd.GetCardProperties(json)
If success = False Then
    Log(scmd.LastErrorText)
    Return
End If


Log(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



Dim strVal As String

Dim bytesAvailable As Int = json.IntOf("bytesAvailable")
Dim containersAvailable As Int = json.IntOf("containersAvailable")
Dim maxKeyContainers As Int = json.IntOf("maxKeyContainers")
Dim capabilitiesFCertificateCompression As Boolean = json.BoolOf("capabilities.fCertificateCompression")
Dim capabilitiesFKeyGen As Boolean = json.BoolOf("capabilities.fKeyGen")
Dim keySizesMinimumBitlen As Int = json.IntOf("keySizes.minimumBitlen")
Dim keySizesDefaultBitlen As Int = json.IntOf("keySizes.defaultBitlen")
Dim keySizesMaximumBitlen As Int = json.IntOf("keySizes.maximumBitlen")
Dim keySizesIncrementalBitlen As Int = json.IntOf("keySizes.incrementalBitlen")
Dim readOnly As Boolean = json.BoolOf("readOnly")
Dim cacheMode As String = json.StringOf("cacheMode")
Dim supportsWinX509Enrollment As Boolean = json.BoolOf("supportsWinX509Enrollment")
Dim guid As String = json.StringOf("guid")
Dim serial As String = json.StringOf("serial")
Dim pinUserType As String = json.StringOf("pin.user.type")
Dim pinUserPurpose As String = json.StringOf("pin.user.purpose")
Dim pinUserCachePolicy As String = json.StringOf("pin.user.cachePolicy")
Dim pinUserPolicyInfo As String = json.StringOf("pin.user.policyInfo")
Dim pinUserFlags As String = json.StringOf("pin.user.flags")
Dim pinUserAcceptPlainTextPin As Boolean = json.BoolOf("pin.user.acceptPlainTextPin")
Dim pinUserGenerateSessionPin As Boolean = json.BoolOf("pin.user.generateSessionPin")
Dim pinAdminType As String = json.StringOf("pin.admin.type")
Dim pinAdminPurpose As String = json.StringOf("pin.admin.purpose")
Dim pinAdminCachePolicy As String = json.StringOf("pin.admin.cachePolicy")
Dim pinAdminPolicyInfo As String = json.StringOf("pin.admin.policyInfo")
Dim pinAdminFlags As String = json.StringOf("pin.admin.flags")
Dim pinRole3Type As String = json.StringOf("pin.role3.type")
Dim pinRole3Purpose As String = json.StringOf("pin.role3.purpose")
Dim pinRole3CachePolicy As String = json.StringOf("pin.role3.cachePolicy")
Dim pinRole3PolicyInfo As String = json.StringOf("pin.role3.policyInfo")
Dim pinRole3Flags As String = json.StringOf("pin.role3.flags")
Dim pinRole3AcceptPlainTextPin As Boolean = json.BoolOf("pin.role3.acceptPlainTextPin")
Dim pinRole3GenerateSessionPin As Boolean = json.BoolOf("pin.role3.generateSessionPin")
Dim pinRole4Type As String = json.StringOf("pin.role4.type")
Dim pinRole4Purpose As String = json.StringOf("pin.role4.purpose")
Dim pinRole4CachePolicy As String = json.StringOf("pin.role4.cachePolicy")
Dim pinRole4PolicyInfo As String = json.StringOf("pin.role4.policyInfo")
Dim pinRole4Flags As String = json.StringOf("pin.role4.flags")
Dim pinRole4AcceptPlainTextPin As Boolean = json.BoolOf("pin.role4.acceptPlainTextPin")
Dim pinRole4GenerateSessionPin As Boolean = json.BoolOf("pin.role4.generateSessionPin")
Dim i As Int = 0
Dim count_i As Int = json.SizeOfArray("pins")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("pins[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("pin.user.changePermission")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("pin.user.changePermission[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("pin.user.unblockPermission")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("pin.user.unblockPermission[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("pin.admin.changePermission")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("pin.admin.changePermission[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("pin.role3.changePermission")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("pin.role3.changePermission[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("pin.role3.unblockPermission")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("pin.role3.unblockPermission[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("pin.role4.changePermission")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("pin.role4.changePermission[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("importSupport")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("importSupport[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("algorithms")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("algorithms[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("paddingSchemes")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("paddingSchemes[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("chainingModes")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("chainingModes[i]")
    i = i + 1
Loop

'  Delete the context when finished with the card.
success = scmd.DeleteContext
If success = False Then
    Log(scmd.LastErrorText)
End If