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 | |
download | laravel-a28626a0824fd81433b55181361948fb40977aec.tar.gz laravel-a28626a0824fd81433b55181361948fb40977aec.tar.bz2 laravel-a28626a0824fd81433b55181361948fb40977aec.zip |
Initial commit
Diffstat (limited to 'src/Hashing')
-rw-r--r-- | src/Hashing/HashServiceProvider.php | 34 | ||||
-rw-r--r-- | src/Hashing/SplineHasher.php | 60 |
2 files changed, 94 insertions, 0 deletions
diff --git a/src/Hashing/HashServiceProvider.php b/src/Hashing/HashServiceProvider.php new file mode 100644 index 0000000..e634de7 --- /dev/null +++ b/src/Hashing/HashServiceProvider.php @@ -0,0 +1,34 @@ +<?php namespace Spline\Cachet\Hashing;
+
+use Illuminate\Support\ServiceProvider;
+
+class HashServiceProvider extends ServiceProvider {
+
+ /**
+ * Indicates if loading of the provider is deferred.
+ *
+ * @var bool
+ */
+ protected $defer = true;
+
+ /**
+ * Register the service provider.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ $this->app->bindShared('hash', function() { return new SplineHasher; });
+ }
+
+ /**
+ * Get the services provided by the provider.
+ *
+ * @return array
+ */
+ public function provides()
+ {
+ return array('hash');
+ }
+
+}
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); + } +} |