Crypt_GPG
[ class tree: Crypt_GPG ] [ index: Crypt_GPG ] [ all elements ]

Source for file VerifyStatusHandler.php

Documentation is available at VerifyStatusHandler.php

  1. <?php
  2.  
  3. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  4.  
  5. /**
  6.  * Crypt_GPG is a package to use GPG from PHP
  7.  *
  8.  * This file contains an object that handles GPG's status output for the verify
  9.  * operation.
  10.  *
  11.  * PHP version 5
  12.  *
  13.  * LICENSE:
  14.  *
  15.  * This library is free software; you can redistribute it and/or modify
  16.  * it under the terms of the GNU Lesser General Public License as
  17.  * published by the Free Software Foundation; either version 2.1 of the
  18.  * License, or (at your option) any later version.
  19.  *
  20.  * This library is distributed in the hope that it will be useful,
  21.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  23.  * Lesser General Public License for more details.
  24.  *
  25.  * You should have received a copy of the GNU Lesser General Public
  26.  * License along with this library; if not, write to the Free Software
  27.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  28.  *
  29.  * @category  Encryption
  30.  * @package   Crypt_GPG
  31.  * @author    Michael Gauthier <mike@silverorange.com>
  32.  * @copyright 2008 silverorange
  33.  * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
  34.  * @version   CVS: $Id$
  35.  * @link      http://pear.php.net/package/Crypt_GPG
  36.  * @link      http://www.gnupg.org/
  37.  */
  38.  
  39. /**
  40.  * Signature object class definition
  41.  */
  42. require_once 'Crypt/GPG/Signature.php';
  43.  
  44. /**
  45.  * Status line handler for the verify operation
  46.  *
  47.  * This class is used internally by Crypt_GPG and does not need be used
  48.  * directly. See the {@link Crypt_GPG} class for end-user API.
  49.  *
  50.  * This class is responsible for building signature objects that are returned
  51.  * by the {@link Crypt_GPG::verify()} method. See <b>doc/DETAILS</b> in the
  52.  * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
  53.  * information on GPG's status output for the verify operation.
  54.  *
  55.  * @category  Encryption
  56.  * @package   Crypt_GPG
  57.  * @author    Michael Gauthier <mike@silverorange.com>
  58.  * @copyright 2008 silverorange
  59.  * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
  60.  * @link      http://pear.php.net/package/Crypt_GPG
  61.  * @link      http://www.gnupg.org/
  62.  */
  63. {
  64.     // {{{ protected properties
  65.  
  66.     /**
  67.      * The current signature id
  68.      *
  69.      * Ths signature id is emitted by GPG before the new signature line so we
  70.      * must remember it temporarily.
  71.      *
  72.      * @var string 
  73.      */
  74.     protected $signatureId = '';
  75.  
  76.     /**
  77.      * List of parsed {@link Crypt_GPG_Signature} objects
  78.      *
  79.      * @var array 
  80.      */
  81.     protected $signatures = array();
  82.  
  83.     /**
  84.      * Array index of the current signature
  85.      *
  86.      * @var integer 
  87.      */
  88.     protected $index = -1;
  89.  
  90.     // }}}
  91.     // {{{ handle()
  92.  
  93.     /**
  94.      * Handles a status line
  95.      *
  96.      * @param string $line the status line to handle.
  97.      *
  98.      * @return void 
  99.      */
  100.     public function handle($line)
  101.     {
  102.         $tokens explode(' '$line);
  103.         switch ($tokens[0]{
  104.         case 'GOODSIG':
  105.         case 'EXPSIG':
  106.         case 'EXPKEYSIG':
  107.         case 'REVKEYSIG':
  108.         case 'BADSIG':
  109.             $signature = new Crypt_GPG_Signature();
  110.  
  111.             // if there was a signature id, set it on the new signature
  112.             if ($this->signatureId != ''{
  113.                 $signature->setId($this->signatureId);
  114.                 $this->signatureId = '';
  115.             }
  116.  
  117.             // Detect whether fingerprint or key id was returned and set
  118.             // signature values appropriately. Key ids are strings of either
  119.             // 16 or 8 hexadecimal characters. Fingerprints are strings of 40
  120.             // hexadecimal characters. The key id is the last 16 characters of
  121.             // the key fingerprint.
  122.             if (strlen($tokens[1]> 16{
  123.                 $signature->setKeyFingerprint($tokens[1]);
  124.                 $signature->setKeyId(substr($tokens[1]-16));
  125.             else {
  126.                 $signature->setKeyId($tokens[1]);
  127.             }
  128.  
  129.             // get user id string
  130.             $string implode(' 'array_splice($tokens2));
  131.             $string rawurldecode($string);
  132.  
  133.             $signature->setUserId(Crypt_GPG_UserId::parse($string));
  134.  
  135.             $this->index++;
  136.             $this->signatures[$this->index$signature;
  137.             break;
  138.  
  139.         case 'ERRSIG':
  140.             $signature = new Crypt_GPG_Signature();
  141.  
  142.             // if there was a signature id, set it on the new signature
  143.             if ($this->signatureId != ''{
  144.                 $signature->setId($this->signatureId);
  145.                 $this->signatureId = '';
  146.             }
  147.  
  148.             // Detect whether fingerprint or key id was returned and set
  149.             // signature values appropriately. Key ids are strings of either
  150.             // 16 or 8 hexadecimal characters. Fingerprints are strings of 40
  151.             // hexadecimal characters. The key id is the last 16 characters of
  152.             // the key fingerprint.
  153.             if (strlen($tokens[1]> 16{
  154.                 $signature->setKeyFingerprint($tokens[1]);
  155.                 $signature->setKeyId(substr($tokens[1]-16));
  156.             else {
  157.                 $signature->setKeyId($tokens[1]);
  158.             }
  159.  
  160.             $this->index++;
  161.             $this->signatures[$this->index$signature;
  162.  
  163.             break;
  164.  
  165.         case 'VALIDSIG':
  166.             if (!array_key_exists($this->index$this->signatures)) {
  167.                 break;
  168.             }
  169.  
  170.             $signature $this->signatures[$this->index];
  171.  
  172.             $signature->setValid(true);
  173.             $signature->setKeyFingerprint($tokens[1]);
  174.  
  175.             if (strpos($tokens[3]'T'=== false{
  176.                 $signature->setCreationDate($tokens[3]);
  177.             else {
  178.                 $signature->setCreationDate(strtotime($tokens[3]));
  179.             }
  180.  
  181.             if (array_key_exists(4$tokens)) {
  182.                 if (strpos($tokens[4]'T'=== false{
  183.                     $signature->setExpirationDate($tokens[4]);
  184.                 else {
  185.                     $signature->setExpirationDate(strtotime($tokens[4]));
  186.                 }
  187.             }
  188.  
  189.             break;
  190.  
  191.         case 'SIG_ID':
  192.             // note: signature id comes before new signature line and may not
  193.             // exist for some signature types
  194.             $this->signatureId = $tokens[1];
  195.             break;
  196.         }
  197.     }
  198.  
  199.     // }}}
  200.     // {{{ getSignatures()
  201.  
  202.     /**
  203.      * Gets the {@link Crypt_GPG_Signature} objects parsed by this handler
  204.      *
  205.      * @return array the signature objects parsed by this handler.
  206.      */
  207.     public function getSignatures()
  208.     {
  209.         return $this->signatures;
  210.     }
  211.  
  212.     // }}}
  213. }
  214.  
  215. ?>

Documentation generated on Wed, 13 Mar 2013 18:30:12 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.