Perl
Perl
ScMinidriver - Get Smartcard Properties
See more ScMinidriver Examples
Gets information about the smart card currently inserted in the reader (or USB token).Chilkat Perl Downloads
use chilkat();
$success = 0;
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
$scmd = chilkat::CkScMinidriver->new();
# Reader names (smart card readers or USB tokens) can be discovered
# via PCSC List Readers or PCSC Find Smart Cards
$readerName = "Alcor Micro USB Smart Card Reader 0";
$success = $scmd->AcquireContext($readerName);
if ($success == 0) {
print $scmd->lastErrorText() . "\r\n";
exit;
}
$json = chilkat::CkJsonObject->new();
$json->put_EmitCompact(0);
$success = $scmd->GetCardProperties($json);
if ($success == 0) {
print $scmd->lastErrorText() . "\r\n";
exit;
}
print $json->emit() . "\r\n";
# 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
$bytesAvailable = $json->IntOf("bytesAvailable");
$containersAvailable = $json->IntOf("containersAvailable");
$maxKeyContainers = $json->IntOf("maxKeyContainers");
$capabilitiesFCertificateCompression = $json->BoolOf("capabilities.fCertificateCompression");
$capabilitiesFKeyGen = $json->BoolOf("capabilities.fKeyGen");
$keySizesMinimumBitlen = $json->IntOf("keySizes.minimumBitlen");
$keySizesDefaultBitlen = $json->IntOf("keySizes.defaultBitlen");
$keySizesMaximumBitlen = $json->IntOf("keySizes.maximumBitlen");
$keySizesIncrementalBitlen = $json->IntOf("keySizes.incrementalBitlen");
$readOnly = $json->BoolOf("readOnly");
$cacheMode = $json->stringOf("cacheMode");
$supportsWinX509Enrollment = $json->BoolOf("supportsWinX509Enrollment");
$guid = $json->stringOf("guid");
$serial = $json->stringOf("serial");
$pinUserType = $json->stringOf("pin.user.type");
$pinUserPurpose = $json->stringOf("pin.user.purpose");
$pinUserCachePolicy = $json->stringOf("pin.user.cachePolicy");
$pinUserPolicyInfo = $json->stringOf("pin.user.policyInfo");
$pinUserFlags = $json->stringOf("pin.user.flags");
$pinUserAcceptPlainTextPin = $json->BoolOf("pin.user.acceptPlainTextPin");
$pinUserGenerateSessionPin = $json->BoolOf("pin.user.generateSessionPin");
$pinAdminType = $json->stringOf("pin.admin.type");
$pinAdminPurpose = $json->stringOf("pin.admin.purpose");
$pinAdminCachePolicy = $json->stringOf("pin.admin.cachePolicy");
$pinAdminPolicyInfo = $json->stringOf("pin.admin.policyInfo");
$pinAdminFlags = $json->stringOf("pin.admin.flags");
$pinRole3Type = $json->stringOf("pin.role3.type");
$pinRole3Purpose = $json->stringOf("pin.role3.purpose");
$pinRole3CachePolicy = $json->stringOf("pin.role3.cachePolicy");
$pinRole3PolicyInfo = $json->stringOf("pin.role3.policyInfo");
$pinRole3Flags = $json->stringOf("pin.role3.flags");
$pinRole3AcceptPlainTextPin = $json->BoolOf("pin.role3.acceptPlainTextPin");
$pinRole3GenerateSessionPin = $json->BoolOf("pin.role3.generateSessionPin");
$pinRole4Type = $json->stringOf("pin.role4.type");
$pinRole4Purpose = $json->stringOf("pin.role4.purpose");
$pinRole4CachePolicy = $json->stringOf("pin.role4.cachePolicy");
$pinRole4PolicyInfo = $json->stringOf("pin.role4.policyInfo");
$pinRole4Flags = $json->stringOf("pin.role4.flags");
$pinRole4AcceptPlainTextPin = $json->BoolOf("pin.role4.acceptPlainTextPin");
$pinRole4GenerateSessionPin = $json->BoolOf("pin.role4.generateSessionPin");
$i = 0;
$count_i = $json->SizeOfArray("pins");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("pins[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("pin.user.changePermission");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("pin.user.changePermission[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("pin.user.unblockPermission");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("pin.user.unblockPermission[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("pin.admin.changePermission");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("pin.admin.changePermission[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("pin.role3.changePermission");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("pin.role3.changePermission[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("pin.role3.unblockPermission");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("pin.role3.unblockPermission[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("pin.role4.changePermission");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("pin.role4.changePermission[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("importSupport");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("importSupport[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("algorithms");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("algorithms[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("paddingSchemes");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("paddingSchemes[i]");
$i = $i + 1;
}
$i = 0;
$count_i = $json->SizeOfArray("chainingModes");
while ($i < $count_i) {
$json->put_I($i);
$strVal = $json->stringOf("chainingModes[i]");
$i = $i + 1;
}
# Delete the context when finished with the card.
$success = $scmd->DeleteContext();
if ($success == 0) {
print $scmd->lastErrorText() . "\r\n";
}