From de011fa069df466855bb885bebef25f4f096151d Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Sat, 14 Sep 2019 14:14:22 +0200 Subject: [PATCH] tests: update u2ftest to auto-confirm when needed --- tests/fido_tests/u2f-tests-hid/dev.cc | 24 +++++++++++++++------ tests/fido_tests/u2f-tests-hid/hidapi-udp.c | 6 ++++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/tests/fido_tests/u2f-tests-hid/dev.cc b/tests/fido_tests/u2f-tests-hid/dev.cc index 4e2f33c1d3..fe82b6d605 100644 --- a/tests/fido_tests/u2f-tests-hid/dev.cc +++ b/tests/fido_tests/u2f-tests-hid/dev.cc @@ -7,12 +7,6 @@ // Thin shim to allow abstracting away from hid_* calls to // a set or read/write pipes w/ a particular interface. #include -#include -#include -#include - -#include - #include "u2f_util.h" bool DEV_opened(struct U2Fob* device) { @@ -24,10 +18,19 @@ void DEV_close(struct U2Fob* device) { hid_close(device->dev); device->dev = NULL; } + if (device->dev_debug) { + hid_close(device->dev_debug); + device->dev_debug = NULL; + } } void DEV_open_path(struct U2Fob* device) { device->dev = hid_open_path(device->path); + if (atoi(device->path) != 21325) { + device->dev_debug = hid_open_path("21325"); + } else { + device->dev_debug = NULL; + } } int DEV_write(struct U2Fob* device, const uint8_t* src, size_t n) { @@ -42,5 +45,12 @@ int DEV_read_timeout(struct U2Fob* device, uint8_t* dst, size_t n, } int DEV_touch(struct U2Fob* device) { - return 0; + if (!device->dev_debug) { + return 0; + } + sleep(1); + // send DebugLinkDecision{yes_no=True} to DebugLink interface + hid_write(device->dev_debug, (const uint8_t *)"\x00?##\x00" "d\x00\x00\x00\x02\x08\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 65); + sleep(1); + return 1; } diff --git a/tests/fido_tests/u2f-tests-hid/hidapi-udp.c b/tests/fido_tests/u2f-tests-hid/hidapi-udp.c index 84072fa069..8771ae5786 100644 --- a/tests/fido_tests/u2f-tests-hid/hidapi-udp.c +++ b/tests/fido_tests/u2f-tests-hid/hidapi-udp.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -42,6 +43,7 @@ hid_device *hid_open_path(const char *path) { } hid_device *d = malloc(sizeof(hid_device)); + memset(d, 0, sizeof(hid_device)); d->fd = fd; d->other.sin_family = AF_INET; @@ -75,7 +77,7 @@ int hid_write(hid_device *device, const unsigned char *data, size_t length) { fprintf(stderr, "Failed to write socket\n"); return -1; } - usleep(1000); + usleep(1500); return length; } @@ -85,7 +87,7 @@ int hid_read_timeout(hid_device *device, unsigned char *data, size_t length, int return -1; } for (int i = 0; i < milliseconds; i++) { - usleep(1000); + usleep(1500); ssize_t n = recvfrom(device->fd, data, length, MSG_DONTWAIT, (struct sockaddr *)&(device->other), &(device->slen)); if (n < 0) { if (errno == EAGAIN && errno == EWOULDBLOCK) { // timeout tick