mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-31 19:34:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			168 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Zend Framework
 | |
|  *
 | |
|  * LICENSE
 | |
|  *
 | |
|  * This source file is subject to the new BSD license that is bundled
 | |
|  * with this package in the file LICENSE.txt.
 | |
|  * It is also available through the world-wide-web at this URL:
 | |
|  * http://framework.zend.com/license/new-bsd
 | |
|  * If you did not receive a copy of the license and are unable to
 | |
|  * obtain it through the world-wide-web, please send an email
 | |
|  * to license@zend.com so we can send you a copy immediately.
 | |
|  *
 | |
|  * @category   Zend
 | |
|  * @package    Zend_Crypt
 | |
|  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | |
|  * @version    $Id$
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * @category   Zend
 | |
|  * @package    Zend_Crypt
 | |
|  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | |
|  */
 | |
| class Zend_Crypt
 | |
| {
 | |
| 
 | |
|     const TYPE_OPENSSL = 'openssl';
 | |
|     const TYPE_HASH = 'hash';
 | |
|     const TYPE_MHASH = 'mhash';
 | |
| 
 | |
|     protected static $_type = null;
 | |
| 
 | |
|     /**
 | |
|      * @var array
 | |
|      */
 | |
|     protected static $_supportedAlgosOpenssl = array(
 | |
|         'md2',
 | |
|         'md4',
 | |
|         'mdc2',
 | |
|         'rmd160',
 | |
|         'sha',
 | |
|         'sha1',
 | |
|         'sha224',
 | |
|         'sha256',
 | |
|         'sha384',
 | |
|         'sha512'
 | |
|     );
 | |
| 
 | |
|     /**
 | |
|      * @var array
 | |
|      */
 | |
|     protected static $_supportedAlgosMhash = array(
 | |
|         'adler32',
 | |
|         'crc32',
 | |
|         'crc32b',
 | |
|         'gost',
 | |
|         'haval128',
 | |
|         'haval160',
 | |
|         'haval192',
 | |
|         'haval256',
 | |
|         'md4',
 | |
|         'md5',
 | |
|         'ripemd160',
 | |
|         'sha1',
 | |
|         'sha256',
 | |
|         'tiger',
 | |
|         'tiger128',
 | |
|         'tiger160'
 | |
|     );
 | |
| 
 | |
|     /**
 | |
|      * @param string $algorithm
 | |
|      * @param string $data
 | |
|      * @param bool $binaryOutput
 | |
|      * @return unknown
 | |
|      */
 | |
|     public static function hash($algorithm, $data, $binaryOutput = false)
 | |
|     {
 | |
|         $algorithm = strtolower($algorithm);
 | |
|         if (function_exists($algorithm)) {
 | |
|             return $algorithm($data, $binaryOutput);
 | |
|         }
 | |
|         self::_detectHashSupport($algorithm);
 | |
|         $supportedMethod = '_digest' . ucfirst(self::$_type);
 | |
|         $result = self::$supportedMethod($algorithm, $data, $binaryOutput);
 | |
|         return $result;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $algorithm
 | |
|      * @throws Zend_Crypt_Exception
 | |
|      */
 | |
|     protected static function _detectHashSupport($algorithm)
 | |
|     {
 | |
|         if (function_exists('hash')) {
 | |
|             self::$_type = self::TYPE_HASH;
 | |
|             if (in_array($algorithm, hash_algos())) {
 | |
|                return;
 | |
|             }
 | |
|         }
 | |
|         if (function_exists('mhash')) {
 | |
|             self::$_type = self::TYPE_MHASH;
 | |
|             if (in_array($algorithm, self::$_supportedAlgosMhash)) {
 | |
|                return;
 | |
|             }
 | |
|         }
 | |
|         if (function_exists('openssl_digest')) {
 | |
|             if ($algorithm == 'ripemd160') {
 | |
|                 $algorithm = 'rmd160';
 | |
|             }
 | |
|             self::$_type = self::TYPE_OPENSSL;
 | |
|             if (in_array($algorithm, self::$_supportedAlgosOpenssl)) {
 | |
|                return;
 | |
|             }
 | |
|         }
 | |
|         /**
 | |
|          * @see Zend_Crypt_Exception
 | |
|          */
 | |
|         throw new Zend_Crypt_Exception('\'' . $algorithm . '\' is not supported by any available extension or native function');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $algorithm
 | |
|      * @param string $data
 | |
|      * @param bool $binaryOutput
 | |
|      * @return string
 | |
|      */
 | |
|     protected static function _digestHash($algorithm, $data, $binaryOutput)
 | |
|     {
 | |
|         return hash($algorithm, $data, $binaryOutput);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $algorithm
 | |
|      * @param string $data
 | |
|      * @param bool $binaryOutput
 | |
|      * @return string
 | |
|      */
 | |
|     protected static function _digestMhash($algorithm, $data, $binaryOutput)
 | |
|     {
 | |
|         $constant = constant('MHASH_' . strtoupper($algorithm));
 | |
|         $binary = mhash($constant, $data);
 | |
|         if ($binaryOutput) {
 | |
|             return $binary;
 | |
|         }
 | |
|         return bin2hex($binary);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $algorithm
 | |
|      * @param string $data
 | |
|      * @param bool $binaryOutput
 | |
|      * @return string
 | |
|      */
 | |
|     protected static function _digestOpenssl($algorithm, $data, $binaryOutput)
 | |
|     {
 | |
|         if ($algorithm == 'ripemd160') {
 | |
|             $algorithm = 'rmd160';
 | |
|         }
 | |
|         return openssl_digest($data, $algorithm, $binaryOutput);
 | |
|     }
 | |
| 
 | |
| }
 |