PluginProbe
The WP Remote WordPress Plugin / trunk
The WP Remote WordPress Plugin vtrunk
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 5.73 All 53 releases
wpremote / wp_2fa / utils.php

utils.php in The WP Remote WordPress Plugin trunk, 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;