@ -1,7 +1,7 @@
/ *
* [ js - sha512 ] { @ link https : //github.com/emn178/js-sha512}
*
* @ version 0. 3 . 0
* @ version 0. 4 . 0
* @ author Chen , Yi - Cyuan [ emn178 @ gmail . com ]
* @ copyright Chen , Yi - Cyuan 2014 - 2017
* @ license MIT
@ -17,10 +17,11 @@
}
var COMMON _JS = ! root . JS _SHA512 _NO _COMMON _JS && typeof module === 'object' && module . exports ;
var AMD = typeof define === 'function' && define . amd ;
var ARRAY _BUFFER = typeof ArrayBuffer !== 'undefined' ;
var HEX _CHARS = '0123456789abcdef' . split ( '' ) ;
var EXTRA = [ - 2147483648 , 8388608 , 32768 , 128 ] ;
var SHIFT = [ 24 , 16 , 8 , 0 ] ;
var K = [
var K = [
0x428A2F98 , 0xD728AE22 , 0x71374491 , 0x23EF65CD ,
0xB5C0FBCF , 0xEC4D3B2F , 0xE9B5DBA5 , 0x8189DBBC ,
0x3956C25B , 0xF348B538 , 0x59F111F1 , 0xB605D019 ,
@ -63,101 +64,199 @@
0x5FCB6FAB , 0x3AD6FAEC , 0x6C44198C , 0x4A475817
] ;
var blocks = [ ] ;
var OUTPUT_TYPES = [ 'hex' , 'array' , 'digest' , 'arrayBuffer' ] ;
var sha384 = function ( message ) {
return sha512 ( message , 384 ) ;
} ;
var blocks = [ ] ;
var sha512 _256 = function ( message ) {
return sha512 ( message , 256 ) ;
var createOutputMethod = function ( outputType , bits ) {
return function ( message ) {
return new Sha512 ( bits , true ) . update ( message ) [ outputType ] ( ) ;
} ;
} ;
var sha512 _224 = function ( message ) {
return sha512 ( message , 224 ) ;
var createMethod = function ( bits ) {
var method = createOutputMethod ( 'hex' , bits ) ;
method . create = function ( ) {
return new Sha512 ( bits ) ;
} ;
method . update = function ( message ) {
return method . create ( ) . update ( message ) ;
} ;
for ( var i = 0 ; i < OUTPUT _TYPES . length ; ++ i ) {
var type = OUTPUT _TYPES [ i ] ;
method [ type ] = createOutputMethod ( type , bits ) ;
}
return method ;
} ;
var sha512 = function ( message , bits ) {
var h0h , h0l , h1h , h1l , h2h , h2l , h3h , h3l ,
h4h , h4l , h5h , h5l , h6h , h6l , h7h , h7l , block , code , end = false ,
i , j , index = 0 , start = 0 , bytes = 0 , length = message . length ,
s0h , s0l , s1h , s1l , c1 , c2 , c3 , c4 ,
abh , abl , dah , dal , cdh , cdl , bch , bcl ,
majh , majl , t1h , t1l , t2h , t2l , chh , chl ;
function Sha512 ( bits , sharedMemory ) {
if ( sharedMemory ) {
blocks [ 0 ] = blocks [ 1 ] = blocks [ 2 ] = blocks [ 3 ] = blocks [ 4 ] =
blocks [ 5 ] = blocks [ 6 ] = blocks [ 7 ] = blocks [ 8 ] =
blocks [ 9 ] = blocks [ 10 ] = blocks [ 11 ] = blocks [ 12 ] =
blocks [ 13 ] = blocks [ 14 ] = blocks [ 15 ] = blocks [ 16 ] =
blocks [ 17 ] = blocks [ 18 ] = blocks [ 19 ] = blocks [ 20 ] =
blocks [ 21 ] = blocks [ 22 ] = blocks [ 23 ] = blocks [ 24 ] =
blocks [ 25 ] = blocks [ 26 ] = blocks [ 27 ] = blocks [ 28 ] =
blocks [ 29 ] = blocks [ 30 ] = blocks [ 31 ] = blocks [ 32 ] = 0 ;
this . blocks = blocks ;
} else {
this . blocks = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
}
if ( bits == 384 ) {
h0h = 0xCBBB9D5D ;
h0l = 0xC1059ED8 ;
h1h = 0x629A292A ;
h1l = 0x367CD507 ;
h2h = 0x9159015A ;
h2l = 0x3070DD17 ;
h3h = 0x152FECD8 ;
h3l = 0xF70E5939 ;
h4h = 0x67332667 ;
h4l = 0xFFC00B31 ;
h5h = 0x8EB44A87 ;
h5l = 0x68581511 ;
h6h = 0xDB0C2E0D ;
h6l = 0x64F98FA7 ;
h7h = 0x47B5481D ;
h7l = 0xBEFA4FA4 ;
this . h0h = 0xCBBB9D5D ;
this . h0l = 0xC1059ED8 ;
this . h1h = 0x629A292A ;
this . h1l = 0x367CD507 ;
this . h2h = 0x9159015A ;
this . h2l = 0x3070DD17 ;
this . h3h = 0x152FECD8 ;
this . h3l = 0xF70E5939 ;
this . h4h = 0x67332667 ;
this . h4l = 0xFFC00B31 ;
this . h5h = 0x8EB44A87 ;
this . h5l = 0x68581511 ;
this . h6h = 0xDB0C2E0D ;
this . h6l = 0x64F98FA7 ;
this . h7h = 0x47B5481D ;
this . h7l = 0xBEFA4FA4 ;
} else if ( bits == 256 ) {
h0h = 0x22312194 ;
h0l = 0xFC2BF72C ;
h1h = 0x9F555FA3 ;
h1l = 0xC84C64C2 ;
h2h = 0x2393B86B ;
h2l = 0x6F53B151 ;
h3h = 0x96387719 ;
h3l = 0x5940EABD ;
h4h = 0x96283EE2 ;
h4l = 0xA88EFFE3 ;
h5h = 0xBE5E1E25 ;
h5l = 0x53863992 ;
h6h = 0x2B0199FC ;
h6l = 0x2C85B8AA ;
h7h = 0x0EB72DDC ;
h7l = 0x81C52CA2 ;
this . h0h = 0x22312194 ;
this . h0l = 0xFC2BF72C ;
this . h1h = 0x9F555FA3 ;
this . h1l = 0xC84C64C2 ;
this . h2h = 0x2393B86B ;
this . h2l = 0x6F53B151 ;
this . h3h = 0x96387719 ;
this . h3l = 0x5940EABD ;
this . h4h = 0x96283EE2 ;
this . h4l = 0xA88EFFE3 ;
this . h5h = 0xBE5E1E25 ;
this . h5l = 0x53863992 ;
this . h6h = 0x2B0199FC ;
this . h6l = 0x2C85B8AA ;
this . h7h = 0x0EB72DDC ;
this . h7l = 0x81C52CA2 ;
} else if ( bits == 224 ) {
h0h = 0x8C3D37C8 ;
h0l = 0x19544DA2 ;
h1h = 0x73E19966 ;
h1l = 0x89DCD4D6 ;
h2h = 0x1DFAB7AE ;
h2l = 0x32FF9C82 ;
h3h = 0x679DD514 ;
h3l = 0x582F9FCF ;
h4h = 0x0F6D2B69 ;
h4l = 0x7BD44DA8 ;
h5h = 0x77E36F73 ;
h5l = 0x04C48942 ;
h6h = 0x3F9D85A8 ;
h6l = 0x6A1D36C8 ;
h7h = 0x1112E6AD ;
h7l = 0x91D692A1 ;
this . h0h = 0x8C3D37C8 ;
this . h0l = 0x19544DA2 ;
this . h1h = 0x73E19966 ;
this . h1l = 0x89DCD4D6 ;
this . h2h = 0x1DFAB7AE ;
this . h2l = 0x32FF9C82 ;
this . h3h = 0x679DD514 ;
this . h3l = 0x582F9FCF ;
this . h4h = 0x0F6D2B69 ;
this . h4l = 0x7BD44DA8 ;
this . h5h = 0x77E36F73 ;
this . h5l = 0x04C48942 ;
this . h6h = 0x3F9D85A8 ;
this . h6l = 0x6A1D36C8 ;
this . h7h = 0x1112E6AD ;
this . h7l = 0x91D692A1 ;
} else { // 512
h0h = 0x6A09E667 ;
h0l = 0xF3BCC908 ;
h1h = 0xBB67AE85 ;
h1l = 0x84CAA73B ;
h2h = 0x3C6EF372 ;
h2l = 0xFE94F82B ;
h3h = 0xA54FF53A ;
h3l = 0x5F1D36F1 ;
h4h = 0x510E527F ;
h4l = 0xADE682D1 ;
h5h = 0x9B05688C ;
h5l = 0x2B3E6C1F ;
h6h = 0x1F83D9AB ;
h6l = 0xFB41BD6B ;
h7h = 0x5BE0CD19 ;
h7l = 0x137E2179 ;
bits = 512 ;
this . h0h = 0x6A09E667 ;
this . h0l = 0xF3BCC908 ;
this . h1h = 0xBB67AE85 ;
this . h1l = 0x84CAA73B ;
this . h2h = 0x3C6EF372 ;
this . h2l = 0xFE94F82B ;
this . h3h = 0xA54FF53A ;
this . h3l = 0x5F1D36F1 ;
this . h4h = 0x510E527F ;
this . h4l = 0xADE682D1 ;
this . h5h = 0x9B05688C ;
this . h5l = 0x2B3E6C1F ;
this . h6h = 0x1F83D9AB ;
this . h6l = 0xFB41BD6B ;
this . h7h = 0x5BE0CD19 ;
this . h7l = 0x137E2179 ;
}
this . bits = bits ;
this . block = this . start = this . bytes = 0 ;
this . finalized = this . hashed = false ;
}
Sha512 . prototype . update = function ( message ) {
if ( this . finalized ) {
return ;
}
var notString = typeof ( message ) !== 'string' ;
if ( notString && ARRAY _BUFFER && message instanceof root . ArrayBuffer ) {
message = new Uint8Array ( message ) ;
}
block = 0 ;
do {
blocks [ 0 ] = block ;
var code , index = 0 , i , length = message . length || 0 , blocks = this . blocks ;
while ( index < length ) {
if ( this . hashed ) {
this . hashed = false ;
blocks [ 0 ] = this . block ;
blocks [ 1 ] = blocks [ 2 ] = blocks [ 3 ] = blocks [ 4 ] =
blocks [ 5 ] = blocks [ 6 ] = blocks [ 7 ] = blocks [ 8 ] =
blocks [ 9 ] = blocks [ 10 ] = blocks [ 11 ] = blocks [ 12 ] =
blocks [ 13 ] = blocks [ 14 ] = blocks [ 15 ] = blocks [ 16 ] =
blocks [ 17 ] = blocks [ 18 ] = blocks [ 19 ] = blocks [ 20 ] =
blocks [ 21 ] = blocks [ 22 ] = blocks [ 23 ] = blocks [ 24 ] =
blocks [ 25 ] = blocks [ 26 ] = blocks [ 27 ] = blocks [ 28 ] =
blocks [ 29 ] = blocks [ 30 ] = blocks [ 31 ] = blocks [ 32 ] = 0 ;
}
if ( notString ) {
for ( i = this . start ; index < length && i < 128 ; ++ index ) {
blocks [ i >> 2 ] |= message [ index ] << SHIFT [ i ++ & 3 ] ;
}
} else {
for ( i = this . start ; index < length && i < 128 ; ++ index ) {
code = message . charCodeAt ( index ) ;
if ( code < 0x80 ) {
blocks [ i >> 2 ] |= code << SHIFT [ i ++ & 3 ] ;
} else if ( code < 0x800 ) {
blocks [ i >> 2 ] |= ( 0xc0 | ( code >> 6 ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( code & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
} else if ( code < 0xd800 || code >= 0xe000 ) {
blocks [ i >> 2 ] |= ( 0xe0 | ( code >> 12 ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( ( code >> 6 ) & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( code & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
} else {
code = 0x10000 + ( ( ( code & 0x3ff ) << 10 ) | ( message . charCodeAt ( ++ index ) & 0x3ff ) ) ;
blocks [ i >> 2 ] |= ( 0xf0 | ( code >> 18 ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( ( code >> 12 ) & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( ( code >> 6 ) & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( code & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
}
}
}
this . lastByteIndex = i ;
this . bytes += i - this . start ;
if ( i >= 128 ) {
this . block = blocks [ 32 ] ;
this . start = i - 128 ;
this . hash ( ) ;
this . hashed = true ;
} else {
this . start = i ;
}
}
return this ;
} ;
Sha512 . prototype . finalize = function ( ) {
if ( this . finalized ) {
return ;
}
this . finalized = true ;
var blocks = this . blocks , i = this . lastByteIndex ;
blocks [ 32 ] = this . block ;
blocks [ i >> 2 ] |= EXTRA [ i & 3 ] ;
this . block = blocks [ 32 ] ;
if ( i >= 112 ) {
if ( ! this . hashed ) {
this . hash ( ) ;
}
blocks [ 0 ] = this . block ;
blocks [ 1 ] = blocks [ 2 ] = blocks [ 3 ] = blocks [ 4 ] =
blocks [ 5 ] = blocks [ 6 ] = blocks [ 7 ] = blocks [ 8 ] =
blocks [ 9 ] = blocks [ 10 ] = blocks [ 11 ] = blocks [ 12 ] =
@ -166,335 +265,327 @@
blocks [ 21 ] = blocks [ 22 ] = blocks [ 23 ] = blocks [ 24 ] =
blocks [ 25 ] = blocks [ 26 ] = blocks [ 27 ] = blocks [ 28 ] =
blocks [ 29 ] = blocks [ 30 ] = blocks [ 31 ] = blocks [ 32 ] = 0 ;
for ( i = start ; index < length && i < 128 ; ++ index ) {
code = message . charCodeAt ( index ) ;
if ( code < 0x80 ) {
blocks [ i >> 2 ] |= code << SHIFT [ i ++ & 3 ] ;
} else if ( code < 0x800 ) {
blocks [ i >> 2 ] |= ( 0xc0 | ( code >> 6 ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( code & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
} else if ( code < 0xd800 || code >= 0xe000 ) {
blocks [ i >> 2 ] |= ( 0xe0 | ( code >> 12 ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( ( code >> 6 ) & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( code & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
} else {
code = 0x10000 + ( ( ( code & 0x3ff ) << 10 ) | ( message . charCodeAt ( ++ index ) & 0x3ff ) ) ;
blocks [ i >> 2 ] |= ( 0xf0 | ( code >> 18 ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( ( code >> 12 ) & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( ( code >> 6 ) & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
blocks [ i >> 2 ] |= ( 0x80 | ( code & 0x3f ) ) << SHIFT [ i ++ & 3 ] ;
}
}
bytes += i - start ;
start = i - 128 ;
if ( index == length ) {
blocks [ i >> 2 ] |= EXTRA [ i & 3 ] ;
++ index ;
}
block = blocks [ 32 ] ;
if ( index > length && i < 112 ) {
blocks [ 31 ] = bytes << 3 ;
end = true ;
}
}
blocks [ 31 ] = this . bytes << 3 ;
this . hash ( ) ;
} ;
for ( j = 32 ; j < 160 ; j += 2 ) {
t1h = blocks [ j - 30 ] ;
t1l = blocks [ j - 29 ] ;
s0h = ( ( t1h >>> 1 ) | ( t1l << 31 ) ) ^ ( ( t1h >>> 8 ) | ( t1l << 24 ) ) ^ ( t1h >>> 7 ) ;
s0l = ( ( t1l >>> 1 ) | ( t1h << 31 ) ) ^ ( ( t1l >>> 8 ) | ( t1h << 24 ) ) ^ ( ( t1l >>> 7 ) | t1h << 25 ) ;
t1h = blocks [ j - 4 ] ;
t1l = blocks [ j - 3 ] ;
s1h = ( ( t1h >>> 19 ) | ( t1l << 13 ) ) ^ ( ( t1l >>> 29 ) | ( t1h << 3 ) ) ^ ( t1h >>> 6 ) ;
s1l = ( ( t1l >>> 19 ) | ( t1h << 13 ) ) ^ ( ( t1h >>> 29 ) | ( t1l << 3 ) ) ^ ( ( t1l >>> 6 ) | t1h << 26 ) ;
t1h = blocks [ j - 32 ] ;
t1l = blocks [ j - 31 ] ;
t2h = blocks [ j - 14 ] ;
t2l = blocks [ j - 13 ] ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( s0l & 0xFFFF ) + ( s1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( s0l >>> 16 ) + ( s1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( s0h & 0xFFFF ) + ( s1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( s0h >>> 16 ) + ( s1h >>> 16 ) + ( c3 >>> 16 ) ;
blocks [ j ] = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
blocks [ j + 1 ] = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
}
Sha512 . prototype . hash = function ( ) {
var h0h = this . h0h , h0l = this . h0l , h1h = this . h1h , h1l = this . h1l ,
h2h = this . h2h , h2l = this . h2l , h3h = this . h3h , h3l = this . h3l ,
h4h = this . h4h , h4l = this . h4l , h5h = this . h5h , h5l = this . h5l ,
h6h = this . h6h , h6l = this . h6l , h7h = this . h7h , h7l = this . h7l ,
blocks = this . blocks , j , s0h , s0l , s1h , s1l , c1 , c2 , c3 , c4 ,
abh , abl , dah , dal , cdh , cdl , bch , bcl ,
majh , majl , t1h , t1l , t2h , t2l , chh , chl ;
var ah = h0h , al = h0l , bh = h1h , bl = h1l , ch = h2h , cl = h2l , dh = h3h , dl = h3l , eh = h4h , el = h4l , fh = h5h , fl = h5l , gh = h6h , gl = h6l , hh = h7h , hl = h7l ;
bch = bh & ch ;
bcl = bl & cl ;
for ( j = 0 ; j < 160 ; j += 8 ) {
s0h = ( ( ah >>> 28 ) | ( al << 4 ) ) ^ ( ( al >>> 2 ) | ( ah << 30 ) ) ^ ( ( al >>> 7 ) | ( ah << 25 ) ) ;
s0l = ( ( al >>> 28 ) | ( ah << 4 ) ) ^ ( ( ah >>> 2 ) | ( al << 30 ) ) ^ ( ( ah >>> 7 ) | ( al << 25 ) ) ;
for ( j = 32 ; j < 160 ; j += 2 ) {
t1h = blocks [ j - 30 ] ;
t1l = blocks [ j - 29 ] ;
s0h = ( ( t1h >>> 1 ) | ( t1l << 31 ) ) ^ ( ( t1h >>> 8 ) | ( t1l << 24 ) ) ^ ( t1h >>> 7 ) ;
s0l = ( ( t1l >>> 1 ) | ( t1h << 31 ) ) ^ ( ( t1l >>> 8 ) | ( t1h << 24 ) ) ^ ( ( t1l >>> 7 ) | t1h << 25 ) ;
t1h = blocks [ j - 4 ] ;
t1l = blocks [ j - 3 ] ;
s1h = ( ( t1h >>> 19 ) | ( t1l << 13 ) ) ^ ( ( t1l >>> 29 ) | ( t1h << 3 ) ) ^ ( t1h >>> 6 ) ;
s1l = ( ( t1l >>> 19 ) | ( t1h << 13 ) ) ^ ( ( t1h >>> 29 ) | ( t1l << 3 ) ) ^ ( ( t1l >>> 6 ) | t1h << 26 ) ;
t1h = blocks [ j - 32 ] ;
t1l = blocks [ j - 31 ] ;
t2h = blocks [ j - 14 ] ;
t2l = blocks [ j - 13 ] ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( s0l & 0xFFFF ) + ( s1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( s0l >>> 16 ) + ( s1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( s0h & 0xFFFF ) + ( s1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( s0h >>> 16 ) + ( s1h >>> 16 ) + ( c3 >>> 16 ) ;
blocks [ j ] = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
blocks [ j + 1 ] = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
}
s1h = ( ( eh >>> 14 ) | ( el << 18 ) ) ^ ( ( eh >>> 18 ) | ( el << 14 ) ) ^ ( ( el >>> 9 ) | ( eh << 23 ) ) ;
s1l = ( ( el >>> 14 ) | ( eh << 18 ) ) ^ ( ( el >>> 18 ) | ( eh << 14 ) ) ^ ( ( eh >>> 9 ) | ( el << 23 ) ) ;
var ah = h0h , al = h0l , bh = h1h , bl = h1l , ch = h2h , cl = h2l , dh = h3h , dl = h3l , eh = h4h , el = h4l , fh = h5h , fl = h5l , gh = h6h , gl = h6l , hh = h7h , hl = h7l ;
bch = bh & ch ;
bcl = bl & cl ;
for ( j = 0 ; j < 160 ; j += 8 ) {
s0h = ( ( ah >>> 28 ) | ( al << 4 ) ) ^ ( ( al >>> 2 ) | ( ah << 30 ) ) ^ ( ( al >>> 7 ) | ( ah << 25 ) ) ;
s0l = ( ( al >>> 28 ) | ( ah << 4 ) ) ^ ( ( ah >>> 2 ) | ( al << 30 ) ) ^ ( ( ah >>> 7 ) | ( al << 25 ) ) ;
abh = ah & bh ;
abl = al & bl ;
majh = abh ^ ( ah & ch ) ^ bch ;
majl = abl ^ ( al & cl ) ^ bcl ;
s1h = ( ( eh >>> 14 ) | ( el << 18 ) ) ^ ( ( eh >>> 18 ) | ( el << 14 ) ) ^ ( ( el >>> 9 ) | ( eh << 23 ) ) ;
s1l = ( ( el >>> 14 ) | ( eh << 18 ) ) ^ ( ( el >>> 18 ) | ( eh << 14 ) ) ^ ( ( eh >>> 9 ) | ( el << 23 ) ) ;
chh = ( eh & fh ) ^ ( ~ eh & gh ) ;
chl = ( el & fl ) ^ ( ~ el & gl ) ;
abh = ah & bh ;
abl = al & bl ;
majh = abh ^ ( ah & ch ) ^ bch ;
majl = abl ^ ( al & cl ) ^ bcl ;
t1h = blocks [ j ] ;
t1l = blocks [ j + 1 ] ;
t2h = K [ j ] ;
t2l = K [ j + 1 ] ;
chh = ( eh & fh ) ^ ( ~ eh & gh ) ;
chl = ( el & fl ) ^ ( ~ el & gl ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( chl & 0xFFFF ) + ( s1l & 0xFFFF ) + ( hl & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( chl >>> 16 ) + ( s1l >>> 16 ) + ( hl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( chh & 0xFFFF ) + ( s1h & 0xFFFF ) + ( hh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( chh >>> 16 ) + ( s1h >>> 16 ) + ( hh >>> 16 ) + ( c3 >>> 16 ) ;
t1h = blocks [ j ] ;
t1l = blocks [ j + 1 ] ;
t2h = K [ j ] ;
t2l = K [ j + 1 ] ;
t1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( chl & 0xFFFF ) + ( s1l & 0xFFFF ) + ( hl & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( chl >>> 16 ) + ( s1l >>> 16 ) + ( hl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( chh & 0xFFFF ) + ( s1h & 0xFFFF ) + ( hh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( chh >>> 16 ) + ( s1h >>> 16 ) + ( hh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( majl & 0xFFFF ) + ( s0l & 0xFFFF ) ;
c2 = ( majl >>> 16 ) + ( s0l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( majh & 0xFFFF ) + ( s0h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( majh >>> 16 ) + ( s0h >>> 16 ) + ( c3 >>> 16 ) ;
t1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
t2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( majl & 0xFFFF ) + ( s0l & 0xFFFF ) ;
c2 = ( majl >>> 16 ) + ( s0l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( majh & 0xFFFF ) + ( s0h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( majh >>> 16 ) + ( s0h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( dl & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( dl >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( dh & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( dh >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
t2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
hh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
hl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( dl & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( dl >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( dh & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( dh >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
hh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
hl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
dh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
dl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
s0h = ( ( dh >>> 28 ) | ( dl << 4 ) ) ^ ( ( dl >>> 2 ) | ( dh << 30 ) ) ^ ( ( dl >>> 7 ) | ( dh << 25 ) ) ;
s0l = ( ( dl >>> 28 ) | ( dh << 4 ) ) ^ ( ( dh >>> 2 ) | ( dl << 30 ) ) ^ ( ( dh >>> 7 ) | ( dl << 25 ) ) ;
dh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
dl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
s1h = ( ( hh >>> 14 ) | ( hl << 18 ) ) ^ ( ( hh >>> 18 ) | ( hl << 14 ) ) ^ ( ( hl >>> 9 ) | ( hh << 23 ) ) ;
s1l = ( ( hl >>> 14 ) | ( hh << 18 ) ) ^ ( ( hl >>> 18 ) | ( hh << 14 ) ) ^ ( ( hh >>> 9 ) | ( hl << 23 ) ) ;
s0h = ( ( dh >>> 28 ) | ( dl << 4 ) ) ^ ( ( dl >>> 2 ) | ( dh << 30 ) ) ^ ( ( dl >>> 7 ) | ( dh << 25 ) ) ;
s0l = ( ( dl >>> 28 ) | ( dh << 4 ) ) ^ ( ( dh >>> 2 ) | ( dl << 30 ) ) ^ ( ( dh >>> 7 ) | ( dl << 25 ) ) ;
dah = dh & ah ;
dal = dl & al ;
majh = dah ^ ( dh & bh ) ^ abh ;
majl = dal ^ ( dl & bl ) ^ abl ;
s1h = ( ( hh >>> 14 ) | ( hl << 18 ) ) ^ ( ( hh >>> 18 ) | ( hl << 14 ) ) ^ ( ( hl >>> 9 ) | ( hh << 23 ) ) ;
s1l = ( ( hl >>> 14 ) | ( hh << 18 ) ) ^ ( ( hl >>> 18 ) | ( hh << 14 ) ) ^ ( ( hh >>> 9 ) | ( hl << 23 ) ) ;
chh = ( hh & eh ) ^ ( ~ hh & fh ) ;
chl = ( hl & el ) ^ ( ~ hl & fl ) ;
dah = dh & ah ;
dal = dl & al ;
majh = dah ^ ( dh & bh ) ^ abh ;
majl = dal ^ ( dl & bl ) ^ abl ;
t1h = blocks [ j + 2 ] ;
t1l = blocks [ j + 3 ] ;
t2h = K [ j + 2 ] ;
t2l = K [ j + 3 ] ;
chh = ( hh & eh ) ^ ( ~ hh & fh ) ;
chl = ( hl & el ) ^ ( ~ hl & fl ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( chl & 0xFFFF ) + ( s1l & 0xFFFF ) + ( gl & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( chl >>> 16 ) + ( s1l >>> 16 ) + ( gl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( chh & 0xFFFF ) + ( s1h & 0xFFFF ) + ( gh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( chh >>> 16 ) + ( s1h >>> 16 ) + ( gh >>> 16 ) + ( c3 >>> 16 ) ;
t1h = blocks [ j + 2 ] ;
t1l = blocks [ j + 3 ] ;
t2h = K [ j + 2 ] ;
t2l = K [ j + 3 ] ;
t1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( chl & 0xFFFF ) + ( s1l & 0xFFFF ) + ( gl & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( chl >>> 16 ) + ( s1l >>> 16 ) + ( gl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( chh & 0xFFFF ) + ( s1h & 0xFFFF ) + ( gh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( chh >>> 16 ) + ( s1h >>> 16 ) + ( gh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( majl & 0xFFFF ) + ( s0l & 0xFFFF ) ;
c2 = ( majl >>> 16 ) + ( s0l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( majh & 0xFFFF ) + ( s0h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( majh >>> 16 ) + ( s0h >>> 16 ) + ( c3 >>> 16 ) ;
t1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
t2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( majl & 0xFFFF ) + ( s0l & 0xFFFF ) ;
c2 = ( majl >>> 16 ) + ( s0l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( majh & 0xFFFF ) + ( s0h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( majh >>> 16 ) + ( s0h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( cl & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( cl >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( ch & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( ch >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
t2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
gh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
gl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( cl & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( cl >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( ch & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( ch >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
gh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
gl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
ch = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
cl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
s0h = ( ( ch >>> 28 ) | ( cl << 4 ) ) ^ ( ( cl >>> 2 ) | ( ch << 30 ) ) ^ ( ( cl >>> 7 ) | ( ch << 25 ) ) ;
s0l = ( ( cl >>> 28 ) | ( ch << 4 ) ) ^ ( ( ch >>> 2 ) | ( cl << 30 ) ) ^ ( ( ch >>> 7 ) | ( cl << 25 ) ) ;
ch = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
cl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
s1h = ( ( gh >>> 14 ) | ( gl << 18 ) ) ^ ( ( gh >>> 18 ) | ( gl << 14 ) ) ^ ( ( gl >>> 9 ) | ( gh << 23 ) ) ;
s1l = ( ( gl >>> 14 ) | ( gh << 18 ) ) ^ ( ( gl >>> 18 ) | ( gh << 14 ) ) ^ ( ( gh >>> 9 ) | ( gl << 23 ) ) ;
s0h = ( ( ch >>> 28 ) | ( cl << 4 ) ) ^ ( ( cl >>> 2 ) | ( ch << 30 ) ) ^ ( ( cl >>> 7 ) | ( ch << 25 ) ) ;
s0l = ( ( cl >>> 28 ) | ( ch << 4 ) ) ^ ( ( ch >>> 2 ) | ( cl << 30 ) ) ^ ( ( ch >>> 7 ) | ( cl << 25 ) ) ;
cdh = ch & dh ;
cdl = cl & dl ;
majh = cdh ^ ( ch & ah ) ^ dah ;
majl = cdl ^ ( cl & al ) ^ dal ;
s1h = ( ( gh >>> 14 ) | ( gl << 18 ) ) ^ ( ( gh >>> 18 ) | ( gl << 14 ) ) ^ ( ( gl >>> 9 ) | ( gh << 23 ) ) ;
s1l = ( ( gl >>> 14 ) | ( gh << 18 ) ) ^ ( ( gl >>> 18 ) | ( gh << 14 ) ) ^ ( ( gh >>> 9 ) | ( gl << 23 ) ) ;
chh = ( gh & hh ) ^ ( ~ gh & eh ) ;
chl = ( gl & hl ) ^ ( ~ gl & el ) ;
cdh = ch & dh ;
cdl = cl & dl ;
majh = cdh ^ ( ch & ah ) ^ dah ;
majl = cdl ^ ( cl & al ) ^ dal ;
t1h = blocks [ j + 4 ] ;
t1l = blocks [ j + 5 ] ;
t2h = K [ j + 4 ] ;
t2l = K [ j + 5 ] ;
chh = ( gh & hh ) ^ ( ~ gh & eh ) ;
chl = ( gl & hl ) ^ ( ~ gl & el ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( chl & 0xFFFF ) + ( s1l & 0xFFFF ) + ( fl & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( chl >>> 16 ) + ( s1l >>> 16 ) + ( fl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( chh & 0xFFFF ) + ( s1h & 0xFFFF ) + ( fh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( chh >>> 16 ) + ( s1h >>> 16 ) + ( fh >>> 16 ) + ( c3 >>> 16 ) ;
t1h = blocks [ j + 4 ] ;
t1l = blocks [ j + 5 ] ;
t2h = K [ j + 4 ] ;
t2l = K [ j + 5 ] ;
t1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( chl & 0xFFFF ) + ( s1l & 0xFFFF ) + ( fl & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( chl >>> 16 ) + ( s1l >>> 16 ) + ( fl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( chh & 0xFFFF ) + ( s1h & 0xFFFF ) + ( fh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( chh >>> 16 ) + ( s1h >>> 16 ) + ( fh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( majl & 0xFFFF ) + ( s0l & 0xFFFF ) ;
c2 = ( majl >>> 16 ) + ( s0l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( majh & 0xFFFF ) + ( s0h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( majh >>> 16 ) + ( s0h >>> 16 ) + ( c3 >>> 16 ) ;
t1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
t2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( majl & 0xFFFF ) + ( s0l & 0xFFFF ) ;
c2 = ( majl >>> 16 ) + ( s0l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( majh & 0xFFFF ) + ( s0h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( majh >>> 16 ) + ( s0h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( bl & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( bl >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( bh & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( bh >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
t2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
fh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
fl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( bl & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( bl >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( bh & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( bh >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
fh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
fl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
bh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
bl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
s0h = ( ( bh >>> 28 ) | ( bl << 4 ) ) ^ ( ( bl >>> 2 ) | ( bh << 30 ) ) ^ ( ( bl >>> 7 ) | ( bh << 25 ) ) ;
s0l = ( ( bl >>> 28 ) | ( bh << 4 ) ) ^ ( ( bh >>> 2 ) | ( bl << 30 ) ) ^ ( ( bh >>> 7 ) | ( bl << 25 ) ) ;
bh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
bl = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
s1h = ( ( fh >>> 14 ) | ( fl << 18 ) ) ^ ( ( fh >>> 18 ) | ( fl << 14 ) ) ^ ( ( fl >>> 9 ) | ( fh << 23 ) ) ;
s1l = ( ( fl >>> 14 ) | ( fh << 18 ) ) ^ ( ( fl >>> 18 ) | ( fh << 14 ) ) ^ ( ( fh >>> 9 ) | ( fl << 23 ) ) ;
s0h = ( ( bh >>> 28 ) | ( bl << 4 ) ) ^ ( ( bl >>> 2 ) | ( bh << 30 ) ) ^ ( ( bl >>> 7 ) | ( bh << 25 ) ) ;
s0l = ( ( bl >>> 28 ) | ( bh << 4 ) ) ^ ( ( bh >>> 2 ) | ( bl << 30 ) ) ^ ( ( bh >>> 7 ) | ( bl << 25 ) ) ;
bch = bh & ch ;
bcl = bl & cl ;
majh = bch ^ ( bh & dh ) ^ cdh ;
majl = bcl ^ ( bl & dl ) ^ cdl ;
s1h = ( ( fh >>> 14 ) | ( fl << 18 ) ) ^ ( ( fh >>> 18 ) | ( fl << 14 ) ) ^ ( ( fl >>> 9 ) | ( fh << 23 ) ) ;
s1l = ( ( fl >>> 14 ) | ( fh << 18 ) ) ^ ( ( fl >>> 18 ) | ( fh << 14 ) ) ^ ( ( fh >>> 9 ) | ( fl << 23 ) ) ;
chh = ( fh & gh ) ^ ( ~ fh & hh ) ;
chl = ( fl & gl ) ^ ( ~ fl & hl ) ;
bch = bh & ch ;
bcl = bl & cl ;
majh = bch ^ ( bh & dh ) ^ cdh ;
majl = bcl ^ ( bl & dl ) ^ cdl ;
t1h = blocks [ j + 6 ] ;
t1l = blocks [ j + 7 ] ;
t2h = K [ j + 6 ] ;
t2l = K [ j + 7 ] ;
chh = ( fh & gh ) ^ ( ~ fh & hh ) ;
chl = ( fl & gl ) ^ ( ~ fl & hl ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( chl & 0xFFFF ) + ( s1l & 0xFFFF ) + ( el & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( chl >>> 16 ) + ( s1l >>> 16 ) + ( el >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( chh & 0xFFFF ) + ( s1h & 0xFFFF ) + ( eh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( chh >>> 16 ) + ( s1h >>> 16 ) + ( eh >>> 16 ) + ( c3 >>> 16 ) ;
t1h = blocks [ j + 6 ] ;
t1l = blocks [ j + 7 ] ;
t2h = K [ j + 6 ] ;
t2l = K [ j + 7 ] ;
t1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) + ( chl & 0xFFFF ) + ( s1l & 0xFFFF ) + ( el & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( chl >>> 16 ) + ( s1l >>> 16 ) + ( el >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( chh & 0xFFFF ) + ( s1h & 0xFFFF ) + ( eh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( chh >>> 16 ) + ( s1h >>> 16 ) + ( eh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( majl & 0xFFFF ) + ( s0l & 0xFFFF ) ;
c2 = ( majl >>> 16 ) + ( s0l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( majh & 0xFFFF ) + ( s0h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( majh >>> 16 ) + ( s0h >>> 16 ) + ( c3 >>> 16 ) ;
t1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
t2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( majl & 0xFFFF ) + ( s0l & 0xFFFF ) ;
c2 = ( majl >>> 16 ) + ( s0l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( majh & 0xFFFF ) + ( s0h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( majh >>> 16 ) + ( s0h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( al & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( al >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( ah & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( ah >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
t2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
t2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
eh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
el = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( al & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( al >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( ah & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( ah >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
eh = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
el = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
ah = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
al = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
}
c1 = ( t2l & 0xFFFF ) + ( t1l & 0xFFFF ) ;
c2 = ( t2l >>> 16 ) + ( t1l >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( t2h & 0xFFFF ) + ( t1h & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( t2h >>> 16 ) + ( t1h >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( h0l & 0xFFFF ) + ( al & 0xFFFF ) ;
c2 = ( h0l >>> 16 ) + ( al >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h0h & 0xFFFF ) + ( ah & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h0h >>> 16 ) + ( ah >>> 16 ) + ( c3 >>> 16 ) ;
ah = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
al = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
}
h0h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
h0l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( h0l & 0xFFFF ) + ( al & 0xFFFF ) ;
c2 = ( h0l >>> 16 ) + ( al >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h0h & 0xFFFF ) + ( ah & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h0h >>> 16 ) + ( ah >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( h1l & 0xFFFF ) + ( bl & 0xFFFF ) ;
c2 = ( h1l >>> 16 ) + ( bl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h1h & 0xFFFF ) + ( bh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h1h >>> 16 ) + ( bh >>> 16 ) + ( c3 >>> 16 ) ;
this . h0h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
this . h0l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
h1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
h1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( h1l & 0xFFFF ) + ( bl & 0xFFFF ) ;
c2 = ( h1l >>> 16 ) + ( bl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h1h & 0xFFFF ) + ( bh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h1h >>> 16 ) + ( bh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( h2l & 0xFFFF ) + ( cl & 0xFFFF ) ;
c2 = ( h2l >>> 16 ) + ( cl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h2h & 0xFFFF ) + ( ch & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h2h >>> 16 ) + ( ch >>> 16 ) + ( c3 >>> 16 ) ;
this . h1h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
this . h1l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
h2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
h2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( h2l & 0xFFFF ) + ( cl & 0xFFFF ) ;
c2 = ( h2l >>> 16 ) + ( cl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h2h & 0xFFFF ) + ( ch & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h2h >>> 16 ) + ( ch >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( h3l & 0xFFFF ) + ( dl & 0xFFFF ) ;
c2 = ( h3l >>> 16 ) + ( dl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h3h & 0xFFFF ) + ( dh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h3h >>> 16 ) + ( dh >>> 16 ) + ( c3 >>> 16 ) ;
this . h2h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
this . h2l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
h3h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
h3l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( h3l & 0xFFFF ) + ( dl & 0xFFFF ) ;
c2 = ( h3l >>> 16 ) + ( dl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h3h & 0xFFFF ) + ( dh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h3h >>> 16 ) + ( dh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( h4l & 0xFFFF ) + ( el & 0xFFFF ) ;
c2 = ( h4l >>> 16 ) + ( el >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h4h & 0xFFFF ) + ( eh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h4h >>> 16 ) + ( eh >>> 16 ) + ( c3 >>> 16 ) ;
this . h3h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
this . h3l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
h4h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
h4l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( h4l & 0xFFFF ) + ( el & 0xFFFF ) ;
c2 = ( h4l >>> 16 ) + ( el >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h4h & 0xFFFF ) + ( eh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h4h >>> 16 ) + ( eh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( h5l & 0xFFFF ) + ( fl & 0xFFFF ) ;
c2 = ( h5l >>> 16 ) + ( fl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h5h & 0xFFFF ) + ( fh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h5h >>> 16 ) + ( fh >>> 16 ) + ( c3 >>> 16 ) ;
this . h4h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
this . h4l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
h5h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
h5l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( h5l & 0xFFFF ) + ( fl & 0xFFFF ) ;
c2 = ( h5l >>> 16 ) + ( fl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h5h & 0xFFFF ) + ( fh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h5h >>> 16 ) + ( fh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( h6l & 0xFFFF ) + ( gl & 0xFFFF ) ;
c2 = ( h6l >>> 16 ) + ( gl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h6h & 0xFFFF ) + ( gh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h6h >>> 16 ) + ( gh >>> 16 ) + ( c3 >>> 16 ) ;
this . h5h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
this . h5l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
h6h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
h6l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
c1 = ( h6l & 0xFFFF ) + ( gl & 0xFFFF ) ;
c2 = ( h6l >>> 16 ) + ( gl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h6h & 0xFFFF ) + ( gh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h6h >>> 16 ) + ( gh >>> 16 ) + ( c3 >>> 16 ) ;
c1 = ( h7l & 0xFFFF ) + ( hl & 0xFFFF ) ;
c2 = ( h7l >>> 16 ) + ( hl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h7h & 0xFFFF ) + ( hh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h7h >>> 16 ) + ( hh >>> 16 ) + ( c3 >>> 16 ) ;
this . h6h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
this . h6l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
h7h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
h7l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
} while ( ! end ) ;
c1 = ( h7l & 0xFFFF ) + ( hl & 0xFFFF ) ;
c2 = ( h7l >>> 16 ) + ( hl >>> 16 ) + ( c1 >>> 16 ) ;
c3 = ( h7h & 0xFFFF ) + ( hh & 0xFFFF ) + ( c2 >>> 16 ) ;
c4 = ( h7h >>> 16 ) + ( hh >>> 16 ) + ( c3 >>> 16 ) ;
this . h7h = ( c4 << 16 ) | ( c3 & 0xFFFF ) ;
this . h7l = ( c2 << 16 ) | ( c1 & 0xFFFF ) ;
} ;
Sha512 . prototype . hex = function ( ) {
this . finalize ( ) ;
var h0h = this . h0h , h0l = this . h0l , h1h = this . h1h , h1l = this . h1l ,
h2h = this . h2h , h2l = this . h2l , h3h = this . h3h , h3l = this . h3l ,
h4h = this . h4h , h4l = this . h4l , h5h = this . h5h , h5l = this . h5l ,
h6h = this . h6h , h6l = this . h6l , h7h = this . h7h , h7l = this . h7l ,
bits = this . bits ;
var hex = HEX _CHARS [ ( h0h >> 28 ) & 0x0F ] + HEX _CHARS [ ( h0h >> 24 ) & 0x0F ] +
HEX _CHARS [ ( h0h >> 20 ) & 0x0F ] + HEX _CHARS [ ( h0h >> 16 ) & 0x0F ] +
@ -569,19 +660,96 @@
return hex ;
} ;
var exports = sha512 ;
exports . sha512 = sha512 ;
exports . sha384 = sha384 ;
exports . sha512 _256 = sha512 _256 ;
exports . sha512 _224 = sha512 _224 ;
Sha512 . prototype . toString = Sha512 . prototype . hex ;
Sha512 . prototype . digest = function ( ) {
this . finalize ( ) ;
var h0h = this . h0h , h0l = this . h0l , h1h = this . h1h , h1l = this . h1l ,
h2h = this . h2h , h2l = this . h2l , h3h = this . h3h , h3l = this . h3l ,
h4h = this . h4h , h4l = this . h4l , h5h = this . h5h , h5l = this . h5l ,
h6h = this . h6h , h6l = this . h6l , h7h = this . h7h , h7l = this . h7l ,
bits = this . bits ;
var arr = [
( h0h >> 24 ) & 0xFF , ( h0h >> 16 ) & 0xFF , ( h0h >> 8 ) & 0xFF , h0h & 0xFF ,
( h0l >> 24 ) & 0xFF , ( h0l >> 16 ) & 0xFF , ( h0l >> 8 ) & 0xFF , h0l & 0xFF ,
( h1h >> 24 ) & 0xFF , ( h1h >> 16 ) & 0xFF , ( h1h >> 8 ) & 0xFF , h1h & 0xFF ,
( h1l >> 24 ) & 0xFF , ( h1l >> 16 ) & 0xFF , ( h1l >> 8 ) & 0xFF , h1l & 0xFF ,
( h2h >> 24 ) & 0xFF , ( h2h >> 16 ) & 0xFF , ( h2h >> 8 ) & 0xFF , h2h & 0xFF ,
( h2l >> 24 ) & 0xFF , ( h2l >> 16 ) & 0xFF , ( h2l >> 8 ) & 0xFF , h2l & 0xFF ,
( h3h >> 24 ) & 0xFF , ( h3h >> 16 ) & 0xFF , ( h3h >> 8 ) & 0xFF , h3h & 0xFF
] ;
if ( bits >= 256 ) {
arr . push ( ( h3l >> 24 ) & 0xFF , ( h3l >> 16 ) & 0xFF , ( h3l >> 8 ) & 0xFF , h3l & 0xFF ) ;
}
if ( bits >= 384 ) {
arr . push (
( h4h >> 24 ) & 0xFF , ( h4h >> 16 ) & 0xFF , ( h4h >> 8 ) & 0xFF , h4h & 0xFF ,
( h4l >> 24 ) & 0xFF , ( h4l >> 16 ) & 0xFF , ( h4l >> 8 ) & 0xFF , h4l & 0xFF ,
( h5h >> 24 ) & 0xFF , ( h5h >> 16 ) & 0xFF , ( h5h >> 8 ) & 0xFF , h5h & 0xFF ,
( h5l >> 24 ) & 0xFF , ( h5l >> 16 ) & 0xFF , ( h5l >> 8 ) & 0xFF , h5l & 0xFF
) ;
}
if ( bits == 512 ) {
arr . push (
( h6h >> 24 ) & 0xFF , ( h6h >> 16 ) & 0xFF , ( h6h >> 8 ) & 0xFF , h6h & 0xFF ,
( h6l >> 24 ) & 0xFF , ( h6l >> 16 ) & 0xFF , ( h6l >> 8 ) & 0xFF , h6l & 0xFF ,
( h7h >> 24 ) & 0xFF , ( h7h >> 16 ) & 0xFF , ( h7h >> 8 ) & 0xFF , h7h & 0xFF ,
( h7l >> 24 ) & 0xFF , ( h7l >> 16 ) & 0xFF , ( h7l >> 8 ) & 0xFF , h7l & 0xFF
) ;
}
return arr ;
} ;
Sha512 . prototype . array = Sha512 . prototype . digest ;
Sha512 . prototype . arrayBuffer = function ( ) {
this . finalize ( ) ;
var bits = this . bits ;
var buffer = new ArrayBuffer ( bits / 8 ) ;
var dataView = new DataView ( buffer ) ;
dataView . setUint32 ( 0 , this . h0h ) ;
dataView . setUint32 ( 4 , this . h0l ) ;
dataView . setUint32 ( 8 , this . h1h ) ;
dataView . setUint32 ( 12 , this . h1l ) ;
dataView . setUint32 ( 16 , this . h2h ) ;
dataView . setUint32 ( 20 , this . h2l ) ;
dataView . setUint32 ( 24 , this . h3h ) ;
if ( bits >= 256 ) {
dataView . setUint32 ( 28 , this . h3l ) ;
}
if ( bits >= 384 ) {
dataView . setUint32 ( 32 , this . h4h ) ;
dataView . setUint32 ( 36 , this . h4l ) ;
dataView . setUint32 ( 40 , this . h5h ) ;
dataView . setUint32 ( 44 , this . h5l ) ;
}
if ( bits == 512 ) {
dataView . setUint32 ( 48 , this . h6h ) ;
dataView . setUint32 ( 52 , this . h6l ) ;
dataView . setUint32 ( 56 , this . h7h ) ;
dataView . setUint32 ( 60 , this . h7l ) ;
}
return buffer ;
} ;
var exports = createMethod ( 512 ) ;
exports . sha512 = exports ;
exports . sha384 = createMethod ( 384 ) ;
exports . sha512 _256 = createMethod ( 256 ) ;
exports . sha512 _224 = createMethod ( 224 ) ;
if ( COMMON _JS ) {
module . exports = exports ;
} else {
root . sha512 = sha512 ;
root . sha384 = sha384 ;
root . sha512 _256 = sha512 _256 ;
root . sha512 _224 = sha512 _224 ;
root . sha512 = exports. sha512;
root . sha384 = exports. sha384;
root . sha512 _256 = exports. sha512_256 ;
root . sha512 _224 = exports. sha512_224 ;
if ( AMD ) {
define ( function ( ) {
return exports ;