1<?php 2 3/** 4 * Fingerprint Trait for Public Keys 5 * 6 * PHP version 5 7 * 8 * @category Crypt 9 * @package Common 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 16namespace phpseclib3\Crypt\Common\Traits; 17 18use phpseclib3\Crypt\Hash; 19 20/** 21 * Fingerprint Trait for Private Keys 22 * 23 * @package Common 24 * @author Jim Wigginton <terrafrost@php.net> 25 * @access public 26 */ 27trait 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 * 36 * @access public 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} 63