Initializes an object search operation.
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount )
{
CK_BYTE * pxFindObjectLabel = NULL;
uint32_t ulIndex;
if( NULL == pTemplate )
{
xResult = CKR_ARGUMENTS_BAD;
}
if( ( ulCount != 1UL ) && ( ulCount != 2UL ) )
{
xResult = CKR_ARGUMENTS_BAD;
PKCS11_PRINT( (
"ERROR: Find objects does not support searching by %d attributes. \r\n", ulCount ) );
}
if( xResult == CKR_OK )
{
{
xResult = CKR_OPERATION_ACTIVE;
PKCS11_PRINT( (
"ERROR: Find object operation already in progress. \r\n" ) );
}
}
if( xResult == CKR_OK )
{
pxFindObjectLabel = pvPortMalloc( pTemplate->ulValueLen + 1UL );
if( pxFindObjectLabel != NULL )
{
( void ) memset( pxFindObjectLabel, 0, pTemplate->ulValueLen + 1UL );
}
else
{
xResult = CKR_HOST_MEMORY;
}
}
if( xResult == CKR_OK )
{
xResult = CKR_TEMPLATE_INCOMPLETE;
for( ulIndex = 0; ulIndex < ulCount; ulIndex++ )
{
xAttribute = pTemplate[ ulIndex ];
if( xAttribute.type == CKA_LABEL )
{
( void ) memcpy( pxSession->
pxFindObjectLabel, xAttribute.pValue, xAttribute.ulValueLen );
xResult = CKR_OK;
}
else
{
}
}
}
if( ( pxSession != NULL ) && ( xResult != CKR_OK ) )
{
vPortFree( pxFindObjectLabel );
}
return xResult;
}
- See also
- C_FindObjects() and C_FindObjectsFinal() which must be called after C_FindObjectsInit().
- Note
- FindObjects parameters are shared by a session. Calling C_FindObjectsInit(), C_FindObjects(), and C_FindObjectsFinal() with the same session across different tasks may lead to unexpected results.
- Parameters
-
[in] | hSession | Handle of a valid PKCS #11 session. |
[in] | pTemplate | Pointer to a template which specifies the object attributes to match. In this port, the only searchable attribute is object label. All other attributes will be ignored. |
[in] | ulCount | The number of attributes in pTemplate. |
- Returns
- CKR_OK if successful. Else, see PKCS #11 specification for more information.