Initializes a signature operation.
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey )
{
CK_BBOOL xIsPrivate = ( CK_BBOOL ) CK_TRUE;
CK_OBJECT_HANDLE xPalHandle;
CK_BYTE_PTR pxLabel = NULL;
CK_ULONG xLabelLength = 0;
CK_BYTE_PTR pucKeyData = NULL;
CK_ULONG ulKeyDataLength = 0;
if( NULL == pMechanism )
{
LogError( (
"Failed to initialize sign operation. NULL pointer to "
"signing mechanism provided." ) );
xResult = CKR_ARGUMENTS_BAD;
}
if( ( xResult == CKR_OK ) && (
prvOperationActive( pxSession ) == ( CK_BBOOL ) CK_TRUE ) )
{
LogError( (
"Failed to initialize sign operation. Operation already active." ) );
xResult = CKR_OPERATION_ACTIVE;
}
if( xResult == CKR_OK )
{
&xPalHandle,
&pxLabel,
&xLabelLength );
if( xPalHandle != CK_INVALID_HANDLE )
{
if( xResult != CKR_OK )
{
LogError( (
"Failed to initialize sign operation. Unable to "
"retrieve value of private key for signing 0x%0lX.", ( unsigned long int ) xResult ) );
xResult = CKR_KEY_HANDLE_INVALID;
}
}
else
{
LogDebug( (
"Could not find PKCS #11 PAL Handle." ) );
xResult = CKR_KEY_HANDLE_INVALID;
}
}
if( xResult == CKR_OK )
{
if( xIsPrivate != ( CK_BBOOL ) CK_TRUE )
{
LogError( (
"Failed to initialize sign operation. Sign operation "
"attempted with public key." ) );
xResult = CKR_KEY_TYPE_INCONSISTENT;
}
}
if( xResult == CKR_OK )
{
if( 0 == mbedtls_mutex_lock( &pxSession->
xSignMutex ) )
{
switch( pMechanism->mechanism )
{
case CKM_RSA_PKCS:
case CKM_ECDSA:
{
}
else
{
}
break;
case CKM_SHA256_HMAC:
{
}
else
{
}
break;
case CKM_AES_CMAC:
{
}
else
{
}
break;
default:
LogError( (
"Failed to initialize sign operation. Received "
"an unknown or invalid mechanism." ) );
xResult = CKR_MECHANISM_INVALID;
break;
}
( void ) mbedtls_mutex_unlock( &pxSession->
xSignMutex );
}
else
{
LogError( (
"Failed sign operation. Could not take sign mutex." ) );
xResult = CKR_CANT_LOCK;
}
}
if( xPalHandle != CK_INVALID_HANDLE )
{
}
if( xResult == CKR_OK )
{
LogDebug( (
"Sign mechanism set to 0x%0lX.", (
unsigned long int ) pMechanism->mechanism ) );
}
return xResult;
}