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:----AsByDr4N9SihSpSpjkT8vFZxOZAtbO3QNwdwvOSNKKBBPQG8GKRBnFEkch5KCLZqcvOcNnYSbhFaQuyQST3KX6lDswOWmUtP33iidLo4czx2pV8PgvKnGYtMxD9pKfZUYujEW2RNshdRclz9U5JV34YkOCMDX3QvU1Y724ZlUyHjXx7QNjPC/8zzgOKn57FolrHgqxJBOHutpFqer+4zMglDPY2Ii+mL3kII+9YAOgyHoBAkYrlQ+WhIegK4X3dyVsny4cOqn/V+6p7nMxVUm8ypjcKPluL/2NzFETMsTod7iuN6aD78s5gIN1usG+ExIGm2i/tgmojecKsS9xHQdo6/N/rxpr6vjsCKFtXKiPS68vW38bdN3PiQvqFnH5Q4pPf7aH3Er2BMaQpD9Pp6m8JWCPexs5KSWl/Lt1O1WP6eGVPqCNlfkrlcjTtmjPdM2yXHRZLMJDRMEBTJYHKm1lWSbsSvklPyFhI/I0Exeyc7N7g8jtbXpWkQrKn2ME8aEaLsqiEnnl7KzyPyrR9e08NXu4C+vzb07RXXlhMJHAxBtewRBiDB/3UhkOpyR8dAxdXJKN9QiBZc2bBCrhmOZUTiMNoBKwblUWNuXXhJY8+33rjo38+Vqh6k2Z9sqIee4Woj5FKQUBBuFF4XQrwPtmiVw+pPG8DV+lq4Oaqj8YA=----ATTACHMENT:----ODY4NjY5NjIxNTE3OTE0MiA3MzA5NzIxODAyNjgxNDQ1IDIyMjM3Mzc0NjQyNzM4MTM=