diff options
Diffstat (limited to '')
-rw-r--r-- | library/vendor/Zend/Crypt.php | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/library/vendor/Zend/Crypt.php b/library/vendor/Zend/Crypt.php new file mode 100644 index 0000000..391a5fa --- /dev/null +++ b/library/vendor/Zend/Crypt.php @@ -0,0 +1,167 @@ +<?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); + } + +} |