Skip to content

1.2.0

Choose a tag to compare

@maxgerhardt maxgerhardt released this 05 Sep 10:23
· 95 commits to main since this release

HTTPS, served by the board

EthernetServerSecure and WebServerSecure — the same WebServer routes over
TLS. Mutual TLS too: requireClientCert(true) with a client CA, so the board
can refuse anyone without a certificate it trusts.

It is a build option, board_build.tls = mbedtls-server, because the server
half of mbedTLS is 45 KB of flash that a sketch fetching an HTTPS endpoint
never enters. The client-only board_build.tls = mbedtls is unchanged.

Verified on hardware against Python's ssl module — an implementation sharing
no code with mbedTLS — including the negative cases: a client trusting the
wrong CA is refused, a wrong hostname is refused, a client with no certificate
is refused under mutual TLS.

Link-time optimization, on by default

Worth 3–7% of flash: 2.2 KB off the smallest sketch, 24 KB off a TLS one.
board_build.lto = disabled turns it off, and the IDE has the same menu on the
same default.

Two bugs the new hardware tests found

HTTPClient truncated small responses to nothing. A body that arrived in its
own TCP segment just after the headers found the reader already gone: status
200, empty body. Large bodies were fine, which is what hid it.

WebServer leaked its client on every request. It deleted through a
Client*, and nothing in the Client/Stream/Print chain has a virtual
destructor, so no destructor ran at all.

Also

The Arduino IDE build gained a link-time-optimization menu, and TinyUSB's
buffers are now placed by section rather than by object filename — which is
what makes that placement mean the same thing under both build systems.
docs/hazards.md records what that investigation turned up: the belief that
this part's USB controller cannot reach DTCM, which this core was built around,
is not true.

382 tests: 109 host-side, 273 on hardware.