Last active
February 4, 2017 14:59
-
-
Save onlurking/e1852f431085bcc57e8b299e011dd904 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script language= "JavaScript"> | |
eval(function(p, a, c, k, e, r) { | |
e = function(c) { | |
return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) | |
}; | |
if (!''.replace(/^/, String)) { | |
while (c--) r[e(c)] = k[c] || e(c); | |
k = [function(e) { | |
return r[e] | |
}]; | |
e = function() { | |
return '\\w+' | |
}; | |
c = 1 | |
}; | |
while (c--) | |
if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); | |
return p | |
}('h A=Z;h X=l u();o K(x,n){q l w((x<<n)|(x>>>(Q-n)))}o F(x,y,z){q l w(x^y^z)}o G(x,y,z){q l w((x&y)|(~x&z))}o H(x,y,z){q l w((x|~y)^z)}o I(x,y,z){q l w((x&z)|(y&~z))}o J(x,y,z){q l w(x^(y|~z))}o P(a,b,c,d,e,x,s,f){18(f){t 0:a+=F(b,c,d)+x+T;r;t 1:a+=G(b,c,d)+x+1c;r;t 2:a+=H(b,c,d)+x+1g;r;t 3:a+=I(b,c,d)+x+1a;r;t 4:a+=J(b,c,d)+x+1i;r;t 5:a+=J(b,c,d)+x+1m;r;t 6:a+=I(b,c,d)+x+1e;r;t 7:a+=H(b,c,d)+x+1k;r;t 8:a+=G(b,c,d)+x+1o;r;t 9:a+=F(b,c,d)+x+T;r;17:1n.1u("1w 1y 1A");r}a=K(a,s)+e;c=K(c,10);a&=B;b&=B;c&=B;d&=B;e&=B;h g=l u();g[0]=a;g[1]=b;g[2]=c;g[3]=d;g[4]=e;g[5]=x;g[6]=s;q g}o R(a){a[0]=1f;a[1]=1s;a[2]=1b;a[3]=1j;a[4]=1q}h L=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12],[11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5],[11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12],[9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6],[9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11],[9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5],[15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8],[8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]];h N=[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8],[3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12],[1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2],[4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12],[6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2],[15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13],[8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14],[12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]];o D(a,X){m=l u();k=l u();h b;p(h i=0;i<5;i++){m[i]=l w(a[i]);k[i]=l w(a[i])}h c=0;p(h j=0;j<5;j++){p(h i=0;i<16;i++){b=P(m[(c+0)%5],m[(c+1)%5],m[(c+2)%5],m[(c+3)%5],m[(c+4)%5],X[N[j][i]],L[j][i],j);m[(c+0)%5]=b[0];m[(c+1)%5]=b[1];m[(c+2)%5]=b[2];m[(c+3)%5]=b[3];m[(c+4)%5]=b[4];c+=4}}c=0;p(h j=5;j<10;j++){p(h i=0;i<16;i++){b=P(k[(c+0)%5],k[(c+1)%5],k[(c+2)%5],k[(c+3)%5],k[(c+4)%5],X[N[j][i]],L[j][i],j);k[(c+0)%5]=b[0];k[(c+1)%5]=b[1];k[(c+2)%5]=b[2];k[(c+3)%5]=b[3];k[(c+4)%5]=b[4];c+=4}}k[3]+=m[2]+a[1];a[1]=a[2]+m[3]+k[4];a[2]=a[3]+m[4]+k[0];a[3]=a[4]+m[0]+k[1];a[4]=a[0]+m[1]+k[2];a[0]=k[3]}o E(X){p(h i=0;i<16;i++){X[i]=0}}o S(a,b,c,d){h X=l u(16);E(X);h j=0;p(h i=0;i<(c&M);i++){X[i>>>2]^=(b.C(j++)&v)<<(8*(i&3))}X[(c>>>2)&15]^=1<<(8*(c&3)+7);19((c&M)>1p){D(a,X);h X=l u(16);E(X)}X[14]=c<<3;X[15]=(c>>>1h)|(d<<3);D(a,X)}o V(a){h b=(a.C(3)&v)<<U;b|=(a.C(2)&v)<<16;b|=(a.C(1)&v)<<8;b|=(a.C(0)&v);q b}o Y(a){h b=l u(A/Q);h c=l u(A/8);h d;h e;R(b);d=a.1d;h X=l u(16);E(X);h j=0;p(h e=d;e>M;e-=1l){p(h i=0;i<16;i++){X[i]=V(a.W(j,4));j+=4}D(b,X)}S(b,a.W(j),d,0);p(h i=0;i<A/8;i+=4){c[i]=b[i>>>2]&v;c[i+1]=(b[i>>>2]>>>8)&v;c[i+2]=(b[i>>>2]>>>16)&v;c[i+3]=(b[i>>>2]>>>U)&v}q c}o O(x){h a="1r";h b="";p(h i=0;i<2;i++){b=1t(a.1v(x&1x)).1z(b);x>>>=4}q b}o 1B(a){h b="";p(h i=0;i<A/8;i++){b+=O(a[i])}q b}o 1C(a){h b=Y(a);h c="";p(h i=0;i<A/8;i++){c+=O(b[i])}q c}', 62, 101, '|||||||||||||||||var|||blockB|new|blockA||function|for|return|break||case|Array|255|Number||||RMDsize|0xffffffff|charCodeAt|compress|zeroX||||||ROL|ROLs|63|indexes|toHex32|mixOneRound|32|MDinit|MDfinish|0x00000000|24|BYTES_TO_DWORD|substr||RMD|160||||||||default|switch|if|0x8f1bbcdc|0x98badcfe|0x5a827999|length|0x5c4dd124|0x67452301|0x6ed9eba1|29|0xa953fd4e|0x10325476|0x6d703ef3|64|0x50a28be6|document|0x7a6d76e9|55|0xc3d2e1f0|0123456789abcdef|0xefcdab89|String|write|charAt|Bogus|0xf|round|concat|number|toRMDstring|RMDstring'.split('|'), 0, {})); < /script> | |
var RMDsize = 160; | |
var X = new Array(); | |
function ROL(x, n) { | |
return new Number((x << n) | (x >>> (32 - n))) | |
} | |
function F(x, y, z) { | |
return new Number(x ^ y ^ z) | |
} | |
function G(x, y, z) { | |
return new Number((x & y) | (~x & z)) | |
} | |
function H(x, y, z) { | |
return new Number((x | ~y) ^ z) | |
} | |
function I(x, y, z) { | |
return new Number((x & z) | (y & ~z)) | |
} | |
function J(x, y, z) { | |
return new Number(x ^ (y | ~z)) | |
} | |
function mixOneRound(a, b, c, d, e, x, s, f) { | |
switch (f) { | |
case 0: | |
a += F(b, c, d) + x + 0x00000000; | |
break; | |
case 1: | |
a += G(b, c, d) + x + 0x5a827999; | |
break; | |
case 2: | |
a += H(b, c, d) + x + 0x6ed9eba1; | |
break; | |
case 3: | |
a += I(b, c, d) + x + 0x8f1bbcdc; | |
break; | |
case 4: | |
a += J(b, c, d) + x + 0xa953fd4e; | |
break; | |
case 5: | |
a += J(b, c, d) + x + 0x50a28be6; | |
break; | |
case 6: | |
a += I(b, c, d) + x + 0x5c4dd124; | |
break; | |
case 7: | |
a += H(b, c, d) + x + 0x6d703ef3; | |
break; | |
case 8: | |
a += G(b, c, d) + x + 0x7a6d76e9; | |
break; | |
case 9: | |
a += F(b, c, d) + x + 0x00000000; | |
break; | |
default: | |
document.write("Bogus round number"); | |
break | |
} | |
a = ROL(a, s) + e; | |
c = ROL(c, 10); | |
a &= 0xffffffff; | |
b &= 0xffffffff; | |
c &= 0xffffffff; | |
d &= 0xffffffff; | |
e &= 0xffffffff; | |
var g = new Array(); | |
g[0] = a; | |
g[1] = b; | |
g[2] = c; | |
g[3] = d; | |
g[4] = e; | |
g[5] = x; | |
g[6] = s; | |
return g | |
} | |
function MDinit(a) { | |
a[0] = 0x67452301; | |
a[1] = 0xefcdab89; | |
a[2] = 0x98badcfe; | |
a[3] = 0x10325476; | |
a[4] = 0xc3d2e1f0 | |
} | |
var ROLs = [ | |
[11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8], | |
[7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12], | |
[11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5], | |
[11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12], | |
[9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6], | |
[8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6], | |
[9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11], | |
[9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5], | |
[15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8], | |
[8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11] | |
]; | |
var indexes = [ | |
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], | |
[7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8], | |
[3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12], | |
[1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2], | |
[4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13], | |
[5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12], | |
[6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2], | |
[15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13], | |
[8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14], | |
[12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11] | |
]; | |
function compress(a, X) { | |
blockA = new Array(); | |
blockB = new Array(); | |
var b; | |
for (var i = 0; i < 5; i++) { | |
blockA[i] = new Number(a[i]); | |
blockB[i] = new Number(a[i]) | |
} | |
var c = 0; | |
for (var j = 0; j < 5; j++) { | |
for (var i = 0; i < 16; i++) { | |
b = mixOneRound(blockA[(c + 0) % 5], blockA[(c + 1) % 5], blockA[(c + 2) % 5], blockA[(c + 3) % 5], blockA[(c + 4) % 5], X[indexes[j][i]], ROLs[j][i], j); | |
blockA[(c + 0) % 5] = b[0]; | |
blockA[(c + 1) % 5] = b[1]; | |
blockA[(c + 2) % 5] = b[2]; | |
blockA[(c + 3) % 5] = b[3]; | |
blockA[(c + 4) % 5] = b[4]; | |
c += 4 | |
} | |
} | |
c = 0; | |
for (var j = 5; j < 10; j++) { | |
for (var i = 0; i < 16; i++) { | |
b = mixOneRound(blockB[(c + 0) % 5], blockB[(c + 1) % 5], blockB[(c + 2) % 5], blockB[(c + 3) % 5], blockB[(c + 4) % 5], X[indexes[j][i]], ROLs[j][i], j); | |
blockB[(c + 0) % 5] = b[0]; | |
blockB[(c + 1) % 5] = b[1]; | |
blockB[(c + 2) % 5] = b[2]; | |
blockB[(c + 3) % 5] = b[3]; | |
blockB[(c + 4) % 5] = b[4]; | |
c += 4 | |
} | |
} | |
blockB[3] += blockA[2] + a[1]; | |
a[1] = a[2] + blockA[3] + blockB[4]; | |
a[2] = a[3] + blockA[4] + blockB[0]; | |
a[3] = a[4] + blockA[0] + blockB[1]; | |
a[4] = a[0] + blockA[1] + blockB[2]; | |
a[0] = blockB[3] | |
} | |
function zeroX(X) { | |
for (var i = 0; i < 16; i++) { | |
X[i] = 0 | |
} | |
} | |
function MDfinish(a, b, c, d) { | |
var X = new Array(16); | |
zeroX(X); | |
var j = 0; | |
for (var i = 0; i < (c & 63); i++) { | |
X[i >>> 2] ^= (b.charCodeAt(j++) & 255) << (8 * (i & 3)) | |
} | |
X[(c >>> 2) & 15] ^= 1 << (8 * (c & 3) + 7); | |
if ((c & 63) > 55) { | |
compress(a, X); | |
var X = new Array(16); | |
zeroX(X) | |
} | |
X[14] = c << 3; | |
X[15] = (c >>> 29) | (d << 3); | |
compress(a, X) | |
} | |
function BYTES_TO_DWORD(a) { | |
var b = (a.charCodeAt(3) & 255) << 24; | |
b |= (a.charCodeAt(2) & 255) << 16; | |
b |= (a.charCodeAt(1) & 255) << 8; | |
b |= (a.charCodeAt(0) & 255); | |
return b | |
} | |
function RMD(a) { | |
var b = new Array(RMDsize / 32); | |
var c = new Array(RMDsize / 8); | |
var d; | |
var e; | |
MDinit(b); | |
d = a.length; | |
var X = new Array(16); | |
zeroX(X); | |
var j = 0; | |
for (var e = d; e > 63; e -= 64) { | |
for (var i = 0; i < 16; i++) { | |
X[i] = BYTES_TO_DWORD(a.substr(j, 4)); | |
j += 4 | |
} | |
compress(b, X) | |
} | |
MDfinish(b, a.substr(j), d, 0); | |
for (var i = 0; i < RMDsize / 8; i += 4) { | |
c[i] = b[i >>> 2] & 255; | |
c[i + 1] = (b[i >>> 2] >>> 8) & 255; | |
c[i + 2] = (b[i >>> 2] >>> 16) & 255; | |
c[i + 3] = (b[i >>> 2] >>> 24) & 255 | |
} | |
return c | |
} | |
function toHex32(x) { | |
var a = "0123456789abcdef"; | |
var b = ""; | |
for (var i = 0; i < 2; i++) { | |
b = String(a.charAt(x & 0xf)).concat(b); | |
x >>>= 4 | |
} | |
return b | |
} | |
function toRMDstring(a) { | |
var b = ""; | |
for (var i = 0; i < RMDsize / 8; i++) { | |
b += toHex32(a[i]) | |
} | |
return b | |
} | |
function RMDstring(a) { | |
var b = RMD(a); | |
var c = ""; | |
for (var i = 0; i < RMDsize / 8; i++) { | |
c += toHex32(b[i]) | |
} | |
return c | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment