| 
<?phpdeclare(strict_types=1);
 namespace ParagonIE\Paseto\Tests;
 
 use ParagonIE\Paseto\ProtocolInterface;
 use ParagonIE\Paseto\Keys\SymmetricKey;
 
 abstract class NonceFixer {
 public static function buildUnitTestEncrypt(ProtocolInterface $protocol): \Closure {
 return static function (
 string $data,
 SymmetricKey $key,
 string $footer = '',
 string $nonceForUnitTesting = ''
 ) use ($protocol): string {
 return $protocol::__encrypt($data, $key, $footer, $nonceForUnitTesting);
 };
 }
 
 public static function buildSetExplicitNonce(): \Closure {
 return function (string $nonce) {
 /** @noinspection Annotator */
 $this->unitTestEncrypter = static function (ProtocolInterface $protocol) use ($nonce) {
 $class = new class {
 private static $nonce;
 private static $protocol;
 
 public static function setNonce(string $nonce)
 {
 self::$nonce = $nonce;
 }
 
 public static function setProtocol(ProtocolInterface $protocol)
 {
 self::$protocol = $protocol;
 }
 
 public static function encrypt(
 string $data,
 SymmetricKey $key,
 string $footer = ''
 ): string {
 return NonceFixer::buildUnitTestEncrypt(self::$protocol)->bindTo(null, self::$protocol)(
 $data,
 $key,
 $footer,
 self::$nonce
 );
 }
 };
 
 $class::setNonce($nonce);
 $class::setProtocol($protocol);
 
 return $class;
 };
 };
 }
 }
 
 |