{"_id":"@alwaysproof/proofset","_rev":"10-ab1bbdd8e144418d4310e9f24d71c7eb","name":"@alwaysproof/proofset","dist-tags":{"alpha":"0.0.1-alpha.0","latest":"0.1.8"},"versions":{"0.0.1-alpha.0":{"name":"@alwaysproof/proofset","version":"0.0.1-alpha.0","license":"MIT","_id":"@alwaysproof/proofset@0.0.1-alpha.0","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"homepage":"https://github.com/alwaysproof/proofset#readme","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"dist":{"shasum":"cfaa9bcb2d0e5182109f90f96be9f03e06c4b084","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.0.1-alpha.0.tgz","fileCount":4,"integrity":"sha512-SwD8AgGNiuuyflQyTg7T9Q/rJQyJeCGjHUr94Se+tkfoIkAIFjuNZ2G13rZge9y7go9rbW6vhm7WJPVk7qAHiQ==","signatures":[{"sig":"MEUCIBT7ZuOaP2Il5euNV6EmD5ipJGK8M2nSRerC+x7OHGkVAiEAm4kcxuXLZJTQEoJgdceysa0TQjVFT6vM7AfywNx8ZEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":388},"main":"index.js","types":"index.d.ts","_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"repository":{"url":"git+https://github.com/alwaysproof/proofset.git","type":"git"},"_npmVersion":"11.5.2","description":"Proofset - coming soon","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/proofset_0.0.1-alpha.0_1771365096702_0.7732890859217154","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@alwaysproof/proofset","version":"0.1.0","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"license":"MIT","_id":"@alwaysproof/proofset@0.1.0","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"bin":{"proofset":"dist/cli/index.js"},"dist":{"shasum":"acb95a0ec931b07aaf1061fea4cf65415783754b","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.0.tgz","fileCount":10,"integrity":"sha512-CQc2BnvVSZdmRetVya4FbApAy7IiOx1qzrEnHi1a7Le29H+/IsaCTX9MtKvdp5+uZVJ8HdiOPfiEzQqJg76Dtw==","signatures":[{"sig":"MEUCIBgvzubDKTfNOG7e8JUBTfKvGxJECclyK+g2mBNWOe1mAiEAirbTGoXdyulzuEIC2Pv9EK0jmVnVVZeaLm/VBY6+jc0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38660},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6da77859d2d055b1077abe736605e2d0551dc7f2","scripts":{"test":"vitest run","build":"tsup src/index.ts src/cli/index.ts --format esm,cjs --dts"},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"_npmVersion":"11.5.2","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","directories":{},"_nodeVersion":"22.17.1","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/proofset_0.1.0_1771407372870_0.41642162056516074","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alwaysproof/proofset","version":"0.1.1","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"license":"MIT","_id":"@alwaysproof/proofset@0.1.1","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"homepage":"https://github.com/alwaysproof/proofset#readme","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"bin":{"proofset":"dist/cli/index.js"},"dist":{"shasum":"b03aa9d76e5c9e0f254b30c7921b7ba5397d2bc1","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.1.tgz","fileCount":10,"integrity":"sha512-pzCraQsUoPMMrOhXM7VZeSoiGoeqMtrrbxd6okzg5HyoKKeqFJLhI60bCBa498nsycLJzKgPuYhn1/ivea3sxA==","signatures":[{"sig":"MEQCIAp9RcG+fQ/k1wz73rrFFouw6m0Tl8WDl8xfJNLBSXo4AiA2pOfPYJXvETYbAIpXK+v4NiZ4G8c40R+RjN0SGQgsUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38802},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6da77859d2d055b1077abe736605e2d0551dc7f2","scripts":{"test":"vitest run","build":"tsup src/index.ts src/cli/index.ts --format esm,cjs --dts"},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"repository":{"url":"git+https://github.com/alwaysproof/proofset.git","type":"git","directory":"packages/core"},"_npmVersion":"11.5.2","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","directories":{},"_nodeVersion":"22.17.1","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/proofset_0.1.1_1771408049283_0.182118544270514","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alwaysproof/proofset","version":"0.1.2","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"license":"MIT","_id":"@alwaysproof/proofset@0.1.2","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"homepage":"https://github.com/alwaysproof/proofset#readme","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"bin":{"proofset":"dist/cli/index.js"},"dist":{"shasum":"723d0e1e615e6983adf8bbc8cd3c4b89b25f2fd8","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.2.tgz","fileCount":12,"integrity":"sha512-N4cT0Os3XmsQItVPcQL/R5nIqfiSTWWxNgn8/qAh1oxpxxoStBbsWQ8ndNooUo/DGKWwnmG/l5wbp8ZTUMcGfg==","signatures":[{"sig":"MEQCIHEJKienIoKUFO/b2uVhXyni+VH21OusZQX8lWbsUuOyAiAEpXLAxRsAFAmq7ZJkn8bnD0e/fjjvEWim9WO0rfnv0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47406},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"45bafc2aa33050b88d38e93b657a379852a0b1d2","scripts":{"test":"vitest run","build":"tsup src/index.ts src/cli/index.ts --format esm,cjs --dts","prepack":"cp ../../README.md ../../LICENSE ."},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"repository":{"url":"git+https://github.com/alwaysproof/proofset.git","type":"git","directory":"packages/core"},"_npmVersion":"11.5.2","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","directories":{},"_nodeVersion":"22.17.1","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/proofset_0.1.2_1771412841865_0.25836232851244945","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@alwaysproof/proofset","version":"0.1.3","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"license":"MIT","_id":"@alwaysproof/proofset@0.1.3","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"homepage":"https://github.com/alwaysproof/proofset#readme","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"bin":{"proofset":"dist/cli/index.js"},"dist":{"shasum":"5038617b37c308a90769ee2296bdcabc2e018bf1","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.3.tgz","fileCount":12,"integrity":"sha512-L8NheETkX89YHkWJklThwI6/CpFseF/4Y2dHXAo40jA3zMdgmWjfZE+xJNhIVihC9bYWHrdR0IHat/RdNoTfBw==","signatures":[{"sig":"MEUCIQCsEJPSQc88Ah+ryCdxRUuCsbu5qMY6aYGnRnM8nGBxSgIgQO5GRTPkGLeV64ycqNJL4U9mEcRLCQpO4dbl1O1B3j0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82193},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6d55234b955fb77d64fa6bd1c9c016bb5d4a682a","scripts":{"test":"vitest run","build":"rm -rf dist && tsup src/index.ts src/cli/index.ts --format esm,cjs --dts","clean":"rm -rf dist","prepack":"cp ../../README.md ../../LICENSE ."},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"repository":{"url":"git+https://github.com/alwaysproof/proofset.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.4","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/proofset_0.1.3_1771546798905_0.13784947097474198","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@alwaysproof/proofset","version":"0.1.4","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"license":"MIT","_id":"@alwaysproof/proofset@0.1.4","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"homepage":"https://github.com/alwaysproof/proofset#readme","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"bin":{"proofset":"dist/cli/index.js"},"dist":{"shasum":"00986fe52c389f5f745643a447b3600698eebec0","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.4.tgz","fileCount":12,"integrity":"sha512-fZ2V8DYYSGPXz39aYSdaCQqcVYHsjojXcKcEXXatlWd6dTbroajcApQ129BB2gMTszmnVUVxhI8FcT2oW62yaQ==","signatures":[{"sig":"MEUCIGr53rD4RDL7gx4oHo0R7yENTfdzyfeAny63QkxN4xuCAiEApYhNCx9nauSl/x48npo1OyJRKkLdk6YmElTP9K2qaeQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85467},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7f5b3dd7ece135a9e6bc29c5379d5ef78f5c8523","scripts":{"test":"vitest run","build":"rm -rf dist && tsup src/index.ts src/cli/index.ts --format esm,cjs --dts","clean":"rm -rf dist","prepack":"cp ../../README.md ../../LICENSE ."},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"repository":{"url":"git+https://github.com/alwaysproof/proofset.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.4","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/proofset_0.1.4_1771557591943_0.30595503456049644","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@alwaysproof/proofset","version":"0.1.5","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"license":"MIT","_id":"@alwaysproof/proofset@0.1.5","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"homepage":"https://github.com/alwaysproof/proofset#readme","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"bin":{"proofset":"dist/cli/index.js"},"dist":{"shasum":"2bb78365b6524ada8cc7817e513457e3312a522e","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.5.tgz","fileCount":12,"integrity":"sha512-c1XoI8JnJsLqv2VgW+U0ucCpfZpOwX3QlQpuYmlEFzFeuAHEuxk7PWQItNkPzZZs+R1iQ9GUQPYENvOIXT9atw==","signatures":[{"sig":"MEQCIHfC+sik8eRf3auCPQR8xPQxwX/5G8L0sp6L8dIEssDuAiAMGvV0HVpFstIXk8HTTSvDDj0zOja74bv0wfWVABzXaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107682},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"277b26958d292ce3680729018ddce55d8082022e","scripts":{"test":"vitest run","build":"rm -rf dist && tsup src/index.ts src/cli/index.ts --format esm,cjs --dts","clean":"rm -rf dist","prepack":"cp ../../README.md ../../LICENSE ."},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"repository":{"url":"git+https://github.com/alwaysproof/proofset.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.4","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/proofset_0.1.5_1771892199226_0.7023959760173741","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@alwaysproof/proofset","version":"0.1.6","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"license":"MIT","_id":"@alwaysproof/proofset@0.1.6","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"homepage":"https://github.com/alwaysproof/proofset#readme","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"bin":{"proofset":"dist/cli/index.js"},"dist":{"shasum":"f52df5705053fa72251bea46fcdfea1fe4a7d715","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.6.tgz","fileCount":12,"integrity":"sha512-IWX7M36lAalLj0lTWMG08gQlCFK+paht75tChpRvS6TFObp6gDBI5lYsM8ENjj2X5Q5dpw4WOPqKF5HAS13HyQ==","signatures":[{"sig":"MEYCIQC6s39ulZpwolIm2Wc8MxVfwre+17TPzxMCqUS+I8NYJgIhAPcHlncE4lMeLIXkYM0oKXsjzjAacu9TcWIAoY8THfKG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108590},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7decd0062747a4a07c2656069cd0b038f7f4bced","scripts":{"test":"vitest run","build":"rm -rf dist && tsup src/index.ts src/cli/index.ts --format esm,cjs --dts","clean":"rm -rf dist","prepack":"cp ../../README.md ../../LICENSE ."},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"repository":{"url":"git+https://github.com/alwaysproof/proofset.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.4","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/proofset_0.1.6_1771918720074_0.7508034172961211","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@alwaysproof/proofset","version":"0.1.7","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"license":"MIT","_id":"@alwaysproof/proofset@0.1.7","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"homepage":"https://github.com/alwaysproof/proofset#readme","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"bin":{"proofset":"dist/cli/index.js"},"dist":{"shasum":"97bee1ca3faa4ccb504842cb1bf39c4aec23e57b","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.7.tgz","fileCount":23,"integrity":"sha512-9DC+fQJb88Ire/lyqyGBXSqktQ48XispLo8tGRKreFehJViUOT+p7VlrjvW2tytfkCPzUc2I/d6bo7B5dxaQFw==","signatures":[{"sig":"MEQCIHYYJtPt26Kgfu68AybqmYiQwTKAMYv876YHebMOHRBMAiBAPfv57+IfU/mOJjUAm+yzLY3xtuikCJlBFKang3Mldg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120180},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./hashers/node":{"import":"./dist/hashers/node.js","require":"./dist/hashers/node.cjs"},"./hashers/wasm":{"import":"./dist/hashers/wasm.js","require":"./dist/hashers/wasm.cjs"}},"gitHead":"2267044100f0e463846ab80c60ad5c52e2ba8ed2","scripts":{"test":"vitest run","build":"rm -rf dist && tsup src/index.ts src/cli/index.ts src/hashers/node.ts src/hashers/wasm.ts --format esm,cjs --dts","clean":"rm -rf dist","prepack":"cp ../../README.md ../../LICENSE ."},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"repository":{"url":"git+https://github.com/alwaysproof/proofset.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.4","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","hash-wasm":"^4.12.0","@types/node":"^22.0.0"},"peerDependencies":{"hash-wasm":"^4.0.0"},"peerDependenciesMeta":{"hash-wasm":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/proofset_0.1.7_1772624962309_0.16450519109743467","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@alwaysproof/proofset","version":"0.1.8","license":"MIT","description":"Create and verify cryptographic proof sets for file integrity — library and CLI","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"repository":{"type":"git","url":"git+https://github.com/alwaysproof/proofset.git","directory":"packages/core"},"type":"module","bin":{"proofset":"dist/cli/index.js"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./hashers/node":{"import":"./dist/hashers/node.js","require":"./dist/hashers/node.cjs"},"./hashers/wasm":{"import":"./dist/hashers/wasm.js","require":"./dist/hashers/wasm.cjs"}},"peerDependencies":{"hash-wasm":"^4.0.0"},"peerDependenciesMeta":{"hash-wasm":{"optional":true}},"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"clean":"rm -rf dist","build":"rm -rf dist && tsup src/index.ts src/cli/index.ts src/hashers/node.ts src/hashers/wasm.ts --format esm,cjs --dts","prepack":"cp ../../README.md ../../LICENSE .","test":"vitest run"},"dependencies":{"@inquirer/password":"^5.0.13","commander":"^13.0.0","fast-glob":"^3.3.0"},"devDependencies":{"@types/node":"^22.0.0","hash-wasm":"^4.12.0","tsup":"^8.0.0"},"gitHead":"42c8c8eb11f94cd4a6317d658b6ce06c65cd3132","_id":"@alwaysproof/proofset@0.1.8","bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"homepage":"https://github.com/alwaysproof/proofset#readme","_nodeVersion":"22.22.0","_npmVersion":"11.14.1","dist":{"integrity":"sha512-B229uagU/Eo5rjJolIpstDUHoL5bqJpHkp2mezbMNzuT74GpHdFslpcsSGsb4fcaDFZO39zv3uRjulAHlcILwg==","shasum":"eb60f26c9569c0e7043fb070d82b0d43195a9ad0","tarball":"https://registry.npmjs.org/@alwaysproof/proofset/-/proofset-0.1.8.tgz","fileCount":23,"unpackedSize":130866,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDGU8kwzE7vX4fQrNjD4cpQIROzEtEQ4wDZlJmoVah2wQIhAKrT9TEQYo42TFChy+qSaJdI0fW6/QLbFBPFjDTl+IH4"}]},"_npmUser":{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"},"directories":{},"maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/proofset_0.1.8_1779248767166_0.4806763974900454"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-17T21:51:36.574Z","modified":"2026-05-20T03:46:07.435Z","0.0.1-alpha.0":"2026-02-17T21:51:36.826Z","0.1.0":"2026-02-18T09:36:13.017Z","0.1.1":"2026-02-18T09:47:29.437Z","0.1.2":"2026-02-18T11:07:22.040Z","0.1.3":"2026-02-20T00:19:59.067Z","0.1.4":"2026-02-20T03:19:52.082Z","0.1.5":"2026-02-24T00:16:39.387Z","0.1.6":"2026-02-24T07:38:40.699Z","0.1.7":"2026-03-04T11:49:22.472Z","0.1.8":"2026-05-20T03:46:07.313Z"},"bugs":{"url":"https://github.com/alwaysproof/proofset/issues"},"license":"MIT","homepage":"https://github.com/alwaysproof/proofset#readme","keywords":["proofset","hash","checksum","integrity","verification","commitment","selective-disclosure","proof","attestation","sha256","sha512","cryptography","file-integrity","data-integrity"],"repository":{"type":"git","url":"git+https://github.com/alwaysproof/proofset.git","directory":"packages/core"},"description":"Create and verify cryptographic proof sets for file integrity — library and CLI","maintainers":[{"name":"alwaysproof-admin","email":"daybreakdigitallabs@gmail.com"}],"readme":"# @alwaysproof/proofset\r\n\r\nCreate and verify cryptographic proof sets for file integrity -- commit to a set of files with a single hash, then selectively disclose individual files later.\r\n\r\n## What It Does\r\n\r\nProofset represents all files in a directory as a single hash value (the **hashset hash**). You publish that one hash as a commitment. Later, you can reveal individual files from the set -- and anyone can verify they belong to the original commitment -- without exposing the rest.\r\n\r\n- **Single commitment** -- One hash represents an arbitrary number of files.\r\n- **Selective disclosure** -- Reveal individual files independently, in any order, at any time.\r\n- **Verifiability** -- Anyone can verify a disclosed file belongs to the committed set using only standard hash functions.\r\n- **Simplicity** -- Uses only SHA-256 or SHA-512 and string concatenation. No additional cryptographic primitives.\r\n\r\n## Staged Disclosure\r\n\r\nOnce you've created a proofset, you choose what to release -- and when. There are three things you can hand out, each independently verifiable:\r\n\r\n1. **The `hashset_hash`** -- one hash representing the whole set. Compact and opaque: by itself, it just attests that *something* of this commitment exists. Well-suited to early, low-noise publication (a blockchain transaction, a self-addressed email, a public timestamp). It reveals neither the file count nor any file detail.\r\n\r\n2. **The `file_details_hash_list`** -- the list of per-item hashes that the `hashset_hash` summarizes. Releasing this reveals how many items are in the set and lets anyone independently re-derive the `hashset_hash` (so the list is provably tied to your earlier commitment). It still says nothing about the contents of individual items.\r\n\r\n3. **Individual `file_details_line` entries** -- the actual per-file details (content hash, modified time, path/name). Disclose any subset, in any order, at any time. Each disclosed line is independently verifiable, and a recipient who also has the hash list can confirm the line is part of your committed set.\r\n\r\nYou don't have to release all three of the pieces above, and they don't have to come out in the order listed. A few patterns:\r\n\r\n- **Early commitment, late reveal** -- publish `hashset_hash` to a blockchain on day zero. Years later, share the hash list and selected detail lines to prove what existed back then.\r\n- **Announce the size** -- publish the hash list to assert \"I have N items committed\"; release detail lines individually as occasions arise.\r\n- **Disclose first, anchor later if challenged** -- share a single detail line (or even the underlying file). If someone disputes that the file existed years ago, point to the `hashset_hash` you published back then, walk them through the hash list, and the new detail line ties cleanly into the chain.\r\n\r\nEach later disclosure ties cryptographically back to whatever was released earlier: a detail line shared years after the `hashset_hash` was published still verifies against it via the hash list. The strength of your proof-of-existence depends on how early you anchored *either* the `hashset_hash` or the `file_details_hash_list` publicly -- whichever appears first in the public record sets the floor for how far back the set is provably attested.\r\n\r\nSee [SPEC.md](packages/core/SPEC.md#5-selective-disclosure-workflow) for the precise verification rules at each stage.\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install @alwaysproof/proofset\r\n```\r\n\r\nOr install globally for CLI use:\r\n\r\n```bash\r\nnpm install -g @alwaysproof/proofset\r\n```\r\n\r\nAlso available as `proofset` (re-exports `@alwaysproof/proofset`).\r\n\r\n## CLI\r\n\r\n### Create a proofset\r\n\r\n```bash\r\nproofset create -s ./my-files -o ./output\r\n```\r\n\r\nThis scans `./my-files`, generates the proofset, and writes two files to `./output`:\r\n\r\n- `proofset-details.txt` -- Detail lines for each file (keep private, disclose selectively)\r\n- `proofset-file-details-hash-list.txt` -- Hash list (can be shared publicly)\r\n\r\nThe **hashset hash** is printed to stdout -- this is the single value you publish. A high-entropy `proofset_seed` is auto-generated and recorded as a `proofset_seed:` preamble line at the top of the details file (and echoed to stderr for capture). Supply your own with `-p <seed>` if you want a specific value.\r\n\r\nThe seed is only needed to **regenerate** the same proofset later (which also requires the same files with the same content, timestamps, and ordering) or to demonstrate how it was created. Verification of an existing proofset -- including the `hashset_hash` -- never requires the seed. Storing it in the preamble is convenient; you can remove it freely afterward, or use `--no-store-seed` at creation time to keep it out of the file entirely.\r\n\r\n**Options:**\r\n\r\n| Flag | Description | Default |\r\n|------|-------------|---------|\r\n| `-s, --source <dir>` | Source files directory | (required) |\r\n| `-o, --output <dir>` | Output directory | `.` |\r\n| `-p, --proofset-seed <seed>` | Proofset seed value (`-` to prompt securely) | auto-generated |\r\n| `--no-store-seed` | Omit the seed value from the details file preamble (writes blank `proofset_seed:`) | |\r\n| `--password <seed>` | **Deprecated** alias for `--proofset-seed` | |\r\n| `--simple` | Create a simple proofset (content hash + filename only, no selective disclosure) | |\r\n| `--algo <algorithm>` | `sha256` or `sha512` | `sha256` |\r\n\r\n### Verify a proofset\r\n\r\n```bash\r\n# Verify details file (self-check all detail lines)\r\nproofset verify -d proofset-details.txt\r\n\r\n# Verify details against hash list\r\nproofset verify -d proofset-details.txt -a proofset-file-details-hash-list.txt\r\n\r\n# Compute hashset hash from hash list\r\nproofset verify -a proofset-file-details-hash-list.txt\r\n\r\n# Verify hashset hash matches expected value\r\nproofset verify -a proofset-file-details-hash-list.txt -h ea361143c639...\r\n\r\n# Verify a single disclosed detail line\r\nproofset verify -i \"23f05dc8...: 07eed9d5... 20260217-003735 ebe2f179... file2.txt\"\r\n\r\n# Verify a single detail line against the hash list\r\nproofset verify -i \"23f05dc8...: 07eed9d5... 20260217-003735 ebe2f179... file2.txt\" -a proofset-file-details-hash-list.txt\r\n\r\n# Extract hash list from a details file\r\nproofset verify -d proofset-details.txt -x derived-hash-list.txt\r\n```\r\n\r\n### Verify file contents\r\n\r\nVerify that actual files on disk match the content hashes in detail lines using `-f`:\r\n\r\n```bash\r\n# Verify a single detail line against an actual file\r\nproofset verify -i \"<detail-line>\" -f ./file1.txt\r\n\r\n# Verify a details file against a directory of source files (path matching)\r\nproofset verify -d proofset-details.txt -f ./my-files\r\n\r\n# Match by content hash instead of path (finds renamed/moved files)\r\nproofset verify -d proofset-details.txt -f ./my-files -m hash\r\n\r\n# Show only entries that have a matching file\r\nproofset verify -d proofset-details.txt -f ./my-files --only-matches\r\n\r\n# Suppress column headers (for scripting/piping)\r\nproofset verify -d proofset-details.txt -f ./my-files --no-header\r\n```\r\n\r\nPath matching (`-m path`, the default) automatically handles both relative and absolute paths in detail lines -- if the path in a detail entry doesn't match directly, progressively shorter suffixes are tried. This means proofsets created with older tools that used absolute paths still work.\r\n\r\n**Verify options:**\r\n\r\n| Flag | Description | Default |\r\n|------|-------------|---------|\r\n| `-d, --details <file>` | Details file path | |\r\n| `-a, --file-details-hash-list <file>` | File details hash list file path | |\r\n| `-i, --item <line>` | Single detail line to verify | |\r\n| `-h, --hash <hash>` | Expected hashset\\_hash to verify against | |\r\n| `-x, --extract-hashes <file>` | Write derived hash list to file (with `-d`) | |\r\n| `-f, --file <path>` | File or directory to verify against content hashes | |\r\n| `-m, --match <mode>` | Match mode for directory `-f`: `path` or `hash` | `path` |\r\n| `--only-matches` | With directory `-f`, show only matching entries | |\r\n| `--no-header` | Suppress column headers (for scripting/piping) | |\r\n\r\n## Library API\r\n\r\n### Create\r\n\r\n```typescript\r\nimport { createProofset } from '@alwaysproof/proofset';\r\n\r\nasync function* myFiles() {\r\n  yield {\r\n    relativePath: 'file1.txt',\r\n    fullPath: 'docs/file1.txt',       // optional -- enables dual-path entries\r\n    modifiedTime: new Date('2026-02-16T23:14:01Z'),\r\n    content: new Uint8Array(buffer),\r\n  };\r\n}\r\n\r\nconst result = await createProofset(myFiles(), {\r\n  proofsetSeed: 'mysecret',           // or use generateProofsetSeed() for a random 32-byte hex seed\r\n  algorithm: 'SHA-256',\r\n});\r\n\r\nconsole.log(result.hashsetHash);          // single commitment hash\r\nconsole.log(result.fileDetailsLineList);   // detail lines (keep private)\r\nconsole.log(result.fileDetailsHashList);   // hash list (shareable)\r\n```\r\n\r\n### Verify\r\n\r\n```typescript\r\nimport {\r\n  verifyFileDetailsLine,\r\n  verifyFileDetailsHashInList,\r\n  verifyHashsetHash,\r\n  parseFileDetailsLine,\r\n  verifyFileContentHash,\r\n  matchDetailEntriesByPath,\r\n  matchDetailEntriesByHash,\r\n} from '@alwaysproof/proofset';\r\n\r\n// Verify a disclosed detail line\r\nconst { valid, fileDetailsHash } = await verifyFileDetailsLine(detailLine);\r\n\r\n// Check membership in hash list\r\nconst inList = verifyFileDetailsHashInList(fileDetailsHash, hashListContent);\r\n\r\n// Verify hashset hash\r\nconst hashValid = await verifyHashsetHash(hashListContent, publishedHash);\r\n\r\n// Parse a detail line into its fields\r\nconst parsed = parseFileDetailsLine(detailLine);\r\n// => { fileDetailsHash, fileSecret, modifiedTimeUtc, fileContentHash, filePath }\r\n\r\n// Verify file content against a detail line's content hash\r\nconst { match, computedHash } = await verifyFileContentHash(fileBytes, parsed.fileContentHash);\r\n\r\n// Match detail entries against files by path (Map of relativePath -> contentHash)\r\nconst pathResults = matchDetailEntriesByPath(detailLines, fileContentHashes);\r\n\r\n// Match detail entries against files by content hash (Map of hash -> relativePaths[])\r\nconst hashResults = matchDetailEntriesByHash(detailLines, hashToFiles);\r\n// Each result: { parsed, status: 'match' | 'mismatch' | 'not_found', computedHash?, matchedFiles? }\r\n```\r\n\r\n### Types\r\n\r\n```typescript\r\nimport type {\r\n  HashAlgorithm,          // 'SHA-256' | 'SHA-512'\r\n  SourceFileEntry,        // { relativePath, fullPath?, modifiedTime, content }\r\n  ProofsetConfig,         // { proofsetSeed, algorithm }\r\n  ProofsetResult,         // { hashsetHash, fileDetailsHashList, fileDetails, fileDetailsLineList }\r\n  ProofsetFileDetails,    // { fileDetailsHash, fileSecret, modifiedTimeUtc, contentHash, filePath }\r\n  ParsedFileDetailsLine,  // { fileDetailsHash, fileSecret, modifiedTimeUtc, fileContentHash, filePath }\r\n  ContentMatchResult,     // { parsed, status, computedHash?, matchedFiles? }\r\n  ContentMatchStatus,     // 'match' | 'mismatch' | 'not_found'\r\n} from '@alwaysproof/proofset';\r\n```\r\n\r\n### Utility functions\r\n\r\n```typescript\r\nimport {\r\n  hashString,                    // hash a UTF-8 string, returns lowercase hex\r\n  hashBytes,                     // hash raw bytes, returns lowercase hex\r\n  inferAlgorithm,                // infer SHA-256 or SHA-512 from hex length\r\n  extractDetailLines,            // parse detail lines from a details file (handles v1 format)\r\n  buildHashListFromDetailLines,  // build hash list string from detail lines\r\n  isValidHashListFormat,         // validate a string is one hash per line\r\n  generateProofsetSeed,          // generate a random 32-byte hex seed (Web Crypto)\r\n  buildDetailsFile,              // prepend an optional `proofset_seed:` preamble to a details body\r\n  parseProofsetSeedFromDetails,  // extract the seed value from a details file preamble (or null)\r\n} from '@alwaysproof/proofset';\r\n```\r\n\r\n## Use Cases\r\n\r\n- **Intellectual property** -- Commit a hash of your creative work, source code, or research data before sharing it. If ownership is disputed later, disclose individual files to prove they existed at the time of commitment.\r\n\r\n- **Legal and compliance** -- Generate a proofset of contract documents, audit records, or evidence files. The hashset hash serves as a tamper-evident seal. Disclose specific documents to counterparties without revealing the full set.\r\n\r\n- **Software supply chain** -- Commit to a release artifact set at build time. Downstream consumers can verify that individual files match the original commitment.\r\n\r\n- **Blockchain commitment** -- Embed a hashset hash in a blockchain transaction or NFT. The commitment is on-chain and immutable; the file details stay with the creator. Works entirely in the browser -- files and secrets never leave the client.\r\n\r\n- **Email commitment** -- Send a hashset hash in an email (BCC yourself). The provider's DKIM signature covers the email body, creating a signed record that the hash existed at send time. Combine with a blockchain commitment of the email hash for layered integrity that survives subsequent key rotation/compromise.\r\n\r\n- **Social media predictions** -- Post a hashset hash publicly, then disclose individual items later to prove what you committed to. Useful for prediction games, friendly bets, or \"I called it\" moments -- the commitment strength matches the informal context.\r\n\r\n## Simple Proofsets\r\n\r\nWhen selective disclosure isn't needed and you just want a hash representing a set of files, use `--simple`. This produces a plain text file listing each file's content hash and filename. The root hash is SHA-256 (or SHA-512) of the entire file -- equivalent to `cat simple-proofset.txt | sha256sum` or PowerShell's `Get-FileHash simple-proofset.txt`.\r\n\r\nNo password is required. No secrets, no chaining -- just content hashes and a root hash for the set. The file format is:\r\n\r\n```\r\n<content-hash> <filename>\\r\\n\r\n<content-hash> <filename>\\r\\n\r\n...\r\n```\r\n\r\n```bash\r\n# Create a simple proofset\r\nproofset create --simple -s ./my-files -o ./output\r\n\r\n# View the root hash and list entries\r\nproofset verify -d simple-proofset.txt\r\n\r\n# Verify file contents against the simple proofset\r\nproofset verify -d simple-proofset.txt -f ./my-files\r\n```\r\n\r\nWhen verifying without `-f`, entries are listed as `UNVERIFIED` -- this means the tool computed the root hash but had no source files to check against. The root hash itself is just `SHA-256(file content)`, so you can independently confirm it with standard tools. The verify command provides a consistent interface for inspecting both simple and full proofsets, and auto-detects the format.\r\n\r\nA web app, for example, might produce either format depending on the user's needs -- simple for lightweight file hashing, full for selective disclosure -- and this tool verifies both the same way. It also serves as a reference implementation against which users can confirm results independently using standard OS commands and tools.\r\n\r\n## How It Works\r\n\r\n1. **Create** -- Hash each file's content, combine with a chained per-file secret, timestamp, and path into a detail string. Hash each detail string to get a `file_details_hash`. Concatenate all hashes into a list, hash the list to get the `hashset_hash`.\r\n\r\n2. **Commit** -- Publish only the `hashset_hash` (e.g. on a blockchain, in an email, in a database).\r\n\r\n3. **Disclose** -- Share individual detail lines as needed. Anyone can verify `H(file_details) == file_details_hash` and that the hash appears in the published list.\r\n\r\nEach file produces two entries: one with the full relative path, one with the filename only. The creator chooses which to disclose based on how much path information they want to reveal.\r\n\r\nSee [SPEC.md](packages/core/SPEC.md) for the full specification including test vectors.\r\n\r\n## Platform Support\r\n\r\nWorks in Node.js 18+ and browsers. Uses native `crypto.subtle` -- no crypto dependencies.\r\n\r\n## License\r\n\r\nMIT -- Copyright (c) 2016-2026 Ashley R. Thomas\r\n","readmeFilename":"README.md"}