Rev 846 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
827 | daniel-mar | 1 | <?php |
2 | |||
3 | /** |
||
4 | * Fingerprint Trait for Public Keys |
||
5 | * |
||
6 | * PHP version 5 |
||
7 | * |
||
874 | daniel-mar | 8 | * @category Crypt |
9 | * @package Common |
||
827 | daniel-mar | 10 | * @author Jim Wigginton <terrafrost@php.net> |
11 | * @copyright 2015 Jim Wigginton |
||
12 | * @license http://www.opensource.org/licenses/mit-license.html MIT License |
||
13 | * @link http://phpseclib.sourceforge.net |
||
14 | */ |
||
15 | |||
16 | namespace phpseclib3\Crypt\Common\Traits; |
||
17 | |||
18 | use phpseclib3\Crypt\Hash; |
||
19 | |||
20 | /** |
||
21 | * Fingerprint Trait for Private Keys |
||
22 | * |
||
874 | daniel-mar | 23 | * @package Common |
827 | daniel-mar | 24 | * @author Jim Wigginton <terrafrost@php.net> |
874 | daniel-mar | 25 | * @access public |
827 | daniel-mar | 26 | */ |
27 | trait Fingerprint |
||
28 | { |
||
29 | /** |
||
30 | * Returns the public key's fingerprint |
||
31 | * |
||
32 | * The public key's fingerprint is returned, which is equivalent to running `ssh-keygen -lf rsa.pub`. If there is |
||
33 | * no public key currently loaded, false is returned. |
||
34 | * Example output (md5): "c1:b1:30:29:d7:b8:de:6c:97:77:10:d7:46:41:63:87" (as specified by RFC 4716) |
||
35 | * |
||
874 | daniel-mar | 36 | * @access public |
827 | daniel-mar | 37 | * @param string $algorithm The hashing algorithm to be used. Valid options are 'md5' and 'sha256'. False is returned |
38 | * for invalid values. |
||
39 | * @return mixed |
||
40 | */ |
||
41 | public function getFingerprint($algorithm = 'md5') |
||
42 | { |
||
43 | $type = self::validatePlugin('Keys', 'OpenSSH', 'savePublicKey'); |
||
44 | if ($type === false) { |
||
45 | return false; |
||
46 | } |
||
47 | $key = $this->toString('OpenSSH', ['binary' => true]); |
||
48 | if ($key === false) { |
||
49 | return false; |
||
50 | } |
||
51 | switch ($algorithm) { |
||
52 | case 'sha256': |
||
53 | $hash = new Hash('sha256'); |
||
54 | $base = base64_encode($hash->hash($key)); |
||
55 | return substr($base, 0, strlen($base) - 1); |
||
56 | case 'md5': |
||
57 | return substr(chunk_split(md5($key), 2, ':'), 0, -1); |
||
58 | default: |
||
59 | return false; |
||
60 | } |
||
61 | } |
||
62 | } |