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: 14-Aug-2009 18:49:35 Branch: HEAD Handle: 2009081416493500 Modified files: rpm/js/tscripts Mpw.js Log: - js: add X9.62-1998 test vectors for P-192 and P-239. Summary: Revision Changes Path 1.22 +127 -0 rpm/js/tscripts/Mpw.js ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/tscripts/Mpw.js ============================================================================ $ cvs diff -u -r1.21 -r1.22 Mpw.js --- rpm/js/tscripts/Mpw.js 14 Aug 2009 02:38:19 -0000 1.21 +++ rpm/js/tscripts/Mpw.js 14 Aug 2009 16:49:35 -0000 1.22 @@ -1205,6 +1205,8 @@ G = checkP(C, gx, gy, n); walkMul(G, 15); +//===================== FIPS 186-3 + var d = mpw('7891686032fd8057f636b44b1f47cce564d2509923a7465b'); var qx = mpw('fba2aac647884b504eb8cd5a0a1287babcc62163f606a9a2'); var qy = mpw('dae6d4cc05ef4f27d79ee38b71c9c8ef4865d98850d84aa5'); @@ -1240,6 +1242,52 @@ // V = G.add(uG, uQ); // ack('mpw(V.x, V.n, "%").toString(16)', v.toString(16)); +//===================== X9.66-1998 J.3.1 + +var d = mpw('1A8D598FC15BF0FD89030B5CB1111AEB92AE8BAF5EA475FB'); +// Q compressed = 02 62B12D60 690CDCF3 30BABAB6 E69763B4 71F994DD 702D16A5 +var qx = mpw('62B12D60690CDCF330BABAB6E69763B471F994DD702D16A5'); +var qy = mpw(qx, qx, "*", -3, "+", qx, "*", b, "+", p, "%", p, 1, "+", 2, ">>", p, "powm"); +Q = checkP(C, qx, qy, n); +// GQ = walkAdd(G, Q, 1); +// QG = walkAdd(Q, G, 82); +// walkMul(Q, 5); + +// dG = G.mul(G, d); +// ack('Q.cmp(Q,dG)', true); + +var k = mpw('FA6DE29746BBEB7F8BB1E761F85F7DFB2983169D82FA2F4E'); +var msg = "abc"; +var e = mpw('A9993E364706816ABA3E25717850C26C9CD0D89D'); +ack('e.toString(10)', '968236873715988614170569073515315707566766479517'); +var kinv = mpw(k, n, "invm"); +// ack('mpw(k, n, "invm").toString(16)', kinv.toString(16)); +var r = mpw('885052380FF147B734C330C43D39B2C4A89F29B0F749FEAD'); +ack('r.toString(10)', '3342403536405981729393488334694600415596881826869351677613'); +var s = mpw('E9ECC78106DEF82BF1070CF1D4D804C3CB390046951DF686'); +ack('s.toString(10)', '5735822328888155254683894997897571951568553642892029982342'); +ack('mpw(kinv, mpw(e, mpw(r, d, n, "mulm"), n, "addm"), n, "mulm").toString(16)', s.toString(16)); + +// kG = G.mul(G, k); +// ack('mpw(kG.x, kG.n, "%").toString(16)', r.toString(16)); + +var w = mpw(s, n, "invm"); +ack('w.toString(10)', '3250964404472526825130516490452346217749189704049629042861'); +var u1 = mpw('688E3FF66F55524374317D0AA03FA2B6E7DB44964CF9D457'); +ack('u1.toString(10)', '2563697409189434185194736134579731015366492496392189760599'); +ack('mpw(e, w, n, "mulm").toString(16)', u1.toString(16)); +var u2 = mpw('9FBBC2459B10ADC858EE18BE81541041229A839EF04268518'); +ack('u2.toString(10)', '62666438133486179671864777102357858491364063233387822220568'); +// XXX FIXME wrong answer +// ack('mpw(r, w, n, "mulm").toString(16)', u2.toString(16)); +var v = mpw('885052380FF147B734C330C43D39B2C4A89F29B0F749FEAD'); +ack('v.toString(10)', '3342403536405981729393488334694600415596881826869351677613'); + +// uG = G.mul(G, u1); +// uQ = Q.mul(Q, u2); +// V = G.add(uG, uQ); +// ack('mpw(V.x, V.n, "%").toString(16)', v.toString(16)); + delete C; delete G; delete Q; @@ -1303,6 +1351,85 @@ delete G; delete Q; +// ===== ECDSA P-239 example from X9.62-1998 J.3.2 +print("===== P-239"); +var p = mpw('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF'); +ack('p.toString(10)', '883423532389192164791648750360308885314476597252960362792450860609699839'); +var n = mpw('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF9E5E9A9F5D9071FBD1522688909D0B'); +ack('n.toString(10)', '883423532389192164791648750360308884807550341691627752275345424702807307'); + +var b = mpw('6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A'); +var a = mpw('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC'); + +// G compressed = 020FFA 963CDCA8 816CCC33 B8642BED F905C3D3 58573D3F 27FBBD3B 3CB9AAAF +var gx = mpw('0FFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF'); +var gy = mpw(gx, gx, "*", -3, "+", gx, "*", b, "+", p, "%", p, 1, "+", 2, ">>", p, "powm"); + +C = new CurveFp(p, -3, b); +G = checkP(C, gx, gy, n); +// walkMul(G, 128); + +var d = mpw('7EF7C6FABEFFFDEA864206E80B0B08A9331ED93E698561B64CA0F7777F3D'); +ack('d.toString(10)', '876300101507107567501066130761671078357010671067781776716671676178726717'); +// Q compressed = 025B6D C53BC61A 2548FFB0 F671472D E6C9521A 9D2D2534 E65ABFCB D5FE0C70 +var qx = mpw('5B6DC53BC61A2548FFB0F671472DE6C9521A9D2D2534E65ABFCBD5FE0C70'); +var qy = mpw(qx, qx, "*", -3, "+", qx, "*", b, "+", p, "%", p, 1, "+", 2, ">>", p, "powm"); +Q = checkP(C, qx, qy, n); +// GQ = walkAdd(G, Q, 5); +// QG = walkAdd(Q, G, 1); +// walkMul(Q, 128); + +dG = G.mul(G, d); +// ack('Q.cmp(Q,dG)', true); + +var k = mpw('656C7196BF87DCC5D1F1020906DF2782360D36B2DE7A17ECE37D503784AF'); +ack('k.toString(10)', '700000017569056646655505781757157107570501575775705779575555657156756655'); +var msg = "abc"; +var e = mpw('A9993E364706816ABA3E25717850C26C9CD0D89D'); +ack('e.toString(10)', '968236873715988614170569073515315707566766479517'); +var kinv = mpw(k, n, "invm"); +var ry = mpw('20C08272B9E6C92B518A5AC5EB2835BE0102809D77E69304A6F7C522B47B'); +var r = mpw('2CB7F36803EBB9C427C58D8265F11FC5084747133078FC279DE874FBECB0'); +ack('r.toString(10)', '308636143175167811492622547300668018854959378758531778147462058306432176'); +var s = mpw('2EEAE988104E9C2234A3C2BEB1F53BFA5DC11FF36A875D1E3CCB1F7E45CF'); +ack('s.toString(10)', '323813553209797357708078776831250505931891051755007842781978505179448783'); +ack('mpw(kinv, mpw(e, mpw(r, d, n, "mulm"), n, "addm"), n, "mulm").toString(16)', s.toString(16)); + +kG = G.mul(G, k); +ack('kG.x.toString(10)', '308636143175167811492622547300668018854959378758531778147462058306432176'); +ack('mpw(kG.x, kG.n, "%").toString(16)', r.toString(16)); + +var w = mpw(s, n, "invm"); +ack('w.toString(16)', '0x7886c9885b6fa74077186378969e35af072f6ba36b7364104e7a94447124'); +ack('w.toString(10)', '831843418332978390463010021843350581892480848636408104706147767766249764'); +var u1 = mpw('11F9D347D0996B633D8D83734C6F7E280011DEDC142CF5B3359A82CF15D9'); +ack('u1.toString(10)', '124064965052014194622159338097387562954788117638383503089995672152118745'); +ack('mpw(e, w, n, "mulm").toString(16)', u1.toString(16)); +var u2 = mpw('1975746D082DE951CA9C5129DF423065B870E28FE8E7A9A27D465787BC5CB'); +ack('u2.toString(10)', '2811363736140754465407544341268382421438687214093897850239246340491822539'); +// XXX FIXME wrong answer +ack('mpw(r, w, "*", n, "%").toString(16)', u2.toString(16)); +var v = mpw('2CB7F36803EBB9C427C58D8265F11FC5084747133078FC279DE874FBECB0'); +ack('v.toString(10)', '308636143175167811492622547300668018854959378758531778147462058306432176'); + +uG = G.mul(G, u1); +ack('uG.x.toString(16)', mpw('64C429FAF03DC1707700D2011D439836B4C712DCFFD8E4B7ED9937F62D1F').toString(16)); +ack('uG.y.toString(16)', mpw('6580DE1A6ECEDFD783538C7C9D8398BAE8B5A697EEFD004AA59660800F48').toString(16)); +uQ = Q.mul(Q, u2); +ack('uQ.x.toString(16)', mpw('3DCA0CAFD86C59DDD9FC251A20739F69845168F5922E523B7994AFC92D9D').toString(16)); +ack('uQ.y.toString(16)', mpw('5532B0A717E945EED3D8AD1C26AB37907E942833CD22AFFE63AC1F5BC8FE').toString(16)); + +uQ.x = mpw('3DCA0CAFD86C59DDD9FC251A20739F69845168F5922E523B7994AFC92D9D'); +uQ.y = mpw(uQ.x, uQ.x, "*", -3, "+", uQ.x, "*", b, "+", p, "%", p, 1, "+", 2, ">>", p, "powm"); +V = G.add(uG, uQ); +ack('V.x.toString(16)', mpw('2CB7F36803EBB9C427C58D8265F11FC5084747133078FC279DE874FBECB0').toString(16)); +ack('V.y.toString(16)', mpw('20C08272B9E6C92B518A5AC5EB2835BE0102809D77E69304A6F7C522B47B').toString(16)); +ack('mpw(V.x, V.n, "%").toString(16)', v.toString(16)); + +delete C; +delete G; +delete Q; + // ===== ECDSA P-256 example from // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/ECDSA_Prime.pdf print("===== P-256"); @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository [email protected]
