diff options
| author | Gab Virebent <gabriel1@virebent.art> | 2026-08-03 17:35:07 +0200 |
|---|---|---|
| committer | Gab Virebent <gabriel1@virebent.art> | 2026-08-03 17:35:07 +0200 |
| commit | fb83c4d70616ec23d8a5397409a5d31c70b70d66 (patch) | |
| tree | 1582f086ad44aac20e7a9fb14344e71ca5c8a298 /README.md | |
| parent | cd58d593789c6facb1d05b7f255bc2c5f2e46010 (diff) | |
| download | n2usenet-fb83c4d70616ec23d8a5397409a5d31c70b70d66.tar.gz n2usenet-fb83c4d70616ec23d8a5397409a5d31c70b70d66.tar.xz n2usenet-fb83c4d70616ec23d8a5397409a5d31c70b70d66.zip | |
Add Usenet-style line wrapping, optional identity save/load, update README
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -29,6 +29,39 @@ go build -o n2usenet ./cmd/n2usenet go build -o n2u-check ./cmd/n2u-check ``` +## Features + +- **Proof-of-work anti-spam**: client computes a hashcash-style token before + submission; the server only verifies it (never computes it) and caches + spent tokens in memory with a TTL to reject replays. +- **Ed25519 signing**: the message is signed locally in the browser with the + self-hosted TweetNaCl (`nacl`) library. The secret key never leaves the + device; the server only verifies the signature against the submitted text. +- **VFACE identicon / `Face:` header**: the public key deterministically + generates a visual identicon (`identicons-cli` engine, same backend as + `identicons.virebent.art`), embedded as a folded `Face:` header alongside + `X-Ed25519-Pub`/`X-Ed25519-Sig` so any reader can re-verify authorship. +- **Optional persistent identity (save/load)**: after generating a keypair, + "Save Identity" downloads a JSON file with the public/secret key and + username/email. Loading that file later reuses the same keypair, so the + same identicon keeps appearing across posts and proves later messages + come from the same author. This is entirely optional: skip it for a + fresh, unlinkable throwaway identity on every post. The file contains the + secret key in clear, so it must be kept private, anyone holding it can + sign as that identity. +- **Usenet-style line wrapping**: before signing, the message body is + automatically word-wrapped to 72 columns (RFC 1855 Netiquette + convention), for compatibility with classic terminal-based newsreaders. + Blank lines and quoted lines (`>`) are left untouched. The wrap happens + client-side, before the Ed25519 signature is computed, so the signature + always covers the exact bytes that end up posted. +- **CSRF protection and per-IP rate limiting**, both server-side. +- **No access logs, ephemeral state**: identity and form data are kept only + in browser tab memory and wiped after a successful send. +- **Delivery over the Nym mixnet**, not Tor: SOCKS5 through a local + `nym-socks5-client`/`nym-network-requester` path to the Mail2News relay, + then into `news.tcpreset.net` via NNTP. + ## Required Configuration Set these in an environment file or systemd unit: |
