From 5ed4498e4f27b9c20d8ec1df95591d933d78e966 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Wed, 26 Jan 2022 14:43:31 +0100 Subject: [PATCH] Added: MailSo\Mime\Part::IsPgpSigned()/IsPgpSignature() Drop: MailSo\Mime\Enumerations\Constants --- .../MailSo/Base/StreamWrappers/Binary.php | 4 +-- .../libraries/MailSo/Imap/BodyStructure.php | 5 ++-- .../MailSo/Mime/Enumerations/Constants.php | 25 ----------------- .../app/libraries/MailSo/Mime/Header.php | 6 ++--- .../MailSo/Mime/HeaderCollection.php | 2 +- .../app/libraries/MailSo/Mime/Message.php | 2 +- .../0.0.0/app/libraries/MailSo/Mime/Part.php | 27 ++++++++++++++----- .../libraries/MailSo/Mime/PartCollection.php | 3 +-- .../app/libraries/RainLoop/Actions/Pgp.php | 5 ++++ 9 files changed, 35 insertions(+), 44 deletions(-) delete mode 100644 snappymail/v/0.0.0/app/libraries/MailSo/Mime/Enumerations/Constants.php diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php index f3d754302..cec59ad61 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php @@ -158,8 +158,8 @@ class Binary { $rFilter = \stream_filter_append($rStream, $sUtilsDecodeOrEncodeFunctionName, \STREAM_FILTER_READ, array( - 'line-length' => \MailSo\Mime\Enumerations\Constants::LINE_LENGTH, - 'line-break-chars' => \MailSo\Mime\Enumerations\Constants::CRLF + 'line-length' => 74, + 'line-break-chars' => "\r\n" )); return \is_resource($rFilter) ? $rStream : false; } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/BodyStructure.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/BodyStructure.php index 01ce04d31..13c5d5aad 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/BodyStructure.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/BodyStructure.php @@ -189,13 +189,12 @@ class BodyStructure && 'application/pgp-signature' === \strtolower(\trim($this->aBodyParams['protocol'])) // The multipart/signed body MUST consist of exactly two parts. && 2 === \count($this->aSubParts) - && $this->aSubParts[1]->IsPgpSignature(); + && $this->aSubParts[1]->IsPgpSignature(); } public function IsPgpSignature() : bool { - return \in_array($this->sContentType, - array('application/pgp-signature', 'application/pkcs7-signature')); + return \in_array($this->sContentType, ['application/pgp-signature', 'application/pkcs7-signature']); } public function IsAttachBodyPart() : bool diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Enumerations/Constants.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Enumerations/Constants.php deleted file mode 100644 index 594835576..000000000 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Enumerations/Constants.php +++ /dev/null @@ -1,25 +0,0 @@ -NameWithDelimitrom().$sValue, - Enumerations\Constants::LINE_LENGTH, $sGlue + 74, $sGlue ), \strlen($this->NameWithDelimitrom()))); } @@ -168,8 +168,8 @@ class Header 'scheme' => \MailSo\Base\Enumerations\Encoding::BASE64_SHORT, 'input-charset' => \MailSo\Base\Enumerations\Charset::UTF_8, 'output-charset' => \MailSo\Base\Enumerations\Charset::UTF_8, - 'line-length' => Enumerations\Constants::LINE_LENGTH, - 'line-break-chars' => Enumerations\Constants::CRLF + 'line-length' => 74, + 'line-break-chars' => "\r\n" ); return \iconv_mime_encode($this->Name(), $sResult, $aPreferences); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/HeaderCollection.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/HeaderCollection.php index 1e42730c8..b7e4399ae 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/HeaderCollection.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/HeaderCollection.php @@ -307,6 +307,6 @@ class HeaderCollection extends \MailSo\Base\Collection foreach ($this as $oHeader) { $aResult[] = $oHeader->EncodedValue(); } - return \implode(Enumerations\Constants::CRLF, $aResult); + return \implode("\r\n", $aResult); } } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Message.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Message.php index ee0843641..9417b0799 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Message.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Message.php @@ -325,7 +325,7 @@ class Message { $this->aAlternativeParts[] = array( $sContentType, - \preg_replace('/\\r?\\n/', Enumerations\Constants::CRLF, \trim($sData)), + \preg_replace('/\\r?\\n/', "\r\n", \trim($sData)), \MailSo\Base\Enumerations\Encoding::QUOTED_PRINTABLE_LOWER, array() ); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Part.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Part.php index 847cfe215..a78f856ba 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Part.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Part.php @@ -163,6 +163,22 @@ class Part return $sResult; } + public function IsPgpSigned() : bool + { + // https://datatracker.ietf.org/doc/html/rfc3156#section-5 + $header = $this->Headers->GetByName(Enumerations\Header::CONTENT_TYPE); + return $header + && \preg_match('#multipart/signed.+protocol=["\']?application/pgp-signature#si', $header->FullValue()) + // The multipart/signed body MUST consist of exactly two parts. + && 2 === \count($this->SubParts) + && $this->SubParts[1]->IsPgpSignature(); + } + + public function IsPgpSignature() : bool + { + return \in_array($this->ContentType(), array('application/pgp-signature', 'application/pkcs7-signature')); + } + public static function FromFile(string $sFileName) : ?self { $rStreamHandle = \file_exists($sFileName) ? \fopen($sFileName, 'rb') : false; @@ -524,13 +540,11 @@ class Part $aSubStreams = array( - $this->Headers->ToEncodedString(). - Enumerations\Constants::CRLF. - Enumerations\Constants::CRLF, + $this->Headers->ToEncodedString() . "\r\n\r\n", null === $this->Body ? '' : $this->Body, - Enumerations\Constants::CRLF + "\r\n" ); if (0 < $this->SubParts->Count()) @@ -538,7 +552,7 @@ class Part $sBoundary = $this->HeaderBoundary(); if (\strlen($sBoundary)) { - $aSubStreams[] = '--'.$sBoundary.Enumerations\Constants::CRLF; + $aSubStreams[] = "--{$sBoundary}\r\n"; $rSubPartsStream = $this->SubParts->ToStream($sBoundary); if (\is_resource($rSubPartsStream)) @@ -546,8 +560,7 @@ class Part $aSubStreams[] = $rSubPartsStream; } - $aSubStreams[] = Enumerations\Constants::CRLF. - '--'.$sBoundary.'--'.Enumerations\Constants::CRLF; + $aSubStreams[] = "\r\n--{$sBoundary}--\r\n"; } } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/PartCollection.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/PartCollection.php index 7fc6cd881..b531ee119 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/PartCollection.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/PartCollection.php @@ -36,8 +36,7 @@ class PartCollection extends \MailSo\Base\Collection { if (\count($aResult)) { - $aResult[] = Enumerations\Constants::CRLF. - '--'.$sBoundary.Enumerations\Constants::CRLF; + $aResult[] = "\r\n--{$sBoundary}\r\n"; } $aResult[] = $oPart->ToStream(); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Pgp.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Pgp.php index ec26affdd..0a96ecc09 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Pgp.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Pgp.php @@ -84,6 +84,11 @@ trait Pgp ); } + if ($oPart->IsPgpSigned()) { +// $GPG->verifyStream($oPart->SubParts[0]->Body, \stream_get_contents($oPart->SubParts[1]->Body)); + $oPart = $oPart->SubParts[0]; + } + return $this->DefaultResponse(__FUNCTION__, $oPart); }