--- loncom/auth/londes.js 2002/03/23 10:34:48 1.3 +++ loncom/auth/londes.js 2002/03/23 11:27:41 1.4 @@ -3,7 +3,7 @@ // Encryption Routines according to Data Encryption Standard DES // Federal Information Processing Standards Publication 46-2 (1993 Dec 30) // -// $Id: londes.js,v 1.3 2002/03/23 10:34:48 www Exp $ +// $Id: londes.js,v 1.4 2002/03/23 11:27:41 www Exp $ // // Copyright Michigan State University Board of Trustees // @@ -141,6 +141,104 @@ function init() { etarr[i]=parseInt(et.substring(i*2,i*2+2)); } +// Selftest + window.status="Self test"; + +// Primitive test, "Cryptography: A New Dimension in Computer Security" +// C.H. Meyer, S.M. Matyas, John Wiley and Sons, 1982, pg. 160 + + uextkey=0x1234567; + lextkey=bit[31]|0x9abcdef; + ublock=uextkey; + lblock=lextkey; + ip(); + if (hexstring(lv)!='cc00ccff') { alert("IP failed: lv."); } + if (hexstring(rv)!='f0aaf0aa') { alert("IP failed: rv."); } + initkeys(); + if (hexstring(uk[1])!='000b0267') { alert("Key generation failed: uk"); } + if (hexstring(lk[1])!='009b49a5') { alert("Key generation failed: lk"); } + stage(1); + if (hexstring(uexpand)!='007a1555') { alert("E failed: u"); } + if (hexstring(lexpand)!='007a1555') { alert("E failed: l"); } + if (hexstring(rv)!='921c209c') { alert("Stage 1 failed"); } + +// According to National Bureau of Standards, Special Publication 500-20, +// "Validating the Correctness of Hardware Implementations of the +// NBS Data Encryption Standard", Rev. Sep. 1980. + +// PC-1 and PC-2 test + ublock=0; + lblock=0; + uextkey=0x1010101; + lextkey=0x1010102; + initkeys(); + encrypt(); + var st=hexstring(ublock); + st+=hexstring(lblock); + if (st!="869efd7f9f265a09") { + st+=": failed PC-1 and PC-2 test!"; + alert(st); + } + window.status="Self test ."; + +// According to NBS 500-20 IP and E test + ublock=bit[28]|0x66b40b4; + lblock=bit[30]|0xaba4bd6; + uextkey=0x1010101; + lextkey=0x1010101; + initkeys(); + encrypt(); + var st=hexstring(ublock); + st+=hexstring(lblock); + if (st!="0000000000000001") { + st+=": failed IP and E test!"; + alert(st); + } + window.status="Self test .."; + +// According to NBS 500-20 ptest + ublock=0; + lblock=0; + uextkey=bit[28]|0x29116; + lextkey=bit[31]|bit[28]|0x8100101; + initkeys(); + encrypt(); + var st=hexstring(ublock); + st+=hexstring(lblock); + if (st!="1aeac39a61f0a464") { + st+=": failed ptest!"; + alert(st); + } + window.status="Self test ..."; + +// According to NBS 500-20 S-box test + ublock=bit[28]|bit[29]|0x553228; + lblock=bit[29]|bit[30]|0xd6f295a; + var orgu=ublock; + var orgl=lblock; + uextkey=bit[28]|0xc587f1c; + lextkey=bit[28]|0x3924fef; + initkeys(); + encrypt(); + var st=hexstring(ublock); + st+=hexstring(lblock); + if (st!="63fac0d034d9f793") { + st+=": failed S-box test!"; + alert(st); + } + window.status="Self test ...."; + +// Decryption test + decrypt(); + if (ublock!=orgu) { alert("Decryption failed for ublock."); } + if (lblock!=orgl) { alert("Decryption failed for lblock."); } + window.status="Self test ....."; + +// Reset keys + + uextkey=0; + lextkey=0; + window.status="Ready."; }