diff options
author | Scott <scott@paragonie.com> | 2016-03-12 17:39:28 -0500 |
---|---|---|
committer | Scott <scott@paragonie.com> | 2016-03-12 17:39:28 -0500 |
commit | 6709366e81deae25c770e52211e04e2afc88d01c (patch) | |
tree | 709b5b168bf5a686d24a68b0c5ff7020a573cf9d /src/Base32.php | |
parent | 0ed01f67e5a3837f3e8b52c2072127d429b3459a (diff) | |
download | constant_time_encoding-0.3.0.zip constant_time_encoding-0.3.0.tar.gz constant_time_encoding-0.3.0.tar.bz2 |
Add Base32Hex, completing RFC 4648 coverage.v0.3.0
Diffstat (limited to 'src/Base32.php')
-rw-r--r-- | src/Base32.php | 122 |
1 files changed, 63 insertions, 59 deletions
diff --git a/src/Base32.php b/src/Base32.php index 18a7e38..1a010e0 100644 --- a/src/Base32.php +++ b/src/Base32.php @@ -1,6 +1,12 @@ <?php namespace ParagonIE\ConstantTime; +/** + * Class Base32 + * [A-Z][2-7] + * + * @package ParagonIE\ConstantTime + */ abstract class Base32 { /** @@ -47,14 +53,14 @@ abstract class Base32 $dest = ''; for ($i = 0; $i + 8 <= $srcLen; $i += 8) { $chunk = \unpack('C*', Core::safeSubstr($src, $i, 8)); - $c0 = self::decode5Bits($chunk[1]); - $c1 = self::decode5Bits($chunk[2]); - $c2 = self::decode5Bits($chunk[3]); - $c3 = self::decode5Bits($chunk[4]); - $c4 = self::decode5Bits($chunk[5]); - $c5 = self::decode5Bits($chunk[6]); - $c6 = self::decode5Bits($chunk[7]); - $c7 = self::decode5Bits($chunk[8]); + $c0 = static::decode5Bits($chunk[1]); + $c1 = static::decode5Bits($chunk[2]); + $c2 = static::decode5Bits($chunk[3]); + $c3 = static::decode5Bits($chunk[4]); + $c4 = static::decode5Bits($chunk[5]); + $c5 = static::decode5Bits($chunk[6]); + $c6 = static::decode5Bits($chunk[7]); + $c7 = static::decode5Bits($chunk[8]); $dest .= \pack( 'CCCCC', @@ -68,15 +74,15 @@ abstract class Base32 } if ($i < $srcLen) { $chunk = \unpack('C*', Core::safeSubstr($src, $i, $srcLen - $i)); - $c0 = self::decode5Bits($chunk[1]); + $c0 = static::decode5Bits($chunk[1]); if ($i + 6 < $srcLen) { - $c1 = self::decode5Bits($chunk[2]); - $c2 = self::decode5Bits($chunk[3]); - $c3 = self::decode5Bits($chunk[4]); - $c4 = self::decode5Bits($chunk[5]); - $c5 = self::decode5Bits($chunk[6]); - $c6 = self::decode5Bits($chunk[7]); + $c1 = static::decode5Bits($chunk[2]); + $c2 = static::decode5Bits($chunk[3]); + $c3 = static::decode5Bits($chunk[4]); + $c4 = static::decode5Bits($chunk[5]); + $c5 = static::decode5Bits($chunk[6]); + $c6 = static::decode5Bits($chunk[7]); $dest .= \pack( 'CCCC', @@ -87,11 +93,11 @@ abstract class Base32 ); $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6) >> 8; } elseif ($i + 5 < $srcLen) { - $c1 = self::decode5Bits($chunk[2]); - $c2 = self::decode5Bits($chunk[3]); - $c3 = self::decode5Bits($chunk[4]); - $c4 = self::decode5Bits($chunk[5]); - $c5 = self::decode5Bits($chunk[6]); + $c1 = static::decode5Bits($chunk[2]); + $c2 = static::decode5Bits($chunk[3]); + $c3 = static::decode5Bits($chunk[4]); + $c4 = static::decode5Bits($chunk[5]); + $c5 = static::decode5Bits($chunk[6]); $dest .= \pack( 'CCCC', @@ -102,10 +108,10 @@ abstract class Base32 ); $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5) >> 8; } elseif ($i + 4 < $srcLen) { - $c1 = self::decode5Bits($chunk[2]); - $c2 = self::decode5Bits($chunk[3]); - $c3 = self::decode5Bits($chunk[4]); - $c4 = self::decode5Bits($chunk[5]); + $c1 = static::decode5Bits($chunk[2]); + $c2 = static::decode5Bits($chunk[3]); + $c3 = static::decode5Bits($chunk[4]); + $c4 = static::decode5Bits($chunk[5]); $dest .= \pack( 'CCC', @@ -115,9 +121,9 @@ abstract class Base32 ); $err |= ($c0 | $c1 | $c2 | $c3 | $c4) >> 8; } elseif ($i + 3 < $srcLen) { - $c1 = self::decode5Bits($chunk[2]); - $c2 = self::decode5Bits($chunk[3]); - $c3 = self::decode5Bits($chunk[4]); + $c1 = static::decode5Bits($chunk[2]); + $c2 = static::decode5Bits($chunk[3]); + $c3 = static::decode5Bits($chunk[4]); $dest .= \pack( 'CC', @@ -126,8 +132,8 @@ abstract class Base32 ); $err |= ($c0 | $c1 | $c2 | $c3) >> 8; } elseif ($i + 2 < $srcLen) { - $c1 = self::decode5Bits($chunk[2]); - $c2 = self::decode5Bits($chunk[3]); + $c1 = static::decode5Bits($chunk[2]); + $c2 = static::decode5Bits($chunk[3]); $dest .= \pack( 'CC', @@ -136,7 +142,7 @@ abstract class Base32 ); $err |= ($c0 | $c1 | $c2) >> 8; } elseif ($i + 1 < $srcLen) { - $c1 = self::decode5Bits($chunk[2]); + $c1 = static::decode5Bits($chunk[2]); $dest .= \pack( 'C', @@ -177,14 +183,14 @@ abstract class Base32 $b3 = $chunk[4]; $b4 = $chunk[5]; $dest .= - self::encode5Bits( ($b0 >> 3) & 31) . - self::encode5Bits((($b0 << 2) | ($b1 >> 6)) & 31) . - self::encode5Bits((($b1 >> 1) ) & 31) . - self::encode5Bits((($b1 << 4) | ($b2 >> 4)) & 31) . - self::encode5Bits((($b2 << 1) | ($b3 >> 7)) & 31) . - self::encode5Bits((($b3 >> 2) ) & 31) . - self::encode5Bits((($b3 << 3) | ($b4 >> 5)) & 31) . - self::encode5Bits( $b4 & 31); + static::encode5Bits( ($b0 >> 3) & 31) . + static::encode5Bits((($b0 << 2) | ($b1 >> 6)) & 31) . + static::encode5Bits((($b1 >> 1) ) & 31) . + static::encode5Bits((($b1 << 4) | ($b2 >> 4)) & 31) . + static::encode5Bits((($b2 << 1) | ($b3 >> 7)) & 31) . + static::encode5Bits((($b3 >> 2) ) & 31) . + static::encode5Bits((($b3 << 3) | ($b4 >> 5)) & 31) . + static::encode5Bits( $b4 & 31); } if ($i < $srcLen) { $chunk = \unpack('C*', Core::safeSubstr($src, $i, $srcLen - $i)); @@ -194,47 +200,45 @@ abstract class Base32 $b2 = $chunk[3]; $b3 = $chunk[4]; $dest .= - self::encode5Bits( ($b0 >> 3) & 31) . - self::encode5Bits((($b0 << 2) | ($b1 >> 6)) & 31) . - self::encode5Bits((($b1 >> 1) ) & 31) . - self::encode5Bits((($b1 << 4) | ($b2 >> 4)) & 31) . - self::encode5Bits((($b2 << 1) | ($b3 >> 7)) & 31) . - self::encode5Bits((($b3 >> 2) ) & 31) . - self::encode5Bits((($b3 << 3) ) & 31) . + static::encode5Bits( ($b0 >> 3) & 31) . + static::encode5Bits((($b0 << 2) | ($b1 >> 6)) & 31) . + static::encode5Bits((($b1 >> 1) ) & 31) . + static::encode5Bits((($b1 << 4) | ($b2 >> 4)) & 31) . + static::encode5Bits((($b2 << 1) | ($b3 >> 7)) & 31) . + static::encode5Bits((($b3 >> 2) ) & 31) . + static::encode5Bits((($b3 << 3) ) & 31) . '='; } elseif ($i + 2 < $srcLen) { $b1 = $chunk[2]; $b2 = $chunk[3]; $dest .= - self::encode5Bits( ($b0 >> 3) & 31) . - self::encode5Bits((($b0 << 2) | ($b1 >> 6)) & 31) . - self::encode5Bits((($b1 >> 1) ) & 31) . - self::encode5Bits((($b1 << 4) | ($b2 >> 4)) & 31) . - self::encode5Bits((($b2 << 1) ) & 31) . + static::encode5Bits( ($b0 >> 3) & 31) . + static::encode5Bits((($b0 << 2) | ($b1 >> 6)) & 31) . + static::encode5Bits((($b1 >> 1) ) & 31) . + static::encode5Bits((($b1 << 4) | ($b2 >> 4)) & 31) . + static::encode5Bits((($b2 << 1) ) & 31) . '==='; } elseif ($i + 1 < $srcLen) { $b1 = $chunk[2]; $dest .= - self::encode5Bits( ($b0 >> 3) & 31) . - self::encode5Bits((($b0 << 2) | ($b1 >> 6)) & 31) . - self::encode5Bits((($b1 >> 1) ) & 31) . - self::encode5Bits((($b1 << 4) ) & 31) . + static::encode5Bits( ($b0 >> 3) & 31) . + static::encode5Bits((($b0 << 2) | ($b1 >> 6)) & 31) . + static::encode5Bits((($b1 >> 1) ) & 31) . + static::encode5Bits((($b1 << 4) ) & 31) . '===='; } else { $dest .= - self::encode5Bits( ($b0 >> 3) & 31) . - self::encode5Bits( ($b0 << 2) & 31) . + static::encode5Bits( ($b0 >> 3) & 31) . + static::encode5Bits( ($b0 << 2) & 31) . '======'; } } return $dest; } - - /** * - * @param $src + * @param int $src * @return int */ protected static function decode5Bits($src) |