{"id":40037769,"url":"https://github.com/le0developer/jspowobfdata","last_synced_at":"2026-01-19T05:01:13.253Z","repository":{"id":330980475,"uuid":"1124707916","full_name":"Le0Developer/jspowobfdata","owner":"Le0Developer","description":"JavaScript Proof Of Work Obfuscated Data","archived":false,"fork":false,"pushed_at":"2026-01-08T15:06:41.000Z","size":195,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-08T17:27:16.038Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://le0developer.github.io/jspowobfdata/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Le0Developer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-12-29T13:30:25.000Z","updated_at":"2026-01-08T15:06:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Le0Developer/jspowobfdata","commit_stats":null,"previous_names":["le0developer/jspowobfdata"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Le0Developer/jspowobfdata","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Le0Developer%2Fjspowobfdata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Le0Developer%2Fjspowobfdata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Le0Developer%2Fjspowobfdata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Le0Developer%2Fjspowobfdata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Le0Developer","download_url":"https://codeload.github.com/Le0Developer/jspowobfdata/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Le0Developer%2Fjspowobfdata/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28561842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-01-19T05:01:11.616Z","updated_at":"2026-01-19T05:01:13.239Z","avatar_url":"https://github.com/Le0Developer.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jspowobfdata\n\nJavaScript Proof Of Work Obfuscated Data.\n\nThis project provides a way to obfuscate data using a proof-of-work mechanism in\nJavaScript. The obfuscated data can only be deobfuscated by solving a\ncomputational puzzle, ensuring that the data is protected until the\nproof-of-work is completed.\n\nThis is useful for scenarios where you want to hide information from casual bots\nor automated systems, requiring them to expend computational effort before\naccessing the data (for example, contact information on a webpage).\n\n## Usage\n\nUse the website to obfuscate your data:\nhttps://le0developer.github.io/jspowobfdata/index.html\n\n## Compatibility\n\nThe script used at runtime to deobfuscate is approximately:\n\n| Minified | Gzipped | Brotli |\n| -------- | ------- | ------ |\n| 1258 B   | 705 B   | 607 B  |\n\nIt works in all modern browsers that support the\n[Web Crypto API](https://caniuse.com/mdn-api_subtlecrypto) (Widely available\nsince 2017).\n\n## Modern build\n\nIf you can spare some extra bytes and want better performance, you can use the\nmodern build that uses WebAssembly and Web Workers. This build is around:\n\n| Minified | Gzipped | Brotli |\n| -------- | ------- | ------ |\n| 16966 B  | 7444 B  | 6463 B |\n\nTo use the modern build, include the `MODERN=1` flag when building the library\nwith `make`. The WASM implementation is ~5-6x faster than the pure SubtleCrypto\nimplementation.\n\nIf WASM or Workers are not supported, it will gracefully fall back to the pure\nSubtleCrypto implementation (however without yielding to the main event loop due\nto build flags).\n\n## Animation\n\nThe `aria-busy` attribute is used to indicate the deobfuscation process is\nongoing. This allows you to add CSS animations during the proof-of-work phase.\n\nWe use such an animation (provided by [Pico.css](https://picocss.com/) ) on our\n[demo page](https://le0developer.github.io/jspowobfdata/demo.html).\n\n## Details\n\nThe obfuscation process involves the following steps:\n\n1. Choose a key space (in bits) that determines the difficulty of the\n   proof-of-work.\n\n2. Generate a 32-byte AES-GCM key and a random nonce.\n\n3. Encrypt the data using AES-GCM with the generated key and nonce.\n\n4. Blank out N bits of the key to create a puzzle. The number of bits to blank\n   is determined by the chosen key space.\n\n5. Package the obfuscated data, nonce, and puzzle.\n\n## Extra libraries\n\nThere are some extra libraries available in this repo, but you need to clone and\nbuild them yourself using `make all`. They will be in the `dist/` folder after\nbuilding.\n\n- `main.js` - The main runtime script to deobfuscate data in the browser. (see\n  table above for size)\n- `page.js` - The runtime script for the demo page. Almost 4kb due to UI\n  handling, generation and speedtest. You shouldn't need to ever use this.\n- `weblib.js` - This has the runtime logic like `main.js`, but it only exposes a\n  minimal Javascript API and doesn't interact with the DOM by default. This\n  makes it a further ~300 bytes smaller than `main.js`. By default it exports as\n  a global `jsobfpow` function, but you can change that with build time flags.\n  See `src/bundles/weblib.sk` for details.\n\n## References\n\nThis is inspired by\n[Altcha's Obfuscating Data](https://altcha.org/docs/v2/obfuscation/) feature,\nhowever this implementation has a few key differences:\n\n- No branding\n- Small footprint (\u003e25 times less JavaScript shipped to the client)\n\n## Contributing\n\nI consider this project in its current form to be feature complete.\n\nMeasurable improvements (e.g. runtime code size) will be welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fle0developer%2Fjspowobfdata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fle0developer%2Fjspowobfdata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fle0developer%2Fjspowobfdata/lists"}