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 / DSA / PublicKey.php
backup / src / JetBackup / 3rdparty / phpseclib3 / Crypt / DSA Last commit date
Formats 1 year ago .htaccess 1 year ago Parameters.php 1 year ago PrivateKey.php 1 year ago PublicKey.php 1 year ago index.html 1 year ago web.config 1 year 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