Skip to content

colibri 0.1.0: h11, h2 and h3, client and server, with TLS through chapulin

Choose a tag to compare

@c4milo c4milo released this 27 Sep 15:45
· 875 commits to main since this release

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, and gzip and deflate bodies 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 links tls defines chapulin's ch_rand_bytes and ch_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.0

docs/usage.md shows how a program drives each protocol.