From a99c34159d03f2b5b525d6d8cc38509c4ac2f0a1 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 31 Mar 2015 18:56:32 +0200 Subject: Enigma: Implemented messages signing and encrypting --- plugins/enigma/lib/enigma_key.php | 40 ++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) (limited to 'plugins/enigma/lib/enigma_key.php') diff --git a/plugins/enigma/lib/enigma_key.php b/plugins/enigma/lib/enigma_key.php index 66670c5d5..8c61cbd99 100644 --- a/plugins/enigma/lib/enigma_key.php +++ b/plugins/enigma/lib/enigma_key.php @@ -3,18 +3,11 @@ +-------------------------------------------------------------------------+ | 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 | @@ -32,6 +25,9 @@ class enigma_key const TYPE_KEYPAIR = 1; const TYPE_PUBLIC = 2; + const CAN_SIGN = 1; + const CAN_ENCRYPT = 2; + /** * Keys list sorting callback for usort() */ @@ -91,6 +87,28 @@ class enigma_key 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 (($mode == self::CAN_ENCRYPT && $subkey->can_encrypt) + || ($mode == self::CAN_SIGN && $subkey->has_private) + ) { + return $subkey; + } + } + } + } + } + } + /** * Converts long ID or Fingerprint to short ID * Crypt_GPG uses internal, but e.g. Thunderbird's Enigmail displays short ID -- cgit v1.2.3