blob: 7861b685ebb9546b455a0ca7466a494522b43d69 [file] [log] [blame]
TestSuite.add(new YAHOO.tool.TestCase({
test_DES_initialPermutation : function() {
// the initial permutation is
var ip = [ 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12,
4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16,
8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 ];
var st = Crypto.DES._state;
for ( var i = 0; i < 64; i++) {
// set the IP(i)'th bit
var m = [ 0, 0, 0, 0, 0, 0, 0, 0 ];
var b = ip[i];
var b0 = (b - 1);
var i0 = Math.floor(b0 / 8);
var b1 = b0 % 8;
var b2 = 7 - b1;
var b3 = 1 << b2;
m[i0] += b3;
st.initialPerm(m, 0);
// check the i'th bit is set
if (i < 32) {
b3 = 1 << (31 - i);
Assert.areEqual(st.lhs, b3, "LHS should be " + b3 + " for bit "
+ i + ", not " + st.lhs);
Assert.areEqual(st.rhs, 0, "RHS should be 0 for bit " + i
+ " not " + st.rhs);
} else {
b3 = 1 << (63 - i);
Assert.areEqual(st.rhs, b3, "RHS should be " + b3 + " for bit "
+ i + ", not " + st.rhs);
Assert.areEqual(st.lhs, 0, "LHS should be 0 for bit " + i
+ " not " + st.lhs);
}
}
},
test_DES_finalPermutation : function() {
var st = Crypto.DES._state;
for ( var i = 0; i < 64; i++) {
// set the i'th bit
var m = [ 0, 0, 0, 0, 0, 0, 0, 0 ];
var n = [ 0, 0, 0, 0, 0, 0, 0, 0 ];
var b = i;
var b0 = (b - 1);
var i0 = Math.floor(b0 / 8);
var b1 = b0 % 8;
var b2 = 7 - b1;
var b3 = 1 << b2;
m[i0] += b3;
st.initialPerm(m, 0);
var t = st.lhs;
st.lhs = st.rhs;
st.rhs = t;
st.finalPerm(n, 0);
// final perm has undone the initial perm
for ( var j = 0; j < 8; j++) {
Assert.areEqual(m[j], n[j], "Byte " + j + " is set to " + n[j]
+ ". Should be " + m[j] + " for bit " + i);
}
}
},
test_DES_encrypt : function() {
var data = [ "AAAAAAAAAAA=", "AAAAAAAAAAA=", "jKZN6cGxI6c=",
"HpSCM+JYRqY=", "iqiQm3ZGgVs=", "oCZZDeifj0Y=", "15Lu8Iv9KxU=",
"z+Ibdv1Cpl8=", "nn7ZDOyzaaY=", "cevpCdQ6hSI=", "IZxIZK4RgRI=",
"e3N98AabZ7E=", "2nuDqakGmuY=", "xqAwR/FDmJU=", "G7KNuqVOgI0=",
"8EhcepqRvVQ=", "4Sw9+HTtT4E=", "1FZCOo1nOus=", "a9Og6fJD7Ls=",
"9KU7pGI5Gck=", "W2tJ6nY07ks=", "+VZIswj4o70=", "pehFx9We6Vs=",
"d3WxvPeGVi0=", "qlfmQNQFVQI=", "xC67lYhojPg=", "ktr+s0xD14U=",
"jiE9gsTzn/E=", "jNHSttCDWIc=", "6xNmlFELedY=", "mx6G2NDgfMM=",
"KGwiHszK/4Q=", "vnG3uyxF2r0=", "1CZPTcv7pss=", "eSIFj9s9zPM=",
"g572tn8UFrA=", "qC4a2vybd+s=", "FhBq707g8uQ=", "8YZwdQJvx7g=",
"l/fe4O3OAXU=", "lCNsU14s6/E=", "yrnaHmjVMuY=", "G6dk5YJv+GU=",
"Bup1aGBSNRk=", "WsNpfPgZKmA=", "xWdjBkwa9vY=", "xw7YMTa36AE=",
"rg4GNEds9sg=", "pXi88R+TX90=", "dpPheQhmBwE=", "1hMLz2taJ1c=",
"704ZC+FvjvA=", "QQT1zTRpKqI=", "+Z9GLDBwmrA=", "2q0oDqUce98=",
"ZiwGsoI+5mU=", "s683ebMdciI=", "y9i6l/eM+lc=", "9w6gFJzahdI=",
"tiPWEQmWAPo=", "skNsEXkuFQ0=", "3SdLGLzvrXo=", "z9TGKQUdE5k=",
"tGWgfK7wQeQ=", "HjkobqdrYdg=", "HB/7Hbznrl0=", "CpKEcRV2qcI=",
"YigUsNlg+5Q=", "q++752WuwbA=", "KPvsX3nCQtk=", "srDtGgHPQU8=",
"/hzYXWY3Q08=", "IURcKIf621k=", "g+zdc6/+9xo=", "ccNsHGYeb7Q=",
"SUSojaAIN3U=", "8/sQwktkjrg=", "5B+VaNB+y1M=", "G+G0wfA6i7w=",
"UUtcWUk++fo=", "xVBcjnvZPGo=", "XSLog78uOiw=", "4z0kvppilow=",
"a09xSM0eaRw=", "guSIbAedl4M=", "4kCrd2XvnYU=", "pIq2fDcUg4s=",
"Ts1rN0XciDM=", "yYoQgPbSIEY=", "RDsN+DvyifA=", "wGZoMJQrukQ=",
"zgrluPZeUy4=", "m0EiR5pnMmo=", "K4RKd/YadZs=", "sEyhdNxaEQE=",
"2PKN0T4VQ2w=", "pVWSNfWkBAQ=", "s1SvmKNJbIk=", "WNcYBRzmkrk=",
"pc2XSGrNSFw=", "6LdnNb3W6ws=", "uA/e1OZ6BKA=", "5zzMZJzZ5PY=",
"snSRUUaeM9o=", "Zu9SM1bf2g4=", "k0gfjYx1kEc=", "hE/ocX3EQDs=",
"DlOcB+iUTks=", "nZ46go5axec=", "77clg28QpaY=", "32OmPfNVOWo=",
"bgyayhtLiMQ=", "23lE6vR9TOU=", "UO0ez9vOY40=", "xNu7TOV3pZI=",
"FL93y996tRE=", "gnnowxva+xQ=", "1pn/cSyipZs=", "CCXSCHBDUys=",
"e5oMZRvAHdY=", "u6yHGVCPQkQ=", "zuohBg0SVTA=", "9jEneIdOehU=",
"C1vUmKahdto=", "antTJDEWhJ0=", "tB1j3YF0SGc=", "xikV2o6qrN4=",
"T9j746RmlSg=", "qP4PcaQuQJE=", "dLSXsMRJUgY=", "JKjAOOxibFU=",
"AFXN6ahfb74=", "jmOJePdtYCc=", "y+1rVgM4na0=", "GPh5aMMcmVs=",
"HKWzapfKkmk=", "nqvV8El8Rlo=", "jTbMKji3N7A=", "nosw/fNWQOw=",
"+/at2bwWVFY=", "qoT4f2OMAYU=", "MPePoYIqVEQ=", "AkDWLmXlrIE=",
"4n2Jj9ZnWzs=", "6KzD/YBKBx4=", "ndGgARXX718=", "n4g7yLYyDN4=",
"ggCr0bw88Q4=", "wM0531FsfAY=", "HsbYYaX2OUE=", "P/R8bbBzDng=",
"8SntzIrTzag=", "/RyRQI1zr4Q=" ];
for ( var i = 0; i < data.length; i += 3) {
var key = Crypto.util.base64ToBytes(data[i]);
var inp = Crypto.util.base64ToBytes(data[i + 1]);
var out = Crypto.util.base64ToBytes(data[i + 2]);
Crypto.DES._init(key);
Crypto.DES._encryptblock(inp, 0);
Assert.areEqual(inp.toString(), out.toString());
}
},
test_DES_encrypt_decrypt : function() {
for(var i=0;i<100;i++) {
var key = Crypto.util.randomBytes(8);
var inp = Crypto.util.randomBytes(8);
Crypto.DES._init(key);
var out = inp.slice(0);
Crypto.DES._encryptblock(out, 0);
Crypto.DES._decryptblock(out, 0);
Assert.areEqual(inp.toString(), out.toString(),
"DES E(D(x) failed: " + inp.toString() + " became "
+ out.toString());
Assert.areEqual(inp.toString(), Crypto.DES.decrypt(Crypto.DES.encrypt(inp.slice(0), key), key, { asBytes: true }).toString());
}
}
}));