plugins/enigma/lib/enigma_driver_gnupg.php | ●●●●● patch | view | raw | blame | history | |
plugins/enigma/lib/enigma_driver_phpssl.php | ●●●●● patch | view | raw | blame | history | |
plugins/enigma/lib/enigma_key.php | ●●●●● patch | view | raw | blame | history | |
plugins/enigma/lib/enigma_subkey.php | ●●●●● patch | view | raw | blame | history | |
plugins/enigma/lib/enigma_ui.php | ●●●●● patch | view | raw | blame | history | |
plugins/enigma/localization/en_US.inc | ●●●●● patch | view | raw | blame | history | |
plugins/enigma/skins/classic/enigma.css | ●●●●● patch | view | raw | blame | history |
plugins/enigma/lib/enigma_driver_gnupg.php
@@ -299,7 +299,7 @@ else if ($code == enigma_error::DELKEY) { $key = $this->get_key($keyid); for ($i = count($key->subkeys) - 1; $i >= 0; $i--) { $type = $key->subkeys[$i]->can_encrypt ? 'priv' : 'pub'; $type = ($key->subkeys[$i]->usage & enigma_key::CAN_ENCRYPT) ? 'priv' : 'pub'; $result = $this->{'delete_' . $type . 'key'}($key->subkeys[$i]->id); if ($result !== true) { return $result; @@ -423,6 +423,14 @@ $ekey->name = trim($ekey->users[0]->name . ' <' . $ekey->users[0]->email . '>'); foreach ($key->getSubKeys() as $idx => $subkey) { $usage = 0; if ($subkey->canSign()) { $usage += enigma_key::CAN_SIGN; } if ($subkey->canEncrypt()) { $usage += enigma_key::CAN_ENCRYPT; } $skey = new enigma_subkey(); $skey->id = $subkey->getId(); $skey->revoked = $subkey->isRevoked(); @@ -430,8 +438,9 @@ $skey->expires = $subkey->getExpirationDate(); $skey->fingerprint = $subkey->getFingerprint(); $skey->has_private = $subkey->hasPrivate(); $skey->can_sign = $subkey->canSign(); $skey->can_encrypt = $subkey->canEncrypt(); $skey->algorithm = $subkey->getAlgorithm(); $skey->length = $subkey->getLength(); $skey->usage = $usage; $ekey->subkeys[$idx] = $skey; }; plugins/enigma/lib/enigma_driver_phpssl.php
@@ -183,8 +183,6 @@ $skey->expires = $subkey->getExpirationDate(); $skey->fingerprint = $subkey->getFingerprint(); $skey->has_private = $subkey->hasPrivate(); $skey->can_sign = $subkey->canSign(); $skey->can_encrypt = $subkey->canEncrypt(); $ekey->subkeys[$idx] = $skey; }; plugins/enigma/lib/enigma_key.php
@@ -28,6 +28,9 @@ const CAN_SIGN = 1; const CAN_ENCRYPT = 2; const CAN_CERTIFY = 4; const CAN_AUTH = 8; /** * Keys list sorting callback for usort() @@ -99,9 +102,7 @@ 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) ) { if ($subkey->usage & $mode) { return $subkey; } } @@ -147,5 +148,4 @@ return $result; } } plugins/enigma/lib/enigma_subkey.php
@@ -23,8 +23,9 @@ public $created; public $revoked; public $has_private; public $can_sign; public $can_encrypt; public $algorithm; public $length; public $usage; /** * Converts internal ID to short ID @@ -47,4 +48,31 @@ { return enigma_key::format_fingerprint($this->fingerprint); } /** * Returns human-readable name of the key's algorithm * * @return string Algorithm name */ function get_algorithm() { // http://tools.ietf.org/html/rfc4880#section-9.1 switch ($this->algorithm) { case 1: case 2: case 3: return 'RSA'; case 16: case 20: return 'Elgamal'; case 17: return 'DSA'; case 18: return 'Elliptic Curve'; case 19: return 'ECDSA'; case 21: return 'Diffie-Hellman'; } } } plugins/enigma/lib/enigma_ui.php
@@ -385,23 +385,72 @@ $out .= html::tag('fieldset', null, html::tag('legend', null, $this->enigma->gettext('basicinfo')) . $table->show($attrib)); /* // Subkeys $table = new html_table(array('cols' => 6)); // Columns: Type, ID, Algorithm, Size, Created, Expires $table = new html_table(array('cols' => 5, 'id' => 'enigmasubkeytable', 'class' => 'records-table')); $table->add_header('id', $this->enigma->gettext('subkeyid')); $table->add_header('algo', $this->enigma->gettext('subkeyalgo')); $table->add_header('created', $this->enigma->gettext('subkeycreated')); $table->add_header('expires', $this->enigma->gettext('subkeyexpires')); $table->add_header('usage', $this->enigma->gettext('subkeyusage')); $now = time(); $date_format = $this->rc->config->get('date_format', 'Y-m-d'); $usage_map = array( enigma_key::CAN_ENCRYPT => $this->enigma->gettext('typeencrypt'), enigma_key::CAN_SIGN => $this->enigma->gettext('typesign'), enigma_key::CAN_CERTIFY => $this->enigma->gettext('typecert'), enigma_key::CAN_AUTH => $this->enigma->gettext('typeauth'), ); foreach ($this->data->subkeys as $subkey) { $algo = $subkey->get_algorithm(); if ($algo && $subkey->length) { $algo .= ' (' . $subkey->length . ')'; } $usage = array(); foreach ($usage_map as $key => $text) { if ($subkey->usage & $key) { $usage[] = $text; } } $table->add('id', $subkey->get_short_id()); $table->add('algo', $algo); $table->add('created', $subkey->created ? $this->rc->format_date($subkey->created, $date_format, false) : ''); $table->add('expires', $subkey->expires ? $this->rc->format_date($subkey->expires, $date_format, false) : $this->enigma->gettext('expiresnever')); $table->add('usage', implode(',', $usage)); $table->set_row_attribs($subkey->revoked || ($subkey->expires && $subkey->expires < $now) ? 'deleted' : ''); } $out .= html::tag('fieldset', null, html::tag('legend', null, $this->enigma->gettext('subkeys')) . $table->show($attrib)); $this->enigma->gettext('subkeys')) . $table->show()); // Additional user IDs $table = new html_table(array('cols' => 2)); // Columns: User ID, Validity $table = new html_table(array('cols' => 2, 'id' => 'enigmausertable', 'class' => 'records-table')); $table->add_header('id', $this->enigma->gettext('userid')); $table->add_header('valid', $this->enigma->gettext('uservalid')); foreach ($this->data->users as $user) { $username = $user->name; if ($user->comment) { $username .= ' (' . $user->comment . ')'; } $username .= ' <' . $user->email . '>'; $table->add('id', rcube::Q(trim($username))); $table->add('valid', $this->enigma->gettext($user->valid ? 'valid' : 'unknown')); $table->set_row_attribs($user->revoked || !$user->valid ? 'deleted' : ''); } $out .= html::tag('fieldset', null, html::tag('legend', null, $this->enigma->gettext('userids')) . $table->show($attrib)); */ $this->enigma->gettext('userids')) . $table->show()); return $out; } plugins/enigma/localization/en_US.inc
@@ -28,11 +28,25 @@ $labels['fingerprint'] = 'Fingerprint'; $labels['subkeys'] = 'Subkeys'; $labels['basicinfo'] = 'Basic Information'; $labels['userids'] = 'Additional User IDs'; $labels['userids'] = 'Additional Users'; $labels['typepublickey'] = 'public key'; $labels['typekeypair'] = 'key pair'; $labels['keyattfound'] = 'This message contains attached PGP key(s).'; $labels['keyattimport'] = 'Import key(s)'; $labels['typesign'] = 'Sign'; $labels['typeencrypt'] = 'Encrypt'; $labels['typecert'] = 'Certify'; $labels['typeauth'] = 'Authentication'; $labels['subkeyid'] = 'ID'; $labels['subkeyalgo'] = 'Algorithm'; $labels['subkeycreated'] = 'Created'; $labels['subkeyexpires'] = 'Expires'; $labels['subkeyusage'] = 'Usage'; $labels['expiresnever'] = 'never'; $labels['unknown'] = 'unknown'; $labels['uservalid'] = 'Valid'; $labels['userid'] = 'ID'; $labels['valid'] = 'valid'; $labels['supportencryption'] = 'Enable message encryption and signing'; $labels['supportsignatures'] = 'Enable message signatures verification'; plugins/enigma/skins/classic/enigma.css
@@ -142,6 +142,15 @@ text-align: right; } #key-details table { width: 100%; } #key-details table td, #key-details table th { border: 0; } #keystoolbar { position: absolute;