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
277 case self::ENGINE_OPENSSL:
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;
343 $key = strlen($key) ? substr($key, 0, 128) :
"\x00";
353 $l = array_values(unpack(
'C*', $key));
354 $t8 = ($t1 + 7) >> 3;
355 $tm = 0xFF >> (8 * $t8 - $t1);
365 $l[
$i] = $pitable[$l[
$i + 1] ^ $l[
$i + $t8]];
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));
555 $lambda_functions =& self::_getLambdaFunctions();
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];
_hashInlineCryptFunction($bytes)
Generates a digest from $bytes.
Pure-PHP implementation of RC2.
_setupInlineCrypt()
Setup the performance-optimized function for de/encrypt()
_openssl_translate_mode()
phpseclib <-> OpenSSL Mode Mapper
Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic...
_encryptBlock($in)
Encrypts a block.
setKeyLength($length)
Sets the key length.
_setupKey()
Creates the key schedule.
_setupMcrypt()
Setup the ::ENGINE_MCRYPT $engine.
_createInlineCryptFunction($cipher_code)
Creates the performance-optimized function for en/decrypt()
getKeyLength()
Returns the current key length.
if(php_sapi_name() !='cli') $in
setKey($key, $t1=0)
Sets the key.
isValidEngine($engine)
Test for engine validity.
Base Class for all * cipher classes.
encrypt($plaintext)
Encrypts a message.
decrypt($ciphertext)
Decrypts a message.
_decryptBlock($in)
Decrypts a block.