PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / trunk
JetBackup – Backup, Restore & Migrate vtrunk
3.1.22.4 3.1.22.3 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.8.1 1.4.9 1.5.0 1.5.1 1.5.1.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.10 1.6.11 1.6.12 1.6.13 1.6.15 1.6.5.1 1.6.8.8 1.6.9 1.6.9.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7.5 2.0.8.7 2.0.9.11 2.0.9.14 2.0.9.15 2.0.9.6 2.0.9.7 2.0.9.9 3.1.10.7 3.1.11.1 3.1.12.3 3.1.13.4 3.1.14.17 3.1.15.4 3.1.16.1 3.1.17.5 3.1.18.10 3.1.18.8 3.1.18.9 3.1.19.8 3.1.20.3 3.1.21.3 3.1.7.9 3.1.9.2 trunk 1.1.90 1.1.91 1.2.0 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2
backup / src / JetBackup / 3rdparty / phpseclib3 / Math / BigInteger / Engines / OpenSSL.php
backup / src / JetBackup / 3rdparty / phpseclib3 / Math / BigInteger / Engines Last commit date
BCMath 1 year ago GMP 1 year ago PHP 1 year ago .htaccess 1 year ago BCMath.php 1 year ago Engine.php 1 year ago GMP.php 1 year ago OpenSSL.php 1 year ago PHP.php 1 year ago PHP32.php 1 year ago PHP64.php 1 year ago index.html 1 year ago web.config 1 year ago
OpenSSL.php
66 lines
1 <?php
2
3 /**
4 * OpenSSL Modular Exponentiation Engine
5 *
6 * PHP version 5 and 7
7 *
8 * @author Jim Wigginton <terrafrost@php.net>
9 * @copyright 2017 Jim Wigginton
10 * @license http://www.opensource.org/licenses/mit-license.html MIT License
11 * @link http://pear.php.net/package/Math_BigInteger
12 */
13
14 declare(strict_types=1);
15
16 namespace phpseclib3\Math\BigInteger\Engines;
17
18 use phpseclib3\Crypt\RSA\Formats\Keys\PKCS8;
19 use phpseclib3\Exception\OutOfRangeException;
20 use phpseclib3\Exception\UnexpectedValueException;
21 use phpseclib3\Math\BigInteger;
22
23 /**
24 * OpenSSL Modular Exponentiation Engine
25 *
26 * @author Jim Wigginton <terrafrost@php.net>
27 */
28 abstract class OpenSSL
29 {
30 /**
31 * Test for engine validity
32 */
33 public static function isValidEngine(): bool
34 {
35 return extension_loaded('openssl') && static::class != __CLASS__;
36 }
37
38 /**
39 * Performs modular exponentiation.
40 */
41 public static function powModHelper(Engine $x, Engine $e, Engine $n): Engine
42 {
43 if ($n->getLengthInBytes() < 31 || $n->getLengthInBytes() > 16384) {
44 throw new OutOfRangeException('Only modulo between 31 and 16384 bits are accepted');
45 }
46
47 $key = PKCS8::savePublicKey(
48 new BigInteger($n),
49 new BigInteger($e)
50 );
51
52 $plaintext = str_pad($x->toBytes(), $n->getLengthInBytes(), "\0", STR_PAD_LEFT);
53
54 // this is easily prone to failure. if the modulo is a multiple of 2 or 3 or whatever it
55 // won't work and you'll get a "failure: error:0906D06C:PEM routines:PEM_read_bio:no start line"
56 // error. i suppose, for even numbers, we could do what PHP\Montgomery.php does, but then what
57 // about odd numbers divisible by 3, by 5, etc?
58 if (!openssl_public_encrypt($plaintext, $result, $key, OPENSSL_NO_PADDING)) {
59 throw new UnexpectedValueException(openssl_error_string());
60 }
61
62 $class = $x::class;
63 return new $class($result, 256);
64 }
65 }
66