2.3 KiB
2.3 KiB
Connection Key Compression (rtun2) — Design
Goal
Shrink the copy-paste connection key string so it is easy to copy and paste, without
changing any user-facing workflow. A current rtun1. key is roughly 4 KB as a single
unwieldy line; the goal is roughly half that.
Approach
Compress the existing JSON payload with pure-Rust DEFLATE (miniz_oxide) before
base64url-encoding. This is a clean break on the wire format:
- New keys:
rtun2.+base64url(deflate(json)) decodeaccepts onlyrtun2.keys; legacyrtun1.keys are dropped (per user decision)ConnectionKeystruct, CLI, andlisten/connectintegration are unchanged
Format
rtun2.<base64url-no-padding-of-deflate-of-json>
The JSON payload keeps the same shape, with version bumped to 2:
{
"version": 2,
"target": "127.0.0.1:4180",
"ca_cert_pem": "...",
"server_cert_pem": "...",
"server_key_pem": "...",
"client_cert_pem": "...",
"client_key_pem": "...",
"auth_token": "..."
}
Components
| File | Change |
|---|---|
Cargo.toml |
Add miniz_oxide dependency |
src/connkey.rs |
Prefix rtun2., compress on encode, decompress on decode, version 2 |
src/redact.rs |
is_connection_key detects rtun2. prefix |
Wiki (droid-wiki/**) |
Document the rtun2. format and compression |
Validation
decode validates, in order:
- String starts with
rtun2. - Base64url decode succeeds
- DEFLATE decompression succeeds
- JSON deserialization succeeds
version == 2- All string fields non-empty after trim
Testing
- Round-trip test: encode → decode returns identical material; assert prefix
rtun2. - Size assertion test: encoded key must be materially smaller than the raw JSON
(
base64url(json)without compression), with a generous threshold so the build stays robust across certificate size variation - Update redaction prefix tests
Docs
Update wiki pages that document the key format: features/connection-keys.md,
reference/data-models.md, overview/glossary.md, applications/rustunnel-cli.md,
security.md, and how-to-contribute/patterns-and-conventions.md.
Out of scope
- QR codes, binary container formats, zstd/brotli, key registry/rotation
generatecommand and file-based credential output