public static void LoginIfRequired(CK_SLOT_ID slotId) { try { CK_SESSION_INFO session_info = GetSessionInfo(); CK_TOKEN_INFO token_info = GetTokenInfo(slotId); if ((token_info.flags & CKF_LOGIN_REQUIRED) == CKF_LOGIN_REQUIRED) { if ((token_info.flags & CKF_PROTECTED_AUTHENTICATION_PATH) == CKF_PROTECTED_AUTHENTICATION_PATH) { Login(); } else { CkpPromtForm dialog = new CkpPromtForm(); if (UIUtil.ShowDialogAndDestroy(dialog) != DialogResult.OK) { return; } Login(dialog.pin); } } } catch (Exception) { throw; } }
/// <summary> /// Converts low level CK_SESSION_INFO structure to high level SessionInfo class /// </summary> /// <param name="sessionId">PKCS#11 handle of session</param> /// <param name="ck_session_info">Low level CK_SESSION_INFO structure</param> protected internal SessionInfo(NativeULong sessionId, CK_SESSION_INFO ck_session_info) { _sessionId = sessionId; _slotId = ck_session_info.SlotId; _state = (CKS)ck_session_info.State; _sessionFlags = new SessionFlags(ck_session_info.Flags); _deviceError = ck_session_info.DeviceError; }
public static CK_SESSION_INFO GetSessionInfo() { CK_SESSION_INFO info = new CK_SESSION_INFO(); if ((rv = get_session_info(session, ref info)) != (int)ReturnValues.CKR_OK) { throw new Exception("Can't get information of session - Error: " + Enum.GetName(typeof(ReturnValues), rv)); } return(info); }
public void _03_SessionInfoTest() { if (Platform.UnmanagedLongSize != 8 || Platform.StructPackingSize != 0) { Assert.Inconclusive("Test cannot be executed on this platform"); } CKR rv = CKR.CKR_OK; using (Pkcs11 pkcs11 = new Pkcs11(Settings.Pkcs11LibraryPath)) { rv = pkcs11.C_Initialize(Settings.InitArgs80); if ((rv != CKR.CKR_OK) && (rv != CKR.CKR_CRYPTOKI_ALREADY_INITIALIZED)) { Assert.Fail(rv.ToString()); } // Find first slot with token present ulong slotId = Helpers.GetUsableSlot(pkcs11); // Open RO (read-only) session ulong session = CK.CK_INVALID_HANDLE; rv = pkcs11.C_OpenSession(slotId, CKF.CKF_SERIAL_SESSION, IntPtr.Zero, IntPtr.Zero, ref session); if (rv != CKR.CKR_OK) { Assert.Fail(rv.ToString()); } CK_SESSION_INFO sessionInfo = new CK_SESSION_INFO(); rv = pkcs11.C_GetSessionInfo(session, ref sessionInfo); if (rv != CKR.CKR_OK) { Assert.Fail(rv.ToString()); } // Do something interesting with session info Assert.IsTrue(sessionInfo.SlotId == slotId); rv = pkcs11.C_CloseAllSessions(slotId); if (rv != CKR.CKR_OK) { Assert.Fail(rv.ToString()); } rv = pkcs11.C_Finalize(IntPtr.Zero); if (rv != CKR.CKR_OK) { Assert.Fail(rv.ToString()); } } }
public void _03_SessionInfoTest() { Helpers.CheckPlatform(); CKR rv = CKR.CKR_OK; using (Pkcs11Library pkcs11Library = new Pkcs11Library(Settings.Pkcs11LibraryPath)) { rv = pkcs11Library.C_Initialize(Settings.InitArgs80); if ((rv != CKR.CKR_OK) && (rv != CKR.CKR_CRYPTOKI_ALREADY_INITIALIZED)) { Assert.Fail(rv.ToString()); } // Find first slot with token present NativeULong slotId = Helpers.GetUsableSlot(pkcs11Library); // Open RO (read-only) session NativeULong session = CK.CK_INVALID_HANDLE; rv = pkcs11Library.C_OpenSession(slotId, CKF.CKF_SERIAL_SESSION, IntPtr.Zero, IntPtr.Zero, ref session); if (rv != CKR.CKR_OK) { Assert.Fail(rv.ToString()); } CK_SESSION_INFO sessionInfo = new CK_SESSION_INFO(); rv = pkcs11Library.C_GetSessionInfo(session, ref sessionInfo); if (rv != CKR.CKR_OK) { Assert.Fail(rv.ToString()); } // Do something interesting with session info Assert.IsTrue(sessionInfo.SlotId == slotId); rv = pkcs11Library.C_CloseAllSessions(slotId); if (rv != CKR.CKR_OK) { Assert.Fail(rv.ToString()); } rv = pkcs11Library.C_Finalize(IntPtr.Zero); if (rv != CKR.CKR_OK) { Assert.Fail(rv.ToString()); } } }