Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/zendframework/zend-crypt/src/PublicKey/RsaOptions.php
Строк: 183
<?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 ZendCryptPublicKey;

use 
ZendCryptPublicKeyRsaException;
use 
ZendStdlibAbstractOptions;

/**
 * RSA instance options
 */
class RsaOptions extends AbstractOptions
{
    
/**
     * @var RsaPrivateKey
     */
    
protected $privateKey null;

    
/**
     * @var RsaPublicKey
     */
    
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  RsaPrivateKey $key
     * @return RsaOptions
     */
    
public function setPrivateKey(RsaPrivateKey $key)
    {
        
$this->privateKey $key;
        
$this->publicKey  $this->privateKey->getPublicKey();
        return 
$this;
    }

    
/**
     * Get private key
     *
     * @return null|RsaPrivateKey
     */
    
public function getPrivateKey()
    {
        return 
$this->privateKey;
    }

    
/**
     * Set public key
     *
     * @param  RsaPublicKey $key
     * @return RsaOptions
     */
    
public function setPublicKey(RsaPublicKey $key)
    {
        
$this->publicKey $key;
        return 
$this;
    }

    
/**
     * Get public key
     *
     * @return null|RsaPublicKey
     */
    
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 RsaExceptionRuntimeException
     * @throws RsaExceptionInvalidArgumentException
     */
    
public function setHashAlgorithm($hash)
    {
        
$hashUpper strtoupper($hash);
        if (!
defined('OPENSSL_ALGO_' $hashUpper)) {
            throw new 
ExceptionInvalidArgumentException(
                
"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 RsaExceptionRuntimeException
     */
    
public function generateKeys(array $opensslConfig = array())
     {
         
$opensslConfig array_replace(array(
              
'private_key_type' => OPENSSL_KEYTYPE_RSA,
              
'private_key_bits' => RsaPrivateKey::DEFAULT_KEY_SIZE,
              
'digest_alg'       => $this->getHashAlgorithm()
         ), 
$opensslConfig);

         
// generate
         
$resource openssl_pkey_new($opensslConfig);
         if (
false === $resource) {
             throw new 
ExceptionRuntimeException(
                 
'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 
ExceptionRuntimeException(
                 
'Can not export key; openssl ' openssl_error_string()
             );
         }

         
$details          openssl_pkey_get_details($resource);
         
$this->privateKey = new RsaPrivateKey($private$passPhrase);
         
$this->publicKey  = new RsaPublicKey($details['key']);

         return 
$this;
     }
}
Онлайн: 3
Реклама