Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
986b7ad
fix: harden E2EE core security
shellrow Jun 20, 2026
9bad15d
feat: add HTTP protected-context binding
shellrow Jun 20, 2026
35016ab
feat: add datagram API and QUIC datagram adapter
shellrow Jun 20, 2026
692325a
feat: add foctet-wasm WASM/TypeScript SDK
shellrow Jun 21, 2026
bd09f90
feat: add async/durable replay store
shellrow Jun 21, 2026
079009b
feat: add generic DatagramTransport trait and SecureDatagramChannel
shellrow Jun 21, 2026
109d995
feat: add Workers context-binding parity
shellrow Jun 21, 2026
50c464b
fix: bump vulnerable deps and add audit CI job
shellrow Jun 21, 2026
0f15ea0
test: add control-flag confusion and rekey-collision regression tests
shellrow Jun 21, 2026
7694536
feat: add optional selected-header binding for HTTP requests
shellrow Jun 21, 2026
808d125
feat: add ready-made Axum extractor for protected requests
shellrow Jun 21, 2026
c7a27dd
feat: add raw-UDP DatagramTransport adapter
shellrow Jun 21, 2026
ac132aa
feat: redact secrets in Debug and use constant-time key comparison
shellrow Jun 21, 2026
a335c0a
feat: add centralized ProtocolLimits for stream transports
shellrow Jun 21, 2026
3dffedc
feat: add message transport shape
shellrow Jun 21, 2026
c02df30
Impl missing features
shellrow Jun 21, 2026
c15e789
feat: support Durable Object replay E2E
shellrow Jun 21, 2026
56fce59
Update review
shellrow Jun 22, 2026
57a882c
chore: harden release gates, deprecate stateless HTTP request APIs
shellrow Jun 22, 2026
bde1ee8
feat: raw-WebSocket message transport, futures-path handshake timeout
shellrow Jun 22, 2026
1bf5e6b
feat: add framed FoctetSession over WebAssembly
shellrow Jun 23, 2026
3672a16
feat: add datagram framing mode to FoctetSession
shellrow Jun 24, 2026
74cf500
feat: channel binding + make TrafficKeys non-Clone via KeyHandle
shellrow Jun 25, 2026
ef928eb
feat: add typed AuthenticatedPeer result from the handshake
shellrow Jun 26, 2026
6acc469
feat: pluggable HandshakeSigner for hardware-backed identities
shellrow Jun 26, 2026
99fd455
feat: opt-in anti-amplification limit for the raw-UDP datagram adapter
shellrow Jun 26, 2026
ab934ab
feat: impl DH ratchet rekey
shellrow Jun 26, 2026
d29e030
feat: streaming HTTP bodies with per-chunk AEAD
shellrow Jun 27, 2026
ff1c251
feat: rekey-over-datagram via control channel and retained keys
shellrow Jun 27, 2026
eb03c58
feat: browser WebSocket message transport
shellrow Jun 27, 2026
56c1663
test: lock the DH-ratchet rekey key schedule with a canonical vector
shellrow Jun 28, 2026
cf8778a
feat: turn-key axum/Workers streaming-body wiring
shellrow Jun 28, 2026
e631aa4
feat: unified SecureChannel shape trait + cross-shape conformance suite
shellrow Jun 28, 2026
934cb69
test: add fuzz targets
shellrow Jun 28, 2026
cf3829f
test: update examples
shellrow Jun 28, 2026
d7a6c40
fix: make WASM FoctetSession work at runtime
shellrow Jun 28, 2026
3c18ff2
chore: fix rustfmt drift in axum_body_echo_server example
shellrow Jun 28, 2026
a4435b0
test: make the WASM browser harness self-contained
shellrow Jun 28, 2026
6545f23
test: make transport/http examples runnable across two processes
shellrow Jun 29, 2026
4fdba25
fix: prevent duplicate sends when the transport flush suspends
shellrow Jul 2, 2026
a95ef57
test: run the conformance suite over real transport backends
shellrow Jul 2, 2026
bf90d50
test: run foctet-wasm tests in headless Chrome in CI
shellrow Jul 2, 2026
0ad34eb
test: run foctet-wasm tests in headless Chrome in CI
shellrow Jul 2, 2026
5a5c8a8
docs: add threat model and operational policies
shellrow Jul 2, 2026
42a7cc2
docs: update changelog, TODO, and the test runbook
shellrow Jul 2, 2026
beee54e
test: add seeded, time-budgeted fuzzing
shellrow Jul 2, 2026
65b06fe
feat: expand protocol limits, add observability hooks
shellrow Jul 4, 2026
ab2f9e1
feat: connection-level handshake rate limiting
shellrow Jul 4, 2026
0e01ca0
feat: carry the in-session DH-ratchet rekey over the FoctetSession API
shellrow Jul 4, 2026
00e5146
feat: browser WebTransport datagram adapter
shellrow Jul 4, 2026
8e659a8
test: verify canonical vectors with an independent non-Rust implement…
shellrow Jul 4, 2026
99ea032
ci: add Miri, independent vector verification, and browser-WT wasm gates
shellrow Jul 4, 2026
6ffba3a
docs: normative spec pass, operational guidance, and status sync
shellrow Jul 4, 2026
2a758c9
test: make in-session rekey observable in quinn_split
shellrow Jul 4, 2026
16c74d7
test: turn-key route-substitution / expiry negative tests for axum
shellrow Jul 4, 2026
c488862
test: add raw-UDP two-process datagram driver with anti-amplification
shellrow Jul 4, 2026
4224126
test: browser WebSocket interop
shellrow Jul 4, 2026
18a6ade
test: browser WebTransport interop
shellrow Jul 4, 2026
5ba4242
chore: update tests.md
shellrow Jul 4, 2026
c1750cd
feat: add key-rotation keyring for HTTP/Workers openers
shellrow Jul 5, 2026
60c1eab
test: add end-to-end streaming-upload verification for axum
shellrow Jul 5, 2026
ecbea6a
feat: add record-bound storage envelopes for zero-knowledge backends
shellrow Jul 5, 2026
3a8e89e
Update docs
shellrow Jul 5, 2026
6f25798
chore: remove unused internal docs
shellrow Jul 5, 2026
dcf1a66
chore: remove completed review note
shellrow Jul 5, 2026
4479997
chore: update docs
shellrow Jul 5, 2026
00f9f3f
chore: update docs
shellrow Jul 5, 2026
a8d23c8
feat(wasm): expose HTTP protected context bindings
shellrow Jul 5, 2026
8130cf6
chore: update docs
shellrow Jul 5, 2026
e069255
chore: bump version to 0.3.0
shellrow Jul 5, 2026
07ed00a
chore: update CHANGELOG
shellrow Jul 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 123 additions & 11 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,137 @@ on:
env:
CARGO_TERM_COLOR: always

# Third-party actions are pinned to immutable commit SHAs (with the human-readable
# tag in a trailing comment) so a re-tagged release cannot silently change CI.

jobs:
build-and-test:
fmt:
name: Formatting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Setup stable toolchain
run: |
rustup toolchain install stable --profile minimal --component rustfmt
rustup default stable
- name: Check formatting
run: cargo fmt --all -- --check

lint:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Setup stable toolchain
run: |
rustup toolchain install stable --profile minimal --component clippy
rustup default stable
rustup target add wasm32-unknown-unknown
- name: Lint
run: cargo clippy --workspace --all-features -- -D warnings
- name: Workspace tests
run: cargo test --workspace --verbose
- name: Wasm check
run: cargo check -p foctet-http --features workers --target wasm32-unknown-unknown
- name: Lint (all features)
run: cargo clippy --workspace --all-features --locked -- -D warnings
- name: Wasm check (workers)
run: cargo check -p foctet-http --features workers --target wasm32-unknown-unknown --locked
- name: Wasm check (foctet-wasm)
run: cargo check -p foctet-wasm --target wasm32-unknown-unknown --locked
- name: Wasm check (browser WebSocket transport)
run: cargo check -p foctet-transport --no-default-features --features transport-websock --target wasm32-unknown-unknown --locked
- name: Wasm check (browser WebTransport datagram adapter)
run: cargo check -p foctet-transport --no-default-features --features transport-webtrans-browser --target wasm32-unknown-unknown --locked

test:
name: Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Setup stable toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable
- name: Workspace tests (all features, locked)
run: cargo test --workspace --all-features --locked --verbose
- name: Feature combinations (foctet-core)
run: |
cargo test -p foctet-core --no-default-features
cargo test -p foctet-core --no-default-features --features runtime-futures
cargo test -p foctet-core --no-default-features --features runtime-tokio
cargo test -p foctet-core --no-default-features --locked
cargo test -p foctet-core --no-default-features --features runtime-futures --locked
cargo test -p foctet-core --no-default-features --features runtime-tokio --locked

wasm-browser-test:
name: WASM browser tests (headless Chrome)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Setup stable toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable
rustup target add wasm32-unknown-unknown
- name: Install wasm-pack
run: cargo install wasm-pack --locked
- name: Run in-browser tests (headless Chrome)
# Use the runner's preinstalled chromedriver, which matches the
# preinstalled Chrome; wasm-pack's auto-downloaded driver can mismatch.
run: |
export CHROMEDRIVER="$CHROMEWEBDRIVER/chromedriver"
wasm-pack test --headless --chrome foctet-wasm

miri:
name: Miri (foctet-core protocol logic)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Setup nightly toolchain with Miri
run: |
rustup toolchain install nightly --profile minimal --component miri
rustup default nightly
- name: Run Miri on the parser / state-machine / crypto-framing modules
# The full suite (handshakes, Ed25519) is impractically slow under Miri;
# this filtered set covers the modules where memory-safety subtleties
# live (replay bitmap shifting, TLV/control/frame parsing, sequence
# allocation, AEAD framing) and finishes in a couple of minutes.
run: cargo miri test -p foctet-core --no-default-features --locked -- replay:: payload:: limits:: control:: sequence:: crypto:: frame::

interop-verify:
name: Independent vector verification (Node)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
# Verifies the canonical test vectors with an implementation that shares
# no code with the Rust workspace (@noble crypto + a from-spec decoder),
# catching systematic bugs the Rust-derived artifacts would reproduce.
- name: Verify vectors independently
working-directory: interop
run: |
npm ci
npm test

msrv:
name: MSRV (1.88)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Setup MSRV toolchain
run: |
rustup toolchain install 1.88.0 --profile minimal
rustup default 1.88.0
- name: Check workspace builds on MSRV
run: cargo check --workspace --all-features --locked

security-audit:
name: Advisory scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
# Vulnerability/advisory scan via the official RustSec action (prebuilt
# cargo-audit, no compile-from-source).
- uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 # v2.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}

cargo-deny:
name: License & source policy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- uses: EmbarkStudios/cargo-deny-action@d6d27f1b02f0c07f9db6ffc34e7871bba5ab5816 # v2.0.9
with:
command: check
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,9 @@ Cargo.lock

# macOS
*.DS_Store

# WASM / npm build artifacts
foctet-wasm/pkg/
foctet-wasm/pkg-node/
foctet-wasm/pkg-web/
node_modules/
Loading