(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 #include 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) :::