# Mbed TLS framework

This repository contains a version-independent build and test framework for [TF-PSA-Crypto](https://github.com/Mbed-TLS/TF-PSA-Crypto) and [Mbed TLS](https://github.com/Mbed-TLS/mbedtls-framework).

You need this repository as a Git submodule in a branch of one of the above repositories if:

* You want to build, test or contribute to Mbed TLS 3.6.0 or above, and you are working from a snapshot of a Git commit on a development branch.
* You want to build, test or contribute to TF-PSA-Crypto, and you are working from a snapshot of a Git commit on a development branch.

You do not need this repository if:

* You are working with Mbed TLS 2.28.
* You want to build a release of Mbed TLS and run its unit tests.

Contributing
------------

We gratefully accept bug reports and contributions from the community. Please see the [contributing guidelines](CONTRIBUTING.md) for details on how to do this.

License
-------

Unless specifically indicated otherwise in a file, Mbed TLS framework files are provided under a dual [Apache-2.0](https://spdx.org/licenses/Apache-2.0.html) OR [GPL-2.0-or-later](https://spdx.org/licenses/GPL-2.0-or-later.html) license. See the [LICENSE](LICENSE) file for the full text of these licenses, and [the 'License and Copyright' section in the contributing guidelines](CONTRIBUTING.md#License-and-Copyright) for more information.

