FIDO\_LARGEBLOB\_GET(3) Library Functions Manual FIDO\_LARGEBLOB\_GET(3)

# [NAME](#NAME)

`fido_dev_largeblob_get`, `fido_dev_largeblob_set`, `fido_dev_largeblob_remove`, `fido_dev_largeblob_get_array`, `fido_dev_largeblob_set_array` — FIDO2 large blob API

# [SYNOPSIS](#SYNOPSIS)

`#include <fido.h>`

`int`  
`fido_dev_largeblob_get`(`fido_dev_t *dev`, `const unsigned char *key_ptr`, `size_t key_len`, `unsigned char **blob_ptr`, `size_t *blob_len`);

`int`  
`fido_dev_largeblob_set`(`fido_dev_t *dev`, `const unsigned char *key_ptr`, `size_t key_len`, `const unsigned char *blob_ptr`, `size_t blob_len`, `const char *pin`);

`int`  
`fido_dev_largeblob_remove`(`fido_dev_t *dev`, `const unsigned char *key_ptr`, `size_t key_len`, `const char *pin`);

`int`  
`fido_dev_largeblob_get_array`(`fido_dev_t *dev`, `unsigned char **cbor_ptr`, `size_t *cbor_len`);

`int`  
`fido_dev_largeblob_set_array`(`fido_dev_t *dev`, `const unsigned char *cbor_ptr`, `size_t cbor_len`, `const char *pin`);

# [DESCRIPTION](#DESCRIPTION)

The “largeBlobs” API of [*libfido2*](#libfido2) allows binary blobs residing on a CTAP 2.1 authenticator to be read, written, and inspected. “largeBlobs” is a CTAP 2.1 extension.

“largeBlobs” are stored as elements of a CBOR array. Confidentiality is ensured by encrypting each element with a distinct, credential-bound 256-bit AES-GCM key. The array is otherwise shared between different credentials and FIDO2 relying parties.

Retrieval of a credential's encryption key is possible during enrollment with [fido\_cred\_set\_extensions(3)](/man/os/libfido2/fido_cred_set_extensions.3) and [fido\_cred\_largeblob\_key\_ptr(3)](/man/os/libfido2/fido_cred_largeblob_key_ptr.3), during assertion with [fido\_assert\_set\_extensions(3)](/man/os/libfido2/fido_assert_set_extensions.3) and [fido\_assert\_largeblob\_key\_ptr(3)](/man/os/libfido2/fido_assert_largeblob_key_ptr.3), or, in the case of a resident credential, via [*libfido2's*](#libfido2's) credential management API.

The “largeBlobs” CBOR array is opaque to the authenticator. Management of the array is left at the discretion of FIDO2 clients. For further details on CTAP 2.1's “largeBlobs” extension, please refer to the CTAP 2.1 spec.

The [`fido_dev_largeblob_get`](#fido_dev_largeblob_get)() function retrieves the authenticator's “largeBlobs” CBOR array and, on success, returns the first blob (iterating from array index zero) that can be decrypted by `key_ptr`, where `key_ptr` points to `key_len` bytes. On success, `fido_dev_largeblob_get`() sets `blob_ptr` to the body of the decrypted blob, and `blob_len` to the length of the decrypted blob in bytes. It is the caller's responsibility to free `blob_ptr`.

The [`fido_dev_largeblob_set`](#fido_dev_largeblob_set)() function uses `key_ptr` to encrypt `blob_ptr` and inserts the result in the authenticator's “largeBlobs” CBOR array. Insertion happens at the end of the array if no existing element can be decrypted by `key_ptr`, or at the position of the first element (iterating from array index zero) that can be decrypted by `key_ptr`. `key_len` holds the length of `key_ptr` in bytes, and `blob_len` the length of `blob_ptr` in bytes. A `pin` or equivalent user-verification gesture is required.

The [`fido_dev_largeblob_remove`](#fido_dev_largeblob_remove)() function retrieves the authenticator's “largeBlobs” CBOR array and, on success, drops the first blob (iterating from array index zero) that can be decrypted by `key_ptr`, where `key_ptr` points to `key_len` bytes. A `pin` or equivalent user-verification gesture is required.

The [`fido_dev_largeblob_get_array`](#fido_dev_largeblob_get_array)() function retrieves the authenticator's “largeBlobs” CBOR array and, on success, sets `cbor_ptr` to the body of the CBOR array, and `cbor_len` to its corresponding length in bytes. It is the caller's responsibility to free `cbor_ptr`.

Finally, the [`fido_dev_largeblob_set_array`](#fido_dev_largeblob_set_array)() function sets the authenticator's “largeBlobs” CBOR array to the data pointed to by `cbor_ptr`, where `cbor_ptr` points to `cbor_len` bytes. A `pin` or equivalent user-verification gesture is required.

# [RETURN VALUES](#RETURN_VALUES)

The functions `fido_dev_largeblob_set`(), `fido_dev_largeblob_get`(), `fido_dev_largeblob_remove`(), `fido_dev_largeblob_get_array`(), and `fido_dev_largeblob_set_array`() return `FIDO_OK` on success. On error, an error code defined in `<fido/err.h>` is returned.

# [SEE ALSO](#SEE_ALSO)

[fido\_assert\_largeblob\_key\_len(3)](/man/os/libfido2/fido_assert_largeblob_key_len.3), [fido\_assert\_largeblob\_key\_ptr(3)](/man/os/libfido2/fido_assert_largeblob_key_ptr.3), [fido\_assert\_set\_extensions(3)](/man/os/libfido2/fido_assert_set_extensions.3), [fido\_cred\_largeblob\_key\_len(3)](/man/os/libfido2/fido_cred_largeblob_key_len.3), [fido\_cred\_largeblob\_key\_ptr(3)](/man/os/libfido2/fido_cred_largeblob_key_ptr.3), [fido\_cred\_set\_extensions(3)](/man/os/libfido2/fido_cred_set_extensions.3), [fido\_credman\_get\_dev\_rk(3)](/man/os/libfido2/fido_credman_get_dev_rk.3), [fido\_credman\_get\_dev\_rp(3)](/man/os/libfido2/fido_credman_get_dev_rp.3), [fido\_dev\_get\_assert(3)](/man/os/libfido2/fido_dev_get_assert.3), [fido\_dev\_make\_cred(3)](/man/os/libfido2/fido_dev_make_cred.3)

# [CAVEATS](#CAVEATS)

The “largeBlobs” extension is not meant to be used to store sensitive data. When retrieved, a credential's “largeBlobs” encryption key is transmitted in the clear, and an authenticator's “largeBlobs” CBOR array can be read without user interaction or verification.

October 26, 2020 Linux 4.19.0-gvisor

---

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