mirror of
https://github.com/WordPress/WordPress.git
synced 2024-09-27 06:42:56 +02:00
89439a7f83
The latest version of sodium_compat includes further improvements for PHP 8.1 compatibility. Release notes: https://github.com/paragonie/sodium_compat/releases/tag/v1.17.1 A full list of changes in this update can be found on GitHub: https://github.com/paragonie/sodium_compat/compare/v1.17.0...v1.17.1 Follow-up to [49741], [51002], [51591]. Props jrf, paragoninitiativeenterprises. Fixes #55453. Built from https://develop.svn.wordpress.org/trunk@52988 git-svn-id: http://core.svn.wordpress.org/trunk@52577 1a063a9b-81f0-0310-95a4-ce76da25c4cd
88 lines
2.4 KiB
PHP
88 lines
2.4 KiB
PHP
<?php
|
|
|
|
if (class_exists('ParagonIE_Sodium_Core32_XChaCha20', false)) {
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* Class ParagonIE_Sodium_Core32_XChaCha20
|
|
*/
|
|
class ParagonIE_Sodium_Core32_XChaCha20 extends ParagonIE_Sodium_Core32_HChaCha20
|
|
{
|
|
/**
|
|
* @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 stream($len = 64, $nonce = '', $key = '')
|
|
{
|
|
if (self::strlen($nonce) !== 24) {
|
|
throw new SodiumException('Nonce must be 24 bytes long');
|
|
}
|
|
return self::encryptBytes(
|
|
new ParagonIE_Sodium_Core32_ChaCha20_Ctx(
|
|
self::hChaCha20(
|
|
self::substr($nonce, 0, 16),
|
|
$key
|
|
),
|
|
self::substr($nonce, 16, 8)
|
|
),
|
|
str_repeat("\x00", $len)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @internal You should not use this directly from another application
|
|
*
|
|
* @param string $message
|
|
* @param string $nonce
|
|
* @param string $key
|
|
* @param string $ic
|
|
* @return string
|
|
* @throws SodiumException
|
|
* @throws TypeError
|
|
*/
|
|
public static function streamXorIc($message, $nonce = '', $key = '', $ic = '')
|
|
{
|
|
if (self::strlen($nonce) !== 24) {
|
|
throw new SodiumException('Nonce must be 24 bytes long');
|
|
}
|
|
return self::encryptBytes(
|
|
new ParagonIE_Sodium_Core32_ChaCha20_Ctx(
|
|
self::hChaCha20(self::substr($nonce, 0, 16), $key),
|
|
self::substr($nonce, 16, 8),
|
|
$ic
|
|
),
|
|
$message
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @internal You should not use this directly from another application
|
|
*
|
|
* @param string $message
|
|
* @param string $nonce
|
|
* @param string $key
|
|
* @param string $ic
|
|
* @return string
|
|
* @throws SodiumException
|
|
* @throws TypeError
|
|
*/
|
|
public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '')
|
|
{
|
|
return self::encryptBytes(
|
|
new ParagonIE_Sodium_Core32_ChaCha20_IetfCtx(
|
|
self::hChaCha20(self::substr($nonce, 0, 16), $key),
|
|
"\x00\x00\x00\x00" . self::substr($nonce, 16, 8),
|
|
$ic
|
|
),
|
|
$message
|
|
);
|
|
}
|
|
}
|