diff options
author | Marc Alexander <admin@m-a-styles.de> | 2013-07-19 20:49:24 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2013-09-14 13:55:28 +0200 |
commit | 9b24fda5cd1f6e85c536dc2bc3e5f1bbdef5b7c2 (patch) | |
tree | 9aa7c642dd6cd1638ac1d864600c5285d8c8e23e /phpBB/phpbb/crypto/driver/bcrypt.php | |
parent | 2e453eb2cb682031d7e521d23c3904c8dfeef70c (diff) | |
download | forums-9b24fda5cd1f6e85c536dc2bc3e5f1bbdef5b7c2.tar forums-9b24fda5cd1f6e85c536dc2bc3e5f1bbdef5b7c2.tar.gz forums-9b24fda5cd1f6e85c536dc2bc3e5f1bbdef5b7c2.tar.bz2 forums-9b24fda5cd1f6e85c536dc2bc3e5f1bbdef5b7c2.tar.xz forums-9b24fda5cd1f6e85c536dc2bc3e5f1bbdef5b7c2.zip |
[feature/passwords] Move files after namespacing changes
PHPBB3-11610
Diffstat (limited to 'phpBB/phpbb/crypto/driver/bcrypt.php')
-rw-r--r-- | phpBB/phpbb/crypto/driver/bcrypt.php | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/phpBB/phpbb/crypto/driver/bcrypt.php b/phpBB/phpbb/crypto/driver/bcrypt.php new file mode 100644 index 0000000000..ad5a8036c3 --- /dev/null +++ b/phpBB/phpbb/crypto/driver/bcrypt.php @@ -0,0 +1,108 @@ +<?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); + } +} |