| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | 
							- <?php
 
- /*
 
-  * This file is part of SwiftMailer.
 
-  * (c) 2004-2009 Chris Corbyn
 
-  *
 
-  * For the full copyright and license information, please view the LICENSE
 
-  * file that was distributed with this source code.
 
-  */
 
- /**
 
-  * DKIM Signer used to apply DKIM Signature to a message
 
-  * Takes advantage of pecl extension
 
-  *
 
-  * @author     Xavier De Cock <xdecock@gmail.com>
 
-  */
 
- class Swift_Signers_OpenDKIMSigner extends Swift_Signers_DKIMSigner
 
- {
 
-     private $_peclLoaded = false;
 
-     private $_dkimHandler = null;
 
-     private $dropFirstLF = true;
 
-     const CANON_RELAXED = 1;
 
-     const CANON_SIMPLE = 2;
 
-     const SIG_RSA_SHA1 = 3;
 
-     const SIG_RSA_SHA256 = 4;
 
-     public function __construct($privateKey, $domainName, $selector)
 
-     {
 
-         if (extension_loaded('opendkim')) {
 
-             $this->_peclLoaded = true;
 
-         } else {
 
-              throw new Swift_SwiftException('php-opendkim extension not found');
 
-         }
 
-         parent::__construct($privateKey, $domainName, $selector);
 
-     }
 
-     public static function newInstance($privateKey, $domainName, $selector)
 
-     {
 
-         return new static($privateKey, $domainName, $selector);
 
-     }
 
-     public function addSignature(Swift_Mime_HeaderSet $headers)
 
-     {
 
-         $header = new Swift_Mime_Headers_OpenDKIMHeader('DKIM-Signature');
 
-         $headerVal=$this->_dkimHandler->getSignatureHeader();
 
-         if (!$headerVal) {
 
-             throw new Swift_SwiftException('OpenDKIM Error: '.$this->_dkimHandler->getError());
 
-         }
 
-         $header->setValue($headerVal);
 
-         $headers->set($header);
 
-         return $this;
 
-     }
 
-     public function setHeaders(Swift_Mime_HeaderSet $headers)
 
-     {
 
-         $bodyLen = $this->_bodyLen;
 
-         if (is_bool($bodyLen)) {
 
-             $bodyLen = - 1;
 
-         }
 
-         $hash = ($this->_hashAlgorithm == 'rsa-sha1') ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256;
 
-         $bodyCanon = ($this->_bodyCanon == 'simple') ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED;
 
-         $headerCanon = ($this->_headerCanon == 'simple') ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED;
 
-         $this->_dkimHandler = new OpenDKIMSign($this->_privateKey, $this->_selector, $this->_domainName, $headerCanon, $bodyCanon, $hash, $bodyLen);
 
-         // Hardcode signature Margin for now
 
-         $this->_dkimHandler->setMargin(78);
 
-         if (!is_numeric($this->_signatureTimestamp)) {
 
-                OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, time());
 
-         } else {
 
-             if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->_signatureTimestamp)) {
 
-                 throw new Swift_SwiftException('Unable to force signature timestamp ['.openssl_error_string().']');
 
-             }
 
-         }
 
-         if (isset($this->_signerIdentity)) {
 
-             $this->_dkimHandler->setSigner($this->_signerIdentity);
 
-         }
 
-         $listHeaders = $headers->listAll();
 
-         foreach ($listHeaders as $hName) {
 
-             // Check if we need to ignore Header
 
-             if (! isset($this->_ignoredHeaders[strtolower($hName)])) {
 
-                 $tmp = $headers->getAll($hName);
 
-                 if ($headers->has($hName)) {
 
-                     foreach ($tmp as $header) {
 
-                         if ($header->getFieldBody() != '') {
 
-                             $htosign = $header->toString();
 
-                             $this->_dkimHandler->header($htosign);
 
-                             $this->_signedHeaders[] = $header->getFieldName();
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         return $this;
 
-     }
 
-     public function startBody()
 
-     {
 
-         if (! $this->_peclLoaded) {
 
-             return parent::startBody();
 
-         }
 
-         $this->dropFirstLF = true;
 
-         $this->_dkimHandler->eoh();
 
-         return $this;
 
-     }
 
-     public function endBody()
 
-     {
 
-         if (! $this->_peclLoaded) {
 
-             return parent::endBody();
 
-         }
 
-         $this->_dkimHandler->eom();
 
-         return $this;
 
-     }
 
-     public function reset()
 
-     {
 
-         $this->_dkimHandler = null;
 
-         parent::reset();
 
-         return $this;
 
-     }
 
-     /**
 
-      * Set the signature timestamp
 
-      *
 
-      * @param timestamp $time
 
-      * @return Swift_Signers_DKIMSigner
 
-      */
 
-     public function setSignatureTimestamp($time)
 
-     {
 
-         $this->_signatureTimestamp = $time;
 
-         return $this;
 
-     }
 
-     /**
 
-      * Set the signature expiration timestamp
 
-      *
 
-      * @param timestamp $time
 
-      * @return Swift_Signers_DKIMSigner
 
-      */
 
-     public function setSignatureExpiration($time)
 
-     {
 
-         $this->_signatureExpiration = $time;
 
-         return $this;
 
-     }
 
-     /**
 
-      * Enable / disable the DebugHeaders
 
-      *
 
-      * @param bool    $debug
 
-      * @return Swift_Signers_DKIMSigner
 
-      */
 
-     public function setDebugHeaders($debug)
 
-     {
 
-         $this->_debugHeaders = (bool) $debug;
 
-         return $this;
 
-     }
 
-     // Protected
 
-     protected function _canonicalizeBody($string)
 
-     {
 
-         if (! $this->_peclLoaded) {
 
-             return parent::_canonicalizeBody($string);
 
-         }
 
-         if (false && $this->dropFirstLF === true) {
 
-             if ($string[0]=="\r" && $string[1]=="\n") {
 
-                 $string=substr($string, 2);
 
-             }
 
-         }
 
-         $this->dropFirstLF = false;
 
-         if (strlen($string)) {
 
-             $this->_dkimHandler->body($string);
 
-         }
 
-     }
 
- }
 
 
  |