2025-10-09 06:40:48 -04:00
2025-09-08 19:52:30 -04:00
2025-10-09 06:40:48 -04:00
2025-10-02 14:17:55 -04:00

NostrKeyGen

A tiny, interactive commandline tool that lets you generate a Nostr key pair from any file you choose. It works on macOS, Linux and (with a few tweaks) Windows. The script is intentionally lightweight no fancy GUI, just an easytofollow wizard run from your terminal.

Features

  • Draganddrop friendly: on macOS and Linux you can simply drop the file into the Terminal window.
  • Clear, stepbystep tutorial: every run prints a short intro, an explanation, a quick demo, asks for your file and finishes with the keypair in both NostrBech32 and raw hex.
  • No external binaries it just uses the purePython ecdsa and bech32 packages.
  • Portable: you can ship it as a single Python file or compile to a binary with tools such as PyInstaller.

Install

1. Clone the repo

git clone https://github.com/btcforplebs/nostr-keygen.git
cd nostr-keygen

2. Create and activate a virtual environment

python3 -m venv venv
source venv/bin/activate

3. Install dependencies

pip install ecdsa bech32
chmod +x nostr-keygen

Usage

Run the script directly from the project directory:

./nostr-keygen

Youll be guided through the following steps:

  1. Welcome screen press Enter to continue.
  2. Tool overview press Enter to continue.
  3. Demo key generation using a temporary file press Enter to continue.
  4. Prompt for the path to your entropy file. You can drop a file into the terminal on macOS/Linux or type the absolute/relative path.
  5. The script shows you the generated nsec, npub, and the hex representation of both keys.
  6. Press Enter again, the terminal is cleared and the program exits.

Example Output

🛠️  Welcome to NostrKeyGen

This tool will:
- Pick any file as your entropy source
- Hash the file → 32byte seed
- Derive a secp256k1 key pair
- Print the Nostr `nsec`/`npub` and the raw hex values

💡 Demo (using a random file in /tmp)...
  Demo nsec: nsec1q4...
  Demo npub: npub1p8...
  Demo priv hex: 1f4c...
  Demo pub hex: 03a1...

📂 Enter the path to your entropy file: /Users/me/secret.txt

✅  Your new key pair:
    - nsec : nsec1q8...
    - npub : npub1p9...
    - priv hex : 7c2d...
    - pub hex  : 029b...

🧹 Cleaning up...
🚀 Done. Goodbye!

FAQs

Question Answer
Why does it read any file as entropy? Nostr requires a 32byte seed. Hashing a file guarantees a deterministic, pseudorandom 32byte output irrespective of the file size or content.
Will it always produce the same key for the same file? Yes the seed is derived from a SHA256 hash of the file contents.
Can I use a password instead? The current script accepts files only, but you could easily pipe a password string using echo -n 'mypassword' > pwd.txt first.

Contributing

Pull requests are welcome! Just make sure the code passes flake8/black and contains an updated README.

License

MIT see LICENSE.

Description
No description provided
Readme 58 KiB
Languages
Python 100%