in source/portable/mbedtls/core_pkcs11_mbedtls.c [729:809]
static CK_RV prvRsaKeyAttParse( const CK_ATTRIBUTE * pxAttribute,
mbedtls_rsa_context * pxRsaContext,
CK_BBOOL xIsPrivate )
{
CK_RV xResult = CKR_OK;
/* See explanation in prvCheckValidSessionAndModule for this exception. */
/* coverity[misra_c_2012_rule_10_5_violation] */
CK_BBOOL xBool = ( CK_BBOOL ) CK_FALSE;
switch( pxAttribute->type )
{
case ( CKA_CLASS ):
case ( CKA_KEY_TYPE ):
case ( CKA_LABEL ):
/* Do nothing. These values were parsed previously. */
break;
case ( CKA_TOKEN ):
if( pxAttribute->ulValueLen == sizeof( CK_BBOOL ) )
{
( void ) memcpy( &xBool, pxAttribute->pValue, sizeof( CK_BBOOL ) );
}
/* See explanation in prvCheckValidSessionAndModule for this exception. */
/* coverity[misra_c_2012_rule_10_5_violation] */
if( xBool != ( CK_BBOOL ) CK_TRUE )
{
xResult = CKR_ATTRIBUTE_VALUE_INVALID;
}
break;
case ( CKA_VERIFY ):
/* See explanation in prvCheckValidSessionAndModule for this exception. */
/* coverity[misra_c_2012_rule_10_5_violation] */
if( xIsPrivate == ( CK_BBOOL ) CK_FALSE )
{
xResult = prvRsaPubKeyAttParse( pxAttribute );
}
else
{
xResult = CKR_ATTRIBUTE_VALUE_INVALID;
}
break;
case ( CKA_SIGN ):
/* See explanation in prvCheckValidSessionAndModule for this exception. */
/* coverity[misra_c_2012_rule_10_5_violation] */
if( xIsPrivate == ( CK_BBOOL ) CK_TRUE )
{
xResult = prvRsaPrivKeyAttParse( pxAttribute );
}
else
{
xResult = CKR_ATTRIBUTE_VALUE_INVALID;
}
break;
case ( CKA_MODULUS ):
case ( CKA_PUBLIC_EXPONENT ):
case ( CKA_PRIME_1 ):
case ( CKA_PRIME_2 ):
case ( CKA_PRIVATE_EXPONENT ):
case ( CKA_EXPONENT_1 ):
case ( CKA_EXPONENT_2 ):
case ( CKA_COEFFICIENT ):
xResult = prvRsaContextParse( pxAttribute, pxRsaContext );
break;
default:
xResult = CKR_ATTRIBUTE_TYPE_INVALID;
break;
}
return xResult;
}