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
(SQL Server) 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.
// Important: See this note about string length limitations for strings returned by sp_OAMethod calls. // CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int DECLARE @iTmp0 int DECLARE @sTmp0 nvarchar(4000) -- 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. DECLARE @pkcs11 int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Pkcs11', @pkcs11 OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END -- This is the DLL for the Feitian ePass3003Auto USB token EXEC sp_OASetProperty @pkcs11, 'SharedLibPath', 'ShuttleCsp11_3003.dll' DECLARE @success int EXEC sp_OAMethod @pkcs11, 'Initialize', @success OUT IF @success = 0 BEGIN EXEC sp_OAGetProperty @pkcs11, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @pkcs11 RETURN END -- We need to call Discover to get the slot ID. DECLARE @onlyTokensPresent int SELECT @onlyTokensPresent = 1 DECLARE @json int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.JsonObject', @json OUT EXEC sp_OAMethod @pkcs11, 'Discover', @success OUT, @onlyTokensPresent, @json IF @success = 0 BEGIN EXEC sp_OAGetProperty @pkcs11, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @pkcs11 EXEC @hr = sp_OADestroy @json RETURN END EXEC sp_OASetProperty @json, 'EmitCompact', 0 EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- 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. EXEC sp_OAMethod @json, 'SizeOfArray', @iTmp0 OUT, 'slot' IF @iTmp0 <= 0 BEGIN PRINT 'No occuplied slots.' EXEC @hr = sp_OADestroy @pkcs11 EXEC @hr = sp_OADestroy @json RETURN END -- Get the ID of the 1st slot DECLARE @slotID int EXEC sp_OAMethod @json, 'IntOf', @slotID OUT, 'slot[0].id' -- Open a read/write session. DECLARE @readWrite int SELECT @readWrite = 1 EXEC sp_OAMethod @pkcs11, 'OpenSession', @success OUT, @slotID, @readWrite IF @success = 0 BEGIN EXEC sp_OAGetProperty @pkcs11, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @pkcs11 EXEC @hr = sp_OADestroy @json RETURN 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). EXEC sp_OAMethod @pkcs11, 'CloseSession', @success OUT IF @success = 0 BEGIN EXEC sp_OAGetProperty @pkcs11, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @pkcs11 EXEC @hr = sp_OADestroy @json RETURN END PRINT 'PKCS11 session successfully opened and closed.' EXEC @hr = sp_OADestroy @pkcs11 EXEC @hr = sp_OADestroy @json END GO |
© 2000-2023 Chilkat Software, Inc. All Rights Reserved.