Chilkat HOME Android™ Classic ASP C C++ C# Mono C# .NET Core C# C# UWP/WinRT DataFlex Delphi ActiveX Delphi DLL Visual FoxPro Java Lianja MFC Objective-C Perl PHP ActiveX PHP Extension PowerBuilder PowerShell PureBasic CkPython Chilkat2-Python Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ Visual Basic 6.0 VB.NET VB.NET UWP/WinRT VBScript Xojo Plugin Node.js Excel Go
(MFC) PKCS11 SessionsSee more PKCS11 ExamplesSample code showing how to open a PKCS11 session and then later close it. Note: This example requires Chilkat v9.5.0.88 or later.
#include <CkPkcs11.h> #include <CkJsonObject.h> void ChilkatSample(void) { CkString strOut; // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // Note: Chilkat's PKCS11 implementation runs on Windows, Linux, Mac OS X, and other supported operating systems. CkPkcs11 pkcs11; // This is the DLL for the Feitian ePass3003Auto USB token pkcs11.put_SharedLibPath("ShuttleCsp11_3003.dll"); bool success = pkcs11.Initialize(); if (success == false) { strOut.append(pkcs11.lastErrorText()); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } // We need to call Discover to get the slot ID. bool onlyTokensPresent = true; CkJsonObject json; success = pkcs11.Discover(onlyTokensPresent,json); if (success == false) { strOut.append(pkcs11.lastErrorText()); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } json.put_EmitCompact(false); strOut.append(json.emit()); strOut.append("\r\n"); // Sample JSON output.. // { // "cryptokiVersion": { // "major": 2, // "minor": 40 // }, // "manufacturerID": "Feitian Technologies Co., Ltd.", // "libraryDescription": "EnterSafe PKCS#11 Library.", // "libraryVersion": { // "major": 1, // "minor": 20 // }, // "slot": [ // { // "id": 1, // "slotDescription": "ES3003 VCR 1", // "manufacturerID": "Feitian Technologies Co., Ltd.", // "tokenPresent": true, // "removableDevice": true, // "hardwareSlot": true, // "hardwareVersion": { // "major": 1, // "minor": 0 // }, // "firmwareVersion": { // "major": 1, // "minor": 0 // }, // "token": { // "label": "ePass3003Auto", // "manufacturerID": "Feitian Technologies Co., Ltd.", // "model": "ePass3003Auto", // "serialNumber": "3C38501007150419", // "flags": [ // "CKF_RNG", // "CKF_LOGIN_REQUIRED", // "CKF_USER_PIN_INITIALIZED", // "CKF_TOKEN_INITIALIZED", // "CKF_SECONDARY_AUTHENTICATION", // "CKF_USER_PIN_TO_BE_CHANGED" // ], // "maxSessionCount": 0, // "sessionCount": 0, // "maxRwSessionCount": 0, // "rwSessionCount": 0, // "maxPinLen": 16, // "minPinLen": 4, // "totalPublicMemory": 30000, // "freePublicMemory": 27891, // "totalPrivateMemory": 34000, // "freePrivateMemory": 33768, // "hardwareVersion": { // "major": 7, // "minor": 3 // }, // "firmwareVersion": { // "major": 7, // "minor": 3 // }, // "utcTime": "", // "mechanism": [ // "CKM_RSA_PKCS_KEY_PAIR_GEN", // "CKM_RSA_PKCS", // "CKM_RSA_X_509", // "CKM_MD2_RSA_PKCS", // "CKM_MD5_RSA_PKCS", // "CKM_SHA1_RSA_PKCS", // "CKM_RSA_PKCS_OAEP", // "CKM_RSA_X9_31_KEY_PAIR_GEN", // "CKM_RSA_X9_31", // "CKM_SHA1_RSA_X9_31", // "CKM_RSA_PKCS_PSS", // "CKM_SHA1_RSA_PKCS_PSS", // "CKM_SHA256_RSA_PKCS", // "CKM_SHA384_RSA_PKCS", // "CKM_SHA512_RSA_PKCS", // "CKM_SHA256_RSA_PKCS_PSS", // "CKM_SHA384_RSA_PKCS_PSS", // "CKM_SHA512_RSA_PKCS_PSS", // "CKM_RC2_KEY_GEN", // "CKM_RC2_ECB", // "CKM_RC2_CBC", // "CKM_RC4_KEY_GEN", // "CKM_RC4", // "CKM_DES_KEY_GEN", // "CKM_DES_ECB", // "CKM_DES_CBC", // "CKM_DES3_KEY_GEN", // "CKM_DES3_ECB", // "CKM_DES3_CBC", // "CKM_DES_OFB64", // "CKM_DES_OFB8", // "CKM_DES_CFB64", // "CKM_DES_CFB8", // "CKM_MD2", // "CKM_MD5", // "CKM_SHA_1", // "CKM_SHA256", // "CKM_SHA224", // "CKM_SHA384", // "CKM_SHA512", // "CKM_GENERIC_SECRET_KEY_GEN", // "CKM_AES_KEY_GEN", // "CKM_AES_ECB", // "CKM_AES_CBC" // ], // "rsa": { // "minKeySize": 512, // "maxKeySize": 2048 // } // } // } // ] // } // Make sure we have at least one slot. if (json.SizeOfArray("slot") <= 0) { strOut.append("No occuplied slots."); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } // Get the ID of the 1st slot int slotID = json.IntOf("slot[0].id"); // Open a read/write session. bool readWrite = true; success = pkcs11.OpenSession(slotID,readWrite); if (success == false) { strOut.append(pkcs11.lastErrorText()); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } // Do whatever is needed... // ... // ... // When finished, close the session. // It is important to close the session (memory leaks will occur if the session is not properly closed). success = pkcs11.CloseSession(); if (success == false) { strOut.append(pkcs11.lastErrorText()); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } strOut.append("PKCS11 session successfully opened and closed."); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); } |
© 2000-2022 Chilkat Software, Inc. All Rights Reserved.