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 / Crypt / RSA / Formats / Keys / PuTTY.php
backup / src / JetBackup / 3rdparty / phpseclib3 / Crypt / RSA / Formats / Keys Last commit date
.htaccess 9 months ago JWK.php 9 months ago MSBLOB.php 9 months ago OpenSSH.php 9 months ago PKCS1.php 9 months ago PKCS8.php 9 months ago PSS.php 9 months ago PuTTY.php 9 months ago Raw.php 9 months ago XML.php 9 months ago index.html 9 months ago web.config 9 months ago
PuTTY.php
112 lines
1 <?php
2
3 /**
4 * PuTTY Formatted RSA Key Handler
5 *
6 * PHP version 5
7 *
8 * @author Jim Wigginton <terrafrost@php.net>
9 * @copyright 2015 Jim Wigginton
10 * @license http://www.opensource.org/licenses/mit-license.html MIT License
11 * @link http://phpseclib.sourceforge.net
12 */
13
14 declare(strict_types=1);
15
16 namespace phpseclib3\Crypt\RSA\Formats\Keys;
17
18 use phpseclib3\Common\Functions\Strings;
19 use phpseclib3\Crypt\Common\Formats\Keys\PuTTY as Progenitor;
20 use phpseclib3\Exception\InvalidArgumentException;
21 use phpseclib3\Exception\UnexpectedValueException;
22 use phpseclib3\Math\BigInteger;
23
24 /**
25 * PuTTY Formatted RSA Key Handler
26 *
27 * @author Jim Wigginton <terrafrost@php.net>
28 */
29 abstract class PuTTY extends Progenitor
30 {
31 /**
32 * Public Handler
33 *
34 * @var string
35 */
36 public const PUBLIC_HANDLER = 'phpseclib3\Crypt\RSA\Formats\Keys\OpenSSH';
37
38 /**
39 * Algorithm Identifier
40 *
41 * @var array
42 */
43 protected static $types = ['ssh-rsa'];
44
45 /**
46 * Break a public or private key down into its constituent components
47 *
48 * @param array|string $key
49 * @param string|false $password
50 * @return array|false
51 */
52 public static function load($key, $password)
53 {
54 static $one;
55 if (!isset($one)) {
56 $one = new BigInteger(1);
57 }
58
59 $components = parent::load($key, $password);
60 if (!isset($components['private'])) {
61 return $components;
62 }
63 extract($components);
64 unset($components['public'], $components['private']);
65
66 $isPublicKey = false;
67
68 $result = Strings::unpackSSH2('ii', $public);
69 if ($result === false) {
70 throw new UnexpectedValueException('Key appears to be malformed');
71 }
72 [$publicExponent, $modulus] = $result;
73
74 $result = Strings::unpackSSH2('iiii', $private);
75 if ($result === false) {
76 throw new UnexpectedValueException('Key appears to be malformed');
77 }
78 $primes = $coefficients = [];
79 [$privateExponent, $primes[1], $primes[2], $coefficients[2]] = $result;
80
81 $temp = $primes[1]->subtract($one);
82 $exponents = [1 => $publicExponent->modInverse($temp)];
83 $temp = $primes[2]->subtract($one);
84 $exponents[] = $publicExponent->modInverse($temp);
85
86 return compact('publicExponent', 'modulus', 'privateExponent', 'primes', 'coefficients', 'exponents', 'comment', 'isPublicKey');
87 }
88
89 /**
90 * Convert a private key to the appropriate format.
91 */
92 public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, ?string $password = null, array $options = []): string
93 {
94 if (count($primes) != 2) {
95 throw new InvalidArgumentException('PuTTY does not support multi-prime RSA keys');
96 }
97
98 $public = Strings::packSSH2('ii', $e, $n);
99 $private = Strings::packSSH2('iiii', $d, $primes[1], $primes[2], $coefficients[2]);
100
101 return self::wrapPrivateKey($public, $private, 'ssh-rsa', $password, $options);
102 }
103
104 /**
105 * Convert a public key to the appropriate format
106 */
107 public static function savePublicKey(BigInteger $n, BigInteger $e): string
108 {
109 return self::wrapPublicKey(Strings::packSSH2('ii', $e, $n), 'ssh-rsa');
110 }
111 }
112