Repository navigation
chapulin 0.1.0
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-nonblockingandquic-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=aesgcmwithAES=hw,runtimeorextern, 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.