diff --git a/example/index.js b/example/index.js index 5643dee..7f18f0b 100644 --- a/example/index.js +++ b/example/index.js @@ -38,15 +38,4 @@ rln.create().then(async rlnInstance => { } catch (err) { console.log("Invalid proof") } - - try { - // Modifying the proof so it's invalid - proof[7] = 7; - // verify the proof - let verifResult = rlnInstance.verifyProof(proof); - console.log("Is proof verified?", verifResult ? "yes" : "no"); - } catch (err) { - console.log("Invalid proof") - } - }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a796756..d230efa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@waku/rln", - "version": "0.0.5", + "version": "0.0.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@waku/rln", - "version": "0.0.5", + "version": "0.0.6", "license": "MIT OR Apache-2.0", "dependencies": { - "@waku/zerokit-rln-wasm": "^0.0.1" + "@waku/zerokit-rln-wasm": "^0.0.2" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", @@ -1103,9 +1103,9 @@ "dev": true }, "node_modules/@waku/zerokit-rln-wasm": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.1.tgz", - "integrity": "sha512-VOcjGDK+uZ33e0S7EGigyHDsWH0/5L4WvQkLtlunJrS2yfCOGpmerfhfnpf/empd2KsOHGBeXZiIoC/KCAIOlA==" + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.2.tgz", + "integrity": "sha512-WFJXVhh5mlp1ActepsyCQ8RLWIp/BE0VmXdI+7Og0ealEtoaUzpHF1oxKeJpGLgYJWLYQc6DWgRz5Zz8vf+uKw==" }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", @@ -8968,9 +8968,9 @@ "dev": true }, "@waku/zerokit-rln-wasm": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.1.tgz", - "integrity": "sha512-VOcjGDK+uZ33e0S7EGigyHDsWH0/5L4WvQkLtlunJrS2yfCOGpmerfhfnpf/empd2KsOHGBeXZiIoC/KCAIOlA==" + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.2.tgz", + "integrity": "sha512-WFJXVhh5mlp1ActepsyCQ8RLWIp/BE0VmXdI+7Og0ealEtoaUzpHF1oxKeJpGLgYJWLYQc6DWgRz5Zz8vf+uKw==" }, "@webassemblyjs/ast": { "version": "1.11.1", diff --git a/package.json b/package.json index 8076818..6e2c29f 100644 --- a/package.json +++ b/package.json @@ -123,6 +123,6 @@ ] }, "dependencies": { - "@waku/zerokit-rln-wasm": "^0.0.1" + "@waku/zerokit-rln-wasm": "^0.0.2" } } diff --git a/src/index.spec.ts b/src/index.spec.ts index ef4efd0..6325401 100644 --- a/src/index.spec.ts +++ b/src/index.spec.ts @@ -1,9 +1,63 @@ +import { assert, expect } from "chai"; + import * as rln from "./index"; -describe("Waku Filter", () => { - it("test", async function () { +describe("js-rln", () => { + it("should verify a proof", async function () { const rlnInstance = await rln.create(); - console.log(rlnInstance.generateMembershipKey()); - // TODO: write test + + const memKeys = rlnInstance.generateMembershipKey(); + + //peer's index in the Merkle Tree + const index = 5; + + // Create a Merkle tree with random members + for (let i = 0; i < 10; i++) { + if (i == index) { + // insert the current peer's pk + rlnInstance.insertMember(memKeys.IDCommitment); + } else { + // create a new key pair + rlnInstance.insertMember( + rlnInstance.generateMembershipKey().IDCommitment + ); + } + } + + // prepare the message + const uint8Msg = Uint8Array.from( + "Hello World".split("").map((x) => x.charCodeAt(0)) + ); + + // setting up the epoch + const epoch = new Date(); + + // generating proof + const proof = await rlnInstance.generateProof( + uint8Msg, + index, + epoch, + memKeys.IDKey + ); + + try { + // verify the proof + const verifResult = rlnInstance.verifyProof(proof); + expect(verifResult).to.be.true; + } catch (err) { + assert.fail(0, 1, "should not have failed proof verification"); + } + + try { + // Modifying the proof so it's invalid + const proofBytes = proof.toBytes(); + proofBytes[7] = Math.floor(Math.random() * 256) % 255; + + // verify the proof + const verifResult = rlnInstance.verifyProof(proofBytes); + expect(verifResult).to.be.false; + } catch (err) { + // + } }); });