Repository navigation
colibri 0.1.0: h11, h2 and h3, client and server, with TLS through chapulin
The first release. h11, h2 and h3 are built, each as a client and a server, and the library's tls module runs TLS 1.3 through chapulin.
What is in it
- h11: pipelining,
chunked, andgzipanddeflatebodies decoded into a buffer the caller passes. - h2: HPACK with the dynamic table.
- h3 and QUIC: QPACK with the dynamic table, Retry, resumption, key update, loss recovery and congestion control.
tls: sessions for h11 and h2, and QUIC's handshake and packet protection. chapulin holds every key. A program that linkstlsdefines chapulin'sch_rand_bytesandch_assert_fail.- No I/O and no clock. colibri parses octets the caller has read, writes into buffers the caller owns, and takes the time as a value.
- No allocation: the caller owns every struct and buffer. Assertions stay on in release builds.
Checked against
- h2spec 2.6.0: 144 of 146, in cleartext and over TLS. The other 2 test an RFC 7540 rule that RFC 9113 dropped.
- h3spec 0.1.13: 49 examples, 0 failures.
- The QUIC Interop Runner against quic-go, with colibri as the client and as the server: every case passes but
ecn, which the runner reports quic-go does not support. - curl, nghttp, Go, nghttpd and h2o over h2; Go's
net/http, h2o and curl over h11; aioquic over h3 and hq-interop in both directions; ls-qpack for QPACK.
docs/design.md §8 records each check: what ran, on what machine, and what it printed.
Install
zig fetch --save git+https://github.com/c4milo/colibri#v0.1.0docs/usage.md shows how a program drives each protocol.