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

# FC_Finalize

## [Name](#name)

:::{container}
FC_Finalize - indicate that an application is done with the PKCS #11 library.
:::

## [Syntax](#syntax)

:::{container}

```{code}
CK_RV FC_Finalize (CK_VOID_PTR pReserved);
```

:::

## [Parameters](#parameters)

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

`pReserved`

: must be `NULL`
:::

## [Description](#description)

:::{container}
`FC_Finalize` shuts down the {ref}`mozilla_projects_nss_reference_nss_cryptographic_module` in
the {ref}`mozilla_projects_nss_reference_nss_cryptographic_module_fips_mode_of_operation`. If the
library is not initialized, it does nothing.

The `pReserved` argument is not used and must be `NULL`.
:::

## [Return value](#return_value)

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

:::{note}
`FC_Finalize` should check the `pReserved` argument and return `CKR_ARGUMENTS_BAD` if
`pReserved` is not `NULL`.

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

## [Examples](#examples)

:::{container}

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

CK_FUNCTION_LIST_PTR pFunctionList;
CK_RV crv;

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

...

/* invoke FC_Finalize as pFunctionList->C_Finalize */
crv = pFunctionList->C_Finalize(NULL);
```

:::

## [See also](#see_also)

:::{container}

- {ref}`mozilla_projects_nss_reference_fc_initialize`,
  [NSC_Initialize](/en-US/NSC_Initialize), [NSC_Finalize](/en-US/NSC_Finalize)
:::
