/quiche

🥧 Savoury implementation of the QUIC transport protocol

Primary LanguageRustBSD 2-Clause "Simplified" LicenseBSD-2-Clause

quiche.png

quiche is an implementation of the QUIC transport protocol as specified by the IETF. It provides a low level API for processing QUIC packets and handling connection state. The application is responsible for providing I/O (e.g. sockets handling) as well as an event loop with support for timers.

A live QUIC server based on quiche is available at https://quic.tech:4433/ to be used for experimentation.

Note that it is very experimental and unstable software, and many features are still in development.

Status

  • [x] QUIC draft-17
  • [x] Version Negotiation
  • [x] TLS 1.3 handshake (using BoringSSL)
  • [x] Stream API
  • [x] Flow control
  • [x] Connection close
  • [x] Loss detection and recovery
  • [x] Congestion control
  • [ ] Key update
  • [x] Stateless retry
  • [x] Unidirectional streams
  • [ ] Session resumption
  • [ ] 0-RTT
  • [ ] Stateless reset
  • [ ] Connection migration

Building

You can build quiche using cargo:

$ cargo build --examples

As well as run its tests:

$ cargo test

Note that BoringSSL, used to implement QUIC's cryptographic handshake based on TLS, needs to be built and linked to quiche. This is done automatically when building quiche using cargo, but requires the cmake and go commands to be available during the build process.

In alternative you can use your own custom build of BoringSSL by configuring the BoringSSL directory with the QUICHE_BSSL_PATH environment variable:

$ QUICHE_BSSL_PATH="/path/to/boringssl" cargo build --examples

Copyright (C) 2018, Cloudflare, Inc.

Copyright (C) 2018, Alessandro Ghedini

See COPYING for the license.