FIDO\_DEV\_INFO\_MANIFEST(3) Library Functions Manual FIDO\_DEV\_INFO\_MANIFEST(3)

# [NAME](#NAME)

`fido_dev_info_manifest`, `fido_dev_info_new`, `fido_dev_info_free`, `fido_dev_info_ptr`, `fido_dev_info_path`, `fido_dev_info_product`, `fido_dev_info_vendor`, `fido_dev_info_manufacturer_string`, `fido_dev_info_product_string`, `fido_dev_info_set` — FIDO2 device discovery functions

# [SYNOPSIS](#SYNOPSIS)

`#include <fido.h>`

`int`  
`fido_dev_info_manifest`(`fido_dev_info_t *devlist`, `size_t ilen`, `size_t *olen`);

`fido_dev_info_t *`  
`fido_dev_info_new`(`size_t n`);

`void`  
`fido_dev_info_free`(`fido_dev_info_t **devlist_p`, `size_t n`);

`const fido_dev_info_t *`  
`fido_dev_info_ptr`(`const fido_dev_info_t *devlist`, `size_t i`);

`const char *`  
`fido_dev_info_path`(`const fido_dev_info_t *di`);

`int16_t`  
`fido_dev_info_product`(`const fido_dev_info_t *di`);

`int16_t`  
`fido_dev_info_vendor`(`const fido_dev_info_t *di`);

`const char *`  
`fido_dev_info_manufacturer_string`(`const fido_dev_info_t *di`);

`const char *`  
`fido_dev_info_product_string`(`const fido_dev_info_t *di`);

`int`  
`fido_dev_info_set`(`fido_dev_info_t *devlist`, `size_t i`, `const char *path`, `const char *manufacturer`, `const char *product`, `const fido_dev_io_t *io`, `const fido_dev_transport_t *transport`);

# [DESCRIPTION](#DESCRIPTION)

The [`fido_dev_info_manifest`](#fido_dev_info_manifest)() function fills `devlist` with up to `ilen` FIDO2 devices found by the underlying operating system. Currently only USB HID devices are supported. The number of discovered devices is returned in `olen`, where `olen` is an addressable pointer.

The [`fido_dev_info_new`](#fido_dev_info_new)() function returns a pointer to a newly allocated, empty device list with `n` available slots. If memory is not available, NULL is returned.

The [`fido_dev_info_free`](#fido_dev_info_free)() function releases the memory backing `*devlist_p`, where `*devlist_p` must have been previously allocated by `fido_dev_info_new`(). The number `n` of allocated slots must also be provided. On return, `*devlist_p` is set to NULL. Either `devlist_p` or `*devlist_p` may be NULL, in which case `fido_dev_info_free`() is a NOP.

The [`fido_dev_info_ptr`](#fido_dev_info_ptr)() function returns a pointer to slot number `i` of `devlist`. It is the caller's responsibility to ensure that `i` is bounded. Please note that the first slot has index 0.

The [`fido_dev_info_path`](#fido_dev_info_path)() function returns the filesystem path or subsystem-specific identification string of `di`.

The [`fido_dev_info_product`](#fido_dev_info_product)() function returns the product ID of `di`.

The [`fido_dev_info_vendor`](#fido_dev_info_vendor)() function returns the vendor ID of `di`.

The [`fido_dev_info_manufacturer_string`](#fido_dev_info_manufacturer_string)() function returns the manufacturer string of `di`. If `di` does not have an associated manufacturer string, `fido_dev_info_manufacturer_string`() returns an empty string.

The [`fido_dev_info_product_string`](#fido_dev_info_product_string)() function returns the product string of `di`. If `di` does not have an associated product string, `fido_dev_info_product_string`() returns an empty string.

An example of how to use the functions described in this document can be found in the examples/manifest.c file shipped with [*libfido2*](#libfido2).

The [`fido_dev_info_set`](#fido_dev_info_set)() function initializes an entry in a device list allocated by `fido_dev_info_new`() with the specified path, manufacturer, and product strings, and with the specified I/O handlers and, optionally, transport functions, as described in [fido\_dev\_set\_io\_functions(3)](/man/os/libfido2/fido_dev_set_io_functions.3). The `io` argument must be specified; the `transport` argument may be `NULL`. The path, I/O handlers, and transport functions will be used automatically by [fido\_dev\_new\_with\_info(3)](/man/os/libfido2/fido_dev_new_with_info.3) and [fido\_dev\_open\_with\_info(3)](/man/os/libfido2/fido_dev_open_with_info.3). An application can use this, for example, to substitute mock FIDO2 devices in testing for the real ones that `fido_dev_info_manifest`() would discover.

# [RETURN VALUES](#RETURN_VALUES)

The `fido_dev_info_manifest`() function always returns `FIDO_OK`. If a discovery error occurs, the `olen` pointer is set to 0.

On success, the `fido_dev_info_set`() function returns `FIDO_OK`. On error, a different error code defined in `<fido/err.h>` is returned.

The pointers returned by `fido_dev_info_ptr`(), `fido_dev_info_path`(), `fido_dev_info_manufacturer_string`(), and `fido_dev_info_product_string`() are guaranteed to exist until `fido_dev_info_free`() is called on the corresponding device list.

March 30, 2022 Linux 4.19.0-gvisor

---

Document: fido_dev_info_manufacturer_string(3) from libfido2 1.17.0-r8 (Chainguard OS)
Source: https://github.com/Yubico/libfido2
