Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 20 additions & 14 deletions pynitrokey/fido2/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,36 @@
import sys
import tempfile
import time
from typing import Optional, Tuple, Union
from typing import Callable, Optional, Tuple, Union

from fido2.ctap import CtapError
from fido2.ctap1 import Ctap1
from fido2.ctap2.base import Ctap2
from fido2.hid import CTAPHID, CtapHidDevice, open_device
from fido2.hid import CTAPHID, CtapHidDevice, HidDescriptor, list_descriptors, open_connection, open_device
from intelhex import IntelHex

import pynitrokey.exceptions
from pynitrokey import helpers
from pynitrokey.fido2.commands import SoloBootloader, SoloExtension
from pynitrokey.helpers import local_critical

VIDPID = [(0x0483, 0xA2CA), #
(0x20A0, 0x42B3), # ...
(0x20A0, 0x42B1) # NK FIDO2
]

def list_ctaphid_devices() -> list[CtapHidDevice]:
hid_devices = list(CtapHidDevice.list_devices())
def list_ctaphid_descriptors() -> list[HidDescriptor]:
return [
d
for d in hid_devices
if (d.descriptor.vid, d.descriptor.pid)
in [
(0x0483, 0xA2CA), #
(0x20A0, 0x42B3), # ...
(0x20A0, 0x42B1), # NK FIDO2
]
desc
for desc in list_descriptors()
if (desc.vid, desc.pid) in VIDPID
]

def list_ctaphid_devices() -> list[CtapHidDevice]:
return [
CtapHidDevice(desc, open_connection(desc))
for desc in list_ctaphid_descriptors()
]

class NKFido2Client:
def __init__(self) -> None:
Expand Down Expand Up @@ -69,8 +72,11 @@ def find_device(
solo_serial = solo_serial.split("=")[1]
found_dev = open_device(solo_serial)
else:
devices = list_ctaphid_devices()
devices = [d for d in devices if d.descriptor.serial_number == solo_serial]
devices = [
CtapHidDevice(desc, open_connection(desc))
for desc in list_ctaphid_descriptors()
if desc.serial_number == solo_serial
]
else:
devices = list_ctaphid_devices()
if len(devices) > 1:
Expand Down