| 
<?php
 use PHPUnit\Framework\TestCase;
 
 /**
 * Class SodiumCompatTest
 */
 class NamespacedTest extends TestCase
 {
 /**
 * @before
 */
 public function before(): void
 {
 if (PHP_VERSION_ID < 50300) {
 $this->markTestSkipped('PHP < 5.3.0; skipping PHP 5.3+ compatibility test suite.');
 }
 ParagonIE_Sodium_Compat::$disableFallbackForUnitTests = true;
 }
 
 /**
 * @covers ParagonIE_Sodium_Compat::crypto_secretbox()
 */
 public function testCryptoSecretBox(): void
 {
 $key = str_repeat("\x80", 32);
 $nonce = str_repeat("\x00", 24);
 $message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
 
 $this->assertSame(
 ParagonIE_Sodium_Core_Util::substr(
 bin2hex(
 call_user_func_array(
 array('\\ParagonIE\\Sodium\\Compat', 'crypto_secretbox'),
 array($message, $nonce, $key)
 )
 ),
 0, 32
 ),
 ParagonIE_Sodium_Core_Util::substr(
 bin2hex(ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key)),
 0, 32
 ),
 'secretbox - short messages'
 );
 $this->assertSame(
 $message,
 ParagonIE_Sodium_Compat::crypto_secretbox_open(
 call_user_func_array(
 array('\\ParagonIE\\Sodium\\Compat', 'crypto_secretbox'),
 array($message, $nonce, $key)
 ),
 $nonce,
 $key
 )
 );
 $this->assertSame(
 $message,
 call_user_func_array(
 array('\\ParagonIE\\Sodium\\Compat', 'crypto_secretbox_open'),
 array(
 ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key),
 $nonce,
 $key
 )
 )
 );
 $message = str_repeat('a', 97);
 $this->assertSame(
 bin2hex(
 call_user_func_array(
 array('\\ParagonIE\\Sodium\\Compat', 'crypto_secretbox'),
 array($message, $nonce, $key)
 )
 ),
 bin2hex(ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key)),
 'secretbox - long messages (multiple of 16)'
 );
 
 $message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
 
 $message = str_repeat($message, 16);
 
 $this->assertSame(
 bin2hex(
 call_user_func_array(
 array('\\ParagonIE\\Sodium\\Compat', 'crypto_secretbox'),
 array($message, $nonce, $key)
 )
 ),
 bin2hex(ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key)),
 'secretbox - long messages (multiple of 16)'
 );
 
 $message .= 'a';
 
 $this->assertSame(
 bin2hex(
 call_user_func_array(
 array('\\ParagonIE\\Sodium\\Compat', 'crypto_secretbox'),
 array($message, $nonce, $key)
 )
 ),
 bin2hex(ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key)),
 'secretbox - long messages (NOT a multiple of 16)'
 );
 
 $message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
 
 $this->assertSame(
 bin2hex(
 call_user_func_array(
 array('\\ParagonIE\\Sodium\\Compat', 'crypto_secretbox'),
 array($message, $nonce, $key)
 )
 ),
 bin2hex(ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key)),
 'secretbox - medium messages'
 );
 }
 }
 
 |