Xbase++
Xbase++
ScMinidriver - Get Smartcard Properties
See more ScMinidriver Examples
Gets information about the smart card currently inserted in the reader (or USB token).Chilkat Xbase++ Downloads
LOCAL nSuccess
LOCAL oScmd
LOCAL cReaderName
LOCAL oJson
LOCAL cStrVal
LOCAL nBytesAvailable
LOCAL nContainersAvailable
LOCAL nMaxKeyContainers
LOCAL nCapabilitiesFCertificateCompression
LOCAL nCapabilitiesFKeyGen
LOCAL nKeySizesMinimumBitlen
LOCAL nKeySizesDefaultBitlen
LOCAL nKeySizesMaximumBitlen
LOCAL nKeySizesIncrementalBitlen
LOCAL nReadOnly
LOCAL cCacheMode
LOCAL nSupportsWinX509Enrollment
LOCAL cGuid
LOCAL cSerial
LOCAL cPinUserType
LOCAL cPinUserPurpose
LOCAL cPinUserCachePolicy
LOCAL cPinUserPolicyInfo
LOCAL cPinUserFlags
LOCAL nPinUserAcceptPlainTextPin
LOCAL nPinUserGenerateSessionPin
LOCAL cPinAdminType
LOCAL cPinAdminPurpose
LOCAL cPinAdminCachePolicy
LOCAL cPinAdminPolicyInfo
LOCAL cPinAdminFlags
LOCAL cPinRole3Type
LOCAL cPinRole3Purpose
LOCAL cPinRole3CachePolicy
LOCAL cPinRole3PolicyInfo
LOCAL cPinRole3Flags
LOCAL nPinRole3AcceptPlainTextPin
LOCAL nPinRole3GenerateSessionPin
LOCAL cPinRole4Type
LOCAL cPinRole4Purpose
LOCAL cPinRole4CachePolicy
LOCAL cPinRole4PolicyInfo
LOCAL cPinRole4Flags
LOCAL nPinRole4AcceptPlainTextPin
LOCAL nPinRole4GenerateSessionPin
LOCAL i
LOCAL nCount_i
nSuccess := 0
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
oScmd := CreateObject("Chilkat.ScMinidriver")
// Reader names (smart card readers or USB tokens) can be discovered
// via PCSC List Readers or PCSC Find Smart Cards
cReaderName := "Alcor Micro USB Smart Card Reader 0"
nSuccess := oScmd:AcquireContext(cReaderName)
IF (nSuccess == 0)
? oScmd:LastErrorText
oScmd:destroy()
RETURN
ENDIF
oJson := CreateObject("Chilkat.JsonObject")
oJson:EmitCompact := 0
nSuccess := oScmd:GetCardProperties(oJson)
IF (nSuccess == 0)
? oScmd:LastErrorText
oScmd:destroy()
oJson:destroy()
RETURN
ENDIF
? oJson: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
nBytesAvailable := oJson:IntOf("bytesAvailable")
nContainersAvailable := oJson:IntOf("containersAvailable")
nMaxKeyContainers := oJson:IntOf("maxKeyContainers")
nCapabilitiesFCertificateCompression := oJson:BoolOf("capabilities.fCertificateCompression")
nCapabilitiesFKeyGen := oJson:BoolOf("capabilities.fKeyGen")
nKeySizesMinimumBitlen := oJson:IntOf("keySizes.minimumBitlen")
nKeySizesDefaultBitlen := oJson:IntOf("keySizes.defaultBitlen")
nKeySizesMaximumBitlen := oJson:IntOf("keySizes.maximumBitlen")
nKeySizesIncrementalBitlen := oJson:IntOf("keySizes.incrementalBitlen")
nReadOnly := oJson:BoolOf("readOnly")
cCacheMode := oJson:StringOf("cacheMode")
nSupportsWinX509Enrollment := oJson:BoolOf("supportsWinX509Enrollment")
cGuid := oJson:StringOf("guid")
cSerial := oJson:StringOf("serial")
cPinUserType := oJson:StringOf("pin.user.type")
cPinUserPurpose := oJson:StringOf("pin.user.purpose")
cPinUserCachePolicy := oJson:StringOf("pin.user.cachePolicy")
cPinUserPolicyInfo := oJson:StringOf("pin.user.policyInfo")
cPinUserFlags := oJson:StringOf("pin.user.flags")
nPinUserAcceptPlainTextPin := oJson:BoolOf("pin.user.acceptPlainTextPin")
nPinUserGenerateSessionPin := oJson:BoolOf("pin.user.generateSessionPin")
cPinAdminType := oJson:StringOf("pin.admin.type")
cPinAdminPurpose := oJson:StringOf("pin.admin.purpose")
cPinAdminCachePolicy := oJson:StringOf("pin.admin.cachePolicy")
cPinAdminPolicyInfo := oJson:StringOf("pin.admin.policyInfo")
cPinAdminFlags := oJson:StringOf("pin.admin.flags")
cPinRole3Type := oJson:StringOf("pin.role3.type")
cPinRole3Purpose := oJson:StringOf("pin.role3.purpose")
cPinRole3CachePolicy := oJson:StringOf("pin.role3.cachePolicy")
cPinRole3PolicyInfo := oJson:StringOf("pin.role3.policyInfo")
cPinRole3Flags := oJson:StringOf("pin.role3.flags")
nPinRole3AcceptPlainTextPin := oJson:BoolOf("pin.role3.acceptPlainTextPin")
nPinRole3GenerateSessionPin := oJson:BoolOf("pin.role3.generateSessionPin")
cPinRole4Type := oJson:StringOf("pin.role4.type")
cPinRole4Purpose := oJson:StringOf("pin.role4.purpose")
cPinRole4CachePolicy := oJson:StringOf("pin.role4.cachePolicy")
cPinRole4PolicyInfo := oJson:StringOf("pin.role4.policyInfo")
cPinRole4Flags := oJson:StringOf("pin.role4.flags")
nPinRole4AcceptPlainTextPin := oJson:BoolOf("pin.role4.acceptPlainTextPin")
nPinRole4GenerateSessionPin := oJson:BoolOf("pin.role4.generateSessionPin")
i := 0
nCount_i := oJson:SizeOfArray("pins")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("pins[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("pin.user.changePermission")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("pin.user.changePermission[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("pin.user.unblockPermission")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("pin.user.unblockPermission[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("pin.admin.changePermission")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("pin.admin.changePermission[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("pin.role3.changePermission")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("pin.role3.changePermission[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("pin.role3.unblockPermission")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("pin.role3.unblockPermission[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("pin.role4.changePermission")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("pin.role4.changePermission[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("importSupport")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("importSupport[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("algorithms")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("algorithms[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("paddingSchemes")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("paddingSchemes[i]")
i := i + 1
ENDDO
i := 0
nCount_i := oJson:SizeOfArray("chainingModes")
DO WHILE i < nCount_i
oJson:I := i
cStrVal := oJson:StringOf("chainingModes[i]")
i := i + 1
ENDDO
// Delete the context when finished with the card.
nSuccess := oScmd:DeleteContext()
IF (nSuccess == 0)
? oScmd:LastErrorText
ENDIF
oScmd:destroy()
oJson:destroy()