mirror of
https://github.com/arnaucube/circomlib.git
synced 2026-02-06 18:56:43 +01:00
All tests working
This commit is contained in:
@@ -67,6 +67,7 @@ template NOR() {
|
||||
template MultiAND(n) {
|
||||
signal input in[n];
|
||||
signal output out;
|
||||
var i;
|
||||
if (n==1) {
|
||||
out <== in[0];
|
||||
} else if (n==2) {
|
||||
@@ -81,8 +82,8 @@ template MultiAND(n) {
|
||||
var n2 = n-n\2;
|
||||
ands[0] = MultiAND(n1);
|
||||
ands[1] = MultiAND(n2);
|
||||
for (var i=0; i<n1; i++) ands[0].in[i] <== in[i];
|
||||
for (var i=0; i<n2; i++) ands[1].in[i] <== in[n1+i];
|
||||
for (i=0; i<n1; i++) ands[0].in[i] <== in[i];
|
||||
for (i=0; i<n2; i++) ands[1].in[i] <== in[n1+i];
|
||||
and2.a <== ands[0].out;
|
||||
and2.b <== ands[1].out;
|
||||
out <== and2.out;
|
||||
|
||||
@@ -6,10 +6,12 @@ template MiMCSponge(nInputs, nRounds, nOutputs) {
|
||||
signal input k;
|
||||
signal output outs[nOutputs];
|
||||
|
||||
var i;
|
||||
|
||||
// S = R||C
|
||||
component S[nInputs + nOutputs - 1];
|
||||
|
||||
for (var i = 0; i < nInputs; i++) {
|
||||
for (i = 0; i < nInputs; i++) {
|
||||
S[i] = MiMCFeistel(nRounds);
|
||||
S[i].k <== k;
|
||||
if (i == 0) {
|
||||
@@ -23,7 +25,7 @@ template MiMCSponge(nInputs, nRounds, nOutputs) {
|
||||
|
||||
outs[0] <== S[nInputs - 1].xL_out;
|
||||
|
||||
for (var i = 0; i < nOutputs - 1; i++) {
|
||||
for (i = 0; i < nOutputs - 1; i++) {
|
||||
S[nInputs + i] = MiMCFeistel(nRounds);
|
||||
S[nInputs + i].k <== k;
|
||||
S[nInputs + i].xL_in <== S[nInputs + i - 1].xL_out;
|
||||
|
||||
@@ -25,9 +25,12 @@ template Mix(t, M) {
|
||||
signal output out[t];
|
||||
var lc;
|
||||
|
||||
for (var i=0; i<t; i++) {
|
||||
var i;
|
||||
var j;
|
||||
|
||||
for (i=0; i<t; i++) {
|
||||
lc = 0;
|
||||
for (var j=0; j<t; j++) {
|
||||
for (j=0; j<t; j++) {
|
||||
lc = lc + M[i][j]*in[j];
|
||||
}
|
||||
out[i] <== lc;
|
||||
@@ -163,13 +166,15 @@ template Poseidon(nInputs, t, nRoundsF, nRoundsP) {
|
||||
component sigmaP[nRoundsP];
|
||||
component mix[nRoundsF + nRoundsP];
|
||||
|
||||
var i;
|
||||
var j;
|
||||
var k;
|
||||
|
||||
for (var i=0; i<(nRoundsF + nRoundsP); i++) {
|
||||
for (i=0; i<(nRoundsF + nRoundsP); i++) {
|
||||
ark[i] = Ark(t, C[i]);
|
||||
mix[i] = Mix(t, M);
|
||||
|
||||
for (var j=0; j<t; j++) {
|
||||
for (j=0; j<t; j++) {
|
||||
if (i==0) {
|
||||
if (j<nInputs) {
|
||||
ark[i].in[j] <== inputs[j];
|
||||
@@ -183,7 +188,7 @@ template Poseidon(nInputs, t, nRoundsF, nRoundsP) {
|
||||
|
||||
if ((i<(nRoundsF/2)) || (i>= (nRoundsP + nRoundsF/2))) {
|
||||
k= i<nRoundsF/2 ? i : (i-nRoundsP);
|
||||
for (var j=0; j<t; j++) {
|
||||
for (j=0; j<t; j++) {
|
||||
sigmaF[k][j] = Sigma();
|
||||
sigmaF[k][j].in <== ark[i].out[j];
|
||||
mix[i].in[j] <== sigmaF[k][j].out;
|
||||
@@ -193,7 +198,7 @@ template Poseidon(nInputs, t, nRoundsF, nRoundsP) {
|
||||
sigmaP[k] = Sigma();
|
||||
sigmaP[k].in <== ark[i].out[0];
|
||||
mix[i].in[0] <== sigmaP[k].out;
|
||||
for (var j=1; j<t; j++) {
|
||||
for (j=1; j<t; j++) {
|
||||
mix[i].in[j] <== ark[i].out[j];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,9 +79,11 @@ template SMTLevIns(nLevels) {
|
||||
signal output levIns[nLevels];
|
||||
signal done[nLevels-1]; // Indicates if the insLevel has aready been detected.
|
||||
|
||||
var i;
|
||||
|
||||
component isZero[nLevels];
|
||||
|
||||
for (var i=0; i<nLevels; i++) {
|
||||
for (i=0; i<nLevels; i++) {
|
||||
isZero[i] = IsZero();
|
||||
isZero[i].in <== siblings[i];
|
||||
}
|
||||
@@ -91,7 +93,7 @@ template SMTLevIns(nLevels) {
|
||||
|
||||
levIns[nLevels-1] <== (1-isZero[nLevels-2].out);
|
||||
done[nLevels-2] <== levIns[nLevels-1];
|
||||
for (var i=nLevels-2; i>0; i--) {
|
||||
for (i=nLevels-2; i>0; i--) {
|
||||
levIns[i] <== (1-done[i])*(1-isZero[i-1].out)
|
||||
done[i-1] <== levIns[i] + done[i];
|
||||
}
|
||||
|
||||
@@ -150,6 +150,8 @@ template SMTProcessor(nLevels) {
|
||||
|
||||
signal enabled;
|
||||
|
||||
var i;
|
||||
|
||||
enabled <== fnc[0] + fnc[1] - fnc[0]*fnc[1]
|
||||
|
||||
component hash1Old = SMTHash1();
|
||||
@@ -167,18 +169,18 @@ template SMTProcessor(nLevels) {
|
||||
n2bNew.in <== newKey;
|
||||
|
||||
component smtLevIns = SMTLevIns(nLevels);
|
||||
for (var i=0; i<nLevels; i++) smtLevIns.siblings[i] <== siblings[i];
|
||||
for (i=0; i<nLevels; i++) smtLevIns.siblings[i] <== siblings[i];
|
||||
smtLevIns.enabled <== enabled;
|
||||
|
||||
component xors[nLevels];
|
||||
for (var i=0; i<nLevels; i++) {
|
||||
for (i=0; i<nLevels; i++) {
|
||||
xors[i] = XOR();
|
||||
xors[i].a <== n2bOld.out[i];
|
||||
xors[i].b <== n2bNew.out[i];
|
||||
}
|
||||
|
||||
component sm[nLevels];
|
||||
for (var i=0; i<nLevels; i++) {
|
||||
for (i=0; i<nLevels; i++) {
|
||||
sm[i] = SMTProcessorSM();
|
||||
if (i==0) {
|
||||
sm[i].prev_top <== enabled;
|
||||
@@ -204,7 +206,7 @@ template SMTProcessor(nLevels) {
|
||||
sm[nLevels-1].st_na + sm[nLevels-1].st_new1 + sm[nLevels-1].st_old0 +sm[nLevels-1].st_upd === 1;
|
||||
|
||||
component levels[nLevels];
|
||||
for (var i=nLevels-1; i != -1; i--) {
|
||||
for (i=nLevels-1; i != -1; i--) {
|
||||
levels[i] = SMTProcessorLevel();
|
||||
|
||||
levels[i].st_top <== sm[i].st_top;
|
||||
|
||||
@@ -48,6 +48,8 @@ template SMTVerifier(nLevels) {
|
||||
signal input value;
|
||||
signal input fnc;
|
||||
|
||||
var i;
|
||||
|
||||
component hash1Old = SMTHash1();
|
||||
hash1Old.key <== oldKey;
|
||||
hash1Old.value <== oldValue;
|
||||
@@ -63,11 +65,11 @@ template SMTVerifier(nLevels) {
|
||||
n2bNew.in <== key;
|
||||
|
||||
component smtLevIns = SMTLevIns(nLevels);
|
||||
for (var i=0; i<nLevels; i++) smtLevIns.siblings[i] <== siblings[i];
|
||||
for (i=0; i<nLevels; i++) smtLevIns.siblings[i] <== siblings[i];
|
||||
smtLevIns.enabled <== enabled;
|
||||
|
||||
component sm[nLevels];
|
||||
for (var i=0; i<nLevels; i++) {
|
||||
for (i=0; i<nLevels; i++) {
|
||||
sm[i] = SMTVerifierSM();
|
||||
if (i==0) {
|
||||
sm[i].prev_top <== enabled;
|
||||
@@ -89,7 +91,7 @@ template SMTVerifier(nLevels) {
|
||||
sm[nLevels-1].st_na + sm[nLevels-1].st_iold + sm[nLevels-1].st_inew + sm[nLevels-1].st_i0 === 1;
|
||||
|
||||
component levels[nLevels];
|
||||
for (var i=nLevels-1; i != -1; i--) {
|
||||
for (i=nLevels-1; i != -1; i--) {
|
||||
levels[i] = SMTVerifierLevel();
|
||||
|
||||
levels[i].st_top <== sm[i].st_top;
|
||||
|
||||
Reference in New Issue
Block a user