chore: rename project quicnprotochat -> quicproquo (binaries: qpq)
Rename the entire workspace:
- Crate packages: quicnprotochat-{core,proto,server,client,gui,p2p,mobile} -> quicproquo-*
- Binary names: quicnprotochat -> qpq, quicnprotochat-server -> qpq-server,
quicnprotochat-gui -> qpq-gui
- Default files: *-state.bin -> qpq-state.bin, *-server.toml -> qpq-server.toml,
*.db -> qpq.db
- Environment variable prefix: QUICNPROTOCHAT_* -> QPQ_*
- App identifier: chat.quicnproto.gui -> chat.quicproquo.gui
- Proto package: quicnprotochat.bench -> quicproquo.bench
- All documentation, Docker, CI, and script references updated
HKDF domain-separation strings and P2P ALPN remain unchanged for
backward compatibility with existing encrypted state and wire protocol.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# Crate Responsibilities
|
||||
|
||||
The quicnprotochat workspace contains six crates. The main four (proto, core,
|
||||
The quicproquo workspace contains six crates. The main four (proto, core,
|
||||
server, client) follow strict layering rules; each owns one concern and depends
|
||||
only on the crates below it. The workspace also includes **quicnprotochat-gui**
|
||||
(Tauri desktop app) and **quicnprotochat-p2p** (P2P endpoint resolution). This
|
||||
only on the crates below it. The workspace also includes **quicproquo-gui**
|
||||
(Tauri desktop app) and **quicproquo-p2p** (P2P endpoint resolution). This
|
||||
page documents what each crate provides, what it explicitly avoids, and how the
|
||||
crates relate to one another.
|
||||
|
||||
@@ -13,7 +13,7 @@ crates relate to one another.
|
||||
|
||||
```text
|
||||
┌──────────────────────────┐
|
||||
│ quicnprotochat-client │
|
||||
│ quicproquo-client │
|
||||
│ (CLI, QUIC client, │
|
||||
│ GroupMember orchestr.) │
|
||||
└─────────┬───────┬────────┘
|
||||
@@ -21,7 +21,7 @@ crates relate to one another.
|
||||
┌───────┘ └────────┐
|
||||
▼ ▼
|
||||
┌────────────────────────┐ ┌────────────────────────┐
|
||||
│ quicnprotochat-core │ │ quicnprotochat-server │
|
||||
│ quicproquo-core │ │ quicproquo-server │
|
||||
│ (crypto, MLS, │ │ (QUIC listener, │
|
||||
│ hybrid KEM) │ │ NodeService RPC, │
|
||||
│ │ │ storage) │
|
||||
@@ -30,7 +30,7 @@ crates relate to one another.
|
||||
│ ┌───────────────────┘
|
||||
▼ ▼
|
||||
┌────────────────────────┐
|
||||
│ quicnprotochat-proto │
|
||||
│ quicproquo-proto │
|
||||
│ (Cap'n Proto schemas, │
|
||||
│ codegen, helpers) │
|
||||
└────────────────────────┘
|
||||
@@ -42,7 +42,7 @@ serialisation. The server and client crates both depend on core and proto.
|
||||
|
||||
---
|
||||
|
||||
## quicnprotochat-core
|
||||
## quicproquo-core
|
||||
|
||||
**Role:** Pure cryptographic logic. No network I/O. No async runtime
|
||||
dependency.
|
||||
@@ -70,12 +70,12 @@ dependency.
|
||||
|
||||
`ed25519-dalek`, `openmls`, `openmls_rust_crypto`,
|
||||
`openmls_traits`, `tls_codec`, `ml-kem`, `x25519-dalek`, `chacha20poly1305`,
|
||||
`hkdf`, `sha2`, `zeroize`, `capnp`, `quicnprotochat-proto`, `tokio`,
|
||||
`hkdf`, `sha2`, `zeroize`, `capnp`, `quicproquo-proto`, `tokio`,
|
||||
`serde`, `bincode`, `serde_json`, `thiserror`.
|
||||
|
||||
---
|
||||
|
||||
## quicnprotochat-proto
|
||||
## quicproquo-proto
|
||||
|
||||
**Role:** Cap'n Proto schema definitions, compile-time code generation, and
|
||||
pure-synchronous serialisation helpers. This crate is the single source of truth
|
||||
@@ -110,7 +110,7 @@ for the wire format.
|
||||
|
||||
---
|
||||
|
||||
## quicnprotochat-server
|
||||
## quicproquo-server
|
||||
|
||||
**Role:** Network-facing server binary. Accepts QUIC + TLS 1.3 connections,
|
||||
dispatches Cap'n Proto RPC calls to `NodeServiceImpl`, and persists state to
|
||||
@@ -143,19 +143,19 @@ is handled by `spawn_local`.
|
||||
|
||||
### What this crate does NOT do
|
||||
|
||||
- No direct crypto operations (it delegates to `quicnprotochat-core` types
|
||||
- No direct crypto operations (it delegates to `quicproquo-core` types
|
||||
for fingerprinting and storage only).
|
||||
- No MLS processing -- all payloads are opaque byte strings.
|
||||
|
||||
### Key dependencies
|
||||
|
||||
`quicnprotochat-core`, `quicnprotochat-proto`, `quinn`, `quinn-proto`,
|
||||
`quicproquo-core`, `quicproquo-proto`, `quinn`, `quinn-proto`,
|
||||
`rustls`, `rcgen`, `capnp`, `capnp-rpc`, `tokio`, `tokio-util`, `dashmap`,
|
||||
`sha2`, `clap`, `tracing`, `anyhow`, `thiserror`, `bincode`, `serde`.
|
||||
|
||||
---
|
||||
|
||||
## quicnprotochat-client
|
||||
## quicproquo-client
|
||||
|
||||
**Role:** CLI client binary. Connects to the server over QUIC + TLS 1.3,
|
||||
orchestrates MLS group operations via `GroupMember`, and persists identity and
|
||||
@@ -167,7 +167,7 @@ group state to disk.
|
||||
|-------------------------|-------------|
|
||||
| `connect_node` | Establishes a QUIC/TLS connection, opens a bidirectional stream, and bootstraps a `capnp-rpc` `RpcSystem` to obtain a `node_service::Client`. |
|
||||
| CLI subcommands (`clap`)| `ping`, `register`, `fetch-key`, `demo-group`, `register-state`, `create-group`, `invite`, `join`, `send`, `recv`. |
|
||||
| `GroupMember` usage | The client creates a `GroupMember` (from `quicnprotochat-core`), calls `generate_key_package` / `create_group` / `add_member` / `join_group` / `send_message` / `receive_message`. |
|
||||
| `GroupMember` usage | The client creates a `GroupMember` (from `quicproquo-core`), calls `generate_key_package` / `create_group` / `add_member` / `join_group` / `send_message` / `receive_message`. |
|
||||
| State persistence | `StoredState` holds `identity_seed` (32 bytes) and optional serialised `MlsGroup`. A companion `.ks` file stores the `DiskKeyStore` with HPKE init private keys. |
|
||||
| Auth context | `ClientAuth` bundles an optional bearer token and device ID. Passed to every RPC via the `Auth` struct in `node.capnp`. |
|
||||
|
||||
@@ -194,7 +194,7 @@ group state to disk.
|
||||
|
||||
### Key dependencies
|
||||
|
||||
`quicnprotochat-core`, `quicnprotochat-proto`, `quinn`, `quinn-proto`,
|
||||
`quicproquo-core`, `quicproquo-proto`, `quinn`, `quinn-proto`,
|
||||
`rustls`, `capnp`, `capnp-rpc`, `tokio`, `tokio-util`, `clap`, `sha2`,
|
||||
`serde`, `bincode`, `anyhow`, `thiserror`, `tracing`.
|
||||
|
||||
@@ -204,8 +204,8 @@ group state to disk.
|
||||
|
||||
| Crate | Role |
|
||||
|-------------------------|------|
|
||||
| **quicnprotochat-gui** | Tauri 2 desktop application; provides a GUI on top of the client/core stack. |
|
||||
| **quicnprotochat-p2p** | P2P endpoint publish/resolve; used by the server and clients for direct peer discovery. |
|
||||
| **quicproquo-gui** | Tauri 2 desktop application; provides a GUI on top of the client/core stack. |
|
||||
| **quicproquo-p2p** | P2P endpoint publish/resolve; used by the server and clients for direct peer discovery. |
|
||||
|
||||
These crates are optional for building and running the server and CLI client.
|
||||
|
||||
@@ -220,12 +220,12 @@ These crates are optional for building and running the server and CLI client.
|
||||
4. **client** depends on **core** and **proto**. It does not depend on server.
|
||||
5. **server** and **client** never depend on each other. They communicate
|
||||
exclusively via the Cap'n Proto RPC wire protocol.
|
||||
6. **quicnprotochat-gui** and **quicnprotochat-p2p** are optional; they depend
|
||||
6. **quicproquo-gui** and **quicproquo-p2p** are optional; they depend
|
||||
on client/core/proto as needed and do not change the core layering.
|
||||
|
||||
This layering ensures that:
|
||||
|
||||
- Crypto code can be tested in isolation (`cargo test -p quicnprotochat-core`).
|
||||
- Crypto code can be tested in isolation (`cargo test -p quicproquo-core`).
|
||||
- Schema changes propagate automatically through codegen.
|
||||
- The server binary contains no client-side MLS orchestration logic.
|
||||
- The client binary contains no server-side storage or listener logic.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# End-to-End Data Flow
|
||||
|
||||
This page traces the three core data flows through the quicnprotochat system:
|
||||
This page traces the three core data flows through the quicproquo system:
|
||||
registration, group creation, and message exchange. Each flow is illustrated
|
||||
with an ASCII sequence diagram showing control-plane (AS) and data-plane (DS)
|
||||
traffic.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Architecture Overview
|
||||
|
||||
quicnprotochat is an end-to-end encrypted group messaging system built in Rust.
|
||||
quicproquo is an end-to-end encrypted group messaging system built in Rust.
|
||||
This page describes the high-level architecture: the services that compose the
|
||||
system, the dual-key cryptographic model, and how the pieces fit together.
|
||||
|
||||
@@ -28,11 +28,11 @@ connection lifecycle, and the long-polling `fetchWait` mechanism.
|
||||
|
||||
## Identity Key Model
|
||||
|
||||
Each quicnprotochat client holds a single Ed25519 signing keypair that serves
|
||||
Each quicproquo client holds a single Ed25519 signing keypair that serves
|
||||
as its long-term identity:
|
||||
|
||||
```text
|
||||
quicnprotochat Key Model
|
||||
quicproquo Key Model
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ │
|
||||
│ Ed25519 signing keypair (MLS identity) │
|
||||
@@ -135,10 +135,10 @@ The implementation is split across four workspace crates:
|
||||
|
||||
| Crate | Role |
|
||||
|----------------------------|-------------------------------------------------------------------|
|
||||
| `quicnprotochat-core` | Crypto primitives, MLS state machine, hybrid KEM |
|
||||
| `quicnprotochat-proto` | Cap'n Proto schemas, codegen, and serialisation helpers |
|
||||
| `quicnprotochat-server` | QUIC listener, NodeService RPC, storage |
|
||||
| `quicnprotochat-client` | QUIC client, CLI subcommands, state persistence |
|
||||
| `quicproquo-core` | Crypto primitives, MLS state machine, hybrid KEM |
|
||||
| `quicproquo-proto` | Cap'n Proto schemas, codegen, and serialisation helpers |
|
||||
| `quicproquo-server` | QUIC listener, NodeService RPC, storage |
|
||||
| `quicproquo-client` | QUIC client, CLI subcommands, state persistence |
|
||||
|
||||
See [Crate Responsibilities](crate-responsibilities.md) for a full breakdown
|
||||
and dependency diagram.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Protocol Stack
|
||||
|
||||
quicnprotochat layers three protocol stages to move a plaintext message from
|
||||
quicproquo layers three protocol stages to move a plaintext message from
|
||||
sender to recipient with end-to-end encryption, typed RPC framing, and
|
||||
authenticated transport. This page describes each layer and provides a
|
||||
comparison table.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Service Architecture
|
||||
|
||||
The quicnprotochat server exposes a single **NodeService** RPC endpoint that
|
||||
The quicproquo server exposes a single **NodeService** RPC endpoint that
|
||||
combines Authentication and Delivery operations. This page documents the RPC
|
||||
interface, per-connection lifecycle, storage model, long-polling mechanism, and
|
||||
authentication context.
|
||||
@@ -234,10 +234,10 @@ The server binary is configured via CLI flags or environment variables:
|
||||
|
||||
| Flag | Env var | Default | Description |
|
||||
|----------------|----------------------------|----------------------|-------------|
|
||||
| `--listen` | `QUICNPROTOCHAT_LISTEN` | `0.0.0.0:7000` | QUIC listen address (host:port). |
|
||||
| `--data-dir` | `QUICNPROTOCHAT_DATA_DIR` | `data` | Directory for persisted KeyPackages, delivery queues, and hybrid keys. |
|
||||
| `--tls-cert` | `QUICNPROTOCHAT_TLS_CERT` | `data/server-cert.der` | Path to TLS certificate (DER). Auto-generated if missing. |
|
||||
| `--tls-key` | `QUICNPROTOCHAT_TLS_KEY` | `data/server-key.der` | Path to TLS private key (DER). Auto-generated if missing. |
|
||||
| `--listen` | `QPQ_LISTEN` | `0.0.0.0:7000` | QUIC listen address (host:port). |
|
||||
| `--data-dir` | `QPQ_DATA_DIR` | `data` | Directory for persisted KeyPackages, delivery queues, and hybrid keys. |
|
||||
| `--tls-cert` | `QPQ_TLS_CERT` | `data/server-cert.der` | Path to TLS certificate (DER). Auto-generated if missing. |
|
||||
| `--tls-key` | `QPQ_TLS_KEY` | `data/server-key.der` | Path to TLS private key (DER). Auto-generated if missing. |
|
||||
|
||||
If the TLS certificate or key files do not exist at startup, the server
|
||||
auto-generates a self-signed certificate for `localhost`, `127.0.0.1`, and
|
||||
|
||||
Reference in New Issue
Block a user