site/releases/index.html
Local Dev b0569c92d8 Ariadne 0.1.8: pinned-origin reverse proxy for ip+tls names
Before 0.1.8, a BNS name with an on-chain `ip` record made the daemon return
the origin's public IP directly. Browsers then hit the origin's own HTTPS
server -- and if that origin's cert was not browser-trusted (which is the
whole point of the on-chain `tls` fingerprint pin next to the `ip` record),
every browser except Theseus rejected the site with ERR_CERT_AUTHORITY_INVALID
or SEC_ERROR_UNKNOWN_ISSUER. game.x and hephaestus.x both hit this. Theseus
was fine because its in-process resolver validates against the on-chain pin.

0.1.8 answers DNS with 127.0.0.1 whenever the name has BOTH `ip` and `tls`,
terminates the browser's TLS locally with our trusted leaf, and reverse-proxies
to the origin over HTTPS while validating the origin's SHA-256 fingerprint
against the on-chain pin. Same algorithm Theseus uses (main.js:pinnedHttpsGet,
cert.fingerprint256 lower-cased, colons stripped) so a site's `tls` record
means the same thing in-Theseus and system-wide.

Names with just `ip` (no pin) keep direct routing -- unchanged. Only opts in
when the owner has published a fingerprint pin, so nothing regresses for sites
that deliberately wanted direct IP routing.

Two subtle bugs found + fixed while landing this:

1. `agent: false` on the outbound https.request. With Node's default global
   agent (keepAlive on), the second request onwards reuses the TLS socket
   and `res.socket.getPeerCertificate(false)` comes back stripped of
   fingerprint256 -- pin validation then reads "empty" and rejects with 526.
   Fresh socket per request costs a handshake but is cheap next to the
   pin-verify miss.

2. Removed `content-encoding` from the hop-by-hop strip list. Origin sends
   gzip'd bytes; my proxy streams them unchanged. If we strip
   content-encoding while forwarding compressed bytes, the browser treats the
   gzip magic as text and renders garbage. content-encoding is end-to-end
   per RFC 7230 -- keep it.

Verified on this box: game.x, hephaestus.x, theseus.x, sirius.x,
coinspectrum.x, hello.bch all load HTTPS 200 in strict IWR and Chromium; DNS
answers 127.0.0.1 for game.x + hephaestus.x (was their origin IP before),
still their origin IP for names without a tls pin.

Deployed
- dl.silentmode.st/AriadneResolver-Setup-0.1.8.exe
- s3://bns/silentmode/dl/AriadneResolver-Setup-0.1.8.exe
- silentmode.st manifest advertises 0.1.8
- sha256 47450ad4555beb04fe3b90ae5f658dc2932061d011ada9a2fb507471e2f0a0cb
2026-09-28 22:29:44 +02:00

109 lines
9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Silent Mode">
<meta property="og:title" content="Silent Mode — releases &amp;amp; checksums">
<meta property="og:url" content="https://silentmode.st/releases">
<meta property="og:image" content="https://silentmode.st/brand/og.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<title>Silent Mode — releases &amp; checksums</title>
<style>
:root{--bg:#0b0e14;--panel:#141a24;--line:rgba(255,255,255,.09);--ink:#e7eaf1;--mut:#8b98a9;--dim:#5e6678;--acid:#d6ff3d}
*{box-sizing:border-box}
body{margin:0;background:radial-gradient(1100px 560px at 50% -12%,#16202e,var(--bg));
color:var(--ink);font:16px/1.65 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
.wrap{max-width:820px;margin:0 auto;padding:3.5rem 1.2rem 4rem}
a{color:var(--acid)}
h1{font-size:1.8rem;margin:0 0 .3rem}
h1 .g{color:var(--acid)}
.lede{color:var(--mut);margin:.2rem 0 2rem}
.rel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px 22px;margin-bottom:16px}
.rel h2{font-size:1.15rem;margin:0 0 .2rem}
.rel .meta{color:var(--dim);font-size:12.5px;margin-bottom:1rem}
.file{border-top:1px solid var(--line);padding-top:12px;margin-top:12px}
.file .n{font-size:14px;color:var(--ink)}
.file .n a{text-decoration:none}
.file code{display:block;font-family:ui-monospace,monospace;font-size:11.5px;color:#c9d4e3;
word-break:break-all;margin-top:4px}
.note{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acid);
border-radius:10px;padding:14px 18px;color:var(--mut);font-size:13.5px;margin-top:1.6rem}
.note b{color:var(--ink)}
footer{color:var(--dim);font-size:12.5px;margin-top:2.5rem;text-align:center}
</style>
<link rel="stylesheet" href="shared.css?v=20260910">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
</head>
<body>
<nav class="topnav">
<a class="brand" href="./"><svg class="logo" viewBox="0 0 32 20" aria-hidden="true"><rect class="l1" x="1.5" y="3.5" width="17" height="13" rx="6.5" ry="6.5" fill="none" stroke-width="2.6"/><rect class="l2" x="13.5" y="3.5" width="17" height="13" rx="6.5" ry="6.5" fill="none" stroke-width="2.6"/></svg>Silent <span class="g">Mode</span></a>
<a href="theseus">Theseus</a>
<a href="prometheus">Prometheus</a>
<a href="sirius">Sirius</a>
<a href="hephaestus">Hephaestus</a>
<a href="helios">Helios</a>
<a href="hermes">Hermes</a>
<a href="tools">Tools</a>
</nav>
<div class="wrap">
<h1>Silent <span class="g">Mode</span> — releases</h1>
<p class="lede">Canonical SHA-256 checksums for every published build. This page lives at the on-chain
name <code>releases.silentmode.bch</code>; the name pins where it is served from, so a tampered
mirror cannot change what you check against here.</p>
<div class="rel">
<h2>Theseus Navigator <span style="color:var(--acid)">0.3.59</span></h2>
<div class="meta">Windows 64-bit · unsigned · 2026-09-28 · <b>0.3.59 — DNS over HTTPS, Global Privacy Control, Settings pages with addresses</b> — Privacy, regrouped: Settings › Privacy now opens with a status card and gathers tracking protection (Shield and Cookie Pop-ups with their per-site exceptions), device access, anti-fingerprinting, network and browsing data in one place. New there: DNS over HTTPS (on by default with Quad9; Cloudflare, Mullvad, AdGuard or your own resolver; an increased-protection mode that never falls back to plain DNS) and Global Privacy Control, which tells every site not to sell or share your data (the Sec-GPC header plus navigator.globalPrivacyControl). Every Settings page has an address you can copy and open, theseus://settings/privacy for example, with sub-pages for the longer lists. Search-engine icons ship inside Theseus and a custom engine's icon is cached once, so the toolbar, the picker and Settings look the same offline and opening the picker no longer asks a favicon service which engines you use; the default-engine control in Settings shows the icons too. A video's fullscreen now hides the toolbar and leaving it, switching tabs or closing the tab puts the window back (before, the window could stay fullscreen with no title-bar buttons); F11 toggles fullscreen. A name owner's subdomain rules (a blocked or redirected subdomain) now apply in Theseus for names it reaches directly by IP as well, not only through the gateway.</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/TheseusNavigator-Setup-0.3.59.exe">TheseusNavigator-Setup-0.3.59.exe</a> — installer</div>
<code>82506429906f7dca5db4e1cb37f26b806f0217e8db35426a0345c339a8b4ced5</code>
</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/TheseusNavigator-0.3.59-portable.exe">TheseusNavigator-0.3.59-portable.exe</a> — portable</div>
<code>3fd83638c205b2ec42176031b5c775cb519c8ca24bf8acda63bf514a781b6f69</code>
</div>
</div>
<div class="rel">
<h2>Ariadne Resolver — Windows <span style="color:var(--acid)">0.1.8</span></h2>
<div class="meta">Windows 64-bit · unsigned · bundled Node runtime · 2026-09-28 · <b>0.1.8 — pinned-origin proxy for `ip`+`tls` names</b> — BNS names that publish an <code style="display:inline">ip</code> record with an on-chain <code style="display:inline">tls</code> fingerprint pin (game.x, hephaestus.x, and any other site that pins its origin cert) now load cleanly in every browser. Before 0.1.8 the daemon returned the raw <code style="display:inline">ip</code> and browsers hit the origin directly; if that origin's cert was not browser-trusted (which is the whole point of publishing an on-chain pin) users got <code style="display:inline">ERR_CERT_AUTHORITY_INVALID</code> / <code style="display:inline">SEC_ERROR_UNKNOWN_ISSUER</code>. 0.1.8 answers DNS with <code style="display:inline">127.0.0.1</code> whenever <code style="display:inline">ip</code>+<code style="display:inline">tls</code> are both present, terminates the browser's TLS with a locally-trusted leaf, and reverse-proxies to the origin over HTTPS while validating the origin's SHA-256 fingerprint against the on-chain pin — same algorithm Theseus uses in <code style="display:inline">pinnedHttpsGet</code>. Names with just <code style="display:inline">ip</code> (no pin) keep direct routing unchanged, so nothing regresses. Includes 0.1.7 (runtime-switchable collision policy) and 0.1.6 (self-syncing routing + CA). Upgrades in place.</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/AriadneResolver-Setup-0.1.8.exe">AriadneResolver-Setup-0.1.8.exe</a> — ~24 MB</div>
<code>47450ad4555beb04fe3b90ae5f658dc2932061d011ada9a2fb507471e2f0a0cb</code>
</div>
</div>
<div class="rel">
<h2>Ariadne for Android <span style="color:var(--acid)">0.20</span></h2>
<div class="meta">Android 5.0+ (API 21) · self-signed release key · 2026-09-28 · <b>0.20 — every live TLD, fresh snapshot</b> — Every live BNS TLD is claimed by the on-device resolver. The app took its TLD list from the registry's legacy advertised set (nine TLDs), so a name under a newer TLD was only intercepted once it had turned up in the local index; the app now reads the registry's routable list (every TLD on the public listing, 24 today), and ships a bootstrap list matching it for cold start. The cold-start snapshot it pulls from the CDN is now refreshed every ten minutes from the gateway's index instead of by hand, so a fresh install sees names registered minutes ago rather than weeks. Same signing key; installs over 0.19.</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/ariadne-v0.20.apk">ariadne-v0.20.apk</a> — 150 KB</div>
<code>e7362e356de14f010646f3c60908ccd4bbd8030914f7e6a5dc2722d9dcf5e51e</code>
</div>
<div class="file">
<div class="n">Signing certificate — SHA-256 (the same key signs every future release)</div>
<code>46ebbbe5dc73148d66410fd0337b1e6683472128c983e8e2578200b9e3ca548c</code>
</div>
</div>
<div class="note"><b>How to verify.</b> After downloading, compute the file's SHA-256 and compare it to
the value above — on Windows: <code style="display:inline">certutil -hashfile &lt;file&gt; SHA256</code>;
on Android, hash the downloaded <code style="display:inline">.apk</code> on a computer before you move
it to the phone, or use any file-hashing app. Nothing here is signed by an authority your device
already trusts — <b>by design</b> — so it will warn about an unrecognized app; the checksum is the
real check. The machine-readable manifest is at
<a href="https://dl.silentmode.st/releases-manifest.json">releases-manifest.json</a>.</div>
<footer>Silent Mode — a Deviant project. Alpha software on a test network.</footer>
</div>
</body>
</html>