blob: 8a0e2760dcf2dc91971635b2905b7abbc646cb76 [file] [log] [blame]
Libraries
=========
Some deployments build common functionality into libraries that may be used by
other deployments or external applications. The following library deployments
are currently supported:
The libraries will have a build type-specific suffix added to the base name of
their binaries, allowing multiple binaries to be installed in the same tree.
(See :ref:`Selecting the build type`) This differentiation applies to the
``Debug`` and ``DebugCoverage`` build types. The system integrator must choose
which single ``Release<XXX>`` build type is to be supported in the system.
Package managers and mutually exclusive release packages can be used to add
further flexibility.
.. _libs-libts:
libts
-----
Userspace applications that depend on trusted services may use *libts* for handling
service discovery and RPC messaging. A major benefit to application developers is
that *libts* entirely decouples client applications from details of where a service
provider is deployed and how to communicate with it. All TS test executables and
tools that interact with service providers use *libts*.
To facilitate test and development within a native PC environment, the *libts*
deployment for the *linux-pc* environment integrates a set of service providers
into the library itself. From a client application's perspective, this looks
exactly the same as when running on a target platform with service providers
deployed in secure processing environments. For more information, see:
:ref:`Service Locator`.
.. list-table::
:widths: 1 2
:header-rows: 0
* - Supported Environments
- * | *linux-pc* - service providers integrated into library
* | *arm-linux* - communicates with service providers in secure processing environment
* - Used by
- * Userspace applications.
.. _libs-libpsats:
libpsats
--------
Trusted Services implements the `PSA Certified APIs`_. Libpsats encapsulates the service client implementations
which implement this API. Linux uuser-space applications can use libpsats to easily access the PSA services
implemented by the project. Libpsats depends on libts for RPC and service discovery services.
.. list-table::
:widths: 1 2
:header-rows: 0
* - Supported Environments
- * | *linux-pc*
* | *arm-linux*
* - Used by
- * Userspace applications
* - Depends on
- * `libts`_ library
Build and integration examples
..............................
Build as shared library::
cmake -S ./trusted-services/deployments/libpsats/linux-pc/ -B ./build
make -C build && make -C build install
.. warning::
Building as static library is not yet supported.
To integrate the library libts shall also be integrated. To achieve this add the listed
lines to the application's cmake files::
find_package(libpsats "1.0.0" REQUIRED PATHS "<install path>")
find_package(libts "2.0.0" REQUIRED PATHS "<install path>")
target_link_libraries(ts-demo PRIVATE libpsats::psats)
Initialization
..............
Before calling any function from libpsats the proper part of the library has to be initialized.
Before exiting the application (or when PSA services are no longer needed) the initialized
parts must be deinitialized. To access the library **libpsats.h** must be included::
psa_status_t libpsats_init_crypto_context(const char *service_name);
void libpsats_deinit_crypto_context(void);
psa_status_t libpsats_init_attestation_context(const char *service_name);
void libpsats_deinit_attestation_context(void);
psa_status_t libpsats_init_its_context(const char *service_name);
void libpsats_deinit_its_context(void);
psa_status_t libpsats_init_ps_context(const char *service_name);
void libpsats_deinit_ps_context(void);
The example below initializes and then deinitializes crypto::
psa_status_t psa_status = libpsats_init_crypto_context("sn:trustedfirmware.org:crypto:0");
if (psa_status) {
printf("libpsats_init_crypto_context failed: %d\n", psa_status);
return PSA_ERROR_GENERIC_ERROR;
}
libpsats_deinit_crypto_context();
Known issues and Limitations
............................
| The library is single client.
| The library is not thread safe.
| Only linux user-space is supported currently.
.. _libs-libsp:
libsp
-----
*libsp* provides a functional interface for using FF-A messaging and memory
management facilities. *libsp* is used in SP deployments. For more information, see:
:ref:`libsp`.
.. list-table::
:widths: 1 2
:header-rows: 0
* - Supported Environments
- * | *opteesp*
* - Used by
- * Secure partitions
Known issues and Limitations
............................
| The library is single client.
| The library is not thread safe.
| Only linux user-space is supported currently.
--------------
.. _`PSA Certified APIs`: https://arm-software.github.io/psa-api/
*Copyright (c) 2022-2023, Arm Limited and Contributors. All rights reserved.*
SPDX-License-Identifier: BSD-3-Clause