blob: 7326a3ebe51897cacaeef961c95ff8f00c37219c [file] [log] [blame] [view]
Ron Eldorc7acb912017-10-30 17:03:57 +02001README for Mbed TLS
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +02002===================
3
Dan Handley20579b72020-02-19 09:34:20 +00004Mbed TLS is a C library that implements cryptographic primitives, X.509 certificate manipulation and the SSL/TLS and DTLS protocols. Its small code footprint makes it suitable for embedded systems.
5
Gilles Peskine8b13d262020-03-09 19:18:15 +01006Mbed TLS includes a reference implementation of the [PSA Cryptography API](#psa-cryptography-api). This is currently a preview for evaluation purposes only.
Gilles Peskineda5abbf2020-03-09 18:51:37 +01007
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +02008Configuration
9-------------
10
Bence Szépkútibb0cfeb2021-05-28 09:42:25 +020011Mbed TLS should build out of the box on most systems. Some platform specific options are available in the fully documented configuration file `include/mbedtls/mbedtls_config.h`, which is also the place where features can be selected. This file can be edited manually, or in a more programmatic way using the Python 3 script `scripts/config.py` (use `--help` for usage instructions).
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020012
Ronald Cronee63b642025-08-29 16:14:19 +020013Compiler options can be set using conventional environment variables such as `CC` and `CFLAGS`.
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020014
Gilles Peskineb05d89d2020-03-09 19:23:51 +010015We provide some non-standard configurations focused on specific use cases in the `configs/` directory. You can read more about those in `configs/README.txt`
16
Gilles Peskinea10cbda2020-03-09 19:21:51 +010017Documentation
18-------------
19
Dave Rodgman7c195162022-10-12 16:27:14 +010020The main Mbed TLS documentation is available via [ReadTheDocs](https://mbed-tls.readthedocs.io/).
21
Dave Rodgman12cee782022-10-31 15:34:11 +000022Documentation for the PSA Cryptography API is available [on GitHub](https://arm-software.github.io/psa-api/crypto/).
Gilles Peskinea10cbda2020-03-09 19:21:51 +010023
24To generate a local copy of the library documentation in HTML format, tailored to your compile-time configuration:
25
Dave Rodgman2f458d32021-06-03 17:58:13 +0100261. Make sure that [Doxygen](http://www.doxygen.nl/) is installed.
Ronald Cronee63b642025-08-29 16:14:19 +0200271. Run `mkdir /path/to/build_dir && cd /path/to/build_dir`
281. Run `cmake /path/to/mbedtls/source`
291. Run `make apidoc`
Gilles Peskinea10cbda2020-03-09 19:21:51 +0100301. Browse `apidoc/index.html` or `apidoc/modules.html`.
31
Manuel Pégourié-Gonnard80c02af2021-02-25 12:34:58 +010032For other sources of documentation, see the [SUPPORT](SUPPORT.md) document.
33
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020034Compiling
35---------
36
Ronald Cronee63b642025-08-29 16:14:19 +020037We use CMake to configure and drive our build process. Three libraries are built: libtfpsacrypto, libmbedx509, and libmbedtls. Note that libmbedtls depends on libmbedx509 and libtfpsacrypto, and libmbedx509 depends on libtfpsacrypto. As a result, some linkers will expect flags to be in a specific order, for example the GNU linker wants `-lmbedtls -lmbedx509 -ltfpsacrypto`.
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020038
Gilles Peskine67698702020-03-09 19:30:08 +010039### Tool versions
40
Ronald Cronee63b642025-08-29 16:14:19 +020041You need the following tools to build the library:
Gilles Peskine67698702020-03-09 19:30:08 +010042
Ronald Cronee63b642025-08-29 16:14:19 +020043* CMake 3.10.2 or later.
44* A build system that CMake supports.
Bence Szépkútiae0d97a2024-03-12 17:23:01 +010045* A C99 toolchain (compiler, linker, archiver). We actively test with GCC 5.4, Clang 3.8, Arm Compiler 6, IAR 8 and Visual Studio 2017. More recent versions should work. Slightly older versions may work.
Gilles Peskine95834692023-07-03 17:59:37 +020046* Python 3.8 to generate the test code. Python is also needed to integrate PSA drivers and to build the development branch (see next section).
Gilles Peskined05a5882021-05-17 23:57:42 +020047* Perl to run the tests, and to generate some source files in the development branch.
Dave Rodgman2f458d32021-06-03 17:58:13 +010048* Doxygen 1.8.11 or later (if building the documentation; slightly older versions should work).
Gilles Peskined05a5882021-05-17 23:57:42 +020049
Gilles Peskine0c3f0e92024-03-04 15:54:54 +010050### Git usage
51
Gilles Peskine93b28222024-03-13 13:08:57 +010052The `development` branch and the `mbedtls-3.6` long-term support branch of Mbed TLS use a [Git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules#_cloning_submodules) ([framework](https://github.com/Mbed-TLS/mbedtls-framework)). This is not needed to merely compile the library at a release tag. This is not needed to consume a release archive (zip or tar).
Gilles Peskine0c3f0e92024-03-04 15:54:54 +010053
Gilles Peskined05a5882021-05-17 23:57:42 +020054### Generated source files in the development branch
55
56The source code of Mbed TLS includes some files that are automatically generated by scripts and whose content depends only on the Mbed TLS source, not on the platform or on the library configuration. These files are not included in the development branch of Mbed TLS, but the generated files are included in official releases. This section explains how to generate the missing files in the development branch.
57
58The following tools are required:
59
60* Perl, for some library source files and for Visual Studio build files.
Gilles Peskine95834692023-07-03 17:59:37 +020061* Python 3.8 and some Python packages, for some library source files, sample programs and test data. To install the necessary packages, run:
Gilles Peskine87485a32021-11-17 19:17:03 +010062 ```
Gilles Peskine429e9012023-03-07 20:40:04 +010063 python3 -m pip install --user -r scripts/basic.requirements.txt
Gilles Peskine87485a32021-11-17 19:17:03 +010064 ```
Gilles Peskine429e9012023-03-07 20:40:04 +010065 Depending on your Python installation, you may need to invoke `python` instead of `python3`. To install the packages system-wide, omit the `--user` option.
Gilles Peskined05a5882021-05-17 23:57:42 +020066* A C compiler for the host platform, for some test data.
67
David Horstmann24e33882025-08-19 16:56:25 +010068The scripts that generate the configuration-independent files will look for a host C compiler in the following places (in order of preference):
69
701. The `HOSTCC` environment variable. This can be used if `CC` is pointing to a cross-compiler.
712. The `CC` environment variable.
723. An executable called `cc` in the current path.
73
74Note: If you have multiple toolchains installed, it is recommended to set `CC` or `HOSTCC` to the intended host compiler before generating the files.
Gilles Peskined05a5882021-05-17 23:57:42 +020075
76Any of the following methods are available to generate the configuration-independent files:
77
Ronald Cronee63b642025-08-29 16:14:19 +020078* On non-Windows systems, when not cross-compiling, CMake generates the required files automatically.
79* Run `framework/scripts/make_generated_files.py` to generate all the configuration-independent files.
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020080
81### CMake
82
Ronald Cronee63b642025-08-29 16:14:19 +020083In order to build the libraries using CMake in a separate directory (recommended), just enter at the command line:
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020084
Manuel Pégourié-Gonnardb89c4722017-12-26 12:52:53 +010085 mkdir /path/to/build_dir && cd /path/to/build_dir
86 cmake /path/to/mbedtls_source
Carlos Gomes Martinho227a9db2020-04-03 09:42:57 +020087 cmake --build .
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020088
89In order to run the tests, enter:
90
Carlos Gomes Martinho227a9db2020-04-03 09:42:57 +020091 ctest
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020092
Ron Eldor276bd002019-01-17 17:51:55 -060093The test suites need Python to be built and Perl to be executed. If you don't have one of these installed, you'll want to disable the test suites with:
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020094
Manuel Pégourié-Gonnardb89c4722017-12-26 12:52:53 +010095 cmake -DENABLE_TESTING=Off /path/to/mbedtls_source
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +020096
97If you disabled the test suites, but kept the programs enabled, you can still run a much smaller set of tests with:
98
99 programs/test/selftest
100
101To configure CMake for building shared libraries, use:
102
Manuel Pégourié-Gonnardb89c4722017-12-26 12:52:53 +0100103 cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On /path/to/mbedtls_source
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200104
Ronald Cronee63b642025-08-29 16:14:19 +0200105There are many different build types available with CMake. Most of them are available for gcc and clang, though some are compiler-specific:
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200106
Gilles Peskineb21a0852018-03-09 14:24:36 +0100107- `Release`. This generates the default code without any unnecessary information in the binary files.
108- `Debug`. This generates debug information and disables optimization of the code.
109- `Coverage`. This generates code coverage information in addition to debug information.
110- `ASan`. This instruments the code with AddressSanitizer to check for memory errors. (This includes LeakSanitizer, with recent version of gcc and clang.) (With recent version of clang, this mode also instruments the code with UndefinedSanitizer to check for undefined behaviour.)
111- `ASanDbg`. Same as ASan but slower, with debug information and better stack traces.
112- `MemSan`. This instruments the code with MemorySanitizer to check for uninitialised memory reads. Experimental, needs recent clang on Linux/x86\_64.
113- `MemSanDbg`. Same as MemSan but slower, with debug information, better stack traces and origin tracking.
114- `Check`. This activates the compiler warnings that depend on optimization and treats all warnings as errors.
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200115
Ronald Cronee63b642025-08-29 16:14:19 +0200116Switching build types in CMake is simple. For debug mode, enter at the command line:
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200117
Manuel Pégourié-Gonnardb89c4722017-12-26 12:52:53 +0100118 cmake -D CMAKE_BUILD_TYPE=Debug /path/to/mbedtls_source
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200119
120To list other available CMake options, use:
121
122 cmake -LH
123
Manuel Pégourié-Gonnard976dd162018-01-02 10:49:46 +0100124Note that, with CMake, you can't adjust the compiler or its flags after the
Manuel Pégourié-Gonnardb89c4722017-12-26 12:52:53 +0100125initial invocation of cmake. This means that `CC=your_cc make` and `make
126CC=your_cc` will *not* work (similarly with `CFLAGS` and other variables).
127These variables need to be adjusted when invoking cmake for the first time,
128for example:
129
130 CC=your_cc cmake /path/to/mbedtls_source
131
132If you already invoked cmake and want to change those settings, you need to
133remove the build directory and create it again.
134
135Note that it is possible to build in-place; this will however overwrite the
Ronald Cronee63b642025-08-29 16:14:19 +0200136legacy Makefiles still used for testing purposes (see
137`scripts/tmp_ignore_makefiles.sh` if you want to prevent `git status` from
138showing them as modified). In order to do so, from the Mbed TLS source
139directory, use:
Manuel Pégourié-Gonnardb89c4722017-12-26 12:52:53 +0100140
141 cmake .
142 make
143
144If you want to change `CC` or `CFLAGS` afterwards, you will need to remove the
145CMake cache. This can be done with the following command using GNU find:
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200146
147 find . -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} +
Manuel Pégourié-Gonnardb89c4722017-12-26 12:52:53 +0100148
Manuel Pégourié-Gonnard976dd162018-01-02 10:49:46 +0100149You can now make the desired change:
Manuel Pégourié-Gonnardb89c4722017-12-26 12:52:53 +0100150
151 CC=your_cc cmake .
152 make
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200153
Manuel Pégourié-Gonnard05c92712017-12-28 09:14:47 +0100154Regarding variables, also note that if you set CFLAGS when invoking cmake,
155your value of CFLAGS doesn't override the content provided by cmake (depending
156on the build mode as seen above), it's merely prepended to it.
157
Chris Kayd259e342021-03-25 16:03:25 +0000158#### Consuming Mbed TLS
159
160Mbed TLS provides a package config file for consumption as a dependency in other
161CMake projects. You can include Mbed TLS's CMake targets yourself with:
162
163 find_package(MbedTLS)
164
165If prompted, set `MbedTLS_DIR` to `${YOUR_MBEDTLS_INSTALL_DIR}/cmake`. This
166creates the following targets:
167
Ronald Cron8126a682024-10-25 17:34:23 +0200168- `MbedTLS::tfpsacrypto` (Crypto library)
Chris Kayd259e342021-03-25 16:03:25 +0000169- `MbedTLS::mbedtls` (TLS library)
170- `MbedTLS::mbedx509` (X509 library)
171
172You can then use these directly through `target_link_libraries()`:
173
174 add_executable(xyz)
175
176 target_link_libraries(xyz
177 PUBLIC MbedTLS::mbedtls
Ronald Cron8126a682024-10-25 17:34:23 +0200178 MbedTLS::tfpsacrypto
Chris Kayd259e342021-03-25 16:03:25 +0000179 MbedTLS::mbedx509)
180
181This will link the Mbed TLS libraries to your library or application, and add
182its include directories to your target (transitively, in the case of `PUBLIC` or
183`INTERFACE` link libraries).
184
Jaeden Amero41421c42019-06-20 17:26:29 +0100185#### Mbed TLS as a subproject
186
Manuel Pégourié-Gonnarda4b99a22020-03-19 12:36:02 +0100187Mbed TLS supports being built as a CMake subproject. One can
Jaeden Amero41421c42019-06-20 17:26:29 +0100188use `add_subdirectory()` from a parent CMake project to include Mbed TLS as a
189subproject.
190
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200191### Microsoft Visual Studio
192
Bence Szépkútiae0d97a2024-03-12 17:23:01 +0100193The build files for Microsoft Visual Studio are generated for Visual Studio 2017.
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200194
Ron Eldor276bd002019-01-17 17:51:55 -0600195The solution file `mbedTLS.sln` contains all the basic projects needed to build the library and all the programs. The files in tests are not generated and compiled, as these need Python and perl environments as well. However, the selftest program in `programs/test/` is still available.
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200196
Gilles Peskined05a5882021-05-17 23:57:42 +0200197In the development branch of Mbed TLS, the Visual Studio solution files need to be generated first as described in [“Generated source files in the development branch”](#generated-source-files-in-the-development-branch).
198
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200199Example programs
200----------------
201
Gilles Peskinecf63f592020-03-09 19:24:18 +0100202We've included example programs for a lot of different features and uses in [`programs/`](programs/README.md).
203Please note that the goal of these sample programs is to demonstrate specific features of the library, and the code may need to be adapted to build a real-world application.
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200204
205Tests
206-----
207
Ronald Croncf1af5a2024-07-12 19:32:58 +0200208Mbed TLS includes an elaborate test suite in `tests/` that initially requires Python to generate the tests files (e.g. `test\_suite\_ssl.c`). These files are generated from a `function file` (e.g. `suites/test\_suite\_ssl.function`) and a `data file` (e.g. `suites/test\_suite\_ssl.data`). The `function file` contains the test functions. The `data file` contains the test cases, specified as parameters that will be passed to the test function.
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200209
210For machines with a Unix shell and OpenSSL (and optionally GnuTLS) installed, additional test scripts are available:
211
212- `tests/ssl-opt.sh` runs integration tests for various TLS options (renegotiation, resumption, etc.) and tests interoperability of these options with other implementations.
213- `tests/compat.sh` tests interoperability of every ciphersuite with other implementations.
214- `tests/scripts/test-ref-configs.pl` test builds in various reduced configurations.
Andrzej Kurek29c002e2022-10-24 10:59:55 -0400215- `tests/scripts/depends.py` test builds in configurations with a single curve, key exchange, hash, cipher, or pkalg on.
Bence Szépkútibb0cfeb2021-05-28 09:42:25 +0200216- `tests/scripts/all.sh` runs a combination of the above tests, plus some more, with various build options (such as ASan, full `mbedtls_config.h`, etc).
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200217
Dave Rodgman0da8c512024-03-18 15:25:53 +0000218Instead of manually installing the required versions of all tools required for testing, it is possible to use the Docker images from our CI systems, as explained in [our testing infrastructure repository](https://github.com/Mbed-TLS/mbedtls-test/blob/main/README.md#quick-start).
Manuel Pégourié-Gonnard59626b62022-12-15 10:08:26 +0100219
Ron Eldorc7acb912017-10-30 17:03:57 +0200220Porting Mbed TLS
Andres AG1a6e9c32016-12-28 15:38:05 +0000221----------------
222
Simon Butcher6965f772018-07-23 23:57:07 +0100223Mbed TLS can be ported to many different architectures, OS's and platforms. Before starting a port, you may find the following Knowledge Base articles useful:
Andres AG1a6e9c32016-12-28 15:38:05 +0000224
Dave Rodgman7c195162022-10-12 16:27:14 +0100225- [Porting Mbed TLS to a new environment or OS](https://mbed-tls.readthedocs.io/en/latest/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS/)
226- [What external dependencies does Mbed TLS rely on?](https://mbed-tls.readthedocs.io/en/latest/kb/development/what-external-dependencies-does-mbedtls-rely-on/)
227- [How do I configure Mbed TLS](https://mbed-tls.readthedocs.io/en/latest/kb/compiling-and-building/how-do-i-configure-mbedtls/)
Andres AG1a6e9c32016-12-28 15:38:05 +0000228
Minos Galanakisc42cadb2021-12-09 13:16:54 +0000229Mbed TLS is mostly written in portable C99; however, it has a few platform requirements that go beyond the standard, but are met by most modern architectures:
230
Minos Galanakisd7547fc2021-12-09 15:06:16 +0000231- Bytes must be 8 bits.
minosgalanakis0f2a46c2021-12-09 15:38:39 +0000232- All-bits-zero must be a valid representation of a null pointer.
Minos Galanakisd7547fc2021-12-09 15:06:16 +0000233- Signed integers must be represented using two's complement.
234- `int` and `size_t` must be at least 32 bits wide.
235- The types `uint8_t`, `uint16_t`, `uint32_t` and their signed equivalents must be available.
Dave Rodgman28f424f2022-12-01 09:49:44 +0000236- Mixed-endian platforms are not supported.
Dave Rodgman37296a42023-02-10 15:39:22 +0000237- SIZE_MAX must be at least as big as INT_MAX and UINT_MAX.
Minos Galanakisc42cadb2021-12-09 13:16:54 +0000238
Gilles Peskineda5abbf2020-03-09 18:51:37 +0100239PSA cryptography API
240--------------------
241
Dave Rodgman12cee782022-10-31 15:34:11 +0000242### PSA API
Gilles Peskineda5abbf2020-03-09 18:51:37 +0100243
244Arm's [Platform Security Architecture (PSA)](https://developer.arm.com/architectures/security-architectures/platform-security-architecture) is a holistic set of threat models, security analyses, hardware and firmware architecture specifications, and an open source firmware reference implementation. PSA provides a recipe, based on industry best practice, that allows security to be consistently designed in, at both a hardware and firmware level.
245
Dave Rodgman12cee782022-10-31 15:34:11 +0000246The [PSA cryptography API](https://arm-software.github.io/psa-api/crypto/) provides access to a set of cryptographic primitives. It has a dual purpose. First, it can be used in a PSA-compliant platform to build services, such as secure boot, secure storage and secure communication. Second, it can also be used independently of other PSA components on any platform.
Gilles Peskineda5abbf2020-03-09 18:51:37 +0100247
248The design goals of the PSA cryptography API include:
249
250* The API distinguishes caller memory from internal memory, which allows the library to be implemented in an isolated space for additional security. Library calls can be implemented as direct function calls if isolation is not desired, and as remote procedure calls if isolation is desired.
251* The structure of internal data is hidden to the application, which allows substituting alternative implementations at build time or run time, for example, in order to take advantage of hardware accelerators.
Ronald Croncf56a0a2020-08-04 09:51:30 +0200252* All access to the keys happens through key identifiers, which allows support for external cryptoprocessors that is transparent to applications.
Gilles Peskineda5abbf2020-03-09 18:51:37 +0100253* The interface to algorithms is generic, favoring algorithm agility.
254* The interface is designed to be easy to use and hard to accidentally misuse.
255
256Arm welcomes feedback on the design of the API. If you think something could be improved, please open an issue on our Github repository. Alternatively, if you prefer to provide your feedback privately, please email us at [`mbed-crypto@arm.com`](mailto:mbed-crypto@arm.com). All feedback received by email is treated confidentially.
257
258### PSA implementation in Mbed TLS
259
260Mbed TLS includes a reference implementation of the PSA Cryptography API.
Manuel Pégourié-Gonnard2dc436d2022-06-08 10:09:51 +0200261However, it does not aim to implement the whole specification; in particular it does not implement all the algorithms.
Gilles Peskine8b13d262020-03-09 19:18:15 +0100262
Gilles Peskine17467c52023-04-25 21:14:31 +0200263### PSA drivers
Gilles Peskineda5abbf2020-03-09 18:51:37 +0100264
Gilles Peskine17467c52023-04-25 21:14:31 +0200265Mbed TLS supports drivers for cryptographic accelerators, secure elements and random generators. This is work in progress. Please note that the driver interfaces are not fully stable yet and may change without notice. We intend to preserve backward compatibility for application code (using the PSA Crypto API), but the code of the drivers may have to change in future minor releases of Mbed TLS.
Gilles Peskineda5abbf2020-03-09 18:51:37 +0100266
David Horstmanne3567292025-03-13 16:53:27 +0000267Please see the [PSA driver example and guide](https://github.com/Mbed-TLS/TF-PSA-Crypto/blob/development/docs/psa-driver-example-and-guide.md) for information on writing a driver.
Gilles Peskine17467c52023-04-25 21:14:31 +0200268
Dan Handleyc76a5452020-02-18 17:58:20 +0000269License
270-------
271
Dave Rodgman8ce51702023-11-02 17:36:49 +0000272Unless specifically indicated otherwise in a file, Mbed TLS 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.
Dan Handleyc76a5452020-02-18 17:58:20 +0000273
Aditya Deshpandef100f002023-03-21 14:49:31 +0000274### Third-party code included in Mbed TLS
Tom Cosgrovef884e602023-07-26 11:44:45 +0100275
Ronald Cronbdd8df82024-07-02 07:49:55 +0200276This project contains code from other projects. This code is located within the `tf-psa-crypto/drivers/` directory. The original license text is included within project subdirectories, where it differs from the normal Mbed TLS license, and/or in source files. The projects are listed below:
Aditya Deshpande8d99f252023-02-20 17:30:52 +0000277
Ronald Cronbdd8df82024-07-02 07:49:55 +0200278* `drivers/everest/`: Files stem from [Project Everest](https://project-everest.github.io/) and are distributed under the Apache 2.0 license.
279* `drivers/p256-m/p256-m/`: Files have been taken from the [p256-m](https://github.com/mpg/p256-m) repository. The code in the original repository is distributed under the Apache 2.0 license. It is distributed in Mbed TLS under a dual Apache-2.0 OR GPL-2.0-or-later license with permission from the author.
Aditya Deshpande8d99f252023-02-20 17:30:52 +0000280
Manuel Pégourié-Gonnardf851f142015-09-03 13:29:45 +0200281Contributing
282------------
283
Dan Handleyc76a5452020-02-18 17:58:20 +0000284We gratefully accept bug reports and contributions from the community. Please see the [contributing guidelines](CONTRIBUTING.md) for details on how to do this.
Gilles Peskineb6b15b22021-09-30 14:10:06 +0200285
286Contact
287-------
288
289* To report a security vulnerability in Mbed TLS, please email <mbed-tls-security@lists.trustedfirmware.org>. For more information, see [`SECURITY.md`](SECURITY.md).
Dave Rodgman017a1992022-03-31 14:07:01 +0100290* To report a bug or request a feature in Mbed TLS, please [file an issue on GitHub](https://github.com/Mbed-TLS/mbedtls/issues/new/choose).
Gilles Peskineb6b15b22021-09-30 14:10:06 +0200291* Please see [`SUPPORT.md`](SUPPORT.md) for other channels for discussion and support about Mbed TLS.