PBKDF2   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 7
c 2
b 0
f 0
dl 0
loc 36
rs 10
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A encrypt() 0 3 1
A __construct() 0 6 2
A getIterations() 0 3 1
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