/// <summary> /// Checks whether PKCS#11 library information matches PKCS#11 URI /// </summary> /// <param name="pkcs11Uri">PKCS#11 URI</param> /// <param name="libraryInfo">PKCS#11 library information</param> /// <returns>True if PKCS#11 library information matches PKCS#11 URI</returns> public static bool Matches(Pkcs11Uri pkcs11Uri, HLA.LibraryInfo libraryInfo) { if (pkcs11Uri == null) throw new ArgumentNullException("pkcs11Uri"); if (libraryInfo == null) throw new ArgumentNullException("libraryInfo"); return Matches(pkcs11Uri, libraryInfo.ManufacturerId, libraryInfo.LibraryDescription, libraryInfo.LibraryVersion); }
/// <summary> /// Obtains a list of all PKCS#11 URI matching slots /// </summary> /// <param name="pkcs11Uri">PKCS#11 URI</param> /// <param name="pkcs11">High level PKCS#11 wrapper</param> /// <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 slots matching PKCS#11 URI</returns> public static List<HLA.Slot> GetMatchingSlotList(Pkcs11Uri pkcs11Uri, HLA.Pkcs11 pkcs11, bool tokenPresent) { if (pkcs11Uri == null) throw new ArgumentNullException("pkcs11Uri"); if (pkcs11 == null) throw new ArgumentNullException("pkcs11"); List<HLA.Slot> matchingSlots = new List<HLA.Slot>(); HLA.LibraryInfo libraryInfo = pkcs11.GetInfo(); if (!Matches(pkcs11Uri, libraryInfo)) return matchingSlots; List<HLA.Slot> slots = pkcs11.GetSlotList(false); if ((slots == null) || (slots.Count == 0)) return slots; foreach (HLA.Slot slot in slots) { HLA.SlotInfo slotInfo = slot.GetSlotInfo(); if (Matches(pkcs11Uri, slotInfo)) { if (slotInfo.SlotFlags.TokenPresent) { HLA.TokenInfo tokenInfo = slot.GetTokenInfo(); if (Matches(pkcs11Uri, tokenInfo)) matchingSlots.Add(slot); } else { if (!tokenPresent && Matches(pkcs11Uri, null, null, null, null)) matchingSlots.Add(slot); } } } return matchingSlots; }
/// <summary> /// Checks whether token information matches PKCS#11 URI /// </summary> /// <param name="pkcs11Uri">PKCS#11 URI</param> /// <param name="tokenInfo">Token information</param> /// <returns>True if token information matches PKCS#11 URI</returns> public static bool Matches(Pkcs11Uri pkcs11Uri, HLA.TokenInfo tokenInfo) { if (pkcs11Uri == null) throw new ArgumentNullException("pkcs11Uri"); if (tokenInfo == null) throw new ArgumentNullException("tokenInfo"); return Matches(pkcs11Uri, tokenInfo.Label, tokenInfo.ManufacturerId, tokenInfo.SerialNumber, tokenInfo.Model); }
/// <summary> /// Checks whether slot information matches PKCS#11 URI /// </summary> /// <param name="pkcs11Uri">PKCS#11 URI</param> /// <param name="slotInfo">Slot information</param> /// <returns>True if slot information matches PKCS#11 URI</returns> public static bool Matches(Pkcs11Uri pkcs11Uri, HLA.SlotInfo slotInfo) { if (pkcs11Uri == null) throw new ArgumentNullException("pkcs11Uri"); if (slotInfo == null) throw new ArgumentNullException("slotInfo"); return Matches(pkcs11Uri, slotInfo.ManufacturerId, slotInfo.SlotDescription, slotInfo.SlotId); }