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
(PureBasic) 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.
IncludeFile "CkPkcs11.pb" IncludeFile "CkJsonObject.pb" Procedure ChilkatExample() ; 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.i = CkPkcs11::ckCreate() If pkcs11.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; This is the DLL for the Feitian ePass3003Auto USB token CkPkcs11::setCkSharedLibPath(pkcs11, "ShuttleCsp11_3003.dll") success.i = CkPkcs11::ckInitialize(pkcs11) If success = 0 Debug CkPkcs11::ckLastErrorText(pkcs11) CkPkcs11::ckDispose(pkcs11) ProcedureReturn EndIf ; We need to call Discover to get the slot ID. onlyTokensPresent.i = 1 json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkPkcs11::ckDiscover(pkcs11,onlyTokensPresent,json) If success = 0 Debug CkPkcs11::ckLastErrorText(pkcs11) CkPkcs11::ckDispose(pkcs11) CkJsonObject::ckDispose(json) ProcedureReturn EndIf CkJsonObject::setCkEmitCompact(json, 0) Debug CkJsonObject::ckEmit(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::ckSizeOfArray(json,"slot") <= 0 Debug "No occuplied slots." CkPkcs11::ckDispose(pkcs11) CkJsonObject::ckDispose(json) ProcedureReturn EndIf ; Get the ID of the 1st slot slotID.i = CkJsonObject::ckIntOf(json,"slot[0].id") ; Open a read/write session. readWrite.i = 1 success = CkPkcs11::ckOpenSession(pkcs11,slotID,readWrite) If success = 0 Debug CkPkcs11::ckLastErrorText(pkcs11) CkPkcs11::ckDispose(pkcs11) CkJsonObject::ckDispose(json) ProcedureReturn EndIf ; 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::ckCloseSession(pkcs11) If success = 0 Debug CkPkcs11::ckLastErrorText(pkcs11) CkPkcs11::ckDispose(pkcs11) CkJsonObject::ckDispose(json) ProcedureReturn EndIf Debug "PKCS11 session successfully opened and closed." CkPkcs11::ckDispose(pkcs11) CkJsonObject::ckDispose(json) ProcedureReturn EndProcedure |
© 2000-2023 Chilkat Software, Inc. All Rights Reserved.