FIDO\_CREDMAN\_METADATA\_NEW(3) Library Functions Manual FIDO\_CREDMAN\_METADATA\_NEW(3)

# [NAME](#NAME)

`fido_credman_metadata_new`, `fido_credman_rk_new`, `fido_credman_rp_new`, `fido_credman_metadata_free`, `fido_credman_rk_free`, `fido_credman_rp_free`, `fido_credman_rk_existing`, `fido_credman_rk_remaining`, `fido_credman_rk`, `fido_credman_rk_count`, `fido_credman_rp_id`, `fido_credman_rp_name`, `fido_credman_rp_count`, `fido_credman_rp_id_hash_ptr`, `fido_credman_rp_id_hash_len`, `fido_credman_get_dev_metadata`, `fido_credman_get_dev_rk`, `fido_credman_set_dev_rk`, `fido_credman_del_dev_rk`, `fido_credman_get_dev_rp` — FIDO2 credential management API

# [SYNOPSIS](#SYNOPSIS)

`#include <fido.h>`  
`#include <fido/credman.h>`

`fido_credman_metadata_t *`  
`fido_credman_metadata_new`(`void`);

`fido_credman_rk_t *`  
`fido_credman_rk_new`(`void`);

`fido_credman_rp_t *`  
`fido_credman_rp_new`(`void`);

`void`  
`fido_credman_metadata_free`(`fido_credman_metadata_t **metadata_p`);

`void`  
`fido_credman_rk_free`(`fido_credman_rk_t **rk_p`);

`void`  
`fido_credman_rp_free`(`fido_credman_rp_t **rp_p`);

`uint64_t`  
`fido_credman_rk_existing`(`const fido_credman_metadata_t *metadata`);

`uint64_t`  
`fido_credman_rk_remaining`(`const fido_credman_metadata_t *metadata`);

`const fido_cred_t *`  
`fido_credman_rk`(`const fido_credman_rk_t *rk`, `size_t idx`);

`size_t`  
`fido_credman_rk_count`(`const fido_credman_rk_t *rk`);

`const char *`  
`fido_credman_rp_id`(`const fido_credman_rp_t *rp`, `size_t idx`);

`const char *`  
`fido_credman_rp_name`(`const fido_credman_rp_t *rp`, `size_t idx`);

`size_t`  
`fido_credman_rp_count`(`const fido_credman_rp_t *rp`);

`const unsigned char *`  
`fido_credman_rp_id_hash_ptr`(`const fido_credman_rp_t *rp`, `size_t idx`);

`size_t`  
`fido_credman_rp_id_hash_len`(`const fido_credman_rp_t *`, `size_t idx`);

`int`  
`fido_credman_get_dev_metadata`(`fido_dev_t *dev`, `fido_credman_metadata_t *metadata`, `const char *pin`);

`int`  
`fido_credman_get_dev_rk`(`fido_dev_t *dev`, `const char *rp_id`, `fido_credman_rk_t *rk`, `const char *pin`);

`int`  
`fido_credman_set_dev_rk`(`fido_dev_t *dev`, `fido_cred_t *cred`, `const char *pin`);

`int`  
`fido_credman_del_dev_rk`(`fido_dev_t *dev`, `const unsigned char *cred_id`, `size_t cred_id_len`, `const char *pin`);

`int`  
`fido_credman_get_dev_rp`(`fido_dev_t *dev`, `fido_credman_rp_t *rp`, `const char *pin`);

# [DESCRIPTION](#DESCRIPTION)

The credential management API of [*libfido2*](#libfido2) allows resident credentials on a FIDO2 authenticator to be listed, inspected, modified, and removed. Please note that not all FIDO2 authenticators support credential management. To obtain information on what an authenticator supports, please refer to [fido\_cbor\_info\_new(3)](/man/os/libfido2/fido_cbor_info_new.3).

The `fido_credman_metadata_t` type abstracts credential management metadata.

The [`fido_credman_metadata_new`](#fido_credman_metadata_new)() function returns a pointer to a newly allocated, empty `fido_credman_metadata_t` type. If memory cannot be allocated, NULL is returned.

The [`fido_credman_metadata_free`](#fido_credman_metadata_free)() function releases the memory backing `*metadata_p`, where `*metadata_p` must have been previously allocated by `fido_credman_metadata_new`(). On return, `*metadata_p` is set to NULL. Either `metadata_p` or `*metadata_p` may be NULL, in which case `fido_credman_metadata_free`() is a NOP.

The [`fido_credman_get_dev_metadata`](#fido_credman_get_dev_metadata)() function populates `metadata` with information retrieved from `dev`. A valid `pin` must be provided.

The [`fido_credman_rk_existing`](#fido_credman_rk_existing)() function inspects `metadata` and returns the number of resident credentials on the authenticator. The [`fido_credman_rk_remaining`](#fido_credman_rk_remaining)() function inspects `metadata` and returns the estimated number of resident credentials that can be created on the authenticator.

The `fido_credman_rk_t` type abstracts the set of resident credentials belonging to a given relying party.

The [`fido_credman_rk_new`](#fido_credman_rk_new)() function returns a pointer to a newly allocated, empty `fido_credman_rk_t` type. If memory cannot be allocated, NULL is returned.

The [`fido_credman_rk_free`](#fido_credman_rk_free)() function releases the memory backing `*rk_p`, where `*rk_p` must have been previously allocated by `fido_credman_rk_new`(). On return, `*rk_p` is set to NULL. Either `rk_p` or `*rk_p` may be NULL, in which case `fido_credman_rk_free`() is a NOP.

The [`fido_credman_get_dev_rk`](#fido_credman_get_dev_rk)() function populates `rk` with the set of resident credentials belonging to `rp_id` in `dev`. A valid `pin` must be provided.

The [`fido_credman_rk_count`](#fido_credman_rk_count)() function returns the number of resident credentials in `rk`. The [`fido_credman_rk`](#fido_credman_rk)() function returns a pointer to the credential at index `idx` in `rk`. Please note that the first credential in `rk` has an `idx` (index) value of 0.

The [`fido_credman_set_dev_rk`](#fido_credman_set_dev_rk)() function updates the credential pointed to by `cred` in `dev`. The credential id and user id attributes of `cred` must be set. See [fido\_cred\_set\_id(3)](/man/os/libfido2/fido_cred_set_id.3) and [fido\_cred\_set\_user(3)](/man/os/libfido2/fido_cred_set_user.3) for details. Only a credential's user attributes (name, display name) may be updated at this time.

The [`fido_credman_del_dev_rk`](#fido_credman_del_dev_rk)() function deletes the resident credential identified by `cred_id` from `dev`, where `cred_id` points to `cred_id_len` bytes. A valid `pin` must be provided.

The `fido_credman_rp_t` type abstracts information about a relying party.

The [`fido_credman_rp_new`](#fido_credman_rp_new)() function returns a pointer to a newly allocated, empty `fido_credman_rp_t` type. If memory cannot be allocated, NULL is returned.

The [`fido_credman_rp_free`](#fido_credman_rp_free)() function releases the memory backing `*rp_p`, where `*rp_p` must have been previously allocated by `fido_credman_rp_new`(). On return, `*rp_p` is set to NULL. Either `rp_p` or `*rp_p` may be NULL, in which case `fido_credman_rp_free`() is a NOP.

The [`fido_credman_get_dev_rp`](#fido_credman_get_dev_rp)() function populates `rp` with information about relying parties with resident credentials in `dev`. A valid `pin` must be provided.

The [`fido_credman_rp_count`](#fido_credman_rp_count)() function returns the number of relying parties in `rp`.

The [`fido_credman_rp_id`](#fido_credman_rp_id)() and [`fido_credman_rp_name`](#fido_credman_rp_name)() functions return pointers to the id and name of relying party `idx` in `rp`. If not NULL, the values returned by these functions point to NUL-terminated UTF-8 strings. Please note that the first relying party in `rp` has an `idx` (index) value of 0.

The [`fido_credman_rp_id_hash_ptr`](#fido_credman_rp_id_hash_ptr)() function returns a pointer to the hashed id of relying party `idx` in `rp`. The corresponding length can be obtained by [`fido_credman_rp_id_hash_len`](#fido_credman_rp_id_hash_len)(). Please note that the first relying party in `rp` has an `idx` (index) value of 0.

# [RETURN VALUES](#RETURN_VALUES)

The `fido_credman_get_dev_metadata`(), `fido_credman_get_dev_rk`(), `fido_credman_set_dev_rk`(), `fido_credman_del_dev_rk`(), and `fido_credman_get_dev_rp`() functions return `FIDO_OK` on success. On error, a different error code defined in `<fido/err.h>` is returned. Functions returning pointers are not guaranteed to succeed, and should have their return values checked for NULL.

# [SEE ALSO](#SEE_ALSO)

[fido\_cbor\_info\_new(3)](/man/os/libfido2/fido_cbor_info_new.3), [fido\_cred\_new(3)](/man/os/libfido2/fido_cred_new.3), [fido\_dev\_supports\_credman(3)](/man/os/libfido2/fido_dev_supports_credman.3)

# [CAVEATS](#CAVEATS)

Resident credentials are called “discoverable credentials” in CTAP 2.1.

June 28, 2019 Linux 4.19.0-gvisor

---

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