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 / libsodium.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
libsodium.php
109 lines
1 <?php
2
3 /**
4 * libsodium Key Handler
5 *
6 * Different NaCl implementations store the key differently.
7 * https://blog.mozilla.org/warner/2011/11/29/ed25519-keys/ elaborates.
8 * libsodium appears to use the same format as SUPERCOP.
9 *
10 * PHP version 5
11 *
12 * @author Jim Wigginton <terrafrost@php.net>
13 * @copyright 2015 Jim Wigginton
14 * @license http://www.opensource.org/licenses/mit-license.html MIT License
15 * @link http://phpseclib.sourceforge.net
16 */
17
18 declare(strict_types=1);
19
20 namespace phpseclib3\Crypt\EC\Formats\Keys;
21
22 use phpseclib3\Crypt\EC\Curves\Ed25519;
23 use phpseclib3\Exception\RuntimeException;
24 use phpseclib3\Exception\UnsupportedFormatException;
25 use phpseclib3\Math\BigInteger;
26 use phpseclib3\Math\Common\FiniteField\Integer;
27
28 /**
29 * libsodium Key Handler
30 *
31 * @author Jim Wigginton <terrafrost@php.net>
32 */
33 abstract class libsodium
34 {
35 use Common;
36
37 /**
38 * Is invisible flag
39 */
40 public const IS_INVISIBLE = true;
41
42 /**
43 * Break a public or private key down into its constituent components
44 */
45 public static function load(string $key, ?string $password = null): array
46 {
47 switch (strlen($key)) {
48 case 32:
49 $public = $key;
50 break;
51 case 64:
52 $private = substr($key, 0, 32);
53 $public = substr($key, -32);
54 break;
55 case 96:
56 $public = substr($key, -32);
57 if (substr($key, 32, 32) != $public) {
58 throw new RuntimeException('Keys with 96 bytes should have the 2nd and 3rd set of 32 bytes match');
59 }
60 $private = substr($key, 0, 32);
61 break;
62 default:
63 throw new RuntimeException('libsodium keys need to either be 32 bytes long, 64 bytes long or 96 bytes long');
64 }
65
66 $curve = new Ed25519();
67 $components = ['curve' => $curve];
68 if (isset($private)) {
69 $arr = $curve->extractSecret($private);
70 $components['dA'] = $arr['dA'];
71 $components['secret'] = $arr['secret'];
72 }
73 $components['QA'] = isset($public) ?
74 self::extractPoint($public, $curve) :
75 $curve->multiplyPoint($curve->getBasePoint(), $components['dA']);
76
77 return $components;
78 }
79
80 /**
81 * Convert an EC public key to the appropriate format
82 *
83 * @param Integer[] $publicKey
84 */
85 public static function savePublicKey(Ed25519 $curve, array $publicKey): string
86 {
87 return $curve->encodePoint($publicKey);
88 }
89
90 /**
91 * Convert a private key to the appropriate format.
92 *
93 * @param Integer[] $publicKey
94 */
95 public static function savePrivateKey(BigInteger $privateKey, Ed25519 $curve, array $publicKey, ?string $secret = null, ?string $password = null): string
96 {
97 if (!isset($secret)) {
98 throw new RuntimeException('Private Key does not have a secret set');
99 }
100 if (strlen($secret) != 32) {
101 throw new RuntimeException('Private Key secret is not of the correct length');
102 }
103 if (!empty($password) && is_string($password)) {
104 throw new UnsupportedFormatException('libsodium private keys do not support encryption');
105 }
106 return $secret . $curve->encodePoint($publicKey);
107 }
108 }
109