Generate a 12–24-word English BIP-39 seed phrase from cryptographic entropy, verify the SHA-256 checksum bits on any phrase, round-trip mnemonic ↔ entropy, and derive the 512-bit BIP-39 seed (PBKDF2-HMAC-SHA512, 2048 iterations, "mnemonic" + passphrase salt) that HD wallets feed into BIP-32. Everything runs in your browser — the seed never touches the network.
crypto.getRandomValues (a browser CSPRNG), does no network I/O, and the source is on GitHub — but a compromised browser or extension could still read the DOM. For play/test wallets it's fine.
Load a known-good vector from the BIP-39 spec appendix — useful for verifying this page against another implementation.
SHA-256(entropy) — those are the checksum CS.entropy_bits + checksum_bits ⇒ length is a multiple of 11.PBKDF2(mnemonic_utf8_nfkd, "mnemonic"+passphrase_utf8_nfkd, HMAC-SHA512, 2048), 64 bytes out. This seed becomes the BIP-32 master key.