Exemple #1
0
 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);
 }
Exemple #3
0
 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;
 }