mirror of
https://github.com/logos-messaging/js-rln.git
synced 2026-01-03 06:03:08 +00:00
* decouple utils, remove global variables * decouple hash utils * decouple proof related stuff * move to utils, move to resources * decouple zerokit * fix spelling * fix mock * remove auto prettier, typo * retur prettier * comma
138 lines
4.0 KiB
TypeScript
138 lines
4.0 KiB
TypeScript
import { assert, expect } from "chai";
|
|
|
|
import { createRLN } from "./create.js";
|
|
|
|
describe("js-rln", () => {
|
|
it("should verify a proof", async function () {
|
|
const rlnInstance = await createRLN();
|
|
|
|
const credential = rlnInstance.zerokit.generateIdentityCredentials();
|
|
|
|
//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.zerokit.insertMember(credential.IDCommitment);
|
|
} else {
|
|
// create a new key pair
|
|
rlnInstance.zerokit.insertMember(
|
|
rlnInstance.zerokit.generateIdentityCredentials().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.zerokit.generateRLNProof(
|
|
uint8Msg,
|
|
index,
|
|
epoch,
|
|
credential.IDSecretHash
|
|
);
|
|
|
|
try {
|
|
// verify the proof
|
|
const verifResult = rlnInstance.zerokit.verifyRLNProof(proof, uint8Msg);
|
|
expect(verifResult).to.be.true;
|
|
} catch (err) {
|
|
assert.fail(0, 1, "should not have failed proof verification");
|
|
}
|
|
|
|
try {
|
|
// Modifying the signal so it's invalid
|
|
uint8Msg[4] = 4;
|
|
// verify the proof
|
|
const verifResult = rlnInstance.zerokit.verifyRLNProof(proof, uint8Msg);
|
|
expect(verifResult).to.be.false;
|
|
} catch (err) {
|
|
console.log(err);
|
|
}
|
|
});
|
|
it("should verify a proof with a seeded membership key generation", async function () {
|
|
const rlnInstance = await createRLN();
|
|
const seed = "This is a test seed";
|
|
const credential =
|
|
rlnInstance.zerokit.generateSeededIdentityCredential(seed);
|
|
|
|
//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.zerokit.insertMember(credential.IDCommitment);
|
|
} else {
|
|
// create a new key pair
|
|
rlnInstance.zerokit.insertMember(
|
|
rlnInstance.zerokit.generateIdentityCredentials().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.zerokit.generateRLNProof(
|
|
uint8Msg,
|
|
index,
|
|
epoch,
|
|
credential.IDSecretHash
|
|
);
|
|
|
|
try {
|
|
// verify the proof
|
|
const verifResult = rlnInstance.zerokit.verifyRLNProof(proof, uint8Msg);
|
|
expect(verifResult).to.be.true;
|
|
} catch (err) {
|
|
assert.fail(0, 1, "should not have failed proof verification");
|
|
}
|
|
|
|
try {
|
|
// Modifying the signal so it's invalid
|
|
uint8Msg[4] = 4;
|
|
// verify the proof
|
|
const verifResult = rlnInstance.zerokit.verifyRLNProof(proof, uint8Msg);
|
|
expect(verifResult).to.be.false;
|
|
} catch (err) {
|
|
console.log(err);
|
|
}
|
|
});
|
|
|
|
it("should generate the same membership key if the same seed is provided", async function () {
|
|
const rlnInstance = await createRLN();
|
|
const seed = "This is a test seed";
|
|
const memKeys1 = rlnInstance.zerokit.generateSeededIdentityCredential(seed);
|
|
const memKeys2 = rlnInstance.zerokit.generateSeededIdentityCredential(seed);
|
|
|
|
memKeys1.IDCommitment.forEach((element, index) => {
|
|
expect(element).to.equal(memKeys2.IDCommitment[index]);
|
|
});
|
|
memKeys1.IDNullifier.forEach((element, index) => {
|
|
expect(element).to.equal(memKeys2.IDNullifier[index]);
|
|
});
|
|
memKeys1.IDSecretHash.forEach((element, index) => {
|
|
expect(element).to.equal(memKeys2.IDSecretHash[index]);
|
|
});
|
|
memKeys1.IDTrapdoor.forEach((element, index) => {
|
|
expect(element).to.equal(memKeys2.IDTrapdoor[index]);
|
|
});
|
|
});
|
|
});
|