Files
nostr-keygen/.hist/README.1757373518.143.md
2025-09-08 19:37:12 -04:00

3.2 KiB
Raw Blame History

nostr-keygen

A tiny commandline utility written in Python that generates an Nostr npub (public key) and nsec (private key) pair from a single file that you drop into the terminal.

NOTE: The instructions below work on macOS and Linux. If youre on Windows youll need a compatible terminal (e.g. WSL, GitBash, or PowerShell with Python).

How it works

  1. Entropy The contents of the file you provide are read in binary mode.
  2. Hash The data is hashed with SHA256 to produce a 32byte seed.
  3. Key generation The seed is fed to the secp256k1 curve to create an ECDSA private key.
  4. Bech32 encoding The private key is encoded as nsec; the compressed public key is encoded as npub.

The utility is intentionally lightweight; it has no external configuration and works on any platform with Python3.8+.

🛠️ Installation

1 Install Python

  • macOS: Use Homebrew

    brew install python@3.12
    

    (If you already have Python, skip this step.)

  • Linux (Ubuntu / Debianbased):

    sudo apt-get update
    sudo apt-get install python3 python3-venv
    

    (Other distros may use yum, dnf, or your package manager of choice.)

  • Linux (Arch):

    sudo pacman -S python
    

Tip

On macOS the python3 binary is typically symlinked to python, but on many Linux systems youll need python3 explicitly.

2 Clone the repo

git clone https://github.com/yourgithubhandle/nostr-keygen.git
cd nostr-keygen
python3 -m venv .venv          # create a venv in the repo directory
source .venv/bin/activate      # activate it (both on macOS and Linux)

The virtualenvironment isolates the dependencies (ecdsa, bech32etc.) from the rest of your system.

4 Install the tool in editable mode (development) or normally

  • Editable (work on the code as you edit it)

    pip install -e .
    
  • Normal installation

    pip install .
    

Both forms install the consolescript nostrkeygen into ./venv/bin.

🚀 Run

# Drop any file onto the terminal prompt!
# macOS (most terminals) and many Linux terminals allow draganddrop.

nostr-keygen <filepath>

Example: nostr-keygen /tmp/randomfile.pdf


📄 Quick test

# Create a tiny dummy file
printf "random entropy" > /tmp/dummy.bin

# Run the program
nostr-keygen /tmp/dummy.bin

You should see two lines outputted: an nsec string and an npub string.

📦 Packaging details

The project uses a pyproject.toml and the [project.scripts] entry to expose the nostr-keygen command. No additional packaging steps are needed for local use.

🔧 How the code works (quick dive)

# main.py
import argparse, hashlib
from ecdsa import SigningKey, SECP256k1
from bech32 import bech32_encode, convertbits

NSEC_PREFIX, NPUB_PREFIX = "nsec", "npub"

def _to_bech32(data: bytes, hrp: str) -> str:
    five_bits = convertbits(list(data), 8, 5, True)
    return bech32_encode(hrp, five_bits)

# …  (rest unchanged) …

📄 License

MIT.