ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
RC2.php
Go to the documentation of this file.
1<?php
2
36namespace phpseclib\Crypt;
37
39
46class RC2 extends Base
47{
55 var $block_size = 8;
56
65 var $key;
66
78
87
95 var $key_length = 16; // = 128 bits
96
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) {
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.
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
431 {
432 list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
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
476 {
477 list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
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
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:
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
if(php_sapi_name() !='cli') $in
Definition: Utf8Test.php:37
global $l
Definition: afr.php:30
An exception for terminatinating execution or to throw for unit testing.
_hashInlineCryptFunction($bytes)
Generates a digest from $bytes.
Definition: Base.php:2523
const ENGINE_OPENSSL
Base value for the mcrypt implementation $engine switch.
Definition: Base.php:117
_openssl_translate_mode()
phpseclib <-> OpenSSL Mode Mapper
Definition: Base.php:1423
& _getLambdaFunctions()
Holds the lambda_functions table (classwide)
Definition: Base.php:2509
_createInlineCryptFunction($cipher_code)
Creates the performance-optimized function for en/decrypt()
Definition: Base.php:2142
_decryptBlock($in)
Decrypts a block.
Definition: RC2.php:475
_setupInlineCrypt()
Setup the performance-optimized function for de/encrypt()
Definition: RC2.php:553
encrypt($plaintext)
Encrypts a message.
Definition: RC2.php:385
_setupMcrypt()
Setup the \phpseclib\Crypt\Base::ENGINE_MCRYPT $engine.
Definition: RC2.php:517
isValidEngine($engine)
Test for engine validity.
Definition: RC2.php:274
setKey($key, $t1=0)
Sets the key.
Definition: RC2.php:332
_setupKey()
Creates the key schedule.
Definition: RC2.php:532
getKeyLength()
Returns the current key length.
Definition: RC2.php:311
_encryptBlock($in)
Encrypts a block.
Definition: RC2.php:430
setKeyLength($length)
Sets the key length.
Definition: RC2.php:298
decrypt($ciphertext)
Decrypts a message.
Definition: RC2.php:408
$i
Definition: disco.tpl.php:19
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...
Definition: AES.php:50