ParagonIE_Sodium_Core_Util::hex2bin() – Convert a hexadecimal string into a binary string without cache-timing leaks
You appear to be a bot. Output may be restricted
Description
Convert a hexadecimal string into a binary string without cache-timing leaks
Usage
$string = ParagonIE_Sodium_Core_Util::hex2bin( $hexString, $ignore, $strictPadding );
Parameters
- $hexString
- ( string ) required –
- $ignore
- ( string ) optional –
- $strictPadding
- ( bool ) optional –
Returns
string (raw binary)
Source
File name: wordpress/wp-includes/sodium_compat/src/Core/Util.php
Lines:
1 to 55 of 55
public static function hex2bin($hexString, $ignore = '', $strictPadding = false) { /* Type checks: */ if (!is_string($hexString)) { throw new TypeError('Argument 1 must be a string, ' . gettype($hexString) . ' given.'); } if (!is_string($ignore)) { throw new TypeError('Argument 2 must be a string, ' . gettype($hexString) . ' given.'); } $hex_pos = 0; $bin = ''; $c_acc = 0; $hex_len = self::strlen($hexString); $state = 0; if (($hex_len & 1) !== 0) { if ($strictPadding) { throw new RangeException( 'Expected an even number of hexadecimal characters' ); } else { $hexString = '0' . $hexString; ++$hex_len; } } $chunk = unpack('C*', $hexString); while ($hex_pos < $hex_len) { ++$hex_pos; /** @var int $c */ $c = $chunk[$hex_pos]; $c_num = $c ^ 48; $c_num0 = ($c_num - 10) >> 8; $c_alpha = ($c & ~32) - 55; $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8; if (($c_num0 | $c_alpha0) === 0) { if ($ignore && $state === 0 && strpos($ignore, self::ParagonIE_Sodium_Core_Util::intToChr($c)) !== false) { continue; } throw new RangeException( 'hex2bin() only expects hexadecimal characters' ); } $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0); if ($state === 0) { $c_acc = $c_val * 16; } else { $bin .= pack('C', $c_acc | $c_val); } $state ^= 1; } return $bin; }