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

@ -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 );
} }