Alexis Rondeau

Newsfeed

Repository · Wednesday, December 10, 2025 · 12:02

bipscan

2 stars · Ruby

BIP-39 Seed Phrase Finder

Find BIP-39 seed phrase sequences hidden in classic literature and generate seeds from common patterns.

Project Structure

bip39/
├── README.md
├── Gemfile
│
├── src/                        # All source code
│   ├── ruby/
│   │   ├── generators/         # Seed generators
│   │   │   ├── generate_paragraph_seeds.rb      # Text-based seeds
│   │   │   ├── generate_birthday_seeds.rb       # Birthday index patterns
│   │   │   ├── generate_birthday_hash_seeds.rb  # SHA256(date) seeds
│   │   │   ├── generate_password_seeds.rb       # Common password seeds
│   │   │   ├── generate_rockyou_seeds.rb        # Rockyou wordlist seeds
│   │   │   ├── generate_character_sequences.rb  # Pattern-based seeds
│   │   │   ├── find_sequences.rb                # Find sequences in texts
│   │   │   ├── find_sequences_texts.rb          # Wrapper for texts/
│   │   │   ├── find_sequences_pg19.rb           # Wrapper for pg19/
│   │   │   └── check_seeds_etherscan.rb         # Etherscan API checker
│   │   └── lib/                # Shared modules
│   │       ├── bip39_common.rb
│   │       ├── seed_utils.rb
│   │       ├── sequence_utils.rb
│   │       └── sequence_generators/   # Pattern generator modules
│   │           ├── base.rb
│   │           ├── character_based.rb
│   │           ├── constructed_constants.rb
│   │           ├── cultural.rb
│   │           ├── deeper_constants.rb
│   │           ├── famous_random.rb
│   │           ├── math_based.rb
│   │           ├── mathematical_constants.rb
│   │           ├── memorable_patterns.rb
│   │           ├── misc.rb
│   │           ├── name_based.rb
│   │           ├── name_crypto.rb
│   │           ├── pattern_based.rb
│   │           ├── physics_constants.rb
│   │           ├── pin_patterns.rb
│   │           ├── prime_patterns.rb
│   │           ├── report.rb
│   │           ├── visual_spatial.rb
│   │           └── weak_known.rb
│   │
│   ├── c/                      # High-performance C implementation
│   │   ├── check_seeds_manager.c      # TUI manager for checking
│   │   ├── check_seeds_worker_btc.c   # ETH+BTC address checker
│   │   ├── check_seeds_worker.c       # ETH-only address checker
│   │   ├── check_seeds_gpu.c          # GPU-accelerated checker
│   │   ├── generate_paragraph_seeds.c # Fast paragraph seed generator
│   │   ├── find_sequences_worker.c    # Fast sequence finder
│   │   ├── base58.c / base58.h        # Base58 encoding for BTC
│   │   ├── bech32.c / bech32.h        # Bech32 encoding for SegWit
│   │   ├── keccak256.h                # Keccak hash for ETH
│   │   ├── ripemd160_neon.h           # RIPEMD160 with NEON optimization
│   │   ├── uthash.h                   # Hash table library
│   │   ├── Makefile
│   │   └── metal/                     # Apple Metal GPU shaders
│   │       ├── metal_pbkdf2.h
│   │       ├── metal_pbkdf2.m
│   │       └── pbkdf2_sha512.metal
│   │
│   ├── scripts/                # Download utilities
│   │   ├── download_data.sh
│   │   ├── download_texts.sh
│   │   └── download_pg19.sh
│   │
│   ├── assets/                 # Report styling
│   │   └── pdf-style.css
│   │
│   └── test/                   # Test scripts
│       └── test_paragraph_seeds.sh
│
├── data/                       # Reference data (downloaded)
│   ├── bip39.txt               # BIP-39 wordlist (2048 words)
│   ├── eth_rich_addresses.txt  # ETH addresses to check
│   ├── btc_rich_addresses.txt  # BTC addresses to check
│   ├── metadata.csv            # Book metadata
│   └── wordlists/              # Password wordlists
│       └── rockyou.txt
│
├── docs/                       # Documentation
│   ├── BOOTSTRAPPING.md
│   ├── HISTORY.md
│   ├── PERFORMANCE.md
│   ├── RESEARCH.md
│   ├── STRATEGIES.md
│   └── SUMMARY.md
│
├── inputs/                     # Text corpora (downloaded, gitignored)
│   ├── texts/                  # Curated texts (~150 books)
│   └── pg19/                   # Project Gutenberg (~28K books)
│       └── batch_01..10/       # Split into 10 batches
│
├── output/                     # Generated files (gitignored)
│   └── seeds/                  # Generated seed phrases
│
└── reports/                    # Generated reports

Quick Start

1. Bootstrap Data

Download the essential data files (BIP-39 wordlist, address lists):

./src/scripts/download_data.sh

2. Download Text Corpora

# Curated texts (~150 classic books)
./src/scripts/download_texts.sh

# Or full PG19 corpus (~28K books, ~12GB)
./src/scripts/download_pg19.sh

3. Build C Workers

cd src/c && make btc manager paragraph

Generate Seeds

Paragraph-Based Seeds (from texts)

Extract BIP-39 words from paragraph starting points in literature:

# Generate 24-word seeds from curated texts (default)
ruby src/ruby/generators/generate_paragraph_seeds.rb texts

# Generate 12-word seeds
ruby src/ruby/generators/generate_paragraph_seeds.rb texts --words=12

# From PG19 corpus (split into 10 batches of ~2800 books each)
ruby src/ruby/generators/generate_paragraph_seeds.rb pg19/batch_01 --words=24
ruby src/ruby/generators/generate_paragraph_seeds.rb pg19/batch_02 --words=12
# ... through batch_10

Birthday-Based Seeds

Generate seeds using birthday date components as word indices:

# 24-word seeds (default)
ruby src/ruby/generators/generate_birthday_seeds.rb

# 12-word seeds
ruby src/ruby/generators/generate_birthday_seeds.rb --words=12

Generates seeds for years 1960-2000 using:

  • Multiple date formats (US, EU, ISO)
  • Full year and short year variants
  • Absolute indexing and walk-through modes

Birthday Hash Seeds

SHA256(date_string) derivation for all date formats:

ruby src/ruby/generators/generate_birthday_hash_seeds.rb --words=12
ruby src/ruby/generators/generate_birthday_hash_seeds.rb --words=24

Password-Based Seeds

Generate seeds from common passwords using SHA256 derivation:

ruby src/ruby/generators/generate_password_seeds.rb --words=12
ruby src/ruby/generators/generate_password_seeds.rb --words=24

Rockyou Wordlist Seeds

Generate seeds from the full rockyou.txt password list:

# First download rockyou.txt to data/wordlists/
ruby src/ruby/generators/generate_rockyou_seeds.rb --words=24

Character Sequence Seeds

Generate seeds using mathematical and linguistic patterns:

ruby src/ruby/generators/generate_character_sequences.rb

Methods include:

  • Character-based (a-z groupings, reverse order, alternating)
  • Mathematical (Fibonacci, primes, golden ratio, triangular numbers)
  • Pattern-based (word length, skip patterns, phonetic)
  • Cultural (keyboard layouts, musical scales, chess notation)

Regenerate All Seeds

mkdir -p output/seeds

ruby src/ruby/generators/generate_paragraph_seeds.rb texts --words=12
ruby src/ruby/generators/generate_paragraph_seeds.rb texts --words=24
ruby src/ruby/generators/generate_birthday_seeds.rb --words=12
ruby src/ruby/generators/generate_birthday_seeds.rb --words=24
ruby src/ruby/generators/generate_birthday_hash_seeds.rb --words=12
ruby src/ruby/generators/generate_birthday_hash_seeds.rb --words=24
ruby src/ruby/generators/generate_password_seeds.rb --words=12
ruby src/ruby/generators/generate_password_seeds.rb --words=24
ruby src/ruby/generators/generate_character_sequences.rb --words=12
ruby src/ruby/generators/generate_character_sequences.rb --words=24

ruby src/ruby/generators/generate_paragraph_seeds.rb texts --words=12
ruby src/ruby/generators/generate_paragraph_seeds.rb texts --words=24

ruby src/ruby/generators/generate_paragraph_seeds.rb pg19/batch_01 --words=12
ruby src/ruby/generators/generate_paragraph_seeds.rb pg19/batch_01 --words=24
ruby src/ruby/generators/generate_paragraph_seeds.rb pg19/batch_02 --words=12
ruby src/ruby/generators/generate_paragraph_seeds.rb pg19/batch_02 --words=24

Check Seed Phrases

Use the C-based parallel manager with live TUI:

./src/c/check_seeds_manager output/seeds/my_seeds.txt [workers]

Example UI:

╔══════════════════════════════════════════════════════════════════════════════════════════════════╗
║                              SEED CHECKER MANAGER - PARALLEL TUI                                 ║
╠══════════════════════════════════════════════════════════════════════════════════════════════════╣
║  File: my_seeds.txt                                                                              ║
║  Seeds: 75   Skipped: 25   Workers: 8   Hits: 0                                                  ║
║  Done:  10   Speed: 2.5/s   Elapsed: 4s   ETA: 26s                                               ║
╠══════════════════════════════════════════════════════════════════════════════════════════════════╣
║  OVERALL: [######################------------------------------] 40%  (10/25)                    ║
╠══════════════════════════════════════════════════════════════════════════════════════════════════╣
║  Worker  1 ● [##############################] deriving  85%      abandon ability able...         ║
║  Worker  2 ● [######################--------] checking 53000 addr  abuse access accident...      ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════╝

Features:

  • Splits work across all CPU cores (configurable)
  • Live progress display for each worker
  • Shows derivation and checking phases
  • Resume support: Progress is saved automatically
  • Skip duplicates: Already-processed seeds are automatically skipped
  • Graceful Ctrl+C handling with progress persistence

Etherscan API Check

Check actual on-chain balances:

ruby src/ruby/generators/check_seeds_etherscan.rb output/seeds/my_seeds.txt YOUR_ETHERSCAN_API_KEY

Get an API key: https://etherscan.io/apis (free tier: 100K requests/day)

Output Files

All generators support --words=12 or --words=24 and include a marker in the filename:

  • texts-paragraph-12w-seeds-YYYYMMDD-HHMMSS.txt (12-word)
  • texts-paragraph-24w-seeds-YYYYMMDD-HHMMSS.txt (24-word)
  • birthday-absolute-full-year-us-12w-YYYYMMDD-HHMMSS.txt
  • etc.

Derivation Paths Covered

The seed checkers derive addresses from 14 different wallet formats:

NamePathDescription
BIP-44 Standardm/44'/60'/0'/0/{i}MetaMask, Trezor, most wallets
BIP-44 Accountsm/44'/60'/{a}'/0/{i}Multiple accounts (MetaMask)
Ledger Livem/44'/60'/{a}'/0/0Ledger Live (one addr per account)
Ledger Legacym/44'/60'/0'/{i}Ledger legacy, old MEW/Jaxx
BTC Legacym/44'/0'/0'/0/{i}Bitcoin P2PKH (1…)
BTC SegWitm/49'/0'/0'/0/{i}Bitcoin P2SH-SegWit (3…)
BTC Native SegWitm/84'/0'/0'/0/{i}Bitcoin Bech32 (bc1q…)

Where {a} = account index (0-19) and {i} = address index (0-499).

Total addresses derived per seed: ~53,000