: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
if (class_exists('ParagonIE_Sodium_Core32_SipHash', false)) {
* Class ParagonIE_SodiumCompat_Core32_SipHash
* Only uses 32-bit arithmetic, while the original SipHash used 64-bit integers
class ParagonIE_Sodium_Core32_SipHash extends ParagonIE_Sodium_Core32_Util
* @internal You should not use this directly from another application
* @param array<int, ParagonIE_Sodium_Core32_Int64> $v
* @return array<int, ParagonIE_Sodium_Core32_Int64>
public static function sipRound(array $v)
$v[0] = $v[0]->addInt64($v[1]);
$v[1] = $v[1]->rotateLeft(13);
$v[1] = $v[1]->xorInt64($v[0]);
$v[0] = $v[0]->rotateLeft(32);
$v[2] = $v[2]->addInt64($v[3]);
$v[3] = $v[3]->rotateLeft(16);
$v[3] = $v[3]->xorInt64($v[2]);
$v[0] = $v[0]->addInt64($v[3]);
$v[3] = $v[3]->rotateLeft(21);
$v[3] = $v[3]->xorInt64($v[0]);
$v[2] = $v[2]->addInt64($v[1]);
$v[1] = $v[1]->rotateLeft(17);
$v[1] = $v[1]->xorInt64($v[2]);
$v[2] = $v[2]->rotateLeft(32);
* @internal You should not use this directly from another application
* @throws SodiumException
public static function sipHash24($in, $key)
$inlen = self::strlen($in);
# /* "somepseudorandomlygeneratedbytes" */
# u64 v0 = 0x736f6d6570736575ULL;
# u64 v1 = 0x646f72616e646f6dULL;
# u64 v2 = 0x6c7967656e657261ULL;
# u64 v3 = 0x7465646279746573ULL;
new ParagonIE_Sodium_Core32_Int64(
array(0x736f, 0x6d65, 0x7073, 0x6575)
new ParagonIE_Sodium_Core32_Int64(
array(0x646f, 0x7261, 0x6e64, 0x6f6d)
new ParagonIE_Sodium_Core32_Int64(
array(0x6c79, 0x6765, 0x6e65, 0x7261)
new ParagonIE_Sodium_Core32_Int64(
array(0x7465, 0x6462, 0x7974, 0x6573)
# u64 k0 = LOAD64_LE( k );
# u64 k1 = LOAD64_LE( k + 8 );
ParagonIE_Sodium_Core32_Int64::fromReverseString(
ParagonIE_Sodium_Core32_Int64::fromReverseString(
# b = ( ( u64 )inlen ) << 56;
$b = new ParagonIE_Sodium_Core32_Int64(
array(($inlen << 8) & 0xffff, 0, 0, 0)
$v[3] = $v[3]->xorInt64($k[1]);
$v[2] = $v[2]->xorInt64($k[0]);
$v[1] = $v[1]->xorInt64($k[1]);
$v[0] = $v[0]->xorInt64($k[0]);
# for ( ; in != end; in += 8 )
$m = ParagonIE_Sodium_Core32_Int64::fromReverseString(
$v[3] = $v[3]->xorInt64($m);
$v[0] = $v[0]->xorInt64($m);
$in = self::substr($in, 8);
# case 7: b |= ( ( u64 )in[ 6] ) << 48;
# case 6: b |= ( ( u64 )in[ 5] ) << 40;
# case 5: b |= ( ( u64 )in[ 4] ) << 32;
# case 4: b |= ( ( u64 )in[ 3] ) << 24;
# case 3: b |= ( ( u64 )in[ 2] ) << 16;
# case 2: b |= ( ( u64 )in[ 1] ) << 8;
# case 1: b |= ( ( u64 )in[ 0] ); break;
ParagonIE_Sodium_Core32_Int64::fromInts(
0, self::chrToInt($in[6]) << 16
ParagonIE_Sodium_Core32_Int64::fromInts(
0, self::chrToInt($in[5]) << 8
ParagonIE_Sodium_Core32_Int64::fromInts(
0, self::chrToInt($in[4])
ParagonIE_Sodium_Core32_Int64::fromInts(
self::chrToInt($in[3]) << 24, 0
ParagonIE_Sodium_Core32_Int64::fromInts(
self::chrToInt($in[2]) << 16, 0
ParagonIE_Sodium_Core32_Int64::fromInts(
self::chrToInt($in[1]) << 8, 0
ParagonIE_Sodium_Core32_Int64::fromInts(
self::chrToInt($in[0]), 0
$v[3] = $v[3]->xorInt64($b);
$v[0] = $v[0]->xorInt64($b);
// Flip the lower 8 bits of v2 which is ($v[4], $v[5]) in our implementation