public static function chooseEncoder($chosen, bool $decode = false)
{
if ($chosen === true) {
return null;
} elseif ($chosen === false) {
return \implode('::', [Hex::class, $decode ? 'decode' : 'encode']);
} elseif ($chosen === self::ENCODE_BASE32) {
return \implode('::', [Base32::class, $decode ? 'decode' : 'encode']);
} elseif ($chosen === self::ENCODE_BASE32HEX) {
return \implode('::', [Base32Hex::class, $decode ? 'decode' : 'encode']);
} elseif ($chosen === self::ENCODE_BASE64) {
return \implode('::', [Base64::class, $decode ? 'decode' : 'encode']);
} elseif ($chosen === self::ENCODE_BASE64URLSAFE) {
return \implode('::', [Base64UrlSafe::class, $decode ? 'decode' : 'encode']);
} elseif ($chosen === self::ENCODE_HEX) {
return \implode('::', [Hex::class, $decode ? 'decode' : 'encode']);
}
throw new InvalidType('Illegal value for encoding choice.');
}
public function testEncoding() { $random_bytes = \random_bytes(31); // Backwards compatibility: $encoder = Halite::chooseEncoder(false); $this->assertSame(Hex::encode($random_bytes), $encoder($random_bytes)); $encoder = Halite::chooseEncoder(true); $this->assertSame(null, $encoder); // New encoding in version 3: $encoder = Halite::chooseEncoder(Halite::ENCODE_HEX); $this->assertSame(Hex::encode($random_bytes), $encoder($random_bytes)); $encoder = Halite::chooseEncoder(Halite::ENCODE_BASE32); $this->assertSame(Base32::encode($random_bytes), $encoder($random_bytes)); $encoder = Halite::chooseEncoder(Halite::ENCODE_BASE32HEX); $this->assertSame(Base32Hex::encode($random_bytes), $encoder($random_bytes)); $encoder = Halite::chooseEncoder(Halite::ENCODE_BASE64); $this->assertSame(Base64::encode($random_bytes), $encoder($random_bytes)); $encoder = Halite::chooseEncoder(Halite::ENCODE_BASE64URLSAFE); $this->assertSame(Base64UrlSafe::encode($random_bytes), $encoder($random_bytes)); }