Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 37 additions & 30 deletions src/Base32.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,15 @@
namespace ParagonIE\ConstantTime;

use InvalidArgumentException;
use Override;
use RangeException;
use SensitiveParameter;
use TypeError;
use function pack;
use function rtrim;
use function strlen;
use function substr;
use function unpack;

/**
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
Expand Down Expand Up @@ -44,9 +51,9 @@
* @param bool $strictPadding
* @return string
*/
#[\Override]
#[Override]
public static function decode(
#[\SensitiveParameter]
#[SensitiveParameter]
string $encodedString,
bool $strictPadding = false
): string {
Expand All @@ -61,7 +68,7 @@
* @return string
*/
public static function decodeUpper(
#[\SensitiveParameter]
#[SensitiveParameter]
string $src,
bool $strictPadding = false
): string {
Expand All @@ -75,9 +82,9 @@
* @return string
* @throws TypeError
*/
#[\Override]
#[Override]
public static function encode(
#[\SensitiveParameter]
#[SensitiveParameter]
string $binString
): string {
return static::doEncode($binString, false, true);
Expand All @@ -92,7 +99,7 @@
* @api
*/
public static function encodeUnpadded(
#[\SensitiveParameter]
#[SensitiveParameter]
string $src
): string {
return static::doEncode($src, false, false);
Expand All @@ -107,7 +114,7 @@
* @api
*/
public static function encodeUpper(
#[\SensitiveParameter]
#[SensitiveParameter]
string $src
): string {
return static::doEncode($src, true, true);
Expand All @@ -122,7 +129,7 @@
* @api
*/
public static function encodeUpperUnpadded(
#[\SensitiveParameter]
#[SensitiveParameter]
string $src
): string {
return static::doEncode($src, true, false);
Expand All @@ -141,10 +148,10 @@
$ret = -1;

// if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64
$ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 96);

Check warning on line 151 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "DecrementInteger": @@ @@ { $ret = -1; // if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64 - $ret += (0x60 - $src & $src - 0x7b) >> 8 & $src - 96; + $ret += (0x60 - $src & $src - 0x7b) >> 7 & $src - 96; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; return $ret;

Check warning on line 151 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "IncrementInteger": @@ @@ { $ret = -1; // if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64 - $ret += (0x60 - $src & $src - 0x7b) >> 8 & $src - 96; + $ret += (0x60 - $src & $src - 0x7b) >> 9 & $src - 96; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; return $ret;

Check warning on line 151 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "DecrementInteger": @@ @@ { $ret = -1; // if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64 - $ret += (0x60 - $src & $src - 0x7b) >> 8 & $src - 96; + $ret += (95 - $src & $src - 0x7b) >> 8 & $src - 96; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; return $ret;

// if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23
$ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);

Check warning on line 154 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "IncrementInteger": @@ @@ // if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64 $ret += (0x60 - $src & $src - 0x7b) >> 8 & $src - 96; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 - $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; + $ret += (0x31 - $src & $src - 0x38) >> 9 & $src - 23; return $ret; } /**

Check warning on line 154 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "DecrementInteger": @@ @@ // if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64 $ret += (0x60 - $src & $src - 0x7b) >> 8 & $src - 96; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 - $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; + $ret += (0x31 - $src & $src - 0x38) >> 7 & $src - 23; return $ret; } /**

return $ret;
}
Expand All @@ -164,10 +171,10 @@
$ret = -1;

// if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64
$ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);

Check warning on line 174 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "IncrementInteger": @@ @@ { $ret = -1; // if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64 - $ret += (0x40 - $src & $src - 0x5b) >> 8 & $src - 64; + $ret += (0x40 - $src & $src - 0x5b) >> 9 & $src - 64; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; return $ret;

Check warning on line 174 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "DecrementInteger": @@ @@ { $ret = -1; // if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64 - $ret += (0x40 - $src & $src - 0x5b) >> 8 & $src - 64; + $ret += (0x40 - $src & $src - 0x5b) >> 7 & $src - 64; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; return $ret;

Check warning on line 174 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "DecrementInteger": @@ @@ { $ret = -1; // if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64 - $ret += (0x40 - $src & $src - 0x5b) >> 8 & $src - 64; + $ret += (63 - $src & $src - 0x5b) >> 8 & $src - 64; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; return $ret;

// if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23
$ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);

Check warning on line 177 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "DecrementInteger": @@ @@ // if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64 $ret += (0x40 - $src & $src - 0x5b) >> 8 & $src - 64; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 - $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; + $ret += (0x31 - $src & $src - 0x38) >> 7 & $src - 23; return $ret; } /**

Check warning on line 177 in src/Base32.php

View workflow job for this annotation

GitHub Actions / Infection on PHP 8.3

Escaped Mutant for Mutator "IncrementInteger": @@ @@ // if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64 $ret += (0x40 - $src & $src - 0x5b) >> 8 & $src - 64; // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23 - $ret += (0x31 - $src & $src - 0x38) >> 8 & $src - 23; + $ret += (0x31 - $src & $src - 0x38) >> 9 & $src - 23; return $ret; } /**

return $ret;
}
Expand All @@ -187,7 +194,7 @@
// if ($src > 25) $ret -= 72;
$diff -= ((25 - $src) >> 8) & 73;

return \pack('C', $src + $diff);
return pack('C', $src + $diff);
}

/**
Expand All @@ -207,7 +214,7 @@
// if ($src > 25) $ret -= 40;
$diff -= ((25 - $src) >> 8) & 41;

return \pack('C', $src + $diff);
return pack('C', $src + $diff);
}

/**
Expand All @@ -217,11 +224,11 @@
* @api
*/
public static function decodeNoPadding(
#[\SensitiveParameter]
#[SensitiveParameter]
string $encodedString,
bool $upper = false
): string {
$srcLen = \strlen($encodedString);
$srcLen = strlen($encodedString);
if ($srcLen === 0) {
return '';
}
Expand Down Expand Up @@ -252,7 +259,7 @@
* @throws TypeError
*/
protected static function doDecode(
#[\SensitiveParameter]
#[SensitiveParameter]
string $src,
bool $upper = false,
bool $strictPadding = false
Expand All @@ -263,7 +270,7 @@
: 'decode5Bits';

// Remove padding
$srcLen = \strlen($src);
$srcLen = strlen($src);
if ($srcLen === 0) {
return '';
}
Expand All @@ -283,16 +290,16 @@
);
}
} else {
$src = \rtrim($src, '=');
$srcLen = \strlen($src);
$src = rtrim($src, '=');
$srcLen = strlen($src);
}

$err = 0;
$dest = '';
// Main loop (no padding):
for ($i = 0; $i + 8 <= $srcLen; $i += 8) {
/** @var array<int, int> $chunk */
$chunk = \unpack('C*', \substr($src, $i, 8));
$chunk = unpack('C*', substr($src, $i, 8));
/** @var int $c0 */
$c0 = static::$method($chunk[1]);
/** @var int $c1 */
Expand All @@ -310,7 +317,7 @@
/** @var int $c7 */
$c7 = static::$method($chunk[8]);

$dest .= \pack(
$dest .= pack(
'CCCCC',
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
Expand All @@ -323,7 +330,7 @@
// The last chunk, which may have padding:
if ($i < $srcLen) {
/** @var array<int, int> $chunk */
$chunk = \unpack('C*', \substr($src, $i, $srcLen - $i));
$chunk = unpack('C*', substr($src, $i, $srcLen - $i));
/** @var int $c0 */
$c0 = static::$method($chunk[1]);

Expand All @@ -341,7 +348,7 @@
/** @var int $c6 */
$c6 = static::$method($chunk[7]);

$dest .= \pack(
$dest .= pack(
'CCCC',
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
Expand All @@ -364,7 +371,7 @@
/** @var int $c5 */
$c5 = static::$method($chunk[6]);

$dest .= \pack(
$dest .= pack(
'CCCC',
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
Expand All @@ -382,7 +389,7 @@
/** @var int $c4 */
$c4 = static::$method($chunk[5]);

$dest .= \pack(
$dest .= pack(
'CCC',
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
Expand All @@ -400,7 +407,7 @@
/** @var int $c3 */
$c3 = static::$method($chunk[4]);

$dest .= \pack(
$dest .= pack(
'CC',
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff
Expand All @@ -415,7 +422,7 @@
/** @var int $c2 */
$c2 = static::$method($chunk[3]);

$dest .= \pack(
$dest .= pack(
'CC',
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
(($c1 << 6) | ($c2 << 1) ) & 0xff
Expand All @@ -428,7 +435,7 @@
/** @var int $c1 */
$c1 = static::$method($chunk[2]);

$dest .= \pack(
$dest .= pack(
'C',
(($c0 << 3) | ($c1 >> 2) ) & 0xff
);
Expand All @@ -437,7 +444,7 @@
$err |= ($c1 << 6) & 0xff;
}
} else {
$dest .= \pack(
$dest .= pack(
'C',
(($c0 << 3) ) & 0xff
);
Expand All @@ -463,7 +470,7 @@
* @throws TypeError
*/
protected static function doEncode(
#[\SensitiveParameter]
#[SensitiveParameter]
string $src,
bool $upper = false,
bool $pad = true
Expand All @@ -474,12 +481,12 @@
: 'encode5Bits';

$dest = '';
$srcLen = \strlen($src);
$srcLen = strlen($src);

// Main loop (no padding):
for ($i = 0; $i + 5 <= $srcLen; $i += 5) {
/** @var array<int, int> $chunk */
$chunk = \unpack('C*', \substr($src, $i, 5));
$chunk = unpack('C*', substr($src, $i, 5));
$b0 = $chunk[1];
$b1 = $chunk[2];
$b2 = $chunk[3];
Expand All @@ -498,7 +505,7 @@
// The last chunk, which may have padding:
if ($i < $srcLen) {
/** @var array<int, int> $chunk */
$chunk = \unpack('C*', \substr($src, $i, $srcLen - $i));
$chunk = unpack('C*', substr($src, $i, $srcLen - $i));
$b0 = $chunk[1];
if ($i + 3 < $srcLen) {
$b1 = $chunk[2];
Expand Down
15 changes: 9 additions & 6 deletions src/Base32Hex.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use Override;
use function pack;

/**
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
Expand Down Expand Up @@ -40,7 +43,7 @@ abstract class Base32Hex extends Base32
* @param int $src
* @return int
*/
#[\Override]
#[Override]
protected static function decode5Bits(int $src): int
{
$ret = -1;
Expand All @@ -61,7 +64,7 @@ protected static function decode5Bits(int $src): int
* @param int $src
* @return int
*/
#[\Override]
#[Override]
protected static function decode5BitsUpper(int $src): int
{
$ret = -1;
Expand All @@ -82,15 +85,15 @@ protected static function decode5BitsUpper(int $src): int
* @param int $src
* @return string
*/
#[\Override]
#[Override]
protected static function encode5Bits(int $src): string
{
$src += 0x30;

// if ($src > 0x39) $src += 0x61 - 0x3a; // 39
$src += ((0x39 - $src) >> 8) & 39;

return \pack('C', $src);
return pack('C', $src);
}

/**
Expand All @@ -102,14 +105,14 @@ protected static function encode5Bits(int $src): string
* @param int $src
* @return string
*/
#[\Override]
#[Override]
protected static function encode5BitsUpper(int $src): string
{
$src += 0x30;

// if ($src > 0x39) $src += 0x41 - 0x3a; // 7
$src += ((0x39 - $src) >> 8) & 7;

return \pack('C', $src);
return pack('C', $src);
}
}
Loading