235 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			235 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Crypt_RSA allows to do following operations:
							 | 
						||
| 
								 | 
							
								 *     - key pair generation
							 | 
						||
| 
								 | 
							
								 *     - encryption and decryption
							 | 
						||
| 
								 | 
							
								 *     - signing and sign validation
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * PHP versions 4 and 5
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * LICENSE: This source file is subject to version 3.0 of the PHP license
							 | 
						||
| 
								 | 
							
								 * that is available through the world-wide-web at the following URI:
							 | 
						||
| 
								 | 
							
								 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
							 | 
						||
| 
								 | 
							
								 * the PHP License and are unable to obtain it through the web, please
							 | 
						||
| 
								 | 
							
								 * send a note to license@php.net so we can mail you a copy immediately.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @category  Encryption
							 | 
						||
| 
								 | 
							
								 * @package   Crypt_RSA
							 | 
						||
| 
								 | 
							
								 * @author    Alexander Valyalkin <valyala@gmail.com>
							 | 
						||
| 
								 | 
							
								 * @copyright 2005 Alexander Valyalkin
							 | 
						||
| 
								 | 
							
								 * @license   http://www.php.net/license/3_0.txt  PHP License 3.0
							 | 
						||
| 
								 | 
							
								 * @version   CVS: $Id: ErrorHandler.php,v 1.4 2009/01/05 08:30:29 clockwerx Exp $
							 | 
						||
| 
								 | 
							
								 * @link      http://pear.php.net/package/Crypt_RSA
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * uses PEAR's error handling
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								require_once 'PEAR.php';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * cannot load required extension for math wrapper
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_NO_EXT', 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * cannot load any math wrappers.
							 | 
						||
| 
								 | 
							
								 * Possible reasons:
							 | 
						||
| 
								 | 
							
								 *  - there is no any wrappers (they must exist in Crypt/RSA/Math folder )
							 | 
						||
| 
								 | 
							
								 *  - all available wrappers are incorrect (read docs/Crypt_RSA/docs/math_wrappers.txt )
							 | 
						||
| 
								 | 
							
								 *  - cannot load any extension, required by available wrappers
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_NO_WRAPPERS', 2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * cannot find file, containing requested math wrapper
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_NO_FILE', 3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * cannot find math wrapper class in the math wrapper file
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_NO_CLASS', 4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * invalid key type passed to function (it must be 'public' or 'private')
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_WRONG_KEY_TYPE', 5);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * key modulus must be greater than key exponent
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_EXP_GE_MOD', 6);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * missing $key_len parameter in Crypt_RSA_KeyPair::generate($key_len) function
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_MISSING_KEY_LEN', 7);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * wrong key object passed to function (it must be an object of Crypt_RSA_Key class)
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_WRONG_KEY', 8);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * wrong name of hash function passed to Crypt_RSA::setParams() function
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_WRONG_HASH_FUNC', 9);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * key, used for signing, must be private
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_NEED_PRV_KEY', 10);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * key, used for sign validating, must be public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_NEED_PUB_KEY', 11);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * parameters must be passed to function as associative array
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_WRONG_PARAMS', 12);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * error tail of decrypted text. Maybe, wrong decryption key?
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								define('CRYPT_RSA_ERROR_WRONG_TAIL', 13);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Crypt_RSA_ErrorHandler class.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This class is used as base for Crypt_RSA, Crypt_RSA_Key
							 | 
						||
| 
								 | 
							
								 * and Crypt_RSA_KeyPair classes.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * It provides following functions:
							 | 
						||
| 
								 | 
							
								 *   - isError() - returns true, if list contains errors, else returns false
							 | 
						||
| 
								 | 
							
								 *   - getErrorList() - returns error list
							 | 
						||
| 
								 | 
							
								 *   - getLastError() - returns last error from error list or false, if list is empty
							 | 
						||
| 
								 | 
							
								 *   - pushError($errstr) - pushes $errstr into the error list
							 | 
						||
| 
								 | 
							
								 *   - setErrorHandler($new_error_handler) - sets error handler function
							 | 
						||
| 
								 | 
							
								 *   - getErrorHandler() - returns name of error handler function
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @category  Encryption
							 | 
						||
| 
								 | 
							
								 * @package   Crypt_RSA
							 | 
						||
| 
								 | 
							
								 * @author    Alexander Valyalkin <valyala@gmail.com>
							 | 
						||
| 
								 | 
							
								 * @copyright 2005 Alexander Valyalkin
							 | 
						||
| 
								 | 
							
								 * @license   http://www.php.net/license/3_0.txt  PHP License 3.0
							 | 
						||
| 
								 | 
							
								 * @version   Release: @package_version@
							 | 
						||
| 
								 | 
							
								 * @link      http://pear.php.net/package/Crypt_RSA
							 | 
						||
| 
								 | 
							
								 * @access    public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Crypt_RSA_ErrorHandler
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * array of error objects, pushed by $this->pushError()
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @var array
							 | 
						||
| 
								 | 
							
								     * @access private
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var $_errors = array();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * name of error handler - function, which calls on $this->pushError() call
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @var string
							 | 
						||
| 
								 | 
							
								     * @access private
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var $_error_handler = '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns true if list of errors is not empty, else returns false
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param mixed $err Check if the object is an error
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return bool    true, if list of errors is not empty or $err is PEAR_Error object, else false
							 | 
						||
| 
								 | 
							
								     * @access public
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function isError($err = null)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return is_null($err) ? (sizeof($this->_errors) > 0) : PEAR::isError($err);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns list of all errors, pushed to error list by $this->pushError()
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return array    list of errors (usually it contains objects of PEAR_Error class)
							 | 
						||
| 
								 | 
							
								     * @access public
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function getErrorList()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->_errors;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns last error from errors list or false, if list is empty
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return mixed
							 | 
						||
| 
								 | 
							
								     *         last error from errors list (usually it is PEAR_Error object)
							 | 
						||
| 
								 | 
							
								     *         or false, if list is empty.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @access public
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function getLastError()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $len = sizeof($this->_errors);
							 | 
						||
| 
								 | 
							
								        return $len ? $this->_errors[$len - 1] : false;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * pushes error object $error to the error list
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $errstr error string
							 | 
						||
| 
								 | 
							
								     * @param int    $errno  error number
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return bool          true on success, false on error
							 | 
						||
| 
								 | 
							
								     * @access public
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function pushError($errstr, $errno = 0)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->_errors[] = PEAR::raiseError($errstr, $errno);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($this->_error_handler != '') {
							 | 
						||
| 
								 | 
							
								            // call user defined error handler
							 | 
						||
| 
								 | 
							
								            $func = $this->_error_handler;
							 | 
						||
| 
								 | 
							
								            $func($this);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * sets error handler to function with name $func_name.
							 | 
						||
| 
								 | 
							
								     * Function $func_name must accept one parameter - current
							 | 
						||
| 
								 | 
							
								     * object, which triggered error.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $func_name name of error handler function
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return bool             true on success, false on error
							 | 
						||
| 
								 | 
							
								     * @access public
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function setErrorHandler($func_name = '')
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if ($func_name == '') {
							 | 
						||
| 
								 | 
							
								            $this->_error_handler = '';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (!function_exists($func_name)) {
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $this->_error_handler = $func_name;
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * returns name of current error handler, or null if there is no error handler
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return mixed  error handler name as string or null, if there is no error handler
							 | 
						||
| 
								 | 
							
								     * @access public
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function getErrorHandler()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->_error_handler;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								?>
							 |