From 75073d0a8478441cc97a6efa10b566c5fb1dac81 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Fri, 17 Apr 2020 20:57:17 +0100 Subject: New upstream version 1.4.0 --- examples/cred.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'examples/cred.c') diff --git a/examples/cred.c b/examples/cred.c index e471f7e..3e0a30f 100644 --- a/examples/cred.c +++ b/examples/cred.c @@ -139,6 +139,27 @@ verify_cred(int type, const char *fmt, const unsigned char *authdata_ptr, fido_cred_free(&cred); } +static fido_dev_t * +open_from_manifest(const fido_dev_info_t *dev_infos, size_t len, + const char *path) +{ + size_t i; + fido_dev_t *dev; + + for (i = 0; i < len; i++) { + const fido_dev_info_t *curr = fido_dev_info_ptr(dev_infos, i); + if (path == NULL || + strcmp(path, fido_dev_info_path(curr)) == 0) { + dev = fido_dev_new_with_info(curr); + if (fido_dev_open_with_info(dev) == FIDO_OK) + return (dev); + fido_dev_free(&dev); + } + } + + return (NULL); +} + int main(int argc, char **argv) { @@ -150,6 +171,7 @@ main(int argc, char **argv) const char *pin = NULL; const char *key_out = NULL; const char *id_out = NULL; + const char *path = NULL; unsigned char *body = NULL; long long seconds = 0; size_t len; @@ -157,6 +179,8 @@ main(int argc, char **argv) int ext = 0; int ch; int r; + fido_dev_info_t *dev_infos = NULL; + size_t dev_infos_len = 0; if ((cred = fido_cred_new()) == NULL) errx(1, "fido_cred_new"); @@ -218,19 +242,21 @@ main(int argc, char **argv) } } + fido_init(0); + argc -= optind; argv += optind; - if (argc != 1) + if (argc > 1) usage(); + dev_infos = fido_dev_info_new(16); + fido_dev_info_manifest(dev_infos, 16, &dev_infos_len); + if (argc == 1) + path = argv[0]; - fido_init(0); - - if ((dev = fido_dev_new()) == NULL) - errx(1, "fido_dev_new"); + if ((dev = open_from_manifest(dev_infos, dev_infos_len, path)) == NULL) + errx(1, "open_from_manifest"); - if ((r = fido_dev_open(dev, argv[0])) != FIDO_OK) - errx(1, "fido_dev_open: %s (0x%x)", fido_strerr(r), r); if (u2f) fido_dev_force_u2f(dev); -- cgit v1.2.3