PageRenderTime 45ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/tests/unit/Swift/Signers/DKIMSignerTest.php

http://github.com/swiftmailer/swiftmailer
PHP | 220 lines | 194 code | 14 blank | 12 comment | 0 complexity | 662d6840473b79ba19a6033cf275e4c3 MD5 | raw file
Possible License(s): LGPL-3.0, LGPL-2.1
  1. <?php
  2. use Egulias\EmailValidator\EmailValidator;
  3. class Swift_Signers_DKIMSignerTest extends \SwiftMailerTestCase
  4. {
  5. public function testBasicSigningHeaderManipulation()
  6. {
  7. $headers = $this->createHeaders();
  8. $messageContent = 'Hello World';
  9. $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector');
  10. /* @var $signer Swift_Signers_HeaderSigner */
  11. $altered = $signer->getAlteredHeaders();
  12. $signer->reset();
  13. // Headers
  14. $signer->setHeaders($headers);
  15. // Body
  16. $signer->startBody();
  17. $signer->write($messageContent);
  18. $signer->endBody();
  19. // Signing
  20. $signer->addSignature($headers);
  21. }
  22. // SHA1 Signing
  23. public function testSigningSHA1()
  24. {
  25. $headerSet = $this->createHeaderSet();
  26. $messageContent = 'Hello World';
  27. $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector');
  28. $signer->setHashAlgorithm('rsa-sha1');
  29. $signer->setSignatureTimestamp('1299879181');
  30. $altered = $signer->getAlteredHeaders();
  31. $this->assertEquals(['DKIM-Signature'], $altered);
  32. $signer->reset();
  33. $signer->setHeaders($headerSet);
  34. $this->assertFalse($headerSet->has('DKIM-Signature'));
  35. $signer->startBody();
  36. $signer->write($messageContent);
  37. $signer->endBody();
  38. $signer->addSignature($headerSet);
  39. $this->assertTrue($headerSet->has('DKIM-Signature'));
  40. $dkim = $headerSet->getAll('DKIM-Signature');
  41. $sig = reset($dkim);
  42. $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha1; bh=wlbYcY9O9OPInGJ4D0E/rGsvMLE=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; t=1299879181; b=RMSNelzM2O5MAAnMjT3G3/VF36S3DGJXoPCXR001F1WDReu0prGphWjuzK/m6V1pwqQL8cCNg Hi74mTx2bvyAvmkjvQtJf1VMUOCc9WHGcm1Yec66I3ZWoNMGSWZ1EKAm2CtTzyG0IFw4ml9DI wSkyAFxlgicckDD6FibhqwX4w=');
  43. }
  44. // SHA256 Signing
  45. public function testSigning256()
  46. {
  47. $headerSet = $this->createHeaderSet();
  48. $messageContent = 'Hello World';
  49. $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector');
  50. $signer->setHashAlgorithm('rsa-sha256');
  51. $signer->setSignatureTimestamp('1299879181');
  52. $altered = $signer->getAlteredHeaders();
  53. $this->assertEquals(['DKIM-Signature'], $altered);
  54. $signer->reset();
  55. $signer->setHeaders($headerSet);
  56. $this->assertFalse($headerSet->has('DKIM-Signature'));
  57. $signer->startBody();
  58. $signer->write($messageContent);
  59. $signer->endBody();
  60. $signer->addSignature($headerSet);
  61. $this->assertTrue($headerSet->has('DKIM-Signature'));
  62. $dkim = $headerSet->getAll('DKIM-Signature');
  63. $sig = reset($dkim);
  64. $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; t=1299879181; b=jqPmieHzF5vR9F4mXCAkowuphpO4iJ8IAVuioh1BFZ3VITXZj5jlOFxULJMBiiApm2keJirnh u4mzogj444QkpT3lJg8/TBGAYQPdcvkG3KC0jdyN6QpSgpITBJG2BwWa+keXsv2bkQgLRAzNx qRhP45vpHCKun0Tg9LrwW/KCg=');
  65. }
  66. // Relaxed/Relaxed Hash Signing
  67. public function testSigningRelaxedRelaxed256()
  68. {
  69. $headerSet = $this->createHeaderSet();
  70. $messageContent = 'Hello World';
  71. $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector');
  72. $signer->setHashAlgorithm('rsa-sha256');
  73. $signer->setSignatureTimestamp('1299879181');
  74. $signer->setBodyCanon('relaxed');
  75. $signer->setHeaderCanon('relaxed');
  76. $altered = $signer->getAlteredHeaders();
  77. $this->assertEquals(['DKIM-Signature'], $altered);
  78. $signer->reset();
  79. $signer->setHeaders($headerSet);
  80. $this->assertFalse($headerSet->has('DKIM-Signature'));
  81. $signer->startBody();
  82. $signer->write($messageContent);
  83. $signer->endBody();
  84. $signer->addSignature($headerSet);
  85. $this->assertTrue($headerSet->has('DKIM-Signature'));
  86. $dkim = $headerSet->getAll('DKIM-Signature');
  87. $sig = reset($dkim);
  88. $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; c=relaxed/relaxed; t=1299879181; b=gzOI+PX6HpZKQFzwwmxzcVJsyirdLXOS+4pgfCpVHQIdqYusKLrhlLeFBTNoz75HrhNvGH6T0 Rt3w5aTqkrWfUuAEYt0Ns14GowLM7JojaFN+pZ4eYnRB3CBBgW6fee4NEMD5WPca3uS09tr1E 10RYh9ILlRtl+84sovhx5id3Y=');
  89. }
  90. // Relaxed/Simple Hash Signing
  91. public function testSigningRelaxedSimple256()
  92. {
  93. $headerSet = $this->createHeaderSet();
  94. $messageContent = 'Hello World';
  95. $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector');
  96. $signer->setHashAlgorithm('rsa-sha256');
  97. $signer->setSignatureTimestamp('1299879181');
  98. $signer->setHeaderCanon('relaxed');
  99. $altered = $signer->getAlteredHeaders();
  100. $this->assertEquals(['DKIM-Signature'], $altered);
  101. $signer->reset();
  102. $signer->setHeaders($headerSet);
  103. $this->assertFalse($headerSet->has('DKIM-Signature'));
  104. $signer->startBody();
  105. $signer->write($messageContent);
  106. $signer->endBody();
  107. $signer->addSignature($headerSet);
  108. $this->assertTrue($headerSet->has('DKIM-Signature'));
  109. $dkim = $headerSet->getAll('DKIM-Signature');
  110. $sig = reset($dkim);
  111. $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; c=relaxed; t=1299879181; b=dLPJNec5v81oelyzGOY0qPqTlGnQeNfUNBOrV/JKbStr3NqWGI9jH4JAe2YvO2V32lfPNoby1 4MMzZ6EPkaZkZDDSPa+53YbCPQAlqiD9QZZIUe2UNM33HN8yAMgiWEF5aP7MbQnxeVZMfVLEl 9S8qOImu+K5JZqhQQTL0dgLwA=');
  112. }
  113. // Simple/Relaxed Hash Signing
  114. public function testSigningSimpleRelaxed256()
  115. {
  116. $headerSet = $this->createHeaderSet();
  117. $messageContent = 'Hello World';
  118. $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector');
  119. $signer->setHashAlgorithm('rsa-sha256');
  120. $signer->setSignatureTimestamp('1299879181');
  121. $signer->setBodyCanon('relaxed');
  122. $altered = $signer->getAlteredHeaders();
  123. $this->assertEquals(['DKIM-Signature'], $altered);
  124. $signer->reset();
  125. $signer->setHeaders($headerSet);
  126. $this->assertFalse($headerSet->has('DKIM-Signature'));
  127. $signer->startBody();
  128. $signer->write($messageContent);
  129. $signer->endBody();
  130. $signer->addSignature($headerSet);
  131. $this->assertTrue($headerSet->has('DKIM-Signature'));
  132. $dkim = $headerSet->getAll('DKIM-Signature');
  133. $sig = reset($dkim);
  134. $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; c=simple/relaxed; t=1299879181; b=M5eomH/zamyzix9kOes+6YLzQZxuJdBP4x3nP9zF2N26eMLG2/cBKbnNyqiOTDhJdYfWPbLIa 1CWnjST0j5p4CpeOkGYuiE+M4TWEZwhRmRWootlPO3Ii6XpbBJKFk1o9zviS7OmXblUUE4aqb yRSIMDhtLdCK5GlaCneFLN7RQ=');
  135. }
  136. private function createHeaderSet()
  137. {
  138. $cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream());
  139. $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory();
  140. $contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder();
  141. $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'));
  142. $paramEncoder = new Swift_Encoder_Rfc2231Encoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'));
  143. $emailValidator = new EmailValidator();
  144. $headers = new Swift_Mime_SimpleHeaderSet(new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $emailValidator));
  145. return $headers;
  146. }
  147. /**
  148. * @return Swift_Mime_Headers
  149. */
  150. private function createHeaders()
  151. {
  152. $x = 0;
  153. $cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream());
  154. $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory();
  155. $contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder();
  156. $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'));
  157. $paramEncoder = new Swift_Encoder_Rfc2231Encoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'));
  158. $emailValidator = new EmailValidator();
  159. $headerFactory = new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $emailValidator);
  160. $headers = $this->getMockery('Swift_Mime_SimpleHeaderSet');
  161. $headers->shouldReceive('listAll')
  162. ->zeroOrMoreTimes()
  163. ->andReturn(['From', 'To', 'Date', 'Subject']);
  164. $headers->shouldReceive('has')
  165. ->zeroOrMoreTimes()
  166. ->with('From')
  167. ->andReturn(true);
  168. $headers->shouldReceive('getAll')
  169. ->zeroOrMoreTimes()
  170. ->with('From')
  171. ->andReturn([$headerFactory->createMailboxHeader('From', 'test@test.test')]);
  172. $headers->shouldReceive('has')
  173. ->zeroOrMoreTimes()
  174. ->with('To')
  175. ->andReturn(true);
  176. $headers->shouldReceive('getAll')
  177. ->zeroOrMoreTimes()
  178. ->with('To')
  179. ->andReturn([$headerFactory->createMailboxHeader('To', 'test@test.test')]);
  180. $headers->shouldReceive('has')
  181. ->zeroOrMoreTimes()
  182. ->with('Date')
  183. ->andReturn(true);
  184. $headers->shouldReceive('getAll')
  185. ->zeroOrMoreTimes()
  186. ->with('Date')
  187. ->andReturn([$headerFactory->createTextHeader('Date', 'Fri, 11 Mar 2011 20:56:12 +0000 (GMT)')]);
  188. $headers->shouldReceive('has')
  189. ->zeroOrMoreTimes()
  190. ->with('Subject')
  191. ->andReturn(true);
  192. $headers->shouldReceive('getAll')
  193. ->zeroOrMoreTimes()
  194. ->with('Subject')
  195. ->andReturn([$headerFactory->createTextHeader('Subject', 'Foo Bar Text Message')]);
  196. $headers->shouldReceive('addTextHeader')
  197. ->zeroOrMoreTimes()
  198. ->with('DKIM-Signature', \Mockery::any())
  199. ->andReturn(true);
  200. $headers->shouldReceive('getAll')
  201. ->zeroOrMoreTimes()
  202. ->with('DKIM-Signature')
  203. ->andReturn([$headerFactory->createTextHeader('DKIM-Signature', 'Foo Bar Text Message')]);
  204. return $headers;
  205. }
  206. }