PluginProbe
The WP Remote WordPress Plugin / 6.76
The WP Remote WordPress Plugin v6.76
6.76 6.72 6.69 6.65 6.62 6.48 6.47 4.87 4.97 5.05 5.09 5.16 5.22 5.24 5.25 5.38 5.41 5.42 5.45 5.47 5.53 5.56 5.65 5.68 5.72 All 54 releases
wpremote / wp_2fa / utils.php

utils.php in The WP Remote WordPress Plugin 6.76, at wp_2fa/utils.php

66 lines 2.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if (!defined('ABSPATH')) exit;
3
4 if (!class_exists('WPRWP2FAUtils')) :
5 class WPRWP2FAUtils {
6 const BASE32_LOOKUP_TABLE = array(
7 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 7
8 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 15
9 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 23
10 'Y', 'Z', '2', '3', '4', '5', '6', '7', // 31
11 '=', // padding char
12 );
13
14 public static function base32Decode($secret) {
15 $base32_chars = self::BASE32_LOOKUP_TABLE;
16 $base32_chars_flipped = array_flip($base32_chars);
17
18 $padding_char_count = substr_count($secret, $base32_chars[32]);
19 $allowed_values = array(6, 4, 3, 1, 0);
20 if (!in_array($padding_char_count, $allowed_values)) {
21 return false;
22 }
23 for ($i = 0; $i < 4; ++$i) {
24 if ($padding_char_count == $allowed_values[$i] &&
25 substr($secret, -($allowed_values[$i])) != str_repeat($base32_chars[32], $allowed_values[$i])) {
26 return false;
27 }
28 }
29 $secret = str_replace('=', '', $secret);
30
31 $secret = str_split($secret);
32 $binary_string = '';
33 for ($i = 0; $i < count($secret); $i = $i + 8) {
34 $x = '';
35 if (!in_array($secret[$i], $base32_chars)) {
36 return false;
37 }
38 for ($j = 0; $j < 8; ++$j) {
39 $x .= str_pad(base_convert(@$base32_chars_flipped[@$secret[$i + $j]], 10, 2), 5, '0', STR_PAD_LEFT);
40 }
41 $eight_bits = str_split($x, 8);
42 for ($z = 0; $z < count($eight_bits); ++$z) {
43 $binary_string .= (($y = chr(base_convert($eight_bits[$z], 2, 10))) || ord($y) == 48) ? $y : '';
44 }
45 }
46
47 return $binary_string;
48 }
49
50 public static function getSecretInfo($info) {
51 $default_info = array('secret' => null, 'is_encrypted' => null);
52
53 if (empty($info) || !array_key_exists('secret', $info) || empty($info['secret']) ||
54 !array_key_exists('is_encrypted', $info) || !is_bool($info['is_encrypted'])) {
55 return $default_info;
56 }
57
58 $secret = base64_decode($info['secret'], true);
59 if ($secret === false) {
60 return $default_info;
61 }
62
63 return array('secret' => $secret, 'is_encrypted' => $info['is_encrypted']);
64 }
65 }
66 endif;