diff --git a/sbmtjs/package-lock.json b/sbmtjs/package-lock.json index dfd30836..ba49ff2e 100644 --- a/sbmtjs/package-lock.json +++ b/sbmtjs/package-lock.json @@ -1,6 +1,6 @@ { "name": "zkp-sbmtjs", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/sbmtjs/src/hasher/mimc7/index.js b/sbmtjs/src/hasher/mimc7/index.js index e898608e..6ae5c57a 100644 --- a/sbmtjs/src/hasher/mimc7/index.js +++ b/sbmtjs/src/hasher/mimc7/index.js @@ -26,8 +26,8 @@ const bigInt = snarkjs.bigInt; class Mimc7Hasher { hash(level, left, right) { - return mimc7.multiHash([left, right]).toString(); + return mimc7.multiHash([bigInt(left), bigInt(right)]).toString(); } } -module.exports = Mimc7Hasher; \ No newline at end of file +module.exports = Mimc7Hasher; diff --git a/semaphorejs/contracts/MerkleTree.sol b/semaphorejs/contracts/MerkleTree.sol index 0d3e21ff..80a81a66 100644 --- a/semaphorejs/contracts/MerkleTree.sol +++ b/semaphorejs/contracts/MerkleTree.sol @@ -51,8 +51,12 @@ contract MerkleTree { } function HashLeftRight(uint256 left, uint256 right) public pure returns (uint256 mimc_hash) { - uint256 intermediate = MiMC.MiMCpe7(15021630795539610737508582392395901278341266317943626182700664337106830745361, left); - mimc_hash = MiMC.MiMCpe7(intermediate, right); + uint256 r0 = 0; + uint256 h0 = MiMC.MiMCpe7(left, r0); + uint256 r1 = r0 + left + h0; + uint256 h1 = MiMC.MiMCpe7(right, r1); + uint256 r2 = r1 + right + h1; + mimc_hash = r2; } function insert(uint256 leaf) internal { diff --git a/semaphorejs/contracts/MerkleTreeLib.sol b/semaphorejs/contracts/MerkleTreeLib.sol index 3db372bc..f3d4b842 100644 --- a/semaphorejs/contracts/MerkleTreeLib.sol +++ b/semaphorejs/contracts/MerkleTreeLib.sol @@ -60,8 +60,13 @@ contract MultipleMerkleTree { } function HashLeftRight(uint256 left, uint256 right) public pure returns (uint256 mimc_hash) { - uint256 intermediate = MiMC.MiMCpe7(15021630795539610737508582392395901278341266317943626182700664337106830745361, left); - mimc_hash = MiMC.MiMCpe7(intermediate, right); + uint256 k = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 r0 = 0; + uint256 h0 = MiMC.MiMCpe7(left, r0); + uint256 r1 = addmod(r0, addmod(left, h0, k), k); + uint256 h1 = MiMC.MiMCpe7(right, r1); + uint256 r2 = addmod(r1, addmod(right, h1, k), k); + mimc_hash = r2; } function insert(uint8 tree_index, uint256 leaf) internal { diff --git a/semaphorejs/package-lock.json b/semaphorejs/package-lock.json index 247fb7d1..c7f931b5 100644 --- a/semaphorejs/package-lock.json +++ b/semaphorejs/package-lock.json @@ -1,5 +1,5 @@ { - "name": "semaphorejs", + "name": "zkp-semaphorejs", "version": "0.1.0", "lockfileVersion": 1, "requires": true, @@ -326,6 +326,15 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1645,6 +1654,14 @@ "type-detect": "^4.0.5" } }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "requires": { + "check-error": "^1.0.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1725,9 +1742,8 @@ } }, "circom": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/circom/-/circom-0.0.24.tgz", - "integrity": "sha512-4ZY0jOeVEwCT7+WnoXbr2/+eEvie5QunMwCA8nfAXhVdUv32Na1eQQNKjqq2HtgnTdXxK2z/mN/4x2yyKIMoiw==", + "version": "git+https://github.com/kobigurk/circom.git#b8068e8d052b8136896ca76aee87a3e63722b4aa", + "from": "git+https://github.com/kobigurk/circom.git", "requires": { "big-integer": "^1.6.32", "optimist": "^0.6.1", @@ -1735,7 +1751,7 @@ } }, "circomlib": { - "version": "git+https://github.com/kobigurk/circomlib.git#2c569a089d8ba3cdd993575c57b5346444cb7c44", + "version": "git+https://github.com/kobigurk/circomlib.git#4186a9321e7c06a36f36ff8ca2c8909ca01a4e09", "from": "git+https://github.com/kobigurk/circomlib.git", "requires": { "blake-hash": "^1.1.0", @@ -1956,6 +1972,11 @@ "date-now": "^0.1.4" } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -2270,6 +2291,11 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -2358,6 +2384,11 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -2390,6 +2421,11 @@ "repeating": "^2.0.0" } }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, "diagnostics": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", @@ -2562,6 +2598,41 @@ "iconv-lite": "~0.4.13" } }, + "encoding-down": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-5.0.4.tgz", + "integrity": "sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==", + "requires": { + "abstract-leveldown": "^5.0.0", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz", + "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==", + "requires": { + "xtend": "~4.0.0" + } + }, + "level-codec": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.1.tgz", + "integrity": "sha512-ajFP0kJ+nyq4i6kptSM+mAvJKLOg1X5FiFPtLG9M5gCEZyBmgDi3FkDrvlMkEzrUn1cWxtvVmrvoS4ASyO/q+Q==" + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "requires": { + "errno": "~0.1.1" + } + } + } + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -3206,6 +3277,11 @@ } } }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -3382,6 +3458,11 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, + "fast-future": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz", + "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=" + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -6460,6 +6541,22 @@ "requires": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } } }, "ethereumjs-block": { @@ -10147,6 +10244,22 @@ "requires": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } } }, "ethereumjs-block": { @@ -10428,6 +10541,54 @@ } } }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -10459,6 +10620,11 @@ "assert-plus": "^1.0.0" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -10632,6 +10798,11 @@ "has-symbol-support-x": "^1.4.1" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -11434,6 +11605,72 @@ } } }, + "level-packager": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-4.0.1.tgz", + "integrity": "sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q==", + "requires": { + "encoding-down": "~5.0.0", + "levelup": "^3.0.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz", + "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==", + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz", + "integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==", + "requires": { + "abstract-leveldown": "~5.0.0", + "inherits": "^2.0.3" + } + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz", + "integrity": "sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "xtend": "^4.0.0" + } + }, + "levelup": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-3.1.1.tgz", + "integrity": "sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg==", + "requires": { + "deferred-leveldown": "~4.0.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~3.0.0", + "xtend": "~4.0.0" + } + } + } + }, + "level-rocksdb": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/level-rocksdb/-/level-rocksdb-3.0.1.tgz", + "integrity": "sha512-ESbFU491UhmC9q1SPopqEeJOBN5OZm6j5T2H3a6bhPKBC60+98Ts21d5l8jgXtuvO5gCXh4eiYPhxz01tfXB4A==", + "requires": { + "level-packager": "^4.0.0", + "rocksdb": "^3.0.0" + } + }, "level-ws": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", @@ -12025,6 +12262,11 @@ "to-regex": "^3.0.1" } }, + "napi-build-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", + "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -12053,6 +12295,14 @@ "lower-case": "^1.1.1" } }, + "node-abi": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.8.0.tgz", + "integrity": "sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==", + "requires": { + "semver": "^5.4.1" + } + }, "node-environment-flags": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.4.tgz", @@ -12118,6 +12368,11 @@ } } }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -12131,6 +12386,34 @@ "path-key": "^2.0.0" } }, + "npm-update-git-deps": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/npm-update-git-deps/-/npm-update-git-deps-1.2.4.tgz", + "integrity": "sha512-jsFLdNWocnwHsEiECMFEpb0r99NLw8xh2uVtsTbh/u0X90VQK2InZPuKI73eoG3s98uGNOnq5WVI/B34lTiEIA==", + "dev": true, + "requires": { + "commander": "^2.20.0" + }, + "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + } + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -12566,6 +12849,45 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, + "prebuild-install": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz", + "integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.2.7", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, "precond": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", @@ -12774,6 +13096,24 @@ } } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -13054,6 +13394,33 @@ "safe-buffer": "^5.1.1" } }, + "rocksdb": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rocksdb/-/rocksdb-3.1.0.tgz", + "integrity": "sha512-oLrw6InTO/e2DRqaeeyV68cepRqwgjsGMdGB0u5/Wb2x7hBJAtD2UIS7XhGxFmPJAg3cTBgPmUxZ+sGz2ehwOg==", + "requires": { + "abstract-leveldown": "~5.0.0", + "bindings": "~1.5.0", + "fast-future": "~1.0.2", + "nan": "~2.13.2", + "prebuild-install": "^5.0.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz", + "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==", + "requires": { + "xtend": "~4.0.0" + } + }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" + } + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -13982,6 +14349,28 @@ "yallist": "^3.0.2" } }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, "tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", @@ -16097,8 +16486,9 @@ } }, "websnark": { - "version": "git+https://github.com/iden3/websnark.git#bbab2e4c7e396add1c8d240e92436e602f9f84d6", - "from": "git+https://github.com/iden3/websnark.git", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/websnark/-/websnark-0.0.2.tgz", + "integrity": "sha512-qR/y2UxC/TK2Pnz+SfmFWAcqqvcPc+YWqy8N27zZGOuZoVTnffSj5QDj7+5/ZcGOgRm1P3pr+yCiJIWQxCQ+RA==", "requires": { "big-integer": "^1.6.42" } @@ -16146,6 +16536,11 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -16381,6 +16776,20 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "zkp-sbmtjs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/zkp-sbmtjs/-/zkp-sbmtjs-0.1.1.tgz", + "integrity": "sha512-VwKOE6x4TNCIt6qAGR7y6vmoHoJ+K+z3G4026nOdL83F9T7+FuTdJWnO0h3FrC3PpxFbk9HcAK4eeAPUCpClBA==", + "requires": { + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "circomlib": "git+https://github.com/kobigurk/circomlib.git", + "del": "^4.0.0", + "level-rocksdb": "^3.0.1", + "snarkjs": "^0.1.11", + "uuid": "^3.3.2" + } } } } diff --git a/semaphorejs/package.json b/semaphorejs/package.json index f741e34b..c812c878 100644 --- a/semaphorejs/package.json +++ b/semaphorejs/package.json @@ -4,7 +4,8 @@ "description": "Zero-knowledge signaling on Ethereum", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "npm-update-git-deps": "npm-update-git-deps" }, "bin": { "semaphorejs-server": "./src/server/server.js", @@ -17,7 +18,7 @@ "url": "https://github.com/kobigurk/semaphore.git" }, "dependencies": { - "circom": "0.0.24", + "circom": "git+https://github.com/kobigurk/circom.git", "circomlib": "git+https://github.com/kobigurk/circomlib.git", "cors": "^2.8.5", "del": "^4.1.0", @@ -36,10 +37,12 @@ "truffle-privatekey-provider": "^1.1.0", "web3": "^1.0.0-beta.51", "webpack": "^4.30.0", - "websnark": "git+https://github.com/iden3/websnark.git", - "winston": "^3.2.1" + "websnark": "0.0.2", + "winston": "^3.2.1", + "zkp-sbmtjs": "^0.1.1" }, "devDependencies": { + "npm-update-git-deps": "^1.2.4", "null-loader": "^0.1.1", "webpack-cli": "^3.3.0" } diff --git a/semaphorejs/src/client/semaphore.js b/semaphorejs/src/client/semaphore.js index ea762434..b71121df 100644 --- a/semaphorejs/src/client/semaphore.js +++ b/semaphorejs/src/client/semaphore.js @@ -76,7 +76,7 @@ class SemaphoreClient { this.identity_nullifier = loaded_identity.identity_nullifier; this.identity_r = loaded_identity.identity_r; - this.identity_commitment = mimc7.multiHash([pubKey[0], pubKey[1], this.identity_nullifier, this.identity_r]); + this.identity_commitment = mimc7.multiHash([bigInt(pubKey[0]), bigInt(pubKey[1]), bigInt(this.identity_nullifier), bigInt(this.identity_r)]); logger.verbose(`identity_commitment: ${this.identity_commitment}`); this.web3 = new Web3(node_url); @@ -253,9 +253,9 @@ function generate_identity(logger) { const identity_nullifier = '0x' + crypto.randomBytes(31).toString('hex'); const identity_r = '0x' + crypto.randomBytes(31).toString('hex'); - logger.info(`generate identity from (private_key, identity_nullifier, identity_r): (${private_key}, ${identity_nullifier}, ${identity_r})`); + logger.info(`generate identity from (private_key, public_key[0], public_key[1], identity_nullifier, identity_r): (${private_key}, ${pubKey[0]}, ${pubKey[1]}, ${identity_nullifier}, ${identity_r})`); - const identity_commitment = mimc7.multiHash([pubKey[0], pubKey[1], identity_nullifier, identity_r]); + const identity_commitment = mimc7.multiHash([bigInt(pubKey[0]), bigInt(pubKey[1]), bigInt(identity_nullifier), bigInt(identity_r)]); logger.info(`identity_commitment : ${identity_commitment}`); const generated_identity = { diff --git a/semaphorejs/src/server/server.js b/semaphorejs/src/server/server.js index b37c0f3a..f2ebda9c 100755 --- a/semaphorejs/src/server/server.js +++ b/semaphorejs/src/server/server.js @@ -20,9 +20,9 @@ * along with semaphorejs. If not, see . */ -const RocksDb = require('sbmtjs/src/storage/rocksdb'); -const MerkleTree = require('sbmtjs/src/tree'); -const Mimc7Hasher = require('sbmtjs/src/hasher/mimc7'); +const RocksDb = require('zkp-sbmtjs/src/storage/rocksdb'); +const MerkleTree = require('zkp-sbmtjs/src/tree'); +const Mimc7Hasher = require('zkp-sbmtjs/src/hasher/mimc7'); const Web3 = require('web3'); const SemaphoreABI = require('../../build/contracts/Semaphore.json'); diff --git a/semaphorejs/test/contracts/semaphore.js b/semaphorejs/test/contracts/semaphore.js index a7df2cad..3978412e 100644 --- a/semaphorejs/test/contracts/semaphore.js +++ b/semaphorejs/test/contracts/semaphore.js @@ -45,9 +45,9 @@ const Semaphore = artifacts.require('Semaphore'); const proof_util = require('../../src/util'); -const RocksDb = require('sbmtjs/src/storage/rocksdb'); -const MerkleTree = require('sbmtjs/src/tree'); -const Mimc7Hasher = require('sbmtjs/src/hasher/mimc7'); +const RocksDb = require('zkp-sbmtjs/src/storage/rocksdb'); +const MerkleTree = require('zkp-sbmtjs/src/tree'); +const Mimc7Hasher = require('zkp-sbmtjs/src/hasher/mimc7'); beBuff2int = function(buff) { let res = bigInt.zero;