{"_id":"jsonwebkey-thumbprint","_rev":"3-9a8f3a0efefc46bc7c02ce934d52913a","name":"jsonwebkey-thumbprint","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"jsonwebkey-thumbprint","version":"0.0.1","keywords":["jsonwebkey-thumbprint","rfc7638","cryptography","jwk","typescript"],"author":{"name":"Thibault Meunier"},"license":"Apache-2.0","_id":"jsonwebkey-thumbprint@0.0.1","maintainers":[{"name":"thibmeu","email":"mail@thibaultmeunier.com"}],"homepage":"https://github.com/cloudflareresearch/web-bot-auth#readme","bugs":{"url":"https://github.com/cloudflareresearch/web-bot-auth/issues"},"dist":{"shasum":"e60d36c5fda53317253dd040b3f52fd39e88cb7d","tarball":"https://registry.npmjs.org/jsonwebkey-thumbprint/-/jsonwebkey-thumbprint-0.0.1.tgz","fileCount":6,"integrity":"sha512-24/Z+klZ+EzngjYDoPhw08H4HMgOgyjDJXbXQUPcg1SIjQvcjeed7YhDQzan85p1ph85eY6hoiUNEEXzJqe+8Q==","signatures":[{"sig":"MEYCIQCaObecyM0ZfgMzOCvT+dBJXLspMKGkhPbAm7wY9bThkwIhAOfR5zbE7TbhA17CUsfqn2G3HvpANYZNdms3C1dSVVqD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9370},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"496aaed2da9bef3db5b5a6de9581fc7784bbb066","scripts":{"test":"vitest","bench":"vitest bench","build":"tsup src/index.ts --format cjs,esm --dts --clean","watch":"npm run build -- --watch src","prepublishOnly":"npm run build"},"_npmUser":{"name":"thibmeu","email":"mail@thibaultmeunier.com"},"repository":{"url":"git+https://github.com/cloudflareresearch/web-bot-auth.git","type":"git","directory":"packages/jwt-thumbprint"},"_npmVersion":"10.9.0","description":"JWK Thumbprint defined by RFC 7638","directories":{},"_nodeVersion":"23.3.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/jsonwebkey-thumbprint_0.0.1_1744644280307_0.0759056557036133","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"jsonwebkey-thumbprint","version":"0.0.9","keywords":["jsonwebkey-thumbprint","rfc7638","cryptography","jwk","typescript"],"author":{"name":"Thibault Meunier"},"license":"Apache-2.0","_id":"jsonwebkey-thumbprint@0.0.9","maintainers":[{"name":"thibmeu","email":"mail@thibaultmeunier.com"}],"homepage":"https://github.com/cloudflareresearch/web-bot-auth#readme","bugs":{"url":"https://github.com/cloudflareresearch/web-bot-auth/issues"},"dist":{"shasum":"a8118a139d9661ce68bab518cc3e346148490d78","tarball":"https://registry.npmjs.org/jsonwebkey-thumbprint/-/jsonwebkey-thumbprint-0.0.9.tgz","fileCount":6,"integrity":"sha512-7MNxQri2FHEerzBRmq4ZdWkCJr9TqllRiBzwc0bkLcVHE3yzUGF6ilg9iV5/mZBXQYH5ooOHDCuNoYS/EC9WrQ==","signatures":[{"sig":"MEUCIDLgXnJfhNMd9vRtvrcXAevKGTYA+Ji0Ah1FTQvKT4K+AiEAjgFfQ3s/QApQuOQ95girvTCbRYNXZbMw8LrTDTqUsNU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6232},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"daa224e58cc7193019fb886be729f324d5c3bbfb","scripts":{"test":"vitest","bench":"vitest bench","build":"tsup src/index.ts --format cjs,esm --dts --clean","watch":"npm run build -- --watch src","prepublishOnly":"npm run build"},"_npmUser":{"name":"thibmeu","email":"mail@thibaultmeunier.com"},"repository":{"url":"git+https://github.com/cloudflareresearch/web-bot-auth.git","type":"git","directory":"packages/jwt-thumbprint"},"_npmVersion":"10.8.2","description":"JWK Thumbprint defined by RFC 7638","directories":{},"_nodeVersion":"22.8.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/jsonwebkey-thumbprint_0.0.9_1748464052599_0.7225707572815194","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"jsonwebkey-thumbprint","version":"0.1.0","description":"JWK Thumbprint defined by RFC 7638","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","import":"./dist/index.mjs"}},"scripts":{"bench":"vitest bench","build":"tsup src/index.ts --format cjs,esm --dts --clean","prepublishOnly":"npm run build","test":"vitest","watch":"npm run build -- --watch src"},"repository":{"type":"git","url":"git+https://github.com/cloudflareresearch/web-bot-auth.git","directory":"packages/jwt-thumbprint"},"keywords":["jsonwebkey-thumbprint","rfc7638","cryptography","jwk","typescript"],"author":{"name":"Thibault Meunier"},"license":"Apache-2.0","bugs":{"url":"https://github.com/cloudflareresearch/web-bot-auth/issues"},"homepage":"https://github.com/cloudflareresearch/web-bot-auth#readme","_id":"jsonwebkey-thumbprint@0.1.0","gitHead":"d72fdec0bc57b02c8754fedc70d475512711850a","_nodeVersion":"22.1.0","_npmVersion":"10.7.0","dist":{"integrity":"sha512-4m/gJEUQH8N2NfvZFjCL8/E+vlt0FlrmHoR4T93CEXQRkC64qwRi6oQri4/eqLVXqEqXYCss0+Q7pLx6vJBqzw==","shasum":"9299a2cf9880a4bc594efaa1521a90534991955b","tarball":"https://registry.npmjs.org/jsonwebkey-thumbprint/-/jsonwebkey-thumbprint-0.1.0.tgz","fileCount":6,"unpackedSize":6232,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDvgJZrhqu3Vdz8rbKt9aLEeaoLT9taqfw3u/wQvcJQ6AIhAL3oBY4SmVoG0FWYW4nuUCtAz++MUdxyPK84fYZssn0z"}]},"_npmUser":{"name":"thibmeu","email":"mail@thibaultmeunier.com","actor":{"name":"thibmeu","email":"mail@thibaultmeunier.com","type":"user"}},"directories":{},"maintainers":[{"name":"thibmeu","email":"mail@thibaultmeunier.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jsonwebkey-thumbprint_0.1.0_1750149125208_0.4905373991844113"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-14T15:24:40.306Z","modified":"2025-06-17T08:32:05.541Z","0.0.1":"2025-04-14T15:24:40.464Z","0.0.9":"2025-05-28T20:27:32.771Z","0.1.0":"2025-06-17T08:32:05.382Z"},"bugs":{"url":"https://github.com/cloudflareresearch/web-bot-auth/issues"},"author":{"name":"Thibault Meunier"},"license":"Apache-2.0","homepage":"https://github.com/cloudflareresearch/web-bot-auth#readme","keywords":["jsonwebkey-thumbprint","rfc7638","cryptography","jwk","typescript"],"repository":{"type":"git","url":"git+https://github.com/cloudflareresearch/web-bot-auth.git","directory":"packages/jwt-thumbprint"},"description":"JWK Thumbprint defined by RFC 7638","maintainers":[{"name":"thibmeu","email":"mail@thibaultmeunier.com"}],"readme":"# jsonwebkey-thumbprint\n\n![License](https://img.shields.io/npm/l/jsonwebkey-thumbprint.svg)\n[![crates.io](https://img.shields.io/npm/v/jsonwebkey-thumbprint.svg)][npm]\n\n[npm]: https://www.npmjs.com/package/jsonwebkey-thumbprint\n\nVariable-Length Integer Encoding defined by [RFC 7638](https://www.rfc-editor.org/rfc/rfc7638.html).\n\n## Tables of Content\n\n- [Features](#features)\n- [Usage](#usage)\n- [Security Considerations](#security-considerations)\n- [License](#license)\n\n## Features\n\n- JWK Thumbprint pre-compute\n- JWK Thumbprint when passing a hash and encoding function\n- TypeScript types\n\n## Usage\n\n```typescript\nimport { jwkThumbprint } from \"jsonwebkey-thumbprint\";\n\n// A public key exported as a JWK\nconst keypair = await crypto.subtle.generateKey(\"Ed25519\", true, [\n  \"sign\",\n  \"verify\",\n]);\nconst jwk = await crypto.subtle.exportKey(\"jwk\", keypair.publicKey);\n\n// Using sha-256 as a hash function and base64url as encoding\nconst hash = (b: BufferSource) => crypto.subtle.digest(\"SHA-256\", b);\nconst decode = (u: ArrayBuffer) =>\n  b64ToB64URL(b64ToB64NoPadding(u8ToB64(new Uint8Array(u))));\n\n// Compute the JWK Thumbprint for the public key\nconsole.log(await jwkThumbprint(jwk));\n\n// Helper functions\nconst u8ToB64 = (u: Uint8Array) => btoa(String.fromCharCode(...u));\n\nconst b64ToB64URL = (s: string) => s.replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n\nconst b64ToB64NoPadding = (s: string) => s.replace(/=/g, \"\");\n```\n\n## Security Considerations\n\nThis software has not been audited. Please use at your sole discretion.\n\n## License\n\nThis project is under the Apache-2.0 license.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be Apache-2.0 licensed as above, without any additional terms or conditions.\n","readmeFilename":"README.md"}