Completed
Push — development ( fd35b5...2c05ec )
by Nils
07:23
created

Cipher_Blowfish::subKeys()   C

Complexity

Conditions 12
Paths 14

Size

Total Lines 48
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 12
eloc 24
nc 14
nop 0
dl 0
loc 48
rs 5.1266
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/*
3
 * Author: Ryan Gilfether
4
 * URL: http://www.gilfether.com/phpCrypt
5
 * Date: June 28, 2013
6
 * Copyright (C) 2013 Ryan Gilfether
7
 *
8
 * This file is part of phpCrypt
9
 *
10
 * phpCrypt is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 3 of the License, or
13
 * (at your option) any later version
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
22
 */
23
24
namespace PHP_CRYPT;
25
require_once(dirname(__FILE__)."/../Cipher.php");
26
require_once(dirname(__FILE__)."/../phpCrypt.php");
27
28
29
/**
30
 * Implements The Blowfish Cipher
31
 *
32
 * Resources used to implement this algorithm:
33
 * Applied Cryptography, Bruce Schneier, pp 336-339
34
 * http://www.quadibloc.com/crypto/co040304.htm
35
 * http://www.freemedialibrary.com/index.php/Blowfish_test_vectors
36
 *
37
 * @author Ryan Gilfether
38
 * @link http://www.gilfether.com/phpcrypt
39
 * @copyright 2013 Ryan Gilfether
40
 */
41
class Cipher_Blowfish extends Cipher
42
{
43
    /** @type integer BYTES_BLOCK The size of the block, in bytes */
44
    const BYTES_BLOCK = 8; // 64 bits;
45
46
    // a variable length key, between 8 - 448 bits
47
    //const BYTES_KEY = 0;
0 ignored issues
show
Unused Code Comprehensibility introduced by
38% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
48
49
    /** @type array $_sbox1 S-Box 1 */
50
    private static $_sbox1 = array();
51
52
    /** @type string $_sbox2 S-Box 2 */
53
    private static $_sbox2 = array();
54
55
    /** @type string $_sbox3 S-Box 3 */
56
    private static $_sbox3 = array();
57
58
    /** @type string $_sbox4 S-Box 4 */
59
    private static $_sbox4 = array();
60
61
    /** @type array $_p The P-Array, 18 elements long */
62
    private static $_p = array();
63
64
    /** @type integer $key_pos Used for keyChunk(), to determine the current
65
	position in the key */
66
    private $key_pos = 0;
67
68
    /**
69
     * Constructor
70
     *
71
     * @param string $key The key used for Encryption/Decryption
72
     * @return void
0 ignored issues
show
Comprehensibility Best Practice introduced by
Adding a @return annotation to constructors is generally not recommended as a constructor does not have a meaningful return value.

Adding a @return annotation to a constructor is not recommended, since a constructor does not have a meaningful return value.

Please refer to the PHP core documentation on constructors.

Loading history...
73
     */
74
    public function __construct($key)
75
    {
76
        // the max length of the key is 448 bits (56 bytes)
77
        $keylen = strlen($key);
78
        if ($keylen > 56)
79
        {
80
            $key = substr($key, 0, 56);
81
            $keylen = 56;
82
        } else if ($keylen < 1)
83
        {
84
            $msg = "No key given. The key must be between 1 - 56 bytes.";
85
            trigger_error($msg, E_USER_WARNING);
86
        }
87
88
        // set the key, make sure the required length is set in bits
89
        parent::__construct(PHP_Crypt::CIPHER_BLOWFISH, $key, $keylen);
90
91
        // set the block size
92
        $this->blockSize(self::BYTES_BLOCK);
93
94
        $this->initTables();
95
        $this->subKeys();
96
    }
97
98
99
    /**
100
     * Destructor
101
     *
102
     * @return void
103
     */
104
    public function __destruct()
105
    {
106
        parent::__destruct();
107
    }
108
109
110
    /**
111
     * Encrypt plain text data
112
     *
113
     * @param string $data A 64 bit (8 byte) plain text string
114
     * @return boolean Returns true
115
     */
116
    public function encrypt(&$data)
117
    {
118
        $this->operation(parent::ENCRYPT);
119
        return $this->blowfish($data);
120
    }
121
122
123
    /**
124
     * Decrypt an encrypted string
125
     *
126
     * @param string $data A 64 bit block of Blowfish encrypted data
127
     * @return boolean Returns true
128
     */
129
    public function decrypt(&$data)
130
    {
131
        $this->operation(parent::DECRYPT);
132
        return $this->blowfish($data);
133
    }
134
135
136
    /**
137
     * The same alorigthm is used for both Encryption, and Decryption
138
     *
139
     * @param string $data A 64 bit block of data
140
     * @return boolean Returns true
141
     */
142
    private function blowfish(&$data)
143
    {
144
        // divide the data into into two 32 bit halves
145
        $xl = parent::str2Dec(substr($data, 0, 4));
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (str2Dec() instead of blowfish()). Are you sure this is correct? If so, you might want to change this to $this->str2Dec().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
146
        $xr = parent::str2Dec(substr($data, 4, 4));
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (str2Dec() instead of blowfish()). Are you sure this is correct? If so, you might want to change this to $this->str2Dec().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
147
148
        for ($i = 0; $i < 16; ++$i)
149
        {
150
            if ($this->operation() == parent::ENCRYPT) {
151
                            $xl ^= self::$_p[$i];
152
            } else {
153
                            $xl ^= self::$_p[17 - $i];
154
            }
155
156
            // perform F() on the left half, and XOR with the right half
157
            $xr = $this->F($xl) ^ $xr;
158
159
            // swap $xl and $xr
0 ignored issues
show
Unused Code Comprehensibility introduced by
38% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
160
            $tmp = $xr;
161
            $xr = $xl;
162
            $xl = $tmp;
163
        }
164
165
        // swap $xl and $xr after the 16th round to undo the last swap
166
        $tmp = $xl;
167
        $xl  = $xr;
168
        $xr  = $tmp;
169
170
        // XOR the final two elements of $_p
171
        if ($this->operation() == parent::ENCRYPT)
172
        {
173
            $xr ^= self::$_p[16];
174
            $xl  = $xl ^ self::$_p[17];
175
        } else // parent::DECRYPT
176
        {
177
            $xr ^= self::$_p[1];
178
            $xl ^= self::$_p[0];
179
        }
180
181
        // recombine the two halves, force them to be 4 bytes each
182
        $data = parent::dec2Str($xl, 4).parent::dec2Str($xr, 4);
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (dec2Str() instead of blowfish()). Are you sure this is correct? If so, you might want to change this to $this->dec2Str().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
183
184
        return true;
185
    }
186
187
188
    /**
189
     * Blowfish's F() function
190
     *
191
     * @param string $i A 32 bit integer
192
     */
193
    private function F($i)
194
    {
195
        // split the 32 bits into four 8 bit parts
196
        $x[0] = $i & 0xff; // first byte
0 ignored issues
show
Coding Style Comprehensibility introduced by
$x was never initialized. Although not strictly required by PHP, it is generally a good practice to add $x = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
197
        $x[1] = ($i >> 8) & 0xff; // second byte
198
        $x[2] = ($i >> 16) & 0xff; // third byte
199
        $x[3] = ($i >> 24) & 0xff; // fourth byte
200
201
        // perform F(), make sure all values returned are
202
        // unsigned 32 bit
203
        $f  = parent::uInt32(self::$_sbox1[$x[3]] + self::$_sbox2[$x[2]]);
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (uInt32() instead of F()). Are you sure this is correct? If so, you might want to change this to $this->uInt32().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
204
        $f  = parent::uInt32($f ^ self::$_sbox3[$x[1]]);
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (uInt32() instead of F()). Are you sure this is correct? If so, you might want to change this to $this->uInt32().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
205
        $f  = parent::uInt32($f + self::$_sbox4[$x[0]]);
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (uInt32() instead of F()). Are you sure this is correct? If so, you might want to change this to $this->uInt32().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
206
207
        return $f;
208
    }
209
210
211
    /**
212
     * Generates the subkeys used in Blowfish
213
     *
214
     * @return void
215
     */
216
    private function subKeys()
217
    {
218
        // now xor each element of $_p with 32 bits from the key
219
        for ($i = 0; $i < 18; ++$i)
220
        {
221
            $c = $this->keyChunk(4);
222
            self::$_p[$i] ^= parent::str2Dec($c);
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (str2Dec() instead of subKeys()). Are you sure this is correct? If so, you might want to change this to $this->str2Dec().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
223
        }
224
225
        // start with an 8 byte null string
226
        $zero = "\0\0\0\0\0\0\0\0";
227
228
        // now we loop, each loop replacing elements of $_p, or an $_sbox with the
229
        // repeatedly encrypted zero string
230
        for ($i = 0; $i < 1042; $i += 2)
231
        {
232
            // encrypt the 64 bit null string
233
            $this->encrypt($zero);
234
235
            // split the encrypted null string into two 32 bit parts
236
            $z0 = parent::str2Dec(substr($zero, 0, 4));
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (str2Dec() instead of subKeys()). Are you sure this is correct? If so, you might want to change this to $this->str2Dec().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
237
            $z1 = parent::str2Dec(substr($zero, 4, 4));
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (str2Dec() instead of subKeys()). Are you sure this is correct? If so, you might want to change this to $this->str2Dec().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
238
239
            // now fill the $_p, $_sbox1, $_sbox2, $_sbox3, $_sbox4
0 ignored issues
show
Unused Code Comprehensibility introduced by
45% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
240
            // with 4 bytes from the repeatedly encrypted 8 byte null string
241
            if ($i < 18)
242
            {
243
                self::$_p[$i] = $z0;
244
                self::$_p[$i + 1] = $z1;
245
            } else if ($i >= 18 && $i < 274)
246
            {
247
                self::$_sbox1[$i - 18] = $z0;
248
                self::$_sbox1[$i - 18 + 1] = $z1;
249
            } else if ($i >= 274 && $i < 530)
250
            {
251
                self::$_sbox2[$i - 274] = $z0;
252
                self::$_sbox2[$i - 274 + 1] = $z1;
253
            } else if ($i >= 530 && $i < 786)
254
            {
255
                self::$_sbox3[$i - 530] = $z0;
256
                self::$_sbox3[$i - 530 + 1] = $z1;
257
            } else if ($i >= 786 && $i < 1042)
258
            {
259
                self::$_sbox4[$i - 786] = $z0;
260
                self::$_sbox4[$i - 786 + 1] = $z1;
261
            }
262
        }
263
    }
264
265
266
    /**
267
     * Returns a substring of $this->key. The size of the substring is set in the
268
     * parameter $size. Each call to this function returns a substring starting
269
     * in the position where the last substring ended. Effectively it rotates
270
     * through the key, when it reaches the end, it starts over at the
271
     * beginning of the key and continues on. You can reset the current position
272
     * by setting the parameter $reset=true, which will start the key back at the
273
     * first byte of the $this->key string.
274
     *
275
     * @param integer $size The size of the substring to return, in bytes
276
     * @param bool $reset If set to true, sets the position back to 0, the first
277
     *	byte of the key string
278
     * @return string The next substring of the key
279
     */
280
    private function keyChunk($size = 1, $reset = false)
281
    {
282
        if ($reset || $this->key_pos >= $this->keySize()) {
283
                    $this->key_pos = 0;
284
        }
285
286
        $bytes = substr($this->key(), $this->key_pos, $size);
287
        $len = strlen($bytes);
288
        if ($len < $size)
289
        {
290
            $bytes .= substr($this->key(), 0, $size - $len);
291
            $this->key_pos = $size - $len;
292
        } else {
293
                    $this->key_pos += $size;
294
        }
295
296
        return $bytes;
297
    }
298
299
300
    /**
301
     * Initialize the tables used in Blowfish Encryption. These
302
     * are calculated from the value of PI. We grabbed
303
     * these from the mcrypt blowfish source, which already had
304
     * these values calculated
305
     *
306
     * @return void
307
     */
308
    private function initTables()
309
    {
310
        self::$_sbox1 = array(
311
            0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
312
            0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
313
            0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
314
            0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
315
            0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
316
            0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
317
            0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
318
            0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
319
            0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
320
            0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
321
            0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
322
            0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
323
            0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
324
            0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
325
            0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
326
            0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
327
            0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
328
            0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
329
            0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
330
            0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
331
            0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
332
            0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
333
            0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
334
            0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
335
            0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
336
            0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
337
            0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
338
            0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
339
            0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
340
            0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
341
            0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
342
            0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
343
            0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
344
            0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
345
            0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
346
            0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
347
            0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
348
            0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
349
            0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
350
            0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
351
            0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
352
            0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
353
            0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
354
            0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
355
            0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
356
            0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
357
            0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
358
            0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
359
            0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
360
            0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
361
            0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
362
            0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
363
            0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
364
            0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
365
            0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
366
            0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
367
            0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
368
            0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
369
            0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
370
            0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
371
            0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
372
            0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
373
            0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
374
            0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
375
        );
376
377
        self::$_sbox2 = array(
0 ignored issues
show
Documentation Bug introduced by
It seems like array(1266315497, 304841...3873677099, 3682840055) of type array<integer,integer,{"...eger","255":"integer"}> is incompatible with the declared type string of property $_sbox2.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
378
            0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
379
            0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
380
            0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
381
            0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
382
            0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
383
            0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
384
            0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
385
            0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
386
            0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
387
            0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
388
            0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
389
            0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
390
            0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
391
            0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
392
            0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
393
            0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
394
            0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
395
            0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
396
            0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
397
            0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
398
            0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
399
            0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
400
            0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
401
            0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
402
            0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
403
            0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
404
            0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
405
            0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
406
            0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
407
            0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
408
            0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
409
            0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
410
            0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
411
            0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
412
            0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
413
            0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
414
            0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
415
            0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
416
            0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
417
            0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
418
            0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
419
            0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
420
            0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
421
            0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
422
            0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
423
            0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
424
            0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
425
            0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
426
            0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
427
            0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
428
            0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
429
            0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
430
            0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
431
            0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
432
            0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
433
            0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
434
            0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
435
            0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
436
            0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
437
            0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
438
            0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
439
            0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
440
            0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
441
            0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
442
        );
443
444
        self::$_sbox3 = array(
0 ignored issues
show
Documentation Bug introduced by
It seems like array(3913112168, 249149...1729034894, 1080033504) of type array<integer,integer,{"...eger","255":"integer"}> is incompatible with the declared type string of property $_sbox3.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
445
            0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
446
            0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
447
            0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
448
            0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
449
            0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
450
            0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
451
            0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
452
            0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
453
            0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
454
            0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
455
            0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
456
            0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
457
            0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
458
            0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
459
            0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
460
            0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
461
            0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
462
            0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
463
            0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
464
            0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
465
            0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
466
            0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
467
            0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
468
            0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
469
            0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
470
            0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
471
            0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
472
            0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
473
            0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
474
            0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
475
            0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
476
            0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
477
            0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
478
            0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
479
            0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
480
            0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
481
            0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
482
            0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
483
            0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
484
            0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
485
            0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
486
            0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
487
            0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
488
            0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
489
            0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
490
            0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
491
            0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
492
            0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
493
            0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
494
            0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
495
            0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
496
            0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
497
            0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
498
            0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
499
            0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
500
            0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
501
            0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
502
            0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
503
            0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
504
            0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
505
            0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
506
            0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
507
            0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
508
            0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
509
        );
510
511
        self::$_sbox4 = array(
0 ignored issues
show
Documentation Bug introduced by
It seems like array(976866871, 3556439... 1469046755, 985887462) of type array<integer,integer,{"...eger","255":"integer"}> is incompatible with the declared type string of property $_sbox4.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
512
            0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
513
            0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
514
            0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
515
            0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
516
            0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
517
            0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
518
            0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
519
            0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
520
            0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
521
            0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
522
            0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
523
            0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
524
            0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
525
            0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
526
            0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
527
            0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
528
            0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
529
            0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
530
            0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
531
            0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
532
            0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
533
            0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
534
            0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
535
            0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
536
            0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
537
            0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
538
            0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
539
            0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
540
            0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
541
            0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
542
            0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
543
            0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
544
            0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
545
            0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
546
            0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
547
            0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
548
            0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
549
            0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
550
            0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
551
            0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
552
            0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
553
            0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
554
            0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
555
            0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
556
            0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
557
            0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
558
            0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
559
            0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
560
            0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
561
            0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
562
            0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
563
            0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
564
            0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
565
            0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
566
            0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
567
            0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
568
            0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
569
            0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
570
            0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
571
            0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
572
            0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
573
            0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
574
            0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
575
            0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
576
        );
577
578
        self::$_p = array(
579
            0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
580
            0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
581
            0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
582
            0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
583
            0x9216d5d9, 0x8979fb1b
584
        );
585
    }
586
587
588
    /**
589
     * Indicates this is a block cipher
590
     *
591
     * @return integer Returns Cipher::BLOCK
592
     */
593
    public function type()
594
    {
595
        return parent::BLOCK;
596
    }
597
}
598
?>
0 ignored issues
show
Best Practice introduced by
It is not recommended to use PHP's closing tag ?> in files other than templates.

Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore.

A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever.

Loading history...
599