feat: add spec for proof generation and verification (#14)

This commit is contained in:
Richard Ramos 2022-09-24 11:00:40 -04:00 committed by GitHub
parent 2cbbbf3690
commit 7752534855
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 68 additions and 25 deletions

View File

@ -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")
}
});

18
package-lock.json generated
View File

@ -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",

View File

@ -123,6 +123,6 @@
]
},
"dependencies": {
"@waku/zerokit-rln-wasm": "^0.0.1"
"@waku/zerokit-rln-wasm": "^0.0.2"
}
}

View File

@ -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) {
//
}
});
});