arnaucube
arnaucube/circomlibPublic Self-hosted repository
Support mutiply by point 0 in scalarmulany
Jordi Baylina jordi@baylina.cat
Thu, 05 Sep 2019 17:10:20 +0200
commit

024188b63826a2ed615e2835a44eae8e3f3a7e43

parent

ebbeaebc7375297429be6e12e2526260e49f7fb3

2 files changed, 11 insertions(+), 7 deletions(-)

jump to
M circuits/escalarmulany.circom → circuits/escalarmulany.circom

@@ -19,6 +19,7 @@ */

include "montgomery.circom"; include "babyjub.circom"; +include "comparators.circom"; template Multiplexor2() { signal input sel;

@@ -138,6 +139,8 @@ component segments[nsegments];

component doublers[nsegments-1]; component m2e[nsegments-1]; component adders[nsegments-1]; + component zeropoint = IsZero(); + zeropoint.in <== p[0]; var s; var i;

@@ -154,8 +157,9 @@ e[s*148+i] ==> segments[s].e[i];

} if (s==0) { - p[0] ==> segments[s].p[0]; - p[1] ==> segments[s].p[1]; + // force G8 point if input point is zero + segments[s].p[0] <== p[0] + (5299619240641551281634865583518297030282874472190772894086521144482721001553 - p[0])*zeropoint.out; + segments[s].p[1] <== p[1] + (16950150798460657717958625567821834550301663161624707787222815936182638968203 - p[1])*zeropoint.out; } else { doublers[s-1] = MontgomeryDouble(); m2e[s-1] = Montgomery2Edwards();

@@ -183,10 +187,10 @@ }

} if (nsegments == 1) { - segments[0].out[0] ==> out[0]; - segments[0].out[1] ==> out[1]; + segments[0].out[0]*(1-zeropoint.out) ==> out[0]; + segments[0].out[1]+(1-segments[0].out[1])*zeropoint.out ==> out[1]; } else { - adders[nsegments-2].xout ==> out[0]; - adders[nsegments-2].yout ==> out[1]; + adders[nsegments-2].xout*(1-zeropoint.out) ==> out[0]; + adders[nsegments-2].yout+(1-adders[nsegments-2].yout)*zeropoint.out ==> out[1]; } }
M circuits/escalarmulfix.circom → circuits/escalarmulfix.circom

@@ -246,7 +246,7 @@

var s; var i; var nseg; - var nWindows + var nWindows; for (s=0; s<nsegments; s++) {