forked from pubnub/javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpubnub-crypto.min.js
More file actions
26 lines (26 loc) · 11.8 KB
/
Copy pathpubnub-crypto.min.js
File metadata and controls
26 lines (26 loc) · 11.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(function(){
PUBNUB.crypto=function(){var e=14,p=8,s=!1,v=function(b,g){var c="",d,r;if(g){d=b[15];if(16<d)throw"Decryption error: Maybe bad key";if(16==d)return"";for(r=0;r<16-d;r++)c+=String.fromCharCode(b[r])}else for(r=0;16>r;r++)c+=String.fromCharCode(b[r]);return c},u=function(b,g){var c=[],d;if(!g)try{b=unescape(encodeURIComponent(b))}catch(r){throw"Error on UTF-8 encode";}for(d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c},f=function(b,g){var c=12<=e?3:2,d=[],r=[],d=[],r=[],S=b.concat(g),f;d[0]=GibberishAES.Hash.MD5(S);
r=d[0];for(f=1;f<c;f++)d[f]=GibberishAES.Hash.MD5(d[f-1].concat(S)),r=r.concat(d[f]);d=r.slice(0,4*p);r=r.slice(4*p,4*p+16);return{key:d,iv:r}},q=function(b,g,c){var g=x(g),d=Math.ceil(b.length/16),r=[],e,f=[];for(e=0;e<d;e++){var m=r,p=e,q=b.slice(16*e,16*e+16),w=[],t=void 0,t=void 0;16>q.length&&(t=16-q.length,w=[t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t]);for(t=0;t<q.length;t++)w[t]=q[t];m[p]=w}0===b.length%16&&r.push([16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]);for(e=0;e<r.length;e++)r[e]=0===e?A(r[e],
c):A(r[e],f[e-1]),f[e]=B(r[e],g);return f},w=function(b,g,c,d){var g=x(g),r=b.length/16,e=[],f,m=[],p="";for(f=0;f<r;f++)e.push(b.slice(16*f,16*(f+1)));for(f=e.length-1;0<=f;f--)m[f]=E(e[f],g),m[f]=0===f?A(m[f],c):A(m[f],e[f-1]);for(f=0;f<r-1;f++)p+=v(m[f]);var p=p+v(m[f],!0),q;if(d)q=p;else try{q=decodeURIComponent(escape(p))}catch(w){throw"Bad Key";}return q},B=function(b,g){s=!1;var c=y(b,g,0),d;for(d=1;d<e+1;d++)c=z(c),c=C(c),d<e&&(c=D(c)),c=y(c,g,d);return c},E=function(b,g){s=!0;var c=y(b,g,
e),d;for(d=e-1;-1<d;d--)c=C(c),c=z(c),c=y(c,g,d),0<d&&(c=D(c));return c},z=function(b){var g=s?T:R,c=[],d;for(d=0;16>d;d++)c[d]=g[b[d]];return c},C=function(b){var g=[],c=s?[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],d;for(d=0;16>d;d++)g[d]=b[c[d]];return g},D=function(b){var g=[],c;if(s)for(c=0;4>c;c++)g[4*c]=K[b[4*c]]^L[b[1+4*c]]^M[b[2+4*c]]^N[b[3+4*c]],g[1+4*c]=N[b[4*c]]^K[b[1+4*c]]^L[b[2+4*c]]^M[b[3+4*c]],g[2+4*c]=M[b[4*c]]^N[b[1+4*c]]^K[b[2+4*c]]^L[b[3+4*c]],
g[3+4*c]=L[b[4*c]]^M[b[1+4*c]]^N[b[2+4*c]]^K[b[3+4*c]];else for(c=0;4>c;c++)g[4*c]=O[b[4*c]]^P[b[1+4*c]]^b[2+4*c]^b[3+4*c],g[1+4*c]=b[4*c]^O[b[1+4*c]]^P[b[2+4*c]]^b[3+4*c],g[2+4*c]=b[4*c]^b[1+4*c]^O[b[2+4*c]]^P[b[3+4*c]],g[3+4*c]=P[b[4*c]]^b[1+4*c]^b[2+4*c]^O[b[3+4*c]];return g},y=function(b,g,c){var d=[],r;for(r=0;16>r;r++)d[r]=b[r]^g[c][r];return d},A=function(b,g){var c=[],d;for(d=0;16>d;d++)c[d]=b[d]^g[d];return c},x=function(b){var g=[],c=[],d,r,f=[];for(d=0;d<p;d++)r=[b[4*d],b[4*d+1],b[4*d+
2],b[4*d+3]],g[d]=r;for(d=p;d<4*(e+1);d++){g[d]=[];for(b=0;4>b;b++)c[b]=g[d-1][b];if(0===d%p){b=c[0];r=void 0;for(r=0;4>r;r++)c[r]=c[r+1];c[3]=b;c=F(c);c[0]^=W[d/p-1]}else 6<p&&4==d%p&&(c=F(c));for(b=0;4>b;b++)g[d][b]=g[d-p][b]^c[b]}for(d=0;d<e+1;d++){f[d]=[];for(c=0;4>c;c++)f[d].push(g[4*d+c][0],g[4*d+c][1],g[4*d+c][2],g[4*d+c][3])}return f},F=function(b){for(var g=0;4>g;g++)b[g]=R[b[g]];return b},G=function(b,g){var c=[];for(i=0;i<b.length;i+=g)c[i/g]=parseInt(b.substr(i,g),16);return c},H=function(b){for(var g=
[],c=0;256>c;c++){for(var d=g,r=c,e=b,f=c,m=void 0,p=void 0,m=p=0;8>m;m++)p=1==(f&1)?p^e:p,e=127<e?283^e<<1:e<<1,f>>>=1;d[r]=p}return g},R=G("637c777bf26b6fc53001672bfed7ab76ca82c97dfa5947f0add4a2af9ca472c0b7fd9326363ff7cc34a5e5f171d8311504c723c31896059a071280e2eb27b27509832c1a1b6e5aa0523bd6b329e32f8453d100ed20fcb15b6acbbe394a4c58cfd0efaafb434d338545f9027f503c9fa851a3408f929d38f5bcb6da2110fff3d2cd0c13ec5f974417c4a77e3d645d197360814fdc222a908846eeb814de5e0bdbe0323a0a4906245cc2d3ac629195e479e7c8376d8dd54ea96c56f4ea657aae08ba78252e1ca6b4c6e8dd741f4bbd8b8a703eb5664803f60e613557b986c11d9ee1f8981169d98e949b1e87e9ce5528df8ca1890dbfe6426841992d0fb054bb16",
2),T,U=R,V=[];for(i=0;i<U.length;i++)V[U[i]]=i;T=V;var W=G("01020408102040801b366cd8ab4d9a2f5ebc63c697356ad4b37dfaefc591",2),O=H(2),P=H(3),N=H(9),L=H(11),M=H(13),K=H(14),Q,I="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",J=I.split("");"function"===typeof Array.indexOf&&(I=J);Q={encode:function(b){var g=[],c="",d;totalChunks=Math.floor(16*b.length/3);for(d=0;d<16*b.length;d++)g.push(b[Math.floor(d/16)][d%16]);for(d=0;d<g.length;d+=3)c+=J[g[d]>>2],c+=J[(g[d]&3)<<4|g[d+1]>>4],c=void 0!==
g[d+1]?c+J[(g[d+1]&15)<<2|g[d+2]>>6]:c+"=",c=void 0!==g[d+2]?c+J[g[d+2]&63]:c+"=";b=c.slice(0,64);for(d=1;d<Math.ceil(c.length/64);d++)b+=c.slice(64*d,64*d+64)+(Math.ceil(c.length/64)==d+1?"":"\n");return b},decode:function(b){var b=b.replace(/\n/g,""),g=[],c=[],d=[],e;for(e=0;e<b.length;e+=4)c[0]=I.indexOf(b.charAt(e)),c[1]=I.indexOf(b.charAt(e+1)),c[2]=I.indexOf(b.charAt(e+2)),c[3]=I.indexOf(b.charAt(e+3)),d[0]=c[0]<<2|c[1]>>4,d[1]=(c[1]&15)<<4|c[2]>>2,d[2]=(c[2]&3)<<6|c[3],g.push(d[0],d[1],d[2]);
return g=g.slice(0,g.length-g.length%16)}};return{size:function(b){switch(b){case 128:e=10;p=4;break;case 192:e=12;p=6;break;case 256:e=14;p=8;break;default:throw"Invalid Key Size Specified:"+b;}},h2a:function(b){var g=[];b.replace(/(..)/g,function(b){g.push(parseInt(b,16))});return g},expandKey:x,encryptBlock:B,decryptBlock:E,Decrypt:s,s2a:u,rawEncrypt:q,rawDecrypt:w,dec:function(b,g,c){var b=Q.decode(b),d=b.slice(8,16),d=f(u(g,c),d),g=d.key,d=d.iv,b=b.slice(16,b.length);return b=w(b,g,d,c)},openSSLKey:f,
a2h:function(b){var g="",c;for(c=0;c<b.length;c++)g+=(16>b[c]?"0":"")+b[c].toString(16);return g},enc:function(b,g,c){var d;d=[];var e;for(e=0;8>e;e++)d=d.concat(Math.floor(256*Math.random()));e=f(u(g,c),d);g=e.key;e=e.iv;d=[[83,97,108,116,101,100,95,95].concat(d)];b=u(b,c);b=q(b,g,e);b=d.concat(b);return Q.encode(b)},Hash:{MD5:function(b){function g(b,c){var d,e,g,f,h;g=b&2147483648;f=c&2147483648;d=b&1073741824;e=c&1073741824;h=(b&1073741823)+(c&1073741823);return d&e?h^2147483648^g^f:d|e?h&1073741824?
h^3221225472^g^f:h^1073741824^g^f:h^g^f}function c(b,c,d,e,f,h,j){b=g(b,g(g(c&d|~c&e,f),j));return g(b<<h|b>>>32-h,c)}function d(b,c,d,e,f,h,j){b=g(b,g(g(c&e|d&~e,f),j));return g(b<<h|b>>>32-h,c)}function e(b,c,d,h,f,j,k){b=g(b,g(g(c^d^h,f),k));return g(b<<j|b>>>32-j,c)}function f(b,c,d,e,h,j,k){b=g(b,g(g(d^(c|~e),h),k));return g(b<<j|b>>>32-j,c)}function p(b){var c,d,e=[];for(d=0;3>=d;d++)c=b>>>8*d&255,e=e.concat(c);return e}var m=[],q,w,s,t,h,j,k,l,n=G("67452301efcdab8998badcfe10325476d76aa478e8c7b756242070dbc1bdceeef57c0faf4787c62aa8304613fd469501698098d88b44f7afffff5bb1895cd7be6b901122fd987193a679438e49b40821f61e2562c040b340265e5a51e9b6c7aad62f105d02441453d8a1e681e7d3fbc821e1cde6c33707d6f4d50d87455a14eda9e3e905fcefa3f8676f02d98d2a4c8afffa39428771f6816d9d6122fde5380ca4beea444bdecfa9f6bb4b60bebfbc70289b7ec6eaa127fad4ef308504881d05d9d4d039e6db99e51fa27cf8c4ac5665f4292244432aff97ab9423a7fc93a039655b59c38f0ccc92ffeff47d85845dd16fa87e4ffe2ce6e0a30143144e0811a1f7537e82bd3af2352ad7d2bbeb86d391",
8),m=b.length;q=m+8;w=16*((q-q%64)/64+1);s=[];for(h=t=0;h<m;)q=(h-h%4)/4,t=8*(h%4),s[q]|=b[h]<<t,h++;q=(h-h%4)/4;s[q]|=128<<8*(h%4);s[w-2]=m<<3;s[w-1]=m>>>29;m=s;h=n[0];j=n[1];k=n[2];l=n[3];for(b=0;b<m.length;b+=16)q=h,w=j,s=k,t=l,h=c(h,j,k,l,m[b+0],7,n[4]),l=c(l,h,j,k,m[b+1],12,n[5]),k=c(k,l,h,j,m[b+2],17,n[6]),j=c(j,k,l,h,m[b+3],22,n[7]),h=c(h,j,k,l,m[b+4],7,n[8]),l=c(l,h,j,k,m[b+5],12,n[9]),k=c(k,l,h,j,m[b+6],17,n[10]),j=c(j,k,l,h,m[b+7],22,n[11]),h=c(h,j,k,l,m[b+8],7,n[12]),l=c(l,h,j,k,m[b+9],
12,n[13]),k=c(k,l,h,j,m[b+10],17,n[14]),j=c(j,k,l,h,m[b+11],22,n[15]),h=c(h,j,k,l,m[b+12],7,n[16]),l=c(l,h,j,k,m[b+13],12,n[17]),k=c(k,l,h,j,m[b+14],17,n[18]),j=c(j,k,l,h,m[b+15],22,n[19]),h=d(h,j,k,l,m[b+1],5,n[20]),l=d(l,h,j,k,m[b+6],9,n[21]),k=d(k,l,h,j,m[b+11],14,n[22]),j=d(j,k,l,h,m[b+0],20,n[23]),h=d(h,j,k,l,m[b+5],5,n[24]),l=d(l,h,j,k,m[b+10],9,n[25]),k=d(k,l,h,j,m[b+15],14,n[26]),j=d(j,k,l,h,m[b+4],20,n[27]),h=d(h,j,k,l,m[b+9],5,n[28]),l=d(l,h,j,k,m[b+14],9,n[29]),k=d(k,l,h,j,m[b+3],14,n[30]),
j=d(j,k,l,h,m[b+8],20,n[31]),h=d(h,j,k,l,m[b+13],5,n[32]),l=d(l,h,j,k,m[b+2],9,n[33]),k=d(k,l,h,j,m[b+7],14,n[34]),j=d(j,k,l,h,m[b+12],20,n[35]),h=e(h,j,k,l,m[b+5],4,n[36]),l=e(l,h,j,k,m[b+8],11,n[37]),k=e(k,l,h,j,m[b+11],16,n[38]),j=e(j,k,l,h,m[b+14],23,n[39]),h=e(h,j,k,l,m[b+1],4,n[40]),l=e(l,h,j,k,m[b+4],11,n[41]),k=e(k,l,h,j,m[b+7],16,n[42]),j=e(j,k,l,h,m[b+10],23,n[43]),h=e(h,j,k,l,m[b+13],4,n[44]),l=e(l,h,j,k,m[b+0],11,n[45]),k=e(k,l,h,j,m[b+3],16,n[46]),j=e(j,k,l,h,m[b+6],23,n[47]),h=e(h,j,
k,l,m[b+9],4,n[48]),l=e(l,h,j,k,m[b+12],11,n[49]),k=e(k,l,h,j,m[b+15],16,n[50]),j=e(j,k,l,h,m[b+2],23,n[51]),h=f(h,j,k,l,m[b+0],6,n[52]),l=f(l,h,j,k,m[b+7],10,n[53]),k=f(k,l,h,j,m[b+14],15,n[54]),j=f(j,k,l,h,m[b+5],21,n[55]),h=f(h,j,k,l,m[b+12],6,n[56]),l=f(l,h,j,k,m[b+3],10,n[57]),k=f(k,l,h,j,m[b+10],15,n[58]),j=f(j,k,l,h,m[b+1],21,n[59]),h=f(h,j,k,l,m[b+8],6,n[60]),l=f(l,h,j,k,m[b+15],10,n[61]),k=f(k,l,h,j,m[b+6],15,n[62]),j=f(j,k,l,h,m[b+13],21,n[63]),h=f(h,j,k,l,m[b+4],6,n[64]),l=f(l,h,j,k,m[b+
11],10,n[65]),k=f(k,l,h,j,m[b+2],15,n[66]),j=f(j,k,l,h,m[b+9],21,n[67]),h=g(h,q),j=g(j,w),k=g(k,s),l=g(l,t);return p(h).concat(p(j),p(k),p(l))}},Base64:Q}}();
PUBNUB.secure=function(){function e(e){var p=s.s2a(JSON.stringify(e)),p=s.rawEncrypt(p,v,u);return s.Base64.encode(p)||e.data.message}function p(e){try{var p=s.Base64.decode(e),w=s.rawDecrypt(p,v,u,!1);return JSON.parse(w)}catch(B){}}var s=PUBNUB.crypto;s.size(256);var v="",u=s.s2a("0123456789012345");return function(f){if(!("cipher_key"in f))throw"Missing 'cipher_key' in PUBNUB.secure({})";v=s.s2a(SHA256(f.cipher_key).slice(0,32));var q=PUBNUB.init(f);return{raw_encrypt:e,raw_decrypt:p,ready:q.ready,
time:PUBNUB.time,publish:function(f){f.message=e(f.message);return q.publish(f)},unsubscribe:function(e){return q.unsubscribe(e)},subscribe:function(e){var f=e.callback||e.message;e.callback=function(q,s,u,v){var y=p(q);"undefined"!==typeof y?f(y,s,u,v):e.error&&e.error({error:"DECRYPT_ERROR",message:q})};return q.subscribe(e)},history:function(e){var f="",s=e.callback,u=e.error;e.callback=function(e){f=e[0];var q=[],v=[];for(a=0;a<f.length;a++){var w=p(f[a]);w?q.push(w):v.push({error:"DECRYPT_ERROR",
message:f[a]})}s([q,e[1],e[2]]);u&&u([v,e[1],e[2]])};q.history(e);return!0}}}}();
function SHA256(e){function p(e,f){var p=(e&65535)+(f&65535);return(e>>16)+(f>>16)+(p>>16)<<16|p&65535}function s(e,f){return e>>>f|e<<32-f}var v;v=e.replace(/\r\n/g,"\n");for(var e="",u=0;u<v.length;u++){var f=v.charCodeAt(u);128>f?e+=String.fromCharCode(f):(127<f&&2048>f?e+=String.fromCharCode(f>>6|192):(e+=String.fromCharCode(f>>12|224),e+=String.fromCharCode(f>>6&63|128)),e+=String.fromCharCode(f&63|128))}u=e;v=[];for(f=0;f<8*u.length;f+=8)v[f>>5]|=(u.charCodeAt(f/8)&255)<<24-f%32;var q=8*e.length,
u=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,
275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],e=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],f=Array(64),w,B,E,z,C,D,y,A,x,F,G;v[q>>5]|=128<<24-q%32;v[(q+64>>9<<4)+15]=q;for(A=0;A<v.length;A+=16){q=e[0];w=e[1];B=e[2];E=e[3];z=e[4];C=e[5];D=e[6];y=e[7];for(x=0;64>x;x++)f[x]=16>x?v[x+A]:p(p(p(s(f[x-2],17)^s(f[x-2],19)^f[x-
2]>>>10,f[x-7]),s(f[x-15],7)^s(f[x-15],18)^f[x-15]>>>3),f[x-16]),F=p(p(p(p(y,s(z,6)^s(z,11)^s(z,25)),z&C^~z&D),u[x]),f[x]),G=p(s(q,2)^s(q,13)^s(q,22),q&w^q&B^w&B),y=D,D=C,C=z,z=p(E,F),E=B,B=w,w=q,q=p(F,G);e[0]=p(q,e[0]);e[1]=p(w,e[1]);e[2]=p(B,e[2]);e[3]=p(E,e[3]);e[4]=p(z,e[4]);e[5]=p(C,e[5]);e[6]=p(D,e[6]);e[7]=p(y,e[7])}v="";for(u=0;u<4*e.length;u++)v+="0123456789abcdef".charAt(e[u>>2]>>8*(3-u%4)+4&15)+"0123456789abcdef".charAt(e[u>>2]>>8*(3-u%4)&15);return v};
})();