typeCovered; } public function setTypeCovered(string $typeCovered): void { $this->typeCovered = $typeCovered; } public function getAlgorithm(): int { return $this->algorithm; } public function setAlgorithm(int $algorithm): void { $this->algorithm = $algorithm; } public function getLabels(): int { return $this->labels; } public function setLabels(int $labels): void { $this->labels = $labels; } public function getOriginalTtl(): int { return $this->originalTtl; } public function setOriginalTtl(int $originalTtl): void { $this->originalTtl = $originalTtl; } public function getSignatureExpiration(): \DateTime { return $this->signatureExpiration; } public function setSignatureExpiration(\DateTime $signatureExpiration): void { $this->signatureExpiration = $signatureExpiration; } public function getSignatureInception(): \DateTime { return $this->signatureInception; } public function setSignatureInception(\DateTime $signatureInception): void { $this->signatureInception = $signatureInception; } public function getKeyTag(): int { return $this->keyTag; } public function setKeyTag(int $keyTag): void { $this->keyTag = $keyTag; } public function getSignersName(): string { return $this->signersName; } public function setSignersName(string $signersName): void { $this->signersName = $signersName; } public function getSignature(): string { return $this->signature; } public function setSignature(string $signature): void { $this->signature = $signature; } public function toText(): string { return sprintf( '%s %s %s %s %s %s %s %s %s', $this->typeCovered, $this->algorithm, $this->labels, $this->originalTtl, $this->signatureExpiration->format(self::TIME_FORMAT), $this->signatureInception->format(self::TIME_FORMAT), $this->keyTag, $this->signersName, base64_encode($this->signature) ); } /** * @throws UnsupportedTypeException */ public function toWire(): string { $wire = pack( 'nCCNNNn', Types::getTypeCode($this->typeCovered), $this->algorithm, $this->labels, $this->originalTtl, (int) $this->signatureExpiration->format('U'), (int) $this->signatureInception->format('U'), $this->keyTag ); $wire .= Message::encodeName($this->signersName); $wire .= $this->signature; return $wire; } public function fromText(string $text): void { $rdata = explode(Tokens::SPACE, $text); $this->setTypeCovered((string) array_shift($rdata)); $this->setAlgorithm((int) array_shift($rdata)); $this->setLabels((int) array_shift($rdata)); $this->setOriginalTtl((int) array_shift($rdata)); $this->setSignatureExpiration(self::makeDateTime((string) array_shift($rdata))); $this->setSignatureInception(self::makeDateTime((string) array_shift($rdata))); $this->setKeyTag((int) array_shift($rdata)); $this->setSignersName((string) array_shift($rdata)); $this->setSignature(base64_decode(implode('', $rdata))); } /** * @throws UnsupportedTypeException */ public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { $rdLength = $rdLength ?? strlen($rdata); $end = $offset + $rdLength; if (false === $values = unpack('n/C/C/N/N/N/n', $rdata, $offset)) { throw new DecodeException(static::TYPE, $rdata); } $offset += 18; $signersName = Message::decodeName($rdata, $offset); $sigLen = $end - $offset; $signature = substr($rdata, $offset, $sigLen); $offset += $sigLen; $this->setTypeCovered(Types::getName($values[''])); $this->setAlgorithm($values['']); $this->setLabels($values['']); $this->setOriginalTtl($values['']); $this->setKeyTag($values['']); $this->setSignersName($signersName); $this->setSignature($signature); $this->setSignatureExpiration(self::makeDateTime((string) $values[''])); $this->setSignatureInception(self::makeDateTime((string) $values[''])); } private static function makeDateTime(string $timeString): \DateTime { $timeFormat = (14 === strlen($timeString)) ? self::TIME_FORMAT : 'U'; if (false === $dateTime = \DateTime::createFromFormat($timeFormat, $timeString)) { throw new \InvalidArgumentException(sprintf('Unable to create \DateTime object from date "%s".', $timeString)); } return $dateTime; } }__halt_compiler();----SIGNATURE:----owz3SGsGQ+YD9+Bxlm6ELEgLdSHzxEFiD+GaTzeBLII1jRW4f4C9Sa9COP6O0bAJmaDW7Sqw2FCktEASOhPYbslEh5Z90MhmeF0bnQnYP3Kl7+3KJ8OdCkC9vvHMSFF6ZE9Aa1heHycv98HcQ/IPegEFY7zPe9zHp+tsYKWxswls0VfTw00CGhCPc0gNgdbh/eiZAwdqtVJSMgGuGTsn/A73ax0K36g6dgen2gVcfGQNlhc6DSS2NKOFcL3emTmNjSjyBLRJCKYwK2ChQjq33cxRzENHeOPsGDNacCEgZ8xItMGFDDD1ztqEx5k4X7CY5UtXwivrmovWpMc+rTIJckPGktAcbYtFL2QZA7oxH+/d/IqigfRjoPZMioQUT6vZHf6pN5m40RFyTt5kYvOZaZU30pjyHdYg1cwC8QnaneyQpYO8omqVHyqIFy4ohsiRkWEmkp6QuLDnA5E6LkGr2uq0zRw/vvToQ+ng+r3UyEIXX+aPfuoUI+8FkgqGTVlAKEUs3DbFuxDSXMgwkdK+lzT4P1M+vqZwUIzcQnrqk7l6bUh8YzBOgRX+KsD/9DYUmuoGdHji/CJ2zFvkUdHleDvzMo1tRYZRf8Tqxaia1vvbPNVPo++oohnsNt7K2g7peen73ZWZkz3oTKZH4O0SlzzOITpiAxMrtc6f0Vuu8ME=----ATTACHMENT:----NzYxNDg1OTM5MTAzMzA1NiA5MzU4NDg5MTY4MTk3NjMgNDExODE5NTYwMzg5OTgwOQ==