Initializes a PIN unblock operation.
This is a proprietary extension which allows unblocking the PIN corresponding to the CKU_USER role after it was blocked, e.g. because of too many incorrect login attempts. This will typically be the application PIN for PIV tokens. The unblocking is done using a PUK (PIN Unlock) code stored on the card and provided to the user when initializing the card.
CK_KEY_TYPE type_generic_secret = CKK_GENERIC_SECRET;
CK_ATTRIBUTE unblock_pin_template[] = {
{CKA_KEY_TYPE, (void*)&type_generic_secret, sizeof(type_generic_secret)}
{CKA_LABEL, (
void*)label.
data(), (CK_ULONG)label.
size()},
};
CK_OBJECT_HANDLE hPuk[1];
CK_ULONG puk_count = 0;
CK_MECHANISM mech {
.pParameter = nullptr,
.ulParameterLen = 0,
};
rv = p11lib->C_VerifyUnblockPINInit(session, &mech, hPuk);
#define CKM_UNBLOCK_PIN_STATIC
HID proprietary mechanism used to unblock a PIN using a PUK code.
Definition: c_hid.h:13
AC_EXPORT CK_RV C_VerifyUnblockPIN(CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pNewPin, CK_ULONG ulNewLen, CK_UTF8CHAR_PTR pPuk, CK_ULONG ulPukLen)
Performs a PIN unblock operation, which was previously initialized by C_VerifyUnblockPINInit.
CK_RV C_FindObjects(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject, CK_ULONG ulMaxObjectCount, CK_ULONG_PTR pulObjectCount)
Continues a search for token and session objects that match a template, obtaining additional object h...
CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE hSession)
Terminates a search for token and session objects.
CK_RV C_FindObjectsInit(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
Initializes a search for token and session objects that match a template.
CK_ATTRIBUTE puk_info_tpl[] = {
{CKA_VALUE, (
void*)puk.
data(), (CK_ULONG)puk.
size()},
};
CK_RV rv =
C_GetAttributeValue(session, puk_handle, puk_info_tpl,
sizeof(puk_info_tpl)/
sizeof(CK_ATTRIBUTE));
puk.
resize(puk_info_tpl[1].ulValueLen);
CK_RV C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
Obtains the value of one or more attributes of an object.