This directory contains source code and tools to rework the Mbedtls error strings for
micropython to use less space. In short, instead of storing and printing something like
"SSL - Our own certificate(s) is/are too large to send in an SSL message" it prints
the name of the error #define, which would be "MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE" in
this case, and only stores SSL_CERTIFICATE_TOO_LARGE
in flash. The exact Mbedtls error
defines are used because they're easy to search for to find more detailed information.
Mbedtls defines a specific format for error value #defines and
includes a Perl script to gather all MBEDTLS_ERR
defines from includes files together with
english error text. From that the Perl script generates mbedtls_strerror()
. The files in this
directory modify this process to produce a more space efficient error lookup table with
shorter error strings.
The files are as follows:
generate_errors.diff
- diff for original mbedtls perl scripterror.fmt
- modified code template for MicroPythonmp_mbedtls_errors.c
- source file withmbedtls_strerror
this is built using the include files in../mbedtls
do-mp.sh
- shell script to producemp_mbedtls_errors.c
tester.c
- simple C main to testmp_mbedtls_errors.c
locally on a dev boxdo-test.sh
- shell script to producemp_mbedtls_errors.c
and compile thetester
appdo-esp32.sh
- shell script to produceesp32_mbedtls_errors.c
-- see below
In order not to store multiple copies of mbedtls_errors.c
(https://github.com/micropython/micropython/pull/5819#discussion_r445528006)
it is assumed that all ports use the same version of mbedtls with the same error #defines.
This is true as of MP v1.13, and ESP-IDF versions 3.3.2 and 4.0.1. If anything changes in the
future the do-esp32.sh
script can be used to generate an esp32-specific version.
- To build MicroPython all that is needed is to include the
mp_mbedtls_errors.c
into the build (the Makefiles do this automatically). Note that Perl is not needed for routine MicroPython builds. - When a new version of Mbedtls is pulled-in the
do-mp.sh
script should be run to re-generatemp_mbedtls_errors.c
. - The
tester
app should be run if changes to the string handling inerror.fmt
are made: it tests that there is not an off-by-one error in the string copying/appending, etc. - To include
mbedtls_strerror
error strings defineMBEDTLS_ERROR_C
in the build.