blob: 8897673845a8e364c5d68e77c51e0e8e96383d58 [file] [log] [blame]
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02001<?php
2
3namespace Tests\Providers\Rng;
4
5use PHPUnit\Framework\TestCase;
6use RobThree\Auth\TwoFactorAuth;
7use RobThree\Auth\TwoFactorAuthException;
8
9class IRNGProviderTest extends TestCase
10{
11 /**
12 * @return void
13 */
14 public function testCreateSecretThrowsOnInsecureRNGProvider()
15 {
16 $rng = new TestRNGProvider();
17
18 $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);
19
20 $this->expectException(TwoFactorAuthException::class);
21 $tfa->createSecret();
22 }
23
24 /**
25 * @return void
26 */
27 public function testCreateSecretOverrideSecureDoesNotThrowOnInsecureRNG()
28 {
29 $rng = new TestRNGProvider();
30
31 $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);
32 $this->assertEquals('ABCDEFGHIJKLMNOP', $tfa->createSecret(80, false));
33 }
34
35 /**
36 * @return void
37 */
38 public function testCreateSecretDoesNotThrowOnSecureRNGProvider()
39 {
40 $rng = new TestRNGProvider(true);
41
42 $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);
43 $this->assertEquals('ABCDEFGHIJKLMNOP', $tfa->createSecret());
44 }
45
46 /**
47 * @return void
48 */
49 public function testCreateSecretGeneratesDesiredAmountOfEntropy()
50 {
51 $rng = new TestRNGProvider(true);
52
53 $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);
54 $this->assertEquals('A', $tfa->createSecret(5));
55 $this->assertEquals('AB', $tfa->createSecret(6));
56 $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ', $tfa->createSecret(128));
57 $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', $tfa->createSecret(160));
58 $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', $tfa->createSecret(320));
59 $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ABCDEFGHIJKLMNOPQRSTUVWXYZ234567A', $tfa->createSecret(321));
60 }
61}