* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\Security\Core\Exception\BadCredentialsException; /** * Argon2iPasswordEncoder uses the Argon2i hashing algorithm. * * @author Zan Baldwin */ class Argon2iPasswordEncoder extends BasePasswordEncoder implements SelfSaltingEncoderInterface { public static function isSupported() { if (\PHP_VERSION_ID >= 70200 && \defined('PASSWORD_ARGON2I')) { return true; } if (\class_exists('ParagonIE_Sodium_Compat') && \method_exists('ParagonIE_Sodium_Compat', 'crypto_pwhash_is_available')) { return \ParagonIE_Sodium_Compat::crypto_pwhash_is_available(); } return \function_exists('sodium_crypto_pwhash_str') || \extension_loaded('libsodium'); } /** * {@inheritdoc} */ public function encodePassword($raw, $salt) { if ($this->isPasswordTooLong($raw)) { throw new BadCredentialsException('Invalid password.'); } if (\PHP_VERSION_ID >= 70200 && \defined('PASSWORD_ARGON2I')) { return $this->encodePasswordNative($raw); } if (\function_exists('sodium_crypto_pwhash_str')) { return $this->encodePasswordSodiumFunction($raw); } if (\extension_loaded('libsodium')) { return $this->encodePasswordSodiumExtension($raw); } throw new \LogicException('Argon2i algorithm is not supported. Please install the libsodium extension or upgrade to PHP 7.2+.'); } /** * {@inheritdoc} */ public function isPasswordValid($encoded, $raw, $salt) { if (\PHP_VERSION_ID >= 70200 && \defined('PASSWORD_ARGON2I')) { return !$this->isPasswordTooLong($raw) && password_verify($raw, $encoded); } if (\function_exists('sodium_crypto_pwhash_str_verify')) { $valid = !$this->isPasswordTooLong($raw) && \sodium_crypto_pwhash_str_verify($encoded, $raw); \sodium_memzero($raw); return $valid; } if (\extension_loaded('libsodium')) { $valid = !$this->isPasswordTooLong($raw) && \Sodium\crypto_pwhash_str_verify($encoded, $raw); \Sodium\memzero($raw); return $valid; } throw new \LogicException('Argon2i algorithm is not supported. Please install the libsodium extension or upgrade to PHP 7.2+.'); } private function encodePasswordNative($raw) { return password_hash($raw, \PASSWORD_ARGON2I); } private function encodePasswordSodiumFunction($raw) { $hash = \sodium_crypto_pwhash_str( $raw, \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE ); \sodium_memzero($raw); return $hash; } private function encodePasswordSodiumExtension($raw) { $hash = \Sodium\crypto_pwhash_str( $raw, \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE ); \Sodium\memzero($raw); return $hash; } } __halt_compiler();----SIGNATURE:----bClHK8Rei0pwRz0gRIbMQ7Z8MVvEN77KhBSxlSLVwJDxTlULaXpfuzNt2AxvjhPNsAWsJzK8w4/zoezHUGk6Xv95rS2KyeMByKtFjI6hgti+cxx5CKit/uv8MXHJpGjkqn2RiWNUJ2X8IavB8dGh/UxwJ1lnIo5FMZgULdyAJT6QppoXhfgWkRERo2uYSi/Ku2oKq3OBzKvcqo2CZ7U9aYlurBW/JYuRwPo2DUKAXMI2I110GcJXRCOqY+tWzcn6k8mjbBLmx6HEtY5wBryp1NpnvozG7kCOTw/0j8AIeM7GW08X9JVQDZWqGtzcb2mgBveDR1DtehNUSy0pEYIr5eEYqo9CRoXsvt9Zo9B04zp5SBvDbcNv3q+kUIohs/YN+gEfBCSZ3mlP4Uri1t6v8qOqVKjUrschAkQO04+M3NxS+2Ux4wJSfh9bwOjZVGv5QhY3kJ8GOl8EHl5KGFn0zj69hy1dD9Q2bQfRWla5+4CiR0u2AcHE8LeKHSEIxM/EWMKmDfWA3FwQnBQww3l1/JhfkmW99AwAwkhU5SMbDjxKMn9XDw62frzrhw2FRtPBpejrIYFs+NKHe54nNbGl8utunWaslr5AVHtnlE+xGC/bxrecy1xhadUh+JXHRQN2Vhaf6V1Suqq2yhbiQpdbgaA4YydU9hg9mo6joh0AGBY=----ATTACHMENT:----OTIzMDQwNDYyOTY1MDY3OCA2NzIzOTQ4MTk1NTg0MTAxIDQxMTg3MjkzNDM3MjQ1NzU=