logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: c2e4d05a2baf81e0f6b26fd932cfc963de6c88f3
parent 479b4a9313cd551db129a7a5d399d4a2975f1fb9
Author: Michael Forney <mforney@mforney.org>
Date:   Sun,  3 Nov 2019 12:08:12 -0800

Add libfido2 git

Diffstat:

M.gitmodules4++++
Mpkg/gen.lua1+
Apkg/libfido2/config.h16++++++++++++++++
Apkg/libfido2/gen.lua51+++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/libfido2/patch/0001-Rename-log_-symbols-to-prevent-conflict-when-linking.patch41+++++++++++++++++++++++++++++++++++++++++
Apkg/libfido2/patch/0002-hid_linux-Use-sysfs-instead-of-libudev.patch192+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/libfido2/src1+
Apkg/libfido2/ver1+
8 files changed, 307 insertions(+), 0 deletions(-)

diff --git a/.gitmodules b/.gitmodules @@ -110,6 +110,10 @@ path = pkg/libffi/src url = https://github.com/libffi/libffi ignore = all +[submodule "pkg/libfido2/src"] + path = pkg/libfido2/src + url = https://github.com/Yubico/libfido2.git + ignore = all [submodule "pkg/libinput/src"] path = pkg/libinput/src url = https://github.com/oasislinux/libinput diff --git a/pkg/gen.lua b/pkg/gen.lua @@ -38,6 +38,7 @@ subgen 'libdrm' subgen 'libevdev' subgen 'libevent' subgen 'libffi' +subgen 'libfido2' subgen 'libinput' subgen 'libjpeg-turbo' subgen 'libnl' diff --git a/pkg/libfido2/config.h b/pkg/libfido2/config.h @@ -0,0 +1,16 @@ +#define TLS _Thread_local +#define HAS_DEV_URANDOM +#define HAVE_ENDIAN_H +#define HAVE_ERR_H +#define HAVE_UNISTD_H +#define HAVE_SIGNAL_H +#define HAVE_STRLCPY +#define HAVE_STRLCAT +#define HAVE_RECALLOCARRAY +#define HAVE_GETPAGESIZE +#define HAVE_SYSCONF +#define HAVE_EXPLICIT_BZERO +#define HAVE_TIMINGSAFE_BCMP +#define HAVE_READPASSPHRASE +#define HAVE_GETLINE +#define HAVE_GETOPT diff --git a/pkg/libfido2/gen.lua b/pkg/libfido2/gen.lua @@ -0,0 +1,51 @@ +cflags{ + '-include $dir/config.h', + '-D _FIDO_INTERNAL', + '-I $builddir/pkg/libcbor/include', + '-I $builddir/pkg/libressl/include', + '-I $srcdir/src', + '-I pkg/openbsd/include', +} + +pkg.deps = { + 'pkg/libcbor/headers', + 'pkg/libressl/headers', +} + +lib('libfido2.a', [[ + src/( + aes256.c + assert.c + authkey.c + bio.c + blob.c + buf.c + cbor.c + cred.c + credman.c + dev.c + ecdh.c + eddsa.c + err.c + es256.c + hid.c + info.c + io.c + iso7816.c + log.c + pin.c + reset.c + rs256.c + u2f.c + + hid_linux.c + ) + $builddir/pkg/libcbor/libcbor.a +]]) + +lib('libsk-libfido2.a', { + 'tools/sk-libfido2.c', + 'libfido2.a.d', +}) + +fetch 'git' diff --git a/pkg/libfido2/patch/0001-Rename-log_-symbols-to-prevent-conflict-when-linking.patch b/pkg/libfido2/patch/0001-Rename-log_-symbols-to-prevent-conflict-when-linking.patch @@ -0,0 +1,41 @@ +From 448eaf9f2d065bcf76c0c9e253a24f743032ddba Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Sun, 3 Nov 2019 11:37:52 -0800 +Subject: [PATCH] Rename log_* symbols to prevent conflict when linking + statically + +--- + src/extern.h | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +diff --git a/src/extern.h b/src/extern.h +index 2f69094..a6c757d 100644 +--- a/src/extern.h ++++ b/src/extern.h +@@ -92,14 +92,17 @@ int rx_cbor_status(fido_dev_t *, int); + #define log_xxd(...) do { /* nothing */ } while (0) + #else + #ifdef __GNUC__ +-void log_init(void); +-void log_debug(const char *, ...) __attribute__((__format__ (printf, 1, 2))); +-void log_xxd(const void *, size_t); ++void fido_log_init(void); ++void fido_log_debug(const char *, ...) __attribute__((__format__ (printf, 1, 2))); ++void fido_log_xxd(const void *, size_t); + #else +-void log_init(void); +-void log_debug(const char *, ...); +-void log_xxd(const void *, size_t); ++void fido_log_init(void); ++void fido_log_debug(const char *, ...); ++void fido_log_xxd(const void *, size_t); + #endif /* __GNUC__ */ ++#define log_init fido_log_init ++#define log_debug fido_log_debug ++#define log_xxd fido_log_xxd + #endif /* FIDO_NO_DIAGNOSTIC */ + + /* u2f */ +-- +2.23.0 + diff --git a/pkg/libfido2/patch/0002-hid_linux-Use-sysfs-instead-of-libudev.patch b/pkg/libfido2/patch/0002-hid_linux-Use-sysfs-instead-of-libudev.patch @@ -0,0 +1,192 @@ +From 8cd6f18a9435ced27e765cb8d50991097a00d8c1 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Fri, 1 Nov 2019 19:39:45 -0700 +Subject: [PATCH] hid_linux: Use sysfs instead of libudev + +--- + src/hid_linux.c | 102 ++++++++++++++++++------------------------------ + 1 file changed, 37 insertions(+), 65 deletions(-) + +diff --git a/src/hid_linux.c b/src/hid_linux.c +index 9d55453..2a888e5 100644 +--- a/src/hid_linux.c ++++ b/src/hid_linux.c +@@ -9,8 +9,8 @@ + #include <sys/ioctl.h> + #include <linux/hidraw.h> + ++#include <dirent.h> + #include <fcntl.h> +-#include <libudev.h> + #include <string.h> + #include <unistd.h> + +@@ -147,23 +147,20 @@ is_fido(const char *path) + } + + static int +-parse_uevent(struct udev_device *dev, int16_t *vendor_id, int16_t *product_id) ++parse_uevent(const char *path, int16_t *vendor_id, int16_t *product_id) + { +- const char *uevent; +- char *cp; +- char *p; +- char *s; ++ FILE *fp; ++ char *p = NULL; ++ size_t n = 0; + int ok = -1; + short unsigned int x; + short unsigned int y; + +- if ((uevent = udev_device_get_sysattr_value(dev, "uevent")) == NULL) ++ fp = fopen(path, "r"); ++ if (!fp) + return (-1); + +- if ((s = cp = strdup(uevent)) == NULL) +- return (-1); +- +- for ((p = strsep(&cp, "\n")); p && *p != '\0'; (p = strsep(&cp, "\n"))) { ++ while (getline(&p, &n, fp) >= 0) { + if (strncmp(p, "HID_ID=", 7) == 0) { + if (sscanf(p + 7, "%*x:%hx:%hx", &x, &y) == 2) { + *vendor_id = (int16_t)x; +@@ -174,50 +171,32 @@ parse_uevent(struct udev_device *dev, int16_t *vendor_id, int16_t *product_id) + } + } + +- free(s); +- ++ free(p); ++ fclose(fp); + return (ok); + } + + static int +-copy_info(fido_dev_info_t *di, struct udev *udev, +- struct udev_list_entry *udev_entry) ++copy_info(fido_dev_info_t *di, const char *name) + { +- const char *name; +- const char *path; +- const char *manufacturer; +- const char *product; +- struct udev_device *dev = NULL; +- struct udev_device *hid_parent; +- struct udev_device *usb_parent; +- int ok = -1; ++ char path[PATH_MAX]; ++ int r, ok = -1; + + memset(di, 0, sizeof(*di)); + +- if ((name = udev_list_entry_get_name(udev_entry)) == NULL || +- (dev = udev_device_new_from_syspath(udev, name)) == NULL || +- (path = udev_device_get_devnode(dev)) == NULL || +- is_fido(path) == 0) +- goto fail; +- +- if ((hid_parent = udev_device_get_parent_with_subsystem_devtype(dev, +- "hid", NULL)) == NULL) ++ snprintf(path, sizeof(path), "/dev/%s", name); ++ if (is_fido(path) == 0) + goto fail; ++ di->path = strdup(path); + +- if ((usb_parent = udev_device_get_parent_with_subsystem_devtype(dev, +- "usb", "usb_device")) == NULL) ++ r = snprintf(path, sizeof(path), "/sys/class/hidraw/%s/device/uevent", name); ++ if (r < 0 || (size_t)r >= sizeof(path)) + goto fail; +- +- if (parse_uevent(hid_parent, &di->vendor_id, &di->product_id) < 0 || +- (manufacturer = udev_device_get_sysattr_value(usb_parent, +- "manufacturer")) == NULL || +- (product = udev_device_get_sysattr_value(usb_parent, +- "product")) == NULL) ++ if (parse_uevent(path, &di->vendor_id, &di->product_id) < 0) + goto fail; + +- di->path = strdup(path); +- di->manufacturer = strdup(manufacturer); +- di->product = strdup(product); ++ di->manufacturer = strdup("Unknown"); ++ di->product = strdup("Unknown"); + + if (di->path == NULL || + di->manufacturer == NULL || +@@ -226,9 +205,6 @@ copy_info(fido_dev_info_t *di, struct udev *udev, + + ok = 0; + fail: +- if (dev != NULL) +- udev_device_unref(dev); +- + if (ok < 0) { + free(di->path); + free(di->manufacturer); +@@ -239,14 +215,17 @@ fail: + return (ok); + } + ++static int ++filter_hidraw(const struct dirent *d) ++{ ++ return strncmp(d->d_name, "hidraw", 6) == 0; ++} ++ + int + fido_dev_info_manifest(fido_dev_info_t *devlist, size_t ilen, size_t *olen) + { +- struct udev *udev = NULL; +- struct udev_enumerate *udev_enum = NULL; +- struct udev_list_entry *udev_list; +- struct udev_list_entry *udev_entry; +- int r = FIDO_ERR_INTERNAL; ++ struct dirent **entries; ++ int i, n, r = FIDO_ERR_INTERNAL; + + *olen = 0; + +@@ -256,29 +235,22 @@ fido_dev_info_manifest(fido_dev_info_t *devlist, size_t ilen, size_t *olen) + if (devlist == NULL) + return (FIDO_ERR_INVALID_ARGUMENT); + +- if ((udev = udev_new()) == NULL || +- (udev_enum = udev_enumerate_new(udev)) == NULL) ++ n = scandir("/sys/class/hidraw", &entries, filter_hidraw, alphasort); ++ if (n == -1) + goto fail; +- +- if (udev_enumerate_add_match_subsystem(udev_enum, "hidraw") < 0 || +- udev_enumerate_scan_devices(udev_enum) < 0 || +- (udev_list = udev_enumerate_get_list_entry(udev_enum)) == NULL) +- goto fail; +- +- udev_list_entry_foreach(udev_entry, udev_list) { +- if (copy_info(&devlist[*olen], udev, udev_entry) == 0) { ++ for (i = 0; i < n; ++i) { ++ if (copy_info(&devlist[*olen], entries[i]->d_name) == 0) { + if (++(*olen) == ilen) + break; + } ++ free(entries[i]); + } ++ for (; i < n; ++i) ++ free(entries[i]); ++ free(entries); + + r = FIDO_OK; + fail: +- if (udev_enum != NULL) +- udev_enumerate_unref(udev_enum); +- if (udev != NULL) +- udev_unref(udev); +- + return (r); + } + +-- +2.23.0 + diff --git a/pkg/libfido2/src b/pkg/libfido2/src @@ -0,0 +1 @@ +Subproject commit 6a628b3d3a9d62a58f94d48340ef9eeca2d672b9 diff --git a/pkg/libfido2/ver b/pkg/libfido2/ver @@ -0,0 +1 @@ +1.2.0-55-g6a628b3 r0