コード例 #1
0
ファイル: Targets.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $targets = array_map(function (UnspecifiedType $el) {
         return Target::fromASN1($el->asTagged());
     }, $seq->elements());
     return new self(...$targets);
 }
コード例 #2
0
ファイル: Extensions.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $extensions = array_map(function (UnspecifiedType $el) {
         return Extension::fromASN1($el->asSequence());
     }, $seq->elements());
     return new self(...$extensions);
 }
コード例 #3
0
ファイル: NoticeReference.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $org = DisplayText::fromASN1($seq->at(0)->asString());
     $numbers = array_map(function (UnspecifiedType $el) {
         return $el->asInteger()->number();
     }, $seq->at(1)->asSequence()->elements());
     return new self($org, ...$numbers);
 }
コード例 #4
0
ファイル: Attribute.php プロジェクト: sop/x501
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $type = AttributeType::fromASN1($seq->at(0)->asObjectIdentifier());
     $values = array_map(function (UnspecifiedType $el) use($type) {
         return AttributeValue::fromASN1ByOID($type->oid(), $el);
     }, $seq->at(1)->asSet()->elements());
     return new self($type, ...$values);
 }
コード例 #5
0
ファイル: IssuerSerial.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $issuer = GeneralNames::fromASN1($seq->at(0)->asSequence());
     $serial = $seq->at(1)->asInteger()->number();
     $uid = null;
     if ($seq->has(2, Element::TYPE_BIT_STRING)) {
         $uid = UniqueIdentifier::fromASN1($seq->at(2)->asBitString());
     }
     return new self($issuer, $serial, $uid);
 }
コード例 #6
0
ファイル: GeneralSubtrees.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $subtrees = array_map(function (UnspecifiedType $el) {
         return GeneralSubtree::fromASN1($el->asSequence());
     }, $seq->elements());
     if (!count($subtrees)) {
         throw new \UnexpectedValueException("GeneralSubtrees must contain at least one GeneralSubtree.");
     }
     return new self(...$subtrees);
 }
コード例 #7
0
ファイル: PolicyQualifierInfo.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @throws \UnexpectedValueException
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $oid = $seq->at(0)->asObjectIdentifier()->oid();
     switch ($oid) {
         case self::OID_CPS:
             return CPSQualifier::fromQualifierASN1($seq->at(1));
         case self::OID_UNOTICE:
             return UserNoticeQualifier::fromQualifierASN1($seq->at(1));
     }
     throw new \UnexpectedValueException("Qualifier {$oid} not supported.");
 }
コード例 #8
0
ファイル: PolicyInformation.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $oid = $seq->at(0)->asObjectIdentifier()->oid();
     $qualifiers = array();
     if (count($seq) > 1) {
         $qualifiers = array_map(function (UnspecifiedType $el) {
             return PolicyQualifierInfo::fromASN1($el->asSequence());
         }, $seq->at(1)->asSequence()->elements());
     }
     return new self($oid, ...$qualifiers);
 }
コード例 #9
0
 protected static function _fromDER($data, $critical)
 {
     $purposes = array_map(function (UnspecifiedType $el) {
         return $el->asObjectIdentifier()->oid();
     }, Sequence::fromDER($data)->elements());
     return new self($critical, ...$purposes);
 }
コード例 #10
0
ファイル: AAControlsExtension.php プロジェクト: sop/x509
 protected static function _fromDER($data, $critical)
 {
     $seq = Sequence::fromDER($data);
     $path_len = null;
     $permitted = null;
     $excluded = null;
     $permit_unspecified = true;
     $idx = 0;
     if ($seq->has($idx, Element::TYPE_INTEGER)) {
         $path_len = $seq->at($idx++)->asInteger()->number();
     }
     if ($seq->hasTagged(0)) {
         $attr_seq = $seq->getTagged(0)->asImplicit(Element::TYPE_SEQUENCE)->asSequence();
         $permitted = array_map(function (UnspecifiedType $el) {
             return $el->asObjectIdentifier()->oid();
         }, $attr_seq->elements());
         $idx++;
     }
     if ($seq->hasTagged(1)) {
         $attr_seq = $seq->getTagged(1)->asImplicit(Element::TYPE_SEQUENCE)->asSequence();
         $excluded = array_map(function (UnspecifiedType $el) {
             return $el->asObjectIdentifier()->oid();
         }, $attr_seq->elements());
         $idx++;
     }
     if ($seq->has($idx, Element::TYPE_BOOLEAN)) {
         $permit_unspecified = $seq->at($idx++)->asBoolean()->value();
     }
     return new self($critical, $path_len, $permitted, $excluded, $permit_unspecified);
 }
コード例 #11
0
ファイル: Attributes.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $attribs = array_map(function (UnspecifiedType $el) {
         return Attribute::fromASN1($el->asSequence());
     }, $seq->elements());
     // cast attributes
     $attribs = array_map(function (Attribute $attr) {
         $oid = $attr->oid();
         if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
             $cls = self::MAP_OID_TO_CLASS[$oid];
             $attr = $attr->castValues($cls);
         }
         return $attr;
     }, $attribs);
     return new self(...$attribs);
 }
コード例 #12
0
 /**
  *
  * @param string $data
  * @param bool $critical
  * @return self
  */
 protected static function _fromDER($data, $critical)
 {
     $targets = array_map(function (UnspecifiedType $el) {
         return Targets::fromASN1($el->asSequence());
     }, Sequence::fromDER($data)->elements());
     return new self($critical, ...$targets);
 }
コード例 #13
0
ファイル: PolicyMappingsExtension.php プロジェクト: sop/x509
 protected static function _fromDER($data, $critical)
 {
     $mappings = array_map(function (UnspecifiedType $el) {
         return PolicyMapping::fromASN1($el->asSequence());
     }, Sequence::fromDER($data)->elements());
     if (!count($mappings)) {
         throw new \UnexpectedValueException("PolicyMappings must have at least one mapping.");
     }
     return new self($critical, ...$mappings);
 }
コード例 #14
0
 protected static function _fromDER($data, $critical)
 {
     $policies = array_map(function (UnspecifiedType $el) {
         return PolicyInformation::fromASN1($el->asSequence());
     }, Sequence::fromDER($data)->elements());
     if (!count($policies)) {
         throw new \UnexpectedValueException("certificatePolicies must contain" . " at least one PolicyInformation.");
     }
     return new self($critical, ...$policies);
 }
コード例 #15
0
 protected static function _fromDER($data, $critical)
 {
     $attribs = array_map(function (UnspecifiedType $el) {
         return Attribute::fromASN1($el->asSequence());
     }, Sequence::fromDER($data)->elements());
     if (!count($attribs)) {
         throw new \UnexpectedValueException("SubjectDirectoryAttributes must have at least one Attribute.");
     }
     return new self($critical, ...$attribs);
 }
コード例 #16
0
 protected static function _fromDER($data, $critical)
 {
     $dps = array_map(function (UnspecifiedType $el) {
         return DistributionPoint::fromASN1($el->asSequence());
     }, Sequence::fromDER($data)->elements());
     if (!count($dps)) {
         throw new \UnexpectedValueException("CRLDistributionPoints must have" . " at least one DistributionPoint.");
     }
     // late static bound, extended by Freshest CRL extension
     return new static($critical, ...$dps);
 }
コード例 #17
0
 protected static function _fromDER($data, $critical)
 {
     $seq = Sequence::fromDER($data);
     $require_explicit_policy = null;
     $inhibit_policy_mapping = null;
     if ($seq->hasTagged(0)) {
         $require_explicit_policy = $seq->getTagged(0)->asImplicit(Element::TYPE_INTEGER)->asInteger()->number();
     }
     if ($seq->hasTagged(1)) {
         $inhibit_policy_mapping = $seq->getTagged(1)->asImplicit(Element::TYPE_INTEGER)->asInteger()->number();
     }
     return new self($critical, $require_explicit_policy, $inhibit_policy_mapping);
 }
コード例 #18
0
ファイル: NameConstraintsExtension.php プロジェクト: sop/x509
 protected static function _fromDER($data, $critical)
 {
     $seq = Sequence::fromDER($data);
     $permitted = null;
     $excluded = null;
     if ($seq->hasTagged(0)) {
         $permitted = GeneralSubtrees::fromASN1($seq->getTagged(0)->asImplicit(Element::TYPE_SEQUENCE)->asSequence());
     }
     if ($seq->hasTagged(1)) {
         $excluded = GeneralSubtrees::fromASN1($seq->getTagged(1)->asImplicit(Element::TYPE_SEQUENCE)->asSequence());
     }
     return new self($critical, $permitted, $excluded);
 }
コード例 #19
0
 protected static function _fromDER($data, $critical)
 {
     $seq = Sequence::fromDER($data);
     $ca = false;
     $path_len = null;
     $idx = 0;
     if ($seq->has($idx, Element::TYPE_BOOLEAN)) {
         $ca = $seq->at($idx++)->asBoolean()->value();
     }
     if ($seq->has($idx, Element::TYPE_INTEGER)) {
         $path_len = $seq->at($idx)->asInteger()->number();
     }
     return new self($critical, $ca, $path_len);
 }
コード例 #20
0
 protected static function _fromDER($data, $critical)
 {
     $seq = Sequence::fromDER($data);
     $keyIdentifier = null;
     $issuer = null;
     $serial = null;
     if ($seq->hasTagged(0)) {
         $keyIdentifier = $seq->getTagged(0)->asImplicit(Element::TYPE_OCTET_STRING)->asOctetString()->string();
     }
     if ($seq->hasTagged(1) || $seq->hasTagged(2)) {
         if (!$seq->hasTagged(1) || !$seq->hasTagged(2)) {
             throw new \UnexpectedValueException("AuthorityKeyIdentifier must have both" . " authorityCertIssuer and authorityCertSerialNumber" . " present or both absent.");
         }
         $issuer = GeneralNames::fromASN1($seq->getTagged(1)->asImplicit(Element::TYPE_SEQUENCE)->asSequence());
         $serial = $seq->getTagged(2)->asImplicit(Element::TYPE_INTEGER)->asInteger()->number();
     }
     return new self($critical, $keyIdentifier, $issuer, $serial);
 }
コード例 #21
0
ファイル: GeneralSubtree.php プロジェクト: sop/x509
 /**
  * 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);
 }
コード例 #22
0
ファイル: DistributionPoint.php プロジェクト: sop/x509
 /**
  * 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);
 }
コード例 #23
0
ファイル: CertificationRequestInfo.php プロジェクト: sop/x509
 /**
  * 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;
 }
コード例 #24
0
ファイル: ObjectDigestInfo.php プロジェクト: sop/x509
 /**
  * Initialize from ASN.1.
  *
  * @param Sequence $seq
  * @return self
  */
 public static function fromASN1(Sequence $seq)
 {
     $type = $seq->at(0)->asEnumerated()->number();
     $oid = null;
     $idx = 1;
     if ($seq->has($idx, Element::TYPE_OBJECT_IDENTIFIER)) {
         $oid = $seq->at($idx++)->asObjectIdentifier()->oid();
     }
     $algo = AlgorithmIdentifier::fromASN1($seq->at($idx++)->asSequence());
     $digest = $seq->at($idx)->asBitString();
     $obj = new self($type, $algo, $digest);
     $obj->_otherObjectTypeID = $oid;
     return $obj;
 }
コード例 #25
0
ファイル: Holder.php プロジェクト: sop/x509
 /**
  * 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;
 }
コード例 #26
0
ファイル: V2Form.php プロジェクト: sop/x509
 /**
  * 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;
 }
コード例 #27
0
ファイル: ECDSASigValue.php プロジェクト: sop/crypto-util
 /**
  * Initialize from DER.
  *
  * @param string $data
  * @return self
  */
 public static function fromDER($data)
 {
     return self::fromASN1(Sequence::fromDER($data));
 }
コード例 #28
0
 protected static function _fromDER($data, $critical)
 {
     return new self($critical, GeneralNames::fromASN1(Sequence::fromDER($data)));
 }
コード例 #29
0
ファイル: AttributeCertificateInfo.php プロジェクト: sop/x509
 /**
  * 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_2) {
         throw new \UnexpectedValueException("Version must be 2.");
     }
     $holder = Holder::fromASN1($seq->at(1)->asSequence());
     $issuer = AttCertIssuer::fromASN1($seq->at(2));
     $signature = AlgorithmIdentifier::fromASN1($seq->at(3)->asSequence());
     if (!$signature instanceof SignatureAlgorithmIdentifier) {
         throw new \UnexpectedValueException("Unsupported signature algorithm " . $signature->oid() . ".");
     }
     $serial = $seq->at(4)->asInteger()->number();
     $validity = AttCertValidityPeriod::fromASN1($seq->at(5)->asSequence());
     $attribs = Attributes::fromASN1($seq->at(6)->asSequence());
     $obj = new self($holder, $issuer, $validity, $attribs);
     $obj->_signature = $signature;
     $obj->_serialNumber = $serial;
     $idx = 7;
     if ($seq->has($idx, Element::TYPE_BIT_STRING)) {
         $obj->_issuerUniqueID = UniqueIdentifier::fromASN1($seq->at($idx++)->asBitString());
     }
     if ($seq->has($idx, Element::TYPE_SEQUENCE)) {
         $obj->_extensions = Extensions::fromASN1($seq->at($idx++)->asSequence());
     }
     return $obj;
 }
コード例 #30
0
ファイル: TBSCertificate.php プロジェクト: sop/x509
 /**
  * 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;
 }