| | |
| | | <?php |
| | | /* |
| | | |
| | | /** |
| | | +-------------------------------------------------------------------------+ |
| | | | Key class for the Enigma Plugin | |
| | | | | |
| | | | This program is free software; you can redistribute it and/or modify | |
| | | | it under the terms of the GNU General Public License version 2 | |
| | | | as published by the Free Software Foundation. | |
| | | | Copyright (C) 2010-2015 The Roundcube Dev Team | |
| | | | | |
| | | | This program 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 General Public License for more details. | |
| | | | | |
| | | | You should have received a copy of the GNU General Public License along | |
| | | | with this program; if not, write to the Free Software Foundation, Inc., | |
| | | | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
| | | | Licensed under the GNU General Public License version 3 or | |
| | | | any later version with exceptions for skins & plugins. | |
| | | | See the README file for a full license statement. | |
| | | | | |
| | | +-------------------------------------------------------------------------+ |
| | | | Author: Aleksander Machniak <alec@alec.pl> | |
| | |
| | | { |
| | | public $id; |
| | | public $name; |
| | | public $users = array(); |
| | | public $users = array(); |
| | | public $subkeys = array(); |
| | | |
| | | const TYPE_UNKNOWN = 0; |
| | | const TYPE_KEYPAIR = 1; |
| | | const TYPE_PUBLIC = 2; |
| | | const TYPE_PUBLIC = 2; |
| | | |
| | | const CAN_SIGN = 1; |
| | | const CAN_ENCRYPT = 2; |
| | | const CAN_CERTIFY = 4; |
| | | const CAN_AUTH = 8; |
| | | |
| | | |
| | | /** |
| | | * Keys list sorting callback for usort() |
| | |
| | | |
| | | /** |
| | | * Returns true if all user IDs are revoked |
| | | */ |
| | | */ |
| | | function is_revoked() |
| | | { |
| | | foreach ($this->subkeys as $subkey) |
| | |
| | | |
| | | /** |
| | | * Returns true if any user ID is valid |
| | | */ |
| | | */ |
| | | function is_valid() |
| | | { |
| | | foreach ($this->users as $user) |
| | |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Returns true if any of subkeys is not expired |
| | | */ |
| | | */ |
| | | function is_expired() |
| | | { |
| | | $now = time(); |
| | | |
| | | |
| | | foreach ($this->subkeys as $subkey) |
| | | if (!$subkey->expires || $subkey->expires > $now) |
| | | return true; |
| | | |
| | | |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * Get key ID by user email |
| | | */ |
| | | function find_subkey($email, $mode) |
| | | { |
| | | $now = time(); |
| | | |
| | | foreach ($this->users as $user) { |
| | | if ($user->email === $email && $user->valid && !$user->revoked) { |
| | | foreach ($this->subkeys as $subkey) { |
| | | if (!$subkey->revoked && (!$subkey->expires || $subkey->expires > $now)) { |
| | | if ($subkey->usage & $mode) { |
| | | return $subkey; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | static function format_id($id) |
| | | { |
| | | // E.g. 04622F2089E037A5 => 89E037A5 |
| | | |
| | | |
| | | return substr($id, -8); |
| | | } |
| | | |
| | |
| | | */ |
| | | static function format_fingerprint($fingerprint) |
| | | { |
| | | if (!$fingerprint) |
| | | if (!$fingerprint) { |
| | | return ''; |
| | | |
| | | } |
| | | |
| | | $result = ''; |
| | | for ($i=0; $i<40; $i++) { |
| | | if ($i % 4 == 0) |
| | | if ($i % 4 == 0) { |
| | | $result .= ' '; |
| | | } |
| | | $result .= $fingerprint[$i]; |
| | | } |
| | | |
| | | return $result; |
| | | } |
| | | |
| | | } |