diff options
Diffstat (limited to 'phpBB/includes')
| -rw-r--r-- | phpBB/includes/crypto/driver/base.php | 47 | ||||
| -rw-r--r-- | phpBB/includes/crypto/driver/bcrypt.php | 108 | ||||
| -rw-r--r-- | phpBB/includes/crypto/driver/bcrypt_2y.php | 48 | ||||
| -rw-r--r-- | phpBB/includes/crypto/driver/helper.php | 143 | ||||
| -rw-r--r-- | phpBB/includes/crypto/driver/interface.php | 68 | ||||
| -rw-r--r-- | phpBB/includes/crypto/driver/phpass.php | 40 | ||||
| -rw-r--r-- | phpBB/includes/crypto/driver/salted_md5.php | 152 | ||||
| -rw-r--r-- | phpBB/includes/crypto/helper.php | 194 | ||||
| -rw-r--r-- | phpBB/includes/crypto/manager.php | 206 | 
9 files changed, 0 insertions, 1006 deletions
| diff --git a/phpBB/includes/crypto/driver/base.php b/phpBB/includes/crypto/driver/base.php deleted file mode 100644 index c134122174..0000000000 --- a/phpBB/includes/crypto/driver/base.php +++ /dev/null @@ -1,47 +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 -*/ -abstract class phpbb_crypto_driver_base implements phpbb_crypto_driver_interface -{ -	/** @var phpbb_config */ -	protected $config; - -	/** @var phpbb_crypto_driver_helper */ -	protected $helper; - -	/** -	* Constructor of crypto driver object -	* -	* @return string	Hash prefix -	*/ -	public function __construct(phpbb_config $config) -	{ -		$this->config = $config; -		$this->helper = new phpbb_crypto_driver_helper($this); -	} - -	/** -	* @inheritdoc -	*/ -	public function is_supported() -	{ -		return true; -	} -} diff --git a/phpBB/includes/crypto/driver/bcrypt.php b/phpBB/includes/crypto/driver/bcrypt.php deleted file mode 100644 index ad5a8036c3..0000000000 --- a/phpBB/includes/crypto/driver/bcrypt.php +++ /dev/null @@ -1,108 +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_driver_bcrypt extends phpbb_crypto_driver_base -{ -	const PREFIX = '$2a$'; - -	/** -	* @inheritdoc -	*/ -	public function get_prefix() -	{ -		return self::PREFIX; -	} - -	/** -	* @inheritdoc -	*/ -	public function get_type() -	{ -		return get_class($this); -	} - -	/** -	* @inheritdoc -	*/ -	public function hash($password, $salt = '') -	{ -		// The 2x and 2y prefixes of bcrypt might not be supported -		// Revert to 2a if this is the case -		$prefix = (!$this->is_supported()) ? '$2a$' : $this->get_prefix(); - -		if ($salt == '') -		{ -			$salt = $prefix . '10$' . $this->get_random_salt(); -		} - -		$hash = crypt($password, $salt); -		if (strlen($hash) < 60) -		{ -			return false; -		} -		return $hash; -	} - -	/** -	* @inheritdoc -	*/ -	public function check($password, $hash) -	{ -		$salt = substr($hash, 0, 29); -		if (strlen($salt) != 29) -		{ -			return false; -		} - -		if ($hash == $this->hash($password, $salt)) -		{ -			return true; -		} -		return false; -	} - -	/** -	* Get a random salt value with a length of 22 characters -	* -	* @return string Salt for password hashing -	*/ -	protected function get_random_salt() -	{ -		return $this->helper->hash_encode64($this->helper->get_random_salt(22), 22); -	} - -	/** -	* @inheritdoc -	*/ -	public function get_settings_only($hash, $full = false) -	{ -		if ($full) -		{ -			$pos = stripos($hash, '$', 1) + 1; -			$length = 22 + (strripos($hash, '$') + 1 - $pos); -		} -		else -		{ -			$pos = strripos($hash, '$') + 1; -			$length = 22; -		} -		return substr($hash, $pos, $length); -	} -} diff --git a/phpBB/includes/crypto/driver/bcrypt_2y.php b/phpBB/includes/crypto/driver/bcrypt_2y.php deleted file mode 100644 index 8bce171a25..0000000000 --- a/phpBB/includes/crypto/driver/bcrypt_2y.php +++ /dev/null @@ -1,48 +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_driver_bcrypt_2y extends phpbb_crypto_driver_bcrypt -{ -	const PREFIX = '$2y$'; - -	/** -	* @inheritdoc -	*/ -	public function get_prefix() -	{ -		return self::PREFIX; -	} - -	/** -	* @inheritdoc -	*/ -	public function get_type() -	{ -		return get_class($this); -	} - -	/** -	* @inheritdoc -	*/ -	public function is_supported() -	{ -		return (version_compare(PHP_VERSION, '5.3.7', '<')) ? false : true; -	} -} diff --git a/phpBB/includes/crypto/driver/helper.php b/phpBB/includes/crypto/driver/helper.php deleted file mode 100644 index 308ee7dce2..0000000000 --- a/phpBB/includes/crypto/driver/helper.php +++ /dev/null @@ -1,143 +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_driver_helper -{ -	/** @var phpbb_config */ -	protected $driver; - -	/** -	* base64 alphabet -	* @var string -	*/ -	public $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; - -	/** -	* Constructor of crypto driver helper object -	*/ -	public function __construct($driver) -	{ -		$this->driver = $driver; -	} - -	/** -	* Base64 encode hash -	* -	* @param string $input Input string -	* @param int $count Input string length -	* -	* @return string base64 encoded string -	*/ -	public function hash_encode64($input, $count) -	{ -		$output = ''; -		$i = 0; - -		do -		{ -			$value = ord($input[$i++]); -			$output .= $this->itoa64[$value & 0x3f]; - -			if ($i < $count) -			{ -				$value |= ord($input[$i]) << 8; -			} - -			$output .= $this->itoa64[($value >> 6) & 0x3f]; - -			if ($i++ >= $count) -			{ -				break; -			} - -			if ($i < $count) -			{ -				$value |= ord($input[$i]) << 16; -			} - -			$output .= $this->itoa64[($value >> 12) & 0x3f]; - -			if ($i++ >= $count) -			{ -				break; -			} - -			$output .= $this->itoa64[($value >> 18) & 0x3f]; -		} -		while ($i < $count); - -		return $output; -	} - -	/** -	* Return unique id -	* @param string $extra additional entropy -	* -	* @return string Unique id -	*/ -	public function unique_id($extra = 'c') -	{ -		static $dss_seeded = false; -		global $config; - -		$val = $config['rand_seed'] . microtime(); -		$val = md5($val); -		$config['rand_seed'] = md5($config['rand_seed'] . $val . $extra); - -		if ($dss_seeded !== true && ($config['rand_seed_last_update'] < time() - rand(1,10))) -		{ -			set_config('rand_seed_last_update', time(), true); -			set_config('rand_seed', $config['rand_seed'], true); -			$dss_seeded = true; -		} - -		return substr($val, 4, 16); -	} - -	/** -	* Get random salt with specified length -	* -	* @param int $length Salt length -	*/ -	public function get_random_salt($length) -	{ -		$random = ''; - -		if (($fh = @fopen('/dev/urandom', 'rb'))) -		{ -			$random = fread($fh, $length); -			fclose($fh); -		} - -		if (strlen($random) < $length) -		{ -			$random = ''; -			$random_state = $this->unique_id(); - -			for ($i = 0; $i < $length; $i += 16) -			{ -				$random_state = md5($this->unique_id() . $random_state); -				$random .= pack('H*', md5($random_state)); -			} -			$random = substr($random, 0, $length); -		} -		return $random; -	} -} diff --git a/phpBB/includes/crypto/driver/interface.php b/phpBB/includes/crypto/driver/interface.php deleted file mode 100644 index 9686aa33de..0000000000 --- a/phpBB/includes/crypto/driver/interface.php +++ /dev/null @@ -1,68 +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 -*/ -interface phpbb_crypto_driver_interface -{ -	/** -	* Check if hash type is supported -	* -	* @return bool		True if supported, false if not -	*/ -	public function is_supported(); -	/** -	* Returns the hash prefix -	* -	* @return string	Hash prefix -	*/ -	public function get_prefix(); - -	/** -	* Returns the name of the hash type -	* -	* @return string	Hash type of driver -	*/ -	public function get_type(); - -	/** -	* Hash the password -	* -	* @return string	Password hash -	*/ -	public function hash($password); - -	/** -	* Check the password against the supplied hash -	* -	* @param string		$password The password to check -	* @param string		$hash The password hash to check against -	* @return bool		True if password is correct, else false -	*/ -	public function check($password, $hash); - -	/** -	* Get only the settings of the specified hash -	* -	* @param string		$hash Password hash -	* @param bool		$full Return full settings or only settings -	*			related to the salt -	* @return string	String containing the hash settings -	*/ -	public function get_settings_only($hash, $full = false); -} diff --git a/phpBB/includes/crypto/driver/phpass.php b/phpBB/includes/crypto/driver/phpass.php deleted file mode 100644 index 4868464d73..0000000000 --- a/phpBB/includes/crypto/driver/phpass.php +++ /dev/null @@ -1,40 +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_driver_phpass extends phpbb_crypto_driver_salted_md5 -{ -	const PREFIX = '$P$'; - -	/** -	* @inheritdoc -	*/ -	public function get_prefix() -	{ -		return self::PREFIX; -	} - -	/** -	* @inheritdoc -	*/ -	public function get_type() -	{ -		return get_class($this); -	} -} diff --git a/phpBB/includes/crypto/driver/salted_md5.php b/phpBB/includes/crypto/driver/salted_md5.php deleted file mode 100644 index c5a8345453..0000000000 --- a/phpBB/includes/crypto/driver/salted_md5.php +++ /dev/null @@ -1,152 +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_driver_salted_md5 extends phpbb_crypto_driver_base -{ -	const PREFIX = '$H$'; - -	/** -	* @inheritdoc -	*/ -	public function get_prefix() -	{ -		return self::PREFIX; -	} - -	/** -	* @inheritdoc -	*/ -	public function get_type() -	{ -		return get_class($this); -	} - -	/** -	* @inheritdoc -	*/ -	public function hash($password, $setting = '') -	{ -		if ($setting != '') -		{ -			if (($settings = $this->get_hash_settings($setting)) === false) -			{ -				return false; -			} -		} -		else -		{ -			if (($settings = $this->get_hash_settings($this->generate_salt())) === false) -			{ -				return false; -			} -		} - -		$hash = md5($settings['salt'] . $password, true); -		do -		{ -			$hash = md5($hash . $password, true); -		} -		while (--$settings['count']); - -		$output = $settings['full']; -		$output .= $this->helper->hash_encode64($hash, 16); - -		if (strlen($output) == 34) -		{ -			return $output; -		} - -		// Should we really just return the md5 of the password? O.o -		return md5($password); -	} - -	/** -	* @inheritdoc -	*/ -	public function check($password, $hash) -	{ -		if (strlen($hash) !== 34) -		{ -			return (md5($password) === $hash) ? true : false; -		} -		// No need to check prefix, already did that in manage - -		if ($hash === $this->hash($password, $hash)) -		{ -			return true; -		} -		return false; -	} - -	/** -	* Generate salt for hashing method -	* -	* @return string Salt for hashing method -	*/ -	protected function generate_salt() -	{ -		$salt = ''; -		$random = ''; -		$count = 6; - -		$random = $this->helper->get_random_salt($count); - -		$salt = $this->get_prefix(); -		$salt .= $this->helper->itoa64[min($count + 5, 30)]; -		$salt .= $this->helper->hash_encode64($random, $count); - -		return $salt; -	} - -	/** -	* Get hash settings -	* -	* @return array Array containing the count_log2, salt, and full hash -	*		settings string -	*/ -	public function get_hash_settings($hash) -	{ -		if (empty($hash)) -		{ -			return false; -		} -		$count_log2 = strpos($this->helper->itoa64, $hash[3]); -		$salt = substr($hash, 4, 8); - -		if ($count_log2 < 7 || $count_log2 > 30 || strlen($salt) != 8) -		{ -			return false; -		} - -		return array( -			'count'	=> 1 << $count_log2, -			'salt'	=> $salt, -			'full'	=> substr($hash, 0, 12), -		); -	} - -	/** -	* @inheritdoc -	*/ -	public function get_settings_only($hash, $full = false) -	{ -		return substr($hash, 3, 9); -	} -} diff --git a/phpBB/includes/crypto/helper.php b/phpBB/includes/crypto/helper.php deleted file mode 100644 index 9c802b3c01..0000000000 --- a/phpBB/includes/crypto/helper.php +++ /dev/null @@ -1,194 +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_helper -{ -	/** -	* @var phpbb_crypto_manager -	*/ -	protected $manager; - -	/** -	* @var phpbb_container -	*/ -	protected $container; - -	/** -	* Construct a phpbb_crypto_helper object -	* -	* @param phpbb_crypto_manager $manager Crypto manager object -	* @param phpbb_container $container phpBB container object -	*/ -	public function __construct($manager, $container) -	{ -		$this->manager = $manager; -		$this->container = $container; -	} - -	/** -	* Get hash settings from combined hash -	* -	* @param string $hash Password hash of combined hash -	* -	* @return array An array containing the hash settings for the hash -	*		types in successive order as described by the comined -	*		password hash -	*/ -	protected function get_combined_hash_settings($hash) -	{ -		preg_match('#^\$([a-zA-Z0-9\\\]*?)\$#', $hash, $match); -		$hash_settings = substr($hash, strpos($hash, $match[1]) + strlen($match[1]) + 1); -		$matches = explode('\\', $match[1]); -		foreach ($matches as $cur_type) -		{ -			$dollar_position = strpos($hash_settings, '$'); -			$output[] = substr($hash_settings, 0, ($dollar_position != false) ? $dollar_position : strlen($hash_settings)); -			$hash_settings = substr($hash_settings, $dollar_position + 1); -		} - -		return $output; -	} - -	/** -	* Create combined hash from already hashed password -	* -	* @param string $password_hash Complete current password hash -	* @param string $type Type of the hashing algorithm the password hash -	*		should be combined with -	* @return string|bool Combined password hash if combined hashing was -	*		successful, else false -	*/ -	public function combined_hash_password($password_hash, $type) -	{ -		$data = array( -			'prefix' => '$', -			'settings' => '$', -		); -		$hash_settings = $this->get_combined_hash_settings($password_hash); -		$hash = $hash_settings[0]; - -		// Put settings of current hash into data array -		$stored_hash_type = $this->manager->get_hashing_algorithm($password_hash); -		$this->combine_hash_output($data, 'prefix', $stored_hash_type->get_prefix()); -		$this->combine_hash_output($data, 'settings', $stored_hash_type->get_settings_only($password_hash)); - -		// Hash current hash with the defined types -		foreach ($type as $cur_type) -		{ -			$new_hash_type = $this->container->get($cur_type); -			$new_hash = $new_hash_type->hash(str_replace($stored_hash_type->get_settings_only($password_hash), '', $hash)); -			$this->combine_hash_output($data, 'prefix', $new_hash_type->get_prefix()); -			$this->combine_hash_output($data, 'settings', substr(str_replace('$', '\\', $new_hash_type->get_settings_only($new_hash, true)), 0)); -			$hash = str_replace($new_hash_type->get_settings_only($new_hash), '', $this->obtain_hash_only($new_hash)); -		} -		return $this->combine_hash_output($data, 'hash', $hash); -	} - -	/** -	* Check combined password hash against the supplied password -	* -	* @param string $password Password entered by user -	* @param array $stored_hash_type An array containing the hash types -	*				as described by stored password hash -	* @param string $hash Stored password hash -	* -	* @return bool True if password is correct, false if not -	*/ -	public function check_combined_hash($password, $stored_hash_type, $hash) -	{ -		$cur_hash = ''; -		$i = 0; -		$data = array( -			'prefix' => '$', -			'settings' => '$', -		); -		$hash_settings = $this->get_combined_hash_settings($hash); -		foreach ($stored_hash_type as $key => $hash_type) -		{ -			$rebuilt_hash = $this->rebuild_hash($hash_type->get_prefix(), $hash_settings[$i]); -			$this->combine_hash_output($data, 'prefix', $key); -			$this->combine_hash_output($data, 'settings', $hash_settings[$i]); -			$cur_hash = $hash_type->hash($password, $rebuilt_hash); -			$password = str_replace($rebuilt_hash, '', $cur_hash); -			$i++; -		} -		return ($hash === $this->combine_hash_output($data, 'hash', $password)); -	} - -	/** -	* Combine hash prefixes, settings, and actual hash -	* -	* @param array $data Array containing the keys 'prefix' and 'settings'. -	*			It will hold the prefixes and settings -	* @param string $type Data type of the supplied value -	* @param string $value Value that should be put into the data array -	* -	* @return string|none Return complete combined hash if type is neither -	*			'prefix' nor 'settings', nothing if it is -	*/ -	protected function combine_hash_output(&$data, $type, $value) -	{ -		if ($type == 'prefix') -		{ -			$data[$type] .= ($data[$type] !== '$') ? '\\' : ''; -			$data[$type] .= str_replace('$', '', $value); -		} -		elseif ($type == 'settings') -		{ -			$data[$type] .= ($data[$type] !== '$') ? '$' : ''; -			$data[$type] .= $value; -		} -		else -		{ -			// Return full hash -			return $data['prefix'] . $data['settings'] . '$' . $value; -		} -	} - -	/** -	* Rebuild hash for hashing functions -	* -	* @param string $prefix Hash prefix -	* @param string $settings Hash settings -	* -	* @return string Rebuilt hash for hashing functions -	*/ -	protected function rebuild_hash($prefix, $settings) -	{ -		$rebuilt_hash = $prefix; -		if (strpos($settings, '\\') !== false) -		{ -			$settings = str_replace('\\', '$', $settings); -		} -		$rebuilt_hash .= $settings; -		return $rebuilt_hash; -	} - -	/** -	* Obtain only the actual hash after the prefixes -	* -	* @param string		$hash The full password hash -	* @return string	Actual hash (incl. settings) -	*/ -	protected function obtain_hash_only($hash) -	{ -		return substr($hash, strripos($hash, '$') + 1); -	} -} 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); -	} -} | 
