*/ public static function malformedProvider(): array { return [ 'leer' => [''], 'ohne Punkt' => ['1800000000'], 'ohne Signatur' => ['1800000000.'], 'Text statt Zeitstempel' => ['abc.def'], 'nur Signatur' => ['.abcdef'], 'negativer Zeitstempel' => ['-100.abcdef'], 'zu viele Teile' => ['1800000000.abc.def'], ]; } /** * @dataProvider malformedProvider */ public function testMalformedTokensAreRejected(string $token): void { self::assertFalse(CheckToken::isValid($token, self::SECRET)); } public function testSignatureIsNotGuessable(): void { $now = 1_800_000_000; $valid = CheckToken::create(self::SECRET, $now); // Signatur um ein Zeichen veraendert. $tampered = substr($valid, 0, -1) . (str_ends_with($valid, 'a') ? 'b' : 'a'); self::assertNotSame($valid, $tampered); self::assertFalse(CheckToken::isValid($tampered, self::SECRET, $now)); } public function testTokenContainsNoSecret(): void { $token = CheckToken::create(self::SECRET); self::assertStringNotContainsString(self::SECRET, $token); } }