File manager - Edit - /home/opticamezl/www/newok/Crypt.zip
Back
PK �%�\V#Q� � Crypt.phpnu �[��� <?php /** * Joomla! Content Management System * * @copyright (C) 2012 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Crypt; use Joomla\Crypt\Crypt as JCrypt; // phpcs:disable PSR1.Files.SideEffects \defined('JPATH_PLATFORM') or die; // phpcs:enable PSR1.Files.SideEffects /** * Crypt is a Joomla Platform class for handling basic encryption/decryption of data. * * @since 3.0.0 */ class Crypt extends JCrypt { /** * A timing safe comparison method. * * This defeats hacking attempts that use timing based attack vectors. * * NOTE: Length will leak. * * @param string $known A known string to check against. * @param string $unknown An unknown string to check. * * @return boolean True if the two strings are exactly the same. * * @since 3.2 */ public static function timingSafeCompare($known, $unknown) { /** * Explanation about the function_exists * * Yes, hash_equals has existed since PHP 5.6.0 and Joomla's minimum requirements are higher * than that. However, this does not prevent a misguided server administrator from disabling * hash_equals in php.ini. Hence the need for checking whether the function exists or not. */ if (function_exists('hash_equals')) { return hash_equals($known, $unknown); } /** * If hash_equals is not available we use a pure PHP implementation by Anthony Ferrara. * * @see https://blog.ircmaxell.com/2014/11/its-all-about-time.html */ $safeLen = strlen($known); $userLen = strlen($unknown); if ($userLen != $safeLen) { return false; } $result = 0; for ($i = 0; $i < $userLen; $i++) { $result |= (ord($known[$i]) ^ ord($unknown[$i])); } // They are only identical strings if $result is exactly 0... return $result === 0; } /** * Safely detect a string's length * * This method is derived from \ParagonIE\Halite\Util::safeStrlen() * * @param string $str String to check the length of * * @return integer * * @since 3.5 * @ref mbstring.func_overload * @throws \RuntimeException */ public static function safeStrlen($str) { static $exists = null; if ($exists === null) { $exists = \function_exists('mb_strlen'); } if ($exists) { $length = mb_strlen($str, '8bit'); if ($length === false) { throw new \RuntimeException('mb_strlen() failed unexpectedly'); } return $length; } // If we reached here, we can rely on strlen to count bytes: return \strlen($str); } /** * Safely extract a substring * * This method is derived from \ParagonIE\Halite\Util::safeSubstr() * * @param string $str The string to extract the substring from * @param integer $start The starting position to extract from * @param integer $length The length of the string to return * * @return string * * @since 3.5 */ public static function safeSubstr($str, $start, $length = null) { static $exists = null; if ($exists === null) { $exists = \function_exists('mb_substr'); } if ($exists) { // In PHP 5.3 mb_substr($str, 0, NULL, '8bit') returns an empty string, so we have to find the length ourselves. if ($length === null) { if ($start >= 0) { $length = static::safeStrlen($str) - $start; } else { $length = -$start; } } return mb_substr($str, $start, $length, '8bit'); } // Unlike mb_substr(), substr() doesn't accept NULL for length if ($length !== null) { return substr($str, $start, $length); } return substr($str, $start); } } PK �%�\���_ _ Cipher/SodiumCipher.phpnu �[��� <?php /** * Joomla! Content Management System * * @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Crypt\Cipher; use Joomla\Crypt\CipherInterface; use Joomla\Crypt\Key; use ParagonIE\Sodium\Compat; // phpcs:disable PSR1.Files.SideEffects \defined('JPATH_PLATFORM') or die; // phpcs:enable PSR1.Files.SideEffects /** * JCrypt cipher for sodium algorithm encryption, decryption and key generation. * * @since 3.8.0 */ class SodiumCipher implements CipherInterface { /** * The message nonce to be used with encryption/decryption * * @var string * @since 3.8.0 */ private $nonce; /** * Method to decrypt a data string. * * @param string $data The encrypted string to decrypt. * @param Key $key The key object to use for decryption. * * @return string The decrypted data string. * * @since 3.8.0 * @throws \RuntimeException */ public function decrypt($data, Key $key) { // Validate key. if ($key->getType() !== 'sodium') { throw new \InvalidArgumentException('Invalid key of type: ' . $key->getType() . '. Expected sodium.'); } if (!$this->nonce) { throw new \RuntimeException('Missing nonce to decrypt data'); } $decrypted = Compat::crypto_box_open( $data, $this->nonce, Compat::crypto_box_keypair_from_secretkey_and_publickey($key->getPrivate(), $key->getPublic()) ); if ($decrypted === false) { throw new \RuntimeException('Malformed message or invalid MAC'); } return $decrypted; } /** * Method to encrypt a data string. * * @param string $data The data string to encrypt. * @param Key $key The key object to use for encryption. * * @return string The encrypted data string. * * @since 3.8.0 * @throws \RuntimeException */ public function encrypt($data, Key $key) { // Validate key. if ($key->getType() !== 'sodium') { throw new \InvalidArgumentException('Invalid key of type: ' . $key->getType() . '. Expected sodium.'); } if (!$this->nonce) { throw new \RuntimeException('Missing nonce to decrypt data'); } return Compat::crypto_box( $data, $this->nonce, Compat::crypto_box_keypair_from_secretkey_and_publickey($key->getPrivate(), $key->getPublic()) ); } /** * Method to generate a new encryption key object. * * @param array $options Key generation options. * * @return Key * * @since 3.8.0 * @throws \RuntimeException */ public function generateKey(array $options = []) { // Generate the encryption key. $pair = Compat::crypto_box_keypair(); return new Key('sodium', Compat::crypto_box_secretkey($pair), Compat::crypto_box_publickey($pair)); } /** * Check if the cipher is supported in this environment. * * @return boolean * * @since 4.0.0 */ public static function isSupported(): bool { return class_exists(Compat::class); } /** * Set the nonce to use for encrypting/decrypting messages * * @param string $nonce The message nonce * * @return void * * @since 3.8.0 */ public function setNonce($nonce) { $this->nonce = $nonce; } } PK �%�\��A�� � Cipher/CryptoCipher.phpnu �[��� <?php /** * Joomla! Content Management System * * @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Crypt\Cipher; use Joomla\Crypt\CipherInterface; use Joomla\Crypt\Key; // phpcs:disable PSR1.Files.SideEffects \defined('JPATH_PLATFORM') or die; // phpcs:enable PSR1.Files.SideEffects /** * Crypt cipher for encryption, decryption and key generation via the php-encryption library. * * @since 3.5 * * @deprecated 4.3 will be removed in 6.0 * Will be removed without replacement use SodiumCipher instead */ class CryptoCipher implements CipherInterface { /** * Method to decrypt a data string. * * @param string $data The encrypted string to decrypt. * @param Key $key The key object to use for decryption. * * @return string The decrypted data string. * * @since 3.5 * @throws \RuntimeException */ public function decrypt($data, Key $key) { // Validate key. if ($key->getType() !== 'crypto') { throw new \InvalidArgumentException('Invalid key of type: ' . $key->getType() . '. Expected crypto.'); } // Decrypt the data. try { return \Crypto::Decrypt($data, $key->getPublic()); } catch (\InvalidCiphertextException $ex) { throw new \RuntimeException('DANGER! DANGER! The ciphertext has been tampered with!', $ex->getCode(), $ex); } catch (\CryptoTestFailedException $ex) { throw new \RuntimeException('Cannot safely perform decryption', $ex->getCode(), $ex); } catch (\CannotPerformOperationException $ex) { throw new \RuntimeException('Cannot safely perform decryption', $ex->getCode(), $ex); } } /** * Method to encrypt a data string. * * @param string $data The data string to encrypt. * @param Key $key The key object to use for encryption. * * @return string The encrypted data string. * * @since 3.5 * @throws \RuntimeException */ public function encrypt($data, Key $key) { // Validate key. if ($key->getType() !== 'crypto') { throw new \InvalidArgumentException('Invalid key of type: ' . $key->getType() . '. Expected crypto.'); } // Encrypt the data. try { return \Crypto::Encrypt($data, $key->getPublic()); } catch (\CryptoTestFailedException $ex) { throw new \RuntimeException('Cannot safely perform encryption', $ex->getCode(), $ex); } catch (\CannotPerformOperationException $ex) { throw new \RuntimeException('Cannot safely perform encryption', $ex->getCode(), $ex); } } /** * Method to generate a new encryption key object. * * @param array $options Key generation options. * * @return Key * * @since 3.5 * @throws \RuntimeException */ public function generateKey(array $options = []) { // Generate the encryption key. try { $public = \Crypto::CreateNewRandomKey(); } catch (\CryptoTestFailedException $ex) { throw new \RuntimeException('Cannot safely create a key', $ex->getCode(), $ex); } catch (\CannotPerformOperationException $ex) { throw new \RuntimeException('Cannot safely create a key', $ex->getCode(), $ex); } // Explicitly flag the private as unused in this cipher. $private = 'unused'; return new Key('crypto', $private, $public); } /** * Check if the cipher is supported in this environment. * * @return boolean * * @since 4.0.0 */ public static function isSupported(): bool { try { \Crypto::RuntimeTest(); return true; } catch (\CryptoTestFailedException $e) { return false; } } } PK �%�\V#Q� � Crypt.phpnu �[��� PK �%�\���_ _ � Cipher/SodiumCipher.phpnu �[��� PK �%�\��A�� � m Cipher/CryptoCipher.phpnu �[��� PK � �/
| ver. 1.4 |
Github
|
.
| PHP 8.3.23 | Generation time: 0 |
proxy
|
phpinfo
|
Settings