Passed
Push — master ( f73385...6fb631 )
by Petr
02:22
created

KwOrig   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Test Coverage

Coverage 95.83%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 20
c 2
b 0
f 0
dl 0
loc 59
ccs 23
cts 24
cp 0.9583
rs 10
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A check() 0 3 1
A __construct() 0 4 1
A hash() 0 3 1
A hashPassword() 0 3 1
A passSalt() 0 12 2
A makeHash() 0 7 2
1
<?php
2
3
namespace kalanis\kw_auth\Mode;
4
5
6
use kalanis\kw_auth\AuthException;
7
use kalanis\kw_auth\Interfaces\IKauTranslations;
8
use kalanis\kw_auth\Interfaces\IMode;
9
use kalanis\kw_auth\Traits\TLang;
10
11
12
/**
13
 * Class KwOrig
14
 * @package kalanis\kw_auth\Mode
15
 * older kwcms style of password hashing
16
 */
17
class KwOrig implements IMode
18
{
19
    use TLang;
20
21
    /** @var string */
22
    protected $salt = '';
23
24 3
    public function __construct(string $salt, ?IKauTranslations $lang = null)
25
    {
26 3
        $this->setAuLang($lang);
27 3
        $this->salt = $salt;
28 3
    }
29
30 2
    public function check(string $pass, string $hash): bool
31
    {
32 2
        return $hash == $this->hashPassword($pass);
33
    }
34
35 2
    public function hash(string $pass, ?string $method = null): string
36
    {
37 2
        return $this->hashPassword($pass);
38
    }
39
40
    /**
41
     * @param string $input
42
     * @throws AuthException
43
     * @return string
44
     */
45 2
    protected function hashPassword(string $input): string
46
    {
47 2
        return base64_encode(bin2hex($this->makeHash($this->passSalt($input))));
48
    }
49
50 2
    private function passSalt(string $input): string
51
    {
52 2
        $ln = strlen($input);
53
        # pass is too long and salt too short
54 2
        $salt = (strlen($this->salt) < ($ln*5))
55 2
            ? str_repeat($this->salt, 5)
56 2
            : $this->salt ;
57 2
        return substr($salt, $ln, $ln)
58 2
            . substr($input,0, intval($ln/2))
59 2
            . substr($salt,$ln*2, $ln)
60 2
            . substr($input, intval($ln/2))
61 2
            . substr($salt,$ln*3, $ln);
62
    }
63
64
    /**
65
     * @param string $word
66
     * @throws AuthException
67
     * @return string
68
     */
69 2
    private function makeHash(string $word): string
70
    {
71 2
        if (function_exists('hash')) {
72 2
            return strval(hash('sha256', $word));
73
        }
74
        // @codeCoverageIgnoreStart
75
        throw new AuthException($this->getAuLang()->kauHashFunctionNotFound());
76
        // @codeCoverageIgnoreEnd
77
    }
78
}
79