(mozilla-projects-nss-reference-fc-initpin)= # FC_InitPIN ## [Name](#name) :::{container} `FC_InitPIN()` - Initialize the user's PIN. ::: ## [Syntax](#syntax) :::{container} ```{code} CK_RV FC_InitPIN( CK_SESSION_HANDLE hSession, CK_CHAR_PTR pPin, CK_ULONG ulPinLen ); ``` ::: ## [Parameters](#parameters) :::{container} `FC_InitPIN()` takes three parameters: `hSession` : [Input] Session handle. `pPin` : [Input] Pointer to the PIN being set. `ulPinLen` : [Input] Length of the PIN. ::: ## [Description](#description) :::{container} `FC_InitPIN()` initializes the normal user's PIN. `FC_InitPIN()` must be called when the PKCS #11 Security Officer (SO) is logged into the token and the session is read/write, that is, the session must be in the "R/W SO Functions" state (`CKS_RW_SO_FUNCTIONS`). The role of the PKCS #11 SO is to initialize a token and to initialize the normal user's PIN. In the NSS cryptographic module, one uses the empty string password ("") to log in as the PKCS #11 SO. The module only allows the PKCS #11 SO to log in if the normal user's PIN has not yet been set or has been reset. ::: ## [Return value](#return_value) :::{container} `FC_InitPIN()` returns the following return codes. - `CKR_OK`: normal user's PIN initialization succeeded. - `CKR_SESSION_HANDLE_INVALID`: the session handle is invalid. - `CKR_USER_NOT_LOGGED_IN`: the session is not in the "R/W SO Functions" state. - `CKR_PIN_INVALID`: the PIN has an invalid UTF-8 character. - `CKR_PIN_LEN_RANGE`: the PIN is too short, too long, or too weak (doesn't have enough character types). - `CKR_DEVICE_ERROR`: normal user's PIN is already initialized. ::: ## [See also](#see_also) :::{container} - [NSC_InitPIN](/en-US/NSC_InitPIN), {ref}`mozilla_projects_nss_reference_fc_setpin` :::