GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( da62d3...8abb02 )
by Joni
02:44
created
lib/X509/CertificationRequest/Attributes.php 2 patches
Indentation   +96 added lines, -96 removed lines patch added patch discarded remove patch
@@ -20,107 +20,107 @@
 block discarded – undo
20 20
  */
21 21
 class Attributes implements \Countable, \IteratorAggregate
22 22
 {
23
-    use AttributeContainer;
23
+	use AttributeContainer;
24 24
     
25
-    /**
26
-     * Mapping from OID to attribute value class name.
27
-     *
28
-     * @internal
29
-     *
30
-     * @var array
31
-     */
32
-    const MAP_OID_TO_CLASS = array(
33
-        /* @formatter:off */
34
-        ExtensionRequestValue::OID => ExtensionRequestValue::class
35
-        /* @formatter:on */
36
-    );
25
+	/**
26
+	 * Mapping from OID to attribute value class name.
27
+	 *
28
+	 * @internal
29
+	 *
30
+	 * @var array
31
+	 */
32
+	const MAP_OID_TO_CLASS = array(
33
+		/* @formatter:off */
34
+		ExtensionRequestValue::OID => ExtensionRequestValue::class
35
+		/* @formatter:on */
36
+	);
37 37
     
38
-    /**
39
-     * Constructor.
40
-     *
41
-     * @param Attribute ...$attribs Attribute objects
42
-     */
43
-    public function __construct(Attribute ...$attribs)
44
-    {
45
-        $this->_attributes = $attribs;
46
-    }
38
+	/**
39
+	 * Constructor.
40
+	 *
41
+	 * @param Attribute ...$attribs Attribute objects
42
+	 */
43
+	public function __construct(Attribute ...$attribs)
44
+	{
45
+		$this->_attributes = $attribs;
46
+	}
47 47
     
48
-    /**
49
-     * Initialize from attribute values.
50
-     *
51
-     * @param AttributeValue ...$values
52
-     * @return self
53
-     */
54
-    public static function fromAttributeValues(AttributeValue ...$values): Attributes
55
-    {
56
-        $attribs = array_map(
57
-            function (AttributeValue $value) {
58
-                return $value->toAttribute();
59
-            }, $values);
60
-        return new self(...$attribs);
61
-    }
48
+	/**
49
+	 * Initialize from attribute values.
50
+	 *
51
+	 * @param AttributeValue ...$values
52
+	 * @return self
53
+	 */
54
+	public static function fromAttributeValues(AttributeValue ...$values): Attributes
55
+	{
56
+		$attribs = array_map(
57
+			function (AttributeValue $value) {
58
+				return $value->toAttribute();
59
+			}, $values);
60
+		return new self(...$attribs);
61
+	}
62 62
     
63
-    /**
64
-     * Initialize from ASN.1.
65
-     *
66
-     * @param Set $set
67
-     * @return self
68
-     */
69
-    public static function fromASN1(Set $set): Attributes
70
-    {
71
-        $attribs = array_map(
72
-            function (UnspecifiedType $el) {
73
-                return Attribute::fromASN1($el->asSequence());
74
-            }, $set->elements());
75
-        // cast attributes
76
-        $attribs = array_map(
77
-            function (Attribute $attr) {
78
-                $oid = $attr->oid();
79
-                if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
80
-                    $cls = self::MAP_OID_TO_CLASS[$oid];
81
-                    return $attr->castValues($cls);
82
-                }
83
-                return $attr;
84
-            }, $attribs);
85
-        return new self(...$attribs);
86
-    }
63
+	/**
64
+	 * Initialize from ASN.1.
65
+	 *
66
+	 * @param Set $set
67
+	 * @return self
68
+	 */
69
+	public static function fromASN1(Set $set): Attributes
70
+	{
71
+		$attribs = array_map(
72
+			function (UnspecifiedType $el) {
73
+				return Attribute::fromASN1($el->asSequence());
74
+			}, $set->elements());
75
+		// cast attributes
76
+		$attribs = array_map(
77
+			function (Attribute $attr) {
78
+				$oid = $attr->oid();
79
+				if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
80
+					$cls = self::MAP_OID_TO_CLASS[$oid];
81
+					return $attr->castValues($cls);
82
+				}
83
+				return $attr;
84
+			}, $attribs);
85
+		return new self(...$attribs);
86
+	}
87 87
     
88
-    /**
89
-     * Check whether extension request attribute is present.
90
-     *
91
-     * @return bool
92
-     */
93
-    public function hasExtensionRequest(): bool
94
-    {
95
-        return $this->has(ExtensionRequestValue::OID);
96
-    }
88
+	/**
89
+	 * Check whether extension request attribute is present.
90
+	 *
91
+	 * @return bool
92
+	 */
93
+	public function hasExtensionRequest(): bool
94
+	{
95
+		return $this->has(ExtensionRequestValue::OID);
96
+	}
97 97
     
98
-    /**
99
-     * Get extension request attribute value.
100
-     *
101
-     * @throws \LogicException
102
-     * @return ExtensionRequestValue
103
-     */
104
-    public function extensionRequest(): ExtensionRequestValue
105
-    {
106
-        if (!$this->hasExtensionRequest()) {
107
-            throw new \LogicException("No extension request attribute.");
108
-        }
109
-        return $this->firstOf(ExtensionRequestValue::OID)->first();
110
-    }
98
+	/**
99
+	 * Get extension request attribute value.
100
+	 *
101
+	 * @throws \LogicException
102
+	 * @return ExtensionRequestValue
103
+	 */
104
+	public function extensionRequest(): ExtensionRequestValue
105
+	{
106
+		if (!$this->hasExtensionRequest()) {
107
+			throw new \LogicException("No extension request attribute.");
108
+		}
109
+		return $this->firstOf(ExtensionRequestValue::OID)->first();
110
+	}
111 111
     
112
-    /**
113
-     * Generate ASN.1 structure.
114
-     *
115
-     * @return Set
116
-     */
117
-    public function toASN1(): Set
118
-    {
119
-        $elements = array_map(
120
-            function (Attribute $attr) {
121
-                return $attr->toASN1();
122
-            }, array_values($this->_attributes));
123
-        $set = new Set(...$elements);
124
-        return $set->sortedSetOf();
125
-    }
112
+	/**
113
+	 * Generate ASN.1 structure.
114
+	 *
115
+	 * @return Set
116
+	 */
117
+	public function toASN1(): Set
118
+	{
119
+		$elements = array_map(
120
+			function (Attribute $attr) {
121
+				return $attr->toASN1();
122
+			}, array_values($this->_attributes));
123
+		$set = new Set(...$elements);
124
+		return $set->sortedSetOf();
125
+	}
126 126
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -54,7 +54,7 @@  discard block
 block discarded – undo
54 54
     public static function fromAttributeValues(AttributeValue ...$values): Attributes
55 55
     {
56 56
         $attribs = array_map(
57
-            function (AttributeValue $value) {
57
+            function(AttributeValue $value) {
58 58
                 return $value->toAttribute();
59 59
             }, $values);
60 60
         return new self(...$attribs);
@@ -69,12 +69,12 @@  discard block
 block discarded – undo
69 69
     public static function fromASN1(Set $set): Attributes
70 70
     {
71 71
         $attribs = array_map(
72
-            function (UnspecifiedType $el) {
72
+            function(UnspecifiedType $el) {
73 73
                 return Attribute::fromASN1($el->asSequence());
74 74
             }, $set->elements());
75 75
         // cast attributes
76 76
         $attribs = array_map(
77
-            function (Attribute $attr) {
77
+            function(Attribute $attr) {
78 78
                 $oid = $attr->oid();
79 79
                 if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
80 80
                     $cls = self::MAP_OID_TO_CLASS[$oid];
@@ -117,7 +117,7 @@  discard block
 block discarded – undo
117 117
     public function toASN1(): Set
118 118
     {
119 119
         $elements = array_map(
120
-            function (Attribute $attr) {
120
+            function(Attribute $attr) {
121 121
                 return $attr->toASN1();
122 122
             }, array_values($this->_attributes));
123 123
         $set = new Set(...$elements);
Please login to merge, or discard this patch.
lib/X509/GeneralName/GeneralNames.php 1 patch
Indentation   +167 added lines, -167 removed lines patch added patch discarded remove patch
@@ -18,183 +18,183 @@
 block discarded – undo
18 18
  */
19 19
 class GeneralNames implements \Countable, \IteratorAggregate
20 20
 {
21
-    /**
22
-     * GeneralName objects.
23
-     *
24
-     * @var GeneralName[] $_names
25
-     */
26
-    protected $_names;
21
+	/**
22
+	 * GeneralName objects.
23
+	 *
24
+	 * @var GeneralName[] $_names
25
+	 */
26
+	protected $_names;
27 27
     
28
-    /**
29
-     * Constructor.
30
-     *
31
-     * @param GeneralName ...$names One or more GeneralName objects
32
-     */
33
-    public function __construct(GeneralName ...$names)
34
-    {
35
-        $this->_names = $names;
36
-    }
28
+	/**
29
+	 * Constructor.
30
+	 *
31
+	 * @param GeneralName ...$names One or more GeneralName objects
32
+	 */
33
+	public function __construct(GeneralName ...$names)
34
+	{
35
+		$this->_names = $names;
36
+	}
37 37
     
38
-    /**
39
-     * Initialize from ASN.1.
40
-     *
41
-     * @param Sequence $seq
42
-     * @throws \UnexpectedValueException
43
-     * @return self
44
-     */
45
-    public static function fromASN1(Sequence $seq): GeneralNames
46
-    {
47
-        if (!count($seq)) {
48
-            throw new \UnexpectedValueException(
49
-                "GeneralNames must have at least one GeneralName.");
50
-        }
51
-        $names = array_map(
52
-            function (UnspecifiedType $el) {
53
-                return GeneralName::fromASN1($el->asTagged());
54
-            }, $seq->elements());
55
-        return new self(...$names);
56
-    }
38
+	/**
39
+	 * Initialize from ASN.1.
40
+	 *
41
+	 * @param Sequence $seq
42
+	 * @throws \UnexpectedValueException
43
+	 * @return self
44
+	 */
45
+	public static function fromASN1(Sequence $seq): GeneralNames
46
+	{
47
+		if (!count($seq)) {
48
+			throw new \UnexpectedValueException(
49
+				"GeneralNames must have at least one GeneralName.");
50
+		}
51
+		$names = array_map(
52
+			function (UnspecifiedType $el) {
53
+				return GeneralName::fromASN1($el->asTagged());
54
+			}, $seq->elements());
55
+		return new self(...$names);
56
+	}
57 57
     
58
-    /**
59
-     * Find first GeneralName by given tag.
60
-     *
61
-     * @param int $tag
62
-     * @return GeneralName|null
63
-     */
64
-    protected function _findFirst(int $tag)
65
-    {
66
-        foreach ($this->_names as $name) {
67
-            if ($name->tag() == $tag) {
68
-                return $name;
69
-            }
70
-        }
71
-        return null;
72
-    }
58
+	/**
59
+	 * Find first GeneralName by given tag.
60
+	 *
61
+	 * @param int $tag
62
+	 * @return GeneralName|null
63
+	 */
64
+	protected function _findFirst(int $tag)
65
+	{
66
+		foreach ($this->_names as $name) {
67
+			if ($name->tag() == $tag) {
68
+				return $name;
69
+			}
70
+		}
71
+		return null;
72
+	}
73 73
     
74
-    /**
75
-     * Check whether GeneralNames contains a GeneralName of given type.
76
-     *
77
-     * @param int $tag One of <code>GeneralName::TAG_*</code> enumerations
78
-     * @return bool
79
-     */
80
-    public function has(int $tag): bool
81
-    {
82
-        return null !== $this->_findFirst($tag);
83
-    }
74
+	/**
75
+	 * Check whether GeneralNames contains a GeneralName of given type.
76
+	 *
77
+	 * @param int $tag One of <code>GeneralName::TAG_*</code> enumerations
78
+	 * @return bool
79
+	 */
80
+	public function has(int $tag): bool
81
+	{
82
+		return null !== $this->_findFirst($tag);
83
+	}
84 84
     
85
-    /**
86
-     * Get first GeneralName of given type.
87
-     *
88
-     * @param int $tag One of <code>GeneralName::TAG_*</code> enumerations
89
-     * @throws \OutOfBoundsException
90
-     * @return GeneralName
91
-     */
92
-    public function firstOf(int $tag): GeneralName
93
-    {
94
-        $name = $this->_findFirst($tag);
95
-        if (!$name) {
96
-            throw new \UnexpectedValueException("No GeneralName by tag $tag.");
97
-        }
98
-        return $name;
99
-    }
85
+	/**
86
+	 * Get first GeneralName of given type.
87
+	 *
88
+	 * @param int $tag One of <code>GeneralName::TAG_*</code> enumerations
89
+	 * @throws \OutOfBoundsException
90
+	 * @return GeneralName
91
+	 */
92
+	public function firstOf(int $tag): GeneralName
93
+	{
94
+		$name = $this->_findFirst($tag);
95
+		if (!$name) {
96
+			throw new \UnexpectedValueException("No GeneralName by tag $tag.");
97
+		}
98
+		return $name;
99
+	}
100 100
     
101
-    /**
102
-     * Get all GeneralName objects of given type.
103
-     *
104
-     * @param int $tag One of <code>GeneralName::TAG_*</code> enumerations
105
-     * @return GeneralName[]
106
-     */
107
-    public function allOf(int $tag): array
108
-    {
109
-        $names = array_filter($this->_names,
110
-            function (GeneralName $name) use ($tag) {
111
-                return $name->tag() == $tag;
112
-            });
113
-        return array_values($names);
114
-    }
101
+	/**
102
+	 * Get all GeneralName objects of given type.
103
+	 *
104
+	 * @param int $tag One of <code>GeneralName::TAG_*</code> enumerations
105
+	 * @return GeneralName[]
106
+	 */
107
+	public function allOf(int $tag): array
108
+	{
109
+		$names = array_filter($this->_names,
110
+			function (GeneralName $name) use ($tag) {
111
+				return $name->tag() == $tag;
112
+			});
113
+		return array_values($names);
114
+	}
115 115
     
116
-    /**
117
-     * Get value of the first 'dNSName' type.
118
-     *
119
-     * @return string
120
-     */
121
-    public function firstDNS(): string
122
-    {
123
-        $gn = $this->firstOf(GeneralName::TAG_DNS_NAME);
124
-        if (!$gn instanceof DNSName) {
125
-            throw new \RuntimeException(
126
-                DNSName::class . " expected, got " . get_class($gn));
127
-        }
128
-        return $gn->name();
129
-    }
116
+	/**
117
+	 * Get value of the first 'dNSName' type.
118
+	 *
119
+	 * @return string
120
+	 */
121
+	public function firstDNS(): string
122
+	{
123
+		$gn = $this->firstOf(GeneralName::TAG_DNS_NAME);
124
+		if (!$gn instanceof DNSName) {
125
+			throw new \RuntimeException(
126
+				DNSName::class . " expected, got " . get_class($gn));
127
+		}
128
+		return $gn->name();
129
+	}
130 130
     
131
-    /**
132
-     * Get value of the first 'directoryName' type.
133
-     *
134
-     * @return Name
135
-     */
136
-    public function firstDN(): Name
137
-    {
138
-        $gn = $this->firstOf(GeneralName::TAG_DIRECTORY_NAME);
139
-        if (!$gn instanceof DirectoryName) {
140
-            throw new \RuntimeException(
141
-                DirectoryName::class . " expected, got " . get_class($gn));
142
-        }
143
-        return $gn->dn();
144
-    }
131
+	/**
132
+	 * Get value of the first 'directoryName' type.
133
+	 *
134
+	 * @return Name
135
+	 */
136
+	public function firstDN(): Name
137
+	{
138
+		$gn = $this->firstOf(GeneralName::TAG_DIRECTORY_NAME);
139
+		if (!$gn instanceof DirectoryName) {
140
+			throw new \RuntimeException(
141
+				DirectoryName::class . " expected, got " . get_class($gn));
142
+		}
143
+		return $gn->dn();
144
+	}
145 145
     
146
-    /**
147
-     * Get value of the first 'uniformResourceIdentifier' type.
148
-     *
149
-     * @return string
150
-     */
151
-    public function firstURI(): string
152
-    {
153
-        $gn = $this->firstOf(GeneralName::TAG_URI);
154
-        if (!$gn instanceof UniformResourceIdentifier) {
155
-            throw new \RuntimeException(
156
-                UniformResourceIdentifier::class . " expected, got " .
157
-                     get_class($gn));
158
-        }
159
-        return $gn->uri();
160
-    }
146
+	/**
147
+	 * Get value of the first 'uniformResourceIdentifier' type.
148
+	 *
149
+	 * @return string
150
+	 */
151
+	public function firstURI(): string
152
+	{
153
+		$gn = $this->firstOf(GeneralName::TAG_URI);
154
+		if (!$gn instanceof UniformResourceIdentifier) {
155
+			throw new \RuntimeException(
156
+				UniformResourceIdentifier::class . " expected, got " .
157
+					 get_class($gn));
158
+		}
159
+		return $gn->uri();
160
+	}
161 161
     
162
-    /**
163
-     * Generate ASN.1 structure.
164
-     *
165
-     * @return Sequence
166
-     */
167
-    public function toASN1(): Sequence
168
-    {
169
-        if (!count($this->_names)) {
170
-            throw new \LogicException(
171
-                "GeneralNames must have at least one GeneralName.");
172
-        }
173
-        $elements = array_map(
174
-            function (GeneralName $name) {
175
-                return $name->toASN1();
176
-            }, $this->_names);
177
-        return new Sequence(...$elements);
178
-    }
162
+	/**
163
+	 * Generate ASN.1 structure.
164
+	 *
165
+	 * @return Sequence
166
+	 */
167
+	public function toASN1(): Sequence
168
+	{
169
+		if (!count($this->_names)) {
170
+			throw new \LogicException(
171
+				"GeneralNames must have at least one GeneralName.");
172
+		}
173
+		$elements = array_map(
174
+			function (GeneralName $name) {
175
+				return $name->toASN1();
176
+			}, $this->_names);
177
+		return new Sequence(...$elements);
178
+	}
179 179
     
180
-    /**
181
-     *
182
-     * @see \Countable::count()
183
-     * @return int
184
-     */
185
-    public function count(): int
186
-    {
187
-        return count($this->_names);
188
-    }
180
+	/**
181
+	 *
182
+	 * @see \Countable::count()
183
+	 * @return int
184
+	 */
185
+	public function count(): int
186
+	{
187
+		return count($this->_names);
188
+	}
189 189
     
190
-    /**
191
-     * Get iterator for GeneralName objects.
192
-     *
193
-     * @see \IteratorAggregate::getIterator()
194
-     * @return \ArrayIterator
195
-     */
196
-    public function getIterator(): \ArrayIterator
197
-    {
198
-        return new \ArrayIterator($this->_names);
199
-    }
190
+	/**
191
+	 * Get iterator for GeneralName objects.
192
+	 *
193
+	 * @see \IteratorAggregate::getIterator()
194
+	 * @return \ArrayIterator
195
+	 */
196
+	public function getIterator(): \ArrayIterator
197
+	{
198
+		return new \ArrayIterator($this->_names);
199
+	}
200 200
 }
Please login to merge, or discard this patch.
lib/X509/Certificate/Extensions.php 2 patches
Indentation   +410 added lines, -410 removed lines patch added patch discarded remove patch
@@ -18,414 +18,414 @@
 block discarded – undo
18 18
  */
19 19
 class Extensions implements \Countable, \IteratorAggregate
20 20
 {
21
-    /**
22
-     * Extensions.
23
-     *
24
-     * @var Extension\Extension[] $_extensions
25
-     */
26
-    protected $_extensions;
27
-    
28
-    /**
29
-     * Constructor.
30
-     *
31
-     * @param Ext\Extension ...$extensions Extension objects
32
-     */
33
-    public function __construct(Ext\Extension ...$extensions)
34
-    {
35
-        $this->_extensions = array();
36
-        foreach ($extensions as $ext) {
37
-            $this->_extensions[$ext->oid()] = $ext;
38
-        }
39
-    }
40
-    
41
-    /**
42
-     * Initialize from ASN.1.
43
-     *
44
-     * @param Sequence $seq
45
-     * @return self
46
-     */
47
-    public static function fromASN1(Sequence $seq): Extensions
48
-    {
49
-        $extensions = array_map(
50
-            function (UnspecifiedType $el) {
51
-                return Ext\Extension::fromASN1($el->asSequence());
52
-            }, $seq->elements());
53
-        return new self(...$extensions);
54
-    }
55
-    
56
-    /**
57
-     * Generate ASN.1 structure.
58
-     *
59
-     * @return Sequence
60
-     */
61
-    public function toASN1(): Sequence
62
-    {
63
-        $elements = array_values(
64
-            array_map(
65
-                function ($ext) {
66
-                    return $ext->toASN1();
67
-                }, $this->_extensions));
68
-        return new Sequence(...$elements);
69
-    }
70
-    
71
-    /**
72
-     * Get self with extensions added.
73
-     *
74
-     * @param Ext\Extension ...$exts One or more extensions to add
75
-     * @return self
76
-     */
77
-    public function withExtensions(Ext\Extension ...$exts): Extensions
78
-    {
79
-        $obj = clone $this;
80
-        foreach ($exts as $ext) {
81
-            $obj->_extensions[$ext->oid()] = $ext;
82
-        }
83
-        return $obj;
84
-    }
85
-    
86
-    /**
87
-     * Check whether extension is present.
88
-     *
89
-     * @param string $oid Extensions OID
90
-     * @return bool
91
-     */
92
-    public function has(string $oid): bool
93
-    {
94
-        return isset($this->_extensions[$oid]);
95
-    }
96
-    
97
-    /**
98
-     * Get extension by OID.
99
-     *
100
-     * @param string $oid
101
-     * @throws \LogicException If extension is not present
102
-     * @return Extension\Extension
103
-     */
104
-    public function get(string $oid): Ext\Extension
105
-    {
106
-        if (!$this->has($oid)) {
107
-            throw new \LogicException("No extension by OID $oid.");
108
-        }
109
-        return $this->_extensions[$oid];
110
-    }
111
-    
112
-    /**
113
-     * Check whether 'Authority Key Identifier' extension is present.
114
-     *
115
-     * @return bool
116
-     */
117
-    public function hasAuthorityKeyIdentifier(): bool
118
-    {
119
-        return $this->has(Ext\Extension::OID_AUTHORITY_KEY_IDENTIFIER);
120
-    }
121
-    
122
-    /**
123
-     * Get 'Authority Key Identifier' extension.
124
-     *
125
-     * @throws \LogicException If extension is not present
126
-     * @return \X509\Certificate\Extension\AuthorityKeyIdentifierExtension
127
-     */
128
-    public function authorityKeyIdentifier(): Ext\AuthorityKeyIdentifierExtension
129
-    {
130
-        /** @var Extension\AuthorityKeyIdentifierExtension $keyIdentifier */
131
-        $keyIdentifier = $this->get(Ext\Extension::OID_AUTHORITY_KEY_IDENTIFIER);
132
-        return $keyIdentifier;
133
-    }
134
-    
135
-    /**
136
-     * Check whether 'Subject Key Identifier' extension is present.
137
-     *
138
-     * @return bool
139
-     */
140
-    public function hasSubjectKeyIdentifier(): bool
141
-    {
142
-        return $this->has(Ext\Extension::OID_SUBJECT_KEY_IDENTIFIER);
143
-    }
144
-    
145
-    /**
146
-     * Get 'Subject Key Identifier' extension.
147
-     *
148
-     * @throws \LogicException If extension is not present
149
-     * @return \X509\Certificate\Extension\SubjectKeyIdentifierExtension
150
-     */
151
-    public function subjectKeyIdentifier(): Ext\SubjectKeyIdentifierExtension
152
-    {
153
-        /** @var Extension\SubjectKeyIdentifierExtension $subjectKeyIdentifier */
154
-        $subjectKeyIdentifier = $this->get(
155
-            Ext\Extension::OID_SUBJECT_KEY_IDENTIFIER);
156
-        return $subjectKeyIdentifier;
157
-    }
158
-    
159
-    /**
160
-     * Check whether 'Key Usage' extension is present.
161
-     *
162
-     * @return bool
163
-     */
164
-    public function hasKeyUsage(): bool
165
-    {
166
-        return $this->has(Ext\Extension::OID_KEY_USAGE);
167
-    }
168
-    
169
-    /**
170
-     * Get 'Key Usage' extension.
171
-     *
172
-     * @throws \LogicException If extension is not present
173
-     * @return \X509\Certificate\Extension\KeyUsageExtension
174
-     */
175
-    public function keyUsage(): Ext\KeyUsageExtension
176
-    {
177
-        /** @var Extension\KeyUsageExtension $keyUsage */
178
-        $keyUsage = $this->get(Ext\Extension::OID_KEY_USAGE);
179
-        return $keyUsage;
180
-    }
181
-    
182
-    /**
183
-     * Check whether 'Certificate Policies' extension is present.
184
-     *
185
-     * @return bool
186
-     */
187
-    public function hasCertificatePolicies(): bool
188
-    {
189
-        return $this->has(Ext\Extension::OID_CERTIFICATE_POLICIES);
190
-    }
191
-    
192
-    /**
193
-     * Get 'Certificate Policies' extension.
194
-     *
195
-     * @throws \LogicException If extension is not present
196
-     * @return \X509\Certificate\Extension\CertificatePoliciesExtension
197
-     */
198
-    public function certificatePolicies(): Ext\CertificatePoliciesExtension
199
-    {
200
-        /** @var Extension\CertificatePoliciesExtension $certPolicies */
201
-        $certPolicies = $this->get(Ext\Extension::OID_CERTIFICATE_POLICIES);
202
-        return $certPolicies;
203
-    }
204
-    
205
-    /**
206
-     * Check whether 'Policy Mappings' extension is present.
207
-     *
208
-     * @return bool
209
-     */
210
-    public function hasPolicyMappings(): bool
211
-    {
212
-        return $this->has(Ext\Extension::OID_POLICY_MAPPINGS);
213
-    }
214
-    
215
-    /**
216
-     * Get 'Policy Mappings' extension.
217
-     *
218
-     * @throws \LogicException If extension is not present
219
-     * @return \X509\Certificate\Extension\PolicyMappingsExtension
220
-     */
221
-    public function policyMappings(): Ext\PolicyMappingsExtension
222
-    {
223
-        /** @var Extension\PolicyMappingsExtension $policyMappings */
224
-        $policyMappings = $this->get(Ext\Extension::OID_POLICY_MAPPINGS);
225
-        return $policyMappings;
226
-    }
227
-    
228
-    /**
229
-     * Check whether 'Subject Alternative Name' extension is present.
230
-     *
231
-     * @return bool
232
-     */
233
-    public function hasSubjectAlternativeName(): bool
234
-    {
235
-        return $this->has(Ext\Extension::OID_SUBJECT_ALT_NAME);
236
-    }
237
-    
238
-    /**
239
-     * Get 'Subject Alternative Name' extension.
240
-     *
241
-     * @throws \LogicException If extension is not present
242
-     * @return \X509\Certificate\Extension\SubjectAlternativeNameExtension
243
-     */
244
-    public function subjectAlternativeName(): Ext\SubjectAlternativeNameExtension
245
-    {
246
-        /** @var Extension\SubjectAlternativeNameExtension $subjectAltName */
247
-        $subjectAltName = $this->get(Ext\Extension::OID_SUBJECT_ALT_NAME);
248
-        return $subjectAltName;
249
-    }
250
-    
251
-    /**
252
-     * Check whether 'Issuer Alternative Name' extension is present.
253
-     *
254
-     * @return bool
255
-     */
256
-    public function hasIssuerAlternativeName(): bool
257
-    {
258
-        return $this->has(Ext\Extension::OID_ISSUER_ALT_NAME);
259
-    }
260
-    
261
-    /**
262
-     * Get 'Issuer Alternative Name' extension.
263
-     *
264
-     * @return \X509\Certificate\Extension\IssuerAlternativeNameExtension
265
-     */
266
-    public function issuerAlternativeName(): Ext\IssuerAlternativeNameExtension
267
-    {
268
-        /** @var Extension\IssuerAlternativeNameExtension $issuerAltName */
269
-        $issuerAltName = $this->get(Ext\Extension::OID_ISSUER_ALT_NAME);
270
-        return $issuerAltName;
271
-    }
272
-    
273
-    /**
274
-     * Check whether 'Basic Constraints' extension is present.
275
-     *
276
-     * @return bool
277
-     */
278
-    public function hasBasicConstraints(): bool
279
-    {
280
-        return $this->has(Ext\Extension::OID_BASIC_CONSTRAINTS);
281
-    }
282
-    
283
-    /**
284
-     * Get 'Basic Constraints' extension.
285
-     *
286
-     * @throws \LogicException If extension is not present
287
-     * @return \X509\Certificate\Extension\BasicConstraintsExtension
288
-     */
289
-    public function basicConstraints(): Ext\BasicConstraintsExtension
290
-    {
291
-        /** @var Extension\BasicConstraintsExtension $basicConstraints */
292
-        $basicConstraints = $this->get(Ext\Extension::OID_BASIC_CONSTRAINTS);
293
-        return $basicConstraints;
294
-    }
295
-    
296
-    /**
297
-     * Check whether 'Name Constraints' extension is present.
298
-     *
299
-     * @return bool
300
-     */
301
-    public function hasNameConstraints(): bool
302
-    {
303
-        return $this->has(Ext\Extension::OID_NAME_CONSTRAINTS);
304
-    }
305
-    
306
-    /**
307
-     * Get 'Name Constraints' extension.
308
-     *
309
-     * @throws \LogicException If extension is not present
310
-     * @return \X509\Certificate\Extension\NameConstraintsExtension
311
-     */
312
-    public function nameConstraints(): Ext\NameConstraintsExtension
313
-    {
314
-        /** @var Extension\NameConstraintsExtension $nameConstraints */
315
-        $nameConstraints = $this->get(Ext\Extension::OID_NAME_CONSTRAINTS);
316
-        return $nameConstraints;
317
-    }
318
-    
319
-    /**
320
-     * Check whether 'Policy Constraints' extension is present.
321
-     *
322
-     * @return bool
323
-     */
324
-    public function hasPolicyConstraints(): bool
325
-    {
326
-        return $this->has(Ext\Extension::OID_POLICY_CONSTRAINTS);
327
-    }
328
-    
329
-    /**
330
-     * Get 'Policy Constraints' extension.
331
-     *
332
-     * @throws \LogicException If extension is not present
333
-     * @return \X509\Certificate\Extension\PolicyConstraintsExtension
334
-     */
335
-    public function policyConstraints(): Ext\PolicyConstraintsExtension
336
-    {
337
-        /** @var Extension\PolicyConstraintsExtension $policyConstraints */
338
-        $policyConstraints = $this->get(Ext\Extension::OID_POLICY_CONSTRAINTS);
339
-        return $policyConstraints;
340
-    }
341
-    
342
-    /**
343
-     * Check whether 'Extended Key Usage' extension is present.
344
-     *
345
-     * @return bool
346
-     */
347
-    public function hasExtendedKeyUsage(): bool
348
-    {
349
-        return $this->has(Ext\Extension::OID_EXT_KEY_USAGE);
350
-    }
351
-    
352
-    /**
353
-     * Get 'Extended Key Usage' extension.
354
-     *
355
-     * @throws \LogicException If extension is not present
356
-     * @return \X509\Certificate\Extension\ExtendedKeyUsageExtension
357
-     */
358
-    public function extendedKeyUsage(): Ext\ExtendedKeyUsageExtension
359
-    {
360
-        /** @var Extension\ExtendedKeyUsageExtension $keyUsage */
361
-        $keyUsage = $this->get(Ext\Extension::OID_EXT_KEY_USAGE);
362
-        return $keyUsage;
363
-    }
364
-    
365
-    /**
366
-     * Check whether 'CRL Distribution Points' extension is present.
367
-     *
368
-     * @return bool
369
-     */
370
-    public function hasCRLDistributionPoints(): bool
371
-    {
372
-        return $this->has(Ext\Extension::OID_CRL_DISTRIBUTION_POINTS);
373
-    }
374
-    
375
-    /**
376
-     * Get 'CRL Distribution Points' extension.
377
-     *
378
-     * @throws \LogicException If extension is not present
379
-     * @return \X509\Certificate\Extension\CRLDistributionPointsExtension
380
-     */
381
-    public function crlDistributionPoints(): Ext\CRLDistributionPointsExtension
382
-    {
383
-        /** @var Extension\CRLDistributionPointsExtension $crlDist */
384
-        $crlDist = $this->get(Ext\Extension::OID_CRL_DISTRIBUTION_POINTS);
385
-        return $crlDist;
386
-    }
387
-    
388
-    /**
389
-     * Check whether 'Inhibit anyPolicy' extension is present.
390
-     *
391
-     * @return bool
392
-     */
393
-    public function hasInhibitAnyPolicy(): bool
394
-    {
395
-        return $this->has(Ext\Extension::OID_INHIBIT_ANY_POLICY);
396
-    }
397
-    
398
-    /**
399
-     * Get 'Inhibit anyPolicy' extension.
400
-     *
401
-     * @throws \LogicException If extension is not present
402
-     * @return \X509\Certificate\Extension\InhibitAnyPolicyExtension
403
-     */
404
-    public function inhibitAnyPolicy(): Ext\InhibitAnyPolicyExtension
405
-    {
406
-        /** @var Extension\InhibitAnyPolicyExtension $inhibitAny */
407
-        $inhibitAny = $this->get(Ext\Extension::OID_INHIBIT_ANY_POLICY);
408
-        return $inhibitAny;
409
-    }
410
-    
411
-    /**
412
-     *
413
-     * @see \Countable::count()
414
-     * @return int
415
-     */
416
-    public function count(): int
417
-    {
418
-        return count($this->_extensions);
419
-    }
420
-    
421
-    /**
422
-     * Get iterator for extensions.
423
-     *
424
-     * @see \IteratorAggregate::getIterator()
425
-     * @return \Traversable
426
-     */
427
-    public function getIterator(): \Traversable
428
-    {
429
-        return new \ArrayIterator($this->_extensions);
430
-    }
21
+	/**
22
+	 * Extensions.
23
+	 *
24
+	 * @var Extension\Extension[] $_extensions
25
+	 */
26
+	protected $_extensions;
27
+    
28
+	/**
29
+	 * Constructor.
30
+	 *
31
+	 * @param Ext\Extension ...$extensions Extension objects
32
+	 */
33
+	public function __construct(Ext\Extension ...$extensions)
34
+	{
35
+		$this->_extensions = array();
36
+		foreach ($extensions as $ext) {
37
+			$this->_extensions[$ext->oid()] = $ext;
38
+		}
39
+	}
40
+    
41
+	/**
42
+	 * Initialize from ASN.1.
43
+	 *
44
+	 * @param Sequence $seq
45
+	 * @return self
46
+	 */
47
+	public static function fromASN1(Sequence $seq): Extensions
48
+	{
49
+		$extensions = array_map(
50
+			function (UnspecifiedType $el) {
51
+				return Ext\Extension::fromASN1($el->asSequence());
52
+			}, $seq->elements());
53
+		return new self(...$extensions);
54
+	}
55
+    
56
+	/**
57
+	 * Generate ASN.1 structure.
58
+	 *
59
+	 * @return Sequence
60
+	 */
61
+	public function toASN1(): Sequence
62
+	{
63
+		$elements = array_values(
64
+			array_map(
65
+				function ($ext) {
66
+					return $ext->toASN1();
67
+				}, $this->_extensions));
68
+		return new Sequence(...$elements);
69
+	}
70
+    
71
+	/**
72
+	 * Get self with extensions added.
73
+	 *
74
+	 * @param Ext\Extension ...$exts One or more extensions to add
75
+	 * @return self
76
+	 */
77
+	public function withExtensions(Ext\Extension ...$exts): Extensions
78
+	{
79
+		$obj = clone $this;
80
+		foreach ($exts as $ext) {
81
+			$obj->_extensions[$ext->oid()] = $ext;
82
+		}
83
+		return $obj;
84
+	}
85
+    
86
+	/**
87
+	 * Check whether extension is present.
88
+	 *
89
+	 * @param string $oid Extensions OID
90
+	 * @return bool
91
+	 */
92
+	public function has(string $oid): bool
93
+	{
94
+		return isset($this->_extensions[$oid]);
95
+	}
96
+    
97
+	/**
98
+	 * Get extension by OID.
99
+	 *
100
+	 * @param string $oid
101
+	 * @throws \LogicException If extension is not present
102
+	 * @return Extension\Extension
103
+	 */
104
+	public function get(string $oid): Ext\Extension
105
+	{
106
+		if (!$this->has($oid)) {
107
+			throw new \LogicException("No extension by OID $oid.");
108
+		}
109
+		return $this->_extensions[$oid];
110
+	}
111
+    
112
+	/**
113
+	 * Check whether 'Authority Key Identifier' extension is present.
114
+	 *
115
+	 * @return bool
116
+	 */
117
+	public function hasAuthorityKeyIdentifier(): bool
118
+	{
119
+		return $this->has(Ext\Extension::OID_AUTHORITY_KEY_IDENTIFIER);
120
+	}
121
+    
122
+	/**
123
+	 * Get 'Authority Key Identifier' extension.
124
+	 *
125
+	 * @throws \LogicException If extension is not present
126
+	 * @return \X509\Certificate\Extension\AuthorityKeyIdentifierExtension
127
+	 */
128
+	public function authorityKeyIdentifier(): Ext\AuthorityKeyIdentifierExtension
129
+	{
130
+		/** @var Extension\AuthorityKeyIdentifierExtension $keyIdentifier */
131
+		$keyIdentifier = $this->get(Ext\Extension::OID_AUTHORITY_KEY_IDENTIFIER);
132
+		return $keyIdentifier;
133
+	}
134
+    
135
+	/**
136
+	 * Check whether 'Subject Key Identifier' extension is present.
137
+	 *
138
+	 * @return bool
139
+	 */
140
+	public function hasSubjectKeyIdentifier(): bool
141
+	{
142
+		return $this->has(Ext\Extension::OID_SUBJECT_KEY_IDENTIFIER);
143
+	}
144
+    
145
+	/**
146
+	 * Get 'Subject Key Identifier' extension.
147
+	 *
148
+	 * @throws \LogicException If extension is not present
149
+	 * @return \X509\Certificate\Extension\SubjectKeyIdentifierExtension
150
+	 */
151
+	public function subjectKeyIdentifier(): Ext\SubjectKeyIdentifierExtension
152
+	{
153
+		/** @var Extension\SubjectKeyIdentifierExtension $subjectKeyIdentifier */
154
+		$subjectKeyIdentifier = $this->get(
155
+			Ext\Extension::OID_SUBJECT_KEY_IDENTIFIER);
156
+		return $subjectKeyIdentifier;
157
+	}
158
+    
159
+	/**
160
+	 * Check whether 'Key Usage' extension is present.
161
+	 *
162
+	 * @return bool
163
+	 */
164
+	public function hasKeyUsage(): bool
165
+	{
166
+		return $this->has(Ext\Extension::OID_KEY_USAGE);
167
+	}
168
+    
169
+	/**
170
+	 * Get 'Key Usage' extension.
171
+	 *
172
+	 * @throws \LogicException If extension is not present
173
+	 * @return \X509\Certificate\Extension\KeyUsageExtension
174
+	 */
175
+	public function keyUsage(): Ext\KeyUsageExtension
176
+	{
177
+		/** @var Extension\KeyUsageExtension $keyUsage */
178
+		$keyUsage = $this->get(Ext\Extension::OID_KEY_USAGE);
179
+		return $keyUsage;
180
+	}
181
+    
182
+	/**
183
+	 * Check whether 'Certificate Policies' extension is present.
184
+	 *
185
+	 * @return bool
186
+	 */
187
+	public function hasCertificatePolicies(): bool
188
+	{
189
+		return $this->has(Ext\Extension::OID_CERTIFICATE_POLICIES);
190
+	}
191
+    
192
+	/**
193
+	 * Get 'Certificate Policies' extension.
194
+	 *
195
+	 * @throws \LogicException If extension is not present
196
+	 * @return \X509\Certificate\Extension\CertificatePoliciesExtension
197
+	 */
198
+	public function certificatePolicies(): Ext\CertificatePoliciesExtension
199
+	{
200
+		/** @var Extension\CertificatePoliciesExtension $certPolicies */
201
+		$certPolicies = $this->get(Ext\Extension::OID_CERTIFICATE_POLICIES);
202
+		return $certPolicies;
203
+	}
204
+    
205
+	/**
206
+	 * Check whether 'Policy Mappings' extension is present.
207
+	 *
208
+	 * @return bool
209
+	 */
210
+	public function hasPolicyMappings(): bool
211
+	{
212
+		return $this->has(Ext\Extension::OID_POLICY_MAPPINGS);
213
+	}
214
+    
215
+	/**
216
+	 * Get 'Policy Mappings' extension.
217
+	 *
218
+	 * @throws \LogicException If extension is not present
219
+	 * @return \X509\Certificate\Extension\PolicyMappingsExtension
220
+	 */
221
+	public function policyMappings(): Ext\PolicyMappingsExtension
222
+	{
223
+		/** @var Extension\PolicyMappingsExtension $policyMappings */
224
+		$policyMappings = $this->get(Ext\Extension::OID_POLICY_MAPPINGS);
225
+		return $policyMappings;
226
+	}
227
+    
228
+	/**
229
+	 * Check whether 'Subject Alternative Name' extension is present.
230
+	 *
231
+	 * @return bool
232
+	 */
233
+	public function hasSubjectAlternativeName(): bool
234
+	{
235
+		return $this->has(Ext\Extension::OID_SUBJECT_ALT_NAME);
236
+	}
237
+    
238
+	/**
239
+	 * Get 'Subject Alternative Name' extension.
240
+	 *
241
+	 * @throws \LogicException If extension is not present
242
+	 * @return \X509\Certificate\Extension\SubjectAlternativeNameExtension
243
+	 */
244
+	public function subjectAlternativeName(): Ext\SubjectAlternativeNameExtension
245
+	{
246
+		/** @var Extension\SubjectAlternativeNameExtension $subjectAltName */
247
+		$subjectAltName = $this->get(Ext\Extension::OID_SUBJECT_ALT_NAME);
248
+		return $subjectAltName;
249
+	}
250
+    
251
+	/**
252
+	 * Check whether 'Issuer Alternative Name' extension is present.
253
+	 *
254
+	 * @return bool
255
+	 */
256
+	public function hasIssuerAlternativeName(): bool
257
+	{
258
+		return $this->has(Ext\Extension::OID_ISSUER_ALT_NAME);
259
+	}
260
+    
261
+	/**
262
+	 * Get 'Issuer Alternative Name' extension.
263
+	 *
264
+	 * @return \X509\Certificate\Extension\IssuerAlternativeNameExtension
265
+	 */
266
+	public function issuerAlternativeName(): Ext\IssuerAlternativeNameExtension
267
+	{
268
+		/** @var Extension\IssuerAlternativeNameExtension $issuerAltName */
269
+		$issuerAltName = $this->get(Ext\Extension::OID_ISSUER_ALT_NAME);
270
+		return $issuerAltName;
271
+	}
272
+    
273
+	/**
274
+	 * Check whether 'Basic Constraints' extension is present.
275
+	 *
276
+	 * @return bool
277
+	 */
278
+	public function hasBasicConstraints(): bool
279
+	{
280
+		return $this->has(Ext\Extension::OID_BASIC_CONSTRAINTS);
281
+	}
282
+    
283
+	/**
284
+	 * Get 'Basic Constraints' extension.
285
+	 *
286
+	 * @throws \LogicException If extension is not present
287
+	 * @return \X509\Certificate\Extension\BasicConstraintsExtension
288
+	 */
289
+	public function basicConstraints(): Ext\BasicConstraintsExtension
290
+	{
291
+		/** @var Extension\BasicConstraintsExtension $basicConstraints */
292
+		$basicConstraints = $this->get(Ext\Extension::OID_BASIC_CONSTRAINTS);
293
+		return $basicConstraints;
294
+	}
295
+    
296
+	/**
297
+	 * Check whether 'Name Constraints' extension is present.
298
+	 *
299
+	 * @return bool
300
+	 */
301
+	public function hasNameConstraints(): bool
302
+	{
303
+		return $this->has(Ext\Extension::OID_NAME_CONSTRAINTS);
304
+	}
305
+    
306
+	/**
307
+	 * Get 'Name Constraints' extension.
308
+	 *
309
+	 * @throws \LogicException If extension is not present
310
+	 * @return \X509\Certificate\Extension\NameConstraintsExtension
311
+	 */
312
+	public function nameConstraints(): Ext\NameConstraintsExtension
313
+	{
314
+		/** @var Extension\NameConstraintsExtension $nameConstraints */
315
+		$nameConstraints = $this->get(Ext\Extension::OID_NAME_CONSTRAINTS);
316
+		return $nameConstraints;
317
+	}
318
+    
319
+	/**
320
+	 * Check whether 'Policy Constraints' extension is present.
321
+	 *
322
+	 * @return bool
323
+	 */
324
+	public function hasPolicyConstraints(): bool
325
+	{
326
+		return $this->has(Ext\Extension::OID_POLICY_CONSTRAINTS);
327
+	}
328
+    
329
+	/**
330
+	 * Get 'Policy Constraints' extension.
331
+	 *
332
+	 * @throws \LogicException If extension is not present
333
+	 * @return \X509\Certificate\Extension\PolicyConstraintsExtension
334
+	 */
335
+	public function policyConstraints(): Ext\PolicyConstraintsExtension
336
+	{
337
+		/** @var Extension\PolicyConstraintsExtension $policyConstraints */
338
+		$policyConstraints = $this->get(Ext\Extension::OID_POLICY_CONSTRAINTS);
339
+		return $policyConstraints;
340
+	}
341
+    
342
+	/**
343
+	 * Check whether 'Extended Key Usage' extension is present.
344
+	 *
345
+	 * @return bool
346
+	 */
347
+	public function hasExtendedKeyUsage(): bool
348
+	{
349
+		return $this->has(Ext\Extension::OID_EXT_KEY_USAGE);
350
+	}
351
+    
352
+	/**
353
+	 * Get 'Extended Key Usage' extension.
354
+	 *
355
+	 * @throws \LogicException If extension is not present
356
+	 * @return \X509\Certificate\Extension\ExtendedKeyUsageExtension
357
+	 */
358
+	public function extendedKeyUsage(): Ext\ExtendedKeyUsageExtension
359
+	{
360
+		/** @var Extension\ExtendedKeyUsageExtension $keyUsage */
361
+		$keyUsage = $this->get(Ext\Extension::OID_EXT_KEY_USAGE);
362
+		return $keyUsage;
363
+	}
364
+    
365
+	/**
366
+	 * Check whether 'CRL Distribution Points' extension is present.
367
+	 *
368
+	 * @return bool
369
+	 */
370
+	public function hasCRLDistributionPoints(): bool
371
+	{
372
+		return $this->has(Ext\Extension::OID_CRL_DISTRIBUTION_POINTS);
373
+	}
374
+    
375
+	/**
376
+	 * Get 'CRL Distribution Points' extension.
377
+	 *
378
+	 * @throws \LogicException If extension is not present
379
+	 * @return \X509\Certificate\Extension\CRLDistributionPointsExtension
380
+	 */
381
+	public function crlDistributionPoints(): Ext\CRLDistributionPointsExtension
382
+	{
383
+		/** @var Extension\CRLDistributionPointsExtension $crlDist */
384
+		$crlDist = $this->get(Ext\Extension::OID_CRL_DISTRIBUTION_POINTS);
385
+		return $crlDist;
386
+	}
387
+    
388
+	/**
389
+	 * Check whether 'Inhibit anyPolicy' extension is present.
390
+	 *
391
+	 * @return bool
392
+	 */
393
+	public function hasInhibitAnyPolicy(): bool
394
+	{
395
+		return $this->has(Ext\Extension::OID_INHIBIT_ANY_POLICY);
396
+	}
397
+    
398
+	/**
399
+	 * Get 'Inhibit anyPolicy' extension.
400
+	 *
401
+	 * @throws \LogicException If extension is not present
402
+	 * @return \X509\Certificate\Extension\InhibitAnyPolicyExtension
403
+	 */
404
+	public function inhibitAnyPolicy(): Ext\InhibitAnyPolicyExtension
405
+	{
406
+		/** @var Extension\InhibitAnyPolicyExtension $inhibitAny */
407
+		$inhibitAny = $this->get(Ext\Extension::OID_INHIBIT_ANY_POLICY);
408
+		return $inhibitAny;
409
+	}
410
+    
411
+	/**
412
+	 *
413
+	 * @see \Countable::count()
414
+	 * @return int
415
+	 */
416
+	public function count(): int
417
+	{
418
+		return count($this->_extensions);
419
+	}
420
+    
421
+	/**
422
+	 * Get iterator for extensions.
423
+	 *
424
+	 * @see \IteratorAggregate::getIterator()
425
+	 * @return \Traversable
426
+	 */
427
+	public function getIterator(): \Traversable
428
+	{
429
+		return new \ArrayIterator($this->_extensions);
430
+	}
431 431
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -47,7 +47,7 @@  discard block
 block discarded – undo
47 47
     public static function fromASN1(Sequence $seq): Extensions
48 48
     {
49 49
         $extensions = array_map(
50
-            function (UnspecifiedType $el) {
50
+            function(UnspecifiedType $el) {
51 51
                 return Ext\Extension::fromASN1($el->asSequence());
52 52
             }, $seq->elements());
53 53
         return new self(...$extensions);
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
     {
63 63
         $elements = array_values(
64 64
             array_map(
65
-                function ($ext) {
65
+                function($ext) {
66 66
                     return $ext->toASN1();
67 67
                 }, $this->_extensions));
68 68
         return new Sequence(...$elements);
Please login to merge, or discard this patch.
lib/X509/Certificate/Extension/AAControlsExtension.php 1 patch
Indentation   +198 added lines, -198 removed lines patch added patch discarded remove patch
@@ -19,215 +19,215 @@
 block discarded – undo
19 19
  */
20 20
 class AAControlsExtension extends Extension
21 21
 {
22
-    /**
23
-     * Path length contraint.
24
-     *
25
-     * @var int|null $_pathLenConstraint
26
-     */
27
-    protected $_pathLenConstraint;
22
+	/**
23
+	 * Path length contraint.
24
+	 *
25
+	 * @var int|null $_pathLenConstraint
26
+	 */
27
+	protected $_pathLenConstraint;
28 28
     
29
-    /**
30
-     * Permitted attributes.
31
-     *
32
-     * Array of OID's.
33
-     *
34
-     * @var string[]|null $_permittedAttrs
35
-     */
36
-    protected $_permittedAttrs;
29
+	/**
30
+	 * Permitted attributes.
31
+	 *
32
+	 * Array of OID's.
33
+	 *
34
+	 * @var string[]|null $_permittedAttrs
35
+	 */
36
+	protected $_permittedAttrs;
37 37
     
38
-    /**
39
-     * Excluded attributes.
40
-     *
41
-     * Array of OID's.
42
-     *
43
-     * @var string[]|null $_excludedAttrs
44
-     */
45
-    protected $_excludedAttrs;
38
+	/**
39
+	 * Excluded attributes.
40
+	 *
41
+	 * Array of OID's.
42
+	 *
43
+	 * @var string[]|null $_excludedAttrs
44
+	 */
45
+	protected $_excludedAttrs;
46 46
     
47
-    /**
48
-     * Whether to permit unspecified attributes.
49
-     *
50
-     * @var bool $_permitUnSpecified
51
-     */
52
-    protected $_permitUnSpecified;
47
+	/**
48
+	 * Whether to permit unspecified attributes.
49
+	 *
50
+	 * @var bool $_permitUnSpecified
51
+	 */
52
+	protected $_permitUnSpecified;
53 53
     
54
-    /**
55
-     * Constructor.
56
-     *
57
-     * @param bool $critical
58
-     * @param int|null $path_len
59
-     * @param string[]|null $permitted
60
-     * @param string[]|null $excluded
61
-     * @param bool $permit_unspecified
62
-     */
63
-    public function __construct(bool $critical, $path_len = null,
64
-        array $permitted = null, array $excluded = null, bool $permit_unspecified = true)
65
-    {
66
-        parent::__construct(self::OID_AA_CONTROLS, $critical);
67
-        $this->_pathLenConstraint = isset($path_len) ? intval($path_len) : null;
68
-        $this->_permittedAttrs = $permitted;
69
-        $this->_excludedAttrs = $excluded;
70
-        $this->_permitUnSpecified = $permit_unspecified;
71
-    }
54
+	/**
55
+	 * Constructor.
56
+	 *
57
+	 * @param bool $critical
58
+	 * @param int|null $path_len
59
+	 * @param string[]|null $permitted
60
+	 * @param string[]|null $excluded
61
+	 * @param bool $permit_unspecified
62
+	 */
63
+	public function __construct(bool $critical, $path_len = null,
64
+		array $permitted = null, array $excluded = null, bool $permit_unspecified = true)
65
+	{
66
+		parent::__construct(self::OID_AA_CONTROLS, $critical);
67
+		$this->_pathLenConstraint = isset($path_len) ? intval($path_len) : null;
68
+		$this->_permittedAttrs = $permitted;
69
+		$this->_excludedAttrs = $excluded;
70
+		$this->_permitUnSpecified = $permit_unspecified;
71
+	}
72 72
     
73
-    /**
74
-     *
75
-     * {@inheritdoc}
76
-     * @return self
77
-     */
78
-    protected static function _fromDER(string $data, bool $critical): self
79
-    {
80
-        $seq = Sequence::fromDER($data);
81
-        $path_len = null;
82
-        $permitted = null;
83
-        $excluded = null;
84
-        $permit_unspecified = true;
85
-        $idx = 0;
86
-        if ($seq->has($idx, Element::TYPE_INTEGER)) {
87
-            $path_len = $seq->at($idx++)
88
-                ->asInteger()
89
-                ->intNumber();
90
-        }
91
-        if ($seq->hasTagged(0)) {
92
-            $attr_seq = $seq->getTagged(0)
93
-                ->asImplicit(Element::TYPE_SEQUENCE)
94
-                ->asSequence();
95
-            $permitted = array_map(
96
-                function (UnspecifiedType $el) {
97
-                    return $el->asObjectIdentifier()->oid();
98
-                }, $attr_seq->elements());
99
-            $idx++;
100
-        }
101
-        if ($seq->hasTagged(1)) {
102
-            $attr_seq = $seq->getTagged(1)
103
-                ->asImplicit(Element::TYPE_SEQUENCE)
104
-                ->asSequence();
105
-            $excluded = array_map(
106
-                function (UnspecifiedType $el) {
107
-                    return $el->asObjectIdentifier()->oid();
108
-                }, $attr_seq->elements());
109
-            $idx++;
110
-        }
111
-        if ($seq->has($idx, Element::TYPE_BOOLEAN)) {
112
-            $permit_unspecified = $seq->at($idx++)
113
-                ->asBoolean()
114
-                ->value();
115
-        }
116
-        return new self($critical, $path_len, $permitted, $excluded,
117
-            $permit_unspecified);
118
-    }
73
+	/**
74
+	 *
75
+	 * {@inheritdoc}
76
+	 * @return self
77
+	 */
78
+	protected static function _fromDER(string $data, bool $critical): self
79
+	{
80
+		$seq = Sequence::fromDER($data);
81
+		$path_len = null;
82
+		$permitted = null;
83
+		$excluded = null;
84
+		$permit_unspecified = true;
85
+		$idx = 0;
86
+		if ($seq->has($idx, Element::TYPE_INTEGER)) {
87
+			$path_len = $seq->at($idx++)
88
+				->asInteger()
89
+				->intNumber();
90
+		}
91
+		if ($seq->hasTagged(0)) {
92
+			$attr_seq = $seq->getTagged(0)
93
+				->asImplicit(Element::TYPE_SEQUENCE)
94
+				->asSequence();
95
+			$permitted = array_map(
96
+				function (UnspecifiedType $el) {
97
+					return $el->asObjectIdentifier()->oid();
98
+				}, $attr_seq->elements());
99
+			$idx++;
100
+		}
101
+		if ($seq->hasTagged(1)) {
102
+			$attr_seq = $seq->getTagged(1)
103
+				->asImplicit(Element::TYPE_SEQUENCE)
104
+				->asSequence();
105
+			$excluded = array_map(
106
+				function (UnspecifiedType $el) {
107
+					return $el->asObjectIdentifier()->oid();
108
+				}, $attr_seq->elements());
109
+			$idx++;
110
+		}
111
+		if ($seq->has($idx, Element::TYPE_BOOLEAN)) {
112
+			$permit_unspecified = $seq->at($idx++)
113
+				->asBoolean()
114
+				->value();
115
+		}
116
+		return new self($critical, $path_len, $permitted, $excluded,
117
+			$permit_unspecified);
118
+	}
119 119
     
120
-    /**
121
-     * Check whether path length constraint is present.
122
-     *
123
-     * @return bool
124
-     */
125
-    public function hasPathLen(): bool
126
-    {
127
-        return isset($this->_pathLenConstraint);
128
-    }
120
+	/**
121
+	 * Check whether path length constraint is present.
122
+	 *
123
+	 * @return bool
124
+	 */
125
+	public function hasPathLen(): bool
126
+	{
127
+		return isset($this->_pathLenConstraint);
128
+	}
129 129
     
130
-    /**
131
-     * Get path length constraint.
132
-     *
133
-     * @throws \LogicException
134
-     * @return int
135
-     */
136
-    public function pathLen(): int
137
-    {
138
-        if (!$this->hasPathLen()) {
139
-            throw new \LogicException("pathLen not set.");
140
-        }
141
-        return $this->_pathLenConstraint;
142
-    }
130
+	/**
131
+	 * Get path length constraint.
132
+	 *
133
+	 * @throws \LogicException
134
+	 * @return int
135
+	 */
136
+	public function pathLen(): int
137
+	{
138
+		if (!$this->hasPathLen()) {
139
+			throw new \LogicException("pathLen not set.");
140
+		}
141
+		return $this->_pathLenConstraint;
142
+	}
143 143
     
144
-    /**
145
-     * Check whether permitted attributes are present.
146
-     *
147
-     * @return bool
148
-     */
149
-    public function hasPermittedAttrs(): bool
150
-    {
151
-        return isset($this->_permittedAttrs);
152
-    }
144
+	/**
145
+	 * Check whether permitted attributes are present.
146
+	 *
147
+	 * @return bool
148
+	 */
149
+	public function hasPermittedAttrs(): bool
150
+	{
151
+		return isset($this->_permittedAttrs);
152
+	}
153 153
     
154
-    /**
155
-     * Get OID's of permitted attributes.
156
-     *
157
-     * @throws \LogicException
158
-     * @return string[]
159
-     */
160
-    public function permittedAttrs(): array
161
-    {
162
-        if (!$this->hasPermittedAttrs()) {
163
-            throw new \LogicException("permittedAttrs not set.");
164
-        }
165
-        return $this->_permittedAttrs;
166
-    }
154
+	/**
155
+	 * Get OID's of permitted attributes.
156
+	 *
157
+	 * @throws \LogicException
158
+	 * @return string[]
159
+	 */
160
+	public function permittedAttrs(): array
161
+	{
162
+		if (!$this->hasPermittedAttrs()) {
163
+			throw new \LogicException("permittedAttrs not set.");
164
+		}
165
+		return $this->_permittedAttrs;
166
+	}
167 167
     
168
-    /**
169
-     * Check whether excluded attributes are present.
170
-     *
171
-     * @return bool
172
-     */
173
-    public function hasExcludedAttrs(): bool
174
-    {
175
-        return isset($this->_excludedAttrs);
176
-    }
168
+	/**
169
+	 * Check whether excluded attributes are present.
170
+	 *
171
+	 * @return bool
172
+	 */
173
+	public function hasExcludedAttrs(): bool
174
+	{
175
+		return isset($this->_excludedAttrs);
176
+	}
177 177
     
178
-    /**
179
-     * Get OID's of excluded attributes.
180
-     *
181
-     * @throws \LogicException
182
-     * @return string[]
183
-     */
184
-    public function excludedAttrs(): array
185
-    {
186
-        if (!$this->hasExcludedAttrs()) {
187
-            throw new \LogicException("excludedAttrs not set.");
188
-        }
189
-        return $this->_excludedAttrs;
190
-    }
178
+	/**
179
+	 * Get OID's of excluded attributes.
180
+	 *
181
+	 * @throws \LogicException
182
+	 * @return string[]
183
+	 */
184
+	public function excludedAttrs(): array
185
+	{
186
+		if (!$this->hasExcludedAttrs()) {
187
+			throw new \LogicException("excludedAttrs not set.");
188
+		}
189
+		return $this->_excludedAttrs;
190
+	}
191 191
     
192
-    /**
193
-     * Whether to permit attributes that are not explicitly specified in
194
-     * neither permitted nor excluded list.
195
-     *
196
-     * @return bool
197
-     */
198
-    public function permitUnspecified(): bool
199
-    {
200
-        return $this->_permitUnSpecified;
201
-    }
192
+	/**
193
+	 * Whether to permit attributes that are not explicitly specified in
194
+	 * neither permitted nor excluded list.
195
+	 *
196
+	 * @return bool
197
+	 */
198
+	public function permitUnspecified(): bool
199
+	{
200
+		return $this->_permitUnSpecified;
201
+	}
202 202
     
203
-    /**
204
-     *
205
-     * {@inheritdoc}
206
-     * @return Sequence
207
-     */
208
-    protected function _valueASN1(): Sequence
209
-    {
210
-        $elements = array();
211
-        if (isset($this->_pathLenConstraint)) {
212
-            $elements[] = new Integer($this->_pathLenConstraint);
213
-        }
214
-        if (isset($this->_permittedAttrs)) {
215
-            $oids = array_map(
216
-                function ($oid) {
217
-                    return new ObjectIdentifier($oid);
218
-                }, $this->_permittedAttrs);
219
-            $elements[] = new ImplicitlyTaggedType(0, new Sequence(...$oids));
220
-        }
221
-        if (isset($this->_excludedAttrs)) {
222
-            $oids = array_map(
223
-                function ($oid) {
224
-                    return new ObjectIdentifier($oid);
225
-                }, $this->_excludedAttrs);
226
-            $elements[] = new ImplicitlyTaggedType(1, new Sequence(...$oids));
227
-        }
228
-        if ($this->_permitUnSpecified !== true) {
229
-            $elements[] = new Boolean(false);
230
-        }
231
-        return new Sequence(...$elements);
232
-    }
203
+	/**
204
+	 *
205
+	 * {@inheritdoc}
206
+	 * @return Sequence
207
+	 */
208
+	protected function _valueASN1(): Sequence
209
+	{
210
+		$elements = array();
211
+		if (isset($this->_pathLenConstraint)) {
212
+			$elements[] = new Integer($this->_pathLenConstraint);
213
+		}
214
+		if (isset($this->_permittedAttrs)) {
215
+			$oids = array_map(
216
+				function ($oid) {
217
+					return new ObjectIdentifier($oid);
218
+				}, $this->_permittedAttrs);
219
+			$elements[] = new ImplicitlyTaggedType(0, new Sequence(...$oids));
220
+		}
221
+		if (isset($this->_excludedAttrs)) {
222
+			$oids = array_map(
223
+				function ($oid) {
224
+					return new ObjectIdentifier($oid);
225
+				}, $this->_excludedAttrs);
226
+			$elements[] = new ImplicitlyTaggedType(1, new Sequence(...$oids));
227
+		}
228
+		if ($this->_permitUnSpecified !== true) {
229
+			$elements[] = new Boolean(false);
230
+		}
231
+		return new Sequence(...$elements);
232
+	}
233 233
 }
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/ObjectDigestInfo.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -20,92 +20,92 @@
 block discarded – undo
20 20
  */
21 21
 class ObjectDigestInfo
22 22
 {
23
-    const TYPE_PUBLIC_KEY = 0;
24
-    const TYPE_PUBLIC_KEY_CERT = 1;
25
-    const TYPE_OTHER_OBJECT_TYPES = 2;
23
+	const TYPE_PUBLIC_KEY = 0;
24
+	const TYPE_PUBLIC_KEY_CERT = 1;
25
+	const TYPE_OTHER_OBJECT_TYPES = 2;
26 26
     
27
-    /**
28
-     * Object type.
29
-     *
30
-     * @var int $_digestedObjectType
31
-     */
32
-    protected $_digestedObjectType;
27
+	/**
28
+	 * Object type.
29
+	 *
30
+	 * @var int $_digestedObjectType
31
+	 */
32
+	protected $_digestedObjectType;
33 33
     
34
-    /**
35
-     * OID of other object type.
36
-     *
37
-     * @var string|null $_otherObjectTypeID
38
-     */
39
-    protected $_otherObjectTypeID;
34
+	/**
35
+	 * OID of other object type.
36
+	 *
37
+	 * @var string|null $_otherObjectTypeID
38
+	 */
39
+	protected $_otherObjectTypeID;
40 40
     
41
-    /**
42
-     * Digest algorithm.
43
-     *
44
-     * @var AlgorithmIdentifierType $_digestAlgorithm
45
-     */
46
-    protected $_digestAlgorithm;
41
+	/**
42
+	 * Digest algorithm.
43
+	 *
44
+	 * @var AlgorithmIdentifierType $_digestAlgorithm
45
+	 */
46
+	protected $_digestAlgorithm;
47 47
     
48
-    /**
49
-     * Object digest.
50
-     *
51
-     * @var BitString $_objectDigest
52
-     */
53
-    protected $_objectDigest;
48
+	/**
49
+	 * Object digest.
50
+	 *
51
+	 * @var BitString $_objectDigest
52
+	 */
53
+	protected $_objectDigest;
54 54
     
55
-    /**
56
-     * Constructor.
57
-     *
58
-     * @param int $type
59
-     * @param AlgorithmIdentifierType $algo
60
-     * @param BitString $digest
61
-     */
62
-    public function __construct(int $type, AlgorithmIdentifierType $algo,
63
-        BitString $digest)
64
-    {
65
-        $this->_digestedObjectType = $type;
66
-        $this->_otherObjectTypeID = null;
67
-        $this->_digestAlgorithm = $algo;
68
-        $this->_objectDigest = $digest;
69
-    }
55
+	/**
56
+	 * Constructor.
57
+	 *
58
+	 * @param int $type
59
+	 * @param AlgorithmIdentifierType $algo
60
+	 * @param BitString $digest
61
+	 */
62
+	public function __construct(int $type, AlgorithmIdentifierType $algo,
63
+		BitString $digest)
64
+	{
65
+		$this->_digestedObjectType = $type;
66
+		$this->_otherObjectTypeID = null;
67
+		$this->_digestAlgorithm = $algo;
68
+		$this->_objectDigest = $digest;
69
+	}
70 70
     
71
-    /**
72
-     * Initialize from ASN.1.
73
-     *
74
-     * @param Sequence $seq
75
-     * @return self
76
-     */
77
-    public static function fromASN1(Sequence $seq): ObjectDigestInfo
78
-    {
79
-        $type = $seq->at(0)
80
-            ->asEnumerated()
81
-            ->intNumber();
82
-        $oid = null;
83
-        $idx = 1;
84
-        if ($seq->has($idx, Element::TYPE_OBJECT_IDENTIFIER)) {
85
-            $oid = $seq->at($idx++)
86
-                ->asObjectIdentifier()
87
-                ->oid();
88
-        }
89
-        $algo = AlgorithmIdentifier::fromASN1($seq->at($idx++)->asSequence());
90
-        $digest = $seq->at($idx)->asBitString();
91
-        $obj = new self($type, $algo, $digest);
92
-        $obj->_otherObjectTypeID = $oid;
93
-        return $obj;
94
-    }
71
+	/**
72
+	 * Initialize from ASN.1.
73
+	 *
74
+	 * @param Sequence $seq
75
+	 * @return self
76
+	 */
77
+	public static function fromASN1(Sequence $seq): ObjectDigestInfo
78
+	{
79
+		$type = $seq->at(0)
80
+			->asEnumerated()
81
+			->intNumber();
82
+		$oid = null;
83
+		$idx = 1;
84
+		if ($seq->has($idx, Element::TYPE_OBJECT_IDENTIFIER)) {
85
+			$oid = $seq->at($idx++)
86
+				->asObjectIdentifier()
87
+				->oid();
88
+		}
89
+		$algo = AlgorithmIdentifier::fromASN1($seq->at($idx++)->asSequence());
90
+		$digest = $seq->at($idx)->asBitString();
91
+		$obj = new self($type, $algo, $digest);
92
+		$obj->_otherObjectTypeID = $oid;
93
+		return $obj;
94
+	}
95 95
     
96
-    /**
97
-     * Generate ASN.1 structure.
98
-     *
99
-     * @return Sequence
100
-     */
101
-    public function toASN1(): Sequence
102
-    {
103
-        $elements = array(new Enumerated($this->_digestedObjectType));
104
-        if (isset($this->_otherObjectTypeID)) {
105
-            $elements[] = new ObjectIdentifier($this->_otherObjectTypeID);
106
-        }
107
-        $elements[] = $this->_digestAlgorithm->toASN1();
108
-        $elements[] = $this->_objectDigest;
109
-        return new Sequence(...$elements);
110
-    }
96
+	/**
97
+	 * Generate ASN.1 structure.
98
+	 *
99
+	 * @return Sequence
100
+	 */
101
+	public function toASN1(): Sequence
102
+	{
103
+		$elements = array(new Enumerated($this->_digestedObjectType));
104
+		if (isset($this->_otherObjectTypeID)) {
105
+			$elements[] = new ObjectIdentifier($this->_otherObjectTypeID);
106
+		}
107
+		$elements[] = $this->_digestAlgorithm->toASN1();
108
+		$elements[] = $this->_objectDigest;
109
+		return new Sequence(...$elements);
110
+	}
111 111
 }
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/IssuerSerial.php 1 patch
Indentation   +156 added lines, -156 removed lines patch added patch discarded remove patch
@@ -19,172 +19,172 @@
 block discarded – undo
19 19
  */
20 20
 class IssuerSerial
21 21
 {
22
-    /**
23
-     * Issuer name.
24
-     *
25
-     * @var GeneralNames $_issuer
26
-     */
27
-    protected $_issuer;
22
+	/**
23
+	 * Issuer name.
24
+	 *
25
+	 * @var GeneralNames $_issuer
26
+	 */
27
+	protected $_issuer;
28 28
     
29
-    /**
30
-     * Serial number.
31
-     *
32
-     * @var string $_serial
33
-     */
34
-    protected $_serial;
29
+	/**
30
+	 * Serial number.
31
+	 *
32
+	 * @var string $_serial
33
+	 */
34
+	protected $_serial;
35 35
     
36
-    /**
37
-     * Issuer unique ID.
38
-     *
39
-     * @var UniqueIdentifier|null $_issuerUID
40
-     */
41
-    protected $_issuerUID;
36
+	/**
37
+	 * Issuer unique ID.
38
+	 *
39
+	 * @var UniqueIdentifier|null $_issuerUID
40
+	 */
41
+	protected $_issuerUID;
42 42
     
43
-    /**
44
-     * Constructor.
45
-     *
46
-     * @param GeneralNames $issuer
47
-     * @param string|int $serial
48
-     * @param UniqueIdentifier|null $uid
49
-     */
50
-    public function __construct(GeneralNames $issuer, $serial,
51
-        UniqueIdentifier $uid = null)
52
-    {
53
-        $this->_issuer = $issuer;
54
-        $this->_serial = strval($serial);
55
-        $this->_issuerUID = $uid;
56
-    }
43
+	/**
44
+	 * Constructor.
45
+	 *
46
+	 * @param GeneralNames $issuer
47
+	 * @param string|int $serial
48
+	 * @param UniqueIdentifier|null $uid
49
+	 */
50
+	public function __construct(GeneralNames $issuer, $serial,
51
+		UniqueIdentifier $uid = null)
52
+	{
53
+		$this->_issuer = $issuer;
54
+		$this->_serial = strval($serial);
55
+		$this->_issuerUID = $uid;
56
+	}
57 57
     
58
-    /**
59
-     * Initialize from ASN.1.
60
-     *
61
-     * @param Sequence $seq
62
-     * @return self
63
-     */
64
-    public static function fromASN1(Sequence $seq): IssuerSerial
65
-    {
66
-        $issuer = GeneralNames::fromASN1($seq->at(0)->asSequence());
67
-        $serial = $seq->at(1)
68
-            ->asInteger()
69
-            ->number();
70
-        $uid = null;
71
-        if ($seq->has(2, Element::TYPE_BIT_STRING)) {
72
-            $uid = UniqueIdentifier::fromASN1($seq->at(2)->asBitString());
73
-        }
74
-        return new self($issuer, $serial, $uid);
75
-    }
58
+	/**
59
+	 * Initialize from ASN.1.
60
+	 *
61
+	 * @param Sequence $seq
62
+	 * @return self
63
+	 */
64
+	public static function fromASN1(Sequence $seq): IssuerSerial
65
+	{
66
+		$issuer = GeneralNames::fromASN1($seq->at(0)->asSequence());
67
+		$serial = $seq->at(1)
68
+			->asInteger()
69
+			->number();
70
+		$uid = null;
71
+		if ($seq->has(2, Element::TYPE_BIT_STRING)) {
72
+			$uid = UniqueIdentifier::fromASN1($seq->at(2)->asBitString());
73
+		}
74
+		return new self($issuer, $serial, $uid);
75
+	}
76 76
     
77
-    /**
78
-     * Initialize from a public key certificate.
79
-     *
80
-     * @param Certificate $cert
81
-     * @return self
82
-     */
83
-    public static function fromPKC(Certificate $cert): IssuerSerial
84
-    {
85
-        $tbsCert = $cert->tbsCertificate();
86
-        $issuer = new GeneralNames(new DirectoryName($tbsCert->issuer()));
87
-        $serial = $tbsCert->serialNumber();
88
-        $uid = $tbsCert->hasIssuerUniqueID() ? $tbsCert->issuerUniqueID() : null;
89
-        return new self($issuer, $serial, $uid);
90
-    }
77
+	/**
78
+	 * Initialize from a public key certificate.
79
+	 *
80
+	 * @param Certificate $cert
81
+	 * @return self
82
+	 */
83
+	public static function fromPKC(Certificate $cert): IssuerSerial
84
+	{
85
+		$tbsCert = $cert->tbsCertificate();
86
+		$issuer = new GeneralNames(new DirectoryName($tbsCert->issuer()));
87
+		$serial = $tbsCert->serialNumber();
88
+		$uid = $tbsCert->hasIssuerUniqueID() ? $tbsCert->issuerUniqueID() : null;
89
+		return new self($issuer, $serial, $uid);
90
+	}
91 91
     
92
-    /**
93
-     * Get issuer name.
94
-     *
95
-     * @return GeneralNames
96
-     */
97
-    public function issuer(): GeneralNames
98
-    {
99
-        return $this->_issuer;
100
-    }
92
+	/**
93
+	 * Get issuer name.
94
+	 *
95
+	 * @return GeneralNames
96
+	 */
97
+	public function issuer(): GeneralNames
98
+	{
99
+		return $this->_issuer;
100
+	}
101 101
     
102
-    /**
103
-     * Get serial number.
104
-     *
105
-     * @return string
106
-     */
107
-    public function serial(): string
108
-    {
109
-        return $this->_serial;
110
-    }
102
+	/**
103
+	 * Get serial number.
104
+	 *
105
+	 * @return string
106
+	 */
107
+	public function serial(): string
108
+	{
109
+		return $this->_serial;
110
+	}
111 111
     
112
-    /**
113
-     * Check whether issuer unique identifier is present.
114
-     *
115
-     * @return bool
116
-     */
117
-    public function hasIssuerUID(): bool
118
-    {
119
-        return isset($this->_issuerUID);
120
-    }
112
+	/**
113
+	 * Check whether issuer unique identifier is present.
114
+	 *
115
+	 * @return bool
116
+	 */
117
+	public function hasIssuerUID(): bool
118
+	{
119
+		return isset($this->_issuerUID);
120
+	}
121 121
     
122
-    /**
123
-     * Get issuer unique identifier.
124
-     *
125
-     * @throws \LogicException
126
-     * @return UniqueIdentifier
127
-     */
128
-    public function issuerUID(): UniqueIdentifier
129
-    {
130
-        if (!$this->hasIssuerUID()) {
131
-            throw new \LogicException("issuerUID not set.");
132
-        }
133
-        return $this->_issuerUID;
134
-    }
122
+	/**
123
+	 * Get issuer unique identifier.
124
+	 *
125
+	 * @throws \LogicException
126
+	 * @return UniqueIdentifier
127
+	 */
128
+	public function issuerUID(): UniqueIdentifier
129
+	{
130
+		if (!$this->hasIssuerUID()) {
131
+			throw new \LogicException("issuerUID not set.");
132
+		}
133
+		return $this->_issuerUID;
134
+	}
135 135
     
136
-    /**
137
-     * Generate ASN.1 structure.
138
-     *
139
-     * @return Sequence
140
-     */
141
-    public function toASN1(): Sequence
142
-    {
143
-        $elements = array($this->_issuer->toASN1(), new Integer($this->_serial));
144
-        if (isset($this->_issuerUID)) {
145
-            $elements[] = $this->_issuerUID->toASN1();
146
-        }
147
-        return new Sequence(...$elements);
148
-    }
136
+	/**
137
+	 * Generate ASN.1 structure.
138
+	 *
139
+	 * @return Sequence
140
+	 */
141
+	public function toASN1(): Sequence
142
+	{
143
+		$elements = array($this->_issuer->toASN1(), new Integer($this->_serial));
144
+		if (isset($this->_issuerUID)) {
145
+			$elements[] = $this->_issuerUID->toASN1();
146
+		}
147
+		return new Sequence(...$elements);
148
+	}
149 149
     
150
-    /**
151
-     * Check whether this IssuerSerial identifies given certificate.
152
-     *
153
-     * @param Certificate $cert
154
-     * @return boolean
155
-     */
156
-    public function identifiesPKC(Certificate $cert): bool
157
-    {
158
-        $tbs = $cert->tbsCertificate();
159
-        if (!$tbs->issuer()->equals($this->_issuer->firstDN())) {
160
-            return false;
161
-        }
162
-        if (strval($tbs->serialNumber()) != strval($this->_serial)) {
163
-            return false;
164
-        }
165
-        if ($this->_issuerUID && !$this->_checkUniqueID($cert)) {
166
-            return false;
167
-        }
168
-        return true;
169
-    }
150
+	/**
151
+	 * Check whether this IssuerSerial identifies given certificate.
152
+	 *
153
+	 * @param Certificate $cert
154
+	 * @return boolean
155
+	 */
156
+	public function identifiesPKC(Certificate $cert): bool
157
+	{
158
+		$tbs = $cert->tbsCertificate();
159
+		if (!$tbs->issuer()->equals($this->_issuer->firstDN())) {
160
+			return false;
161
+		}
162
+		if (strval($tbs->serialNumber()) != strval($this->_serial)) {
163
+			return false;
164
+		}
165
+		if ($this->_issuerUID && !$this->_checkUniqueID($cert)) {
166
+			return false;
167
+		}
168
+		return true;
169
+	}
170 170
     
171
-    /**
172
-     * Check whether issuerUID matches given certificate.
173
-     *
174
-     * @param Certificate $cert
175
-     * @return boolean
176
-     */
177
-    private function _checkUniqueID(Certificate $cert): bool
178
-    {
179
-        if (!$cert->tbsCertificate()->hasIssuerUniqueID()) {
180
-            return false;
181
-        }
182
-        $uid = $cert->tbsCertificate()
183
-            ->issuerUniqueID()
184
-            ->string();
185
-        if ($this->_issuerUID->string() != $uid) {
186
-            return false;
187
-        }
188
-        return true;
189
-    }
171
+	/**
172
+	 * Check whether issuerUID matches given certificate.
173
+	 *
174
+	 * @param Certificate $cert
175
+	 * @return boolean
176
+	 */
177
+	private function _checkUniqueID(Certificate $cert): bool
178
+	{
179
+		if (!$cert->tbsCertificate()->hasIssuerUniqueID()) {
180
+			return false;
181
+		}
182
+		$uid = $cert->tbsCertificate()
183
+			->issuerUniqueID()
184
+			->string();
185
+		if ($this->_issuerUID->string() != $uid) {
186
+			return false;
187
+		}
188
+		return true;
189
+	}
190 190
 }
Please login to merge, or discard this patch.