arnaucube
arnaucube/circomlibPublic Self-hosted repository
Convert constant components to functions
Jordi Baylina jordi@baylina.cat
Wed, 04 Dec 2019 21:57:02 +0100
commit

a1d4d1dca7c5744084df96108091688e0869ace9

parent

e3eb8343228a4c8b0d46180558e75360e33a32aa

M circuits/escalarmul.circom → circuits/escalarmul.circom

@@ -1,4 +1,4 @@

-/* + /* Copyright 2018 0KIMS association. This file is part of circom (Zero Knowledge Circuit Compiler).

@@ -71,7 +71,7 @@ signal input in[2];

signal input sel[4]; signal output out[2]; - component table; + var table; component mux; component adder;

@@ -86,8 +86,8 @@ sel[i] ==> mux.s[i];

} for (i=0; i<16; i++) { - table.out[i][0] ==> mux.c[0][i]; - table.out[i][1] ==> mux.c[1][i]; + mux.c[0][i] <== table[i][0]; + mux.c[1][i] <== table[i][1]; } in[0] ==> adder.x1;
M circuits/escalarmulw4table.circom → circuits/escalarmulw4table.circom

@@ -27,8 +27,8 @@ res[1] = (y1*y2 - a*x1*x2) / (1 - d*x1*x2*y1*y2);

return res; } -template EscalarMulW4Table(base, k) { - signal output out[16][2]; +function EscalarMulW4Table(base, k) { + var out[16][2]; var i; var p[2];

@@ -39,11 +39,13 @@ for (i=0; i<k*4; i++) {

dbl = pointAdd(dbl[0], dbl[1], dbl[0], dbl[1]); } - out[0][0] <== 0; - out[0][1] <== 1; + out[0][0] = 0; + out[0][1] = 1; for (i=1; i<16; i++) { p = pointAdd(out[i-1][0], out[i-1][1], dbl[0], dbl[1]); - out[i][0] <== p[0]; - out[i][1] <== p[1]; + out[i][0] = p[0]; + out[i][1] = p[1]; } + + return out; }
M circuits/mimcsponge.circom → circuits/mimcsponge.circom

@@ -279,7 +279,7 @@ t2[i] <== t*t;

t4[i] <== t2[i]*t2[i]; if (i<nrounds-1) { xL[i] <== ((i==0) ? xR_in : xR[i-1]) + t4[i]*t; - xR[i] = (i==0) ? xL_in : xL[i-1]; + xR[i] <== (i==0) ? xL_in : xL[i-1]; } else { xR_out <== xR[i-1] + t4[i]*t; xL_out <== xL[i-1];
M package.json → package.json

@@ -31,7 +31,7 @@ "typedarray-to-buffer": "^3.1.5",

"web3": "^1.0.0-beta.55" }, "devDependencies": { - "circom": "0.0.34", + "circom": "0.0.35", "eslint-plugin-mocha": "^5.2.0", "ganache-cli": "^6.4.4", "mocha": "^5.2.0"
M test/aliascheck.js → test/aliascheck.js

@@ -56,7 +56,7 @@ try {

circuit.calculateWitness({in: inp}); assert(false); } catch(err) { - assert.equal(err.message, "Constraint doesn't match: 1 != 0"); + assert(/Constraint\sdoesn't\smatch(.*)1\s!=\s0/.test(err.message) ); } });

@@ -67,7 +67,7 @@ try {

circuit.calculateWitness({in: inp}); assert(false); } catch(err) { - assert.equal(err.message, "Constraint doesn't match: 1 != 0"); + assert(/Constraint\sdoesn't\smatch(.*)1\s!=\s0/.test(err.message) ); } });
M test/babyjub.js → test/babyjub.js

@@ -100,11 +100,11 @@ try {

circuitTest.calculateWitness({x: 1, y: 0}); assert(false, "Should be a valid point"); } catch(err) { - assert.equal(err.message, "Constraint doesn't match: 168700 != 1"); + assert(/Constraint\sdoesn't\smatch(.*)168700\s!=\s1/.test(err.message) ); } }); - it("Should extract the public key from the private one", async () => { + it("Should extract the public key from the private one", async () => { const rawpvk = Buffer.from("0001020304050607080900010203040506070809000102030405060708090021", "hex"); const pvk = eddsa.pruneBuffer(createBlakeHash("blake512").update(rawpvk).digest().slice(0,32));
M test/binsum.js → test/binsum.js

@@ -23,7 +23,7 @@ });

it("Should create a sum circuit", async () => { const cirDef = await compiler(path.join(__dirname, "circuits", "sum_test.circom")); - assert.equal(cirDef.nVars, 101); + assert.equal(cirDef.nVars, 97); // 32 (in1) + 32(in2) + 32(out) + 1 (carry) const circuit = new snarkjs.Circuit(cirDef);
M test/circuits/escalarmul_min_test.circom → test/circuits/escalarmul_min_test.circom

@@ -8,7 +8,7 @@

var i; var base = [5299619240641551281634865583518297030282874472190772894086521144482721001553, - 16950150798460657717958625567821834550301663161624707787222815936182638968203] + 16950150798460657717958625567821834550301663161624707787222815936182638968203]; component escalarMul = EscalarMul(256, base);
M test/circuits/escalarmul_test.circom → test/circuits/escalarmul_test.circom

@@ -7,7 +7,7 @@ signal input in;

signal output out[2]; var base = [5299619240641551281634865583518297030282874472190772894086521144482721001553, - 16950150798460657717958625567821834550301663161624707787222815936182638968203] + 16950150798460657717958625567821834550301663161624707787222815936182638968203]; component n2b = Num2Bits(253);
M test/circuits/escalarmul_test_min.circom → test/circuits/escalarmul_test_min.circom

@@ -8,7 +8,7 @@

var i; var base = [5299619240641551281634865583518297030282874472190772894086521144482721001553, - 16950150798460657717958625567821834550301663161624707787222815936182638968203] + 16950150798460657717958625567821834550301663161624707787222815936182638968203]; component escalarMul = EscalarMul(256, base);
M test/circuits/escalarmulw4table_test.circom → test/circuits/escalarmulw4table_test.circom

@@ -7,10 +7,10 @@ signal output out[16][2];

var base = [5299619240641551281634865583518297030282874472190772894086521144482721001553, 16950150798460657717958625567821834550301663161624707787222815936182638968203]; - component escalarMul = EscalarMulW4Table(base, 0); + var escalarMul = EscalarMulW4Table(base, 0); for (var i=0; i<16; i++) { - out[i][0] <== escalarMul.out[i][0]*in; - out[i][1] <== escalarMul.out[i][1]*in; + out[i][0] <== escalarMul[i][0]*in; + out[i][1] <== escalarMul[i][1]*in; } }
M test/circuits/escalarmulw4table_test3.circom → test/circuits/escalarmulw4table_test3.circom

@@ -7,10 +7,10 @@ signal output out[16][2];

var base = [5299619240641551281634865583518297030282874472190772894086521144482721001553, 16950150798460657717958625567821834550301663161624707787222815936182638968203]; - component escalarMul = EscalarMulW4Table(base, 3); + var escalarMul = EscalarMulW4Table(base, 3); for (var i=0; i<16; i++) { - out[i][0] <== escalarMul.out[i][0]*in; - out[i][1] <== escalarMul.out[i][1]*in; + out[i][0] <== escalarMul[i][0]*in; + out[i][1] <== escalarMul[i][1]*in; } }
M test/eddsamimc.js → test/eddsamimc.js

@@ -67,7 +67,7 @@ S: signature.S,

M: msg}); assert(false); } catch(err) { - assert.equal(err.message, "Constraint doesn't match: 1 != 0"); + assert(/Constraint\sdoesn't\smatch(.*)1\s!=\s0/.test(err.message) ); } });
M test/eddsaposeidon.js → test/eddsaposeidon.js

@@ -67,7 +67,7 @@ S: signature.S,

M: msg}); assert(false); } catch(err) { - assert.equal(err.message, "Constraint doesn't match: 1 != 0"); + assert(/Constraint\sdoesn't\smatch(.*)1\s!=\s0/.test(err.message) ); } });
M test/escalarmul.js → test/escalarmul.js

@@ -38,6 +38,8 @@ console.log("NConstrains: " + circuit.nConstraints);

const w = circuit.calculateWitness({in: 1}); + assert(circuit.checkWitness(w)); + let g = [bigInt("5299619240641551281634865583518297030282874472190772894086521144482721001553"), bigInt("16950150798460657717958625567821834550301663161624707787222815936182638968203")]

@@ -46,12 +48,12 @@

for (let i=0; i<16; i++) { const xout1 = w[circuit.getSignalIdx(`main.out[${i}][0]`)]; const yout1 = w[circuit.getSignalIdx(`main.out[${i}][1]`)]; -/* - console.log(xout1.toString()); - console.log(yout1.toString()); - console.log(dbl[0]); - console.log(dbl[1]); -*/ + + // console.log(xout1.toString()); + // console.log(yout1.toString()); + // console.log(dbl[0]); + // console.log(dbl[1]); + assert(xout1.equals(dbl[0])); assert(yout1.equals(dbl[1]));

@@ -74,6 +76,8 @@ console.log("NConstrains: " + circuit.nConstraints);

const w = circuit.calculateWitness({in: 1}); + assert(circuit.checkWitness(w)); + let g = [snarkjs.bigInt("5299619240641551281634865583518297030282874472190772894086521144482721001553"), snarkjs.bigInt("16950150798460657717958625567821834550301663161624707787222815936182638968203")]

@@ -87,12 +91,12 @@ for (let i=0; i<16; i++) {

const xout1 = w[circuit.getSignalIdx(`main.out[${i}][0]`)]; const yout1 = w[circuit.getSignalIdx(`main.out[${i}][1]`)]; -/* - console.log(xout1.toString()); - console.log(yout1.toString()); - console.log(dbl[0]); - console.log(dbl[1]); -*/ + + // console.log(xout1.toString()); + // console.log(yout1.toString()); + // console.log(dbl[0]); + // console.log(dbl[1]); + assert(xout1.equals(dbl[0])); assert(yout1.equals(dbl[1]));

@@ -102,7 +106,7 @@

}); it("Should exponentiate g^31", async () => { - const cirDef = await compiler(path.join(__dirname, "circuits", "escalarmul_test.circom")); + const cirDef = await compiler(path.join(__dirname, "circuits", "escalarmul_test.circom"), {reduceConstraints: true}); // console.log(JSON.stringify(cirDef, null, 1));

@@ -146,12 +150,12 @@ for (let i=0; i<252;i++) {

c = addPoint(c,c); } c = addPoint(c,g); -/* - console.log(xout2.toString()); - console.log(yout2.toString()); - console.log(c[0].toString()); - console.log(c[1].toString()); -*/ + + // console.log(xout2.toString()); + // console.log(yout2.toString()); + // console.log(c[0].toString()); + // console.log(c[1].toString()); + assert(xout2.equals(c[0])); assert(yout2.equals(c[1]));
M test/multiplexer.js → test/multiplexer.js

@@ -43,6 +43,8 @@

for (let i=0; i<16; i++) { const w = circuit.calculateWitness({ "selector": i }); + assert(circuit.checkWitness(w)); + assert(w[0].equals(bigInt(1))); // console.log(i + " -> " + w[circuit.getSignalIdx("main.out")].toString());

@@ -96,6 +98,8 @@

for (let i=0; i<4; i++) { const w = circuit.calculateWitness({ "selector": i }); + assert(circuit.checkWitness(w)); + assert(w[0].equals(bigInt(1))); // console.log(i + " -> " + w[circuit.getSignalIdx("main.out")].toString());

@@ -117,6 +121,8 @@ ];

for (let i=0; i<2; i++) { const w = circuit.calculateWitness({ "selector": i }); + + assert(circuit.checkWitness(w)); assert(w[0].equals(bigInt(1)));