Design
======
Sans-IO APIs
............
Both the QUIC and the HTTP/3 APIs follow the `sans I/O`_ pattern, leaving
actual I/O operations to the API user. This approach has a number of
advantages including making the code testable and allowing integration with
different concurrency models.
TLS and encryption
..................
TLS 1.3
+++++++
``aioquic`` features a minimal TLS 1.3 implementation built upon the
`cryptography`_ library. This is because QUIC requires some APIs which are
currently unavailable in mainstream TLS implementations such as OpenSSL:
- the ability to extract traffic secrets
- the ability to operate directly on TLS messages, without using the TLS
record layer
Header protection and payload encryption
++++++++++++++++++++++++++++++++++++++++
QUIC makes extensive use of cryptographic operations to protect QUIC packet
headers and encrypt packet payloads. These operations occur for every single
packet and are a determining factor for performance. For this reason, they
are implemented as a C extension linked to `OpenSSL`_.
.. _sans I/O: https://sans-io.readthedocs.io/
.. _cryptography: https://cryptography.io/
.. _OpenSSL: https://www.openssl.org/