lib/mbedtls_errors/README.md
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 with mbedtls_strerror this is built using the include
files in ../mbedtlsdo-mp.sh - shell script to produce mp_mbedtls_errors.ctester.c - simple C main to test mp_mbedtls_errors.c locally on a dev boxdo-test.sh - shell script to produce mp_mbedtls_errors.c and compile the tester appdo-esp32.sh - shell script to produce esp32_mbedtls_errors.c -- see belowIn 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.
mp_mbedtls_errors.c into the build
(the Makefiles do this automatically). Note that Perl is not needed for routine MicroPython
builds.do-mp.sh script should be run to
re-generate mp_mbedtls_errors.c.tester app should be run if changes to the string handling in error.fmt are made:
it tests that there is not an off-by-one error in the string copying/appending, etc.mbedtls_strerror error strings define MBEDTLS_ERROR_C in the build.