fix(wallet): message signatures verified only half the time

BuiltInWallet.signMessage read `recovery` from libauth's recoverable
signature, but libauth v3 names it `recoveryId`. The flag byte came out as
0, so verifiers recovered the right key only when the true recovery id
happened to be 1. Signed DNS manifests and Studio uploads failed with
"signature does not match current on-chain NFT owner" and a different
derived address each attempt. Read the right field, fail loudly if it is
missing, rebuild the browser bundle and move every importer to the new
bundle URL. Also lands the registrar's signRecordsManifest that the bundle
already shipped.
This commit is contained in:
Local Dev 2026-09-17 01:40:10 +02:00
parent f9575a708a
commit 25d17f5e92
3 changed files with 3 additions and 3 deletions

View file

@ -10,7 +10,7 @@
// is the persistent device session (js/session.js): sign in once, come back // is the persistent device session (js/session.js): sign in once, come back
// without a prompt until you sign out. // without a prompt until you sign out.
import * as BNS from "https://silentmode.st/js/bns-register.js?v=20260916dns"; import * as BNS from "https://silentmode.st/js/bns-register.js?v=20260917sig";
const API = "https://silentmode.st"; const API = "https://silentmode.st";
const TLD_API = "https://navigate.st/api/tlds?include_hidden=1"; const TLD_API = "https://navigate.st/api/tlds?include_hidden=1";

View file

@ -7,7 +7,7 @@
// Injects its own modal HTML into <body> and its own CSS into <head> on load // Injects its own modal HTML into <body> and its own CSS into <head> on load
// so the host page needs nothing but a single script include. // so the host page needs nothing but a single script include.
import * as BNS from "https://silentmode.st/js/bns-register.js?v=20260908split"; import * as BNS from "https://silentmode.st/js/bns-register.js?v=20260917sig";
const $ = (id) => document.getElementById(id); const $ = (id) => document.getElementById(id);
const esc = (s) => String(s).replace(/[&<>"']/g, (c) => ({ "&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;" }[c])); const esc = (s) => String(s).replace(/[&<>"']/g, (c) => ({ "&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;" }[c]));

View file

@ -11,7 +11,7 @@
// The gateway never holds a key: it verifies each upload's signature // The gateway never holds a key: it verifies each upload's signature
// against the current NFT owner and refuses writes outside bns/<name>/. // against the current NFT owner and refuses writes outside bns/<name>/.
import * as BNS from "https://silentmode.st/js/bns-register.js?v=20260916dns"; import * as BNS from "https://silentmode.st/js/bns-register.js?v=20260917sig";
const API = "https://silentmode.st"; const API = "https://silentmode.st";
const $ = (id) => document.getElementById(id); const $ = (id) => document.getElementById(id);