qcc/README.md
2026-06-30 12:52:09 +03:00

69 lines
2.2 KiB
Markdown

# QuiC Call
A server for audio/video calls between people. A family phone system replacement.
No WebRTC. No STUN/TURN. Everything goes through the server.
## How it works
1. Client connects via QUIC (TLS + ACME Let's Encrypt)
2. Server sends a PoW (Hashcash) challenge
3. Client solves it, sends solution with their Ed25519 public key
4. Server allocates a phone number (`+0 XXX YYY ZZZ`), issues an X.509 certificate proving ownership
5. Client can re-roll the number once per 24h
6. To call someone, dial their number — server relays media blindly (E2EE)
## Architecture
- **Transport**: QUIC (hysteria fork of quic-go) over UDP
- **TLS**: Automatic via certmagic + Cloudflare DNS-01 (ACME)
- **Auth**: Proof-of-Work (Hashcash SHA-256), no passwords
- **PKI**: Ed25519 CA, X.509 client certs with phone number as CN
- **DB**: Custom append-only frame-based engine with AES-256-GCM at-rest encryption (hash-chain integrity)
- **Signaling**: Binary varint frames over QUIC streams
- **Media relay**: Unreliable QUIC datagrams, server forwards blindly
- **Congestion control**: Brutal (CBR) from Hysteria
- **E2EE**: X25519 + HKDF + ChaCha20-Poly1305 (key exchange during signaling)
## Status
Pre-alpha. Server compiles and passes vet. No client application exists yet.
## Quick start
```bash
# Build
go build -o qccd ./cmd/qccd
# Configure
cp config.yaml.example config.yaml
# edit config.yaml — set ACME domains, email, Cloudflare API token
# Run
./qccd server
```
## Configuration
See `config.yaml.example`.
Key options:
| Field | Default | Description |
|-------|---------|-------------|
| `server.listen` | `:1963` | UDP listen address |
| `pow.difficulty` | `22` | PoW leading zero bits |
| `identity.cooldown` | `24h` | Minimum time between number re-rolls |
| `identity.prefix` | `+0` | Phone number prefix |
| `ca.key_type` | `ed25519` | CA key type |
| `relay.bandwidth_up` | `100 mbps` | Media relay upstream bandwidth |
## Dependencies
- `github.com/apernet/quic-go` — QUIC transport (Hysteria fork)
- `github.com/caddyserver/certmagic` + `github.com/libdns/cloudflare` — ACME TLS
- `golang.org/x/crypto` — X25519, ChaCha20-Poly1305, HKDF
## License
AGPL-3.0-only