diff options
Diffstat (limited to 'plugins/enigma/lib/Crypt/GPG')
| -rw-r--r-- | plugins/enigma/lib/Crypt/GPG/DecryptStatusHandler.php | 336 | ||||
| -rw-r--r-- | plugins/enigma/lib/Crypt/GPG/Engine.php | 1758 | ||||
| -rw-r--r-- | plugins/enigma/lib/Crypt/GPG/Exceptions.php | 473 | ||||
| -rw-r--r-- | plugins/enigma/lib/Crypt/GPG/Key.php | 223 | ||||
| -rw-r--r-- | plugins/enigma/lib/Crypt/GPG/Signature.php | 428 | ||||
| -rw-r--r-- | plugins/enigma/lib/Crypt/GPG/SubKey.php | 649 | ||||
| -rw-r--r-- | plugins/enigma/lib/Crypt/GPG/UserId.php | 373 | ||||
| -rw-r--r-- | plugins/enigma/lib/Crypt/GPG/VerifyStatusHandler.php | 216 | 
8 files changed, 0 insertions, 4456 deletions
| diff --git a/plugins/enigma/lib/Crypt/GPG/DecryptStatusHandler.php b/plugins/enigma/lib/Crypt/GPG/DecryptStatusHandler.php deleted file mode 100644 index 40e8d50ed..000000000 --- a/plugins/enigma/lib/Crypt/GPG/DecryptStatusHandler.php +++ /dev/null @@ -1,336 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This file contains an object that handles GPG's status output for the - * decrypt operation. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2009 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version   CVS: $Id: DecryptStatusHandler.php 302814 2010-08-26 15:43:07Z gauthierm $ - * @link      http://pear.php.net/package/Crypt_GPG - * @link      http://www.gnupg.org/ - */ - -/** - * Crypt_GPG base class - */ -require_once 'Crypt/GPG.php'; - -/** - * GPG exception classes - */ -require_once 'Crypt/GPG/Exceptions.php'; - - -/** - * Status line handler for the decrypt operation - * - * This class is used internally by Crypt_GPG and does not need be used - * directly. See the {@link Crypt_GPG} class for end-user API. - * - * This class is responsible for sending the passphrase commands when required - * by the {@link Crypt_GPG::decrypt()} method. See <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for detailed - * information on GPG's status output for the decrypt operation. - * - * This class is also responsible for parsing error status and throwing a - * meaningful exception in the event that decryption fails. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - * @link      http://www.gnupg.org/ - */ -class Crypt_GPG_DecryptStatusHandler -{ -    // {{{ protected properties - -    /** -     * Keys used to decrypt -     * -     * The array is of the form: -     * <code> -     * array( -     *   $key_id => array( -     *     'fingerprint' => $fingerprint, -     *     'passphrase'  => $passphrase -     *   ) -     * ); -     * </code> -     * -     * @var array -     */ -    protected $keys = array(); - -    /** -     * Engine used to which passphrases are passed -     * -     * @var Crypt_GPG_Engine -     */ -    protected $engine = null; - -    /** -     * The id of the current sub-key used for decryption -     * -     * @var string -     */ -    protected $currentSubKey = ''; - -    /** -     * Whether or not decryption succeeded -     * -     * If the message is only signed (compressed) and not encrypted, this is -     * always true. If the message is encrypted, this flag is set to false -     * until we know the decryption succeeded. -     * -     * @var boolean -     */ -    protected $decryptionOkay = true; - -    /** -     * Whether or not there was no data for decryption -     * -     * @var boolean -     */ -    protected $noData = false; - -    /** -     * Keys for which the passhprase is missing -     * -     * This contains primary user ids indexed by sub-key id and is used to -     * create helpful exception messages. -     * -     * @var array -     */ -    protected $missingPassphrases = array(); - -    /** -     * Keys for which the passhprase is incorrect -     * -     * This contains primary user ids indexed by sub-key id and is used to -     * create helpful exception messages. -     * -     * @var array -     */ -    protected $badPassphrases = array(); - -    /** -     * Keys that can be used to decrypt the data but are missing from the -     * keychain -     * -     * This is an array with both the key and value being the sub-key id of -     * the missing keys. -     * -     * @var array -     */ -    protected $missingKeys = array(); - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new decryption status handler -     * -     * @param Crypt_GPG_Engine $engine the GPG engine to which passphrases are -     *                                 passed. -     * @param array            $keys   the decryption keys to use. -     */ -    public function __construct(Crypt_GPG_Engine $engine, array $keys) -    { -        $this->engine = $engine; -        $this->keys   = $keys; -    } - -    // }}} -    // {{{ handle() - -    /** -     * Handles a status line -     * -     * @param string $line the status line to handle. -     * -     * @return void -     */ -    public function handle($line) -    { -        $tokens = explode(' ', $line); -        switch ($tokens[0]) { -        case 'ENC_TO': -            // Now we know the message is encrypted. Set flag to check if -            // decryption succeeded. -            $this->decryptionOkay = false; - -            // this is the new key message -            $this->currentSubKeyId = $tokens[1]; -            break; - -        case 'NEED_PASSPHRASE': -            // send passphrase to the GPG engine -            $subKeyId = $tokens[1]; -            if (array_key_exists($subKeyId, $this->keys)) { -                $passphrase = $this->keys[$subKeyId]['passphrase']; -                $this->engine->sendCommand($passphrase); -            } else { -                $this->engine->sendCommand(''); -            } -            break; - -        case 'USERID_HINT': -            // remember the user id for pretty exception messages -            $this->badPassphrases[$tokens[1]] -                = implode(' ', array_splice($tokens, 2)); - -            break; - -        case 'GOOD_PASSPHRASE': -            // if we got a good passphrase, remove the key from the list of -            // bad passphrases. -            unset($this->badPassphrases[$this->currentSubKeyId]); -            break; - -        case 'MISSING_PASSPHRASE': -            $this->missingPassphrases[$this->currentSubKeyId] -                = $this->currentSubKeyId; - -            break; - -        case 'NO_SECKEY': -            // note: this message is also received if there are multiple -            // recipients and a previous key had a correct passphrase. -            $this->missingKeys[$tokens[1]] = $tokens[1]; -            break; - -        case 'NODATA': -            $this->noData = true; -            break; - -        case 'DECRYPTION_OKAY': -            // If the message is encrypted, this is the all-clear signal. -            $this->decryptionOkay = true; -            break; -        } -    } - -    // }}} -    // {{{ throwException() - -    /** -     * Takes the final status of the decrypt operation and throws an -     * appropriate exception -     * -     * If decryption was successful, no exception is thrown. -     * -     * @return void -     * -     * @throws Crypt_GPG_KeyNotFoundException if the private key needed to -     *         decrypt the data is not in the user's keyring. -     * -     * @throws Crypt_GPG_NoDataException if specified data does not contain -     *         GPG encrypted data. -     * -     * @throws Crypt_GPG_BadPassphraseException if a required passphrase is -     *         incorrect or if a required passphrase is not specified. See -     *         {@link Crypt_GPG::addDecryptKey()}. -     * -     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. -     *         Use the <i>debug</i> option and file a bug report if these -     *         exceptions occur. -     */ -    public function throwException() -    { -        $code = Crypt_GPG::ERROR_NONE; - -        if (!$this->decryptionOkay) { -            if (count($this->badPassphrases) > 0) { -                $code = Crypt_GPG::ERROR_BAD_PASSPHRASE; -            } elseif (count($this->missingKeys) > 0) { -                $code = Crypt_GPG::ERROR_KEY_NOT_FOUND; -            } else { -                $code = Crypt_GPG::ERROR_UNKNOWN; -            } -        } elseif ($this->noData) { -            $code = Crypt_GPG::ERROR_NO_DATA; -        } - -        switch ($code) { -        case Crypt_GPG::ERROR_NONE: -            break; - -        case Crypt_GPG::ERROR_KEY_NOT_FOUND: -            if (count($this->missingKeys) > 0) { -                $keyId = reset($this->missingKeys); -            } else { -                $keyId = ''; -            } -            throw new Crypt_GPG_KeyNotFoundException( -                'Cannot decrypt data. No suitable private key is in the ' . -                'keyring. Import a suitable private key before trying to ' . -                'decrypt this data.', $code, $keyId); - -        case Crypt_GPG::ERROR_BAD_PASSPHRASE: -            $badPassphrases = array_diff_key( -                $this->badPassphrases, -                $this->missingPassphrases -            ); - -            $missingPassphrases = array_intersect_key( -                $this->badPassphrases, -                $this->missingPassphrases -            ); - -            $message =  'Cannot decrypt data.'; -            if (count($badPassphrases) > 0) { -                $message = ' Incorrect passphrase provided for keys: "' . -                    implode('", "', $badPassphrases) . '".'; -            } -            if (count($missingPassphrases) > 0) { -                $message = ' No passphrase provided for keys: "' . -                    implode('", "', $badPassphrases) . '".'; -            } - -            throw new Crypt_GPG_BadPassphraseException($message, $code, -                $badPassphrases, $missingPassphrases); - -        case Crypt_GPG::ERROR_NO_DATA: -            throw new Crypt_GPG_NoDataException( -                'Cannot decrypt data. No PGP encrypted data was found in '. -                'the provided data.', $code); - -        default: -            throw new Crypt_GPG_Exception( -                'Unknown error decrypting data.', $code); -        } -    } - -    // }}} -} - -?> diff --git a/plugins/enigma/lib/Crypt/GPG/Engine.php b/plugins/enigma/lib/Crypt/GPG/Engine.php deleted file mode 100644 index 081be8e21..000000000 --- a/plugins/enigma/lib/Crypt/GPG/Engine.php +++ /dev/null @@ -1,1758 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This file contains an engine that handles GPG subprocess control and I/O. - * PHP's process manipulation functions are used to handle the GPG subprocess. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Nathan Fredrickson <nathan@silverorange.com> - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version   CVS: $Id: Engine.php 302822 2010-08-26 17:30:57Z gauthierm $ - * @link      http://pear.php.net/package/Crypt_GPG - * @link      http://www.gnupg.org/ - */ - -/** - * Crypt_GPG base class. - */ -require_once 'Crypt/GPG.php'; - -/** - * GPG exception classes. - */ -require_once 'Crypt/GPG/Exceptions.php'; - -/** - * Standard PEAR exception is used if GPG binary is not found. - */ -require_once 'PEAR/Exception.php'; - -// {{{ class Crypt_GPG_Engine - -/** - * Native PHP Crypt_GPG I/O engine - * - * This class is used internally by Crypt_GPG and does not need be used - * directly. See the {@link Crypt_GPG} class for end-user API. - * - * This engine uses PHP's native process control functions to directly control - * the GPG process. The GPG executable is required to be on the system. - * - * All data is passed to the GPG subprocess using file descriptors. This is the - * most secure method of passing data to the GPG subprocess. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Nathan Fredrickson <nathan@silverorange.com> - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - * @link      http://www.gnupg.org/ - */ -class Crypt_GPG_Engine -{ -    // {{{ constants - -    /** -     * Size of data chunks that are sent to and retrieved from the IPC pipes. -     * -     * PHP reads 8192 bytes. If this is set to less than 8192, PHP reads 8192 -     * and buffers the rest so we might as well just read 8192. -     * -     * Using values other than 8192 also triggers PHP bugs. -     * -     * @see http://bugs.php.net/bug.php?id=35224 -     */ -    const CHUNK_SIZE = 8192; - -    /** -     * Standard input file descriptor. This is used to pass data to the GPG -     * process. -     */ -    const FD_INPUT = 0; - -    /** -     * Standard output file descriptor. This is used to receive normal output -     * from the GPG process. -     */ -    const FD_OUTPUT = 1; - -    /** -     * Standard output file descriptor. This is used to receive error output -     * from the GPG process. -     */ -    const FD_ERROR = 2; - -    /** -     * GPG status output file descriptor. The status file descriptor outputs -     * detailed information for many GPG commands. See the second section of -     * the file <b>doc/DETAILS</b> in the -     * {@link http://www.gnupg.org/download/ GPG package} for a detailed -     * description of GPG's status output. -     */ -    const FD_STATUS = 3; - -    /** -     * Command input file descriptor. This is used for methods requiring -     * passphrases. -     */ -    const FD_COMMAND = 4; - -    /** -     * Extra message input file descriptor. This is used for passing signed -     * data when verifying a detached signature. -     */ -    const FD_MESSAGE = 5; - -    /** -     * Minimum version of GnuPG that is supported. -     */ -    const MIN_VERSION = '1.0.2'; - -    // }}} -    // {{{ private class properties - -    /** -     * Whether or not to use debugging mode -     * -     * When set to true, every GPG command is echoed before it is run. Sensitive -     * data is always handled using pipes and is not specified as part of the -     * command. As a result, sensitive data is never displayed when debug is -     * enabled. Sensitive data includes private key data and passphrases. -     * -     * Debugging is off by default. -     * -     * @var boolean -     * @see Crypt_GPG_Engine::__construct() -     */ -    private $_debug = false; - -    /** -     * Location of GPG binary -     * -     * @var string -     * @see Crypt_GPG_Engine::__construct() -     * @see Crypt_GPG_Engine::_getBinary() -     */ -    private $_binary = ''; - -    /** -     * Directory containing the GPG key files -     * -     * This property only contains the path when the <i>homedir</i> option -     * is specified in the constructor. -     * -     * @var string -     * @see Crypt_GPG_Engine::__construct() -     */ -    private $_homedir = ''; - -    /** -     * File path of the public keyring -     * -     * This property only contains the file path when the <i>public_keyring</i> -     * option is specified in the constructor. -     * -     * If the specified file path starts with <kbd>~/</kbd>, the path is -     * relative to the <i>homedir</i> if specified, otherwise to -     * <kbd>~/.gnupg</kbd>. -     * -     * @var string -     * @see Crypt_GPG_Engine::__construct() -     */ -    private $_publicKeyring = ''; - -    /** -     * File path of the private (secret) keyring -     * -     * This property only contains the file path when the <i>private_keyring</i> -     * option is specified in the constructor. -     * -     * If the specified file path starts with <kbd>~/</kbd>, the path is -     * relative to the <i>homedir</i> if specified, otherwise to -     * <kbd>~/.gnupg</kbd>. -     * -     * @var string -     * @see Crypt_GPG_Engine::__construct() -     */ -    private $_privateKeyring = ''; - -    /** -     * File path of the trust database -     * -     * This property only contains the file path when the <i>trust_db</i> -     * option is specified in the constructor. -     * -     * If the specified file path starts with <kbd>~/</kbd>, the path is -     * relative to the <i>homedir</i> if specified, otherwise to -     * <kbd>~/.gnupg</kbd>. -     * -     * @var string -     * @see Crypt_GPG_Engine::__construct() -     */ -    private $_trustDb = ''; - -    /** -     * Array of pipes used for communication with the GPG binary -     * -     * This is an array of file descriptor resources. -     * -     * @var array -     */ -    private $_pipes = array(); - -    /** -     * Array of currently opened pipes -     * -     * This array is used to keep track of remaining opened pipes so they can -     * be closed when the GPG subprocess is finished. This array is a subset of -     * the {@link Crypt_GPG_Engine::$_pipes} array and contains opened file -     * descriptor resources. -     * -     * @var array -     * @see Crypt_GPG_Engine::_closePipe() -     */ -    private $_openPipes = array(); - -    /** -     * A handle for the GPG process -     * -     * @var resource -     */ -    private $_process = null; - -    /** -     * Whether or not the operating system is Darwin (OS X) -     * -     * @var boolean -     */ -    private $_isDarwin = false; - -    /** -     * Commands to be sent to GPG's command input stream -     * -     * @var string -     * @see Crypt_GPG_Engine::sendCommand() -     */ -    private $_commandBuffer = ''; - -    /** -     * Array of status line handlers -     * -     * @var array -     * @see Crypt_GPG_Engine::addStatusHandler() -     */ -    private $_statusHandlers = array(); - -    /** -     * Array of error line handlers -     * -     * @var array -     * @see Crypt_GPG_Engine::addErrorHandler() -     */ -    private $_errorHandlers = array(); - -    /** -     * The error code of the current operation -     * -     * @var integer -     * @see Crypt_GPG_Engine::getErrorCode() -     */ -    private $_errorCode = Crypt_GPG::ERROR_NONE; - -    /** -     * File related to the error code of the current operation -     * -     * @var string -     * @see Crypt_GPG_Engine::getErrorFilename() -     */ -    private $_errorFilename = ''; - -    /** -     * Key id related to the error code of the current operation -     * -     * @var string -     * @see Crypt_GPG_Engine::getErrorKeyId() -     */ -    private $_errorkeyId = ''; - -    /** -     * The number of currently needed passphrases -     * -     * If this is not zero when the GPG command is completed, the error code is -     * set to {@link Crypt_GPG::ERROR_MISSING_PASSPHRASE}. -     * -     * @var integer -     */ -    private $_needPassphrase = 0; - -    /** -     * The input source -     * -     * This is data to send to GPG. Either a string or a stream resource. -     * -     * @var string|resource -     * @see Crypt_GPG_Engine::setInput() -     */ -    private $_input = null; - -    /** -     * The extra message input source -     * -     * Either a string or a stream resource. -     * -     * @var string|resource -     * @see Crypt_GPG_Engine::setMessage() -     */ -    private $_message = null; - -    /** -     * The output location -     * -     * This is where the output from GPG is sent. Either a string or a stream -     * resource. -     * -     * @var string|resource -     * @see Crypt_GPG_Engine::setOutput() -     */ -    private $_output = ''; - -    /** -     * The GPG operation to execute -     * -     * @var string -     * @see Crypt_GPG_Engine::setOperation() -     */ -    private $_operation; - -    /** -     * Arguments for the current operation -     * -     * @var array -     * @see Crypt_GPG_Engine::setOperation() -     */ -    private $_arguments = array(); - -    /** -     * The version number of the GPG binary -     * -     * @var string -     * @see Crypt_GPG_Engine::getVersion() -     */ -    private $_version = ''; - -    /** -     * Cached value indicating whether or not mbstring function overloading is -     * on for strlen -     * -     * This is cached for optimal performance inside the I/O loop. -     * -     * @var boolean -     * @see Crypt_GPG_Engine::_byteLength() -     * @see Crypt_GPG_Engine::_byteSubstring() -     */ -    private static $_mbStringOverload = null; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new GPG engine -     * -     * Available options are: -     * -     * - <kbd>string  homedir</kbd>        - the directory where the GPG -     *                                       keyring files are stored. If not -     *                                       specified, Crypt_GPG uses the -     *                                       default of <kbd>~/.gnupg</kbd>. -     * - <kbd>string  publicKeyring</kbd>  - the file path of the public -     *                                       keyring. Use this if the public -     *                                       keyring is not in the homedir, or -     *                                       if the keyring is in a directory -     *                                       not writable by the process -     *                                       invoking GPG (like Apache). Then -     *                                       you can specify the path to the -     *                                       keyring with this option -     *                                       (/foo/bar/pubring.gpg), and specify -     *                                       a writable directory (like /tmp) -     *                                       using the <i>homedir</i> option. -     * - <kbd>string  privateKeyring</kbd> - the file path of the private -     *                                       keyring. Use this if the private -     *                                       keyring is not in the homedir, or -     *                                       if the keyring is in a directory -     *                                       not writable by the process -     *                                       invoking GPG (like Apache). Then -     *                                       you can specify the path to the -     *                                       keyring with this option -     *                                       (/foo/bar/secring.gpg), and specify -     *                                       a writable directory (like /tmp) -     *                                       using the <i>homedir</i> option. -     * - <kbd>string  trustDb</kbd>        - the file path of the web-of-trust -     *                                       database. Use this if the trust -     *                                       database is not in the homedir, or -     *                                       if the database is in a directory -     *                                       not writable by the process -     *                                       invoking GPG (like Apache). Then -     *                                       you can specify the path to the -     *                                       trust database with this option -     *                                       (/foo/bar/trustdb.gpg), and specify -     *                                       a writable directory (like /tmp) -     *                                       using the <i>homedir</i> option. -     * - <kbd>string  binary</kbd>         - the location of the GPG binary. If -     *                                       not specified, the driver attempts -     *                                       to auto-detect the GPG binary -     *                                       location using a list of known -     *                                       default locations for the current -     *                                       operating system. The option -     *                                       <kbd>gpgBinary</kbd> is a -     *                                       deprecated alias for this option. -     * - <kbd>boolean debug</kbd>          - whether or not to use debug mode. -     *                                       When debug mode is on, all -     *                                       communication to and from the GPG -     *                                       subprocess is logged. This can be -     *                                       useful to diagnose errors when -     *                                       using Crypt_GPG. -     * -     * @param array $options optional. An array of options used to create the -     *                       GPG object. All options are optional and are -     *                       represented as key-value pairs. -     * -     * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist -     *         and cannot be created. This can happen if <kbd>homedir</kbd> is -     *         not specified, Crypt_GPG is run as the web user, and the web -     *         user has no home directory. This exception is also thrown if any -     *         of the options <kbd>publicKeyring</kbd>, -     *         <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are -     *         specified but the files do not exist or are are not readable. -     *         This can happen if the user running the Crypt_GPG process (for -     *         example, the Apache user) does not have permission to read the -     *         files. -     * -     * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or -     *         if no <kbd>binary</kbd> is provided and no suitable binary could -     *         be found. -     */ -    public function __construct(array $options = array()) -    { -        $this->_isDarwin = (strncmp(strtoupper(PHP_OS), 'DARWIN', 6) === 0); - -        // populate mbstring overloading cache if not set -        if (self::$_mbStringOverload === null) { -            self::$_mbStringOverload = (extension_loaded('mbstring') -                && (ini_get('mbstring.func_overload') & 0x02) === 0x02); -        } - -        // get homedir -        if (array_key_exists('homedir', $options)) { -            $this->_homedir = (string)$options['homedir']; -        } else { -            // note: this requires the package OS dep exclude 'windows' -            $info = posix_getpwuid(posix_getuid()); -            $this->_homedir = $info['dir'].'/.gnupg'; -        } - -        // attempt to create homedir if it does not exist -        if (!is_dir($this->_homedir)) { -            if (@mkdir($this->_homedir, 0777, true)) { -                // Set permissions on homedir. Parent directories are created -                // with 0777, homedir is set to 0700. -                chmod($this->_homedir, 0700); -            } else { -                throw new Crypt_GPG_FileException('The \'homedir\' "' . -                    $this->_homedir . '" is not readable or does not exist '. -                    'and cannot be created. This can happen if \'homedir\' '. -                    'is not specified in the Crypt_GPG options, Crypt_GPG is '. -                    'run as the web user, and the web user has no home '. -                    'directory.', -                    0, $this->_homedir); -            } -        } - -        // get binary -        if (array_key_exists('binary', $options)) { -            $this->_binary = (string)$options['binary']; -        } elseif (array_key_exists('gpgBinary', $options)) { -            // deprecated alias -            $this->_binary = (string)$options['gpgBinary']; -        } else { -            $this->_binary = $this->_getBinary(); -        } - -        if ($this->_binary == '' || !is_executable($this->_binary)) { -            throw new PEAR_Exception('GPG binary not found. If you are sure '. -                'the GPG binary is installed, please specify the location of '. -                'the GPG binary using the \'binary\' driver option.'); -        } - -        /* -         * Note: -         * -         * Normally, GnuPG expects keyrings to be in the homedir and expects -         * to be able to write temporary files in the homedir. Sometimes, -         * keyrings are not in the homedir, or location of the keyrings does -         * not allow writing temporary files. In this case, the <i>homedir</i> -         * option by itself is not enough to specify the keyrings because GnuPG -         * can not write required temporary files. Additional options are -         * provided so you can specify the location of the keyrings separately -         * from the homedir. -         */ - -        // get public keyring -        if (array_key_exists('publicKeyring', $options)) { -            $this->_publicKeyring = (string)$options['publicKeyring']; -            if (!is_readable($this->_publicKeyring)) { -                 throw new Crypt_GPG_FileException('The \'publicKeyring\' "' . -                    $this->_publicKeyring . '" does not exist or is ' . -                    'not readable. Check the location and ensure the file ' . -                    'permissions are correct.', 0, $this->_publicKeyring); -            } -        } - -        // get private keyring -        if (array_key_exists('privateKeyring', $options)) { -            $this->_privateKeyring = (string)$options['privateKeyring']; -            if (!is_readable($this->_privateKeyring)) { -                 throw new Crypt_GPG_FileException('The \'privateKeyring\' "' . -                    $this->_privateKeyring . '" does not exist or is ' . -                    'not readable. Check the location and ensure the file ' . -                    'permissions are correct.', 0, $this->_privateKeyring); -            } -        } - -        // get trust database -        if (array_key_exists('trustDb', $options)) { -            $this->_trustDb = (string)$options['trustDb']; -            if (!is_readable($this->_trustDb)) { -                 throw new Crypt_GPG_FileException('The \'trustDb\' "' . -                    $this->_trustDb . '" does not exist or is not readable. ' . -                    'Check the location and ensure the file permissions are ' . -                    'correct.', 0, $this->_trustDb); -            } -        } - -        if (array_key_exists('debug', $options)) { -            $this->_debug = (boolean)$options['debug']; -        } -    } - -    // }}} -    // {{{ __destruct() - -    /** -     * Closes open GPG subprocesses when this object is destroyed -     * -     * Subprocesses should never be left open by this class unless there is -     * an unknown error and unexpected script termination occurs. -     */ -    public function __destruct() -    { -        $this->_closeSubprocess(); -    } - -    // }}} -    // {{{ addErrorHandler() - -    /** -     * Adds an error handler method -     * -     * The method is run every time a new error line is received from the GPG -     * subprocess. The handler method must accept the error line to be handled -     * as its first parameter. -     * -     * @param callback $callback the callback method to use. -     * @param array    $args     optional. Additional arguments to pass as -     *                           parameters to the callback method. -     * -     * @return void -     */ -    public function addErrorHandler($callback, array $args = array()) -    { -        $this->_errorHandlers[] = array( -            'callback' => $callback, -            'args'     => $args -        ); -    } - -    // }}} -    // {{{ addStatusHandler() - -    /** -     * Adds a status handler method -     * -     * The method is run every time a new status line is received from the -     * GPG subprocess. The handler method must accept the status line to be -     * handled as its first parameter. -     * -     * @param callback $callback the callback method to use. -     * @param array    $args     optional. Additional arguments to pass as -     *                           parameters to the callback method. -     * -     * @return void -     */ -    public function addStatusHandler($callback, array $args = array()) -    { -        $this->_statusHandlers[] = array( -            'callback' => $callback, -            'args'     => $args -        ); -    } - -    // }}} -    // {{{ sendCommand() - -    /** -     * Sends a command to the GPG subprocess over the command file-descriptor -     * pipe -     * -     * @param string $command the command to send. -     * -     * @return void -     * -     * @sensitive $command -     */ -    public function sendCommand($command) -    { -        if (array_key_exists(self::FD_COMMAND, $this->_openPipes)) { -            $this->_commandBuffer .= $command . PHP_EOL; -        } -    } - -    // }}} -    // {{{ reset() - -    /** -     * Resets the GPG engine, preparing it for a new operation -     * -     * @return void -     * -     * @see Crypt_GPG_Engine::run() -     * @see Crypt_GPG_Engine::setOperation() -     */ -    public function reset() -    { -        $this->_operation      = ''; -        $this->_arguments      = array(); -        $this->_input          = null; -        $this->_message        = null; -        $this->_output         = ''; -        $this->_errorCode      = Crypt_GPG::ERROR_NONE; -        $this->_needPassphrase = 0; -        $this->_commandBuffer  = ''; - -        $this->_statusHandlers = array(); -        $this->_errorHandlers  = array(); - -        $this->addStatusHandler(array($this, '_handleErrorStatus')); -        $this->addErrorHandler(array($this, '_handleErrorError')); - -        if ($this->_debug) { -            $this->addStatusHandler(array($this, '_handleDebugStatus')); -            $this->addErrorHandler(array($this, '_handleDebugError')); -        } -    } - -    // }}} -    // {{{ run() - -    /** -     * Runs the current GPG operation -     * -     * This creates and manages the GPG subprocess. -     * -     * The operation must be set with {@link Crypt_GPG_Engine::setOperation()} -     * before this method is called. -     * -     * @return void -     * -     * @throws Crypt_GPG_InvalidOperationException if no operation is specified. -     * -     * @see Crypt_GPG_Engine::reset() -     * @see Crypt_GPG_Engine::setOperation() -     */ -    public function run() -    { -        if ($this->_operation === '') { -            throw new Crypt_GPG_InvalidOperationException('No GPG operation ' . -                'specified. Use Crypt_GPG_Engine::setOperation() before ' . -                'calling Crypt_GPG_Engine::run().'); -        } - -        $this->_openSubprocess(); -        $this->_process(); -        $this->_closeSubprocess(); -    } - -    // }}} -    // {{{ getErrorCode() - -    /** -     * Gets the error code of the last executed operation -     * -     * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has -     * been executed. -     * -     * @return integer the error code of the last executed operation. -     */ -    public function getErrorCode() -    { -        return $this->_errorCode; -    } - -    // }}} -    // {{{ getErrorFilename() - -    /** -     * Gets the file related to the error code of the last executed operation -     * -     * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has -     * been executed. If there is no file related to the error, an empty string -     * is returned. -     * -     * @return string the file related to the error code of the last executed -     *                operation. -     */ -    public function getErrorFilename() -    { -        return $this->_errorFilename; -    } - -    // }}} -    // {{{ getErrorKeyId() - -    /** -     * Gets the key id related to the error code of the last executed operation -     * -     * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has -     * been executed. If there is no key id related to the error, an empty -     * string is returned. -     * -     * @return string the key id related to the error code of the last executed -     *                operation. -     */ -    public function getErrorKeyId() -    { -        return $this->_errorKeyId; -    } - -    // }}} -    // {{{ setInput() - -    /** -     * Sets the input source for the current GPG operation -     * -     * @param string|resource &$input either a reference to the string -     *                                containing the input data or an open -     *                                stream resource containing the input -     *                                data. -     * -     * @return void -     */ -    public function setInput(&$input) -    { -        $this->_input =& $input; -    } - -    // }}} -    // {{{ setMessage() - -    /** -     * Sets the message source for the current GPG operation -     * -     * Detached signature data should be specified here. -     * -     * @param string|resource &$message either a reference to the string -     *                                  containing the message data or an open -     *                                  stream resource containing the message -     *                                  data. -     * -     * @return void -     */ -    public function setMessage(&$message) -    { -        $this->_message =& $message; -    } - -    // }}} -    // {{{ setOutput() - -    /** -     * Sets the output destination for the current GPG operation -     * -     * @param string|resource &$output either a reference to the string in -     *                                 which to store GPG output or an open -     *                                 stream resource to which the output data -     *                                 should be written. -     * -     * @return void -     */ -    public function setOutput(&$output) -    { -        $this->_output =& $output; -    } - -    // }}} -    // {{{ setOperation() - -    /** -     * Sets the operation to perform -     * -     * @param string $operation the operation to perform. This should be one -     *                          of GPG's operations. For example, -     *                          <kbd>--encrypt</kbd>, <kbd>--decrypt</kbd>, -     *                          <kbd>--sign</kbd>, etc. -     * @param array  $arguments optional. Additional arguments for the GPG -     *                          subprocess. See the GPG manual for specific -     *                          values. -     * -     * @return void -     * -     * @see Crypt_GPG_Engine::reset() -     * @see Crypt_GPG_Engine::run() -     */ -    public function setOperation($operation, array $arguments = array()) -    { -        $this->_operation = $operation; -        $this->_arguments = $arguments; -    } - -    // }}} -    // {{{ getVersion() - -    /** -     * Gets the version of the GnuPG binary -     * -     * @return string a version number string containing the version of GnuPG -     *                being used. This value is suitable to use with PHP's -     *                version_compare() function. -     * -     * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. -     *         Use the <kbd>debug</kbd> option and file a bug report if these -     *         exceptions occur. -     * -     * @throws Crypt_GPG_UnsupportedException if the provided binary is not -     *         GnuPG or if the GnuPG version is less than 1.0.2. -     */ -    public function getVersion() -    { -        if ($this->_version == '') { - -            $options = array( -                'homedir' => $this->_homedir, -                'binary'  => $this->_binary, -                'debug'   => $this->_debug -            ); - -            $engine = new self($options); -            $info   = ''; - -            // Set a garbage version so we do not end up looking up the version -            // recursively. -            $engine->_version = '1.0.0'; - -            $engine->reset(); -            $engine->setOutput($info); -            $engine->setOperation('--version'); -            $engine->run(); - -            $code = $this->getErrorCode(); - -            if ($code !== Crypt_GPG::ERROR_NONE) { -                throw new Crypt_GPG_Exception( -                    'Unknown error getting GnuPG version information. Please ' . -                    'use the \'debug\' option when creating the Crypt_GPG ' . -                    'object, and file a bug report at ' . Crypt_GPG::BUG_URI, -                    $code); -            } - -            $matches    = array(); -            $expression = '/gpg \(GnuPG\) (\S+)/'; - -            if (preg_match($expression, $info, $matches) === 1) { -                $this->_version = $matches[1]; -            } else { -                throw new Crypt_GPG_Exception( -                    'No GnuPG version information provided by the binary "' . -                    $this->_binary . '". Are you sure it is GnuPG?'); -            } - -            if (version_compare($this->_version, self::MIN_VERSION, 'lt')) { -                throw new Crypt_GPG_Exception( -                    'The version of GnuPG being used (' . $this->_version . -                    ') is not supported by Crypt_GPG. The minimum version ' . -                    'required by Crypt_GPG is ' . self::MIN_VERSION); -            } -        } - - -        return $this->_version; -    } - -    // }}} -    // {{{ _handleErrorStatus() - -    /** -     * Handles error values in the status output from GPG -     * -     * This method is responsible for setting the -     * {@link Crypt_GPG_Engine::$_errorCode}. See <b>doc/DETAILS</b> in the -     * {@link http://www.gnupg.org/download/ GPG distribution} for detailed -     * information on GPG's status output. -     * -     * @param string $line the status line to handle. -     * -     * @return void -     */ -    private function _handleErrorStatus($line) -    { -        $tokens = explode(' ', $line); -        switch ($tokens[0]) { -        case 'BAD_PASSPHRASE': -            $this->_errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE; -            break; - -        case 'MISSING_PASSPHRASE': -            $this->_errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE; -            break; - -        case 'NODATA': -            $this->_errorCode = Crypt_GPG::ERROR_NO_DATA; -            break; - -        case 'DELETE_PROBLEM': -            if ($tokens[1] == '1') { -                $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND; -                break; -            } elseif ($tokens[1] == '2') { -                $this->_errorCode = Crypt_GPG::ERROR_DELETE_PRIVATE_KEY; -                break; -            } -            break; - -        case 'IMPORT_RES': -            if ($tokens[12] > 0) { -                $this->_errorCode = Crypt_GPG::ERROR_DUPLICATE_KEY; -            } -            break; - -        case 'NO_PUBKEY': -        case 'NO_SECKEY': -            $this->_errorKeyId = $tokens[1]; -            $this->_errorCode  = Crypt_GPG::ERROR_KEY_NOT_FOUND; -            break; - -        case 'NEED_PASSPHRASE': -            $this->_needPassphrase++; -            break; - -        case 'GOOD_PASSPHRASE': -            $this->_needPassphrase--; -            break; - -        case 'EXPSIG': -        case 'EXPKEYSIG': -        case 'REVKEYSIG': -        case 'BADSIG': -            $this->_errorCode = Crypt_GPG::ERROR_BAD_SIGNATURE; -            break; - -        } -    } - -    // }}} -    // {{{ _handleErrorError() - -    /** -     * Handles error values in the error output from GPG -     * -     * This method is responsible for setting the -     * {@link Crypt_GPG_Engine::$_errorCode}. -     * -     * @param string $line the error line to handle. -     * -     * @return void -     */ -    private function _handleErrorError($line) -    { -        if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { -            $pattern = '/no valid OpenPGP data found/'; -            if (preg_match($pattern, $line) === 1) { -                $this->_errorCode = Crypt_GPG::ERROR_NO_DATA; -            } -        } - -        if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { -            $pattern = '/No secret key|secret key not available/'; -            if (preg_match($pattern, $line) === 1) { -                $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND; -            } -        } - -        if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { -            $pattern = '/No public key|public key not found/'; -            if (preg_match($pattern, $line) === 1) { -                $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND; -            } -        } - -        if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { -            $matches = array(); -            $pattern = '/can\'t (?:access|open) `(.*?)\'/'; -            if (preg_match($pattern, $line, $matches) === 1) { -                $this->_errorFilename = $matches[1]; -                $this->_errorCode = Crypt_GPG::ERROR_FILE_PERMISSIONS; -            } -        } -    } - -    // }}} -    // {{{ _handleDebugStatus() - -    /** -     * Displays debug output for status lines -     * -     * @param string $line the status line to handle. -     * -     * @return void -     */ -    private function _handleDebugStatus($line) -    { -        $this->_debug('STATUS: ' . $line); -    } - -    // }}} -    // {{{ _handleDebugError() - -    /** -     * Displays debug output for error lines -     * -     * @param string $line the error line to handle. -     * -     * @return void -     */ -    private function _handleDebugError($line) -    { -        $this->_debug('ERROR: ' . $line); -    } - -    // }}} -    // {{{ _process() - -    /** -     * Performs internal streaming operations for the subprocess using either -     * strings or streams as input / output points -     * -     * This is the main I/O loop for streaming to and from the GPG subprocess. -     * -     * The implementation of this method is verbose mainly for performance -     * reasons. Adding streams to a lookup array and looping the array inside -     * the main I/O loop would be siginficantly slower for large streams. -     * -     * @return void -     * -     * @throws Crypt_GPG_Exception if there is an error selecting streams for -     *         reading or writing. If this occurs, please file a bug report at -     *         http://pear.php.net/bugs/report.php?package=Crypt_GPG. -     */ -    private function _process() -    { -        $this->_debug('BEGIN PROCESSING'); - -        $this->_commandBuffer = '';    // buffers input to GPG -        $messageBuffer        = '';    // buffers input to GPG -        $inputBuffer          = '';    // buffers input to GPG -        $outputBuffer         = '';    // buffers output from GPG -        $statusBuffer         = '';    // buffers output from GPG -        $errorBuffer          = '';    // buffers output from GPG -        $inputComplete        = false; // input stream is completely buffered -        $messageComplete      = false; // message stream is completely buffered - -        if (is_string($this->_input)) { -            $inputBuffer   = $this->_input; -            $inputComplete = true; -        } - -        if (is_string($this->_message)) { -            $messageBuffer   = $this->_message; -            $messageComplete = true; -        } - -        if (is_string($this->_output)) { -            $outputBuffer =& $this->_output; -        } - -        // convenience variables -        $fdInput   = $this->_pipes[self::FD_INPUT]; -        $fdOutput  = $this->_pipes[self::FD_OUTPUT]; -        $fdError   = $this->_pipes[self::FD_ERROR]; -        $fdStatus  = $this->_pipes[self::FD_STATUS]; -        $fdCommand = $this->_pipes[self::FD_COMMAND]; -        $fdMessage = $this->_pipes[self::FD_MESSAGE]; - -        while (true) { - -            $inputStreams     = array(); -            $outputStreams    = array(); -            $exceptionStreams = array(); - -            // set up input streams -            if (is_resource($this->_input) && !$inputComplete) { -                if (feof($this->_input)) { -                    $inputComplete = true; -                } else { -                    $inputStreams[] = $this->_input; -                } -            } - -            // close GPG input pipe if there is no more data -            if ($inputBuffer == '' && $inputComplete) { -                $this->_debug('=> closing GPG input pipe'); -                $this->_closePipe(self::FD_INPUT); -            } - -            if (is_resource($this->_message) && !$messageComplete) { -                if (feof($this->_message)) { -                    $messageComplete = true; -                } else { -                    $inputStreams[] = $this->_message; -                } -            } - -            // close GPG message pipe if there is no more data -            if ($messageBuffer == '' && $messageComplete) { -                $this->_debug('=> closing GPG message pipe'); -                $this->_closePipe(self::FD_MESSAGE); -            } - -            if (!feof($fdOutput)) { -                $inputStreams[] = $fdOutput; -            } - -            if (!feof($fdStatus)) { -                $inputStreams[] = $fdStatus; -            } - -            if (!feof($fdError)) { -                $inputStreams[] = $fdError; -            } - -            // set up output streams -            if ($outputBuffer != '' && is_resource($this->_output)) { -                $outputStreams[] = $this->_output; -            } - -            if ($this->_commandBuffer != '') { -                $outputStreams[] = $fdCommand; -            } - -            if ($messageBuffer != '') { -                $outputStreams[] = $fdMessage; -            } - -            if ($inputBuffer != '') { -                $outputStreams[] = $fdInput; -            } - -            // no streams left to read or write, we're all done -            if (count($inputStreams) === 0 && count($outputStreams) === 0) { -                break; -            } - -            $this->_debug('selecting streams'); - -            $ready = stream_select( -                $inputStreams, -                $outputStreams, -                $exceptionStreams, -                null -            ); - -            $this->_debug('=> got ' . $ready); - -            if ($ready === false) { -                throw new Crypt_GPG_Exception( -                    'Error selecting stream for communication with GPG ' . -                    'subprocess. Please file a bug report at: ' . -                    'http://pear.php.net/bugs/report.php?package=Crypt_GPG'); -            } - -            if ($ready === 0) { -                throw new Crypt_GPG_Exception( -                    'stream_select() returned 0. This can not happen! Please ' . -                    'file a bug report at: ' . -                    'http://pear.php.net/bugs/report.php?package=Crypt_GPG'); -            } - -            // write input (to GPG) -            if (in_array($fdInput, $outputStreams)) { -                $this->_debug('GPG is ready for input'); - -                $chunk = self::_byteSubstring( -                    $inputBuffer, -                    0, -                    self::CHUNK_SIZE -                ); - -                $length = self::_byteLength($chunk); - -                $this->_debug( -                    '=> about to write ' . $length . ' bytes to GPG input' -                ); - -                $length = fwrite($fdInput, $chunk, $length); - -                $this->_debug('=> wrote ' . $length . ' bytes'); - -                $inputBuffer = self::_byteSubstring( -                    $inputBuffer, -                    $length -                ); -            } - -            // read input (from PHP stream) -            if (in_array($this->_input, $inputStreams)) { -                $this->_debug('input stream is ready for reading'); -                $this->_debug( -                    '=> about to read ' . self::CHUNK_SIZE . -                    ' bytes from input stream' -                ); - -                $chunk        = fread($this->_input, self::CHUNK_SIZE); -                $length       = self::_byteLength($chunk); -                $inputBuffer .= $chunk; - -                $this->_debug('=> read ' . $length . ' bytes'); -            } - -            // write message (to GPG) -            if (in_array($fdMessage, $outputStreams)) { -                $this->_debug('GPG is ready for message data'); - -                $chunk = self::_byteSubstring( -                    $messageBuffer, -                    0, -                    self::CHUNK_SIZE -                ); - -                $length = self::_byteLength($chunk); - -                $this->_debug( -                    '=> about to write ' . $length . ' bytes to GPG message' -                ); - -                $length = fwrite($fdMessage, $chunk, $length); -                $this->_debug('=> wrote ' . $length . ' bytes'); - -                $messageBuffer = self::_byteSubstring($messageBuffer, $length); -            } - -            // read message (from PHP stream) -            if (in_array($this->_message, $inputStreams)) { -                $this->_debug('message stream is ready for reading'); -                $this->_debug( -                    '=> about to read ' . self::CHUNK_SIZE . -                    ' bytes from message stream' -                ); - -                $chunk          = fread($this->_message, self::CHUNK_SIZE); -                $length         = self::_byteLength($chunk); -                $messageBuffer .= $chunk; - -                $this->_debug('=> read ' . $length . ' bytes'); -            } - -            // read output (from GPG) -            if (in_array($fdOutput, $inputStreams)) { -                $this->_debug('GPG output stream ready for reading'); -                $this->_debug( -                    '=> about to read ' . self::CHUNK_SIZE . -                    ' bytes from GPG output' -                ); - -                $chunk         = fread($fdOutput, self::CHUNK_SIZE); -                $length        = self::_byteLength($chunk); -                $outputBuffer .= $chunk; - -                $this->_debug('=> read ' . $length . ' bytes'); -            } - -            // write output (to PHP stream) -            if (in_array($this->_output, $outputStreams)) { -                $this->_debug('output stream is ready for data'); - -                $chunk = self::_byteSubstring( -                    $outputBuffer, -                    0, -                    self::CHUNK_SIZE -                ); - -                $length = self::_byteLength($chunk); - -                $this->_debug( -                    '=> about to write ' . $length . ' bytes to output stream' -                ); - -                $length = fwrite($this->_output, $chunk, $length); - -                $this->_debug('=> wrote ' . $length . ' bytes'); - -                $outputBuffer = self::_byteSubstring($outputBuffer, $length); -            } - -            // read error (from GPG) -            if (in_array($fdError, $inputStreams)) { -                $this->_debug('GPG error stream ready for reading'); -                $this->_debug( -                    '=> about to read ' . self::CHUNK_SIZE . -                    ' bytes from GPG error' -                ); - -                $chunk        = fread($fdError, self::CHUNK_SIZE); -                $length       = self::_byteLength($chunk); -                $errorBuffer .= $chunk; - -                $this->_debug('=> read ' . $length . ' bytes'); - -                // pass lines to error handlers -                while (($pos = strpos($errorBuffer, PHP_EOL)) !== false) { -                    $line = self::_byteSubstring($errorBuffer, 0, $pos); -                    foreach ($this->_errorHandlers as $handler) { -                        array_unshift($handler['args'], $line); -                        call_user_func_array( -                            $handler['callback'], -                            $handler['args'] -                        ); - -                        array_shift($handler['args']); -                    } -                    $errorBuffer = self::_byteSubString( -                        $errorBuffer, -                        $pos + self::_byteLength(PHP_EOL) -                    ); -                } -            } - -            // read status (from GPG) -            if (in_array($fdStatus, $inputStreams)) { -                $this->_debug('GPG status stream ready for reading'); -                $this->_debug( -                    '=> about to read ' . self::CHUNK_SIZE . -                    ' bytes from GPG status' -                ); - -                $chunk         = fread($fdStatus, self::CHUNK_SIZE); -                $length        = self::_byteLength($chunk); -                $statusBuffer .= $chunk; - -                $this->_debug('=> read ' . $length . ' bytes'); - -                // pass lines to status handlers -                while (($pos = strpos($statusBuffer, PHP_EOL)) !== false) { -                    $line = self::_byteSubstring($statusBuffer, 0, $pos); -                    // only pass lines beginning with magic prefix -                    if (self::_byteSubstring($line, 0, 9) == '[GNUPG:] ') { -                        $line = self::_byteSubstring($line, 9); -                        foreach ($this->_statusHandlers as $handler) { -                            array_unshift($handler['args'], $line); -                            call_user_func_array( -                                $handler['callback'], -                                $handler['args'] -                            ); - -                            array_shift($handler['args']); -                        } -                    } -                    $statusBuffer = self::_byteSubString( -                        $statusBuffer, -                        $pos + self::_byteLength(PHP_EOL) -                    ); -                } -            } - -            // write command (to GPG) -            if (in_array($fdCommand, $outputStreams)) { -                $this->_debug('GPG is ready for command data'); - -                // send commands -                $chunk = self::_byteSubstring( -                    $this->_commandBuffer, -                    0, -                    self::CHUNK_SIZE -                ); - -                $length = self::_byteLength($chunk); - -                $this->_debug( -                    '=> about to write ' . $length . ' bytes to GPG command' -                ); - -                $length = fwrite($fdCommand, $chunk, $length); - -                $this->_debug('=> wrote ' . $length); - -                $this->_commandBuffer = self::_byteSubstring( -                    $this->_commandBuffer, -                    $length -                ); -            } - -        } // end loop while streams are open - -        $this->_debug('END PROCESSING'); -    } - -    // }}} -    // {{{ _openSubprocess() - -    /** -     * Opens an internal GPG subprocess for the current operation -     * -     * Opens a GPG subprocess, then connects the subprocess to some pipes. Sets -     * the private class property {@link Crypt_GPG_Engine::$_process} to -     * the new subprocess. -     * -     * @return void -     * -     * @throws Crypt_GPG_OpenSubprocessException if the subprocess could not be -     *         opened. -     * -     * @see Crypt_GPG_Engine::setOperation() -     * @see Crypt_GPG_Engine::_closeSubprocess() -     * @see Crypt_GPG_Engine::$_process -     */ -    private function _openSubprocess() -    { -        $version = $this->getVersion(); - -        $env = $_ENV; - -        // Newer versions of GnuPG return localized results. Crypt_GPG only -        // works with English, so set the locale to 'C' for the subprocess. -        $env['LC_ALL'] = 'C'; - -        $commandLine = $this->_binary; - -        $defaultArguments = array( -            '--status-fd ' . escapeshellarg(self::FD_STATUS), -            '--command-fd ' . escapeshellarg(self::FD_COMMAND), -            '--no-secmem-warning', -            '--no-tty', -            '--no-default-keyring', // ignored if keying files are not specified -            '--no-options'          // prevent creation of ~/.gnupg directory -        ); - -        if (version_compare($version, '1.0.7', 'ge')) { -            if (version_compare($version, '2.0.0', 'lt')) { -                $defaultArguments[] = '--no-use-agent'; -            } -            $defaultArguments[] = '--no-permission-warning'; -        } - -        if (version_compare($version, '1.4.2', 'ge')) { -            $defaultArguments[] = '--exit-on-status-write-error'; -        } - -        if (version_compare($version, '1.3.2', 'ge')) { -            $defaultArguments[] = '--trust-model always'; -        } else { -            $defaultArguments[] = '--always-trust'; -        } - -        $arguments = array_merge($defaultArguments, $this->_arguments); - -        if ($this->_homedir) { -            $arguments[] = '--homedir ' . escapeshellarg($this->_homedir); - -            // the random seed file makes subsequent actions faster so only -            // disable it if we have to. -            if (!is_writeable($this->_homedir)) { -                $arguments[] = '--no-random-seed-file'; -            } -        } - -        if ($this->_publicKeyring) { -            $arguments[] = '--keyring ' . escapeshellarg($this->_publicKeyring); -        } - -        if ($this->_privateKeyring) { -            $arguments[] = '--secret-keyring ' . -                escapeshellarg($this->_privateKeyring); -        } - -        if ($this->_trustDb) { -            $arguments[] = '--trustdb-name ' . escapeshellarg($this->_trustDb); -        } - -        $commandLine .= ' ' . implode(' ', $arguments) . ' ' . -            $this->_operation; - -        // Binary operations will not work on Windows with PHP < 5.2.6. This is -        // in case stream_select() ever works on Windows. -        $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb'; -        $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb'; - -        $descriptorSpec = array( -            self::FD_INPUT   => array('pipe', $rb), // stdin -            self::FD_OUTPUT  => array('pipe', $wb), // stdout -            self::FD_ERROR   => array('pipe', $wb), // stderr -            self::FD_STATUS  => array('pipe', $wb), // status -            self::FD_COMMAND => array('pipe', $rb), // command -            self::FD_MESSAGE => array('pipe', $rb)  // message -        ); - -        $this->_debug('OPENING SUBPROCESS WITH THE FOLLOWING COMMAND:'); -        $this->_debug($commandLine); - -        $this->_process = proc_open( -            $commandLine, -            $descriptorSpec, -            $this->_pipes, -            null, -            $env, -            array('binary_pipes' => true) -        ); - -        if (!is_resource($this->_process)) { -            throw new Crypt_GPG_OpenSubprocessException( -                'Unable to open GPG subprocess.', 0, $commandLine); -        } - -        $this->_openPipes = $this->_pipes; -        $this->_errorCode = Crypt_GPG::ERROR_NONE; -    } - -    // }}} -    // {{{ _closeSubprocess() - -    /** -     * Closes a the internal GPG subprocess -     * -     * Closes the internal GPG subprocess. Sets the private class property -     * {@link Crypt_GPG_Engine::$_process} to null. -     * -     * @return void -     * -     * @see Crypt_GPG_Engine::_openSubprocess() -     * @see Crypt_GPG_Engine::$_process -     */ -    private function _closeSubprocess() -    { -        if (is_resource($this->_process)) { -            $this->_debug('CLOSING SUBPROCESS'); - -            // close remaining open pipes -            foreach (array_keys($this->_openPipes) as $pipeNumber) { -                $this->_closePipe($pipeNumber); -            } - -            $exitCode = proc_close($this->_process); - -            if ($exitCode != 0) { -                $this->_debug( -                    '=> subprocess returned an unexpected exit code: ' . -                    $exitCode -                ); - -                if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { -                    if ($this->_needPassphrase > 0) { -                        $this->_errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE; -                    } else { -                        $this->_errorCode = Crypt_GPG::ERROR_UNKNOWN; -                    } -                } -            } - -            $this->_process = null; -            $this->_pipes   = array(); -        } -    } - -    // }}} -    // {{{ _closePipe() - -    /** -     * Closes an opened pipe used to communicate with the GPG subprocess -     * -     * If the pipe is already closed, it is ignored. If the pipe is open, it -     * is flushed and then closed. -     * -     * @param integer $pipeNumber the file descriptor number of the pipe to -     *                            close. -     * -     * @return void -     */ -    private function _closePipe($pipeNumber) -    { -        $pipeNumber = intval($pipeNumber); -        if (array_key_exists($pipeNumber, $this->_openPipes)) { -            fflush($this->_openPipes[$pipeNumber]); -            fclose($this->_openPipes[$pipeNumber]); -            unset($this->_openPipes[$pipeNumber]); -        } -    } - -    // }}} -    // {{{ _getBinary() - -    /** -     * Gets the name of the GPG binary for the current operating system -     * -     * This method is called if the '<kbd>binary</kbd>' option is <i>not</i> -     * specified when creating this driver. -     * -     * @return string the name of the GPG binary for the current operating -     *                system. If no suitable binary could be found, an empty -     *                string is returned. -     */ -    private function _getBinary() -    { -        $binary = ''; - -        if ($this->_isDarwin) { -            $binaryFiles = array( -                '/opt/local/bin/gpg', // MacPorts -                '/usr/local/bin/gpg', // Mac GPG -                '/sw/bin/gpg',        // Fink -                '/usr/bin/gpg' -            ); -        } else { -            $binaryFiles = array( -                '/usr/bin/gpg', -                '/usr/local/bin/gpg' -            ); -        } - -        foreach ($binaryFiles as $binaryFile) { -            if (is_executable($binaryFile)) { -                $binary = $binaryFile; -                break; -            } -        } - -        return $binary; -    } - -    // }}} -    // {{{ _debug() - -    /** -     * Displays debug text if debugging is turned on -     * -     * Debugging text is prepended with a debug identifier and echoed to stdout. -     * -     * @param string $text the debugging text to display. -     * -     * @return void -     */ -    private function _debug($text) -    { -        if ($this->_debug) { -            if (array_key_exists('SHELL', $_ENV)) { -                foreach (explode(PHP_EOL, $text) as $line) { -                    echo "Crypt_GPG DEBUG: ", $line, PHP_EOL; -                } -            } else { -                // running on a web server, format debug output nicely -                foreach (explode(PHP_EOL, $text) as $line) { -                    echo "Crypt_GPG DEBUG: <strong>", $line, -                        '</strong><br />', PHP_EOL; -                } -            } -        } -    } - -    // }}} -    // {{{ _byteLength() - -    /** -     * Gets the length of a string in bytes even if mbstring function -     * overloading is turned on -     * -     * This is used for stream-based communication with the GPG subprocess. -     * -     * @param string $string the string for which to get the length. -     * -     * @return integer the length of the string in bytes. -     * -     * @see Crypt_GPG_Engine::$_mbStringOverload -     */ -    private static function _byteLength($string) -    { -        if (self::$_mbStringOverload) { -            return mb_strlen($string, '8bit'); -        } - -        return strlen((binary)$string); -    } - -    // }}} -    // {{{ _byteSubstring() - -    /** -     * Gets the substring of a string in bytes even if mbstring function -     * overloading is turned on -     * -     * This is used for stream-based communication with the GPG subprocess. -     * -     * @param string  $string the input string. -     * @param integer $start  the starting point at which to get the substring. -     * @param integer $length optional. The length of the substring. -     * -     * @return string the extracted part of the string. Unlike the default PHP -     *                <kbd>substr()</kbd> function, the returned value is -     *                always a string and never false. -     * -     * @see Crypt_GPG_Engine::$_mbStringOverload -     */ -    private static function _byteSubstring($string, $start, $length = null) -    { -        if (self::$_mbStringOverload) { -            if ($length === null) { -                return mb_substr( -                    $string, -                    $start, -                    self::_byteLength($string) - $start, '8bit' -                ); -            } - -            return mb_substr($string, $start, $length, '8bit'); -        } - -        if ($length === null) { -            return (string)substr((binary)$string, $start); -        } - -        return (string)substr((binary)$string, $start, $length); -    } - -    // }}} -} - -// }}} - -?> diff --git a/plugins/enigma/lib/Crypt/GPG/Exceptions.php b/plugins/enigma/lib/Crypt/GPG/Exceptions.php deleted file mode 100644 index 744acf5d4..000000000 --- a/plugins/enigma/lib/Crypt/GPG/Exceptions.php +++ /dev/null @@ -1,473 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Various exception handling classes for Crypt_GPG - * - * Crypt_GPG provides an object oriented interface to GNU Privacy - * Guard (GPG). It requires the GPG executable to be on the system. - * - * This file contains various exception classes used by the Crypt_GPG package. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Nathan Fredrickson <nathan@silverorange.com> - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2005 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version   CVS: $Id: Exceptions.php 273745 2009-01-18 05:24:25Z gauthierm $ - * @link      http://pear.php.net/package/Crypt_GPG - */ - -/** - * PEAR Exception handler and base class - */ -require_once 'PEAR/Exception.php'; - -// {{{ class Crypt_GPG_Exception - -/** - * An exception thrown by the Crypt_GPG package - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2005 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_Exception extends PEAR_Exception -{ -} - -// }}} -// {{{ class Crypt_GPG_FileException - -/** - * An exception thrown when a file is used in ways it cannot be used - * - * For example, if an output file is specified and the file is not writeable, or - * if an input file is specified and the file is not readable, this exception - * is thrown. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2007-2008 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_FileException extends Crypt_GPG_Exception -{ -    // {{{ private class properties - -    /** -     * The name of the file that caused this exception -     * -     * @var string -     */ -    private $_filename = ''; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new Crypt_GPG_FileException -     * -     * @param string  $message  an error message. -     * @param integer $code     a user defined error code. -     * @param string  $filename the name of the file that caused this exception. -     */ -    public function __construct($message, $code = 0, $filename = '') -    { -        $this->_filename = $filename; -        parent::__construct($message, $code); -    } - -    // }}} -    // {{{ getFilename() - -    /** -     * Returns the filename of the file that caused this exception -     * -     * @return string the filename of the file that caused this exception. -     * -     * @see Crypt_GPG_FileException::$_filename -     */ -    public function getFilename() -    { -        return $this->_filename; -    } - -    // }}} -} - -// }}} -// {{{ class Crypt_GPG_OpenSubprocessException - -/** - * An exception thrown when the GPG subprocess cannot be opened - * - * This exception is thrown when the {@link Crypt_GPG_Engine} tries to open a - * new subprocess and fails. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2005 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_OpenSubprocessException extends Crypt_GPG_Exception -{ -    // {{{ private class properties - -    /** -     * The command used to try to open the subprocess -     * -     * @var string -     */ -    private $_command = ''; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new Crypt_GPG_OpenSubprocessException -     * -     * @param string  $message an error message. -     * @param integer $code    a user defined error code. -     * @param string  $command the command that was called to open the -     *                         new subprocess. -     * -     * @see Crypt_GPG::_openSubprocess() -     */ -    public function __construct($message, $code = 0, $command = '') -    { -        $this->_command = $command; -        parent::__construct($message, $code); -    } - -    // }}} -    // {{{ getCommand() - -    /** -     * Returns the contents of the internal _command property -     * -     * @return string the command used to open the subprocess. -     * -     * @see Crypt_GPG_OpenSubprocessException::$_command -     */ -    public function getCommand() -    { -        return $this->_command; -    } - -    // }}} -} - -// }}} -// {{{ class Crypt_GPG_InvalidOperationException - -/** - * An exception thrown when an invalid GPG operation is attempted - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_InvalidOperationException extends Crypt_GPG_Exception -{ -    // {{{ private class properties - -    /** -     * The attempted operation -     * -     * @var string -     */ -    private $_operation = ''; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new Crypt_GPG_OpenSubprocessException -     * -     * @param string  $message   an error message. -     * @param integer $code      a user defined error code. -     * @param string  $operation the operation. -     */ -    public function __construct($message, $code = 0, $operation = '') -    { -        $this->_operation = $operation; -        parent::__construct($message, $code); -    } - -    // }}} -    // {{{ getOperation() - -    /** -     * Returns the contents of the internal _operation property -     * -     * @return string the attempted operation. -     * -     * @see Crypt_GPG_InvalidOperationException::$_operation -     */ -    public function getOperation() -    { -        return $this->_operation; -    } - -    // }}} -} - -// }}} -// {{{ class Crypt_GPG_KeyNotFoundException - -/** - * An exception thrown when Crypt_GPG fails to find the key for various - * operations - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2005 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_KeyNotFoundException extends Crypt_GPG_Exception -{ -    // {{{ private class properties - -    /** -     * The key identifier that was searched for -     * -     * @var string -     */ -    private $_keyId = ''; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new Crypt_GPG_KeyNotFoundException -     * -     * @param string  $message an error message. -     * @param integer $code    a user defined error code. -     * @param string  $keyId   the key identifier of the key. -     */ -    public function __construct($message, $code = 0, $keyId= '') -    { -        $this->_keyId = $keyId; -        parent::__construct($message, $code); -    } - -    // }}} -    // {{{ getKeyId() - -    /** -     * Gets the key identifier of the key that was not found -     * -     * @return string the key identifier of the key that was not found. -     */ -    public function getKeyId() -    { -        return $this->_keyId; -    } - -    // }}} -} - -// }}} -// {{{ class Crypt_GPG_NoDataException - -/** - * An exception thrown when Crypt_GPG cannot find valid data for various - * operations - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2006 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_NoDataException extends Crypt_GPG_Exception -{ -} - -// }}} -// {{{ class Crypt_GPG_BadPassphraseException - -/** - * An exception thrown when a required passphrase is incorrect or missing - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2006-2008 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_BadPassphraseException extends Crypt_GPG_Exception -{ -    // {{{ private class properties - -    /** -     * Keys for which the passhprase is missing -     * -     * This contains primary user ids indexed by sub-key id. -     * -     * @var array -     */ -    private $_missingPassphrases = array(); - -    /** -     * Keys for which the passhprase is incorrect -     * -     * This contains primary user ids indexed by sub-key id. -     * -     * @var array -     */ -    private $_badPassphrases = array(); - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new Crypt_GPG_BadPassphraseException -     * -     * @param string  $message            an error message. -     * @param integer $code               a user defined error code. -     * @param string  $badPassphrases     an array containing user ids of keys -     *                                    for which the passphrase is incorrect. -     * @param string  $missingPassphrases an array containing user ids of keys -     *                                    for which the passphrase is missing. -     */ -    public function __construct($message, $code = 0, -        array $badPassphrases = array(), array $missingPassphrases = array() -    ) { -        $this->_badPassphrases     = $badPassphrases; -        $this->_missingPassphrases = $missingPassphrases; - -        parent::__construct($message, $code); -    } - -    // }}} -    // {{{ getBadPassphrases() - -    /** -     * Gets keys for which the passhprase is incorrect -     * -     * @return array an array of keys for which the passphrase is incorrect. -     *               The array contains primary user ids indexed by the sub-key -     *               id. -     */ -    public function getBadPassphrases() -    { -        return $this->_badPassphrases; -    } - -    // }}} -    // {{{ getMissingPassphrases() - -    /** -     * Gets keys for which the passhprase is missing  -     * -     * @return array an array of keys for which the passphrase is missing. -     *               The array contains primary user ids indexed by the sub-key -     *               id. -     */ -    public function getMissingPassphrases() -    { -        return $this->_missingPassphrases; -    } - -    // }}} -} - -// }}} -// {{{ class Crypt_GPG_DeletePrivateKeyException - -/** - * An exception thrown when an attempt is made to delete public key that has an - * associated private key on the keyring - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_DeletePrivateKeyException extends Crypt_GPG_Exception -{ -    // {{{ private class properties - -    /** -     * The key identifier the deletion attempt was made upon -     * -     * @var string -     */ -    private $_keyId = ''; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new Crypt_GPG_DeletePrivateKeyException -     * -     * @param string  $message an error message. -     * @param integer $code    a user defined error code. -     * @param string  $keyId   the key identifier of the public key that was -     *                         attempted to delete. -     * -     * @see Crypt_GPG::deletePublicKey() -     */ -    public function __construct($message, $code = 0, $keyId = '') -    { -        $this->_keyId = $keyId; -        parent::__construct($message, $code); -    } - -    // }}} -    // {{{ getKeyId() - -    /** -     * Gets the key identifier of the key that was not found -     * -     * @return string the key identifier of the key that was not found. -     */ -    public function getKeyId() -    { -        return $this->_keyId; -    } - -    // }}} -} - -// }}} - -?> diff --git a/plugins/enigma/lib/Crypt/GPG/Key.php b/plugins/enigma/lib/Crypt/GPG/Key.php deleted file mode 100644 index 67a4b9c7d..000000000 --- a/plugins/enigma/lib/Crypt/GPG/Key.php +++ /dev/null @@ -1,223 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Contains a class representing GPG keys - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version   CVS: $Id: Key.php 295621 2010-03-01 04:18:54Z gauthierm $ - * @link      http://pear.php.net/package/Crypt_GPG - */ - -/** - * Sub-key class definition - */ -require_once 'Crypt/GPG/SubKey.php'; - -/** - * User id class definition - */ -require_once 'Crypt/GPG/UserId.php'; - -// {{{ class Crypt_GPG_Key - -/** - * A data class for GPG key information - * - * This class is used to store the results of the {@link Crypt_GPG::getKeys()} - * method. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - * @see       Crypt_GPG::getKeys() - */ -class Crypt_GPG_Key -{ -    // {{{ class properties - -    /** -     * The user ids associated with this key -     * -     * This is an array of {@link Crypt_GPG_UserId} objects. -     * -     * @var array -     * -     * @see Crypt_GPG_Key::addUserId() -     * @see Crypt_GPG_Key::getUserIds() -     */ -    private $_userIds = array(); - -    /** -     * The subkeys of this key -     * -     * This is an array of {@link Crypt_GPG_SubKey} objects. -     * -     * @var array -     * -     * @see Crypt_GPG_Key::addSubKey() -     * @see Crypt_GPG_Key::getSubKeys() -     */ -    private $_subKeys = array(); - -    // }}} -    // {{{ getSubKeys() - -    /** -     * Gets the sub-keys of this key -     * -     * @return array the sub-keys of this key. -     * -     * @see Crypt_GPG_Key::addSubKey() -     */ -    public function getSubKeys() -    { -        return $this->_subKeys; -    } - -    // }}} -    // {{{ getUserIds() - -    /** -     * Gets the user ids of this key -     * -     * @return array the user ids of this key. -     * -     * @see Crypt_GPG_Key::addUserId() -     */ -    public function getUserIds() -    { -        return $this->_userIds; -    } - -    // }}} -    // {{{ getPrimaryKey() - -    /** -     * Gets the primary sub-key of this key -     * -     * The primary key is the first added sub-key. -     * -     * @return Crypt_GPG_SubKey the primary sub-key of this key. -     */ -    public function getPrimaryKey() -    { -        $primary_key = null; -        if (count($this->_subKeys) > 0) { -            $primary_key = $this->_subKeys[0]; -        } -        return $primary_key; -    } - -    // }}} -    // {{{ canSign() - -    /** -     * Gets whether or not this key can sign data -     * -     * This key can sign data if any sub-key of this key can sign data. -     * -     * @return boolean true if this key can sign data and false if this key -     *                 cannot sign data. -     */ -    public function canSign() -    { -        $canSign = false; -        foreach ($this->_subKeys as $subKey) { -            if ($subKey->canSign()) { -                $canSign = true; -                break; -            } -        } -        return $canSign; -    } - -    // }}} -    // {{{ canEncrypt() - -    /** -     * Gets whether or not this key can encrypt data -     * -     * This key can encrypt data if any sub-key of this key can encrypt data. -     * -     * @return boolean true if this key can encrypt data and false if this -     *                 key cannot encrypt data. -     */ -    public function canEncrypt() -    { -        $canEncrypt = false; -        foreach ($this->_subKeys as $subKey) { -            if ($subKey->canEncrypt()) { -                $canEncrypt = true; -                break; -            } -        } -        return $canEncrypt; -    } - -    // }}} -    // {{{ addSubKey() - -    /** -     * Adds a sub-key to this key -     * -     * The first added sub-key will be the primary key of this key. -     * -     * @param Crypt_GPG_SubKey $subKey the sub-key to add. -     * -     * @return Crypt_GPG_Key the current object, for fluent interface. -     */ -    public function addSubKey(Crypt_GPG_SubKey $subKey) -    { -        $this->_subKeys[] = $subKey; -        return $this; -    } - -    // }}} -    // {{{ addUserId() - -    /** -     * Adds a user id to this key -     * -     * @param Crypt_GPG_UserId $userId the user id to add. -     * -     * @return Crypt_GPG_Key the current object, for fluent interface. -     */ -    public function addUserId(Crypt_GPG_UserId $userId) -    { -        $this->_userIds[] = $userId; -        return $this; -    } - -    // }}} -} - -// }}} - -?> diff --git a/plugins/enigma/lib/Crypt/GPG/Signature.php b/plugins/enigma/lib/Crypt/GPG/Signature.php deleted file mode 100644 index 03ab44c53..000000000 --- a/plugins/enigma/lib/Crypt/GPG/Signature.php +++ /dev/null @@ -1,428 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * A class representing GPG signatures - * - * This file contains a data class representing a GPG signature. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Nathan Fredrickson <nathan@silverorange.com> - * @copyright 2005-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version   CVS: $Id: Signature.php 302773 2010-08-25 14:16:28Z gauthierm $ - * @link      http://pear.php.net/package/Crypt_GPG - */ - -/** - * User id class definition - */ -require_once 'Crypt/GPG/UserId.php'; - -// {{{ class Crypt_GPG_Signature - -/** - * A class for GPG signature information - * - * This class is used to store the results of the Crypt_GPG::verify() method. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Nathan Fredrickson <nathan@silverorange.com> - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - * @see       Crypt_GPG::verify() - */ -class Crypt_GPG_Signature -{ -    // {{{ class properties - -    /** -     * A base64-encoded string containing a unique id for this signature if -     * this signature has been verified as ok -     * -     * This id is used to prevent replay attacks and is not present for all -     * types of signatures. -     * -     * @var string -     */ -    private $_id = ''; - -    /** -     * The fingerprint of the key used to create the signature -     * -     * @var string -     */ -    private $_keyFingerprint = ''; - -    /** -     * The id of the key used to create the signature -     * -     * @var string -     */ -    private $_keyId = ''; - -    /** -     * The creation date of this signature -     * -     * This is a Unix timestamp. -     * -     * @var integer -     */ -    private $_creationDate = 0; - -    /** -     * The expiration date of the signature -     * -     * This is a Unix timestamp. If this signature does not expire, this will -     * be zero. -     * -     * @var integer -     */ -    private $_expirationDate = 0; - -    /** -     * The user id associated with this signature -     * -     * @var Crypt_GPG_UserId -     */ -    private $_userId = null; - -    /** -     * Whether or not this signature is valid -     * -     * @var boolean -     */ -    private $_isValid = false; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new signature -     * -     * Signatures can be initialized from an array of named values. Available -     * names are: -     * -     * - <kbd>string  id</kbd>          - the unique id of this signature. -     * - <kbd>string  fingerprint</kbd> - the fingerprint of the key used to -     *                                    create the signature. The fingerprint -     *                                    should not contain formatting -     *                                    characters. -     * - <kbd>string  keyId</kbd>       - the id of the key used to create the -     *                                    the signature. -     * - <kbd>integer creation</kbd>    - the date the signature was created. -     *                                    This is a UNIX timestamp. -     * - <kbd>integer expiration</kbd>  - the date the signature expired. This -     *                                    is a UNIX timestamp. If the signature -     *                                    does not expire, use 0. -     * - <kbd>boolean valid</kbd>       - whether or not the signature is valid. -     * - <kbd>string  userId</kbd>      - the user id associated with the -     *                                    signature. This may also be a -     *                                    {@link Crypt_GPG_UserId} object. -     * -     * @param Crypt_GPG_Signature|array $signature optional. Either an existing -     *        signature object, which is copied; or an array of initial values. -     */ -    public function __construct($signature = null) -    { -        // copy from object -        if ($signature instanceof Crypt_GPG_Signature) { -            $this->_id             = $signature->_id; -            $this->_keyFingerprint = $signature->_keyFingerprint; -            $this->_keyId          = $signature->_keyId; -            $this->_creationDate   = $signature->_creationDate; -            $this->_expirationDate = $signature->_expirationDate; -            $this->_isValid        = $signature->_isValid; - -            if ($signature->_userId instanceof Crypt_GPG_UserId) { -                $this->_userId = clone $signature->_userId; -            } else { -                $this->_userId = $signature->_userId; -            } -        } - -        // initialize from array -        if (is_array($signature)) { -            if (array_key_exists('id', $signature)) { -                $this->setId($signature['id']); -            } - -            if (array_key_exists('fingerprint', $signature)) { -                $this->setKeyFingerprint($signature['fingerprint']); -            } - -            if (array_key_exists('keyId', $signature)) { -                $this->setKeyId($signature['keyId']); -            } - -            if (array_key_exists('creation', $signature)) { -                $this->setCreationDate($signature['creation']); -            } - -            if (array_key_exists('expiration', $signature)) { -                $this->setExpirationDate($signature['expiration']); -            } - -            if (array_key_exists('valid', $signature)) { -                $this->setValid($signature['valid']); -            } - -            if (array_key_exists('userId', $signature)) { -                $userId = new Crypt_GPG_UserId($signature['userId']); -                $this->setUserId($userId); -            } -        } -    } - -    // }}} -    // {{{ getId() - -    /** -     * Gets the id of this signature -     * -     * @return string a base64-encoded string containing a unique id for this -     *                signature. This id is used to prevent replay attacks and -     *                is not present for all types of signatures. -     */ -    public function getId() -    { -        return $this->_id; -    } - -    // }}} -    // {{{ getKeyFingerprint() - -    /** -     * Gets the fingerprint of the key used to create this signature -     * -     * @return string the fingerprint of the key used to create this signature. -     */ -    public function getKeyFingerprint() -    { -        return $this->_keyFingerprint; -    } - -    // }}} -    // {{{ getKeyId() - -    /** -     * Gets the id of the key used to create this signature -     * -     * Whereas the fingerprint of the signing key may not always be available -     * (for example if the signature is bad), the id should always be -     * available. -     * -     * @return string the id of the key used to create this signature. -     */ -    public function getKeyId() -    { -        return $this->_keyId; -    } - -    // }}} -    // {{{ getCreationDate() - -    /** -     * Gets the creation date of this signature -     * -     * @return integer the creation date of this signature. This is a Unix -     *                 timestamp. -     */ -    public function getCreationDate() -    { -        return $this->_creationDate; -    } - -    // }}} -    // {{{ getExpirationDate() - -    /** -     * Gets the expiration date of the signature -     * -     * @return integer the expiration date of this signature. This is a Unix -     *                 timestamp. If this signature does not expire, this will -     *                 be zero. -     */ -    public function getExpirationDate() -    { -        return $this->_expirationDate; -    } - -    // }}} -    // {{{ getUserId() - -    /** -     * Gets the user id associated with this signature -     * -     * @return Crypt_GPG_UserId the user id associated with this signature. -     */ -    public function getUserId() -    { -        return $this->_userId; -    } - -    // }}} -    // {{{ isValid() - -    /** -     * Gets whether or no this signature is valid -     * -     * @return boolean true if this signature is valid and false if it is not. -     */ -    public function isValid() -    { -        return $this->_isValid; -    } - -    // }}} -    // {{{ setId() - -    /** -     * Sets the id of this signature -     * -     * @param string $id a base64-encoded string containing a unique id for -     *                   this signature. -     * -     * @return Crypt_GPG_Signature the current object, for fluent interface. -     * -     * @see Crypt_GPG_Signature::getId() -     */ -    public function setId($id) -    { -        $this->_id = strval($id); -        return $this; -    } - -    // }}} -    // {{{ setKeyFingerprint() - -    /** -     * Sets the key fingerprint of this signature -     * -     * @param string $fingerprint the key fingerprint of this signature. This -     *                            is the fingerprint of the primary key used to -     *                            create this signature. -     * -     * @return Crypt_GPG_Signature the current object, for fluent interface. -     */ -    public function setKeyFingerprint($fingerprint) -    { -        $this->_keyFingerprint = strval($fingerprint); -        return $this; -    } - -    // }}} -    // {{{ setKeyId() - -    /** -     * Sets the key id of this signature -     * -     * @param string $id the key id of this signature. This is the id of the -     *                   primary key used to create this signature. -     * -     * @return Crypt_GPG_Signature the current object, for fluent interface. -     */ -    public function setKeyId($id) -    { -        $this->_keyId = strval($id); -        return $this; -    } - -    // }}} -    // {{{ setCreationDate() - -    /** -     * Sets the creation date of this signature -     * -     * @param integer $creationDate the creation date of this signature. This -     *                              is a Unix timestamp. -     * -     * @return Crypt_GPG_Signature the current object, for fluent interface. -     */ -    public function setCreationDate($creationDate) -    { -        $this->_creationDate = intval($creationDate); -        return $this; -    } - -    // }}} -    // {{{ setExpirationDate() - -    /** -     * Sets the expiration date of this signature -     * -     * @param integer $expirationDate the expiration date of this signature. -     *                                This is a Unix timestamp. Specify zero if -     *                                this signature does not expire. -     * -     * @return Crypt_GPG_Signature the current object, for fluent interface. -     */ -    public function setExpirationDate($expirationDate) -    { -        $this->_expirationDate = intval($expirationDate); -        return $this; -    } - -    // }}} -    // {{{ setUserId() - -    /** -     * Sets the user id associated with this signature -     * -     * @param Crypt_GPG_UserId $userId the user id associated with this -     *                                 signature. -     * -     * @return Crypt_GPG_Signature the current object, for fluent interface. -     */ -    public function setUserId(Crypt_GPG_UserId $userId) -    { -        $this->_userId = $userId; -        return $this; -    } - -    // }}} -    // {{{ setValid() - -    /** -     * Sets whether or not this signature is valid -     * -     * @param boolean $isValid true if this signature is valid and false if it -     *                         is not. -     * -     * @return Crypt_GPG_Signature the current object, for fluent interface. -     */ -    public function setValid($isValid) -    { -        $this->_isValid = ($isValid) ? true : false; -        return $this; -    } - -    // }}} -} - -// }}} - -?> diff --git a/plugins/enigma/lib/Crypt/GPG/SubKey.php b/plugins/enigma/lib/Crypt/GPG/SubKey.php deleted file mode 100644 index b6316e99f..000000000 --- a/plugins/enigma/lib/Crypt/GPG/SubKey.php +++ /dev/null @@ -1,649 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Contains a class representing GPG sub-keys and constants for GPG algorithms - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @author    Nathan Fredrickson <nathan@silverorange.com> - * @copyright 2005-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version   CVS: $Id: SubKey.php 302768 2010-08-25 13:45:52Z gauthierm $ - * @link      http://pear.php.net/package/Crypt_GPG - */ - -// {{{ class Crypt_GPG_SubKey - -/** - * A class for GPG sub-key information - * - * This class is used to store the results of the {@link Crypt_GPG::getKeys()} - * method. Sub-key objects are members of a {@link Crypt_GPG_Key} object. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @author    Nathan Fredrickson <nathan@silverorange.com> - * @copyright 2005-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - * @see       Crypt_GPG::getKeys() - * @see       Crypt_GPG_Key::getSubKeys() - */ -class Crypt_GPG_SubKey -{ -    // {{{ class constants - -    /** -     * RSA encryption algorithm. -     */ -    const ALGORITHM_RSA = 1; - -    /** -     * Elgamal encryption algorithm (encryption only). -     */ -    const ALGORITHM_ELGAMAL_ENC = 16; - -    /** -     * DSA encryption algorithm (sometimes called DH, sign only). -     */ -    const ALGORITHM_DSA = 17; - -    /** -     * Elgamal encryption algorithm (signage and encryption - should not be -     * used). -     */ -    const ALGORITHM_ELGAMAL_ENC_SGN = 20; - -    // }}} -    // {{{ class properties - -    /** -     * The id of this sub-key -     * -     * @var string -     */ -    private $_id = ''; - -    /** -     * The algorithm used to create this sub-key -     * -     * The value is one of the Crypt_GPG_SubKey::ALGORITHM_* constants. -     * -     * @var integer -     */ -    private $_algorithm = 0; - -    /** -     * The fingerprint of this sub-key -     * -     * @var string -     */ -    private $_fingerprint = ''; - -    /** -     * Length of this sub-key in bits -     * -     * @var integer -     */ -    private $_length = 0; - -    /** -     * Date this sub-key was created -     * -     * This is a Unix timestamp. -     * -     * @var integer -     */ -    private $_creationDate = 0; - -    /** -     * Date this sub-key expires -     * -     * This is a Unix timestamp. If this sub-key does not expire, this will be -     * zero. -     * -     * @var integer -     */ -    private $_expirationDate = 0; - -    /** -     * Whether or not this sub-key can sign data -     * -     * @var boolean -     */ -    private $_canSign = false; - -    /** -     * Whether or not this sub-key can encrypt data -     * -     * @var boolean -     */ -    private $_canEncrypt = false; - -    /** -     * Whether or not the private key for this sub-key exists in the keyring -     * -     * @var boolean -     */ -    private $_hasPrivate = false; - -    /** -     * Whether or not this sub-key is revoked -     * -     * @var boolean -     */ -    private $_isRevoked = false; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new sub-key object -     * -     * Sub-keys can be initialized from an array of named values. Available -     * names are: -     * -     * - <kbd>string  id</kbd>          - the key id of the sub-key. -     * - <kbd>integer algorithm</kbd>   - the encryption algorithm of the -     *                                    sub-key. -     * - <kbd>string  fingerprint</kbd> - the fingerprint of the sub-key. The -     *                                    fingerprint should not contain -     *                                    formatting characters. -     * - <kbd>integer length</kbd>      - the length of the sub-key in bits. -     * - <kbd>integer creation</kbd>    - the date the sub-key was created. -     *                                    This is a UNIX timestamp. -     * - <kbd>integer expiration</kbd>  - the date the sub-key expires. This -     *                                    is a UNIX timestamp. If the sub-key -     *                                    does not expire, use 0. -     * - <kbd>boolean canSign</kbd>     - whether or not the sub-key can be -     *                                    used to sign data. -     * - <kbd>boolean canEncrypt</kbd>  - whether or not the sub-key can be -     *                                    used to encrypt data. -     * - <kbd>boolean hasPrivate</kbd>  - whether or not the private key for -     *                                    the sub-key exists in the keyring. -     * - <kbd>boolean isRevoked</kbd>   - whether or not this sub-key is -     *                                    revoked. -     * -     * @param Crypt_GPG_SubKey|string|array $key optional. Either an existing -     *        sub-key object, which is copied; a sub-key string, which is -     *        parsed; or an array of initial values. -     */ -    public function __construct($key = null) -    { -        // parse from string -        if (is_string($key)) { -            $key = self::parse($key); -        } - -        // copy from object -        if ($key instanceof Crypt_GPG_SubKey) { -            $this->_id             = $key->_id; -            $this->_algorithm      = $key->_algorithm; -            $this->_fingerprint    = $key->_fingerprint; -            $this->_length         = $key->_length; -            $this->_creationDate   = $key->_creationDate; -            $this->_expirationDate = $key->_expirationDate; -            $this->_canSign        = $key->_canSign; -            $this->_canEncrypt     = $key->_canEncrypt; -            $this->_hasPrivate     = $key->_hasPrivate; -            $this->_isRevoked      = $key->_isRevoked; -        } - -        // initialize from array -        if (is_array($key)) { -            if (array_key_exists('id', $key)) { -                $this->setId($key['id']); -            } - -            if (array_key_exists('algorithm', $key)) { -                $this->setAlgorithm($key['algorithm']); -            } - -            if (array_key_exists('fingerprint', $key)) { -                $this->setFingerprint($key['fingerprint']); -            } - -            if (array_key_exists('length', $key)) { -                $this->setLength($key['length']); -            } - -            if (array_key_exists('creation', $key)) { -                $this->setCreationDate($key['creation']); -            } - -            if (array_key_exists('expiration', $key)) { -                $this->setExpirationDate($key['expiration']); -            } - -            if (array_key_exists('canSign', $key)) { -                $this->setCanSign($key['canSign']); -            } - -            if (array_key_exists('canEncrypt', $key)) { -                $this->setCanEncrypt($key['canEncrypt']); -            } - -            if (array_key_exists('hasPrivate', $key)) { -                $this->setHasPrivate($key['hasPrivate']); -            } - -            if (array_key_exists('isRevoked', $key)) { -                $this->setRevoked($key['isRevoked']); -            } -        } -    } - -    // }}} -    // {{{ getId() - -    /** -     * Gets the id of this sub-key -     * -     * @return string the id of this sub-key. -     */ -    public function getId() -    { -        return $this->_id; -    } - -    // }}} -    // {{{ getAlgorithm() - -    /** -     * Gets the algorithm used by this sub-key -     * -     * The algorithm should be one of the Crypt_GPG_SubKey::ALGORITHM_* -     * constants. -     * -     * @return integer the algorithm used by this sub-key. -     */ -    public function getAlgorithm() -    { -        return $this->_algorithm; -    } - -    // }}} -    // {{{ getCreationDate() - -    /** -     * Gets the creation date of this sub-key -     * -     * This is a Unix timestamp. -     * -     * @return integer the creation date of this sub-key. -     */ -    public function getCreationDate() -    { -        return $this->_creationDate; -    } - -    // }}} -    // {{{ getExpirationDate() - -    /** -     * Gets the date this sub-key expires -     * -     * This is a Unix timestamp. If this sub-key does not expire, this will be -     * zero. -     * -     * @return integer the date this sub-key expires. -     */ -    public function getExpirationDate() -    { -        return $this->_expirationDate; -    } - -    // }}} -    // {{{ getFingerprint() - -    /** -     * Gets the fingerprint of this sub-key -     * -     * @return string the fingerprint of this sub-key. -     */ -    public function getFingerprint() -    { -        return $this->_fingerprint; -    } - -    // }}} -    // {{{ getLength() - -    /** -     * Gets the length of this sub-key in bits -     * -     * @return integer the length of this sub-key in bits. -     */ -    public function getLength() -    { -        return $this->_length; -    } - -    // }}} -    // {{{ canSign() - -    /** -     * Gets whether or not this sub-key can sign data -     * -     * @return boolean true if this sub-key can sign data and false if this -     *                 sub-key can not sign data. -     */ -    public function canSign() -    { -        return $this->_canSign; -    } - -    // }}} -    // {{{ canEncrypt() - -    /** -     * Gets whether or not this sub-key can encrypt data -     * -     * @return boolean true if this sub-key can encrypt data and false if this -     *                 sub-key can not encrypt data. -     */ -    public function canEncrypt() -    { -        return $this->_canEncrypt; -    } - -    // }}} -    // {{{ hasPrivate() - -    /** -     * Gets whether or not the private key for this sub-key exists in the -     * keyring -     * -     * @return boolean true the private key for this sub-key exists in the -     *                 keyring and false if it does not. -     */ -    public function hasPrivate() -    { -        return $this->_hasPrivate; -    } - -    // }}} -    // {{{ isRevoked() - -    /** -     * Gets whether or not this sub-key is revoked -     * -     * @return boolean true if this sub-key is revoked and false if it is not. -     */ -    public function isRevoked() -    { -        return $this->_isRevoked; -    } - -    // }}} -    // {{{ setCreationDate() - -    /** -     * Sets the creation date of this sub-key -     * -     * The creation date is a Unix timestamp. -     * -     * @param integer $creationDate the creation date of this sub-key. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setCreationDate($creationDate) -    { -        $this->_creationDate = intval($creationDate); -        return $this; -    } - -    // }}} -    // {{{ setExpirationDate() - -    /** -     * Sets the expiration date of this sub-key -     * -     * The expiration date is a Unix timestamp. Specify zero if this sub-key -     * does not expire. -     * -     * @param integer $expirationDate the expiration date of this sub-key. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setExpirationDate($expirationDate) -    { -        $this->_expirationDate = intval($expirationDate); -        return $this; -    } - -    // }}} -    // {{{ setId() - -    /** -     * Sets the id of this sub-key -     * -     * @param string $id the id of this sub-key. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setId($id) -    { -        $this->_id = strval($id); -        return $this; -    } - -    // }}} -    // {{{ setAlgorithm() - -    /** -     * Sets the algorithm used by this sub-key -     * -     * @param integer $algorithm the algorithm used by this sub-key. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setAlgorithm($algorithm) -    { -        $this->_algorithm = intval($algorithm); -        return $this; -    } - -    // }}} -    // {{{ setFingerprint() - -    /** -     * Sets the fingerprint of this sub-key -     * -     * @param string $fingerprint the fingerprint of this sub-key. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setFingerprint($fingerprint) -    { -        $this->_fingerprint = strval($fingerprint); -        return $this; -    } - -    // }}} -    // {{{ setLength() - -    /** -     * Sets the length of this sub-key in bits -     * -     * @param integer $length the length of this sub-key in bits. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setLength($length) -    { -        $this->_length = intval($length); -        return $this; -    } - -    // }}} -    // {{{ setCanSign() - -    /** -     * Sets whether of not this sub-key can sign data -     * -     * @param boolean $canSign true if this sub-key can sign data and false if -     *                         it can not. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setCanSign($canSign) -    { -        $this->_canSign = ($canSign) ? true : false; -        return $this; -    } - -    // }}} -    // {{{ setCanEncrypt() - -    /** -     * Sets whether of not this sub-key can encrypt data -     * -     * @param boolean $canEncrypt true if this sub-key can encrypt data and -     *                            false if it can not. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setCanEncrypt($canEncrypt) -    { -        $this->_canEncrypt = ($canEncrypt) ? true : false; -        return $this; -    } - -    // }}} -    // {{{ setHasPrivate() - -    /** -     * Sets whether of not the private key for this sub-key exists in the -     * keyring -     * -     * @param boolean $hasPrivate true if the private key for this sub-key -     *                            exists in the keyring and false if it does -     *                            not. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setHasPrivate($hasPrivate) -    { -        $this->_hasPrivate = ($hasPrivate) ? true : false; -        return $this; -    } - -    // }}} -    // {{{ setRevoked() - -    /** -     * Sets whether or not this sub-key is revoked -     * -     * @param boolean $isRevoked whether or not this sub-key is revoked. -     * -     * @return Crypt_GPG_SubKey the current object, for fluent interface. -     */ -    public function setRevoked($isRevoked) -    { -        $this->_isRevoked = ($isRevoked) ? true : false; -        return $this; -    } - -    // }}} -    // {{{ parse() - -    /** -     * Parses a sub-key object from a sub-key string -     * -     * See <b>doc/DETAILS</b> in the -     * {@link http://www.gnupg.org/download/ GPG distribution} for information -     * on how the sub-key string is parsed. -     * -     * @param string $string the string containing the sub-key. -     * -     * @return Crypt_GPG_SubKey the sub-key object parsed from the string. -     */ -    public static function parse($string) -    { -        $tokens = explode(':', $string); - -        $subKey = new Crypt_GPG_SubKey(); - -        $subKey->setId($tokens[4]); -        $subKey->setLength($tokens[2]); -        $subKey->setAlgorithm($tokens[3]); -        $subKey->setCreationDate(self::_parseDate($tokens[5])); -        $subKey->setExpirationDate(self::_parseDate($tokens[6])); - -        if ($tokens[1] == 'r') { -            $subKey->setRevoked(true); -        } - -        if (strpos($tokens[11], 's') !== false) { -            $subKey->setCanSign(true); -        } - -        if (strpos($tokens[11], 'e') !== false) { -            $subKey->setCanEncrypt(true); -        } - -        return $subKey; -    } - -    // }}} -    // {{{ _parseDate() - -    /** -     * Parses a date string as provided by GPG into a UNIX timestamp -     * -     * @param string $string the date string. -     * -     * @return integer the UNIX timestamp corresponding to the provided date -     *                 string. -     */ -    private static function _parseDate($string) -    { -        if ($string == '') { -            $timestamp = 0; -        } else { -            // all times are in UTC according to GPG documentation -            $timeZone = new DateTimeZone('UTC'); - -            if (strpos($string, 'T') === false) { -                // interpret as UNIX timestamp -                $string = '@' . $string; -            } - -            $date = new DateTime($string, $timeZone); - -            // convert to UNIX timestamp -            $timestamp = intval($date->format('U')); -        } - -        return $timestamp; -    } - -    // }}} -} - -// }}} - -?> diff --git a/plugins/enigma/lib/Crypt/GPG/UserId.php b/plugins/enigma/lib/Crypt/GPG/UserId.php deleted file mode 100644 index 04435708c..000000000 --- a/plugins/enigma/lib/Crypt/GPG/UserId.php +++ /dev/null @@ -1,373 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Contains a data class representing a GPG user id - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version   CVS: $Id: UserId.php 295621 2010-03-01 04:18:54Z gauthierm $ - * @link      http://pear.php.net/package/Crypt_GPG - */ - -// {{{ class Crypt_GPG_UserId - -/** - * A class for GPG user id information - * - * This class is used to store the results of the {@link Crypt_GPG::getKeys()} - * method. User id objects are members of a {@link Crypt_GPG_Key} object. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2010 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - * @see       Crypt_GPG::getKeys() - * @see       Crypt_GPG_Key::getUserIds() - */ -class Crypt_GPG_UserId -{ -    // {{{ class properties - -    /** -     * The name field of this user id -     * -     * @var string -     */ -    private $_name = ''; - -    /** -     * The comment field of this user id -     * -     * @var string -     */ -    private $_comment = ''; - -    /** -     * The email field of this user id -     * -     * @var string -     */ -    private $_email = ''; - -    /** -     * Whether or not this user id is revoked -     * -     * @var boolean -     */ -    private $_isRevoked = false; - -    /** -     * Whether or not this user id is valid -     * -     * @var boolean -     */ -    private $_isValid = true; - -    // }}} -    // {{{ __construct() - -    /** -     * Creates a new user id -     * -     * User ids can be initialized from an array of named values. Available -     * names are: -     * -     * - <kbd>string  name</kbd>    - the name field of the user id. -     * - <kbd>string  comment</kbd> - the comment field of the user id. -     * - <kbd>string  email</kbd>   - the email field of the user id. -     * - <kbd>boolean valid</kbd>   - whether or not the user id is valid. -     * - <kbd>boolean revoked</kbd> - whether or not the user id is revoked. -     * -     * @param Crypt_GPG_UserId|string|array $userId optional. Either an -     *        existing user id object, which is copied; a user id string, which -     *        is parsed; or an array of initial values. -     */ -    public function __construct($userId = null) -    { -        // parse from string -        if (is_string($userId)) { -            $userId = self::parse($userId); -        } - -        // copy from object -        if ($userId instanceof Crypt_GPG_UserId) { -            $this->_name      = $userId->_name; -            $this->_comment   = $userId->_comment; -            $this->_email     = $userId->_email; -            $this->_isRevoked = $userId->_isRevoked; -            $this->_isValid   = $userId->_isValid; -        } - -        // initialize from array -        if (is_array($userId)) { -            if (array_key_exists('name', $userId)) { -                $this->setName($userId['name']); -            } - -            if (array_key_exists('comment', $userId)) { -                $this->setComment($userId['comment']); -            } - -            if (array_key_exists('email', $userId)) { -                $this->setEmail($userId['email']); -            } - -            if (array_key_exists('revoked', $userId)) { -                $this->setRevoked($userId['revoked']); -            } - -            if (array_key_exists('valid', $userId)) { -                $this->setValid($userId['valid']); -            } -        } -    } - -    // }}} -    // {{{ getName() - -    /** -     * Gets the name field of this user id -     * -     * @return string the name field of this user id. -     */ -    public function getName() -    { -        return $this->_name; -    } - -    // }}} -    // {{{ getComment() - -    /** -     * Gets the comments field of this user id -     * -     * @return string the comments field of this user id. -     */ -    public function getComment() -    { -        return $this->_comment; -    } - -    // }}} -    // {{{ getEmail() - -    /** -     * Gets the email field of this user id -     * -     * @return string the email field of this user id. -     */ -    public function getEmail() -    { -        return $this->_email; -    } - -    // }}} -    // {{{ isRevoked() - -    /** -     * Gets whether or not this user id is revoked -     * -     * @return boolean true if this user id is revoked and false if it is not. -     */ -    public function isRevoked() -    { -        return $this->_isRevoked; -    } - -    // }}} -    // {{{ isValid() - -    /** -     * Gets whether or not this user id is valid -     * -     * @return boolean true if this user id is valid and false if it is not. -     */ -    public function isValid() -    { -        return $this->_isValid; -    } - -    // }}} -    // {{{ __toString() - -    /** -     * Gets a string representation of this user id -     * -     * The string is formatted as: -     * <b><kbd>name (comment) <email-address></kbd></b>. -     * -     * @return string a string representation of this user id. -     */ -    public function __toString() -    { -        $components = array(); - -        if (strlen($this->_name) > 0) { -            $components[] = $this->_name; -        } - -        if (strlen($this->_comment) > 0) { -            $components[] = '(' . $this->_comment . ')'; -        } - -        if (strlen($this->_email) > 0) { -            $components[] = '<' . $this->_email. '>'; -        } - -        return implode(' ', $components); -    } - -    // }}} -    // {{{ setName() - -    /** -     * Sets the name field of this user id -     * -     * @param string $name the name field of this user id. -     * -     * @return Crypt_GPG_UserId the current object, for fluent interface. -     */ -    public function setName($name) -    { -        $this->_name = strval($name); -        return $this; -    } - -    // }}} -    // {{{ setComment() - -    /** -     * Sets the comment field of this user id -     * -     * @param string $comment the comment field of this user id. -     * -     * @return Crypt_GPG_UserId the current object, for fluent interface. -     */ -    public function setComment($comment) -    { -        $this->_comment = strval($comment); -        return $this; -    } - -    // }}} -    // {{{ setEmail() - -    /** -     * Sets the email field of this user id -     * -     * @param string $email the email field of this user id. -     * -     * @return Crypt_GPG_UserId the current object, for fluent interface. -     */ -    public function setEmail($email) -    { -        $this->_email = strval($email); -        return $this; -    } - -    // }}} -    // {{{ setRevoked() - -    /** -     * Sets whether or not this user id is revoked -     * -     * @param boolean $isRevoked whether or not this user id is revoked. -     * -     * @return Crypt_GPG_UserId the current object, for fluent interface. -     */ -    public function setRevoked($isRevoked) -    { -        $this->_isRevoked = ($isRevoked) ? true : false; -        return $this; -    } - -    // }}} -    // {{{ setValid() - -    /** -     * Sets whether or not this user id is valid -     * -     * @param boolean $isValid whether or not this user id is valid. -     * -     * @return Crypt_GPG_UserId the current object, for fluent interface. -     */ -    public function setValid($isValid) -    { -        $this->_isValid = ($isValid) ? true : false; -        return $this; -    } - -    // }}} -    // {{{ parse() - -    /** -     * Parses a user id object from a user id string -     * -     * A user id string is of the form: -     * <b><kbd>name (comment) <email-address></kbd></b> with the <i>comment</i> -     * and <i>email-address</i> fields being optional. -     * -     * @param string $string the user id string to parse. -     * -     * @return Crypt_GPG_UserId the user id object parsed from the string. -     */ -    public static function parse($string) -    { -        $userId  = new Crypt_GPG_UserId(); -        $email   = ''; -        $comment = ''; - -        // get email address from end of string if it exists -        $matches = array(); -        if (preg_match('/^(.+?) <([^>]+)>$/', $string, $matches) === 1) { -            $string = $matches[1]; -            $email  = $matches[2]; -        } - -        // get comment from end of string if it exists -        $matches = array(); -        if (preg_match('/^(.+?) \(([^\)]+)\)$/', $string, $matches) === 1) { -            $string  = $matches[1]; -            $comment = $matches[2]; -        } - -        $name = $string; - -        $userId->setName($name); -        $userId->setComment($comment); -        $userId->setEmail($email); - -        return $userId; -    } - -    // }}} -} - -// }}} - -?> diff --git a/plugins/enigma/lib/Crypt/GPG/VerifyStatusHandler.php b/plugins/enigma/lib/Crypt/GPG/VerifyStatusHandler.php deleted file mode 100644 index 083bd3012..000000000 --- a/plugins/enigma/lib/Crypt/GPG/VerifyStatusHandler.php +++ /dev/null @@ -1,216 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This file contains an object that handles GPG's status output for the verify - * operation. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version   CVS: $Id: VerifyStatusHandler.php 302908 2010-08-31 03:56:54Z gauthierm $ - * @link      http://pear.php.net/package/Crypt_GPG - * @link      http://www.gnupg.org/ - */ - -/** - * Signature object class definition - */ -require_once 'Crypt/GPG/Signature.php'; - -/** - * Status line handler for the verify operation - * - * This class is used internally by Crypt_GPG and does not need be used - * directly. See the {@link Crypt_GPG} class for end-user API. - * - * This class is responsible for building signature objects that are returned - * by the {@link Crypt_GPG::verify()} method. See <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for detailed - * information on GPG's status output for the verify operation. - * - * @category  Encryption - * @package   Crypt_GPG - * @author    Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link      http://pear.php.net/package/Crypt_GPG - * @link      http://www.gnupg.org/ - */ -class Crypt_GPG_VerifyStatusHandler -{ -    // {{{ protected properties - -    /** -     * The current signature id -     * -     * Ths signature id is emitted by GPG before the new signature line so we -     * must remember it temporarily. -     * -     * @var string -     */ -    protected $signatureId = ''; - -    /** -     * List of parsed {@link Crypt_GPG_Signature} objects -     * -     * @var array -     */ -    protected $signatures = array(); - -    /** -     * Array index of the current signature -     * -     * @var integer -     */ -    protected $index = -1; - -    // }}} -    // {{{ handle() - -    /** -     * Handles a status line -     * -     * @param string $line the status line to handle. -     * -     * @return void -     */ -    public function handle($line) -    { -        $tokens = explode(' ', $line); -        switch ($tokens[0]) { -        case 'GOODSIG': -        case 'EXPSIG': -        case 'EXPKEYSIG': -        case 'REVKEYSIG': -        case 'BADSIG': -            $signature = new Crypt_GPG_Signature(); - -            // if there was a signature id, set it on the new signature -            if ($this->signatureId != '') { -                $signature->setId($this->signatureId); -                $this->signatureId = ''; -            } - -            // Detect whether fingerprint or key id was returned and set -            // signature values appropriately. Key ids are strings of either -            // 16 or 8 hexadecimal characters. Fingerprints are strings of 40 -            // hexadecimal characters. The key id is the last 16 characters of -            // the key fingerprint. -            if (strlen($tokens[1]) > 16) { -                $signature->setKeyFingerprint($tokens[1]); -                $signature->setKeyId(substr($tokens[1], -16)); -            } else { -                $signature->setKeyId($tokens[1]); -            } - -            // get user id string -            $string = implode(' ', array_splice($tokens, 2)); -            $string = rawurldecode($string); - -            $signature->setUserId(Crypt_GPG_UserId::parse($string)); - -            $this->index++; -            $this->signatures[$this->index] = $signature; -            break; - -        case 'ERRSIG': -            $signature = new Crypt_GPG_Signature(); - -            // if there was a signature id, set it on the new signature -            if ($this->signatureId != '') { -                $signature->setId($this->signatureId); -                $this->signatureId = ''; -            } - -            // Detect whether fingerprint or key id was returned and set -            // signature values appropriately. Key ids are strings of either -            // 16 or 8 hexadecimal characters. Fingerprints are strings of 40 -            // hexadecimal characters. The key id is the last 16 characters of -            // the key fingerprint. -            if (strlen($tokens[1]) > 16) { -                $signature->setKeyFingerprint($tokens[1]); -                $signature->setKeyId(substr($tokens[1], -16)); -            } else { -                $signature->setKeyId($tokens[1]); -            } - -            $this->index++; -            $this->signatures[$this->index] = $signature; - -            break; - -        case 'VALIDSIG': -            if (!array_key_exists($this->index, $this->signatures)) { -                break; -            } - -            $signature = $this->signatures[$this->index]; - -            $signature->setValid(true); -            $signature->setKeyFingerprint($tokens[1]); - -            if (strpos($tokens[3], 'T') === false) { -                $signature->setCreationDate($tokens[3]); -            } else { -                $signature->setCreationDate(strtotime($tokens[3])); -            } - -            if (array_key_exists(4, $tokens)) { -                if (strpos($tokens[4], 'T') === false) { -                    $signature->setExpirationDate($tokens[4]); -                } else { -                    $signature->setExpirationDate(strtotime($tokens[4])); -                } -            } - -            break; - -        case 'SIG_ID': -            // note: signature id comes before new signature line and may not -            // exist for some signature types -            $this->signatureId = $tokens[1]; -            break; -        } -    } - -    // }}} -    // {{{ getSignatures() - -    /** -     * Gets the {@link Crypt_GPG_Signature} objects parsed by this handler -     * -     * @return array the signature objects parsed by this handler. -     */ -    public function getSignatures() -    { -        return $this->signatures; -    } - -    // }}} -} - -?> | 
