steffen: server/kolab-horde-framework/kolab-horde-framework/Secret Secret.php, NONE, 1.1 package.xml, NONE, 1.1
cvs at intevation.de
cvs at intevation.de
Fri Oct 14 16:33:13 CEST 2005
Author: steffen
Update of /kolabrepository/server/kolab-horde-framework/kolab-horde-framework/Secret
In directory doto:/tmp/cvs-serv28903/kolab-horde-framework/kolab-horde-framework/Secret
Added Files:
Secret.php package.xml
Log Message:
Separated Horde Framework from kolab-resource-handlers
--- NEW FILE: Secret.php ---
<?php
/**
* The Secret:: class provides an API for encrypting and decrypting
* small pieces of data with the use of a shared key.
*
* The Secret:: functions use the Horde Cipher:: class if mcrypt is not
* available.
*
* $Horde: framework/Secret/Secret.php,v 1.40 2004/04/07 14:43:12 chuck Exp $
*
* Copyright 1999-2004 Chuck Hagenbuch <chuck at horde.org>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Chuck Hagenbuch <chuck at horde.org>
* @version $Revision: 1.1 $
* @since Horde 1.3
* @package Horde_Secret
*/
class Secret {
/**
* Take a small piece of data and encrypt it with a key.
*
* @access public
*
* @param string $key The key to use for encryption.
* @param string $message The plaintext message.
*
* @return string The ciphertext message.
*/
function write($key, $message)
{
if (Util::extensionExists('mcrypt')) {
$td = @mcrypt_module_open(MCRYPT_GOST, '', MCRYPT_MODE_ECB, '');
if ($td) {
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
@mcrypt_generic_init($td, $key, $iv);
$encrypted_data = mcrypt_generic($td, $message);
mcrypt_generic_deinit($td);
return $encrypted_data;
}
}
static $cipherCache;
$cacheIdx = md5($key);
if (!is_array($cipherCache) || !isset($cipherCache[$cacheIdx])) {
require_once 'Horde/Cipher.php';
$cipherCache[$cacheIdx] = &Horde_Cipher::factory('blowfish');
$cipherCache[$cacheIdx]->setBlockMode('ofb64');
$cipherCache[$cacheIdx]->setKey($key);
}
return $cipherCache[$cacheIdx]->encrypt($message);
}
/**
* Decrypt a message encrypted with Secret::write().
*
* @access public
*
* @param string $key The key to use for decryption.
* @param string $message The ciphertext message.
*
* @return string The plaintext message.
*/
function read($key, $ciphertext)
{
if (Util::extensionExists('mcrypt')) {
$td = @mcrypt_module_open(MCRYPT_GOST, '', MCRYPT_MODE_ECB, '');
if ($td) {
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
@mcrypt_generic_init($td, $key, $iv);
$decrypted_data = mdecrypt_generic($td, $ciphertext);
mcrypt_generic_deinit($td);
// Strip padding characters.
return rtrim($decrypted_data, "\0");
}
}
static $cipherCache;
$cacheIdx = md5($key);
if (!is_array($cipherCache) || !isset($cipherCache[$cacheIdx])) {
require_once 'Horde/Cipher.php';
$cipherCache[$cacheIdx] = &Horde_Cipher::factory('blowfish');
$cipherCache[$cacheIdx]->setBlockMode('ofb64');
$cipherCache[$cacheIdx]->setKey($key);
}
return $cipherCache[$cacheIdx]->decrypt($ciphertext);
}
/**
* Generate a secret key (for encryption), either using a random
* md5 string and storing it in a cookie if the user has cookies
* enabled, or munging some known values if they don't.
*
* @access public
*
* @param optional string $keyname The name of the key to set.
*
* @return string The secret key that has been generated.
*/
function setKey($keyname = 'generic')
{
global $conf;
if (isset($_COOKIE) &&
array_key_exists($conf['session']['name'], $_COOKIE)) {
if (array_key_exists($keyname . '_key', $_COOKIE)) {
$key = $_COOKIE[$keyname . '_key'];
} else {
$key = md5(mt_rand());
$_COOKIE[$keyname . '_key'] = $key;
setcookie($keyname . '_key', $key, null, $conf['cookie']['path'], $conf['cookie']['domain'], $conf['use_ssl'] == 1 ? 1 : 0);
}
} else {
$key = md5(session_id() . $conf['server']['name']);
}
return $key;
}
/**
* Return a secret key, either from a cookie, or if the cookie
* isn't there, assume we are using a munged version of a known
* base value.
*
* @access public
*
* @param optional string $keyname The name of the key to get.
*
* @return string The secret key.
*/
function getKey($keyname = 'generic')
{
static $keycache;
if (is_null($keycache)) {
$keycache = array();
}
if (!array_key_exists($keyname, $keycache)) {
if (array_key_exists($keyname . '_key', $_COOKIE)) {
$keycache[$keyname] = $_COOKIE[$keyname . '_key'];
} else {
global $conf;
$keycache[$keyname] = md5(session_id() . $conf['server']['name']);
$_COOKIE[$keyname . '_key'] = $keycache[$keyname];
}
}
return $keycache[$keyname];
}
}
--- NEW FILE: package.xml ---
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Horde: framework/Secret/package.xml,v 1.5 2003/12/24 00:48:21 slusarz Exp $ -->
<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.1">
<package version="1.0">
<name>Horde_Secret</name>
<summary>Secret Encryption API</summary>
<description>
The Secret:: class provides an API for encrypting and decrypting small pieces of data with the use of a shared key.
</description>
<license>LGPL</license>
<maintainers>
<maintainer>
<user>chuck</user>
<role>lead</role>
<name>Chuck Hagenbuch</name>
<email>chuck at horde.org</email>
</maintainer>
</maintainers>
<release>
<version>0.0.1</version>
<state>alpha</state>
<date>2003-07-05</date>
<notes>Initial packaging.</notes>
<provides type="class" name="Secret" />
<filelist>
<file role="php" name="Secret.php" baseinstalldir="/Horde" />
</filelist>
</release>
<deps>
<dep type="ext" rel="has" optional="yes">mcrypt</dep>
<dep type="pkg" rel="has">Horde_Cipher</dep>
<dep type="pkg" rel="has">Horde_Util</dep>
</deps>
<changelog>
<release>
<version>0.0.1</version>
<date>2003-07-05</date>
<state>alpha</state>
<notes>Initial release as a PEAR package</notes>
</release>
</changelog>
</package>
More information about the commits
mailing list