Sample code for 30+ languages & platforms
C#

ScMinidriver - Get Smartcard Properties

See more ScMinidriver Examples

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

Chilkat C# Downloads

C#
bool success = false;

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

Chilkat.ScMinidriver scmd = new Chilkat.ScMinidriver();

//  Reader names (smart card readers or USB tokens) can be discovered
//  via PCSC List Readers or PCSC Find Smart Cards
string readerName = "Alcor Micro USB Smart Card Reader 0";
success = scmd.AcquireContext(readerName);
if (success == false) {
    Debug.WriteLine(scmd.LastErrorText);
    return;
}

Chilkat.JsonObject json = new Chilkat.JsonObject();
json.EmitCompact = false;

success = scmd.GetCardProperties(json);
if (success == false) {
    Debug.WriteLine(scmd.LastErrorText);
    return;
}

Debug.WriteLine(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

string strVal;

int bytesAvailable = json.IntOf("bytesAvailable");
int containersAvailable = json.IntOf("containersAvailable");
int maxKeyContainers = json.IntOf("maxKeyContainers");
bool capabilitiesFCertificateCompression = json.BoolOf("capabilities.fCertificateCompression");
bool capabilitiesFKeyGen = json.BoolOf("capabilities.fKeyGen");
int keySizesMinimumBitlen = json.IntOf("keySizes.minimumBitlen");
int keySizesDefaultBitlen = json.IntOf("keySizes.defaultBitlen");
int keySizesMaximumBitlen = json.IntOf("keySizes.maximumBitlen");
int keySizesIncrementalBitlen = json.IntOf("keySizes.incrementalBitlen");
bool readOnly = json.BoolOf("readOnly");
string cacheMode = json.StringOf("cacheMode");
bool supportsWinX509Enrollment = json.BoolOf("supportsWinX509Enrollment");
string guid = json.StringOf("guid");
string serial = json.StringOf("serial");
string pinUserType = json.StringOf("pin.user.type");
string pinUserPurpose = json.StringOf("pin.user.purpose");
string pinUserCachePolicy = json.StringOf("pin.user.cachePolicy");
string pinUserPolicyInfo = json.StringOf("pin.user.policyInfo");
string pinUserFlags = json.StringOf("pin.user.flags");
bool pinUserAcceptPlainTextPin = json.BoolOf("pin.user.acceptPlainTextPin");
bool pinUserGenerateSessionPin = json.BoolOf("pin.user.generateSessionPin");
string pinAdminType = json.StringOf("pin.admin.type");
string pinAdminPurpose = json.StringOf("pin.admin.purpose");
string pinAdminCachePolicy = json.StringOf("pin.admin.cachePolicy");
string pinAdminPolicyInfo = json.StringOf("pin.admin.policyInfo");
string pinAdminFlags = json.StringOf("pin.admin.flags");
string pinRole3Type = json.StringOf("pin.role3.type");
string pinRole3Purpose = json.StringOf("pin.role3.purpose");
string pinRole3CachePolicy = json.StringOf("pin.role3.cachePolicy");
string pinRole3PolicyInfo = json.StringOf("pin.role3.policyInfo");
string pinRole3Flags = json.StringOf("pin.role3.flags");
bool pinRole3AcceptPlainTextPin = json.BoolOf("pin.role3.acceptPlainTextPin");
bool pinRole3GenerateSessionPin = json.BoolOf("pin.role3.generateSessionPin");
string pinRole4Type = json.StringOf("pin.role4.type");
string pinRole4Purpose = json.StringOf("pin.role4.purpose");
string pinRole4CachePolicy = json.StringOf("pin.role4.cachePolicy");
string pinRole4PolicyInfo = json.StringOf("pin.role4.policyInfo");
string pinRole4Flags = json.StringOf("pin.role4.flags");
bool pinRole4AcceptPlainTextPin = json.BoolOf("pin.role4.acceptPlainTextPin");
bool pinRole4GenerateSessionPin = json.BoolOf("pin.role4.generateSessionPin");
int i = 0;
int 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 == false) {
    Debug.WriteLine(scmd.LastErrorText);
}