mirror of
https://github.com/logos-messaging/js-rln.git
synced 2026-01-07 16:13:07 +00:00
feat: add spec for proof generation and verification (#14)
This commit is contained in:
parent
2cbbbf3690
commit
7752534855
@ -38,15 +38,4 @@ rln.create().then(async rlnInstance => {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("Invalid proof")
|
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
18
package-lock.json
generated
@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "@waku/rln",
|
"name": "@waku/rln",
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@waku/rln",
|
"name": "@waku/rln",
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"license": "MIT OR Apache-2.0",
|
"license": "MIT OR Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@waku/zerokit-rln-wasm": "^0.0.1"
|
"@waku/zerokit-rln-wasm": "^0.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-commonjs": "^22.0.2",
|
"@rollup/plugin-commonjs": "^22.0.2",
|
||||||
@ -1103,9 +1103,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@waku/zerokit-rln-wasm": {
|
"node_modules/@waku/zerokit-rln-wasm": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.2.tgz",
|
||||||
"integrity": "sha512-VOcjGDK+uZ33e0S7EGigyHDsWH0/5L4WvQkLtlunJrS2yfCOGpmerfhfnpf/empd2KsOHGBeXZiIoC/KCAIOlA=="
|
"integrity": "sha512-WFJXVhh5mlp1ActepsyCQ8RLWIp/BE0VmXdI+7Og0ealEtoaUzpHF1oxKeJpGLgYJWLYQc6DWgRz5Zz8vf+uKw=="
|
||||||
},
|
},
|
||||||
"node_modules/@webassemblyjs/ast": {
|
"node_modules/@webassemblyjs/ast": {
|
||||||
"version": "1.11.1",
|
"version": "1.11.1",
|
||||||
@ -8968,9 +8968,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@waku/zerokit-rln-wasm": {
|
"@waku/zerokit-rln-wasm": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.0.2.tgz",
|
||||||
"integrity": "sha512-VOcjGDK+uZ33e0S7EGigyHDsWH0/5L4WvQkLtlunJrS2yfCOGpmerfhfnpf/empd2KsOHGBeXZiIoC/KCAIOlA=="
|
"integrity": "sha512-WFJXVhh5mlp1ActepsyCQ8RLWIp/BE0VmXdI+7Og0ealEtoaUzpHF1oxKeJpGLgYJWLYQc6DWgRz5Zz8vf+uKw=="
|
||||||
},
|
},
|
||||||
"@webassemblyjs/ast": {
|
"@webassemblyjs/ast": {
|
||||||
"version": "1.11.1",
|
"version": "1.11.1",
|
||||||
|
|||||||
@ -123,6 +123,6 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@waku/zerokit-rln-wasm": "^0.0.1"
|
"@waku/zerokit-rln-wasm": "^0.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,63 @@
|
|||||||
|
import { assert, expect } from "chai";
|
||||||
|
|
||||||
import * as rln from "./index";
|
import * as rln from "./index";
|
||||||
|
|
||||||
describe("Waku Filter", () => {
|
describe("js-rln", () => {
|
||||||
it("test", async function () {
|
it("should verify a proof", async function () {
|
||||||
const rlnInstance = await rln.create();
|
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) {
|
||||||
|
//
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user