diff options
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); + } +} |