[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