Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-inclu.../sodium_c.../src
File: Compat.php
return (string) sodium_unpad($padded, $blockSize);
[3500] Fix | Delete
}
[3501] Fix | Delete
if ($blockSize <= 0) {
[3502] Fix | Delete
throw new SodiumException('block size cannot be less than 1');
[3503] Fix | Delete
}
[3504] Fix | Delete
$padded_len = ParagonIE_Sodium_Core_Util::strlen($padded);
[3505] Fix | Delete
if ($padded_len < $blockSize) {
[3506] Fix | Delete
throw new SodiumException('invalid padding');
[3507] Fix | Delete
}
[3508] Fix | Delete
[3509] Fix | Delete
# tail = &padded[padded_len - 1U];
[3510] Fix | Delete
$tail = $padded_len - 1;
[3511] Fix | Delete
[3512] Fix | Delete
$acc = 0;
[3513] Fix | Delete
$valid = 0;
[3514] Fix | Delete
$pad_len = 0;
[3515] Fix | Delete
[3516] Fix | Delete
$found = 0;
[3517] Fix | Delete
for ($i = 0; $i < $blockSize; ++$i) {
[3518] Fix | Delete
# c = tail[-i];
[3519] Fix | Delete
$c = ParagonIE_Sodium_Core_Util::chrToInt($padded[$tail - $i]);
[3520] Fix | Delete
[3521] Fix | Delete
# is_barrier =
[3522] Fix | Delete
# (( (acc - 1U) & (pad_len - 1U) & ((c ^ 0x80) - 1U) ) >> 8) & 1U;
[3523] Fix | Delete
$is_barrier = (
[3524] Fix | Delete
(
[3525] Fix | Delete
($acc - 1) & ($pad_len - 1) & (($c ^ 80) - 1)
[3526] Fix | Delete
) >> 7
[3527] Fix | Delete
) & 1;
[3528] Fix | Delete
$is_barrier &= ~$found;
[3529] Fix | Delete
$found |= $is_barrier;
[3530] Fix | Delete
[3531] Fix | Delete
# acc |= c;
[3532] Fix | Delete
$acc |= $c;
[3533] Fix | Delete
[3534] Fix | Delete
# pad_len |= i & (1U + ~is_barrier);
[3535] Fix | Delete
$pad_len |= $i & (1 + ~$is_barrier);
[3536] Fix | Delete
[3537] Fix | Delete
# valid |= (unsigned char) is_barrier;
[3538] Fix | Delete
$valid |= ($is_barrier & 0xff);
[3539] Fix | Delete
}
[3540] Fix | Delete
# unpadded_len = padded_len - 1U - pad_len;
[3541] Fix | Delete
$unpadded_len = $padded_len - 1 - $pad_len;
[3542] Fix | Delete
if ($valid !== 1) {
[3543] Fix | Delete
throw new SodiumException('invalid padding');
[3544] Fix | Delete
}
[3545] Fix | Delete
return ParagonIE_Sodium_Core_Util::substr($padded, 0, $unpadded_len);
[3546] Fix | Delete
}
[3547] Fix | Delete
[3548] Fix | Delete
/**
[3549] Fix | Delete
* Will sodium_compat run fast on the current hardware and PHP configuration?
[3550] Fix | Delete
*
[3551] Fix | Delete
* @return bool
[3552] Fix | Delete
*/
[3553] Fix | Delete
public static function polyfill_is_fast()
[3554] Fix | Delete
{
[3555] Fix | Delete
if (extension_loaded('sodium')) {
[3556] Fix | Delete
return true;
[3557] Fix | Delete
}
[3558] Fix | Delete
if (extension_loaded('libsodium')) {
[3559] Fix | Delete
return true;
[3560] Fix | Delete
}
[3561] Fix | Delete
return PHP_INT_SIZE === 8;
[3562] Fix | Delete
}
[3563] Fix | Delete
[3564] Fix | Delete
/**
[3565] Fix | Delete
* Generate a string of bytes from the kernel's CSPRNG.
[3566] Fix | Delete
* Proudly uses /dev/urandom (if getrandom(2) is not available).
[3567] Fix | Delete
*
[3568] Fix | Delete
* @param int $numBytes
[3569] Fix | Delete
* @return string
[3570] Fix | Delete
* @throws Exception
[3571] Fix | Delete
* @throws TypeError
[3572] Fix | Delete
*/
[3573] Fix | Delete
public static function randombytes_buf($numBytes)
[3574] Fix | Delete
{
[3575] Fix | Delete
/* Type checks: */
[3576] Fix | Delete
if (!is_int($numBytes)) {
[3577] Fix | Delete
if (is_numeric($numBytes)) {
[3578] Fix | Delete
$numBytes = (int) $numBytes;
[3579] Fix | Delete
} else {
[3580] Fix | Delete
throw new TypeError(
[3581] Fix | Delete
'Argument 1 must be an integer, ' . gettype($numBytes) . ' given.'
[3582] Fix | Delete
);
[3583] Fix | Delete
}
[3584] Fix | Delete
}
[3585] Fix | Delete
/** @var positive-int $numBytes */
[3586] Fix | Delete
if (self::use_fallback('randombytes_buf')) {
[3587] Fix | Delete
return (string) call_user_func('\\Sodium\\randombytes_buf', $numBytes);
[3588] Fix | Delete
}
[3589] Fix | Delete
if ($numBytes < 0) {
[3590] Fix | Delete
throw new SodiumException("Number of bytes must be a positive integer");
[3591] Fix | Delete
}
[3592] Fix | Delete
return random_bytes($numBytes);
[3593] Fix | Delete
}
[3594] Fix | Delete
[3595] Fix | Delete
/**
[3596] Fix | Delete
* Generate an integer between 0 and $range (non-inclusive).
[3597] Fix | Delete
*
[3598] Fix | Delete
* @param int $range
[3599] Fix | Delete
* @return int
[3600] Fix | Delete
* @throws Exception
[3601] Fix | Delete
* @throws Error
[3602] Fix | Delete
* @throws TypeError
[3603] Fix | Delete
*/
[3604] Fix | Delete
public static function randombytes_uniform($range)
[3605] Fix | Delete
{
[3606] Fix | Delete
/* Type checks: */
[3607] Fix | Delete
if (!is_int($range)) {
[3608] Fix | Delete
if (is_numeric($range)) {
[3609] Fix | Delete
$range = (int) $range;
[3610] Fix | Delete
} else {
[3611] Fix | Delete
throw new TypeError(
[3612] Fix | Delete
'Argument 1 must be an integer, ' . gettype($range) . ' given.'
[3613] Fix | Delete
);
[3614] Fix | Delete
}
[3615] Fix | Delete
}
[3616] Fix | Delete
if (self::use_fallback('randombytes_uniform')) {
[3617] Fix | Delete
return (int) call_user_func('\\Sodium\\randombytes_uniform', $range);
[3618] Fix | Delete
}
[3619] Fix | Delete
return random_int(0, $range - 1);
[3620] Fix | Delete
}
[3621] Fix | Delete
[3622] Fix | Delete
/**
[3623] Fix | Delete
* Generate a random 16-bit integer.
[3624] Fix | Delete
*
[3625] Fix | Delete
* @return int
[3626] Fix | Delete
* @throws Exception
[3627] Fix | Delete
* @throws Error
[3628] Fix | Delete
* @throws TypeError
[3629] Fix | Delete
*/
[3630] Fix | Delete
public static function randombytes_random16()
[3631] Fix | Delete
{
[3632] Fix | Delete
if (self::use_fallback('randombytes_random16')) {
[3633] Fix | Delete
return (int) call_user_func('\\Sodium\\randombytes_random16');
[3634] Fix | Delete
}
[3635] Fix | Delete
return random_int(0, 65535);
[3636] Fix | Delete
}
[3637] Fix | Delete
[3638] Fix | Delete
/**
[3639] Fix | Delete
* @param string $p
[3640] Fix | Delete
* @param bool $dontFallback
[3641] Fix | Delete
* @return bool
[3642] Fix | Delete
* @throws SodiumException
[3643] Fix | Delete
*/
[3644] Fix | Delete
public static function ristretto255_is_valid_point($p, $dontFallback = false)
[3645] Fix | Delete
{
[3646] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3647] Fix | Delete
return sodium_crypto_core_ristretto255_is_valid_point($p);
[3648] Fix | Delete
}
[3649] Fix | Delete
try {
[3650] Fix | Delete
$r = ParagonIE_Sodium_Core_Ristretto255::ristretto255_frombytes($p);
[3651] Fix | Delete
return $r['res'] === 0 &&
[3652] Fix | Delete
ParagonIE_Sodium_Core_Ristretto255::ristretto255_point_is_canonical($p) === 1;
[3653] Fix | Delete
} catch (SodiumException $ex) {
[3654] Fix | Delete
if ($ex->getMessage() === 'S is not canonical') {
[3655] Fix | Delete
return false;
[3656] Fix | Delete
}
[3657] Fix | Delete
throw $ex;
[3658] Fix | Delete
}
[3659] Fix | Delete
}
[3660] Fix | Delete
[3661] Fix | Delete
/**
[3662] Fix | Delete
* @param string $p
[3663] Fix | Delete
* @param string $q
[3664] Fix | Delete
* @param bool $dontFallback
[3665] Fix | Delete
* @return string
[3666] Fix | Delete
* @throws SodiumException
[3667] Fix | Delete
*/
[3668] Fix | Delete
public static function ristretto255_add($p, $q, $dontFallback = false)
[3669] Fix | Delete
{
[3670] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3671] Fix | Delete
return sodium_crypto_core_ristretto255_add($p, $q);
[3672] Fix | Delete
}
[3673] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_add($p, $q);
[3674] Fix | Delete
}
[3675] Fix | Delete
[3676] Fix | Delete
/**
[3677] Fix | Delete
* @param string $p
[3678] Fix | Delete
* @param string $q
[3679] Fix | Delete
* @param bool $dontFallback
[3680] Fix | Delete
* @return string
[3681] Fix | Delete
* @throws SodiumException
[3682] Fix | Delete
*/
[3683] Fix | Delete
public static function ristretto255_sub($p, $q, $dontFallback = false)
[3684] Fix | Delete
{
[3685] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3686] Fix | Delete
return sodium_crypto_core_ristretto255_sub($p, $q);
[3687] Fix | Delete
}
[3688] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_sub($p, $q);
[3689] Fix | Delete
}
[3690] Fix | Delete
[3691] Fix | Delete
/**
[3692] Fix | Delete
* @param string $r
[3693] Fix | Delete
* @param bool $dontFallback
[3694] Fix | Delete
* @return string
[3695] Fix | Delete
*
[3696] Fix | Delete
* @throws SodiumException
[3697] Fix | Delete
*/
[3698] Fix | Delete
public static function ristretto255_from_hash($r, $dontFallback = false)
[3699] Fix | Delete
{
[3700] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3701] Fix | Delete
return sodium_crypto_core_ristretto255_from_hash($r);
[3702] Fix | Delete
}
[3703] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_from_hash($r);
[3704] Fix | Delete
}
[3705] Fix | Delete
[3706] Fix | Delete
/**
[3707] Fix | Delete
* @param bool $dontFallback
[3708] Fix | Delete
* @return string
[3709] Fix | Delete
*
[3710] Fix | Delete
* @throws SodiumException
[3711] Fix | Delete
*/
[3712] Fix | Delete
public static function ristretto255_random($dontFallback = false)
[3713] Fix | Delete
{
[3714] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3715] Fix | Delete
return sodium_crypto_core_ristretto255_random();
[3716] Fix | Delete
}
[3717] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_random();
[3718] Fix | Delete
}
[3719] Fix | Delete
[3720] Fix | Delete
/**
[3721] Fix | Delete
* @param bool $dontFallback
[3722] Fix | Delete
* @return string
[3723] Fix | Delete
*
[3724] Fix | Delete
* @throws SodiumException
[3725] Fix | Delete
*/
[3726] Fix | Delete
public static function ristretto255_scalar_random($dontFallback = false)
[3727] Fix | Delete
{
[3728] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3729] Fix | Delete
return sodium_crypto_core_ristretto255_scalar_random();
[3730] Fix | Delete
}
[3731] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_random();
[3732] Fix | Delete
}
[3733] Fix | Delete
[3734] Fix | Delete
/**
[3735] Fix | Delete
* @param string $s
[3736] Fix | Delete
* @param bool $dontFallback
[3737] Fix | Delete
* @return string
[3738] Fix | Delete
* @throws SodiumException
[3739] Fix | Delete
*/
[3740] Fix | Delete
public static function ristretto255_scalar_invert($s, $dontFallback = false)
[3741] Fix | Delete
{
[3742] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3743] Fix | Delete
return sodium_crypto_core_ristretto255_scalar_invert($s);
[3744] Fix | Delete
}
[3745] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_invert($s);
[3746] Fix | Delete
}
[3747] Fix | Delete
/**
[3748] Fix | Delete
* @param string $s
[3749] Fix | Delete
* @param bool $dontFallback
[3750] Fix | Delete
* @return string
[3751] Fix | Delete
* @throws SodiumException
[3752] Fix | Delete
*/
[3753] Fix | Delete
public static function ristretto255_scalar_negate($s, $dontFallback = false)
[3754] Fix | Delete
{
[3755] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3756] Fix | Delete
return sodium_crypto_core_ristretto255_scalar_negate($s);
[3757] Fix | Delete
}
[3758] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_negate($s);
[3759] Fix | Delete
}
[3760] Fix | Delete
[3761] Fix | Delete
/**
[3762] Fix | Delete
* @param string $s
[3763] Fix | Delete
* @param bool $dontFallback
[3764] Fix | Delete
* @return string
[3765] Fix | Delete
* @throws SodiumException
[3766] Fix | Delete
*/
[3767] Fix | Delete
public static function ristretto255_scalar_complement($s, $dontFallback = false)
[3768] Fix | Delete
{
[3769] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3770] Fix | Delete
return sodium_crypto_core_ristretto255_scalar_complement($s);
[3771] Fix | Delete
}
[3772] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_complement($s);
[3773] Fix | Delete
}
[3774] Fix | Delete
[3775] Fix | Delete
/**
[3776] Fix | Delete
* @param string $x
[3777] Fix | Delete
* @param string $y
[3778] Fix | Delete
* @param bool $dontFallback
[3779] Fix | Delete
* @return string
[3780] Fix | Delete
* @throws SodiumException
[3781] Fix | Delete
*/
[3782] Fix | Delete
public static function ristretto255_scalar_add($x, $y, $dontFallback = false)
[3783] Fix | Delete
{
[3784] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3785] Fix | Delete
return sodium_crypto_core_ristretto255_scalar_add($x, $y);
[3786] Fix | Delete
}
[3787] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_add($x, $y);
[3788] Fix | Delete
}
[3789] Fix | Delete
[3790] Fix | Delete
/**
[3791] Fix | Delete
* @param string $x
[3792] Fix | Delete
* @param string $y
[3793] Fix | Delete
* @param bool $dontFallback
[3794] Fix | Delete
* @return string
[3795] Fix | Delete
* @throws SodiumException
[3796] Fix | Delete
*/
[3797] Fix | Delete
public static function ristretto255_scalar_sub($x, $y, $dontFallback = false)
[3798] Fix | Delete
{
[3799] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3800] Fix | Delete
return sodium_crypto_core_ristretto255_scalar_sub($x, $y);
[3801] Fix | Delete
}
[3802] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_sub($x, $y);
[3803] Fix | Delete
}
[3804] Fix | Delete
[3805] Fix | Delete
/**
[3806] Fix | Delete
* @param string $x
[3807] Fix | Delete
* @param string $y
[3808] Fix | Delete
* @param bool $dontFallback
[3809] Fix | Delete
* @return string
[3810] Fix | Delete
* @throws SodiumException
[3811] Fix | Delete
*/
[3812] Fix | Delete
public static function ristretto255_scalar_mul($x, $y, $dontFallback = false)
[3813] Fix | Delete
{
[3814] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3815] Fix | Delete
return sodium_crypto_core_ristretto255_scalar_mul($x, $y);
[3816] Fix | Delete
}
[3817] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_mul($x, $y);
[3818] Fix | Delete
}
[3819] Fix | Delete
[3820] Fix | Delete
/**
[3821] Fix | Delete
* @param string $n
[3822] Fix | Delete
* @param string $p
[3823] Fix | Delete
* @param bool $dontFallback
[3824] Fix | Delete
* @return string
[3825] Fix | Delete
* @throws SodiumException
[3826] Fix | Delete
*/
[3827] Fix | Delete
public static function scalarmult_ristretto255($n, $p, $dontFallback = false)
[3828] Fix | Delete
{
[3829] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3830] Fix | Delete
return sodium_crypto_scalarmult_ristretto255($n, $p);
[3831] Fix | Delete
}
[3832] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::scalarmult_ristretto255($n, $p);
[3833] Fix | Delete
}
[3834] Fix | Delete
[3835] Fix | Delete
/**
[3836] Fix | Delete
* @param string $n
[3837] Fix | Delete
* @param string $p
[3838] Fix | Delete
* @param bool $dontFallback
[3839] Fix | Delete
* @return string
[3840] Fix | Delete
* @throws SodiumException
[3841] Fix | Delete
*/
[3842] Fix | Delete
public static function scalarmult_ristretto255_base($n, $dontFallback = false)
[3843] Fix | Delete
{
[3844] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3845] Fix | Delete
return sodium_crypto_scalarmult_ristretto255_base($n);
[3846] Fix | Delete
}
[3847] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::scalarmult_ristretto255_base($n);
[3848] Fix | Delete
}
[3849] Fix | Delete
[3850] Fix | Delete
/**
[3851] Fix | Delete
* @param string $s
[3852] Fix | Delete
* @param bool $dontFallback
[3853] Fix | Delete
* @return string
[3854] Fix | Delete
* @throws SodiumException
[3855] Fix | Delete
*/
[3856] Fix | Delete
public static function ristretto255_scalar_reduce($s, $dontFallback = false)
[3857] Fix | Delete
{
[3858] Fix | Delete
if (self::useNewSodiumAPI() && !$dontFallback) {
[3859] Fix | Delete
return sodium_crypto_core_ristretto255_scalar_reduce($s);
[3860] Fix | Delete
}
[3861] Fix | Delete
return ParagonIE_Sodium_Core_Ristretto255::sc_reduce($s);
[3862] Fix | Delete
}
[3863] Fix | Delete
[3864] Fix | Delete
/**
[3865] Fix | Delete
* Runtime testing method for 32-bit platforms.
[3866] Fix | Delete
*
[3867] Fix | Delete
* Usage: If runtime_speed_test() returns FALSE, then our 32-bit
[3868] Fix | Delete
* implementation is to slow to use safely without risking timeouts.
[3869] Fix | Delete
* If this happens, install sodium from PECL to get acceptable
[3870] Fix | Delete
* performance.
[3871] Fix | Delete
*
[3872] Fix | Delete
* @param int $iterations Number of multiplications to attempt
[3873] Fix | Delete
* @param int $maxTimeout Milliseconds
[3874] Fix | Delete
* @return bool TRUE if we're fast enough, FALSE is not
[3875] Fix | Delete
* @throws SodiumException
[3876] Fix | Delete
*/
[3877] Fix | Delete
public static function runtime_speed_test($iterations, $maxTimeout)
[3878] Fix | Delete
{
[3879] Fix | Delete
if (self::polyfill_is_fast()) {
[3880] Fix | Delete
return true;
[3881] Fix | Delete
}
[3882] Fix | Delete
/** @var float $end */
[3883] Fix | Delete
$end = 0.0;
[3884] Fix | Delete
/** @var float $start */
[3885] Fix | Delete
$start = microtime(true);
[3886] Fix | Delete
/** @var ParagonIE_Sodium_Core32_Int64 $a */
[3887] Fix | Delete
$a = ParagonIE_Sodium_Core32_Int64::fromInt(random_int(3, 1 << 16));
[3888] Fix | Delete
for ($i = 0; $i < $iterations; ++$i) {
[3889] Fix | Delete
/** @var ParagonIE_Sodium_Core32_Int64 $b */
[3890] Fix | Delete
$b = ParagonIE_Sodium_Core32_Int64::fromInt(random_int(3, 1 << 16));
[3891] Fix | Delete
$a->mulInt64($b);
[3892] Fix | Delete
}
[3893] Fix | Delete
/** @var float $end */
[3894] Fix | Delete
$end = microtime(true);
[3895] Fix | Delete
/** @var int $diff */
[3896] Fix | Delete
$diff = (int) ceil(($end - $start) * 1000);
[3897] Fix | Delete
return $diff < $maxTimeout;
[3898] Fix | Delete
}
[3899] Fix | Delete
[3900] Fix | Delete
/**
[3901] Fix | Delete
* Add two numbers (little-endian unsigned), storing the value in the first
[3902] Fix | Delete
* parameter.
[3903] Fix | Delete
*
[3904] Fix | Delete
* This mutates $val.
[3905] Fix | Delete
*
[3906] Fix | Delete
* @param string $val
[3907] Fix | Delete
* @param string $addv
[3908] Fix | Delete
* @return void
[3909] Fix | Delete
* @throws SodiumException
[3910] Fix | Delete
*/
[3911] Fix | Delete
public static function sub(&$val, $addv)
[3912] Fix | Delete
{
[3913] Fix | Delete
$val_len = ParagonIE_Sodium_Core_Util::strlen($val);
[3914] Fix | Delete
$addv_len = ParagonIE_Sodium_Core_Util::strlen($addv);
[3915] Fix | Delete
if ($val_len !== $addv_len) {
[3916] Fix | Delete
throw new SodiumException('values must have the same length');
[3917] Fix | Delete
}
[3918] Fix | Delete
$A = ParagonIE_Sodium_Core_Util::stringToIntArray($val);
[3919] Fix | Delete
$B = ParagonIE_Sodium_Core_Util::stringToIntArray($addv);
[3920] Fix | Delete
[3921] Fix | Delete
$c = 0;
[3922] Fix | Delete
for ($i = 0; $i < $val_len; $i++) {
[3923] Fix | Delete
$c = ($A[$i] - $B[$i] - $c);
[3924] Fix | Delete
$A[$i] = ($c & 0xff);
[3925] Fix | Delete
$c = ($c >> 8) & 1;
[3926] Fix | Delete
}
[3927] Fix | Delete
$val = ParagonIE_Sodium_Core_Util::intArrayToString($A);
[3928] Fix | Delete
}
[3929] Fix | Delete
[3930] Fix | Delete
/**
[3931] Fix | Delete
* This emulates libsodium's version_string() function, except ours is
[3932] Fix | Delete
* prefixed with 'polyfill-'.
[3933] Fix | Delete
*
[3934] Fix | Delete
* @return string
[3935] Fix | Delete
* @psalm-suppress MixedInferredReturnType
[3936] Fix | Delete
* @psalm-suppress UndefinedFunction
[3937] Fix | Delete
*/
[3938] Fix | Delete
public static function version_string()
[3939] Fix | Delete
{
[3940] Fix | Delete
if (self::useNewSodiumAPI()) {
[3941] Fix | Delete
return (string) sodium_version_string();
[3942] Fix | Delete
}
[3943] Fix | Delete
if (self::use_fallback('version_string')) {
[3944] Fix | Delete
return (string) call_user_func('\\Sodium\\version_string');
[3945] Fix | Delete
}
[3946] Fix | Delete
return (string) self::VERSION_STRING;
[3947] Fix | Delete
}
[3948] Fix | Delete
[3949] Fix | Delete
/**
[3950] Fix | Delete
* Should we use the libsodium core function instead?
[3951] Fix | Delete
* This is always a good idea, if it's available. (Unless we're in the
[3952] Fix | Delete
* middle of running our unit test suite.)
[3953] Fix | Delete
*
[3954] Fix | Delete
* If ext/libsodium is available, use it. Return TRUE.
[3955] Fix | Delete
* Otherwise, we have to use the code provided herein. Return FALSE.
[3956] Fix | Delete
*
[3957] Fix | Delete
* @param string $sodium_func_name
[3958] Fix | Delete
*
[3959] Fix | Delete
* @return bool
[3960] Fix | Delete
*/
[3961] Fix | Delete
protected static function use_fallback($sodium_func_name = '')
[3962] Fix | Delete
{
[3963] Fix | Delete
static $res = null;
[3964] Fix | Delete
if ($res === null) {
[3965] Fix | Delete
$res = extension_loaded('libsodium') && PHP_VERSION_ID >= 50300;
[3966] Fix | Delete
}
[3967] Fix | Delete
if ($res === false) {
[3968] Fix | Delete
// No libsodium installed
[3969] Fix | Delete
return false;
[3970] Fix | Delete
}
[3971] Fix | Delete
if (self::$disableFallbackForUnitTests) {
[3972] Fix | Delete
// Don't fallback. Use the PHP implementation.
[3973] Fix | Delete
return false;
[3974] Fix | Delete
}
[3975] Fix | Delete
if (!empty($sodium_func_name)) {
[3976] Fix | Delete
return is_callable('\\Sodium\\' . $sodium_func_name);
[3977] Fix | Delete
}
[3978] Fix | Delete
return true;
[3979] Fix | Delete
}
[3980] Fix | Delete
[3981] Fix | Delete
/**
[3982] Fix | Delete
* Libsodium as implemented in PHP 7.2
[3983] Fix | Delete
* and/or ext/sodium (via PECL)
[3984] Fix | Delete
*
[3985] Fix | Delete
* @ref https://wiki.php.net/rfc/libsodium
[3986] Fix | Delete
* @return bool
[3987] Fix | Delete
*/
[3988] Fix | Delete
protected static function useNewSodiumAPI()
[3989] Fix | Delete
{
[3990] Fix | Delete
static $res = null;
[3991] Fix | Delete
if ($res === null) {
[3992] Fix | Delete
$res = PHP_VERSION_ID >= 70000 && extension_loaded('sodium');
[3993] Fix | Delete
}
[3994] Fix | Delete
if (self::$disableFallbackForUnitTests) {
[3995] Fix | Delete
// Don't fallback. Use the PHP implementation.
[3996] Fix | Delete
return false;
[3997] Fix | Delete
}
[3998] Fix | Delete
return (bool) $res;
[3999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function