Yubico / Yubico.NET.SDK

A YubiKey SDK for .NET developers
Apache License 2.0
96 stars 48 forks source link

YubiKeyTestApp error #21

Closed avelrl closed 1 year ago

avelrl commented 1 year ago

Hi I try to run an YubiKeyTestApp and get an error

YubiKey Manager worked YubiKey 5C NFC Firmware: 5.2.7

ProductName: macOS ProductVersion: 12.5.1 BuildVersion: 21G83

dotnet --list-sdks
6.0.400 [/usr/local/share/dotnet/sdk]

./YubiKeyTestApp -v -plugin Enumeration
Parsing command line parameters [-v, -plugin, Enumeration].
Parsed parameter name[v], value[]
Processing [v] with value []...Property [v] set.
Parsed parameter name[plugin], value[Enumeration]
Processing [plugin] with value [Enumeration]...Property [plugin] set.
Plugin [Enumeration] specified.
Calling plugin's HandleParameters method.Calling plugins Execute() method.
YubiKey Enumeration Options
1. All keys
2. HID Keyboard
3. HID FIDO
4. USB SmartCard
5. NFC SmartCard
6. All SmartCard

Select an option, or any other key to exit: 1

Getting keys...
Unhandled exception. System.InvalidOperationException: Nullable object must have a value.
   at System.Nullable`1.get_Value()
   at Yubico.Core.Devices.Hid.IOKitHelpers.GetIntPropertyValue(IntPtr device, String propertyName) in /Users/avel/Projects/Yubico.NET.SDK/Yubico.Core/src/Yubico/Core/Devices/Hid/IOKitHelpers.cs:line 55
   at Yubico.Core.Devices.Hid.MacOSHidDevice.<>c.<GetList>b__3_0(IntPtr device) in /Users/avel/Projects/Yubico.NET.SDK/Yubico.Core/src/Yubico/Core/Devices/Hid/MacOSHidDevice.cs:line 73
   at System.Linq.Enumerable.SelectArrayIterator`2.ToList()
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Yubico.Core.Devices.Hid.MacOSHidDevice.GetList() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.Core/src/Yubico/Core/Devices/Hid/MacOSHidDevice.cs:line 72
   at Yubico.Core.Devices.Hid.HidDevice.GetHidDevices() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.Core/src/Yubico/Core/Devices/Hid/HidDevice.cs:line 130
   at Yubico.YubiKey.YubiKeyDeviceListener.GetHidKeyboardDevices() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceListener.cs:line 296
   at Yubico.YubiKey.YubiKeyDeviceListener.GetDevices() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceListener.cs:line 201
   at Yubico.YubiKey.YubiKeyDeviceListener.Update() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceListener.cs:line 126
   at Yubico.YubiKey.YubiKeyDeviceListener..ctor() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceListener.cs:line 68
   at Yubico.YubiKey.YubiKeyDeviceListener.<>c.<.cctor>b__36_0() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceListener.cs:line 48
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
   at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.get_Value()
   at Yubico.YubiKey.YubiKeyDeviceListener.get_Instance() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceListener.cs:line 45
   at Yubico.YubiKey.YubiKeyDevice.FindByTransport(Transport transport) in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDevice.Static.cs:line 95
   at Yubico.YubiKey.TestUtilities.IntegrationTestDeviceEnumeration.GetTestDevices(Transport transport) in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/tests/utilities/Yubico/YubiKey/TestUtilities/IntegrationTestDeviceEnumeration.cs:line 67
   at Yubico.YubiKey.TestApp.Plugins.EnumeratePlugin.OutputDevices(Transport transport) in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/tests/sandbox/Plugins/EnumeratePlugin.cs:line 75
   at Yubico.YubiKey.TestApp.Plugins.EnumeratePlugin.Interactive() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/tests/sandbox/Plugins/EnumeratePlugin.cs:line 130
   at Yubico.YubiKey.TestApp.Plugins.EnumeratePlugin.Execute() in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/tests/sandbox/Plugins/EnumeratePlugin.cs:line 53
   at Yubico.YubiKey.TestApp.Program.Execute(String[] args) in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/tests/sandbox/Program.cs:line 133
   at Yubico.YubiKey.TestApp.Program.Main(String[] args) in /Users/avel/Projects/Yubico.NET.SDK/Yubico.YubiKey/tests/sandbox/Program.cs:line 62
zsh: abort      ./YubiKeyTestApp -v -plugin Enumeration

My example doesn't work too

IEnumerable<IYubiKeyDevice> list = YubiKeyDevice.FindByTransport(Transport.All); <- the same exception
var yKey = list.First();

using (OtpSession otp = new OtpSession(yKey))
{
    // The challenge, hmacChal, has been set elsewhere.
    string result = otp.CalculateChallengeResponse(Slot.ShortPress)
      .UseTotp()
      .UseTouchNotifier(() => Console.WriteLine("Touch the key."))
      .GetCode(6);
}
GregDomzalski commented 1 year ago

There is a known issue on Apple Silicon (M1/M2) Macs. It may affect some Intel Macs as well. We will be issuing a fix for this later in the week. Thanks for the detailed bug report!

GregDomzalski commented 1 year ago

Hi @avelrl - a fix for this was issued in yesterday's 1.4.1 release. Can you please update your repo to the latest on the main branch to see if this has been resolved for you?

GregDomzalski commented 1 year ago

I believe the issue to be resolved now. If you are still encountering this after upgrading to the 1.4.1 release, please feel free to reactivate.