root / trunk / web / dojo / dojox / sql / _crypto.js @ 13
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 | } |