3namespace Bitrix\Main\Security\Mfa;
5use Bitrix\Main\ArgumentTypeException;
6use Bitrix\Main\Security\OtpException;
7use Bitrix\Main\Text\Base32;
11 protected static $type =
'undefined';
61 if (strlen($this->secret) > 25)
63 $this->digest =
'sha256';
97 $opts[
'algorithm'] = mb_strtoupper($opts[
'algorithm']);
108 $params = http_build_query($opts,
'',
'&', PHP_QUERY_RFC3986);
114 rawurlencode($label),
129 foreach (str_split(
$hash, 2) as $hex)
131 $hmac[] = hexdec($hex);
134 $offset = $hmac[
count($hmac) - 1] & 0xf;
135 $code = ($hmac[$offset] & 0x7F) << 24;
136 $code |= ($hmac[$offset + 1] & 0xFF) << 16;
137 $code |= ($hmac[$offset + 2] & 0xFF) << 8;
138 $code |= ($hmac[$offset + 3] & 0xFF);
155 $result[] = chr($value & 0xFF);
159 return str_pad(implode(array_reverse(
$result)), 8,
"\000", STR_PAD_LEFT);
172 if (!is_string($expected))
177 if (!is_string($actual))
182 $lenExpected = strlen($expected);
183 $lenActual = strlen($actual);
185 $status = $lenExpected ^ $lenActual;
186 $len = min($lenExpected, $lenActual);
187 for (
$i = 0;
$i < $len;
$i++)
223 return static::$type;
getSyncParameters($inputA, $inputB)
isStringsEqual($expected, $actual)
generateUri($label, array $opts=[])
verify($input, $params=null)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']