Provided by: libfido2-doc_1.12.0-2_all bug

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

     #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

     The credential management API of 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).

     The fido_credman_metadata_t type abstracts credential management metadata.

     The 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() 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() function populates metadata with information retrieved
     from dev.  A valid pin must be provided.

     The fido_credman_rk_existing() function inspects metadata and returns the number of resident
     credentials on the authenticator.  The 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() 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() 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() 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() function returns the number of resident credentials in rk.  The
     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() 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) and
     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() 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() 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() 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() function populates rp with information about relying parties
     with resident credentials in dev.  A valid pin must be provided.

     The fido_credman_rp_count() function returns the number of relying parties in rp.

     The fido_credman_rp_id() and 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() 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().
     Please note that the first relying party in rp has an idx (index) value of 0.

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

     fido_cbor_info_new(3), fido_cred_new(3), fido_dev_supports_credman(3)

CAVEATS

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