[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rpm-cvs
Subject:    [CVS] RPM: rpm/js/ rpmmpw-js.c rpm/js/tscripts/ Mpw.js
From:       "Jeff Johnson" <jbj () rpm5 ! org>
Date:       2009-07-30 2:55:39
Message-ID: 20090730025539.A8D66B507 () rpm5 ! org
[Download RAW message or body]

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

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   30-Jul-2009 04:55:39
  Branch: HEAD                             Handle: 2009073002553900

  Modified files:
    rpm/js                  rpmmpw-js.c
    rpm/js/tscripts         Mpw.js

  Log:
    - js: add Mpw unit tests for RSA/DSA/ElGamal.

  Summary:
    Revision    Changes     Path
    1.5         +2  -4      rpm/js/rpmmpw-js.c
    1.5         +94 -2      rpm/js/tscripts/Mpw.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/js/rpmmpw-js.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rpmmpw-js.c
  --- rpm/js/rpmmpw-js.c	30 Jul 2009 00:28:05 -0000	1.4
  +++ rpm/js/rpmmpw-js.c	30 Jul 2009 02:55:39 -0000	1.5
  @@ -1392,9 +1392,9 @@
   	mpgcd_w(xsize, xdata, mdata, MPW_DATA(z), wksp);
   	break;
       case 'I':
  -	wksp = alloca((7*msize+6)*sizeof(*wksp));
  +	wksp = alloca((6*msize+6)*sizeof(*wksp));
   	z = mpw_New(msize);
  -	(void) mpextgcd_w(msize, wksp, mdata, MPW_DATA(z), wksp+msize);
  +	(void) mpextgcd_w(msize, mdata, xdata, MPW_DATA(z), wksp+msize);
   	break;
   #ifdef	DYING
       case 'R':
  @@ -1581,11 +1581,9 @@
       JSBool ok;
   
   _METHOD_DEBUG_ENTRY(_debug);
  -_debug = -1;
       if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo)))
   	ok = mpw_wrap(cx, rval,
   		mpw_ops2('I', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
  -_debug = 0;
       return ok;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/js/tscripts/Mpw.js
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Mpw.js
  --- rpm/js/tscripts/Mpw.js	30 Jul 2009 00:28:05 -0000	1.4
  +++ rpm/js/tscripts/Mpw.js	30 Jul 2009 02:55:39 -0000	1.5
  @@ -43,8 +43,7 @@
   var y = mpw(13);
   ack('y.toString(10)', '13');
   
  -// FIXME
  -// ack('mpw.invm(x, m).toString(10)', '4');
  +ack('mpw.invm(x, m).toString(10)', '4');
   
   ack('mpw.sqrm(x, m).toString(10)', '4');
   ack('mpw.addm(x, y, m).toString(10)', '5');
  @@ -181,4 +180,97 @@
       }
   }
   
  +// ===== RSA example (from "Handbook of Applied Cryptography" 11.20 p434).
  +// Keygen RSA
  +var p = mpw(7927);
  +var q = mpw(6997);
  +var n = mpw(p, q, "*");
  +ack('n.toString(10)', '55465219');
  +var phi = mpw(p, mpw(1), "-", q, mpw(1), "-", "*");
  +ack('phi.toString(10)', '55450296');
  +var e = mpw(5);
  +ack('e.toString(10)', '5');
  +// print("gcd(e, phi) = "+mpw.gcd(e, phi));
  +ack('mpw.gcd(e, phi).toString(10)', '1');
  +var d = mpw.invm(e, phi);
  +// print("mulm(e, d, phi) = "+mpw.mulm(e, d, phi));
  +ack('mpw.mulm(e, d, phi).toString(10)', '1');
  +ack('d.toString(10)', '44360237');
  +
  +// print("n = "+n.toString(10) + " e = "+e.toString(10) + " d = "+d.toString(10));
  +
  +// Sign RSA
  +var m = mpw(31229978);
  +var s = mpw.powm(m, d, n);
  +ack('s.toString(10)', '30729435');
  +
  +// Verify RSA
  +var mtwiddle = mpw.powm(s, e, n);
  +ack('mtwiddle.toString(10)', m.toString(10));
  +
  +// ===== DSA example (from "Handbook of Applied Cryptography" 11.57 p453).
  +// Keygen DSA
  +var p = mpw(124540019);
  +var q = mpw(17389);
  +ack('mpw(p, mpw(1), "-", q, "%").toString(10)', '0');
  +var pdivq = mpw(p, mpw(1), "-", q, "/");
  +ack('pdivq.toString(10)', '7162');
  +var g = mpw(110217528);
  +var alpha = mpw.powm(g, pdivq, p);
  +ack('alpha.toString(10)', '10083255');
  +var a = mpw(12496);
  +var y = mpw.powm(alpha, a, p);
  +ack('y.toString(10)', '119946265');
  +
  +// Sign DSA
  +var k = mpw(9557);
  +var r = mpw(mpw.powm(alpha, k, p), q, "%");
  +ack('r.toString(10)', '34');
  +var kinv = mpw.invm(k, q);
  +ack('kinv.toString(10)', '7631');
  +var hm = mpw(5246);
  +var s = mpw.mulm(kinv, mpw(hm, a, r, "*", "+"), q);
  +ack('s.toString(10)', '13049');
  +
  +// Verify DSA
  +var w = mpw.invm(s, q);
  +ack('w.toString(10)', '1799');
  +var u1 = mpw.mulm(w, hm, q);
  +ack('u1.toString(10)', '12716');
  +var u2 = mpw.mulm(r, w, q);
  +ack('u2.toString(10)', '8999');
  +var v1 = mpw.powm(alpha, u1, p);
  +var v2 = mpw.powm(y, u2, p);
  +var v3 = mpw.mulm(v1, v2, p);
  +ack('v3.toString(10)', '27039929');
  +var v = mpw(v3, q, "%");
  +ack('v.toString(10)', r.toString(10));
  +
  +// ===== ElGamal example (from "Handbook of Applied Cryptography" 11.65 p455).
  +// Keygen ElGamal
  +var p = mpw(2357);
  +var alpha = mpw(2);
  +var a = mpw(1751);
  +var y = mpw.powm(alpha, a, p);
  +ack('y.toString(10)', '1185');
  +
  +// Sign ElGamal
  +var hm = mpw(1463);
  +var k = mpw(1529);
  +var r = mpw.powm(alpha, k, p);
  +ack('r.toString(10)', '1490');
  +var pm1 = mpw(p, mpw(1), "-");
  +var kinv = mpw.invm(k, pm1);
  +ack('kinv.toString(10)', '245');
  +var s = mpw.mulm(kinv, mpw.subm(hm, mpw.mulm(a, r, pm1), pm1), pm1);
  +ack('s.toString(10)', '1777');
  +
  +// Verify ElGamal
  +var ytor = mpw.powm(y, r, p);
  +var rtos = mpw.powm(r, s, p);
  +var v1 = mpw.mulm(ytor, rtos, p);
  +ack('v1.toString(10)', '1072');
  +var v2 = mpw.powm(alpha, hm, p);
  +ack('v2.toString(10)', v1.toString(10));
  +
   if (loglvl) print("<-- Mpw.js");
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic