Dart
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
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);
}
}