diff --git a/CHANGELOG.md b/CHANGELOG.md index a5d8140..adeb3aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,11 +10,14 @@ this crate adheres to [Semantic Versioning](https://semver.org/). The initial release: SOCKS5 (RFC 1928) as a produced resource on alkcall channels — the `-D` flavor as a first-class protocol crate, -over alkcall 0.8.0. The defining posture: the protocol never binds a +over alkcall 0.8.1. The defining posture: the protocol never binds a port; kernel binds exist only as explicit, feature-gated assembly -shapes. Composed against by the alktunnels 0.2.0 graduation (the +shapes. Composed against by the alktunnels 0.2.1 graduation (the direct op + the bind-first/forwarded flow power the composed -providers). +providers). Fuzzing adopted (the `fuzz/` workspace — excluded from +the published package) over the crate's two attacker-reachable +parsers: the ASSOCIATE datagram codec and the RFC 1928 handshake; +campaigns clean, no crate bugs. ### Added @@ -77,7 +80,7 @@ providers). listener (`ProducerDoor` — vanilla clients dial it, each accepted connection is served via `serve_socks5_over`; the ADR-014 idle-first-byte window + max-sessions cap knobs). -- **The `composed` feature (ADR-008/009)** — the alktunnels 0.2.0 +- **The `composed` feature (ADR-008/009)** — the alktunnels 0.2.1 composed providers: `direct_egress` (the direct-op egress — a lazy destination→tunnel table, `DEFAULT_MAX_TUNNELS` bounded), and `bindfirst_accept` + `register_forwarded_serving` (the BIND accept @@ -91,6 +94,18 @@ providers). reference checkout (`tests/rfc1928-differential.rs`), the protocol-core integration suite (`tests/core-integration.rs`), and the assembly-layer integration suite (`tests/assembly-integration.rs`). +- **Fuzzing (`fuzz/` workspace, `docs/research/fuzzing.md`)** — the + alkcall §5 pattern adopted for this crate's two attacker-reachable + parser classes: `datagram_codec` (the `wire` codec — no-panic, + infallible decode, size bound, re-frame round-trip, the + `retained_bytes` bound) and `rfc1928_codec` (the RFC 1928 handshake + state machine, fed attacker bytes from both protocol directions), + plus `params_parse`. Invariant logic lives in `fuzz/shared/` — a + stable-toolchain crate replayed as plain `cargo test` (the corpus + replay is the fuzz gate). 129 committed seeds; detached campaigns + clean (`oom/timeout/crash: 0/0/0`, coverage saturated). The one + diagnostic added: `DatagramReader::retained_bytes()`. `fuzz/` is + excluded from the workspace and from the published package. [`Socks5ChannelSession`]: https://docs.rs/alksocks/latest/alksocks/consumer/struct.Socks5ChannelSession.html [`AssociateSession`]: https://docs.rs/alksocks/latest/alksocks/consumer/struct.AssociateSession.html diff --git a/README.md b/README.md index cf9d565..1177463 100644 --- a/README.md +++ b/README.md @@ -215,12 +215,16 @@ default build is wasm-clean by construction. ## Version 0.1 -The first release rides alkcall 0.8.0 (the establisher reply -projection is not consumed yet — the open op's params are trivial) and -alktunnels 0.2.0 (the direct op + the bind-first/forwarded flow power -the composed providers). Wire-stable surface: the `alk/socks5` ALPN, -the `channels/socks5/sub` open op with `{}` params, and the two scope -constants — all pinned by ADRs 001–014. +The first release rides alkcall 0.8.1 (the establisher reply +projection is not consumed yet — the open op's params are trivial; +the 0.8.1 duplicate-adopt fix is directly relevant to the consumer +open/adopt paths) and alktunnels 0.2.1 (the direct op + the +bind-first/forwarded flow power the composed providers). The +`fuzz/` workspace (excluded from the published package) fuzzes the +two attacker-reachable parser classes — the ASSOCIATE datagram codec +and the RFC 1928 handshake state machine. Wire-stable surface: the +`alk/socks5` ALPN, the `channels/socks5/sub` open op with `{}` params, +and the two scope constants — all pinned by ADRs 001–014. ## Verification diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index 5a72032..b0b95ea 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -120,7 +120,7 @@ protocol layer; crate-level vocabulary is producer/consumer. ``` alksocks (default — wasm-clean) -├── alkcall 0.8.0 (core types: Connection, ProtocolHandler, BiStream, +├── alkcall 0.8.1 (core types: Connection, ProtocolHandler, BiStream, │ AuthContext, Identity, AccessControl, OwnershipProvider; │ channels: ChannelCore/ChannelClient, │ register_openable_with_establisher, pump_bidi, @@ -135,7 +135,7 @@ alksocks (local feature) — non-wasm by design the first-party local backends + front doors alksocks (composed feature) -└── adds: alktunnels 0.2.0 (the direct op egress; the bind-first +└── adds: alktunnels 0.2.1 (the direct op egress; the bind-first listen accept; ADR-008's composed providers) — its default crate is wasm-clean; the composed providers use only the ungated channels surface (verify with the wasm check) @@ -156,7 +156,7 @@ differential-testing behavioral reference. |---------|----------|------| | *(default)* | the RFC 1928 core (`src/rfc1928/`, ADR-013 — codecs, typestate), wire codec, open-op spec, the three seams' traits/types, producer + consumer session types — protocol only; zero kernel-net code, wasm-clean by construction | yes | | `local` | the crate's first-party local backends: TCP dial, UDP egress socket, BIND `TcpListener` accept, the front doors (consumer + producer local shapes); brings `tokio/net` + `socket2` into the graph | no (build error on wasm, the alktty posture) | -| `composed` | the composed providers over alktunnels 0.2.0: direct-op egress (lazy destination→tunnel table), bind-first listen accept — adds the alktunnels dep | yes (alktunnels' default crate is wasm-clean; the composed providers use only its ungated channels surface — verify with the wasm check at implementation) | +| `composed` | the composed providers over alktunnels 0.2.1: direct-op egress (lazy destination→tunnel table), bind-first listen accept — adds the alktunnels dep | yes (alktunnels' default crate is wasm-clean; the composed providers use only its ungated channels surface — verify with the wasm check at implementation) | ## Module Map