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 / DSA / PublicKey.php
backup / src / JetBackup / 3rdparty / phpseclib3 / Crypt / DSA Last commit date
Formats 9 months ago .htaccess 9 months ago Parameters.php 9 months ago PrivateKey.php 9 months ago PublicKey.php 9 months ago index.html 9 months ago web.config 9 months ago
PublicKey.php
86 lines
1 <?php
2
3 /**
4 * DSA Public Key
5 *
6 * @author Jim Wigginton <terrafrost@php.net>
7 * @copyright 2015 Jim Wigginton
8 * @license http://www.opensource.org/licenses/mit-license.html MIT License
9 * @link http://phpseclib.sourceforge.net
10 */
11
12 declare(strict_types=1);
13
14 namespace phpseclib3\Crypt\DSA;
15
16 use phpseclib3\Crypt\Common;
17 use phpseclib3\Crypt\DSA;
18 use phpseclib3\Crypt\DSA\Formats\Signature\ASN1 as ASN1Signature;
19
20 /**
21 * DSA Public Key
22 *
23 * @author Jim Wigginton <terrafrost@php.net>
24 */
25 final class PublicKey extends DSA implements Common\PublicKey
26 {
27 use Common\Traits\Fingerprint;
28
29 /**
30 * Verify a signature
31 *
32 * @see self::verify()
33 * @param string $message
34 * @param string $signature
35 */
36 public function verify($message, $signature): bool
37 {
38 $format = $this->sigFormat;
39
40 $params = $format::load($signature);
41 if ($params === false || count($params) != 2) {
42 return false;
43 }
44 extract($params);
45
46 if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
47 $sig = $format != 'ASN1' ? ASN1Signature::save($r, $s) : $signature;
48
49 $result = openssl_verify($message, $sig, $this->toString('PKCS8'), $this->hash->getHash());
50
51 if ($result != -1) {
52 return (bool) $result;
53 }
54 }
55
56 $q_1 = $this->q->subtract(self::$one);
57 if (!$r->between(self::$one, $q_1) || !$s->between(self::$one, $q_1)) {
58 return false;
59 }
60
61 $w = $s->modInverse($this->q);
62 $h = $this->hash->hash($message);
63 $h = $this->bits2int($h);
64 [, $u1] = $h->multiply($w)->divide($this->q);
65 [, $u2] = $r->multiply($w)->divide($this->q);
66 $v1 = $this->g->powMod($u1, $this->p);
67 $v2 = $this->y->powMod($u2, $this->p);
68 [, $v] = $v1->multiply($v2)->divide($this->p);
69 [, $v] = $v->divide($this->q);
70
71 return $v->equals($r);
72 }
73
74 /**
75 * Returns the public key
76 *
77 * @param array $options optional
78 */
79 public function toString(string $type, array $options = []): string
80 {
81 $type = self::validatePlugin('Keys', $type, 'savePublicKey');
82
83 return $type::savePublicKey($this->p, $this->q, $this->g, $this->y, $options);
84 }
85 }
86