diff options
Diffstat (limited to 'phpBB/includes/crypto/manager.php')
| -rw-r--r-- | phpBB/includes/crypto/manager.php | 206 |
1 files changed, 0 insertions, 206 deletions
diff --git a/phpBB/includes/crypto/manager.php b/phpBB/includes/crypto/manager.php deleted file mode 100644 index 753a86ae84..0000000000 --- a/phpBB/includes/crypto/manager.php +++ /dev/null @@ -1,206 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -/** -* @package crypto -*/ -class phpbb_crypto_manager -{ - /** - * Default hashing method - */ - protected $type = false; - - /** - * Hashing algorithm types - */ - protected $type_map = false; - - /** - * Password convert flag. Password should be converted - */ - public $convert_flag = false; - - /** - * Crypto helper - * @var phpbb_crypto_helper - */ - protected $helper; - - /** - * phpBB configuration - * @var phpbb_config - */ - protected $config; - - /** - * phpBB compiled container - * @var service_container - */ - protected $container; - - /** - * Construct a crypto object - * - * @param phpbb_config $config phpBB configuration - */ - public function __construct($config, $container, $hashing_algorithms) - { - $this->config = $config; - $this->container = $container; - $this->type = 'crypto.driver.bcrypt_2y'; // might want to make this flexible - - $this->fill_type_map($hashing_algorithms); - $this->load_crypto_helper(); - } - - /** - * Fill algorithm type map - * - * @param phpbb_di_service_collection $hashing_algorithms - */ - protected function fill_type_map($hashing_algorithms) - { - foreach ($hashing_algorithms as $algorithm) - { - if (!isset($this->type_map[$algorithm->get_prefix()])) - { - $this->type_map[$algorithm->get_prefix()] = $algorithm; - } - } - } - - /** - * Load crypto helper class - */ - protected function load_crypto_helper() - { - if ($this->helper === null) - { - $this->helper = new phpbb_crypto_helper($this, $this->container); - } - } - - /** - * Get the hash type from the supplied hash - * - * @param string $hash Password hash that should be checked - * - * @return object The hash type object - */ - public function get_hashing_algorithm($hash) - { - /* - * preg_match() will also show hashing algos like $2a\H$, which - * is a combination of bcrypt and phpass. Legacy algorithms - * like md5 will not be matched by this and need to be treated - * differently. - */ - if (!preg_match('#^\$([a-zA-Z0-9\\\]*?)\$#', $hash, $match)) - { - return $this->type_map['$H$']; - } - - // Be on the lookout for multiple hashing algorithms - // 2 is correct: H\2a > 2, H\P > 2 - if (strlen($match[1]) > 2) - { - $hash_types = explode('\\', $match[1]); - $return_ary = array(); - foreach ($hash_types as $type) - { - if (isset($this->type_map["\${$type}\$"])) - { - // we do not support the same hashing - // algorithm more than once - if (isset($return_ary[$type])) - { - return false; - } - $return_ary[$type] = $this->type_map["\${$type}\$"]; - } - else - { - return false; - } - } - return $return_ary; - } - if (isset($this->type_map[$match[0]])) - { - return $this->type_map[$match[0]]; - } - else - { - return false; - } - } - - /** - * Hash supplied password - * - * @param string $password Password that should be hashed - * @param string $type Hash type. Will default to standard hash type if - * none is supplied - * @return string|bool Password hash of supplied password or false if - * if something went wrong during hashing - */ - public function hash_password($password, $type = '') - { - $type = ($type === '') ? $this->type : $type; - - if (is_array($type)) - { - return $this->helper->combined_hash_password($password, $type); - } - - $hashing_algorithm = $this->container->get($type); - // Do not support 8-bit characters with $2a$ bcrypt - if ($type === 'crypto.driver.bcrypt' || ($type === 'crypto.driver.bcrypt_2y' && !$hashing_algorithm->is_supported())) - { - if (ord($password[strlen($password)-1]) & 128) - { - return false; - } - } - - return $this->container->get($type)->hash($password); - } - - public function check_hash($password, $hash) - { - // First find out what kind of hash we're dealing with - $stored_hash_type = $this->get_hashing_algorithm($hash); - if ($stored_hash_type == false) - { - return false; - } - - // Multiple hash passes needed - if (is_array($stored_hash_type)) - { - return $this->helper->check_combined_hash($password, $stored_hash_type, $hash); - } - - if ($stored_hash_type->get_type() !== $this->type) - { - $this->convert_flag = true; - } - - return $stored_hash_type->check($password, $hash); - } -} |
