{"_id":"@bradthomasbrown/keccak","_rev":"3-e4aeda99204b003f2efc2425490a8c2d","name":"@bradthomasbrown/keccak","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@bradthomasbrown/keccak","version":"1.0.0","author":{"name":"Brad Brown","email":"https://t.me/bradthomasbrown"},"_id":"@bradthomasbrown/keccak@1.0.0","maintainers":[{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"}],"dist":{"shasum":"9289820284f44cab26ff36777ae57841cf70e399","tarball":"https://registry.npmjs.org/@bradthomasbrown/keccak/-/keccak-1.0.0.tgz","fileCount":5,"integrity":"sha512-QuMsJ83eQ7z56VGKf18fiN/FT1I5p/cxwGjvbQKtsAqieKLbPqIG6tfFhu1zlOAP5u0/h2pgndbPltxLofGf0Q==","signatures":[{"sig":"MEUCIF3TqQt2+JbtYSSH+JqCyvmu2AbcLOP34xIylf6LrDkGAiEA1mO4wsx/q9WiKYbCdZjlpe7YiTM0QZOHv6ErdUA7jBI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20118},"type":"module","exports":{".":"./dist/keccak.js"},"gitHead":"69450b3afbf69beb9df08505f76822ae475657d1","_npmUser":{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"},"_npmVersion":"10.9.2","description":"Minimal, unoptimized, and unaudited keccak and sponge function library in JavaScript/TypeScript.","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/keccak_1.0.0_1765223709497_0.8590050552982416","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bradthomasbrown/keccak","version":"1.0.1","author":{"name":"Brad Brown","email":"https://t.me/bradthomasbrown"},"_id":"@bradthomasbrown/keccak@1.0.1","maintainers":[{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"}],"dist":{"shasum":"9c90b68cf92778fd1d70835ca134bcf45f164b03","tarball":"https://registry.npmjs.org/@bradthomasbrown/keccak/-/keccak-1.0.1.tgz","fileCount":8,"integrity":"sha512-C8cOLcHJ2Wgq7xWUy0/OGT3qzMY3GNcs6QFnwHv5oYGorrP/EmJ5XeAm37FWK+o+Gq0qbPgCAR1wuACIw7rOKA==","signatures":[{"sig":"MEUCID2lgEZeiuNd2ecbKFtXPWb8fEZSax2I5YThY6napycrAiEAjKj51yIHBTxzkSGC3XPyD73+PcwyK7LxVDJTfhHInBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20657},"type":"module","exports":{".":"./dist/keccak.js","./keccak256":"./dist/concrete/keccak256.js"},"gitHead":"0f334470c0b9f9a71138b841324728004bec2558","_npmUser":{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"},"_npmVersion":"10.9.2","description":"Minimal, unoptimized, and unaudited keccak and sponge function library in JavaScript/TypeScript.","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/keccak_1.0.1_1767274599886_0.15983065870208324","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bradthomasbrown/keccak","description":"Minimal, unoptimized, and unaudited keccak and sponge function library in JavaScript/TypeScript.","version":"1.0.2","author":{"name":"Brad Brown","email":"https://t.me/bradthomasbrown"},"type":"module","exports":{".":"./dist/keccak.js","./keccak256":"./dist/concrete/keccak256.js"},"devDependencies":{"@types/bun":"^1.3.5"},"_id":"@bradthomasbrown/keccak@1.0.2","gitHead":"437def9ba6a3865d0ba8aae86fa18d974648857d","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-Jdj5CN/ZsmZleHMuSr2WWxYnUrAPrrIOKq4FLGFubmKZ/k+TwVh0WtP1lofBkuGlFw4yDaVE0KSeVXJgkg8z+Q==","shasum":"462b0c902fa6dedfbd270384e84aab34a62164de","tarball":"https://registry.npmjs.org/@bradthomasbrown/keccak/-/keccak-1.0.2.tgz","fileCount":8,"unpackedSize":20798,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDi7P94X7l1viOktN61enSSJ5qgb71boxPhI7VlncXl2AiEAisc8iq2aN10oPKq4wGv1gl/mvo7Yr30uNks0mwiS5Bk="}]},"_npmUser":{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"},"directories":{},"maintainers":[{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/keccak_1.0.2_1767442257992_0.8472770595999009"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-08T19:55:09.388Z","modified":"2026-01-03T12:10:58.358Z","1.0.0":"2025-12-08T19:55:09.636Z","1.0.1":"2026-01-01T13:36:40.060Z","1.0.2":"2026-01-03T12:10:58.140Z"},"author":{"name":"Brad Brown","email":"https://t.me/bradthomasbrown"},"description":"Minimal, unoptimized, and unaudited keccak and sponge function library in JavaScript/TypeScript.","maintainers":[{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"}],"readme":"# keccak\r\nThis is a simple, minimal implementation of the Keccak paper in TypeScript/JavaScript. \r\n\r\n## Why?\r\nThere is surprisingly little information on all aspects of the \"cryptographic stack\" in JavaScript and elsewhere that is simple and minimal. This repository is part of a series of repositories that builds up this stack from first principles, including:\r\n- [Finite field arithmetic](https://github.com/bradthomasbrown/finite-field)\r\n- [Elliptic curves over finite fields](https://github.com/bradthomasbrown/finite-curve)\r\n- Sponge constructions and Keccak (this repository)\r\n- The concrete instances of secp256k1, Keccak-256, and more as well as how these are made from the above concepts\r\n- ECDSA\r\n- Interacting with EVM nodes\r\n- And potentially more\r\n\r\n## Installation\r\n```sh\r\nnpm i @bradthomasbrown/keccak\r\n```\r\n\r\n## Usage\r\n```js\r\nimport { keccak_c, sha_3, sha_3_xof } from \"@bradthomasbrown/keccak\";\r\n\r\nconst sha3_224 = sha_3(keccak_c, 448, 0b10, 2);\r\nconst sha3_256 = sha_3(keccak_c, 512, 0b10, 2);\r\nconst shake_128 = sha_3_xof(keccak_c, 256, 0b1111, 4);\r\nconst shake_256 = sha_3_xof(keccak_c, 512, 0b1111, 4);\r\nconst keccak_256 = sha_3(keccak_c, 512, 0b0, 0);\r\n\r\nconsole.log(sha3_224(new Uint8Array()).toHex());\r\n// 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7\r\n\r\nconsole.log(sha3_224(new Uint8Array([1])).toHex());\r\n// 488286d9d32716e5881ea1ee51f36d3660d70f0db03b3f612ce9eda4\r\n\r\nconsole.log(sha3_256(new Uint8Array()).toHex());\r\n// a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a\r\n\r\nconsole.log(sha3_256(new Uint8Array([1])).toHex());\r\n// c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\r\n\r\nconsole.log(shake_128(new Uint8Array(), 48).toHex());\r\n// 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef263cb1eea988004b93103cfb0aeefd2a68\r\n\r\nconsole.log(shake_128(new Uint8Array([1]), 48).toHex());\r\n// 44b9b48dabe99470cabbdcd4a155cf1bcd86452388b0a6d5b67e86833677c0824f4cfe95c60638f27cc87663f299f909\r\n\r\nconsole.log(shake_256(new Uint8Array(), 72).toHex());\r\n// 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be141e96616fb13957\r\n\r\nconsole.log(shake_256(new Uint8Array([1]), 72).toHex());\r\n// 94da6280b240ea6a2ab2cfdf0fb301fd77153d5b748baf796190856803d977ba5cc356e16eea587f2c74c5480c41fea01b45f55abc9722853f30d2a34e7fcdef062e69d6d26c6431\r\n\r\nconsole.log(keccak_256(new Uint8Array()).toHex());\r\n// c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\r\n\r\nconsole.log(keccak_256(new Uint8Array([1])).toHex());\r\n// 5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2\r\n```","readmeFilename":"README.md"}