RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [email protected]
  Module: rpm                              Date:   13-Aug-2009 20:56:12
  Branch: HEAD                             Handle: 2009081318561200

  Modified files:
    rpm/js/tscripts         Mpw.js

  Log:
    - js: add/dbl/mul methods.

  Summary:
    Revision    Changes     Path
    1.20        +111 -6     rpm/js/tscripts/Mpw.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/js/tscripts/Mpw.js
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 Mpw.js
  --- rpm/js/tscripts/Mpw.js    13 Aug 2009 13:46:22 -0000      1.19
  +++ rpm/js/tscripts/Mpw.js    13 Aug 2009 18:56:12 -0000      1.20
  @@ -956,7 +956,7 @@
       this.a = mpw(a);
       this.b = mpw(b);
   
  -    this.contains =
  +  this.contains =
       function (x, y) {
           if (x == undefined && y == undefined)
               return true;
  @@ -977,16 +977,116 @@
   // =======================================================
   function PointFp(C, x, y, n) {
       this.C = C;
  -    this.x = mpw(x);
  -    this.y = mpw(y);
  +    this.x = (x != undefined ? mpw(x) : undefined);
  +    this.y = (y != undefined ? mpw(y) : undefined);
       this.z = mpw(1);
  -    this.n = mpw(n);
  +    this.n = (n != undefined ? mpw(n) : undefined);
  +    if (!C.contains(this.x, this.y))
  +     print("NACK: ", this.x, this.y);
  +
  +  this.cmp =
  +    function (p1, p2) {
  +     if (p1.x == undefined || p1.y == undefined || p2.x == undefined || p2.y 
== undefined)
  +         return (p1.x == undefined && p1.y == undefined && p2.x == undefined 
&& p2.y == undefined);
  +     return (mpw.eq(p1.x, p2.x) && mpw.eq(p1.y, p2.y));
  +    }
  +
  +  this.dbl =
  +    function (P) {
  +     var C = P.C;
  +     if (P.x == undefined || P.y == undefined)
  +         return new PointFp(C, undefined, undefined, P.n);
  +     var l = mpw(P.x, P.x, "*", 3, "*", C.a, "+", C.p, "%", 2, P.y, "*", 
C.p, "%", C.p, "invm", "*", C.p, "%");
  +     var x = mpw(l, l, "*", 2, P.x, "*", "-", C.p, "%");
  +     var y = mpw(P.x, x, "-", l, "*", P.y, "-", C.p, "%");
  +     return new PointFp(C, x, y, P.n);
  +    }
  +
  +  this.add =
  +    function (P, Q) {
  +     var C = P.C;
  +     if (Q.x == undefined || Q.y == undefined)
  +         return new PointFp(C, P.x, P.y, P.n);
  +     if (P.x == undefined || P.y == undefined)
  +         return new PointFp(C, Q.x, Q.y, Q.n);
  +     if (mpw.eq(P.x, Q.x)) {
  +         if (mpw.eq(mpw(P.y, Q.y, "+", C.p, "%", "abs"), 0))
  +             return new PointFp(C, undefined, undefined, P.n);
  +         return P.dbl(P);
  +     }
  +     var l = mpw(Q.y, P.y, "-", Q.x, P.x, "-", C.p, "invm", "*", C.p, "%");
  +     var x = mpw(l, l, "*", P.x, "-", Q.x, "-", C.p, "%");
  +     var y = mpw(l, P.x, x, "-", "*", P.y, "-", C.p, "%");
  +     return new PointFp(C, x, y, P.n);
  +    }
  +
  +  this.sub =
  +    function (P, Q) {
  +     if (Q.x == undefined || Q.y == undefined)
  +         return new PointFp(P.C, P.x, P.y, P.n);
  +     N = new PointFp(Q.C, Q.x, mpw(Q.y, "neg"), Q.n);
  +     return this.add(P, N);
  +    }
  +
  +  this.mul =
  +    function (P, m) {
  +     var C = P.C;
  +     var e = mpw(m);
  +     if (P.n != undefined && !mpw.eq(P.n, 0))
  +         e = mpw(e, P.n, "%", "abs");
  +     if (mpw.eq(e, 0) || P.x == undefined || P.y == undefined)
  +         return new PointFp(C, undefined, undefined, P.n);
  +     var N = new PointFp(C, P.x, mpw(P.y, "neg"), P.n);
  +     var e3 = mpw(3, e, "*");
  +     var i = mpw(e3, e3, "^", "not");
  +     i = mpw(i, i, 1, ">>", "^");
  +     while (mpw.eq(mpw(e3, i, "&"), 0))
  +         i = mpw(i, 1, ">>");
  +     i = mpw(i, 1, ">>");
  +     var r = new PointFp(C, P.x, P.y, P.n);
  +     while (mpw.gt(i, 1)) {
  +         r = r.dbl(r);
  +         if (!mpw.eq(mpw(e3, i, "&"), 0) &&  mpw.eq(mpw( e, i, "&"), 0))
  +             r = r.add(r, P);
  +         if ( mpw.eq(mpw(e3, i, "&"), 0) && !mpw.eq(mpw( e, i, "&"), 0))
  +             r = r.add(r, N);
  +         i = mpw(i, 1, ">>");
  +     }
  +     return r;
  +    }
  +
       return this;
   }
   
  +function walkDbl(P, imax) {
  +    var PP = P.dbl(P);
  +    for (let i = 1; i < imax; i++)
  +     PP = P.dbl(PP);
  +    return PP;
  +}
  +
  +function walkAdd(P, Q, imax) {
  +    var PQ = P.add(P, Q);
  +    for (let i = 1; i < imax; i++)
  +     PQ = P.add(PQ, Q);
  +    return PQ;
  +}
  +
   function checkP(C, x, y, n) {
  -    P = new PointFp(C, x, y, n);
  -    ack('C.contains(P.x, P.y)', true);
  +    var P = new PointFp(C, x, y, n);
  +    var PP = P.sub(P, P);
  +    var PP = P.dbl(P);
  +    var P1 = P.mul(P, 1);
  +    var P2 = P.mul(P, 2);
  +
  +    var N = new PointFp(C, x, mpw(y, "neg"), n);
  +    var NN = N.sub(N, N);
  +//    var NN = N.dbl(N);
  +    var N1 = N.mul(N, 1);
  +//    var N2 = N.mul(N, 2);
  +
  +    var NP = N.add(N, P);
  +
       return P;
   }
   
  @@ -1057,6 +1157,7 @@
   var qx   = mpw('fba2aac647884b504eb8cd5a0a1287babcc62163f606a9a2');
   var qy   = mpw('dae6d4cc05ef4f27d79ee38b71c9c8ef4865d98850d84aa5');
   Q = checkP(C, qx, qy, n);
  +GQ = walkAdd(G, Q, 1);
   
   var k    = mpw('d06cb0a0ef2f708b0744f08aa06b6deedea9c0f80a69d847');
   var msg  = "Example of ECDSA with P-192";
  @@ -1101,6 +1202,7 @@
   var qx   = mpw('e84fb0b8e7000cb657d7973cf6b42ed78b301674276df744af130b3e');
   var qy   = mpw('4376675c6fc5612c21a0ff2d2a89d2987df7a2bc52183b5982298555');
   Q = checkP(C, qx, qy, n);
  +GQ = walkAdd(G, Q, 1);
   
   var k    = mpw('a548803b79df17c40cde3ff0e36d025143bcbba146ec32908eb84937');
   var msg  = "Example of ECDSA with P-224";
  @@ -1148,6 +1250,7 @@
   var qx   = 
mpw('b7e08afdfe94bad3f1dc8c734798ba1c62b3a0ad1e9ea2a38201cd0889bc7a19');
   var qy   = 
mpw('3603f747959dbf7a4bb226e41928729063adc7ae43529e61b563bbc606cc5e09');
   Q = checkP(C, qx, qy, n);
  +GQ = walkAdd(G, Q, 1);
   
   var k    = 
mpw('7a1a7e52797fc8caaa435d2a4dace39158504bf204fbe19f14dbb427faee50ae');
   var msg  = "Example of ECDSA with P-256";
  @@ -1199,6 +1302,7 @@
   var qx   = 
mpw('3bf701bc9e9d36b4d5f1455343f09126f2564390f2b487365071243c61e6471fb9d2ab74657b82f9086489d9ef0f5cb5');
   var qy   = 
mpw('d1a358eafbf952e68d533855ccbdaa6ff75b137a5101443199325583552a6295ffe5382d00cfcda30344a9b5b68db855');
   Q = checkP(C, qx, qy, n);
  +// GQ = walkAdd(G, Q, 1);
   
   var k    = 
mpw('2e44ef1f8c0bea8394e3dda81ec6a7842a459b534701749e2ed95f054f0137680878e0749fc43f85edcae06cc2f43fef');
   var msg  = "Example of ECDSA with P-384";
  @@ -1243,6 +1347,7 @@
   var qx   = 
mpw('0098e91eef9a68452822309c52fab453f5f117c1da8ed796b255e9ab8f6410cca16e59df403a6bdc6ca467a37056b1e54b3005d8ac030decfeb68df18b171885d5c4');
   var qy   = 
mpw('0164350c321aecfc1cca1ba4364c9b15656150b4b78d6a48d7d28e7f31985ef17be8554376b72900712c4b83ad668327231526e313f5f092999a4632fd50d946bc2e');
   Q = checkP(C, qx, qy, n);
  +// GQ = walkAdd(G, Q, 1);
   
   var k    = 
mpw('c91e2349ef6ca22d2de39dd51819b6aad922d3aecdeab452ba172f7d63e370cecd70575f597c09a174ba76bed05a48e562be0625336d16b8703147a6a231d6bf');
   var msg  = "Example of ECDSA with P-512";
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to