corePKCS11  V3.0.0
PKCS #11 Cryptoki Library
C_GetMechanismInfo
CK_DECLARE_FUNCTION( CK_RV, C_GetMechanismInfo )( CK_SLOT_ID slotID,
CK_MECHANISM_TYPE type,
CK_MECHANISM_INFO_PTR pInfo )
{
CK_RV xResult = CKR_MECHANISM_INVALID;
struct CryptoMechanisms
{
CK_MECHANISM_TYPE xType;
CK_MECHANISM_INFO xInfo;
}
pxSupportedMechanisms[] =
{
{ CKM_RSA_PKCS, { 2048, 2048, CKF_SIGN } },
{ CKM_RSA_X_509, { 2048, 2048, CKF_VERIFY } },
#if ( pkcs11configSUPPRESS_ECDSA_MECHANISM != 1 )
{ CKM_ECDSA, { 256, 256, CKF_SIGN | CKF_VERIFY } },
{ CKM_EC_KEY_PAIR_GEN, { 256, 256, CKF_GENERATE_KEY_PAIR } },
#endif
{ CKM_SHA256, { 0, 0, CKF_DIGEST } }
};
uint32_t ulMech = 0;
( void ) slotID;
if( pInfo == NULL )
{
xResult = CKR_ARGUMENTS_BAD;
LogError( ( "Failed to get mechanism info. pInfo was NULL. Expected a "
"pointer to a valid CK_MECHANISM_INFO struct." ) );
}
else
{
/* Look for the requested mechanism in the above table. */
for( ; ulMech < sizeof( pxSupportedMechanisms ) / sizeof( pxSupportedMechanisms[ 0 ] ); ulMech++ )
{
if( pxSupportedMechanisms[ ulMech ].xType == type )
{
/* The mechanism is supported. Copy out the details and break
* out of the loop. */
( void ) memcpy( pInfo, &( pxSupportedMechanisms[ ulMech ].xInfo ), sizeof( CK_MECHANISM_INFO ) );
xResult = CKR_OK;
break;
}
}
}
return xResult;
}
CK_DECLARE_FUNCTION
#define CK_DECLARE_FUNCTION(returnType, name)
Macro for defining a PKCS #11 functions.
Definition: core_pkcs11.h:72