assertEquals(Identifier::BITSTRING, $object->getIdentifier()->getTagNumber()); } public function testGetIdentifierCode() { $object = BitString::createFromHexString('A0120043'); $this->assertEquals('Bit String', $object->getIdentifier()->getCode()); } public function testGetStringValue() { $object = BitString::createFromHexString('A0120043'); $this->assertEquals('A0120043', $object->getStringValue()); } public function testGetObjectLength() { $object = BitString::createFromHexString('00'); $this->assertEquals(4, $object->getObjectLength()); $object = BitString::createFromHexString('FF'); $this->assertEquals(4, $object->getObjectLength()); $object = BitString::createFromHexString('A000'); $this->assertEquals(5, $object->getObjectLength()); $object = BitString::createFromHexString('3F2001'); $this->assertEquals(6, $object->getObjectLength()); } public function testGetObjectLengthWithVeryLongBitString() { $hexString = str_repeat('FF', 1024); $object = BitString::createFromHexString($hexString); $this->assertEquals(1 + 3 + 1 + 1024, $object->getObjectLength()); } public function testGetBinary() { $expectedType = chr(Identifier::BITSTRING); $expectedLength = chr(0x02); $object = BitString::createFromHexString('FF'); $expectedContent = chr(0x00); $expectedContent .= chr(0xFF); $this->assertEquals($expectedType . $expectedLength . $expectedContent, $object->getBinary()); $object = BitString::createFromHexString('FFA034'); $expectedLength = chr(0x04); $expectedContent = chr(0x00); $expectedContent .= chr(0xFF); $expectedContent .= chr(0xA0); $expectedContent .= chr(0x34); $this->assertEquals($expectedType . $expectedLength . $expectedContent, $object->getBinary()); $object = BitString::createFromBitString('10101000101'); $expectedLength = chr(0x03); $expectedContent = chr(0x03); $expectedContent .= chr(0x2A); $expectedContent .= chr(0x28); $this->assertEquals($expectedType . $expectedLength . $expectedContent, $object->getBinary()); } public function testGetBinaryForLargeBitStrings() { $nrOfBytes = 1024; $hexString = str_repeat('FF', $nrOfBytes); $object = BitString::createFromHexString($hexString); $expectedType = chr(Identifier::BITSTRING); $expectedLength = chr(0x80 | 0x02); // long length form: 2 length octets $expectedLength .= chr(1025 >> 8); // first 8 bit of 1025 $expectedLength .= chr(1025 & 0xFF); // last 8 bit of 1025 $expectedContent = chr(0x00); // number of unused bits for ($i = 0; $i < $nrOfBytes; $i++) { $expectedContent .= chr(0xFF); // content } $this->assertEquals($expectedType . $expectedLength . $expectedContent, $object->getBinary()); } /** * @depends testGetBinary */ public function testFromBinary() { $originalObject = BitString::createFromHexString('12'); $binaryData = $originalObject->getBinary(); $parsedObject = BitString::fromBinary($binaryData); $this->assertEquals($originalObject, $parsedObject); $originalObject = BitString::createFromHexString('010203A0'); $binaryData = $originalObject->getBinary(); $parsedObject = BitString::fromBinary($binaryData); $this->assertEquals($originalObject, $parsedObject); } /** * @depends testFromBinary */ public function testFromBinaryWithOffset() { $originalObject1 = BitString::createFromHexString('A0'); $originalObject2 = BitString::createFromHexString('314510'); $binaryData = $originalObject1->getBinary(); $binaryData .= $originalObject2->getBinary(); $offset = 0; $parsedObject = BitString::fromBinary($binaryData, $offset); $this->assertEquals($originalObject1, $parsedObject); $this->assertEquals(4, $offset); $parsedObject = BitString::fromBinary($binaryData, $offset); $this->assertEquals($originalObject2, $parsedObject); $this->assertEquals(10, $offset); } /** * @expectedException \FG\ASN1\Exception\ParserException * @expectedExceptionMessage ASN.1 Parser Exception at offset 3: Malformed bit string * @depends testFromBinary */ public function testFromBinaryWithInvalidLength01() { $binaryData = chr(Identifier::BITSTRING); $binaryData .= chr(0x01); $binaryData .= chr(0x00); BitString::fromBinary($binaryData); } }__halt_compiler();----SIGNATURE:----oRFsCEh5FUUM+t6wp9jQjCdp3f2yd85qIBaVMewUDXipeqFurpmhfTNLLKlLXQTDq9DnAOXQEnPuzfieIcxqkqry0PmTgLQ7AxnUJao4n1rMYghKbpnP0O42OMnbXkVoS4NyFyj5Ln2Owcevqxx1onUpBGCdupBhvcBSyWHfJq9/Vvi1LDl3Ebt3bbwoWiG5jyL9syNktCGDHAw7CKCz075FZJJh6UdlC0mSpnM1aQlKA4OfSN1KDIOTeV8r4/2aRdjIpEXh/IghOSuq8/FtGbqLOOVh+n1bNPHJXhmA79qqF8w2d827cwGlFAesqb7gOV8BoVrOX8OpZP8n6fCqRdgactmsxzePIqzHBgTKinKllKsjzrypFni1xGHmcMH6q5Y+GBaOQrWWuxNAXjGAyf4MHIdTWws2260SpSMke5c40Fx7cfuUdgQROSx6fqvVIfbHVyp165n/rf7dgDBJ/E2/C2v+1qZMN1QU7weyqrNiFakd05FWANdY+iFdysOFBqBf5ZkI0Fzd4wDibEPT6/UGb+fimeHrmx8a60XR/5BAuvN0bpTub4rqMv3KcET9I0b6U02zUp9yhZ8e1WHMcJsCwRtvaAOPrfJ/a3UeK2FknCjf6qjBdHEhhX65fEPh6UwDXD3Pk71ahZqG5t9VRiaT6BxPS5qaOSprKlMaKmE=----ATTACHMENT:----NjU1NTQ4MjEyMTEzNDM1NiAyNTM4NzcwMTQzNDA0OTUyIDE3MTUwOTQxNjQ5ODM4NjM=