# Aegis Aegis is a desktop Usenet reader written in Go with Fyne. It connects to an NNTP server directly or through SOCKS5, supports implicit TLS, optional `AUTHINFO USER/PASS` authentication, group discovery, local subscriptions, overview search, article retrieval, and text article posting. ## Group population Before subscribing, Aegis displays an estimated post count for every group returned by `LIST ACTIVE`. The estimate is `high - low + 1`. NNTP article numbers can contain gaps, so this is an upper-bound style estimate rather than a guaranteed count. After selecting a group, the server's `GROUP` response is used for the current article count. ## Build and test ```sh gofmt -w . go test ./... go test -race ./... go vet -buildvcs=false ./... go build -buildvcs=false -o aegis . ``` The `-buildvcs=false` option is useful when the source directory is not a Git working tree. ## Configuration and credentials Settings are stored in the user configuration directory as `aegis/config.json` with mode `0600`. The NNTP password is never written to that file and remains only in memory for the current application run. TLS certificate validation is enabled by default. The Settings screen has an explicit `Do not verify the TLS certificate` opt-in for local testing or a pinned/trusted connection that cannot present a verifiable certificate. It can expose account credentials and article traffic to a man-in-the-middle and should not be enabled on an untrusted network. ## Identity and message signing The posting profile is VFace-compatible but optional for publishing. Its username, email address, and canonical Ed25519 public key are joined as `username|email|public-key`. That exact string produces the 48x48 transparent PNG identicon through the existing Ch1ffr3punk `identicon-cli` executable. Aegis accepts no uploaded or alternate profile image and no image format other than the validated PNG. It publishes the SHA-256 identity hash, the SHA-256 hash of the PNG, and the verification link `https://identicons.virebent.art` together with `Face:` and the interoperable `X-Ed25519-Pub` header. Aegis looks first at `/home/gabriel1/Projects/identicons/identicons-cli`, then at the configured `AEGIS_IDENTICON_CLI` path and other standard locations. The executable must return a 48x48 PNG as base64. Aegis does not embed the identicon GUI. The optional VFace profile generates an Ed25519 identity and stores it in an age-encrypted local vault protected by a user password of at least 12 characters. Age protects the local profile vault only, not Usenet messages. The composer keeps the classic Usenet path as the default. It sends RFC 5322 and MIME-compatible text articles directly to NNTP, with UTF-8 `8bit` text, canonical CRLF line endings, and a generated `Message-ID`. The composer supports classic plaintext and optional Ed25519 signing. Signed posts add `X-Aegis-*` metadata, including the inline verification key and its SHA-256 fingerprint. Ed25519 is used for signatures only. Message encryption and SURB integration remain separate future work and are not part of classic Usenet posting. TLS connections require TLS 1.2 or 1.3. For TLS 1.2, Aegis offers only ECDHE-AES-GCM suites. Go does not expose TLS 1.3 cipher-suite selection, so a TLS 1.3 connection can still negotiate the platform's ChaCha20-Poly1305 suite. Deployments that require GCM exclusively must cap the NNTP server at TLS 1.2. ## Current limits - implicit TLS and STARTTLS are supported; COMPRESS DEFLATE is deliberately rejected whenever TLS is enabled and is available only for cleartext NNTP; - SOCKS5 username/password authentication is not exposed in the interface; - at most the latest 500 overview records are loaded per group; - posting creates MIME 1.0 text articles with UTF-8 and `8bit` by default; attachment file selection remains pending; article lines are validated at a maximum of 998 octets and sent with canonical CRLF line endings; - composer supports plaintext and optional VFace Ed25519 signing; YubiKey support is limited to signing and verification; - SMTP mail2news delivery supports cleartext, implicit TLS or STARTTLS. It reuses the single NNTP proxy configuration, and SOCKS5 routing is required for `.onion` hosts; the SMTP password is session-only; - subscriptions are local Aegis preferences, because NNTP itself has no standard server-side subscription command. The complete-client audit and prioritized roadmap are in [`docs/client-feature-audit.md`](docs/client-feature-audit.md). Optional features remain part of the main Aegis binary for now, without a runtime plugin directory.