/** * Initialize from ASN.1. * * @param Sequence $seq * @return self */ public static function fromASN1(Sequence $seq) { $base = GeneralName::fromASN1($seq->at(0)->asTagged()); $min = 0; $max = null; if ($seq->hasTagged(0)) { $min = $seq->getTagged(0)->asImplicit(Element::TYPE_INTEGER)->asInteger()->number(); } if ($seq->hasTagged(1)) { $max = $seq->getTagged(1)->asImplicit(Element::TYPE_INTEGER)->asInteger()->number(); } return new self($base, $min, $max); }
/** * Initialize from ASN.1. * * @param Sequence $seq * @return self */ public static function fromASN1(Sequence $seq) { $name = null; $reasons = null; $issuer = null; if ($seq->hasTagged(0)) { // promoted to explicit tagging because underlying type is CHOICE $name = DistributionPointName::fromTaggedType($seq->getTagged(0)->asExplicit()->asTagged()); } if ($seq->hasTagged(1)) { $reasons = ReasonFlags::fromASN1($seq->getTagged(1)->asImplicit(Element::TYPE_BIT_STRING)->asBitString()); } if ($seq->hasTagged(2)) { $issuer = GeneralNames::fromASN1($seq->getTagged(2)->asImplicit(Element::TYPE_SEQUENCE)->asSequence()); } return new self($name, $reasons, $issuer); }
/** * Initialize from ASN.1. * * @param Sequence $seq * @throws \UnexpectedValueException * @return self */ public static function fromASN1(Sequence $seq) { $version = $seq->at(0)->asInteger()->number(); if (1 != $version) { throw new \UnexpectedValueException("Version must be 1."); } $private_key = $seq->at(1)->asOctetString()->string(); $named_curve = null; if ($seq->hasTagged(0)) { $params = $seq->getTagged(0)->asExplicit(); $named_curve = $params->asObjectIdentifier()->oid(); } $public_key = null; if ($seq->hasTagged(1)) { $public_key = $seq->getTagged(1)->asExplicit()->asBitString()->string(); } return new self($private_key, $named_curve, $public_key); }
/** * Initialize from ASN.1. * * @param Sequence $seq */ public static function fromASN1(Sequence $seq) { $cert_id = null; $entity_name = null; $digest_info = null; if ($seq->hasTagged(0)) { $cert_id = IssuerSerial::fromASN1($seq->getTagged(0)->asImplicit(Element::TYPE_SEQUENCE)->asSequence()); } if ($seq->hasTagged(1)) { $entity_name = GeneralNames::fromASN1($seq->getTagged(1)->asImplicit(Element::TYPE_SEQUENCE)->asSequence()); } if ($seq->hasTagged(2)) { $digest_info = ObjectDigestInfo::fromASN1($seq->getTagged(2)->asImplicit(Element::TYPE_SEQUENCE)->asSequence()); } $obj = new self($cert_id, $entity_name); $obj->_objectDigestInfo = $digest_info; return $obj; }
/** * Initialize from ASN.1. * * @param Sequence $seq * @return self */ public static function fromV2ASN1(Sequence $seq) { $issuer = null; $cert_id = null; $digest_info = null; if ($seq->has(0, Element::TYPE_SEQUENCE)) { $issuer = GeneralNames::fromASN1($seq->at(0)->asSequence()); } if ($seq->hasTagged(0)) { $cert_id = IssuerSerial::fromASN1($seq->getTagged(0)->asImplicit(Element::TYPE_SEQUENCE)->asSequence()); } if ($seq->hasTagged(1)) { $digest_info = ObjectDigestInfo::fromASN1($seq->getTagged(1)->asImplicit(Element::TYPE_SEQUENCE)->asSequence()); } $obj = new self($issuer); $obj->_baseCertificateID = $cert_id; $obj->_objectDigestInfo = $digest_info; return $obj; }
/** * Initialize from ASN.1. * * @param Sequence $seq * @throws \UnexpectedValueException * @return self */ public static function fromASN1(Sequence $seq) { $version = $seq->at(0)->asInteger()->number(); if ($version != self::VERSION_1) { throw new \UnexpectedValueException("Version {$version} not supported."); } $subject = Name::fromASN1($seq->at(1)->asSequence()); $pkinfo = PublicKeyInfo::fromASN1($seq->at(2)->asSequence()); $obj = new self($subject, $pkinfo); if ($seq->hasTagged(0)) { $obj->_attributes = Attributes::fromASN1($seq->getTagged(0)->asImplicit(Element::TYPE_SET)->asSet()); } return $obj; }
/** * Initialize from ASN.1. * * @param Sequence $seq * @return self */ public static function fromASN1(Sequence $seq) { $idx = 0; if ($seq->hasTagged(0)) { $idx++; $version = intval($seq->getTagged(0)->asExplicit()->asInteger()->number()); } else { $version = self::VERSION_1; } $serial = $seq->at($idx++)->asInteger()->number(); $algo = AlgorithmIdentifier::fromASN1($seq->at($idx++)->asSequence()); if (!$algo instanceof SignatureAlgorithmIdentifier) { throw new \UnexpectedValueException("Unsupported signature algorithm " . $algo->oid() . "."); } $issuer = Name::fromASN1($seq->at($idx++)->asSequence()); $validity = Validity::fromASN1($seq->at($idx++)->asSequence()); $subject = Name::fromASN1($seq->at($idx++)->asSequence()); $pki = PublicKeyInfo::fromASN1($seq->at($idx++)->asSequence()); $tbs_cert = new self($subject, $pki, $issuer, $validity); $tbs_cert->_version = $version; $tbs_cert->_serialNumber = $serial; $tbs_cert->_signature = $algo; if ($seq->hasTagged(1)) { $tbs_cert->_issuerUniqueID = UniqueIdentifier::fromASN1($seq->getTagged(1)->asImplicit(Element::TYPE_BIT_STRING)->asBitString()); } if ($seq->hasTagged(2)) { $tbs_cert->_subjectUniqueID = UniqueIdentifier::fromASN1($seq->getTagged(2)->asImplicit(Element::TYPE_BIT_STRING)->asBitString()); } if ($seq->hasTagged(3)) { $tbs_cert->_extensions = Extensions::fromASN1($seq->getTagged(3)->asExplicit()->asSequence()); } return $tbs_cert; }