theseus/bundled-addons/aegis/lib/sia/keys.js
Local Dev 2e54bf5e5a Ship Theseus 0.3.28 5d15508b (Aegis update card + DevTools in tab sidebar + real favicons)
Setup    5d15508bba929f1f074c052ac933863eadf6eb8e56984ebd5a1af75e80626643
Portable a5d346b97f5a13d85fa3bd301a72075ddb82fe636d7b1a51840ffd5a16d879f4

Bundled since 0.3.27:

32d4b75 - Aegis (bchwallet) gains its own update card in Settings >
General beside Ariadne. Check for updates hits the same signed OTA
endpoint the boot timer uses; Restart to apply appears when a signed
newer version is staged. Uses the existing addons-check-updates + a
new app-restart IPC. New Aegis versions ship without a Theseus release.

32d4b75 (same commit) - DevTools (F12 / Ctrl+Shift+I) opens docked to
the right of the tab (mode: 'right') instead of a detached window.
Matches stock Chrome. Users who prefer detached can drag out via the
DevTools own toolbar.

b71c925 - Search-engine favicons in Settings > Search now use Google's
/s2/favicons service — DuckDuckGo's ip3 source returned 404 for enough
hosts (Brave, Bing, Yandex, etc.) that half the list was falling
through to the emoji placeholder.

Deployed. Verified LIVE 0.3.28.
2026-09-08 18:17:25 +02:00

29 lines
1,008 B
JavaScript

// Key tree for the Sia wallet: index i -> ed25519 key via walletd's
// KeyFromSeed(root, i), address = standard unlock hash of the public key.
// Private keys stay inside this module; sign() is the only way out.
module.exports = function makeKeys({ sia }) {
class WalletKeys {
constructor(root32) {
this._root = Uint8Array.from(root32);
this._cache = new Map();
}
entry(index) {
let e = this._cache.get(index);
if (!e) {
const k = sia.keyFromSeed(this._root, index);
e = { index, pub: k.pub, address32: k.address32, address: k.address, _priv: k.priv };
this._cache.set(index, e);
}
return e;
}
sign(entry, msg) { return sia.sign(entry._priv, msg); }
// Revealed only on explicit user action in Settings.
get seedHex() { return sia.toHex(this._root); }
wipe() {
for (const e of this._cache.values()) e._priv.fill(0);
this._cache.clear();
this._root.fill(0);
}
}
return { WalletKeys };
};