aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/crypto/manager.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/crypto/manager.php')
-rw-r--r--phpBB/includes/crypto/manager.php206
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);
- }
-}