Skip to content

Polish and features: XOR split/combine, BIP-85 base85 and dice, backup sheet - #83

Merged
BitcoinQnA merged 1 commit into
mainfrom
feat/polish-and-features
Sep 11, 2026
Merged

BitcoinQnA merged 1 commit into
mainfrom
feat/polish-and-features

Conversation

@BitcoinQnA

Copy link
Copy Markdown
Owner

Summary

Usability polish, three smaller features and the zxcvbn changes, in one batch for the next release. Nothing is tagged or released.

zxcvbn

  • Entropy panel: "Time to crack" is now "Pattern check". Crack times assume a password a person made up, so they mean nothing for dice or cards; only the pattern warning remains, in plain English.
  • The passphrase estimate appears only once a passphrase is typed: amber when weak, neutral at "centuries".

Usability

  • Seed Workspace output (keys, SeedQR codes, passphrase box) stays hidden until a seed exists. The amber NOTE is now a neutral tip.
  • Plain-English PSBT and Lightning errors, with the library's message folded under "Technical detail". lightning: links are accepted.
  • Eye button sets aria-pressed and also hides the seed words in the top bar and on the seed cards.
  • Derived Addresses: private keys are hidden until "Show private keys" is ticked. The toggle resets when the seed changes.
  • Home search shows a result count, a no-match message and a Clear search button.
  • 44px tap targets on touch screens.
  • The info and QR modals are role="dialog" with aria-modal. Every dialog moves focus in and restores it on close, and the toast is a live region.
  • A deep link to a tool that needs a seed opens the "No seed loaded yet" dialog over the home page. Locked cards carry screen-reader text.

Features

  • Seed XOR has two modes:
    • "Split my seed": 2 to 8 shares, the last computed so they XOR back to the seed, with an on-screen check. Shares don't change when a passphrase is typed; "Make new shares" replaces them.
    • "Combine shares": uses the shares only, needs no loaded seed, and offers "Load this seed".
    • The XOR card no longer needs a seed.
  • BIP-85 passwords: base85 format (application 707785, 10 to 80 characters) beside base64. Bad lengths show an inline error instead of a toast.
  • BIP-85 dice rolls (application 89101), with a SHAKE256 DRNG in keys.js.
  • Printable backup sheet, blank by default: numbered word boxes, notes, and a 21, 25 or 29 square SeedQR grid with its fixed squares pre-drawn.
    • Filling in the words and SeedQR is opt-in, comes with a printer warning, and resets after each print.
    • The sheet is removed from the page after printing and on Clear seed.

Testing

  • npm run release:check passes: tests, build, and a byte-identical dist.
  • New tests:
    • SHAKE256 against the FIPS 202 empty-input vector, and against Node's SHAKE256 for 35 input and output length pairs.
    • base85 against Python's b85encode.
    • BIP-85 PWD BASE64, PWD BASE85 and DICE spec vectors.
    • XOR split round trip and stability, and combine using the shares only.
    • BIP-85 password and dice UI.
    • Passphrase and entropy wording, and the eye button.
    • Backup sheet: the pre-drawn squares against 16 real SeedQR codes, and blank against filled content.
  • Browser, built dist under its CSP: all of the above exercised, including the seed gate, focus moves, the new errors, the print flow with window.print stubbed, and Clear seed wiping shares and results. No console errors on a clean tab.
  • Not tested: printing to a real printer, and tap targets on a real touch device.

🤖 Generated with Claude Code

…p sheet

- zxcvbn: a pattern check for entropy; the passphrase estimate only shows
  once a passphrase is typed
- Seed Workspace output hidden until a seed exists; neutral passphrase tip
- Plain-English PSBT and Lightning errors, technical detail folded away
- Eye button marks itself pressed and hides the top bar and seed card words
- Derived Addresses private keys behind a "Show private keys" toggle
- Home search result count, no-match message and Clear search
- 44px tap targets on touch screens; dialogs move and restore focus
- Deep links to seed tools open the "No seed loaded yet" dialog
- Seed XOR "Split my seed" and "Combine shares" modes
- BIP-85 base85 passwords and dice rolls (SHAKE256 DRNG)
- Printable backup sheet, blank by default, words and SeedQR opt-in

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@BitcoinQnA
BitcoinQnA merged commit 87a69b8 into main Sep 11, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant