Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Delphi DLL) 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.
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Pkcs11, JsonObject; ... procedure TForm1.Button1Click(Sender: TObject); var pkcs11: HCkPkcs11; success: Boolean; onlyTokensPresent: Boolean; json: HCkJsonObject; slotID: Integer; readWrite: Boolean; begin // 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. pkcs11 := CkPkcs11_Create(); // This is the DLL for the Feitian ePass3003Auto USB token CkPkcs11_putSharedLibPath(pkcs11,'ShuttleCsp11_3003.dll'); success := CkPkcs11_Initialize(pkcs11); if (success = False) then begin Memo1.Lines.Add(CkPkcs11__lastErrorText(pkcs11)); Exit; end; // We need to call Discover to get the slot ID. onlyTokensPresent := True; json := CkJsonObject_Create(); success := CkPkcs11_Discover(pkcs11,onlyTokensPresent,json); if (success = False) then begin Memo1.Lines.Add(CkPkcs11__lastErrorText(pkcs11)); Exit; end; CkJsonObject_putEmitCompact(json,False); Memo1.Lines.Add(CkJsonObject__emit(json)); // 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 (CkJsonObject_SizeOfArray(json,'slot') <= 0) then begin Memo1.Lines.Add('No occuplied slots.'); Exit; end; // Get the ID of the 1st slot slotID := CkJsonObject_IntOf(json,'slot[0].id'); // Open a read/write session. readWrite := True; success := CkPkcs11_OpenSession(pkcs11,slotID,readWrite); if (success = False) then begin Memo1.Lines.Add(CkPkcs11__lastErrorText(pkcs11)); Exit; end; // 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 := CkPkcs11_CloseSession(pkcs11); if (success = False) then begin Memo1.Lines.Add(CkPkcs11__lastErrorText(pkcs11)); Exit; end; Memo1.Lines.Add('PKCS11 session successfully opened and closed.'); CkPkcs11_Dispose(pkcs11); CkJsonObject_Dispose(json); end; |
© 2000-2023 Chilkat Software, Inc. All Rights Reserved.