--- a/wp/wp-includes/sodium_compat/src/Core/BLAKE2b.php Tue Oct 22 16:11:46 2019 +0200
+++ b/wp/wp-includes/sodium_compat/src/Core/BLAKE2b.php Tue Dec 15 13:49:49 2020 +0100
@@ -88,10 +88,10 @@
{
$l = ($x[1] + $y[1]) & 0xffffffff;
return self::new64(
- $x[0] + $y[0] + (
+ (int) ($x[0] + $y[0] + (
($l < $x[1]) ? 1 : 0
- ),
- $l
+ )),
+ (int) $l
);
}
@@ -132,8 +132,8 @@
throw new SodiumException('y[1] is not an integer');
}
return self::new64(
- (int) ($x[0] ^ $y[0]),
- (int) ($x[1] ^ $y[1])
+ (int) (($x[0] ^ $y[0]) & 0xffffffff),
+ (int) (($x[1] ^ $y[1]) & 0xffffffff)
);
}
@@ -299,12 +299,13 @@
*/
protected static function context()
{
- $ctx = new SplFixedArray(5);
+ $ctx = new SplFixedArray(6);
$ctx[0] = new SplFixedArray(8); // h
$ctx[1] = new SplFixedArray(2); // t
$ctx[2] = new SplFixedArray(2); // f
$ctx[3] = new SplFixedArray(256); // buf
$ctx[4] = 0; // buflen
+ $ctx[5] = 0; // last_node (uint8_t)
for ($i = 8; $i--;) {
$ctx[0][$i] = self::$iv[$i];
@@ -550,6 +551,8 @@
*
* @param SplFixedArray|null $key
* @param int $outlen
+ * @param SplFixedArray|null $salt
+ * @param SplFixedArray|null $personal
* @return SplFixedArray
* @throws SodiumException
* @throws TypeError
@@ -559,8 +562,12 @@
* @psalm-suppress MixedArrayAssignment
* @psalm-suppress MixedArrayOffset
*/
- public static function init($key = null, $outlen = 64)
- {
+ public static function init(
+ $key = null,
+ $outlen = 64,
+ $salt = null,
+ $personal = null
+ ) {
self::pseudoConstructor();
$klen = 0;
@@ -578,6 +585,7 @@
$ctx = self::context();
$p = new SplFixedArray(64);
+ // Zero our param buffer...
for ($i = 64; --$i;) {
$p[$i] = 0;
}
@@ -587,10 +595,32 @@
$p[2] = 1; // fanout
$p[3] = 1; // depth
+ if ($salt instanceof SplFixedArray) {
+ // salt: [32] through [47]
+ for ($i = 0; $i < 16; ++$i) {
+ $p[32 + $i] = (int) $salt[$i];
+ }
+ }
+ if ($personal instanceof SplFixedArray) {
+ // personal: [48] through [63]
+ for ($i = 0; $i < 16; ++$i) {
+ $p[48 + $i] = (int) $personal[$i];
+ }
+ }
+
$ctx[0][0] = self::xor64(
$ctx[0][0],
self::load64($p, 0)
);
+ if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) {
+ // We need to do what blake2b_init_param() does:
+ for ($i = 1; $i < 8; ++$i) {
+ $ctx[0][$i] = self::xor64(
+ $ctx[0][$i],
+ self::load64($p, $i << 3)
+ );
+ }
+ }
if ($klen > 0 && $key instanceof SplFixedArray) {
$block = new SplFixedArray(128);
@@ -601,6 +631,7 @@
$block[$i] = $key[$i];
}
self::update($ctx, $block, 128);
+ $ctx[4] = 128;
}
return $ctx;
@@ -693,7 +724,7 @@
self::intToChr(($ctx4 >> 56) & 0xff)
));
# uint8_t last_node;
- return $str . "\x00";
+ return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23);
}
/**
@@ -746,7 +777,6 @@
# uint8_t buf[2 * 128];
$ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256));
-
# uint8_t buf[2 * 128];
$int = 0;
for ($i = 0; $i < 8; ++$i) {