summaryrefslogtreecommitdiffstats
path: root/tests/EncodingTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/EncodingTest.php')
-rw-r--r--tests/EncodingTest.php155
1 files changed, 155 insertions, 0 deletions
diff --git a/tests/EncodingTest.php b/tests/EncodingTest.php
index 556c5a5..17a7af2 100644
--- a/tests/EncodingTest.php
+++ b/tests/EncodingTest.php
@@ -3,6 +3,152 @@ use \ParagonIE\ConstantTime\Encoding;
class EncodingTest extends PHPUnit_Framework_TestCase
{
+ /**
+ * Based on test vectors from RFC 4648
+ */
+ public function testBase32Encode()
+ {
+ $this->assertEquals(
+ Encoding::base32Encode("\x00"),
+ 'AA======'
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("\x00\x00"),
+ 'AAAA===='
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("\x00\x00\x00"),
+ 'AAAAA==='
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("\x00\x00\x00\x00"),
+ 'AAAAAAA='
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("\x00\x00\x00\x00\x00"),
+ 'AAAAAAAA'
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("f"),
+ 'MY======'
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("fo"),
+ 'MZXQ===='
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("foo"),
+ 'MZXW6==='
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("foob"),
+ 'MZXW6YQ='
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("fooba"),
+ 'MZXW6YTB'
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("foobar"),
+ 'MZXW6YTBOI======'
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("\x00\x00\x0F\xFF\xFF"),
+ 'AAAA7777'
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("\xFF\xFF\xF0\x00\x00"),
+ '7777AAAA'
+ );
+
+ $this->assertEquals(
+ Encoding::base32Encode("\xce\x73\x9c\xe7\x39"),
+ 'ZZZZZZZZ'
+ );
+ $this->assertEquals(
+ Encoding::base32Encode("\xd6\xb5\xad\x6b\x5a"),
+ '22222222'
+ );
+ }
+ /**
+ * Based on test vectors from RFC 4648
+ */
+ public function testBase32Decode()
+ {
+ $this->assertEquals(
+ "\x00\x00\x00\x00\x00\x00",
+ Encoding::base32Decode('AAAAAAAAAA======')
+ );
+ $this->assertEquals(
+ "\x00\x00\x00\x00\x00\x00\x00",
+ Encoding::base32Decode('AAAAAAAAAAAA====')
+ );
+ $this->assertEquals(
+ "\x00\x00\x00\x00\x00\x00\x00\x00",
+ Encoding::base32Decode('AAAAAAAAAAAAA===')
+ );
+ $this->assertEquals(
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00",
+ Encoding::base32Decode('AAAAAAAAAAAAAAA=')
+ );
+ $this->assertEquals(
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
+ Encoding::base32Decode('AAAAAAAAAAAAAAAA')
+ );
+ $this->assertEquals(
+ "\x00",
+ Encoding::base32Decode('AA======')
+ );
+ $this->assertEquals(
+ "\x00\x00",
+ Encoding::base32Decode('AAAA====')
+ );
+ $this->assertEquals(
+ "\x00\x00\x00",
+ Encoding::base32Decode('AAAAA===')
+ );
+ $this->assertEquals(
+ "\x00\x00\x00\x00",
+ Encoding::base32Decode('AAAAAAA=')
+ );
+ $this->assertEquals(
+ "\x00\x00\x00\x00\x00",
+ Encoding::base32Decode('AAAAAAAA')
+ );
+ $this->assertEquals(
+ "\x00\x00\x0F\xFF\xFF",
+ Encoding::base32Decode('AAAA7777')
+ );
+ $this->assertEquals(
+ "\xFF\xFF\xF0\x00\x00",
+ Encoding::base32Decode('7777AAAA')
+ );
+ $this->assertEquals(
+ "\xce\x73\x9c\xe7\x39",
+ Encoding::base32Decode('ZZZZZZZZ')
+ );
+ $this->assertEquals(
+ "\xd6\xb5\xad\x6b\x5a",
+ Encoding::base32Decode('22222222')
+ );
+ $this->assertEquals(
+ 'foobar',
+ Encoding::base32Decode('MZXW6YTBOI======')
+ );
+
+ $rand = random_bytes(9);
+ $enc = Encoding::base32Encode($rand);
+
+ $this->assertEquals(
+ Encoding::base32Encode($rand),
+ Encoding::base32Encode(Encoding::base32Decode($enc))
+ );
+ $this->assertEquals(
+ $rand,
+ Encoding::base32Decode($enc)
+ );
+ }
+
public function testBasicEncoding()
{
$str = random_bytes(33);
@@ -11,5 +157,14 @@ class EncodingTest extends PHPUnit_Framework_TestCase
$str,
Encoding::base64Decode($enc)
);
+
+ for ($i = 1; $i < 34; ++$i) {
+ $rand = random_bytes($i);
+ $enc = Encoding::base32Encode($rand);
+ $this->assertEquals(
+ bin2hex($rand),
+ bin2hex(Encoding::base32Decode($enc))
+ );
+ }
}
} \ No newline at end of file