From 7bd5ce8f03604e864613aaa73b721fcb30fbf10e Mon Sep 17 00:00:00 2001 From: Joakim Bech Date: Thu, 21 Feb 2019 12:34:48 +0100 Subject: [PATCH] docs: Remove current docs and link to the new location All current documentation has been transferred to a new git called optee_docs [1]. The output from optee_docs will be rendered using Sphinx and hosted at optee.readthedocs.io [2]. The new documentation git will also be part of the regular OP-TEE releases. For completeness, it will also be included in our manifests making up a full OP-TEE developer setup. [1] https://github.com/OP-TEE/optee_docs [2] https://optee.readthedocs.io Signed-off-by: Joakim Bech Acked-by: Jerome Forissier --- Notice.md | 157 --- README.md | 148 +-- documentation/abort_dumps.rst | 109 --- documentation/benchmark.md | 130 --- documentation/build_system.md | 331 ------- .../copyright_and_license_headers.rst | 39 - documentation/crypto.md | 174 ---- documentation/dt-bindings/README.txt | 9 - documentation/extensions/crypto_concat_kdf.md | 111 --- documentation/extensions/crypto_hkdf.md | 99 -- documentation/extensions/crypto_pbkdf2.md | 94 -- .../extensions/crypto_rsassa_pkcs1_v1_5.md | 20 - documentation/extensions/extensions.md | 33 - documentation/external_libraries.rst | 109 --- documentation/file_structure.md | 67 -- documentation/github.md | 213 ----- documentation/globalplatform_api.md | 105 --- documentation/gprof.md | 60 -- .../images/benchmark/benchmark_design.png | Bin 64218 -> 0 bytes .../images/benchmark/benchmark_design.xml | 1 - .../images/benchmark/benchmark_sequence.msc | 46 - .../images/benchmark/benchmark_sequence.png | Bin 157248 -> 0 bytes documentation/images/green.svg | 12 - .../images/interrupt_handling/Makefile | 20 - .../images/interrupt_handling/fiq.msc | 24 - .../images/interrupt_handling/fiq.png | Bin 29515 -> 0 bytes .../images/interrupt_handling/irq.msc | 30 - .../images/interrupt_handling/irq.png | Bin 44934 -> 0 bytes .../images/interrupt_handling/irq_fiq.msc | 43 - .../images/interrupt_handling/irq_fiq.png | Bin 69372 -> 0 bytes .../images/interrupt_handling/tee_invoke.msc | 25 - .../images/interrupt_handling/tee_invoke.png | Bin 35023 -> 0 bytes documentation/images/orange.svg | 12 - documentation/images/red.svg | 12 - .../secure_storage/block_data_encryption.odg | Bin 14066 -> 0 bytes .../secure_storage/block_data_encryption.png | Bin 38881 -> 0 bytes .../secure_storage/meta_data_encryption.odg | Bin 14494 -> 0 bytes .../secure_storage/meta_data_encryption.png | Bin 40220 -> 0 bytes .../secure_storage_system_architecture.odg | Bin 24051 -> 0 bytes .../secure_storage_system_architecture.png | Bin 37219 -> 0 bytes documentation/images/xlat_table.dot | 29 - documentation/images/xlat_table.png | Bin 31825 -> 0 bytes documentation/interrupt_handling.md | 279 ------ documentation/optee_design.md | 890 ------------------ documentation/optee_with_auth_framework.md | 20 - documentation/porting_guidelines.md | 378 -------- documentation/secure_storage.md | 237 ----- documentation/secure_storage_rpmb.md | 147 --- documentation/virtualization.md | 191 ---- 49 files changed, 4 insertions(+), 4400 deletions(-) delete mode 100644 Notice.md delete mode 100644 documentation/abort_dumps.rst delete mode 100644 documentation/benchmark.md delete mode 100644 documentation/build_system.md delete mode 100644 documentation/copyright_and_license_headers.rst delete mode 100644 documentation/crypto.md delete mode 100644 documentation/dt-bindings/README.txt delete mode 100644 documentation/extensions/crypto_concat_kdf.md delete mode 100644 documentation/extensions/crypto_hkdf.md delete mode 100644 documentation/extensions/crypto_pbkdf2.md delete mode 100644 documentation/extensions/crypto_rsassa_pkcs1_v1_5.md delete mode 100644 documentation/extensions/extensions.md delete mode 100644 documentation/external_libraries.rst delete mode 100644 documentation/file_structure.md delete mode 100644 documentation/github.md delete mode 100644 documentation/globalplatform_api.md delete mode 100644 documentation/gprof.md delete mode 100644 documentation/images/benchmark/benchmark_design.png delete mode 100644 documentation/images/benchmark/benchmark_design.xml delete mode 100644 documentation/images/benchmark/benchmark_sequence.msc delete mode 100644 documentation/images/benchmark/benchmark_sequence.png delete mode 100644 documentation/images/green.svg delete mode 100644 documentation/images/interrupt_handling/Makefile delete mode 100644 documentation/images/interrupt_handling/fiq.msc delete mode 100644 documentation/images/interrupt_handling/fiq.png delete mode 100644 documentation/images/interrupt_handling/irq.msc delete mode 100644 documentation/images/interrupt_handling/irq.png delete mode 100644 documentation/images/interrupt_handling/irq_fiq.msc delete mode 100644 documentation/images/interrupt_handling/irq_fiq.png delete mode 100644 documentation/images/interrupt_handling/tee_invoke.msc delete mode 100644 documentation/images/interrupt_handling/tee_invoke.png delete mode 100644 documentation/images/orange.svg delete mode 100644 documentation/images/red.svg delete mode 100644 documentation/images/secure_storage/block_data_encryption.odg delete mode 100644 documentation/images/secure_storage/block_data_encryption.png delete mode 100644 documentation/images/secure_storage/meta_data_encryption.odg delete mode 100644 documentation/images/secure_storage/meta_data_encryption.png delete mode 100644 documentation/images/secure_storage/secure_storage_system_architecture.odg delete mode 100644 documentation/images/secure_storage/secure_storage_system_architecture.png delete mode 100644 documentation/images/xlat_table.dot delete mode 100644 documentation/images/xlat_table.png delete mode 100644 documentation/interrupt_handling.md delete mode 100644 documentation/optee_design.md delete mode 100644 documentation/optee_with_auth_framework.md delete mode 100644 documentation/porting_guidelines.md delete mode 100644 documentation/secure_storage.md delete mode 100644 documentation/secure_storage_rpmb.md delete mode 100644 documentation/virtualization.md diff --git a/Notice.md b/Notice.md deleted file mode 100644 index f8db98f8d..000000000 --- a/Notice.md +++ /dev/null @@ -1,157 +0,0 @@ -OP-TEE -======= - -This is the repository of OP-TEE (Open Portable Trusted Execution Environment), -the open-source TEE maintained by Linaro, with initial contributions from -STMicroelectronics, Ericsson and Linaro Limited. - -What OP-TEE is -------- - -OP-TEE is a Trusted Execution Environment designed as companion to a non-secure -Linux kernel running on ARM® Cortex-A cores using the TrustZone® -technology. OP-TEE meets the TEE System Architecture and provides the TEE -Internal Core API v1.1 to Trusted Applications and the TEE Client API -v1.0, all as defined by the [GlobalPlatform TEE specifications]. - -The non-secure OS is referred to as the Rich Execution Environment (REE) in TEE -specifications. It is typically a Linux OS flavor as a GNU/Linux distribution -or the AOSP. - -OP-TEE is designed primarily to rely on the ARM TrustZone technology as -the underlying hardware isolation mechanism. However, it has been structured -to be compatible with any isolation technology suitable for the TEE concept and -goals, such as running as a virtual machine or on a dedicated CPU. - -The main design goals for OP-TEE are: -- Isolation - the TEE provides isolation from the non-secure OS and - protects the loaded Trusted Applications (TAs) from each other using - underlying HW support, -- Small footprint - the TEE should remain small enough to - reside in a reasonable amount of on-chip memory as found on ARM - based systems, -- Portability - the TEE aims at being easily pluggable to different - architectures and available HW and has to support various setups - such as multiple client OSes or multiple TEEs. - - -Repository structure ------- - -OP-TEE comes with several components: -- a secure privileged layer, executing at ARM secure PL-1 level, -- a set of secure userland libraries designed for Trusted Applications - needs, -- a Linux kernel driver merged since v4.12, -- a Linux userland library designed upon the GPD TEE Client API - specifications -- a Linux userland supplicant application for remote services expected by - the TEE OS, -- and some build scripts, debugging tools and examples to ease its - integration and the development of trusted applications and secure - services. - -These components are available from several git repositories. The main ones are -the [optee_os], the [optee_client] and the [Linux kernel] since v4.12. - -The [optee_os] git repository contains the source code for the TEE OS itself. -It includes the secure privileged layer hosting the Trusted Applications and -libraries complying with the TEE Internal Core API v1.1. It is distributed mostly -under the [BSD 2-Clause] open-source license. It includes few external files under -[BSD 3-Clause] license or other free software licenses. - -The [optee_client] git repository contains the source code for the TEE client -library in a Linux OS providing the TEE Client API v1.0. It is distributed under -the [BSD 2-Clause] open-source license. - -The [Linux kernel] contains the source code for the OP-TEE Linux driver. It is -distributed under the [GPLv2] open-source license. - -There are other OP-TEE components one might be interested in. The OP-TEE release tag -references several git repositories enabling OP-TEE build and test for various -platforms. Refer to the [build documentation] for information. The [optee_test] git -repository proposes test materials through the `xtest` tool and dedicated trusted -applications. The [optee_examples] git repository contains examples of TEE client -and trusted applications and some documentation to get hands on trusted -application development. - -Documentation ------- -Documentation on design, implementation and tools can be found in -[optee_os/documentation](optee_os/documentation). - -Contributions ------- - -Contributions to OP-TEE are managed by the OP-TEE gatekeepers, whose contact -email is op-tee[at]linaro[.]org. - -Anyone can contribute to OP-TEE as long as it is understood that it will require -a sign-off. The sign-off is a simple line at the end of the explanation for the -patch, which certifies that you wrote it or otherwise have the right to -pass it on as an open-source patch (see below). You thereby assure that you have -read and are following the rules stated in the `Developer Certificate of Origin` -as stated below. - -``` -Developer Certificate of Origin -Version 1.1 - -Copyright (C) 2004, 2006 The Linux Foundation and its contributors. -660 York Street, Suite 102, -San Francisco, CA 94110 USA - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - - -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. -``` - -We have borrowed this procedure from the Linux kernel project to -improve tracking of who did what, and for legal reasons. - -To sign-off a patch, just add a line saying: -``` - Signed-off-by: Random J Developer -``` -using your real name (sorry, no pseudonyms or anonymous contributions.) - -Refer also to [github.md](documentation/github.md) to setup a github accournt -in order to contribute to the project through issues reporting and pull -requests. - -[BSD 2-Clause]: http://opensource.org/licenses/BSD-2-Clause -[BSD 3-Clause]: http://opensource.org/licenses/BSD-3-Clause -[GPLv2]: https://opensource.org/licenses/gpl-2.0 -[build documentation]: documentation/build_system.md -[GlobalPlatform TEE specifications]: https://www.globalplatform.org/specificationsdevice.asp -[Linux kernel]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git -[optee_client]: https://github.com/OP-TEE/optee_client -[optee_examples]: https://github.com/OP-TEE/optee_examples -[optee_os]: https://github.com/OP-TEE/optee_os -[optee_test]: https://github.com/OP-TEE/optee_test diff --git a/README.md b/README.md index 973b2dc4f..328078e1e 100644 --- a/README.md +++ b/README.md @@ -1,147 +1,7 @@ # OP-TEE Trusted OS -## Contents -1. [Introduction](#1-introduction) -2. [License](#2-license) -3. [Platforms supported](#3-platforms-supported) -4. [Get and build OP-TEE software](#4-get-and-build-op-tee-software) -5. [Coding standards](#5-coding-standards) +This git contains source code for the secure side implementation of OP-TEE +project. -## 1. Introduction -The `optee_os` git repository contains the source code of a Trusted Execution -Environment (TEE) as companion to a non-secure OS on ARM® -Cortex-A cores using the TrustZone® technology. This component meets the -[TEE System Architecture specifications](http://www.globalplatform.org/specificationsdevice.asp) -and provides the -[TEE Internal Core API v1.1](http://www.globalplatform.org/specificationsdevice.asp) -as defined by the -[GlobalPlatform Device technology TEE specifications](http://www.globalplatform.org/specificationsdevice.asp) -for the development of -Trusted Applications. For a general overview of OP-TEE and to find out how to -contribute, please see the [Notice.md](Notice.md) file. +All official OP-TEE documentation has moved to http://optee.readthedocs.io. -The Trusted OS is accessible from the Rich OS (Linux) using the -[GlobalPlatform TEE Client API Specification v1.0](http://www.globalplatform.org/specificationsdevice.asp), -which also is used to trigger secure execution of applications within the TEE. - ---- -## 2. License -The software is distributed mostly under the -[BSD 2-Clause](http://opensource.org/licenses/BSD-2-Clause) open source -license, apart from some files in the `optee_os/lib/libutils` directory -which are distributed under the -[BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) or public domain -licenses. - ---- -## 3. Platforms supported -Several platforms are supported. In order to manage slight differences -between platforms, a `PLATFORM_FLAVOR` flag has been introduced. -The `PLATFORM` and `PLATFORM_FLAVOR` flags define the whole configuration -for a chip the where the Trusted OS runs. Note that there is also a -composite form which makes it possible to append `PLATFORM_FLAVOR` directly, -by adding a dash in-between the names. The composite form is shown below -for the different boards. For more specific details about build flags etc, -please read the file [build_system.md](documentation/build_system.md). Some -platforms have different sub-maintainers, please refer to the file -[MAINTAINERS](MAINTAINERS) for contact details for various platforms. - -The **Maintained?** column shows: - -- A green image if the platform is actively maintained: either tested successfully - with the latest release (N), or is a newly supported platform. -- An orange image if the platform was last tested successfully with release N-1. -- A red image if the last successful test report is older. - - -| Platform | Composite PLATFORM flag | Publicly available? | Maintained? | -|----------|-------------------------|---------------------|-------------| -| [ARM Juno Board](http://www.arm.com/products/tools/development-boards/versatile-express/juno-arm-development-platform.php) |`PLATFORM=vexpress-juno`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [Atmel ATSAMA5D2-XULT Board](http://www.atmel.com/tools/atsama5d2-xult.aspx)|`PLATFORM=sam`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [Broadcom ns3](https://www.broadcom.com/)|`PLATFORM=bcm-ns3`| No | ![Actively Maintained](documentation/images/green.svg) | -| [DeveloperBox (Socionext Synquacer SC2A11)](https://www.96boards.org/product/developerbox/)|`PLATFORM=synquacer`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [FSL ls1021a](http://www.freescale.com/tools/embedded-software-and-tools/hardware-development-tools/tower-development-boards/mcu-and-processor-modules/powerquicc-and-qoriq-modules/qoriq-ls1021a-tower-system-module:TWR-LS1021A?lang_cd=en)|`PLATFORM=ls-ls1021atwr`| Yes | ![Actively maintained](documentation/images/green.svg) | -| [NXP ls1043ardb](http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/qoriq-platforms/developer-resources/qoriq-ls1043a-reference-design-board:LS1043A-RDB)|`PLATFORM=ls-ls1043ardb`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP ls1046ardb](http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/qoriq-platforms/developer-resources/qoriq-ls1046a-reference-design-board:LS1046A-RDB)|`PLATFORM=ls-ls1046ardb`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP ls1012ardb](http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/qoriq-platforms/developer-resources/qoriq-ls1012a-reference-design-board:LS1012A-RDB)|`PLATFORM=ls-ls1012ardb`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP ls1088ardb](http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/qoriq-platforms/developer-resources/qoriq-ls1088a-reference-design-board:LS1088A-RDB)|`PLATFORM=ls-ls1088ardb`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP ls2088ardb](http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/qoriq-platforms/developer-resources/qoriq-ls2088a-reference-design-board:LS2088A-RDB)|`PLATFORM=ls-ls2088ardb`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP ls1012afrwy](https://www.nxp.com/support/developer-resources/software-development-tools/qoriq-developer-resources/layerscape-frwy-ls1012a-board:FRWY-LS1012A)|`PLATFORM=ls-ls1012afrwy`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP lx2160ardb](https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/qoriq-layerscape-arm-processors/layerscape-lx2160a-multicore-communications-processor:LX2160A)|`PLATFORM=ls-lx2160ardb`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [FSL i.MX6 Quad SABRE Lite Board](https://boundarydevices.com/product/sabre-lite-imx6-sbc/) |`PLATFORM=imx-mx6qsabrelite`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [FSL i.MX6 Quad SABRE SD Board](http://www.nxp.com/products/software-and-tools/hardware-development-tools/sabre-development-system/sabre-board-for-smart-devices-based-on-the-i.mx-6quad-applications-processors:RD-IMX6Q-SABRE) |`PLATFORM=imx-mx6qsabresd`| Yes | ![Actively maintained](documentation/images/green.svg) | -| [SolidRun i.MX6 Quad Hummingboard Edge](https://www.solid-run.com/product/hummingboard-edge-imx6q-wa-h/) |`PLATFORM=imx-mx6qhmbedge`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [SolidRun i.MX6 Dual Hummingboard Edge](https://www.solid-run.com/product/hummingboard-edge-imx6d-wa-h/) |`PLATFORM=imx-mx6dhmbedge`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [SolidRun i.MX6 Dual Lite Hummingboard Edge](https://www.solid-run.com/product/hummingboard-edge-imx6dl-0c-h/) |`PLATFORM=imx-mx6dlhmbedge`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [SolidRun i.MX6 Solo Hummingboard Edge](https://www.solid-run.com/product/hummingboard-edge-imx6s-wa-h/) |`PLATFORM=imx-mx6shmbedge`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [FSL i.MX6 UltraLite EVK Board](http://www.freescale.com/products/arm-processors/i.mx-applications-processors-based-on-arm-cores/i.mx-6-processors/i.mx6qp/i.mx6ultralite-evaluation-kit:MCIMX6UL-EVK) |`PLATFORM=imx-mx6ulevk`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP i.MX7Dual SabreSD Board](http://www.nxp.com/products/software-and-tools/hardware-development-tools/sabre-development-system/sabre-board-for-smart-devices-based-on-the-i.mx-7dual-applications-processors:MCIMX7SABRE) |`PLATFORM=imx-mx7dsabresd`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP i.MX7Solo WaRP7 Board](http://www.nxp.com/products/developer-resources/reference-designs/warp7-next-generation-iot-and-wearable-development-platform:WARP7) |`PLATFORM=imx-mx7swarp7`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP i.MX7Solo WaRP7 Board - Mbed Linux OS](https://os.mbed.com/platforms/WaRP7) |`PLATFORM=imx-mx7swarp7_mbl`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP i.MX8MQEVK Board](https://www.nxp.com/support/developer-resources/run-time-software/i.mx-developer-resources/evaluation-kit-for-the-i.mx-8m-applications-processor:MCIMX8M-EVK) |`PLATFORM=imx-imx8mqevk`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [NXP i.MX8MMEVK Board](https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/i.mx-applications-processors/i.mx-8-processors/i.mx-8m-mini-family-arm-cortex-a53-cortex-m4-audio-voice-video:i.MX8MMINI?lang=en&lang_cd=en&) |`PLATFORM=imx-imx8mmevk`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [ARM Foundation FVP](https://developer.arm.com/products/system-design/fixed-virtual-platforms) |`PLATFORM=vexpress-fvp`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [HiSilicon D02](http://open-estuary.org/d02-2)|`PLATFORM=d02`| No | ![Actively Maintained](documentation/images/green.svg) | -| [HiKey Board (HiSilicon Kirin 620)](https://www.96boards.org/product/hikey)|`PLATFORM=hikey` or `PLATFORM=hikey-hikey`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [HiKey960 Board (HiSilicon Kirin 960)](https://www.96boards.org/product/hikey960)|`PLATFORM=hikey-hikey960`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [Marvell ARMADA 7K Family](http://www.marvell.com/embedded-processors/armada-70xx/)|`PLATFORM=marvell-armada7k8k`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [Marvell ARMADA 8K Family](http://www.marvell.com/embedded-processors/armada-80xx/)|`PLATFORM=marvell-armada7k8k`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [Marvell ARMADA 3700 Family](http://www.marvell.com/embedded-processors/armada-3700/)|`PLATFORM=marvell-armada3700`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [MediaTek MT8173 EVB Board](https://www.mediatek.com/products/tablets/mt8173)|`PLATFORM=mediatek-mt8173`| No | ![Not maintained](documentation/images/green.svg) v3.0.0 | -| [Poplar Board (HiSilicon Hi3798C V200)](https://www.96boards.org/product/poplar)|`PLATFORM=poplar`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [QEMU](http://wiki.qemu.org/Main_Page) |`PLATFORM=vexpress-qemu_virt`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [QEMUv8](http://wiki.qemu.org/Main_Page) |`PLATFORM=vexpress-qemu_armv8a`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b) |`PLATFORM=rpi3`| Yes | ![Actively maintained](documentation/images/green.svg) | -| [Renesas RCAR](https://www.renesas.com/en-sg/solutions/automotive/products/rcar-h3.html)|`PLATFORM=rcar`| No | ![Actively maintained](documentation/images/green.svg) | -| [Rockchip RK322X](http://www.rock-chips.com/a/en/products/RK32_Series/2016/1109/799.html) |`PLATFORM=rockchip-rk322x`| No | ![Actively maintained](documentation/images/green.svg) | -| [STMicroelectronics b2260 - h410 (96boards fmt)](http://www.st.com/web/en/catalog/mmc/FM131/SC999/SS1628/PF258776) |`PLATFORM=stm-b2260`| No | ![Actively maintained](documentation/images/green.svg) | -| [STMicroelectronics b2120 - h310 / h410](http://www.st.com/web/en/catalog/mmc/FM131/SC999/SS1628/PF258776) |`PLATFORM=stm-cannes`| No | ![Actively maintained](documentation/images/green.svg) | -| STMicroelectronics stm32mp1 |`PLATFORM=stm32mp1`| No | ![Actively maintained](documentation/images/green.svg) | -| [Allwinner A64 Pine64 Board](https://www.pine64.org/) |`PLATFORM=sunxi-sun50i_a64`| Yes | ![Actively Maintained](documentation/images/green.svg) | -| [Texas Instruments AM65x](http://www.ti.com/lit/ug/spruid7/spruid7.pdf)|`PLATFORM=k3-am65x`| Yes | ![Actively maintained](documentation/images/green.svg) | -| [Texas Instruments DRA7xx](http://www.ti.com/processors/automotive-processors/drax-infotainment-socs/overview.html)|`PLATFORM=ti-dra7xx`| Yes | ![Actively maintained](documentation/images/green.svg) | -| [Texas Instruments AM57xx](http://www.ti.com/processors/sitara/arm-cortex-a15/am57x/overview.html)|`PLATFORM=ti-am57xx`| Yes | ![Actively maintained](documentation/images/green.svg) | -| [Texas Instruments AM43xx](http://www.ti.com/processors/sitara/arm-cortex-a9/am438x/overview.html)|`PLATFORM=ti-am43xx`| Yes | ![Actively maintained](documentation/images/green.svg) | -| [Xilinx Zynq 7000 ZC702](http://www.xilinx.com/products/boards-and-kits/ek-z7-zc702-g.html)|`PLATFORM=zynq7k-zc702`| Yes | ![Not maintained](documentation/images/red.svg) v2.3.0 | -| [Xilinx Zynq UltraScale+ MPSOC](http://www.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html)|`PLATFORM=zynqmp-zcu102`| Yes | ![Not maintained](documentation/images/red.svg) v2.4.0 | -| [Spreadtrum SC9860](http://www.spreadtrum.com/en/SC9860GV.html)|`PLATFORM=sprd-sc9860`| No | ![Not maintained](documentation/images/red.svg) v2.1.0 | - ---- -## 4. Get and build OP-TEE software -Please see [build] for instructions how to run OP-TEE on various devices. - ---- -## 5. Coding standards -In this project we are trying to adhere to the same coding convention as used in -the Linux kernel (see [CodingStyle]). We achieve this by running [checkpatch] -from Linux kernel. However there are a few exceptions that we had to make since -the code also follows GlobalPlatform standards. The exceptions are as follows: - -- CamelCase for GlobalPlatform types are allowed. -- And we also exclude checking third party code that we might use in this - project, such as LibTomCrypt, MPA, newlib (not in this particular git, but - those are also part of the complete TEE solution, see - [Notice.md](Notice.md#repository-structure). The reason for - excluding and not fixing third party code is because we would probably - deviate too much from upstream and therefore it would be hard to rebase - against those projects later on and we don't expect that it is easy to - convince other software projects to change coding style. - Automatic variables should always be initialized. Mixed declarations - and statements are allowed, and may be used to avoid assigning useless - values. Please leave one blank line before and after such declarations. - -Regarding the checkpatch tool, it is not included directly into this project. -Please use checkpatch.pl from the Linux kernel git in combination with the -local [checkpatch script]. - -There are also targets for common use cases in the [Makefile](Makefile): - -``` -make checkpatch #check staging and working area -make checkpatch-staging #check staging area (added, but not committed files) -make checkpatch-working #check working area (modified, but not added files) -``` - -[build]: https://github.com/OP-TEE/build -[checkpatch script]: scripts/checkpatch.sh -[checkpatch]: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/scripts/checkpatch.pl -[CodingStyle]: https://www.kernel.org/doc/Documentation/process/coding-style.rst +// OP-TEE core maintainers diff --git a/documentation/abort_dumps.rst b/documentation/abort_dumps.rst deleted file mode 100644 index 619656a6d..000000000 --- a/documentation/abort_dumps.rst +++ /dev/null @@ -1,109 +0,0 @@ -When OP-TEE encounters a serious error condition, it prints diagnostic -information to the secure console. The message contains a call stack if -``CFG_UNWIND=y`` (enabled by default). - -The following errors will trigger a dump: - - - Data or prefetch abort exception in the TEE core (kernel mode) or in a TA - (user mode), - - When a user-mode Trusted Application panics, either by calling - ``TEE_Panic()`` directly or due to some error detected by the TEE Core - Internal API, - - When the TEE core detects a fatal error and decides to hang the system - because there is no way to proceed safely (core panic). - -The messages look slightly different depending on: - - - Whether the error is an exception or a panic, - - The exception/privilege level when the exception occurred (PL0/EL0 if a - user mode Trusted Application was running, PL1/EL1 if it was the TEE core), - - Whether the TEE and TA are 32 or 64 bits, - - The exact type of exception (data or prefetch abort, translation fault, - read or write permission fault, alignment errors etc). - -Here is an example of a panic in a 32-bit Trusted Application, running on a -32-bit TEE core (QEMU):: - - E/TC:0 TA panicked with code 0x0 - E/TC:0 Status of TA 484d4143-2d53-4841-3120-4a6f636b6542 (0xe07ba50) (active) - E/TC:0 arch: arm load address: 0x101000 ctx-idr: 1 - E/TC:0 stack: 0x100000 4096 - E/TC:0 region 0: va 0x100000 pa 0xe31d000 size 0x1000 flags rw- - E/TC:0 region 1: va 0x101000 pa 0xe300000 size 0xf000 flags r-x - E/TC:0 region 2: va 0x110000 pa 0xe30f000 size 0x3000 flags r-- - E/TC:0 region 3: va 0x113000 pa 0xe312000 size 0xb000 flags rw- - E/TC:0 region 4: va 0 pa 0 size 0 flags --- - E/TC:0 region 5: va 0 pa 0 size 0 flags --- - E/TC:0 region 6: va 0 pa 0 size 0 flags --- - E/TC:0 region 7: va 0 pa 0 size 0 flags --- - E/TC:0 Call stack: - E/TC:0 0x001044a8 - E/TC:0 0x0010ba59 - E/TC:0 0x00101093 - E/TC:0 0x001013ed - E/TC:0 0x00101545 - E/TC:0 0x0010441b - E/TC:0 0x00104477 - D/TC:0 user_ta_enter:452 tee_user_ta_enter: TA panicked with code 0x0 - D/TC:0 tee_ta_invoke_command:649 Error: ffff3024 of 3 - D/TC:0 tee_ta_close_session:402 tee_ta_close_session(0xe07be98) - D/TC:0 tee_ta_close_session:421 Destroy session - D/TC:0 tee_ta_close_session:447 Destroy TA ctx - - -The above dump was triggered by the TA when entering an irrecoverable error -ending up in a ``TEE_Panic(0)`` call. - -OP-TEE provides a helper script called ``symbolize.py`` to facilitate the -analysis of such issues. It is located in the OP-TEE OS source tree in -``scripts/symbolize.py`` and is also copied to the TA development kit. -Whenever you are confronted with an error message reporting a serious error and -containing a ``"Call stack:"`` line, you may use the symbolize script. - -``symbolize.py`` reads its input from ``stdin`` and writes extended debug -information to ``stdout``. The ``-d`` (directories) option tells the script -where to look for TA ELF file(s) (``.stripped.elf``) or for ``tee.elf`` -(the TEE core). Please refer to ``symbolize.py --help`` for details. - -Typical output:: - - $ cat dump.txt | ./optee_os/scripts/symbolize.py -d ./optee_examples/*/ta - # (or run the script, copy and paste the dump, then press Ctrl+D) - E/TC:0 TA panicked with code 0x0 - E/TC:0 Status of TA 484d4143-2d53-4841-3120-4a6f636b6542 (0xe07ba50) (active) - E/TC:0 arch: arm load address: 0x101000 ctx-idr: 1 - E/TC:0 stack: 0x100000 4096 - E/TC:0 region 0: va 0x100000 pa 0xe31d000 size 0x1000 flags rw- - E/TC:0 region 1: va 0x101000 pa 0xe300000 size 0xf000 flags r-x .ta_head .text .rodata - E/TC:0 region 2: va 0x110000 pa 0xe30f000 size 0x3000 flags r-- .rodata .ARM.extab .ARM.extab.text.utee_panic .ARM.extab.text.__aeabi_ldivmod .ARM.extab.text.__aeabi_uldivmod .ARM.exidx .got .dynsym .rel.got .dynamic .dynstr .hash .rel.dyn - E/TC:0 region 3: va 0x113000 pa 0xe312000 size 0xb000 flags rw- .data .bss - E/TC:0 region 4: va 0 pa 0 size 0 flags --- - E/TC:0 region 5: va 0 pa 0 size 0 flags --- - E/TC:0 region 6: va 0 pa 0 size 0 flags --- - E/TC:0 region 7: va 0 pa 0 size 0 flags --- - E/TC:0 Call stack: - E/TC:0 0x001044a8 utee_panic at optee_os/lib/libutee/arch/arm/utee_syscalls_a32.S:74 - E/TC:0 0x0010ba59 TEE_Panic at optee_os/lib/libutee/tee_api_panic.c:35 - E/TC:0 0x00101093 hmac_sha1 at optee_examples/hotp/ta/hotp_ta.c:63 - E/TC:0 0x001013ed get_hotp at optee_examples/hotp/ta/hotp_ta.c:171 - E/TC:0 0x00101545 TA_InvokeCommandEntryPoint at optee_examples/hotp/ta/hotp_ta.c:225 - E/TC:0 0x0010441b entry_invoke_command at optee_os/lib/libutee/arch/arm/user_ta_entry.c:207 - E/TC:0 0x00104477 __utee_entry at optee_os/lib/libutee/arch/arm/user_ta_entry.c:235 - D/TC:0 user_ta_enter:452 tee_user_ta_enter: TA panicked with code 0x0 ??? - D/TC:0 tee_ta_invoke_command:649 Error: ffff3024 of 3 - D/TC:0 tee_ta_close_session:402 tee_ta_close_session(0xe07be98) - D/TC:0 tee_ta_close_session:421 Destroy session - D/TC:0 tee_ta_close_session:447 Destroy TA ctx - -The Python script uses several tools from the GNU Binutils package to perform -the following tasks: - - 1. Translate the call stack addresses into function names, file names and line - numbers. - 2. Convert the abort address to a symbol plus some offset and/or an ELF section - name plus some offset. - 3. Print the names of the ELF sections contained in each memory region of a TA. - -Note that to successfully run ``symbolize.py`` you must also make your toolchain -visible on the ``PATH`` (i.e., ``export PATH=/bin:$PATH``). - diff --git a/documentation/benchmark.md b/documentation/benchmark.md deleted file mode 100644 index c0d5bf944..000000000 --- a/documentation/benchmark.md +++ /dev/null @@ -1,130 +0,0 @@ -# Benchmark framework -## Contents -1. [Introduction](#1-introduction) -2. [Implementation details](#2-implementation-details) - * [Design overview](#21-design-overview) - * [Timestamp source](#22-timestamp-source) - * [Call sequence diagram](#23-call-sequence-diagram) -3. [Running benchmarks](#3-running-benchmarks) - * [Benchmark application usage](#31-benchmark-application-usage) - * [Adding custom timestamps](#32-adding-custom-timestamps) - * [Analyzing results](#33-analyzing-results) -4. [Limitations and further steps](#4-limitations-and-further-steps) - - -## 1. Introduction -Due to its nature, OP-TEE is being a solution spanning over several -architectural layers, where each layer includes its own complex parts. -For further optimizations of performance, there is a need of tool which will -provide detailed and precise profiling information for each layer. - -It is necessary to receive latency values for: -* The roundtrip time for going from a client application in normal world, -down to a Trusted Application and back again. -* Detailed information for amount of time taken to go through each layer: - * libTEEC -> Linux OP-TEE kernel driver - * Linux OP-TEE kernel driver -> OP-TEE OS Core - * OP-TEE OS Core -> TA entry point (**not supported yet**) - * The same way back ---- -## 2. Implementation details -### 2.1 Design overview - -Benchmark framework consists of such components: -1. **Benchmark CA**: a dedicated client application, which is responsible -for allocating timestamp circular buffers, registering these buffers in -the **Benchmark PTA** and consuming all timestamp data generated -by all OP-TEE layers. Finally, it puts timestamp data into appropriate -file with `.ts` extension. Additional details can be found here -here [optee_benchmark] -2. **Benchmark PTA**: pseudo TA, which owns all per-cpu circular non-secure -buffers from a shared memory. **Benchmark PTA** must be invoked (by a CA) -to register the timestamp circular buffers. In turn, the **Benchmark PTA** -invokes the optee linux driver (through some RPC mean) to register this -circular buffers in the linux kernel layer. -3. **libTEEC** and **Linux OP-TEE kernel driver** include functionality for -handling timestamp buffer registration requests from the **Benchmark PTA**. - -When benchmark is enabled, all OP-TEE layers (**libTEEC**, -**Linux OP-TEE kernel driver**, **OP-TEE OS Core**) do fill the registered -timestamp circular buffer with timestamp data for all invocation requests on -condition that the circular buffer is allocated/registered. - -![design_overview][design_overview] - -### 2.2 Timestamp source - -ARM Performance Monitor Units are used as the main source of timestamp values. -The reason why this technology was chosen is that it is supported on all -ARMv7/ARMv8 cores. Besides it can provide precise pre-cpu cycle counter values, -it is possible to enable EL0 access to all events, so usermode applications -can directly read cpu counter values from coprocessor registers, -achieving minimal latency by avoiding additional syscalls to EL1 core. - -Besides CPU cycle counter values, timestamp by itself contains also -information about: -* Executing CPU core index -* OP-TEE layer id, where this timestamp was -obtained from -* Program counter value when timestamp was logged, which can be used for -getting a symbol name (a filename and line number) - -### 2.3 Call sequence diagram - -![call_sequence][call_sequence] - ---- -## 3 Running benchmarks -### 3.1 Benchmark application usage -Before using Benchmark framework, OP-TEE should be rebuild with -`CFG_TEE_BENCHMARK` flag enabled. -``` -$ make all CFG_TEE_BENCHMARK=y -j4 -``` - -Then, regular CA and its params should be by-passed to optee_benchmark CA. -``` -# benchmark client_app [client_app params] -``` - -When client_app finishes its execution, optee_benchmark will generate -`.ts` timestamp data file in the same directory, where CA is -stored. - -### 3.2 Adding custom timestamps -Currently, timestamping is done only for `InvokeCommand` calls, but it's also -possible to choose custom places in the supported OP-TEE layers. - -To add timestamp storing command to custom c source file: -1. Include appropriate header: - * OP-TEE OS Core: `bench.h` - * Linux OP-TEE kmod: `optee_bench.h` - * libTEEC: `teec_benchmark.h` -2. Invoke `bm_timestamp()` (for linux kmod use `optee_bm_timestamp()`) -in the function, where you want to put timestamp from. - -### 3.3 Analyzing results -Will be added soon - ---- -## 4. Limitations and further steps -* Implementation of application which will analyze timestamp data and provide -statistics for different types of calls providing avg/min/max values (both CPU -cycles and time values) -* Add support for all platforms, where OP-TEE is supported -* Adding support of S-EL0 timestamping -* Attaching additional payload information to each timestamp, for example, -session -* Timestamping within interrupt context in the OP-TEE OS Core - - - -[design_overview]: images/benchmark/benchmark_design.png -[call_sequence]: images/benchmark/benchmark_sequence.png -[optee_benchmark]: https://github.com/linaro-swg/optee_benchmark diff --git a/documentation/build_system.md b/documentation/build_system.md deleted file mode 100644 index ad2ffba4f..000000000 --- a/documentation/build_system.md +++ /dev/null @@ -1,331 +0,0 @@ -# Build system - -The OP-TEE build system is based on GNU make. It consists of a main `Makefile` -in the root of the project together with `sub.mk` files in all source -directories. In addition, some supporting files are used to recursively process -all `sub.mk` files and generate the build rules. - -Name | Description -:-----------------|:----------- -`core/core.mk` | Included from `Makefile` to build the TEE Core -`ta/ta.mk` | Included from `Makefile` to create the TA devkit -`mk/compile.mk` | Create rules to make objects from source files -`mk/lib.mk` | Create rules to make a libraries (.a) -`mk/subdir.mk` | Process `sub.mk` files recursively -`mk/config.mk` | Global configuration variable -`core/arch/$(ARCH)/$(ARCH).mk` | Arch-specific compiler flags -`core/arch/$(ARCH)/plat-$(PLATFORM)/conf.mk` | Platform-specific compiler flags and configuration variables -`core/arch/$(ARCH)/plat-$(PLATFORM)/link.mk` | Make recipes to link the TEE Core -`ta/arch/arm/link.mk` | Make recipes to link Trusted Applications -`ta/mk/ta_dev_kit.mk` | Main Makefile to be included when building Trusted Applications -`mk/checkconf.mk` | Utility functions to manipulate configuration variables and generate a C header file -`sub.mk` | List source files and define compiler flags - -`make` is always invoked from the top-level directory; there is no recursive -invocation of make itself. - -## Choosing the build target - -The target architecture, platform and build directory may be selected by setting -environment or make variables (**VAR=value make** or **make VAR=value**). - -### ARCH (CPU architecture) - -**$(ARCH)** is the CPU architecture to be built. Currently, the only supported -value is **arm** for 32-bit or 64-bit Armv7-A or Armv8-A. Please note that -contrary to the Linux kernel, **$(ARCH)** should **not** be set to **arm64** for -64-bit builds. The **ARCH** variable does not need to be set explicitly before -building either, because the proper instruction set is selected from the -**$(PLATFORM)** value. For platforms that support both 32-bit and 64-bit -builds, **CFG_ARM64_core=y** should be set to select 64-bit and not set (or set -to **n**) to select 32-bit. - -Architecture-specific source code belongs to sub-directories that follow the -`arch/$(ARCH)` pattern, such as: -`core/arch/arm`, `lib/libmpa/arch/arm`, `lib/libutee/arch/arm` and -so on. - -### PLATFORM / PLATFORM_FLAVOR (hardware platform) - -A *platform* is a family of closely related hardware configurations. A platform -*flavor* is a variant of such configurations. When used together they define the -target hardware on which OP-TEE will be run. - -For instance **PLATFORM=stm PLATFORM_FLAVOR=b2260** will build for the -ST Microelectronics 96boards/cannes2 board, while **PLATFORM=vexpress -PLATFORM_FLAVOR=qemu_virt** will generate code for a para-virtualized ARM -Versatile Express board running on QEMU. - -For convenience, the flavor may be appended to the platform name with a dash, so -**make PLATFORM=stm-b2260** is a shortcut for -**make PLATFORM=stm PLATFORM_FLAVOR=b2260**. Note that in both cases the value -of **$(PLATFORM)** is **stm** in the makefiles. - -Platform-specific source code belongs to `core/arch/$(ARCH)/plat-$(PLATFORM)`, -for instance: `core/arch/arm/plat-vexpress` or `core/arch/arm/plat-stm`. - -### O (output directory) - -All output files go into a platform-specific build directory, which is by default -`out/$(ARCH)-plat-$(PLATFORM)`. - -The output directory has basically the same structure as the source tree. -For instance, assuming **ARCH=arm PLATFORM=stm**, -`core/kernel/panic.c` will compile into `out/arm-plat-stm/core/kernel/panic.o`. - -However, some libraries are compiled several times: once or twice for user -mode, and once for kernel mode. This is because they may be used by the TEE -Core as well as by the Trusted Applications. As a result, the `lib` source -directory gives two or three build directories: `ta_arm{32,64}-lib` and -`core-lib`. - -The output directory also has an `export-ta_arm{32,64}` directory, which -contains: -- All the files needed to build Trusted Applications. - - In `lib/`: **libutee.a** (the GlobalPlatform Internal API), **libutils.a** - (which implements a part of the standard C library), and **libmpa.a** (which - implements multiple precision arithmetic and is required by libutee.a). - - In `include/`: header files for the above libraries - - In `mk/`: **ta_dev_kit.mk**, which is a Make include file with suitable - rules to build a TA, and its dependencies - - `scripts/sign.py`: a Python script used by ta_dev_kit.mk to sign TAs. - - In `src`: **user_ta_header.c**: source file to add a suitable header to the - Trusted Application (as expected by the loader code in the TEE Core) -- Some files needed to build host applications (using the Client API), under - `export-ta_arm{32,64}/host_include`. - -Finally, the build directory contains the auto-generated configuration file -for the TEE Core: `$(O)/include/generated/conf.h` (see below). - -### CROSS_COMPILE* (cross-compiler selection) - -**$(CROSS_COMPILE)** is the prefix used to invoke the (32-bit) cross-compiler -toolchain. -The default value is **arm-linux-gnueabihf-**. This is the variable you want to -change in case you want to use -[ccache](https://ccache.samba.org/) to speed you recompilations: -```shell -$ make CROSS_COMPILE="ccache arm-linux-gnueabihf-" -``` - -If the build includes a mix of 32-bit and 64-bit code, for instance if you -set `CFG_ARM64_core=y` to build a 64-bit secure kernel, then two different -toolchains are used, that are controlled by **$(CROSS_COMPILE32)** and -**$(CROSS_COMPILE64)**. -The default value of **$(CROSS_COMPILE32)** is the value of CROSS_COMPILE, -which defaults to **arm-linux-gnueabihf-** as mentioned above. -The default value of **$(CROSS_COMPILE64)** is **aarch64-linux-gnu-**. - -Examples: -```shell -# FOr this example, select HiKey which supports both 32- and 64-bit builds -$ export PLATFORM=hikey - -# 1. Build everything 32-bit -$ make - -# 2. Same as (1.) but override the toolchain -$ make CROSS_COMPILE="ccache arm-linux-gnueabihf-" - -# 3. Same as (2.) -$ make CROSS_COMPILE32="ccache arm-linux-gnueabihf-" - -# 4. Select 64-bit secure 'core' (and therefore both 32- and 64-bit -# Trusted Application libraries) -$ make CFG_ARM64_core=y - -# 5. Same as (4.) but override the toolchains -$ make CFG_ARM64_core=y \ - CROSS_COMPILE32="ccache arm-linux-gnueabihf-" \ - CROSS_COMPILE64="ccache aarch64-linux-gnu-" -``` - -## Platform-specific configuration and flags - -The following variables are defined in `core/arch/$(ARCH)/$(ARCH).mk`: - -- **$(core-platform-aflags)**, **$(core-platform-cflags)** and - **$(core-platform-cppflags)** are added to the assembler / C compiler - / preprocessor flags for all source files compiled for TEE Core including - the kernel versions of **libmpa.a** and **libutils.a**. -- **$(ta_arm{32,64}-platform-aflags)**, **$(ta_arm{32,64}-platform-cflags)** - and **$(ta_arm{32,64}-platform-cppflags)** are added to the assembler / C - compiler / preprocessor flags when building the user-mode libraries - (**libutee.a**, **libutils.a**, **libmpa.a**) or Trusted Applications. - -The following variables are defined in -`core/arch/$(ARCH)/plat-$(PLATFORM)/conf.mk`: - -- If **$(arm{32,64}-platform-cflags)**, **$(arm{32,64}-platform-aflags)** and - **$(arm{32,64}-platform-cppflags)** are defined their content will be added - to **$(\*-platform-\*flags)** when they are are initialized in - `core/arch/$(ARCH)/$(ARCH).mk` as described above. -- **$(core-platform-subdirs)** is the list of the subdirectories that are - added to the TEE Core. - -## Platform-specific link recipes for the TEE Core - -The file `core/arch/$(ARCH)/plat-$(PLATFORM)/link.mk` contains the rules to -link the TEE Core and perform any related tasks, such as running **objdump** -to produce a dump file. **link.mk** adds files to the **all:** target. - -## Source files - -Each directory that contains source files has a file called `sub.mk`. This -makefile defines the source files that should be included in the build, as well -as any subdirectories that should be processed, too. - -For example: -```Makefile -# core/arch/arm/sm/sub.mk -srcs-y += sm_asm.S -srcs-y += sm.c -``` -```Makefile -# core/sub.mk -subdirs-y += kernel -subdirs-y += mm -subdirs-y += tee -subdirs-y += drivers -``` - -The `-y` suffix is meant to facilitate conditional compilation. -See *Configuration* below. - -`srcs-y` and `subdirs-y` are often not used together in the same `sub.mk`, -because source files are usually alone in leaf directories. But this is not a -hard rule. - -In addition to source files, `sub.mk` may define compiler flags, include -directories and/or configuration variables as explained below. - -## Compiler flags - -Default compiler flags are defined in `mk/compile.mk`. Note that platform-specific flags must not appear in this file which is common to all platforms. - -To add flags for a given source file, you may use the following variables in -`sub.mk`: -* `cflags--y` for C files (*.c) -* `aflags--y` for assembler files (*.S) -* `cppflags--y` for both C and assembler - -For instance: - -```Makefile -# core/lib/libtomcrypt/src/pk/dh/sub.mk -srcs-y += dh.c -cflags-dh.c-y := -Wno-unused-variable -``` -Compiler flags may also be removed, as follows: - -```Makefile -# lib/libutils/isoc/newlib/sub.mk -srcs-y += memmove.c -cflags-remove-memmove.c-y += -Wcast-align -``` - -Some variables apply to libraries only (that is, when using `mk/lib.mk`) -and affect all the source files that belong to the library: `cppflags-lib-y` -and `cflags-lib-y`. - -## Include directories - -Include directories may be added to `global-incdirs-y`, in which case they will -be accessible from all the source files and will be copied to -`export-ta_arm{32,64}/include` and `export-ta_arm{32,64}/host_include`. - -When `sub.mk` is used to build a library, `incdirs-lib-y` may receive additional -directories that will be used for that library only. - -## Configuration variables - -Some features may be enabled, disabled or otherwise controlled at compile time -through makefile variables. Default values are normally provided in makefiles -with the `?=` operator so that their value may be easily overridden by -environment variables. For instance: - -```Makefile -PLATFORM ?= stm -PLATFORM_FLAVOR ?= default -``` - -Some global configuration variables are defined in `mk/config.mk`, but others -may be defined in `sub.mk` when then pertain to a specific library for instance. - -Variables with the `CFG_` prefix are treated in a special -way: their value is automatically reflected in the generated header -file `$(out-dir)/include/generated/conf.h`, after all the included -makefiles have been processed. `conf.h` is automatically included by the -preprocessor when a source file is built. - -Depending on their value, variables may -be considered either boolean or non-boolean, which affects how they are -translated into `conf.h`. - -### Boolean configuration variables - -When a configuration variable controls the presence or absence of a feature, -**y** means *enabled*, while **n**, an empty value or an undefined variable -means *disabled*. For instance, the following commands are equivalent and would -disable feature *CFG_CRYPTO_GCM*: - -```Shell -$ make CFG_CRYPTO_GCM=n -``` -```Shell -$ make CFG_CRYPTO_GCM= -``` -```Shell -$ CFG_CRYPTO_GCM=n make -``` -```Shell -$ export CFG_CRYPTO_GCM=n -$ make -``` - -Configuration variables may then be used directly in `sub.mk` to -trigger conditional compilation: - -```Makefile -# core/lib/libtomcrypt/src/encauth/sub.mk -subdirs-$(CFG_CRYPTO_CCM) += ccm -subdirs-$(CFG_CRYPTO_GCM) += gcm -``` - -When a configuration variable is *enabled* (**y**), `` -contains a macro with the same name as the variable and the value **1**. -If it is *disabled*, however, no macro definition is output. This allows the C -code to use constructs like: - -```C -/* core/lib/libtomcrypt/src/tee_ltc_provider.c */ - -/* ... */ - -#if defined(CFG_CRYPTO_GCM) -struct tee_gcm_state { - gcm_state ctx; /* the gcm state as defined by LTC */ - size_t tag_len; /* tag length */ -}; -#endif -``` - -### Non-boolean configuration variables - -Configuration variables that are not recognized as booleans are simply output -unchanged into ``. For instance: - -```Makefile -$ make CFG_TEE_CORE_LOG_LEVEL=4 -``` -```C -/* out/arm-plat-vexpress/include/generated/conf.h */ - -#define CFG_TEE_CORE_LOG_LEVEL 4 /* '4' */ -``` - -### Configuration dependencies - -Some combinations of configuration variables may not be valid. This should be -dealt with by custom checks in makefiles. `mk/checkconf.h` provides functions -to help detect and deal with such situations. diff --git a/documentation/copyright_and_license_headers.rst b/documentation/copyright_and_license_headers.rst deleted file mode 100644 index 18c174078..000000000 --- a/documentation/copyright_and_license_headers.rst +++ /dev/null @@ -1,39 +0,0 @@ -OP-TEE copyright and license headers -==================================== - -This document defines the format of the copyright and license headers in OP-TEE -source files. Such headers shall comply with the rules described here, which -are compatible with the rules adopted by the Linux kernel community. - -New source files ----------------- - -- (Rule 1.1) Shall contain exactly one SPDX license identifier, which can - express a single or multiple licenses (refer to SPDX_ for syntax details) -- (Rule 1.2) The SPDX license identifier shall be added as a comment line. It - shall be the first possible line in the file which can contain a comment. - The comment style shall depend on the file type: -- (Rule 1.2.1) C source: // SPDX-License-Identifier: -- (Rule 1.2.2) C header: /* SPDX-License-Identifier: */ -- (Rule 1.2.3) Assembly: /* SPDX-License-Identifier: */ -- (Rule 1.2.4) Python, shell: # SPDX-License-Identifier: -- (Rule 1.3) Shall contain at least one copyright line -- (Rule 1.4) Shall not contain the mention 'All rights reserved' -- (Rule 1.5) Shall not contain any license notice other than the SPDX license - identifier - -Note that files imported from external projects are not new files. The rules -for pre-existing files (below) apply. - -Pre-existing or imported files ------------------------------- - -- (Rule 2.1) SPDX license identifiers shall be added according to the license - notice(s) in the file and the rules above (1.1 and 1.2*) -- (Rule 2.2) It is recommended that license notices be removed once the - corresponding identifier has been added. Note however that this may only be - done by the copyright holder(s) of the file. -- (Rule 2.3) Similar to 2.2, and subject to the same conditions, the text: - "All rights reserved" shall be removed also. - -.. _SPDX: https://spdx.org/licenses/ diff --git a/documentation/crypto.md b/documentation/crypto.md deleted file mode 100644 index 3cb9c7429..000000000 --- a/documentation/crypto.md +++ /dev/null @@ -1,174 +0,0 @@ -# OP-TEE crypto implementation - -This document describes how the TEE Cryptographic Operations API is implemented, -how the default crypto provider may be configured at compile time, and how it may -be replaced by another implementation. - -## Overview - -There are several layers from the Trusted Application to the actual crypto -algorithms. Most of the crypto code runs in kernel mode inside the TEE core. - -Here is a schematic view of a typical call to the crypto API. The numbers in -square brackets ([1], [2]...) refer to the sections below. - - some_function() (Trusted App) - [1] TEE_*() User space (libutee.a) - ------- utee_*() ---------------------------------------------- - [2] tee_svc_*() Kernel space - [3] crypto_*() (libtomcrypt.a and crypto.c) - [4] /* LibTomCrypt */ (libtomcrypt.a) - -## The TEE Cryptographic Operations API [1] - -OP-TEE implements the TEE Internal API defined by the GlobalPlatform association -in the *TEE Internal API Specification* (GPD_SPE_010). This includes -cryptographic functions that span various cryptographic needs: message digests, -symmetric ciphers, message authentication codes (MAC), authenticated encryption, -asymmetric operations (encryption/decryption or signing/verifying), key -derivation, and random data generation. These functions make up the TEE -Cryptographic Operations API. - -The Internal API is implemented in -[tee_api_operations.c](../lib/libutee/tee_api_operations.c), which is -compiled into a static library: `${O}/ta_arm{32,64}-lib/libutee/libutee.a`. - -Most API functions perform some parameter checking and manipulations, then -invoke some **utee_\*** function to switch to kernel mode and perform the -low-level work. - -The **utee_\*** functions are declared in -[utee_syscalls.h](../lib/libutee/include/utee_syscalls.h) -and implemented in -[utee_syscalls_asm.S](../lib/libutee/arch/arm/utee_syscalls_asm.S). -They are simple system call wrappers which use the **SVC** -instruction to switch to the appropriate system service in the OP-TEE kernel. - -## The crypto services [2] - -All cryptography-related system calls are declared in -[tee_svc_cryp.h](../core/include/tee/tee_svc_cryp.h) and implemented in -[tee_svc_cryp.c](../core/tee/tee_svc_cryp.c). -In addition to dealing with the usual work required at the user/kernel interface -(checking parameters and copying memory buffers between user and kernel space), -the system calls invoke a private abstraction layer: the **Crypto API**, -which is declared in [crypto.h](../core/include/crypto/crypto.h). -It serves two main purposes: - -1. Allow for alternative implementations, such as hardware-accelerated versions. -2. Provide an easy way to disable some families of algorithms at compile-time - to save space. See *LibTomCrypt* below. - -## crypto_*() [3] - -The **crypto_*()** functions implement the actual algorithms and helper -functions. The TEE Core has one global active implementation of this interface. -The default implementation, mostly based on -[LibTomCrypt](https://github.com/libtom/libtomcrypt), is as follows: - -```c -/* core/crypto/crypto.c */ - -/* - * Default implementation for all functions in crypto.h - */ - -#if !defined(_CFG_CRYPTO_WITH_HASH) -TEE_Result crypto_hash_get_ctx_size(uint32_t algo __unused, - size_t *size __unused) -{ - return TEE_ERROR_NOT_IMPLEMENTED; -} -... -#endif /*_CFG_CRYPTO_WITH_HASH*/ - -/* core/lib/libtomcrypt/tee_ltc_provider.c */ - -#if defined(_CFG_CRYPTO_WITH_HASH) -TEE_Result crypto_hash_get_ctx_size(uint32_t algo, size_t *size) -{ - /* ... */ - return TEE_SUCCESS; -} - -#endif /*_CFG_CRYPTO_WITH_HASH*/ - -``` - -As shown above, families of algorithms can be disabled and -[crypto.c](../core/crypto/crypto.c) will provide default null -implementations that will return **TEE_ERROR_NOT_IMPLEMENTED**. - -## Public/private key format - -**** uses implementation-specific types to hold key data -for asymmetric algorithms. For instance, here is how a public RSA key is -represented: - -```c -/* core/include/crypto/crypto.h */ - -struct rsa_public_key { - struct bignum *e; /* Public exponent */ - struct bignum *n; /* Modulus */ -}; -``` - -This is also how such keys are stored inside the TEE object attributes -(**TEE_ATTR_RSA_PUBLIC_KEY** in this case). - -**struct bignum** is an opaque type, known to the underlying implementation -only. **struct bignum_ops** provides functions so that the system services can -manipulate data of this type. This includes allocation/deallocation, copy, and -conversion to or from the big endian binary format. - - -```c -/* core/include/crypto/crypto.h */ - -struct bignum *crypto_bignum_allocate(size_t size_bits); -TEE_Result crypto_bignum_bin2bn(const uint8_t *from, size_t fromsize, - struct bignum *to); -void crypto_bignum_bn2bin(const struct bignum *from, uint8_t *to); -/*...*/ - -``` - -## LibTomCrypt [4] - -Some algorithms may be disabled at compile time if they are not needed, in order -to reduce the size of the OP-TEE image and reduces its memory usage. This is done -by setting the appropriate configuration variable. For example: - - $ make CFG_CRYPTO_AES=n # disable AES only - $ make CFG_CRYPTO_{AES,DES}=n # disable symmetric ciphers - $ make CFG_CRYPTO_{DSA,RSA,DH,ECC}=n # disable public key algorithms - $ make CFG_CRYPTO=n # disable all algorithms - -Please refer to [core/lib/libtomcrypt/sub.mk](../core/lib/libtomcrypt/sub.mk) -for the list of all supported variables. - -Note that the application interface is **not** modified when algorithms are -disabled. This means, for instance, that the functions **TEE_CipherInit()**, -**TEE_CipherUpdate()** and **TEE_CipherFinal()** would remain present in -`libutee.a` even if all symmetric ciphers are disabled (they would simply -return **TEE_ERROR_NOT_IMPLEMENTED**). - -## How to add a new crypto implementation - -To add a new implementation, the default one in -[core/lib/libtomcrypt](../core/lib/libtomcrypt) in combination with what is -in [core/crypto](../core/crypto) should be used as a reference. - -Here are the main things to consider when adding a new crypto provider: - -- Put all the new code in its own directory under `core/lib` unless it is - code that will be used regardless of which crypto provider is in use. - How we are dealing with AES-GCM in [core/crypto](../core/crypto) could - serve as an example. -- Avoid modifying [tee_svc_cryp.c](../core/tee/tee_svc_cryp.c). It should not be - needed. -- Although not all crypto families need to be defined, all are required for - compliance to the GlobalPlatform specification. -- If you intend to make some algorithms optional, please try to re-use the same - names for configuration variables as the default implementation. diff --git a/documentation/dt-bindings/README.txt b/documentation/dt-bindings/README.txt deleted file mode 100644 index 379854b2e..000000000 --- a/documentation/dt-bindings/README.txt +++ /dev/null @@ -1,9 +0,0 @@ -This directory shall store the device tree bindings documentation. - -When a binding is already described in the Linux kernel source tree, -please refer there for bindings information. Latest Linux kernel release -is the reference for DT bindings. - -For the bindings not described in the the Linux kernel source tree, one can -find here the expected description. Please use the conventional format -for DT bindings documentation, currently plain ASCII text files. diff --git a/documentation/extensions/crypto_concat_kdf.md b/documentation/extensions/crypto_concat_kdf.md deleted file mode 100644 index cbdfff16b..000000000 --- a/documentation/extensions/crypto_concat_kdf.md +++ /dev/null @@ -1,111 +0,0 @@ -# Concatenation Key Derivation Function (Concat KDF) - -This document describes the OP-TEE implementation of the key derivation function -specified in section 5.8.1 of NIST publication [SP 800-56A](http://csrc.nist.gov/publications/nistpubs/800-56A/SP800-56A_Revision1_Mar08-2007.pdf), *Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography*. This function is known as *Concatenation KDF* or *Concat -KDF*. - -You may disable this extension by setting the following configuration variable -in `conf.mk`: - - CFG_CRYPTO_CONCAT_KDF := n - -## Implementation notes - -All key and parameter sizes must be multiples of 8 bits. That is: -- Input parameters: the shared secret (*Z*) and *OtherInfo* -- Output parameter: the derived key (*DerivedKeyingMaterial*) - -In addition, the maximum size of the derived key is limited by the size of an -object of type TEE_TYPE_GENERIC_SECRET (512 bytes). - -This implementation does *not* enforce any requirement on the content of the -*OtherInfo* parameter. It is the application's responsibility to make sure this -parameter is constructed as specified by the NIST specification if compliance -is desired. - - -## API extension - -To support the Concat KDF, the *GlobalPlatform TEE Internal Core API Specification -v1.1* was extended with new algorithm descriptors, new object types, and new -object attributes as described below. - -### p.95 Add new object type to TEE_PopulateTransientObject - -The following entry shall be added to Table 5-8: - -Object type | Parts -:---------------------|:-------------------------------------------- -TEE_TYPE_CONCAT_KDF_Z | The TEE_ATTR_CONCAT_KDF_Z part (input shared secret) must be provided. - -### p.121 Add new algorithms for TEE_AllocateOperation - -The following entry shall be added to Table 6-3: - -Algorithm | Possible Modes -:---------------------------|:-------------- -TEE_ALG_CONCAT_KDF_SHA1_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA224_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA256_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA384_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA512_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA512_DERIVE_KEY | TEE_MODE_DERIVE - -### p.126 Explain usage of HKDF algorithms in TEE_SetOperationKey - -In the bullet list about operation mode, the following shall be added: - - * For the Concat KDF algorithms, the only supported mode is TEE_MODE_DERIVE. - -### p.150 Define TEE_DeriveKey input attributes for new algorithms - -The following sentence shall be deleted: - - The TEE_DeriveKey function can only be used with the algorithm - TEE_ALG_DH_DERIVE_SHARED_SECRET - -The following entry shall be added to Table 6-7: - -Algorithm | Possible operation parameters -:---------------------------|:----------------------------- -TEE_ALG_CONCAT_KDF_SHA1_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA224_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA256_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA384_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA512_DERIVE_KEY
TEE_ALG_CONCAT_KDF_SHA512_DERIVE_KEY | TEE_ATTR_CONCAT_KDF_DKM_LENGTH: up to 512 bytes. This parameter is mandatory.
TEE_ATTR_CONCAT_KDF_OTHER_INFO - -### p.152 Add new algorithm identifiers - -The following entries shall be added to Table 6-8: - -Algorithm | Identifier -:------------------------------------|:---------- -TEE_ALG_CONCAT_KDF_SHA1_DERIVE_KEY | 0x800020C1 -TEE_ALG_CONCAT_KDF_SHA224_DERIVE_KEY | 0x800030C1 -TEE_ALG_CONCAT_KDF_SHA256_DERIVE_KEY | 0x800040C1 -TEE_ALG_CONCAT_KDF_SHA384_DERIVE_KEY | 0x800050C1 -TEE_ALG_CONCAT_KDF_SHA512_DERIVE_KEY | 0x800060C1 - -### p.154 Define new main algorithm - -In Table 6-9 in section 6.10.1, a new value shall be added to the value column -for row bits [7:0]: - -Bits | Function | Value -:----------|:-----------------------------------------------|:----------------- -Bits [7:0] | Identifiy the main underlying algorithm itself | ...
0xC1: Concat KDF - -The function column for bits[15:12] shall also be modified to read: - -Bits | Function | Value -:------------|:---------------------------------------------|:----------- -Bits [15:12] | Define the message digest for asymmetric signature algorithms or Concat KDF | - -### p.155 Add new object type for Concat KDF input shared secret - -The following entry shall be added to Table 6-10: - -Name | Identifier | Possible sizes -:---------------------------------|:-----------|:-------------------------------- -TEE_TYPE_CONCAT_KDF_Z | 0xA10000C1 | 8 to 4096 bits (multiple of 8) - -### p.156 Add new operation attributes for Concat KDF - -The following entries shall be added to Table 6-11: - -Name | Value | Protection | Type | Comment -:----------------------------------|:-----------|:-----------|:------|:-------- -TEE_ATTR_CONCAT_KDF_Z | 0xC00001C1 | Protected | Ref | The shared secret (*Z*) -TEE_ATTR_CONCAT_KDF_OTHER_INFO | 0xD00002C1 | Public | Ref | *OtherInfo* -TEE_ATTR_CONCAT_KDF_DKM_LENGTH | 0xF00003C1 | Public | Value | The length (in bytes) of the derived keying material to be generated, maximum 512. This is *KeyDataLen* / 8. diff --git a/documentation/extensions/crypto_hkdf.md b/documentation/extensions/crypto_hkdf.md deleted file mode 100644 index b60a980e2..000000000 --- a/documentation/extensions/crypto_hkdf.md +++ /dev/null @@ -1,99 +0,0 @@ -# OP-TEE HKDF key derivation support - -OP-TEE implements the *HMAC-based Extract-and-Expand Key Derivation Function -(HKDF)* specified in [RFC 5869](http://tools.ietf.org/html/rfc5869). This -file documents the extensions to the *GlobalPlatform TEE Internal Core API -Specification v1.1* that were implemented to support this algorithm. Trusted -Applications should include `` to import the -definitions. - -Note that the implementation follows the recommendations of version 1.1 of the -specification for adding new algorithms. It should make it compatible with -future changes to the official specification. - -You can disable this extension by setting the following in `conf.mk`: - - CFG_CRYPTO_HKDF := n - -## p.95 Add new object type to TEE_PopulateTransientObject - -The following entry shall be added to Table 5-8: - -Object type | Parts -:-----------------|:-------------------------------------------- -TEE_TYPE_HKDF_IKM | The TEE_ATTR_HKDF_IKM (Input Keying Material) part must be provided. - -## p.121 Add new algorithms for TEE_AllocateOperation - -The following entry shall be added to Table 6-3: - -Algorithm | Possible Modes -:---------------------------|:-------------- -TEE_ALG_HKDF_MD5_DERIVE_KEY
TEE_ALG_HKDF_SHA1_DERIVE_KEY
TEE_ALG_HKDF_SHA224_DERIVE_KEY
TEE_ALG_HKDF_SHA256_DERIVE_KEY
TEE_ALG_HKDF_SHA384_DERIVE_KEY
TEE_ALG_HKDF_SHA512_DERIVE_KEY
TEE_ALG_HKDF_SHA512_DERIVE_KEY | TEE_MODE_DERIVE - -## p.126 Explain usage of HKDF algorithms in TEE_SetOperationKey - -In the bullet list about operation mode, the following shall be added: - - * For the HKDF algorithms, the only supported mode is TEE_MODE_DERIVE. - -## p.150 Define TEE_DeriveKey input attributes for new algorithms - -The following sentence shall be deleted: - - The TEE_DeriveKey function can only be used with the algorithm - TEE_ALG_DH_DERIVE_SHARED_SECRET - -The following entry shall be added to Table 6-7: - -Algorithm | Possible operation parameters -:---------------------------|:----------------------------- -TEE_ALG_HKDF_MD5_DERIVE_KEY
TEE_ALG_HKDF_SHA1_DERIVE_KEY
TEE_ALG_HKDF_SHA224_DERIVE_KEY
TEE_ALG_HKDF_SHA256_DERIVE_KEY
TEE_ALG_HKDF_SHA384_DERIVE_KEY
TEE_ALG_HKDF_SHA512_DERIVE_KEY
TEE_ALG_HKDF_SHA512_DERIVE_KEY | TEE_ATTR_HKDF_OKM_LENGTH: Number of bytes in the Output Keying Material
TEE_ATTR_HKDF_SALT (optional) Salt to be used during the extract step
TEE_ATTR_HKDF_INFO (optional) Info to be used during the expand step
- -## p.152 Add new algorithm identifiers - -The following entries shall be added to Table 6-8: - -Algorithm | Identifier -:------------------------------|:---------- -TEE_ALG_HKDF_MD5_DERIVE_KEY | 0x800010C0 -TEE_ALG_HKDF_SHA1_DERIVE_KEY | 0x800020C0 -TEE_ALG_HKDF_SHA224_DERIVE_KEY | 0x800030C0 -TEE_ALG_HKDF_SHA256_DERIVE_KEY | 0x800040C0 -TEE_ALG_HKDF_SHA384_DERIVE_KEY | 0x800050C0 -TEE_ALG_HKDF_SHA512_DERIVE_KEY | 0x800060C0 - -## p.154 Define new main algorithm - -In Table 6-9 in section 6.10.1, a new value shall be added to the value column -for row bits [7:0]: - -Bits | Function | Value -:----------|:-----------------------------------------------|:----------------- -Bits [7:0] | Identifiy the main underlying algorithm itself | ...
0xC0: HKDF - -The function column for bits[15:12] shall also be modified to read: - -Bits | Function | Value -:------------|:---------------------------------------------|:----------- -Bits [15:12] | Define the message digest for asymmetric signature algorithms or HKDF | - -## p.155 Add new object type for HKDF input keying material - -The following entry shall be added to Table 6-10: - -Name | Identifier | Possible sizes -:-----------------|:-----------|:-------------------------------- -TEE_TYPE_HKDF_IKM | 0xA10000C0 | 8 to 4096 bits (multiple of 8) - -## p.156 Add new operation attributes for HKDF salt and info - -The following entries shall be added to Table 6-11: - -Name | Value | Protection | Type | Comment -:------------------------|:-----------|:-----------|:------|:-------- -TEE_ATTR_HKDF_IKM | 0xC00001C0 | Protected | Ref | -TEE_ATTR_HKDF_SALT | 0xD00002C0 | Public | Ref | -TEE_ATTR_HKDF_INFO | 0xD00003C0 | Public | Ref | -TEE_ATTR_HKDF_OKM_LENGTH | 0xF00004C0 | Public | Value | - diff --git a/documentation/extensions/crypto_pbkdf2.md b/documentation/extensions/crypto_pbkdf2.md deleted file mode 100644 index 5ce3c4ad1..000000000 --- a/documentation/extensions/crypto_pbkdf2.md +++ /dev/null @@ -1,94 +0,0 @@ -# PKCS #5 v2.0 Key Derivation Function 2 (PBKDF2) - -This document describes the OP-TEE implementation of the key derivation function -specified in [RFC 2898](https://www.ietf.org/rfc/rfc2898.txt) section 5.2. This -RFC is a republication of PKCS #5 v2.0 from RSA Laboratories' Public-Key -Cryptography Standards (PKCS) series. - -You may disable this extension by setting the following configuration variable -in `conf.mk`: - - CFG_CRYPTO_PBKDF2 := n - -## API extension - -To support PBKDF2, the *GlobalPlatform TEE Internal Core API Specification -v1.1* was extended with a new algorithm descriptor, new object types, and new -object attributes as described below. - -### p.95 Add new object type to TEE_PopulateTransientObject - -The following entry shall be added to Table 5-8: - -Object type | Parts -:------------------------|:-------------------------------------------- -TEE_TYPE_PBKDF2_PASSWORD | The TEE_ATTR_PBKDF2_PASSWORD part must be provided. - -### p.121 Add new algorithms for TEE_AllocateOperation - -The following entry shall be added to Table 6-3: - -Algorithm | Possible Modes -:---------------------------|:-------------- -TEE_ALG_PBKDF2_HMAC_SHA1_DERIVE_KEY | TEE_MODE_DERIVE - -### p.126 Explain usage of PBKDF2 algorithm in TEE_SetOperationKey - -In the bullet list about operation mode, the following shall be added: - - * For the PBKDF2 algorithm, the only supported mode is TEE_MODE_DERIVE. - -### p.150 Define TEE_DeriveKey input attributes for new algorithms - -The following sentence shall be deleted: - - The TEE_DeriveKey function can only be used with the algorithm - TEE_ALG_DH_DERIVE_SHARED_SECRET - -The following entry shall be added to Table 6-7: - -Algorithm | Possible operation parameters -:---------------------------|:----------------------------- -TEE_ALG_PBKDF2_HMAC_SHA1_DERIVE_KEY | TEE_ATTR_PBKDF2_DKM_LENGTH: up to 512 bytes. This parameter is mandatory.
TEE_ATTR_PBKDF2_SALT
TEE_ATTR_PBKDF2_ITERATION_COUNT: This parameter is mandatory. - -### p.152 Add new algorithm identifiers - -The following entries shall be added to Table 6-8: - -Algorithm | Identifier -:------------------------------------|:---------- -TEE_ALG_PBKDF2_HMAC_SHA1_DERIVE_KEY | 0x800020C2 - -### p.154 Define new main algorithm - -In Table 6-9 in section 6.10.1, a new value shall be added to the value column -for row bits [7:0]: - -Bits | Function | Value -:----------|:-----------------------------------------------|:----------------- -Bits [7:0] | Identifiy the main underlying algorithm itself | ...
0xC2: PBKDF2 - -The function column for bits[15:12] shall also be modified to read: - -Bits | Function | Value -:------------|:---------------------------------------------|:----------- -Bits [15:12] | Define the message digest for asymmetric signature algorithms or PBKDF2 | - -### p.155 Add new object type for PBKDF2 password - -The following entry shall be added to Table 6-10: - -Name | Identifier | Possible sizes -:---------------------------------|:-----------|:-------------------------------- -TEE_TYPE_PBKDF2_PASSWORD | 0xA10000C2 | 8 to 4096 bits (multiple of 8) - -### p.156 Add new operation attributes for Concat KDF - -The following entries shall be added to Table 6-11: - -Name | Value | Protection | Type | Comment -:----------------------------------|:-----------|:-----------|:------|:-------- -TEE_ATTR_PBKDF2_PASSWORD | 0xC00001C2 | Protected | Ref | -TEE_ATTR_PBKDF2_SALT | 0xD00002C2 | Public | Ref | -TEE_ATTR_PBKDF2_ITERATION_COUNT | 0xF00003C2 | Public | Value | -TEE_ATTR_PBKDF2_DKM_LENGTH | 0xF00004C2 | Public | Value | The length (in bytes) of the derived keying material to be generated, maximum 512. diff --git a/documentation/extensions/crypto_rsassa_pkcs1_v1_5.md b/documentation/extensions/crypto_rsassa_pkcs1_v1_5.md deleted file mode 100644 index 9b1e65dfc..000000000 --- a/documentation/extensions/crypto_rsassa_pkcs1_v1_5.md +++ /dev/null @@ -1,20 +0,0 @@ -# PKCS#1 v1.5 RSASSA without hash OID - -This extension adds `TEE_ALG_RSASSA_PKCS1_V1_5` to allow signing and verifying -messages with `RSASSA-PKCS1-v1_5` ([RFC 3447](https://tools.ietf.org/html/rfc3447#section-8.2)) -without including the OID of the hash in the signature. Trusted Applications -should include `` to import the definitions. - -The extension can be used by defining `CFG_CRYPTO_RSASSA_NA1`. - -# API extensions - -The TEE Internal Core API was extended with a new algorithm descriptor. - -Algorithm | Possible Modes -:---------------------------|:-------------- -TEE_ALG_RSASSA_PKCS1_V1_5 | TEE_MODE_SIGN
TEE_MODE_VERIFY - -Algorithm | Identifier -:------------------------------|:---------- -TEE_ALG_RSASSA_PKCS1_V1_5 | 0xF0000830 diff --git a/documentation/extensions/extensions.md b/documentation/extensions/extensions.md deleted file mode 100644 index 1b2bae12b..000000000 --- a/documentation/extensions/extensions.md +++ /dev/null @@ -1,33 +0,0 @@ -# General Extensions to the GlobalPlatform TEE Internal Core API - -This document describes the OP-TEE extensions introduced with respect to the -GlobalPlatform TEE Internal Core API Specifications v1.1. - -Specific extensions documentation are part of: -* Cryptographic Extensions - * [Concatenation Key Derivation](crypto_concat_kdf.md) - * [HMAC Key Derivation](crypto_hkdf.md) - * [Public-Key Key Derivation](crypto_pbkdf2.md) - * [PKCS#1 v1.5 RSA sign/verify without the hash OID](crypto_rsassa_pkcs1_v1_5.md) - - -# Cache Maintenance Support -Following functions have been introduced in order to operate with cache: - - TEE_Result TEE_CacheClean(char *buf, size_t len); - TEE_Result TEE_CacheFlush(char *buf, size_t len); - TEE_Result TEE_CacheInvalidate(char *buf, size_t len); - -These functions are available to any Trusted Application defined with the flag TA_FLAG_CACHE_MAINTENANCE sets on. When not set, each function returns the error code TEE_ERROR_NOT_SUPPORTED. - -Within these extensions, a Trusted Application is able to operate on the data cache, with the following specification: - -Function | Description -:---------------------|:---------- -TEE_CacheClean() | Write back to memory any dirty data cache lines. The line is marked as not dirty. The valid bit is unchanged -TEE_CacheFlush() | Purges any valid data cache lines. Any dirty cache lines are first written back to memory, then the cache line is invalidated. -TEE_CacheInvalidate() | Invalidate any valid data cache lines. Any dirty line are not written back to memory. - -In the following 2 cases, the error code TEE_ERROR_ACCESS_DENIED is returned: -* the memory range has not the write access, that is TEE_MEMORY_ACCESS_WRITE is not set. -* the memory is not a User Space memory diff --git a/documentation/external_libraries.rst b/documentation/external_libraries.rst deleted file mode 100644 index 6554feabd..000000000 --- a/documentation/external_libraries.rst +++ /dev/null @@ -1,109 +0,0 @@ -.. SPDX-License-Identifier: BSD-2-Clause -.. _external_libraries: - -================== -External libraries -================== - -OP-TEE OS contains code imported from external libraries such as: - -- LibTomCrypt_ in ``core/lib/libtomcrypt/`` -- Newlib_ in ``lib/libutils/isoc/newlib/`` -- `mbed TLS`_ in ``lib/libmbedtls/`` - -Historically and for convenience, the imported code was directly committed into -the OP-TEE source tree. Doing otherwise, such as using Git submodules, would -have made things more complex and error-prone for OP-TEE users and developers -and was not deemed necessary. - -While this choice is good for smaller libraries or the ones that do not change -much, it can be problematic for larger libraries which need to be synchronized -with upstream occasionally, especially as local changes accumulate in the -library. - -Therefore, this document defines a process that should hopefully help import -and maintain any substantial piece of external code into the OP-TEE Git. - -mbed TLS version 2.6.1 is used as an example. - -Importing code --------------- - -1. An OP-TEE maintainer creates a branch: ``import/mbedtls-2.6.1`` from current - ``master``. -2. A contributor creates a pull request against this branch, with the following - commits (see `PR#2338`_ for the real example): - - - ``Import mbedtls-2.6.1``. This is the base commit which imports the code - unmodified from the upstream project. Some files may be omitted but no - other change is allowed. In the commit description, the upstream commit or - tag should be clearly identified. - - ```` - - ````... A number of local modifications should follow, - typically some local adaptations to configuration and/or build files but - possibly also some modifications that are needed so that OP-TEE may use - the library. These local changes will be carried to newer versions of the - imported library when needed. - -3. The pull request is reviewed and merged normally (into the - ``import/mbedtls-2.6.1`` branch). -4. The contributor creates a pull request against ``master`` which uses the - imported library to add some feature. The pull request typically contains - the following commits: - - - ````... - - ``Squashed commit importing mbedtls-2.6.1 source``. As the description - suggests, this adds the contents committed in step 2 above as a single - commit. - - ```` - -5. The pull request is reviewed and merged normally. - -Adding further local features or fixes to the imported library --------------------------------------------------------------- - -Whenever a change has to be made locally to the imported library, the import -branch should be modified first. The steps are: - -1. A contributor creates a pull request against the import branch: - ``import/mbedtls-2.6.1``. It may happen that the proposed change depends on - commits that are in master but not in the import branch, which would cause - the CI to fail. In this case, it is desirable that the contributor asks a - maintainer to **merge** (not rebase) ``optee_os master`` into the import - branch. The history of the import branch can still be shown easily with - ``git log --first-parent import/mbedtls-2.6.1``. -2. The pull request is reviewed and merged into the import branch. -3. The contributor creates a pull request against ``master``. The commits - are cherry-picks of those that were merged into the import branch, plus - any additional changes in ``optee_os`` that may be required. -4. The pull request is reviewed and merged into the master branch. - -Updating the imported code to a newer upstream revision ------------------------------------------------------- - -When it is time to update the imported library, say to an hypothetic mbed TLS -version 2.6.2, a similar process is applied again: - -1. An OP-TEE maintainter creates a branch: ``import/mbedtls-2.6.2`` from - current ``master``. -2. A contributor creates a pull request against this new branch with the - following patches: - - - ``Remove all files under lib/libmbedtls`` - - ``Import mbed TLS 2.6.2`` (some unneeded files may be omitted) - - Cherry-pick all the patches from ``import/mbedtls-2.6.1`` (except ``Import - mbedtls-2.6.1`` of course). - -3. The pull request is reviewed and merged normally (into the - ``import/mbedtls-2.6.2`` branch) -4. The contributor creates a pull request against master: - - - ``Squashed commit upgrading to mbedtls-2.6.2``. This is a squashed merge - to master of the commits in the ``import/mbedtls-2.6.2`` branch. - -5. The pull request is reviewed and merged normally. - -.. _LibTomCrypt: https://github.com/libtom/libtomcrypt -.. _Newlib: https://sourceware.org/newlib/ -.. _`mbed TLS`: https://tls.mbed.org/ -.. _`PR#2338`: https://github.com/OP-TEE/optee_os/pull/2338 diff --git a/documentation/file_structure.md b/documentation/file_structure.md deleted file mode 100644 index 77d9a8a7a..000000000 --- a/documentation/file_structure.md +++ /dev/null @@ -1,67 +0,0 @@ -# Structure of files - -## Top level directories -Directory | Description -:---------|:------------ -/core | Files that are only used building TEE Core -/lib | Files that are used both when building TEE Core and TAs -/ta | Files that are only used when building TAs -/mk | Makefiles supporting the build system -/tmp-stuff| Temporary stuff that will be removed before the final commit is made -/scripts | Helper scripts for miscellaneous tasks -/out | Created when building unless a different out directory is specified with O=... on the command line - -## Structure of /core -Directory | Description -:---------|:------------ -/arch | Architecture and platform specific files -/include | Header files of resources exported by the core -/lib | Generic libraries that are likely to be replaced in a final product -/mm | Generic memory management, currently empty -/tee | Generic TEE files - -## Structure of /core/include -Directory | Description -:---------|:------------ -/drivers | Include files exposing API for /core/drivers files -/dt-bindings | Include files for the device tree bindings - -## Structure of /core/arch -Directory | Description -:---------|:------------ -/arm | ARMv7 and Aarch32 specific architecture and platform specific files - -## Structure of /core/arch/arm -Directory | Description -:---------|:------------ -/dts | Device tree source files -/include | Include files used in rest of TEE core but not in any supporting libraries -/kern | Low level and core parts of TEE Core -/mm | Memory management -/tee | TEE files -/sm | Secure Monitor -/plat-foo | Specific files for the 'foo' platform - -## Structure of /core/arch/arm/include -Directory | Description -:---------|:------------ -/kern | Include files exposing API for /core/arch/arm/kern files -/kta | Include files exposing the KTA API that is mainly used by kernel TAs -/mm | Include files exposing API for /core/arch/arm/mm files -/rom | Old ROM files that should be removed before going public -/sm | Include files exposing API for Secure Monitor - -## Structure of /core/lib/lib{crypto,sla} -Directory | Description -:---------|:------------ -/ | Source files for the library -/include | Include files exposing the API of the library - -## Structure of /lib/libutils -Directory | Description -:---------|:------------ -/ | Source file for the library -/arch | Architecture specific source files -/arch/arm | ARMv7 and Aarch32 specific source files -/arch/arm/include | ARMv7 and Aarch32 specific include files -/include | Include files exposing the API of the library diff --git a/documentation/github.md b/documentation/github.md deleted file mode 100644 index 5e9b23172..000000000 --- a/documentation/github.md +++ /dev/null @@ -1,213 +0,0 @@ -GitHub usage -============ - -This document describes how to use GitHub for OP-TEE development and -contributions. - - -GitHub Setup ------------- - -### Setting up an account - -You do not need to own a GitHub account in order to clone a repository. But if -you want to contribute, you need to create an account at -[github.com](https://github.com) first. Note that a free plan is sufficient to -collaborate. - -SSH is recommended to access your GitHub repositories securely and without -supplying your username and password each time you pull or push something. -To configure SSH for GitHub, please refer to [Connecting to GitHub with SSH]( -https://help.github.com/articles/connecting-to-github-with-ssh/). - -### Forking - -Only owners of the OP-TEE projects have write permission to the Git -repositories of those projects. Contributors should *fork* -`OP-TEE/optee_os.git` into their own account, then work on this forked -repository. The complete documentation about *forking* can be found at -[Fork A Repo](https://help.github.com/articles/fork-a-repo). - -Note that the fork only has to be performed once. - -Contributing ------------- -In the following: - -* *myaccount* stands for the name of your GitHub account. -* It is assumed you have configured SSH keys so that the `git` command can -fetch and push code to your GitHub repositories. Otherwise, your GitHub -credentials (email address and password) will be asked for each `git push` -command. - -### Cloning the sources - -To obtain a local copy of your `optee_os` project, do: - - # Clone the forked repository - git clone git@github.com:myaccount/optee_os - - # Add a remote called "upstream" which is the official OP-TEE Git - cd optee_os - git remote add upstream https://github.com/OP-TEE/optee_os - - # Retrieve the gits - git fetch --all - -The above steps are enough to be able to build OP-TEE OS, make some changes, -and optionally publish (or "push") them to your GitHub account. -Pushing commits to your account allows you to later create "pull requests" -against the official OP-TEE repository (called "upstream"), if you would -like to contribute your changes back to the project. - -However, please note that [optee_os](https://github.com/OP-TEE/optee_os]) is -only a fraction of the software needed to run an OP-TEE environment. As such, -OP-TEE developers typically have to deal with a forest of Git trees including -[optee_client](https://github.com/OP-TEE/optee_client]), the Linux kernel, -ARM Trusted Firmware, test applications and other things. For this reason, it -is recommended that you check the -[OP-TEE build project](https://github.com/OP-TEE/build). This project contains -the complete source code required to build working OP-TEE environments for -several platforms. You may then apply the instructions given here to the -`optee_os` repository that is checked out as a part of the main project. Some -adjustments will be needed, though, because of the way the `repo` tool sets up -the Git repositories. - -### Contributing - -The typical workflow to make a change to the OP-TEE OS code and push it to -your GitHub account is as follows. - - # Update your local references to upstream branches - git fetch upstream - # Switch to the local master branch - git checkout master - # Update with the latest commits from upstream - # WARNING: this command will lose any work you may have committed - # on your local "master" branch or may have in your working area. - # (In this work flow it is assumed local master is only ever used as a - # copy of upstream master) - git reset --hard upstream/master - # Create a feature branch to receive your changes, based on master - git checkout -b my_new_feature - ... Code, build, test, debug, repeat ... - ... Stage your changes with git add and/or git rm etc. ... - # Commit your changes locally (-s adds your Signed-off-by: tag) - git commit -s - -We expect commit messages to mostly follow the [Linux kernel recommendations]( -https://www.kernel.org/doc/Documentation/process/submitting-patches.rst). -Please use the output of `git log` in the `optee_os` repository as a source of -inspiration. The important points are: - -- The subject line should explain *what* the patch does as precisely as -possible. It is usually prefixed with keywords indicating which part of the -code is affected, but not always. Avoid lines longer than 80 characters. -- The commit description should give more details on *what* is changed, and -explain *why* it is done. Indication on how to enable and use some particular -feature can be useful, too. Try to limit line length to 72 characters, except -when pasting some error message (compiler diagnostic etc.). Long lines are -allowed to accommodate URLs, too (preferably use URLs in a Fixes: or Link: -tag). -- The commit message must end with a blank line followed by some tags, -including your sign-off: - - Signed-off-by: Your Name - - By applying such a tag to your commit, you are effectively declaring that your -contribution follows the terms stated by -[Notice - Contributions](../Notice.md#contributions). Other tags may follow, -such as: - - Fixes: - Fixes: 0123456789ab ("Some commit subject") - Link: - -- When citing a previous commit, whether in the text body or in a Fixes: tag, -always use the format shown above (12 hexadecimal digits prefix of the commit -SHA1, followed by the commit subject in double quotes and parentheses). - -Always split your changes into logical steps and create one commit for each -step. - -Then the contribution is pushed on the forked repository with: - - git push - -The pull-request can be created through the GitHub interface. Documentation -can be found at -[Using Pull Requests](https://help.github.com/articles/using-pull-requests) and -the *Collaborating* section of [help.github.com](https://help.github.com<). - -It may be that you will get comments from reviewers on the commit(s) you provided. -If so happens, you will need to address the comments and you might end up having -to upload additional commits. If possible, create one or several fixup commit for -each initial commit that has to be changed. Doing so makes it easier for -reviewers to see what has changed and also for you when it is time to squash -commits (see below). The steps are: - - ... Address comments ... - ... git add / git remove ... - # Commit your updates locally - git commit -s - -If your changes are related to one initial commit, use the following subject: - - [Review] - -...and give a quick description of what is being addressed if it is not -obvious. Note that you are expected to include your `Signed-off-by:` to those -fixup commits, too. You may use some other prefix than `[Review]`, it does not -matter much, but just make it clear you are updating a previous commit, and -which one it is. - -Once you are happy with your changes, and think all review comments have been -addressed (either by a followup commit or by replying to the comment on GitHub) -then you are ready to push your updates: - - git push - -The pull request is automatically updated with the new commit(s) and reviewers -are notified, too. - -### Finalizing your contribution - -Once you and reviewers have agreed on the patch set, which is when all the -people who have commented on the pull request have given their `Acked-by:` or -`Reviewed-by:`, you need to consolidate your commits: - -Use `git rebase -i` to squash the fixup commits (if any) into the initial -ones. For instance, suppose the `git log --oneline` for you contribution looks -as follows when the review process ends: - - Do something - Do something else - [Review] Do something - [Review] Do something - -Then you would do: - - git rebase -i ^ - # Edit the commit script so it looks like so: - pick Do something - squash [Review] Do something - squash [Review] Do something - pick Do something else - -Add the proper tags (`Acked-by: ...`, `Reviewed-by: ...`, `Tested-by: ...`) to -the commit message(s), as provided by the people who reviewed and/or tested the -patches. - -If you are not familiar with Git's interactive rebase feature, please read the -documentation at [Git Tools - Rewriting History]( -https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History). Sections -*Changing Multiple Commit Messages*, *Reordering Commits* and *Squashing -Commits* are relevant to the current discussion. - -Once `rebase -i` is done, you need to force-push (`-f`) to your GitHub branch -in order to update the pull request page. - - git push -f - -At this point, it is the project maintainer's job to apply your patches to the -master branch. diff --git a/documentation/globalplatform_api.md b/documentation/globalplatform_api.md deleted file mode 100644 index 2bce2ec7f..000000000 --- a/documentation/globalplatform_api.md +++ /dev/null @@ -1,105 +0,0 @@ -GlobalPlatform API and OP-TEE -============================= - -Contents : - -1. Introduction -2. TEE Client API -3. TEE Internal API - -# 1. Introduction -[GlobalPlatform](http://www.globalplatform.org) works across industries to -identify, develop and publish specifications which facilitate the secure and -interoperable deployment and management of multiple embedded applications on -secure chip technology. OP-TEE has support for GlobalPlatform [TEE Client API -Specification v1.0](http://www.globalplatform.org/specificationsdevice.asp) and -[TEE Internal Core API Specification v1.1](http://www.globalplatform.org/specificationsdevice.asp). - -# 2. TEE Client API -The TEE Client API describes and defines how a client running in a rich -operating environment (REE) should communicate with the TEE. To identify a -Trusted Application (TA) to be used, the client provides an -[UUID](http://en.wikipedia.org/wiki/Universally_unique_identifier). All TA's -exposes one or several functions. Those functions corresponds to a so called -`commandID` which also is sent by the client. - -### TEE Contexts -The TEE Context is used for creating a logical connection between the client and -the TEE. The context must be initialized before the TEE Session can be -created. When the client has completed a jobs running in secure world, it should -finalize the context and thereby also releasing resources. - -### TEE Sessions -Sessions are used to create logical connections between a client and a specific -Trusted Application. When the session has been established the client have a -opened up the communication channel towards the specified Trusted Application -identified by the `UUID`. At this stage the client and the Trusted Application -can start to exchange data. - - -### TEE Client API example / usage -Below you will find the main functions as defined by GlobalPlatform and which -are used in the communication between the client and the TEE. - -#### TEE Functions -``` c -TEEC_Result TEEC_InitializeContext( - const char* name, - TEEC_Context* context) - -void TEEC_FinalizeContext( - TEEC_Context* context) - -TEEC_Result TEEC_OpenSession ( - TEEC_Context* context, - TEEC_Session* session, - const TEEC_UUID* destination, - uint32_t connectionMethod, - const void* connectionData, - TEEC_Operation* operation, - uint32_t* returnOrigin) - -void TEEC_CloseSession ( - TEEC_Session* session) - -TEEC_Result TEEC_InvokeCommand( - TEEC_Session* session, - uint32_t commandID, - TEEC_Operation* operation, - uint32_t* returnOrigin) -``` - -In principle the commands are called in this order: - - TEEC_InitializeContext(...) - TEEC_OpenSession(...) - TEEC_InvokeCommand(...) - TEEC_CloseSession(...) - TEEC_FinalizeContext(...) - -It is not uncommon that `TEEC_InvokeCommand` is called several times in row -when the session has been established. - -For a complete example, please see chapter **5.2 Example 1: Using the TEE -Client API** in the GlobalPlatform [TEE Client API -Specification v1.0](http://www.globalplatform.org/specificationsdevice.asp). - - -# 3. TEE Internal API -The Internal API is the API that is exposed to the Trusted Applications running -in the secure world. The TEE Internal API consists of four major parts: - -1. **Trusted Storage API for Data and Keys** -2. **Cryptographic Operations API** -3. **Time API** -4. **Arithmetical API** - -### Examples / usage -Calling the Internal Core API is done in the same way as described above using Client API. -The best place to find information how this should be done is in the -[TEE Internal Core API Specification -v1.1](http://www.globalplatform.org/specificationsdevice.asp) which contains a -lot of examples of how to call the various APIs. - -One can also have a look at the OP-TEE examples git repository -[optee_examples](https://github.com/linaro-swg/optee_examples) documentation. diff --git a/documentation/gprof.md b/documentation/gprof.md deleted file mode 100644 index 532900ab9..000000000 --- a/documentation/gprof.md +++ /dev/null @@ -1,60 +0,0 @@ -# Profiling user Trusted Applications with `gprof` - -The configuration option `CFG_TA_GPROF_SUPPORT=y` enables OP-TEE to -collect profiling information from Trusted Applications running in user -mode and compiled with `-pg`. -Once collected, the profiling data are formated in the `gmon.out` format -and sent to `tee-supplicant` via RPC, so they can be saved to disk and -later processed and displayed by the standard `gprof` tool. - -## Usage - -- Build OP-TEE OS with `CFG_TA_GPROF_SUPPORT=y`. You may also set - `CFG_ULIBS_GPROF=y` to instrument the user TA libraries (libutee, libutils, - libmpa). -- Build user TAs with `-pg`, for instance using: `CFLAGS_ta_arm32=-pg` - or `CFLAGS_ta_arm64=-pg`. Note that instrumented TAs have a larger `.bss` - section. The memory overhead is 1.36 times the `.text` size for 32-bit TAs, - and 1.77 times for 64-bit ones (refer to the TA linker script for details: - `ta/arch/arm/ta.ld.S`). -- Run the application normally. When the last session exits, - `tee-supplicant` will write profiling data to - `/tmp/gmon-.out`. If the file already exists, a number is - appended, such as: `gmon-.1.out`. -- Run gprof on the TA ELF file and profiling output: - `gprof .elf gmon-.out` - -## Implementation - -Part of the profiling is implemented in libutee. Another part is done -in the TEE core by a pseudo-TA (`core/arch/arm/sta/gprof.c`). Two types -of data are collected: - - 1. Call graph information - - When TA source files are compiled with the -pg switch, the compiler -generates extra code into each function prologue to call the -instrumentation entry point (`__gnu_mcount_nc` or `_mcount` depending -on the architecture). Each time an instrumented function is called, -libutee records a pair of program counters (one is the caller and the -other one is the callee) as well as the number of times this specific -arc of the call graph has been invoked. - - 2. PC distribution over time - - When an instrumented TA starts, libutee calls the pseudo-TA to start -PC sampling for the current session. Sampling data are written into -the user-space buffer directly by the TEE core. - - Whenever the TA execution is interrupted, the TEE core records the -current program counter value and builds a histogram of program -locations (i.e., relative amount of time spent for each value of the -PC). This is later used by the gprof tool to derive the time -spent in each function. The sampling rate, which is assumed to be -roughly constant, is computed by keeping track of the time spent -executing user TA code and dividing the number of interrupts by the -total time. - -The profiling buffer into which call graph and sampling data are -recorded is allocated in the TA's `.bss` section. Some space is reserved -by the linker script, only when the TA is instrumented. diff --git a/documentation/images/benchmark/benchmark_design.png b/documentation/images/benchmark/benchmark_design.png deleted file mode 100644 index dfc79e1ebb2ad92fa6cc60d7097df61b814e00fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64218 zcmbTd1z42Px;89`fP$pb%}`2%fV6ZEB@$9fN|)5o(mj;Y-Jo=bQV!kS4BbP>kpGK& zpYxx6&Ue0lUq9C+xuimSE#Cr?9(S?PaZsY@Kjz-O8vnDR3z{R8xtM) z7rV8p(FYG`9>`0*(R4G|(|?qz(K97d-^6-wVB1ypjP2TQwJR&{(UWISY(}0uV^%Gd ziKLUMYAm1?m>%;f2M$^)OmU_@N8|g8>KKIL4PWga< z!$|n7NoMQp?hJT13|k}OSu|F!4%>RbVmBs}w#`%JtU8r6(qYfEtIQ&cX05H7xJ`aP z*wC*u3GJC{GwwjYzP&n}uC*bj5`~2L`aXz%`3^_K<5avmf>dNt)X<_mf|N(K&D+a* zv6-|hoEW!8QKLXbdaXOM!fJ{gus}O;BfA$K+BFUeEz+AGK5G1?odCA2M_f4Y9jDsj}%56azmBTuMap^ye7Z%HA#X@$fug>?wDTO}M zKrW7$b*q^@{v1Sp=n8v87fUaTlgAPDjD?^(n)-VPO-<+Xms*-0tEsP@K3p8F6ytnq z^10gQhYzNa1FvhQL~f1btW^z(cC`CF#DDDwZ+Fz0tan(mKiyJm_BeY|q){MqvN14H zWA*L}7O~1YR=CpUKnih$X0y-TZM)+P(Io>ml`u(~pv#kMVQ{)|Z+46I4ENbL9xo1^ zO1Nh$Dv$YK=l8bTFhV938n4UKCvjS3y6*4ez=%PlYNNAdscy{^e0mvd?!LqMh5%v? z0~&cK=o1d-@silxHBTXBo8x-euQKC~po`-k>V#%l@KCylWSjSmxTELIrOT@zo7w6& z!8nxTBtbGBF3N&ng0N>S{;!=j3JIB`p7tC7yK!+oXE*V_x`u5sO}E~jR`ljnqd!B; z@CMfD{;Q#{;q#w^h4xl($xzas(8-INO=fIIFgvQRhV(G%hMsJwlXhENwz}5i(boG!1N@%7I=cL2c^9r()fFyMG4v#YTrHoY^#T=eI1Q&S z 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 diff --git a/documentation/images/benchmark/benchmark_design.xml b/documentation/images/benchmark/benchmark_design.xml deleted file mode 100644 index 1ece0b1b2..000000000 --- a/documentation/images/benchmark/benchmark_design.xml +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/documentation/images/benchmark/benchmark_sequence.msc b/documentation/images/benchmark/benchmark_sequence.msc deleted file mode 100644 index df230c2bf..000000000 --- a/documentation/images/benchmark/benchmark_sequence.msc +++ /dev/null @@ -1,46 +0,0 @@ -msc { - wordwraparcs=on, - hscale="0.95", - watermark="OP-TEE Benchmark"; - - tee [label="TEE", linecolor="darkgreen", textcolor="white", textbgcolor="darkgreen", arclinecolor="darkgreen", arctextcolor="darkgreen"], - kernel [label="Kernel", linecolor="maroon", textcolor="white", textbgcolor="maroon", arclinecolor="maroon", arctextcolor="maroon"], - libteec [label="libteec", linecolor="#3a5795", textcolor="white", textbgcolor="#3a5795", arclinecolor="#3a5795", arctextcolor="#3a5795"], - client [label="Benchmark CA/\nRegular CA", linecolor="#3a5795", textcolor="white", textbgcolor="#3a5795", arclinecolor="#3a5795", arctextcolor="#3a5795"]; - - ...[label="Benchmak CA is used to setup the benchmark environment (allocation/registering of the benchmark shared buffers) and then to fork itself into target tested application with eventual CLI arguments. Once the target test application ends, timestamp data are made available in the generated .ts file(s)."]; - ...; - ... [label="1. Allocate per-cpu timestamp ringbuffers"]; - client => kernel [label="Allocate shared mem for per-cpu timestamp buffers"]; - client << kernel; - - ... [label="2. Register timestamp buffers in the PTA"]; - client => libteec [label="TEEC_InvokeCommand(\nBENCHMARK_\nCMD_REGISTER_\nMEMREF)"]; - libteec => kernel; - kernel >> tee [label="register_benchmark_memref()"]; - ...; - tee => tee [label="Store benchmark buffer memref"]; - ...; - ...; - tee => kernel [label="Register memref in OP-TEE kmod via RPC"]; - kernel => kernel [label="Store benchmark buffer memref"]; - kernel >> tee; - ... [label="Jump back through all layers"]; - tee >> client; - - ... [label="3. Benchmarking is active now. Fork()/Exec() Regular CA, bypassed as a param to Benchmark CA"]; - - client => libteec [label="TEEC_InvokeCommand \n to regular TA"]; - ...; - libteec => libteec [label="Open session to Benchmark Pseudo TA"]; - libteec => kernel [label="TEEC_InvokeCommand(\nBENCHMARK_\nGET_MEMREF)"]; - ...; - kernel => tee [label="Invoke Pseudo TA"]; - ...; - tee => tee [label="get_benchmark_memref()"]; - tee => libteec [label="Return back paddr\n of timestamp buffer"]; - libteec => libteec [label="Mmap paddr into client VA space"]; - ... [label="4. Now we can put obtain timestamps also from libTEEC"]; - ...; - libteec => libteec [label="Resume TEEC_InvokeCommand of regular CA"]; -} diff --git a/documentation/images/benchmark/benchmark_sequence.png b/documentation/images/benchmark/benchmark_sequence.png deleted file mode 100644 index ce01c513fb7e0c50ccc332b1585fcfd66f7820ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157248 zcmeFYWl&t<^DdacU;&1~NpN=wBrpVr!992&xP;*DGPq0dFgS$Z8e9f{)`=`L^p`showu4h4*=l~)RNc}uA ziUvI4dRY9DQbF z$JXBatBH>?VemHw_UpQktyE z$B5d@Vy%&mBB|ojGw02%kq<)>J`S0{u?k0WBd=}pm!1nTFFK34nd}t9(qwxxHwS|{ ziD1O{{mQb`C5pGZc3wLr9%U9Q(?uHF*-jCzf;WM#*7l+Eg1+74r#ru{*w5oc4@jV* zR#aSBACC96KQR`vLdyW2GbdV%jx$c08pWy#tM9EiO3f6L;aUUg%2}eU&}crASI{zV zX)P3;3p2GW{airhyLkJVD`hN$nRp2|dnf^z(UG-c1-a7ObGpMxVRhOcQ=MpM$%jL2d8%cvAF) zJ)O@{OA*4-YG{`Ac&M&U>}_|XV{H2MH;RrYVC@(Q`S4klFYCs)QGo!Vjv;&J@!fDa zdzFT^r`>p71T@W}l~dr0{%sD+&n;gjW~v#r+FFSHOF^CG+rK`$lchBWEgRq7(+lXk z&$eXW*Vu*%^X+R`ySPftnPhtN-bQ*LLcNR>+_h7!C-Uy>xdrFuPM4X*h9@zM`0;y5 zsrFbmva`7<^^e($4X(cn^R?Mn1Au;?svnq~Zz}i-o0?8NNIn5n=pENAb%{la0F_aJ z6A7PF;1+}8I_d%`@KDrc#Z?+j&=1-)7|jxf3O~bVxS%Z7cJ`9v6USVxN=FQp^H;%O z`?bb^!SlqW%@R^l%z>?63)QK@egQgyc>|wH8cmeX4C2{y5{#a%_3iimycd03C-pjP zcd!^u_=(s`bTRK|HyV^5BbP6;^pQK3P#t0&IOhDgKuMFumBqrYLo%3jmCfi7P(KSn zCqJ%9!P#+3c5N}wel#Wt}AZYrYpw sAYBQ2->vL#0Sj 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Ǒ+k>lB%zHeB zv3v(!JbA_n9ZzqoHLP3pEfu(|5M&R|KBd!ebJx{4tSGw-tu79Eq+dicUUph3#+Hr$ zHsD#z@g4DBpI|S#%yD%1e-~3MK~DhjzrS#6T8sAFSW57SYxB_8(N5GF(x~!h zc2rDbQd#mT|Do_53BZEHuaoEiO;+r`_YiI=9uOhkO-mwe&EKCYiW!VD1N%1Xhkp%u zN1B8oIdkk!M*~?tIqs)}_Z;p;d4mg0aI}0ot88zvEHbgZ;D)dyQY6G688a^~a^v%9 zMDMuh&t1&LMo(}v`RmrpwpfPqix+OSK83ulip^ zVwlgBAmls7V6R0(;8G=Jh1hj6ZdB&|f)6=YL#sBT!Ziv?OJzKMmsVv6I_V4!+0r7g z2k1XGX$0~gLRiU`hRZ1LUkTdJ=m-!I$_P_JG_~3mb|#u6$@s0uqc)Oo0^&(rlZSG; z8WZg;7NEu`4AiH!upY{gcM~fPlHeYWYWLA zVmlBzvglkRY~S`htT@7YE)p=zp|1OtIV|($^R7f8#?@l>_FyrJNMgUEu*}E9s|n)3 zua!q9vy?CW`Z8Sxxj2u1R#;SJ-bQ9CpAlEZzNE?Go&A|xELPdHZ*;Tbh(QR&FHOC~ z2GGVu1;C2^M-DKFS!d|}=FFdvnURs>^`-?VgCGf`EHbGRdkj^(kWNiO1gQ(2FHcX( zV~OW}8V-4AMtjiAT=)(d_*7g4Iu5Z)+?FZm93YV}g?A z?TRF2e3%2Ddi%9Qvf{l<+7jP~z}i3yt*AfVYY3-Xjp7p10EFSR`SzTF2k-TtA;Fcn zi`hNue)8(jo6NVXX6%7x(BtD;iZ~n!66&UkwtZ2NhcOhsfQNPRro&eMD3hF%&;C3~ z!XAb?M67y@{YJ+jt-_C*2u|Xcu7~|i$!caIZ%pN+@Pp1Kch4NH28%Q-2a36U{2mV! zn=F=IAvK2B7PbXHgZ{CB@sbqWXLR8@lAZ%%RrD4X7FqFdioih6DEM{R`o3$LQuq+V4O&^K$)HP z@Yf=dl)Fli>7dPW@8ONfT;J(z-zu;f=2F}^&tVh05-+1#BZ9}u&p)o6SXDzR9qfr8 zTbq*Vwp(VnANev&i^4>$sC%y_#Czn590v|sb|SECJ0w@ z%GucO-xk~I3%&)0MkN9`9bgd%G5_Wg1ZW!?vSbSMHn2HbSQNnVH|uss3~_M0rqa>W zd`7@l#}-m0#tFZ)91}qObY~A@O)-c03_)#jY1W z@H)E51+)2Udo1O}>~^^?29Nu_^gV2>yuV(QSUGFsIN266C3*&Rcp)mMt)-0-rwWYi z^gmLFsXX`wzqD~=m0JAjTOo{ixPaaS^j&tLCS^oYF| zb#lGiL>Z(vQAzneu9Vy&OU{CHQ?Xfa6_5x7=yVdY&kokoS6)wjy0?RTswpki&+>DR zXuX<0;(Rw9S5wnEdF3bG$+8o$v1LEmksiLLl-)Khh5gjz8pt)!%?__)tVU~Pd=@X{ zaW*lT>kpoYM9q?crd=*^UsxkG7BcM!82`uZ;X?j{PQs+vnXfG(q)jdC2_Kr*-vtj) z;Yrjb>rk--ou#2f7mtUxDb2@me9PboPsQwPx7lw|fJh|5mqGWti+y6-06mR7moE_(Zsh>$5%(Fi z{mwf}@y5IILxYXuJe3TwrOQ&Pu{0;3yF;wZ2qS|2Et<>(sjy7VCE@a;->`5J+a7b* zpbN1Fv_6pWlg`Mn$h@&e6pCony4g~pj}M?RxOzs>(FEWR_u$dGxB_A<8eeNb0DC!@*#%UU-@QUI=6!2wm>!#{N7iVA_ zTSug=lG_nL7aB$}wy9_AhL|9e!-`aZNK^wV4A%OeM-UQ23L*@pFb(qTc(u-LO7`76 zbB&$1jMp|=zbjh{^*y5^pd=$5f7$Ga%mCxLKKmcFs7ZY258VU}xDIj5$dt-A!Nj0u z$G|MRU!W*UK)+G1oz-6ph?f%q;NL&uP_XRzO**`I5necq95kwJ&gf1Jgy9hi{|&=o zIP^3nFtFv`;&EcUW`{MFyAl;8daOtOx9NY{hJ8j0)yfGT1pL1n^4wNHh84VT77s%1 zLVdd#5&(wl*3-kCd$Kc4%)af6gY z$GzA;;iA%XshKkvQ_wx={9q!ta}(r0yK>cDKGX7zMNgZq!N?=W?|#Ou>8WHqw0A*o z`@FRFiLv(pBfq9prm}5YIN@owNET)OefJ?};E9RL&93jz&1?tL9geQaWZ=;>}?K_3D7MUWM8&NTZLj^@gY>N&HEpZ<`9)idozs!HXKJ&1JMAIqfp-(@9^^G}NW2?)_*Q^oFCH@29`JgEvcCekUo-?$gO0 zHl)t;+~&%`hX7J2+X5~IR_W`qQ8%j1o;LL5E^rY0YVFzL#)x_Tx}O!K!HWC6I>@h!>It)MCPMb`z!CGrgn0S60Ga|cqs)P z>v$yeKFJaQIOUVF)}gcFLz7w969~dY zX|IgEKM!W!?OuhR_Vtt$D#Y(BZLf?aF0zTL%BLg`{=^#}=1ITg1bIF@P=4JNM1Ij; zF=BLGL>{=B;IjL3nG8e@YLt6&a2bI!7&xC-*!)OloD_JtWb%okHaHy8i{Ui2&BD#^ z$i6J7x)k&3Sf2NI0OL|=54{v{o+tlxo~3$l4gh4_^2ECV2-Znr?N-{`*aDNbE;wdD zm2P^exN)UGU59;zS5+kKKJ1IXWsRoR>|42_dd~YF%Zfe2_JAfFkBmF#3$%$Ep3o+j z!|;{?OER~VBmjxl`{D@pYM5U+a29Jim^RirTLzD~6gFWA3N~Q5d}l9Dw>rb_i;@I#IEZ)+-<}+OOXX)EdaO5@BIq z@{fOYM*0KrD{rX&XR~;M%)mE*lBkqct4T*de5O%KY(;VadOj(HTNdp#A!;yE_4je* zPm6#Yo~HUz1^r$Bhf zmsgg=;myowgQEXp-E(aP?*qd#lBIyS0k090VS}hu8es0zw8NqSU#uhA&7@7vyS{n# zSOe3E+GcemDTloUEn9#sGS?NV{TH1{T}x||*;PqF(Z5Qo zuNwX;ty=946#yy>letPLHnh!%alm>ceNL>}J!GkVU2NL<5vk^VFS?0Qbg$eZg|3lRXsvzfk(VCOQtPZGb zObOr>!bk}J5h^?oZf!`^N`@)CDb38RpfAnUm67x~buKl@{wR33^%UnW8nAa1Ja*mfUgL7_vf0e;fzcj{YWq=zdGH&h0Jheot0S(A zc4K4XZ9qVK^)w+fZEO%l4@~+dd5ju=+rp^DgFAAr?C(1BE7%APqG8Lyp=L%Bm?}vz z$sSPj(W>z}d0$dY#a=STl+4QYv_(wJtB&LaGZe8cMCKFTTLEV9E22;LQ;=M<>vyX@ zE?U!oO>ZXWi@UTx zJWXK6lN1jUnM43;%IVXj4kC{eDZ~P1KDhprbnkcrtFBMxQze}9z+?bF{>$Ltk~D&I z*eLd%4_>sV2hRJF0iO|hY(2MT=qWQ$a!z#EeuUw#C zQ7X;SqXlq)W6Ra41*i#+r1P@xRmcnjAgWk#Y?iPBe*09_$TW`_K(+AA!?|_fU&1pB z|4JQNA~)q3BwAG5%Y+K3BMySk;+5z(M{|Y}p%u2+h9A3j-+^JRhyNkri(!-7<&HHw zCs&5rs?EB2)>%(bbA6^t?oB}0zLY+%@I3lG+3dcrTlDjQq%)GI?|d>5MEBL<*4nOwKoAO6EUV)jeu_PyhqvNU;PtR zB>lIr9#xkej9A0fGXtpNjGn)k_=4se84)2hG)ybVte{U!n0m9SJDhm4_L20grI(9| z8`dZjex^I7pCo`|==01nez|vr-$`IRXEYDCU4<~+9WDezB)x>h0g@^3>$WGmUr2?D_6#E_P zG|;zNbpRApl8wb1m?217@>d#2EX7;o;!~<2Ijyf-D~mB^{W;eiwdYGm-67ohA+zAr;D@N`=X`MjfcZXdekZL> zPP@c0fZ6ryhbtk#-~w2TBaqOyG{6fN%CLPI0J|Pt^-~63E6e2>72D_}l`qE*g2_0I zYxIHi{+E=N>;?K)^2R427Vi;+BH+N-0&=n3j5BdexQcK@WmXeDqGk{3$q@OTLZx&| zqSh-;(btL_LOzO?4Asr`+F3pa2HrOhlor3cL<@}4{pP**12{K!4hkgiKK{UcSC!B= zu>LJ3uJXlVVei9^l6mxB=0^W7YtUDjhh=OE=Y!1dMZ)j25&!IV0|Ms&%E)%#o0ikn zR!{j0cf#lfw>2z>dL=zlqV7BsdKGkrGGqK$rYzaxV0plecS%Qc z|D@<}L9tPLxJYRztUCtC5W&37e-?R<=@&EIr)R{ zy#5yhGzpm8>=sHMaQW@8qLFr02g-Ey(RX5@m#}D_y!nc*W?K#iNH*%@90SsrU5Qvy zfJk}zL$}DIZS&I8^tL)sMG|hVFH(P-_YW2zrEKi6=vf1MY?1Mkc0jrs(+qc+#Y8-z zy0#iE&G?E=v%AA=j^Y;UtwLqfosnKmxuUK1>=4-Z!z+67)}(o>E)0`FGJ+y`Eui?@ zs%66O39W?j87TsR>el(;Q+~a6zL^^M3!f{yt3yXe3ysrJ;AP7fUymB6nE&ZTfU9(v zfiWO3d8Sd|NEh2>ulnbgmns5VVVmYqnOD&Yfg))un4;scMw37Zbtv6={qKLf+Dl=l;^68HjGW79ePu~9h zDE>QxPpi++R~Ncpr%7(JEd$&rMs*;H`%Axz25D!_Jdr_T)Jt!%-o5~s9`Bb zPUl$r-w3S3>W5rgtO<5w^NXM*$#2o|hemtNqG3@!N*?o;ta{&FlK6jv8R{z-s(=m* zzl_NJz30v9ERsuas&A@Uko48j7~1Z8T9>QKz`!_*K<$Bvrv<}kK_`VK=qH`cq7`EK z&NOl%>d!AC(9M@FWCx~2i3Vxd{aF(_vT4c6m$lf0fcnXy_Qstj3iNl{dE`i1gCg6D zX4!{_LvEnj=++%~degv#VC48#I^ope#_}Pd&ci)Ryvzbt08@rVY?h?W?+ZePhUCWu z?UtMC0Gms{XCyleP8asAKkB*^_bbX>@=f;h(vk%x{?>TlofwDA(EO5x%bM1Fiz@-g&xdKIcX0d9V9(4;T1lvpg2 zv^df;8)~Y&XS=lL$r87|nP_B_wQ`m`>B}pIl*F&@{&;6?XWbYdJ*9GS6(mCBl9kQn z^c!;Rv@BT|7@mn9J+X5R6J0pJM>p_;C%zCQuKX=s6-RdL{e-OBvF<3O#US|GUX|x} zL*has(h3D6Fy+v662ePU6?x+u355cBZfT7$ux61=>;p9kdH(#%K8?KxSQr)r(+u9e-Zd3dT^9pE`HXsKyP z*t64dVmX58OSKq2WwA0#D@R2@>g@EzS$$#&3o;EfH6uy$gF5mRC-5iRl5+ppXW~rlU98S)vJZ zbi{xMwlopgQuJw8^AR}WdDZYJMDroWI3#3e@pyecye3Q%PASVxU^l(^T3uzHMJgnm z&|%Q5Ew=K~V$jTak4aNmVrA4hvcorgnDkvjoz*v0_R1_kX4?`8R{kup&#VD`vu2K! zA@ddc8Pj(pWVE(YT4wsxrt!8mJR;JFcQ0SYX%yp7iiDV7t=WaMesQ82@k@G!`*u*T z_*vt#AkX-!8ssrWS>P!ytU}eV;Xmpk6ycRfhR9ok#np|S(4$DJdJ9Tgs~B zjWVZaduJNGUNX96-Ys0)Ld$a{z_p*^T}`@4`M4fbz+Bx)YI0(DsF;``s2O8)>8J8C z%7uCa0^ZWr1bUOnGNBvH{BsE%;`9`#K){RroIR65*N zW1(}l^FC!iMtD`dpY=u{(**=j1g=d!%U zjZ4sPyuJk2A`g6tr`5tTtV*E&W>14Z>uGT!3H(3>+OXYQvCId(wwVv^$vatu!g3*q zKk!YlGPE<|IvJcun~2C&Rc9cXr2g_1QWiAeuZa1^N>XF9v%G_PO*iZv<(J_7)4L-l zCG&JVy-p^L;*-p>p{$qSVnhjvuAjyI@9R<)w!AY@!+@v8YCPZgqOXGES)M&(Z1=$m zTLwHecQ*pD3E73_zG9}wr{|=1clq^WmsWv#X$Ui;C&5N@UPj8C&Hwf@*US00RBZ4k z7Ep7VCFClR^jFrxq6T3ER+ZhoGf0P(m9{wb4o7WyJnJ*d<@}xEv%)Ib9icB18q6-H ze>F=8D3M!2N8GrPlxcL(fwQ6fOdfG8J}J^sl(#cZ6C4@wv%6a|JOefJgHo3ayc${$ zt&@7gbYnmMhqT3)a@A7Mv|j-f?qw;e8nug;89f`czSZ{PR*g+fbd1{Xi8Y}3H0G4q z8qkq*gnxhGx%|fH__)fTp`k%=z7&*&4>*Pw&eX0o5lK;qA!3H`ygQK?qtlk{x1-hSeBX{*;~F%UH|5{gJeopG6_PE`jU{N<*R?R0A-Kl*y_{&ILOaD#f9ztp~L?W+GN z+5XpN=A>_7_lbtc_4^5jYa~P(BLSWB16_p8Z1y0HZO3;@8QH4ksvb*C+c8gdmH4S( z3^XjsY>sr*o8B(#*%Jdxn%fx$Ht1#RUph;%R0T~GMHVDhVx zA^xkNNCl|5mTkgS%36xW@(kRi{auCBV&SG*m5*FTlNXt==pD9QVO^Av`mhABHld$B zm6$bdU{2qBGbmQjzc9+h&P`#-{Ja1OH#lA%@o4nApjg1s4P{5+mFgu%U)_FqdbfEc z%i+0UAivbU?19PkiCfxKm0Z*8L~eGhUwPxD)10)GDW``eg-bY`yRjw^Ih zH>3PlRZ8nFbB$*qL-1_r*I5GF=iO>#Kl3loinVS?+>Of&HH!4nKCHN+EBt!V#cNXE zHLu|L^I)p(I^S1mx>DT`ta z(}`JtI-sVPT)q_26`G)lV8tpiIOOf?%bc3fF`p45_8#7I^VZ*u^qjSx^-mslNy;y? zIZx}Ue4*0bfv#{!ra&OUp+hAqCU&Tm059f)iM{)Bf!)Pj*Hm zdR)GYj7#mskr9DgU96b6P3aTL;q$dB+uCdNqwG|u##y`7hyCkwf#>*inASM~9X|UU z83LXJ+3h9@Xc?$08lg4oKTn3gwtC^TKjsxQJKVRLsFs`Z5UOy7I5@EFc{?m$NS@&& zznh&EPK3CV)F2BcduV0rAy!&+*X+gKv5VLg`^(R%$xEd(roOhJ2AgjBh8pFMaWd8L?AQU zA}be)up2f-s6 zbDg)#Ullv+4?55ni9Mo`_)4n>!_)#PxLu2e^7Zyc9hOd{ePZ0MPZ~7%*j#SJLlmV6 z1?&(j1ES)Y*6Xd87Uij`R!*fOaZ;qw4K;J0f%kv;T3KQ zHZ1p20n$bz5fudCLm*B;4&OBMc zjOK^oPwZ<^rM=Ea;-Es72SSAA=@3I=6Xe69m2uPEX3^KKUR+w*R2)(Z`N(Xv@bm`h zey?4Gc}8q;cs+GS44Np1c`5o-Ox*h|vhOCc=xwoa|~c<2#D@K`r=S@ zPIY4)HB^=pk@b8~y8*pB{D$eD1y)+cwdC8^qaRJ_jG%yc&G1U;km>_=6A z2D3%KpXT@tvLgP_KNX5?k`?O7UN(^dK)x4{^kF!z1V@^enr#pSM z=rvGJp&m%5k?L%}|E>ZeEloeqHyklAS!)LT zbP1(D0W~gKH7?XC@kt5SHMfbQ-e{`OjD{oolPw?!PGtQ1Tq=IceKqC2-iMXsJhg0@ z$bvThQ}qiP`bUFiH%4ssai%=Rsk-=GGgo6Eq}o34HE88W8pE^ztZF3?V!fU+W#I3a z?(avTmZ3}AWT+6a8lytd`I08~=LZL)lk(yPkGC^=2FVC4?*M-BUEz1tcxM7{1?yZf zc@xGhy<&A5dJG)%69h7}{16Zl8}0e^au2F1;Qtd_$AKHPPPE+s+@N=bxvJ_K9tR8D z-%jcH)&xe3wX3%V6T+;%7UrJ3kBK2ofeebDbL)?bH@i9P#cc|y@>hsm2Ktu#xWUTa z_s|crNcbJ;@kd+Yk9n;r|Cwf5YYf1SvoRoclaX=6x%aphk{O!=w`bZGckj=CkPL#i z`o#5*bG3PuSiaNhcf)C(jyuK52CiL7NIy<1JeoTpz;AS~U0@8y&%Lu*3EU%B;|GiL z>~PP=GdZbc7wq0C%pkXn6OR)d;Dssv{)9eG+><4_{o31!CLv~gP7V0V5lobS7gCHN zm5tDQ>igt$+N{!B=*C?lpB=+#S|h41jZ^Yb9c4AT(TYD(RU+#bXV<_k6M7nX6k~=s z;%v7-tSpMd>w}oHuPwHs@DxZifrlf{PgcqH21+c*u)DXnB+rjdOVNohwjX5K*M@t2 zHMbON%$Rv8!$%gVy>^+PD9@ZH zT79Q_LKJNembj^Te}L2f-Tq2$gmPI(4xWCc#eWtD7W_qa2m%Jh!Fr~c93=<~w)$d) z|J?8~$#5q?CTXy=Xe5!5pavL!(e%>M&m?}Ptme5y{pDvnGJHEkbC#WyVH1KUEw;cG2_;#cT)k7ph|8nrHuY{{U$6ym14}L5I8JNx52KN z{Z?GTj=e&2wo1$;L9C&i#Ui`!{%XV*nK@9^)?XfM=C_xS357ZT9df$!n9uatGq$`q zi$v}+$m}tEcdsik4O3p)y*>}D)7&~-h(dYJXHzEdC2Ld&unHu7|J<(yZw5VQCbCt! zY4c!1JyWVc`no|igR7$z9kN6Hz5Q}LzNQ%Sn+b|^wAa4mk^AM=mChCh$hrijovR?i~fL+`4Os{P+tUHA?zgy+j4A40zm z&-ov-h{VK!6Fy`%=qwrR^o&48^-lyjEsmuY={9MyZDx|c$v3)Nb%jUusX7rIATEuO-XA1=%Ng-Cz^QdISC ze`QmYYi@hC)*E?pctc0R%dew}DDRoj{Rcrpa^hy1u~9c}emGN*H~%p@3P_)0$-ymG zR3J0Urw}e;N6A8+Y+r$fw5@abY;51B)*$|sKa!@ZsGMHDIVvr-3}+uigwQejg3t_( z85j`fYrU8|&(3f(-Q8;H`lkyzsD;R_&u?9?55v~K@;37W8C8f8%J}=$1{6GU{0Jd_ z&eDAgcRN4UQpkazk6LfiOc95{9k^`bU^zvt&Tpaz_vGvuV6^^E>^P+?IjC7!E)rF> zIS_{c$a!<0o>MzfP1&FX>1F5B|5O9O=?!hdg=4TGLH z=}Nn!3xi)Awe%My1ARmX-M6R|w>PT*QaW6nN&iQ&KzSCh7}R3m_3PJiFmJ;4k2mpn zF2DEF{Ps;dT`KP&B-K_8NtuY_m3Ack_)82%U^bQYUflCpalkr}=hGaVa|3~wz$f^k zIA-AgR}{pgHSl?rcoDzQunAjvigJi=EnFs&v=OAfl zydKklx6RAiuCtZQpc5r((QcR;%d2B4MJN)vqjvgbyND4*X^-hK_i>UlA%UK<*a=Gj~`dW-P1#-(ac#lECc_`9J)buBh2hWhxV&3 z9cR_`Onk$W;udN3Jk(&~{k`|v;8UFQ?LF)DEefp5+O$-P) z+}UdX9B!*z^C#XC-pDG8@vIl~H5OdA)6QraORsZBsF232Q}`5*r*(Tw@kAq!Z*Gxf zB1|Mm#0DqBmy+1EKr@&JWbi+7(HvlMQPL-&=34+2A;rBNsV!}L{!d&n#Oj|1+#S@^!pRNxU_r&| zf34>y0pH6HAJezevSgwZpcEp0pUHR~dK8Awx4Jy$l>G9|ah;xlBX9TOQw{1a80rrN zN&;BjUDoe@neniZtkV>jq)u^n1+Bx@#@-I{9J+DtxzEZ7?Gx!+c&#G(%RY@?}lUi zCj*h(2%4|c@aL8ou&nttP6~Y;>lrUH59SNt8ujySLTM5o`cotx$3jaU$-a4x4 zu4^0BO-OeL5(3g-(1?T}A>AEHOKwEE+#)S44I-U_bi)RuO9_$QbazXAYkS|`KHvL2 z&-b1`PKE z-8x?(Ec$u!rOqjEl3hBCDuVOL4;eTmr2jTF!(v+Z`C5nEFO^$?+us<8nRQAQwn+Jhr>Gm# z(oSYTjPUfCm1e(bOqtG@3|toy#s=lGWplDGCDIs=_)whDTri*;;y3yNnCc1lS!>RaEwWA#sx2Ng?cG0luAMubh5D^F@RC4N9 z-!HQddc3&&4MQLizA5-hky9505XtUJc^;tnL$(ml$u~g^wETHL&fi(n=A-xWS=|(w zFTZHYCSt^4qy#2&Jc?Ky*x7;dYOs|^PIGjaD%{iIQh^~oE0e8a zlXXtVPd7wd$)eoK0w+Kqna@zM@C3bbm`)6U<0*gZLN5=2>=)TPcN-mLoSMXqA_rnv+>+X>}UFBT|E3?E}8eU0Ri+u^0+dM43 z{6=1}bFmz??oCf%Lp?)8q5ph6k?ev(<$i>MlS0*7)cytZmh733UA0s(RkSS?WsI;( zVmce?%Nl5ur{7bcqiP&BH}%H%9!aMQ4}6IadkpTf4!g~FtYpdF1@}mON& zLZ9|m9}&N~0LwjXx&!50KY<@`5B^6$l(N~Xi@n1qc=1YI)@>vLI_I}}?dctC?nDql z$Y9Yo-Cml1In-@`NqxD?0f2{aJ$k7^`)IbJfci!=H%`G7nA z^5+ohE1}@0AdaEN4xzB zi+6;WlMcHz@2L1G^6itpi0<>s>hF7b5W9Ha11s4VKTO@V;jL!cPc&3XJMyUbuPO-D zwEaOiCjeO<2K`=~f3W0hNXO&n!D7Y}flnHWC0D{O9TkEMhH-!@sN-jCR)f7y`ERmN|FOEskQTWDM)XkjLBb5vD&D4&PSG)o^q zcoJ40{JZ>fNt3H{y~jwEdU=4T3^lIR(}BRaPy9CSrYu-g9k2U<D9kM|ABsSmk zr-SV||9@nA+=tzn=_$8d@C3P+hHoaM$y~b`$7<|}TkmzNh=%5gIAk0Hpt5O(qke4D zVQmH#ZDzNL2q4F_BI5h_aSom@Xz+lL#1ekt&+&g9ruknI{DSj;^{J?rqHPr%`aHW_ zLs>hUot=fkuoteL-WshEc_cjf&7xPTx>n@U?7h&Y&Nt#4SGCEA<(D zkshTb#@`-Btu8zk?53EXVrS>t|}Yu$KCwG6jyHCH1WlT@xklR_mP|6!)KFQ`YMe@fx{3 zoR-dnk4bC`ZgC@%1I~XmKgI?`Y;APlZT}ihvHXvi_>K;Z2}Wvbq*cm!v0{W~qGvS?ibZ?^Dc#R8+zFiy-`$8?u0ee(NWSfc_A(Cljyr`Z-KDhgu(ekS*7_iqf3pKG&FeS=dNfXXCL`Kcs%4s z3%g2+vO?xBU;o$*Ae*7apSbwvG_yk=DxyZ@RJftIwRc>fm0vi1Q%d{bHs15C&ML&_A`Fz4)AaKoY|S4>ZUasHKc`*X2DL2(Mh#ih#fI9IJg0R7n2Uk=jisyk#`HSx+EGgZ<8QmTzD)ckP7oQ2Pzz{7f^HQIf3B&L%9}cYLfqbrKgZ@fagp47J;-IXPpL%@hcHPMST&?SQh+)sp ze(BbZ40(#*V%r^a&tqbTN1k(7?VcnLgjokqoTtcl+!rmN`(d=Y#~0|L99!wA{fX-w z+a_+Y1It(GUsSoG=%Ee{dEM$I#6l3Nyn?erc>=-ESz(9RmhtgiEGu;kE z%2Zmlf6mSwdLh!7FiGh*r}H`D>&27UOF<6?F5=VX&O=!uGpy4iVW0YmGwTiQaShC5 z-cjKL>@NpqO|!jz6ISEH0P5x`)}y4Jc7KYgub=Ea?t)HUJQd=J?xvKtN(_s(XmXyv z4)`+(mZB>E>99-nV9|yBfvckVc^$cum&?VIZQ)HRQll=0il2`QNdQ(+?Sk7H4WlJ_i@;_s1;X(sv?R8_-5TMso=#4 z+uiP7)bBg`aWBMggv4&R5;1{-taK*}I5JG1*-l*)YZ#k@d@A`;t1S8Q5m*3H0mom7#sy0{6frt67KG5({ z<@-uxF|(B1%gl^Aed|p1F@Y5j=7h>LH6LYmiRE{e*<_fVb8jmzw4Tq#ld)MdJK3uW z@maf;S%%!q{A{#fzLul#`FO{TL*IjdJAl_u>*uQ$X3# zOmLIxO-xewv*pIC&j$q#Z1E3d>%wL#RA5!b+3-Cr+avMbdAQ zPIc5!(f!)%@RL0avrR=9`5c?vO7WBBA6Htb;~iSRmoHxihlM%p4QHzmdv>&A9_iph z{V2q5hUN)WhGlP|GdCN9QH|7zG#}$Bpx+_65Ec9>ru&uWd-qye(z4}l9J(rCrtw4~ zX?9-{u&dr98dS3hrtJ;TYD%R&X=eV~-P!tke5t-kOeK8&M`!AG>IKT`X82~cuIKfs z^U30*K?a|HUgNub1)*pV{+8*?>RERf-yPO{c98lRZQZ<5u3U))8bm*b#tNcLx$E_) zji9*wtGL1>@q$pm_?01~G_=!$)+;o!VLexp3X>Nrc|VN!zm(v91)UMbkkVl1s}i}J zBXxLaciVUz@WJM?$Bs`L?QK$jEZGS}-wb-Ij9c5$UI8}ciUf0U)?kiphZ z#~#Xfl53Gy*VU#&FAGpmz8-uW9Sl!+TcFeJKgvA-fNh9x;M1)ZI2Yh69K+H2JK(a>W06ms3cK^ zYZR$_J6+~YE-z6Vc?x~vq?wU2s5RLJoj_;r=|WX@{oX_xrIvW!GrcM=W~vXF6y%b+ z6j?j#z9&3XlQzulwxbfTwl*ap(W;zrNL83Lf>%=}?P)*pAsWOT1WWI1{5N#!H=Whh z5F3@&RC9o3W?mclkN1*|g|{)8^kA-) zfB3<(SU%_+nUnU#XM8JwG0JEsU9x}s*j~0)TB*<@OZ;tYqP1#c>}#kk^Q0{+;_rrxg+jSikKfgD@XQv~F5gCisRr zK13EF3sAQ}L})ynf1$l=#%_9W6c`JuyV@a4JkWom(>f!bXYo?H(Vq&@=rzE~<9Q(n zz~FohifV`(H$#K;!-I8w22~OO$%T5>aI?b7O%X@HyNX_TqfgBgybW)+YuS6c-Np{x zYX(dR%aP+-8@kgd&z~!CLGis%MxGx4SW9a;aoi&VKIQ>3$mI->9Etw9ABwQLl>Ha= z0*-=Vsf}Sxia&ED7Nf@jr6@U_b@+g0tAxuYszw*kcx|SJKW?A>u*?Fl!qRZeo7Iy9ovzV*R95$>9e`v!mq_E>Hf2Y^W0_E znFn_EYR{P`@1mZl7GK&{Y(O(+cXEgjLbmTkgNAOh)qNr0bV+9J{hfykh2Q6uBTmX5 z3c7Pa5Qv>hYdxZd;xun4Er=6VyQh%nJJ3<+@)3On#fqHhrD*Mc?zK7xWV>;YEG|St z(TNLGVI@L?l~~gRoi4M9(%}eY4Prh}kyQC4{!M1KWVln(YlYOP{K@5H!pN~lW#QX& zw6YAR8Tv2yY0y_XY^=WX-2mn;{DVd8G5QPecW^&61{9U2a1ynGaY-4d)S0U zqin*y)0_G97L_=W5UtxvWPy`jUn|+x)H&@me9&$Lq?=FFXc}1W(PJe)t?j>+1oGkS zKW4%N64%_rAo)skT|@7w^6#_aADpNQ7?tL-cat3k5VnrQ1Yd(1$7 zKYjF8B;@12UFt`;m&mq7FEy#bUVHx~=Dj#h5(Pvi-d0sBxq9~Y#q9cL zD_Ltmyz$C}dmXnr$m<;?5vjb`Q(PUa$vX?lZ0|)fx}-+7x&$)@IYMqS;d-iZYOe^J zXG9I=U@yzOcL9EDdZSk0+q%5rZE;x`_tPJ4CP;>)@IQGLX$V}##Rb*Xw8eVjcy{F} zZAIljS@Y{%s#^^hzHV8v3z8 znA2G%{DD2dV#2q} zCNywTDO;`M*qVT|r~%g=E4kq?&_oy?#9Tgq0%J{3H3>0o;;vXu8b9N-OB-T^#!~W+ zwQH_Fg-r-}`LvyV~0( z$t0~7OdlSB95^qg>cKH=A0I<%nQkWC@G#19rtr;Fm=#v?lyj)Wqnlva{C}3+g|xAX zaqyB5ssIp0I{X}@nRyGY1*q}-%~)gMgphN0h6*)yCh$rGR}wxS6`%q5)%;PJ+^>qEdwje|8S4@7TR6jRiVoUfX)4k|Hmi&zXa~;E<&^0 zP9^{RYKm6C>oWG?ia}VG)s-fiI!IE5kDHtBW(>rKI&ASX-@+WV5z?X-W>i>sjHeQ( zS#PPxL3!p}-(VjkRNb-eTDDa7t;qUx7t6G7!EcNqkqA#cKEnq{T>c65C6d8q@SBOl zBr*004w4YO4D(Ip8%?A6=RD%#ttHC{LC+df{%jn(LOfsc$BEU?$TgL0Q=Taq9@T{N zU1%ZMz@OF}f`pv=l~|%g*|Tw8P@Sd#{&CuNbstMSzg#Aq@zvG)FM=Mccp@}am?*X1 zpTxYBEPS}nyF{oTdm}ER8cCWmBc72P>5BoRTU=4Y_wo>uYSTAz3)cTQkoQwqfQP{T zty+_{-k?~%+@jvQhx{c=z3GrV)+CaXalTlmeZSK0p^y4_Z?R8D=tSdMI3r42JUr`8 ze;|d>`zOw>?DVZ=6SEDqwbxg=4( zQh`&~v~``IU+eH4@LX@@*<}k3jGrUJr*3##A$9b?x;iIbo>5u(f_z%A>!GC%CNcSz z>fy_d%Lf0p8EWym?8OK6BQP15+{)#i=lAwg*9|6Dk1VxtDgYD|CNz9q+>B$e-noN< z3}~w#70s8`PXIiG9D2MQ*1|4^hu3T4#92K5PMnOuykTS(+K}EHby{ z>U-eEivA1C!wS8;-i*w*zbo430N7zm)bnk`*ZUiSukg;o^uL^VABHM|l`346KbT(M z=ViiiB?dGVe^sUB$J6>08JPOUYPmpaA^c4DrhNebBmVFh16E;qSH215esQZfK7{C#19!edbHE} z2!*CJrIsYXIZuwR=^N;OK8^DkrUw*xJ0>|q6y-8-s>+*L#+D;Hk_BjY(|kZfxN5bN%mFp?Jw zSWqD)w4<%5%td#8J*8MpWaaquSX(%Yx71YDUIST!7jm2>Lzka?vu$1ub~J$VZ#AO| z!i?{HvdtdRJCf&Eg_y&7q$a?eILaA1t`S_YtY}GFosh~anGkh4?9}xM2JngRFTPf> z5uc2+D|HZoEH^Fs>;}4DKBa*5+!tO_c3$h6G7ES|iq)68feE=RY~wwIR1ns*e+n~n zr5NOWId=b1M@JzYTi>KVZlCn!8fBPfp09=2c-_HDJ}h)K8w8}#sQ%tWV9N{BOc!}c z1lS+%mYO2z)nPkdm2t2!VIdRI(buC$-x-x+LoDu2x93DxNoW@8DrU%p-T=CV?zCLP z40Oxrk8UX@0FqOAvyoj$*>MO-XYd2s5y$vQI(8Qi@1vB5-^3M*W%{IGatc4ge1K0) z5c#79$*PDSn|XkM8TW89Wf4$JxrG%#bimsaprc-15M4y?D~%o+NfC_tdRK?OeH1R_ zBH-73JuT)nhJHgowni^4naelIq-Gg0)FOv)Mk=Gk00;<=l+Aw;u(eU8YU&u?@j|I6 z&@t|#SX^V1kRp19-rxHSS#?Y-HWEQaMMI2dTJP)y{xC}kMSVpWAHfhnR1K@L=SIoF zW}9b$&_fUFIMlIOEAOtzv)%a^Blb-B33~rft3gUeZ#M9wiulq}bk~thNWcD&1(+94 zyhIU=!LeiP-1><02V4@7*9cs%L|U$A`siazGu`?UPYC|YTKbM1RU5^^oC@iJ`)2Nmp8KBbpyWid zN(j^4=7p9V_XH1oYHN#yTKh?|p}Y zymJ5h*ZD`YTTi-c9_;o){ixGQ*JDJ{Lk@k{S;1iT$!vS|v)z!WB`Mk{s zzkF*MWyGsUQ>uT?ljt)ch=8QN=A++zM5R*?L{7*qA~4@g`l{x)Kr76a~Q zk(T(nCmy+IjQ_Z3Ql$8}@sRP>zugomgzyZ`De11nZv)P}63i+Z@{fYayhi=|56%Z5 z9!kNoe-#K5=E+YqSxhQW^-ZkDH4$Qk1@5*{%B4&x!G>g_c>$H03#4@5bU)rlN-(>V ztB3%6d4dBVKy=3Z&##M(z?}?G`N_#`bl_eHc?ak3)%oZ}%c_~j&<_8x%@k7KqhoM& zrMqAMqe^$4#ezG)FynFk_%#$tD-bGAv4(ja2!<#A&d%3+%Cd-v2PoDE`IpY$e^_~z zpetG*1GDj0f8qZ|!#Te;T>~2KMwTy?jdS=G{v}zEu)R!K@D2_E0nGXSVdOghY zwC4+@Ky-WxpYs!3s$+^_!E4~nFaE>P{Bv}&xVkSFFMe|Y^u?5~70K5_?&072Wv8xb zppcXKU+1@PY3mD>krBHEgz-Y6OU&Vy)So~8tDo`Dk={hASGg(}D+4t>?8hRn$RN6f zxx(<#3enOUDWb>c^_U_Em4+BxzkoNaklAYs9O_%#xpDV_(3QY9|7!R7j2`COLINI? zK;Kg>4o=y;9SDL!>-X#Oy)o>@v;yE%URg51DFyn(DDF}s-%ddQ3@)-g_8%R4_sf3u zPy(ty1sfSm8Z=JMlz^{qMMb{6#bl5Ye5VDh<-UQPQ1NBdoMN|UU$aTiiZ#%*uu8XbsyRzHUU12Xa z$+h@wgH<_oKguWZX?mFr{3tnb`*GjN)>ZqazP|poQxwG1cB4dBd#HoezPaaUHtuw? zAo0C&J6jF?6mkbbU&X|Cq%qgf!seR+9-2&1`&Uf-?RhY~0rYskec~4|Kc4Di?AGA! zYCXpF$e^l7YOh3sQ3H`KMewx8pq3}!Ywu|}oW8ux(1)6t-$pEHb0Sp4N57dB$|t?W z!=DKkRM5)l4pBw)K10$F62~D`_T41cb8G2L99BVf;A-7wKfdFYz$?WInA|5^^8 zZA(9$1i{8~Kw(>OS{wfiTu7@(`%VVtx@*U!)I93b>KTp_}<(e{^@=Vf);TCz)GXGUR93xwmak>`sF> z^{J6N=3{)?e2#?9`Ov1zmL(ctgwGk@q_FVr&y{a1-*Q#zg=yp9Xp=R*elhIxzCKrN zz00Z6XDLFF4~#@YGnjXkNvgk4>;^A@i^3RwtH}&WO>;_)awkQ*oA-sNTBHJP3;vGc z2d^>ew5T@~#oj`5EWXHVi>2ONK~Dju#V+5i0DSh@T9+-VC5^&BZxNBT#Lp1~JRd}9 zVfZx9rseLXT^_7<#`D`RkmO^0&>ynA^qg#hUN19ry`JKILF(51zIofo6Bg2R8SFCp zsZ178d9>#DYI-_%ut_vKjs+HeSO2wiw!8pn=XrB}u3TcF)a$w>sD8P^puRFqt%XnX zgbwKU}tSz)O%e0lDuFY1i5Z{$r8O3net{-pa{b9FFR#FC)9+_pf3 zxMag|i>m(Rmxi&I`VbfBlKi83XN9hrEtL$!2ayK%8+riH<$NJD+Q0(sADOB2)&t5o zhg8PR$B6!|AF$)^#ai|iK5OdwLY_Aj;_kN9I&VfaiKA)w9G%4(%`F8H%R-sR+1?)W z*@!jnEsnT&NA>E8UF)v2&Ot4booPH-uG{|VzOEUQc4jjDCOK1u8q%G0hTbv z^RnVb@qUX`4G4$o*#3_P|E)f3JVJ4Cn-Qt6@T_r{?dsI=7O8Q_AgXm1axr!YrF3;# zQGRsTe(Pq6h_HLgLq85b?1F6>DTQpcf`j!OE{!5PJK0yJ?rP)q#7xgdJ0o}c6S$+E zATG{MW`c-IvPn$t8h7e~uEIB*qk?m}AFO@O)3P65o$X5VZjM2ZY)~f~Li{xHZ#y=> ziQF~IKkCydgDy8+&5>5C(9o<2-@#_KZA-FGf7KJ)dD+XYJ&{l9o+^BcVmnDHRJrsi z@%!yT(8WPKmST{N^N7p*UA^I#igg%DJw&>#M@f3*yCW_m)OZ+Bz`iN4+~j$cdJYlJ(C~F=S>zOFEes|Y=$tdY#?TyJ6avG z>B*!WsG;A^odb@){Vw~`OHG4ra?rlno0a7hJILVC@d5_S4sRO6)yHXi9+O8 zc0aC-@nyB%YhvlrSI#5C(#+39Rn$yb;?PkYfg6l98JSVsx~Ct=^-0gfd8{;-5BgDe z__j_{@w6*S!_}G6QyqQK7|}JB5sgi*nIM-SQo)lT6?5j}xfqO7;j1)r+p#I z$rpA7RiKB34w-3b1i%e0FI*P9b|tGl+;k32LBnRqLo+s`u+y^P(oc5N`kNG5g_@kC zSKk^uK(Fg?cbB*AqL7Q!VxyPICQ8-Ce7M8aoMe5OIj*A5m9R4oWv1y@ZaK0TKQ{eO zx&XEPvJ&8Zq3)G}5y6odAxTst8}nwk*>-E1`uLuKYN`$yPpA4Cf9NfSA2UXrg9Nbm zt9p?tr(qcR+ZEO<+BK!)l~1z0dn)aV*Di+HhLiY7wYr$P4;+v^ASq*&xD!7QR0@<# z_;k7oG|TyHEH#X>4(PG;Wij{8c7cUoh4u!{`sHR9lI zT}Nc$O1NK7TybLBF+2J04YELA)H7`E?6N|gf3V^m$bb!`JVm}aTiIay%;Y$!2T|tI zq^rYbVb4_IKq#RaB-n9S2y+bcRt&Am{4c40s5PPQ%;CCHCFWS!jnQx#g@Z7X>L-MP zi)bVQIUCMN^*m_(Oz|m4OyDU7ARFl%Nwj@J?`JpgArQxaN*quz!5T<{A+wV|1qO)$J@bGGX``sY!8_dSZU$*ERiVV@iW4}{VG6tx7Nk7>l;qoh$bY3x z5Q|`rc`T%8|H_&`H{}0M)BImpsD0Byb-~Ur<`_+PIzRqGJ$BrV0(W^4OA6K1HH64; z|2Aaw<2pU5{X|Ru_#77jCI;*^oPfu}hqWVaX%=WL#(Rpt6AzWGEevejHV_#B>S}-{ z1PnQ8>w5M8iQ<@p939M-5%_o;@&*ERYcX?mbA9oySNYC0`QDUUpq#YgGmnlIh9b^> zov<1t7jFs**c($vRjh5$8DQ{_1Uz0otbjyW;;rcc`Kx2$PHV(9%)kF$e?o#IQH|>^ zD+C)N3IZ67=GZ3aF_#=_iRr(O3HE#O~5 zlYj3Oe3h!)Tpz$=9^w#0fb+(S6JjT-ppC;&9+oYLmOAOicUXc zJX$0x)B9++>b|1dAZHwxeX`Fgl#Muvnb-d6{W#d8k&Ti<}`QSRGf{AmRORcR_C`n;qzS1g-}SiMYvun+ZtYPd8A&AxojB%u$hrE~%i@?7Gv$2C zlvIrinza|#63*=XWh}`;rNPyyaHCPxtotFy*6W8^YY2D^O7-pzx_NmbOhlA)H@Q2 z9-rx8&h(fVwtqzT9UflCZZ(1zqxeWByfNEp!#6^VayJ=Iovq)W&!M>K~5jl;iC+`@RsSv9=orKa$=qZ-&C~cr5+J24il+3yO~P=T>$l+KkyzZ^@`NV zyimodi*}T81w7sjUuHc?FMZZWEYw^SHO7jwQexA^t{^`qt+~5N@8*cqt^1IV)tBYrBu{qi7516)O3asr zs+3qt4kxP;Ulb;-|bk)W$ z9nZeGds{O?akKf9b&B47pct`8d!E*r!dlgB$jFGoJQT(?!e%>o^z>wZFqK8`Gl!HN zO;9pL>agq-eswr8gVM82TI&&#Jb5`;Vp!?<#ziB);=6}wrKT!+y^=VwsqDfUn7BFo z?~;jV8Xc;m+Me1gsT%n>uas#|yVVeBbnykN*H%{}ie?N*`c-ZUiA<+$U7d~1>^j92 zGoUGQy@fTy*sw=ybS*-K-&abU&IA*feTQdldY6ypSl}i%9LbOS6m?Px0J~Sg4R}uu z?S(L6!N|Oxm?_Qty22|*;h$a;N|?#=46%2WbrlHPZJrVe_o58^W0kM{0|fVe`1`EGam z+T}vHBqALv%M|hCAoH^5D6YZ*+WA<6y8|8I#2N5EF!kAQ7mAI?l52%f3>C>DyDszm zDrsn1ofn!gWZ^F_983}f56YCuUX8nK%H^1>pV~)kt%WI$JeSVTnC$4%ZwoVoF%&NN|$ zBEkHPo+w&OhAO;JFm8yjeACBX3v`^fo%K(;?CgA#I0t25?Ezw^TagZW?Rl$)gu-2u zf*winLi{Zf65qDRc>#zmAcWW0Bn6?Pdu};w@?a7KDsCw}Qsyi~fdYQBQzAyKL#@>7 z78T4y3LsER6qAjw)=ZOaw;gHLuu>79=(Zinmt)v{-Qq94ABBvY46F)UwXKyOXXnMUrijPj=w_^jsw)`GZumVY?UG?E<2uy4Z4I+j zs|E82vSZl83ks_b-5cWCKgcGfN!8Y|!)}ogwS;;OnUjxis&S)OR2j?@;I|{&o{*$X zFn%W}xu&){zwZ3y9{GXMkdXp*X{4AcvbHSyZd6YWbgyx;8pcrpcF2OV+_?}EGu82u zl!w)w?l8%E>WX6~*+f1c%Qn&Nd7;^{;CJU4Xl9+)1|_Qhl56o6;UwEk&?TM9GHtbq z-!pz5;P*{4fa%rQ;#q9LcKe8_?zd8}z;>-?EJ946EpER5>3le-G|y98E{B8JkwcG> zG1@$lKc2(fZvrgA7+OAaNN=cuwMPk`cE*&Ci9g7-iOv%V_b@T`rG{#*f+= zrgON$yg|5jAy4t(4X6w-H2rh^wH=FB$l~3$BXVtW$k^wFWM$~Zbo6P*N8$&TCMRF*1Jn@o+Iy4@`OPP@en~y z}oC;h4(s!wwqr&8PqD)w$o|S|YJ^y3v%kRq*g~BmM`9JseMqll10cbOGq)H7<8^^;>TwuE3~q`l(Dvf zcp49L2lQ)e5wq_C*2ZIQXo)Mn1kSyzw#aU^c15?LpgUKC!iaI4Bv(GP-%1$UzUcta zn+y1}K6Ebuu-t6HLrzM0&Th3ql0neF6r^qal(O|qf?#P~Y31A_4m)wVqhT!k}2ZghEh>c0vL}+%rsB{ zSObCkf7(rW^VD(yJ)4hu>MdcC6awjRddL4b97a|Y3qk?6DXa{(T$@zW?{*^fLDTFW zCUz4w`R#Y};T48oDT_%w&}hH^ydO09hd$+H~{lsf6}-Hyt1(1;dKDksa^8 zW8VM%D4C#?_SPK3rxVL6X8NSbw|wwEY<TJot9AiHyrW|Mf zJ?3MC9@^~ayE_wl_0`jPUm!y?>3FPjQ-WuDS|(S>+eO(#99M&Zd8o((ed{sbwvE(Q z+eb{m=yG@)k3>8H*(3qR&5sUXjxjKIM=#Yj|0LDI-|B6TGI$Tc@At4mmwv_ddLeK| z-ps)15I@6rN4#Sn`K>~JI*z?DV-0xfw{dM$4MFvhc=Lc1;C1Aym=o)F$6UmPw|Pt?q&D zdfyL_5s9ti-&_DtGmu1_oBwQ{Xq{N=JU-vfo6qCmTpHN(5OnStT+p>%_)70g??mrm zh8+_cvs(6(&h2?V*lU(MxxfYr03$1{H|N@r?HsUQcs1JHn(*5bp2BI$q9(5MUDBZSx5HCboJjU~jo)6T1YAA*#*3$LD9d1`?*XhfYB-g)A_4FAsGZ(@qZN_(oB&O$(eH>=#}; zje56HE1Dw(Bjuda$5^q0k8@NVGlj}@z+4nu#G@hdu%kO90@CX$XYRBB9KHO-s?tQg zyTq<%YIl*kPUy6z!R6>>b^Lf+w;>^BNI)?P)Q#fwU!EHpgD(gooLgoEeqRo=;iL)K z@x}WIjMzj~RjRt|beA7{fF^y9T7y>S$yS+E>Wj=a<)^@u%CS8#wEt@`qN~A6V7j6t zICrsWynqvL%L3WlfCQu;#b{d-%>h8uhP7M4@7hLrdDE=cxy-@7XOwTaM~5gJL(oX7Pu>s;v9TPLFHeQja&$?$hN7AHL=BL#Vg%LnFjIpA+nTYf&Fw=N# zpe}rkA{ZkC7}7lO4WAhyY%qjr`KZa6b zITFwH-g2ffjqwul^rV8cEZ?Ur3n}07A*~miPg$WaK6MO!-vJXAxkV+CPR5_BS$7%cSeNPzg7F?IZYsB`M$x6xO?It zn&w2Bm7znKfQYXIp@gY#O9K-m`%NWtF%miMNBD3jnWNSjpk=|wG+YFRTY){x7uwu1 zL)x>q$a<AdCRls$s5TNxXKZia{`$H_08fIMwkk85aWs`ZK z{EhW6339x=TK?0r5f8SyTG3t5Y*+!FVi-G{_>`2Apb1=bc#6aY?p z?yG5|S&lf&qlf8E7&RVRe>^7gz^%3&5$Qx=Mo9b9APF$B!@-hkrc^Br-e5*d)PWZO zvFLsKE2GdtwBW5S&S%jqSmzDeZkB7D`FiqxV3KH{1EIsQ}iFq_q)OTS+t}-~J0l+~1 zhgE_y7bqpP05LvbeTVe4f0wu(xcvg<|1NRGqhup98UJy*8|iQg?*D0Oh~P6yU{qe@ zQop>7mHc4nUk8}{pZGE2N`>5X18R3tR^sfxhj>KY7ig*#c1N{vaiOQXZi{+;fud4! zDo<*^o=jW**ANddyIwrhc|XA@aR|6lLKb!;b&P}^+IxKn<1@s9(kg%|kW|1V`(G!r zJh&kbYFga56%u%0LW=qLpKdWMDn~eS7S52e(1I9{@xOcwOB&I?J1?e8FzC65iCB0d ze&=H-NFkB~-j{pC*w)16koujrOo zzh~$lHn1M-LYUmU)AM>y0f~zDcPs(2ZY{1yRI<;1!88Z13*`JyWMrBUHO3 zFBwy>VG~A4Lh`meWoWKHR|uVo0*C{Z-FF;0(U6&Ci;Mv%=FR6JdlDqoEQDiCC}{oO zn)b#6fvAdM^Jf$@3>M?bD;ink{gWcTwB+Z3N#XV_QzO)6lmp_k9DXWZs!oN1jp#Ll zOD*lGeDodz8*6SpFQPJ4a)^qZ9vvQT=2U&NvEyD)jJxIXVY)d`m*K0cvx)j?H5Q(M z@Y^ezi+~cR_H^+rtTci^_(-BE_Q;+_YbiqyVs;Jo0yld$B-!ZpeHMaEvdY$MwIl>B zqPUS+gHy{wi|TAUo>Hm3JNDtNC7uM|!o1R!TF9uQhEj6915v?5p?^r3TxT@{U$}Cr z&*Cwb%ZDkL%vv|CmUw>D*}YBaBtP4o-ZP3vlaKDFZK3iO*+}r=G-swnN6YbviI)f;6iD4@Hp$?_hM$x&~R?gcQt2AY}t!1V?2mi;SX$q zmwdqc4oOV-Gba-LEfzbJo`YUd6{a_7{6N-6o09hM5`((O`ALr|XACsRRsWVVu2MrP zy+j<2EAOcW%X4gYD1JT7$CZe5S=}{~{ES$F{llIB1!_Ll7dqaig5GEQ{2OOxMglN) zp3el?yvhDdsr)MG+$-Ua1w>aKY0?-3OHN`@jT zBc1hL`{{aFcDY8GBHp4qLg<$d2rOhK z#=8p->lfN-Sw<7NwMQW`a8zSV*VF2fI@PummNdJ%^#Z=ZWoiTLn6X57YA6_gaFc1UGqu$a}wau&>W-cH?MQA_tggl-<6&Yoz^X@SSr&!qB*vld_d(IeFB{i)Y z(^8_>(ZUZWzYe>euevHaLhH+qqnU1f`c9p7U9q45Rnd+hPb<@~GnA(EiN{ud4FRkm zA_wBl(mcvT5iwqZ_Y@YwD~=urW`y_0AN)3=L$8$y58*LXhN_1tPDNiS_-SU~9bTfE zq@O+~afIq(C-)xuJtmL1`{JPn^}fw~kRF5GYV&UCer)i z-)US0mgs&K{txcnGOX&YdmB|kN<~UQx*G&kK)R%REsz!|QDOlSk|G__B`FBf-HmjE zgoxClQ@Zoah1fbVb1c6q3M^6Zv=9J?z)0d$q%OXNBT)-Lron%Y`AK-tJyhJ5;@$XMUWjW0HZV8nT?4t!G&A9@-uM zO%SH)jmM-r;NtOEeN6%M4{u2%<8>rZmsAr|C%qEbe;UQ{#4Uvu!t7>)=SAAx?ayI- z(5Jc2t!bi=$XgcvDC=fGql`e-gba3qUpxd%5M~70x|A_?zG;ms^j(hMK&;$0|M$q3 z8(zhBgsVJw4JzHA@m3X-yFJ;KDq8lXMxofT3qCjaNHwV=>6&}V9?cD&%Pm*rQ*fns zcyaM{Grr+FSyK_%b0YeLnb2bKD1*3biM=3OtGL(vf!ZVrWjND2qG>@POcQ3mf*n`y zMceqC8orW-7_xoSVGV~~*)ns>p{kB>F1gGa<uU*xepKt zm>jbcNNrNvSq4E9Er?noXHbql>NexVKYELv@JddD);}4A&NlMq1&6atjdw7T=?@6s zpHT@{0ZVmIGXs<2keS*^~``&gJ+TgSz7f>Pv=a1&#iNQ5|~J z^C~pN5ylWvM?B<`PH9ANbyX(#^_PG+VUJfx2P^ktGl%=3uv1drp<7cDO%JC?9Sza< zIqC2tt|@d{V_Mf6z+~V2e(ND&zK}@&*Z88>=I1b%7;|2a?oo;q=WdR5lYX*Kpso=Z zry_swv9Z-F?tMQXF*H438W!fcR4Et?=RrFgVSBxMkl<=7rq`oq=K>vOf}l+ko=+9h z>|*b=hl|T8H%K301sZtPyU}>oeuC=Vx|?V*b@67oGVPO7gW1OGD)9?}+_u7HubKLL z=uc7l^bATg;9We49!CCihF>zPw_pxX3eaROajqB$J4_)g?>z=FwZX-#6FP|dx#bZY z9uQ-HmPu)|q6j&UIWU~T#u9%|^iL$Ydb(rT?`XL_?Eb`}{es_TgQX_N;X_)spK zL;6t>?+Jq8wbI;6^Ti_D+-IQWt|DndtZn{_T?E`jF3j++76bH9RYW`F*; z+dZsrsbsoJlcfjj1QnbhE^ zQer>nT|qH1k?=K3M#d$MzwYGhY(%Qarn^Bpfswom|NNT!x;sTrot z%}Bz$?#VBx+=MMHPI%T^U84INiWI^W_`O>AByK%x zW);hp$b#+9K=&<&_?0#(DH*Tz2J%Rab6Jc8u23{M22pDUK3nV8<}~cTd2{*!soQn8 z)x@0L_+Aad7dY%;f*>r~w>f?-GsNT{cRVVeQ002VHD@0Rt;LC#$~>Rf%>WU!3Sn!M za6V*HplpgZNqW6RqklMXrQ~y0Kr7qboWo{ykaN5jw#x0(ebhY~v#H-U@Lqf*C*Gzu zM!b$j{bHijQSD4;!?aX;_%<3l*;@#KGh`zr`*ks$S+azy;LC1C9by|)3<2C131&V4 zOxLxMG^)QqZeCPTf7|5sG|*+v**a&il*|&-{5n^mAPdi*bb9whH|CjY!|D;Q)V)2D zO9plwXTLG=msvHRSuXEm$+Zpp2A1H}n{i_Yy5;zmX5kui43oj^te?azrc=trlxUE) z&3@evePHbZlvybBI9vwyeFsw%nTpTv+3UXB%vq2+p5-fi)BmPN)9&eeyZuGO()BuA zEU6L6V%lxaXHDt})s9LS6WPL-t~q#-%X&Iw zq}Y7w=9{R(GrMgL5U&vYU^fqZAT#(;BTCP4@%*O3(u3BXHty}E72&8-8Ptu7-P4Zm z4{7>t3k3EsaplB})>KzM?>bbwZ*Yoo^T&O3)01S;*(3k3MYsW;Tvkr7!w6K?yXFAijPpRIh~+?MprqCy%izkF#PI|WH>-b;6%TiMlEp2$r* z(K?_QNI|kOQpBLpzYIm0*rx~q%nIp{nYAo?1EM`OdJ#_k9XFLt2czYnlCsROwI6wE(}z3TVmry@=-Cuf>^WJ9Sc!b`^Ux{?gd6Xy{5tU3^SV)Z{IdjcJyM}tnaE*d~vTx_G%HbT_HaSI#t8a@fBTDu6MMDut#wp z9hy&aLRCs3@Xxn1J%Y@_TkaM#yC)%;%3~rJ$B4TU$9Mz3&%0{0QY=%T)sQDyxs%>WQPF|Lt zBthoylInb9wxEvIWwD3K)dGR&ms5?xH<&SA+t{eea*nqG?LZZ6WPY~s1(VC zFuw02c>L+*RQ5~FN80`7TXFF8zMn_?b5y5f^-e@1^pNJfu!<&(1lBUyR{2L`n`{31 zbBliQoVdLG6oO#_qBhXh2!-r0>KMbdAShBr!>OB*QljqMO>T%eh6EibVgHgxRvhXIN};uM>9YLHM#fxd25mTIN#djqd(%XZhhWG$^q~0~~zA zicI6_A5lBm$qGlV6iE$R7&w(?$S*08QQ6B^TIq(L;sx;{sCrKU02_Nx{9)XPG~2Wt z>!^xk)aob)i}z(w~#HbdVx+?VC#V-P##Sl>zT{I7-InrC^E%vOPzI2E_D@gwE%&r0Pw zeUllhefau1z6B8Ko?*Y8R2e*@%aU_Zu4h;dUtrPqqxFyN)v-sn^>rs4q*&Tme5a`3 z8Dqc}pLd=e(~Ydzrpuj$qob3^X|XMOR)4@~bbR=uxBUhGvs-tAazAZk5}4IE{!GE; z^{?248;>9}wA0qvB)dd{IR$)dnjS+p_w0BPXf=qO??3dx4GVwyZOYPlL^lnQvxn3z zU)s3?*E&*+Po|ogE^Ss?vEfl71)n$Z1gH)3^^yn2fp0r+-L}gZk^J=hy)vhgWSRVl z*`?CREzIIGCY~DrOQN9Ph|Tnpi>6Kwkq_3?i=rLLS%$zt677lSs+cKMZDJcw1=2$K zTw%_HM(;_bXv>Agn=5q@@x=3O=vCHKO34DTBSz|JNDSeOJeKnL!kUvUl-(nCSfi3D zJ>C#h@Fbj754{6q;YP8*u$uZgL?#WGwO_Nq%v9;cVrEDn-Yg1TUN7`=?pKHW@M2E4 z&5p;KXIG_YxK_6Jf$KxYs-|2L?VfHXwNCi~39niF>LaXh^AEjKjSTHX-GvUn+>8xxoXH{rXN5>OA^%#nH zhR-WV+WaKtubfHEkWn*uy&^x^sZHz7J7ocF>#_uf=Xb|w9(0AU7dVYQa`>JbEuOwg z3#D^LQQUZaJ~vOXT0}{0rYcFIW*T%)dqdCS-1(J&(>8ivU*8MmQV(2O%?nnpN^}=w z7wh7F8JC9_ECO!FPX#|I8mVmrMUh+^WKgg=#9aj_z_4y+aU`=ta=t~)T>z(X;Okat zLoMe+ixejxqrQ3EFyYP2qt#)%v#L;1v?5YrS?Z zn#o%SFxFxtF}~Pg^(_;uP5y5!cf@D#E1%N5j=hG@>-%Aq$0ilzMTP&!gcKoCnTKM& z7+arF`wT?*m;F^ig$3}tf7vWCGpUCeDkdf4{X1;Iq+sp|#k+3&uTp?N6+%bjjmT2z zS$+r2Mwu{_lbUL3M#^h-=jSu?vts`v@*Y>I`<&qCPH1-uIXv4M-N)t`k~kjPlEx?+ zHhg_!qmkBewHgC(oKpv}OCaBcP0<=Eq7gk;lm+TJV;2sKG3*};=794@GDaYcKA2K( z33%zfRZyrwqupArQ^+m11&Gmjin}GH+DV%9c4S2LZ!SQhfI%*H{|P6RF^NKZ(^oq~ z($R0$Wg8`!3qt+DR^3Y&cD1j{6VT2sHQdn2> z&~~1`Vc?}&LdzOnE5vQVuA8U8M*+ilv9&KAV{2%b4(D!huDV9)*Zo-C*_T>{s(&M> ztdq)rz8dbi<+kAaIt%ZU{;7?09B=)P>7+SkDDNxuZo;Yh%x^DmFNS1(dfsV&dSUxu zxt8eF=Lf3o)tlcRnoqmqu&v=swtrb`s*4yY_4lViRsq%|{kJs%ZGO`G??oU;70-8t zK}->fOZ=v8#Hz%;d1#0%Zxz4wFp-dDCL9QeyAs}a-&c`exn!GtQ<-vD$tE4cjH5Mr z$~s)-SIIX18W+#W9hqYK+Jp6KB4mC@V^*L82m?vAJ=p^}tEMYD4%{$VwcJS=`X|*n zGAa%$o8GPS7_dw!#p5fy#D@sS)vTiDPq_qvFebae`TbN-LHFX5lo0NZ=Widb9todN zmYMD1jNU*L*gpLRaS?+D5Ct~iKb*RJ?DNxt%~skXz~Evbr}HCYMvpaNYcM`s(fcuU zC+qz7xh+}5-SzhMlrr%|xrS|bYVabqbr<00Y0P)0n-yeqzhh2Z7+#7p!^_#gMs&g<4tMqYC=7*X>M|qgLeqAzQieUtIV9s*UtS`@RJQpyks}}vJ+KD|6mgA1QznaIPe9=em}^H4g#7}oVIIgU5j84-E{#+rg>gk zpS(FtELA-l{ZBt#ZmvGP-q)wNEc6mjUH-*KFN=j}cTUR-J;zE^;cTgB=gA43LK7RB z%IdA-Ku#H11gIu?PK>ED9JCJlUQKzJH;9mtYOx;P7&yYIL0<+sKN00r&Wn*$Q4g~k z74#ghfxrdRjueRXiGK^~RB6z1+dp>>slC%bd5gp$`Id$Uzx`_TYE}v4G8b7BOZzpL zs*`w7ouP=**E~tUR?m_ub~*5h@9_g>oYl`atEf_CS3;DFmG9O#+GGqMkWM3%zYjA3 z@S(vn2KXM|(RJqZqf?=isf=-(u5?f~RBFGglI76bGQAJM$>nSY^I1IrYTAwfyo zG=Dz5ijIjXHnh zE%P&>OglBo3;6>~fwvpmM=3A_CcmZ_SkL!9b4BA(>aeH!g1#_k=S30+Jb6*POGugl3Iz_gC?++G$WMNqg#Rxur}&A3Jv0 zgK-b!8kPc0VCLsQ-2!1p3^&_6-8LA}^u=TDl8W;Fo#aKukPWu_w}FA&efq9%snp8n zW+Gx%%b;~`XSge>4C)01_xNmi$OU#l!z7kdDYK`}m}j|ucH*eq_a9CP?}p_2>bmQq*ROjp z?w{l5CjUT@!E5&|&=={bZ~nX~@dM(&CHd9-#grlOqh9lTJ={%-JLtj<*908Tkb0e1 z+dpge4$CbVM-+??U&=!_D_d_NHe>N0x#iSG1aIJ34w~huhuqVu1&V}*oonfVMy&vL zgrEG(I5M7pk{dffIe*mkC@y$R{1uZ2iLg5dyPk7qw8G|ud+XrB{>(YO#4F{1iE?g)=e%jb?KX9P|mlkcdH zxw4IizPW15^p6Q=zKnxRbUjE25dQqIwP(Q>KDQQ<-z&%D5uwMoV#}g0fQG=X*h=Da zWaIZnC#w(fx96%-L}TcvMg)cwW05}q61?e6%Rjulhy+rF`H+mj?vCitJ?~*_zaZnz zSW@pDBaxD%?ynWPd{Daa(k0Tx0=@uLnzhuWWrdCi!CR~9=O`Lh0#AVBSJ~KI&pym^ zTawJYgt~#m8&8fW2~uaKQw%N&THKH_H_QuSy&4K&p8DD4-!h3H0>7KxQ zr&jZ%w`y;_ByVaR!=P{t)taPon(I^ByH`R?hiURfUn)O4K)c~!A@s1h^l0gf>}G7` zE%FU^pl|vxfUqNoO3fj&-&j5##kJk4^;}A?BSDDR?R;AzHuGOw4els0(czd(G~q2LhYx^cuudno>P`M=_~|A#J$ z@-Zm%h+2Q-MexgeAioi#-;o+C5@E#k5>rKguOxCRir$oZd+g)K7TGP*5zHzbqsO-C zft~lydidoLe?0%sSd?F$@i`5QQ&2kas5AcFe1jK;K&YTv;aO*YWhSm?f7A`xRDYFHr6$TIG}uC)#2X7nZ8)I&ZmGf5cC1> z594hdXN2J-){bIP(Ah~TO{YWzDo*Qyz9Kc_22g2*OS0{;^kBaE}@?zS(; zHvn`6=x<0n6H>|)=DIxIfqHUKC(0jNAfj`Z z*Mm_m=Y2IBv^!hj)m>G&?1>&kUC!t4@t$CI72-Oj%*RT2J5jjCdP8BVk2%3ibN>=? z?TY+UJN$Je^S*2B+?{_}9$%n0QuapOcIdkeC6MQgLI$47=&FeMS2Qbi2ZUS|StR%7 zk745c8eH$$5VW%Y`kY54I}G@Q7T~iW91~ts`Z@fnRUf3@%4LFyA%7gb7N`fF0m%d7 z8mEo|b3yGG73{+W6L!SQsQs^fQh?7B!$|BC)p*!D=v}P@wcWF(V!C==5Y`#{=lwPd z9;!wqB(cgnokUT@@@b)Yl&q`Y?OTDn*XutUs~sVBqVdn2XiCX?kDDbcgY!hnE5Gl$yq~Y}P`y_^zRJN6alm%L z=)?c;IE5P?+Wb{TtIlfYR;HFSvt_>a6jJ6^&kLO?H;xn$>>F;~Ki^*mpp2dk^Us_3 zWO^Zr^pSOHS4q>~b9oVCJg)N75S${R(2oE0hhC$wuZwD8B?>qh^%eg3OvZ!e#B=4~ z82&un<|uuop7SD`tcW9^_V0Oj|1Xj<|9z(a&r?AE|NLu`aF=t}?bl~&j@8aDuS864 z!fe%uoa&rV83+ll=&cfPS)SPJ*`Im?vf4T~sIOB|B5BmG+^nqPH5{+K>y_#cP;xwJ zjAmd7Kr}YE@tTGP$_dW-cvKsmL`3;uNqN|&^lRWVp7uG^R5t}lphNZm6as&QgFHs0p zkwWgt6>sC0N~#(##0Sq0u=mj3UDF`cxayI7hkOAQ+iR^dAxtKHyNANvu)anfTNK=pf3(%wE@=;juS? z{BKBj*lXhW<8)y(;M+bF1Cf#|Tu%@tkNF85@udi<-S5bz^5h8b5=G8yrEeubeCTEM ze4ryL-p;|Ir^^R?EwCtr;wYB*Tdd1hEP^mm^mp-cTl_3lVQ&?Y zL<^FUms*w@S6aHB7J$vUktN)jm^mRW!gKxdt%$VAHlOE7hbnxpXud`nXizg=?XyRv zDB?GIK=(JzXxh(+Y=;!Y;vv5%G`Nl#7}D4}-t^q?nVA5#k|TDAZUm5a0?JXPIF4KJ z>o$u${vOC^sn8ttu(qEgIfPF_$lu$75xn9)H>pnDb~+hixlM1+Urwab!#6iW=;We5 zx}Be>Y@RuV%(aJnGU<)0bliSk+5eryYQ7_k*ZF|eq$k$kuu{9i5_(Lv3-r#%1w%)I z!{y$S@C0{CDV+DjavE-JHe5al%*aDNTLMFf(q##1FE37y)(RSK3SzI#U;g&(waUuMOyTa$Q?Ok4;^N&M!8PRRatjin%d=f+cfD)~6ACJ7 zR)fZ8g?Jw@d72WM4arpbbmIm#c@PQ)E>YLJFEWjK;7WIv87oTGf1CUxP!ML{7+^$L zr3`c`vB3EA5;^!{e{#Wvs$M0G3YFbwIfM+5QYLE*hdwLVOZmye*WVxREXdhWDJJk1 zP0qQU?~krN4ZO=15bH9v;i0$5NVr>S1~}4*{9n&AS5DXPE4Sy`4KFXwQ``!I9#gH& zx$VqjNDN49ctrF@ZT=W}1PDPd6JrJuP~^%9smAg2{yPVp9lt`TF{1ueFi+Ks?uqnx$Qj(p^f^%y705cYo)J76`|MX#lC)$!hT>y?$#-i z_E9c|{b}K|>l2fcU&}4D_seuB=Xa@9caAygkHnyAI=Z@H56o0=5_6%rpKYVD>sF@) zYs~sirioET$%H){Q+j^6H>9*0D-pcV#2CM@ChmKi3Os}3*%4;|J`++FOw+3T$iHzU z8;S+~sS)xUun+{kL&fq5WLUcIas)d%KBiLpEPrR^Zqhe`2hM#~-wO?vhcd7SGn7Jb zXr92qFkdPHfn%2jw{v`czIK&QPYmYT-mms6Dk`q_H!b#j;6B=Jr?B2#RA_bkmaEAK z1~|L8x_-^oAg4K6(!eNX+3x2N2!^oX@63dZPI;%cX13e zR4&~y93c&t7bJ%plWM~856p1cbt>P6)5(dYNjvgb{J>9_i)qVJ%NVxq;H8s|ROTBk zG!Ul?RMiZhz|p)_Gd63+CPsaanv9yqCaEdMW}(Y*Zy86c!tz#_d1p?w-P-J^zWc3* zEy?Z|S;5Wi?Na_WRW=I{)%y$W9Lt8M56;E(8G0}=4ce;v$xq46`R|L2EKF; zW68qwR}Q$@b({;%`h;q}UwlUjdQL?J&pfZ>J0P5x#~vgVOsdk&yYnWDQ&Uy;16Mk3 z$i?|73*VjV;epoQ>Bw-1!ye&4tB8zy2WG+ZMhVen=hCBzeI} zbIBVj+)Wg2xKk29!15!K`PenmJ;86nZR-o#(^|)(6Wy^Ihk`EQ&VE+S;%CbPDcLXS z8<2NuD5F?r*p?`%88|H`tGzoT7{)=+ztb)4pJ59 z?u4%TLtf0kV;(p4CoH=>xj_)9WQmXMj{ftl`F9r)blcp_Hs{ zc(K)to&AnpP?s7t9NVU+xN}sMEHXR5uVXk%Eow`1QH1up7JObnQeUd0XhCQD{SdrP@hs|2&JKDmIs&dvL1OJ}{U*su?O@LJf(W*xZ%7*D z=9=IhL{8*)P{*|zqs5j`7e3!p+h^-^@MnOUuJt|!W8~+{I`YhSLde4gz_HeJWou_` zPzw*ChBb-0`KAXj=FU&3W+>({_ce*MRXmKg!%oOM3!g?Eqt+IS%1+*=w`Dxlj#jof z*RfG+(O@2)kcL};0_qSi|GGyYpM2I2m(!mWye>zD)vz`Rc-jvtISEw@T(htSKS>`W z4Eg9EtnsYLvLll0Fja%Fbh6_F9UUW`s!*9SIQ)xeilX#|B>Bh%^($Z{8iZ_PMi{c$ zLWb?Zw+Q6gA~t<3f?@)zS)Dtp{FFOlZRDvlZN7#F20$W>uujX2ui@}&_Td$UDzN(% z_b^3$0=a6CX<#yXX1bFxF~32R*Gn_S;AzlV+KbCXc>T_sFkAd%JWbH9a*&{Jgv4-6 zv&2Tt07mO|(?c0%=-*I{aITT)>D4->(8@)xrC~D5dDz?@EM<>k3L|+1crocc8Pf6S z0fl#&?s(vRi|%?~iqugYpYX}tX3iV3PRnET;cImh%>*kKyIezfpsE?3Xt?ah{kz0U zuU5iklVLHKh4WsdQt7f$!<#W@^_`?0^mCoZT}5Nz%s9L&z7ccb3fXqygge;uV` zt0=p>!5jJ#KF+n&pDgT~@CmYElmPDRanf!rxcNd%N1^$Xy~fTW89Vjp@~RaY;746q z*}@RPI_20j~zb#v^2PL!)ZT-|s1VpUn*3al{3? zrW;ULNoauJr90v30!bg-FX0Mtg_4-*hw{wsHrvq(%+HD;_+z-)u)br>EInDKl1n%Vm0JF)1cPQKlgt!tNb^MkBtc_gtG<&PIoe!?-I_WrR5kSF60k z@kh14=yU15&hQ%2&DD{dk=ibL0$#owI8_~>ci;#0n;mS@PHQ<-O%S#4)9Jj%L|D8# zEioOeNt$`9xRmXTE&hIZy5&p@zsjdW2SI1RgYTXKJotm~VngAB#y&Yt0H=p7jY?laj9F+fg7#9=DS94>##O5L0i#?fwRCY0ycqjks#jVQKp2;9k!*&@+-_54N!`M2{hjfvnE&4qD+S zVkYQ3OP8f3z|5+ZK~)Ww$`&b3pd+Nrl9fr9l@Mj$8f>5yRE$nH;Zw{y0QZrrVQ~+G z!pgICNv_{q0GqGTBzS4qD$FY1w$oDSFXq;OtmEw=zN%q*2a8Yce1E`rU> z%+StyNthqbVdLqGUcwsI-KtHi_2|Q^PC89Dg)nMwTqur~<^}#tG-g&uNJ5EpMPWIZ zJ9A9Q#|9Oip*UHfo1mVv(NVos(mF&98`Njop}LH{a~ydb^VG(T z`X}}H;3k8n@;f?KQZ^F(Pr?ASf49tV1to zON~x_uQ(D=qv9d*X^)vkxN#sjgl0*EW>Ngg3r*}is!u_%DKnzF(GgL@&L;QV=4%AG z_?qLO2*;9v=HsZqTEAjQxkM0azekCN^1|+52|a--pWa&kI1NnIBT_bR!i#G6IjEBC zhzH9AYdGOZ7JJpOo_F$f9S89Ghjx+G?}T84!Dd)+*~LJonSW*H&PVAyzaOcRf%rUC z7*bB0lDTP@3QoPW_51YgW`P-`5es}UY6|LV>Wy$EYMmxs8*NLUFgk5w@kM1f{U*yW zjD-0D2vl-v0mw)&y)V>iJ1zMC??M@Ld} zhU@(sv>p|RTzO9kQLI)wxEe9Ri6HK9K2{Tw_TWb4Mtc*8NR(qc5gkf@cU!QGmuGDn zhqbMahDi9MuY3{%Y&+>H%>)U+C46a>wzZ~7netpZWk&_2ZuM}B` z!JGEZj$i_7Rrs~m8T6YlJIQAv*PKpIn>$;*y}%3(kH$vI$V?t$KpyyBQdm}Ac~b&O z43SOGU(Lx_@z_1sZ=16Y0sV$qSDKIaJBIK?uU}t2-l0Pc#z2f4njpND0g6n-fL}a- z7&vtG*NAf5|A0IE%J*yJw$?sYBJ%y~_4UjN-D{)oSAu$<(t-*tvbM|jHL~IC)cpW|Xg3s?%5Eunw5DrrN zQX_FVIzF#>As6F6Ql~^xSGrSHZ#nLuRMsGn0(BoJ1+Z#)R2qz z-@o^8oU0)OKOzMY)eZaB4h$D`9e0Tfsau+5hkTAU# zeja&~!xgbACUH%$aMGbKhsv$esQ=~S0PE`{0mPe9 zM~r7;RKF_cJVWh!FbtZK5M-yTdj8da0(uufq`)F5E0K5<>SP10p5G5Bo@=|6-`MNr zTf+hxx`)66f}&8^Z~4s7w+Nw*drYS%Xu?d%05k%_UZ_wU37I3lNF%vjTxYJ0&j}1` zzF+Q%i{8hO&-JgPHUo|pf*5igpkP;%mYhKi=W5c@@4r?Sgn4)@AJ3u!gQ55bfNC5>W+)i^ z0pKo+6KB9pQS|5-X0gA&x8&-w5)`fL@a(PeGU#m=cpgz~G6nZIKDe zJ9qB*h3{v0X{jnKuLSoC_Xgd5A3)6YI^Y;OL)Cn_9Y$~f*XZ_O+Qo6khk+Dpj57Qh z*tvD?m=mU`sK^fO_SYH<%`~}0qI44Z)`0C>q10wuYd6^Rg`IYAkr}L{W@?E6UrATM zZS{R}d~{0}+aZvHh0+q zx(qm-rP=Hb?G`9Z3_4>^LK#kYmWzoZPF(}dH!~Vj_uH*^CM<5QKsp%(f=J|m^#{_4 zfD+8LU(=Olsjq{K+HdnVD0WfaM;8?p&D5MRd{Cf^VwvB!%zvTe5=%z_ND>lM-yPQP z-OUyBnXcB5Ec<5rwOUcdMP(0}RtBE~B`gm!0Ub=&%qcQ(QY+g8gc|Ys(JD=u{WA2K zx3>vkfB**dAekyFKB1X0i>$BCk`iXTTarM+!F`6RX!sn!*OZOTz2b%dIQDpk z@bvUVGL+fmyesZGr@PehBwK7;>2jZMrwMr#MFr~aDUe7b%XgEsM$s)l(|m6(l}i5ULGoE4L)Adx(>YwsvTXq!Zh9wa3o1io;YV@RTsUezx@9ld0=iSpdMP5lPciC3Oa>$vgO<>0; z{&_nTZ0zHn2AC3JXB)`;nWaWP70pwkB*wIUN6L#PE{w&zc} zydy*7FnD3g{^4E}cJ&~;aK3}=`pJBTGDMfMv}Z>0Lh5GLpx zJ+Rf)A!ewwxqH9|10CmeTL+SP2MwPtl@?U)E8QrIrCMbmQeDD4E-nR;INS94KK8)ES$Nuv9D*>=NC#CQ(7@1O$#Az1rx<9bOwUJ{Q<83y&B7|(+3Yso@X_|&bejEz|f=Z zD&a~-gi!5u@EH2VtnNsNn z>m&@R#P?gdHr$9$-Rb9N*2mXyJW-N1mIn%XcNXPO6?YfEM2Nfw&LmZiHT*msO)<`8 zuIjwOK*P|{#|DOUQJ}|!l)oLTe>(}&Cqc+L^5&PWj|CX_8}>2~Jn=s-uzIYK|E#4b zOi}UG{v9t6CEPdIs!<+8Zm%7Xf4eC*@_&0-fVtlrD$jv~1~T`E=uQ3x4Mw3Mw#(1vpUnHY-W3-pTV$3Wh@Kem>Td zJaSyR!gIxy3I#Yl`}YtsH1<@}H7*3#%W}ds0CaCKZIgj6x}imtQJ|TlOZ)ykLdObm zzx*b;03y%mQA|3c1}p!nMmNQ(z$j?me4cEgYGqqkriqmR*}S1R75w~|J8Sgir0bE6 zjKPNa=1h*dZQ;x3;!vCji}i_y;hZ|HZ)})v3UX@IMlcjRjzyVYztqCTn62^6ZdA~9 zxf65YoHDc#mT}F=ab303^4nxyQiDq2v|7?UdbZHw^OD$c zZ(Z;yXNpJf?)U1=cfH%ppd)s_zAFT@wYLAT$l!G9Bk!S5kz%8%peVedAJhAuL%92f z^I^nci)`*rt1Y8PLdj}j_KPQNW+Ta$&%5;r@7EuWI_`I2v$^T|hX~7ydj#5>#GN9- zxhZf;@BgMg$fIuTwbsCjSKmh<>+xo@52h>TI>F7)CptSZ9*+062OqORC0VPrpL)ES zG^GO>M1GS_?ZGu&$$a_;UXWd*EPLq;Sp+Q|L4Bk%T>W&}lGhQ&N3aU%%n-6&PF{;G zeb(T_kOQf9vrxM`x3t;nH8o8M-9eE(irar0tWXk{b=c5FuV0aMNxUK87z_n1oO>P* z&6A!O&H2Z6@@jI^YY6&MdtyBqffo5Fj{5^A&tzTdAS`?-Qd!BHHRrN*i|)-T9Xw&u?Z=d1I%)4C-2m(v;Nh z4{!0rr66PX9J*#!VsqhuPCbu^MrwvKmL(`OeafO+*O$ zD_}c@e4dO+u^dr?ENlSEYY?DHS3lyo)qi9eTR#6$EC1)$>YJGJvIWu5g{7Sr_*Kq4 z#oOyR+|Dd8$=$k;@^cNt-n1t$YrD46RPEm0e8#)XbZru z8Xwvrt!xO^X^rJ`zHjA7Cg8Gz1o+lXb-sGp?L9W)o}?Kq+SS`$tKK!Xm&D-=`x4%> z6scytVlZ1fb>WJKNs1nLUn5p$i-syf1{8>UH*PV%1egd+_=HUJ6zGPSimn_^;`bs(i+FTmUh>OtJU%-4q|h+3>QQFv>*|XyBdEZy-tB3x#-Kzr$GK2tzO(h?;ke?= zL7ge+uM(0ayttOPdRL|YU5WWlH0m3F*KH)tExEu!PV)Y*!T{f+M@9rn0GayRXMH88 zl)Ds!Y~n>Z_}05s)R?tri~qj!v(ZKtJCknkYzVa;9iLK?w(XrU&+Dk0U!du6xE5Kq z6SI;+2{$a+KPQ^%-17tMWAi_$%jOsp2got+lIJOi(vsGv)88>13p@TWL287H;>$>@=FjQcC7YW^S+$Ro zklt`*I+WT33IRQ?y$@r%V8D-H zkF=*n3;O0iTyGDdeQWg2!5*;PGhrpu7S?(F<{{*_9K^c_t#_rh_NzVV&dZOUBdaT# z`>jj4zA@F(bH#TW1;ooxG zZT5+mMqlOa*u|eDXT@}1y6!yod7Yg$yLocTWn?x4yg$e|TX%u9O!9Q`A<`qDq7p44 z36IR&Kf1KZ^q%z5H67uXla!ztpMN@-p%`Sv@{_=^htt>DE;XrMDN`EFoh*{>r{vihBZpo zyw9)n^`|eKUpRwR=p%|kv=o~lEQ4dBHJ8AbGt0`3cJFn2+vL(Pu9aV-Ze<{7JoF*a z*kH~3_VUpayGu+|n+)vZDhN?~-#OOLd-%=U+!aNy=VZ>l)xGTK?+496q7fB_8-Qop zE2l$@IJEMA9$L`+6X?=Q3Q_Bfogkv@PN0@o*>BWDQB?eBc4(Zby^j}pD!`v4u-g_} z<(~3tcd*iFm-8{Uc7fA(fw`Jbr zHy;l7Un80-DC2I2w!me}~+FkwFFUA;D7+ylDt0W|E$Au0Cy zJmmohKuOs=B8OvG46DTLoK}wet+ri zqR1jbrK|bFAAIWnYaf;Ymmdp1amb$nG7)%sF>3wSeZaN+0B{X=$kQ`bzfHn-1;nSH zpCiO+YkTGUlS27Vrsl^%C()+u1J;=+H4w1Xd_yMTU(CVt38xpboRf z?bYp{k-+-=Ge*z$rO+yy`nQL+vM=oW{NiQw!hO@yk5%sd5_rG*-yw1F!*B9mt1Jyt ze{V6BYyOFOC+60ieR~(Q2O{kpdhG|cdx4Fai&^F2#_QhkclQ0~0j`|y5Ba3yy)9^~ zFm$_0j@rQ`=Yb^>Blhhoo=^Q&RRfpEx1WeBP(5#c=QwbpR}{2aWr52XO*I<0F=nN;SlZ4ot&$>P*QY_2n#Idf{jY$wtE7ocwgtB97N$Km zMsB$7Rw@u=6r6aw_63*At2Mu0FELVA3f~i zcGcqYrdR(#3*H;i&js%2W=d~VKfM~baVyx|;lyIkXFO|jrNa3{K%0|%)DV>pWOLG^ zO$Rt#BBOGz;xoq=Af%*G%fCmnT1e8@jguxK(`Zy*mfa+Azg9nL>BeT;%0F z#lXO-?CIhd0&0=McGmz0b8j!uynVH~F7@@zT|HGh^v#Pwdv+e8r=gB)CiU|Tw>P|& zDU;u~XjR^&@7Feeo&GAa;LaJ)u?TIJXkJv%9Cbo+Ck%d z@(;43%v$AvWg-vgGDzgMYXe`Sb>%m+zWIAw+wO}Pz&EbETKdi0*)tkAh#0bUZQ0YB z3FV85syBlY5cv3Y_Ze&Yadgem5>+xPEbpZ+!` z^(3|RdxSiN6Rq`6FIt{|>&XQBaH~@H%#%%#SD34I?wt#A+8J*2AW;Gyc5>s8+yY?v zF3kztI<}%r+;Dg8|CvI-gVS#+O*Zi^^=0u*@tx+fIo-=M(OB0y$sX9L{l=r*1&nT# zzQP8MIg=*~7p3{OcK^3+nIG@4<#>4!lig1ZTVSCsme+ZCUc#l_)67bhmUvF(02Wop zmhZfz8R zJF*nGy@VgVB#mWy4xBnF+`CHAch!+Szb|jOSq(hJ0;tj*UFB=J9ihU~PI*BSc6&eF zs1Ux+e$#J@q-x>jyUc~h%Yg^#0ylmyLfcg3QYQYY`MADQ%ex~tqj$)3UI={P13d2| z3$#1tvMYLUJU3LD*4*g>yrFlQ?@en{(5`Jv6Wt#ik_(AgINN?vU*_?%jrSn?XgksB z4*}^$+Kz)sANoWTNL<H{Et0VTPW-Ie{VGgAn - - - - - - - - - - - diff --git a/documentation/images/interrupt_handling/Makefile b/documentation/images/interrupt_handling/Makefile deleted file mode 100644 index 962cdee2f..000000000 --- a/documentation/images/interrupt_handling/Makefile +++ /dev/null @@ -1,20 +0,0 @@ - -.PHONY: all -all: - -MSC_SRCS = tee_invoke.msc irq.msc fiq.msc irq_fiq.msc - -PNGS += $(MSC_SRCS:.msc=.png) - -# Disable all builtin rules -.SUFFIXES: -.SUFFIXES: .png .msc - -all: $(PNGS) - -%.png : %.msc - mscgen -T png $< - -.PHONY: clean -clean: - rm -f $(PNGS) diff --git a/documentation/images/interrupt_handling/fiq.msc b/documentation/images/interrupt_handling/fiq.msc deleted file mode 100644 index 5d1a2842e..000000000 --- a/documentation/images/interrupt_handling/fiq.msc +++ /dev/null @@ -1,24 +0,0 @@ -msc { - hscale = "1.5", wordwraparcs = on; - - a [label="Normal world"], b [label="Secure Monitor"], - c [label="Trusted OS entry"], d [label="Trusted OS"]; - - - ||| ; - --- [ label = "Running in non-secure world (SCR_NS set)" ]; - ... ; - --- [ label = "IRQ and FIQ masked,\nFIQ received" ]; - b=>b [ label = "Save non-secure context" ]; - b=>b [ label = "Restore secure context" ]; - b>>c [ label = "eret: FIQ" ]; - --- [ label = "FIQ unmasked" ]; - d=>d [ label = "process received FIQ" ]; - --- [ label = "FIQ masked" ]; - c=>b [ label = "smc: return" ]; - b=>b [ label = "Save secure context" ]; - b=>b [ label = "Restore non-secure context" ]; - b>>a [ label = "eret: return to Normal world" ]; - --- [ label = "IRQ and FIQ unmasked" ]; - ... ; -} diff --git a/documentation/images/interrupt_handling/fiq.png b/documentation/images/interrupt_handling/fiq.png deleted file mode 100644 index 0037c1b1f0f40c2e251e035919cad4e101449cfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29515 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 O{c2#c<%YgP*#7{|>NVj2 diff --git a/documentation/images/interrupt_handling/irq.msc b/documentation/images/interrupt_handling/irq.msc deleted file mode 100644 index 62657ccfd..000000000 --- a/documentation/images/interrupt_handling/irq.msc +++ /dev/null @@ -1,30 +0,0 @@ -msc { - hscale = "1.5", wordwraparcs = on; - - a [label="Normal world"], b [label="Secure Monitor"], - c [label="Trusted OS entry"], d [label="Trusted OS"]; - - - --- [ label = "IRQ and FIQ unmasked" ]; - d=>d [ label = "process" ]; - --- [ label = "IRQ and FIQ masked,\nIRQ received" ]; - d=>d [ label = "suspend thread" ]; - d=>c [ label = "forward IRQ" ]; - c=>b [ label = "smc: forward IRQ" ]; - b=>b [ label = "Save secure context" ]; - b=>b [ label = "Restore non-secure context" ]; - --- [ label = "IRQ and FIQ unmasked" ]; - b>>a [ label = "eret: IRQ forwarded" ]; - --- [ label = "FIQ unmasked, IRQ received" ]; - a=>a [ label = "process IRQ" ]; - --- [ label = "IRQ and FIQ unmasked" ]; - a=>b [ label = "smc: return from IRQ" ]; - --- [ label = "IRQ and FIQ masked" ]; - b=>b [ label = "Save non-secure context" ]; - b=>b [ label = "Restore secure context" ]; - b>>c [ label = "eret: return from IRQ" ]; - c=>c [ label = "find thread" ]; - c>>d [ label = "resume execution"]; - --- [ label = "IRQ and FIQ unmasked" ]; - d=>d [ label = "process" ]; -} diff --git a/documentation/images/interrupt_handling/irq.png b/documentation/images/interrupt_handling/irq.png deleted file mode 100644 index 293b3039e83d12b67c51346167d56ef6f2643743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44934 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 Ck*oOt diff --git a/documentation/images/interrupt_handling/irq_fiq.msc b/documentation/images/interrupt_handling/irq_fiq.msc deleted file mode 100644 index 509836033..000000000 --- a/documentation/images/interrupt_handling/irq_fiq.msc +++ /dev/null @@ -1,43 +0,0 @@ -msc { - hscale = "1.5", wordwraparcs = on; - - a [label="Normal world"], b [label="Secure Monitor"], - c [label="Trusted OS entry"], d [label="Trusted OS"]; - - - --- [ label = "IRQ and FIQ unmasked" ]; - d=>d [ label = "process" ]; - --- [ label = "IRQ and FIQ masked,\nIRQ received" ]; - d=>d [ label = "suspend thread" ]; - d=>c [ label = "forward IRQ" ]; - c=>b [ label = "smc: forward IRQ" ]; - b=>b [ label = "Save secure context" ]; - b=>b [ label = "Restore non-secure context" ]; - --- [ label = "IRQ and FIQ unmasked" ]; - b>>a [ label = "eret: IRQ forwarded" ]; - --- [ label = "FIQ unmasked, IRQ received" ]; - a=>a [ label = "process IRQ" ]; - --- [ label = "IRQ and FIQ masked,\nFIQ received" ]; - b=>b [ label = "Save non-secure context" ]; - b=>b [ label = "Restore secure context" ]; - b>>c [ label = "eret: FIQ" ]; - --- [ label = "FIQ unmasked" ]; - d=>d [ label = "process received FIQ" ]; - --- [ label = "FIQ masked" ]; - c=>b [ label = "smc: return" ]; - b=>b [ label = "Save secure context" ]; - b=>b [ label = "Restore non-secure context" ]; - b>>a [ label = "eret: return to Normal world" ]; - --- [ label = "FIQ unmasked,\nIRQ still being processed" ]; - a=>a [ label = "process IRQ" ]; - a=>b [ label = "smc: return from IRQ" ]; - --- [ label = "IRQ and FIQ masked" ]; - b=>b [ label = "Save non-secure context" ]; - b=>b [ label = "Restore secure context" ]; - b>>c [ label = "eret: return from IRQ" ]; - c=>c [ label = "find thread" ]; - c>>d [ label = "resume execution"]; - --- [ label = "IRQ and FIQ unmasked" ]; - d=>d [ label = "process" ]; -} - diff --git a/documentation/images/interrupt_handling/irq_fiq.png b/documentation/images/interrupt_handling/irq_fiq.png deleted file mode 100644 index e1359ae6f65b9231cb1862ad704b08554df82b2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69372 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 diff --git a/documentation/images/interrupt_handling/tee_invoke.msc b/documentation/images/interrupt_handling/tee_invoke.msc deleted file mode 100644 index 6ea699d6d..000000000 --- a/documentation/images/interrupt_handling/tee_invoke.msc +++ /dev/null @@ -1,25 +0,0 @@ -msc { - hscale = "1.5", wordwraparcs = on; - - a [label="Normal world"], b [label="Secure Monitor"], - c [label="Trusted OS entry"], d [label="Trusted OS"]; - - - --- [ label = "IRQ and FIQ unmasked" ]; - a=>b [ label = "smc: TEE_FUNC_INVOKE" ]; - --- [ label = "IRQ and FIQ masked" ]; - b=>b [ label = "Save non-secure context" ]; - b=>b [ label = "Restore secure context" ]; - b>>c [ label = "eret: TEE_FUNC_INVOKE" ]; - c=>c [ label = "assign thread" ]; - c=>d [ label = "TEE_FUNC_INVOKE" ]; - --- [ label = "IRQ and FIQ unmasked" ]; - d=>d [ label = "process" ]; - --- [ label = "IRQ and FIQ masked" ]; - d>>c [ label = "SMC_CALL_RETURN" ]; - c=>b [ label = "smc: SMC_CALL_RETURN" ]; - b=>b [ label = "Save secure context" ]; - b=>b [ label = "Restore non-secure context" ]; - --- [ label = "IRQ and FIQ unmasked" ]; - b>>a [ label = "eret: return" ]; -} diff --git a/documentation/images/interrupt_handling/tee_invoke.png b/documentation/images/interrupt_handling/tee_invoke.png deleted file mode 100644 index bbc592b489f69c1c40fbbbe171f986b3e65e7fca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35023 zcmcG$2RzmN|2KZp5)C0TizG>snGt0t5+RY1j6%pBpqa>S< zmHmGnUDtPA-~au)@B9DwpU0!CbBW`e&*%Mqy`Jm!_Bnq}ZU-4X8G%69aYkNRl|b0& zK_F~cASJ<9GrKYu?}?(El}`>k&loO&_4Irp8_@ro0QhMR(owP+ry z_Hu6a<*(SUmD}^KpH*^Xq4Y%lpnJrjjaw++%ukO*xqj$a$`>kS6dYu+;_zj~n;{S$ z>zfR(Khd9hV@OSW#(uXetR%};+M}ZPRbk;d zW#t_5q@*Mr9UYS=@`}biubnQW8D~)zIZO-;P4{~56E~{oTZv_mFmhd87}U-)zv6y*9z7{c+FxrNu>3mJ1gy z*tBreX`MOa6ByW#6yxSRJJNdp{{5@f_op0R|NLoPE1NLS*VNKtXksEX+WaO~%KJxG zfmHp3$qr*fE35MfONt)z5Z2a^|Gxq!maq$n_FBfWtDl01)1;}y+Mn{i? z)^;2;`4F{@j4WGCj9>EI+W>~<=H?F1rMYoGUtj0NQk5x&?!`uv?R*+1ioSFdCZ&J= ztR)^J!NXI=ZEj}PXI+5H*23uiG^miAiPGgxc75lJN6>=@4^mQ6-n^0QR>G@I6wmj( z4>@x2`Q?Qkmx<#SzX~&c2-S0=V`5sF>$Gf6J9_kJXWk9%7Y0@2$6i}4{OoT|QqH`T zV_fCC=g_&Rr@MxK{OHNM5g8g9`tV`1*A9l~mkSIyqKUT=FB~8G<<_*)PVecyKnY4o zi=Njty;egTmA3m&b(qAQTw9*z=H`wRyfHF9e$YeAZTVM3yZTpZ2(QfTMLZ7302UPAXQlEo|4 zs58eTP?6nbW@vY@$jOsOAJ(Xz z;t>%MIdGuw(~GO$&+OySaX!!(S)o;|zw2G;a&4)!oE)Fs>S*ce=yZdG<;c6cG99J{ zo%ClLyaqS1Jj=|?EGdbu?bj`K4$+ZUQPb7c)z{ZITYsE7Rfg3S#?+RfeNk04PK|T8 zH7F?PY$*4R9XrN5a;nSAuTDlRTAC@8SEw>QmoHZYLfPvPO=@vi?TmTX;}qMn{! zM&4d5GZq$>ne4#8U7@uZX=(8ssfmeR)qRbjGfKPse>^EJUYY8v4pHb&xsc>2#>^s} zq0un)@r{4~;2@Qx!PTorI5}Uga+NsGa>g`drlyXJj66_CxXhhjT>K<185?6^aZyk} zz|PLDs=8WETKeNs&a|)VhEqqRwyW35k`~yHM|gXCE3(I*{cc?l8QGa@)*faWz-Fka z8K%h2Ku`a^zCJfUKgsemPw$I9{^My^qK9=)HMvALe!djn=;-M9{rh(gYTvoJxtW<6 ztj2KRs17|#;w^}Xi1=n*fD2H#p}oC*>(;FoWF^iQZg-`L4y(}G*wol~#l%ET!c$U3 z&C1FO8@lG+j%kx%w!HBd{WTmiDn33wSFT*45Af1?*EbdB*K1u6)iB5>7xMUV_L1x6 z=FdWl3JXbDI758nl9%Qun$=TUM;;zh#=H2qWNT}ib!e;BLzTtL_G_!IxO88?68BO_ zh>Xf3Y1WQhGuq<7;XAXlvog}sjKbC)ho5C`_<}k$EW2|+8Z|~%)+;mf7)xb!by8MV z(CYMoqenAdy$b74;-YD;`P$oC{=H{%GE0-IZAB?XfX>L|k66==q12s>CxRj(6hg;3 z^DWm_SH_4}QATESvDoqBv7%dzs;?VpRERY%iE7V_#ph1Hdq>LRQIaOF@<=Pgm@=fe zv}Zei|04l0F~#j-7SGf;nHU*|jHIw&y~N3t>#lTfn3|eOdHy_+!*}&wz^Wag&3OG< zP1PhTBv{+pirI}&Uy#?^VzO$glGf@$F_7VxS+eM>vu)bJU&AdYCnq;|_SaM&%1Lx| zv@Cl(eSqwKig$+DxJ${&$yhXYqirhGd-m?tR9BZ#Y4Il+9UbkPavYQNlsrvZ;JP%| z9LQYvq`bWR?p=~Qr-H)6�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 diff --git a/documentation/images/orange.svg b/documentation/images/orange.svg deleted file mode 100644 index b7edca5ea..000000000 --- a/documentation/images/orange.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/documentation/images/red.svg b/documentation/images/red.svg deleted file mode 100644 index cb19dd025..000000000 --- a/documentation/images/red.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/documentation/images/secure_storage/block_data_encryption.odg b/documentation/images/secure_storage/block_data_encryption.odg deleted file mode 100644 index 53a3b6f4e40c957664f9dc5585288b43cf5096b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14066 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 diff --git a/documentation/images/secure_storage/block_data_encryption.png b/documentation/images/secure_storage/block_data_encryption.png deleted file mode 100644 index b2ce8495614bdfcaa3a17af10cd6a872462f48fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38881 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 diff --git a/documentation/images/secure_storage/meta_data_encryption.png b/documentation/images/secure_storage/meta_data_encryption.png deleted file mode 100644 index 5a50d7355829058f7f05f223d5ea09d832a603c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40220 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 V?y%YMY2W|=002ovPDHLkV1j)4Qy>5U diff --git a/documentation/images/secure_storage/secure_storage_system_architecture.odg b/documentation/images/secure_storage/secure_storage_system_architecture.odg deleted file mode 100644 index 84621090a8449113f043ac0d959314215e7a27e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24051 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 "node_small_l1":f0 [ label = "Thread 0 ctx active" ]; - "node_ttb":f0 -> "node_small_l1":f1 [ label = "Thread 1 ctx active" ]; - "node_ttb":f0 -> "node_small_l1":fn [ label = "Thread n ctx active" ]; - "node_ttb":f0 -> "node_large_l1" [ label="No active ctx" ]; - "node_ttb":f1 -> "node_large_l1"; -} diff --git a/documentation/images/xlat_table.png b/documentation/images/xlat_table.png deleted file mode 100644 index b1198a2b7c23869753308efc01823b621c813a1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31825 zcmbrm2RxVmzc+pv6_U&n$p|4?(Xd03i0sN9B~lS(kIE(qNhKs?WRzWIMrg>Y5Lwxx zkVNk1_5Gf6?)4w{<8eREIltdYpM0+CeZAkW*K@tDP~GE4Hqmj=5d^X6sD_#zK~Uu5 z|BleC$4{z1ZwtqNt+zgQM2%P@|0lU3BZeS&h@)zU4BQ_~eep0gFkIU(``)hK>J!@u zQ-A3?(+{T4SY_f|`jwq)_Nac?A*Fixq?JsoG6jd37q?P)2Gt)8(p?jM zMNsYS@8_29Z4BMEuf}Tlk8j1dxXUvKM}5Ed_IQ{5dRTUZhmX=GLNeWEzL1N+|6|1U zpqkw#Vx0fDWrSpd>+OJID$9t9<(ph`LBqqgPQf*X97lcJAC6=YmfaocdUD z(SmjBR!2Gd^jD&yq7t^R8RMk>`5R+X(}?Mw5}UdZrf!D7ah^kr9e*k6e*KT%z`RSM zf!#(nlm*`^nOH}QZ@qhbkQzVJ+U1N(E0Fy<-k$NP(#I>UWg9+gqHuX(!jOK4Jo_dN zX@51o03Mpb$>F9LafOE)w~ATLeyzFW>RR{YM5>6W@!4N9U)c9wcu>k!Sy{QXJejwf zi;Bq#Kb&1$%w4=aMOWO-)U&-@K{o%r^dzdSo+E9kWZv+*2!2 z?rK9`)nB^Hmw#%;W&iy9=lf7blJB+a*QtoFYk$A5F)}mjS;_I$4!jB;7#g~M==%DB z=D6LRJv4g;a39(GjdDx^UcQviF|XkG_U#)ZHO13YMYZ^X4;5ZlAE%|A6A<(9@sU3N zDZg!Gg60|#szyoV7Zp8q<+QM{cp&e=j2nI8UF}Bw@73b&iE3PuLGvbh`usC*Ii5ZU zh-0Qs(Ht4+e5%PwNXWE-Nb$6^IALWAj^D}R;{lkVRS zxA0qKvuV6}_+zeF^uvcYnRcpIH#gHMDk^H|=p3=K;@u)<8p6OOOa9Q;*VlbF9Ue!mWaR5GvC>shp-f0fU?QaU z?Mug!>N`6ZbeHQSDW-ABU120{Yw$~-eYaiq>df}TYHEzcM1Pf1B!^7cqtw*#?jpxR zhfWbnWnNxhkyTNXe1D=f^+;4mh|uoc;ab|-=RW0Ii7dz~C>;G_{4CwYElaONu%~OE zcB9Uhh&z&tnwh(4BSOXo>%)f!1`ZK4M3Ljio9`0kGKw$Yt|*cPweQ{1%jD

FSF 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 diff --git a/documentation/interrupt_handling.md b/documentation/interrupt_handling.md deleted file mode 100644 index 8c1d6cf28..000000000 --- a/documentation/interrupt_handling.md +++ /dev/null @@ -1,279 +0,0 @@ -Exceptions, Interrupts and World Contexts -========================================= - -This document describes how optee_os handles switches of -world execution context based on SMC exceptions and interrupt notifications -Interrupt notifications are IRQ/FIQ exceptions which may also imply switching -of world execution context: normal world to secure world, or secure world to -normal world. - -## Content - -1. [Context Switches and Exceptions](#1-context-switches-and-exceptions) -2. [Normal World Invokes the optee_os Through a SMC](#2-normal-world-invokes-the-optee_os-through-a-smc) -3. [Deliver a Non-Secure Interrupt to the Normal World](#3-deliver-a-non-secure-interrupt-to-the-normal-world) -4. [Deliver a Secure Interrupt to the Secure World](#4-deliver-a-secure-interrupt-to-the-secure-world) -5. [Trusted Thread Scheduling](#5-trusted-thread-scheduling) - -# 1. Context Switches and Exceptions - -## 1.1. Usecases of world context switch - -This section lists all the cases where optee_os is involved in world context -switches. Optee_os executes in the secure world. World switch are done by the -cores secure monitor level/mode, referred below as the Monitor. - -When the normal world invokes the secure world, the normal world executes -a SMC instruction. The SMC exception is always trapped by the Monitor. If -the related service targets the trusted OS, the Monitor will switch to optee_os -world execution. When the secure world returns to the normal world, optee_os -executes a SMC that is caught by the Monitor which switches back to the normal -world. - -When a secure interrupt is signaled by the ARM GIC, it shall reach the -optee_os interrupt exception vector. If the secure world is executing, -optee_os will handle straight the interrupt from its exception vector. If the -normal world is executing when the secure interrupt raises, the Monitor -vector must handle the exception and invoke the optee_os to serve the -interrupt. - -When a non-secure interrupt is signaled by the ARM GIC, it shall reach the -normal world interrupt exception vector. If the normal world is -executing, it will handle straight the exception from its exception vector. If -the secure world is executing when the non-secure interrupt raises, -optee_os will temporarily return back to normal world via the Monitor to let -normal world serve the interrupt. - -## 1.2. Core Exception Vectors - -Monitor vector is VBAR_EL3 in AArch64 and MVBAR in ARMv7/AArch32. Monitor -can be reached while normal world or secure world is executing. The executing -secure state is known to the Monitor through the SCR_NS. - -Monitor can be reached from a SMC exception, an IRQ or FIQ exception -(so-called interrupts) and from asynchronous aborts. Obviously monitor -aborts (data, prefetch, undef) are local to the Monitor execution. - -The Monitor can be external to optee_os (case CFG_WITH_ARM_TRUSTED_FW=y). If -not, optee_os provides a local secure monitor `core/arch/arm/sm`. ARMv7 -platforms should use the optee_os secure monitor. ARMv8 platforms are likely -to rely on an [ARM Trusted Firmware](https://github.com/ARM-software/arm-trusted-firmware) - -When executing outside the Monitor, the system is executing either in the -normal world (SCR_NS=1) or in the secure world (SCR_NS=0). Each world owns -its own exception vector table (state vector): -* VBAR_EL2 or VBAR_EL1 non-secure or VBAR_EL1 secure for AArch64. -* HVBAR or VBAR non-secure or VBAR secure for ARMv7 and AArch32. - -All SMC exceptions are trapped in the Monitor vector. - -IRQ/FIQ exceptions can be trapped either in the Monitor vector or in the -state vector of the executing world. - -When the normal world is executing, the system is configured to route: -- secure interrupts to the Monitor that will forward to optee_os -- non-secure interrupts to the executing world exception vector. - -When the secure world is executing, the system is configured to route: -- secure and non-secure interrupts to the executing optee_os exception - vector. optee_os shall forward the non-secure interrupts to the normal - world. - -Optee_os non-secure interrupts are always trapped in the state vector -of the executing world. This is reflected by a static value of SCR_(IRQ|FIQ). - -## 1.3. Optee_os Native and Foreign Interrupts - -Two types of interrupt are defined in optee_os: -* Native interrupt - The interrupt handled by optee_os - (for example: secure interrupt) -* Foreign interrupt - The interrupt not handled by optee_os - (for example: non-secure interrupt which is handled by normal world) - -For ARM GICv2 mode, native interrupt is sent as FIQ and foreign interrupt is -sent as IRQ. - -For ARM GICv3 mode, foreign interrupt is sent as FIQ which could be handled -by either secure world (aarch32 Monitor mode or aarch64 EL3) or normal world. -ARM GICv3 mode can be enabled by setting `CFG_ARM_GICV3=y`. - -For clarity, this document mainly chooses the GICv2 convention and refers the -IRQ as optee_os foreign interrupts, and FIQ as optee_os native interrupts. - -Native interrupts must be securely routed to optee_os. Foreign interrupts, -when trapped during secure world execution might need to be efficiently routed -to the normal world. - -# 2. Normal World Invokes the optee_os Through a SMC - -## 2.1. Entering the Secure Monitor -The monitor manages all entry and exit of secure world. To enter secure -world from normal world the monitor saves the state of normal world -(general purpose registers and system registers which are not banked) and -restores the previous state of secure world. Then a return from exception -is performed and the restored secure state is resumed. Exit from secure -world to normal world is the reverse. - -Some general purpose registers are not saved and restored on entry and -exit, those are used to pass parameters between secure and normal world -(see ARM_DEN0028A_SMC_Calling_Convention for details). - -## 2.2. Entry and exit of Trusted OS -On entry and exit of Trusted OS each CPU is uses a separate entry stack and -runs with IRQ and FIQ blocked. - -SMCs are categorised in two flavor: fast and standard. - -For fast SMCs, optee_os will execute on the entry stack with IRQ/FIQ blocked -until the execution returns to normal world. - -For standard SMCs, optee_os will at some point execute the requested service -with interrupts unblocked. In order to handle interrupts, mainly forwarding of -foreign interrupts, optee_os assigns a trusted thread (core/arch/arm/thread.c) -to the SMC request. The trusted thread stores the execution context of the -requested service. This context can be suspended and resumed as the requested -service -executes and is interrupted. The trusted thread is released only once the -service execution returns with a completion status. - -For standard SMCs, optee_os allocates or resumes a trusted thread then unblock -the IRQ/FIQ lines. When the optee_os needs to invoke the normal world from -a foreign interrupt or a remote service call, optee_os blocks IRQ/FIQ and -suspends the trusted thread. When suspeding, optee_os gets back to the entry -stack. - -Both fast and standard SMC end on the entry stack with IRQ/FIQ blocked and -optee_os invokes the Monitor through a SMC to return to the normal world. - -![SMC entry of secure world](images/interrupt_handling/tee_invoke.png "SMC entry of secure world") - - -# 3. Deliver a Non-Secure Interrupt to the Normal World - -This section uses the ARM GICv1/v2 conventions: IRQ signals non-secure interrupts -while FIQ signals secure interrupts. On a GICv3 configuration, one should -exchange IRQ and FIQ in this section. - -## 3.1. Forward a Foreign Interrupt from Secure World to Normal World - -When an IRQ is received in secure world as an IRQ exception then secure world: - -1. Saves trusted thread context (entire state of all processor modes for ARMv7) -2. Blocks (masks) all interrupts (IRQ and FIQ) -3. Switches to entry stack -4. Issues an SMC with a value to indicates to normal world that an IRQ has - been delivered and last SMC call should be continued - -The monitor restores normal world context with a return code indicating -that an IRQ is about to be delivered. Normal world issues a new SMC -indicating that it should continue last SMC. - -The monitor restores secure world context which locates the previously -saved context and checks that it is a return from IRQ that is requested -before restoring the context and lets the secure world IRQ handler return -from exception where the execution would be resumed. - -Note that the monitor itself does not know/care that it has just forwarded -an IRQ to normal world. The bookkeeping is done in the trusted thread handling in -Trusted OS. Normal world is responsible to decide when the secure world -thread should resume execution. See some details in section -[Trusted Thread Scheduling](#5-trusted-thread-scheduling). - -![IRQ received in secure world and forwarded to normal world](images/interrupt_handling/irq.png "IRQ received in secure world and forwarded to normal world") - -## 3.2. Deliver a non-secure interrupt to normal world when SCR_NS is set -Since SCR_IRQ is cleared, an IRQ will be delivered using the state vector (VBAR) -in the normal world. The IRQ is received as any other exception by normal world, -the monitor and the Trusted OS are not involved at all. - -# 4. Deliver a Secure Interrupt to the Secure World - -This section uses the ARM GICv1/v2 conventions: FIQ signals secure interrupts -while IRQ signals non-secure interrupts. On a GICv3 configuration, one should -exchange IRQ and FIQ in this section. - -A FIQ can be received during two different states, either in normal -world (SCR_NS is set) or in secure world (SCR_NS is cleared). When the -secure monitor is active (ARMv8 EL3 or ARMv7 Monitor mode) FIQ is masked. -FIQ reception in the two different states is described below. - -## 4.1. Deliver FIQ to secure world when SCR_NS is set - -When the monitor gets an FIQ exception it: - -1. Saves normal world context and restores secure world context from last - secure world exit (which will have IRQ and FIQ blocked) -2. Clears SCR_FIQ when clearing SCR_NS -3. Sets “FIQ” as parameter to secure world entry -4. Does a return from exception into secure context -5. Secure world unmasks FIQs because of the “FIQ” parameter -6. FIQ is received as in exception using the state vector -7. The state vector handle returns from exception in secure world -8. Secure world issues an SMC to return to normal world -9. Monitor saves secure world context and restores normal world context -10. Does a return from exception into restored context - -![FIQ received when SCR_NS is set](images/interrupt_handling/fiq.png "FIQ received when SCR_NS is set") - -![FIQ received while processing an IRQ forwarded from secure world](images/interrupt_handling/irq_fiq.png "FIQ received while processing an IRQ forwarded from secure world") - -## 4.2. Deliver FIQ to secure world when SCR_NS is cleared - -Since SCR_FIQ is cleared when SCR_NS is cleared a FIQ will be delivered -using the state vector (VBAR) in secure world. The FIQ is received as any -other exception by Trusted OS, the monitor is not involved at all. - -# 5. Trusted Thread Scheduling - -## 5.1. Trusted Thread for Standard Services - -OP-TEE standard services are carried through standard SMC. Execution of these -services can be interrupted by foreign interrupts. To suspend and restore the -service execution, optee_os assigns a trusted thread at standard SMCs entry. - -The trusted thread -terminates when optee_os returns to the normal world with a service completion -status. - -A trusted thread execution can be interrupted by a native interrupt. In this case -the native interrupt is handled by the interrupt exception handlers and once -served, optee_os returns to the execution trusted thread. - -A trusted thread execution can be interrupted by a foreign interrupt. In this -case, optee_os suspends the trusted thread and invokes the normal world through the -Monitor (optee_os so-called RPC services). The trusted threads will resume -only once normal world invokes the optee_os with the RPC service status. - -A trusted thread execution can lead optee_os to invoke a service in normal -world: access a file, get the REE current time, etc. The trusted thread is -suspended/resumed during remote service execution. - -## 5.2. Scheduling Considerations - -When a trusted thread is interrupted by a foreign interrupt and when optee_os -invokes a normal world service, the normal world gets the opportunity to -reschedule the running applications. The trusted thread will resume only -once the client application is scheduled back. Thus, a trusted thread execution -follows the scheduling of the normal world caller context. - -Optee_os does not implement any thread scheduling. Each trusted thread is expected -to track a service that is invoked from the normal world and should return to -it with an execution status. - -The OP-TEE Linux driver (as implemented in drivers/tee/optee since Linux kernel -4.12) is designed so that the Linux thread invoking OP-TEE gets -assigned a trusted thread on TEE side. The execution of the trusted thread is -tied to the execution of the caller Linux thread which is under the -Linux kernel scheduling decision. This means trusted threads are scheduled by the -Linux kernel. - -## 5.3. Trusted Thread Constraints -optee_os handles a static number of trusted threads, `CFG_NUM_THREAD`. - -Trusted threads are only expensive on memory constrained system, mainly regarding -the execution stack size. - -On SMP systems, optee_os can execute several trusted threads in parallel if the -normal world supports scheduling of processes. Even on UP systems, supporting -several trusted threads in optee_os helps normal world scheduler to be -efficient. diff --git a/documentation/optee_design.md b/documentation/optee_design.md deleted file mode 100644 index 02f0e92fd..000000000 --- a/documentation/optee_design.md +++ /dev/null @@ -1,890 +0,0 @@ -OP-TEE design -======================== - -# Contents - -1. [Introduction](#1-introduction) -2. [Platform Initialization](#2-platform-initialization) -3. [Secure Monitor Calls - SMC](#3-secure-monitor-calls---smc) -4. [Thread handling](#4-thread-handling) -5. [MMU](#5-mmu) -6. [Stacks](#6-stacks) -7. [Shared Memory](#7-shared-memory) -8. [Pager](#8-pager) -9. [Memory Objects](#9-memory-objects) -10. [Cryptographic abstraction layer](#10-cryptographic-abstraction-layer) -11. [libutee](#11-libutee) -12. [Trusted Applications](#12-trusted-applications) -13. [Device Tree support](#13-device-tree-support) - -# 1. Introduction -OP-TEE is a so called Trusted Execution Environment, in short a TEE, for ARM -based chips supporting TrustZone technology. OP-TEE consists of three -components. - -+ [OP-TEE Client], which is the client API running in normal world user space. -+ [OP-TEE Linux Kernel driver], which is the driver that handles the - communication between normal world user space and secure world. -+ [OP-TEE Trusted OS], which is the Trusted OS running in secure world. - -OP-TEE was designed with scalability and portability in mind and as of now it -has been ported to quite a few different platforms, both ARMv7-A and ARMv8-A -from different vendors. For a full list, please see [Platforms Supported]. - -OP-TEE OS is made of 2 main components: the OP-TEE core and a collection of -libraries designed for being used by Trusted Applications. While OP-TEE core -executes in the ARM CPU privileged level (also referred to as 'kernel land'), -the Trusted Applications execute in the non-privileged level (also referred to as -the 'userland'). The static libraries provided by the OP-TEE OS enable Trusted -Applications to call secure services executing at a more privileged level. - -# 2. Platform initialization -TBD - -# 3. Secure Monitor Calls - SMC -## 3.1 SMC handling -TBD - -## 3.2 SMC Interface -The OP-TEE SMC interface is defined in two levels using [optee_smc.h] and -[optee_msg.h]. The former file defines SMC identifiers and what is passed in the -registers for each SMC. The latter file defines the OP-TEE Message protocol -which is not restricted to only SMC even if that currently is the only option -available. - -## 3.3 Communication using SMC Interface -The main structure used for the SMC communication is defined in [struct -optee_msg_arg]. If we are looking into the source code, we could see that -communication mainly is achieved using `optee_msg_arg` and `thread_smc_args`, -where `optee_msg_arg` could be seen as the main structure. What will happen is -that the [OP-TEE Linux Kernel driver] will get the parameters either from -[OP-TEE Client] or directly from an internal service in the Linux kernel. The -TEE driver will populate the struct `optee_msg_arg` with the parameters plus -some additional bookkeeping information. Parameters for the SMC are passed in -registers 1 to 7, register 0 holds the SMC id which among other things tells -whether it is a standard or a fast call. - -# 4. Thread handling -The OP-TEE core uses a couple of threads to be able to support running jobs in -parallel (not fully enabled!). There are handlers for different purposes. In -[thread.c] you will find a function called `thread_init_primary` which assigns -`init_handlers` (functions) that should be called when OP-TEE core receives -standard or fast calls, FIQ and PSCI calls. There are default handlers for these -services, but the platform can decide if they want to implement their own -platform specific handlers instead. - -## Synchronization -OP-TEE has three primitives for synchronization of threads and CPUs: -spin-lock, mutex, and condvar. - -### Spin-lock -A spin-lock is represented as an `unsigned int`. This is the most primitive -lock. Interrupts should be disabled before attempting to take a spin-lock -and should remain disabled until the lock is released. A spin-lock is -initialized with `SPINLOCK_UNLOCK`. - -| Function | Purpose | -|----------|---------| -| `cpu_spin_lock()` | Locks a spin-lock | -| `cpu_spin_trylock()` | Locks a spin-lock if unlocked and returns `0` else the spin-lock is unchanged and the function returns `!0`| -| `cpu_spin_unlock()` | Unlocks a spin-lock | - -### Mutex -A mutex is represented by `struct mutex`. A mutex can be locked and -unlocked with interrupts enabled or disabled, but only from a normal -thread. A mutex cannot be used in an interrupt handler, abort handler or -before a thread has been selected for the CPU. A mutex is initialized with -either `MUTEX_INITIALIZER` or `mutex_init()`. - -| Function | Purpose | -|----------|---------| -|`mutex_lock()` | Locks a mutex. If the mutex is unlocked this is a fast operation, else the function issues an RPC to wait in normal world. | -| `mutex_unlock()` | Unlocks a mutex. If there is no waiters this is a fast operation, else the function issues an RPC to wake up a waiter in normal world. | -| `mutex_trylock()` | Locks a mutex if unlocked and returns `true` else the mutex is unchanged and the function returns `false`. | -| `mutex_destroy()` | Asserts that the mutex is unlocked and there is no waiters, after this the memory used by the mutex can be freed. | - -When a mutex is locked it is owned by the thread calling `mutex_lock()` or -`mutex_trylock()`, the mutex may only be unlocked by the thread owning the -mutex. A thread should not exit to TA user space when holding a mutex. - -### Condvar -A condvar is represented by `struct condvar`. A condvar is similar to a -pthread_condvar_t in the pthreads standard, only less advanced. Condition -variables are used to wait for some condition to be fulfilled and are -always used together a mutex. Once a condition variable has been used -together with a certain mutex, it must only be used with that mutex until -destroyed. A condvar is initialized with `CONDVAR_INITIALIZER` or -`condvar_init()`. - -| Function | Purpose | -|----------|---------| -| `condvar_wait()` | Atomically unlocks the supplied mutex and waits in normal world via an RPC for the condition variable to be signaled, when the function returns the mutex is locked again. | -| `condvar_signal()` | Wakes up one waiter of the condition variable (waiting in `condvar_wait()`) | -| `condvar_broadcast()` | Wake up all waiters of the condition variable. | - -The caller of `condvar_signal()` or `condvar_broadcast()` should hold the -mutex associated with the condition variable to guarantee that a waiter -does not miss the signal. - -# 5. MMU -## Translation tables -OP-TEE uses several L1 translation tables, one large spanning 4 GiB and two -or more small tables spanning 32 MiB. The large translation table handles -kernel mode mapping and matches all addresses not covered by the small -translation tables. The small translation tables are assigned per thread -and covers the mapping of the virtual memory space for one TA context. - -Memory space between small and large translation table is configured by -TTBRC. TTBR1 always points to the large translation table. TTBR0 points to -the a small translation table when user mapping is active and to the large -translation table when no user mapping is currently active. - -The translation tables has certain alignment constraints, the alignment (of -the physical address) has to be the same as the size of the translation -table. The translation tables are statically allocated to avoid fragmentation of -memory due to the alignment constraints. - -Each thread has one small L1 translation table of its own. Each TA context -has a compact representation of its L1 translation table. The compact -representation is used to initialize the thread specific L1 translation -table when the TA context is activated. - -![Select xlation table](images/xlat_table.png "Select xlation table") - -## Translation tables and switching to user mode -This section only applies with `CFG_WITH_LPAE=n` and -`CFG_CORE_UNMAP_CORE_AT_EL0=y`. - -When switching to user mode only a minimal kernel mode mapping is kept. -This is achieved by selecting a zeroed out big L1 translation in TTBR1 when -transitioning to user mode. When returning back to kernel mode the original -L1 translation table is restored in TTBR1. - -## Translation tables and switching to normal world -When switching to normal world either via a foreign interrupt or RPC there -is a chance that secure world will resume execution on a different CPU. -This means that the new CPU need to be configured with the context of the -currently active TA. This is solved by always setting the TA context in -the CPU when resuming execution. Here is room for improvements since it is -more likely than not that it is the same CPU that resumes execution in -secure world. - -# 6. Stacks -Different stacks are used during different stages. The stacks are: -- Secure monitor stack (128 bytes), bound to the CPU. Only available if - OP-TEE is compiled with a secure monitor always the case if the target is - ARMv7-A but never for ARMv8-A. -- Temp stack (small ~1KB), bound to the CPU. Used when transitioning from - one state to another. Interrupts are always disabled when using this - stack, aborts are fatal when using the temp stack. -- Abort stack (medium ~2KB), bound to the CPU. Used when trapping a data - or pre-fetch abort. Aborts from user space are never fatal the TA is only - killed. Aborts from kernel mode are used by the pager to do the demand - paging, if pager is disabled all kernel mode aborts are fatal. -- Thread stack (large ~8KB), not bound to the CPU instead used by the current - thread/task. Interrupts are usually enabled when using this stack. - -*Notes for ARMv7/AArch32:* - -| Stack | Comment | -|--------|---------| -| Temp | Assigned to `SP_SVC` during entry/exit, always assigned to `SP_IRQ` and `SP_FIQ` | -| Abort | Always assigned to `SP_ABT` | -| Thread | Assigned to `SP_SVC` while a thread is active | - -*Notes for AArch64:* -There are only two stack pointers, `SP_EL1` and `SP_EL0`, available for OP-TEE -in AArch64. When an exception is received stack pointer is always `SP_EL1` which -is used temporarily while assigning an appropriate stack pointer for `SP_EL0`. -**`SP_EL1` is always assigned the value of `thread_core_local[cpu_id]`.** This -structure has some spare space for temporary storage of registers and also keeps -the relevant stack pointers. In general when we talk about assigning a stack -pointer to the CPU below we mean `SP_EL0`. - -## Boot -During early boot the CPU is configured with the temp stack which is used until -OP-TEE exits to normal world the first time. - -*Notes for AArch64:* -`SPSEL` is always `0` on entry/exit to have `SP_EL0` acting as stack pointer. - -## Normal entry -Each time OP-TEE is entered from normal world the temp stack is used as the -initial stack. For fast calls this is the only stack used. For normal calls an -empty thread slot is selected and the CPU switches to that stack. - -## Normal exit -Normal exit occurs when a thread has finished its task and the thread is freed. -When the main thread function, tee_entry_std(), returns interrupts are disabled -and the CPU switches to the temp stack instead. The thread is freed and OP-TEE -exits to normal world. - -## RPC exit -RPC exit occurs when OP-TEE need some service from normal world. RPC can -currently only be performed with a thread is in running state. RPC is initiated -with a call to thread_rpc() which saves the state in a way that when the thread -is restored it will continue at the next instruction as if this function did a -normal return. CPU switches to use the temp stack before returning to normal -world. - -## Foreign interrupt exit -Foreign interrupt exit occurs when OP-TEE receives a foreign interrupt. For ARM -GICv2 mode, foreign interrupt is sent as IRQ which is always handled in normal -world. Foreign interrupt exit is similar to RPC exit but it is -`thread_irq_handler()` and `elx_irq()` (respectively for ARMv7-A/Aarch32 and -for Aarch64) that saves the thread state instead. The thread is resumed in the -same way though. -For ARM GICv3 mode, foreign interrupt is sent as FIQ which could be handled by -either secure world (EL3 in AArch64) or normal world. This mode is not supported -yet. - -*Notes for ARMv7/AArch32:* -SP_IRQ is initialized to temp stack instead of a separate stack. Prior to -exiting to normal world CPU state is changed to SVC and temp stack is selected. - -*Notes for AArch64:* -`SP_EL0` is assigned temp stack and is selected during IRQ processing. The -original `SP_EL0` is saved in the thread context to be restored when resuming. - -## Resume entry -OP-TEE is entered using the temp stack in the same way as for normal entry. The -thread to resume is looked up and the state is restored to resume execution. The -procedure to resume from an RPC exit or an foreign interrupt exit is exactly -the same. - -## Syscall -Syscalls are executed using the thread stack. - -*Notes for ARMv7/AArch32*: -Nothing special `SP_SVC` is already set with thread stack. - -*Notes for syscall AArch64*: - -Early in the exception processing the original `SP_EL0` is saved in `struct -thread_svc_regs` in case the TA is executed in AArch64. - -Current thread stack is assigned to `SP_EL0` which is then selected. - -When returning `SP_EL0` is assigned what is in `struct thread_svc_regs`. This -allows `tee_svc_sys_return_helper()` having the syscall exception handler return -directly to `thread_unwind_user_mode()`. - -# 7. Shared Memory -Shared Memory is a block of memory that is shared between the non-secure and the -secure world. It is used to transfer data between both worlds. - -## Shared Memory Allocation -The shared memory is allocated by the Linux driver from a pool `struct -shm_pool`, the pool contains: -* The physical address of the start of the pool -* The size of the pool -* Whether or not the memory is cached -* List of chunk of memory allocated. - -Note that: -- The shared memory pool is physically contiguous. -- The shared memory area is not secure as it is used by both non-secure and - secure world. - -### Shared Memory Configuration -It is the Linux kernel driver for OP-TEE that is responsible for initializing -the shared memory pool, given information provided by the OP-TEE core. The Linux -driver issues a SMC call `OPTEE_SMC_GET_SHM_CONFIG` to retrieve the information -* Physical address of the start of the pool -* Size of the pool -* Whether or not the memory is cached - -The shared memory pool configuration is platform specific. The memory mapping, -including the area `MEM_AREA_NSEC_SHM` (shared memory with non-secure world), is -retrieved by calling the platform-specific function `bootcfg_get_memory()`. -Please refer to this function and the area type `MEM_AREA_NSEC_SHM` to see the -configuration for the platform of interest. The Linux driver will then -initialize the shared memory pool accordingly. - -### Shared Memory Chunk Allocation -It is the Linux kernel driver for OP-TEE that is responsible for allocating -chunks of shared memory. OP-TEE linux kernel driver relies on linux kernel -generic allocation support (`CONFIG_GENERIC_ALLOCATION`) to allocation/release -of shared memory physical chunks. OP-TEE linux kernel driver relies on linux -kernel dma-buf support (`CONFIG_DMA_SHARED_BUFFER`) to track shared memory -buffers references. - -## Shared Memory Usage - -### From the Client Application -The client application can ask for shared memory allocation using the -GlobalPlatform Client API function `TEEC_AllocateSharedMemory()`. The client -application can also provide shared memory through the GlobalPlatform Client API -function `TEEC_RegisterSharedMemory()`. In such a case, the provided memory must -be physically contiguous so that the OP-TEE core, that does not handle -scatter-gather memory, is able to use the provided range of memory addresses. -Note that the reference count of a shared memory chunk is incremented when -shared memory is registered, and initialized to 1 on allocation. - -### From the Linux Driver -Occasionally the Linux kernel driver needs to allocate shared memory for the -communication with secure world, for example when using buffers of type -TEEC_TempMemoryReference. - -### From the OP-TEE core -In case the OP-TEE core needs information from the TEE supplicant (dynamic TA -loading, REE time request,...), shared memory must be allocated. Allocation -depends on the use case. The OP-TEE core asks for the following shared memory -allocation: -- `optee_msg_arg` structure, used to pass the arguments to the non-secure world, - where the allocation will be done by sending a `OPTEE_SMC_RPC_FUNC_ALLOC` - message. -- In some cases, a payload might be needed for storing the result from TEE - supplicant, for example when loading a Trusted Application. This type of - allocation will be done by sending the message - `OPTEE_MSG_RPC_CMD_SHM_ALLOC(OPTEE_MSG_RPC_SHM_TYPE_APPL,...)`, which then - will return: - - the physical address of the shared memory - - a handle to the memory, that later on will be used later on when freeing - this memory. - -### From the TEE Supplicant -The TEE supplicant is also working with shared memory, used to exchange data -between normal and secure worlds. The TEE supplicant receives a memory address -from the OP-TEE core, used to store the data. This is for example the case when a -Trusted Application is loaded. In this case, the TEE supplicant must register -the provided shared memory in the same way a client application would do, -involving the Linux driver. - -# 8. Pager -OP-TEE currently requires ~256 KiB RAM for OP-TEE kernel memory. This is not a -problem if OP-TEE uses TrustZone protected DDR, but for security reasons OP-TEE -may need to use TrustZone protected SRAM instead. The amount of available SRAM -varies between platforms, from just a few KiB up to over 512 KiB. Platforms with -just a few KiB of SRAM cannot be expected to be able to run a complete TEE -solution in SRAM. But those with 128 to 256 KiB of SRAM can be expected to have -a capable TEE solution in SRAM. The pager provides a solution to this by demand -paging parts of OP-TEE using virtual memory. - -## Secure memory -TrustZone protected SRAM is generally considered more secure than TrustZone -protected DRAM as there is usually more attack vectors on DRAM. The attack -vectors are hardware dependent and can be different for different platforms. - -## Backing store -TrustZone protected DRAM or in some cases non-secure DRAM is used as backing -store. The data in the backing store is integrity protected with one hash -(SHA-256) per page (4KiB). Readonly pages are not encrypted since the OP-TEE -binary itself is not encrypted. - -## Partitioning of memory -The code that handles demand paging must always be available as it would -otherwise lead to deadlock. The virtual memory is partitioned as: - -``` - Type Sections -+--------------+-----------------+ -| | text | -| | rodata | -| | data | -| unpaged | bss | -| | heap1 | -| | nozi | -| | heap2 | -+--------------+-----------------+ -| init / paged | text_init | -| | rodata_init | -+------------- +-----------------+ -| paged | text_pageable | -| | rodata_pageable | -+--------------+-----------------+ -| demand alloc | | -| | | -+--------------+-----------------+ -``` -Where "`nozi`" stands for "not zero initialized", this section contains entry -stacks (thread stack when TEE pager is not enabled) and translation tables (TEE -pager cached translation table when the pager is enabled and LPAE MMU is used). - -The "`init`" area is available when OP-TEE is initializing and contains -everything that is needed to initialize the pager. After the pager has been -initialized this area will be used for demand paged instead. - -The "`demand alloc`" area is a special area where the pages are allocated and -removed from the pager on demand. Those pages are returned when OP-TEE does not -need them any longer. The thread stacks currently belongs this area. This means -that when a stack is not used the physical pages can be used by the pager for -better performance. - -The technique to gather code in the different area is based on compiling all -functions and data into separate sections. The unpaged text and rodata is then -gathered by linking all object files with `--gc-sections` to eliminate sections -that are outside the dependency graph of the entry functions for unpaged -functions. A script analyzes this ELF file and generates the bits of the final -link script. The process is repeated for init text and rodata. What is not -"unpaged" or "init" becomes "paged". - -## Partitioning of the binary - -*Note: the struct definitions provided in this section are explicitly covered -by the following dual license:* -``` -SPDX-License-Identifier: (BSD-2-Clause OR GPL-2.0) -``` - -The binary is partitioned into four parts as: -``` -+----------+ -| Header | -+----------+ -| Init | -+----------+ -| Hashes | -+----------+ -| Pageable | -+----------+ -``` -Header is defined as: -```c -#define OPTEE_MAGIC 0x4554504f -#define OPTEE_VERSION 1 -#define OPTEE_ARCH_ARM32 0 -#define OPTEE_ARCH_ARM64 1 - -struct optee_header { - uint32_t magic; - uint8_t version; - uint8_t arch; - uint16_t flags; - uint32_t init_size; - uint32_t init_load_addr_hi; - uint32_t init_load_addr_lo; - uint32_t init_mem_usage; - uint32_t paged_size; -}; -``` - -The header is only used by the loader of OP-TEE, not OP-TEE itself. To -initialize OP-TEE the loader loads the complete binary into memory and copies -what follows the header and the following `init_size` bytes to -`(init_load_addr_hi << 32 | init_load_addr_lo)`. `init_mem_usage` is used by the -loader to be able to check that there is enough physical memory available for -OP-TEE to be able to initialize at all. The loader supplies in `r0/x0` the -address of the first byte following what was not copied and jumps to the load -address to start OP-TEE. - -In addition to overall binary with partitions inside described as above, extra -three binaries are generated simultaneously during build process for loaders -who support loading separate binaries: -``` -+----------+ -| Header | -+----------+ - -+----------+ -| Init | -+----------+ -| Hashes | -+----------+ - -+----------+ -| Pageable | -+----------+ -``` -In this case, loaders load header binary first to get image list and information -of each image; and then load each of them into specific load address assigned -in structure. These binaries are named with v2 suffix to distinguish from the -existing binaries. Header format is updated to help loaders loading binaries -efficiently: -```c -#define OPTEE_IMAGE_ID_PAGER 0 -#define OPTEE_IMAGE_ID_PAGED 1 - -struct optee_image { - uint32_t load_addr_hi; - uint32_t load_addr_lo; - uint32_t image_id; - uint32_t size; -}; - -struct optee_header_v2 { - uint32_t magic; - uint8_t version; - uint8_t arch; - uint16_t flags; - uint32_t nb_images; - struct optee_image optee_image[]; -}; -``` - -Magic number and architecture are identical as original. Version is increased -to 2. `load_addr_hi` and `load_addr_lo` may be 0xFFFFFFFF for pageable binary -since pageable part may get loaded by loader into dynamic available position. -`image_id` indicates how loader handles current binary. -Loaders who don't support separate loading just ignore all v2 binaries. - -## Initializing the pager -The pager is initialized as early as possible during boot in order to minimize -the "init" area. The global variable `tee_mm_vcore` describes the virtual memory -range that is covered by the level 2 translation table supplied to -`tee_pager_init()`. - -### Assign pageable areas -A virtual memory range to be handled by the pager is registered with a call to -`tee_pager_add_core_area()`. - -```c -bool tee_pager_add_area(tee_mm_entry_t *mm, uint32_t flags, const void *store, - const void *hashes); -``` - -which takes a pointer to `tee_mm_entry_t` to tell the range, flags to tell how -memory should be mapped (readonly, execute etc), and pointers to backing store -and hashes of the pages. - -### Assign physical pages -Physical SRAM pages are supplied by calling `tee_pager_add_pages()` - -```c -void tee_pager_add_pages(tee_vaddr_t vaddr, size_t npages, bool unmap); -``` - -`tee_pager_add_pages()` takes the physical address stored in the entry mapping -the virtual address "vaddr" and "npages" entries after that and uses it to map -new pages when needed. The unmap parameter tells whether the pages should be -unmapped immediately since they does not contain initialized data or be kept -mapped until they need to be recycled. The pages in the "init" area are supplied -with `unmap == false` since those page have valid content and are in use. - -## Invocation -The pager is invoked as part of the abort handler. A pool of physical pages are -used to map different virtual addresses. When a new virtual address needs to be -mapped a free physical page is mapped at the new address, if a free physical -page cannot be found the oldest physical page is selected instead. When the page -is mapped new data is copied from backing store and the hash of the page is -verified. If it is OK the pager returns from the exception to resume the -execution. - -## Paging of user TA - -Paging of user TAs can optionally be enabled with CFG_PAGED_USER_TA=y. -Paging of user TAs is analogous to paging of OP-TEE kernel parts but with a -few differences: -- Read/write pages are paged in addition to read-only pages -- Page tables are managed dynamically - -tee_pager_add_uta_area() is used to setup initial read/write mapping needed -when populating the TA. When the TA is fully populated and relocated -tee_pager_set_uta_area_attr() changes the mapping of the area to strict -permissions used when the TA is running. - -# 9. Memory objects - -A memory object, MOBJ, describes a piece of memory. The interface provided -is mostly abstract when it comes to using the MOBJ to populate translation -tables etc. - -There is different kinds of MOBJs describing: -- physically contiguous memory - - created with mobj_phys_alloc() -- virtual memory - - one instance with the name mobj_virt available - - spans the entire virtual address space -- physically contiguous memory allocated from a tee_mm_pool_t * - - created with mobj_mm_alloc() -- paged memory - - created with mobj_paged_alloc() - - only contains the supplied size and makes mobj_is_paged() return true if - supplied as argument -- secure copy paged shared memory - - created with mobj_seccpy_shm_alloc() - - makes mobj_is_paged() and mobj_is_secure() return true if supplied as - argument - -# 10. Cryptographic abstraction layer -Cryptographic operations are implemented inside the TEE core by the -[LibTomCrypt] library. An abstraction layer allows for replacing the default -implementation, as explained in [crypto.md]. - -# 11. libutee - -The GlobalPlatform Core Internal API describes services that are provided to -Trusted Applications. libutee is a library that implements this API. - -libutee is a static library the Trusted Applications shall statically link -against. Trusted Applications do execute in non-privileged secure userspace and -libutee also aims at being executed in the non-privileged secure userspace. - -Some services for this API are fully statically implemented inside the -libutee library while some services for the API are implemented inside the -OP-TEE core (privileged level) and libutee calls such services through -system calls. - -# 12. Trusted Applications - -## Pseudo TAs and User Mode TAs - -There are two ways to implement Trusted Applications (TAs), pseudo TAs and -user mode TAs. User mode TAs are full featured Trusted Applications as -specified by the GlobalPlatform TEE specifications, these are simply referred -to as 'Trusted Applications'. For most cases, user mode TAs are preferred. - -### Pseudo Trusted Applications - -These are implemented directly to the OP-TEE core tree in, eg, -`core/arch/arm/pta`, and are built along with and statically built into the -OP-TEE core blob. - -The pseudo Trusted Applications included in OP-TEE already are OP-TEE -secure privileged level services hidden behind a "GlobalPlatform TA Client" API. -These pseudo-TAs are used for various purposes such as specific secure services -or embedded tests services. - -Pseudo TAs do not benefit from the GlobalPlatform Core Internal API support -specified by the GlobalPlatform TEE specs. These APIs are provided to TAs as a -static library each TA shall link against (the "libutee") and that calls OP-TEE -core service through system calls. As OP-TEE core does not link with libutee, -Pseudo TAs can only use the OP-TEE core internal APIs and routines. - -As pseudo TAs have the same privileged execution level as the OP-TEE core code -itself, such situation may not be desirable for complex TAs. - -In most cases an unprivileged (user mode) TA is the best choice instead of adding -your code directly to the OP-TEE core. However if you decide your application -is best handled directly in OP-TEE core like this, you can look at -`core/arch/arm/pta/stats.c` as a template and just add your pseudo TA based on -that to the `sub.mk` in the same directory. - -### User Mode Trusted Applications - -User Mode Trusted Applications are loaded (mapped into memory) by OP-TEE -core in the Secure World when something in the REE wants to talk to that -particular application UUID. They run at a lower CPU privilege level -than OP-TEE core code. In that respect, they are quite similar to regular -applications running in the Rich Execution Environment (REE), except that -they execute in Secure World. - -Trusted Application benefit from the GlobalPlatform Core Internal API as -specified by the GlobalPlatform TEE specifications. - -There are several types of user mode TAs, which differ by the way they are -stored. - -#### "Normal" or Secure Storage Trusted Applications - -These are stored in secure storage. The meta data is stored in a database -of all installed TAs and the actual binary is stored encrypted as a -separate file in the untrusted REE filesystem. - -Before these TAs can be loaded they have to be installed first, this is -something that can be done during initial deployment or at a later stage. - -For test purposes the test program xtest can install a TA into secure -storage with the command: -``` -xtest --install-ta -``` - -#### "Legacy" or REE FS Trusted Applications - -They consist of a cleartext signed ELF file, named from the UUID -of the TA and the suffix ".ta". - -They are built separately from the OP-TEE core boot-time blob, although when -they are built they use the same build system, and are signed with the key -from the build of the original OP-TEE core blob. - -Because the TAs are signed, they are able to be stored in the untrusted REE -filesystem, and `tee-supplicant` will take care of passing them to be checked -and loaded by the Secure World OP-TEE core. - -#### Early Trusted Applications - -The so-called early TAs are virtually identical to the normal (REE FS) TAs, -but insted of being loaded from the Normal World file system, they are linked -into a special data section in the TEE core blob. Therefore, they are available -even before `tee-supplicant` and the Normal World filesystems have come up. -More details in commit [early_tas]. - -## Special treatment of Trusted Applications - -### Syscalls - -User mode TAs are not directly bound to function exports in the OP-TEE -core blob, both because the TA code is kept at arm's length by executing at a -different privileged level, and because TAs direct binding to addresses in the -core would require upgrades of all TAs synchronusly with upgrades of the -OP-TEE core blob. Instead, the resolution of OP-TEE core exports in the TA -is done at runtime. - -OP-TEE does this by using syscalls, the same kind of way as the Linux kernel -provides a stable API for its userland programs. TAs are written to use -syscall wrappers to access functions exported from OP-TEE core, so this all -happens automatically when a TA wants to use an API exported from OP-TEE -core. - -Pseudo TAs and anything else directly built into OP-TEE core do not -require going through a syscall interface, since they can just link directly -as they are directly part of the core. - -Most of the services defined by the GlobalPlatform Core Internal API are -implemented through syscall from the TA to the OP-TEE core privileged level: -cryptographic services, communications with other TAs, ... Some services were -added through OP-TEE development such as ASCII message tracing. - -Syscalls are provided already for all public exports from OP-TEE core that a -Dynamic TA is expected to use, so you only need to take care about this if -you will add new exported from OP-TEE core that TAs will want to use. - -### Malloc mapping - -The OP-TEE core code has its own private memory allocation heap that is mapped -into its MMU view only and cannot be seen by Trusted Applications. The -core code uses `malloc()` and `free()` style APIs. - -Trusted Applications also have their own private memory allocation heaps -that are visible to the owning TA, and to OP-TEE core. TAs manage their -heaps using `TEE_Malloc()` and `TEE_Free()` style apis. - -Heap |Visible to |Inaccessible to ------|-------------|--------------- -core |core |any TA -TA |core, same TA|any other TA - -This enforces "Chinese Walls" between the TA views of Secure World. - -Since OP-TEE core cannot perform allocations in the TA's private heap, -and the TA is not going to be able to access allocations from the OP-TEE -core heap, it means only allocations from the TA heap are visible to both the -TA and OP-TEE core. When performing syscalls between a TA and OP-TEE core -then, the TA side must provide all the memory allocations for buffers, etc -used by both sides. - -### Malloc pool - -The OP-TEE core malloc heap is defined by `CFG_CORE_HEAP_SIZE` in `mk/config.mk`. - -However for TAs, the individual TA TEE_Malloc() heap size is defined by -`TA_DATA_SIZE` in `user_ta_header_defines.h`. Likewise the TA stack size is -set in the same file, in `TA_STACK_SIZE`. - -## File format of a Dynamic Trusted Application - -The format a TA is: -``` -<Signed header> -<ELF> -``` - -Where `<ELF>` is the content of a standard ELF file and `<Signed header>` -consists of: - -| Type | Name | Comment | -|------|------|---------| -| `uint32_t` | magic | Holds the magic number `0x4f545348` | -| `uint32_t` | img_type | image type, values defined by enum shdr_img_type | -| `uint32_t` | img_size | image size in bytes | -| `uint32_t` | algo | algorithm, defined by public key algorithms `TEE_ALG_*` from TEE Internal API specification | -| `uint16_t` | hash_size | size of the signed hash | -| `uint16_t` | sig_size | size of the signature | -| `uint8_t[hash_size]` | hash | Hash of the fields above and the `<ELF>` above | -| `uint8_t[sig_size]` | signature | Signature of hash | - -# 13. Device Tree support - -OP-TEE core can use the device tree format to inject platform configuration -information during platform initialization and possibly some run time contexts. - -Device Tree technology allows to describe platforms from ASCII source files -so-called DTS files. These can be used to generate a platform description -binary image, so-called DTB, embedded in the platform boot media for -applying expected configuration settings during the platform initializations. - -This scheme relaxes design constraints on the OP-TEE core implementation as -most of the platform specific hardware can be tuned without modifying C -source files or adding configuration directives in the build environments. - -## Secure and Non-Secure Device Trees - -There can be several device trees embedded in the target system and some -can be shared across the boot stages. - -* Boot loader stages may load a device tree structure in memory for all boot -stage to get platform configuration from. If such device tree data are to be -accessed by the non-secure world, they shall be located in non-secure memory. - -* Boot loader stages may load a device tree structure in secure memory for -the benefit of the secure world only. Such device tree blob shall be located -in secure memory. - -* OP-TEE core can also embedded a device tree structure to describe the -platform. - -* Non-secure world can embed a device tree structure and/or rely on a device -tree structure loaded by the secure world, being an early boot stage and/or -OP-TEE core. - -Obviously the non-secure world will not be able to access a device tree -image located on a secure memory which non-secure world as no access to. - -## Early boot device tree argument - -The bootloader provides arguments to the OP-TEE core when it -boots it. Among those, the physical memory base address of a device tree -image accessible to OP-TEE core. - -When OP-TEE core is built with `CFG_DT=y` this device tree is accessed by -OP-TEE core to get some information: console configuration, main memory -size. - -OP-TEE will also try to add the description of the OP-TEE resources for -the non-secure world to properly communicate with OP-TEE. This assumes the -image is located in non-secure memory. - -Modifications made by OP-TEE core on the non-secure device tree image provided -by early boot and passed to non-secure world are the following: -- Add an OP-TEE node if none found with the related invocation parameters. -- Add a reserved memory node for the few memory areas that shall be reserved - to the secure world and non accessed by the non-secure world. -- Add a PSCI description node if none found. - -Early boot DTB located in non-secure memory can be accessed by OP-TEE core -only during its initialization, before non-secure world boots. - -## Early boot device tree overlay - -There are two possibilities for OP-TEE core to provide a device tree -overlay to the non-secure world. - -* Append OP-TEE nodes to an existing DTB overlay located at CFG_DT_ADDR or - passed in arg2 - -* Generate a new DTB overlay at CFG_DT_ADDR if and only if CFG_DT_ADDR does - not point to a valid DTB. - -A subsequent boot stage should merge the OP-TEE DTB overlay into another -DTB. - -A typical bootflow for this would be - -ATF -> OP-TEE -> u-boot with u-boot merging the OP-TEE DTB overlay located -at CFG_DT_ADDR into a DTB u-boot has loaded from elsewhere. - -This functionality is enabled when `CFG_EXTERNAL_DTB_OVERLAY=y`. - -## Embedded Secure Device Tree - -When OP-TEE core is built with configuration directive `CFG_EMBED_DTB=y` -directive `CFG_EMBED_DTB_SOURCE_FILE` shall provide the relative path of the -DTS file inside directory `core/arch/$(ARCH)/dts` from which a DTB is -generated and embedded in a read-only section of OP-TEE core. - -In this case the device tree address passed to the OP-TEE entry point -by the bootloader is ignored, only the embedded device tree is accessible. - -[crypto.md]: crypto.md -[early_tas]: https://github.com/OP-TEE/optee_os/commit/d0c636148b3a -[LibTomCrypt]: https://github.com/libtom/libtomcrypt -[OP-TEE Client]: https://github.com/OP-TEE/optee_client -[OP-TEE Linux Kernel driver]: https://github.com/linaro-swg/linux -[OP-TEE Trusted OS]: https://github.com/OP-TEE/optee_os -[optee_smc.h]: ../core/arch/arm/include/sm/optee_smc.h -[optee_msg.h]: ../core/include/optee_msg.h -[Platforms Supported]: https://github.com/OP-TEE/optee_os#3-platforms-supported -[struct optee_msg_arg]: ../core/include/optee_msg.h -[thread.c]: ../core/arch/arm/kernel/thread.c diff --git a/documentation/optee_with_auth_framework.md b/documentation/optee_with_auth_framework.md deleted file mode 100644 index c654e5269..000000000 --- a/documentation/optee_with_auth_framework.md +++ /dev/null @@ -1,20 +0,0 @@ -## OP-TEE with authentication framework in ARM-TF -This document gives a brief description on how to enable the verification of OP-TEE using the authentication framework in ARM-TF - ---- -## What we should do -* According to [user-guide.md](https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/user-guide.md), there is no additional specific build options for the verification of OP-TEE. If we have enabled the authentication framework and specified the BL32 build option when building ARM-TF, the BL32 related certificates will be created automatically by the cert_create tool, and then these certificates will be verified during booting up. - - -* To enable the authentication framework, the following steps should be followed according to [user-guide.md](https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/user-guide.md). All the details for these build options are also in [user-guide.md](https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/user-guide.md), more details about the authentication framework, please see [auth-framework.md](https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/auth-framework.md) and [trusted-board-boot.md](https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/trusted-board-boot.md). - - * Check out a recent version of the [mbed TLS Repository](https://github.com/ARMmbed/mbedtls.git), and then switch to tag mbedtls-2.2.0 - * Besides the normal build options, add the following build options for ARM-TF - * **MBEDTLS_DIR**=*path of the directory containing mbed TLS sources* - * **TRUSTED_BOARD_BOOT**=*1* - * **GENERATE_COT**=*1* - * **ARM_ROTPK_LOCATION**=*devel_rsa* - * **ROT_KEY**=*$(ARM_TF_PATH)/plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem* - - -* Above steps have been tested on FVP platform, all verification steps are ok and xtest can run successfully without regression. diff --git a/documentation/porting_guidelines.md b/documentation/porting_guidelines.md deleted file mode 100644 index a7b966cd8..000000000 --- a/documentation/porting_guidelines.md +++ /dev/null @@ -1,378 +0,0 @@ -Porting guidelines for OP-TEE -============================= - -1. [Introduction](#1-introduction) -2. [Add a new platform](#2-add-a-new-platform) -3. [Hardware Unique Key](#3-hardware-unique-key) -4. [Secure Clock](#4-secure-clock) -5. [Root and Chain of Trust](#5-root-and-chain-of-trust) -6. [Hardware Crypto IP](#6-hardware-crypto-ip) -7. [Power Management / PSCI](#7-power-management--psci) -8. [Memory firewalls / TZASC](#8-memory-firewalls--tzasc) -9. [Trusted Application private/public keypair](#9-trusted-application-privatepublic-keypair) - -## 1. Introduction ---------------- -This document serves a dual purpose: -* Serve as a base for getting OP-TEE up and running on a new device with initial - xtest validation passing. This is the first part of this document (section 2). -* Highlight the missing pieces if you intend to make a real secure product, - that is what the second part of this document is about. - -We are trying our best to implement full end to end security in OP-TEE in a -generic way, but due to the nature of devices being different, NDA etc, it is -not always possible for us to do so and in those cases, we most often try to -write a generic API, but we will just stub the code. This porting guideline -highlights the missing pieces that must be addressed in a real secure consumer -device. Hopefully we will sooner or later get access to devices where we at -least can make reference implementations publicly available to everyone for the -missing pieces we are talking about here. - -## 2. Add a new platform -The first thing you need to do after you have decided to port OP-TEE to another -device is to add a new platform device. That can either be adding a new platform -variant (`PLATFORM_FLAVOR`) if it is a device from a family already supported, -or it can be a brand new platform family (`PLATFORM`). Typically this initial -setup involve configuring UART, memory addresses etc. For simplicity let us call -our fictive platform for "gendev" just so we have something to refer to when -writing examples further down. - -### 2.1 core/arch/arm -In `core/arch/arm` you will find all the currently supported devices. That is -where you are supposed to add a new platform or modify an existing one. -Typically you will find this set of files in a specific platform folder: -```bash -$ ls -conf.mk main.c platform_config.h sub.mk -``` - -So for the gendev platform it means that the files should be placed in this -folder: -```bash -core/arch/arm/plat-gendev -``` - -##### conf.mk -This is the device specific makefile where you define configurations unique to -your platform. This mainly comprises two things: -- OP-TEE configuration variables (`CFG_`), which may be assigned values in two -ways. `CFG_FOO ?= bar` should be used to provide a default value that may be -modified at compile time. On the other hand, variables that must be set to some -value and cannot be modified should be set by: `$(call force,CFG_FOO,bar)`. -- Compiler flags for the TEE core, the user mode libraries and the Trusted -Applications, which may be added to macros used by the build system. Please see -[Platform-specific configuration and flags] in the build system documentation. - -It is recommended to use a existing platform configuration file as a starting -point. For instance, [core/arch/arm/plat-hikey/conf.mk]. - -The platform `conf.mk` file should at least define the default platform flavor -for the platform, the core configurations (architecture and number of cores), -the main configuration directives (generic boot, arm trusted firmware support, -generic time source, console driver, etc...) and some platform default -configuration settings. - -```makefile -PLATFORM_FLAVOR ?= hikey - -include core/arch/arm/cpu/cortex-armv8-0.mk - -$(call force,CFG_TEE_CORE_NB_CORE,8) -$(call force,CFG_GENERIC_BOOT,y) -$(call force,CFG_PL011,y) -$(call force,CFG_PM_STUBS,y) -$(call force,CFG_SECURE_TIME_SOURCE_CNTPCT,y) -$(call force,CFG_WITH_ARM_TRUSTED_FW,y) -$(call force,CFG_WITH_LPAE,y) - -CFG_NUM_THREADS ?= 8 -CFG_CRYPTO_WITH_CE ?= y -CFG_WITH_STACK_CANARIES ?= y -CFG_CONSOLE_UART ?= 3 -CFG_DRAM_SIZE_GB ?= 2 -``` - -##### main.c -This platform specific file will contain power management handlers and code -related to the UART. We will talk more about the information related to the -handlers further down in this document. For our gendev device it could look like -this (here we are excluding the necessary license header to save some space): - -```c -#include <console.h> -#include <drivers/serial8250_uart.h> -#include <kernel/generic_boot.h> -#include <kernel/panic.h> -#include <kernel/pm_stubs.h> -#include <mm/core_mmu.h> -#include <platform_config.h> -#include <stdint.h> -#include <tee/entry_fast.h> -#include <tee/entry_std.h> - -static void main_fiq(void) -{ - panic(); -} - -static const struct thread_handlers handlers = { - .std_smc = tee_entry_std, - .fast_smc = tee_entry_fast, - .nintr = main_fiq, - .cpu_on = cpu_on_handler, - .cpu_off = pm_do_nothing, - .cpu_suspend = pm_do_nothing, - .cpu_resume = pm_do_nothing, - .system_off = pm_do_nothing, - .system_reset = pm_do_nothing, -}; - -const struct thread_handlers *generic_boot_get_handlers(void) -{ - return &handlers; -} - -/* - * Register the physical memory area for peripherals etc. Here we are - * registering the UART console. - */ -register_phys_mem(MEM_AREA_IO_NSEC, CONSOLE_UART_BASE, SERIAL8250_UART_REG_SIZE); - -static struct serial8250_uart_data console_data; - -void console_init(void) -{ - serial8250_uart_init(&console_data, CONSOLE_UART_BASE, - CONSOLE_UART_CLK_IN_HZ, CONSOLE_BAUDRATE); - register_serial_console(&console_data.chip); -} -``` - -##### platform_config.h -This is a mandatory header file for every platform, since there are several -files relaying upon the existence of this particular file. This file is where -you will find the major differences between different platforms, since this is -where you do the memory configuration, define base addresses etc. we are going to -list a few here, but it probably makes more sense to have a look at the already -existing `platform_config.h` files for the other platforms. Our fictive gendev -could look like this: - -```c -#ifndef PLATFORM_CONFIG_H -#define PLATFORM_CONFIG_H - -/* Make stacks aligned to data cache line length */ -#define STACK_ALIGNMENT 64 - -/* 8250 UART */ -#define CONSOLE_UART_BASE 0xcafebabe /* UART0 */ -#define CONSOLE_BAUDRATE 115200 -#define CONSOLE_UART_CLK_IN_HZ 19200000 - -/* Optional: when used with CFG_WITH_PAGER, defines the device SRAM */ -#define TZSRAM_BASE 0x3F000000 -#define TZSRAM_SIZE (200 * 1024) - -/* Mandatory main secure RAM usually DDR */ -#define TZDRAM_BASE 0x60000000 -#define TZDRAM_SIZE (32 * 1024 * 1024) - -/* Mandatory TEE RAM location and core load address */ -#define TEE_RAM_START TZDRAM_BASE -#define TEE_RAM_PH_SIZE TEE_RAM_VA_SIZE -#define TEE_RAM_VA_SIZE (4 * 1024 * 1024) -#define TEE_LOAD_ADDR (TZDRAM_BASE + 0x20000) - -/* Mandatory TA RAM (external less secure RAM) */ -#define TA_RAM_START (TZDRAM_BASE + TEE_RAM_VA_SIZE) -#define TA_RAM_SIZE (TZDRAM_SIZE - TEE_RAM_VA_SIZE) - -/* Mandatory: for static SHM, need a hardcoded physical address */ -#define TEE_SHMEM_START 0x08000000 -#define TEE_SHMEM_SIZE (4 * 1024 * 1024) - -#endif /* PLATFORM_CONFIG_H */ -``` -This is minimal amount of information in the `platform_config.h` file. I.e, the -memory layout for on-chip and external RAM. Note that parts of the DDR typically -will need to be shared with normal world, so there is need for some kind of -memory firewall for this (more about that further down). As you can see we have -also added the UART configuration here, i.e., the `DEVICE0_xyz` part. - -### 2.2 Devices officially in OP-TEE? -We do encourage everyone to submit their board support to the OP-TEE project -itself, so it becomes part of the official releases and will be maintained by -the OP-TEE community itself. If you intend to do so, then there are a few more -things that you are supposed to do. - -#### 2.2.1 Update README.md -There is a section ([3. Platforms Supported]) that lists all devices officially -supported in OP-TEE, that is where you also shall list your device. It should -contain the name of the platform, then composite `PLATFORM` flag and whether the -device is publicly available or not. - -#### 2.2.2 Update .shippable.yml -Since we are using Shippable to test pull requests etc, we would like that you also -add your device to the [.shippable.yml](../.shippable.yml) file, so that it will at least be built when -someone is doing a pull request. Add a line at the end of file: - -``` - - _make PLATFORM=<platform-name>_ -``` -#### 2.2.3 Maintainer -If you are submitting the board support upstream and cannot give Linaro -maintainers a device, then we are going to ask you to become the maintainer for -the device you have added. This means that you should also update the -[MAINTAINERS.md] file accordingly. By being a maintainer for a device you are -responsible to keep it up to date and you will be asked every quarter as part of -the OP-TEE release schedule to test your device running the latest OP-TEE -software. - -#### 2.2.4 Update build.git -This isn't strictly necessary, but we are trying to create repo setup(s) for the -device(s) that we are in charge of. That makes it very easy for newcomers to get -started with a certain platform. So please consider creating a new [manifest] -for the device you have added to OP-TEE. - -## 3. Hardware Unique Key -Most devices have some kind of Hardware Unique Key (HUK) that is mainly used to -derive other keys. The HUK could for example be used when deriving keys used in -secure storage etc. The important thing with the HUK is that it needs to be well -protected and in the best case the HUK should never ever be readable directly -from software, not even from the secure side. There are different solutions to -this, crypto accelerator might have support for it or, it could involve another -secure co-processor. - -In OP-TEE the HUK **is** just **stubbed** and you will see that in the function -called `tee_otp_get_hw_unique_key()` in `core/include/kernel/tee_common_otp.h`. -In a real secure product you **must** replace this with something else. If your -device lacks the hardware support for a HUK, then you must at least change this -to something else than just zeroes. But, remember it is not good secure practice -to store a key in software, especially not the key that is the root for -everything else, so this is not something we recommend that you should do. - -## 4. Secure Clock -The Time API in GlobalPlatform Internal Core API specification defines three -sources of time; system time, TA persistent time and REE time. The REE time -is by nature considered as an unsecure source of time, but the other two should -in a fully trustable hardware make use of trustable source of time, i.e., a -secure clock. Note that from GlobalPlatform point of view it is not required to -make use of a secure clock, i.e., it is OK to use time from REE, but the level -of trust should be reflected by the `gpd.tee.systemTime.protectionLevel` -property and the `gpd.tee.TAPersistentTime.protectionLevel` property (100=REE -controlled clock, 1000=TEE controlled clock). So the functions that one needs to -pay attention to are `tee_time_get_sys_time()` and `tee_time_get_ta_time()`. If -your hardware has a secure clock, then you probably want to change the -implementation there to instead use the secure clock (and then you would also -need to update the property accordingly, i.e., -`tee_time_get_sys_time_protection_level()` and the variable `ta_time_prot_lvl` -in `tee_svc.c`). - -## 5. Root and Chain of Trust -To be able to assure that your devices are running the (untampered) binaries you -intended to run you will need to establish some kind of trust anchor on the -devices. - -The most common way of doing that is to put the root public key in some -read only memory on the device. Quite often SoC's/OEM's stores public key(s) -directly or the hash(es) of the public key(s) in [OTP]. When the boot ROM (which -indeed needs to be ROM) is about to load the first stage bootloader it typically -reads the public key from the software binary itself, hash the key and compare -it to the key in OTP. If they are matching, then the boot ROM can be sure that -the first stage bootloader was indeed signed with the corresponding private key. - -In OP-TEE you will not find any code at all related to this and this is a good -example when it is hard for us to do this in a generic way since device -manufacturers all tend to do this in their own unique way and they are not very -keen on sharing their low level boot details and security implementation with -the rest of the world. This is especially true on ARMv7-A. For ARMv8-A it looks -bit better, since ARM in ARM Trusted Firmware have implemented and defined how a -abstract the chain of trust (see [auth-framework.rst]). We have successfully -verified OP-TEE by using the authentication framework from ARM Trusted Firmware -(see [optee_with_auth_framework.md] for the details). - -## 6. Hardware Crypto IP -By default OP-TEE uses a software crypto library (currently LibTomCrypt) and you -have the ability to enable Crypto Extensions that were introduced with ARMv8-A -(if the device is capable of that). Some of the devices we have in our hands do -have hardware crypto IP's, but due to NDA's etc it has not been possible to -enable it. If you have a device capable of doing crypto operations on a -dedicated crypto block and you prefer to use that in favor for the software -implementation, then you will need to implement relevant functions defined in -`core/include/crypto/crypto.h`, the Crypto API, and write the low level -driver that communicates with the device. Our [crypto.md] file describes -how the Crypto API is integrated. Since the communication with crypto -blocks tends to be quite different depending on what kind of crypto block -you have, we have not written how that should be done. It might be that we -do that in the future when get hold of a device where we can use the crypto -block. - -By default OP-TEE is configured with a software PRNG. The entropy is added -to software PRNG at various places, but unfortunately it is still quite -easy to predict the data added as entropy. As a consequence, unless the RNG -is based on hardware the generated random will be quite weak. - -## 7. Power Management / PSCI -In section 2 when we talked about the file `main.c`, we added a couple of -handlers related to power management, we are talking about the following lines: -``` - .cpu_on = cpu_on_handler, - .cpu_off = pm_do_nothing, - .cpu_suspend = pm_do_nothing, - .cpu_resume = pm_do_nothing, - .system_off = pm_do_nothing, - .system_reset = pm_do_nothing, -``` -The only function that actually does something there is the `cpu_on` function, -the rest of them are stubbed. The main reason for that is because we think that -how to suspend and resume is a device dependent thing. The code in OP-TEE is -prepared so that callbacks etc from ARM Trusted Firmware will be routed to -OP-TEE, but since the function(s) are just stubbed we will not do anything and -just return. In a real production device, you would probably want to save and -restore CPU states, secure hardware IPs' registers and TZASC and other memory -firewall related setting when these callbacks are being called. - -## 8. Memory firewalls / TZASC -ARM have defined a system IP / SoC peripheral called TrustZone Address Space -Controller (TZASC, see [TZC-380] and [TZC-400]). TZASC can be used to configure -DDR memory into separate regions in the physcial address space, where each -region can have an individual security level setting. After enabling TZASC, it -will perform security checks on transactions to memory or peripherals. It is not -always the case that TZASC is on a device, in some cases the SoC has developed -something equivalent. In OP-TEE this is very well reflected, i.e., different -platforms have different ways of protecting their memory. On ARMv8-A platforms -we are in most of the cases using ARM Trusted Firmware as the boot firmware and -there the secure bootloader is the one that configures secure vs non-secure -memory using TZASC (see [plat_arm_security_setup] in ARM-TF). The takeaway here -is that you must make sure that you have configured whatever memory firewall your -device has such that it has a secure and a non-secure memory area. - -## 9. Trusted Application private/public keypair -By default all Trusted Applications (TA's) are signed with the pre-generated -2048-bit RSA development key (private key). This key is located in the `keys` -folder (in the root of optee_os.git) and is named `default_ta.pem`. This key -**must** be replaced with your own key and you should **never ever** check-in -this private key in the source code tree when in use in a real product. The -recommended way to store private keys is to use some kind of [HSM] (Hardware -Security Module), but an alternative would be temporary put the private key on a -computer considered as secure when you are about to sign TA's intended to be -used in real products. Typically it is only a few number of people having access -to this type of key in company. The key handling in OP-TEE is currently a bit -limited since we only support a single key which is used for all TA's. We have -plans on extending this to make it a bit more flexible. Exactly when that will -happen has not been decided yet. - -[3. Platforms Supported]: ../README.md#3-platforms-supported -[auth-framework.rst]: https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/auth-framework.rst -[crypto.md]: crypto.md -[HSM]: https://en.wikipedia.org/wiki/Hardware_security_module -[manifest]: https://github.com/OP-TEE/build#6-manifests -[MAINTAINERS.md]: ../MAINTAINERS.md -[optee_with_auth_framework.md]: optee_with_auth_framework.md -[OTP]: https://en.wikipedia.org/wiki/Programmable_read-only_memory -[plat_arm_security_setup]: https://github.com/ARM-software/arm-trusted-firmware/search?utf8=%E2%9C%93&q=plat_arm_security_setup&type= -[TZC-380]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0431c/index.html -[TZC-400]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.100325_0001_02_en/index.html -[travis]: ../.travis.yml -[Platform-specific configuration and flags]: build_system.md#platform-specific-configuration-and-flags -[core/arch/arm/plat-hikey/conf.mk]: ../core/arch/arm/plat-hikey/conf.mk diff --git a/documentation/secure_storage.md b/documentation/secure_storage.md deleted file mode 100644 index d2b6dd4fa..000000000 --- a/documentation/secure_storage.md +++ /dev/null @@ -1,237 +0,0 @@ -# Secure Storage in OP-TEE - -## Background - -Secure Storage in OP-TEE is implemented according to what has been defined -in GloblaPlatform’s TEE Internal API specification (here called Trusted -Storage). This specification mandates that it should be possible to store -general-purpose data and key material that guarantees confidentiality and -integrity of the data stored and the atomicity of the operations that modifies -the storage (atomicity here means that either the entire operation completes -successfully or no write is done). - -There are currently two secure storage implementations in OP-TEE: - -- The first one relies on the normal world (REE) file system. It is described in - this document and is the default implementation. It is enabled at compile time - by `CFG_REE_FS=y`. -- The second one makes use of the Replay Protected Memory Block (RPMB) partition - of an eMMC device, and is enabled by setting `CFG_RPMB_FS=y`. It is described - in [secure_storage_rpmb.md](secure_storage_rpmb.md). - -It is possible to use the normal world file systems and the RPMB implementations -simultaneously. For this, two OP-TEE specific storage identifiers have been -defined: `TEE_STORAGE_PRIVATE_REE` and `TEE_STORAGE_PRIVATE_RPMB`. Depending -on the compile-time configuration, one or several values may be used. -The value `TEE_STORAGE_PRIVATE` selects the REE FS when available, otherwise the -RPMB FS (in this order). - -The rest of this document describes the REE FS only. - -## Overview - -![Secure Storage System Architecture](images/secure_storage/secure_storage_system_architecture.png -"Secure Storage System Architecture") - -### Source Files in OP-TEE OS - -| source file | | -| ----------- | --- | -| **[core/tee/tee_svc_storage.c](../core/tee/tee_svc_storage.c)** | TEE trusted storage service calls | -| **[core/tee/tee_ree_fs.c](../core/tee/tee_ree_fs)** | TEE file system & REE file operation interface | -| **[core/tee/fs_htree.c](../core/tee/fs_htree.c)** | Hash tree | -| **[core/tee/tee_fs_key_manager.c](../core/tee/tee_fs_key_manager.c)** | Key manager | -| **[lib/libutee/](../lib/libutee/)** | GlobalPlatform Internal API library | - -### Basic File Operation Flow - -When a TA is calling the write function provided by GP Trusted Storage API to -write data to a persistent object, a corresponding syscall implemented in TEE -Trusted Storage Service will be called, which in turn will invoke a series of -TEE file operations to store the data. TEE file system will then encrypt the -data and send REE file operation commands and the encrypted data to TEE -supplicant by a series of RPC messages. TEE supplicant will receive the -messages and store the encrypted data accordingly to the Linux file system. -Reading files are handled in a similar manner. - -### GlobalPlatform Trusted Storage Requirement - -Below is an excerpt from the specification, listing the most vital requirements: - -> 1. The Trusted Storage may be backed by non-secure resources as long as -> suitable cryptographic protection is applied, which MUST be as strong as -> the means used to protect the TEE code and data itself. -> 2. The Trusted Storage MUST be bound to a particular device, which means that -> it MUST be accessible or modifiable only by authorized TAs running in the -> same TEE and on the same device as when the data was created. -> 3. Ability to hide sensitive key material from the TA itself. -> 4. Each TA has access to its own storage space that is shared among all the -> instances of that TA but separated from the other TAs. -> 5. The Trusted Storage must provide a minimum level of protection against -> rollback attacks. It is accepted that the actually physical storage may be -> in an insecure area and so is vulnerable to actions from outside of the -> TEE. Typically, an implementation may rely on the REE for that purpose -> (protection level 100) or on hardware assets controlled by the TEE -> (protection level 1000). -> -> (see GP TEE Internal Core API section 2.5 and 5.2) - -If configured with `CFG_RPMB_FS=y` the protection against rollback is controlled -by the TEE and is set to 1000. If `CFG_RPMB_FS=n`, there's no protection against -rollback, and the protection level is set to 0. - -### TEE File Structure in Linux File System - -OP-TEE by default uses `/data/tee/` as the secure storage space in the Linux -file system. Each persistent object is assigned an internal identifier. It is -an integer which is visible in the Linux file system as -`/data/tee/<file number>`. - -A directory file, `/data/tee/dirf.db`, lists all the -objects that are in the secure storage. All normal world files are integrity -protected and encrypted, as described below. - -## Key Manager - -Key manager is an component in TEE file system, and is responsible for handling -data encryption and decryption and also management of the sensitive key -materials. There are three types of keys used by the key manager: the Secure -Storage Key (SSK), the TA Storage KEY (TSK) and the File Encryption Key (FEK). - -### Secure Storage Key (SSK) - -SSK is a per-device key and is generated and stored in secure memory when OP-TEE -is booting. SSK is used to derive the TA Storage Key (TSK). - -SSK is derived by: -> SSK = HMAC<sub>SHA256</sub> (HUK, Chip ID || "static string") - -The functions to get Hardware Unique Key (HUK) and chip ID depend on platform -implementation. - -Currently, in OP-TEE OS we only have a per-device key, SSK, which is used for -secure storage subsystem, but, for the future we might need to create different -per-device keys for different subsystems using the same algorithm as we -generate the SSK; An easy way to generate different per-device keys for -different subsystems is using different static strings to generate the keys. - -### Trusted Application Storage Key (TSK) - -The TSK is a per-Trusted Application key, which is generated from the SSK and -the TA's identifier (UUID). It is used to protect the FEK, in other words, -to encrypt/decrypt the FEK. - -TSK is derived by: -> TSK = HMAC<sub>SHA256</sub> (SSK, TA_UUID) - -### File Encryption Key (FEK) - -When a new TEE file is created, key manager will generate a new FEK by -PRNG (pesudo random number generator) for the TEE file and store the encrypted -FEK in meta file. FEK is used for encrypting/decrypting the TEE file information -stored in meta file or the data stored in block file. - -## Hash Tree - -The hash tree is responsible for handling data encryption and decryption of -a secure storage file. - -The hash tree is implemented as a binary tree where -each node (`struct tee_fs_htree_node_image` below) in the tree protects its -two child nodes and a data block. - -The meta data is stored in a header (`struct tee_fs_htree_image` below) -which also protects the top node. - -All fields (header, nodes, and blocks) are duplicated with two versions, 0 -and 1, to ensure atomic updates. See -[core/tee/fs_htree.c](../core/tee/fs_htree.c) for details. - -### Meta Data Encryption Flow - -![Meta Data Encryption](images/secure_storage/meta_data_encryption.png -"Meta data encryption") - -A new meta IV will be generated by PRNG when a meta data needs to be updated. -The size of meta IV is defined in -[core/include/tee/fs_htree.h](../core/include/tee/fs_htree.h) - -The data structures of meta data and node data are defined in -[core/include/tee/fs_htree.h](../core/include/tee/fs_htree.h) as follows: - -``` c -struct tee_fs_htree_node_image { - uint8_t hash[TEE_FS_HTREE_HASH_SIZE]; - uint8_t iv[TEE_FS_HTREE_IV_SIZE]; - uint8_t tag[TEE_FS_HTREE_TAG_SIZE]; - uint16_t flags; -}; - -struct tee_fs_htree_meta { - uint64_t length; -}; - -struct tee_fs_htree_imeta { - struct tee_fs_htree_meta meta; - uint32_t max_node_id; -}; - -struct tee_fs_htree_image { - uint8_t iv[TEE_FS_HTREE_IV_SIZE]; - uint8_t tag[TEE_FS_HTREE_TAG_SIZE]; - uint8_t enc_fek[TEE_FS_HTREE_FEK_SIZE]; - uint8_t imeta[sizeof(struct tee_fs_htree_imeta)]; - uint32_t counter; -}; -``` - -### Block Data Encryption Flow - -![Block Data Encryption](images/secure_storage/block_data_encryption.png -"Block data encryption") - -A new block IV will be generated by PRNG when a block data needs to be updated. -The size of block IV is defined in -[core/include/tee/fs_htree.h](../core/include/tee/fs_htree.h) - -## Atomic Operation - -According to GlobalPlatform Trusted Storage requirement of the atomicity, the -following operations should support atomic update: -> Write, Truncate, Rename, Create and Delete - -The strategy used in OP-TEE secure storage to guarantee the atomicity is -out-of-place update. - -## Important caveats - -Currently **no OP-TEE platform is able to support retrieval of the Hardware -Unique Key or Chip ID required for secure operation**. - -For all platforms, a constant key is used, resulting in no protection against -decryption, or Secure Storage duplication to other devices. - -This is because information about how to retrieve key data from the SoC is -considered sensitive by the vendors and it is not freely available. - -In OP-TEE, there are APIs for reading keys generically from -One-Time-Programmable (OTP) memory. But there are no existing platform -implementations. - -To allow Secure Storage to operate securely on your platform, you must define -implementations in your platform code for: - -``` c - TEE_Result tee_otp_get_hw_unique_key(struct tee_hw_unique_key *hwkey); - int tee_otp_get_die_id(uint8_t *buffer, size_t len); -``` - -These implementations should fetch the key data from your SoC-specific e-fuses, -or crypto unit according to the method defined by your SoC vendor. - -## Reference - -* [SFO15 Secure Storage (slides)](http://connect.linaro.org/resource/sfo15/sfo15-503-secure-storage-in-op-tee/) -* [LAS16 Secure Storage (slides)](http://connect.linaro.org/resource/las16/las16-504/) -* [SFO17 Secure Storage (slides)](http://connect.linaro.org/resource/sfo17/sfo17-309/) -* [TEE Internal Core API Specification v1.1](http://www.globalplatform.org/specificationsdevice.asp) diff --git a/documentation/secure_storage_rpmb.md b/documentation/secure_storage_rpmb.md deleted file mode 100644 index 60f6305c8..000000000 --- a/documentation/secure_storage_rpmb.md +++ /dev/null @@ -1,147 +0,0 @@ -# RPMB Secure Storage - -## Introduction - -This document describes the RPMB secure storage implementation in OP-TEE, -which is enabled by setting CFG_RPMB_FS=y. Trusted Applications may use -this implementation by passing a storage ID equal to -TEE_STORAGE_PRIVATE_RPMB, or TEE_STORAGE_PRIVATE if CFG_REE_FS is disabled. -For details about RPMB, please refer to the JEDEC eMMC specification -[[1]](#JEDECeMMC). - -The architecture is depicted below. - -``` - NORMAL WORLD : SECURE WORLD - : - U tee-supplicant : Trusted application - S (rpmb.c) : (secure storage API) - E ^ ^ : ^ - R | | :~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~ - ~~~~~~~ ioctl ~~~~~~~|~~~~~~~~~~~~: v - K | | : OP-TEE - E v v : (tee_svc_storage.c) - R MMC/SD subsys. OP-TEE driver : (tee_rpmb_fs.c, tee_fs_key_manager.c) - N ^ ^ : ^ - E | | : | - L v | : | - Controller driver | : | - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~ - v v - Secure monitor / EL3 firmware -``` - -For information about the `ioctl()` interface to the MMC/SD subsystem in the -Linux kernel, see the Linux core MMC header file [[2]](#mmc-core-h) and the -mmc-utils repository [[3]](#mmc-utils). - -## The Secure Storage API - -This part is common with the REE-based filesystem. The interface between the -system calls in [core/tee/tee_svc_storage.c](../core/tee/tee_svc_storage.c) and -the RPMB filesystem is the **tee_file_operations** structure `tee_file_ops`. - -## The RPMB filesystem - -The FS implementation is entirely in -[core/tee/tee_rpmb_fs.c](../core/tee/tee_rpmb_fs.c). - -The RPMB partition is divided in three parts: - -- The first 128 bytes are reserved for partition data (struct -**rpmb_fs_partition**). -- At offset 512 is the File Allocation Table (FAT). It is an array of -struct **rpmb_fat_entry** elements, one per file. The FAT grows dynamically as -files are added to the filesystem. Among other things, each entry has the start -address for the file data, its size, and the filename. -- Starting from the end of the RPMB partition and extending downwards is the -file data area. - -Space in the partition is allocated by the general-purpose allocator functions: -`tee_mm_alloc()` and `tee_mm_alloc2()`. - -All file operations are atomic. This is achieved thanks to the following -properties: -- Writing one single block of data to the RPMB partition is guaranteed to be -atomic by the eMMC specification. -- The FAT block for the modified file is always updated last, after data have -been written successfully. -- Updates to file content is done in-place only if the data do not span more -than the "reliable write block count" blocks. Otherwise, or if the file needs -to be extended, a new file is created. - -## Device access - -There is no eMMC controller driver in OP-TEE. The device operations all have to -go through the normal world. They are handled by the `tee-supplicant` process -which further relies on the kernel's `ioctl()` interface to access the device. -`tee-supplicant` also has an emulation mode which implements a virtual RPMB -device for test purposes. - -RPMB operations are the following: -- Reading device information (partition size, reliable write block count) -- Programming the security key. This key is used for authentication purposes. -Note that it is different from the Secure Storage Key (SSK) defined below, which -is used for encryption. Like the SSK however, the security key is also derived -from a hardware unique key or identifier. Currently, the function -`tee_otp_get_hw_unique_key()` is used to generate the RPMB security key. -- Reading the write counter value. The write counter is used in the HMAC -computation during read and write requests. The value is read at initialization -time, and stored in the **tee_rpmb_ctx** structure, `rpmb_ctx->wr_cnt`. -- Reading or writing blocks of data - -RPMB operations are initiated on request from the FS layer. Memory buffers for -requests and responses are allocated in shared memory using -`thread_optee_rpc_alloc_payload()`. -Buffers are passed to the normal world in a `TEE_RPC_RPMB_CMD` message, thanks -to the `thread_rpc_cmd()` function. Most RPMB requests and responses use the -data frame format defined by the JEDEC eMMC specification. - -HMAC authentication is implemented here also. - -## Encryption - -The FS encryption routines are in [core/tee/tee_fs_key_manager.c](../core/tee/tee_fs_key_manager.c). - -Block encryption protects file data. The algorithm is 128-bit AES in Cipher Block Chaining -(CBC) mode with Encrypted Salt-Sector Initialization Vector (ESSIV) -[[4]](#CBC-ESSIV). - -- During OP-TEE initialization, a 128-bit AES Secure Storage Key (SSK) is -derived from a Hardware Unique Key (HUK). It is kept in secure memory and never -written to disk. A Trusted Application Storage Key is derived from the SSK and -the TA UUID. -- For each file, a 128-bit encrypted File Encryption Key (FEK) is randomly -generated when the file is created, encrypted with the TSK and stored in the FAT -entry for the file. -- Each 256-byte block of data is then encrypted in CBC mode. The initialization -vector is obtained by the ESSIV algorithm, that is, by encrypting the block -number with a hash of the FEK. This allows direct access to any block in the -file, as follows: -``` - FEK = AES-Decrypt(TSK, encrypted FEK); - k = SHA256(FEK); - IV = AES-Encrypt(128 bits of k, block index padded to 16 bytes) - Encrypted block = AES-CBC-Encrypt(FEK, IV, block data); - Decrypted block = AES-CBC-Decrypt(FEK, IV, encrypted block data); -``` - - -SSK, TSK and FEK handling is common with the REE-based secure storage, while the AES -CBC block encryption is used only for RPMB (the REE implementation uses GCM). - -The FAT is not encrypted. - -## REE FS - -If configured with both CFG_REE_FS=y and CFG_RPMB_FS=y the REE FS will -create a special file, "dirfile.db.hash" in RPMB which hold a hash -representing the state of REE FS. - -## References - -- <a name="JEDECeMMC"></a>[1] _Embedded Multi-Media Card (e•MMC) Electrical Standard (5.1)_, JEDEC JESD84-B51, February 2015 -- <a name="mmc-core-h"></a>[2] [linux/mmc/core.h](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/mmc/core.h), Linux kernel sources -- <a name="mmc-utils"></a>[3] The [mmc-utils](http://git.kernel.org/cgit/linux/kernel/git/cjb/mmc-utils.git) repository -- <a name="CBC-ESSIV"></a>[4] [_Cipher Block Chaining_](https://en.wikipedia.org/wiki/Disk_encryption_theory#Cipher-block_chaining_.28CBC.29), -Wikipedia diff --git a/documentation/virtualization.md b/documentation/virtualization.md deleted file mode 100644 index 77d1f3a54..000000000 --- a/documentation/virtualization.md +++ /dev/null @@ -1,191 +0,0 @@ -# Virtualization Support # - -## Overview ## - -OP-TEE have experimental virtualization support. This is when one -OP-TEE instance can run TAs from multiple virtual machines. OP-TEE -isolates all VM-related states, so one VM can't affect another in any -way. - -With virtualization support enabled, OP-TEE will rely on a hypervisor, -because only the hypervisor knows which VM is calling OP-TEE. Also, -naturally the hypervisor should inform OP-TEE about creation and -destruction of VMs. Besides, in almost all cases, hypervisor enables -two-stage MMU translation, so VMs does not see real physical address -of memory, instead they work with intermediate physical addresses -(IPAs). On other hand OP-TEE can't translate IPA to PA, so this is a -hypervisor's responsibility to do this kind of translation. So, -hypervisor should include a component that knows about OP-TEE protocol -internals and can do this translation. We call this component "TEE -mediator" and right now only XEN hypervisor have OP-TEE mediator. - -## Configuration ## - -Virtualization support is enabled with `CFG_VIRTUALIZATION` -configuration option. When this option is enabled, OP-TEE will **not** -work without compatible a hypervisor. This is because the hypervisor -should send `OPTEE_SMC_VM_CREATED` SMC with VM ID before any standard -SMC can be received from client. - -`CFG_VIRT_GUEST_COUNT` controls the maximum number of supported -VMs. As OP-TEE have limited size of available memory, increasing this -count will decrease amount of memory available to one VM. Because we -want VMs to be independent, OP-TEE splits available memory in equal -portions to every VM, so one VM can't consume all memory and cause DoS -to other VMs. - -## Requirements for hypervisor ## - -As said earlier, hypervisor should be aware of OP-TEE and SMCs from -virtual guests to OP-TEE. This is a list of things, that compatible -hypervisor should perform: - -1. When new OP-TEE-capable VM is created, hypervisor should inform - OP-TEE about it with SMC `OPTEE_SMC_VM_CREATED`. `a1` parameter should - contain VM id. ID 0 is defined as `HYP_CLNT_ID` and is reserved for - hypervisor itself. - -2. When OP-TEE-capable VM is being destroyed, hypervisor should stop - all VCPUs (this will ensure that OP-TEE have no active threads for - that VMs) and send SMC `OPTEE_SMC_VM_DESTROYED` with the same - parameters as for `OPTEE_SMC_VM_CREATED`. - -3. Any SMC to OP-TEE should have VM ID in `a7` parameter. This is - either `HYP_CLNT_ID` if call originates from hypervisor or VM ID - that was passed in `OPTEE_SMC_VM_CREATED` call. - -4. Hypervisor should perform IPA<->PA address translation for all - SMCs. This includes both arguments in `a1`-`a6` registers and in - in-memory command buffers. - -5. Hypervisor should pin memory pages that VM shares with OP-TEE. This - means, that hypervisor should ensure that pinned page will reside - at the original PA as long, as it is shared with OP-TEE. Also it - should still belong to the VM that shared it. For example, the - hypervisor should not swap out this page, transfer ownership to - another VM, unmap it from VM address space and so on. - -6. Naturally, the hypervisor should correctly handle the OP-TEE - protocol, so for any VM it should look like it is working with - OP-TEE directly. - -## Limitations ## - -Virtualization support is in experimental state and it have some -limitations, user should be aware of. - -### Platforms support ### - -Only Armv8 architecture is supported. There is no hard restriction, -but currently Armv7-specific code (like MMU or thread manipulation) -just know nothing about virtualization. - -Only one platform has been tested right now and that is QEMU-V8 (aka -qemu that emulates Arm Versatile Express with Armv8 architecture). - -Support for Rcar Gen3 should be added soon. - -### Static VMs guest count and memory allocation ### - -Currently, a user should configure maximum number of guests. OP-TEE will -split memory into equal chunks, so every VM will have the same amount of -memory. For example, if you have 6MB for your TAs, you can set -`CFG_VIRT_GUEST_COUNT` to 3 and every VM would be able to use 2MB -maximum, even if there is no other VMs running. - -This is okay for embedded setups when you know exact number and roles -of VMs, but can be inconvenient for server applications. - -Also, it is impossible to configure amount of memory available for a -given VM. Every VM instance will have exactly the same amount of memory. - -### Sharing hardware resources and PTAs ### - -Right now only HW that can be used by multiple VMs simultaneously is -serial console, used for logging. Devices like HW crypto accelerators, -secure storage devices (e.g. external flash storage, accessed directly -from OP-TEE) and others are not supported right now. Drivers -should be made virtualization-aware before they can be used with -virtualization extensions. - -Every VM will have own PTA states, which is a good thing in most -cases. But if one wants PTA to have some global state that is shared -between VMs, he need to write PTA accordingly. - -### No compatibility with "normal" mode ### - -OP-TEE built with `CFG_VIRTUALIZATION=y` will not work without -a hypervisor, because before executing any standard SMC, -`OPTEE_SMC_VM_CREATED` must be called. - -This can be inconvenient if one wants to switch between virtualized -and non-virtualized environment frequently. On other hand, it is not a -big deal in a production environment. - -Simple workaround can be made for this: if OP-TEE receives standard -SMC prior to `OPTEE_SMC_VM_CREATED`, it implicitly creates VM context -and uses it for all subsequent calls. - -## Implementation details ## - -OP-TEE as a whole can be split into two entities. Let us call them -"nexus" and TEE. Nexus is a core part of OP-TEE that takes care of low -level things: SMC handling, memory management, threads creation and so -on. TEE is a part that does the actual job: handles requests, loads -TAs, executes them, and so on. - -So, it is natural to have one nexus instance and multiple instances of -TEE, one TEE instance per registered VM. This can be done either -explicitly or implicitly. - -Explicit way is to move TEE state in some sort of structure and make -all code to access fields of this structure. Something like `struct -task_struct` and `current` in linux kernel. Then it is easy to -allocate such structure for every VM instance. But this approach -basically requires to rewrite all OP-TEE code. - -Implicit way is to have banked memory sections for TEE/VM instances. -So memory layout can look something like that: - - +-------------------------------------------------+ - | Nexus: .nex_bss, .nex_data, ... | - +-------------------------------------------------+ - | TEE states | - | | - | VM1 TEE state | VM 2 TEE state | VM 3 TEE state | - | .bss, .data | .bss, .data | .bss, .data, | - +-------------------------------------------------+ - -This approach requires no changes in TEE code and requires some -changes into nexus code. So, idea that Nexus state resides in separate -sections (`.nex_data`, `.nex_bss`, `.nex_nozi`, `.nex_heap` and -others) and is always mapped. - -TEE state resides in standard sections (like `.data`, `.bss`, `.heap` -and so on). There is a separate set of this sections for every VM -registered and Nexus maps them only when it receives call from -corresponding VM. - -As Nexus and TEE have separate heaps, `bget` allocator was extended to -work with multiple "contexts". `malloc()`, `free()` with friends work -with one context. `nex_malloc()` (and other `nex_` functions) were -added. They use different context, so now Nexus can use separate heap, -which is always mapped into OP-TEE address space. When virtualization -support is disabled, all those `nex_` functions are defined to point -to standard `malloc()` counterparts. - -To change memory mappings in run-time, in MMU code we have added a new -entity, named "partition", which is defined by `struct -mmu_partition`. It holds information about all page-tables, so the whole -MMU mapping can be switched by one write to `TTBR` register. - -There is the default partition, it holds MMU state when there is no VM -context active, so no TEE state is mapped. When OP-TEE receives -`OPTEE_SMC_VM_CREATED` call, it copies default partition into new one -and then maps sections with TEE data. This is done by -`prepare_memory_map()` function in `virtualization.c`. - -When OP-TEE receives STD call it checks that the supplied VM ID is -valid and then activates corresponding MMU partition, so TEE code can -access its own data. This is basically how virtualization support is -working.