summaryrefslogtreecommitdiffstats
path: root/src/Hashing/SplineHasher.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Hashing/SplineHasher.php')
-rw-r--r--src/Hashing/SplineHasher.php60
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);
+ }
+}