summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJasper <wellcaffeinated@iCoffee.local>2013-04-15 15:31:49 -0400
committerJasper <wellcaffeinated@iCoffee.local>2013-04-15 15:31:49 -0400
commit0c9cb7f5be478ad351375e0aaa4720eb5c9c4b62 (patch)
treecbd486ea68e5a9756ee70ae90be1f32561076fa2
parent5a9d44ca056197d886db76770b3f6d7a1cc8dd06 (diff)
downloadgibberish-aes-0c9cb7f5be478ad351375e0aaa4720eb5c9c4b62.zip
gibberish-aes-0c9cb7f5be478ad351375e0aaa4720eb5c9c4b62.tar.gz
gibberish-aes-0c9cb7f5be478ad351375e0aaa4720eb5c9c4b62.tar.bz2
added universal module declaration style
Now the library works in requireJS and node.js without poluting the global scope
-rwxr-xr-xsrc/gibberish-aes.js77
-rwxr-xr-xsrc/gibberish-aes.min.js75
2 files changed, 117 insertions, 35 deletions
diff --git a/src/gibberish-aes.js b/src/gibberish-aes.js
index a3d39c3..637a4ba 100755
--- a/src/gibberish-aes.js
+++ b/src/gibberish-aes.js
@@ -19,7 +19,20 @@
*/
-var GibberishAES = (function(){
+(function (root, factory) {
+ if (typeof exports === 'object') {
+ // Node.
+ module.exports = factory();
+ } else if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(factory);
+ } else {
+ // Browser globals (root is window)
+ root.GibberishAES = factory();
+ }
+}(this, function () {
+ 'use strict';
+
var Nr = 14,
/* Default to 256 Bit Encryption */
Nk = 8,
@@ -52,7 +65,7 @@ var GibberishAES = (function(){
cpad = 16 - byteArr.length;
array = [cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad];
}
- for (i = 0; i < byteArr.length; i++)
+ for (var i = 0; i < byteArr.length; i++)
{
array[i] = byteArr[i];
}
@@ -70,11 +83,11 @@ var GibberishAES = (function(){
if (padding == 16) {
return '';
}
- for (i = 0; i < 16 - padding; i++) {
+ for (var i = 0; i < 16 - padding; i++) {
string += String.fromCharCode(block[i]);
}
} else {
- for (i = 0; i < 16; i++) {
+ for (var i = 0; i < 16; i++) {
string += String.fromCharCode(block[i]);
}
}
@@ -84,7 +97,7 @@ var GibberishAES = (function(){
a2h = function(numArr)
{
var string = '', i;
- for (i = 0; i < numArr.length; i++) {
+ for (var i = 0; i < numArr.length; i++) {
string += (numArr[i] < 16 ? '0': '') + numArr[i].toString(16);
}
return string;
@@ -107,7 +120,7 @@ var GibberishAES = (function(){
string = enc_utf8(string);
}
- for (i = 0; i < string.length; i++)
+ for (var i = 0; i < string.length; i++)
{
array[i] = string.charCodeAt(i);
}
@@ -138,7 +151,7 @@ var GibberishAES = (function(){
randArr = function(num) {
var result = [], i;
- for (i = 0; i < num; i++) {
+ for (var i = 0; i < num; i++) {
result = result.concat(Math.floor(Math.random() * 256));
}
return result;
@@ -160,7 +173,7 @@ var GibberishAES = (function(){
i;
md5_hash[0] = GibberishAES.Hash.MD5(data00);
result = md5_hash[0];
- for (i = 1; i < rounds; i++) {
+ for (var i = 1; i < rounds; i++) {
md5_hash[i] = GibberishAES.Hash.MD5(md5_hash[i - 1].concat(data00));
result = result.concat(md5_hash[i]);
}
@@ -179,7 +192,7 @@ var GibberishAES = (function(){
blocks = [],
i,
cipherBlocks = [];
- for (i = 0; i < numBlocks; i++) {
+ for (var i = 0; i < numBlocks; i++) {
blocks[i] = padBlock(plaintext.slice(i * 16, i * 16 + 16));
}
if (plaintext.length % 16 === 0) {
@@ -187,7 +200,7 @@ var GibberishAES = (function(){
// CBC OpenSSL padding scheme
numBlocks++;
}
- for (i = 0; i < blocks.length; i++) {
+ for (var i = 0; i < blocks.length; i++) {
blocks[i] = (i === 0) ? xorBlocks(blocks[i], iv) : xorBlocks(blocks[i], cipherBlocks[i - 1]);
cipherBlocks[i] = encryptBlock(blocks[i], key);
}
@@ -202,14 +215,14 @@ var GibberishAES = (function(){
i,
plainBlocks = [],
string = '';
- for (i = 0; i < numBlocks; i++) {
+ for (var i = 0; i < numBlocks; i++) {
cipherBlocks.push(cryptArr.slice(i * 16, (i + 1) * 16));
}
- for (i = cipherBlocks.length - 1; i >= 0; i--) {
+ for (var i = cipherBlocks.length - 1; i >= 0; i--) {
plainBlocks[i] = decryptBlock(cipherBlocks[i], key);
plainBlocks[i] = (i === 0) ? xorBlocks(plainBlocks[i], iv) : xorBlocks(plainBlocks[i], cipherBlocks[i - 1]);
}
- for (i = 0; i < numBlocks - 1; i++) {
+ for (var i = 0; i < numBlocks - 1; i++) {
string += block2s(plainBlocks[i]);
}
string += block2s(plainBlocks[i], true);
@@ -254,7 +267,7 @@ var GibberishAES = (function(){
var S = Decrypt ? SBoxInv: SBox,
temp = [],
i;
- for (i = 0; i < 16; i++) {
+ for (var i = 0; i < 16; i++) {
temp[i] = S[state[i]];
}
return temp;
@@ -264,7 +277,7 @@ var GibberishAES = (function(){
var temp = [],
shiftBy = Decrypt ? [0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3] : [0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11],
i;
- for (i = 0; i < 16; i++) {
+ for (var i = 0; i < 16; i++) {
temp[i] = state[shiftBy[i]];
}
return temp;
@@ -295,7 +308,7 @@ var GibberishAES = (function(){
addRoundKey = function(state, words, round) {
var temp = [],
i;
- for (i = 0; i < 16; i++) {
+ for (var i = 0; i < 16; i++) {
temp[i] = state[i] ^ words[round][i];
}
return temp;
@@ -304,7 +317,7 @@ var GibberishAES = (function(){
xorBlocks = function(block1, block2) {
var temp = [],
i;
- for (i = 0; i < 16; i++) {
+ for (var i = 0; i < 16; i++) {
temp[i] = block1[i] ^ block2[i];
}
return temp;
@@ -320,12 +333,12 @@ var GibberishAES = (function(){
flat = [],
j;
- for (i = 0; i < Nk; i++) {
+ for (var i = 0; i < Nk; i++) {
r = [key[4 * i], key[4 * i + 1], key[4 * i + 2], key[4 * i + 3]];
w[i] = r;
}
- for (i = Nk; i < (4 * (Nr + 1)); i++) {
+ for (var i = Nk; i < (4 * (Nr + 1)); i++) {
w[i] = [];
for (t = 0; t < 4; t++) {
temp[t] = w[i - 1][t];
@@ -340,7 +353,7 @@ var GibberishAES = (function(){
w[i][t] = w[i - Nk][t] ^ temp[t];
}
}
- for (i = 0; i < (Nr + 1); i++) {
+ for (var i = 0; i < (Nr + 1); i++) {
flat[i] = [];
for (j = 0; j < 4; j++) {
flat[i].push(w[i * 4 + j][0], w[i * 4 + j][1], w[i * 4 + j][2], w[i * 4 + j][3]);
@@ -361,7 +374,7 @@ var GibberishAES = (function(){
// rotate 4-byte word w left by one byte
var tmp = w[0],
i;
- for (i = 0; i < 4; i++) {
+ for (var i = 0; i < 4; i++) {
w[i] = w[i + 1];
}
w[3] = tmp;
@@ -371,13 +384,13 @@ var GibberishAES = (function(){
// jlcooke: 2012-07-12: added strhex + invertArr to compress G2X/G3X/G9X/GBX/GEX/SBox/SBoxInv/Rcon saving over 7KB, and added encString, decString
strhex = function(str,size) {
var ret = [];
- for (i=0; i<str.length; i+=size)
+ for (var i=0; i<str.length; i+=size)
ret[i/size] = parseInt(str.substr(i,size), 16);
return ret;
},
invertArr = function(arr) {
var ret = [];
- for (i=0; i<arr.length; i++)
+ for (var i=0; i<arr.length; i++)
ret[arr[i]] = i;
return ret;
},
@@ -385,7 +398,7 @@ var GibberishAES = (function(){
var i, ret;
ret = 0;
- for (i=0; i<8; i++) {
+ for (var i=0; i<8; i++) {
ret = ((b&1)==1) ? ret^a : ret;
/* xmult */
a = (a>0x7f) ? 0x11b^(a<<1) : (a<<1);
@@ -899,12 +912,12 @@ var GibberishAES = (function(){
var flatArr = [],
b64 = '',
i,
- broken_b64;
+ broken_b64,
totalChunks = Math.floor(b.length * 16 / 3);
- for (i = 0; i < b.length * 16; i++) {
+ for (var i = 0; i < b.length * 16; i++) {
flatArr.push(b[Math.floor(i / 16)][i % 16]);
}
- for (i = 0; i < flatArr.length; i = i + 3) {
+ for (var i = 0; i < flatArr.length; i = i + 3) {
b64 += chars[flatArr[i] >> 2];
b64 += chars[((flatArr[i] & 3) << 4) | (flatArr[i + 1] >> 4)];
if (! (flatArr[i + 1] === undefined)) {
@@ -920,7 +933,7 @@ var GibberishAES = (function(){
}
// OpenSSL is super particular about line breaks
broken_b64 = b64.slice(0, 64) + '\n';
- for (i = 1; i < (Math.ceil(b64.length / 64)); i++) {
+ for (var i = 1; i < (Math.ceil(b64.length / 64)); i++) {
broken_b64 += b64.slice(i * 64, i * 64 + 64) + (Math.ceil(b64.length / 64) == i + 1 ? '': '\n');
}
return broken_b64;
@@ -932,7 +945,7 @@ var GibberishAES = (function(){
c = [],
b = [],
i;
- for (i = 0; i < string.length; i = i + 4) {
+ for (var i = 0; i < string.length; i = i + 4) {
c[0] = _chars.indexOf(string.charAt(i));
c[1] = _chars.indexOf(string.charAt(i + 1));
c[2] = _chars.indexOf(string.charAt(i + 2));
@@ -991,8 +1004,4 @@ var GibberishAES = (function(){
"Base64":Base64
};
-})();
-
-if ( typeof define === "function" ) {
- define(function () { return GibberishAES; });
-}
+}));
diff --git a/src/gibberish-aes.min.js b/src/gibberish-aes.min.js
index ccaa2e5..7b69735 100755
--- a/src/gibberish-aes.min.js
+++ b/src/gibberish-aes.min.js
@@ -16,4 +16,77 @@
Usage: GibberishAES.enc("secret", "password")
Outputs: AES Encrypted text encoded in Base64
*/
-var GibberishAES=(function(){var p=14,w=8,g=false,S=function(T){try{return unescape(encodeURIComponent(T))}catch(U){throw"Error on UTF-8 encode"}},P=function(T){try{return decodeURIComponent(escape(T))}catch(U){throw ("Bad Key")}},F=function(V){var W=[],U,T;if(V.length<16){U=16-V.length;W=[U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U]}for(T=0;T<V.length;T++){W[T]=V[T]}return W},l=function(X,V){var T="",W,U;if(V){W=X[15];if(W>16){throw ("Decryption error: Maybe bad key")}if(W==16){return""}for(U=0;U<16-W;U++){T+=String.fromCharCode(X[U])}}else{for(U=0;U<16;U++){T+=String.fromCharCode(X[U])}}return T},s=function(V){var T="",U;for(U=0;U<V.length;U++){T+=(V[U]<16?"0":"")+V[U].toString(16)}return T},G=function(U){var T=[];U.replace(/(..)/g,function(V){T.push(parseInt(V,16))});return T},o=function(T,W){var V=[],U;if(!W){T=S(T)}for(U=0;U<T.length;U++){V[U]=T.charCodeAt(U)}return V},d=function(T){switch(T){case 128:p=10;w=4;break;case 192:p=12;w=6;break;case 256:p=14;w=8;break;default:throw ("Invalid Key Size Specified:"+T)}},u=function(U){var T=[],V;for(V=0;V<U;V++){T=T.concat(Math.floor(Math.random()*256))}return T},r=function(X,Z){var aa=p>=12?3:2,Y=[],V=[],T=[],ab=[],U=X.concat(Z),W;T[0]=GibberishAES.Hash.MD5(U);ab=T[0];for(W=1;W<aa;W++){T[W]=GibberishAES.Hash.MD5(T[W-1].concat(U));ab=ab.concat(T[W])}Y=ab.slice(0,4*w);V=ab.slice(4*w,4*w+16);return{key:Y,iv:V}},c=function(X,W,U){W=K(W);var Z=Math.ceil(X.length/16),Y=[],V,T=[];for(V=0;V<Z;V++){Y[V]=F(X.slice(V*16,V*16+16))}if(X.length%16===0){Y.push([16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]);Z++}for(V=0;V<Y.length;V++){Y[V]=(V===0)?E(Y[V],U):E(Y[V],T[V-1]);T[V]=e(Y[V],W)}return T},A=function(Z,aa,V,W){aa=K(aa);var ab=Z.length/16,U=[],X,T=[],Y="";for(X=0;X<ab;X++){U.push(Z.slice(X*16,(X+1)*16))}for(X=U.length-1;X>=0;X--){T[X]=J(U[X],aa);T[X]=(X===0)?E(T[X],V):E(T[X],U[X-1])}for(X=0;X<ab-1;X++){Y+=l(T[X])}Y+=l(T[X],true);return W?Y:P(Y)},e=function(W,V){g=false;var U=N(W,V,0),T;for(T=1;T<(p+1);T++){U=O(U);U=a(U);if(T<p){U=R(U)}U=N(U,V,T)}return U},J=function(W,V){g=true;var U=N(W,V,p),T;for(T=p-1;T>-1;T--){U=a(U);U=O(U);U=N(U,V,T);if(T>0){U=R(U)}}return U},O=function(W){var V=g?D:Q,T=[],U;for(U=0;U<16;U++){T[U]=V[W[U]]}return T},a=function(W){var T=[],V=g?[0,13,10,7,4,1,14,11,8,5,2,15,12,9,6,3]:[0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11],U;for(U=0;U<16;U++){T[U]=W[V[U]]}return T},R=function(U){var T=[],V;if(!g){for(V=0;V<4;V++){T[V*4]=B[U[V*4]]^f[U[1+V*4]]^U[2+V*4]^U[3+V*4];T[1+V*4]=U[V*4]^B[U[1+V*4]]^f[U[2+V*4]]^U[3+V*4];T[2+V*4]=U[V*4]^U[1+V*4]^B[U[2+V*4]]^f[U[3+V*4]];T[3+V*4]=f[U[V*4]]^U[1+V*4]^U[2+V*4]^B[U[3+V*4]]}}else{for(V=0;V<4;V++){T[V*4]=n[U[V*4]]^k[U[1+V*4]]^I[U[2+V*4]]^h[U[3+V*4]];T[1+V*4]=h[U[V*4]]^n[U[1+V*4]]^k[U[2+V*4]]^I[U[3+V*4]];T[2+V*4]=I[U[V*4]]^h[U[1+V*4]]^n[U[2+V*4]]^k[U[3+V*4]];T[3+V*4]=k[U[V*4]]^I[U[1+V*4]]^h[U[2+V*4]]^n[U[3+V*4]]}}return T},N=function(W,X,U){var T=[],V;for(V=0;V<16;V++){T[V]=W[V]^X[U][V]}return T},E=function(W,V){var T=[],U;for(U=0;U<16;U++){T[U]=W[U]^V[U]}return T},K=function(Y){var T=[],U=[],X,Z,W,aa=[],V;for(X=0;X<w;X++){Z=[Y[4*X],Y[4*X+1],Y[4*X+2],Y[4*X+3]];T[X]=Z}for(X=w;X<(4*(p+1));X++){T[X]=[];for(W=0;W<4;W++){U[W]=T[X-1][W]}if(X%w===0){U=y(x(U));U[0]^=L[X/w-1]}else{if(w>6&&X%w==4){U=y(U)}}for(W=0;W<4;W++){T[X][W]=T[X-w][W]^U[W]}}for(X=0;X<(p+1);X++){aa[X]=[];for(V=0;V<4;V++){aa[X].push(T[X*4+V][0],T[X*4+V][1],T[X*4+V][2],T[X*4+V][3])}}return aa},y=function(T){for(var U=0;U<4;U++){T[U]=Q[T[U]]}return T},x=function(T){var V=T[0],U;for(U=0;U<4;U++){T[U]=T[U+1]}T[3]=V;return T},b=function(V,U){var T=[];for(i=0;i<V.length;i+=U){T[i/U]=parseInt(V.substr(i,U),16)}return T},j=function(T){var U=[];for(i=0;i<T.length;i++){U[T[i]]=i}return U},q=function(U,T){var W,V;V=0;for(W=0;W<8;W++){V=((T&1)==1)?V^U:V;U=(U>127)?283^(U<<1):(U<<1);T>>>=1}return V},C=function(T){var V=[];for(var U=0;U<256;U++){V[U]=q(T,U)}return V},Q=b("637c777bf26b6fc53001672bfed7ab76ca82c97dfa5947f0add4a2af9ca472c0b7fd9326363ff7cc34a5e5f171d8311504c723c31896059a071280e2eb27b27509832c1a1b6e5aa0523bd6b329e32f8453d100ed20fcb15b6acbbe394a4c58cfd0efaafb434d338545f9027f503c9fa851a3408f929d38f5bcb6da2110fff3d2cd0c13ec5f974417c4a77e3d645d197360814fdc222a908846eeb814de5e0bdbe0323a0a4906245cc2d3ac629195e479e7c8376d8dd54ea96c56f4ea657aae08ba78252e1ca6b4c6e8dd741f4bbd8b8a703eb5664803f60e613557b986c11d9ee1f8981169d98e949b1e87e9ce5528df8ca1890dbfe6426841992d0fb054bb16",2),D=j(Q),L=b("01020408102040801b366cd8ab4d9a2f5ebc63c697356ad4b37dfaefc591",2),B=C(2),f=C(3),h=C(9),k=C(11),I=C(13),n=C(14),t=function(X,aa,V){var W=u(8),Z=r(o(aa,V),W),ab=Z.key,U=Z.iv,T,Y=[[83,97,108,116,101,100,95,95].concat(W)];X=o(X,V);T=c(X,ab,U);T=Y.concat(T);return M.encode(T)},v=function(V,Y,aa){var U=M.decode(V),X=U.slice(8,16),Z=r(o(Y,aa),X),W=Z.key,T=Z.iv;U=U.slice(16,U.length);V=A(U,W,T,aa);return V},m=function(X){function W(at,ar){return(at<<ar)|(at>>>(32-ar))}function ac(aw,at){var ay,ar,av,ax,au;av=(aw&2147483648);ax=(at&2147483648);ay=(aw&1073741824);ar=(at&1073741824);au=(aw&1073741823)+(at&1073741823);if(ay&ar){return(au^2147483648^av^ax)}if(ay|ar){if(au&1073741824){return(au^3221225472^av^ax)}else{return(au^1073741824^av^ax)}}else{return(au^av^ax)}}function al(ar,au,at){return(ar&au)|((~ar)&at)}function ak(ar,au,at){return(ar&at)|(au&(~at))}function aj(ar,au,at){return(ar^au^at)}function Y(ar,au,at){return(au^(ar|(~at)))}function ae(au,at,ay,ax,ar,av,aw){au=ac(au,ac(ac(al(at,ay,ax),ar),aw));return ac(W(au,av),at)}function an(au,at,ay,ax,ar,av,aw){au=ac(au,ac(ac(ak(at,ay,ax),ar),aw));return ac(W(au,av),at)}function V(au,at,ay,ax,ar,av,aw){au=ac(au,ac(ac(aj(at,ay,ax),ar),aw));return ac(W(au,av),at)}function ad(au,at,ay,ax,ar,av,aw){au=ac(au,ac(ac(Y(at,ay,ax),ar),aw));return ac(W(au,av),at)}function af(ay){var az,av=ay.length,au=av+8,at=(au-(au%64))/64,ax=(at+1)*16,aA=[],ar=0,aw=0;while(aw<av){az=(aw-(aw%4))/4;ar=(aw%4)*8;aA[az]=(aA[az]|(ay[aw]<<ar));aw++}az=(aw-(aw%4))/4;ar=(aw%4)*8;aA[az]=aA[az]|(128<<ar);aA[ax-2]=av<<3;aA[ax-1]=av>>>29;return aA}function T(au){var av,ar,at=[];for(ar=0;ar<=3;ar++){av=(au>>>(ar*8))&255;at=at.concat(av)}return at}var ab=[],ah,ai,U,aa,ag,aq,ap,ao,am,Z=b("67452301efcdab8998badcfe10325476d76aa478e8c7b756242070dbc1bdceeef57c0faf4787c62aa8304613fd469501698098d88b44f7afffff5bb1895cd7be6b901122fd987193a679438e49b40821f61e2562c040b340265e5a51e9b6c7aad62f105d02441453d8a1e681e7d3fbc821e1cde6c33707d6f4d50d87455a14eda9e3e905fcefa3f8676f02d98d2a4c8afffa39428771f6816d9d6122fde5380ca4beea444bdecfa9f6bb4b60bebfbc70289b7ec6eaa127fad4ef308504881d05d9d4d039e6db99e51fa27cf8c4ac5665f4292244432aff97ab9423a7fc93a039655b59c38f0ccc92ffeff47d85845dd16fa87e4ffe2ce6e0a30143144e0811a1f7537e82bd3af2352ad7d2bbeb86d391",8);ab=af(X);aq=Z[0];ap=Z[1];ao=Z[2];am=Z[3];for(ah=0;ah<ab.length;ah+=16){ai=aq;U=ap;aa=ao;ag=am;aq=ae(aq,ap,ao,am,ab[ah+0],7,Z[4]);am=ae(am,aq,ap,ao,ab[ah+1],12,Z[5]);ao=ae(ao,am,aq,ap,ab[ah+2],17,Z[6]);ap=ae(ap,ao,am,aq,ab[ah+3],22,Z[7]);aq=ae(aq,ap,ao,am,ab[ah+4],7,Z[8]);am=ae(am,aq,ap,ao,ab[ah+5],12,Z[9]);ao=ae(ao,am,aq,ap,ab[ah+6],17,Z[10]);ap=ae(ap,ao,am,aq,ab[ah+7],22,Z[11]);aq=ae(aq,ap,ao,am,ab[ah+8],7,Z[12]);am=ae(am,aq,ap,ao,ab[ah+9],12,Z[13]);ao=ae(ao,am,aq,ap,ab[ah+10],17,Z[14]);ap=ae(ap,ao,am,aq,ab[ah+11],22,Z[15]);aq=ae(aq,ap,ao,am,ab[ah+12],7,Z[16]);am=ae(am,aq,ap,ao,ab[ah+13],12,Z[17]);ao=ae(ao,am,aq,ap,ab[ah+14],17,Z[18]);ap=ae(ap,ao,am,aq,ab[ah+15],22,Z[19]);aq=an(aq,ap,ao,am,ab[ah+1],5,Z[20]);am=an(am,aq,ap,ao,ab[ah+6],9,Z[21]);ao=an(ao,am,aq,ap,ab[ah+11],14,Z[22]);ap=an(ap,ao,am,aq,ab[ah+0],20,Z[23]);aq=an(aq,ap,ao,am,ab[ah+5],5,Z[24]);am=an(am,aq,ap,ao,ab[ah+10],9,Z[25]);ao=an(ao,am,aq,ap,ab[ah+15],14,Z[26]);ap=an(ap,ao,am,aq,ab[ah+4],20,Z[27]);aq=an(aq,ap,ao,am,ab[ah+9],5,Z[28]);am=an(am,aq,ap,ao,ab[ah+14],9,Z[29]);ao=an(ao,am,aq,ap,ab[ah+3],14,Z[30]);ap=an(ap,ao,am,aq,ab[ah+8],20,Z[31]);aq=an(aq,ap,ao,am,ab[ah+13],5,Z[32]);am=an(am,aq,ap,ao,ab[ah+2],9,Z[33]);ao=an(ao,am,aq,ap,ab[ah+7],14,Z[34]);ap=an(ap,ao,am,aq,ab[ah+12],20,Z[35]);aq=V(aq,ap,ao,am,ab[ah+5],4,Z[36]);am=V(am,aq,ap,ao,ab[ah+8],11,Z[37]);ao=V(ao,am,aq,ap,ab[ah+11],16,Z[38]);ap=V(ap,ao,am,aq,ab[ah+14],23,Z[39]);aq=V(aq,ap,ao,am,ab[ah+1],4,Z[40]);am=V(am,aq,ap,ao,ab[ah+4],11,Z[41]);ao=V(ao,am,aq,ap,ab[ah+7],16,Z[42]);ap=V(ap,ao,am,aq,ab[ah+10],23,Z[43]);aq=V(aq,ap,ao,am,ab[ah+13],4,Z[44]);am=V(am,aq,ap,ao,ab[ah+0],11,Z[45]);ao=V(ao,am,aq,ap,ab[ah+3],16,Z[46]);ap=V(ap,ao,am,aq,ab[ah+6],23,Z[47]);aq=V(aq,ap,ao,am,ab[ah+9],4,Z[48]);am=V(am,aq,ap,ao,ab[ah+12],11,Z[49]);ao=V(ao,am,aq,ap,ab[ah+15],16,Z[50]);ap=V(ap,ao,am,aq,ab[ah+2],23,Z[51]);aq=ad(aq,ap,ao,am,ab[ah+0],6,Z[52]);am=ad(am,aq,ap,ao,ab[ah+7],10,Z[53]);ao=ad(ao,am,aq,ap,ab[ah+14],15,Z[54]);ap=ad(ap,ao,am,aq,ab[ah+5],21,Z[55]);aq=ad(aq,ap,ao,am,ab[ah+12],6,Z[56]);am=ad(am,aq,ap,ao,ab[ah+3],10,Z[57]);ao=ad(ao,am,aq,ap,ab[ah+10],15,Z[58]);ap=ad(ap,ao,am,aq,ab[ah+1],21,Z[59]);aq=ad(aq,ap,ao,am,ab[ah+8],6,Z[60]);am=ad(am,aq,ap,ao,ab[ah+15],10,Z[61]);ao=ad(ao,am,aq,ap,ab[ah+6],15,Z[62]);ap=ad(ap,ao,am,aq,ab[ah+13],21,Z[63]);aq=ad(aq,ap,ao,am,ab[ah+4],6,Z[64]);am=ad(am,aq,ap,ao,ab[ah+11],10,Z[65]);ao=ad(ao,am,aq,ap,ab[ah+2],15,Z[66]);ap=ad(ap,ao,am,aq,ab[ah+9],21,Z[67]);aq=ac(aq,ai);ap=ac(ap,U);ao=ac(ao,aa);am=ac(am,ag)}return T(aq).concat(T(ap),T(ao),T(am))},H=function(Y,X,U){Y=o(Y);X=o(X);for(var W=X.length;W<32;W++){X[W]=0}if(U==null){U=genIV()}else{U=o(U);for(var W=U.length;W<16;W++){U[W]=0}}var V=c(Y,X,U);var T=[U];for(var W=0;W<V.length;W++){T[T.length]=V[W]}return M.encode(T)},z=function(Y,X){var W=M.decode(Y);var T=W.slice(0,16);var V=W.slice(16,W.length);X=o(X);for(var U=X.length;U<32;U++){X[U]=0}var Z=A(V,X,T,false);return Z},M=(function(){var T="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",V=T.split(""),U=function(X,ab){var ac=[],aa="",Z,Y;totalChunks=Math.floor(X.length*16/3);for(Z=0;Z<X.length*16;Z++){ac.push(X[Math.floor(Z/16)][Z%16])}for(Z=0;Z<ac.length;Z=Z+3){aa+=V[ac[Z]>>2];aa+=V[((ac[Z]&3)<<4)|(ac[Z+1]>>4)];if(!(ac[Z+1]===undefined)){aa+=V[((ac[Z+1]&15)<<2)|(ac[Z+2]>>6)]}else{aa+="="}if(!(ac[Z+2]===undefined)){aa+=V[ac[Z+2]&63]}else{aa+="="}}Y=aa.slice(0,64)+"\n";for(Z=1;Z<(Math.ceil(aa.length/64));Z++){Y+=aa.slice(Z*64,Z*64+64)+(Math.ceil(aa.length/64)==Z+1?"":"\n")}return Y},W=function(Y){Y=Y.replace(/\n/g,"");var aa=[],ab=[],X=[],Z;for(Z=0;Z<Y.length;Z=Z+4){ab[0]=T.indexOf(Y.charAt(Z));ab[1]=T.indexOf(Y.charAt(Z+1));ab[2]=T.indexOf(Y.charAt(Z+2));ab[3]=T.indexOf(Y.charAt(Z+3));X[0]=(ab[0]<<2)|(ab[1]>>4);X[1]=((ab[1]&15)<<4)|(ab[2]>>2);X[2]=((ab[2]&3)<<6)|ab[3];aa.push(X[0],X[1],X[2])}aa=aa.slice(0,aa.length-(aa.length%16));return aa};if(typeof Array.indexOf==="function"){T=V}return{encode:U,decode:W}})();return{size:d,h2a:G,expandKey:K,encryptBlock:e,decryptBlock:J,Decrypt:g,s2a:o,rawEncrypt:c,dec:v,openSSLKey:r,a2h:s,enc:t,Hash:{MD5:m},Base64:M}})();if(typeof define==="function"){define(function(){return GibberishAES})}; \ No newline at end of file
+(function(e,r){"object"==typeof exports?module.exports=r():"function"==typeof define&&define.amd?define(r):e.GibberishAES=r()})(this,function(){"use strict"
+var e=14,r=8,n=!1,f=function(e){try{return unescape(encodeURIComponent(e))}catch(r){throw"Error on UTF-8 encode"}},c=function(e){try{return decodeURIComponent(escape(e))}catch(r){throw"Bad Key"}},a=function(e){var r,n,f=[]
+e.length<16&&(r=16-e.length,f=[r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r])
+for(var n=0;n<e.length;n++)f[n]=e[n]
+return f},t=function(e,r){var n,f,c=""
+if(r){if(n=e[15],n>16)throw"Decryption error: Maybe bad key"
+if(16==n)return""
+for(var f=0;16-n>f;f++)c+=String.fromCharCode(e[f])}else for(var f=0;16>f;f++)c+=String.fromCharCode(e[f])
+return c},o=function(e){for(var r,n="",r=0;r<e.length;r++)n+=(e[r]<16?"0":"")+e[r].toString(16)
+return n},d=function(e){var r=[]
+return e.replace(/(..)/g,function(e){r.push(parseInt(e,16))}),r},u=function(e,r){var n,c=[]
+r||(e=f(e))
+for(var n=0;n<e.length;n++)c[n]=e.charCodeAt(n)
+return c},i=function(n){switch(n){case 128:e=10,r=4
+break
+case 192:e=12,r=6
+break
+case 256:e=14,r=8
+break
+default:throw"Invalid Key Size Specified:"+n}},b=function(e){for(var r,n=[],r=0;e>r;r++)n=n.concat(Math.floor(Math.random()*256))
+return n},h=function(n,f){var c,a=e>=12?3:2,t=[],o=[],d=[],u=[],i=n.concat(f)
+d[0]=GibberishAES.Hash.MD5(i),u=d[0]
+for(var c=1;a>c;c++)d[c]=GibberishAES.Hash.MD5(d[c-1].concat(i)),u=u.concat(d[c])
+return t=u.slice(0,4*r),o=u.slice(4*r,4*r+16),{key:t,iv:o}},v=function(e,r,n){r=A(r)
+for(var f,c=Math.ceil(e.length/16),t=[],o=[],f=0;c>f;f++)t[f]=a(e.slice(16*f,16*f+16))
+e.length%16===0&&(t.push([16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]),c++)
+for(var f=0;f<t.length;f++)t[f]=0===f?k(t[f],n):k(t[f],o[f-1]),o[f]=s(t[f],r)
+return o},l=function(e,r,n,f){r=A(r)
+for(var a,o=e.length/16,d=[],u=[],i="",a=0;o>a;a++)d.push(e.slice(16*a,16*(a+1)))
+for(var a=d.length-1;a>=0;a--)u[a]=p(d[a],r),u[a]=0===a?k(u[a],n):k(u[a],d[a-1])
+for(var a=0;o-1>a;a++)i+=t(u[a])
+return i+=t(u[a],!0),f?i:c(i)},s=function(r,f){n=!1
+var c,a=S(r,f,0)
+for(c=1;e+1>c;c++)a=g(a),a=y(a),e>c&&(a=M(a)),a=S(a,f,c)
+return a},p=function(r,f){n=!0
+var c,a=S(r,f,e)
+for(c=e-1;c>-1;c--)a=y(a),a=g(a),a=S(a,f,c),c>0&&(a=M(a))
+return a},g=function(e){for(var r,f=n?O:I,c=[],r=0;16>r;r++)c[r]=f[e[r]]
+return c},y=function(e){for(var r,f=[],c=n?[0,13,10,7,4,1,14,11,8,5,2,15,12,9,6,3]:[0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11],r=0;16>r;r++)f[r]=e[c[r]]
+return f},M=function(e){var r,f=[]
+if(n)for(r=0;4>r;r++)f[4*r]=R[e[4*r]]^U[e[1+4*r]]^z[e[2+4*r]]^H[e[3+4*r]],f[1+4*r]=H[e[4*r]]^R[e[1+4*r]]^U[e[2+4*r]]^z[e[3+4*r]],f[2+4*r]=z[e[4*r]]^H[e[1+4*r]]^R[e[2+4*r]]^U[e[3+4*r]],f[3+4*r]=U[e[4*r]]^z[e[1+4*r]]^H[e[2+4*r]]^R[e[3+4*r]]
+else for(r=0;4>r;r++)f[4*r]=K[e[4*r]]^G[e[1+4*r]]^e[2+4*r]^e[3+4*r],f[1+4*r]=e[4*r]^K[e[1+4*r]]^G[e[2+4*r]]^e[3+4*r],f[2+4*r]=e[4*r]^e[1+4*r]^K[e[2+4*r]]^G[e[3+4*r]],f[3+4*r]=G[e[4*r]]^e[1+4*r]^e[2+4*r]^K[e[3+4*r]]
+return f},S=function(e,r,n){for(var f,c=[],f=0;16>f;f++)c[f]=e[f]^r[n][f]
+return c},k=function(e,r){for(var n,f=[],n=0;16>n;n++)f[n]=e[n]^r[n]
+return f},A=function(n){for(var f,c,a,t,o=[],d=[],u=[],f=0;r>f;f++)c=[n[4*f],n[4*f+1],n[4*f+2],n[4*f+3]],o[f]=c
+for(var f=r;4*(e+1)>f;f++){for(o[f]=[],a=0;4>a;a++)d[a]=o[f-1][a]
+for(0===f%r?(d=x(m(d)),d[0]^=B[f/r-1]):r>6&&4==f%r&&(d=x(d)),a=0;4>a;a++)o[f][a]=o[f-r][a]^d[a]}for(var f=0;e+1>f;f++)for(u[f]=[],t=0;4>t;t++)u[f].push(o[4*f+t][0],o[4*f+t][1],o[4*f+t][2],o[4*f+t][3])
+return u},x=function(e){for(var r=0;4>r;r++)e[r]=I[e[r]]
+return e},m=function(e){for(var r,n=e[0],r=0;4>r;r++)e[r]=e[r+1]
+return e[3]=n,e},w=function(e,r){for(var n=[],f=0;f<e.length;f+=r)n[f/r]=parseInt(e.substr(f,r),16)
+return n},C=function(e){for(var r=[],n=0;n<e.length;n++)r[e[n]]=n
+return r},D=function(e,r){var n,f
+f=0
+for(var n=0;8>n;n++)f=1==(1&r)?f^e:f,e=e>127?283^e<<1:e<<1,r>>>=1
+return f},E=function(e){for(var r=[],n=0;256>n;n++)r[n]=D(e,n)
+return r},I=w("637c777bf26b6fc53001672bfed7ab76ca82c97dfa5947f0add4a2af9ca472c0b7fd9326363ff7cc34a5e5f171d8311504c723c31896059a071280e2eb27b27509832c1a1b6e5aa0523bd6b329e32f8453d100ed20fcb15b6acbbe394a4c58cfd0efaafb434d338545f9027f503c9fa851a3408f929d38f5bcb6da2110fff3d2cd0c13ec5f974417c4a77e3d645d197360814fdc222a908846eeb814de5e0bdbe0323a0a4906245cc2d3ac629195e479e7c8376d8dd54ea96c56f4ea657aae08ba78252e1ca6b4c6e8dd741f4bbd8b8a703eb5664803f60e613557b986c11d9ee1f8981169d98e949b1e87e9ce5528df8ca1890dbfe6426841992d0fb054bb16",2),O=C(I),B=w("01020408102040801b366cd8ab4d9a2f5ebc63c697356ad4b37dfaefc591",2),K=E(2),G=E(3),H=E(9),U=E(11),z=E(13),R=E(14),j=function(e,r,n){var f,c=b(8),a=h(u(r,n),c),t=a.key,o=a.iv,d=[[83,97,108,116,101,100,95,95].concat(c)]
+return e=u(e,n),f=v(e,t,o),f=d.concat(f),T.encode(f)},F=function(e,r,n){var f=T.decode(e),c=f.slice(8,16),a=h(u(r,n),c),t=a.key,o=a.iv
+return f=f.slice(16,f.length),e=l(f,t,o,n)},L=function(e){function r(e,r){return e<<r|e>>>32-r}function n(e,r){var n,f,c,a,t
+return c=2147483648&e,a=2147483648&r,n=1073741824&e,f=1073741824&r,t=(1073741823&e)+(1073741823&r),n&f?2147483648^t^c^a:n|f?1073741824&t?3221225472^t^c^a:1073741824^t^c^a:t^c^a}function f(e,r,n){return e&r|~e&n}function c(e,r,n){return e&n|r&~n}function a(e,r,n){return e^r^n}function t(e,r,n){return r^(e|~n)}function o(e,c,a,t,o,d,u){return e=n(e,n(n(f(c,a,t),o),u)),n(r(e,d),c)}function d(e,f,a,t,o,d,u){return e=n(e,n(n(c(f,a,t),o),u)),n(r(e,d),f)}function u(e,f,c,t,o,d,u){return e=n(e,n(n(a(f,c,t),o),u)),n(r(e,d),f)}function i(e,f,c,a,o,d,u){return e=n(e,n(n(t(f,c,a),o),u)),n(r(e,d),f)}function b(e){for(var r,n=e.length,f=n+8,c=(f-f%64)/64,a=16*(c+1),t=[],o=0,d=0;n>d;)r=(d-d%4)/4,o=8*(d%4),t[r]=t[r]|e[d]<<o,d++
+return r=(d-d%4)/4,o=8*(d%4),t[r]=t[r]|128<<o,t[a-2]=n<<3,t[a-1]=n>>>29,t}function h(e){var r,n,f=[]
+for(n=0;3>=n;n++)r=255&e>>>8*n,f=f.concat(r)
+return f}var v,l,s,p,g,y,M,S,k,A=[],x=w("67452301efcdab8998badcfe10325476d76aa478e8c7b756242070dbc1bdceeef57c0faf4787c62aa8304613fd469501698098d88b44f7afffff5bb1895cd7be6b901122fd987193a679438e49b40821f61e2562c040b340265e5a51e9b6c7aad62f105d02441453d8a1e681e7d3fbc821e1cde6c33707d6f4d50d87455a14eda9e3e905fcefa3f8676f02d98d2a4c8afffa39428771f6816d9d6122fde5380ca4beea444bdecfa9f6bb4b60bebfbc70289b7ec6eaa127fad4ef308504881d05d9d4d039e6db99e51fa27cf8c4ac5665f4292244432aff97ab9423a7fc93a039655b59c38f0ccc92ffeff47d85845dd16fa87e4ffe2ce6e0a30143144e0811a1f7537e82bd3af2352ad7d2bbeb86d391",8)
+for(A=b(e),y=x[0],M=x[1],S=x[2],k=x[3],v=0;v<A.length;v+=16)l=y,s=M,p=S,g=k,y=o(y,M,S,k,A[v+0],7,x[4]),k=o(k,y,M,S,A[v+1],12,x[5]),S=o(S,k,y,M,A[v+2],17,x[6]),M=o(M,S,k,y,A[v+3],22,x[7]),y=o(y,M,S,k,A[v+4],7,x[8]),k=o(k,y,M,S,A[v+5],12,x[9]),S=o(S,k,y,M,A[v+6],17,x[10]),M=o(M,S,k,y,A[v+7],22,x[11]),y=o(y,M,S,k,A[v+8],7,x[12]),k=o(k,y,M,S,A[v+9],12,x[13]),S=o(S,k,y,M,A[v+10],17,x[14]),M=o(M,S,k,y,A[v+11],22,x[15]),y=o(y,M,S,k,A[v+12],7,x[16]),k=o(k,y,M,S,A[v+13],12,x[17]),S=o(S,k,y,M,A[v+14],17,x[18]),M=o(M,S,k,y,A[v+15],22,x[19]),y=d(y,M,S,k,A[v+1],5,x[20]),k=d(k,y,M,S,A[v+6],9,x[21]),S=d(S,k,y,M,A[v+11],14,x[22]),M=d(M,S,k,y,A[v+0],20,x[23]),y=d(y,M,S,k,A[v+5],5,x[24]),k=d(k,y,M,S,A[v+10],9,x[25]),S=d(S,k,y,M,A[v+15],14,x[26]),M=d(M,S,k,y,A[v+4],20,x[27]),y=d(y,M,S,k,A[v+9],5,x[28]),k=d(k,y,M,S,A[v+14],9,x[29]),S=d(S,k,y,M,A[v+3],14,x[30]),M=d(M,S,k,y,A[v+8],20,x[31]),y=d(y,M,S,k,A[v+13],5,x[32]),k=d(k,y,M,S,A[v+2],9,x[33]),S=d(S,k,y,M,A[v+7],14,x[34]),M=d(M,S,k,y,A[v+12],20,x[35]),y=u(y,M,S,k,A[v+5],4,x[36]),k=u(k,y,M,S,A[v+8],11,x[37]),S=u(S,k,y,M,A[v+11],16,x[38]),M=u(M,S,k,y,A[v+14],23,x[39]),y=u(y,M,S,k,A[v+1],4,x[40]),k=u(k,y,M,S,A[v+4],11,x[41]),S=u(S,k,y,M,A[v+7],16,x[42]),M=u(M,S,k,y,A[v+10],23,x[43]),y=u(y,M,S,k,A[v+13],4,x[44]),k=u(k,y,M,S,A[v+0],11,x[45]),S=u(S,k,y,M,A[v+3],16,x[46]),M=u(M,S,k,y,A[v+6],23,x[47]),y=u(y,M,S,k,A[v+9],4,x[48]),k=u(k,y,M,S,A[v+12],11,x[49]),S=u(S,k,y,M,A[v+15],16,x[50]),M=u(M,S,k,y,A[v+2],23,x[51]),y=i(y,M,S,k,A[v+0],6,x[52]),k=i(k,y,M,S,A[v+7],10,x[53]),S=i(S,k,y,M,A[v+14],15,x[54]),M=i(M,S,k,y,A[v+5],21,x[55]),y=i(y,M,S,k,A[v+12],6,x[56]),k=i(k,y,M,S,A[v+3],10,x[57]),S=i(S,k,y,M,A[v+10],15,x[58]),M=i(M,S,k,y,A[v+1],21,x[59]),y=i(y,M,S,k,A[v+8],6,x[60]),k=i(k,y,M,S,A[v+15],10,x[61]),S=i(S,k,y,M,A[v+6],15,x[62]),M=i(M,S,k,y,A[v+13],21,x[63]),y=i(y,M,S,k,A[v+4],6,x[64]),k=i(k,y,M,S,A[v+11],10,x[65]),S=i(S,k,y,M,A[v+2],15,x[66]),M=i(M,S,k,y,A[v+9],21,x[67]),y=n(y,l),M=n(M,s),S=n(S,p),k=n(k,g)
+return h(y).concat(h(M),h(S),h(k))},T=function(){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=e.split(""),n=function(e){var n,f,c=[],a=""
+Math.floor(e.length*16/3)
+for(var n=0;n<e.length*16;n++)c.push(e[Math.floor(n/16)][n%16])
+for(var n=0;n<c.length;n+=3)a+=r[c[n]>>2],a+=r[(c[n]&3)<<4|c[n+1]>>4],a+=c[n+1]!==void 0?r[(c[n+1]&15)<<2|c[n+2]>>6]:"=",a+=c[n+2]!==void 0?r[c[n+2]&63]:"="
+f=a.slice(0,64)+"\n"
+for(var n=1;n<Math.ceil(a.length/64);n++)f+=a.slice(64*n,64*n+64)+(Math.ceil(a.length/64)==n+1?"":"\n")
+return f},f=function(r){r=r.replace(/\n/g,"")
+for(var n,f=[],c=[],a=[],n=0;n<r.length;n+=4)c[0]=e.indexOf(r.charAt(n)),c[1]=e.indexOf(r.charAt(n+1)),c[2]=e.indexOf(r.charAt(n+2)),c[3]=e.indexOf(r.charAt(n+3)),a[0]=c[0]<<2|c[1]>>4,a[1]=(c[1]&15)<<4|c[2]>>2,a[2]=(c[2]&3)<<6|c[3],f.push(a[0],a[1],a[2])
+return f=f.slice(0,f.length-f.length%16)}
+return typeof Array.indexOf=="function"&&(e=r),{encode:n,decode:f}}()
+return{size:i,h2a:d,expandKey:A,encryptBlock:s,decryptBlock:p,Decrypt:n,s2a:u,rawEncrypt:v,rawDecrypt:l,dec:F,openSSLKey:h,a2h:o,enc:j,Hash:{MD5:L},Base64:T}})