From 84f150cee0f135e89098a2c9981a914cb9f76251 Mon Sep 17 00:00:00 2001 From: netkas Date: Fri, 13 Sep 2024 13:47:02 -0400 Subject: [PATCH] Add Base32 encoding functionality --- src/Socialbox/Classes/Base32.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/Socialbox/Classes/Base32.php b/src/Socialbox/Classes/Base32.php index c6ac5dc..38b59a9 100644 --- a/src/Socialbox/Classes/Base32.php +++ b/src/Socialbox/Classes/Base32.php @@ -83,4 +83,32 @@ class Base32 return $binary_string; } + + public static function encode(string $data): string + { + $binaryLength = strlen($data); + $base32String = ''; + + $buffer = 0; + $bitsLeft = 0; + + for ($i = 0; $i < $binaryLength; $i++) + { + $buffer = ($buffer << 8) | (ord($data[$i]) & 0xFF); + $bitsLeft += 8; + + while ($bitsLeft >= 5) + { + $base32String .= self::LOOKUP_TABLE[($buffer >> ($bitsLeft - 5)) & 0x1F]; + $bitsLeft -= 5; + } + } + + if ($bitsLeft > 0) + { + $base32String .= self::LOOKUP_TABLE[($buffer << (5 - $bitsLeft)) & 0x1F]; + } + + return $base32String; + } }