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: 01-Aug-2009 21:24:04 Branch: HEAD Handle: 2009080119240400 Modified files: rpm/js rpmmpw-js.c rpm/js/tscripts Mpw.js Log: - js: add the mpw ternary operations to the RPN calculator. Summary: Revision Changes Path 1.8 +34 -136 rpm/js/rpmmpw-js.c 1.8 +123 -123 rpm/js/tscripts/Mpw.js ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/rpmmpw-js.c ============================================================================ $ cvs diff -u -r1.7 -r1.8 rpmmpw-js.c --- rpm/js/rpmmpw-js.c 1 Aug 2009 17:51:00 -0000 1.7 +++ rpm/js/rpmmpw-js.c 1 Aug 2009 19:24:04 -0000 1.8 @@ -1548,114 +1548,8 @@ return ok; } -/** Compute gcd(x, y). */ -static JSBool -mpw_Gcd(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) -{ - void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - JSBool ok; - -_METHOD_DEBUG_ENTRY(_debug); -assert(argc == 2); - ok = mpw_wrap(cx, rval, - mpw_ops2('G', mpw_j2mpw(cx, argv[0]), mpw_j2mpw(cx, argv[1]))); - return ok; -} - -/** Compute inverse (modulo m) of x. */ -static JSBool -mpw_Invm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) -{ - void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - JSBool ok; - -_METHOD_DEBUG_ENTRY(_debug); -assert(argc == 2); - ok = mpw_wrap(cx, rval, - mpw_ops2('I', mpw_j2mpw(cx, argv[0]), mpw_j2mpw(cx, argv[1]))); - return ok; -} - -/** Compute x*x (modulo m). */ -static JSBool -mpw_Sqrm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) -{ - void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - JSBool ok; - -_METHOD_DEBUG_ENTRY(_debug); -assert(argc == 2); -_debug = -1; - ok = mpw_wrap(cx, rval, - mpw_ops2('S', mpw_j2mpw(cx, argv[0]), mpw_j2mpw(cx, argv[1]))); -_debug = 0; - return ok; -} - -/** Compute x+y (modulo m). */ -static JSBool -mpw_Addm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) -{ - void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - JSBool ok; - -_METHOD_DEBUG_ENTRY(_debug); -assert(argc == 3); - ok = mpw_wrap(cx, rval, - mpw_ops3('+', - mpw_j2mpw(cx, argv[0]), mpw_j2mpw(cx, argv[1]), mpw_j2mpw(cx, argv[2]))); - return ok; -} - -/** Compute x-y (modulo m). */ -static JSBool -mpw_Subm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) -{ - void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - JSBool ok; - -_METHOD_DEBUG_ENTRY(_debug); -assert(argc == 3); - ok = mpw_wrap(cx, rval, - mpw_ops3('-', - mpw_j2mpw(cx, argv[0]), mpw_j2mpw(cx, argv[1]), mpw_j2mpw(cx, argv[2]))); - return ok; -} - -/** Compute x*y (modulo m). */ -static JSBool -mpw_Mulm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) -{ - void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - JSBool ok; - -_METHOD_DEBUG_ENTRY(_debug); -assert(argc == 3); - ok = mpw_wrap(cx, rval, - mpw_ops3('*', - mpw_j2mpw(cx, argv[0]), mpw_j2mpw(cx, argv[1]), mpw_j2mpw(cx, argv[2]))); - return ok; -} - -/** Compute x**y (modulo m). */ -static JSBool -mpw_Powm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) -{ - void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - JSBool ok; - -_METHOD_DEBUG_ENTRY(_debug); -assert(argc == 3); - ok = mpw_wrap(cx, rval, - mpw_ops3('P', - mpw_j2mpw(cx, argv[0]), mpw_j2mpw(cx, argv[1]), mpw_j2mpw(cx, argv[2]))); - return ok; -} - #ifdef DYING -/** - * Return random number 1 < r < b-1. - */ +/** Return random number 1 < r < b-1. */ static JSBool mpw_Rndm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -1766,14 +1660,6 @@ static JSFunctionSpec rpmmpw_funcs[] = { JS_FS("toString", mpw_toString, 0,0,0), - JS_FS("gcd", mpw_Gcd, 0,0,0), - JS_FS("invm", mpw_Invm, 0,0,0), - JS_FS("sqrm", mpw_Sqrm, 0,0,0), - JS_FS("addm", mpw_Addm, 0,0,0), - JS_FS("subm", mpw_Subm, 0,0,0), - JS_FS("mulm", mpw_Mulm, 0,0,0), - JS_FS("powm", mpw_Powm, 0,0,0), - JS_FS("__neg__", mpw_neg, 0,0,0), JS_FS("__pos__", mpw_pos, 0,0,0), JS_FS("__abs__", mpw_abs, 0,0,0), @@ -1955,9 +1841,6 @@ mpwObject * z = ptr; JSBool ok = JS_TRUE; jsval v = JSVAL_NULL; - const char * s; - size_t ns; - int c; void ** stack = memset(alloca(argc*sizeof(*stack)), 0, (argc*sizeof(*stack))); int ix = -1; uintN i; @@ -1977,23 +1860,22 @@ /* Check for operations. */ if (JSVAL_IS_STRING(v)) { - s = JS_GetStringBytes(JSVAL_TO_STRING(v)); - ns = strlen(s); - if (ns == 0) - continue; + const char * s = JS_GetStringBytes(JSVAL_TO_STRING(v)); + size_t ns = strlen(s); + int c = (ns == 1 ? *s : 0); - if (ns > 2) { -assert(++ix < (int)argc); - stack[ix] = mpw_j2mpw(cx, v); + if (ns == 0) continue; - } - c = *s; - if (ns == 2) { - if (!strcmp(s, "**")) c = (int)'P'; - if (!strcmp(s, "<<")) c = (int)'<'; - if (!strcmp(s, ">>")) c = (int)'>'; - } + if (!strcmp(s, "**")) c = (int)'P'; + if (!strcmp(s, "<<")) c = (int)'<'; + if (!strcmp(s, ">>")) c = (int)'>'; + if (!strcmp(s, "gcd")) c = (int)'G'; /* gcd(x, y). */ + if (!strcmp(s, "invm")) c = (int)'I'; /* inverse of x (modulo m). */ + if (!strcmp(s, "sqrm")) c = (int)'S'; /* x*x (modulo m). */ +#ifdef DYING + if (!strcmp(s, "rndm")) c = (int)'R'; /** random 1 < r < b-1. */ +#endif switch (c) { case '%': @@ -2002,9 +1884,12 @@ case '+': case '-': case '*': - case 'P': - case '<': - case '>': + case 'P': /* x ** y */ + case 'G': /* gcd(x, y). */ + case 'I': /* inverse of x (modulo m). */ + case 'S': /* x*x (modulo m). */ + case '<': /* x << y */ + case '>': /* x >> y */ case '&': case '^': case '|': @@ -2012,7 +1897,20 @@ stack[ix] = mpw_ops2(c, stack[ix], stack[ix+1]); break; default: - /* XXX FIXME */ + case 0: + if (!strcmp(s, "addm")) c = (int)'+'; /* x+x (modulo m). */ + if (!strcmp(s, "subm")) c = (int)'-'; /* x-x (modulo m). */ + if (!strcmp(s, "mulm")) c = (int)'*'; /* x*x (modulo m). */ + if (!strcmp(s, "powm")) c = (int)'P'; /* x**x (modulo m). */ + if (c) { +assert(--ix >= 0); +assert(--ix >= 0); + stack[ix] = mpw_ops3(c, stack[ix], stack[ix+1], stack[ix+2]); + } else { +assert(++ix < (int)argc); + stack[ix] = mpw_j2mpw(cx, v); + } + break; } } else { @@ . patch -p0 <<'@@ .' Index: rpm/js/tscripts/Mpw.js ============================================================================ $ cvs diff -u -r1.7 -r1.8 Mpw.js --- rpm/js/tscripts/Mpw.js 1 Aug 2009 17:51:01 -0000 1.7 +++ rpm/js/tscripts/Mpw.js 1 Aug 2009 19:24:04 -0000 1.8 @@ -43,17 +43,17 @@ var y = mpw(13); ack('y.toString(10)', '13'); -ack('mpw.invm(x, m).toString(10)', '4'); +ack('mpw(x, m, "invm").toString(10)', '4'); -ack('mpw.sqrm(x, m).toString(10)', '4'); -ack('mpw.addm(x, y, m).toString(10)', '5'); -ack('mpw.subm(x, y, m).toString(10)', '9'); -ack('mpw.mulm(x, y, m).toString(10)', '1'); -ack('mpw.powm(x, y, m).toString(10)', '7'); +ack('mpw(x, m, "sqrm").toString(10)', '4'); +ack('mpw(x, y, m, "addm").toString(10)', '5'); +ack('mpw(x, y, m, "subm").toString(10)', '9'); +ack('mpw(x, y, m, "mulm").toString(10)', '1'); +ack('mpw(x, y, m, "powm").toString(10)', '7'); var zx = 2*3*5*19; var zy = 7*11*13*19; -ack('mpw.gcd(mpw(zx), mpw(zy)).toString(10)', '19'); +ack('mpw(mpw(zx), mpw(zy), "gcd").toString(10)', '19'); // y = mpw(0); // ack('x.__nonzero__()', true); @@ -190,18 +190,18 @@ ack('phi.toString(10)', '55450296'); var e = mpw(5); ack('e.toString(10)', '5'); -ack('mpw.gcd(e, phi).toString(10)', '1'); -var d = mpw.invm(e, phi); -ack('mpw.mulm(e, d, phi).toString(10)', '1'); +ack('mpw(e, phi, "gcd").toString(10)', '1'); +var d = mpw(e, phi, "invm"); +ack('mpw(e, d, phi, "mulm").toString(10)', '1'); ack('d.toString(10)', '44360237'); // Sign RSA var m = mpw(31229978); -var s = mpw.powm(m, d, n); +var s = mpw(m, d, n, "powm"); ack('s.toString(10)', '30729435'); // Verify RSA -var mtwiddle = mpw.powm(s, e, n); +var mtwiddle = mpw(s, e, n, "powm"); ack('mtwiddle.toString(10)', m.toString(10)); // ===== DSA example (from "Handbook of Applied Cryptography" 11.57 p453). @@ -212,32 +212,32 @@ var pdivq = mpw(p, mpw(1), "-", q, "/"); ack('pdivq.toString(10)', '7162'); var g = mpw(110217528); -var alpha = mpw.powm(g, pdivq, p); +var alpha = mpw(g, pdivq, p, "powm"); ack('alpha.toString(10)', '10083255'); var a = mpw(12496); -var y = mpw.powm(alpha, a, p); +var y = mpw(alpha, a, p, "powm"); ack('y.toString(10)', '119946265'); // Sign DSA var k = mpw(9557); -var r = mpw(mpw.powm(alpha, k, p), q, "%"); +var r = mpw(mpw(alpha, k, p, "powm"), q, "%"); ack('r.toString(10)', '34'); -var kinv = mpw.invm(k, q); +var kinv = mpw(k, q, "invm"); ack('kinv.toString(10)', '7631'); var hm = mpw(5246); -var s = mpw.mulm(kinv, mpw(hm, a, r, "*", "+"), q); +var s = mpw(kinv, mpw(hm, a, r, "*", "+"), q, "mulm"); ack('s.toString(10)', '13049'); // Verify DSA -var w = mpw.invm(s, q); +var w = mpw(s, q, "invm"); ack('w.toString(10)', '1799'); -var u1 = mpw.mulm(w, hm, q); +var u1 = mpw(w, hm, q, "mulm"); ack('u1.toString(10)', '12716'); -var u2 = mpw.mulm(r, w, q); +var u2 = mpw(r, w, q, "mulm"); 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); +var v1 = mpw(alpha, u1, p, "powm"); +var v2 = mpw(y, u2, p, "powm"); +var v3 = mpw(v1, v2, p, "mulm"); ack('v3.toString(10)', '27039929'); var v = mpw(v3, q, "%"); ack('v.toString(10)', r.toString(10)); @@ -247,26 +247,26 @@ var p = mpw(2357); var alpha = mpw(2); var a = mpw(1751); -var y = mpw.powm(alpha, a, p); +var y = mpw(alpha, a, p, "powm"); ack('y.toString(10)', '1185'); // Sign ElGamal var hm = mpw(1463); var k = mpw(1529); -var r = mpw.powm(alpha, k, p); +var r = mpw(alpha, k, p, "powm"); ack('r.toString(10)', '1490'); var pm1 = mpw(p, mpw(1), "-"); -var kinv = mpw.invm(k, pm1); +var kinv = mpw(k, pm1, "invm"); ack('kinv.toString(10)', '245'); -var s = mpw.mulm(kinv, mpw.subm(hm, mpw.mulm(a, r, pm1), pm1), pm1); +var s = mpw(kinv, mpw(hm, mpw(a, r, pm1, "mulm"), pm1, "subm"), pm1, "mulm"); 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); +var ytor = mpw(y, r, p, "powm"); +var rtos = mpw(r, s, p, "powm"); +var v1 = mpw(ytor, rtos, p, "mulm"); ack('v1.toString(10)', '1072'); -var v2 = mpw.powm(alpha, hm, p); +var v2 = mpw(alpha, hm, p, "powm"); ack('v2.toString(10)', v1.toString(10)); // ===== DSA example from @@ -296,40 +296,40 @@ 'b5e730363609df9780f8d883d8c4d41ded6a2f1e1bbbdc97'+ '9e1b9d6d3c940301f4e978d65b19041fcf1e8b518f5c0576'+ 'c770fe5a7a485d8329ee2914a2de1b5da4a6128ceab70f79'); -ack('mpw.powm(g, x, p).toString(16)', y.toString(16)); +ack('mpw(g, x, p, "powm").toString(16)', y.toString(16)); // Sign DSA var k = mpw('349c55648dcf992f3f33e8026cfac87c1d2ba075'); var kinv = mpw('d557a1b4e7346c4a55427a28d47191381c269bde'); -ack('mpw.invm(k, q).toString(16)', kinv.toString(16)); +ack('mpw(k, q, "invm").toString(16)', kinv.toString(16)); var r = mpw('636155ac9a4633b4665d179f9e4117df68601f34'); -ack('mpw(mpw.powm(g, k, p), q, "%").toString(16)', r.toString(16)); +ack('mpw(mpw(g, k, p, "powm"), q, "%").toString(16)', r.toString(16)); var hm = mpw('a9993e364706816aba3e25717850c26c9cd0d89d'); var s = mpw('6c540b02d9d4852f89df8cfc99963204f4347704'); -ack('mpw.mulm(kinv, mpw.addm(hm, mpw.mulm(x, r, q), q), q).toString(16)', s.toString(16)); +ack('mpw(kinv, mpw(hm, mpw(x, r, q, "mulm"), q, "addm"), q, "mulm").toString(16)', s.toString(16)); // Verify DSA var w = mpw('7e4f353b71d1a3dc2946f6bae3b9285ef736ce34'); -ack('mpw.invm(s, q).toString(16)', w.toString(16)); +ack('mpw(s, q, "invm").toString(16)', w.toString(16)); var u1 = mpw('00abfd278373edf8ce08347d49cd81308880103e'); -ack('mpw.mulm(w, hm, q).toString(16)', u1.toString(16)); +ack('mpw(w, hm, q, "mulm").toString(16)', u1.toString(16)); var u2 = mpw('0da3ab84ae3ff412d703a63b41d1ec61d64b061c'); -ack('mpw.mulm(r, w, q).toString(16)', u2.toString(16)); +ack('mpw(r, w, q, "mulm").toString(16)', u2.toString(16)); var v1 = mpw('9c26b54969e24166'+ 'd89b06f5bec3b0df8179e4f9cf7606f67162edd150f73a1f'+ '9e09e49d21ab0d04b4a02e2446c47bc9311e38c80effd862'+ 'fb69fe39eab9fc270b494a575e0d0862bef45df1a826a448'+ '8bac5b3757e9c3513dd4d965e6b0ee18811bc711013cf4ea'+ 'beb578878c133783f80342cafa147b0c1cc6e51e937c8d11'); -ack('mpw.powm(g, u1, p).toString(16)', v1.toString(16)); +ack('mpw(g, u1, p, "powm").toString(16)', v1.toString(16)); var v2 = mpw('841232c0aa641d81'+ '74aa4619826357f66fdf66e9a9b2a7c832e901d04b07b0e3'+ '7c35596fe9e873e7888af879aa4795f558d9be9aa6cc302c'+ 'b29b9ccb03d72c5ebcfda30e03f3ab574d3c31c161b2fa41'+ 'd31f49f9d2df72a5a91378455b0a852614b6e40b3c4d1cfe'+ '81e28ea6ce9d563b7506413cd29bfb7bde64e2f14828a631'); -ack('mpw.powm(y, u2, p).toString(16)', v2.toString(16)); -var v3 = mpw.mulm(v1, v2, p); +ack('mpw(y, u2, p, "powm").toString(16)', v2.toString(16)); +var v3 = mpw(v1, v2, p, "mulm"); var v = mpw('636155ac9a4633b4665d179f9e4117df68601f34'); ack('mpw(v3, q, "%").toString(16)', v.toString(16)); @@ -341,10 +341,10 @@ var gx = mpw('09487239995a5ee76b55f9c2f098'); var gy = mpw('a89ce5af8724c0a23e0e0ff77500'); -var gy2 = mpw.sqrm(gy, p); -var gx31 = mpw.mulm(mpw.mulm(gx, gx, p), gx, p); -var gx32 = mpw.mulm(gx, 3, p); -ack('mpw.addm(mpw.subm(gx31, gx32, p), b, p).toString(10)', gy2.toString(10)); +var gy2 = mpw(gy, p, "sqrm"); +var gx31 = mpw(mpw(gx, gx, p, "mulm"), gx, p, "mulm"); +var gx32 = mpw(gx, 3, p, "mulm"); +ack('mpw(mpw(gx31, gx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); // ===== secp 128r1 var p = mpw('fffffffdffffffffffffffffffffffff'); @@ -354,10 +354,10 @@ var gx = mpw('161ff7528b899b2d0c28607ca52c5b86'); var gy = mpw('cf5ac8395bafeb13c02da292dded7a83'); -var gy2 = mpw.sqrm(gy, p); -var gx31 = mpw.mulm(mpw.mulm(gx, gx, p), gx, p); -var gx32 = mpw.mulm(gx, 3, p); -ack('mpw.addm(mpw.subm(gx31, gx32, p), b, p).toString(10)', gy2.toString(10)); +var gy2 = mpw(gy, p, "sqrm"); +var gx31 = mpw(mpw(gx, gx, p, "mulm"), gx, p, "mulm"); +var gx32 = mpw(gx, 3, p, "mulm"); +ack('mpw(mpw(gx31, gx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); // ===== secp 160r1 var p = mpw('ffffffffffffffffffffffffffffffff7fffffff'); @@ -367,10 +367,10 @@ var gx = mpw('4a96b5688ef573284664698968c38bb913cbfc82'); var gy = mpw('23a628553168947d59dcc912042351377ac5fb32'); -var gy2 = mpw.sqrm(gy, p); -var gx31 = mpw.mulm(mpw.mulm(gx, gx, p), gx, p); -var gx32 = mpw.mulm(gx, 3, p); -ack('mpw.addm(mpw.subm(gx31, gx32, p), b, p).toString(10)', gy2.toString(10)); +var gy2 = mpw(gy, p, "sqrm"); +var gx31 = mpw(mpw(gx, gx, p, "mulm"), gx, p, "mulm"); +var gx32 = mpw(gx, 3, p, "mulm"); +ack('mpw(mpw(gx31, gx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); // ===== ECDSA P-192 example from // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/ECDSA_Prime.pdf @@ -381,38 +381,38 @@ var c = mpw('3099d2bbbfcb2538542dcd5fb078b6ef5f3d6fe2c745de65'); var b = mpw('64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1'); -ack('mpw.mulm(mpw.sqrm(b, p), c, p).toString(10)', mpw(p, 27, "-").toString(10)); +ack('mpw(mpw(b, p, "sqrm"), c, p, "mulm").toString(10)', mpw(p, 27, "-").toString(10)); var gx = mpw('188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012'); var gy = mpw('07192b95ffc8da78631011ed6b24cdd573f977a11e794811'); -var gy2 = mpw.sqrm(gy, p); -var gx31 = mpw.mulm(mpw.mulm(gx, gx, p), gx, p); -var gx32 = mpw.mulm(gx, 3, p); -ack('mpw.addm(mpw.subm(gx31, gx32, p), b, p).toString(10)', gy2.toString(10)); +var gy2 = mpw(gy, p, "sqrm"); +var gx31 = mpw(mpw(gx, gx, p, "mulm"), gx, p, "mulm"); +var gx32 = mpw(gx, 3, p, "mulm"); +ack('mpw(mpw(gx31, gx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var d = mpw('7891686032fd8057f636b44b1f47cce564d2509923a7465b'); var qx = mpw('fba2aac647884b504eb8cd5a0a1287babcc62163f606a9a2'); var qy = mpw('dae6d4cc05ef4f27d79ee38b71c9c8ef4865d98850d84aa5'); -var qy2 = mpw.sqrm(qy, p); -var qx31 = mpw.mulm(mpw.mulm(qx, qx, p), qx, p); -var qx32 = mpw.mulm(qx, 3, p); +var qy2 = mpw(qy, p, "sqrm"); +var qx31 = mpw(mpw(qx, qx, p, "mulm"), qx, p, "mulm"); +var qx32 = mpw(qx, 3, p, "mulm"); // FIXME: wrong answer -// ack('mpw.addm(mpw.subm(qx31, qx32, p), b, p).toString(10)', gy2.toString(10)); +// ack('mpw(mpw(qx31, qx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var k = mpw('d06cb0a0ef2f708b0744f08aa06b6deedea9c0f80a69d847'); var msg = "Example of ECDSA with P-192"; var e = mpw('1b376f0b735c615ceeeb31baee654b0a374825db'); var kinv = mpw('5a277943c5a4d34b3c7dd97bdfe9b82c042586701088c00b'); -ack('mpw.invm(k, n).toString(16)', kinv.toString(16)); +ack('mpw(k, n, "invm").toString(16)', kinv.toString(16)); var r = mpw('f0ecba72b88cde399cc5a18e2a8b7da54d81d04fb9802821'); var s = mpw('1e6d3d4ae2b1fab2bd2040f5dabf00f854fa140b6d21e8ed'); -ack('mpw.mulm(kinv, mpw.addm(e, mpw.mulm(r, d, n), n), n).toString(16)', s.toString(16)); +ack('mpw(kinv, mpw(e, mpw(r, d, n, "mulm"), n, "addm"), n, "mulm").toString(16)', s.toString(16)); -var w = mpw.invm(s, n); +var w = mpw(s, n, "invm"); var u1 = mpw('785760fd37767d546003fa66933b7d202642352331b15b84'); -ack('mpw.mulm(e, w, n).toString(16)', u1.toString(16)); +ack('mpw(e, w, n, "mulm").toString(16)', u1.toString(16)); var u2 = mpw('de0747072e426e307ba1e19bd5c1b57f9e29220ae97cc9bc'); -ack('mpw.mulm(r, w, n).toString(16)', u2.toString(16)); +ack('mpw(r, w, n, "mulm").toString(16)', u2.toString(16)); var v = mpw('f0ecba72b88cde399cc5a18e2a8b7da54d81d04fb9802821'); // ===== ECDSA P-224 example from @@ -425,38 +425,38 @@ var c = mpw('5b056c7e11dd68f40469ee7f3c7a7d74f7d121116506d031218291fb'); var b = mpw('b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4'); // FIXME: floating point exception -// ack('mpw.mulm(mpw.sqrm(b, p), c, p).toString(10)', mpw(p, 27, "-").toString(10)); +// ack('mpw(mpw(b, p, "sqrm"), c, p, "mulm").toString(10)', mpw(p, 27, "-").toString(10)); var gx = mpw('b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21'); var gy = mpw('bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34'); // FIXME: floating point exceptions -// var gy2 = mpw.sqrm(gy, p); -// var gx31 = mpw.mulm(mpw.mulm(gx, gx, p), gx, p); -// var gx32 = mpw.mulm(gx, 3, p); -// ack('mpw.addm(mpw.subm(gx31, gx32, p), b, p).toString(10)', gy2.toString(10)); +// var gy2 = mpw(gy, p, "sqrm"); +// var gx31 = mpw(mpw(gx, gx, p, "mulm"), gx, p, "mulm"); +// var gx32 = mpw(gx, 3, p, "mulm"); +// ack('mpw(mpw(gx31, gx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var d = mpw('3f0c488e987c80be0fee521f8d90be6034ec69ae11ca72aa777481e8'); var qx = mpw('e84fb0b8e7000cb657d7973cf6b42ed78b301674276df744af130b3e'); var qy = mpw('4376675c6fc5612c21a0ff2d2a89d2987df7a2bc52183b5982298555'); // FIXME: floating point exceptions -// var qy2 = mpw.sqrm(qy, p); -// var qx31 = mpw.mulm(mpw.mulm(qx, qx, p), qx, p); -// var qx32 = mpw.mulm(qx, 3, p); -// ack('mpw.addm(mpw.subm(qx31, qx32, p), b, p).toString(10)', gy2.toString(10)); +// var qy2 = mpw(qy, p, "sqrm"); +// var qx31 = mpw(mpw(qx, qx, p, "mulm"), qx, p, "mulm"); +// var qx32 = mpw(qx, 3, p, "mulm"); +// ack('mpw(mpw(qx31, qx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var k = mpw('a548803b79df17c40cde3ff0e36d025143bcbba146ec32908eb84937'); var msg = "Example of ECDSA with P-224"; var e = mpw('1f1e1cf892926cfccfc5a28feef3d807d23f778008dba4b35f04b2fd'); var kinv = mpw('b4d9d81feff7b325e09e770c40bace8b008d6074371967326f39130c'); -ack('mpw.invm(k, n).toString(16)', kinv.toString(16)); +ack('mpw(k, n, "invm").toString(16)', kinv.toString(16)); var r = mpw('c3a3f5b82712532004c6f6d1db672f55d931c3409ea1216d0be77380'); var s = mpw('c5aa1eae6095dea34c9bd84da3852cca41a8bd9d5548f36dabdf6617'); -ack('mpw.mulm(kinv, mpw.addm(e, mpw.mulm(r, d, n), n), n).toString(16)', s.toString(16)); +ack('mpw(kinv, mpw(e, mpw(r, d, n, "mulm"), n, "addm"), n, "mulm").toString(16)', s.toString(16)); -var w = mpw.invm(s, n); +var w = mpw(s, n, "invm"); var u1 = mpw('69df611df949498ebe20c1e453cf231cdd2f30adeecba9335481295d'); -ack('mpw.mulm(e, w, n).toString(16)', u1.toString(16)); +ack('mpw(e, w, n, "mulm").toString(16)', u1.toString(16)); var u2 = mpw('86daaf97dc9bb13a66ec7b735e69bccd60f395efb2cdfded8a3ccbcf'); -ack('mpw.mulm(r, w, n).toString(16)', u2.toString(16)); +ack('mpw(r, w, n, "mulm").toString(16)', u2.toString(16)); var v = mpw('c3a3f5b82712532004c6f6d1db672f55d931c3409ea1216d0be77380'); // ===== ECDSA P-256 example from @@ -472,40 +472,40 @@ var c = mpw('7efba1662985be9403cb055c75d4f7e0ce8d84a9c5114abcaf3177680104fa0d'); var b = mpw('5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'); -ack('mpw.mulm(mpw.sqrm(b, p), c, p).toString(10)', mpw(p, 27, "-").toString(10)); +ack('mpw(mpw(b, p, "sqrm"), c, p, "mulm").toString(10)', mpw(p, 27, "-").toString(10)); var gx = mpw('6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'); var gy = mpw('4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'); -var gy2 = mpw.sqrm(gy, p); -var gx31 = mpw.mulm(mpw.mulm(gx, gx, p), gx, p); -var gx32 = mpw.mulm(gx, 3, p); -ack('mpw.addm(mpw.subm(gx31, gx32, p), b, p).toString(10)', gy2.toString(10)); +var gy2 = mpw(gy, p, "sqrm"); +var gx31 = mpw(mpw(gx, gx, p, "mulm"), gx, p, "mulm"); +var gx32 = mpw(gx, 3, p, "mulm"); +ack('mpw(mpw(gx31, gx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var d = mpw('c477f9f65c22cce20657faa5b2d1d8122336f851a508a1ed04e479c34985bf96'); var qx = mpw('b7e08afdfe94bad3f1dc8c734798ba1c62b3a0ad1e9ea2a38201cd0889bc7a19'); var qy = mpw('3603f747959dbf7a4bb226e41928729063adc7ae43529e61b563bbc606cc5e09'); -var qy2 = mpw.sqrm(qy, p); -var qx31 = mpw.mulm(mpw.mulm(qx, qx, p), qx, p); -var qx32 = mpw.mulm(qx, 3, p); +var qy2 = mpw(qy, p, "sqrm"); +var qx31 = mpw(mpw(qx, qx, p, "mulm"), qx, p, "mulm"); +var qx32 = mpw(qx, 3, p, "mulm"); // FIXME: wrong answer -// ack('mpw.addm(mpw.subm(qx31, qx32, p), b, p).toString(10)', gy2.toString(10)); +// ack('mpw(mpw(qx31, qx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var k = mpw('7a1a7e52797fc8caaa435d2a4dace39158504bf204fbe19f14dbb427faee50ae'); var msg = "Example of ECDSA with P-256"; var e = mpw('a41a41a12a799548211c410c65d8133afde34d28bdd542e4b680cf2899c8a8c4'); var kinv = mpw('62159e5ba9e712fb098cce8fe20f1bed8346554e98ef3c7c1fc3332ba67d87ef'); -ack('mpw.invm(k, n).toString(16)', kinv.toString(16)); +ack('mpw(k, n, "invm").toString(16)', kinv.toString(16)); var r = mpw('2b42f576d07f4165ff65d1f3b1500f81e44c316f1f0b3ef57325b69aca46104f'); var s = mpw('dc42c2122d6392cd3e3a993a89502a8198c1886fe69d262c4b329bdb6b63faf1'); // FIXME floating point exception -// ack('mpw.mulm(kinv, mpw.addm(e, mpw.mulm(r, d, n), n), n).toString(16)', s.toString(16)); +// ack('mpw(kinv, mpw(e, mpw(r, d, n, "mulm"), n, "addm"), n, "mulm").toString(16)', s.toString(16)); -var w = mpw.invm(s, n); +var w = mpw(s, n, "invm"); var u1 = mpw('b807bf3281dd13849958f444fd9aea808d074c2c48ee8382f6c47a435389a17e'); // FIXME floating point exception -// ack('mpw.mulm(e, w, n).toString(16)', u1.toString(16)); +// ack('mpw(e, w, n, "mulm").toString(16)', u1.toString(16)); var u2 = mpw('1777f73443a4d68c23d1fc4cb5f8b7f2554578ee87f04c253df44efd181c184c'); // FIXME floating point exception -// ack('mpw.mulm(r, w, n).toString(16)', u2.toString(16)); +// ack('mpw(r, w, n, "mulm").toString(16)', u2.toString(16)); var v = mpw('2b42f576d07f4165ff65d1f3b1500f81e44c316f1f0b3ef57325b69aca46104f'); // ===== ECDSA P-384 example from @@ -522,38 +522,38 @@ var c = mpw('79d1e655f868f02fff48dcdee14151ddb80643c1406d0ca10dfe6fc52009540a495e8042ea5f744f6e184667cc722483'); var b = mpw('b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef'); // FIXME: floating point exception -// ack('mpw.mulm(mpw.sqrm(b, p), c, p).toString(10)', mpw(p, 27, "-").toString(10)); +// ack('mpw(mpw(b, p, "sqrm"), c, p, "mulm").toString(10)', mpw(p, 27, "-").toString(10)); var gx = mpw('aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7'); var gy = mpw('3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f'); // FIXME: floating point exception -// var gy2 = mpw.sqrm(gy, p); -// var gx31 = mpw.mulm(mpw.mulm(gx, gx, p), gx, p); -// var gx32 = mpw.mulm(gx, 3, p); -// ack('mpw.addm(mpw.subm(gx31, gx32, p), b, p).toString(10)', gy2.toString(10)); +// var gy2 = mpw(gy, p, "sqrm"); +// var gx31 = mpw(mpw(gx, gx, p, "mulm"), gx, p, "mulm"); +// var gx32 = mpw(gx, 3, p, "mulm"); +// ack('mpw(mpw(gx31, gx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var d = mpw('f92c02ed629e4b48c0584b1c6ce3a3e3b4faae4afc6acb0455e73dfc392e6a0ae393a8565e6b9714d1224b57d83f8a08'); var qx = mpw('3bf701bc9e9d36b4d5f1455343f09126f2564390f2b487365071243c61e6471fb9d2ab74657b82f9086489d9ef0f5cb5'); var qy = mpw('d1a358eafbf952e68d533855ccbdaa6ff75b137a5101443199325583552a6295ffe5382d00cfcda30344a9b5b68db855'); // FIXME: floating point exceptions -// var qy2 = mpw.sqrm(qy, p); -// var qx31 = mpw.mulm(mpw.mulm(qx, qx, p), qx, p); -// var qx32 = mpw.mulm(qx, 3, p); -// ack('mpw.addm(mpw.subm(qx31, qx32, p), b, p).toString(10)', gy2.toString(10)); +// var qy2 = mpw(qy, p, "sqrm"); +// var qx31 = mpw(mpw(qx, qx, p, "mulm"), qx, p, "mulm"); +// var qx32 = mpw(qx, 3, p, "mulm"); +// ack('mpw(mpw(qx31, qx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var k = mpw('2e44ef1f8c0bea8394e3dda81ec6a7842a459b534701749e2ed95f054f0137680878e0749fc43f85edcae06cc2f43fef'); var msg = "Example of ECDSA with P-384"; var e = mpw('5aea187d1c4f6e1b35057d20126d836c6adbbc7049ee0299c9529f5e0b3f8b5a7411149d6c30d6cb2b8af70e0a781e89'); var kinv = mpw('ac227da51929533dfc2e9eefb4e0f7bd22392ca73289ed1c6c00b214e8874d8007c8ac46b25d677dfe9b1c6c10a47e4a'); -ack('mpw.invm(k, n).toString(16)', kinv.toString(16)); +ack('mpw(k, n, "invm").toString(16)', kinv.toString(16)); var r = mpw('30ea514fc0d38d8208756f068113c7cada9f66a3b40ea3b313d040d9b57dd41a332795d02cc7d507fcef9faf01a27088'); var s = mpw('cc808e504be414f46c9027bcbf78adf067a43922d6fcaa66c4476875fbb7b94efd1f7d5dbe620bfb821c46d549683ad8'); -ack('mpw.mulm(kinv, mpw.addm(e, mpw.mulm(r, d, n), n), n).toString(16)', s.toString(16)); +ack('mpw(kinv, mpw(e, mpw(r, d, n, "mulm"), n, "addm"), n, "mulm").toString(16)', s.toString(16)); -var w = mpw.invm(s, n); +var w = mpw(s, n, "invm"); var u1 = mpw('9c0590ee8000b79832dc4c6776f7e5fd2a74be161741c7c2d2f038d439831696a1b8ece4199d225b12b76dd9e637b250'); -ack('mpw.mulm(e, w, n).toString(16)', u1.toString(16)); +ack('mpw(e, w, n, "mulm").toString(16)', u1.toString(16)); var u2 = mpw('8f77be5b0eb32a1a3b9274cfda53518a01aad4afc4bd46a392b7c7de4eed3fe6dee54f3064234fe7fde57ae45532c24d'); -ack('mpw.mulm(r, w, n).toString(16)', u2.toString(16)); +ack('mpw(r, w, n, "mulm").toString(16)', u2.toString(16)); var v = mpw('30ea514fc0d38d8208756f068113c7cada9f66a3b40ea3b313d040d9b57dd41a332795d02cc7d507fcef9faf01a27088'); // ===== ECDSA P-521 example from @@ -566,38 +566,38 @@ var c = mpw('79d1e655f868f02fff48dcdee14151ddb80643c1406d0ca10dfe6fc52009540a495e8042ea5f744f6e184667cc722483'); var b = mpw('051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00'); // FIXME: wrong answer -// ack('mpw.mulm(mpw.sqrm(b, p), c, p).toString(10)', mpw(p, 27, "-").toString(10)); +// ack('mpw(mpw(b, p, "sqrm"), c, p, "mulm").toString(10)', mpw(p, 27, "-").toString(10)); var gx = mpw('c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66'); var gy = mpw('11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650'); -var gy2 = mpw.sqrm(gy, p); -var gx31 = mpw.mulm(mpw.mulm(gx, gx, p), gx, p); -var gx32 = mpw.mulm(gx, 3, p); -ack('mpw.addm(mpw.subm(gx31, gx32, p), b, p).toString(10)', gy2.toString(10)); +var gy2 = mpw(gy, p, "sqrm"); +var gx31 = mpw(mpw(gx, gx, p, "mulm"), gx, p, "mulm"); +var gx32 = mpw(gx, 3, p, "mulm"); +ack('mpw(mpw(gx31, gx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var d = mpw('0100085f47b8e1b8b11b7eb33028c0b2888e304bfc98501955b45bba1478dc184eeedf09b86a5f7c21994406072787205e69a63709fe35aa93ba333514b24f961722'); var qx = mpw('0098e91eef9a68452822309c52fab453f5f117c1da8ed796b255e9ab8f6410cca16e59df403a6bdc6ca467a37056b1e54b3005d8ac030decfeb68df18b171885d5c4'); var qy = mpw('0164350c321aecfc1cca1ba4364c9b15656150b4b78d6a48d7d28e7f31985ef17be8554376b72900712c4b83ad668327231526e313f5f092999a4632fd50d946bc2e'); -var qy2 = mpw.sqrm(qy, p); -var qx31 = mpw.mulm(mpw.mulm(qx, qx, p), qx, p); -var qx32 = mpw.mulm(qx, 3, p); +var qy2 = mpw(qy, p, "sqrm"); +var qx31 = mpw(mpw(qx, qx, p, "mulm"), qx, p, "mulm"); +var qx32 = mpw(qx, 3, p, "mulm"); // FIXME: wrong answer -// ack('mpw.addm(mpw.subm(qx31, qx32, p), b, p).toString(10)', gy2.toString(10)); +// ack('mpw(mpw(qx31, qx32, p, "subm"), b, p, "addm").toString(10)', gy2.toString(10)); var k = mpw('c91e2349ef6ca22d2de39dd51819b6aad922d3aecdeab452ba172f7d63e370cecd70575f597c09a174ba76bed05a48e562be0625336d16b8703147a6a231d6bf'); var msg = "Example of ECDSA with P-512"; var e = mpw('9bf0e1deeda31e00f925b77f7cb6b1ced7368de1dc75bb9f94582c1ca709205d32af90025b02fa132fbebd6cddcd9172c0d66d8e581767a8b6f71de60be1f932'); var kinv = mpw('01eab94335a7ed337bce83c95de95447925edb0ee27f8e8378713e767d6da570fccfb4f13dcf57f898e77ddb540a9453e0c3d5c97ae8d2ec843590bcb1d349044c09'); // FIXME: wrong answer -// ack('mpw.invm(k, n).toString(16)', kinv.toString(16)); +// ack('mpw(k, n, "invm").toString(16)', kinv.toString(16)); var r = mpw('0140c8edca57108ce3f7e7a240ddd3ad74d81e2de62451fc1d558fdc79269adacd1c2526eeeef32f8c0432a9d56e2b4a8a732891c37c9b96641a9254ccfe5dc3e2ba'); var s = mpw('00d72f15229d0096376da6651d9985bfd7c07f8d49583b545db3eab20e0a2c1e8615bd9e298455bdeb6b61378e77af1c54eee2ce37b2c61f5c9a8232951cb988b5b1'); -ack('mpw.mulm(kinv, mpw.addm(e, mpw.mulm(r, d, n), n), n).toString(16)', s.toString(16)); +ack('mpw(kinv, mpw(e, mpw(r, d, n, "mulm"), n, "addm"), n, "mulm").toString(16)', s.toString(16)); -var w = mpw.invm(s, n); +var w = mpw(s, n, "invm"); var u1 = mpw('01697eefb6bd3a6db024254fe69fd19c80eb04b71cdd16af72f322106093f971cb08c29f6f8950f0f61e45bf65bac39a590dcb043758c6606907f216a759b4ea4be4'); -ack('mpw.mulm(e, w, n).toString(16)', u1.toString(16)); +ack('mpw(e, w, n, "mulm").toString(16)', u1.toString(16)); var u2 = mpw('014e7fc3ee94b91e092f660253dcaf92a70306bdfa317a0ab7efb2c8286944bee5f146114f2c61950f8c8699cce1a22fe632ea89967d33fefcb0e7607b4b66d157b6'); -ack('mpw.mulm(r, w, n).toString(16)', u2.toString(16)); +ack('mpw(r, w, n, "mulm").toString(16)', u2.toString(16)); var v = mpw('0140c8edca57108ce3f7e7a240ddd3ad74d81e2de62451fc1d558fdc79269adacd1c2526eeeef32f8c0432a9d56e2b4a8a732891c37c9b96641a9254ccfe5dc3e2ba'); if (loglvl) print("<-- Mpw.js"); @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository [email protected]
