in source/portable/os/freertos_winsim/core_pkcs11_pal.c [160:241]
CK_RV PKCS11_PAL_GetObjectValue( CK_OBJECT_HANDLE xHandle,
CK_BYTE_PTR * ppucData,
CK_ULONG_PTR pulDataSize,
CK_BBOOL * pIsPrivate )
{
CK_RV ulReturn = CKR_KEY_HANDLE_INVALID;
uint32_t ulDriverReturn = 0;
HANDLE hFile = INVALID_HANDLE_VALUE;
uint32_t ulSize = 0;
char * pcFileName = NULL;
ulReturn = PAL_UTILS_HandleToFilename( xHandle,
&pcFileName,
pIsPrivate );
if( ( pcFileName != NULL ) && ( pdTRUE == prvFileExists( pcFileName ) ) )
{
/* Open the file. */
hFile = CreateFileA( pcFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
if( INVALID_HANDLE_VALUE == hFile )
{
ulDriverReturn = GetLastError();
LogError( ( "Unable to open file %d \r\n", ulDriverReturn ) );
ulReturn = CKR_FUNCTION_FAILED;
}
if( 0 == ulReturn )
{
/* Get the file size. */
*pulDataSize = GetFileSize( hFile, ( LPDWORD ) ( &ulSize ) );
/* Create a buffer. */
*ppucData = pvPortMalloc( *pulDataSize );
if( NULL == *ppucData )
{
ulReturn = CKR_HOST_MEMORY;
}
}
/* Read the file. */
if( 0 == ulReturn )
{
if( FALSE == ReadFile( hFile,
*ppucData,
*pulDataSize,
( LPDWORD ) ( &ulSize ),
NULL ) )
{
LogError( ( "Unable to read file \r\n" ) );
ulReturn = CKR_FUNCTION_FAILED;
}
}
/* Confirm the amount of data read. */
if( 0 == ulReturn )
{
ulReturn = CKR_OK;
if( ulSize != *pulDataSize )
{
ulReturn = CKR_FUNCTION_FAILED;
}
}
/* Clean up. */
if( INVALID_HANDLE_VALUE != hFile )
{
CloseHandle( hFile );
}
}
return ulReturn;
}