197 $this->key_length = 16;
200 $this->key_length = 20;
203 $this->key_length = 24;
206 $this->key_length = 28;
209 $this->key_length = 32;
212 parent::setKeyLength($length);
229 } elseif ($length < 4) {
233 $this->block_size = $length << 2;
234 $this->changed =
true;
251 case self::ENGINE_OPENSSL:
252 if ($this->block_size != 16) {
255 $this->cipher_name_openssl_ecb =
'aes-' . ($this->key_length << 3) .
'-ecb';
258 case self::ENGINE_MCRYPT:
259 $this->cipher_name_mcrypt =
'rijndael-' . ($this->block_size << 3);
260 if ($this->key_length % 8) {
266 return parent::isValidEngine(
$engine);
279 if (empty($tables)) {
289 $words = unpack(
'N*',
$in);
298 foreach ($words as $word) {
299 $state[] = $word ^ $w[++$wc];
311 for ($round = 1; $round <
$Nr; ++$round) {
318 $temp[
$i] = $t0[
$state[
$i] >> 24 & 0x000000FF] ^
319 $t1[
$state[$j] >> 16 & 0x000000FF] ^
320 $t2[
$state[$k] >> 8 & 0x000000FF] ^
334 ($sbox[
$state[
$i] >> 8 & 0x000000FF] << 8) |
335 ($sbox[
$state[
$i] >> 16 & 0x000000FF] << 16) |
336 ($sbox[
$state[
$i] >> 24 & 0x000000FF] << 24);
346 (
$state[$j] & 0x00FF0000) ^
347 (
$state[$k] & 0x0000FF00) ^
358 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
360 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
362 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
364 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
366 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3]);
380 if (empty($invtables)) {
383 $dt0 = $invtables[0];
384 $dt1 = $invtables[1];
385 $dt2 = $invtables[2];
386 $dt3 = $invtables[3];
387 $isbox = $invtables[4];
390 $words = unpack(
'N*',
$in);
399 foreach ($words as $word) {
400 $state[] = $word ^ $dw[++$wc];
404 for ($round = $Nr - 1; $round > 0; --$round) {
411 $temp[
$i] = $dt0[
$state[
$i] >> 24 & 0x000000FF] ^
412 $dt1[
$state[$j] >> 16 & 0x000000FF] ^
413 $dt2[
$state[$k] >> 8 & 0x000000FF] ^
432 (
$state[$j] & 0x00FF0000) |
433 (
$state[$k] & 0x0000FF00) |
436 $temp[
$i] = $dw[
$i] ^ ($isbox[$word & 0x000000FF] |
437 ($isbox[$word >> 8 & 0x000000FF] << 8) |
438 ($isbox[$word >> 16 & 0x000000FF] << 16) |
439 ($isbox[$word >> 24 & 0x000000FF] << 24));
448 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
450 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
452 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
454 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
456 return pack(
'N*', $temp[0], $temp[1], $temp[2], $temp[3]);
470 static $rcon = array(0,
471 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
472 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
473 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
474 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
475 0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
476 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
479 if (isset($this->kl[
'key']) && $this->key === $this->kl[
'key'] && $this->key_length === $this->kl[
'key_length'] && $this->block_size === $this->kl[
'block_size']) {
483 $this->kl = array(
'key' => $this->key,
'key_length' => $this->key_length,
'block_size' => $this->block_size);
485 $this->Nk = $this->key_length >> 2;
487 $this->Nr = max($this->Nk, $this->Nb) + 6;
497 $this->c = array(0, 1, 2, 3);
500 $this->c = array(0, 1, 2, 4);
503 $this->c = array(0, 1, 3, 4);
506 $w = array_values(unpack(
'N*words', $this->key));
508 $length = $this->Nb * ($this->Nr + 1);
509 for (
$i = $this->Nk;
$i < $length;
$i++) {
511 if (
$i % $this->Nk == 0) {
516 $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF);
518 } elseif ($this->Nk > 6 &&
$i % $this->Nk == 4) {
532 $temp = $this->w = $this->dw = array();
533 for (
$i =
$row = $col = 0;
$i < $length;
$i++, $col++) {
534 if ($col == $this->Nb) {
536 $this->dw[0] = $this->w[0];
540 while ($j < $this->Nb) {
542 $temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^
543 $dt1[$dw >> 16 & 0x000000FF] ^
544 $dt2[$dw >> 8 & 0x000000FF] ^
545 $dt3[$dw & 0x000000FF];
548 $this->dw[
$row] = $temp;
554 $this->w[
$row][$col] = $w[
$i];
560 $this->dw = array_reverse($this->dw);
561 $w = array_pop($this->w);
562 $dw = array_pop($this->dw);
563 foreach ($this->w as
$r => $wr) {
564 foreach ($wr as $c => $wc) {
566 $dw[] = $this->dw[
$r][
$c];
586 return $sbox[$word & 0x000000FF] |
587 ($sbox[$word >> 8 & 0x000000FF] << 8) |
588 ($sbox[$word >> 16 & 0x000000FF] << 16) |
589 ($sbox[$word >> 24 & 0x000000FF] << 24);
604 if (empty($tables)) {
608 $t3 = array_map(
'intval', array(
611 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
612 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
613 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
614 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
615 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
616 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
617 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
618 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
619 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
620 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
621 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
622 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
623 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
624 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
625 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
626 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
627 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
628 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
629 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
630 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
631 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
632 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
633 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
634 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
635 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
636 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
637 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
638 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
639 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
640 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
641 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
642 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
645 foreach ($t3 as $t3i) {
646 $t0[] = (($t3i << 24) & 0xFF000000) | (($t3i >> 8) & 0x00FFFFFF);
647 $t1[] = (($t3i << 16) & 0xFFFF0000) | (($t3i >> 16) & 0x0000FFFF);
648 $t2[] = (($t3i << 8) & 0xFFFFFF00) | (($t3i >> 24) & 0x000000FF);
659 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
660 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
661 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
662 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
663 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
664 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
665 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
666 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
667 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
668 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
669 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
670 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
671 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
672 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
673 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
674 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
693 if (empty($tables)) {
694 $dt3 = array_map(
'intval', array(
695 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
696 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
697 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
698 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
699 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
700 0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
701 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
702 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
703 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
704 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
705 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
706 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
707 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
708 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
709 0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
710 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
711 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
712 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
713 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
714 0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
715 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
716 0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
717 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
718 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
719 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
720 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
721 0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
722 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
723 0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
724 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
725 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
726 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
729 foreach ($dt3 as $dt3i) {
730 $dt0[] = (($dt3i << 24) & 0xFF000000) | (($dt3i >> 8) & 0x00FFFFFF);
731 $dt1[] = (($dt3i << 16) & 0xFFFF0000) | (($dt3i >> 16) & 0x0000FFFF);
732 $dt2[] = (($dt3i << 8) & 0xFFFFFF00) | (($dt3i >> 24) & 0x000000FF);
743 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
744 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
745 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
746 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
747 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
748 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
749 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
750 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
751 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
752 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
753 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
754 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
755 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
756 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
757 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
758 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
777 $lambda_functions =& self::_getLambdaFunctions();
782 $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
785 $code_hash =
"Crypt_Rijndael, {$this->mode}, {$this->Nr}, {$this->Nb}";
786 if ($gen_hi_opt_code) {
790 if (!isset($lambda_functions[$code_hash])) {
792 case $gen_hi_opt_code:
800 for (
$i = 0, $cw = count($this->w);
$i < $cw; ++
$i) {
801 $w[] =
'$w[' .
$i .
']';
802 $dw[] =
'$dw[' .
$i .
']';
804 $init_encrypt =
'$w = $self->w;';
805 $init_decrypt =
'$dw = $self->dw;';
815 if (empty($tables)) { 816 $tables = &$self->_getTables(); 830 $encrypt_block =
'$in = unpack("N*", $in);'.
"\n";
832 $encrypt_block .=
'$s'.$i.
' = $in['.(
$i + 1).
'] ^ '.$w[++$wc].
";\n";
836 for ($round = 1; $round <
$Nr; ++$round) {
837 list(
$s, $e) = array($e,
$s);
841 $t0[($'.
$s.$i .
' >> 24) & 0xff] ^ 842 $t1[($'.
$s.(($i + $c[1]) % $Nb).
' >> 16) & 0xff] ^ 843 $t2[($'.
$s.(($i + $c[2]) % $Nb).
' >> 8) & 0xff] ^ 844 $t3[ $'.
$s.(($i + $c[3]) % $Nb).
' & 0xff] ^ 853 $sbox[ $'.$e.$i.
' & 0xff] | 854 ($sbox[($'.$e.$i.
' >> 8) & 0xff] << 8) | 855 ($sbox[($'.$e.$i.
' >> 16) & 0xff] << 16) | 856 ($sbox[($'.$e.$i.
' >> 24) & 0xff] << 24);'.
"\n";
858 $encrypt_block .=
'$in = pack("N*"'.
"\n";
861 ($'.$e.$i .
' & '.((int)0xFF000000).
') ^ 862 ($'.$e.(($i + $c[1]) % $Nb).
' & 0x00FF0000 ) ^ 863 ($'.$e.(($i + $c[2]) % $Nb).
' & 0x0000FF00 ) ^ 864 ($'.$e.(($i + $c[3]) % $Nb).
' & 0x000000FF ) ^ 867 $encrypt_block .=
');';
872 if (empty($invtables)) { 873 $invtables = &$self->_getInvTables(); 875 $dt0 = $invtables[0]; 876 $dt1 = $invtables[1]; 877 $dt2 = $invtables[2]; 878 $dt3 = $invtables[3]; 879 $isbox = $invtables[4]; 887 $decrypt_block =
'$in = unpack("N*", $in);'.
"\n";
889 $decrypt_block .=
'$s'.$i.
' = $in['.(
$i + 1).
'] ^ '.$dw[++$wc].
';'.
"\n";
893 for ($round = 1; $round <
$Nr; ++$round) {
894 list(
$s, $e) = array($e,
$s);
898 $dt0[($'.
$s.$i .
' >> 24) & 0xff] ^ 899 $dt1[($'.
$s.(($Nb +
$i - $c[1]) % $Nb).
' >> 16) & 0xff] ^ 900 $dt2[($'.
$s.(($Nb +
$i - $c[2]) % $Nb).
' >> 8) & 0xff] ^ 901 $dt3[ $'.
$s.(($Nb +
$i - $c[3]) % $Nb).
' & 0xff] ^ 910 $isbox[ $'.$e.$i.
' & 0xff] | 911 ($isbox[($'.$e.$i.
' >> 8) & 0xff] << 8) | 912 ($isbox[($'.$e.$i.
' >> 16) & 0xff] << 16) | 913 ($isbox[($'.$e.$i.
' >> 24) & 0xff] << 24);'.
"\n";
915 $decrypt_block .=
'$in = pack("N*"'.
"\n";
918 ($'.$e.$i.
' & '.((int)0xFF000000).
') ^ 919 ($'.$e.(($Nb +
$i - $c[1]) % $Nb).
' & 0x00FF0000 ) ^ 920 ($'.$e.(($Nb +
$i - $c[2]) % $Nb).
' & 0x0000FF00 ) ^ 921 ($'.$e.(($Nb +
$i - $c[3]) % $Nb).
' & 0x000000FF ) ^ 924 $decrypt_block .=
');';
929 'init_encrypt' => $init_encrypt,
930 'init_decrypt' => $init_decrypt,
931 'encrypt_block' => $encrypt_block,
932 'decrypt_block' => $decrypt_block
936 $this->inline_crypt = $lambda_functions[$code_hash];
_decryptBlock($in)
Decrypts a block.
isValidEngine($engine)
Test for engine validity.
_setEngine()
Sets the engine as appropriate.
_hashInlineCryptFunction($bytes)
Generates a digest from $bytes.
_setupInlineCrypt()
Setup the performance-optimized function for de/encrypt()
& _getInvTables()
Provides the inverse mixColumns and inverse sboxes tables.
_openssl_translate_mode()
phpseclib <-> OpenSSL Mode Mapper
Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic...
& _getTables()
Provides the mixColumns and sboxes tables.
if(!array_key_exists('stateid', $_REQUEST)) $state
Handle linkback() response from LinkedIn.
Pure-PHP implementation of Rijndael.
_subWord($word)
Performs S-Box substitutions.
_setupKey()
Setup the key (expansion)
_createInlineCryptFunction($cipher_code)
Creates the performance-optimized function for en/decrypt()
setBlockLength($length)
Sets the block length.
if(php_sapi_name() !='cli') $in
setKeyLength($length)
Sets the key length.
Base Class for all * cipher classes.
_encryptBlock($in)
Encrypts a block.