arnaucube
arnaucube/grapevine-sonobePublic Self-hosted repository
grapevine-sonobe/circom/node_modules/circomlib/test/mimcspongecircuit.js
circom/node_modules/circomlib/test/mimcspongecircuit.jsRaw
 1const path = require("path");
 2const wasm_tester = require("circom_tester").wasm;
 3
 4const buildMimcSponge = require("circomlibjs").buildMimcSponge;
 5
 6
 7describe("MiMC Sponge Circuit test", function () {
 8    let circuit;
 9    let mimcSponge;
10    let F;
11
12    this.timeout(100000);
13
14    before( async () => {
15        mimcSponge = await buildMimcSponge();
16        F = mimcSponge.F;
17    });
18
19
20    it("Should check permutation", async () => {
21
22        circuit = await wasm_tester(path.join(__dirname, "circuits", "mimc_sponge_test.circom"));
23
24        const w = await circuit.calculateWitness({xL_in: 1, xR_in: 2, k: 3});
25
26        const out2 = mimcSponge.hash(1,2,3);
27
28        await circuit.assertOut(w, {xL_out: F.toObject(out2.xL), xR_out: F.toObject(out2.xR)});
29
30        await circuit.checkConstraints(w);
31
32    });
33
34    it("Should check hash", async () => {
35        circuit = await wasm_tester(path.join(__dirname, "circuits", "mimc_sponge_hash_test.circom"));
36
37        const w = await circuit.calculateWitness({ins: [1, 2], k: 0});
38
39        const out2 = mimcSponge.multiHash([1,2], 0, 3);
40
41        for (let i=0; i<out2.length; i++) out2[i] = F.toObject(out2[i]);
42
43        await circuit.assertOut(w, {outs: out2});
44
45        await circuit.checkConstraints(w);
46    });
47});