PBKDF2::getIterations()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php declare(strict_types=1);
2
3
namespace CWP\Core\PasswordEncryptor;
4
5
use Exception;
6
use SilverStripe\Security\PasswordEncryptor_PHPHash;
7
8
/**
9
 * Provides Password-Based Key Derivation Function hashing for passwords, using the provided algorithm (default
10
 * is SHA512), which is NZISM compliant under version 3.2 section 17.2.
11
 */
12
class PBKDF2 extends PasswordEncryptor_PHPHash
13
{
14
    /**
15
     * The number of internal iterations for hash_pbkdf2() to perform for the derivation. Please note that if you
16
     * change this from the default value you will break existing hashes stored in the database, so these would
17
     * need to be regenerated.
18
     *
19
     * @var int
20
     */
21
    protected $iterations = 30000;
22
23
    /**
24
     * @param string $algorithm
25
     * @param int|null $iterations
26
     * @throws Exception If the provided algorithm is not available in the current environment
27
     */
28
    public function __construct(string $algorithm, int $iterations = null)
29
    {
30
        parent::__construct($algorithm);
31
32
        if ($iterations !== null) {
33
            $this->iterations = $iterations;
34
        }
35
    }
36
37
    /**
38
     * @return int
39
     */
40
    public function getIterations(): int
41
    {
42
        return $this->iterations;
43
    }
44
45
    public function encrypt($password, $salt = null, $member = null)
46
    {
47
        return hash_pbkdf2($this->getAlgorithm(), (string) $password, (string) $salt, $this->getIterations());
48
    }
49
}
50