1<?php 2 3/** 4 * PublicKeyLoader 5 * 6 * Returns a PublicKey or PrivateKey object. 7 * 8 * @category Crypt 9 * @package PublicKeyLoader 10 * @author Jim Wigginton <terrafrost@php.net> 11 * @copyright 2009 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; 17 18use phpseclib3\Crypt\Common\AsymmetricKey; 19use phpseclib3\Crypt\Common\PrivateKey; 20use phpseclib3\Crypt\Common\PublicKey; 21use phpseclib3\Exception\NoKeyLoadedException; 22use phpseclib3\File\X509; 23 24/** 25 * PublicKeyLoader 26 * 27 * @package Common 28 * @author Jim Wigginton <terrafrost@php.net> 29 * @access public 30 */ 31abstract class PublicKeyLoader 32{ 33 /** 34 * Loads a public or private key 35 * 36 * @return AsymmetricKey 37 * @access public 38 * @param string|array $key 39 * @param string $password optional 40 */ 41 public static function load($key, $password = false) 42 { 43 try { 44 return EC::load($key, $password); 45 } catch (NoKeyLoadedException $e) { 46 } 47 48 try { 49 return RSA::load($key, $password); 50 } catch (NoKeyLoadedException $e) { 51 } 52 53 try { 54 return DSA::load($key, $password); 55 } catch (NoKeyLoadedException $e) { 56 } 57 58 try { 59 $x509 = new X509(); 60 $x509->loadX509($key); 61 $key = $x509->getPublicKey(); 62 if ($key) { 63 return $key; 64 } 65 } catch (\Exception $e) { 66 } 67 68 throw new NoKeyLoadedException('Unable to read key'); 69 } 70 71 /** 72 * Loads a private key 73 * 74 * @return PrivateKey 75 * @access public 76 * @param string|array $key 77 * @param string $password optional 78 */ 79 public static function loadPrivateKey($key, $password = false) 80 { 81 $key = self::load($key, $password); 82 if (!$key instanceof PrivateKey) { 83 throw new NoKeyLoadedException('The key that was loaded was not a private key'); 84 } 85 return $key; 86 } 87 88 /** 89 * Loads a public key 90 * 91 * @return PublicKey 92 * @access public 93 * @param string|array $key 94 */ 95 public static function loadPublicKey($key) 96 { 97 $key = self::load($key); 98 if (!$key instanceof PublicKey) { 99 throw new NoKeyLoadedException('The key that was loaded was not a public key'); 100 } 101 return $key; 102 } 103 104 /** 105 * Loads parameters 106 * 107 * @return AsymmetricKey 108 * @access public 109 * @param string|array $key 110 */ 111 public static function loadParameters($key) 112 { 113 $key = self::load($key); 114 if (!$key instanceof PrivateKey && !$key instanceof PublicKey) { 115 throw new NoKeyLoadedException('The key that was loaded was not a parameter'); 116 } 117 return $key; 118 } 119} 120