Cameleeringsimoom

simoom / Use cases / Audited builds

Supply-chain-sensitive and audited environments

An HTTP server with nothing to vet but itself

A bank, a medical device maker or a defence supplier has to review every third-party dependency it ships and track each one for vulnerabilities. Every crate is a vendor. simoom has none: no crates.io dependencies at all, not even for tests. The TLS stack, QUIC, HTTP/2, HTTP/3, the compression codecs and the event loops are all in one repository, under one licence.

0crates.io dependencies, including dev-dependencies
1crate with unsafe code (simoom-sys), each block with a SAFETY comment
0desyncs in HTTP Garden and in the request-smuggling test
146/146h2spec 2.6.0, in 30 consecutive runs

What "zero dependencies" means here

The workspace's dependency tree is simoom's own crates and the Rust standard library. Calls into the operating system go through extern declarations in simoom-sys; SIMD goes through core::arch with runtime detection and a scalar fallback.

In the repository

  • TLS 1.3 and its cryptography: X25519, P-256, RSA, AES-GCM; P-384, Ed25519 and ChaCha20-Poly1305 as an option.
  • QUIC v1, HTTP/3 and QPACK; HTTP/2 and HPACK; HTTP/1.1.
  • DEFLATE, gzip, Brotli and zstd codecs.
  • Event loops for epoll, io_uring, IOCP and kqueue.

Rules the build enforces

  • Every crate except simoom-sys starts with #![forbid(unsafe_code)].
  • Zero warnings from cargo build --workspace --all-targets.
  • Tests are hermetic: loopback only, never the internet.
  • Certificate verification can't be turned off.

The only exception is the competitor programs under bench/competitors/: separate projects outside the workspace, with their own lock files, that exist only to be benchmarked against. The cryptography is planned to move into ksar, a shared crypto family for Cameleering projects; today it lives in simoom-tls.

What has been tested

Parsing follows RFC 9110, 9112, 9113, 9114 and 9204 strictly: a request whose framing is ambiguous is refused, and every limit has a default.

checkresult
h2spec 2.6.0146/146, in 30 consecutive runs
HTTP Garden, as an origin next to nginx, Apache httpd, h2o, hyper, gunicorn and Go0 desyncs, 0 dangerous discrepancies
Request-smuggling test behind nginx 1.24 and haproxy 2.8165 streams, 0 desyncs; accepted 0 requests that both refused
QUIC Interop Runner against ngtcp2, quiche and quic-go clients54 of 58 supported pairs (failures: 0-RTT, refused by design; ECN, not implemented)
testssl.sh 3.2.1no vulnerabilities found
TLS interop: OpenSSL, curl with OpenSSL, Python ssl, gnutls-cli, Schannel28/28, 31/31, 3/3
Fuzzingstd-only mutation fuzzing of every parser for 2 h 40 min; coverage-guided fuzzing of HTTP/1.1
Test suite777 tests on Windows, 791 on Linux (WSL2), zero warnings

Versions, commands and details: security. Limits and defaults: limits and security.

What has not been done

No independent audit yet

All of the testing above was done by the project itself. The TLS stack and its cryptography have not had an independent security audit. If your policy requires audited TLS, rustls has had independent audits.

A young project

simoom is at version 0.1.0 and the API can still change. It has one maintainer. Vulnerabilities are reported privately through GitHub security advisories; the process is in security.

Common questions

Is there a Rust web server with zero dependencies?

Yes. simoom's workspace has no crates.io dependencies, not even dev-dependencies. HTTP/1.1, HTTP/2, HTTP/3, QUIC, TLS 1.3, compression and the event loops are all in its repository.

Does simoom use OpenSSL, ring or rustls?

No. It has its own TLS 1.3 and cryptography written with only the Rust standard library, so there is no C code and no third-party crypto crate in the build.

Where is the unsafe code?

Only in simoom-sys, which holds the operating-system calls, SIMD scanning and crypto intrinsics. Every unsafe block there has a SAFETY comment. Every other crate forbids unsafe code.

Has simoom been independently audited?

Not yet. It passes h2spec, HTTP Garden, a request-smuggling test, the QUIC Interop Runner and testssl.sh, and its parsers are fuzzed, but all of that was done by the project itself.

Is the HTTP server safe against request smuggling?

Parsing is strict per RFC 9112 and 9113, ambiguous framing is refused and the connection is closed after a framing error. Behind nginx and haproxy, 165 test streams gave 0 desyncs, and HTTP Garden found 0 desyncs.

Read it before you ship it

The source, the security model and the test results are all public.