[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/ -> Curve25519.php (source)

   1  <?php
   2  
   3  /**
   4   * Curve25519
   5   *
   6   * PHP version 5 and 7
   7   *
   8   * @category  Crypt
   9   * @package   EC
  10   * @author    Jim Wigginton <[email protected]>
  11   * @copyright 2019 Jim Wigginton
  12   * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  13   * @link      http://pear.php.net/package/Math_BigInteger
  14   */
  15  
  16  namespace phpseclib3\Crypt\EC\Curves;
  17  
  18  use phpseclib3\Crypt\EC\BaseCurves\Montgomery;
  19  use phpseclib3\Math\BigInteger;
  20  
  21  class Curve25519 extends Montgomery
  22  {
  23      public function __construct()
  24      {
  25          // 2^255 - 19
  26          $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED', 16));
  27          $this->a24 = $this->factory->newInteger(new BigInteger('121666'));
  28          $this->p = [$this->factory->newInteger(new BigInteger(9))];
  29          // 2^252 + 0x14def9dea2f79cd65812631a5cf5d3ed
  30          $this->setOrder(new BigInteger('1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED', 16));
  31  
  32          /*
  33          $this->setCoefficients(
  34              new BigInteger('486662'), // a
  35          );
  36          $this->setBasePoint(
  37              new BigInteger(9),
  38              new BigInteger('14781619447589544791020593568409986887264606134616475288964881837755586237401')
  39          );
  40          */
  41      }
  42  
  43      /**
  44       * Multiply a point on the curve by a scalar
  45       *
  46       * Modifies the scalar as described at https://tools.ietf.org/html/rfc7748#page-8
  47       *
  48       * @return array
  49       */
  50      public function multiplyPoint(array $p, BigInteger $d)
  51      {
  52          //$r = strrev(sodium_crypto_scalarmult($d->toBytes(), strrev($p[0]->toBytes())));
  53          //return [$this->factory->newInteger(new BigInteger($r, 256))];
  54  
  55          $d = $d->toBytes();
  56          $d &= "\xF8" . str_repeat("\xFF", 30) . "\x7F";
  57          $d = strrev($d);
  58          $d |= "\x40";
  59          $d = new BigInteger($d, -256);
  60  
  61          return parent::multiplyPoint($p, $d);
  62      }
  63  
  64      /**
  65       * Creates a random scalar multiplier
  66       *
  67       * @return BigInteger
  68       */
  69      public function createRandomMultiplier()
  70      {
  71          return BigInteger::random(256);
  72      }
  73  
  74      /**
  75       * Performs range check
  76       */
  77      public function rangeCheck(BigInteger $x)
  78      {
  79          if ($x->getLength() > 256 || $x->isNegative()) {
  80              throw new \RangeException('x must be a positive integer less than 256 bytes in length');
  81          }
  82      }
  83  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer