Sample code for 30+ languages & platforms
Java

ScMinidriver - Get Smartcard Properties

See more ScMinidriver Examples

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

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.ScMinidriver;

public class ChilkatExample {

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

        ScMinidriver scmd = new 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";
        try {
            scmd.acquireContext(readerName);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        JsonObject json = new JsonObject();
        json.setEmitCompact(false);

        try {
            scmd.getCardProperties(json);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println(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");
        boolean capabilitiesFCertificateCompression = json.boolOf("capabilities.fCertificateCompression");
        boolean 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");
        boolean readOnly = json.boolOf("readOnly");
        String cacheMode = json.stringOf("cacheMode");
        boolean 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");
        boolean pinUserAcceptPlainTextPin = json.boolOf("pin.user.acceptPlainTextPin");
        boolean 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");
        boolean pinRole3AcceptPlainTextPin = json.boolOf("pin.role3.acceptPlainTextPin");
        boolean 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");
        boolean pinRole4AcceptPlainTextPin = json.boolOf("pin.role4.acceptPlainTextPin");
        boolean pinRole4GenerateSessionPin = json.boolOf("pin.role4.generateSessionPin");
        int i = 0;
        int count_i = json.sizeOfArray("pins");
        while (i < count_i) {
            json.setI(i);
            strVal = json.stringOf("pins[i]");
            i = i + 1;
        }

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

        i = 0;
        count_i = json.sizeOfArray("importSupport");
        while (i < count_i) {
            json.setI(i);
            strVal = json.stringOf("importSupport[i]");
            i = i + 1;
        }

        i = 0;
        count_i = json.sizeOfArray("algorithms");
        while (i < count_i) {
            json.setI(i);
            strVal = json.stringOf("algorithms[i]");
            i = i + 1;
        }

        i = 0;
        count_i = json.sizeOfArray("paddingSchemes");
        while (i < count_i) {
            json.setI(i);
            strVal = json.stringOf("paddingSchemes[i]");
            i = i + 1;
        }

        i = 0;
        count_i = json.sizeOfArray("chainingModes");
        while (i < count_i) {
            json.setI(i);
            strVal = json.stringOf("chainingModes[i]");
            i = i + 1;
        }

        // Delete the context when finished with the card.
        try {
            scmd.deleteContext();
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
        }
    }
}