Exemple #1
0
        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;
            }
        }
Exemple #2
0
 /// <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;
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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());
                }
            }
        }
Exemple #5
0
        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());
                }
            }
        }