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 / Crypt / EC / Formats / Keys / MontgomeryPrivate.php
backup / src / JetBackup / 3rdparty / phpseclib3 / Crypt / EC / Formats / Keys Last commit date
.htaccess 1 year ago Common.php 1 year ago JWK.php 1 year ago MontgomeryPrivate.php 1 year ago MontgomeryPublic.php 1 year ago OpenSSH.php 1 year ago PKCS1.php 1 year ago PKCS8.php 1 year ago PuTTY.php 1 year ago XML.php 1 year ago index.html 1 year ago libsodium.php 1 year ago web.config 1 year ago
MontgomeryPrivate.php
94 lines
1 <?php
2
3 /**
4 * Montgomery Private Key Handler
5 *
6 * "Naked" Curve25519 private keys can pretty much be any sequence of random 32x bytes so unless
7 * we have a "hidden" key handler pretty much every 32 byte string will be loaded as a curve25519
8 * private key even if it probably isn't one by PublicKeyLoader.
9 *
10 * "Naked" Curve25519 public keys also a string of 32 bytes so distinguishing between a "naked"
11 * curve25519 private key and a public key is nigh impossible, hence separate plugins for each
12 *
13 * PHP version 5
14 *
15 * @author Jim Wigginton <terrafrost@php.net>
16 * @copyright 2015 Jim Wigginton
17 * @license http://www.opensource.org/licenses/mit-license.html MIT License
18 * @link http://phpseclib.sourceforge.net
19 */
20
21 declare(strict_types=1);
22
23 namespace phpseclib3\Crypt\EC\Formats\Keys;
24
25 use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
26 use phpseclib3\Crypt\EC\Curves\Curve25519;
27 use phpseclib3\Crypt\EC\Curves\Curve448;
28 use phpseclib3\Exception\LengthException;
29 use phpseclib3\Exception\UnsupportedFormatException;
30 use phpseclib3\Math\BigInteger;
31 use phpseclib3\Math\Common\FiniteField\Integer;
32
33 /**
34 * Montgomery Curve Private Key Handler
35 *
36 * @author Jim Wigginton <terrafrost@php.net>
37 */
38 abstract class MontgomeryPrivate
39 {
40 /**
41 * Is invisible flag
42 */
43 public const IS_INVISIBLE = true;
44
45 /**
46 * Break a public or private key down into its constituent components
47 */
48 public static function load(string $key, ?string $password = null): array
49 {
50 switch (strlen($key)) {
51 case 32:
52 $curve = new Curve25519();
53 break;
54 case 56:
55 $curve = new Curve448();
56 break;
57 default:
58 throw new LengthException('The only supported lengths are 32 and 56');
59 }
60
61 $components = ['curve' => $curve];
62 $components['dA'] = new BigInteger($key, 256);
63 $curve->rangeCheck($components['dA']);
64 // note that EC::getEncodedCoordinates does some additional "magic" (it does strrev on the result)
65 $components['QA'] = $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);
66
67 return $components;
68 }
69
70 /**
71 * Convert an EC public key to the appropriate format
72 *
73 * @param Integer[] $publicKey
74 */
75 public static function savePublicKey(MontgomeryCurve $curve, array $publicKey): string
76 {
77 return strrev($publicKey[0]->toBytes());
78 }
79
80 /**
81 * Convert a private key to the appropriate format.
82 *
83 * @param Integer[] $publicKey
84 */
85 public static function savePrivateKey(BigInteger $privateKey, MontgomeryCurve $curve, array $publicKey, ?string $password = null): string
86 {
87 if (!empty($password) && is_string($password)) {
88 throw new UnsupportedFormatException('MontgomeryPrivate private keys do not support encryption');
89 }
90
91 return $privateKey->toBytes();
92 }
93 }
94