diff options
author | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2015-04-09 17:33:22 +0200 |
---|---|---|
committer | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2015-04-09 17:33:22 +0200 |
commit | a28626a0824fd81433b55181361948fb40977aec (patch) | |
tree | fdfcd005c5c2fd23e1d7b74dddfac4f5a111fa1f /src/Hashing/SplineHasher.php | |
download | laravel-a28626a0824fd81433b55181361948fb40977aec.tar.gz laravel-a28626a0824fd81433b55181361948fb40977aec.tar.bz2 laravel-a28626a0824fd81433b55181361948fb40977aec.zip |
Initial commit
Diffstat (limited to 'src/Hashing/SplineHasher.php')
-rw-r--r-- | src/Hashing/SplineHasher.php | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/Hashing/SplineHasher.php b/src/Hashing/SplineHasher.php new file mode 100644 index 0000000..bf5d0d6 --- /dev/null +++ b/src/Hashing/SplineHasher.php @@ -0,0 +1,60 @@ +<?php namespace Spline\Cachet\Hashing; + +use Illuminate\Hashing\BcryptHasher; + +class SplineHasher extends BcryptHasher { + + /** + * Check the given plain value against a hash. + * + * @param string $value + * @param string $hashedValue + * @param array $options + * @return bool + */ + public function check($value, $hashedValue, array $options = array()) + { + if (starts_with($hashedValue, '{')) { + if (starts_with($hashedValue, '{SSHA}')) { + $hash = base64_decode(substr($hashedValue, 6)); + $salt = substr($hash, 20); + if ((pack("H*", sha1($value.$salt)).$salt) == $hash) { + return true; + } + } + elseif (starts_with($hashedValue, '{SMD5}')) { + $hash = base64_decode(substr($hashedValue, 6)); + $salt = substr($hash, 16); + if ((md5($value.$salt, true).$salt) == $hash) { + return true; + } + } + elseif (starts_with(strtolower($hashedValue), '{crypt}')) { + $hash = substr($hashedValue, 7); + if (password_verify($value, $hash)) { + return true; + } + } + + return false; + } + + return parent::check($value, $hashedValue, $options); + } + + /** + * Check if the given hash has been hashed using the given options. + * + * @param string $hashedValue + * @param array $options + * @return bool + */ + public function needsRehash($hashedValue, array $options = array()) + { + if (starts_with($hashedValue, '{')) { + return false; + } + + return parent::needsRehash($hashedValue, $options); + } +} |