{"id":20069280,"url":"https://github.com/telamon/xorchive","last_synced_at":"2025-05-05T19:32:18.863Z","repository":{"id":57402071,"uuid":"260292864","full_name":"telamon/xorchive","owner":"telamon","description":"Hyperdimensional lockbox","archived":false,"fork":false,"pushed_at":"2020-05-19T20:46:32.000Z","size":110,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-22T11:44:34.003Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/telamon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"patreon":"decentlabs"}},"created_at":"2020-04-30T18:51:43.000Z","updated_at":"2023-08-01T21:23:41.000Z","dependencies_parsed_at":"2022-09-15T18:51:00.666Z","dependency_job_id":null,"html_url":"https://github.com/telamon/xorchive","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telamon%2Fxorchive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telamon%2Fxorchive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telamon%2Fxorchive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telamon%2Fxorchive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/telamon","download_url":"https://codeload.github.com/telamon/xorchive/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252562944,"owners_count":21768369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2024-11-13T14:13:32.604Z","updated_at":"2025-05-05T19:32:18.492Z","avatar_url":"https://github.com/telamon.png","language":"JavaScript","funding_links":["https://patreon.com/decentlabs","https://www.patreon.com/decentlabs"],"categories":[],"sub_categories":[],"readme":"[`pure | mod`](https://github.com/telamon/create-pure)\n[`code style | standard`](https://standardjs.com/)\n# xorchive\n\n\u003e Hyperdimensional lockbox - Non-enumerable blob storage.\n\nA variant implementation of [OFFS technique](https://en.wikipedia.org/wiki/OFFSystem).\n\nFiles stored in this archive white-noise encrypted,\nwithout the `key` a file cannot be recovered, let alone proven to have been stored.\nEach pad in the archive might or might not be part of multiple files.\n\n- Sits ontop of [random-access-storage](https://github.com/random-access-storage) (works in browser + node)\n- [XOR-pad encrypts](https://en.wikipedia.org/wiki/XOR_cipher) contents (default 7 pads)\n- Unknown total amount of files\n- Unique key for each file\n- Uses blake3 to hash pads into keys\n\n## \u003ca name=\"install\"\u003e\u003c/a\u003e Install\n\n```\nyarn add xorchive\n```\n\n## \u003ca name=\"usage\"\u003e\u003c/a\u003e Usage\n\n```\nconst raf = require('random-access-file')\nconst Xorchive = require('xorchive')\n\nconst xfs = new Xorchive(raf('myStuff/'), nPads = 7)\n\nlet k1 = await xfs.store(readFileSync('~/secret_evidence.md'))\nconst k2 = await xfs.store(readFileSync('~/README.md'))\n// Each key is (32 * nPads) bytes in size\n\nconst doc = await xfs.recover(k2)\n\nlet k1 = null // secret_evidence.md is now lost forever,\n// and there's no proof of it ever having been stored.\n```\n\n## API\n\n### `new Xorchive(storage, nPads = 7, padSize = 128kB, hashSize = 32)`\n\nInitialized a new archive.\n\n- `nPads` number of random pads to use for chunk encryption.\n- `padSize` the size of a pad. defaults to `128 \u003c\u003c 10`\n- `hashSize` blake3 hashSize\n\n\n### `store(data)`\n\nEncrypts your data as `data.length / padSize` chunks and\nreturns a Promise for a `key`-buffer containing all the hashes of the pads\nused during encryption.\n\n\n- `data` accepts Buffer, UInt8Array and Array\n\n### `recover(key)`\n\nAttempts to find all the pads referenced in the key and reconstruct the\noriginal data.\n\nreturns a Promsie that resolves to your original data if\nthe key is valid.\n\n## Donations\n\n```ad\n _____                      _   _           _\n|  __ \\   Help Wanted!     | | | |         | |\n| |  | | ___  ___ ___ _ __ | |_| |     __ _| |__  ___   ___  ___\n| |  | |/ _ \\/ __/ _ \\ '_ \\| __| |    / _` | '_ \\/ __| / __|/ _ \\\n| |__| |  __/ (_|  __/ | | | |_| |___| (_| | |_) \\__ \\_\\__ \\  __/\n|_____/ \\___|\\___\\___|_| |_|\\__|______\\__,_|_.__/|___(_)___/\\___|\n\nIf you're reading this it means that the docs are missing or in a bad state.\n\nWriting and maintaining friendly and useful documentation takes\neffort and time. In order to do faster releases\nI will from now on provide documentation relational to project activity.\n\n  __How_to_Help____________________________________.\n |                                                 |\n |  - Open an issue if you have ANY questions! :)  |\n |  - Star this repo if you found it interesting   |\n |  - Fork off \u0026 help document \u003c3                  |\n |.________________________________________________|\n\nI publish all of my work as Libre software and will continue to do so,\ndrop me a penny at Patreon to help fund experiments like these.\n\nPatreon: https://www.patreon.com/decentlabs\nDiscord: https://discord.gg/K5XjmZx\nTelegram: https://t.me/decentlabs_se\n```\n\n\n## \u003ca name=\"changelog\"\u003e\u003c/a\u003e Changelog\n\n### 1.2.0\n- added API docs\n- \"fixed\" data-length returned by Xorchive#recover() in most cases\n### 1.1.0\n- added pad rotatation by oridnal to make the order of pads significant.\n- fixed chunked store/recover\n\n### 1.0.0\n- first release\n\n## \u003ca name=\"contribute\"\u003e\u003c/a\u003e Contributing\n\nBy making a pull request, you agree to release your modifications under\nthe license stated in the next section.\n\nOnly changesets by human contributors will be accepted.\n\n## License\n\nGNU AGPLv3 © Tony Ivanov\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftelamon%2Fxorchive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftelamon%2Fxorchive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftelamon%2Fxorchive/lists"}