Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / encoding / crypto / SimpleAES.js @ 9

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
}