Rename project to quicnprotochat
This commit is contained in:
45
README.md
45
README.md
@@ -1,4 +1,4 @@
|
||||
# noiseml
|
||||
# quicnprotochat
|
||||
|
||||
> End-to-end encrypted group messaging over **Noise_XX + MLS** (RFC 9420), written in Rust.
|
||||
|
||||
@@ -38,9 +38,9 @@ key agreement across any number of participants. Messages are framed with
|
||||
## Repository layout
|
||||
|
||||
```
|
||||
noiseml/
|
||||
quicnprotochat/
|
||||
├── crates/
|
||||
│ ├── noiseml-core/ # Crypto primitives, Noise transport, MLS group state machine
|
||||
│ ├── quicnprotochat-core/ # Crypto primitives, Noise transport, MLS group state machine
|
||||
│ │ ├── src/codec.rs # LengthPrefixedCodec — Tokio Encoder + Decoder
|
||||
│ │ ├── src/keypair.rs # NoiseKeypair — X25519 static key, zeroize-on-drop
|
||||
│ │ ├── src/identity.rs # IdentityKeypair — Ed25519 identity + MLS Signer
|
||||
@@ -48,11 +48,11 @@ noiseml/
|
||||
│ │ ├── src/noise.rs # handshake_initiator / handshake_responder / NoiseTransport
|
||||
│ │ └── src/group.rs # GroupMember — full MLS group lifecycle
|
||||
│ │
|
||||
│ ├── noiseml-proto/ # Cap'n Proto schemas + generated types + serde helpers
|
||||
│ ├── quicnprotochat-proto/ # Cap'n Proto schemas + generated types + serde helpers
|
||||
│ │ └── schemas/ → # (symlinked to workspace root schemas/)
|
||||
│ │
|
||||
│ ├── noiseml-server/ # Authentication Service (AS) + Delivery Service (DS) binary
|
||||
│ └── noiseml-client/ # CLI client (ping, register, fetch-key, …)
|
||||
│ ├── quicnprotochat-server/ # Authentication Service (AS) + Delivery Service (DS) binary
|
||||
│ └── quicnprotochat-client/ # CLI client (ping, register, fetch-key, …)
|
||||
│
|
||||
└── schemas/
|
||||
├── envelope.capnp # Top-level wire envelope (MsgType discriminant + payload)
|
||||
@@ -147,27 +147,46 @@ cargo test --workspace
|
||||
**Start the server** (AS on :7000, DS on :7001):
|
||||
|
||||
```bash
|
||||
cargo run -p noiseml-server
|
||||
cargo run -p quicnprotochat-server
|
||||
# or with custom ports:
|
||||
cargo run -p noiseml-server -- --listen 0.0.0.0:7000 --ds-listen 0.0.0.0:7001
|
||||
cargo run -p quicnprotochat-server -- --listen 0.0.0.0:7000 --ds-listen 0.0.0.0:7001
|
||||
```
|
||||
|
||||
**Client commands:**
|
||||
|
||||
```bash
|
||||
# Check connectivity
|
||||
cargo run -p noiseml-client -- ping
|
||||
cargo run -p quicnprotochat-client -- ping
|
||||
|
||||
# Generate a fresh identity + KeyPackage, upload to AS
|
||||
# Prints your identity_key (hex) — share this with peers
|
||||
cargo run -p noiseml-client -- register
|
||||
cargo run -p quicnprotochat-client -- register
|
||||
|
||||
# Fetch a peer's KeyPackage (they must have registered first)
|
||||
cargo run -p noiseml-client -- fetch-key <64-hex-char identity key>
|
||||
cargo run -p quicnprotochat-client -- fetch-key <64-hex-char identity key>
|
||||
|
||||
# Run an end-to-end Alice↔Bob demo against live AS + DS
|
||||
cargo run -p quicnprotochat-client -- demo-group \
|
||||
--server 127.0.0.1:7000 \
|
||||
--ds-server 127.0.0.1:7001
|
||||
|
||||
# Persistent group CLI (stateful)
|
||||
cargo run -p quicnprotochat-client -- register-state --state state.bin --server 127.0.0.1:7000
|
||||
cargo run -p quicnprotochat-client -- create-group --state state.bin --group-id my-group
|
||||
cargo run -p quicnprotochat-client -- invite --state state.bin --peer-key <peer hex> --server 127.0.0.1:7000 --ds-server 127.0.0.1:7001
|
||||
cargo run -p quicnprotochat-client -- join --state state.bin --ds-server 127.0.0.1:7001
|
||||
cargo run -p quicnprotochat-client -- send --state state.bin --peer-key <peer hex> --msg "hello" --ds-server 127.0.0.1:7001
|
||||
cargo run -p quicnprotochat-client -- recv --state state.bin --ds-server 127.0.0.1:7001
|
||||
```
|
||||
|
||||
Server address defaults to `127.0.0.1:7000`; override with `--server` or
|
||||
`NOISEML_SERVER`.
|
||||
`QUICNPROTOCHAT_SERVER`. Delivery Service defaults to `127.0.0.1:7001`; override with
|
||||
`--ds-server` or `QUICNPROTOCHAT_DS_SERVER`.
|
||||
|
||||
State file notes: the persisted state stores your identity and MLS group state
|
||||
after you have joined. If you generate a KeyPackage (`register-state`) and then
|
||||
restart before consuming the Welcome, the join may fail because the HPKE init
|
||||
key is not retained; run join in the same session you register.
|
||||
|
||||
---
|
||||
|
||||
@@ -178,7 +197,7 @@ Server address defaults to `127.0.0.1:7000`; override with `--server` or
|
||||
| M1 | Noise transport | ✅ | Noise_XX handshake, length-prefixed framing, Ping/Pong |
|
||||
| M2 | Authentication Service | ✅ | Ed25519 identity, KeyPackage generation, AS upload/fetch |
|
||||
| M3 | Delivery Service + MLS groups | ✅ | DS relay, `GroupMember` create/join/add/send/recv |
|
||||
| M4 | Group CLI subcommands | 🔜 | `create-group`, `invite`, `join`, `send`, `recv` |
|
||||
| M4 | Group CLI subcommands | 🔜 | Persistent CLI (`create-group`, `invite`, `join`, `send`, `recv`); demo-group already available |
|
||||
| M5 | Multi-party groups | 🔜 | N > 2 members, Commit fan-out, Proposal handling |
|
||||
| M6 | Persistence | 🔜 | SQLite key store, durable group state |
|
||||
| M7 | Post-quantum | 🔜 | ML-KEM-768 hybrid in Noise layer |
|
||||
|
||||
Reference in New Issue
Block a user