Rev 846 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
827 | daniel-mar | 1 | <?php |
2 | |||
3 | /** |
||
4 | * PHP Power of Two Modular Exponentiation Engine |
||
5 | * |
||
6 | * PHP version 5 and 7 |
||
7 | * |
||
874 | daniel-mar | 8 | * @category Math |
9 | * @package BigInteger |
||
827 | daniel-mar | 10 | * @author Jim Wigginton <terrafrost@php.net> |
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\PHP\Reductions; |
||
17 | |||
18 | use phpseclib3\Math\BigInteger\Engines\PHP\Base; |
||
19 | |||
20 | /** |
||
21 | * PHP Power Of Two Modular Exponentiation Engine |
||
22 | * |
||
874 | daniel-mar | 23 | * @package PHP |
827 | daniel-mar | 24 | * @author Jim Wigginton <terrafrost@php.net> |
874 | daniel-mar | 25 | * @access public |
827 | daniel-mar | 26 | */ |
27 | abstract class PowerOfTwo extends Base |
||
28 | { |
||
29 | /** |
||
30 | * Prepare a number for use in Montgomery Modular Reductions |
||
31 | * |
||
32 | * @param array $x |
||
33 | * @param array $n |
||
34 | * @param string $class |
||
35 | * @return array |
||
36 | */ |
||
37 | protected static function prepareReduce(array $x, array $n, $class) |
||
38 | { |
||
39 | return self::reduce($x, $n, $class); |
||
40 | } |
||
41 | |||
42 | /** |
||
43 | * Power Of Two Reduction |
||
44 | * |
||
45 | * @param array $x |
||
46 | * @param array $n |
||
47 | * @param string $class |
||
48 | * @return array |
||
49 | */ |
||
50 | protected static function reduce(array $x, array $n, $class) |
||
51 | { |
||
52 | $lhs = new $class(); |
||
53 | $lhs->value = $x; |
||
54 | $rhs = new $class(); |
||
55 | $rhs->value = $n; |
||
56 | |||
57 | $temp = new $class(); |
||
58 | $temp->value = [1]; |
||
59 | |||
60 | $result = $lhs->bitwise_and($rhs->subtract($temp)); |
||
61 | return $result->value; |
||
62 | } |
||
63 | } |