in source/portable/os/posix/core_pkcs11_pal.c [82:141]
static CK_RV prvReadData( const char * pcFileName,
CK_BYTE_PTR * ppucData,
CK_ULONG_PTR pulDataSize )
{
CK_RV xReturn = CKR_OK;
FILE * pxFile = NULL;
size_t lSize = 0;
pxFile = fopen( pcFileName, "r" );
if( NULL == pxFile )
{
LogError( ( "PKCS #11 PAL failed to get object value. "
"Could not open file named %s for reading.", pcFileName ) );
xReturn = CKR_FUNCTION_FAILED;
}
else
{
( void ) fseek( pxFile, 0, SEEK_END );
lSize = ftell( pxFile );
( void ) fseek( pxFile, 0, SEEK_SET );
if( lSize > 0UL )
{
*pulDataSize = lSize;
*ppucData = malloc( *pulDataSize );
if( NULL == *ppucData )
{
LogError( ( "Could not get object value. Malloc failed to allocate memory." ) );
xReturn = CKR_HOST_MEMORY;
}
}
else
{
LogError( ( "Could not get object value. Failed to determine object size." ) );
xReturn = CKR_FUNCTION_FAILED;
}
}
if( CKR_OK == xReturn )
{
lSize = 0;
lSize = fread( *ppucData, sizeof( uint8_t ), *pulDataSize, pxFile );
if( lSize != *pulDataSize )
{
LogError( ( "PKCS #11 PAL Failed to get object value. Expected to read %ld "
"from %s but received %ld", *pulDataSize, pcFileName, lSize ) );
xReturn = CKR_FUNCTION_FAILED;
}
}
if( NULL != pxFile )
{
( void ) fclose( pxFile );
}
return xReturn;
}