xref: /dokuwiki/_test/tests/inc/auth_password.test.php (revision 5398a7b652eabdd0a20f154b97b60f89cad72f8c)
1<?php
2
3class auth_password_test extends PHPUnit_Framework_TestCase {
4
5    // hashes for the password foo$method, using abcdefgh as salt
6    var $passes = array(
7        'smd5'  => '$1$abcdefgh$SYbjm2AEvSoHG7Xapi8so.',
8        'apr1'  => '$apr1$abcdefgh$C/GzYTF4kOVByYLEoD5X4.',
9        'md5'   => '8fa22d62408e5351553acdd91c6b7003',
10        'sha1'  => 'b456d3b0efd105d613744ffd549514ecafcfc7e1',
11        'ssha'  => '{SSHA}QMHG+uC7bHNYKkmoLbNsNI38/dJhYmNk',
12        'lsmd5' => '{SMD5}HGbkPrkWgy9KgcRGWlrsUWFiY2RlZmdo',
13        'crypt' => 'ablvoGr1hvZ5k',
14        'mysql' => '4a1fa3780bd6fd55',
15        'my411' => '*e5929347e25f82e19e4ebe92f1dc6b6e7c2dbd29',
16        'kmd5'  => 'a579299436d7969791189acadd86fcb716',
17        'djangomd5'  => 'md5$abcde$d0fdddeda8cd92725d2b54148ac09158',
18        'djangosha1' => 'sha1$abcde$c8e65a7f0acc9158843048a53dcc5a6bc4d17678',
19        'sha512' => '$6$abcdefgh12345678$J9.zOcgx0lotwZdcz0uulA3IVQMinZvFZVjA5vapRLVAAqtay23XD4xeeUxQ3B4JvDWYFBIxVWW1tOYlHX13k1'
20    );
21
22
23    function test_cryptPassword(){
24        foreach($this->passes as $method => $hash){
25            $info = "testing method $method";
26            $this->assertEquals(auth_cryptPassword('foo'.$method, $method,'abcdefgh12345678912345678912345678'),
27                $hash, $info);
28        }
29    }
30
31    function test_verifyPassword(){
32        foreach($this->passes as $method => $hash){
33            $info = "testing method $method";
34            $this->assertTrue(auth_verifyPassword('foo'.$method, $hash), $info);
35            $this->assertFalse(auth_verifyPassword('bar'.$method, $hash), $info);
36        }
37    }
38
39    function test_verifySelf(){
40        foreach($this->passes as $method => $hash){
41            $info = "testing method $method";
42            $hash = auth_cryptPassword('foo'.$method,$method);
43            $this->assertTrue(auth_verifyPassword('foo'.$method, $hash), $info);
44        }
45    }
46
47    function test_bcrypt_self(){
48        $hash = auth_cryptPassword('foobcrypt','bcrypt');
49        $this->assertTrue(auth_verifyPassword('foobcrypt',$hash));
50    }
51
52    function test_verifyPassword_fixedbcrypt(){
53        $this->assertTrue(auth_verifyPassword('foobcrypt','$2a$12$uTWercxbq4sjp2xAzv3we.ZOxk51m5V/Bv5bp2H27oVFJl5neFQoC'));
54    }
55
56    function test_verifyPassword_nohash(){
57        $this->assertTrue(auth_verifyPassword('foo','$1$$n1rTiFE0nRifwV/43bVon/'));
58    }
59
60    function test_verifyPassword_fixedpmd5(){
61        $this->assertTrue(auth_verifyPassword('test12345','$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0'));
62        $this->assertTrue(auth_verifyPassword('test12345','$H$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0'));
63    }
64
65    function test_veryPassword_mediawiki(){
66        $this->assertTrue(auth_verifyPassword('password', ':B:838c83e1:e4ab7024509eef084cdabd03d8b2972c'));
67    }
68
69
70    /**
71     * pmd5 checking should throw an exception when a hash with a too high
72     * iteration count is passed
73     */
74    function test_verifyPassword_pmd5Exception(){
75        $except = false;
76        try{
77            auth_verifyPassword('foopmd5', '$H$abcdefgh1ZbJodHxmeXVAhEzTG7IAp.');
78        }catch (Exception $e){
79            $except = true;
80        }
81        $this->assertTrue($except);
82    }
83
84}
85
86//Setup VIM: ex: et ts=4 :
87