Sample code for 30+ languages & platforms
PHP ActiveX

ScMinidriver - Get Smartcard Properties

See more ScMinidriver Examples

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

Chilkat PHP ActiveX Downloads

PHP ActiveX
<?php

$success = 0;

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

$scmd = new COM("Chilkat.ScMinidriver");

// 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 . "\n";
    exit;
}

$json = new COM("Chilkat.JsonObject");
$json->EmitCompact = 0;

$success = $scmd->GetCardProperties($json);
if ($success == 0) {
    print $scmd->LastErrorText . "\n";
    exit;
}

print $json->emit() . "\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->I = $i;
    $strVal = $json->stringOf('pins[i]');
    $i = $i + 1;
}

$i = 0;
$count_i = $json->SizeOfArray('pin.user.changePermission');
while ($i < $count_i) {
    $json->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->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->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->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->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->I = $i;
    $strVal = $json->stringOf('pin.role4.changePermission[i]');
    $i = $i + 1;
}

$i = 0;
$count_i = $json->SizeOfArray('importSupport');
while ($i < $count_i) {
    $json->I = $i;
    $strVal = $json->stringOf('importSupport[i]');
    $i = $i + 1;
}

$i = 0;
$count_i = $json->SizeOfArray('algorithms');
while ($i < $count_i) {
    $json->I = $i;
    $strVal = $json->stringOf('algorithms[i]');
    $i = $i + 1;
}

$i = 0;
$count_i = $json->SizeOfArray('paddingSchemes');
while ($i < $count_i) {
    $json->I = $i;
    $strVal = $json->stringOf('paddingSchemes[i]');
    $i = $i + 1;
}

$i = 0;
$count_i = $json->SizeOfArray('chainingModes');
while ($i < $count_i) {
    $json->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 . "\n";
}


?>