public void _03_SlotInfoMatches() { Helpers.CheckPlatform(); // Empty URI Pkcs11Uri pkcs11uri = new Pkcs11Uri(@"pkcs11:"); CK_SLOT_INFO slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); NativeULong slotId = 1; Assert.IsTrue(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Empty attribute pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes(" "); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 1; Assert.IsTrue(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Unknown path attribute in URI pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1;foo=bar"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 1; Assert.IsFalse(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // All attributes matching pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 1; Assert.IsTrue(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Manufacturer nonmatching pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("bar"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 1; Assert.IsFalse(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Description nonmatching pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("foo"); slotId = 1; Assert.IsFalse(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Slot id nonmatching pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 2; Assert.IsFalse(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); }
public void _03_SlotInfoMatches() { if (Platform.UnmanagedLongSize != 4 || Platform.StructPackingSize != 0) { Assert.Inconclusive("Test cannot be executed on this platform"); } // Empty URI Pkcs11Uri pkcs11uri = new Pkcs11Uri(@"pkcs11:"); CK_SLOT_INFO slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); uint slotId = 1; Assert.IsTrue(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Empty attribute pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes(" "); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 1; Assert.IsTrue(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Unknown path attribute in URI pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1;foo=bar"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 1; Assert.IsFalse(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // All attributes matching pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 1; Assert.IsTrue(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Manufacturer nonmatching pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("bar"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 1; Assert.IsFalse(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Description nonmatching pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("foo"); slotId = 1; Assert.IsFalse(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); // Slot id nonmatching pkcs11uri = new Pkcs11Uri(@"pkcs11:slot-manufacturer=foo;slot-description=bar;slot-id=1"); slotInfo = new CK_SLOT_INFO(); slotInfo.ManufacturerId = ConvertUtils.Utf8StringToBytes("foo"); slotInfo.SlotDescription = ConvertUtils.Utf8StringToBytes("bar"); slotId = 2; Assert.IsFalse(Pkcs11UriUtils.Matches(pkcs11uri, slotInfo, slotId)); }
public void _06_GetMatchingSlotList() { Helpers.CheckPlatform(); using (Pkcs11 pkcs11 = new Pkcs11(Settings.Pkcs11LibraryPath)) { CKR rv = pkcs11.C_Initialize(Settings.InitArgs80); Assert.IsTrue(rv == CKR.CKR_OK); // Get all slots NativeULong allSlotsCount = 0; rv = pkcs11.C_GetSlotList(true, null, ref allSlotsCount); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(allSlotsCount > 0); NativeULong[] allSlots = new NativeULong[allSlotsCount]; rv = pkcs11.C_GetSlotList(true, allSlots, ref allSlotsCount); Assert.IsTrue(rv == CKR.CKR_OK); // Empty URI Pkcs11Uri pkcs11uri = new Pkcs11Uri(@"pkcs11:"); NativeULong[] matchedSlots = null; rv = Pkcs11UriUtils.GetMatchingSlotList(pkcs11uri, pkcs11, true, out matchedSlots); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(matchedSlots.Length == allSlots.Length); // Unknown path attribute in URI pkcs11uri = new Pkcs11Uri(@"pkcs11:vendor=foobar"); rv = Pkcs11UriUtils.GetMatchingSlotList(pkcs11uri, pkcs11, true, out matchedSlots); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(matchedSlots.Length == 0); // All attributes matching one slot CK_INFO libraryInfo = new CK_INFO(); rv = pkcs11.C_GetInfo(ref libraryInfo); Assert.IsTrue(rv == CKR.CKR_OK); CK_SLOT_INFO slotInfo = new CK_SLOT_INFO(); rv = pkcs11.C_GetSlotInfo(allSlots[0], ref slotInfo); Assert.IsTrue(rv == CKR.CKR_OK); CK_TOKEN_INFO tokenInfo = new CK_TOKEN_INFO(); rv = pkcs11.C_GetTokenInfo(allSlots[0], ref tokenInfo); Assert.IsTrue(rv == CKR.CKR_OK); Pkcs11UriBuilder pkcs11UriBuilder = new Pkcs11UriBuilder(); pkcs11UriBuilder.LibraryManufacturer = ConvertUtils.BytesToUtf8String(libraryInfo.ManufacturerId, true); pkcs11UriBuilder.LibraryDescription = ConvertUtils.BytesToUtf8String(libraryInfo.LibraryDescription, true); pkcs11UriBuilder.LibraryVersion = libraryInfo.LibraryVersion.ToString(); pkcs11UriBuilder.SlotManufacturer = ConvertUtils.BytesToUtf8String(slotInfo.ManufacturerId, true); pkcs11UriBuilder.SlotDescription = ConvertUtils.BytesToUtf8String(slotInfo.SlotDescription, true); pkcs11UriBuilder.SlotId = allSlots[0]; pkcs11UriBuilder.Token = ConvertUtils.BytesToUtf8String(tokenInfo.Label, true); pkcs11UriBuilder.Manufacturer = ConvertUtils.BytesToUtf8String(tokenInfo.ManufacturerId, true); pkcs11UriBuilder.Serial = ConvertUtils.BytesToUtf8String(tokenInfo.SerialNumber, true); pkcs11UriBuilder.Model = ConvertUtils.BytesToUtf8String(tokenInfo.Model, true); pkcs11uri = pkcs11UriBuilder.ToPkcs11Uri(); rv = Pkcs11UriUtils.GetMatchingSlotList(pkcs11uri, pkcs11, true, out matchedSlots); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(matchedSlots.Length == 1); // One attribute nonmatching pkcs11UriBuilder.Serial = "foobar"; pkcs11uri = pkcs11UriBuilder.ToPkcs11Uri(); rv = Pkcs11UriUtils.GetMatchingSlotList(pkcs11uri, pkcs11, true, out matchedSlots); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(matchedSlots.Length == 0); rv = pkcs11.C_Finalize(IntPtr.Zero); Assert.IsTrue(rv == CKR.CKR_OK); } }
public void _06_GetMatchingSlotList() { if (Platform.UnmanagedLongSize != 4 || Platform.StructPackingSize != 1) { Assert.Inconclusive("Test cannot be executed on this platform"); } using (Pkcs11 pkcs11 = new Pkcs11(Settings.Pkcs11LibraryPath, Settings.UseOsLocking)) { CKR rv = pkcs11.C_Initialize(Settings.InitArgs41); Assert.IsTrue(rv == CKR.CKR_OK); // Get all slots uint allSlotsCount = 0; rv = pkcs11.C_GetSlotList(true, null, ref allSlotsCount); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(allSlotsCount > 0); uint[] allSlots = new uint[allSlotsCount]; rv = pkcs11.C_GetSlotList(true, allSlots, ref allSlotsCount); Assert.IsTrue(rv == CKR.CKR_OK); // Empty URI Pkcs11Uri pkcs11uri = new Pkcs11Uri(@"pkcs11:"); uint[] matchedSlots = null; rv = Pkcs11UriUtils.GetMatchingSlotList(pkcs11uri, pkcs11, true, out matchedSlots); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(matchedSlots.Length == allSlots.Length); // Unknown path attribute in URI pkcs11uri = new Pkcs11Uri(@"pkcs11:vendor=foobar"); rv = Pkcs11UriUtils.GetMatchingSlotList(pkcs11uri, pkcs11, true, out matchedSlots); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(matchedSlots.Length == 0); // All attributes matching one slot CK_INFO libraryInfo = new CK_INFO(); rv = pkcs11.C_GetInfo(ref libraryInfo); Assert.IsTrue(rv == CKR.CKR_OK); CK_SLOT_INFO slotInfo = new CK_SLOT_INFO(); rv = pkcs11.C_GetSlotInfo(allSlots[0], ref slotInfo); Assert.IsTrue(rv == CKR.CKR_OK); CK_TOKEN_INFO tokenInfo = new CK_TOKEN_INFO(); rv = pkcs11.C_GetTokenInfo(allSlots[0], ref tokenInfo); Assert.IsTrue(rv == CKR.CKR_OK); Pkcs11UriBuilder pkcs11UriBuilder = new Pkcs11UriBuilder(); pkcs11UriBuilder.LibraryManufacturer = ConvertUtils.BytesToUtf8String(libraryInfo.ManufacturerId, true); pkcs11UriBuilder.LibraryDescription = ConvertUtils.BytesToUtf8String(libraryInfo.LibraryDescription, true); pkcs11UriBuilder.LibraryVersion = libraryInfo.LibraryVersion.ToString(); pkcs11UriBuilder.SlotManufacturer = ConvertUtils.BytesToUtf8String(slotInfo.ManufacturerId, true); pkcs11UriBuilder.SlotDescription = ConvertUtils.BytesToUtf8String(slotInfo.SlotDescription, true); pkcs11UriBuilder.SlotId = allSlots[0]; pkcs11UriBuilder.Token = ConvertUtils.BytesToUtf8String(tokenInfo.Label, true); pkcs11UriBuilder.Manufacturer = ConvertUtils.BytesToUtf8String(tokenInfo.ManufacturerId, true); pkcs11UriBuilder.Serial = ConvertUtils.BytesToUtf8String(tokenInfo.SerialNumber, true); pkcs11UriBuilder.Model = ConvertUtils.BytesToUtf8String(tokenInfo.Model, true); pkcs11uri = pkcs11UriBuilder.ToPkcs11Uri(); rv = Pkcs11UriUtils.GetMatchingSlotList(pkcs11uri, pkcs11, true, out matchedSlots); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(matchedSlots.Length == 1); // One attribute nonmatching pkcs11UriBuilder.Serial = "foobar"; pkcs11uri = pkcs11UriBuilder.ToPkcs11Uri(); rv = Pkcs11UriUtils.GetMatchingSlotList(pkcs11uri, pkcs11, true, out matchedSlots); Assert.IsTrue(rv == CKR.CKR_OK); Assert.IsTrue(matchedSlots.Length == 0); rv = pkcs11.C_Finalize(IntPtr.Zero); Assert.IsTrue(rv == CKR.CKR_OK); } }