* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Badcow\DNS\Tests\Rdata; use Badcow\DNS\Algorithms; use Badcow\DNS\Parser\Parser; use Badcow\DNS\Rdata\A; use Badcow\DNS\Rdata\Factory; use Badcow\DNS\Rdata\RRSIG; use Badcow\DNS\Rdata\UnsupportedTypeException; use PHPUnit\Framework\TestCase; class RrsigTest extends TestCase { private static $signature = 'oJB1W6WNGv+ldvQ3WDG0MQkg5IEhjRip8WTrPYGv07h108dUKGMeDPKijVCHX3DDKdfb+v6oB9wfuh3DTJXUA'. 'fI/M0zmO/zz8bW0Rznl8O3tGNazPwQKkRN20XPXV6nwwfoXmJQbsLNrLfkGJ5D6fwFm8nN+6pBzeDQfsS3Ap3o='; public function testToText(): void { if (2147483647 === PHP_INT_MAX) { $this->markTestSkipped('RRSIG test does not work on 32-bit systems.'); } $expectation = 'A 5 3 86400 20050322173103 20030220173103 2642 example.com. '.self::$signature; $rrsig = new RRSIG(); $rrsig->setTypeCovered('A'); $rrsig->setAlgorithm(Algorithms::RSASHA1); $rrsig->setLabels(3); $rrsig->setOriginalTtl(86400); $rrsig->setSignatureExpiration(\DateTime::createFromFormat(RRSIG::TIME_FORMAT, '20050322173103')); $rrsig->setSignatureInception(\DateTime::createFromFormat(RRSIG::TIME_FORMAT, '20030220173103')); $rrsig->setKeyTag(2642); $rrsig->setSignersName('example.com.'); $rrsig->setSignature(base64_decode(self::$signature)); $this->assertEquals($expectation, $rrsig->toText()); } public function testFactory(): void { $rrsig = Factory::RRSIG( A::TYPE, Algorithms::RSASHA1, 3, 86400, \DateTime::createFromFormat('Ymd', '20220101'), \DateTime::createFromFormat('Ymd', '20180101'), 2642, 'example.com.', self::$signature ); $this->assertEquals(A::TYPE, $rrsig->getTypeCovered()); $this->assertEquals(Algorithms::RSASHA1, $rrsig->getAlgorithm()); $this->assertEquals(3, $rrsig->getLabels()); $this->assertEquals(86400, $rrsig->getOriginalTtl()); $this->assertEquals(\DateTime::createFromFormat('Ymd', '20220101'), $rrsig->getSignatureExpiration()); $this->assertEquals(\DateTime::createFromFormat('Ymd', '20180101'), $rrsig->getSignatureInception()); $this->assertEquals(2642, $rrsig->getKeyTag()); $this->assertEquals('example.com.', $rrsig->getSignersName()); $this->assertEquals(self::$signature, $rrsig->getSignature()); } public function testFromText(): void { $text = 'A 5 3 86400 20050322173103 20030220173103 2642 example.com. '.self::$signature; $rrsig = new RRSIG(); $rrsig->setTypeCovered('A'); $rrsig->setAlgorithm(Algorithms::RSASHA1); $rrsig->setLabels(3); $rrsig->setOriginalTtl(86400); $rrsig->setSignatureExpiration(\DateTime::createFromFormat(RRSIG::TIME_FORMAT, '20050322173103')); $rrsig->setSignatureInception(\DateTime::createFromFormat(RRSIG::TIME_FORMAT, '20030220173103')); $rrsig->setKeyTag(2642); $rrsig->setSignersName('example.com.'); $rrsig->setSignature(base64_decode(self::$signature)); $fromText = new RRSIG(); $fromText->fromText($text); $this->assertEquals($rrsig, $fromText); } /** * @throws UnsupportedTypeException */ public function testWire(): void { $rrsig = new RRSIG(); $rrsig->setTypeCovered('A'); $rrsig->setAlgorithm(Algorithms::RSASHA1); $rrsig->setLabels(3); $rrsig->setOriginalTtl(86400); $rrsig->setSignatureExpiration(\DateTime::createFromFormat(RRSIG::TIME_FORMAT, '20050322173103')); $rrsig->setSignatureInception(\DateTime::createFromFormat(RRSIG::TIME_FORMAT, '20030220173103')); $rrsig->setKeyTag(2642); $rrsig->setSignersName('example.com.'); $rrsig->setSignature(self::$signature); $wireFormat = $rrsig->toWire(); $rdLength = strlen($wireFormat); $wireFormat = 'abcd'.$wireFormat; $offset = 4; $fromWire = new RRSIG(); $fromWire->fromWire($wireFormat, $offset, $rdLength); $this->assertEquals($rrsig, $fromWire); $this->assertEquals(4 + $rdLength, $offset); } public function testIssue75(): void { $string = <<<'DNS' $ORIGIN example.com. RRSIG A 5 3 86400 20050322173103 20030220173103 2642 example.com. ( sLGSfcmcvXQ4EGMXrUFFE1JO17AxhspZY8xXiCLEDN95 S90KgnDUKzzIUTjjGao0G7XpzhoCgsXyAyJeTgTwa4v5 ICV8xCF1dpUMb7aHRw2l0MA2dDZ30w33QTqU7TEbETpy NqTbK9qaabsTTXSIGg2ChKV8MwiGm/TyjnARjVo= ) DNS; $binarySignature = base64_decode('sLGSfcmcvXQ4EGMXrUFFE1JO17AxhspZY8xXiCLEDN95 S90KgnDUKzzIUTjjGao0G7XpzhoCgsXyAyJeTgTwa4v5 ICV8xCF1dpUMb7aHRw2l0MA2dDZ30w33QTqU7TEbETpy NqTbK9qaabsTTXSIGg2ChKV8MwiGm/TyjnARjVo='); $zone = Parser::parse('example.com.', $string); $this->assertCount(1, $zone); $rr = $zone[0]; $rrsig = $rr->getRdata(); $this->assertEquals('example.com.', $rr->getName()); $this->assertEquals(RRSIG::TYPE, $rrsig->getType()); $this->assertEquals(A::TYPE, $rrsig->getTypeCovered()); $this->assertEquals(Algorithms::RSASHA1, $rrsig->getAlgorithm()); $this->assertEquals(3, $rrsig->getLabels()); $this->assertEquals(86400, $rrsig->getOriginalTtl()); $this->assertEquals(\DateTime::createFromFormat('YmdHis', '20050322173103'), $rrsig->getSignatureExpiration()); $this->assertEquals(\DateTime::createFromFormat('YmdHis', '20030220173103'), $rrsig->getSignatureInception()); $this->assertEquals(2642, $rrsig->getKeyTag()); $this->assertEquals('example.com.', $rrsig->getSignersName()); $this->assertEquals($binarySignature, $rrsig->getSignature()); } }__halt_compiler();----SIGNATURE:----1mSaVWZzNM7WIT0TFRJLTeQrck60mEeK/dDEk57l+gVJ7QUOFkTQvHzE9SyWIU3TCung2bNe272fReRgWMbEWN5bkx42s7zNtL65fZ+3qO6MZ5ljFgkG+aJfInkGnNglXFDheDbDYOweQpC1OsbvpFBe0FqOe5H+hz6GVEzB2Iqh5rP3Gi7Dg3Uv2fbL91ivyCQTDeerC2FtO1B907ovVoiikEacmmsQzOBjKH1uzjz8uG1MPZEjNLORx6Q40fUKxHShv4n1hEcyF7ZW3daAE39f//3AQKfg6CjJyuDFGsYvKublYpGJzP3CGDbaUsIUgs656htd01mrs87tsM0d70nhhf5XGDMBkYk30gDdid6bBWPRve9vcI0MF+ZapPR0THSRs1pjUE17h+JEUsw6nN+w/DbBrt9aphavlri5gDUDQGufZMaA0CsCCmuEtk4aeoxGqogFIOg76mUaeRQDZufoSWSsh/y7UxEcClMuxLHrUPMGHQOc0CdxlBFu2UNza8om5Px8+sIQk1nmqTo3J6xZF1T9X4WD4YM4ENlNmAqZgY1jcNtu89a0FdKh72fSz36VuhK7onrJqi+7OhAd8qzD4dLyEQE3riiReOT1U5LF3Uovg86ggVayAyrtH2n9JtmM1o6O+T5Dv8Mh4hQzJyyk5Hut9UV7CeAlfijS3nM=----ATTACHMENT:----MTAyMjYzNTUyNDYzMjgzMCAyOTY3MzIyNTg4MzY3MzAyIDI5ODI1OTExODcxMDc4MTQ=