1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
<?php
/**
* The Horde_Cipher:: class provides a common abstracted interface to
* various Ciphers for encryption of arbitrary length pieces of data.
*
* Copyright 2002-2003 Mike Cochrane <mike@graftonhall.co.nz>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* $Horde: horde/lib/Cipher.php,v 1.5.2.6 2003/04/28 19:59:07 jan Exp $
*
* @author Mike Cochrane <mike@graftonhall.co.nz>
* @version $Revision: 1.5.2.6 $
* @since Horde 2.2
* @package horde.cipher
*/
class Horde_Cipher {
/**
* The block mode for the cipher chaining
* @var string $_blockMode
*/
var $_blockMode = 'CBC';
/**
* The initialization vector
* @var string $_iv
*/
var $_iv = null;
/**
* Set the block mode for cipher chaining
*
* @param String $blockMode The new blockmode
*/
function setBlockMode($blockMode)
{
$this->_blockMode = $blockMode;
}
/**
* Set the iv
*
* @param String $iv The new iv.
*/
function setIV($iv)
{
$this->_iv = $iv;
}
/**
* Encrypt a string
*
* @param String $plaintext The data to encrypt
*
* @return String The encrypted data
*/
function encrypt($plaintext)
{
require_once HORDE_BASE . '/lib/Cipher/BlockMode.php';
$blockMode = &Horde_Cipher_BlockMode::factory($this->_blockMode);
if (!is_null($this->_iv)) {
$blockMode->setIV($this->_iv);
}
return $blockMode->encrypt($this, $plaintext);
}
/**
* Decrypt a string
*
* @param String $ciphertext The data to decrypt
*
* @return String The decrypted data
*/
function decrypt($ciphertext)
{
require_once HORDE_BASE . '/lib/Cipher/BlockMode.php';
$blockMode = &Horde_Cipher_BlockMode::factory($this->_blockMode);
if (!is_null($this->_iv)) {
$blockMode->setIV($this->_iv);
}
return $blockMode->decrypt($this, $ciphertext);
}
/**
* Attempts to return a concrete Cipher instance based on $driver.
*
* @access public
*
* @param mixed $cipher The type of concrete Cipher subclass to
* return.
* @param optional array $params A hash containing any additional
* parameters a subclass might need.
*
* @return object Cipher The newly created concrete Cipher instance, or PEAR_Error
* on an error.
*/
function &factory($cipher, $params = null)
{
$driver = basename($cipher);
if (@file_exists(dirname(__FILE__) . '/Cipher/' . $cipher . '.php')) {
require_once dirname(__FILE__) . '/Cipher/' . $cipher . '.php';
} else {
@include_once HORDE_BASE . '/lib/Cipher/' . $cipher . '.php';
}
$class = 'Horde_Cipher_' . $cipher;
if (class_exists($class)) {
return new $class($params);
} else {
return PEAR::raiseError('Class definition of ' . $class . ' not found.');
}
}
}
|