123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <?php
-
- namespace Illuminate\Hashing;
-
- use RuntimeException;
- use Illuminate\Contracts\Hashing\Hasher as HasherContract;
-
- class ArgonHasher extends AbstractHasher implements HasherContract
- {
- /**
- * The default memory cost factor.
- *
- * @var int
- */
- protected $memory = 1024;
-
- /**
- * The default time cost factor.
- *
- * @var int
- */
- protected $time = 2;
-
- /**
- * The default threads factor.
- *
- * @var int
- */
- protected $threads = 2;
-
- /**
- * Create a new hasher instance.
- *
- * @param array $options
- * @return void
- */
- public function __construct(array $options = [])
- {
- $this->time = $options['time'] ?? $this->time;
- $this->memory = $options['memory'] ?? $this->memory;
- $this->threads = $options['threads'] ?? $this->threads;
- }
-
- /**
- * Hash the given value.
- *
- * @param string $value
- * @param array $options
- * @return string
- */
- public function make($value, array $options = [])
- {
- $hash = password_hash($value, PASSWORD_ARGON2I, [
- 'memory_cost' => $this->memory($options),
- 'time_cost' => $this->time($options),
- 'threads' => $this->threads($options),
- ]);
-
- if ($hash === false) {
- throw new RuntimeException('Argon2 hashing not supported.');
- }
-
- return $hash;
- }
-
- /**
- * 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 = [])
- {
- return password_needs_rehash($hashedValue, PASSWORD_ARGON2I, [
- 'memory_cost' => $this->memory($options),
- 'time_cost' => $this->time($options),
- 'threads' => $this->threads($options),
- ]);
- }
-
- /**
- * Set the default password memory factor.
- *
- * @param int $memory
- * @return $this
- */
- public function setMemory(int $memory)
- {
- $this->memory = $memory;
-
- return $this;
- }
-
- /**
- * Set the default password timing factor.
- *
- * @param int $time
- * @return $this
- */
- public function setTime(int $time)
- {
- $this->time = $time;
-
- return $this;
- }
-
- /**
- * Set the default password threads factor.
- *
- * @param int $threads
- * @return $this
- */
- public function setThreads(int $threads)
- {
- $this->threads = $threads;
-
- return $this;
- }
-
- /**
- * Extract the memory cost value from the options array.
- *
- * @param array $options
- * @return int
- */
- protected function memory(array $options)
- {
- return $options['memory'] ?? $this->memory;
- }
-
- /**
- * Extract the time cost value from the options array.
- *
- * @param array $options
- * @return int
- */
- protected function time(array $options)
- {
- return $options['time'] ?? $this->time;
- }
-
- /**
- * Extract the threads value from the options array.
- *
- * @param array $options
- * @return int
- */
- protected function threads(array $options)
- {
- return $options['threads'] ?? $this->threads;
- }
- }
|