# hdwalletpy – Setup & Usage Guide This project provides a Python-based HD Wallet tool with optional Docker-based build automation for fast, reproducible environments. --- ## 📦 Installation Options ### **Option 1: Standard Python Setup (Host Machine)** 1. Clone the repository: ```bash git clone https://github.com//hdwalletpy.git cd hdwalletpy ``` 2. Create a virtual environment: ```bash python -m venv .venv source .venv/bin/activate ``` 3. Install dependencies: ```bash python -m pip install --upgrade pip python -m pip install -r requirements.txt ``` --- ### **Option 2: Fast Setup Using Docker + Makefile** This method avoids installing compilers on your host and speeds up dependency builds. #### **Step 1: Build Docker Image** ```bash make build-image ``` Creates a reusable image `python-build-env:3.11` with build tools and `python3-venv`. #### **Step 2: Compile Wheels in Container** ```bash make wheels ``` Builds all dependency wheels into `./wheelhouse` for fast installs. #### **Step 3: Create Host Virtual Environment** ```bash make venv-host source .venv_host/bin/activate ``` Installs dependencies from `wheelhouse` (no compilation needed). #### **Optional: Work Inside a Warm Container** ```bash make up # Start container make shell # Open shell inside container make venv-container # Create container-only venv at /opt/venv ``` #### **Cleanup** ```bash make clean # Remove host venv and wheelhouse make down # Stop/remove container ``` --- ## ✅ Basic Usage Run the tool with subcommands. For help, use `-h` (e.g., `gen -h`, `recover -h`). Examples: ```bash # Generate mnemonic (prints to stdout; for debug/test) python ./src/pyhdwallet.py gen # Generate and save AES-encrypted ZIP artifact into ./.wallet (password prompted) python ./src/pyhdwallet.py gen --file # Generate with PGP encryption + ZIP artifact (ZIP contains only encrypted .asc payload) python ./src/pyhdwallet.py gen --pgp-pubkey-file pubkeys/mykey.asc --file # Recover from mnemonic (prefer --interactive to avoid shell history) python ./src/pyhdwallet.py recover --interactive # Recover and save AES ZIP artifact python ./src/pyhdwallet.py recover --interactive --file # Fetch PGP public key (online) python ./src/pyhdwallet.py fetchkey "https://example.com/key.asc" --out mykey.asc # Run tests python ./src/pyhdwallet.py test ``` --- ## 🔐 Notes on `--file`, AES ZIP, and PGP - `--file` writes **only** an AES-encrypted ZIP (no raw `.json`/`.asc` left on disk), using `pyzipper`. - If `--pgp-pubkey-file` is set, the ZIP contains a single ASCII-armored PGP message (`.asc`) created with PGPy-style `PGPMessage.new(...)` then `pubkey.encrypt(...)`. --- ## ⚠️ About `--force` The tool includes a safety guard: if stdout is piped/redirected (non-TTY), it refuses to print sensitive output unless `--force` is set. Checking whether stdout is a terminal is commonly done via `isatty()`. Example: ```bash python ./src/pyhdwallet.py gen > out.txt # likely refused (non-TTY) python ./src/pyhdwallet.py gen --force > out.txt # allowed ``` --- ## ✅ Why Use Makefile? - **Speed:** Avoid repeated `apt-get` installs; wheels cached locally. - **Reproducibility:** Same Docker image for builds; no environment drift. - **Convenience:** One-liner tasks (`make wheels`, `make venv-host`, `make shell`). - **Separation:** Host venv vs container venv for clean workflows. --- ## Common Makefile Targets ```bash make build-image # Build Docker image with build tools make wheels # Compile wheels into ./wheelhouse make venv-host # Host venv install from wheelhouse make up # Start warm container make shell # Shell into warm container make venv-container # Container venv at /opt/venv make down # Stop/remove container make clean # Remove .venv_host and wheelhouse ```