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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|