mirror of
https://github.com/danog/phpseclib.git
synced 2024-11-27 04:46:26 +01:00
DES: make sboxes static
This commit is contained in:
parent
4679cb7bf7
commit
b278bc7e7e
@ -161,7 +161,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $shuffle = [
|
||||
protected static $shuffle = [
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\xFF",
|
||||
"\x00\x00\x00\x00\x00\x00\xFF\x00", "\x00\x00\x00\x00\x00\x00\xFF\xFF",
|
||||
"\x00\x00\x00\x00\x00\xFF\x00\x00", "\x00\x00\x00\x00\x00\xFF\x00\xFF",
|
||||
@ -300,7 +300,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $ipmap = [
|
||||
protected static $ipmap = [
|
||||
0x00, 0x10, 0x01, 0x11, 0x20, 0x30, 0x21, 0x31,
|
||||
0x02, 0x12, 0x03, 0x13, 0x22, 0x32, 0x23, 0x33,
|
||||
0x40, 0x50, 0x41, 0x51, 0x60, 0x70, 0x61, 0x71,
|
||||
@ -342,7 +342,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $invipmap = [
|
||||
protected static $invipmap = [
|
||||
0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
|
||||
0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
|
||||
0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
|
||||
@ -386,7 +386,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $sbox1 = [
|
||||
protected static $sbox1 = [
|
||||
0x00808200, 0x00000000, 0x00008000, 0x00808202,
|
||||
0x00808002, 0x00008202, 0x00000002, 0x00008000,
|
||||
0x00000200, 0x00808200, 0x00808202, 0x00000200,
|
||||
@ -411,7 +411,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $sbox2 = [
|
||||
protected static $sbox2 = [
|
||||
0x40084010, 0x40004000, 0x00004000, 0x00084010,
|
||||
0x00080000, 0x00000010, 0x40080010, 0x40004010,
|
||||
0x40000010, 0x40084010, 0x40084000, 0x40000000,
|
||||
@ -436,7 +436,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $sbox3 = [
|
||||
protected static $sbox3 = [
|
||||
0x00000104, 0x04010100, 0x00000000, 0x04010004,
|
||||
0x04000100, 0x00000000, 0x00010104, 0x04000100,
|
||||
0x00010004, 0x04000004, 0x04000004, 0x00010000,
|
||||
@ -461,7 +461,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $sbox4 = [
|
||||
protected static $sbox4 = [
|
||||
0x80401000, 0x80001040, 0x80001040, 0x00000040,
|
||||
0x00401040, 0x80400040, 0x80400000, 0x80001000,
|
||||
0x00000000, 0x00401000, 0x00401000, 0x80401040,
|
||||
@ -486,7 +486,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $sbox5 = [
|
||||
protected static $sbox5 = [
|
||||
0x00000080, 0x01040080, 0x01040000, 0x21000080,
|
||||
0x00040000, 0x00000080, 0x20000000, 0x01040000,
|
||||
0x20040080, 0x00040000, 0x01000080, 0x20040080,
|
||||
@ -511,7 +511,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $sbox6 = [
|
||||
protected static $sbox6 = [
|
||||
0x10000008, 0x10200000, 0x00002000, 0x10202008,
|
||||
0x10200000, 0x00000008, 0x10202008, 0x00200000,
|
||||
0x10002000, 0x00202008, 0x00200000, 0x10000008,
|
||||
@ -536,7 +536,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $sbox7 = [
|
||||
protected static $sbox7 = [
|
||||
0x00100000, 0x02100001, 0x02000401, 0x00000000,
|
||||
0x00000400, 0x02000401, 0x00100401, 0x02100400,
|
||||
0x02100401, 0x00100000, 0x00000000, 0x02000001,
|
||||
@ -561,7 +561,7 @@ class DES extends BlockCipher
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
protected $sbox8 = [
|
||||
protected static $sbox8 = [
|
||||
0x08000820, 0x00000800, 0x00020000, 0x08020820,
|
||||
0x08000000, 0x08000820, 0x00000020, 0x08000000,
|
||||
0x00020020, 0x08020000, 0x08020820, 0x00020800,
|
||||
@ -687,18 +687,18 @@ class DES extends BlockCipher
|
||||
{
|
||||
static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
|
||||
if (!$sbox1) {
|
||||
$sbox1 = array_map("intval", $this->sbox1);
|
||||
$sbox2 = array_map("intval", $this->sbox2);
|
||||
$sbox3 = array_map("intval", $this->sbox3);
|
||||
$sbox4 = array_map("intval", $this->sbox4);
|
||||
$sbox5 = array_map("intval", $this->sbox5);
|
||||
$sbox6 = array_map("intval", $this->sbox6);
|
||||
$sbox7 = array_map("intval", $this->sbox7);
|
||||
$sbox8 = array_map("intval", $this->sbox8);
|
||||
$sbox1 = array_map('intval', self::$sbox1);
|
||||
$sbox2 = array_map('intval', self::$sbox2);
|
||||
$sbox3 = array_map('intval', self::$sbox3);
|
||||
$sbox4 = array_map('intval', self::$sbox4);
|
||||
$sbox5 = array_map('intval', self::$sbox5);
|
||||
$sbox6 = array_map('intval', self::$sbox6);
|
||||
$sbox7 = array_map('intval', self::$sbox7);
|
||||
$sbox8 = array_map('intval', self::$sbox8);
|
||||
/* Merge $shuffle with $[inv]ipmap */
|
||||
for ($i = 0; $i < 256; ++$i) {
|
||||
$shuffleip[] = $this->shuffle[$this->ipmap[$i]];
|
||||
$shuffleinvip[] = $this->shuffle[$this->invipmap[$i]];
|
||||
$shuffleip[] = self::$shuffle[self::$ipmap[$i]];
|
||||
$shuffleinvip[] = self::$shuffle[self::$invipmap[$i]];
|
||||
}
|
||||
}
|
||||
|
||||
@ -1229,14 +1229,14 @@ class DES extends BlockCipher
|
||||
// Perform the PC/1 transformation and compute C and D.
|
||||
$t = unpack('Nl/Nr', $key);
|
||||
list($l, $r) = [$t['l'], $t['r']];
|
||||
$key = ($this->shuffle[$pc1map[ $r & 0xFF]] & "\x80\x80\x80\x80\x80\x80\x80\x00") |
|
||||
($this->shuffle[$pc1map[($r >> 8) & 0xFF]] & "\x40\x40\x40\x40\x40\x40\x40\x00") |
|
||||
($this->shuffle[$pc1map[($r >> 16) & 0xFF]] & "\x20\x20\x20\x20\x20\x20\x20\x00") |
|
||||
($this->shuffle[$pc1map[($r >> 24) & 0xFF]] & "\x10\x10\x10\x10\x10\x10\x10\x00") |
|
||||
($this->shuffle[$pc1map[ $l & 0xFF]] & "\x08\x08\x08\x08\x08\x08\x08\x00") |
|
||||
($this->shuffle[$pc1map[($l >> 8) & 0xFF]] & "\x04\x04\x04\x04\x04\x04\x04\x00") |
|
||||
($this->shuffle[$pc1map[($l >> 16) & 0xFF]] & "\x02\x02\x02\x02\x02\x02\x02\x00") |
|
||||
($this->shuffle[$pc1map[($l >> 24) & 0xFF]] & "\x01\x01\x01\x01\x01\x01\x01\x00");
|
||||
$key = (self::$shuffle[$pc1map[ $r & 0xFF]] & "\x80\x80\x80\x80\x80\x80\x80\x00") |
|
||||
(self::$shuffle[$pc1map[($r >> 8) & 0xFF]] & "\x40\x40\x40\x40\x40\x40\x40\x00") |
|
||||
(self::$shuffle[$pc1map[($r >> 16) & 0xFF]] & "\x20\x20\x20\x20\x20\x20\x20\x00") |
|
||||
(self::$shuffle[$pc1map[($r >> 24) & 0xFF]] & "\x10\x10\x10\x10\x10\x10\x10\x00") |
|
||||
(self::$shuffle[$pc1map[ $l & 0xFF]] & "\x08\x08\x08\x08\x08\x08\x08\x00") |
|
||||
(self::$shuffle[$pc1map[($l >> 8) & 0xFF]] & "\x04\x04\x04\x04\x04\x04\x04\x00") |
|
||||
(self::$shuffle[$pc1map[($l >> 16) & 0xFF]] & "\x02\x02\x02\x02\x02\x02\x02\x00") |
|
||||
(self::$shuffle[$pc1map[($l >> 24) & 0xFF]] & "\x01\x01\x01\x01\x01\x01\x01\x00");
|
||||
$key = unpack('Nc/Nd', $key);
|
||||
$c = ( $key['c'] >> 4) & 0x0FFFFFFF;
|
||||
$d = (($key['d'] >> 4) & 0x0FFFFFF0) | ($key['c'] & 0x0F);
|
||||
@ -1308,18 +1308,18 @@ class DES extends BlockCipher
|
||||
|
||||
$init_crypt = 'static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
|
||||
if (!$sbox1) {
|
||||
$sbox1 = array_map("intval", $this->sbox1);
|
||||
$sbox2 = array_map("intval", $this->sbox2);
|
||||
$sbox3 = array_map("intval", $this->sbox3);
|
||||
$sbox4 = array_map("intval", $this->sbox4);
|
||||
$sbox5 = array_map("intval", $this->sbox5);
|
||||
$sbox6 = array_map("intval", $this->sbox6);
|
||||
$sbox7 = array_map("intval", $this->sbox7);
|
||||
$sbox8 = array_map("intval", $this->sbox8);'
|
||||
$sbox1 = array_map("intval", self::$sbox1);
|
||||
$sbox2 = array_map("intval", self::$sbox2);
|
||||
$sbox3 = array_map("intval", self::$sbox3);
|
||||
$sbox4 = array_map("intval", self::$sbox4);
|
||||
$sbox5 = array_map("intval", self::$sbox5);
|
||||
$sbox6 = array_map("intval", self::$sbox6);
|
||||
$sbox7 = array_map("intval", self::$sbox7);
|
||||
$sbox8 = array_map("intval", self::$sbox8);'
|
||||
/* Merge $shuffle with $[inv]ipmap */ . '
|
||||
for ($i = 0; $i < 256; ++$i) {
|
||||
$shuffleip[] = $this->shuffle[$this->ipmap[$i]];
|
||||
$shuffleinvip[] = $this->shuffle[$this->invipmap[$i]];
|
||||
$shuffleip[] = self::$shuffle[self::$ipmap[$i]];
|
||||
$shuffleinvip[] = self::$shuffle[self::$invipmap[$i]];
|
||||
}
|
||||
}
|
||||
';
|
||||
|
Loading…
Reference in New Issue
Block a user