{"id":51590575,"url":"https://github.com/dotaadarsh/not-another-password-generator","last_synced_at":"2026-07-11T14:02:55.204Z","repository":{"id":354968813,"uuid":"1226253124","full_name":"dotAadarsh/Not-another-password-generator","owner":"dotAadarsh","description":"A cryptographically strong password generator powered by real-world entropy.","archived":false,"fork":false,"pushed_at":"2026-05-13T15:58:38.000Z","size":73,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-13T17:35:23.154Z","etag":null,"topics":["password-generator"],"latest_commit_sha":null,"homepage":"https://not-another-password-generator.vercel.app","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotAadarsh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-01T06:43:50.000Z","updated_at":"2026-05-13T15:58:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dotAadarsh/Not-another-password-generator","commit_stats":null,"previous_names":["dotaadarsh/not-another-password-generator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dotAadarsh/Not-another-password-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotAadarsh%2FNot-another-password-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotAadarsh%2FNot-another-password-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotAadarsh%2FNot-another-password-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotAadarsh%2FNot-another-password-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotAadarsh","download_url":"https://codeload.github.com/dotAadarsh/Not-another-password-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotAadarsh%2FNot-another-password-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35364269,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["password-generator"],"created_at":"2026-07-11T14:02:54.478Z","updated_at":"2026-07-11T14:02:55.199Z","avatar_url":"https://github.com/dotAadarsh.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Not Another Password Generator\n\n\u003e A cryptographically strong password generator powered by real-world entropy — not `Math.random()`.\n\n---\n\n## What makes this different?\n\nMost password generators call `Math.random()` and call it a day. This one fuses **13 real-world entropy signals** into a SHA-256 hash every single time you click generate — no reuse, no shortcuts.\n\n---\n\n## Entropy Sources\n\nEvery click collects fresh chaos from all of these simultaneously:\n\n| Source | Signal |\n|---|---|\n| `performance.now()` | Sub-millisecond high-resolution timing jitter |\n| `Date.now()` | Current timestamp |\n| `crypto.getRandomValues()` | 128 bytes of CSPRNG output |\n| `navigator.hardwareConcurrency` | CPU core count fingerprint |\n| `navigator.deviceMemory` | Device RAM fingerprint |\n| `navigator.platform` | OS/platform string |\n| `navigator.language` | Browser language setting |\n| Screen resolution + color depth | Display fingerprint |\n| Intl timezone | Timezone fingerprint |\n| Network round-trip latency | Live-measured fetch timing |\n| Mouse movement buffer | Up to 256 recent `(x, y, t, dx, dy)` tuples |\n| Performance navigation entries | Browser session state |\n| Window inner dimensions | Viewport size |\n\nAll 13 sources are serialized → hashed with **SHA-256 via the Web Crypto API** → converted to a password using a counter-based CSPRNG (no `Math.random()` anywhere in the pipeline).\n\n---\n\n## Features\n\n**🔐 Password Generation**\n- Guaranteed mix of uppercase, lowercase, digits, and symbols\n- Fisher-Yates shuffle seeded from a second SHA-256 pass\n- Adjustable length from 6 to 64 characters\n- Fresh entropy collected on every single click\n\n**👁 Show / Hide Toggle**\n- Password is masked by default after generation\n- Eye icon to reveal / re-mask instantly\n\n**🔥 Burn After Reading**\n- Copy the password → a 30-second countdown begins\n- Color-coded urgency: yellow → orange → red as time runs out\n- Password auto-wipes at zero — cancel anytime\n\n**📊 Live Entropy Dashboard**\n- Mouse entropy activity bar (live, decays when idle)\n- Network latency display (measured on each generate)\n- Active entropy sources count with hover popover listing all 13 sources\n\n**⏱ Crack Time Estimator**\n- Calculates entropy bits from charset pool × length\n- Estimates time-to-crack at 100 billion guesses/sec (GPU cluster)\n- Color-coded: red (instantly) → green (centuries) → purple glow (longer than the universe)\n\n**🎨 Color-Zoned Slider**\n- Red/Orange: 6–12 chars — Weak\n- Purple: 13–30 chars — Strong\n- Deep Purple: 30–64 chars — Fortress\n\n**🌗 Light \u0026 Dark Mode**\n- Toggle in the top bar\n- Smooth transitions throughout\n\n---\n\n## Security Model\n\n- **No backend.** Everything runs in your browser.\n- **No data transmitted.** Passwords never leave your device.\n- **No storage.** Nothing is written to localStorage, cookies, or any persistent store.\n- **No `Math.random()`.** The entire pipeline uses `crypto.getRandomValues()` and `crypto.subtle.digest()`.\n- **No dependencies** beyond React and Tailwind-compatible styles.\n\n---\n\n## Tech Stack\n\n- **React 18** — UI and state\n- **Web Crypto API** — SHA-256 hashing + CSPRNG bytes\n- **`performance.now()`** — High-resolution timing entropy\n- **Fetch API** — Network latency measurement\n- **Mouse events** — Live entropy buffer collection\n- Fully client-side — deployable on any static host\n\n---\n\n## Getting Started\n\n```bash\n# Clone the repo\ngit clone https://github.com/dotAadarsh/not-another-password-generator.git\ncd not-another-password-generator\n\n# Install dependencies\nnpm install\n\n# Start dev server\nnpm run dev\n```\n\nThen open [http://localhost:5173](http://localhost:5173).\n\n### Build for production\n\n```bash\nnpm run build\n```\n\nThe output in `dist/` is a fully static site — drop it on GitHub Pages, Vercel, Netlify, or anywhere.\n\n---\n\n## How the Entropy Pipeline Works\n\n```\n┌─────────────────────────────────────────────┐\n│           13 Real-World Signals              │\n│  timestamps · crypto bytes · hardware ·     │\n│  network latency · mouse buffer · screen …  │\n└────────────────────┬────────────────────────┘\n                     │ JSON.stringify + perf.now()\n                     ▼\n            ┌─────────────────┐\n            │   SHA-256 Hash  │  (Web Crypto API)\n            └────────┬────────┘\n                     │ Uint8Array[32]\n                     ▼\n        ┌────────────────────────┐\n        │  Counter-based CSPRNG  │\n        │  Re-hash per character │\n        └────────────┬───────────┘\n                     │\n                     ▼\n        ┌────────────────────────┐\n        │  Fisher-Yates Shuffle  │  (seeded from 2nd SHA-256 pass)\n        └────────────┬───────────┘\n                     │\n                     ▼\n             Strong Password ✓\n```\n\n---\n\n## License\n\nMIT — do whatever you want with it.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003eBuilt by \u003ca href=\"https://x.com/dotAadarsh\"\u003e@dotAadarsh\u003c/a\u003e\u003c/p\u003e\n  \u003ca href=\"https://buymeachai.ezee.li/dotaadarsh\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://buymeachai.ezee.li/assets/images/buymeachai-button.png\" alt=\"Buy Me A Chai\" width=\"160\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotaadarsh%2Fnot-another-password-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotaadarsh%2Fnot-another-password-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotaadarsh%2Fnot-another-password-generator/lists"}