C:\xampp\phpMyAdmin\vendor\pragmarx\google2fa\src\Support\Base32.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php

namespace PragmaRX\Google2FA\Support;

use 
ParagonIE\ConstantTime\Base32 as ParagonieBase32;
use 
PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException;
use 
PragmaRX\Google2FA\Exceptions\InvalidCharactersException;

trait 
Base32
{
    
/**
     * Enforce Google Authenticator compatibility.
     */
    
protected $enforceGoogleAuthenticatorCompatibility true;

    
/**
     * Generate a digit secret key in base32 format.
     *
     * @param int $length
     *
     * @return string
     */
    
public function generateBase32RandomKey($length 16$prefix '')
    {
        
$secret $prefix $this->toBase32($prefix) : '';

        
$secret $this->strPadBase32($secret$length);

        
$this->validateSecret($secret);

        return 
$secret;
    }

    
/**
     * Decodes a base32 string into a binary string.
     *
     * @param string $b32
     *
     * @throws InvalidCharactersException
     *
     * @return int
     */
    
public function base32Decode($b32)
    {
        
$b32 strtoupper($b32);

        
$this->validateSecret($b32);

        return 
ParagonieBase32::decodeUpper($b32);
    }

    
/**
     * Pad string with random base 32 chars.
     *
     * @param $string
     * @param $length
     *
     * @return string
     */
    
private function strPadBase32($string$length)
    {
        for (
$i 0$i $length$i++) {
            
$string .= substr(Constants::VALID_FOR_B32_SCRAMBLED$this->getRandomNumber(), 1);
        }

        return 
$string;
    }

    
/**
     * Encode a string to Base32.
     *
     * @param $string
     *
     * @return mixed
     */
    
public function toBase32($string)
    {
        
$encoded ParagonieBase32::encodeUpper($string);

        return 
str_replace('='''$encoded);
    }

    
/**
     * Get a random number.
     *
     * @param $from
     * @param $to
     *
     * @return int
     */
    
protected function getRandomNumber($from 0$to 31)
    {
        return 
random_int($from$to);
    }

    
/**
     * Validate the secret.
     *
     * @param $b32
     */
    
protected function validateSecret($b32)
    {
        
$this->checkForValidCharacters($b32);

        
$this->checkGoogleAuthenticatorCompatibility($b32);
    }

    
/**
     * Check if the secret key is compatible with Google Authenticator.
     *
     * @param $b32
     *
     * @throws IncompatibleWithGoogleAuthenticatorException
     */
    
protected function checkGoogleAuthenticatorCompatibility($b32)
    {
        if (
$this->enforceGoogleAuthenticatorCompatibility && ((strlen($b32) & (strlen($b32) - 1)) !== 0)) {
            throw new 
IncompatibleWithGoogleAuthenticatorException();
        }
    }

    
/**
     * Check if all secret key characters are valid.
     *
     * @param $b32
     *
     * @throws InvalidCharactersException
     */
    
protected function checkForValidCharacters($b32)
    {
        if (
preg_replace('/[^'.Constants::VALID_FOR_B32.']/'''$b32) !== $b32) {
            throw new 
InvalidCharactersException();
        }
    }
}
x

Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586