version 1.3, 2002/03/23 10:34:48
|
version 1.4, 2002/03/23 11:27:41
|
Line 141 function init() {
|
Line 141 function init() {
|
etarr[i]=parseInt(et.substring(i*2,i*2+2)); |
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."; |
window.status="Ready."; |
} |
} |
|
|