19 declare(strict_types=1);
37 for ($i = 4; $i <= 31; ++$i) {
38 $data[sprintf(
'Costs: %s', $i)] = [(string) $i];
47 $this->assertTrue((
int) $default_costs_encoder->getCosts() > 4 && (
int) $default_costs_encoder->getCosts() < 32);
50 'cost' => self::VALID_COSTS
52 $this->assertInstanceOf(ilBcryptPhpPasswordEncoder::class, $encoder);
53 $this->assertSame(self::VALID_COSTS, $encoder->getCosts());
58 #[Depends('testInstanceCanBeCreated')] 64 $this->assertSame($expected, $encoder->
getCosts());
67 #[Depends('testInstanceCanBeCreated')] 70 $this->expectException(ilPasswordException::class);
74 #[Depends('testInstanceCanBeCreated')] 77 $this->expectException(ilPasswordException::class);
81 #[Depends('testInstanceCanBeCreated')] 82 #[DataProvider('costsProvider')] 83 #[DoesNotPerformAssertions] 89 #[Depends('testInstanceCanBeCreated')] 93 $encoder->
setCosts(self::VALID_COSTS);
95 $this->assertTrue($encoder->
isPasswordValid($encoded_password, self::PASSWORD,
''));
96 $this->assertFalse($encoder->
isPasswordValid($encoded_password, self::WRONG_PASSWORD,
''));
101 #[Depends('testInstanceCanBeCreated')] 105 $this->expectException(ilPasswordException::class);
106 $encoder->
setCosts(self::VALID_COSTS);
110 #[Depends('testInstanceCanBeCreated')] 114 $encoder->
setCosts(self::VALID_COSTS);
115 $this->assertFalse($encoder->
isPasswordValid(
'encoded', str_repeat(
'a', 5000),
''));
118 #[Depends('testInstanceCanBeCreated')] 121 $this->assertSame(
'bcryptphp', $encoder->
getName());
124 #[Depends('testInstanceCanBeCreated')] 130 $this->assertTrue($costs_default > 4 && $costs_default < 32);
131 $this->assertTrue($costs_target > 4 && $costs_target < 32);
132 $this->assertIsInt($costs_default);
133 $this->assertIsInt($costs_target);
134 $this->assertNotEquals($costs_default, $costs_target);
137 #[Depends('testInstanceCanBeCreated')] 143 #[Depends('testInstanceCanBeCreated')] 146 $raw = self::PASSWORD;
testCostsCanBeDeterminedDynamically(ilBcryptPhpPasswordEncoder $encoder)
testCostsCannotBeSetAboveRange(ilBcryptPhpPasswordEncoder $encoder)
testCostsCanBeSetInRange(string $costs, ilBcryptPhpPasswordEncoder $encoder)
testEncoderDoesNotRelyOnSalts(ilBcryptPhpPasswordEncoder $encoder)
getName()
Returns a unique name/id of the concrete password encoder.
requiresSalt()
Returns whether the encoder requires a salt.
encodePassword(string $raw, string $salt)
Encodes the raw password.
testInstanceCanBeCreated()
const string WRONG_PASSWORD
benchmarkCost(float $time_target=0.05)
requiresReencoding(string $encoded)
Returns whether the encoded password needs to be re-encoded.
testExceptionIsRaisedIfThePasswordExceedsTheSupportedLengthOnEncoding(ilBcryptPhpPasswordEncoder $encoder)
testNameShouldBeBcryptPhp(ilBcryptPhpPasswordEncoder $encoder)
testPasswordShouldBeCorrectlyEncodedAndVerified(ilBcryptPhpPasswordEncoder $encoder)
testReencodingIsDetectedWhenNecessary(ilBcryptPhpPasswordEncoder $encoder)
testCostsCannotBeSetBelowRange(ilBcryptPhpPasswordEncoder $encoder)
isPasswordValid(string $encoded, string $raw, string $salt)
Checks a raw password against an encoded password.
testCostsCanBeRetrievedWhenCostsAreSet(ilBcryptPhpPasswordEncoder $encoder)
testPasswordVerificationShouldFailIfTheRawPasswordExceedsTheSupportedLength(ilBcryptPhpPasswordEncoder $encoder)