"Fossies" - the Fresh Open Source Software Archive

Member "wordpress/wp-includes/sodium_compat/src/Core/HChaCha20.php" (21 Mar 2019, 3871 Bytes) of package /linux/www/wordpress-5.7-RC1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) PHP source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "HChaCha20.php" see the Fossies "Dox" file reference documentation.

    1 <?php
    2 
    3 if (class_exists('ParagonIE_Sodium_Core_HChaCha20', false)) {
    4     return;
    5 }
    6 
    7 /**
    8  * Class ParagonIE_Sodium_Core_HChaCha20
    9  */
   10 class ParagonIE_Sodium_Core_HChaCha20 extends ParagonIE_Sodium_Core_ChaCha20
   11 {
   12     /**
   13      * @param string $in
   14      * @param string $key
   15      * @param string|null $c
   16      * @return string
   17      * @throws TypeError
   18      */
   19     public static function hChaCha20($in = '', $key = '', $c = null)
   20     {
   21         $ctx = array();
   22 
   23         if ($c === null) {
   24             $ctx[0] = 0x61707865;
   25             $ctx[1] = 0x3320646e;
   26             $ctx[2] = 0x79622d32;
   27             $ctx[3] = 0x6b206574;
   28         } else {
   29             $ctx[0] = self::load_4(self::substr($c,  0, 4));
   30             $ctx[1] = self::load_4(self::substr($c,  4, 4));
   31             $ctx[2] = self::load_4(self::substr($c,  8, 4));
   32             $ctx[3] = self::load_4(self::substr($c, 12, 4));
   33         }
   34         $ctx[4]  = self::load_4(self::substr($key,  0, 4));
   35         $ctx[5]  = self::load_4(self::substr($key,  4, 4));
   36         $ctx[6]  = self::load_4(self::substr($key,  8, 4));
   37         $ctx[7]  = self::load_4(self::substr($key, 12, 4));
   38         $ctx[8]  = self::load_4(self::substr($key, 16, 4));
   39         $ctx[9]  = self::load_4(self::substr($key, 20, 4));
   40         $ctx[10] = self::load_4(self::substr($key, 24, 4));
   41         $ctx[11] = self::load_4(self::substr($key, 28, 4));
   42         $ctx[12] = self::load_4(self::substr($in,   0, 4));
   43         $ctx[13] = self::load_4(self::substr($in,   4, 4));
   44         $ctx[14] = self::load_4(self::substr($in,   8, 4));
   45         $ctx[15] = self::load_4(self::substr($in,  12, 4));
   46         return self::hChaCha20Bytes($ctx);
   47     }
   48 
   49     /**
   50      * @param array $ctx
   51      * @return string
   52      * @throws TypeError
   53      */
   54     protected static function hChaCha20Bytes(array $ctx)
   55     {
   56         $x0  = (int) $ctx[0];
   57         $x1  = (int) $ctx[1];
   58         $x2  = (int) $ctx[2];
   59         $x3  = (int) $ctx[3];
   60         $x4  = (int) $ctx[4];
   61         $x5  = (int) $ctx[5];
   62         $x6  = (int) $ctx[6];
   63         $x7  = (int) $ctx[7];
   64         $x8  = (int) $ctx[8];
   65         $x9  = (int) $ctx[9];
   66         $x10 = (int) $ctx[10];
   67         $x11 = (int) $ctx[11];
   68         $x12 = (int) $ctx[12];
   69         $x13 = (int) $ctx[13];
   70         $x14 = (int) $ctx[14];
   71         $x15 = (int) $ctx[15];
   72 
   73         for ($i = 0; $i < 10; ++$i) {
   74             # QUARTERROUND( x0,  x4,  x8,  x12)
   75             list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12);
   76 
   77             # QUARTERROUND( x1,  x5,  x9,  x13)
   78             list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13);
   79 
   80             # QUARTERROUND( x2,  x6,  x10,  x14)
   81             list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14);
   82 
   83             # QUARTERROUND( x3,  x7,  x11,  x15)
   84             list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15);
   85 
   86             # QUARTERROUND( x0,  x5,  x10,  x15)
   87             list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15);
   88 
   89             # QUARTERROUND( x1,  x6,  x11,  x12)
   90             list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12);
   91 
   92             # QUARTERROUND( x2,  x7,  x8,  x13)
   93             list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13);
   94 
   95             # QUARTERROUND( x3,  x4,  x9,  x14)
   96             list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14);
   97         }
   98 
   99         return self::store32_le((int) ($x0  & 0xffffffff)) .
  100             self::store32_le((int) ($x1  & 0xffffffff)) .
  101             self::store32_le((int) ($x2  & 0xffffffff)) .
  102             self::store32_le((int) ($x3  & 0xffffffff)) .
  103             self::store32_le((int) ($x12 & 0xffffffff)) .
  104             self::store32_le((int) ($x13 & 0xffffffff)) .
  105             self::store32_le((int) ($x14 & 0xffffffff)) .
  106             self::store32_le((int) ($x15 & 0xffffffff));
  107     }
  108 }