0
0

Continued the unminimize work of the sha512 script

This commit is contained in:
Bryan Pedini 2019-02-14 18:22:40 +01:00
parent 6cfbc1f7ea
commit 4a4cad425b
No known key found for this signature in database
GPG Key ID: 688D440AE31B40C2

View File

@ -15,86 +15,86 @@ function SHA512 ( str )
new int64 ( 0x5be0cd19, 0x137e2179 ) new int64 ( 0x5be0cd19, 0x137e2179 )
]; ];
var K = [ var K = [
new int64(0x428a2f98,0xd728ae22), new int64 ( 0x428a2f98, 0xd728ae22 ),
new int64(0x71374491,0x23ef65cd), new int64 ( 0x71374491, 0x23ef65cd ),
new int64(0xb5c0fbcf,0xec4d3b2f), new int64 ( 0xb5c0fbcf, 0xec4d3b2f ),
new int64(0xe9b5dba5,0x8189dbbc), new int64 ( 0xe9b5dba5, 0x8189dbbc ),
new int64(0x3956c25b,0xf348b538), new int64 ( 0x3956c25b, 0xf348b538 ),
new int64(0x59f111f1,0xb605d019), new int64 ( 0x59f111f1, 0xb605d019 ),
new int64(0x923f82a4,0xaf194f9b), new int64 ( 0x923f82a4, 0xaf194f9b ),
new int64(0xab1c5ed5,0xda6d8118), new int64 ( 0xab1c5ed5, 0xda6d8118 ),
new int64(0xd807aa98,0xa3030242), new int64 ( 0xd807aa98, 0xa3030242 ),
new int64(0x12835b01,0x45706fbe), new int64 ( 0x12835b01, 0x45706fbe ),
new int64(0x243185be,0x4ee4b28c), new int64 ( 0x243185be, 0x4ee4b28c ),
new int64(0x550c7dc3,0xd5ffb4e2), new int64 ( 0x550c7dc3, 0xd5ffb4e2 ),
new int64(0x72be5d74,0xf27b896f), new int64 ( 0x72be5d74, 0xf27b896f ),
new int64(0x80deb1fe,0x3b1696b1), new int64 ( 0x80deb1fe, 0x3b1696b1 ),
new int64(0x9bdc06a7,0x25c71235), new int64 ( 0x9bdc06a7, 0x25c71235 ),
new int64(0xc19bf174,0xcf692694), new int64 ( 0xc19bf174, 0xcf692694 ),
new int64(0xe49b69c1,0x9ef14ad2), new int64 ( 0xe49b69c1, 0x9ef14ad2 ),
new int64(0xefbe4786,0x384f25e3), new int64 ( 0xefbe4786, 0x384f25e3 ),
new int64(0x0fc19dc6,0x8b8cd5b5), new int64 ( 0x0fc19dc6, 0x8b8cd5b5 ),
new int64(0x240ca1cc,0x77ac9c65), new int64 ( 0x240ca1cc, 0x77ac9c65 ),
new int64(0x2de92c6f,0x592b0275), new int64 ( 0x2de92c6f, 0x592b0275 ),
new int64(0x4a7484aa,0x6ea6e483), new int64 ( 0x4a7484aa, 0x6ea6e483 ),
new int64(0x5cb0a9dc,0xbd41fbd4), new int64 ( 0x5cb0a9dc, 0xbd41fbd4 ),
new int64(0x76f988da,0x831153b5), new int64 ( 0x76f988da, 0x831153b5 ),
new int64(0x983e5152,0xee66dfab), new int64 ( 0x983e5152, 0xee66dfab ),
new int64(0xa831c66d,0x2db43210), new int64 ( 0xa831c66d, 0x2db43210 ),
new int64(0xb00327c8,0x98fb213f), new int64 ( 0xb00327c8, 0x98fb213f ),
new int64(0xbf597fc7,0xbeef0ee4), new int64 ( 0xbf597fc7, 0xbeef0ee4 ),
new int64(0xc6e00bf3,0x3da88fc2), new int64 ( 0xc6e00bf3, 0x3da88fc2 ),
new int64(0xd5a79147,0x930aa725), new int64 ( 0xd5a79147, 0x930aa725 ),
new int64(0x06ca6351,0xe003826f), new int64 ( 0x06ca6351, 0xe003826f ),
new int64(0x14292967,0x0a0e6e70), new int64 ( 0x14292967, 0x0a0e6e70 ),
new int64(0x27b70a85,0x46d22ffc), new int64 ( 0x27b70a85, 0x46d22ffc ),
new int64(0x2e1b2138,0x5c26c926), new int64 ( 0x2e1b2138, 0x5c26c926 ),
new int64(0x4d2c6dfc,0x5ac42aed), new int64 ( 0x4d2c6dfc, 0x5ac42aed ),
new int64(0x53380d13,0x9d95b3df), new int64 ( 0x53380d13, 0x9d95b3df ),
new int64(0x650a7354,0x8baf63de), new int64 ( 0x650a7354, 0x8baf63de ),
new int64(0x766a0abb,0x3c77b2a8), new int64 ( 0x766a0abb, 0x3c77b2a8 ),
new int64(0x81c2c92e,0x47edaee6), new int64 ( 0x81c2c92e, 0x47edaee6 ),
new int64(0x92722c85,0x1482353b), new int64 ( 0x92722c85, 0x1482353b ),
new int64(0xa2bfe8a1,0x4cf10364), new int64 ( 0xa2bfe8a1, 0x4cf10364 ),
new int64(0xa81a664b,0xbc423001), new int64 ( 0xa81a664b, 0xbc423001 ),
new int64(0xc24b8b70,0xd0f89791), new int64 ( 0xc24b8b70, 0xd0f89791 ),
new int64(0xc76c51a3,0x0654be30), new int64 ( 0xc76c51a3, 0x0654be30 ),
new int64(0xd192e819,0xd6ef5218), new int64 ( 0xd192e819, 0xd6ef5218 ),
new int64(0xd6990624,0x5565a910), new int64 ( 0xd6990624, 0x5565a910 ),
new int64(0xf40e3585,0x5771202a), new int64 ( 0xf40e3585, 0x5771202a ),
new int64(0x106aa070,0x32bbd1b8), new int64 ( 0x106aa070, 0x32bbd1b8 ),
new int64(0x19a4c116,0xb8d2d0c8), new int64 ( 0x19a4c116, 0xb8d2d0c8 ),
new int64(0x1e376c08,0x5141ab53), new int64 ( 0x1e376c08, 0x5141ab53 ),
new int64(0x2748774c,0xdf8eeb99), new int64 ( 0x2748774c, 0xdf8eeb99 ),
new int64(0x34b0bcb5,0xe19b48a8), new int64 ( 0x34b0bcb5, 0xe19b48a8 ),
new int64(0x391c0cb3,0xc5c95a63), new int64 ( 0x391c0cb3, 0xc5c95a63 ),
new int64(0x4ed8aa4a,0xe3418acb), new int64 ( 0x4ed8aa4a, 0xe3418acb ),
new int64(0x5b9cca4f,0x7763e373), new int64 ( 0x5b9cca4f, 0x7763e373 ),
new int64(0x682e6ff3,0xd6b2b8a3), new int64 ( 0x682e6ff3, 0xd6b2b8a3 ),
new int64(0x748f82ee,0x5defb2fc), new int64 ( 0x748f82ee, 0x5defb2fc ),
new int64(0x78a5636f,0x43172f60), new int64 ( 0x78a5636f, 0x43172f60 ),
new int64(0x84c87814,0xa1f0ab72), new int64 ( 0x84c87814, 0xa1f0ab72 ),
new int64(0x8cc70208,0x1a6439ec), new int64 ( 0x8cc70208, 0x1a6439ec ),
new int64(0x90befffa,0x23631e28), new int64 ( 0x90befffa, 0x23631e28 ),
new int64(0xa4506ceb,0xde82bde9), new int64 ( 0xa4506ceb, 0xde82bde9 ),
new int64(0xbef9a3f7,0xb2c67915), new int64 ( 0xbef9a3f7, 0xb2c67915 ),
new int64(0xc67178f2,0xe372532b), new int64 ( 0xc67178f2, 0xe372532b ),
new int64(0xca273ece,0xea26619c), new int64 ( 0xca273ece, 0xea26619c ),
new int64(0xd186b8c7,0x21c0c207), new int64 ( 0xd186b8c7, 0x21c0c207 ),
new int64(0xeada7dd6,0xcde0eb1e), new int64 ( 0xeada7dd6, 0xcde0eb1e ),
new int64(0xf57d4f7f,0xee6ed178), new int64 ( 0xf57d4f7f, 0xee6ed178 ),
new int64(0x06f067aa,0x72176fba), new int64 ( 0x06f067aa, 0x72176fba ),
new int64(0x0a637dc5,0xa2c898a6), new int64 ( 0x0a637dc5, 0xa2c898a6 ),
new int64(0x113f9804,0xbef90dae), new int64 ( 0x113f9804, 0xbef90dae ),
new int64(0x1b710b35,0x131c471b), new int64 ( 0x1b710b35, 0x131c471b ),
new int64(0x28db77f5,0x23047d84), new int64 ( 0x28db77f5, 0x23047d84 ),
new int64(0x32caab7b,0x40c72493), new int64 ( 0x32caab7b, 0x40c72493 ),
new int64(0x3c9ebe0a,0x15c9bebc), new int64 ( 0x3c9ebe0a, 0x15c9bebc ),
new int64(0x431d67c4,0x9c100d4c), new int64 ( 0x431d67c4, 0x9c100d4c ),
new int64(0x4cc5d4be,0xcb3e42b6), new int64 ( 0x4cc5d4be, 0xcb3e42b6 ),
new int64(0x597f299c,0xfc657e2a), new int64 ( 0x597f299c, 0xfc657e2a ),
new int64(0x5fcb6fab,0x3ad6faec), new int64 ( 0x5fcb6fab, 0x3ad6faec ),
new int64(0x6c44198c,0x4a475817) new int64 ( 0x6c44198c, 0x4a475817 )
]; ];
var W = new Array ( 64 ); var W = new Array ( 64 );
var a, b, c, d, e, f, g, h, i, j; var a, b, c, d, e, f, g, h, i, j;
@ -112,9 +112,37 @@ function SHA512 ( str )
} }
return bin; return bin;
} }
function binb2hex(binarray){var hex_tab='0123456789abcdef';var str='';var length=binarray.length*4;var srcByte;for(var i=0;i<length;i+=1){srcByte=binarray[i>>2]>>((3-(i % 4))*8);str+=hex_tab.charAt((srcByte>>4)&0xF)+hex_tab.charAt(srcByte&0xF);} return str;} function binb2hex ( binarray ) {
function safe_add_2(x,y){var lsw,msw,lowOrder,highOrder;lsw=(x.lowOrder&0xFFFF)+(y.lowOrder&0xFFFF);msw=(x.lowOrder>>>16)+(y.lowOrder>>>16)+(lsw>>>16);lowOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);lsw=(x.highOrder&0xFFFF)+(y.highOrder&0xFFFF)+(msw>>>16);msw=(x.highOrder>>>16)+(y.highOrder>>>16)+(lsw>>>16);highOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);return new int64(highOrder,lowOrder);} var hex_tab = '0123456789abcdef';
function safe_add_4(a,b,c,d){var lsw,msw,lowOrder,highOrder;lsw=(a.lowOrder&0xFFFF)+(b.lowOrder&0xFFFF)+(c.lowOrder&0xFFFF)+(d.lowOrder&0xFFFF);msw=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(d.lowOrder>>>16)+(lsw>>>16);lowOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);lsw=(a.highOrder&0xFFFF)+(b.highOrder&0xFFFF)+(c.highOrder&0xFFFF)+(d.highOrder&0xFFFF)+(msw>>>16);msw=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(d.highOrder>>>16)+(lsw>>>16);highOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);return new int64(highOrder,lowOrder);} var str = '';
var length = binarray.length * 4;
var srcByte;
for ( var i = 0; i < length; i += 1 ) {
srcByte = binarray [ i >> 2 ] >> ( ( 3 - ( i % 4 ) ) * 8 );
str += hex_tab.charAt ( ( srcByte >> 4 ) & 0xF ) + hex_tab.charAt ( srcByte & 0xF );
}
return str;
}
function safe_add_2 ( x, y ) {
var lsw, msw, lowOrder, highOrder;
lsw = ( x.lowOrder & 0xFFFF ) + ( y.lowOrder & 0xFFFF );
msw = ( x.lowOrder >>> 16 ) + ( y.lowOrder >>> 16) + ( lsw >>> 16 );
lowOrder = ( ( msw & 0xFFFF ) << 16 ) | ( lsw & 0xFFFF );
lsw = ( x.highOrder & 0xFFFF ) + ( y.highOrder & 0xFFFF ) + ( msw >>> 16 );
msw = ( x.highOrder >>> 16 ) + ( y.highOrder >>> 16 ) + ( lsw >>> 16 );
highOrder = ( ( msw & 0xFFFF ) << 16 ) | ( lsw & 0xFFFF );
return new int64 ( highOrder, lowOrder );
}
function safe_add_4 ( a, b, c, d ) {
var lsw, msw, lowOrder, highOrder;
lsw = ( a.lowOrder & 0xFFFF ) + ( b.lowOrder & 0xFFFF ) + ( c.lowOrder & 0xFFFF ) + ( d.lowOrder & 0xFFFF );
msw = ( a.lowOrder >>> 16 ) + ( b.lowOrder >>> 16 ) + ( c.lowOrder >>> 16 ) + ( d.lowOrder >>> 16 ) + ( lsw >>> 16 );
lowOrder = ( ( msw & 0xFFFF ) << 16 ) | ( lsw & 0xFFFF );
lsw = ( a.highOrder & 0xFFFF ) + ( b.highOrder & 0xFFFF ) + ( c.highOrder & 0xFFFF ) + ( d.highOrder & 0xFFFF ) + ( msw >>> 16 );
msw = ( a.highOrder >>> 16 ) + ( b.highOrder >>> 16 ) + ( c.highOrder >>> 16 ) + ( d.highOrder >>> 16 ) + ( lsw >>> 16 );
highOrder = ( ( msw & 0xFFFF ) << 16 ) | ( lsw & 0xFFFF );
return new int64 ( highOrder, lowOrder );
}
function safe_add_5(a,b,c,d,e){var lsw,msw,lowOrder,highOrder;lsw=(a.lowOrder&0xFFFF)+(b.lowOrder&0xFFFF)+(c.lowOrder&0xFFFF)+(d.lowOrder&0xFFFF)+(e.lowOrder&0xFFFF);msw=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(d.lowOrder>>>16)+(e.lowOrder>>>16)+(lsw>>>16);lowOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);lsw=(a.highOrder&0xFFFF)+(b.highOrder&0xFFFF)+(c.highOrder&0xFFFF)+(d.highOrder&0xFFFF)+(e.highOrder&0xFFFF)+(msw>>>16);msw=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(d.highOrder>>>16)+(e.highOrder>>>16)+(lsw>>>16);highOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);return new int64(highOrder,lowOrder);} function safe_add_5(a,b,c,d,e){var lsw,msw,lowOrder,highOrder;lsw=(a.lowOrder&0xFFFF)+(b.lowOrder&0xFFFF)+(c.lowOrder&0xFFFF)+(d.lowOrder&0xFFFF)+(e.lowOrder&0xFFFF);msw=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(d.lowOrder>>>16)+(e.lowOrder>>>16)+(lsw>>>16);lowOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);lsw=(a.highOrder&0xFFFF)+(b.highOrder&0xFFFF)+(c.highOrder&0xFFFF)+(d.highOrder&0xFFFF)+(e.highOrder&0xFFFF)+(msw>>>16);msw=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(d.highOrder>>>16)+(e.highOrder>>>16)+(lsw>>>16);highOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);return new int64(highOrder,lowOrder);}
function maj(x,y,z){return new int64((x.highOrder&y.highOrder)^(x.highOrder&z.highOrder)^(y.highOrder&z.highOrder),(x.lowOrder&y.lowOrder)^(x.lowOrder&z.lowOrder)^(y.lowOrder&z.lowOrder));} function maj(x,y,z){return new int64((x.highOrder&y.highOrder)^(x.highOrder&z.highOrder)^(y.highOrder&z.highOrder),(x.lowOrder&y.lowOrder)^(x.lowOrder&z.lowOrder)^(y.lowOrder&z.lowOrder));}
function ch(x,y,z){return new int64((x.highOrder&y.highOrder)^(~x.highOrder&z.highOrder),(x.lowOrder&y.lowOrder)^(~x.lowOrder&z.lowOrder));} function ch(x,y,z){return new int64((x.highOrder&y.highOrder)^(~x.highOrder&z.highOrder),(x.lowOrder&y.lowOrder)^(~x.lowOrder&z.lowOrder));}
@ -124,9 +152,51 @@ function SHA512 ( str )
function gamma0(x){var rotr1=rotr(x,1),rotr8=rotr(x,8),shr7=shr(x,7);return new int64(rotr1.highOrder^rotr8.highOrder^shr7.highOrder,rotr1.lowOrder^rotr8.lowOrder^shr7.lowOrder);} function gamma0(x){var rotr1=rotr(x,1),rotr8=rotr(x,8),shr7=shr(x,7);return new int64(rotr1.highOrder^rotr8.highOrder^shr7.highOrder,rotr1.lowOrder^rotr8.lowOrder^shr7.lowOrder);}
function gamma1(x){var rotr19=rotr(x,19);var rotr61=rotr(x,61);var shr6=shr(x,6);return new int64(rotr19.highOrder^rotr61.highOrder^shr6.highOrder,rotr19.lowOrder^rotr61.lowOrder^shr6.lowOrder);} function gamma1(x){var rotr19=rotr(x,19);var rotr61=rotr(x,61);var shr6=shr(x,6);return new int64(rotr19.highOrder^rotr61.highOrder^shr6.highOrder,rotr19.lowOrder^rotr61.lowOrder^shr6.lowOrder);}
function shr(x,n){if(n<=32){return new int64(x.highOrder>>>n,x.lowOrder>>>n|(x.highOrder<<(32-n)));}else{return new int64(0,x.highOrder<<(32-n));}} function shr(x,n){if(n<=32){return new int64(x.highOrder>>>n,x.lowOrder>>>n|(x.highOrder<<(32-n)));}else{return new int64(0,x.highOrder<<(32-n));}}
str=utf8_encode(str);strlen=str.length*charsize;str=str2binb(str);str[strlen>>5]|=0x80<<(24-strlen % 32);str[(((strlen+128)>>10)<<5)+31]=strlen;for(var i=0;i<str.length;i+=32){a=H[0];b=H[1];c=H[2];d=H[3];e=H[4];f=H[5];g=H[6];h=H[7];for(var j=0;j<80;j++){if(j<16){W[j]=new int64(str[j*2+i],str[j*2+i+1]);}else{W[j]=safe_add_4(gamma1(W[j-2]),W[j-7],gamma0(W[j-15]),W[j-16]);} str = utf8_encode ( str );
T1=safe_add_5(h,sigma1(e),ch(e,f,g),K[j],W[j]);T2=safe_add_2(sigma0(a),maj(a,b,c));h=g;g=f;f=e;e=safe_add_2(d,T1);d=c;c=b;b=a;a=safe_add_2(T1,T2);} strlen = str.length * charsize;
H[0]=safe_add_2(a,H[0]);H[1]=safe_add_2(b,H[1]);H[2]=safe_add_2(c,H[2]);H[3]=safe_add_2(d,H[3]);H[4]=safe_add_2(e,H[4]);H[5]=safe_add_2(f,H[5]);H[6]=safe_add_2(g,H[6]);H[7]=safe_add_2(h,H[7]);} str = str2binb ( str );
var binarray=[];for(var i=0;i<H.length;i++){binarray.push(H[i].highOrder);binarray.push(H[i].lowOrder);} str [ strlen >> 5 ] |= 0x80 << ( 24 - strlen % 32 );
str [ ( ( ( strlen + 128 ) >> 10 ) << 5 ) + 31 ] = strlen;
for ( var i = 0; i < str.length ; i += 32 ) {
a = H [ 0 ];
b = H [ 1 ];
c = H [ 2 ];
d = H [ 3 ];
e = H [ 4 ];
f = H [ 5 ];
g = H [ 6 ];
h = H [ 7 ];
for ( var j = 0; j < 80; j++ ) {
if ( j < 16 ) {
W [ j ] = new int64 ( str [ j * 2 + i ], str [ j * 2 + i + 1 ] );
}
else {
W [ j ] = safe_add_4 ( gamma1 ( W [ j - 2 ] ), W [ j - 7 ], gamma0 ( W [ j - 15 ] ), W [ j - 16 ] );
}
T1 = safe_add_5 ( h, sigma1 ( e ), ch(e,f,g),K[j],W[j]);
T2=safe_add_2(sigma0(a),maj(a,b,c));
h=g;
g=f;
f=e;
e=safe_add_2(d,T1);
d=c;
c=b;
b=a;
a=safe_add_2(T1,T2);
}
H [ 0 ] = safe_add_2 ( a, H [ 0 ] );
H [ 1 ] = safe_add_2 ( b, H [ 1 ] );
H [ 2 ] = safe_add_2 ( c, H [ 2 ] );
H [ 3 ] = safe_add_2 ( d, H [ 3 ] );
H [ 4 ] = safe_add_2 ( e, H [ 4 ] );
H [ 5 ] = safe_add_2 ( f, H [ 5 ] );
H [ 6 ] = safe_add_2 ( g, H [ 6 ] );
H [ 7 ] = safe_add_2 ( h, H [ 7 ] );
}
var binarray = [ ];
for ( var i = 0; i < H.length; i ++ ) {
binarray.push ( H [ i ].highOrder );
binarray.push ( H [ i ].lowOrder );
}
return binb2hex ( binarray ); return binb2hex ( binarray );
} }