69 lines
2.2 KiB
Markdown
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
|