You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
redonate/public_html/lib/swiftmailer/classes/Swift/Signers/PeclDKIMSigner.php

116 lines
3.3 KiB
PHP

<?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 or fallbacks to php implementation
*
* @package Swift
* @subpackage Signatures
* @author Xavier De Cock <xdecock@gmail.com>
*/
class Swift_Signer_PeclDKIMSigner extends Swift_Signers_DKIMSigner
{
private $_peclLoaded = false;
private $_dkimHandler = null;
public function __construct($privateKey, $domainName, $selector)
{
parent::__construct($privateKey, $domainName, $selector);
if (extension_loaded('dkim')) {
$this->_peclLoaded = true;
}
}
public function addSignature(Swift_Mime_HeaderSet $headers)
{
if (! $this->_peclLoaded) {
return parent::addSignature($headers);
} else {
dkim_eom($this->_dkimHandler);
$headers->addTextHeader('DKIM-Signature: ', dkim_getsighdr($this->_dkimHandler));
}
return $this;
}
public function setHeaders(Swift_Mime_HeaderSet $headers)
{
if (! $this->_peclLoaded) {
return parent::setHeaders($headers);
}
//dkim_sign(privateKey, selector, domain[, header_canon[, body_canon[, sign_alg[, body_length]]]])
$bodyLen = $this->_bodyLen();
if (is_bool($bodyLen)) {
$bodyLen = - 1;
}
$hash = ($this->_hashAlgorithm == 'rsa-sha1') ? DKIM_SIGN_RSASHA1 : DKIM_SIGN_RSASHA256;
$bodyCanon = ($this->_bodyCanon == 'simple') ? DKIM_CANON_SIMPLE : DKIM_CANON_RELAXED;
$headerCanon = ($this->_headerCanon == 'simple') ? DKIM_CANON_SIMPLE : DKIM_CANON_RELAXED;
$this->_dkimHandler = dkim_sign($this->_privateKey, $this->_selector, $this->_domainName, $headerCanon, $bodyCanon, $hash, $bodyLen);
$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() != '') {
dkim_header($this->_dkimHandler, $header->toString());
$this->_signedHeaders[] = $header->getFieldName();
}
}
}
}
}
return $this;
}
public function startBody()
{
if (! $this->_peclLoaded) {
return parent::startBody();
}
dkim_eoh($this->_dkimHandler);
return $this;
}
public function endBody()
{
if (! $this->_peclLoaded) {
return parent::endBody();
}
dkim_eob($this->_dkimHandler);
return $this;
}
public function reset()
{
$this->_dkimHandler = null;
parent::reset();
}
// Protected
protected function _canonicalizeBody($string)
{
if (! $this->_peclLoaded) {
return parent::_canonicalizeBody($string);
}
dkim_body($this->_dkimHandler, $string);
}
}