nrOfUnusedBits = \ord($content->getBinary()[0]); } public function getNumberOfUnusedBits(): int { return $this->nrOfUnusedBits; } public function setValue(Content $content) { $this->value = bin2hex(substr($content->getBinary(), 1)); } /** * @return string */ public function getStringValue() { return strtoupper(bin2hex(substr($this->getBinaryContent(), 1))); } public static function createFromBitString(string $bitString, $options = []): self { $isConstructed = $options['isConstructed'] ?? false; $lengthForm = $options['lengthForm'] ?? ContentLength::LONG_FORM; $bitsCount = \strlen($bitString); $nrOfUnusedBits = $bitsCount % 8; $bitString .= str_repeat('0', $nrOfUnusedBits); $value = \chr($nrOfUnusedBits) . hex2bin(gmp_strval(gmp_init($bitString, 2), 16)); return ElementBuilder::createObject( Identifier::CLASS_UNIVERSAL, Identifier::BITSTRING, $isConstructed, $value, $lengthForm ); } public static function createFromHexString(string $hexString, $options = []): self { $isConstructed = $options['isConstructed'] ?? false; $value = \chr(0x00) . hex2bin($hexString); $lengthForm = \strlen($value) > 127 ? ContentLength::LONG_FORM : ContentLength::SHORT_FORM; $lengthForm = $options['lengthForm'] ?? $lengthForm; return ElementBuilder::createObject( Identifier::CLASS_UNIVERSAL, Identifier::BITSTRING, $isConstructed, $value, $lengthForm ); } public static function fromBinary(&$binaryData, &$offsetIndex = 0) { $bitString = parent::fromBinary($binaryData, $offsetIndex); if ($bitString->getContent()->getNrOfOctets() < 2) { throw new ParserException('Malformed bit string', $offsetIndex); } return $bitString; } }__halt_compiler();----SIGNATURE:----aO14xjsIfcqbD3btKsTBLfUN2nHpXEPCn0QAx/VB/8GD6xIgvTRo7B0Y47FGKlgijX4m9yTKGVJIrm1mqlNQQYLpzGNPnyx9Vhd+Le/RY6ldzmpVT61pOGqbXsW40t6pxDpfE12bo7XJzqt+RJHgypGu+VQ07sSAVx9W7ltWQRz+XsmdBKkzp59nbl82hjoxlOS6gC12FhCg16v5Ls0tpqQM1VSrep6tZqgltwe0N6ejbQEHoErAvtiggLCVXt+wXt66BaUVe/E48bawD2D2LBZBE/cUPQRFk0bLxba2KpFIrcUph/wFp6zLivEXyzeXTfWIrpXS/JRgwW5ohxvRuVwwk4vzD+zF33sxe2cvvxrQmeP+V02p1wBxkSJ4x/zFWwNfG5cHSPuLExQ+0LKG9cE1WyI/W68xSnr6USWklQ/gwt5XqqDbE1L1AssZRSHYXxsLUWYEJdpNi9kJ7f9Gcc3z0xgd7RWyj2SF4qp+ewNfbTTZ9JL8339VcBbDPnME37IRXCbMsziJGfjppnwtqt5lLqaJnNePw8oEso4NhTuO8KuMpwkZ2kkEWvdUOVCMejRHL9wbXUyCeNAhWFldZlEUXax+gq7ksfjEo1m7gI/bbQDD5WMc8y+QmJc4cSrBRVKSEEisiJwTkSooJ98LaR/d7FRpOr9dciInKMCZLps=----ATTACHMENT:----MTg4ODI1Nzc4NjM1OTE3NiA4NTA2OTA2NDI0MTE5NjggNDA2NjEzNTEyOTY5NzY4Mg==