in components/pkcs11_pal/source/core_pkcs11_pal.c [230:279]
CK_OBJECT_HANDLE PKCS11_PAL_FindObject( CK_BYTE_PTR pxLabel,
CK_ULONG usLength )
{
CK_OBJECT_HANDLE xHandle = eInvalidHandle;
char * pcFileName = NULL;
CK_BYTE_PTR pxObject = NULL;
CK_BBOOL xIsPrivate = ( CK_BBOOL ) CK_TRUE;
CK_ULONG ulObjectLength = sizeof( CK_BYTE );
CK_RV xResult = CKR_OK;
initialize_nvs_partition();
/* Translate from the PKCS#11 label to local storage file name. */
prvLabelToFilenameHandle( pxLabel,
&pcFileName,
&xHandle );
if( pcFileName != NULL )
{
ESP_LOGD( TAG, "Finding file %s", pcFileName );
nvs_handle handle;
esp_err_t err = nvs_open_from_partition(NVS_PART_NAME, NAMESPACE, NVS_READONLY, &handle);
if (err != ESP_OK) {
/* This can happen if namespace doesn't exist yet, so no files stored */
ESP_LOGD(TAG, "failed nvs open %d", err);
return eInvalidHandle;
}
size_t required_size = 0;
err = nvs_get_blob(handle, pcFileName, NULL, &required_size);
if (err != ESP_OK || required_size == 0) {
ESP_LOGE(TAG, "failed nvs get file size %d %d", err, required_size);
xHandle = eInvalidHandle;
}
nvs_close(handle);
}
if( xHandle != eInvalidHandle )
{
xResult = PKCS11_PAL_GetObjectValue( xHandle, &pxObject, &ulObjectLength, &xIsPrivate );
/* Zeroed out object means it has been destroyed. */
if( ( xResult != CKR_OK ) || ( pxObject[ 0 ] == 0x00 ) )
{
xHandle = eInvalidHandle;
}
PKCS11_PAL_GetObjectValueCleanup( pxObject, ulObjectLength );
}
return xHandle;
}