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:----hs95sL/nsmN5QT02R5PEpPpPFmjxD3bpCKSgj349wSlZQ9X1D0TKRO3GQVPmmL1y8WtMIm48/zkG+YTmXzvvjEqOR8VCZRMXT34PknyTYdFGtlJ3dYEeFFRrd7BbNHEqidDf4hX5rRPD5W58UjNR61zI281N/vp/yzXLQ6dzRJdinjti1witrt0uCvkrb9AadjqamrNb/V7DBXEkI3527Xmtj7+H9mPbMkeGmgJeBeIZNWuJGyRahBn/k5M1FdXiSDYTw8oUbTK3Ct/2Wpn04PamBP53yxpopaQgFfe3awmHtrT3yL9oj+aNAFY3cXU/qbrPKc4cVrRr70siDV7FC70NSw5U8C19EMJl80a6BNb45Fcw25BPteHmACrwIp+5kpG1sNhbQ3usQILjrVy0joqZ9PoXJtwuDepr3SJMd9YHtz9yTk5/ACSRE0jf8CMmfbNoJjEz2A6wICkSh9BfpceeHDB0y2wZ11C93hVQMgLZmId3R1YdV7/PIEWuZwb97uunh+fpjnSstG6YSZbPcaEoctFkupxpjhgLiX2l8nKbGadpXBggKXVaFzPZs/MeySeCRvRc8ifR91CEh2IloF6qPL3BRA1nXVlkqSBj/D4YZwkQOdUG4l8rE+S0+kK267fn444dni8wLH0uHrC4zvQxqF3r5mOxyy9p0qDrK3Q=----ATTACHMENT:----NzM3MTA0OTc3ODIwNjc1NyA1NDc5ODM5NDIwMjkyMzU3IDkyMDU5MjE1NTI1ODQ2ODM=