*/ class CAA implements RdataInterface { use RdataTrait; public const TYPE = 'CAA'; public const TYPE_CODE = 257; public const TAG_ISSUE = 'issue'; public const TAG_ISSUEWILD = 'issuewild'; public const TAG_IODEF = 'iodef'; public const ALLOWED_TAGS = [self::TAG_ISSUE, self::TAG_ISSUEWILD, self::TAG_IODEF]; /** * It is currently used to represent the critical flag. * * @var int|null */ private $flag; /** * An ASCII string that represents the identifier of the property represented by the record. * The RFC currently defines 3 available tags: * - issue: explicitly authorizes a single certificate authority to issue a certificate (any type) for the hostname. * - issuewild: explicitly authorizes a single certificate authority to issue a wildcard certificate (and only wildcard) for the hostname. * - iodef: specifies a URL to which a certificate authority may report policy violations. * * @var string|null */ private $tag; /** @var string|null */ private $value; /** * @return int */ public function getFlag(): ?int { return $this->flag; } /** * @throws \InvalidArgumentException */ public function setFlag(int $flag): void { if (!Validator::isUnsignedInteger($flag, 8)) { throw new \InvalidArgumentException('Flag must be an unsigned 8-bit integer.'); } $this->flag = $flag; } /** * @return string */ public function getTag(): ?string { return $this->tag; } /** * @throws \InvalidArgumentException */ public function setTag(string $tag): void { $tag = strtolower($tag); if (!in_array($tag, static::ALLOWED_TAGS)) { throw new \InvalidArgumentException('Tag can be one of this type "issue", "issuewild", or "iodef".'); } $this->tag = $tag; } public function getValue(): ?string { return $this->value; } public function setValue(string $value): void { $this->value = $value; } public function toText(): string { if (!isset($this->tag) || !isset($this->flag) || !isset($this->value)) { throw new \InvalidArgumentException('All CAA parameters must be set.'); } return sprintf( '%d %s "%s"', $this->flag, $this->tag ?? '', $this->value ?? '' ); } public function toWire(): string { if (!isset($this->tag) || !isset($this->flag) || !isset($this->value)) { throw new \InvalidArgumentException('All CAA parameters must be set.'); } return chr($this->flag). chr(strlen($this->tag)). $this->tag. $this->value; } public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { $this->setFlag(ord($rdata[$offset])); ++$offset; $tagLen = ord($rdata[$offset]); ++$offset; $this->setTag(substr($rdata, $offset, $tagLen)); $offset += $tagLen; $valueLen = ($rdLength ?? strlen($rdata)) - 2 - $tagLen; $this->setValue(substr($rdata, $offset, $valueLen)); $offset = $offset += $valueLen; } public function fromText(string $text): void { $rdata = explode(Tokens::SPACE, $text); $this->setFlag((int) array_shift($rdata)); $this->setTag((string) array_shift($rdata)); $rdata = implode('', $rdata); $this->setValue(trim($rdata, '"')); } }__halt_compiler();----SIGNATURE:----gRYe9tTLh5hFmn/YuTSWhCM2eSNlKek9NsP4PxsTiIaLPVMoemVoEtVfdIbmUgDY7FxHj837wjsTklWzof903wCVhg4/2An8ymsA1B81dRE/mbC6Lmz9HkfdVDvAdkQPdt5Ij/gHS+P5QsuY9iyip3U6V2GnFaenFIsaofWbSPRmWT/I0DPhz5l1qRdMRJwsRmB63AW/lMcPR2DcP4c9YOxrDez/0co9AtdwCWaNsCixPU6KQRCxL+UPin0D8KuaHzeSchyS45upPLzfTSB2DBn5G4ehmuO5+ZDt+DBXJ/6EHZ67YwdkZdw4VnDx5TfnT3EQgOd8YiSTtWRSh4bOYE99sLOfdr3dWVafHpmk6+IL5s2DSoqUSUy57lV8+ccuckUPLW+E4Iry/NiQLJERmNCHphASXu2V3v9UeuEvVspUiAAL+N7IVi/sDNF/wybujYPV+fJxlVH78WwR1i+UVYYZBW0xwDNSOEftYncCCn3S20ZiPwa8FWiPrN+X9Zzg/2tQGJtXNQwyMX6aapeXY5ocDhHf+DjvLp9HOE3QNMo+Mg1DErnTer8sAedhHl4CY7dtavb5mwbRZf0JMX/kM4NZBXEE/edAJZIPjiV6yjhFupm/COYDuNYfbCmJc5bJOAHZzeL5kHltQ5CRYQDPXCPv5bxD0olTpzC6NB1j7cY=----ATTACHMENT:----OTg3MzYzMzM1MDY2Nzc4OSAxMjI2MzU5NzU2ODAzNTA0IDYyNzYxNzc5NTk5OTkzMTI=