/** * Creates the element from the first found armor part of the class type * in the armored input data. * * @param mixed $data Armored PGP data. * * @return Horde_Pgp_Element PGP element object. */ public static function create($data) { $class = get_called_class(); if ($data instanceof $class) { return $data; } foreach (Horde_Pgp_Armor::create($data) as $val) { if ($val instanceof $class) { return $val; } } return null; }
/** * Converts armored input into a Horde_Mime_Part object. * * @param mixed $input Armored input. * @param array $opts Additional options: * - charset: (string) Charset of the armored input. * * @return mixed Either null if no PGP data was found, or a * Horde_Mime_Part object. */ public function armorToPart($input, array $opts = array()) { $opts = array_merge(array('charset' => 'UTF-8'), $opts); $armor = Horde_Pgp_Armor::create($input); $new_part = new Horde_Mime_Part(); $new_part->setType('multipart/mixed'); foreach ($armor as $val) { switch (get_class($val)) { case 'Horde_Pgp_Element_Text': $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setCharset($opts['charset']); $part->setContents($val->message[0]->data); $new_part[] = $part; break; case 'Horde_Pgp_Element_PrivateKey': case 'Horde_Pgp_Element_PublicKey': $part = new Horde_Mime_Part(); $part->setType('application/pgp-keys'); $part->setContents(strval($val)); $new_part[] = $part; break; case 'Horde_Pgp_Element_Message': // TODO: Message can also be text or signature $part = $this->_encryptBase($val); $part->setMetadata(self::PGP_ARMOR, true); $part['2']->setMetadata(self::PGP_CHARSET, isset($val->headers['Charset']) ? $val->headers['Charset'] : 'UTF-8'); $new_part[] = $part; break; case 'Horde_Pgp_Element_SignedMessage': $part = $this->_signPart($val->text, $val->signature); $new_part[] = $part; break; } } return count($new_part->getParts()) ? $new_part : null; }