(mozilla-projects-nss-reference-fc-getinfo)=

# FC_GetInfo

## [Name](#name)

:::{container}
FC_GetInfo - return general information about the PKCS #11 library.
:::

## [Syntax](#syntax)

:::{container}

```{code}
CK_RV  FC_GetInfo(CK_INFO_PTR pInfo);
```

:::

## [Parameters](#parameters)

:::{container}
`FC_GetInfo` has one parameter:

`pInfo`

: points to a [CK_INFO](/en-US/CK_INFO) structure
:::

## [Description](#description)

:::{container}
`FC_GetInfo` returns general information about the PKCS #11 library. On return, the `CK_INFO`
structure that `pInfo` points to has the following information:

- `cryptokiVersion`: PKCS #11 interface version number implemented by the PKCS #11 library.
  The version is 2.20 (`major=0x02, minor=0x14`).
- `manufacturerID`: the PKCS #11 library manufacturer, "Mozilla Foundation", padded with
  spaces to 32 characters and not null-terminated.
- `flags`: should be 0.
- `libraryDescription`: description of the library, "NSS Internal Crypto Services", padded
  with spaces to 32 characters and not null-terminated.
- `libraryVersion`: PKCS #11 library version number, for example, 3.11
  (`major=0x03, minor=0x0b`).

A user may call `FC_GetInfo` without logging into the token (to assume the NSS User role).
:::

## [Return value](#return_value)

::::{container}
`FC_GetInfo` always returns `CKR_OK`.

:::{note}
`FC_GetInfo` should return `CKR_ARGUMENTS_BAD` if `pInfo` is `NULL`.

`FC_GetInfo` should return `CKR_CRYPTOKI_NOT_INITIALIZED` if the library is not
initialized.
:::
::::

## [Examples](#examples)

:::{container}
Note the use of the `%.32s` format string to print the `manufacturerID` and
`libraryDescription` members of the `CK_INFO` structure.

```{code}
#include <assert.h>
#include <stdio.h>

CK_FUNCTION_LIST_PTR pFunctionList;
CK_RV crv;
CK_INFO info;

crv = FC_GetFunctionList(&pFunctionList);
assert(crv == CKR_OK);

...

/* invoke FC_GetInfo as pFunctionList->C_GetInfo */
crv = pFunctionList->C_GetInfo(&info);
assert(crv == CKR_OK);
printf("General information about the PKCS #11 library:\n");
printf("    PKCS #11 version: %d.%d\n",
    (int)info.cryptokiVersion.major, (int)info.cryptokiVersion.minor);
printf("    manufacturer ID: %.32s\n", info.manufacturerID);
printf("    flags: 0x%08lx\n", info.flags);
printf("    library description: %.32s\n", info.libraryDescription);
printf("    library version: %d.%d\n",
    (int)info.libraryVersion.major, (int)info.libraryVersion.minor);
printf("\n");
```

:::

## [See also](#see_also)

:::{container}

- [NSC_GetInfo](/en-US/NSC_GetInfo)
:::
