Subversion Repositories oidplus

Rev

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
}