phpldapadmin/application/media/js/dojo-release-1.7.2/dojox/encoding/crypto/Blowfish.js

267 lines
17 KiB
JavaScript
Raw Permalink Normal View History

2012-06-19 02:07:43 +00:00
//>>built
define("dojox/encoding/crypto/Blowfish",["dojo/_base/lang","dojo/_base/array","../base64","./_base"],function(_1,_2,_3,_4){
_4.Blowfish=new function(){
var _5=Math.pow(2,2);
var _6=Math.pow(2,3);
var _7=Math.pow(2,4);
var _8=Math.pow(2,8);
var _9=Math.pow(2,16);
var _a=Math.pow(2,24);
var iv=null;
var _b={p:[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s0:[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],s1:[1266315497,3048417604,3681880366,3289982499,2909710000,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,40695
function _c(x,y){
return (((x>>16)+(y>>16)+(((x&65535)+(y&65535))>>16))<<16)|(((x&65535)+(y&65535))&65535);
};
function _d(x,y){
return (((x>>16)^(y>>16))<<16)|(((x&65535)^(y&65535))&65535);
};
function $(v,_e){
var d=_e.s3[v&255];
v>>=8;
var c=_e.s2[v&255];
v>>=8;
var b=_e.s1[v&255];
v>>=8;
var a=_e.s0[v&255];
var r=(((a>>16)+(b>>16)+(((a&65535)+(b&65535))>>16))<<16)|(((a&65535)+(b&65535))&65535);
r=(((r>>16)^(c>>16))<<16)|(((r&65535)^(c&65535))&65535);
return (((r>>16)+(d>>16)+(((r&65535)+(d&65535))>>16))<<16)|(((r&65535)+(d&65535))&65535);
};
function eb(o,_f){
var l=o.left;
var r=o.right;
l=_d(l,_f.p[0]);
r=_d(r,_d($(l,_f),_f.p[1]));
l=_d(l,_d($(r,_f),_f.p[2]));
r=_d(r,_d($(l,_f),_f.p[3]));
l=_d(l,_d($(r,_f),_f.p[4]));
r=_d(r,_d($(l,_f),_f.p[5]));
l=_d(l,_d($(r,_f),_f.p[6]));
r=_d(r,_d($(l,_f),_f.p[7]));
l=_d(l,_d($(r,_f),_f.p[8]));
r=_d(r,_d($(l,_f),_f.p[9]));
l=_d(l,_d($(r,_f),_f.p[10]));
r=_d(r,_d($(l,_f),_f.p[11]));
l=_d(l,_d($(r,_f),_f.p[12]));
r=_d(r,_d($(l,_f),_f.p[13]));
l=_d(l,_d($(r,_f),_f.p[14]));
r=_d(r,_d($(l,_f),_f.p[15]));
l=_d(l,_d($(r,_f),_f.p[16]));
o.right=l;
o.left=_d(r,_f.p[17]);
};
function db(o,box){
var l=o.left;
var r=o.right;
l=_d(l,box.p[17]);
r=_d(r,_d($(l,box),box.p[16]));
l=_d(l,_d($(r,box),box.p[15]));
r=_d(r,_d($(l,box),box.p[14]));
l=_d(l,_d($(r,box),box.p[13]));
r=_d(r,_d($(l,box),box.p[12]));
l=_d(l,_d($(r,box),box.p[11]));
r=_d(r,_d($(l,box),box.p[10]));
l=_d(l,_d($(r,box),box.p[9]));
r=_d(r,_d($(l,box),box.p[8]));
l=_d(l,_d($(r,box),box.p[7]));
r=_d(r,_d($(l,box),box.p[6]));
l=_d(l,_d($(r,box),box.p[5]));
r=_d(r,_d($(l,box),box.p[4]));
l=_d(l,_d($(r,box),box.p[3]));
r=_d(r,_d($(l,box),box.p[2]));
l=_d(l,_d($(r,box),box.p[1]));
o.right=l;
o.left=_d(r,box.p[0]);
};
function _10(key){
var k=key;
if(_1.isString(k)){
k=_2.map(k.split(""),function(_11){
return _11.charCodeAt(0)&255;
});
}
var pos=0,_12=0,res={left:0,right:0},i,j,l;
var box={p:_2.map(_b.p.slice(0),function(_13){
var l=k.length,j;
for(j=0;j<4;j++){
_12=(_12*_8)|k[pos++%l];
}
return (((_13>>16)^(_12>>16))<<16)|(((_13&65535)^(_12&65535))&65535);
}),s0:_b.s0.slice(0),s1:_b.s1.slice(0),s2:_b.s2.slice(0),s3:_b.s3.slice(0)};
for(i=0,l=box.p.length;i<l;){
eb(res,box);
box.p[i++]=res.left,box.p[i++]=res.right;
}
for(i=0;i<4;i++){
for(j=0,l=box["s"+i].length;j<l;){
eb(res,box);
box["s"+i][j++]=res.left,box["s"+i][j++]=res.right;
}
}
return box;
};
this.getIV=function(_14){
var out=_14||_4.outputTypes.Base64;
switch(out){
case _4.outputTypes.Hex:
return _2.map(iv,function(_15){
return (_15<=15?"0":"")+_15.toString(16);
}).join("");
case _4.outputTypes.String:
return iv.join("");
case _4.outputTypes.Raw:
return iv;
default:
return _3.encode(iv);
}
};
this.setIV=function(_16,_17){
var ip=_17||_4.outputTypes.Base64;
var ba=null;
switch(ip){
case _4.outputTypes.String:
ba=_2.map(_16.split(""),function(_18){
return _18.charCodeAt(0);
});
break;
case _4.outputTypes.Hex:
ba=[];
for(var i=0,l=_16.length-1;i<l;i+=2){
ba.push(parseInt(_16.substr(i,2),16));
}
break;
case _4.outputTypes.Raw:
ba=_16;
break;
default:
ba=_3.decode(_16);
break;
}
iv={};
iv.left=ba[0]*_a|ba[1]*_9|ba[2]*_8|ba[3];
iv.right=ba[4]*_a|ba[5]*_9|ba[6]*_8|ba[7];
};
this.encrypt=function(_19,key,ao){
var out=_4.outputTypes.Base64;
var _1a=_4.cipherModes.ECB;
if(ao){
if(ao.outputType){
out=ao.outputType;
}
if(ao.cipherMode){
_1a=ao.cipherMode;
}
}
var bx=_10(key),_1b=8-(_19.length&7);
for(var i=0;i<_1b;i++){
_19+=String.fromCharCode(_1b);
}
var _1c=[],_1d=_19.length>>3,pos=0,o={},_1e=(_1a==_4.cipherModes.CBC);
var _1f={left:iv.left||null,right:iv.right||null};
for(var i=0;i<_1d;i++){
o.left=_19.charCodeAt(pos)*_a|_19.charCodeAt(pos+1)*_9|_19.charCodeAt(pos+2)*_8|_19.charCodeAt(pos+3);
o.right=_19.charCodeAt(pos+4)*_a|_19.charCodeAt(pos+5)*_9|_19.charCodeAt(pos+6)*_8|_19.charCodeAt(pos+7);
if(_1e){
o.left=(((o.left>>16)^(_1f.left>>16))<<16)|(((o.left&65535)^(_1f.left&65535))&65535);
o.right=(((o.right>>16)^(_1f.right>>16))<<16)|(((o.right&65535)^(_1f.right&65535))&65535);
}
eb(o,bx);
if(_1e){
_1f.left=o.left;
_1f.right=o.right;
}
_1c.push((o.left>>24)&255);
_1c.push((o.left>>16)&255);
_1c.push((o.left>>8)&255);
_1c.push(o.left&255);
_1c.push((o.right>>24)&255);
_1c.push((o.right>>16)&255);
_1c.push((o.right>>8)&255);
_1c.push(o.right&255);
pos+=8;
}
switch(out){
case _4.outputTypes.Hex:
return _2.map(_1c,function(_20){
return (_20<=15?"0":"")+_20.toString(16);
}).join("");
case _4.outputTypes.String:
return _1c.join("");
case _4.outputTypes.Raw:
return _1c;
default:
return _3.encode(_1c);
}
};
this.decrypt=function(_21,key,ao){
var ip=_4.outputTypes.Base64;
var _22=_4.cipherModes.ECB;
if(ao){
if(ao.outputType){
ip=ao.outputType;
}
if(ao.cipherMode){
_22=ao.cipherMode;
}
}
var bx=_10(key);
var pt=[];
var c=null;
switch(ip){
case _4.outputTypes.Hex:
c=[];
for(var i=0,l=_21.length-1;i<l;i+=2){
c.push(parseInt(_21.substr(i,2),16));
}
break;
case _4.outputTypes.String:
c=_2.map(_21.split(""),function(_23){
return _23.charCodeAt(0);
});
break;
case _4.outputTypes.Raw:
c=_21;
break;
default:
c=_3.decode(_21);
break;
}
var _24=c.length>>3,pos=0,o={},_25=(_22==_4.cipherModes.CBC);
var _26={left:iv.left||null,right:iv.right||null};
for(var i=0;i<_24;i++){
o.left=c[pos]*_a|c[pos+1]*_9|c[pos+2]*_8|c[pos+3];
o.right=c[pos+4]*_a|c[pos+5]*_9|c[pos+6]*_8|c[pos+7];
if(_25){
var _27=o.left;
var _28=o.right;
}
db(o,bx);
if(_25){
o.left=(((o.left>>16)^(_26.left>>16))<<16)|(((o.left&65535)^(_26.left&65535))&65535);
o.right=(((o.right>>16)^(_26.right>>16))<<16)|(((o.right&65535)^(_26.right&65535))&65535);
_26.left=_27;
_26.right=_28;
}
pt.push((o.left>>24)&255);
pt.push((o.left>>16)&255);
pt.push((o.left>>8)&255);
pt.push(o.left&255);
pt.push((o.right>>24)&255);
pt.push((o.right>>16)&255);
pt.push((o.right>>8)&255);
pt.push(o.right&255);
pos+=8;
}
if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==1){
var n=pt[pt.length-1];
pt.splice(pt.length-n,n);
}
return _2.map(pt,function(_29){
return String.fromCharCode(_29);
}).join("");
};
this.setIV("0000000000000000",_4.outputTypes.Hex);
}();
return _4.Blowfish;
});