[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/ -> Base.php (source)

   1  <?php
   2  
   3  /**
   4   * Modular Exponentiation Engine
   5   *
   6   * PHP version 5 and 7
   7   *
   8   * @category  Math
   9   * @package   BigInteger
  10   * @author    Jim Wigginton <[email protected]>
  11   * @copyright 2017 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\Math\BigInteger\Engines\BCMath;
  17  
  18  use phpseclib3\Math\BigInteger\Engines\BCMath;
  19  
  20  /**
  21   * Sliding Window Exponentiation Engine
  22   *
  23   * @package PHP
  24   * @author  Jim Wigginton <[email protected]>
  25   * @access  public
  26   */
  27  abstract class Base extends BCMath
  28  {
  29      /**
  30       * Cache constants
  31       *
  32       * $cache[self::VARIABLE] tells us whether or not the cached data is still valid.
  33       *
  34       * @access private
  35       */
  36      const VARIABLE = 0;
  37      /**
  38       * $cache[self::DATA] contains the cached data.
  39       *
  40       * @access private
  41       */
  42      const DATA = 1;
  43  
  44      /**
  45       * Test for engine validity
  46       *
  47       * @return bool
  48       */
  49      public static function isValidEngine()
  50      {
  51          return static::class != __CLASS__;
  52      }
  53  
  54      /**
  55       * Performs modular exponentiation.
  56       *
  57       * @param BCMath $x
  58       * @param BCMath $e
  59       * @param BCMath $n
  60       * @param string $class
  61       * @return BCMath
  62       */
  63      protected static function powModHelper(BCMath $x, BCMath $e, BCMath $n, $class)
  64      {
  65          if (empty($e->value)) {
  66              $temp = new $class();
  67              $temp->value = '1';
  68              return $x->normalize($temp);
  69          }
  70  
  71          return $x->normalize(static::slidingWindow($x, $e, $n, $class));
  72      }
  73  
  74      /**
  75       * Modular reduction preparation
  76       *
  77       * @param string $x
  78       * @param string $n
  79       * @param string $class
  80       * @see self::slidingWindow()
  81       * @return string
  82       */
  83      protected static function prepareReduce($x, $n, $class)
  84      {
  85          return static::reduce($x, $n);
  86      }
  87  
  88      /**
  89       * Modular multiply
  90       *
  91       * @param string $x
  92       * @param string $y
  93       * @param string $n
  94       * @param string $class
  95       * @see self::slidingWindow()
  96       * @return string
  97       */
  98      protected static function multiplyReduce($x, $y, $n, $class)
  99      {
 100          return static::reduce(bcmul($x, $y), $n);
 101      }
 102  
 103      /**
 104       * Modular square
 105       *
 106       * @param string $x
 107       * @param string $n
 108       * @param string $class
 109       * @see self::slidingWindow()
 110       * @return string
 111       */
 112      protected static function squareReduce($x, $n, $class)
 113      {
 114          return static::reduce(bcmul($x, $x), $n);
 115      }
 116  }


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