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 Login / LogoutSee more PKCS11 ExamplesSample code showing how to login and logout of a PKCS11 session. A session becomes authenticated when Login is called, and returns to the unauthenticated state when Logout is called. A smart card's PIN is passed to the Login method. 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 ; "aetpkss1.dll" is the DLL for the SafeSign Identity Client Standard Version 3.5 ; The aetpkss1.dll can be used with the following smart cards or USB tokens: ; Defensiepas ; Defensiepas 2 ; G&D Convego Join 4.01 40k/80k ; G&D SkySIM Hercules ; G&D SkySIM Scorpius ; G&D Sm@rtCaf Expert 3.2 ; G&D Sm@rtCaf Expert 4.0 ; G&D Sm@rtCaf Expert 5.0 ; G&D Sm@rtCaf Expert 6.0 ; G&D Sm@rtCaf Expert 7.0 ; G&D Sm@rtCaf Expert 64 ; Gemalto Desineo ICP D72 FXR1 Java ; Gemalto IDCore 30 ; Gemalto MultiApp ID v2.1 ; Gemalto Optelio D72 FR1 ; Gemalto TOP DL v2 ; Infineon Oracle JCOS Ed.1 ; JCOP21 v2.3 ; Morpho IDealCitiz v2.1 ; Morpho JMV ProCL V3.0 ; NXP J2A080 / J2A081 (JCOP 2.4.1 R3) ; NXP JD081 (JCOP 2.4.1 R3) ; NXP J3A080 (JCOP 2.4.1 R3) ; NXP JCOP 2.4.2 R3 ; NXP JCOP 3 SecID P60 ; Oberthur IDOne Cosmo v7.0 ; RDW ABR kaart ; Rijkspas ; Rijkspas 2 ; Sagem YpsID s2 ; Sagem YpsID s3 ; StarSign Crypto USB Token S ; Swissbit PS-100u SE ; UZI-pas ; UZI-pas 2 CkPkcs11::setCkSharedLibPath(pkcs11, "aetpkss1.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) ; 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 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 ; Make it an authenticated session by calling Login. ; The smart card PIN is passed to the Login method. ; The user type can be one of three choices: ; 0 - Security Officer ; 1 - Normal User ; 2 - Context Specific. ; You'll likely always login as the Normal User. userType.i = 1 pin.s = "0000" success = CkPkcs11::ckLogin(pkcs11,userType,pin) If success = 0 Debug CkPkcs11::ckLastErrorText(pkcs11) success = CkPkcs11::ckCloseSession(pkcs11) CkPkcs11::ckDispose(pkcs11) CkJsonObject::ckDispose(json) ProcedureReturn EndIf ; Do what is needed with the authenticated session... ; ... ; ... ; Revert to an unauthenticated session by calling Logout. success = CkPkcs11::ckLogout(pkcs11) If success = 0 Debug CkPkcs11::ckLastErrorText(pkcs11) success = CkPkcs11::ckCloseSession(pkcs11) CkPkcs11::ckDispose(pkcs11) CkJsonObject::ckDispose(json) ProcedureReturn EndIf ; 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 Login and Logout successfully demonstrated." CkPkcs11::ckDispose(pkcs11) CkJsonObject::ckDispose(json) ProcedureReturn EndProcedure |
© 2000-2023 Chilkat Software, Inc. All Rights Reserved.