mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-09-21 20:19:02 +00:00
Merge branch '3.0'
This commit is contained in:
commit
2f3555a9b4
@ -422,7 +422,7 @@ class Blowfish extends BlockCipher
|
|||||||
$j = 0;
|
$j = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->bctx['p'][] = self::$parray[$i] ^ $data;
|
$this->bctx['p'][] = self::$parray[$i] ^ intval($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// encrypt the zero-string, replace P1 and P2 with the encrypted data,
|
// encrypt the zero-string, replace P1 and P2 with the encrypted data,
|
||||||
@ -442,6 +442,22 @@ class Blowfish extends BlockCipher
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize Static Variables
|
||||||
|
*/
|
||||||
|
protected static function initialize_static_variables()
|
||||||
|
{
|
||||||
|
if (is_float(self::$sbox2[0])) {
|
||||||
|
self::$sbox0 = array_map('intval', self::$sbox0);
|
||||||
|
self::$sbox1 = array_map('intval', self::$sbox1);
|
||||||
|
self::$sbox2 = array_map('intval', self::$sbox2);
|
||||||
|
self::$sbox3 = array_map('intval', self::$sbox3);
|
||||||
|
self::$parray = array_map('intval', self::$parray);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::initialize_static_variables();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* bcrypt
|
* bcrypt
|
||||||
*/
|
*/
|
||||||
@ -477,6 +493,12 @@ class Blowfish extends BlockCipher
|
|||||||
*/
|
*/
|
||||||
public static function bcrypt_pbkdf(string $pass, string $salt, int $keylen, int $rounds): string
|
public static function bcrypt_pbkdf(string $pass, string $salt, int $keylen, int $rounds): string
|
||||||
{
|
{
|
||||||
|
self::initialize_static_variables();
|
||||||
|
|
||||||
|
if (PHP_INT_SIZE == 4) {
|
||||||
|
throw new \RuntimeException('bcrypt is far too slow to be practical on 32-bit versions of PHP');
|
||||||
|
}
|
||||||
|
|
||||||
$sha2pass = hash('sha512', $pass, true);
|
$sha2pass = hash('sha512', $pass, true);
|
||||||
$results = [];
|
$results = [];
|
||||||
$count = 1;
|
$count = 1;
|
||||||
@ -643,7 +665,9 @@ class Blowfish extends BlockCipher
|
|||||||
$l = $in[1];
|
$l = $in[1];
|
||||||
$r = $in[2];
|
$r = $in[2];
|
||||||
|
|
||||||
[$r, $l] = self::encryptBlockHelper($l, $r, $sb_0, $sb_1, $sb_2, $sb_3, $p);
|
[$r, $l] = PHP_INT_SIZE == 4 ?
|
||||||
|
self::encryptBlockHelperSlow($l, $r, $sb_0, $sb_1, $sb_2, $sb_3, $p) :
|
||||||
|
self::encryptBlockHelperFast($l, $r, $sb_0, $sb_1, $sb_2, $sb_3, $p);
|
||||||
|
|
||||||
return pack("N*", $r, $l);
|
return pack("N*", $r, $l);
|
||||||
}
|
}
|
||||||
@ -682,6 +706,43 @@ class Blowfish extends BlockCipher
|
|||||||
return [$x1 & 0xFFFFFFFF ^ $p[17], $x0 & 0xFFFFFFFF];
|
return [$x1 & 0xFFFFFFFF ^ $p[17], $x0 & 0xFFFFFFFF];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Slow helper function for block encryption
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @param int $x0
|
||||||
|
* @param int $x1
|
||||||
|
* @param int[] $sbox0
|
||||||
|
* @param int[] $sbox1
|
||||||
|
* @param int[] $sbox2
|
||||||
|
* @param int[] $sbox3
|
||||||
|
* @param int[] $p
|
||||||
|
* @return int[]
|
||||||
|
*/
|
||||||
|
private static function encryptBlockHelperSlow($x0, $x1, array $sbox0, array $sbox1, array $sbox2, array $sbox3, array $p)
|
||||||
|
{
|
||||||
|
// -16777216 == intval(0xFF000000) on 32-bit PHP installs
|
||||||
|
$x0 ^= $p[0];
|
||||||
|
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[1];
|
||||||
|
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[2];
|
||||||
|
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[3];
|
||||||
|
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[4];
|
||||||
|
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[5];
|
||||||
|
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[6];
|
||||||
|
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[7];
|
||||||
|
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[8];
|
||||||
|
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[9];
|
||||||
|
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[10];
|
||||||
|
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[11];
|
||||||
|
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[12];
|
||||||
|
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[13];
|
||||||
|
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[14];
|
||||||
|
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[15];
|
||||||
|
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[16];
|
||||||
|
|
||||||
|
return [$x1 ^ $p[17], $x0];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decrypts a block
|
* Decrypts a block
|
||||||
*/
|
*/
|
||||||
|
@ -268,10 +268,10 @@ class ChaCha20 extends Salsa20
|
|||||||
// xor'ing and rotation are all on the same line so i'm keeping it on the same
|
// xor'ing and rotation are all on the same line so i'm keeping it on the same
|
||||||
// line here as well
|
// line here as well
|
||||||
// @codingStandardsIgnoreStart
|
// @codingStandardsIgnoreStart
|
||||||
$a+= $b; $d = self::leftRotate($d ^ $a, 16);
|
$a+= $b; $d = self::leftRotate(intval($d) ^ intval($a), 16);
|
||||||
$c+= $d; $b = self::leftRotate($b ^ $c, 12);
|
$c+= $d; $b = self::leftRotate(intval($b) ^ intval($c), 12);
|
||||||
$a+= $b; $d = self::leftRotate($d ^ $a, 8);
|
$a+= $b; $d = self::leftRotate(intval($d) ^ intval($a), 8);
|
||||||
$c+= $d; $b = self::leftRotate($b ^ $c, 7);
|
$c+= $d; $b = self::leftRotate(intval($b) ^ intval($c), 7);
|
||||||
// @codingStandardsIgnoreEnd
|
// @codingStandardsIgnoreEnd
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,424 +344,424 @@ class ChaCha20 extends Salsa20
|
|||||||
|
|
||||||
// @codingStandardsIgnoreStart
|
// @codingStandardsIgnoreStart
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
|
|
||||||
// columnRound
|
// columnRound
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 16);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 12);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||||
$x0+= $x4; $x12 = self::leftRotate($x12 ^ $x0, 8);
|
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||||
$x8+= $x12; $x4 = self::leftRotate($x4 ^ $x8, 7);
|
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 16);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 12);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||||
$x1+= $x5; $x13 = self::leftRotate($x13 ^ $x1, 8);
|
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||||
$x9+= $x13; $x5 = self::leftRotate($x5 ^ $x9, 7);
|
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||||
|
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 16);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 12);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||||
$x2+= $x6; $x14 = self::leftRotate($x14 ^ $x2, 8);
|
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||||
$x10+= $x14; $x6 = self::leftRotate($x6 ^ $x10, 7);
|
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 16);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 12);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||||
$x3+= $x7; $x15 = self::leftRotate($x15 ^ $x3, 8);
|
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||||
$x11+= $x15; $x7 = self::leftRotate($x7 ^ $x11, 7);
|
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||||
|
|
||||||
// rowRound
|
// rowRound
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 16);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 12);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||||
$x0+= $x5; $x15 = self::leftRotate($x15 ^ $x0, 8);
|
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||||
$x10+= $x15; $x5 = self::leftRotate($x5 ^ $x10, 7);
|
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||||
|
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 16);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 12);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||||
$x1+= $x6; $x12 = self::leftRotate($x12 ^ $x1, 8);
|
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||||
$x11+= $x12; $x6 = self::leftRotate($x6 ^ $x11, 7);
|
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||||
|
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 16);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 12);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||||
$x2+= $x7; $x13 = self::leftRotate($x13 ^ $x2, 8);
|
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||||
$x8+= $x13; $x7 = self::leftRotate($x7 ^ $x8, 7);
|
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||||
|
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 16);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 12);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||||
$x3+= $x4; $x14 = self::leftRotate($x14 ^ $x3, 8);
|
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||||
$x9+= $x14; $x4 = self::leftRotate($x4 ^ $x9, 7);
|
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||||
// @codingStandardsIgnoreEnd
|
// @codingStandardsIgnoreEnd
|
||||||
|
|
||||||
$x0 += $z0;
|
$x0 += $z0;
|
||||||
|
@ -541,6 +541,15 @@ abstract class SymmetricKey
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->mode = $mode;
|
$this->mode = $mode;
|
||||||
|
|
||||||
|
static::initialize_static_variables();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize static variables
|
||||||
|
*/
|
||||||
|
protected static function initialize_static_variables()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1970,7 +1979,7 @@ abstract class SymmetricKey
|
|||||||
$reverseMap = array_map('strtolower', self::ENGINE_MAP);
|
$reverseMap = array_map('strtolower', self::ENGINE_MAP);
|
||||||
$reverseMap = array_flip($reverseMap);
|
$reverseMap = array_flip($reverseMap);
|
||||||
}
|
}
|
||||||
$engine = strtolower($engine);
|
$engine = is_string($engine) ? strtolower($engine) : '';
|
||||||
$this->preferredEngine = $reverseMap[$engine] ?? self::ENGINE_LIBSODIUM;
|
$this->preferredEngine = $reverseMap[$engine] ?? self::ENGINE_LIBSODIUM;
|
||||||
|
|
||||||
$this->setEngine();
|
$this->setEngine();
|
||||||
@ -2779,6 +2788,7 @@ abstract class SymmetricKey
|
|||||||
// Before discrediting this, please read the following:
|
// Before discrediting this, please read the following:
|
||||||
// @see https://github.com/phpseclib/phpseclib/issues/1293
|
// @see https://github.com/phpseclib/phpseclib/issues/1293
|
||||||
// @see https://github.com/phpseclib/phpseclib/pull/1143
|
// @see https://github.com/phpseclib/phpseclib/pull/1143
|
||||||
|
|
||||||
/** @var \Closure $func */
|
/** @var \Closure $func */
|
||||||
$func = eval(<<<PHP
|
$func = eval(<<<PHP
|
||||||
return function (string \$_action, string \$_text): string
|
return function (string \$_action, string \$_text): string
|
||||||
@ -2800,6 +2810,33 @@ abstract class SymmetricKey
|
|||||||
throw new \LogicException('\Closure::bind() failed.');
|
throw new \LogicException('\Closure::bind() failed.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert float to int
|
||||||
|
*
|
||||||
|
* On ARM CPUs converting floats to ints doesn't always work
|
||||||
|
*
|
||||||
|
* @param string $x
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
protected static function safe_intval($x)
|
||||||
|
{
|
||||||
|
if (is_int($x)) {
|
||||||
|
return $x;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PHP_INT_SIZE == 4 && PHP_VERSION_ID >= 80100 ? intval($x) : $x;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* eval()'able string for in-line float to int
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected static function safe_intval_inline()
|
||||||
|
{
|
||||||
|
return PHP_INT_SIZE == 4 && PHP_VERSION_ID >= 80100 ? 'intval(%s)' : '%s';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up GCM parameters
|
* Sets up GCM parameters
|
||||||
*
|
*
|
||||||
|
@ -1213,9 +1213,9 @@ class DES extends BlockCipher
|
|||||||
$pc2mapd3[($d >> 8) & 0xFF] | $pc2mapd4[ $d & 0xFF];
|
$pc2mapd3[($d >> 8) & 0xFF] | $pc2mapd4[ $d & 0xFF];
|
||||||
|
|
||||||
// Reorder: odd bytes/even bytes. Push the result in key schedule.
|
// Reorder: odd bytes/even bytes. Push the result in key schedule.
|
||||||
$val1 = ( $cp & 0xFF000000) | (($cp << 8) & 0x00FF0000) |
|
$val1 = ( $cp & intval(0xFF000000)) | (($cp << 8) & 0x00FF0000) |
|
||||||
(($dp >> 16) & 0x0000FF00) | (($dp >> 8) & 0x000000FF);
|
(($dp >> 16) & 0x0000FF00) | (($dp >> 8) & 0x000000FF);
|
||||||
$val2 = (($cp << 8) & 0xFF000000) | (($cp << 16) & 0x00FF0000) |
|
$val2 = (($cp << 8) & intval(0xFF000000)) | (($cp << 16) & 0x00FF0000) |
|
||||||
(($dp >> 8) & 0x0000FF00) | ( $dp & 0x000000FF);
|
(($dp >> 8) & 0x0000FF00) | ( $dp & 0x000000FF);
|
||||||
$keys[$des_round][self::ENCRYPT][ ] = $val1;
|
$keys[$des_round][self::ENCRYPT][ ] = $val1;
|
||||||
$keys[$des_round][self::DECRYPT][$ki - 1] = $val1;
|
$keys[$des_round][self::DECRYPT][$ki - 1] = $val1;
|
||||||
|
@ -345,7 +345,7 @@ class Rijndael extends BlockCipher
|
|||||||
$k = $c[2];
|
$k = $c[2];
|
||||||
$l = $c[3];
|
$l = $c[3];
|
||||||
while ($i < $Nb) {
|
while ($i < $Nb) {
|
||||||
$temp[$i] = ($state[$i] & 0xFF000000) ^
|
$temp[$i] = ($state[$i] & intval(0xFF000000)) ^
|
||||||
($state[$j] & 0x00FF0000) ^
|
($state[$j] & 0x00FF0000) ^
|
||||||
($state[$k] & 0x0000FF00) ^
|
($state[$k] & 0x0000FF00) ^
|
||||||
($state[$l] & 0x000000FF) ^
|
($state[$l] & 0x000000FF) ^
|
||||||
@ -416,7 +416,7 @@ class Rijndael extends BlockCipher
|
|||||||
$l = $Nb - $c[3];
|
$l = $Nb - $c[3];
|
||||||
|
|
||||||
while ($i < $Nb) {
|
while ($i < $Nb) {
|
||||||
$word = ($state[$i] & 0xFF000000) |
|
$word = ($state[$i] & intval(0xFF000000)) |
|
||||||
($state[$j] & 0x00FF0000) |
|
($state[$j] & 0x00FF0000) |
|
||||||
($state[$k] & 0x0000FF00) |
|
($state[$k] & 0x0000FF00) |
|
||||||
($state[$l] & 0x000000FF);
|
($state[$l] & 0x000000FF);
|
||||||
@ -481,7 +481,10 @@ class Rijndael extends BlockCipher
|
|||||||
{
|
{
|
||||||
// Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
|
// Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
|
||||||
// See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
|
// See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
|
||||||
static $rcon = [0,
|
static $rcon;
|
||||||
|
|
||||||
|
if (!isset($rcon)) {
|
||||||
|
$rcon = [0,
|
||||||
0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
|
0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
|
||||||
0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
|
0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
|
||||||
0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
|
0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
|
||||||
@ -489,6 +492,8 @@ class Rijndael extends BlockCipher
|
|||||||
0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
|
0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
|
||||||
0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000,
|
0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000,
|
||||||
];
|
];
|
||||||
|
$rcon = array_map('intval', $rcon);
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {
|
if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {
|
||||||
// already expanded
|
// already expanded
|
||||||
@ -527,7 +532,7 @@ class Rijndael extends BlockCipher
|
|||||||
// on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
|
// on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
|
||||||
// 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
|
// 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
|
||||||
// with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
|
// with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
|
||||||
$temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
|
$temp = (($temp << 8) & intval(0xFFFFFF00)) | (($temp >> 24) & 0x000000FF); // rotWord
|
||||||
$temp = $this->subWord($temp) ^ $rcon[$i / $this->Nk];
|
$temp = $this->subWord($temp) ^ $rcon[$i / $this->Nk];
|
||||||
} elseif ($this->Nk > 6 && $i % $this->Nk == 4) {
|
} elseif ($this->Nk > 6 && $i % $this->Nk == 4) {
|
||||||
$temp = $this->subWord($temp);
|
$temp = $this->subWord($temp);
|
||||||
@ -655,9 +660,9 @@ class Rijndael extends BlockCipher
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
foreach ($t3 as $t3i) {
|
foreach ($t3 as $t3i) {
|
||||||
$t0[] = (($t3i << 24) & 0xFF000000) | (($t3i >> 8) & 0x00FFFFFF);
|
$t0[] = (($t3i << 24) & intval(0xFF000000)) | (($t3i >> 8) & 0x00FFFFFF);
|
||||||
$t1[] = (($t3i << 16) & 0xFFFF0000) | (($t3i >> 16) & 0x0000FFFF);
|
$t1[] = (($t3i << 16) & intval(0xFFFF0000)) | (($t3i >> 16) & 0x0000FFFF);
|
||||||
$t2[] = (($t3i << 8) & 0xFFFFFF00) | (($t3i >> 24) & 0x000000FF);
|
$t2[] = (($t3i << 8) & intval(0xFFFFFF00)) | (($t3i >> 24) & 0x000000FF);
|
||||||
}
|
}
|
||||||
|
|
||||||
$tables = [
|
$tables = [
|
||||||
@ -738,9 +743,9 @@ class Rijndael extends BlockCipher
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
foreach ($dt3 as $dt3i) {
|
foreach ($dt3 as $dt3i) {
|
||||||
$dt0[] = (($dt3i << 24) & 0xFF000000) | (($dt3i >> 8) & 0x00FFFFFF);
|
$dt0[] = (($dt3i << 24) & intval(0xFF000000)) | (($dt3i >> 8) & 0x00FFFFFF);
|
||||||
$dt1[] = (($dt3i << 16) & 0xFFFF0000) | (($dt3i >> 16) & 0x0000FFFF);
|
$dt1[] = (($dt3i << 16) & intval(0xFFFF0000)) | (($dt3i >> 16) & 0x0000FFFF);
|
||||||
$dt2[] = (($dt3i << 8) & 0xFFFFFF00) | (($dt3i >> 24) & 0x000000FF);
|
$dt2[] = (($dt3i << 8) & intval(0xFFFFFF00)) | (($dt3i >> 24) & 0x000000FF);
|
||||||
};
|
};
|
||||||
|
|
||||||
$tables = [
|
$tables = [
|
||||||
|
@ -389,11 +389,13 @@ class Salsa20 extends StreamCipher
|
|||||||
*/
|
*/
|
||||||
protected static function leftRotate(int $x, int $n): int
|
protected static function leftRotate(int $x, int $n): int
|
||||||
{
|
{
|
||||||
$r1 = $x << $n;
|
|
||||||
if (PHP_INT_SIZE == 8) {
|
if (PHP_INT_SIZE == 8) {
|
||||||
|
$r1 = $x << $n;
|
||||||
$r1 &= 0xFFFFFFFF;
|
$r1 &= 0xFFFFFFFF;
|
||||||
$r2 = ($x & 0xFFFFFFFF) >> (32 - $n);
|
$r2 = ($x & 0xFFFFFFFF) >> (32 - $n);
|
||||||
} else {
|
} else {
|
||||||
|
$x = (int) $x;
|
||||||
|
$r1 = $x << $n;
|
||||||
$r2 = $x >> (32 - $n);
|
$r2 = $x >> (32 - $n);
|
||||||
$r2 &= (1 << $n) - 1;
|
$r2 &= (1 << $n) - 1;
|
||||||
}
|
}
|
||||||
|
@ -352,6 +352,23 @@ class Twofish extends BlockCipher
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize Static Variables
|
||||||
|
*/
|
||||||
|
protected static function initialize_static_variables()
|
||||||
|
{
|
||||||
|
if (is_float(self::$m3[0])) {
|
||||||
|
self::$m0 = array_map('intval', self::$m0);
|
||||||
|
self::$m1 = array_map('intval', self::$m1);
|
||||||
|
self::$m2 = array_map('intval', self::$m2);
|
||||||
|
self::$m3 = array_map('intval', self::$m3);
|
||||||
|
self::$q0 = array_map('intval', self::$q0);
|
||||||
|
self::$q1 = array_map('intval', self::$q1);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::initialize_static_variables();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the key length.
|
* Sets the key length.
|
||||||
*
|
*
|
||||||
|
@ -570,6 +570,10 @@ MIIEDwIBADATBgcqhkjOPQIBBggqhkjOPQMBBwSCA/MwggPvAgEBBIID6P//////
|
|||||||
|
|
||||||
public function testOpenSSHEncryptedCreation(): void
|
public function testOpenSSHEncryptedCreation(): void
|
||||||
{
|
{
|
||||||
|
if (PHP_INT_SIZE == 4) {
|
||||||
|
self::markTestSkipped('32-bit integers slow OpenSSH encrypted keys down too much');
|
||||||
|
}
|
||||||
|
|
||||||
$key = EC::createKey('Ed25519');
|
$key = EC::createKey('Ed25519');
|
||||||
$key = $key->withPassword('test')->toString('OpenSSH');
|
$key = $key->withPassword('test')->toString('OpenSSH');
|
||||||
|
|
||||||
|
@ -1235,6 +1235,10 @@ Private-MAC: d26baf87446604974287b682ed9e0c00ce54e460e1cb719953a81291147b3c59
|
|||||||
|
|
||||||
public function testOpenSSHEncrypted(): void
|
public function testOpenSSHEncrypted(): void
|
||||||
{
|
{
|
||||||
|
if (PHP_INT_SIZE == 4) {
|
||||||
|
self::markTestSkipped('32-bit integers slow OpenSSH encrypted keys down too much');
|
||||||
|
}
|
||||||
|
|
||||||
$key = '-----BEGIN OPENSSH PRIVATE KEY-----
|
$key = '-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBN2Ff3Kw
|
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBN2Ff3Kw
|
||||||
SIOWyzRiboPRIhAAAAEAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQCpxMxDEG0S
|
SIOWyzRiboPRIhAAAAEAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQCpxMxDEG0S
|
||||||
|
Loading…
Reference in New Issue
Block a user