| 
<?phpdeclare(strict_types=1);
 
 if (class_exists('ParagonIE_Sodium_Core_XSalsa20', false)) {
 return;
 }
 
 /**
 * Class ParagonIE_Sodium_Core_XSalsa20
 */
 abstract class ParagonIE_Sodium_Core_XSalsa20 extends ParagonIE_Sodium_Core_HSalsa20
 {
 /**
 * Expand a key and nonce into an xsalsa20 keystream.
 *
 * @internal You should not use this directly from another application
 *
 * @param int $len
 * @param string $nonce
 * @param string $key
 * @return string
 * @throws SodiumException
 * @throws TypeError
 */
 public static function xsalsa20(
 int $len,
 string $nonce,
 #[SensitiveParameter]
 string $key
 ): string {
 return self::salsa20(
 $len,
 self::substr($nonce, 16, 8),
 self::hsalsa20($nonce, $key)
 );
 }
 
 /**
 * Encrypt a string with XSalsa20. Doesn't provide integrity.
 *
 * @internal You should not use this directly from another application
 *
 * @param string $message
 * @param string $nonce
 * @param string $key
 * @return string
 * @throws SodiumException
 * @throws TypeError
 */
 public static function xsalsa20_xor(
 #[SensitiveParameter]
 string $message,
 string $nonce,
 #[SensitiveParameter]
 string $key
 ): string {
 return self::xorStrings(
 $message,
 self::xsalsa20(
 self::strlen($message),
 $nonce,
 $key
 )
 );
 }
 }
 
 |