2 declare(strict_types = 1);
20 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
37 protected function setUp()
47 $this->assertTrue($this->subject->getSaltLength() > 0);
55 $password =
'password';
57 $randomBytes = (
new Random())->generateRandomBytes($this->subject->getSaltLength());
58 $salt = $this->subject->base64Encode($randomBytes, $this->subject->getSaltLength());
59 $this->assertTrue($this->subject->isValidSalt($salt));
60 $saltedHashPassword = $this->subject->getHashedPassword($password,
'6400$' . $salt);
61 $this->assertTrue($this->subject->isValidSaltedPW($saltedHashPassword));
69 $password =
'password';
70 $minHashCount = $this->subject->getMinHashCount();
71 $this->subject->setHashCount($minHashCount);
72 $saltedHashPassword = $this->subject->getHashedPassword($password);
73 $this->assertTrue($this->subject->isValidSaltedPW($saltedHashPassword));
75 $this->subject->setHashCount(
null);
84 $criticalPwLength = 0;
86 $saltedHashPasswordCurrent = $salt = $this->subject->getHashedPassword($pad);
87 for ($i = 0; $i <= 128; $i += 8) {
88 $password = str_repeat($pad, max($i, 1));
89 $saltedHashPasswordPrevious = $saltedHashPasswordCurrent;
90 $saltedHashPasswordCurrent = $this->subject->getHashedPassword($password, $salt);
91 if ($i > 0 && $saltedHashPasswordPrevious === $saltedHashPasswordCurrent) {
92 $criticalPwLength = $i;
96 $this->assertTrue($criticalPwLength == 0 || $criticalPwLength > 32,
'Duplicates of hashed passwords with plaintext password of length ' . $criticalPwLength .
'+.');
104 $hashCount = $this->subject->getHashCount();
105 $this->subject->setMaxHashCount($hashCount + 1);
106 $this->subject->setHashCount($hashCount + 1);
107 $this->assertTrue($this->subject->getHashCount() > $hashCount);
108 $this->subject->setMinHashCount($hashCount - 1);
109 $this->subject->setHashCount($hashCount - 1);
110 $this->assertTrue($this->subject->getHashCount() < $hashCount);
118 $password =
'password';
119 $saltedHashPassword = $this->subject->getHashedPassword($password);
120 $increasedHashCount = $this->subject->getHashCount() + 1;
121 $this->subject->setMaxHashCount($increasedHashCount);
122 $this->subject->setHashCount($increasedHashCount);
123 $this->assertTrue($this->subject->isHashUpdateNeeded($saltedHashPassword));
131 $password =
'password';
132 $saltedHashPassword = $this->subject->getHashedPassword($password);
133 $decreasedHashCount = $this->subject->getHashCount() - 1;
134 $this->subject->setMinHashCount($decreasedHashCount);
135 $this->subject->setHashCount($decreasedHashCount);
136 $this->assertFalse($this->subject->isHashUpdateNeeded($saltedHashPassword));