WordPress.org

Make WordPress Core


Ignore:
Timestamp:
12/09/2019 04:44:58 PM (15 months ago)
Author:
SergeyBiryukov
Message:

Upgrade/Install: Update sodium_compat to v1.12.1.

This includes a speedup for signature verification on most platforms and bugfixes for 32-bit platforms.

Props paragoninitiativeenterprises, lukaswaudentio.
Merges [46858] to the 5.3 branch.
Fixes #48371.

Location:
branches/5.3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/5.3

  • branches/5.3/src/wp-includes/sodium_compat/src/Core32/BLAKE2b.php

    r45344 r46859  
    224224    protected static function context()
    225225    {
    226         $ctx    = new SplFixedArray(5);
     226        $ctx    = new SplFixedArray(6);
    227227        $ctx[0] = new SplFixedArray(8);   // h
    228228        $ctx[1] = new SplFixedArray(2);   // t
     
    230230        $ctx[3] = new SplFixedArray(256); // buf
    231231        $ctx[4] = 0;                      // buflen
     232        $ctx[5] = 0;                      // last_node (uint8_t)
    232233
    233234        for ($i = 8; $i--;) {
     
    483484     * @param SplFixedArray|null $key
    484485     * @param int $outlen
     486     * @param SplFixedArray|null $salt
     487     * @param SplFixedArray|null $personal
    485488     * @return SplFixedArray
    486489     * @throws SodiumException
     
    492495     * @psalm-suppress MixedMethodCall
    493496     */
    494     public static function init($key = null, $outlen = 64)
    495     {
     497    public static function init(
     498        $key = null,
     499        $outlen = 64,
     500        $salt = null,
     501        $personal = null
     502    ) {
    496503        self::pseudoConstructor();
    497504        $klen = 0;
     
    511518
    512519        $p = new SplFixedArray(64);
     520        // Zero our param buffer...
    513521        for ($i = 64; --$i;) {
    514522            $p[$i] = 0;
     
    520528        $p[3] = 1;       // depth
    521529
     530        if ($salt instanceof SplFixedArray) {
     531            // salt: [32] through [47]
     532            for ($i = 0; $i < 16; ++$i) {
     533                $p[32 + $i] = (int) $salt[$i];
     534            }
     535        }
     536        if ($personal instanceof SplFixedArray) {
     537            // personal: [48] through [63]
     538            for ($i = 0; $i < 16; ++$i) {
     539                $p[48 + $i] = (int) $personal[$i];
     540            }
     541        }
     542
    522543        $ctx[0][0] = self::xor64(
    523544            $ctx[0][0],
     
    525546        );
    526547
     548        if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) {
     549            // We need to do what blake2b_init_param() does:
     550            for ($i = 1; $i < 8; ++$i) {
     551                $ctx[0][$i] = self::xor64(
     552                    $ctx[0][$i],
     553                    self::load64($p, $i << 3)
     554                );
     555            }
     556        }
     557
    527558        if ($klen > 0 && $key instanceof SplFixedArray) {
    528559            $block = new SplFixedArray(128);
     
    534565            }
    535566            self::update($ctx, $block, 128);
     567            $ctx[4] = 128;
    536568        }
    537569
     
    596628            /** @var ParagonIE_Sodium_Core32_Int64 $ctxAi */
    597629            $ctxAi = $ctxA[$i];
    598             $str .= $ctxAi->toString();
     630            $str .= $ctxAi->toReverseString();
    599631        }
    600632
     
    609641            $ctxA2 = $ctxA[1];
    610642
    611             $str .= $ctxA1->toString();
    612             $str .= $ctxA2->toString();
     643            $str .= $ctxA1->toReverseString();
     644            $str .= $ctxA2->toReverseString();
    613645        }
    614646
     
    625657            self::intToChr(($ctx4 >> 16) & 0xff),
    626658            self::intToChr(($ctx4 >> 24) & 0xff),
     659            "\x00\x00\x00\x00"
     660            /*
    627661            self::intToChr(($ctx4 >> 32) & 0xff),
    628662            self::intToChr(($ctx4 >> 40) & 0xff),
    629663            self::intToChr(($ctx4 >> 48) & 0xff),
    630664            self::intToChr(($ctx4 >> 56) & 0xff)
     665            */
    631666        ));
    632667        # uint8_t last_node;
    633         return $str . "\x00";
     668        return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23);
    634669    }
    635670
     
    653688        # uint64_t h[8];
    654689        for ($i = 0; $i < 8; ++$i) {
    655             $ctx[0][$i] = ParagonIE_Sodium_Core32_Int64::fromString(
     690            $ctx[0][$i] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
    656691                self::substr($string, (($i << 3) + 0), 8)
    657692            );
     
    661696        # uint64_t f[2];
    662697        for ($i = 1; $i < 3; ++$i) {
    663             $ctx[$i][1] = ParagonIE_Sodium_Core32_Int64::fromString(
     698            $ctx[$i][1] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
    664699                self::substr($string, 72 + (($i - 1) << 4), 8)
    665700            );
    666             $ctx[$i][0] = ParagonIE_Sodium_Core32_Int64::fromString(
     701            $ctx[$i][0] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
    667702                self::substr($string, 64 + (($i - 1) << 4), 8)
    668703            );
     
    671706        # uint8_t buf[2 * 128];
    672707        $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256));
    673 
    674708
    675709        # uint8_t buf[2 * 128];
Note: See TracChangeset for help on using the changeset viewer.