summaryrefslogtreecommitdiff
path: root/security/py-yubikey-manager/patches/patch-ykman_descriptor.py
blob: 4370420ecb47ac673a1358e3f87cf6e0705cc3ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$NetBSD: patch-ykman_descriptor.py,v 1.2 2020/08/18 13:37:50 riastradh Exp $

Enumerate uhidevs in case they are not available as ugen.

--- ykman/descriptor.py.orig	2020-01-29 07:32:03.000000000 +0000
+++ ykman/descriptor.py
@@ -75,6 +75,8 @@ class Descriptor(object):
 
     @property
     def name(self):
+        if self.version is None:
+            return self.key_type.value
         if self.key_type == YUBIKEY.SKY and self.version < (5, 0, 0):
             return 'FIDO U2F Security Key'
         elif self.key_type == YUBIKEY.YK4 and self.version >= (5, 0, 0):
@@ -132,7 +134,8 @@ class Descriptor(object):
     @classmethod
     def from_driver(cls, driver):
         fp = (driver.key_type, driver.mode)
-        return cls(driver.key_type, driver.mode, None, fp)
+        version = driver.read_version()
+        return cls(driver.key_type, driver.mode, version, fp)
 
 
 def _gen_descriptors():
@@ -145,6 +148,13 @@ def _gen_descriptors():
             desc = Descriptor.from_usb(dev, backend)
             if desc:
                 yield desc
+    # No generic USB devices found, but there may be some USB HID
+    # devices available only as such and not as generic USB devices.
+    if not found:
+        for d in _list_drivers(TRANSPORT.OTP | TRANSPORT.FIDO):
+            desc = Descriptor.from_driver(d)
+            if desc:
+                yield desc
 
 
 def get_descriptors():