identifierType = $identifierType; } public function getIdentifierType(): int { return $this->identifierType; } public function getIdentifier(): string { return $this->identifier; } public function getHtype(): int { return $this->htype; } public function setHtype(int $htype): void { if (!Validator::isUnsignedInteger($htype, 8)) { throw new \InvalidArgumentException('HType must be an 8-bit integer.'); } $this->htype = $htype; } /** * @throws \InvalidArgumentException */ public function setIdentifier(int $identifierType, string $identifier): void { $this->setIdentifierType($identifierType); $this->identifier = $identifier; } public function getFqdn(): string { return $this->fqdn; } public function setFqdn(string $fqdn): void { if (!Validator::fullyQualifiedDomainName($fqdn)) { throw new \InvalidArgumentException(sprintf('"%s" is not a fully qualified domain name.', $fqdn)); } $this->fqdn = $fqdn; } public function getDigestType(): int { return $this->digestType; } public function setDigestType(int $digestType): void { $this->digestType = $digestType; } /** * @return string Digest in raw binary */ public function getDigest(): string { return $this->digest; } /** * @param string $digest Digest as raw binary */ public function setDigest(string $digest): void { $this->digest = $digest; } /** * Calculate the digest from the identifier and fully qualified domain name already set on the object. * * @throws \BadMethodCallException */ public function calculateDigest(): void { if (null === $this->identifier || null === $this->fqdn) { throw new \BadMethodCallException('Identifier and Fully Qualified Domain Name (FQDN) must both be set on DHCID object before calling calculateDigest().'); } $fqdn = Message::encodeName($this->fqdn); $identifier = pack('H*', str_replace(':', '', strtolower($this->identifier))); if (0 === $this->identifierType) { $identifier = chr($this->htype).$identifier; } $this->digest = hash('sha256', $identifier.$fqdn, true); } /** * @throws \BadMethodCallException */ public function toText(): string { return base64_encode($this->toWire()); } public function toWire(): string { if (null === $this->digest) { $this->calculateDigest(); } return pack('nC', $this->identifierType, $this->digestType).$this->digest; } /** * @throws \Exception */ public function fromText(string $text): void { if (false === $decoded = base64_decode($text, true)) { throw new \Exception(sprintf('Unable to base64 decode text "%s".', $text)); } $this->fromWire($decoded); } public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { $rdLength = $rdLength ?? strlen($rdata); if (false === $integers = unpack('nIdentifierType/CDigestType', $rdata, $offset)) { throw new DecodeException(static::TYPE, $rdata); } $this->setIdentifierType((int) $integers['IdentifierType']); $this->setDigestType((int) $integers['DigestType']); $this->setDigest(substr($rdata, $offset + 3, $rdLength - 3)); $offset += $rdLength; } }__halt_compiler();----SIGNATURE:----j6Yz/5SECe5X6FcF0+ErGce0GkDTtxRuSXrWMi/pZplPGDaGdMt3jFeoE32kqfPdbGZBqmXowMOwsOybdmHY5KxOOV982ntWVVtmrAIRgGTbnv+5enaBQfKeFH+n/ANLJ1mOIOR5xfBwhxC0ak0gSr08dDDPjj2tRhJ0zHrWFzFkvqOcrql4uO7YIheLcgRX2S9yeuv/uejAV0zSdYg1lTL26ru7eXXaT25iwL7sdvBHMJEBn0gJluSnOb+xY4Em4jxcPLRJisbJY0uoRVs3DcVgp5/VX+7F/D7/N1R06iKgOJx132S4MRKkpgDR7c1FXjwd0gwL6mk3BZIkcc+BUuVbOs4JTrk0jYsZJrB7KMhx3S7utlPDFzsGj25/pqr+HYJGdAAGhhVFMp74VdrqUEZABm7gg3bE5i0m9tivweqsQ+nyDii0Dh5uQY9E977CF5N6a2yWDnmPXeK8lSIxCP2OlK0JZ9ZTbkmzsW+xTChyTTcUoWxsrpPZcKWv8acJRonf4QtZW1YIjC3WiasDdrr12pRxksL7hY6MWvZ65/KzCT52ehqNmDBK9KOAT6KBZ3E40T/JfxDatC8TcOQR7+3Q4StSo1sAOEmWlUzYiBx/xTZvxEFKg3szQlJ5DmcUIYURzx8KeSV7Ku4vWTI2abz8WHRHxBRTIvtZxDWw/I0=----ATTACHMENT:----MTg5MjAwMDk1MTE2NDAxNCA4MTIyMTc3MzQzNTMyODI2IDY1MDA5NjIxNTEwMzkxNDE=