in source/portable/mbedtls/core_pkcs11_mbedtls.c [5178:5271]
static CK_RV prvCheckGenerateKeyPairPublicTemplate( CK_ATTRIBUTE ** ppxLabel,
CK_ATTRIBUTE * pxAttribute,
uint32_t * pulAttributeMap )
{
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_TRUE;
CK_KEY_TYPE xKeyType = 0xFFFFFFFFUL;
const CK_BYTE pxEcParams[] = pkcs11DER_ENCODED_OID_P256;
const CK_BYTE * pxEcAttVal = NULL;
switch( pxAttribute->type )
{
case ( CKA_LABEL ):
*ppxLabel = pxAttribute;
*pulAttributeMap |= LABEL_IN_TEMPLATE;
break;
case ( CKA_KEY_TYPE ):
if( pxAttribute->ulValueLen == sizeof( CK_KEY_TYPE ) )
{
( void ) memcpy( &xKeyType, ( CK_KEY_TYPE * ) pxAttribute->pValue, sizeof( CK_KEY_TYPE ) );
}
if( xKeyType != CKK_EC )
{
LogError( ( "Failed parsing public key template. Only EC key "
"pair generation is supported." ) );
xResult = CKR_TEMPLATE_INCONSISTENT;
}
break;
case ( CKA_EC_PARAMS ):
pxEcAttVal = ( CK_BYTE * ) pxAttribute->pValue;
if( pxAttribute->ulValueLen == sizeof( pxEcParams ) )
{
if( memcmp( pxEcParams, pxEcAttVal, sizeof( pxEcParams ) ) != 0 )
{
LogError( ( "Failed parsing public key template. Only P-256 key "
"generation is supported." ) );
xResult = CKR_TEMPLATE_INCONSISTENT;
}
}
*pulAttributeMap |= EC_PARAMS_IN_TEMPLATE;
break;
case ( CKA_VERIFY ):
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 )
{
LogError( ( "Failed parsing public key template. Generating public "
"keys that have a value of CK_FALSE for attribute "
"CKA_VERIFY is not supported." ) );
xResult = CKR_TEMPLATE_INCONSISTENT;
}
*pulAttributeMap |= VERIFY_IN_TEMPLATE;
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_TEMPLATE_INCONSISTENT;
}
break;
default:
xResult = CKR_TEMPLATE_INCONSISTENT;
break;
}
return xResult;
}