ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
RC2.php
Go to the documentation of this file.
1 <?php
2 
36 namespace phpseclib\Crypt;
37 
39 
46 class RC2 extends Base
47 {
55  var $block_size = 8;
56 
65  var $key;
66 
77  var $orig_key;
78 
87 
95  var $key_length = 16; // = 128 bits
96 
104  var $cipher_name_mcrypt = 'rc2';
105 
113  var $cfb_init_len = 500;
114 
126 
137 
145  var $keys;
146 
155  var $pitable = array(
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
220  );
221 
229  var $invpitable = array(
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
262  );
263 
275  {
276  switch ($engine) {
277  case self::ENGINE_OPENSSL:
278  if ($this->current_key_length != 128 || strlen($this->orig_key) < 16) {
279  return false;
280  }
281  $this->cipher_name_openssl_ecb = 'rc2-ecb';
282  $this->cipher_name_openssl = 'rc2-' . $this->_openssl_translate_mode();
283  }
284 
285  return parent::isValidEngine($engine);
286  }
287 
298  function setKeyLength($length)
299  {
300  if ($length >= 1 && $length <= 1024) {
301  $this->default_key_length = $length;
302  }
303  }
304 
311  function getKeyLength()
312  {
314  }
315 
332  function setKey($key, $t1 = 0)
333  {
334  $this->orig_key = $key;
335 
336  if ($t1 <= 0) {
338  } elseif ($t1 > 1024) {
339  $t1 = 1024;
340  }
341  $this->current_key_length = $t1;
342  // Key byte count should be 1..128.
343  $key = strlen($key) ? substr($key, 0, 128) : "\x00";
344  $t = strlen($key);
345 
346  // The mcrypt RC2 implementation only supports effective key length
347  // of 1024 bits. It is however possible to handle effective key
348  // lengths in range 1..1024 by expanding the key and applying
349  // inverse pitable mapping to the first byte before submitting it
350  // to mcrypt.
351 
352  // Key expansion.
353  $l = array_values(unpack('C*', $key));
354  $t8 = ($t1 + 7) >> 3;
355  $tm = 0xFF >> (8 * $t8 - $t1);
356 
357  // Expand key.
358  $pitable = $this->pitable;
359  for ($i = $t; $i < 128; $i++) {
360  $l[$i] = $pitable[$l[$i - 1] + $l[$i - $t]];
361  }
362  $i = 128 - $t8;
363  $l[$i] = $pitable[$l[$i] & $tm];
364  while ($i--) {
365  $l[$i] = $pitable[$l[$i + 1] ^ $l[$i + $t8]];
366  }
367 
368  // Prepare the key for mcrypt.
369  $l[0] = $this->invpitable[$l[0]];
370  array_unshift($l, 'C*');
371 
372  parent::setKey(call_user_func_array('pack', $l));
373  }
374 
385  function encrypt($plaintext)
386  {
387  if ($this->engine == self::ENGINE_OPENSSL) {
388  $temp = $this->key;
389  $this->key = $this->orig_key;
390  $result = parent::encrypt($plaintext);
391  $this->key = $temp;
392  return $result;
393  }
394 
395  return parent::encrypt($plaintext);
396  }
397 
408  function decrypt($ciphertext)
409  {
410  if ($this->engine == self::ENGINE_OPENSSL) {
411  $temp = $this->key;
412  $this->key = $this->orig_key;
413  $result = parent::decrypt($ciphertext);
414  $this->key = $temp;
415  return $result;
416  }
417 
418  return parent::encrypt($ciphertext);
419  }
420 
430  function _encryptBlock($in)
431  {
432  list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
433  $keys = $this->keys;
434  $limit = 20;
435  $actions = array($limit => 44, 44 => 64);
436  $j = 0;
437 
438  for (;;) {
439  // Mixing round.
440  $r0 = (($r0 + $keys[$j++] + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
441  $r0 |= $r0 >> 16;
442  $r1 = (($r1 + $keys[$j++] + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
443  $r1 |= $r1 >> 16;
444  $r2 = (($r2 + $keys[$j++] + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
445  $r2 |= $r2 >> 16;
446  $r3 = (($r3 + $keys[$j++] + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
447  $r3 |= $r3 >> 16;
448 
449  if ($j === $limit) {
450  if ($limit === 64) {
451  break;
452  }
453 
454  // Mashing round.
455  $r0 += $keys[$r3 & 0x3F];
456  $r1 += $keys[$r0 & 0x3F];
457  $r2 += $keys[$r1 & 0x3F];
458  $r3 += $keys[$r2 & 0x3F];
459  $limit = $actions[$limit];
460  }
461  }
462 
463  return pack('vvvv', $r0, $r1, $r2, $r3);
464  }
465 
475  function _decryptBlock($in)
476  {
477  list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
478  $keys = $this->keys;
479  $limit = 44;
480  $actions = array($limit => 20, 20 => 0);
481  $j = 64;
482 
483  for (;;) {
484  // R-mixing round.
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;
493 
494  if ($j === $limit) {
495  if ($limit === 0) {
496  break;
497  }
498 
499  // R-mashing round.
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];
505  }
506  }
507 
508  return pack('vvvv', $r0, $r1, $r2, $r3);
509  }
510 
517  function _setupMcrypt()
518  {
519  if (!isset($this->key)) {
520  $this->setKey('');
521  }
522 
523  parent::_setupMcrypt();
524  }
525 
532  function _setupKey()
533  {
534  if (!isset($this->key)) {
535  $this->setKey('');
536  }
537 
538  // Key has already been expanded in \phpseclib\Crypt\RC2::setKey():
539  // Only the first value must be altered.
540  $l = unpack('Ca/Cb/v*', $this->key);
541  array_unshift($l, $this->pitable[$l['a']] | ($l['b'] << 8));
542  unset($l['a']);
543  unset($l['b']);
544  $this->keys = $l;
545  }
546 
553  function _setupInlineCrypt()
554  {
555  $lambda_functions =& self::_getLambdaFunctions();
556 
557  // The first 10 generated $lambda_functions will use the $keys hardcoded as integers
558  // for the mixing rounds, for better inline crypt performance [~20% faster].
559  // But for memory reason we have to limit those ultra-optimized $lambda_functions to an amount of 10.
560  // (Currently, for Crypt_RC2, one generated $lambda_function cost on php5.5@32bit ~60kb unfreeable mem and ~100kb on php5.5@64bit)
561  $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
562 
563  // Generation of a uniqe hash for our generated code
564  $code_hash = "Crypt_RC2, {$this->mode}";
565  if ($gen_hi_opt_code) {
566  $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
567  }
568 
569  // Is there a re-usable $lambda_functions in there?
570  // If not, we have to create it.
571  if (!isset($lambda_functions[$code_hash])) {
572  // Init code for both, encrypt and decrypt.
573  $init_crypt = '$keys = $self->keys;';
574 
575  switch (true) {
576  case $gen_hi_opt_code:
577  $keys = $this->keys;
578  default:
579  $keys = array();
580  foreach ($this->keys as $k => $v) {
581  $keys[$k] = '$keys[' . $k . ']';
582  }
583  }
584 
585  // $in is the current 8 bytes block which has to be en/decrypt
586  $encrypt_block = $decrypt_block = '
587  $in = unpack("v4", $in);
588  $r0 = $in[1];
589  $r1 = $in[2];
590  $r2 = $in[3];
591  $r3 = $in[4];
592  ';
593 
594  // Create code for encryption.
595  $limit = 20;
596  $actions = array($limit => 44, 44 => 64);
597  $j = 0;
598 
599  for (;;) {
600  // Mixing round.
601  $encrypt_block .= '
602  $r0 = (($r0 + ' . $keys[$j++] . ' +
603  ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
604  $r0 |= $r0 >> 16;
605  $r1 = (($r1 + ' . $keys[$j++] . ' +
606  ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
607  $r1 |= $r1 >> 16;
608  $r2 = (($r2 + ' . $keys[$j++] . ' +
609  ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
610  $r2 |= $r2 >> 16;
611  $r3 = (($r3 + ' . $keys[$j++] . ' +
612  ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
613  $r3 |= $r3 >> 16;';
614 
615  if ($j === $limit) {
616  if ($limit === 64) {
617  break;
618  }
619 
620  // Mashing round.
621  $encrypt_block .= '
622  $r0 += $keys[$r3 & 0x3F];
623  $r1 += $keys[$r0 & 0x3F];
624  $r2 += $keys[$r1 & 0x3F];
625  $r3 += $keys[$r2 & 0x3F];';
626  $limit = $actions[$limit];
627  }
628  }
629 
630  $encrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);';
631 
632  // Create code for decryption.
633  $limit = 44;
634  $actions = array($limit => 20, 20 => 0);
635  $j = 64;
636 
637  for (;;) {
638  // R-mixing round.
639  $decrypt_block .= '
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;';
652 
653  if ($j === $limit) {
654  if ($limit === 0) {
655  break;
656  }
657 
658  // R-mashing round.
659  $decrypt_block .= '
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];
665  }
666  }
667 
668  $decrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);';
669 
670  // Creates the inline-crypt function
671  $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
672  array(
673  'init_crypt' => $init_crypt,
674  'encrypt_block' => $encrypt_block,
675  'decrypt_block' => $decrypt_block
676  )
677  );
678  }
679 
680  // Set the inline-crypt function as callback in: $this->inline_crypt
681  $this->inline_crypt = $lambda_functions[$code_hash];
682  }
683 }
$result
_hashInlineCryptFunction($bytes)
Generates a digest from $bytes.
Definition: Base.php:2523
Pure-PHP implementation of RC2.
_setupInlineCrypt()
Setup the performance-optimized function for de/encrypt()
Definition: RC2.php:553
_openssl_translate_mode()
phpseclib <-> OpenSSL Mode Mapper
Definition: Base.php:1423
Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic...
Definition: AES.php:50
_encryptBlock($in)
Encrypts a block.
Definition: RC2.php:430
setKeyLength($length)
Sets the key length.
Definition: RC2.php:298
_setupKey()
Creates the key schedule.
Definition: RC2.php:532
_setupMcrypt()
Setup the ::ENGINE_MCRYPT $engine.
Definition: RC2.php:517
_createInlineCryptFunction($cipher_code)
Creates the performance-optimized function for en/decrypt()
Definition: Base.php:2142
getKeyLength()
Returns the current key length.
Definition: RC2.php:311
if(php_sapi_name() !='cli') $in
Definition: Utf8Test.php:37
global $l
Definition: afr.php:30
setKey($key, $t1=0)
Sets the key.
Definition: RC2.php:332
$i
Definition: disco.tpl.php:19
isValidEngine($engine)
Test for engine validity.
Definition: RC2.php:274
Base Class for all * cipher classes.
encrypt($plaintext)
Encrypts a message.
Definition: RC2.php:385
decrypt($ciphertext)
Decrypts a message.
Definition: RC2.php:408
_decryptBlock($in)
Decrypts a block.
Definition: RC2.php:475