CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey )
{
CK_RV xResult = CKR_OK;
CK_OBJECT_HANDLE xPalHandle = CK_INVALID_HANDLE;
CK_BYTE_PTR pxLabel = NULL;
CK_ULONG xLabelLength = 0;
CK_BYTE_PTR pucKeyData = NULL;
CK_ULONG ulKeyDataLength = 0;
CK_BBOOL xIsPrivate = ( CK_BBOOL ) CK_TRUE;
if( NULL == pMechanism )
{
LogError( (
"Failed to initialize verify operation. Null verification "
"mechanism provided." ) );
xResult = CKR_ARGUMENTS_BAD;
}
if( ( xResult == CKR_OK ) && (
prvOperationActive( pxSession ) == ( CK_BBOOL ) CK_TRUE ) )
{
LogError( (
"Failed to initialize verify operation. An operation was "
"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 verify operation. Unable to "
"retrieve value of public key for verification 0x%0lX.",
( unsigned long int ) xResult ) );
xResult = CKR_KEY_HANDLE_INVALID;
}
}
else
{
LogError( (
"Failed to initialize verify operation. Couldn't find "
"a valid PKCS #11 PAL Handle." ) );
xResult = CKR_KEY_HANDLE_INVALID;
}
}
if( xResult == CKR_OK )
{
{
switch( pMechanism->mechanism )
{
case CKM_RSA_PKCS:
case CKM_RSA_X_509:
case CKM_ECDSA:
if( xIsPrivate != ( CK_BBOOL ) CK_FALSE )
{
LogError( (
"Failed to initialize verify operation. Verify "
"operation attempted with private key." ) );
xResult = CKR_KEY_TYPE_INCONSISTENT;
}
{
}
else
{
}
break;
case CKM_SHA256_HMAC:
{
}
break;
case CKM_AES_CMAC:
{
}
break;
default:
LogError( (
"Failed to initialize verify operation. Received "
"an unknown or invalid mechanism." ) );
xResult = CKR_MECHANISM_INVALID;
break;
}
}
else
{
LogError( (
"Verify operation failed. Could not take verify mutex." ) );
xResult = CKR_CANT_LOCK;
}
}
if( xPalHandle != CK_INVALID_HANDLE )
{
}
if( xResult == CKR_OK )
{
LogDebug( (
"Verify mechanism set to 0x%0lX.", (
unsigned long int ) pMechanism->mechanism ) );
}
return xResult;
}
#define CK_DECLARE_FUNCTION(returnType, name)
Macro for defining a PKCS #11 functions.
Definition: core_pkcs11.h:77
#define LogError(message)
Macro that is called in the corePKCS11 library for logging "Error" level messages.
Definition: core_pkcs11_config_defaults.h:317
#define LogDebug(message)
Macro that is called in the corePKCS11 library for logging "Debug" level messages.
Definition: core_pkcs11_config_defaults.h:377
static CK_BBOOL prvOperationActive(const P11Session_t *pxSession)
Determines if an operation is in progress.
Definition: core_pkcs11_mbedtls.c:414
static CK_RV prvVerifyInitSHA256HMAC(P11Session_t *pxSession, CK_OBJECT_HANDLE hKey, CK_BYTE_PTR pucKeyData, CK_ULONG ulKeyDataLength)
Helper function for initializing a verify operation for SHA256-HMAC.
Definition: core_pkcs11_mbedtls.c:4664
static CK_RV prvVerifyInitEC_RSAKeys(P11Session_t *pxSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey, CK_BYTE_PTR pucKeyData, CK_ULONG ulKeyDataLength)
Helper function for initializing a verify operation for an EC or RSA key.
Definition: core_pkcs11_mbedtls.c:4720
static P11Session_t * prvSessionPointerFromHandle(CK_SESSION_HANDLE xSession)
Maps an opaque caller session handle into its internal state structure.
Definition: core_pkcs11_mbedtls.c:394
static CK_RV prvVerifyInitAESCMAC(P11Session_t *pxSession, CK_OBJECT_HANDLE hKey, CK_BYTE_PTR pucKeyData, CK_ULONG ulKeyDataLength)
Helper function for initializing a verify operation for AES-CMAC.
Definition: core_pkcs11_mbedtls.c:4686
static void prvFindObjectInListByHandle(CK_OBJECT_HANDLE xAppHandle, CK_OBJECT_HANDLE_PTR pxPalHandle, CK_BYTE_PTR *ppcLabel, CK_ULONG_PTR pxLabelLength)
Looks up a PKCS #11 object's label and PAL handle given an application handle.
Definition: core_pkcs11_mbedtls.c:1138
static CK_RV prvCheckValidSessionAndModule(const P11Session_t *pxSession)
Helper to check if the current session is initialized and valid.
Definition: core_pkcs11_mbedtls.c:348
CK_RV C_VerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey)
Initializes a verification operation.
Definition: core_pkcs11_mbedtls.c:4819
CK_RV PKCS11_PAL_GetObjectValue(CK_OBJECT_HANDLE xHandle, CK_BYTE_PTR *ppucData, CK_ULONG_PTR pulDataSize, CK_BBOOL *pIsPrivate)
Gets the value of an object in storage, by handle.
void PKCS11_PAL_GetObjectValueCleanup(CK_BYTE_PTR pucData, CK_ULONG ulDataSize)
Cleanup after PKCS11_GetObjectValue().
Session structure.
Definition: core_pkcs11_mbedtls.c:311
mbedtls_threading_mutex_t xVerifyMutex
Protects the verification key from being modified while in use.
Definition: core_pkcs11_mbedtls.c:318
CK_MECHANISM_TYPE xOperationVerifyMechanism
The mechanism of verify operation in progress. Set during C_VerifyInit.
Definition: core_pkcs11_mbedtls.c:317
CK_OBJECT_HANDLE xCMACKeyHandle
Object handle to the CMAC key.
Definition: core_pkcs11_mbedtls.c:328
CK_OBJECT_HANDLE xHMACKeyHandle
Object handle to the HMAC key.
Definition: core_pkcs11_mbedtls.c:326
CK_OBJECT_HANDLE xVerifyKeyHandle
Object handle to the verification key.
Definition: core_pkcs11_mbedtls.c:319
Initializes a verification operation.