From 8577b7154633eb73492a57ab84a3eb8f1207e8e2 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Fri, 7 Oct 2022 14:49:32 -0400 Subject: [PATCH] feat: use `verifyWithRoots` for verifying proofs --- example/package-lock.json | 6 +- package-lock.json | 114 +++++++------------------------------- package.json | 2 +- src/message.ts | 2 +- src/rln.ts | 28 ++++++++++ 5 files changed, 53 insertions(+), 99 deletions(-) diff --git a/example/package-lock.json b/example/package-lock.json index 112b06d..d82d41c 100644 --- a/example/package-lock.json +++ b/example/package-lock.json @@ -19,10 +19,10 @@ }, "..": { "name": "@waku/rln", - "version": "0.0.9", + "version": "0.0.11", "license": "MIT OR Apache-2.0", "dependencies": { - "@waku/zerokit-rln-wasm": "^0.0.3" + "@waku/zerokit-rln-wasm": "^0.0.4" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", @@ -3956,7 +3956,7 @@ "@types/uuid": "^8.3.0", "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", - "@waku/zerokit-rln-wasm": "^0.0.3", + "@waku/zerokit-rln-wasm": "^0.0.4", "@web/rollup-plugin-import-meta-assets": "^1.0.7", "app-root-path": "^3.0.0", "chai": "^4.3.4", diff --git a/package-lock.json b/package-lock.json index 76407fa..3e70bd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@waku/rln", - "version": "0.0.10", + "version": "0.0.11", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@waku/rln", - "version": "0.0.10", + "version": "0.0.11", "license": "MIT OR Apache-2.0", "dependencies": { - "@waku/zerokit-rln-wasm": "^0.0.3" + "@waku/zerokit-rln-wasm": "^0.0.4" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", @@ -2549,9 +2549,9 @@ "dev": true }, "node_modules/@waku/zerokit-rln-wasm": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.3.tgz", - "integrity": "sha512-vN2lfCbFChB1ZiyNpE34NBELJ7IabBgdWtzOnvOwuwmuQgAsWCdvt7UGtjRfogMxr2clSTrI1pVYSD9ayf/d4w==" + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.4.tgz", + "integrity": "sha512-J5Dh3CQAvSk1cn6Pv61wbTwuB0Sc1gR53ljVFqAovvTQSmMxY3I8vjE2vml5dLlhVCIlSAfBfnOr/OaBD3b0Mg==" }, "node_modules/@web/rollup-plugin-import-meta-assets": { "version": "1.0.7", @@ -3233,19 +3233,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "peer": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/byte-access": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/byte-access/-/byte-access-1.0.1.tgz", @@ -9705,16 +9692,6 @@ "node": ">= 4.0.0" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "dev": true, @@ -10445,19 +10422,6 @@ "through": "^2.3.8" } }, - "node_modules/undici": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", - "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", - "dev": true, - "peer": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, "node_modules/unique-string": { "version": "2.0.0", "dev": true, @@ -12547,8 +12511,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-wasm/-/plugin-wasm-5.2.0.tgz", "integrity": "sha512-PR3ff67ls2Kr9H04pZ24wJYPZq0YV+UHySpk7OuAJxyc7o5Q8NHFdwi4pfMtJkJkqfN1/QY/nq46SoRDoDvK2w==", - "dev": true, - "requires": {} + "dev": true }, "@rollup/pluginutils": { "version": "3.1.0", @@ -12995,9 +12958,9 @@ "dev": true }, "@waku/zerokit-rln-wasm": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.3.tgz", - "integrity": "sha512-vN2lfCbFChB1ZiyNpE34NBELJ7IabBgdWtzOnvOwuwmuQgAsWCdvt7UGtjRfogMxr2clSTrI1pVYSD9ayf/d4w==" + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.4.tgz", + "integrity": "sha512-J5Dh3CQAvSk1cn6Pv61wbTwuB0Sc1gR53ljVFqAovvTQSmMxY3I8vjE2vml5dLlhVCIlSAfBfnOr/OaBD3b0Mg==" }, "@web/rollup-plugin-import-meta-assets": { "version": "1.0.7", @@ -13190,13 +13153,11 @@ }, "acorn-import-assertions": { "version": "1.8.0", - "dev": true, - "requires": {} + "dev": true }, "acorn-jsx": { "version": "5.3.2", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { "version": "7.2.0", @@ -13229,8 +13190,7 @@ }, "ajv-keywords": { "version": "3.5.2", - "dev": true, - "requires": {} + "dev": true }, "ansi-colors": { "version": "4.1.1", @@ -13471,16 +13431,6 @@ "version": "3.3.0", "dev": true }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "peer": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, "byte-access": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/byte-access/-/byte-access-1.0.1.tgz", @@ -14261,8 +14211,7 @@ "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -14471,8 +14420,7 @@ }, "eslint-config-prettier": { "version": "8.5.0", - "dev": true, - "requires": {} + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -15854,8 +15802,7 @@ }, "jsdom-global": { "version": "3.0.2", - "dev": true, - "requires": {} + "dev": true }, "json-parse-better-errors": { "version": "1.0.2", @@ -16554,8 +16501,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz", "integrity": "sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==", - "dev": true, - "requires": {} + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -17223,8 +17169,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -17248,8 +17193,7 @@ "dependencies": { "ws": { "version": "8.5.0", - "dev": true, - "requires": {} + "dev": true } } }, @@ -17841,13 +17785,6 @@ } } }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "peer": true - }, "string_decoder": { "version": "1.3.0", "dev": true, @@ -18309,16 +18246,6 @@ "through": "^2.3.8" } }, - "undici": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", - "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", - "dev": true, - "peer": true, - "requires": { - "busboy": "^1.6.0" - } - }, "unique-string": { "version": "2.0.0", "dev": true, @@ -18639,8 +18566,7 @@ }, "ws": { "version": "8.8.1", - "dev": true, - "requires": {} + "dev": true }, "xdg-basedir": { "version": "4.0.0", diff --git a/package.json b/package.json index a3e876c..8d52983 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,6 @@ ] }, "dependencies": { - "@waku/zerokit-rln-wasm": "^0.0.3" + "@waku/zerokit-rln-wasm": "^0.0.4" } } diff --git a/src/message.ts b/src/message.ts index 0d0e400..6b903aa 100644 --- a/src/message.ts +++ b/src/message.ts @@ -18,7 +18,7 @@ export class RlnMessage implements Message { public verify(): boolean | undefined { return this.rateLimitProof - ? this.rlnInstance.verifyRLNProof(this.rateLimitProof, toRLNSignal(this)) + ? this.rlnInstance.verifyWithRoots(this.rateLimitProof, toRLNSignal(this)) // this.rlnInstance.verifyRLNProof once issue status-im/nwaku#1248 is fixed : undefined; } diff --git a/src/rln.ts b/src/rln.ts index 22d1d27..fb23864 100644 --- a/src/rln.ts +++ b/src/rln.ts @@ -129,6 +129,10 @@ export class RLNInstance { zerokitRLN.insertMember(this.zkRLN, idCommitment); } + getMerkleRoot(): Uint8Array { + return zerokitRLN.getRoot(this.zkRLN); + } + serializeMessage( uint8Msg: Uint8Array, memIndex: number, @@ -197,4 +201,28 @@ export class RLNInstance { concatenate(pBytes, msgLen, msg) ); } + + verifyWithRoots( + proof: RateLimitProof | Uint8Array, + msg: Uint8Array + ): boolean { + let pBytes: Uint8Array; + if (proof instanceof Uint8Array) { + pBytes = proof; + } else { + pBytes = proofToBytes(proof); + } + + // calculate message length + const msgLen = writeUIntLE(new Uint8Array(8), msg.length, 0, 8); + + // obtain root + const root = zerokitRLN.getRoot(this.zkRLN); + + return zerokitRLN.verifyWithRoots( + this.zkRLN, + concatenate(pBytes, msgLen, msg), + root + ); + } }