コード例 #1
0
ファイル: Parser.php プロジェクト: phpecc/x509
 /**
  * @param Sequence $info
  * @return CertificateInfo
  */
 public function parseCertificateInfo(Sequence $info)
 {
     if ($info->getNumberOfChildren() < 6) {
         throw new \InvalidArgumentException('Invalid data');
     }
     $infoChildren = $info->getChildren();
     // Parse SerialNo
     if (!$infoChildren[0] instanceof Integer) {
         throw new \InvalidArgumentException('Invalid data - serialNo');
     }
     $serialNo = $infoChildren[0]->getContent();
     // Parse Signature Algorithm
     if (!$infoChildren[1] instanceof Sequence || $infoChildren[1]->getNumberOfChildren() < 1 || !$infoChildren[1]->getChildren()[0] instanceof ObjectIdentifier) {
         throw new \InvalidArgumentException('Invalid data - sigalg');
     }
     $sigAlgSet = $infoChildren[1]->getChildren();
     /** @var ObjectIdentifier $sigAlgOid */
     $sigAlgOid = $sigAlgSet[0];
     $sigAlg = SigAlgorithmOidMapper::getKnownAlgorithmFromOid($sigAlgOid);
     // Parse Issuer
     if (!$infoChildren[2] instanceof Sequence) {
         throw new \InvalidArgumentException('Invalid data - Issuer');
     }
     $issuer = $this->parseSubject($infoChildren[2]);
     // Parse Validity - array of UTCTime
     $validity = $infoChildren[3];
     if (!$validity instanceof Sequence || $validity->getNumberOfChildren() !== 2) {
         throw new \InvalidArgumentException('Invalid Validity');
     }
     $validityContents = $validity->getChildren();
     if (!$validityContents[0] instanceof UTCTime || !$validityContents[1] instanceof UTCTime) {
         throw new \InvalidArgumentException('Invalid Validity');
     }
     /** @var UTCTime $validityEnd */
     /** @var UTCTime $validityStart */
     list($validityStart, $validityEnd) = $validityContents;
     // Parse Subject
     if (!$infoChildren[4] instanceof Sequence) {
         throw new \InvalidArgumentException('Invalid data - Subject');
     }
     $subject = $this->parseSubject($infoChildren[4]);
     // Parse Subject Public Key Info
     if (!$infoChildren[5] instanceof Sequence) {
         throw new \InvalidArgumentException('Invalid data - Subject Public Key');
     }
     $subjectKey = $this->parseSubjectKeyInfo($infoChildren[5]);
     return new CertificateInfo($serialNo, $sigAlg, $issuer, $subject, $subjectKey, $validityStart->getContent(), $validityEnd->getContent());
 }