PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / 3.1.13.4
JetBackup – Backup, Restore & Migrate v3.1.13.4
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 9 months ago GMP 9 months ago PHP 9 months ago .htaccess 9 months ago BCMath.php 9 months ago Engine.php 9 months ago GMP.php 9 months ago OpenSSL.php 9 months ago PHP.php 9 months ago PHP32.php 9 months ago PHP64.php 9 months ago index.html 9 months ago web.config 9 months 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