*/ private $h = array( 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ); /** * Unprocessed tail. * * @var string */ private $buf = ''; /** * Total bytes so far. * * @var int */ private $len = 0; /** * Add data. * * @param string $data Bytes. */ public function update( string $data ): void { $this->len += strlen( $data ); if ( '' !== $this->buf ) { $data = $this->buf . $data; $this->buf = ''; } $full = strlen( $data ) & ~63; if ( $full > 0 ) { $this->h = self::blocks( $this->h, 0 === ( strlen( $data ) & 63 ) ? $data : substr( $data, 0, $full ) ); } if ( strlen( $data ) > $full ) { $this->buf = substr( $data, $full ); } } /** * Hex digest (does not change the state). */ public function hex(): string { $pad = 55 - ( $this->len & 63 ); if ( $pad < 0 ) { $pad += 64; } $tail = $this->buf . "\x80" . str_repeat( "\0", $pad ) . pack( 'NN', ( $this->len >> 29 ) & 0xFFFFFFFF, ( $this->len << 3 ) & 0xFFFFFFFF ); $h = self::blocks( $this->h, $tail ); $out = ''; foreach ( $h as $v ) { $out .= sprintf( '%08x', $v ); } return $out; } /** * Serializable state. * * @return array{h:list,b:string,l:int} */ public function export(): array { return array( 'h' => $this->h, 'b' => bin2hex( $this->buf ), 'l' => $this->len, ); } /** * Restore from export(). * * @param array $s State. */ public static function import( array $s ): ?self { if ( ! isset( $s['h'], $s['b'], $s['l'] ) || ! is_array( $s['h'] ) || 8 !== count( $s['h'] ) || ! is_string( $s['b'] ) || strlen( $s['b'] ) >= 128 || 1 !== preg_match( '/^[0-9a-f]*$/', $s['b'] ) ) { return null; } $o = new self(); $o->h = array_map( 'intval', array_values( $s['h'] ) ); $o->buf = (string) hex2bin( $s['b'] ); $o->len = (int) $s['l']; if ( ( $o->len & 63 ) !== strlen( $o->buf ) ) { return null; } return $o; } /** * Compress whole 64-byte blocks. * * @param list $hh Chaining values. * @param string $data Bytes (multiple of 64). * @return list */ private static function blocks( array $hh, string $data ): array { list( $h0, $h1, $h2, $h3, $h4, $h5, $h6, $h7 ) = $hh; $len = strlen( $data ); for ( $p = 0; $p < $len; $p += 64 ) { $w = unpack( 'N16', substr( $data, $p, 64 ) ); $w0 = $w[1]; $w1 = $w[2]; $w2 = $w[3]; $w3 = $w[4]; $w4 = $w[5]; $w5 = $w[6]; $w6 = $w[7]; $w7 = $w[8]; $w8 = $w[9]; $w9 = $w[10]; $w10 = $w[11]; $w11 = $w[12]; $w12 = $w[13]; $w13 = $w[14]; $w14 = $w[15]; $w15 = $w[16]; $x = $w1 | ( $w1 << 32 ); $y = $w14 | ( $w14 << 32 ); $w16 = ( $w0 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w1 >> 3 ) ) + $w9 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w14 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w2 | ( $w2 << 32 ); $y = $w15 | ( $w15 << 32 ); $w17 = ( $w1 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w2 >> 3 ) ) + $w10 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w15 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w3 | ( $w3 << 32 ); $y = $w16 | ( $w16 << 32 ); $w18 = ( $w2 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w3 >> 3 ) ) + $w11 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w16 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w4 | ( $w4 << 32 ); $y = $w17 | ( $w17 << 32 ); $w19 = ( $w3 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w4 >> 3 ) ) + $w12 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w17 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w5 | ( $w5 << 32 ); $y = $w18 | ( $w18 << 32 ); $w20 = ( $w4 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w5 >> 3 ) ) + $w13 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w18 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w6 | ( $w6 << 32 ); $y = $w19 | ( $w19 << 32 ); $w21 = ( $w5 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w6 >> 3 ) ) + $w14 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w19 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w7 | ( $w7 << 32 ); $y = $w20 | ( $w20 << 32 ); $w22 = ( $w6 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w7 >> 3 ) ) + $w15 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w20 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w8 | ( $w8 << 32 ); $y = $w21 | ( $w21 << 32 ); $w23 = ( $w7 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w8 >> 3 ) ) + $w16 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w21 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w9 | ( $w9 << 32 ); $y = $w22 | ( $w22 << 32 ); $w24 = ( $w8 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w9 >> 3 ) ) + $w17 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w22 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w10 | ( $w10 << 32 ); $y = $w23 | ( $w23 << 32 ); $w25 = ( $w9 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w10 >> 3 ) ) + $w18 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w23 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w11 | ( $w11 << 32 ); $y = $w24 | ( $w24 << 32 ); $w26 = ( $w10 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w11 >> 3 ) ) + $w19 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w24 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w12 | ( $w12 << 32 ); $y = $w25 | ( $w25 << 32 ); $w27 = ( $w11 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w12 >> 3 ) ) + $w20 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w25 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w13 | ( $w13 << 32 ); $y = $w26 | ( $w26 << 32 ); $w28 = ( $w12 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w13 >> 3 ) ) + $w21 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w26 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w14 | ( $w14 << 32 ); $y = $w27 | ( $w27 << 32 ); $w29 = ( $w13 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w14 >> 3 ) ) + $w22 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w27 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w15 | ( $w15 << 32 ); $y = $w28 | ( $w28 << 32 ); $w30 = ( $w14 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w15 >> 3 ) ) + $w23 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w28 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w16 | ( $w16 << 32 ); $y = $w29 | ( $w29 << 32 ); $w31 = ( $w15 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w16 >> 3 ) ) + $w24 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w29 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w17 | ( $w17 << 32 ); $y = $w30 | ( $w30 << 32 ); $w32 = ( $w16 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w17 >> 3 ) ) + $w25 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w30 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w18 | ( $w18 << 32 ); $y = $w31 | ( $w31 << 32 ); $w33 = ( $w17 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w18 >> 3 ) ) + $w26 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w31 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w19 | ( $w19 << 32 ); $y = $w32 | ( $w32 << 32 ); $w34 = ( $w18 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w19 >> 3 ) ) + $w27 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w32 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w20 | ( $w20 << 32 ); $y = $w33 | ( $w33 << 32 ); $w35 = ( $w19 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w20 >> 3 ) ) + $w28 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w33 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w21 | ( $w21 << 32 ); $y = $w34 | ( $w34 << 32 ); $w36 = ( $w20 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w21 >> 3 ) ) + $w29 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w34 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w22 | ( $w22 << 32 ); $y = $w35 | ( $w35 << 32 ); $w37 = ( $w21 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w22 >> 3 ) ) + $w30 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w35 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w23 | ( $w23 << 32 ); $y = $w36 | ( $w36 << 32 ); $w38 = ( $w22 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w23 >> 3 ) ) + $w31 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w36 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w24 | ( $w24 << 32 ); $y = $w37 | ( $w37 << 32 ); $w39 = ( $w23 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w24 >> 3 ) ) + $w32 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w37 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w25 | ( $w25 << 32 ); $y = $w38 | ( $w38 << 32 ); $w40 = ( $w24 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w25 >> 3 ) ) + $w33 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w38 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w26 | ( $w26 << 32 ); $y = $w39 | ( $w39 << 32 ); $w41 = ( $w25 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w26 >> 3 ) ) + $w34 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w39 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w27 | ( $w27 << 32 ); $y = $w40 | ( $w40 << 32 ); $w42 = ( $w26 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w27 >> 3 ) ) + $w35 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w40 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w28 | ( $w28 << 32 ); $y = $w41 | ( $w41 << 32 ); $w43 = ( $w27 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w28 >> 3 ) ) + $w36 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w41 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w29 | ( $w29 << 32 ); $y = $w42 | ( $w42 << 32 ); $w44 = ( $w28 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w29 >> 3 ) ) + $w37 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w42 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w30 | ( $w30 << 32 ); $y = $w43 | ( $w43 << 32 ); $w45 = ( $w29 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w30 >> 3 ) ) + $w38 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w43 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w31 | ( $w31 << 32 ); $y = $w44 | ( $w44 << 32 ); $w46 = ( $w30 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w31 >> 3 ) ) + $w39 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w44 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w32 | ( $w32 << 32 ); $y = $w45 | ( $w45 << 32 ); $w47 = ( $w31 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w32 >> 3 ) ) + $w40 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w45 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w33 | ( $w33 << 32 ); $y = $w46 | ( $w46 << 32 ); $w48 = ( $w32 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w33 >> 3 ) ) + $w41 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w46 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w34 | ( $w34 << 32 ); $y = $w47 | ( $w47 << 32 ); $w49 = ( $w33 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w34 >> 3 ) ) + $w42 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w47 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w35 | ( $w35 << 32 ); $y = $w48 | ( $w48 << 32 ); $w50 = ( $w34 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w35 >> 3 ) ) + $w43 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w48 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w36 | ( $w36 << 32 ); $y = $w49 | ( $w49 << 32 ); $w51 = ( $w35 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w36 >> 3 ) ) + $w44 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w49 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w37 | ( $w37 << 32 ); $y = $w50 | ( $w50 << 32 ); $w52 = ( $w36 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w37 >> 3 ) ) + $w45 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w50 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w38 | ( $w38 << 32 ); $y = $w51 | ( $w51 << 32 ); $w53 = ( $w37 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w38 >> 3 ) ) + $w46 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w51 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w39 | ( $w39 << 32 ); $y = $w52 | ( $w52 << 32 ); $w54 = ( $w38 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w39 >> 3 ) ) + $w47 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w52 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w40 | ( $w40 << 32 ); $y = $w53 | ( $w53 << 32 ); $w55 = ( $w39 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w40 >> 3 ) ) + $w48 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w53 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w41 | ( $w41 << 32 ); $y = $w54 | ( $w54 << 32 ); $w56 = ( $w40 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w41 >> 3 ) ) + $w49 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w54 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w42 | ( $w42 << 32 ); $y = $w55 | ( $w55 << 32 ); $w57 = ( $w41 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w42 >> 3 ) ) + $w50 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w55 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w43 | ( $w43 << 32 ); $y = $w56 | ( $w56 << 32 ); $w58 = ( $w42 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w43 >> 3 ) ) + $w51 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w56 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w44 | ( $w44 << 32 ); $y = $w57 | ( $w57 << 32 ); $w59 = ( $w43 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w44 >> 3 ) ) + $w52 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w57 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w45 | ( $w45 << 32 ); $y = $w58 | ( $w58 << 32 ); $w60 = ( $w44 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w45 >> 3 ) ) + $w53 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w58 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w46 | ( $w46 << 32 ); $y = $w59 | ( $w59 << 32 ); $w61 = ( $w45 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w46 >> 3 ) ) + $w54 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w59 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w47 | ( $w47 << 32 ); $y = $w60 | ( $w60 << 32 ); $w62 = ( $w46 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w47 >> 3 ) ) + $w55 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w60 >> 10 ) ) ) & 0xFFFFFFFF; $x = $w48 | ( $w48 << 32 ); $y = $w61 | ( $w61 << 32 ); $w63 = ( $w47 + ( ( ( $x >> 7 ) ^ ( $x >> 18 ) ) & 0xFFFFFFFF ^ ( $w48 >> 3 ) ) + $w56 + ( ( ( $y >> 17 ) ^ ( $y >> 19 ) ) & 0xFFFFFFFF ^ ( $w61 >> 10 ) ) ) & 0xFFFFFFFF; $a = $h0; $b = $h1; $c = $h2; $d = $h3; $e = $h4; $f = $h5; $g = $h6; $h = $h7; $x = $e | ( $e << 32 ); $y = $a | ( $a << 32 ); $t1 = $h + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $e & $f ) ^ ( ~$e & $g ) ) + 0x428a2f98 + $w0; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $a & ( $b | $c ) ) | ( $b & $c ) ); $d = ( $d + $t1 ) & 0xFFFFFFFF; $h = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $d | ( $d << 32 ); $y = $h | ( $h << 32 ); $t1 = $g + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $d & $e ) ^ ( ~$d & $f ) ) + 0x71374491 + $w1; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $h & ( $a | $b ) ) | ( $a & $b ) ); $c = ( $c + $t1 ) & 0xFFFFFFFF; $g = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $c | ( $c << 32 ); $y = $g | ( $g << 32 ); $t1 = $f + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $c & $d ) ^ ( ~$c & $e ) ) + 0xb5c0fbcf + $w2; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $g & ( $h | $a ) ) | ( $h & $a ) ); $b = ( $b + $t1 ) & 0xFFFFFFFF; $f = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $b | ( $b << 32 ); $y = $f | ( $f << 32 ); $t1 = $e + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $b & $c ) ^ ( ~$b & $d ) ) + 0xe9b5dba5 + $w3; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $f & ( $g | $h ) ) | ( $g & $h ) ); $a = ( $a + $t1 ) & 0xFFFFFFFF; $e = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $a | ( $a << 32 ); $y = $e | ( $e << 32 ); $t1 = $d + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $a & $b ) ^ ( ~$a & $c ) ) + 0x3956c25b + $w4; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $e & ( $f | $g ) ) | ( $f & $g ) ); $h = ( $h + $t1 ) & 0xFFFFFFFF; $d = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $h | ( $h << 32 ); $y = $d | ( $d << 32 ); $t1 = $c + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $h & $a ) ^ ( ~$h & $b ) ) + 0x59f111f1 + $w5; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $d & ( $e | $f ) ) | ( $e & $f ) ); $g = ( $g + $t1 ) & 0xFFFFFFFF; $c = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $g | ( $g << 32 ); $y = $c | ( $c << 32 ); $t1 = $b + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $g & $h ) ^ ( ~$g & $a ) ) + 0x923f82a4 + $w6; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $c & ( $d | $e ) ) | ( $d & $e ) ); $f = ( $f + $t1 ) & 0xFFFFFFFF; $b = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $f | ( $f << 32 ); $y = $b | ( $b << 32 ); $t1 = $a + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $f & $g ) ^ ( ~$f & $h ) ) + 0xab1c5ed5 + $w7; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $b & ( $c | $d ) ) | ( $c & $d ) ); $e = ( $e + $t1 ) & 0xFFFFFFFF; $a = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $e | ( $e << 32 ); $y = $a | ( $a << 32 ); $t1 = $h + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $e & $f ) ^ ( ~$e & $g ) ) + 0xd807aa98 + $w8; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $a & ( $b | $c ) ) | ( $b & $c ) ); $d = ( $d + $t1 ) & 0xFFFFFFFF; $h = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $d | ( $d << 32 ); $y = $h | ( $h << 32 ); $t1 = $g + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $d & $e ) ^ ( ~$d & $f ) ) + 0x12835b01 + $w9; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $h & ( $a | $b ) ) | ( $a & $b ) ); $c = ( $c + $t1 ) & 0xFFFFFFFF; $g = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $c | ( $c << 32 ); $y = $g | ( $g << 32 ); $t1 = $f + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $c & $d ) ^ ( ~$c & $e ) ) + 0x243185be + $w10; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $g & ( $h | $a ) ) | ( $h & $a ) ); $b = ( $b + $t1 ) & 0xFFFFFFFF; $f = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $b | ( $b << 32 ); $y = $f | ( $f << 32 ); $t1 = $e + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $b & $c ) ^ ( ~$b & $d ) ) + 0x550c7dc3 + $w11; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $f & ( $g | $h ) ) | ( $g & $h ) ); $a = ( $a + $t1 ) & 0xFFFFFFFF; $e = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $a | ( $a << 32 ); $y = $e | ( $e << 32 ); $t1 = $d + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $a & $b ) ^ ( ~$a & $c ) ) + 0x72be5d74 + $w12; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $e & ( $f | $g ) ) | ( $f & $g ) ); $h = ( $h + $t1 ) & 0xFFFFFFFF; $d = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $h | ( $h << 32 ); $y = $d | ( $d << 32 ); $t1 = $c + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $h & $a ) ^ ( ~$h & $b ) ) + 0x80deb1fe + $w13; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $d & ( $e | $f ) ) | ( $e & $f ) ); $g = ( $g + $t1 ) & 0xFFFFFFFF; $c = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $g | ( $g << 32 ); $y = $c | ( $c << 32 ); $t1 = $b + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $g & $h ) ^ ( ~$g & $a ) ) + 0x9bdc06a7 + $w14; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $c & ( $d | $e ) ) | ( $d & $e ) ); $f = ( $f + $t1 ) & 0xFFFFFFFF; $b = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $f | ( $f << 32 ); $y = $b | ( $b << 32 ); $t1 = $a + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $f & $g ) ^ ( ~$f & $h ) ) + 0xc19bf174 + $w15; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $b & ( $c | $d ) ) | ( $c & $d ) ); $e = ( $e + $t1 ) & 0xFFFFFFFF; $a = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $e | ( $e << 32 ); $y = $a | ( $a << 32 ); $t1 = $h + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $e & $f ) ^ ( ~$e & $g ) ) + 0xe49b69c1 + $w16; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $a & ( $b | $c ) ) | ( $b & $c ) ); $d = ( $d + $t1 ) & 0xFFFFFFFF; $h = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $d | ( $d << 32 ); $y = $h | ( $h << 32 ); $t1 = $g + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $d & $e ) ^ ( ~$d & $f ) ) + 0xefbe4786 + $w17; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $h & ( $a | $b ) ) | ( $a & $b ) ); $c = ( $c + $t1 ) & 0xFFFFFFFF; $g = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $c | ( $c << 32 ); $y = $g | ( $g << 32 ); $t1 = $f + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $c & $d ) ^ ( ~$c & $e ) ) + 0x0fc19dc6 + $w18; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $g & ( $h | $a ) ) | ( $h & $a ) ); $b = ( $b + $t1 ) & 0xFFFFFFFF; $f = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $b | ( $b << 32 ); $y = $f | ( $f << 32 ); $t1 = $e + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $b & $c ) ^ ( ~$b & $d ) ) + 0x240ca1cc + $w19; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $f & ( $g | $h ) ) | ( $g & $h ) ); $a = ( $a + $t1 ) & 0xFFFFFFFF; $e = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $a | ( $a << 32 ); $y = $e | ( $e << 32 ); $t1 = $d + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $a & $b ) ^ ( ~$a & $c ) ) + 0x2de92c6f + $w20; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $e & ( $f | $g ) ) | ( $f & $g ) ); $h = ( $h + $t1 ) & 0xFFFFFFFF; $d = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $h | ( $h << 32 ); $y = $d | ( $d << 32 ); $t1 = $c + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $h & $a ) ^ ( ~$h & $b ) ) + 0x4a7484aa + $w21; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $d & ( $e | $f ) ) | ( $e & $f ) ); $g = ( $g + $t1 ) & 0xFFFFFFFF; $c = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $g | ( $g << 32 ); $y = $c | ( $c << 32 ); $t1 = $b + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $g & $h ) ^ ( ~$g & $a ) ) + 0x5cb0a9dc + $w22; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $c & ( $d | $e ) ) | ( $d & $e ) ); $f = ( $f + $t1 ) & 0xFFFFFFFF; $b = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $f | ( $f << 32 ); $y = $b | ( $b << 32 ); $t1 = $a + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $f & $g ) ^ ( ~$f & $h ) ) + 0x76f988da + $w23; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $b & ( $c | $d ) ) | ( $c & $d ) ); $e = ( $e + $t1 ) & 0xFFFFFFFF; $a = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $e | ( $e << 32 ); $y = $a | ( $a << 32 ); $t1 = $h + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $e & $f ) ^ ( ~$e & $g ) ) + 0x983e5152 + $w24; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $a & ( $b | $c ) ) | ( $b & $c ) ); $d = ( $d + $t1 ) & 0xFFFFFFFF; $h = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $d | ( $d << 32 ); $y = $h | ( $h << 32 ); $t1 = $g + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $d & $e ) ^ ( ~$d & $f ) ) + 0xa831c66d + $w25; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $h & ( $a | $b ) ) | ( $a & $b ) ); $c = ( $c + $t1 ) & 0xFFFFFFFF; $g = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $c | ( $c << 32 ); $y = $g | ( $g << 32 ); $t1 = $f + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $c & $d ) ^ ( ~$c & $e ) ) + 0xb00327c8 + $w26; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $g & ( $h | $a ) ) | ( $h & $a ) ); $b = ( $b + $t1 ) & 0xFFFFFFFF; $f = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $b | ( $b << 32 ); $y = $f | ( $f << 32 ); $t1 = $e + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $b & $c ) ^ ( ~$b & $d ) ) + 0xbf597fc7 + $w27; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $f & ( $g | $h ) ) | ( $g & $h ) ); $a = ( $a + $t1 ) & 0xFFFFFFFF; $e = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $a | ( $a << 32 ); $y = $e | ( $e << 32 ); $t1 = $d + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $a & $b ) ^ ( ~$a & $c ) ) + 0xc6e00bf3 + $w28; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $e & ( $f | $g ) ) | ( $f & $g ) ); $h = ( $h + $t1 ) & 0xFFFFFFFF; $d = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $h | ( $h << 32 ); $y = $d | ( $d << 32 ); $t1 = $c + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $h & $a ) ^ ( ~$h & $b ) ) + 0xd5a79147 + $w29; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $d & ( $e | $f ) ) | ( $e & $f ) ); $g = ( $g + $t1 ) & 0xFFFFFFFF; $c = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $g | ( $g << 32 ); $y = $c | ( $c << 32 ); $t1 = $b + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $g & $h ) ^ ( ~$g & $a ) ) + 0x06ca6351 + $w30; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $c & ( $d | $e ) ) | ( $d & $e ) ); $f = ( $f + $t1 ) & 0xFFFFFFFF; $b = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $f | ( $f << 32 ); $y = $b | ( $b << 32 ); $t1 = $a + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $f & $g ) ^ ( ~$f & $h ) ) + 0x14292967 + $w31; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $b & ( $c | $d ) ) | ( $c & $d ) ); $e = ( $e + $t1 ) & 0xFFFFFFFF; $a = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $e | ( $e << 32 ); $y = $a | ( $a << 32 ); $t1 = $h + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $e & $f ) ^ ( ~$e & $g ) ) + 0x27b70a85 + $w32; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $a & ( $b | $c ) ) | ( $b & $c ) ); $d = ( $d + $t1 ) & 0xFFFFFFFF; $h = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $d | ( $d << 32 ); $y = $h | ( $h << 32 ); $t1 = $g + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $d & $e ) ^ ( ~$d & $f ) ) + 0x2e1b2138 + $w33; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $h & ( $a | $b ) ) | ( $a & $b ) ); $c = ( $c + $t1 ) & 0xFFFFFFFF; $g = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $c | ( $c << 32 ); $y = $g | ( $g << 32 ); $t1 = $f + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $c & $d ) ^ ( ~$c & $e ) ) + 0x4d2c6dfc + $w34; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $g & ( $h | $a ) ) | ( $h & $a ) ); $b = ( $b + $t1 ) & 0xFFFFFFFF; $f = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $b | ( $b << 32 ); $y = $f | ( $f << 32 ); $t1 = $e + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $b & $c ) ^ ( ~$b & $d ) ) + 0x53380d13 + $w35; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $f & ( $g | $h ) ) | ( $g & $h ) ); $a = ( $a + $t1 ) & 0xFFFFFFFF; $e = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $a | ( $a << 32 ); $y = $e | ( $e << 32 ); $t1 = $d + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $a & $b ) ^ ( ~$a & $c ) ) + 0x650a7354 + $w36; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $e & ( $f | $g ) ) | ( $f & $g ) ); $h = ( $h + $t1 ) & 0xFFFFFFFF; $d = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $h | ( $h << 32 ); $y = $d | ( $d << 32 ); $t1 = $c + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $h & $a ) ^ ( ~$h & $b ) ) + 0x766a0abb + $w37; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $d & ( $e | $f ) ) | ( $e & $f ) ); $g = ( $g + $t1 ) & 0xFFFFFFFF; $c = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $g | ( $g << 32 ); $y = $c | ( $c << 32 ); $t1 = $b + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $g & $h ) ^ ( ~$g & $a ) ) + 0x81c2c92e + $w38; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $c & ( $d | $e ) ) | ( $d & $e ) ); $f = ( $f + $t1 ) & 0xFFFFFFFF; $b = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $f | ( $f << 32 ); $y = $b | ( $b << 32 ); $t1 = $a + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $f & $g ) ^ ( ~$f & $h ) ) + 0x92722c85 + $w39; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $b & ( $c | $d ) ) | ( $c & $d ) ); $e = ( $e + $t1 ) & 0xFFFFFFFF; $a = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $e | ( $e << 32 ); $y = $a | ( $a << 32 ); $t1 = $h + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $e & $f ) ^ ( ~$e & $g ) ) + 0xa2bfe8a1 + $w40; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $a & ( $b | $c ) ) | ( $b & $c ) ); $d = ( $d + $t1 ) & 0xFFFFFFFF; $h = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $d | ( $d << 32 ); $y = $h | ( $h << 32 ); $t1 = $g + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $d & $e ) ^ ( ~$d & $f ) ) + 0xa81a664b + $w41; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $h & ( $a | $b ) ) | ( $a & $b ) ); $c = ( $c + $t1 ) & 0xFFFFFFFF; $g = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $c | ( $c << 32 ); $y = $g | ( $g << 32 ); $t1 = $f + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $c & $d ) ^ ( ~$c & $e ) ) + 0xc24b8b70 + $w42; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $g & ( $h | $a ) ) | ( $h & $a ) ); $b = ( $b + $t1 ) & 0xFFFFFFFF; $f = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $b | ( $b << 32 ); $y = $f | ( $f << 32 ); $t1 = $e + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $b & $c ) ^ ( ~$b & $d ) ) + 0xc76c51a3 + $w43; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $f & ( $g | $h ) ) | ( $g & $h ) ); $a = ( $a + $t1 ) & 0xFFFFFFFF; $e = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $a | ( $a << 32 ); $y = $e | ( $e << 32 ); $t1 = $d + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $a & $b ) ^ ( ~$a & $c ) ) + 0xd192e819 + $w44; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $e & ( $f | $g ) ) | ( $f & $g ) ); $h = ( $h + $t1 ) & 0xFFFFFFFF; $d = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $h | ( $h << 32 ); $y = $d | ( $d << 32 ); $t1 = $c + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $h & $a ) ^ ( ~$h & $b ) ) + 0xd6990624 + $w45; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $d & ( $e | $f ) ) | ( $e & $f ) ); $g = ( $g + $t1 ) & 0xFFFFFFFF; $c = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $g | ( $g << 32 ); $y = $c | ( $c << 32 ); $t1 = $b + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $g & $h ) ^ ( ~$g & $a ) ) + 0xf40e3585 + $w46; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $c & ( $d | $e ) ) | ( $d & $e ) ); $f = ( $f + $t1 ) & 0xFFFFFFFF; $b = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $f | ( $f << 32 ); $y = $b | ( $b << 32 ); $t1 = $a + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $f & $g ) ^ ( ~$f & $h ) ) + 0x106aa070 + $w47; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $b & ( $c | $d ) ) | ( $c & $d ) ); $e = ( $e + $t1 ) & 0xFFFFFFFF; $a = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $e | ( $e << 32 ); $y = $a | ( $a << 32 ); $t1 = $h + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $e & $f ) ^ ( ~$e & $g ) ) + 0x19a4c116 + $w48; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $a & ( $b | $c ) ) | ( $b & $c ) ); $d = ( $d + $t1 ) & 0xFFFFFFFF; $h = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $d | ( $d << 32 ); $y = $h | ( $h << 32 ); $t1 = $g + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $d & $e ) ^ ( ~$d & $f ) ) + 0x1e376c08 + $w49; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $h & ( $a | $b ) ) | ( $a & $b ) ); $c = ( $c + $t1 ) & 0xFFFFFFFF; $g = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $c | ( $c << 32 ); $y = $g | ( $g << 32 ); $t1 = $f + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $c & $d ) ^ ( ~$c & $e ) ) + 0x2748774c + $w50; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $g & ( $h | $a ) ) | ( $h & $a ) ); $b = ( $b + $t1 ) & 0xFFFFFFFF; $f = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $b | ( $b << 32 ); $y = $f | ( $f << 32 ); $t1 = $e + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $b & $c ) ^ ( ~$b & $d ) ) + 0x34b0bcb5 + $w51; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $f & ( $g | $h ) ) | ( $g & $h ) ); $a = ( $a + $t1 ) & 0xFFFFFFFF; $e = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $a | ( $a << 32 ); $y = $e | ( $e << 32 ); $t1 = $d + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $a & $b ) ^ ( ~$a & $c ) ) + 0x391c0cb3 + $w52; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $e & ( $f | $g ) ) | ( $f & $g ) ); $h = ( $h + $t1 ) & 0xFFFFFFFF; $d = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $h | ( $h << 32 ); $y = $d | ( $d << 32 ); $t1 = $c + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $h & $a ) ^ ( ~$h & $b ) ) + 0x4ed8aa4a + $w53; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $d & ( $e | $f ) ) | ( $e & $f ) ); $g = ( $g + $t1 ) & 0xFFFFFFFF; $c = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $g | ( $g << 32 ); $y = $c | ( $c << 32 ); $t1 = $b + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $g & $h ) ^ ( ~$g & $a ) ) + 0x5b9cca4f + $w54; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $c & ( $d | $e ) ) | ( $d & $e ) ); $f = ( $f + $t1 ) & 0xFFFFFFFF; $b = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $f | ( $f << 32 ); $y = $b | ( $b << 32 ); $t1 = $a + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $f & $g ) ^ ( ~$f & $h ) ) + 0x682e6ff3 + $w55; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $b & ( $c | $d ) ) | ( $c & $d ) ); $e = ( $e + $t1 ) & 0xFFFFFFFF; $a = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $e | ( $e << 32 ); $y = $a | ( $a << 32 ); $t1 = $h + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $e & $f ) ^ ( ~$e & $g ) ) + 0x748f82ee + $w56; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $a & ( $b | $c ) ) | ( $b & $c ) ); $d = ( $d + $t1 ) & 0xFFFFFFFF; $h = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $d | ( $d << 32 ); $y = $h | ( $h << 32 ); $t1 = $g + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $d & $e ) ^ ( ~$d & $f ) ) + 0x78a5636f + $w57; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $h & ( $a | $b ) ) | ( $a & $b ) ); $c = ( $c + $t1 ) & 0xFFFFFFFF; $g = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $c | ( $c << 32 ); $y = $g | ( $g << 32 ); $t1 = $f + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $c & $d ) ^ ( ~$c & $e ) ) + 0x84c87814 + $w58; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $g & ( $h | $a ) ) | ( $h & $a ) ); $b = ( $b + $t1 ) & 0xFFFFFFFF; $f = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $b | ( $b << 32 ); $y = $f | ( $f << 32 ); $t1 = $e + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $b & $c ) ^ ( ~$b & $d ) ) + 0x8cc70208 + $w59; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $f & ( $g | $h ) ) | ( $g & $h ) ); $a = ( $a + $t1 ) & 0xFFFFFFFF; $e = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $a | ( $a << 32 ); $y = $e | ( $e << 32 ); $t1 = $d + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $a & $b ) ^ ( ~$a & $c ) ) + 0x90befffa + $w60; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $e & ( $f | $g ) ) | ( $f & $g ) ); $h = ( $h + $t1 ) & 0xFFFFFFFF; $d = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $h | ( $h << 32 ); $y = $d | ( $d << 32 ); $t1 = $c + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $h & $a ) ^ ( ~$h & $b ) ) + 0xa4506ceb + $w61; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $d & ( $e | $f ) ) | ( $e & $f ) ); $g = ( $g + $t1 ) & 0xFFFFFFFF; $c = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $g | ( $g << 32 ); $y = $c | ( $c << 32 ); $t1 = $b + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $g & $h ) ^ ( ~$g & $a ) ) + 0xbef9a3f7 + $w62; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $c & ( $d | $e ) ) | ( $d & $e ) ); $f = ( $f + $t1 ) & 0xFFFFFFFF; $b = ( $t1 + $t2 ) & 0xFFFFFFFF; $x = $f | ( $f << 32 ); $y = $b | ( $b << 32 ); $t1 = $a + ( ( ( $x >> 6 ) ^ ( $x >> 11 ) ^ ( $x >> 25 ) ) & 0xFFFFFFFF ) + ( ( $f & $g ) ^ ( ~$f & $h ) ) + 0xc67178f2 + $w63; $t2 = ( ( ( $y >> 2 ) ^ ( $y >> 13 ) ^ ( $y >> 22 ) ) & 0xFFFFFFFF ) + ( ( $b & ( $c | $d ) ) | ( $c & $d ) ); $e = ( $e + $t1 ) & 0xFFFFFFFF; $a = ( $t1 + $t2 ) & 0xFFFFFFFF; $h0 = ( $h0 + $a ) & 0xFFFFFFFF; $h1 = ( $h1 + $b ) & 0xFFFFFFFF; $h2 = ( $h2 + $c ) & 0xFFFFFFFF; $h3 = ( $h3 + $d ) & 0xFFFFFFFF; $h4 = ( $h4 + $e ) & 0xFFFFFFFF; $h5 = ( $h5 + $f ) & 0xFFFFFFFF; $h6 = ( $h6 + $g ) & 0xFFFFFFFF; $h7 = ( $h7 + $h ) & 0xFFFFFFFF; } return array( $h0, $h1, $h2, $h3, $h4, $h5, $h6, $h7 ); } }