Source of file RsaOptions.php
Size: 5,136 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Crypt/PublicKey/RsaOptions.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Crypt\PublicKey; use Zend\Crypt\PublicKey\Rsa\Exception; use Zend\Stdlib\AbstractOptions; /** * RSA instance options */ class RsaOptions extends AbstractOptions { /** * @var Rsa\PrivateKey */ protected $privateKey = null; /** * @var Rsa\PublicKey */ protected $publicKey = null; /** * @var string */ protected $hashAlgorithm = 'sha1'; /** * Signature hash algorithm defined by openss constants * * @var int */ protected $opensslSignatureAlgorithm = null; /** * @var string */ protected $passPhrase = null; /** * Output is binary * * @var bool */ protected $binaryOutput = true; /** * Set private key * * @param Rsa\PrivateKey $key * @return RsaOptions */ public function setPrivateKey(Rsa\PrivateKey $key) { $this->privateKey = $key; $this->publicKey = $this->privateKey->getPublicKey(); return $this; } /** * Get private key * * @return null|Rsa\PrivateKey */ public function getPrivateKey() { return $this->privateKey; } /** * Set public key * * @param Rsa\PublicKey $key * @return RsaOptions */ public function setPublicKey(Rsa\PublicKey $key) { $this->publicKey = $key; return $this; } /** * Get public key * * @return null|Rsa\PublicKey */ public function getPublicKey() { return $this->publicKey; } /** * Set pass phrase * * @param string $phrase * @return RsaOptions */ public function setPassPhrase($phrase) { $this->passPhrase = (string) $phrase; return $this; } /** * Get pass phrase * * @return string */ public function getPassPhrase() { return $this->passPhrase; } /** * Set hash algorithm * * @param string $hash * @return RsaOptions * @throws Rsa\Exception\RuntimeException * @throws Rsa\Exception\InvalidArgumentException */ public function setHashAlgorithm($hash) { $hashUpper = strtoupper($hash); if (!defined('OPENSSL_ALGO_' . $hashUpper)) { throw new Exception\InvalidArgumentException( "Hash algorithm '{$hash}' is not supported" ); } $this->hashAlgorithm = strtolower($hash); $this->opensslSignatureAlgorithm = constant('OPENSSL_ALGO_' . $hashUpper); return $this; } /** * Get hash algorithm * * @return string */ public function getHashAlgorithm() { return $this->hashAlgorithm; } public function getOpensslSignatureAlgorithm() { if (!isset($this->opensslSignatureAlgorithm)) { $this->opensslSignatureAlgorithm = constant('OPENSSL_ALGO_' . strtoupper($this->hashAlgorithm)); } return $this->opensslSignatureAlgorithm; } /** * Enable/disable the binary output * * @param bool $value * @return RsaOptions */ public function setBinaryOutput($value) { $this->binaryOutput = (bool) $value; return $this; } /** * Get the value of binary output * * @return bool */ public function getBinaryOutput() { return $this->binaryOutput; } /** * Generate new private/public key pair * * @param array $opensslConfig * @return RsaOptions * @throws Rsa\Exception\RuntimeException */ public function generateKeys(array $opensslConfig = array()) { $opensslConfig = array_replace(array( 'private_key_type' => OPENSSL_KEYTYPE_RSA, 'private_key_bits' => Rsa\PrivateKey::DEFAULT_KEY_SIZE, 'digest_alg' => $this->getHashAlgorithm() ), $opensslConfig); // generate $resource = openssl_pkey_new($opensslConfig); if (false === $resource) { throw new Exception\RuntimeException( 'Can not generate keys; openssl ' . openssl_error_string() ); } // export key $passPhrase = $this->getPassPhrase(); $result = openssl_pkey_export($resource, $private, $passPhrase, $opensslConfig); if (false === $result) { throw new Exception\RuntimeException( 'Can not export key; openssl ' . openssl_error_string() ); } $details = openssl_pkey_get_details($resource); $this->privateKey = new Rsa\PrivateKey($private, $passPhrase); $this->publicKey = new Rsa\PublicKey($details['key']); return $this; } } |