From f70d97c1fa159abd4ca3e6de386f81ae5fb4f2d6 Mon Sep 17 00:00:00 2001 From: Aaron Fortner Date: Wed, 6 Nov 2024 17:29:12 -0800 Subject: [PATCH 1/2] Set IsSkySeries on the combined info object in YubiKeyDeviceInfo.Merge --- Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs b/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs index 2ed341faf..a09979ba0 100644 --- a/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs +++ b/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs @@ -299,6 +299,7 @@ internal YubiKeyDeviceInfo Merge(YubiKeyDeviceInfo? second) ResetBlocked = ResetBlocked | second.ResetBlocked, SerialNumber = SerialNumber ?? second.SerialNumber, IsFipsSeries = IsFipsSeries || second.IsFipsSeries, + IsSkySeries = IsSkySeries || second.IsSkySeries, FormFactor = FormFactor != FormFactor.Unknown ? FormFactor From b6d9cbf91d07a1435c19f404a9d7a23abc569288 Mon Sep 17 00:00:00 2001 From: Aaron Fortner Date: Thu, 7 Nov 2024 10:03:02 -0800 Subject: [PATCH 2/2] Add YubiKeyDeviceListener test for IsSkySeries merge fix --- .../YubiKey/YubiKeyDeviceListenerTests.cs | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Yubico.YubiKey/tests/integration/Yubico/YubiKey/YubiKeyDeviceListenerTests.cs diff --git a/Yubico.YubiKey/tests/integration/Yubico/YubiKey/YubiKeyDeviceListenerTests.cs b/Yubico.YubiKey/tests/integration/Yubico/YubiKey/YubiKeyDeviceListenerTests.cs new file mode 100644 index 000000000..6e5c049f7 --- /dev/null +++ b/Yubico.YubiKey/tests/integration/Yubico/YubiKey/YubiKeyDeviceListenerTests.cs @@ -0,0 +1,58 @@ +// Copyright 2024 Yubico AB +// +// Licensed under the Apache License, Version 2.0 (the "License"). +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Threading; +using Xunit; +using Yubico.PlatformInterop; +using Yubico.YubiKey.TestUtilities; + +namespace Yubico.YubiKey +{ + [Trait(TraitTypes.Category, TestCategories.Elevated)] + public class YubiKeyDeviceListenerTests + { + private IYubiKeyDevice WaitForDevice() + { + IYubiKeyDevice? device = null; + + AutoResetEvent reset = new AutoResetEvent(false); + EventHandler handler = (sender, args) => + { + device = args.Device; + reset.Set(); + }; + + YubiKeyDeviceListener.Instance.Arrived += handler; + reset.WaitOne(); + YubiKeyDeviceListener.Instance.Arrived -= handler; + + Assert.NotNull(device); + return device; + } + + [Fact] + public void KeyArrived_SkyEe_IsSkySeriesIsTrue() + { + // Needs to run elevated so the listener finds and enumerates any hidFido + // devices else no Merge will happen, and it won't be a valid test + // See https://github.com/Yubico/Yubico.NET.SDK/issues/156 + Assert.True(SdkPlatformInfo.IsElevated); + + IYubiKeyDevice device = WaitForDevice(); + + Assert.True(device.IsSkySeries); + } + } +}