blob: d9fb9a9c10e15c7ba90ac176f5d011a1e39cc915 [file] [log] [blame]
Gilles Peskine2a079ac2019-10-15 16:08:13 +02001<h1 id="psa-cryptography-interfaces">PSA cryptography interfaces</h1>
2<p>This page contains technical information about the cryptography interfaces in the Arm Platform Security Architecture (PSA) and related documents and software. For more information about the Platform Security Architecture, see <a href="https://developer.arm.com/architectures/security-architectures/platform-security-architecture">the Arm Developer website</a>.</p>
3<h2 id="application-programming-interface">Application programming interface</h2>
4<p>The PSA Cryptography API is a C programming interface for applications that wish to store cryptographic keys and use them to perform cryptographic operations.</p>
Gilles Peskine2a079ac2019-10-15 16:08:13 +02005<p><strong>Reference documentation</strong>: <a href="../html/index.html">HTML</a>, <a href="../PSA_Cryptography_API_Specification.pdf">PDF</a></p>
Gilles Peskined5137322020-04-17 17:06:30 +02006<p><strong>Reference implementation</strong>: <a href="https://github.com/ARMmbed/mbed-tls">Mbed TLS</a></p>
Gilles Peskine2a079ac2019-10-15 16:08:13 +02007<h2 id="hardware-abstraction-layer">Hardware abstraction layer</h2>
Gilles Peskine0f1231c2021-01-18 21:04:20 +01008<h3 id="unified-driver-interface">Unified driver interface</h3>
9<p>There is work in progress to define a PSA cryptography driver interface, allowing an implementation of the PSA Cryptography API to make use of dedicated hardware (accelerators, secure elements, random generators, etc.) or other external systems such as a remote key store. The driver interface is being tried out in Mbed TLS. Arm expects to make it an official PSA specification once it has been sufficiently validated.</p>
10<p>For more information, please see the <a href="https://github.com/ARMmbed/mbedtls/blob/development/docs/proposed/psa-driver-interface.md">proposed driver interface</a> as well as the <a href="https://github.com/ARMmbed/mbedtls/issues?q=+label%3AHwDrivers+">ongoing specification and implementation effort</a>.</p>
11<p>PSA includes functional specifications describing a hardware abstraction layer covering <a href="accel/">cryptographic accelerators</a>, <a href="se/">secure elements</a> and <a href="entropy/">entropy sources</a>.</p>
Gilles Peskine2a079ac2019-10-15 16:08:13 +020012<h3 id="secure-element-driver-interface">Secure element driver interface</h3>
Gilles Peskine0f1231c2021-01-18 21:04:20 +010013<p>The dynamic secure element driver interface lets you write drivers for external cryptoprocessors such as secure elements (SE), smart cards and hardware security modules (HSM) that perform operations on keys that never leave the external processor and are accessed only through opaque handles. Such drivers can be loaded dynamically into an implementation of the PSA Cryptography API such as Mbed TLS.</p>
14<p>Work on this interface is currently frozen. The <a href="#unified-driver-interface">unified driver interface</a> replaces the older dynamic secure element driver for most purposes. The older interface the advantage of allowing drivers to be dynamically loaded. If there is widespread demand for dynamic loading of secure element drivers, Arm may revive the effort on the older interface or merge it into the unified interface.</p>
Gilles Peskine2a079ac2019-10-15 16:08:13 +020015<p>For more information, see <a href="se/">PSA secure element driver interface</a>.</p>
Gilles Peskineb78b6282019-10-15 16:26:55 +020016<h2 id="feedback">Feedback</h2>
Gilles Peskined5137322020-04-17 17:06:30 +020017<p>Arm welcomes feedback on the design of the PSA cryptography interfaces. If you think something could be improved, please open an <a href="https://github.com/ARMmbed/mbedtls/labels/api-spec">issue on the Mbed TLS GitHub repository</a>. Alternatively, if you prefer to provide your feedback privately, please email us at <code>mbed-crypto@arm.com</code>. All feedback received by email is treated confidentially.</p>