Sample code for 30+ languages & platforms
Dart

ScMinidriver - Get Smartcard Properties

See more ScMinidriver Examples

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

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

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

  final scmd = CkScMinidriver();

  // Reader names (smart card readers or USB tokens) can be discovered
  // via PCSC List Readers or PCSC Find Smart Cards
  final readerName = 'Alcor Micro USB Smart Card Reader 0';
  try {
    scmd.acquireContext(readerName);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final json = CkJsonObject();
  json.emitCompact = false;

  try {
    scmd.getCardProperties(json);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

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

  var strVal = '';

  final bytesAvailable = json.intOf('bytesAvailable');
  final containersAvailable = json.intOf('containersAvailable');
  final maxKeyContainers = json.intOf('maxKeyContainers');
  final keySizesMinimumBitlen = json.intOf('keySizes.minimumBitlen');
  final keySizesDefaultBitlen = json.intOf('keySizes.defaultBitlen');
  final keySizesMaximumBitlen = json.intOf('keySizes.maximumBitlen');
  final keySizesIncrementalBitlen = json.intOf('keySizes.incrementalBitlen');
  final cacheMode = json.stringOf('cacheMode');
  final guid = json.stringOf('guid');
  final serial = json.stringOf('serial');
  final pinUserType = json.stringOf('pin.user.type');
  final pinUserPurpose = json.stringOf('pin.user.purpose');
  final pinUserCachePolicy = json.stringOf('pin.user.cachePolicy');
  final pinUserPolicyInfo = json.stringOf('pin.user.policyInfo');
  final pinUserFlags = json.stringOf('pin.user.flags');
  final pinAdminType = json.stringOf('pin.admin.type');
  final pinAdminPurpose = json.stringOf('pin.admin.purpose');
  final pinAdminCachePolicy = json.stringOf('pin.admin.cachePolicy');
  final pinAdminPolicyInfo = json.stringOf('pin.admin.policyInfo');
  final pinAdminFlags = json.stringOf('pin.admin.flags');
  final pinRole3Type = json.stringOf('pin.role3.type');
  final pinRole3Purpose = json.stringOf('pin.role3.purpose');
  final pinRole3CachePolicy = json.stringOf('pin.role3.cachePolicy');
  final pinRole3PolicyInfo = json.stringOf('pin.role3.policyInfo');
  final pinRole3Flags = json.stringOf('pin.role3.flags');
  final pinRole4Type = json.stringOf('pin.role4.type');
  final pinRole4Purpose = json.stringOf('pin.role4.purpose');
  final pinRole4CachePolicy = json.stringOf('pin.role4.cachePolicy');
  final pinRole4PolicyInfo = json.stringOf('pin.role4.policyInfo');
  final pinRole4Flags = json.stringOf('pin.role4.flags');
  var i = 0;
  var countI = json.sizeOfArray('pins');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('pins[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('pin.user.changePermission');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('pin.user.changePermission[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('pin.user.unblockPermission');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('pin.user.unblockPermission[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('pin.admin.changePermission');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('pin.admin.changePermission[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('pin.role3.changePermission');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('pin.role3.changePermission[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('pin.role3.unblockPermission');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('pin.role3.unblockPermission[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('pin.role4.changePermission');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('pin.role4.changePermission[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('importSupport');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('importSupport[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('algorithms');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('algorithms[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('paddingSchemes');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('paddingSchemes[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('chainingModes');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('chainingModes[i]');
    i++;
  }

  // Delete the context when finished with the card.
  try {
    scmd.deleteContext();
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
  }
}