public function testFromBinary() { $originalObject = new Attributes(); $sans = new SubjectAlternativeNames(); $sans->addDomainName(new DNSName('corvespace.de')); $extensionRequest = new CertificateExtensions(); $extensionRequest->addSubjectAlternativeNames($sans); $originalObject->addAttribute(OID::PKCS9_EXTENSION_REQUEST, $extensionRequest); $binaryData = $originalObject->getBinary(); $parsedObject = Attributes::fromBinary($binaryData); $this->assertEquals($originalObject, $parsedObject); }
/** * @depends testFromBinary */ public function testFromBinaryWithOffset() { $objectIdentifier = new ObjectIdentifier(OID::CERT_EXT_SUBJECT_ALT_NAME); $originalObject1 = new CertificateExtensions(); $sans1 = new SubjectAlternativeNames(); $sans1->addDomainName(new DNSName('corvespace.de')); $sans1->addIP(new IPAddress('192.168.0.1')); $originalObject1->addSubjectAlternativeNames($sans1); $originalObject2 = new CertificateExtensions(); $sans2 = new SubjectAlternativeNames(); $sans2->addDomainName(new DNSName('google.com')); $originalObject2->addSubjectAlternativeNames($sans2); $binaryData = $originalObject1->getBinary(); $binaryData .= $originalObject2->getBinary(); $offset = 0; $parsedObject = CertificateExtensions::fromBinary($binaryData, $offset); $this->assertEquals($originalObject1, $parsedObject); $offsetAfterFirstObject = $sans1->getObjectLength() + $objectIdentifier->getObjectLength() + 2 + 2 + 2; $this->assertEquals($offsetAfterFirstObject, $offset); $parsedObject = CertificateExtensions::fromBinary($binaryData, $offset); $this->assertEquals($originalObject2, $parsedObject); $this->assertEquals($offsetAfterFirstObject + $sans2->getObjectLength() + $objectIdentifier->getObjectLength() + 2 + 2 + 2, $offset); }
public static function fromBinary(&$binaryData, &$offsetIndex = 0) { self::parseIdentifier($binaryData[$offsetIndex], 0xa0, $offsetIndex++); $contentLength = self::parseContentLength($binaryData, $offsetIndex); $octetsToRead = $contentLength; $parsedObject = new self(); while ($octetsToRead > 0) { $initialOffset = $offsetIndex; // used to calculate how much bits have been read self::parseIdentifier($binaryData[$offsetIndex], Identifier::SEQUENCE, $offsetIndex++); self::parseContentLength($binaryData, $offsetIndex); $objectIdentifier = ObjectIdentifier::fromBinary($binaryData, $offsetIndex); $oidString = $objectIdentifier->getContent(); if ($oidString == OID::PKCS9_EXTENSION_REQUEST) { $attribute = CertificateExtensions::fromBinary($binaryData, $offsetIndex); } else { $attribute = Object::fromBinary($binaryData, $offsetIndex); } $parsedObject->addAttribute($objectIdentifier, $attribute); $octetsToRead -= $offsetIndex - $initialOffset; } $parsedObject->setContentLength($contentLength); return $parsedObject; }