From 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 9 Jan 2020 10:55:03 +0100 Subject: phpmyadmin working --- .../pragmarx/google2fa/src/Support/Base32.php | 202 +++++++++++++++++++++ .../pragmarx/google2fa/src/Support/Constants.php | 21 +++ .../pragmarx/google2fa/src/Support/QRCode.php | 28 +++ .../vendor/pragmarx/google2fa/src/Support/Url.php | 22 +++ 4 files changed, 273 insertions(+) create mode 100644 srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Base32.php create mode 100644 srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Constants.php create mode 100644 srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/QRCode.php create mode 100644 srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Url.php (limited to 'srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support') diff --git a/srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Base32.php b/srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Base32.php new file mode 100644 index 0000000..ce5cbb6 --- /dev/null +++ b/srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Base32.php @@ -0,0 +1,202 @@ +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 + * @throws IncompatibleWithGoogleAuthenticatorException + * + * @return int + */ + public function base32Decode($b32) + { + $b32 = strtoupper($b32); + + $this->validateSecret($b32); + + return ParagonieBase32::decodeUpper($b32); + } + + /** + * Check if the string length is power of two. + * + * @param $b32 + * @return bool + */ + protected function isCharCountNotAPowerOfTwo($b32): bool + { + return (strlen($b32) & (strlen($b32) - 1)) !== 0; + } + + /** + * Pad string with random base 32 chars. + * + * @param $string + * @param $length + * + * @throws \Exception + * + * @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 + * + * @throws \Exception + * + * @return int + */ + protected function getRandomNumber($from = 0, $to = 31) + { + return random_int($from, $to); + } + + /** + * Validate the secret. + * + * @param $b32 + * + * @throws IncompatibleWithGoogleAuthenticatorException + * @throws InvalidCharactersException + */ + protected function validateSecret($b32) + { + $this->checkForValidCharacters($b32); + + $this->checkGoogleAuthenticatorCompatibility($b32); + + $this->checkIsBigEnough($b32); + } + + /** + * Check if the secret key is compatible with Google Authenticator. + * + * @param $b32 + * + * @throws IncompatibleWithGoogleAuthenticatorException + */ + protected function checkGoogleAuthenticatorCompatibility($b32) + { + if ( + $this->enforceGoogleAuthenticatorCompatibility && + $this->isCharCountNotAPowerOfTwo($b32) // Google Authenticator requires it to be a power of 2 base32 length string + ) { + 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(); + } + } + + /** + * Check if secret key length is big enough + * + * @param $b32 + * + * @throws InvalidCharactersException + */ + protected function checkIsBigEnough($b32) + { + // Minimum = 128 bits + // Recommended = 160 bits + // Compatible with Google Authenticator = 256 bits + + if ( + $this->charCountBits($b32) < 128 + ) { + throw new SecretKeyTooShortException(); + } + } +} diff --git a/srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Constants.php b/srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Constants.php new file mode 100644 index 0000000..ba37e62 --- /dev/null +++ b/srcs/phpmyadmin/vendor/pragmarx/google2fa/src/Support/Constants.php @@ -0,0 +1,21 @@ +