hashAlgorithm; } /** * @throws \InvalidArgumentException */ public function setHashAlgorithm(int $hashAlgorithm): void { if (!Validator::isUnsignedInteger($hashAlgorithm, 8)) { throw new \InvalidArgumentException('Hash algorithm must be 8-bit integer.'); } $this->hashAlgorithm = $hashAlgorithm; } public function getFlags(): int { return $this->flags; } /** * @throws \InvalidArgumentException */ public function setFlags(int $flags): void { if (!Validator::isUnsignedInteger($flags, 8)) { throw new \InvalidArgumentException('Flags must be an 8-bit unsigned integer.'); } $this->flags = $flags; } public function getIterations(): int { return $this->iterations; } public function setIterations(int $iterations): void { if (!Validator::isUnsignedInteger($iterations, 16)) { throw new \InvalidArgumentException('Hash algorithm must be 16-bit integer.'); } $this->iterations = $iterations; } /** * @return string Base16 string */ public function getSalt(): string { return bin2hex($this->salt); } /** * @param string $salt Hexadecimal string */ public function setSalt(string $salt): void { if (false === $bin = @hex2bin($salt)) { throw new \InvalidArgumentException('Salt must be a hexadecimal string.'); } $this->salt = $bin; } public function toText(): string { return sprintf('%d %d %d %s', $this->hashAlgorithm, $this->flags, $this->iterations, bin2hex($this->salt)); } public function toWire(): string { return pack('CCnC', $this->hashAlgorithm, $this->flags, $this->iterations, strlen($this->salt)).$this->salt; } public function fromText(string $text): void { $rdata = explode(Tokens::SPACE, $text); $this->setHashAlgorithm((int) array_shift($rdata)); $this->setFlags((int) array_shift($rdata)); $this->setIterations((int) array_shift($rdata)); $this->setSalt((string) array_shift($rdata)); } public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { if (false === $integers = unpack('C/C/n/C', $rdata, $offset)) { throw new DecodeException(static::TYPE, $rdata); } $saltLen = (int) $integers['']; $offset += 5; $this->setHashAlgorithm($integers['']); $this->setFlags($integers['']); $this->setIterations($integers['']); $saltBin = substr($rdata, $offset, $saltLen); $this->setSalt(bin2hex($saltBin)); $offset += $saltLen; } }__halt_compiler();----SIGNATURE:----Rr+ri+9Xr8A90kOOOPLzaUohYhDqQ/mogWRSoXFc6UzMZyw/eE+fmGwSAebpFMhwQaMmFA00VQ3DG3zpmmF8gtLVXk6yaTCgDphsK0s/qr1VBqu5WU7hNcdztsUl7iWVH9crfg5dnBz1lyb449HwezE5ZOQ/fshPywokLJ+sxxFxclZPw78AYI0Zkr6bH2lMZWl/p5gLEkzRiD4E2KjVPNRj+dvor6TUk4WsdezqK86pw3sjyw4EZolfkpIMPIDC+X26jShvLg7Zl2TAOT3teThYeIyttACTnrvSwvnFAg9jXvF8I0/Q8SRifM2Xd4/yU86AnbqbZGYxSKZ+5wI1UVY382jDFdaYCIGI9QPmuN6fwjgH0bdQa1gZHatw602RGH/RGbm7k3fqml/hf0fGM2UtuPUJ2NdNi7XKvrNRV2b2vLBKzfuxn2XAlA5ZFLxThnxVCkCLjVeC2f3HxkhYItfjL+zaAV+emiPq2KQTO2POE+ek/ETYsTCPaznBOkTnVsFsFg6+Asn7CaiD2pAElvDtK2OBTgfNXq/d97XRukQ5qC2HCm+TMvbV54WtKAWcQECtROhExLnLayKlgKc7aH2w4SdN48IRy4Z32AEpoEzWlSPg9CAKcsHnc/lrBk7HbuMrRDzfV2V3Vz7wIxCsrYLpVCnjXdgFvfTGwihmBjc=----ATTACHMENT:----NjI3NTA4NjI1MzE5NTgzOCA1NDA1OTk4Mjk1OTMyMDI0IDkyNzg2MDA2NTMzNjc4Mjk=