Skip to content

chapulin 0.1.0

Choose a tag to compare

@c4milo c4milo released this 01 Oct 08:13
· 244 commits to main since this release

chapulin 0.1.0, the first tagged release. A TLS 1.3 library in C11 for devices with a few kB of SRAM: a client, a server (ROLE=server), and the TLS layer under a QUIC stack. No heap, libc only.

  • Transports: TRANSPORT=tcp-blocking, tcp-nonblocking and quic-nonblocking, with QUIC versions 1 and 2 (RFC 9001, RFC 9369).
  • Suites: TLS_CHACHA20_POLY1305_SHA256 in every build. TLS_AES_128_GCM_SHA256 and TLS_AES_256_GCM_SHA384 under SUITE=aesgcm with AES=hw, runtime or extern, and the builder's constant-time statement.
  • Key exchange: x25519 or X25519MLKEM768 for device clients. The webpki client and the server hold X25519MLKEM768, x25519 and secp256r1.
  • Trust: a pinned RSA-PSS or ECDSA P-256 key, a pinned CA key, or a public chain against caller-supplied anchors with SPKI pins and RFC 7250 raw public keys.
  • Protocol: PSK resumption, HelloRetryRequest, KeyUpdate and record_size_limit. A Zig module and a header-only C++ wrapper.
  • Speed: a 16 KiB record on an M1 Pro takes 2.5 µs for an AES-128-GCM seal (OpenSSL 2.1) and 11.8 µs for ChaCha20-Poly1305 with CHACHA=vector WIDEMUL=native (OpenSSL 9.4). docs/performance.md has every table.
  • Verification: CBMC harnesses for every module, Lean specs with a differential driver, RFC and Wycheproof vectors, and mutation tests. docs/verification.md states what is proved and what is only tested.
  • Stability: in 0.x the API and the build variables may change between minor versions. Breaking commits carry ! in the log.