Subversion Repositories oidplus

Rev

Rev 846 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  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.  
  16. namespace phpseclib3\Crypt\Common\Traits;
  17.  
  18. use 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.  */
  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.      *
  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.