Interleave sending and receiving of packets to reduce rx latency (#515)
* Interleave sending and receiving of packets to reduce latency in receiving of packets * Add patch to CtapUsbSyscallDriver * Minor tweaks from review * Log when overwritting an existing reply * Only log when 'debug_ctap' is enabled * Make ctap mod public, as per review * Rename send_or_recv to send_and_maybe_recv * fix typo * Don't process packets on other transport while doing keepalive * Don't process packets on other transport while doing keepalive * More accurately determine if reply has finished * Move comment closer to appropriate location * Add tests for canceling keepalive packets * Added a TODO for kaczmarczyck re ctap module being public * remove the unnecessary sleep()s * undo messed up commit * address pylint warnings * Fix merge mess up, and patch fido2 Usage Page * Fix up completely borked merge * Remove patch to FIDO usage, after #523. * remove obsolete aspects to diff Co-authored-by: kaczmarczyck <43844792+kaczmarczyck@users.noreply.github.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
"""These tests verify the functionality of the VendorHID interface."""
|
||||
import fido2
|
||||
from fido2 import ctap
|
||||
from fido2.hid import CtapHidDevice
|
||||
from fido2.hid.base import CtapHidConnection
|
||||
@@ -8,6 +9,7 @@ import hid
|
||||
import time
|
||||
from typing import Dict, Iterable
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
_OPENSK_VID = 0x1915
|
||||
_OPENSK_PID = 0x521F
|
||||
@@ -278,6 +280,12 @@ def get_fido_device() -> CtapHidDevice:
|
||||
raise Exception('Unable to find Fido device')
|
||||
|
||||
|
||||
def get_fido_device_vendor() -> CtapHidDevice:
|
||||
# Patch for the Vendor Usage Page.
|
||||
with patch.object(fido2.hid.base, 'FIDO_USAGE_PAGE', 0xFF00):
|
||||
return get_fido_device()
|
||||
|
||||
|
||||
class CliInteraction(UserInteraction):
|
||||
"""Sends cancel messages while prompting user."""
|
||||
|
||||
@@ -306,6 +314,7 @@ class CancelTests(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.fido = get_fido_device()
|
||||
cls.vendor = get_fido_device_vendor()
|
||||
|
||||
def setUp(self) -> None:
|
||||
super().setUp()
|
||||
@@ -348,6 +357,21 @@ class CancelTests(unittest.TestCase):
|
||||
self.assertEqual(context.exception.cause.code,
|
||||
ctap.CtapError.ERR.USER_ACTION_TIMEOUT)
|
||||
|
||||
def test_cancel_ignores_wrong_interface(self):
|
||||
cid = self.fido._channel_id # pylint: disable=protected-access
|
||||
connection = self.vendor._connection # pylint: disable=protected-access
|
||||
client = Fido2Client(
|
||||
self.fido,
|
||||
'https://example.com',
|
||||
user_interaction=CliInteraction(cid, connection))
|
||||
|
||||
with self.assertRaises(ClientError) as context:
|
||||
client.make_credential(self.create_options['publicKey'])
|
||||
|
||||
self.assertEqual(context.exception.code, ClientError.ERR.TIMEOUT)
|
||||
self.assertEqual(context.exception.cause.code,
|
||||
ctap.CtapError.ERR.USER_ACTION_TIMEOUT)
|
||||
|
||||
def test_timeout(self):
|
||||
client = Fido2Client(
|
||||
self.fido, 'https://example.com', user_interaction=CliInteraction())
|
||||
|
||||
Reference in New Issue
Block a user