root / trunk / web / dojo / dojox / sql / _crypto.js @ 12
History | View | Annotate | Download (6.76 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
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.sql._crypto"]){ |
||
9 | dojo._hasResource["dojox.sql._crypto"]=true; |
||
10 | dojo.provide("dojox.sql._crypto");
|
||
11 | dojo.mixin(dojox.sql._crypto,{_POOL_SIZE:100,encrypt:function(_1,_2,_3){ |
||
12 | this._initWorkerPool();
|
||
13 | var _4={plaintext:_1,password:_2}; |
||
14 | _4=dojo.toJson(_4); |
||
15 | _4="encr:"+String(_4);
|
||
16 | this._assignWork(_4,_3);
|
||
17 | },decrypt:function(_5,_6,_7){ |
||
18 | this._initWorkerPool();
|
||
19 | var _8={ciphertext:_5,password:_6}; |
||
20 | _8=dojo.toJson(_8); |
||
21 | _8="decr:"+String(_8);
|
||
22 | this._assignWork(_8,_7);
|
||
23 | },_initWorkerPool:function(){ |
||
24 | if(!this._manager){ |
||
25 | try{
|
||
26 | this._manager=google.gears.factory.create("beta.workerpool","1.0"); |
||
27 | this._unemployed=[];
|
||
28 | this._employed={};
|
||
29 | this._handleMessage=[];
|
||
30 | var _9=this; |
||
31 | this._manager.onmessage=function(_a,_b){ |
||
32 | var _c=_9._employed["_"+_b]; |
||
33 | _9._employed["_"+_b]=undefined; |
||
34 | _9._unemployed.push("_"+_b);
|
||
35 | if(_9._handleMessage.length){
|
||
36 | var _d=_9._handleMessage.shift();
|
||
37 | _9._assignWork(_d.msg,_d.callback); |
||
38 | } |
||
39 | _c(_a); |
||
40 | }; |
||
41 | var _e="function _workerInit(){"+"gearsWorkerPool.onmessage = "+String(this._workerHandler)+";"+"}"; |
||
42 | var _f=_e+" _workerInit();"; |
||
43 | for(var i=0;i<this._POOL_SIZE;i++){ |
||
44 | this._unemployed.push("_"+this._manager.createWorker(_f)); |
||
45 | } |
||
46 | } |
||
47 | catch(exp){
|
||
48 | throw exp.message||exp;
|
||
49 | } |
||
50 | } |
||
51 | },_assignWork:function(msg,_10){ |
||
52 | if(!this._handleMessage.length&&this._unemployed.length){ |
||
53 | var _11=this._unemployed.shift().substring(1); |
||
54 | this._employed["_"+_11]=_10; |
||
55 | this._manager.sendMessage(msg,parseInt(_11,10)); |
||
56 | }else{
|
||
57 | this._handleMessage={msg:msg,callback:_10}; |
||
58 | } |
||
59 | },_workerHandler:function(msg,_12){ |
||
60 | var _13=[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]; |
||
61 | var _14=[[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]]; |
||
62 | function _15(_16,w){ |
||
63 | var Nb=4; |
||
64 | var Nr=w.length/Nb-1; |
||
65 | var _17=[[],[],[],[]];
|
||
66 | for(var i=0;i<4*Nb;i++){ |
||
67 | _17[i%4][Math.floor(i/4)]=_16[i]; |
||
68 | } |
||
69 | _17=_18(_17,w,0,Nb);
|
||
70 | for(var _19=1;_19<Nr;_19++){ |
||
71 | _17=_1a(_17,Nb); |
||
72 | _17=_1b(_17,Nb); |
||
73 | _17=_1c(_17,Nb); |
||
74 | _17=_18(_17,w,_19,Nb); |
||
75 | } |
||
76 | _17=_1a(_17,Nb); |
||
77 | _17=_1b(_17,Nb); |
||
78 | _17=_18(_17,w,Nr,Nb); |
||
79 | var _1d=new Array(4*Nb); |
||
80 | for(var i=0;i<4*Nb;i++){ |
||
81 | _1d[i]=_17[i%4][Math.floor(i/4)]; |
||
82 | } |
||
83 | return _1d;
|
||
84 | }; |
||
85 | function _1a(s,Nb){ |
||
86 | for(var r=0;r<4;r++){ |
||
87 | for(var c=0;c<Nb;c++){ |
||
88 | s[r][c]=_13[s[r][c]]; |
||
89 | } |
||
90 | } |
||
91 | return s;
|
||
92 | }; |
||
93 | function _1b(s,Nb){ |
||
94 | var t=new Array(4); |
||
95 | for(var r=1;r<4;r++){ |
||
96 | for(var c=0;c<4;c++){ |
||
97 | t[c]=s[r][(c+r)%Nb]; |
||
98 | } |
||
99 | for(var c=0;c<4;c++){ |
||
100 | s[r][c]=t[c]; |
||
101 | } |
||
102 | } |
||
103 | return s;
|
||
104 | }; |
||
105 | function _1c(s,Nb){ |
||
106 | for(var c=0;c<4;c++){ |
||
107 | var a=new Array(4); |
||
108 | var b=new Array(4); |
||
109 | for(var i=0;i<4;i++){ |
||
110 | a[i]=s[i][c]; |
||
111 | b[i]=s[i][c]&128?s[i][c]<<1^283:s[i][c]<<1; |
||
112 | } |
||
113 | s[0][c]=b[0]^a[1]^b[1]^a[2]^a[3]; |
||
114 | s[1][c]=a[0]^b[1]^a[2]^b[2]^a[3]; |
||
115 | s[2][c]=a[0]^a[1]^b[2]^a[3]^b[3]; |
||
116 | s[3][c]=a[0]^b[0]^a[1]^a[2]^b[3]; |
||
117 | } |
||
118 | return s;
|
||
119 | }; |
||
120 | function _18(_1e,w,rnd,Nb){ |
||
121 | for(var r=0;r<4;r++){ |
||
122 | for(var c=0;c<Nb;c++){ |
||
123 | _1e[r][c]^=w[rnd*4+c][r];
|
||
124 | } |
||
125 | } |
||
126 | return _1e;
|
||
127 | }; |
||
128 | function _1f(key){ |
||
129 | var Nb=4; |
||
130 | var Nk=key.length/4; |
||
131 | var Nr=Nk+6; |
||
132 | var w=new Array(Nb*(Nr+1)); |
||
133 | var _20=new Array(4); |
||
134 | for(var i=0;i<Nk;i++){ |
||
135 | var r=[key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]]; |
||
136 | w[i]=r; |
||
137 | } |
||
138 | for(var i=Nk;i<(Nb*(Nr+1));i++){ |
||
139 | w[i]=new Array(4); |
||
140 | for(var t=0;t<4;t++){ |
||
141 | _20[t]=w[i-1][t];
|
||
142 | } |
||
143 | if(i%Nk==0){ |
||
144 | _20=_21(_22(_20)); |
||
145 | for(var t=0;t<4;t++){ |
||
146 | _20[t]^=_14[i/Nk][t]; |
||
147 | } |
||
148 | }else{
|
||
149 | if(Nk>6&&i%Nk==4){ |
||
150 | _20=_21(_20); |
||
151 | } |
||
152 | } |
||
153 | for(var t=0;t<4;t++){ |
||
154 | w[i][t]=w[i-Nk][t]^_20[t]; |
||
155 | } |
||
156 | } |
||
157 | return w;
|
||
158 | }; |
||
159 | function _21(w){ |
||
160 | for(var i=0;i<4;i++){ |
||
161 | w[i]=_13[w[i]]; |
||
162 | } |
||
163 | return w;
|
||
164 | }; |
||
165 | function _22(w){ |
||
166 | w[4]=w[0]; |
||
167 | for(var i=0;i<4;i++){ |
||
168 | w[i]=w[i+1];
|
||
169 | } |
||
170 | return w;
|
||
171 | }; |
||
172 | function _23(_24,_25,_26){ |
||
173 | if(!(_26==128||_26==192||_26==256)){ |
||
174 | return ""; |
||
175 | } |
||
176 | var _27=_26/8; |
||
177 | var _28=new Array(_27); |
||
178 | for(var i=0;i<_27;i++){ |
||
179 | _28[i]=_25.charCodeAt(i)&255;
|
||
180 | } |
||
181 | var key=_15(_28,_1f(_28));
|
||
182 | key=key.concat(key.slice(0,_27-16)); |
||
183 | var _29=16; |
||
184 | var _2a=new Array(_29); |
||
185 | var _2b=(new Date()).getTime(); |
||
186 | for(var i=0;i<4;i++){ |
||
187 | _2a[i]=(_2b>>>i*8)&255; |
||
188 | } |
||
189 | for(var i=0;i<4;i++){ |
||
190 | _2a[i+4]=(_2b/4294967296>>>i*8)&255; |
||
191 | } |
||
192 | var _2c=_1f(key);
|
||
193 | var _2d=Math.ceil(_24.length/_29);
|
||
194 | var _2e=new Array(_2d); |
||
195 | for(var b=0;b<_2d;b++){ |
||
196 | for(var c=0;c<4;c++){ |
||
197 | _2a[15-c]=(b>>>c*8)&255; |
||
198 | } |
||
199 | for(var c=0;c<4;c++){ |
||
200 | _2a[15-c-4]=(b/4294967296>>>c*8); |
||
201 | } |
||
202 | var _2f=_15(_2a,_2c);
|
||
203 | var _30=b<_2d-1?_29:(_24.length-1)%_29+1; |
||
204 | var ct=""; |
||
205 | for(var i=0;i<_30;i++){ |
||
206 | var _31=_24.charCodeAt(b*_29+i);
|
||
207 | var _32=_31^_2f[i];
|
||
208 | ct+=String.fromCharCode(_32); |
||
209 | } |
||
210 | _2e[b]=_33(ct); |
||
211 | } |
||
212 | var _34=""; |
||
213 | for(var i=0;i<8;i++){ |
||
214 | _34+=String.fromCharCode(_2a[i]); |
||
215 | } |
||
216 | _34=_33(_34); |
||
217 | return _34+"-"+_2e.join("-"); |
||
218 | }; |
||
219 | function _35(_36,_37,_38){ |
||
220 | if(!(_38==128||_38==192||_38==256)){ |
||
221 | return ""; |
||
222 | } |
||
223 | var _39=_38/8; |
||
224 | var _3a=new Array(_39); |
||
225 | for(var i=0;i<_39;i++){ |
||
226 | _3a[i]=_37.charCodeAt(i)&255;
|
||
227 | } |
||
228 | var _3b=_1f(_3a);
|
||
229 | var key=_15(_3a,_3b);
|
||
230 | key=key.concat(key.slice(0,_39-16)); |
||
231 | var _3c=_1f(key);
|
||
232 | _36=_36.split("-");
|
||
233 | var _3d=16; |
||
234 | var _3e=new Array(_3d); |
||
235 | var _3f=_40(_36[0]); |
||
236 | for(var i=0;i<8;i++){ |
||
237 | _3e[i]=_3f.charCodeAt(i); |
||
238 | } |
||
239 | var _41=new Array(_36.length-1); |
||
240 | for(var b=1;b<_36.length;b++){ |
||
241 | for(var c=0;c<4;c++){ |
||
242 | _3e[15-c]=((b-1)>>>c*8)&255; |
||
243 | } |
||
244 | for(var c=0;c<4;c++){ |
||
245 | _3e[15-c-4]=((b/4294967296-1)>>>c*8)&255; |
||
246 | } |
||
247 | var _42=_15(_3e,_3c);
|
||
248 | _36[b]=_40(_36[b]); |
||
249 | var pt=""; |
||
250 | for(var i=0;i<_36[b].length;i++){ |
||
251 | var _43=_36[b].charCodeAt(i);
|
||
252 | var _44=_43^_42[i];
|
||
253 | pt+=String.fromCharCode(_44); |
||
254 | } |
||
255 | _41[b-1]=pt;
|
||
256 | } |
||
257 | return _41.join(""); |
||
258 | }; |
||
259 | function _33(str){ |
||
260 | return str.replace(/[\0\t\n\v\f\r\xa0!-]/g,function(c){ |
||
261 | return "!"+c.charCodeAt(0)+"!"; |
||
262 | }); |
||
263 | }; |
||
264 | function _40(str){ |
||
265 | return str.replace(/!\d\d?\d?!/g,function(c){ |
||
266 | return String.fromCharCode(c.slice(1,-1)); |
||
267 | }); |
||
268 | }; |
||
269 | function _45(_46,_47){ |
||
270 | return _23(_46,_47,256); |
||
271 | }; |
||
272 | function _48(_49,_4a){ |
||
273 | return _35(_49,_4a,256); |
||
274 | }; |
||
275 | var cmd=msg.substr(0,4); |
||
276 | var arg=msg.substr(5); |
||
277 | if(cmd=="encr"){ |
||
278 | arg=eval("("+arg+")"); |
||
279 | var _4b=arg.plaintext;
|
||
280 | var _4c=arg.password;
|
||
281 | var _4d=_45(_4b,_4c);
|
||
282 | gearsWorkerPool.sendMessage(String(_4d),_12); |
||
283 | }else{
|
||
284 | if(cmd=="decr"){ |
||
285 | arg=eval("("+arg+")"); |
||
286 | var _4e=arg.ciphertext;
|
||
287 | var _4c=arg.password;
|
||
288 | var _4d=_48(_4e,_4c);
|
||
289 | gearsWorkerPool.sendMessage(String(_4d),_12); |
||
290 | } |
||
291 | } |
||
292 | }}); |
||
293 | } |