root / trunk / web / dojo / dojox / encoding / crypto / SimpleAES.js @ 13
History | View | Annotate | Download (5.28 KB)
1 |
/*
|
---|---|
2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
4 |
see: http://dojotoolkit.org/license for details
|
5 |
*/
|
6 |
|
7 |
|
8 |
if(!dojo._hasResource["dojox.encoding.crypto.SimpleAES"]){ |
9 |
dojo._hasResource["dojox.encoding.crypto.SimpleAES"]=true; |
10 |
dojo.provide("dojox.encoding.crypto.SimpleAES");
|
11 |
dojo.require("dojox.encoding.base64");
|
12 |
dojo.require("dojox.encoding.crypto._base");
|
13 |
(function(){
|
14 |
var _1=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]; |
15 |
var _2=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]]; |
16 |
function _3(_4,w){ |
17 |
var Nb=4; |
18 |
var Nr=w.length/Nb-1; |
19 |
var _5=[[],[],[],[]];
|
20 |
for(var i=0;i<4*Nb;i++){ |
21 |
_5[i%4][Math.floor(i/4)]=_4[i]; |
22 |
} |
23 |
_5=_6(_5,w,0,Nb);
|
24 |
for(var _7=1;_7<Nr;_7++){ |
25 |
_5=_8(_5,Nb); |
26 |
_5=_9(_5,Nb); |
27 |
_5=_a(_5,Nb); |
28 |
_5=_6(_5,w,_7,Nb); |
29 |
} |
30 |
_5=_8(_5,Nb); |
31 |
_5=_9(_5,Nb); |
32 |
_5=_6(_5,w,Nr,Nb); |
33 |
var _b=new Array(4*Nb); |
34 |
for(var i=0;i<4*Nb;i++){ |
35 |
_b[i]=_5[i%4][Math.floor(i/4)]; |
36 |
} |
37 |
return _b;
|
38 |
}; |
39 |
function _8(s,Nb){ |
40 |
for(var r=0;r<4;r++){ |
41 |
for(var c=0;c<Nb;c++){ |
42 |
s[r][c]=_1[s[r][c]]; |
43 |
} |
44 |
} |
45 |
return s;
|
46 |
}; |
47 |
function _9(s,Nb){ |
48 |
var t=new Array(4); |
49 |
for(var r=1;r<4;r++){ |
50 |
for(var c=0;c<4;c++){ |
51 |
t[c]=s[r][(c+r)%Nb]; |
52 |
} |
53 |
for(var c=0;c<4;c++){ |
54 |
s[r][c]=t[c]; |
55 |
} |
56 |
} |
57 |
return s;
|
58 |
}; |
59 |
function _a(s,Nb){ |
60 |
for(var c=0;c<4;c++){ |
61 |
var a=new Array(4); |
62 |
var b=new Array(4); |
63 |
for(var i=0;i<4;i++){ |
64 |
a[i]=s[i][c]; |
65 |
b[i]=s[i][c]&128?s[i][c]<<1^283:s[i][c]<<1; |
66 |
} |
67 |
s[0][c]=b[0]^a[1]^b[1]^a[2]^a[3]; |
68 |
s[1][c]=a[0]^b[1]^a[2]^b[2]^a[3]; |
69 |
s[2][c]=a[0]^a[1]^b[2]^a[3]^b[3]; |
70 |
s[3][c]=a[0]^b[0]^a[1]^a[2]^b[3]; |
71 |
} |
72 |
return s;
|
73 |
}; |
74 |
function _6(_c,w,_d,Nb){ |
75 |
for(var r=0;r<4;r++){ |
76 |
for(var c=0;c<Nb;c++){ |
77 |
_c[r][c]^=w[_d*4+c][r];
|
78 |
} |
79 |
} |
80 |
return _c;
|
81 |
}; |
82 |
function _e(_f){ |
83 |
var Nb=4; |
84 |
var Nk=_f.length/4; |
85 |
var Nr=Nk+6; |
86 |
var w=new Array(Nb*(Nr+1)); |
87 |
var _10=new Array(4); |
88 |
for(var i=0;i<Nk;i++){ |
89 |
var r=[_f[4*i],_f[4*i+1],_f[4*i+2],_f[4*i+3]]; |
90 |
w[i]=r; |
91 |
} |
92 |
for(var i=Nk;i<(Nb*(Nr+1));i++){ |
93 |
w[i]=new Array(4); |
94 |
for(var t=0;t<4;t++){ |
95 |
_10[t]=w[i-1][t];
|
96 |
} |
97 |
if(i%Nk==0){ |
98 |
_10=_11(_12(_10)); |
99 |
for(var t=0;t<4;t++){ |
100 |
_10[t]^=_2[i/Nk][t]; |
101 |
} |
102 |
}else{
|
103 |
if(Nk>6&&i%Nk==4){ |
104 |
_10=_11(_10); |
105 |
} |
106 |
} |
107 |
for(var t=0;t<4;t++){ |
108 |
w[i][t]=w[i-Nk][t]^_10[t]; |
109 |
} |
110 |
} |
111 |
return w;
|
112 |
}; |
113 |
function _11(w){ |
114 |
for(var i=0;i<4;i++){ |
115 |
w[i]=_1[w[i]]; |
116 |
} |
117 |
return w;
|
118 |
}; |
119 |
function _12(w){ |
120 |
w[4]=w[0]; |
121 |
for(var i=0;i<4;i++){ |
122 |
w[i]=w[i+1];
|
123 |
} |
124 |
return w;
|
125 |
}; |
126 |
function _13(_14,_15,_16){ |
127 |
if(!(_16==128||_16==192||_16==256)){ |
128 |
return ""; |
129 |
} |
130 |
var _17=_16/8; |
131 |
var _18=new Array(_17); |
132 |
for(var i=0;i<_17;i++){ |
133 |
_18[i]=_15.charCodeAt(i)&255;
|
134 |
} |
135 |
var key=_3(_18,_e(_18));
|
136 |
key=key.concat(key.slice(0,_17-16)); |
137 |
var _19=16; |
138 |
var _1a=new Array(_19); |
139 |
var _1b=(new Date()).getTime(); |
140 |
for(var i=0;i<4;i++){ |
141 |
_1a[i]=(_1b>>>i*8)&255; |
142 |
} |
143 |
for(var i=0;i<4;i++){ |
144 |
_1a[i+4]=(_1b/4294967296>>>i*8)&255; |
145 |
} |
146 |
var _1c=_e(key);
|
147 |
var _1d=Math.ceil(_14.length/_19);
|
148 |
var _1e=new Array(_1d); |
149 |
for(var b=0;b<_1d;b++){ |
150 |
for(var c=0;c<4;c++){ |
151 |
_1a[15-c]=(b>>>c*8)&255; |
152 |
} |
153 |
for(var c=0;c<4;c++){ |
154 |
_1a[15-c-4]=(b/4294967296>>>c*8); |
155 |
} |
156 |
var _1f=_3(_1a,_1c);
|
157 |
var _20=b<_1d-1?_19:(_14.length-1)%_19+1; |
158 |
var ct=""; |
159 |
for(var i=0;i<_20;i++){ |
160 |
var _21=_14.charCodeAt(b*_19+i);
|
161 |
var _22=_21^_1f[i];
|
162 |
ct+=((_22<16)?"0":"")+_22.toString(16); |
163 |
} |
164 |
_1e[b]=ct; |
165 |
} |
166 |
var _23=""; |
167 |
for(var i=0;i<8;i++){ |
168 |
_23+=((_1a[i]<16)?"0":"")+_1a[i].toString(16); |
169 |
} |
170 |
return _23+" "+_1e.join(" "); |
171 |
}; |
172 |
function _24(s){ |
173 |
var ret=[];
|
174 |
s.replace(/(..)/g,function(str){ |
175 |
ret.push(parseInt(str,16));
|
176 |
}); |
177 |
return ret;
|
178 |
}; |
179 |
function _25(_26,_27,_28){ |
180 |
if(!(_28==128||_28==192||_28==256)){ |
181 |
return ""; |
182 |
} |
183 |
var _29=_28/8; |
184 |
var _2a=new Array(_29); |
185 |
for(var i=0;i<_29;i++){ |
186 |
_2a[i]=_27.charCodeAt(i)&255;
|
187 |
} |
188 |
var _2b=_e(_2a);
|
189 |
var key=_3(_2a,_2b);
|
190 |
key=key.concat(key.slice(0,_29-16)); |
191 |
var _2c=_e(key);
|
192 |
_26=_26.split(" ");
|
193 |
var _2d=16; |
194 |
var _2e=new Array(_2d); |
195 |
var _2f=_26[0]; |
196 |
_2e=_24(_2f); |
197 |
var _30=new Array(_26.length-1); |
198 |
for(var b=1;b<_26.length;b++){ |
199 |
for(var c=0;c<4;c++){ |
200 |
_2e[15-c]=((b-1)>>>c*8)&255; |
201 |
} |
202 |
for(var c=0;c<4;c++){ |
203 |
_2e[15-c-4]=((b/4294967296-1)>>>c*8)&255; |
204 |
} |
205 |
var _31=_3(_2e,_2c);
|
206 |
var pt=""; |
207 |
var tmp=_24(_26[b]);
|
208 |
for(var i=0;i<tmp.length;i++){ |
209 |
var _32=_26[b].charCodeAt(i);
|
210 |
var _33=tmp[i]^_31[i];
|
211 |
pt+=String.fromCharCode(_33); |
212 |
} |
213 |
_30[b-1]=pt;
|
214 |
} |
215 |
return _30.join(""); |
216 |
}; |
217 |
function _34(str){ |
218 |
return str.replace(/[\0\t\n\v\f\r\xa0!-]/g,function(c){ |
219 |
return "!"+c.charCodeAt(0)+"!"; |
220 |
}); |
221 |
}; |
222 |
function _35(str){ |
223 |
return str.replace(/!\d\d?\d?!/g,function(c){ |
224 |
return String.fromCharCode(c.slice(1,-1)); |
225 |
}); |
226 |
}; |
227 |
dojox.encoding.crypto.SimpleAES=new (function(){ |
228 |
this.encrypt=function(_36,key){ |
229 |
return _13(_36,key,256); |
230 |
}; |
231 |
this.decrypt=function(_37,key){ |
232 |
return _25(_37,key,256); |
233 |
}; |
234 |
})(); |
235 |
})(); |
236 |
} |