source: subversion/trunk/plugins/enigma/lib/enigma_key.php @ 3921

Last change on this file since 3921 was 3921, checked in by alec, 3 years ago
  • Enigma plugin: initial commit
File size: 3.6 KB
Line 
1<?php
2/*
3 +-------------------------------------------------------------------------+
4 | Key class for the Enigma Plugin                                         |
5 |                                                                         |
6 | This program is free software; you can redistribute it and/or modify    |
7 | it under the terms of the GNU General Public License version 2          |
8 | as published by the Free Software Foundation.                           |
9 |                                                                         |
10 | This program is distributed in the hope that it will be useful,         |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           |
13 | GNU General Public License for more details.                            |
14 |                                                                         |
15 | You should have received a copy of the GNU General Public License along |
16 | with this program; if not, write to the Free Software Foundation, Inc., |
17 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.             |
18 |                                                                         |
19 +-------------------------------------------------------------------------+
20 | Author: Aleksander Machniak <alec@alec.pl>                              |
21 +-------------------------------------------------------------------------+
22*/
23
24class enigma_key
25{
26    public $id;
27    public $name;
28    public $users = array();
29    public $subkeys = array();
30
31    const TYPE_UNKNOWN = 0;
32    const TYPE_KEYPAIR = 1;
33    const TYPE_PUBLIC = 2;
34
35    /**
36     * Keys list sorting callback for usort()
37     */
38    static function cmp($a, $b)
39    {
40        return strcmp($a->name, $b->name);
41    }
42
43    /**
44     * Returns key type
45     */
46    function get_type()
47    {
48        if ($this->subkeys[0]->has_private)
49            return enigma_key::TYPE_KEYPAIR;
50        else if (!empty($this->subkeys[0]))
51            return enigma_key::TYPE_PUBLIC;
52
53        return enigma_key::TYPE_UNKNOWN;
54    }
55
56    /**
57     * Returns true if all user IDs are revoked
58     */   
59    function is_revoked()
60    {
61        foreach ($this->subkeys as $subkey)
62            if (!$subkey->revoked)
63                return false;
64
65        return true;
66    }
67
68    /**
69     * Returns true if any user ID is valid
70     */   
71    function is_valid()
72    {
73        foreach ($this->users as $user)
74            if ($user->valid)
75                return true;
76
77        return false;
78    }
79   
80    /**
81     * Returns true if any of subkeys is not expired
82     */   
83    function is_expired()
84    {
85        $now = time();
86       
87        foreach ($this->subkeys as $subkey)
88            if (!$subkey->expires || $subkey->expires > $now)
89                return true;
90   
91        return false;
92    }
93
94    /**
95     * Converts long ID or Fingerprint to short ID
96     * Crypt_GPG uses internal, but e.g. Thunderbird's Enigmail displays short ID
97     *
98     * @param string Key ID or fingerprint
99     * @return string Key short ID
100     */
101    static function format_id($id)
102    {
103        // E.g. 04622F2089E037A5 => 89E037A5
104       
105        return substr($id, -8);
106    }
107
108    /**
109     * Formats fingerprint string
110     *
111     * @param string Key fingerprint
112     *
113     * @return string Formatted fingerprint (with spaces)
114     */
115    static function format_fingerprint($fingerprint)
116    {
117        if (!$fingerprint)
118            return '';
119   
120        $result = '';
121        for ($i=0; $i<40; $i++) {
122            if ($i % 4 == 0)
123                $result .= ' ';
124            $result .= $fingerprint[$i];
125        }
126        return $result;
127    }
128
129}
Note: See TracBrowser for help on using the repository browser.