156        0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,
 
  157        0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
 
  158        0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,
 
  159        0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
 
  160        0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,
 
  161        0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
 
  162        0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,
 
  163        0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
 
  164        0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,
 
  165        0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
 
  166        0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,
 
  167        0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
 
  168        0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,
 
  169        0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
 
  170        0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,
 
  171        0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
 
  172        0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,
 
  173        0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
 
  174        0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,
 
  175        0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
 
  176        0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,
 
  177        0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
 
  178        0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,
 
  179        0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
 
  180        0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,
 
  181        0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
 
  182        0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,
 
  183        0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
 
  184        0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,
 
  185        0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
 
  186        0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,
 
  187        0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD,
 
  188        0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,
 
  189        0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
 
  190        0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,
 
  191        0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
 
  192        0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,
 
  193        0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
 
  194        0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,
 
  195        0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
 
  196        0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,
 
  197        0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
 
  198        0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,
 
  199        0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
 
  200        0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,
 
  201        0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
 
  202        0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,
 
  203        0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
 
  204        0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,
 
  205        0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
 
  206        0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,
 
  207        0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
 
  208        0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,
 
  209        0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
 
  210        0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,
 
  211        0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
 
  212        0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,
 
  213        0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
 
  214        0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,
 
  215        0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
 
  216        0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,
 
  217        0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
 
  218        0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,
 
  219        0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD
 
  230        0xD1, 0xDA, 0xB9, 0x6F, 0x9C, 0xC8, 0x78, 0x66,
 
  231        0x80, 0x2C, 0xF8, 0x37, 0xEA, 0xE0, 0x62, 0xA4,
 
  232        0xCB, 0x71, 0x50, 0x27, 0x4B, 0x95, 0xD9, 0x20,
 
  233        0x9D, 0x04, 0x91, 0xE3, 0x47, 0x6A, 0x7E, 0x53,
 
  234        0xFA, 0x3A, 0x3B, 0xB4, 0xA8, 0xBC, 0x5F, 0x68,
 
  235        0x08, 0xCA, 0x8F, 0x14, 0xD7, 0xC0, 0xEF, 0x7B,
 
  236        0x5B, 0xBF, 0x2F, 0xE5, 0xE2, 0x8C, 0xBA, 0x12,
 
  237        0xE1, 0xAF, 0xB2, 0x54, 0x5D, 0x59, 0x76, 0xDB,
 
  238        0x32, 0xA2, 0x58, 0x6E, 0x1C, 0x29, 0x64, 0xF3,
 
  239        0xE9, 0x96, 0x0C, 0x98, 0x19, 0x8D, 0x3E, 0x26,
 
  240        0xAB, 0xA5, 0x85, 0x16, 0x40, 0xBD, 0x49, 0x67,
 
  241        0xDC, 0x22, 0x94, 0xBB, 0x3C, 0xC1, 0x9B, 0xEB,
 
  242        0x45, 0x28, 0x18, 0xD8, 0x1A, 0x42, 0x7D, 0xCC,
 
  243        0xFB, 0x65, 0x8E, 0x3D, 0xCD, 0x2A, 0xA3, 0x60,
 
  244        0xAE, 0x93, 0x8A, 0x48, 0x97, 0x51, 0x15, 0xF7,
 
  245        0x01, 0x0B, 0xB7, 0x36, 0xB1, 0x2E, 0x11, 0xFD,
 
  246        0x84, 0x2D, 0x3F, 0x13, 0x88, 0xB3, 0x34, 0x24,
 
  247        0x1B, 0xDE, 0xC5, 0x1D, 0x4D, 0x2B, 0x17, 0x31,
 
  248        0x74, 0xA9, 0xC6, 0x43, 0x6D, 0x39, 0x90, 0xBE,
 
  249        0xC3, 0xB0, 0x21, 0x6B, 0xF6, 0x0F, 0xD5, 0x99,
 
  250        0x0D, 0xAC, 0x1F, 0x5C, 0x9E, 0xF5, 0xF9, 0x4C,
 
  251        0xD6, 0xDF, 0x89, 0xE4, 0x8B, 0xFF, 0xC7, 0xAA,
 
  252        0xE7, 0xED, 0x46, 0x25, 0xB6, 0x06, 0x5E, 0x35,
 
  253        0xB5, 0xEC, 0xCE, 0xE8, 0x6C, 0x30, 0x55, 0x61,
 
  254        0x4A, 0xFE, 0xA0, 0x79, 0x03, 0xF0, 0x10, 0x72,
 
  255        0x7C, 0xCF, 0x52, 0xA6, 0xA7, 0xEE, 0x44, 0xD3,
 
  256        0x9A, 0x57, 0x92, 0xD0, 0x5A, 0x7A, 0x41, 0x7F,
 
  257        0x0E, 0x00, 0x63, 0xF2, 0x4F, 0x05, 0x83, 0xC9,
 
  258        0xA1, 0xD4, 0xDD, 0xC4, 0x56, 0xF4, 0xD2, 0x77,
 
  259        0x81, 0x09, 0x82, 0x33, 0x9F, 0x07, 0x86, 0x75,
 
  260        0x38, 0x4E, 0x69, 0xF1, 0xAD, 0x23, 0x73, 0x87,
 
  261        0x70, 0x02, 0xC2, 0x1E, 0xB8, 0x0A, 0xFC, 0xE6
 
  278                if ($this->current_key_length != 128 || strlen($this->orig_key) < 16) {
 
  281                $this->cipher_name_openssl_ecb = 
'rc2-ecb';
 
  285        return parent::isValidEngine(
$engine);
 
  300        if ($length >= 1 && $length <= 1024) {
 
  301            $this->default_key_length = $length;
 
  334        $this->orig_key = 
$key;
 
  338        } elseif ($t1 > 1024) {
 
  341        $this->current_key_length = $t1;
 
  353        $l = array_values(unpack(
'C*', 
$key));
 
  354        $t8 = ($t1 + 7) >> 3;
 
  355        $tm = 0xFF >> (8 * $t8 - $t1);
 
  369        $l[0] = $this->invpitable[
$l[0]];
 
  370        array_unshift(
$l, 
'C*');
 
  372        parent::setKey(call_user_func_array(
'pack', 
$l));
 
  387        if ($this->engine == self::ENGINE_OPENSSL) {
 
  390            $result = parent::encrypt($plaintext);
 
  395        return parent::encrypt($plaintext);
 
  410        if ($this->engine == self::ENGINE_OPENSSL) {
 
  413            $result = parent::decrypt($ciphertext);
 
  418        return parent::encrypt($ciphertext);
 
  432        list($r0, $r1, $r2, $r3) = array_values(unpack(
'v*', 
$in));
 
  435        $actions = array($limit => 44, 44 => 64);
 
  440            $r0 = (($r0 + 
$keys[$j++] + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
 
  442            $r1 = (($r1 + 
$keys[$j++] + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
 
  444            $r2 = (($r2 + 
$keys[$j++] + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
 
  446            $r3 = (($r3 + 
$keys[$j++] + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
 
  455                $r0 += 
$keys[$r3 & 0x3F];
 
  456                $r1 += 
$keys[$r0 & 0x3F];
 
  457                $r2 += 
$keys[$r1 & 0x3F];
 
  458                $r3 += 
$keys[$r2 & 0x3F];
 
  459                $limit = $actions[$limit];
 
  463        return pack(
'vvvv', $r0, $r1, $r2, $r3);
 
  477        list($r0, $r1, $r2, $r3) = array_values(unpack(
'v*', 
$in));
 
  480        $actions = array($limit => 20, 20 => 0);
 
  485            $r3 = ($r3 | ($r3 << 16)) >> 5;
 
  486            $r3 = ($r3 - 
$keys[--$j] - ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;
 
  487            $r2 = ($r2 | ($r2 << 16)) >> 3;
 
  488            $r2 = ($r2 - 
$keys[--$j] - ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;
 
  489            $r1 = ($r1 | ($r1 << 16)) >> 2;
 
  490            $r1 = ($r1 - 
$keys[--$j] - ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;
 
  491            $r0 = ($r0 | ($r0 << 16)) >> 1;
 
  492            $r0 = ($r0 - 
$keys[--$j] - ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;
 
  500                $r3 = ($r3 - 
$keys[$r2 & 0x3F]) & 0xFFFF;
 
  501                $r2 = ($r2 - 
$keys[$r1 & 0x3F]) & 0xFFFF;
 
  502                $r1 = ($r1 - 
$keys[$r0 & 0x3F]) & 0xFFFF;
 
  503                $r0 = ($r0 - 
$keys[$r3 & 0x3F]) & 0xFFFF;
 
  504                $limit = $actions[$limit];
 
  508        return pack(
'vvvv', $r0, $r1, $r2, $r3);
 
  519        if (!isset($this->key)) {
 
  523        parent::_setupMcrypt();
 
  534        if (!isset($this->key)) {
 
  540        $l = unpack(
'Ca/Cb/v*', $this->key);
 
  541        array_unshift(
$l, $this->pitable[
$l[
'a']] | (
$l[
'b'] << 8));
 
  561        $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
 
  564        $code_hash = 
"Crypt_RC2, {$this->mode}";
 
  565        if ($gen_hi_opt_code) {
 
  571        if (!isset($lambda_functions[$code_hash])) {
 
  573            $init_crypt = 
'$keys = $self->keys;';
 
  576                case $gen_hi_opt_code:
 
  580                    foreach ($this->keys as $k => $v) {
 
  581                        $keys[$k] = 
'$keys[' . $k . 
']';
 
  586            $encrypt_block = $decrypt_block = 
' 
  587                $in = unpack("v4", $in); 
  596            $actions = array($limit => 44, 44 => 64);
 
  602                    $r0 = (($r0 + ' . 
$keys[$j++] . 
' + 
  603                           ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1; 
  605                    $r1 = (($r1 + ' . 
$keys[$j++] . 
' + 
  606                           ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2; 
  608                    $r2 = (($r2 + ' . 
$keys[$j++] . 
' + 
  609                           ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3; 
  611                    $r3 = (($r3 + ' . 
$keys[$j++] . 
' + 
  612                           ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5; 
  622                        $r0 += $keys[$r3 & 0x3F]; 
  623                        $r1 += $keys[$r0 & 0x3F]; 
  624                        $r2 += $keys[$r1 & 0x3F]; 
  625                        $r3 += $keys[$r2 & 0x3F];';
 
  626                    $limit = $actions[$limit];
 
  630            $encrypt_block .= 
'$in = pack("v4", $r0, $r1, $r2, $r3);';
 
  634            $actions = array($limit => 20, 20 => 0);
 
  640                    $r3 = ($r3 | ($r3 << 16)) >> 5; 
  641                    $r3 = ($r3 - ' . 
$keys[--$j] . 
' - 
  642                           ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF; 
  643                    $r2 = ($r2 | ($r2 << 16)) >> 3; 
  644                    $r2 = ($r2 - ' . 
$keys[--$j] . 
' - 
  645                           ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF; 
  646                    $r1 = ($r1 | ($r1 << 16)) >> 2; 
  647                    $r1 = ($r1 - ' . 
$keys[--$j] . 
' - 
  648                           ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF; 
  649                    $r0 = ($r0 | ($r0 << 16)) >> 1; 
  650                    $r0 = ($r0 - ' . 
$keys[--$j] . 
' - 
  651                           ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;';
 
  660                        $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF; 
  661                        $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF; 
  662                        $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF; 
  663                        $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;';
 
  664                    $limit = $actions[$limit];
 
  668            $decrypt_block .= 
'$in = pack("v4", $r0, $r1, $r2, $r3);';
 
  673                   'init_crypt'    => $init_crypt,
 
  674                   'encrypt_block' => $encrypt_block,
 
  675                   'decrypt_block' => $decrypt_block
 
  681        $this->inline_crypt = $lambda_functions[$code_hash];
 
if(php_sapi_name() !='cli') $in
An exception for terminatinating execution or to throw for unit testing.
_hashInlineCryptFunction($bytes)
Generates a digest from $bytes.
const ENGINE_OPENSSL
Base value for the mcrypt implementation $engine switch.
_openssl_translate_mode()
phpseclib <-> OpenSSL Mode Mapper
& _getLambdaFunctions()
Holds the lambda_functions table (classwide)
_createInlineCryptFunction($cipher_code)
Creates the performance-optimized function for en/decrypt()
_decryptBlock($in)
Decrypts a block.
_setupInlineCrypt()
Setup the performance-optimized function for de/encrypt()
encrypt($plaintext)
Encrypts a message.
_setupMcrypt()
Setup the \phpseclib\Crypt\Base::ENGINE_MCRYPT $engine.
isValidEngine($engine)
Test for engine validity.
setKey($key, $t1=0)
Sets the key.
_setupKey()
Creates the key schedule.
getKeyLength()
Returns the current key length.
_encryptBlock($in)
Encrypts a block.
setKeyLength($length)
Sets the key length.
decrypt($ciphertext)
Decrypts a message.
Base Class for all \phpseclib\Crypt* cipher classes.
Pure-PHP implementation of RC2.
Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic...