An offline, browser-based tool to derive both Cosmos-style Bech32 addresses and Ethereum-style addresses from a BIP39 mnemonic.
Caution
This application is intended for TESTING and EDUCATIONAL PURPOSES ONLY.
While the cryptographic implementations are technically accurate, this tool should NOT be used in production environments or for managing real funds.
- Download files from
releases/v1.0.0/ - Verify checksums:
sha256sum -c checksums.txt
- Open
index.htmlin your browser - Start generating wallets offline
# Install dependencies
npm install
# Build UMD bundles
npm run build
# Verify build
npm run verify- Open
index.htmlin your browser (disconnect from network for security) - Enter your BIP39 mnemonic phrase (or generate a new one)
- Configure derivation path (e.g.,
m/44'/118'/0'/0/0for Cosmos) - Set Bech32 prefix (e.g.,
cosmos,osmo,genesis) - Click "Derive"
- Copy your generated addresses and keys
- Pure HTML/JS - works entirely in the browser, no backend required
- Derives both Cosmos-compatible Bech32 addresses and Ethereum-compatible addresses
- Custom derivation path and Bech32 prefix support
- Pre-built UMD bundles for immediate use
- Built with audited cryptographic libraries
- Always verify checksums before using pre-built files
- This tool is designed for offline use - disconnect from network before entering sensitive data
- Never share private keys or mnemonics
- Use only in trusted environments
- For maximum security, build from source and verify all dependencies
This tool uses minimal UMD bundles of cryptographic primitives from @noble and @scure libraries.
- Mnemonic input - User provides a BIP39 mnemonic phrase
- Seed derivation - Uses
@scure/bip39to derive a BIP32 seed - HD wallet derivation - BIP32 root is derived using
@scure/bip32, then child key is derived using the provided path - Public key calculation - Private key is passed to
@noble/secp256k1.getPublicKey()to generate both compressed and uncompressed public keys - Address Encoding:
- Cosmos:
sha256(compressed_pubkey) → ripemd160 → bech32_encode(prefix, words) - Ethereum:
keccak256(uncompressed_pubkey) → last 20 bytes → 0x-prefixed
- Cosmos:
There are no existing high-level packages that can derive both address types from a single mnemonic. Standard wallet libraries are typically built for a specific network, and none allow setting a full custom HDpath. This requires building from low-level primitives.
Important Note: Cosmos uses the compressed pubkey for address derivation, while Ethereum uses the full uncompressed pubkey. The wallet addresses will not match what the chain expects if this is not done properly.
# Verify pre-built release
cd releases/v1.0.0
sha256sum -c checksums.txt
# Or build and verify from source
npm run verifyMIT - See LICENSE file for details