{"_id":"@applied-crypto/merkletree","_rev":"2-c2eeb3f29e15debd8cf66b3a549c3b9e","name":"@applied-crypto/merkletree","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@applied-crypto/merkletree","version":"0.1.0","description":"A very straight forward implementation of Merkle trees for exchangeable hash functions. No security audits. No code for production, just for research.","main":"lib.js","type":"module","scripts":{"test":"mocha"},"keywords":["merkle tree","binary tree","merkle proof"],"repository":{"type":"git","url":"git+https://github.com/matthiasbabel/merkleTree.git"},"author":{"name":"Matthias Babel"},"license":"Apache-2.0","devDependencies":{"circomlibjs":"^0.1.7","mocha":"^10.2.0"},"bugs":{"url":"https://github.com/matthiasbabel/merkleTree/issues"},"homepage":"https://github.com/matthiasbabel/merkleTree#readme","directories":{"test":"test"},"gitHead":"b157a118da6cdc768eb5407bf0430cb6df4950a8","_id":"@applied-crypto/merkletree@0.1.0","_nodeVersion":"18.4.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-apkc/yYxNypNbUHxqqcfn32Z2Twy7PZa+Qz/OznuMrLW63ByNmJA42fn9PBRyeiimNiTa4LBd4jIoxQK9xMf8A==","shasum":"d845fbe782b2b8735a7b85bceca79b4c2535083a","tarball":"https://registry.npmjs.org/@applied-crypto/merkletree/-/merkletree-0.1.0.tgz","fileCount":5,"unpackedSize":8510,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6FKTuxWP+CCC5dGGr316KpD/gqrP1iNRxNkZM6WOv0QIhAJDqy62Pmw6kdJV6HDl+Q838RsXwB3Yg9LQkvaWthptG"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjqveiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrJGA//YVTdZnAigA1uVpFMeY0jQApdcfKlV6M0IGfQ3s+Fk/9g7ddn\r\nzvFqz2818JrIV7USfo9zAmRA3qXz2szi6AzqHEKbxyDOLzxuGUHak7lKrvfw\r\nP9bFdGNATRaFLfqG9moyInWXnQJ29AqdVxQSfrSLg0Quq9XpSW20EcwL3lbh\r\no0Ii61+ecRkcMapm3JAhA7ufzkhsIiXEFlEAAhTsJTX8qVnrORYsDVVIkmaG\r\njxNcacWuf9zFq8nqeSk/LweLRmxrlgKhZWjfOhUcNb6YzdFKWUPwUmi/APUj\r\n8E9YeXmgfUTw9S7XZSjkjQkDKeQwvk/Y+StuNpQM7K9wic2uNLxVGbKv5cnf\r\nX+gsUkzpGsX9BVmz9JpIeUnC8yXjOHynR3WoKjJwtPK7vDkPx+KMf0is7gRQ\r\n5wCpw6n6nCa4/TGkMf93Fcw9uIkcADWOZ3IOs+Vev/gqWqU3XTatoVldNUre\r\nFh0GLS6jKbN5Blq0y/hoCdb+kMmMEHGacUmugUYmK893xEfFRlLcsvNtJY3y\r\nLZ7/SKeVBU1KDdSoDlQdmLHFNayWvEOB6qZAAgt8xyLOCjG7n92UDjRzd5MY\r\nA6w/qCxd5/m0Gc32+ADY0m8WkP7vQsMY0F4eRhpgr4/YdHxCG6lRTQfo1geN\r\nv61EcF2MQRfogBAXgY8bGzbzGdv5K3Gx4Sw=\r\n=gs/C\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"matthiasbabel","email":"matthiasbabel@icloud.com"},"maintainers":[{"name":"matthiasbabel","email":"matthiasbabel@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/merkletree_0.1.0_1672148898202_0.6228728970482582"},"_hasShrinkwrap":false},"0.1.1":{"name":"@applied-crypto/merkletree","version":"0.1.1","description":"A very straight forward implementation of Merkle trees for exchangeable hash functions. No security audits. No code for production, just for research.","main":"lib.js","type":"module","scripts":{"test":"mocha"},"keywords":["merkle tree","binary tree","merkle proof","circom","zkp"],"repository":{"type":"git","url":"git+https://github.com/matthiasbabel/merkleTree.git"},"author":{"name":"Matthias Babel"},"license":"Apache-2.0","devDependencies":{"circomlibjs":"^0.1.7","mocha":"^10.2.0"},"bugs":{"url":"https://github.com/matthiasbabel/merkleTree/issues"},"homepage":"https://github.com/matthiasbabel/merkleTree#readme","directories":{"test":"test"},"gitHead":"3f06358ef9a269fb7732ab091d5ca30966374e71","_id":"@applied-crypto/merkletree@0.1.1","_nodeVersion":"18.4.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-+eMx33jpeFrCmLCBFxtX041I2bSmQ14UiuW2F2TUf/zxKa75WUIXwR+KQg6aBpm4jL5diWLTOx8VyHzQKNiogw==","shasum":"3f5ccada27ef12a5ba966c956d681e3f2a99a266","tarball":"https://registry.npmjs.org/@applied-crypto/merkletree/-/merkletree-0.1.1.tgz","fileCount":5,"unpackedSize":9212,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5a+OdGJcGiOZsG7d00KXwPk11aXIYEh7Edwqbm6V7uAIhAIkf94xrmyauBSjndQH5Whu7G1gu1z8em0LJ7Fv456MQ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjqvnRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpxQA/9F67reWlCWLl8Pusz9RKbIlTGE8lbn1UuF1OTH2m7SR1r+6HX\r\nojxY+A2mXSkDn9b9DjUwMIyiGZXlDU/uU7Nq37lMbo7VNWGW8gwZyHMPw+X+\r\nAdeIyCbv9Z597WG0rtXtIUx95Z/krUu0NqR9H1OuMc2/xdNojww1pUa/YQEc\r\n/WIU1NWVcp4pPmH/qE3rPLFw45Ac5j6LHT+KOTU8AT30FicccxPyEXP3d5sx\r\newc4AxEhUp+/nYcY8rZ6GrRqLeE5mkI11y8TJSzBOj0kW1Eup8yyQWUOt3zz\r\nVzEpIO4+uV9Q0Kw+w7cJ4wAzueOKjnkw9OICyUzDY3gg/McyZeM7f5S6P78T\r\nZyqmi898xAxRyF+YRtUsuuw2fqAOhXTiwNBdZWKzpLImAqE0aB9OO0kq7nFd\r\nM33QN0JnHsd8XS/QpdK5ZjBlPcx2+gko6b+wn+vmXJXhCQMytK56sJaOJF8B\r\nRDbvsmc4Ir2ZjkV+vKeqfkjVBjakVkKRtU3svtpyf5N0UacDCTeU0LbM2YOK\r\nLF0HNHGneZN+YJGh42gMOzpQE2UjBUz45/nU8Wr2YXSy0wgDlK0Iv07/nIOM\r\nlFeo5S4Z7jAVPDBUo+b9PbDPA0GzbeqvGN45uTITHoLX0GaAPMqqJqgZX1t5\r\nt8qy8KbeIbtbuENpJsnJWdOoA3/8E1w8zvM=\r\n=Xhm8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"matthiasbabel","email":"matthiasbabel@icloud.com"},"maintainers":[{"name":"matthiasbabel","email":"matthiasbabel@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/merkletree_0.1.1_1672149456935_0.22120200475804697"},"_hasShrinkwrap":false},"0.1.2":{"name":"@applied-crypto/merkletree","version":"0.1.2","description":"A straight forward implementation of a binary balanced Merkle trees and proofs in JavaScript. Compatible with any hash function. Designed for the use of Poseidon in Circom.","main":"lib.js","type":"module","scripts":{"test":"mocha"},"keywords":["merkle tree","binary tree","merkle proof","circom","zkp","poseidon"],"repository":{"type":"git","url":"git+https://github.com/applied-crypto/merkleTree.git"},"author":{"name":"Matthias Babel"},"license":"Apache-2.0","devDependencies":{"circomlibjs":"^0.1.7","mocha":"^10.2.0"},"bugs":{"url":"https://github.com/applied-crypto/merkleTree/issues"},"homepage":"https://github.com/applied-crypto/merkleTree#readme","directories":{"test":"test"},"gitHead":"2af5e9eaf2ffba1138af0a13181ff8338f1514ef","_id":"@applied-crypto/merkletree@0.1.2","_nodeVersion":"18.4.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-VoaUjnCu39BePMDsbSunv03WcWTxWIryafNN3TdcbLxKbM+NmhMyVJsnoC9sUT3PbpqDxE8LzD8wdbqYswhefw==","shasum":"7343d8252b75dee12cb7398a179f94690f47452a","tarball":"https://registry.npmjs.org/@applied-crypto/merkletree/-/merkletree-0.1.2.tgz","fileCount":6,"unpackedSize":12201,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFGCU/Ei4dM/X/LWqTzxcO8+NDUZqptfOu3Cf7y9nme3AiEAwdKWf517UQkzUh8Xu4Aej/4Q2ccffBUrqB57lIRSkHw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjqwE7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpD7A/+Jq9ZVCqwIweY/3wHXXtiacgJQbdjBM910kyc2vZh9z0Mhdt3\r\nwNmFQr/95J8LDfooNAgCAcw2b6D9kqqCQIbw8pagl9CVmPU8p3DkXKhoFpa0\r\nAvr1ljLjbnJnGgdrccZK6DwzNhnSeomn85oyW+tASVWYr0YFOZlMBdOaRJO6\r\n8PN2NLc8t64oM5AuZxTuFO4DKnwqSk4vR/Gf5BlApaS4IyVWRuS1GiQ30n15\r\nxjl0zffMg7ke2D8YGxzgPT0cu8vvBmRd6LujwL8+/1ApmMYBmH8Dkkrh9mdn\r\nfqqtaVD94pJkc3rrfjmoCtrld8mwkSuuePyFJO+4eqpWgDIBW8JHITTpSlij\r\ngx4Sk4/kWoPb8MZ+ByauJGi4mDIpOGolafx6+aZ/k+EqTydLMxp8uM0HSXGf\r\nBo13AcVfm38K9FXNY+8pJbV/gt7rqVeNoFNW2JYuFK4pGozd/8Dw3Lxxyci2\r\nabIaWRhg1YU0UnJWuuoMEyCZDZ8yLIGxQI3osxzjpwNXgxCLD+LfMAaPnT4O\r\nTSf6llMQO1NDTmZ8YaiF1OlqskD22ma9fSL+IuII2Fk+8g6Dw5uMxce7ioLJ\r\nfhg9Vv1tZf2W9MRun5nU59km/Z8g7t6MruT0hYQW/I5twdJAExlnkORCusDW\r\nRvMSt2ljBnoOdz1kj9alnmx/r0FKBOBJnnw=\r\n=DyIw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"matthiasbabel","email":"matthiasbabel@icloud.com"},"maintainers":[{"name":"matthiasbabel","email":"matthiasbabel@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/merkletree_0.1.2_1672151355508_0.47725463897748854"},"_hasShrinkwrap":false}},"time":{"created":"2022-12-27T13:48:18.149Z","0.1.0":"2022-12-27T13:48:18.363Z","modified":"2022-12-27T14:29:15.740Z","0.1.1":"2022-12-27T13:57:37.113Z","0.1.2":"2022-12-27T14:29:15.649Z"},"maintainers":[{"name":"matthiasbabel","email":"matthiasbabel@icloud.com"}],"description":"A straight forward implementation of a binary balanced Merkle trees and proofs in JavaScript. Compatible with any hash function. Designed for the use of Poseidon in Circom.","homepage":"https://github.com/applied-crypto/merkleTree#readme","keywords":["merkle tree","binary tree","merkle proof","circom","zkp","poseidon"],"repository":{"type":"git","url":"git+https://github.com/applied-crypto/merkleTree.git"},"author":{"name":"Matthias Babel"},"bugs":{"url":"https://github.com/applied-crypto/merkleTree/issues"},"license":"Apache-2.0","readme":"# MerkleTree\r\nA straight forward implementation of a binary balanced Merkle trees and proofs in JavaScript.\r\nCompatible with any hash function. \r\nSpecially designed for the use of Poseidon in Circom.\r\n\r\n## Install\r\n\r\n```shell\r\nnpm install @applied-crypto/merkletree\r\n```\r\n\r\n## Usage\r\n\r\n```JS\r\n// Use your own hash function\r\nposeidon = await buildPoseidonOpt();\r\nleafHash = function(input) {\r\n    return poseidon([input]);\r\n}\r\nnodeHash = function(left, right) {\r\n    return poseidon([left, right]);\r\n}\r\n\r\nlet inputs = new Array(2**10).fill(0);\r\n// Create the Merkle tree\r\ntree = merkleTree(inputs, leafHash, nodeHash);\r\n// Create the Merkle proof\r\nlet merkleProof = tree.getMerkleProof(293);\r\n\r\n// Validate merkle Proof\r\nlet root = merkleProof.calculateRoot();\r\nassert(poseidon.F.toObject(tree.root) === poseidon.F.toObject(root), true);\r\n```\r\n\r\n### Validating Merkle proofs in Zero-Knowledge Proofs (ZKPs) \r\n\r\nFor validating the generated Merkle proofs in [Circom](https://github.com/iden3/circom), see the \r\n[circuit.circom](./circuit.circom).\r\n\r\n### Disclaimer\r\nOnly for research purpose. No security audits done. Don't use in production.\r\n\r\n[@Branch Business and Information System Engineering of the Fraunhofer FIT](https://www.fim-rc.de/en/)","readmeFilename":"README.md"}