Esempio n. 1
0
        /// <summary>
        /// Obtains a list of slots in the system
        /// </summary>
        /// <param name="slotsType">Type of slots to be obtained</param>
        /// <returns>List of available slots</returns>
        public List <ISlot> GetSlotList(SlotsType slotsType)
        {
            if (this._disposed)
            {
                throw new ObjectDisposedException(this.GetType().FullName);
            }

            _logger.Debug("Pkcs11({0})::GetSlotList", _libraryPath);

            NativeULong slotCount = 0;
            CKR         rv        = _p11.C_GetSlotList((slotsType == SlotsType.WithTokenPresent), null, ref slotCount);

            if (rv != CKR.CKR_OK)
            {
                throw new Pkcs11Exception("C_GetSlotList", rv);
            }

            if (slotCount == 0)
            {
                return(new List <ISlot>());
            }
            else
            {
                NativeULong[] slotList = new NativeULong[slotCount];
                rv = _p11.C_GetSlotList((slotsType == SlotsType.WithTokenPresent), slotList, ref slotCount);
                if (rv != CKR.CKR_OK)
                {
                    throw new Pkcs11Exception("C_GetSlotList", rv);
                }

                if (slotList.Length != ConvertUtils.UInt64ToInt32(slotCount))
                {
                    Array.Resize(ref slotList, ConvertUtils.UInt64ToInt32(slotCount));
                }

                List <ISlot> list = new List <ISlot>();
                foreach (NativeULong slot in slotList)
                {
                    list.Add(_factories.SlotFactory.CreateSlot(_factories, _p11, slot));
                }

                return(list);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Obtains a list of slots in the system
        /// </summary>
        /// <param name="tokenPresent">Flag indicating whether the list obtained includes only those slots with a token present (true), or all slots (false)</param>
        /// <returns>List of available slots</returns>
        public List <Slot> GetSlotList(bool tokenPresent)
        {
            if (this._disposed)
            {
                throw new ObjectDisposedException(this.GetType().FullName);
            }

            ulong slotCount = 0;
            CKR   rv        = _p11.C_GetSlotList(tokenPresent, null, ref slotCount);

            if (rv != CKR.CKR_OK)
            {
                throw new Pkcs11Exception("C_GetSlotList", rv);
            }

            if (slotCount == 0)
            {
                return(new List <Slot>());
            }
            else
            {
                ulong[] slotList = new ulong[slotCount];
                rv = _p11.C_GetSlotList(tokenPresent, slotList, ref slotCount);
                if (rv != CKR.CKR_OK)
                {
                    throw new Pkcs11Exception("C_GetSlotList", rv);
                }

                if (slotList.Length != Convert.ToInt32(slotCount))
                {
                    Array.Resize(ref slotList, Convert.ToInt32(slotCount));
                }

                List <Slot> list = new List <Slot>();
                foreach (ulong slot in slotList)
                {
                    list.Add(new Slot(_p11, slot));
                }

                return(list);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Obtains a list of slots in the system
        /// </summary>
        /// <param name="slotsType">Type of slots to be obtained</param>
        /// <returns>List of available slots</returns>
        public List <Slot> GetSlotList(SlotsType slotsType)
        {
            if (this._disposed)
            {
                throw new ObjectDisposedException(this.GetType().FullName);
            }

            NativeULong slotCount = 0;
            CKR         rv        = _p11.C_GetSlotList((slotsType == SlotsType.WithTokenPresent), null, ref slotCount);

            if (rv != CKR.CKR_OK)
            {
                throw new Pkcs11Exception("C_GetSlotList", rv);
            }

            if (slotCount == 0)
            {
                return(new List <Slot>());
            }
            else
            {
                NativeULong[] slotList = new NativeULong[slotCount];
                rv = _p11.C_GetSlotList((slotsType == SlotsType.WithTokenPresent), slotList, ref slotCount);
                if (rv != CKR.CKR_OK)
                {
                    throw new Pkcs11Exception("C_GetSlotList", rv);
                }

                if (slotList.Length != NativeLongUtils.ConvertToInt32(slotCount))
                {
                    Array.Resize(ref slotList, NativeLongUtils.ConvertToInt32(slotCount));
                }

                List <Slot> list = new List <Slot>();
                foreach (NativeULong slot in slotList)
                {
                    list.Add(new Slot(_p11, slot));
                }

                return(list);
            }
        }