corePKCS11  V3.0.0
PKCS #11 Cryptoki Library
PKCS11_PAL_DestroyObject
CK_RV PKCS11_PAL_DestroyObject( CK_OBJECT_HANDLE xHandle )
{
CK_BYTE_PTR pcLabel = NULL;
CK_ULONG xLabelLength = 0;
CK_RV xResult = CKR_OK;
CK_ATTRIBUTE xLabel = { 0 };
CK_OBJECT_HANDLE xPalHandle = CK_INVALID_HANDLE;
CK_OBJECT_HANDLE xAppHandle2 = CK_INVALID_HANDLE;
CK_BYTE pxPubKeyLabel[] = { pkcs11configLABEL_DEVICE_PUBLIC_KEY_FOR_TLS };
CK_BYTE pxPrivKeyLabel[] = { pkcs11configLABEL_DEVICE_PRIVATE_KEY_FOR_TLS };
prvFindObjectInListByHandle( xHandle, &xPalHandle, &pcLabel, &xLabelLength );
if( pcLabel != NULL )
{
xLabel.type = CKA_LABEL;
xLabel.pValue = pcLabel;
xLabel.ulValueLen = xLabelLength;
xResult = prvOverwritePalObject( xPalHandle, &xLabel );
}
else
{
LogError( ( "Failed destroying object. Could not found the object label." ) );
xResult = CKR_ATTRIBUTE_VALUE_INVALID;
}
if( xResult == CKR_OK )
{
if( 0 == strncmp( xLabel.pValue, pkcs11configLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, xLabel.ulValueLen ) )
{
/* Remove NULL terminator in comparison. */
prvFindObjectInListByLabel( pxPubKeyLabel, sizeof( pkcs11configLABEL_DEVICE_PUBLIC_KEY_FOR_TLS ), &xPalHandle, &xAppHandle2 );
}
else if( 0 == strncmp( xLabel.pValue, pkcs11configLABEL_DEVICE_PUBLIC_KEY_FOR_TLS, xLabel.ulValueLen ) )
{
/* Remove NULL terminator in comparison. */
prvFindObjectInListByLabel( pxPrivKeyLabel, sizeof( pkcs11configLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ), &xPalHandle, &xAppHandle2 );
}
else
{
LogWarn( ( "Trying to destroy an object with an unknown label." ) );
}
if( ( xPalHandle != CK_INVALID_HANDLE ) && ( xAppHandle2 != CK_INVALID_HANDLE ) )
{
xResult = prvDeleteObjectFromList( xAppHandle2 );
}
if( xResult != CKR_OK )
{
LogWarn( ( "Failed to remove xAppHandle2 from object list when destroying object memory." ) );
}
xResult = prvDeleteObjectFromList( xHandle );
}
return xResult;
}
PKCS11_PAL_DestroyObject
CK_RV PKCS11_PAL_DestroyObject(CK_OBJECT_HANDLE xHandle)
Delete an object from NVM.