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 ( ff3a63...584877 )
by Joni
04:52
created
lib/X509/AttributeCertificate/Attribute/IetfAttrSyntax.php 2 patches
Indentation   +183 added lines, -183 removed lines patch added patch discarded remove patch
@@ -17,203 +17,203 @@
 block discarded – undo
17 17
  * @link https://tools.ietf.org/html/rfc5755#section-4.4
18 18
  */
19 19
 abstract class IetfAttrSyntax extends AttributeValue implements 
20
-    \Countable,
21
-    \IteratorAggregate
20
+	\Countable,
21
+	\IteratorAggregate
22 22
 {
23
-    /**
24
-     * Policy authority.
25
-     *
26
-     * @var GeneralNames|null $_policyAuthority
27
-     */
28
-    protected $_policyAuthority;
23
+	/**
24
+	 * Policy authority.
25
+	 *
26
+	 * @var GeneralNames|null $_policyAuthority
27
+	 */
28
+	protected $_policyAuthority;
29 29
     
30
-    /**
31
-     * Values.
32
-     *
33
-     * @var IetfAttrValue[] $_values
34
-     */
35
-    protected $_values;
30
+	/**
31
+	 * Values.
32
+	 *
33
+	 * @var IetfAttrValue[] $_values
34
+	 */
35
+	protected $_values;
36 36
     
37
-    /**
38
-     * Constructor.
39
-     *
40
-     * @param IetfAttrValue ...$values
41
-     */
42
-    public function __construct(IetfAttrValue ...$values)
43
-    {
44
-        $this->_policyAuthority = null;
45
-        $this->_values = $values;
46
-    }
37
+	/**
38
+	 * Constructor.
39
+	 *
40
+	 * @param IetfAttrValue ...$values
41
+	 */
42
+	public function __construct(IetfAttrValue ...$values)
43
+	{
44
+		$this->_policyAuthority = null;
45
+		$this->_values = $values;
46
+	}
47 47
     
48
-    /**
49
-     *
50
-     * @param UnspecifiedType $el
51
-     * @return self
52
-     */
53
-    public static function fromASN1(UnspecifiedType $el)
54
-    {
55
-        $seq = $el->asSequence();
56
-        $authority = null;
57
-        $idx = 0;
58
-        if ($seq->hasTagged(0)) {
59
-            $authority = GeneralNames::fromASN1(
60
-                $seq->getTagged(0)
61
-                    ->asImplicit(Element::TYPE_SEQUENCE)
62
-                    ->asSequence());
63
-            ++$idx;
64
-        }
65
-        $values = array_map(
66
-            function (UnspecifiedType $el) {
67
-                return IetfAttrValue::fromASN1($el);
68
-            },
69
-            $seq->at($idx)
70
-                ->asSequence()
71
-                ->elements());
72
-        $obj = new static(...$values);
73
-        $obj->_policyAuthority = $authority;
74
-        return $obj;
75
-    }
48
+	/**
49
+	 *
50
+	 * @param UnspecifiedType $el
51
+	 * @return self
52
+	 */
53
+	public static function fromASN1(UnspecifiedType $el)
54
+	{
55
+		$seq = $el->asSequence();
56
+		$authority = null;
57
+		$idx = 0;
58
+		if ($seq->hasTagged(0)) {
59
+			$authority = GeneralNames::fromASN1(
60
+				$seq->getTagged(0)
61
+					->asImplicit(Element::TYPE_SEQUENCE)
62
+					->asSequence());
63
+			++$idx;
64
+		}
65
+		$values = array_map(
66
+			function (UnspecifiedType $el) {
67
+				return IetfAttrValue::fromASN1($el);
68
+			},
69
+			$seq->at($idx)
70
+				->asSequence()
71
+				->elements());
72
+		$obj = new static(...$values);
73
+		$obj->_policyAuthority = $authority;
74
+		return $obj;
75
+	}
76 76
     
77
-    /**
78
-     * Get self with policy authority.
79
-     *
80
-     * @param GeneralNames $names
81
-     * @return self
82
-     */
83
-    public function withPolicyAuthority(GeneralNames $names)
84
-    {
85
-        $obj = clone $this;
86
-        $obj->_policyAuthority = $names;
87
-        return $obj;
88
-    }
77
+	/**
78
+	 * Get self with policy authority.
79
+	 *
80
+	 * @param GeneralNames $names
81
+	 * @return self
82
+	 */
83
+	public function withPolicyAuthority(GeneralNames $names)
84
+	{
85
+		$obj = clone $this;
86
+		$obj->_policyAuthority = $names;
87
+		return $obj;
88
+	}
89 89
     
90
-    /**
91
-     * Check whether policy authority is present.
92
-     *
93
-     * @return bool
94
-     */
95
-    public function hasPolicyAuthority()
96
-    {
97
-        return isset($this->_policyAuthority);
98
-    }
90
+	/**
91
+	 * Check whether policy authority is present.
92
+	 *
93
+	 * @return bool
94
+	 */
95
+	public function hasPolicyAuthority()
96
+	{
97
+		return isset($this->_policyAuthority);
98
+	}
99 99
     
100
-    /**
101
-     * Get policy authority.
102
-     *
103
-     * @throws \LogicException
104
-     * @return GeneralNames
105
-     */
106
-    public function policyAuthority()
107
-    {
108
-        if (!$this->hasPolicyAuthority()) {
109
-            throw new \LogicException("policyAuthority not set.");
110
-        }
111
-        return $this->_policyAuthority;
112
-    }
100
+	/**
101
+	 * Get policy authority.
102
+	 *
103
+	 * @throws \LogicException
104
+	 * @return GeneralNames
105
+	 */
106
+	public function policyAuthority()
107
+	{
108
+		if (!$this->hasPolicyAuthority()) {
109
+			throw new \LogicException("policyAuthority not set.");
110
+		}
111
+		return $this->_policyAuthority;
112
+	}
113 113
     
114
-    /**
115
-     * Get values.
116
-     *
117
-     * @return IetfAttrValue[]
118
-     */
119
-    public function values()
120
-    {
121
-        return $this->_values;
122
-    }
114
+	/**
115
+	 * Get values.
116
+	 *
117
+	 * @return IetfAttrValue[]
118
+	 */
119
+	public function values()
120
+	{
121
+		return $this->_values;
122
+	}
123 123
     
124
-    /**
125
-     * Get first value.
126
-     *
127
-     * @throws \LogicException
128
-     * @return IetfAttrValue
129
-     */
130
-    public function first()
131
-    {
132
-        if (!count($this->_values)) {
133
-            throw new \LogicException("No values.");
134
-        }
135
-        return $this->_values[0];
136
-    }
124
+	/**
125
+	 * Get first value.
126
+	 *
127
+	 * @throws \LogicException
128
+	 * @return IetfAttrValue
129
+	 */
130
+	public function first()
131
+	{
132
+		if (!count($this->_values)) {
133
+			throw new \LogicException("No values.");
134
+		}
135
+		return $this->_values[0];
136
+	}
137 137
     
138
-    /**
139
-     *
140
-     * @see \X501\ASN1\AttributeValue\AttributeValue::toASN1()
141
-     * @return Sequence
142
-     */
143
-    public function toASN1()
144
-    {
145
-        $elements = array();
146
-        if (isset($this->_policyAuthority)) {
147
-            $elements[] = new ImplicitlyTaggedType(0,
148
-                $this->_policyAuthority->toASN1());
149
-        }
150
-        $values = array_map(
151
-            function (IetfAttrValue $val) {
152
-                return $val->toASN1();
153
-            }, $this->_values);
154
-        $elements[] = new Sequence(...$values);
155
-        return new Sequence(...$elements);
156
-    }
138
+	/**
139
+	 *
140
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::toASN1()
141
+	 * @return Sequence
142
+	 */
143
+	public function toASN1()
144
+	{
145
+		$elements = array();
146
+		if (isset($this->_policyAuthority)) {
147
+			$elements[] = new ImplicitlyTaggedType(0,
148
+				$this->_policyAuthority->toASN1());
149
+		}
150
+		$values = array_map(
151
+			function (IetfAttrValue $val) {
152
+				return $val->toASN1();
153
+			}, $this->_values);
154
+		$elements[] = new Sequence(...$values);
155
+		return new Sequence(...$elements);
156
+	}
157 157
     
158
-    /**
159
-     *
160
-     * @see \X501\ASN1\AttributeValue\AttributeValue::stringValue()
161
-     * @return string
162
-     */
163
-    public function stringValue()
164
-    {
165
-        return "#" . bin2hex($this->toASN1()->toDER());
166
-    }
158
+	/**
159
+	 *
160
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::stringValue()
161
+	 * @return string
162
+	 */
163
+	public function stringValue()
164
+	{
165
+		return "#" . bin2hex($this->toASN1()->toDER());
166
+	}
167 167
     
168
-    /**
169
-     *
170
-     * @see \X501\ASN1\AttributeValue\AttributeValue::equalityMatchingRule()
171
-     * @return BinaryMatch
172
-     */
173
-    public function equalityMatchingRule()
174
-    {
175
-        return new BinaryMatch();
176
-    }
168
+	/**
169
+	 *
170
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::equalityMatchingRule()
171
+	 * @return BinaryMatch
172
+	 */
173
+	public function equalityMatchingRule()
174
+	{
175
+		return new BinaryMatch();
176
+	}
177 177
     
178
-    /**
179
-     *
180
-     * @see \X501\ASN1\AttributeValue\AttributeValue::rfc2253String()
181
-     * @return string
182
-     */
183
-    public function rfc2253String()
184
-    {
185
-        return $this->stringValue();
186
-    }
178
+	/**
179
+	 *
180
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::rfc2253String()
181
+	 * @return string
182
+	 */
183
+	public function rfc2253String()
184
+	{
185
+		return $this->stringValue();
186
+	}
187 187
     
188
-    /**
189
-     *
190
-     * @see \X501\ASN1\AttributeValue\AttributeValue::_transcodedString()
191
-     * @return string
192
-     */
193
-    protected function _transcodedString()
194
-    {
195
-        return $this->stringValue();
196
-    }
188
+	/**
189
+	 *
190
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::_transcodedString()
191
+	 * @return string
192
+	 */
193
+	protected function _transcodedString()
194
+	{
195
+		return $this->stringValue();
196
+	}
197 197
     
198
-    /**
199
-     * Get number of values.
200
-     *
201
-     * @see \Countable::count()
202
-     * @return int
203
-     */
204
-    public function count()
205
-    {
206
-        return count($this->_values);
207
-    }
198
+	/**
199
+	 * Get number of values.
200
+	 *
201
+	 * @see \Countable::count()
202
+	 * @return int
203
+	 */
204
+	public function count()
205
+	{
206
+		return count($this->_values);
207
+	}
208 208
     
209
-    /**
210
-     * Get iterator for values.
211
-     *
212
-     * @see \IteratorAggregate::getIterator()
213
-     * @return \ArrayIterator
214
-     */
215
-    public function getIterator()
216
-    {
217
-        return new \ArrayIterator($this->_values);
218
-    }
209
+	/**
210
+	 * Get iterator for values.
211
+	 *
212
+	 * @see \IteratorAggregate::getIterator()
213
+	 * @return \ArrayIterator
214
+	 */
215
+	public function getIterator()
216
+	{
217
+		return new \ArrayIterator($this->_values);
218
+	}
219 219
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -63,7 +63,7 @@  discard block
 block discarded – undo
63 63
             ++$idx;
64 64
         }
65 65
         $values = array_map(
66
-            function (UnspecifiedType $el) {
66
+            function(UnspecifiedType $el) {
67 67
                 return IetfAttrValue::fromASN1($el);
68 68
             },
69 69
             $seq->at($idx)
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
                 $this->_policyAuthority->toASN1());
149 149
         }
150 150
         $values = array_map(
151
-            function (IetfAttrValue $val) {
151
+            function(IetfAttrValue $val) {
152 152
                 return $val->toASN1();
153 153
             }, $this->_values);
154 154
         $elements[] = new Sequence(...$values);
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/Attribute/SvceAuthInfo.php 1 patch
Indentation   +139 added lines, -139 removed lines patch added patch discarded remove patch
@@ -18,156 +18,156 @@
 block discarded – undo
18 18
  */
19 19
 abstract class SvceAuthInfo extends AttributeValue
20 20
 {
21
-    /**
22
-     * Service.
23
-     *
24
-     * @var GeneralName $_service
25
-     */
26
-    protected $_service;
21
+	/**
22
+	 * Service.
23
+	 *
24
+	 * @var GeneralName $_service
25
+	 */
26
+	protected $_service;
27 27
     
28
-    /**
29
-     * Ident.
30
-     *
31
-     * @var GeneralName $_ident
32
-     */
33
-    protected $_ident;
28
+	/**
29
+	 * Ident.
30
+	 *
31
+	 * @var GeneralName $_ident
32
+	 */
33
+	protected $_ident;
34 34
     
35
-    /**
36
-     * Auth info.
37
-     *
38
-     * @var string|null $_authInfo
39
-     */
40
-    protected $_authInfo;
35
+	/**
36
+	 * Auth info.
37
+	 *
38
+	 * @var string|null $_authInfo
39
+	 */
40
+	protected $_authInfo;
41 41
     
42
-    /**
43
-     * Constructor.
44
-     *
45
-     * @param GeneralName $service
46
-     * @param GeneralName $ident
47
-     * @param string|null $auth_info
48
-     */
49
-    public function __construct(GeneralName $service, GeneralName $ident,
50
-        $auth_info = null)
51
-    {
52
-        $this->_service = $service;
53
-        $this->_ident = $ident;
54
-        $this->_authInfo = $auth_info;
55
-    }
42
+	/**
43
+	 * Constructor.
44
+	 *
45
+	 * @param GeneralName $service
46
+	 * @param GeneralName $ident
47
+	 * @param string|null $auth_info
48
+	 */
49
+	public function __construct(GeneralName $service, GeneralName $ident,
50
+		$auth_info = null)
51
+	{
52
+		$this->_service = $service;
53
+		$this->_ident = $ident;
54
+		$this->_authInfo = $auth_info;
55
+	}
56 56
     
57
-    /**
58
-     *
59
-     * @param UnspecifiedType $el
60
-     * @return self
61
-     */
62
-    public static function fromASN1(UnspecifiedType $el)
63
-    {
64
-        $seq = $el->asSequence();
65
-        $service = GeneralName::fromASN1($seq->at(0)->asTagged());
66
-        $ident = GeneralName::fromASN1($seq->at(1)->asTagged());
67
-        $auth_info = null;
68
-        if ($seq->has(2, Element::TYPE_OCTET_STRING)) {
69
-            $auth_info = $seq->at(2)
70
-                ->asString()
71
-                ->string();
72
-        }
73
-        return new static($service, $ident, $auth_info);
74
-    }
57
+	/**
58
+	 *
59
+	 * @param UnspecifiedType $el
60
+	 * @return self
61
+	 */
62
+	public static function fromASN1(UnspecifiedType $el)
63
+	{
64
+		$seq = $el->asSequence();
65
+		$service = GeneralName::fromASN1($seq->at(0)->asTagged());
66
+		$ident = GeneralName::fromASN1($seq->at(1)->asTagged());
67
+		$auth_info = null;
68
+		if ($seq->has(2, Element::TYPE_OCTET_STRING)) {
69
+			$auth_info = $seq->at(2)
70
+				->asString()
71
+				->string();
72
+		}
73
+		return new static($service, $ident, $auth_info);
74
+	}
75 75
     
76
-    /**
77
-     * Get service name.
78
-     *
79
-     * @return GeneralName
80
-     */
81
-    public function service()
82
-    {
83
-        return $this->_service;
84
-    }
76
+	/**
77
+	 * Get service name.
78
+	 *
79
+	 * @return GeneralName
80
+	 */
81
+	public function service()
82
+	{
83
+		return $this->_service;
84
+	}
85 85
     
86
-    /**
87
-     * Get ident.
88
-     *
89
-     * @return GeneralName
90
-     */
91
-    public function ident()
92
-    {
93
-        return $this->_ident;
94
-    }
86
+	/**
87
+	 * Get ident.
88
+	 *
89
+	 * @return GeneralName
90
+	 */
91
+	public function ident()
92
+	{
93
+		return $this->_ident;
94
+	}
95 95
     
96
-    /**
97
-     * Check whether authentication info is present.
98
-     *
99
-     * @return bool
100
-     */
101
-    public function hasAuthInfo()
102
-    {
103
-        return isset($this->_authInfo);
104
-    }
96
+	/**
97
+	 * Check whether authentication info is present.
98
+	 *
99
+	 * @return bool
100
+	 */
101
+	public function hasAuthInfo()
102
+	{
103
+		return isset($this->_authInfo);
104
+	}
105 105
     
106
-    /**
107
-     * Get authentication info.
108
-     *
109
-     * @throws \LogicException
110
-     * @return string
111
-     */
112
-    public function authInfo()
113
-    {
114
-        if (!$this->hasAuthInfo()) {
115
-            throw new \LogicException("authInfo not set.");
116
-        }
117
-        return $this->_authInfo;
118
-    }
106
+	/**
107
+	 * Get authentication info.
108
+	 *
109
+	 * @throws \LogicException
110
+	 * @return string
111
+	 */
112
+	public function authInfo()
113
+	{
114
+		if (!$this->hasAuthInfo()) {
115
+			throw new \LogicException("authInfo not set.");
116
+		}
117
+		return $this->_authInfo;
118
+	}
119 119
     
120
-    /**
121
-     *
122
-     * @see \X501\ASN1\AttributeValue\AttributeValue::toASN1()
123
-     * @return Sequence
124
-     */
125
-    public function toASN1()
126
-    {
127
-        $elements = array($this->_service->toASN1(), $this->_ident->toASN1());
128
-        if (isset($this->_authInfo)) {
129
-            $elements[] = new OctetString($this->_authInfo);
130
-        }
131
-        return new Sequence(...$elements);
132
-    }
120
+	/**
121
+	 *
122
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::toASN1()
123
+	 * @return Sequence
124
+	 */
125
+	public function toASN1()
126
+	{
127
+		$elements = array($this->_service->toASN1(), $this->_ident->toASN1());
128
+		if (isset($this->_authInfo)) {
129
+			$elements[] = new OctetString($this->_authInfo);
130
+		}
131
+		return new Sequence(...$elements);
132
+	}
133 133
     
134
-    /**
135
-     *
136
-     * @see \X501\ASN1\AttributeValue\AttributeValue::stringValue()
137
-     * @return string
138
-     */
139
-    public function stringValue()
140
-    {
141
-        return "#" . bin2hex($this->toASN1()->toDER());
142
-    }
134
+	/**
135
+	 *
136
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::stringValue()
137
+	 * @return string
138
+	 */
139
+	public function stringValue()
140
+	{
141
+		return "#" . bin2hex($this->toASN1()->toDER());
142
+	}
143 143
     
144
-    /**
145
-     *
146
-     * @see \X501\ASN1\AttributeValue\AttributeValue::equalityMatchingRule()
147
-     * @return BinaryMatch
148
-     */
149
-    public function equalityMatchingRule()
150
-    {
151
-        return new BinaryMatch();
152
-    }
144
+	/**
145
+	 *
146
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::equalityMatchingRule()
147
+	 * @return BinaryMatch
148
+	 */
149
+	public function equalityMatchingRule()
150
+	{
151
+		return new BinaryMatch();
152
+	}
153 153
     
154
-    /**
155
-     *
156
-     * @see \X501\ASN1\AttributeValue\AttributeValue::rfc2253String()
157
-     * @return string
158
-     */
159
-    public function rfc2253String()
160
-    {
161
-        return $this->stringValue();
162
-    }
154
+	/**
155
+	 *
156
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::rfc2253String()
157
+	 * @return string
158
+	 */
159
+	public function rfc2253String()
160
+	{
161
+		return $this->stringValue();
162
+	}
163 163
     
164
-    /**
165
-     *
166
-     * @see \X501\ASN1\AttributeValue\AttributeValue::_transcodedString()
167
-     * @return string
168
-     */
169
-    protected function _transcodedString()
170
-    {
171
-        return $this->stringValue();
172
-    }
164
+	/**
165
+	 *
166
+	 * @see \X501\ASN1\AttributeValue\AttributeValue::_transcodedString()
167
+	 * @return string
168
+	 */
169
+	protected function _transcodedString()
170
+	{
171
+		return $this->stringValue();
172
+	}
173 173
 }
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/Attribute/AccessIdentityAttributeValue.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -11,17 +11,17 @@
 block discarded – undo
11 11
  */
12 12
 class AccessIdentityAttributeValue extends SvceAuthInfo
13 13
 {
14
-    const OID = "1.3.6.1.5.5.7.10.2";
14
+	const OID = "1.3.6.1.5.5.7.10.2";
15 15
     
16
-    /**
17
-     * Constructor.
18
-     *
19
-     * @param GeneralName $service
20
-     * @param GeneralName $ident
21
-     */
22
-    public function __construct(GeneralName $service, GeneralName $ident)
23
-    {
24
-        parent::__construct($service, $ident, null);
25
-        $this->_oid = self::OID;
26
-    }
16
+	/**
17
+	 * Constructor.
18
+	 *
19
+	 * @param GeneralName $service
20
+	 * @param GeneralName $ident
21
+	 */
22
+	public function __construct(GeneralName $service, GeneralName $ident)
23
+	{
24
+		parent::__construct($service, $ident, null);
25
+		$this->_oid = self::OID;
26
+	}
27 27
 }
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/Attribute/GroupAttributeValue.php 1 patch
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -9,16 +9,16 @@
 block discarded – undo
9 9
  */
10 10
 class GroupAttributeValue extends IetfAttrSyntax
11 11
 {
12
-    const OID = "1.3.6.1.5.5.7.10.4";
12
+	const OID = "1.3.6.1.5.5.7.10.4";
13 13
     
14
-    /**
15
-     * Constructor.
16
-     *
17
-     * @param IetfAttrValue ...$values
18
-     */
19
-    public function __construct(IetfAttrValue ...$values)
20
-    {
21
-        parent::__construct(...$values);
22
-        $this->_oid = self::OID;
23
-    }
14
+	/**
15
+	 * Constructor.
16
+	 *
17
+	 * @param IetfAttrValue ...$values
18
+	 */
19
+	public function __construct(IetfAttrValue ...$values)
20
+	{
21
+		parent::__construct(...$values);
22
+		$this->_oid = self::OID;
23
+	}
24 24
 }
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/Attributes.php 2 patches
Indentation   +196 added lines, -196 removed lines patch added patch discarded remove patch
@@ -24,200 +24,200 @@
 block discarded – undo
24 24
  */
25 25
 class Attributes implements \Countable, \IteratorAggregate
26 26
 {
27
-    use AttributeContainer;
28
-    
29
-    /**
30
-     * Mapping from OID to attribute value class name.
31
-     *
32
-     * @internal
33
-     *
34
-     * @var array
35
-     */
36
-    const MAP_OID_TO_CLASS = array(
37
-        /* @formatter:off */
38
-        AccessIdentityAttributeValue::OID => AccessIdentityAttributeValue::class,
39
-        AuthenticationInfoAttributeValue::OID => AuthenticationInfoAttributeValue::class,
40
-        ChargingIdentityAttributeValue::OID => ChargingIdentityAttributeValue::class,
41
-        GroupAttributeValue::OID => GroupAttributeValue::class,
42
-        AttributeType::OID_ROLE => RoleAttributeValue::class
43
-        /* @formatter:on */
44
-    );
45
-    
46
-    /**
47
-     * Constructor.
48
-     *
49
-     * @param Attribute ...$attribs
50
-     */
51
-    public function __construct(Attribute ...$attribs)
52
-    {
53
-        $this->_attributes = $attribs;
54
-    }
55
-    
56
-    /**
57
-     * Initialize from attribute values.
58
-     *
59
-     * @param AttributeValue ...$values
60
-     * @return self
61
-     */
62
-    public static function fromAttributeValues(AttributeValue ...$values)
63
-    {
64
-        $attribs = array_map(
65
-            function (AttributeValue $value) {
66
-                return $value->toAttribute();
67
-            }, $values);
68
-        return new self(...$attribs);
69
-    }
70
-    
71
-    /**
72
-     * Initialize from ASN.1.
73
-     *
74
-     * @param Sequence $seq
75
-     * @return self
76
-     */
77
-    public static function fromASN1(Sequence $seq)
78
-    {
79
-        $attribs = array_map(
80
-            function (UnspecifiedType $el) {
81
-                return Attribute::fromASN1($el->asSequence());
82
-            }, $seq->elements());
83
-        // cast attributes
84
-        $attribs = array_map(
85
-            function (Attribute $attr) {
86
-                $oid = $attr->oid();
87
-                if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
88
-                    $cls = self::MAP_OID_TO_CLASS[$oid];
89
-                    $attr = $attr->castValues($cls);
90
-                }
91
-                return $attr;
92
-            }, $attribs);
93
-        return new self(...$attribs);
94
-    }
95
-    
96
-    /**
97
-     * Check whether 'Access Identity' attribute is present.
98
-     *
99
-     * @return bool
100
-     */
101
-    public function hasAccessIdentity()
102
-    {
103
-        return $this->has(AccessIdentityAttributeValue::OID);
104
-    }
105
-    
106
-    /**
107
-     * Get the first 'Access Identity' attribute value.
108
-     *
109
-     * @return AccessIdentityAttributeValue
110
-     */
111
-    public function accessIdentity()
112
-    {
113
-        return $this->firstOf(AccessIdentityAttributeValue::OID)->first();
114
-    }
115
-    
116
-    /**
117
-     * Check whether 'Service Authentication Information' attribute is present.
118
-     *
119
-     * @return bool
120
-     */
121
-    public function hasAuthenticationInformation()
122
-    {
123
-        return $this->has(AuthenticationInfoAttributeValue::OID);
124
-    }
125
-    
126
-    /**
127
-     * Get the first 'Service Authentication Information' attribute value.
128
-     *
129
-     * @return AuthenticationInfoAttributeValue
130
-     */
131
-    public function authenticationInformation()
132
-    {
133
-        return $this->firstOf(AuthenticationInfoAttributeValue::OID)->first();
134
-    }
135
-    
136
-    /**
137
-     * Check whether 'Charging Identity' attribute is present.
138
-     *
139
-     * @return bool
140
-     */
141
-    public function hasChargingIdentity()
142
-    {
143
-        return $this->has(ChargingIdentityAttributeValue::OID);
144
-    }
145
-    
146
-    /**
147
-     * Get the first 'Charging Identity' attribute value.
148
-     *
149
-     * @return ChargingIdentityAttributeValue
150
-     */
151
-    public function chargingIdentity()
152
-    {
153
-        return $this->firstOf(ChargingIdentityAttributeValue::OID)->first();
154
-    }
155
-    
156
-    /**
157
-     * Check whether 'Group' attribute is present.
158
-     *
159
-     * @return bool
160
-     */
161
-    public function hasGroup()
162
-    {
163
-        return $this->has(GroupAttributeValue::OID);
164
-    }
165
-    
166
-    /**
167
-     * Get the first 'Group' attribute value.
168
-     *
169
-     * @return GroupAttributeValue
170
-     */
171
-    public function group()
172
-    {
173
-        return $this->firstOf(GroupAttributeValue::OID)->first();
174
-    }
175
-    
176
-    /**
177
-     * Check whether 'Role' attribute is present.
178
-     *
179
-     * @return bool
180
-     */
181
-    public function hasRole()
182
-    {
183
-        return $this->has(AttributeType::OID_ROLE);
184
-    }
185
-    
186
-    /**
187
-     * Get the first 'Role' attribute value.
188
-     *
189
-     * @return RoleAttributeValue
190
-     */
191
-    public function role()
192
-    {
193
-        return $this->firstOf(AttributeType::OID_ROLE)->first();
194
-    }
195
-    
196
-    /**
197
-     * Get all 'Role' attribute values.
198
-     *
199
-     * @return RoleAttributeValue[]
200
-     */
201
-    public function roles()
202
-    {
203
-        return array_merge(array(),
204
-            ...array_map(
205
-                function (Attribute $attr) {
206
-                    return $attr->values();
207
-                }, $this->allOf(AttributeType::OID_ROLE)));
208
-    }
209
-    
210
-    /**
211
-     * Generate ASN.1 structure.
212
-     *
213
-     * @return Sequence
214
-     */
215
-    public function toASN1()
216
-    {
217
-        $elements = array_map(
218
-            function (Attribute $attr) {
219
-                return $attr->toASN1();
220
-            }, array_values($this->_attributes));
221
-        return new Sequence(...$elements);
222
-    }
27
+	use AttributeContainer;
28
+    
29
+	/**
30
+	 * Mapping from OID to attribute value class name.
31
+	 *
32
+	 * @internal
33
+	 *
34
+	 * @var array
35
+	 */
36
+	const MAP_OID_TO_CLASS = array(
37
+		/* @formatter:off */
38
+		AccessIdentityAttributeValue::OID => AccessIdentityAttributeValue::class,
39
+		AuthenticationInfoAttributeValue::OID => AuthenticationInfoAttributeValue::class,
40
+		ChargingIdentityAttributeValue::OID => ChargingIdentityAttributeValue::class,
41
+		GroupAttributeValue::OID => GroupAttributeValue::class,
42
+		AttributeType::OID_ROLE => RoleAttributeValue::class
43
+		/* @formatter:on */
44
+	);
45
+    
46
+	/**
47
+	 * Constructor.
48
+	 *
49
+	 * @param Attribute ...$attribs
50
+	 */
51
+	public function __construct(Attribute ...$attribs)
52
+	{
53
+		$this->_attributes = $attribs;
54
+	}
55
+    
56
+	/**
57
+	 * Initialize from attribute values.
58
+	 *
59
+	 * @param AttributeValue ...$values
60
+	 * @return self
61
+	 */
62
+	public static function fromAttributeValues(AttributeValue ...$values)
63
+	{
64
+		$attribs = array_map(
65
+			function (AttributeValue $value) {
66
+				return $value->toAttribute();
67
+			}, $values);
68
+		return new self(...$attribs);
69
+	}
70
+    
71
+	/**
72
+	 * Initialize from ASN.1.
73
+	 *
74
+	 * @param Sequence $seq
75
+	 * @return self
76
+	 */
77
+	public static function fromASN1(Sequence $seq)
78
+	{
79
+		$attribs = array_map(
80
+			function (UnspecifiedType $el) {
81
+				return Attribute::fromASN1($el->asSequence());
82
+			}, $seq->elements());
83
+		// cast attributes
84
+		$attribs = array_map(
85
+			function (Attribute $attr) {
86
+				$oid = $attr->oid();
87
+				if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
88
+					$cls = self::MAP_OID_TO_CLASS[$oid];
89
+					$attr = $attr->castValues($cls);
90
+				}
91
+				return $attr;
92
+			}, $attribs);
93
+		return new self(...$attribs);
94
+	}
95
+    
96
+	/**
97
+	 * Check whether 'Access Identity' attribute is present.
98
+	 *
99
+	 * @return bool
100
+	 */
101
+	public function hasAccessIdentity()
102
+	{
103
+		return $this->has(AccessIdentityAttributeValue::OID);
104
+	}
105
+    
106
+	/**
107
+	 * Get the first 'Access Identity' attribute value.
108
+	 *
109
+	 * @return AccessIdentityAttributeValue
110
+	 */
111
+	public function accessIdentity()
112
+	{
113
+		return $this->firstOf(AccessIdentityAttributeValue::OID)->first();
114
+	}
115
+    
116
+	/**
117
+	 * Check whether 'Service Authentication Information' attribute is present.
118
+	 *
119
+	 * @return bool
120
+	 */
121
+	public function hasAuthenticationInformation()
122
+	{
123
+		return $this->has(AuthenticationInfoAttributeValue::OID);
124
+	}
125
+    
126
+	/**
127
+	 * Get the first 'Service Authentication Information' attribute value.
128
+	 *
129
+	 * @return AuthenticationInfoAttributeValue
130
+	 */
131
+	public function authenticationInformation()
132
+	{
133
+		return $this->firstOf(AuthenticationInfoAttributeValue::OID)->first();
134
+	}
135
+    
136
+	/**
137
+	 * Check whether 'Charging Identity' attribute is present.
138
+	 *
139
+	 * @return bool
140
+	 */
141
+	public function hasChargingIdentity()
142
+	{
143
+		return $this->has(ChargingIdentityAttributeValue::OID);
144
+	}
145
+    
146
+	/**
147
+	 * Get the first 'Charging Identity' attribute value.
148
+	 *
149
+	 * @return ChargingIdentityAttributeValue
150
+	 */
151
+	public function chargingIdentity()
152
+	{
153
+		return $this->firstOf(ChargingIdentityAttributeValue::OID)->first();
154
+	}
155
+    
156
+	/**
157
+	 * Check whether 'Group' attribute is present.
158
+	 *
159
+	 * @return bool
160
+	 */
161
+	public function hasGroup()
162
+	{
163
+		return $this->has(GroupAttributeValue::OID);
164
+	}
165
+    
166
+	/**
167
+	 * Get the first 'Group' attribute value.
168
+	 *
169
+	 * @return GroupAttributeValue
170
+	 */
171
+	public function group()
172
+	{
173
+		return $this->firstOf(GroupAttributeValue::OID)->first();
174
+	}
175
+    
176
+	/**
177
+	 * Check whether 'Role' attribute is present.
178
+	 *
179
+	 * @return bool
180
+	 */
181
+	public function hasRole()
182
+	{
183
+		return $this->has(AttributeType::OID_ROLE);
184
+	}
185
+    
186
+	/**
187
+	 * Get the first 'Role' attribute value.
188
+	 *
189
+	 * @return RoleAttributeValue
190
+	 */
191
+	public function role()
192
+	{
193
+		return $this->firstOf(AttributeType::OID_ROLE)->first();
194
+	}
195
+    
196
+	/**
197
+	 * Get all 'Role' attribute values.
198
+	 *
199
+	 * @return RoleAttributeValue[]
200
+	 */
201
+	public function roles()
202
+	{
203
+		return array_merge(array(),
204
+			...array_map(
205
+				function (Attribute $attr) {
206
+					return $attr->values();
207
+				}, $this->allOf(AttributeType::OID_ROLE)));
208
+	}
209
+    
210
+	/**
211
+	 * Generate ASN.1 structure.
212
+	 *
213
+	 * @return Sequence
214
+	 */
215
+	public function toASN1()
216
+	{
217
+		$elements = array_map(
218
+			function (Attribute $attr) {
219
+				return $attr->toASN1();
220
+			}, array_values($this->_attributes));
221
+		return new Sequence(...$elements);
222
+	}
223 223
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
     public static function fromAttributeValues(AttributeValue ...$values)
63 63
     {
64 64
         $attribs = array_map(
65
-            function (AttributeValue $value) {
65
+            function(AttributeValue $value) {
66 66
                 return $value->toAttribute();
67 67
             }, $values);
68 68
         return new self(...$attribs);
@@ -77,12 +77,12 @@  discard block
 block discarded – undo
77 77
     public static function fromASN1(Sequence $seq)
78 78
     {
79 79
         $attribs = array_map(
80
-            function (UnspecifiedType $el) {
80
+            function(UnspecifiedType $el) {
81 81
                 return Attribute::fromASN1($el->asSequence());
82 82
             }, $seq->elements());
83 83
         // cast attributes
84 84
         $attribs = array_map(
85
-            function (Attribute $attr) {
85
+            function(Attribute $attr) {
86 86
                 $oid = $attr->oid();
87 87
                 if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
88 88
                     $cls = self::MAP_OID_TO_CLASS[$oid];
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
     {
203 203
         return array_merge(array(),
204 204
             ...array_map(
205
-                function (Attribute $attr) {
205
+                function(Attribute $attr) {
206 206
                     return $attr->values();
207 207
                 }, $this->allOf(AttributeType::OID_ROLE)));
208 208
     }
@@ -215,7 +215,7 @@  discard block
 block discarded – undo
215 215
     public function toASN1()
216 216
     {
217 217
         $elements = array_map(
218
-            function (Attribute $attr) {
218
+            function(Attribute $attr) {
219 219
                 return $attr->toASN1();
220 220
             }, array_values($this->_attributes));
221 221
         return new Sequence(...$elements);
Please login to merge, or discard this patch.
lib/X509/CertificationPath/Policy/PolicyNode.php 1 patch
Indentation   +238 added lines, -238 removed lines patch added patch discarded remove patch
@@ -11,265 +11,265 @@
 block discarded – undo
11 11
  */
12 12
 class PolicyNode implements \IteratorAggregate, \Countable
13 13
 {
14
-    /**
15
-     * Policy OID.
16
-     *
17
-     * @var string
18
-     */
19
-    protected $_validPolicy;
14
+	/**
15
+	 * Policy OID.
16
+	 *
17
+	 * @var string
18
+	 */
19
+	protected $_validPolicy;
20 20
     
21
-    /**
22
-     * List of qualifiers.
23
-     *
24
-     * @var \X509\Certificate\Extension\CertificatePolicy\PolicyQualifierInfo[]
25
-     */
26
-    protected $_qualifiers;
21
+	/**
22
+	 * List of qualifiers.
23
+	 *
24
+	 * @var \X509\Certificate\Extension\CertificatePolicy\PolicyQualifierInfo[]
25
+	 */
26
+	protected $_qualifiers;
27 27
     
28
-    /**
29
-     * List of expected policy OIDs.
30
-     *
31
-     * @var string[]
32
-     */
33
-    protected $_expectedPolicies;
28
+	/**
29
+	 * List of expected policy OIDs.
30
+	 *
31
+	 * @var string[]
32
+	 */
33
+	protected $_expectedPolicies;
34 34
     
35
-    /**
36
-     * List of child nodes.
37
-     *
38
-     * @var PolicyNode[]
39
-     */
40
-    protected $_children;
35
+	/**
36
+	 * List of child nodes.
37
+	 *
38
+	 * @var PolicyNode[]
39
+	 */
40
+	protected $_children;
41 41
     
42
-    /**
43
-     * Reference to the parent node.
44
-     *
45
-     * @var PolicyNode|null
46
-     */
47
-    protected $_parent;
42
+	/**
43
+	 * Reference to the parent node.
44
+	 *
45
+	 * @var PolicyNode|null
46
+	 */
47
+	protected $_parent;
48 48
     
49
-    /**
50
-     * Constructor.
51
-     *
52
-     * @param string $valid_policy Policy OID
53
-     * @param \X509\Certificate\Extension\CertificatePolicy\PolicyQualifierInfo[] $qualifiers
54
-     * @param string[] $expected_policies
55
-     */
56
-    public function __construct($valid_policy, array $qualifiers,
57
-        array $expected_policies)
58
-    {
59
-        $this->_validPolicy = $valid_policy;
60
-        $this->_qualifiers = $qualifiers;
61
-        $this->_expectedPolicies = $expected_policies;
62
-        $this->_children = array();
63
-    }
49
+	/**
50
+	 * Constructor.
51
+	 *
52
+	 * @param string $valid_policy Policy OID
53
+	 * @param \X509\Certificate\Extension\CertificatePolicy\PolicyQualifierInfo[] $qualifiers
54
+	 * @param string[] $expected_policies
55
+	 */
56
+	public function __construct($valid_policy, array $qualifiers,
57
+		array $expected_policies)
58
+	{
59
+		$this->_validPolicy = $valid_policy;
60
+		$this->_qualifiers = $qualifiers;
61
+		$this->_expectedPolicies = $expected_policies;
62
+		$this->_children = array();
63
+	}
64 64
     
65
-    /**
66
-     * Create initial node for the policy tree.
67
-     *
68
-     * @return self
69
-     */
70
-    public static function anyPolicyNode()
71
-    {
72
-        return new self(PolicyInformation::OID_ANY_POLICY, array(),
73
-            array(PolicyInformation::OID_ANY_POLICY));
74
-    }
65
+	/**
66
+	 * Create initial node for the policy tree.
67
+	 *
68
+	 * @return self
69
+	 */
70
+	public static function anyPolicyNode()
71
+	{
72
+		return new self(PolicyInformation::OID_ANY_POLICY, array(),
73
+			array(PolicyInformation::OID_ANY_POLICY));
74
+	}
75 75
     
76
-    /**
77
-     * Get the valid policy OID.
78
-     *
79
-     * @return string
80
-     */
81
-    public function validPolicy()
82
-    {
83
-        return $this->_validPolicy;
84
-    }
76
+	/**
77
+	 * Get the valid policy OID.
78
+	 *
79
+	 * @return string
80
+	 */
81
+	public function validPolicy()
82
+	{
83
+		return $this->_validPolicy;
84
+	}
85 85
     
86
-    /**
87
-     * Check whether node has anyPolicy as a valid policy.
88
-     *
89
-     * @return boolean
90
-     */
91
-    public function isAnyPolicy()
92
-    {
93
-        return PolicyInformation::OID_ANY_POLICY == $this->_validPolicy;
94
-    }
86
+	/**
87
+	 * Check whether node has anyPolicy as a valid policy.
88
+	 *
89
+	 * @return boolean
90
+	 */
91
+	public function isAnyPolicy()
92
+	{
93
+		return PolicyInformation::OID_ANY_POLICY == $this->_validPolicy;
94
+	}
95 95
     
96
-    /**
97
-     * Get the qualifier set.
98
-     *
99
-     * @return \X509\Certificate\Extension\CertificatePolicy\PolicyQualifierInfo[]
100
-     */
101
-    public function qualifiers()
102
-    {
103
-        return $this->_qualifiers;
104
-    }
96
+	/**
97
+	 * Get the qualifier set.
98
+	 *
99
+	 * @return \X509\Certificate\Extension\CertificatePolicy\PolicyQualifierInfo[]
100
+	 */
101
+	public function qualifiers()
102
+	{
103
+		return $this->_qualifiers;
104
+	}
105 105
     
106
-    /**
107
-     * Check whether node has OID as an expected policy.
108
-     *
109
-     * @param string $oid
110
-     * @return boolean
111
-     */
112
-    public function hasExpectedPolicy($oid)
113
-    {
114
-        return in_array($oid, $this->_expectedPolicies);
115
-    }
106
+	/**
107
+	 * Check whether node has OID as an expected policy.
108
+	 *
109
+	 * @param string $oid
110
+	 * @return boolean
111
+	 */
112
+	public function hasExpectedPolicy($oid)
113
+	{
114
+		return in_array($oid, $this->_expectedPolicies);
115
+	}
116 116
     
117
-    /**
118
-     * Get the expected policy set.
119
-     *
120
-     * @return string[]
121
-     */
122
-    public function expectedPolicies()
123
-    {
124
-        return $this->_expectedPolicies;
125
-    }
117
+	/**
118
+	 * Get the expected policy set.
119
+	 *
120
+	 * @return string[]
121
+	 */
122
+	public function expectedPolicies()
123
+	{
124
+		return $this->_expectedPolicies;
125
+	}
126 126
     
127
-    /**
128
-     * Set expected policies.
129
-     *
130
-     * @param string ...$oids Policy OIDs
131
-     */
132
-    public function setExpectedPolicies(...$oids)
133
-    {
134
-        $this->_expectedPolicies = $oids;
135
-    }
127
+	/**
128
+	 * Set expected policies.
129
+	 *
130
+	 * @param string ...$oids Policy OIDs
131
+	 */
132
+	public function setExpectedPolicies(...$oids)
133
+	{
134
+		$this->_expectedPolicies = $oids;
135
+	}
136 136
     
137
-    /**
138
-     * Check whether node has a child node with given valid policy OID.
139
-     *
140
-     * @param string $oid
141
-     * @return boolean
142
-     */
143
-    public function hasChildWithValidPolicy($oid)
144
-    {
145
-        foreach ($this->_children as $node) {
146
-            if ($node->validPolicy() == $oid) {
147
-                return true;
148
-            }
149
-        }
150
-        return false;
151
-    }
137
+	/**
138
+	 * Check whether node has a child node with given valid policy OID.
139
+	 *
140
+	 * @param string $oid
141
+	 * @return boolean
142
+	 */
143
+	public function hasChildWithValidPolicy($oid)
144
+	{
145
+		foreach ($this->_children as $node) {
146
+			if ($node->validPolicy() == $oid) {
147
+				return true;
148
+			}
149
+		}
150
+		return false;
151
+	}
152 152
     
153
-    /**
154
-     * Add child node.
155
-     *
156
-     * @param PolicyNode $node
157
-     * @return self
158
-     */
159
-    public function addChild(PolicyNode $node)
160
-    {
161
-        $id = spl_object_hash($node);
162
-        $node->_parent = $this;
163
-        $this->_children[$id] = $node;
164
-        return $this;
165
-    }
153
+	/**
154
+	 * Add child node.
155
+	 *
156
+	 * @param PolicyNode $node
157
+	 * @return self
158
+	 */
159
+	public function addChild(PolicyNode $node)
160
+	{
161
+		$id = spl_object_hash($node);
162
+		$node->_parent = $this;
163
+		$this->_children[$id] = $node;
164
+		return $this;
165
+	}
166 166
     
167
-    /**
168
-     * Get the child nodes.
169
-     *
170
-     * @return PolicyNode[]
171
-     */
172
-    public function children()
173
-    {
174
-        return array_values($this->_children);
175
-    }
167
+	/**
168
+	 * Get the child nodes.
169
+	 *
170
+	 * @return PolicyNode[]
171
+	 */
172
+	public function children()
173
+	{
174
+		return array_values($this->_children);
175
+	}
176 176
     
177
-    /**
178
-     * Remove this node from the tree.
179
-     *
180
-     * @return self The removed node
181
-     */
182
-    public function remove()
183
-    {
184
-        if ($this->_parent) {
185
-            $id = spl_object_hash($this);
186
-            unset($this->_parent->_children[$id]);
187
-            unset($this->_parent);
188
-        }
189
-        return $this;
190
-    }
177
+	/**
178
+	 * Remove this node from the tree.
179
+	 *
180
+	 * @return self The removed node
181
+	 */
182
+	public function remove()
183
+	{
184
+		if ($this->_parent) {
185
+			$id = spl_object_hash($this);
186
+			unset($this->_parent->_children[$id]);
187
+			unset($this->_parent);
188
+		}
189
+		return $this;
190
+	}
191 191
     
192
-    /**
193
-     * Check whether node has a parent.
194
-     *
195
-     * @return bool
196
-     */
197
-    public function hasParent()
198
-    {
199
-        return isset($this->_parent);
200
-    }
192
+	/**
193
+	 * Check whether node has a parent.
194
+	 *
195
+	 * @return bool
196
+	 */
197
+	public function hasParent()
198
+	{
199
+		return isset($this->_parent);
200
+	}
201 201
     
202
-    /**
203
-     * Get the parent node.
204
-     *
205
-     * @return PolicyNode|null
206
-     */
207
-    public function parent()
208
-    {
209
-        return $this->_parent;
210
-    }
202
+	/**
203
+	 * Get the parent node.
204
+	 *
205
+	 * @return PolicyNode|null
206
+	 */
207
+	public function parent()
208
+	{
209
+		return $this->_parent;
210
+	}
211 211
     
212
-    /**
213
-     * Get chain of parent nodes from this node's parent to the root node.
214
-     *
215
-     * @return PolicyNode[]
216
-     */
217
-    public function parents()
218
-    {
219
-        if (!$this->_parent) {
220
-            return array();
221
-        }
222
-        $nodes = $this->_parent->parents();
223
-        $nodes[] = $this->_parent;
224
-        return array_reverse($nodes);
225
-    }
212
+	/**
213
+	 * Get chain of parent nodes from this node's parent to the root node.
214
+	 *
215
+	 * @return PolicyNode[]
216
+	 */
217
+	public function parents()
218
+	{
219
+		if (!$this->_parent) {
220
+			return array();
221
+		}
222
+		$nodes = $this->_parent->parents();
223
+		$nodes[] = $this->_parent;
224
+		return array_reverse($nodes);
225
+	}
226 226
     
227
-    /**
228
-     * Walk tree from this node, applying a callback for each node.
229
-     *
230
-     * Nodes are traversed depth-first and callback shall be applied post-order.
231
-     *
232
-     * @param callable $fn
233
-     */
234
-    public function walkNodes(callable $fn)
235
-    {
236
-        foreach ($this->_children as $node) {
237
-            $node->walkNodes($fn);
238
-        }
239
-        $fn($this);
240
-    }
227
+	/**
228
+	 * Walk tree from this node, applying a callback for each node.
229
+	 *
230
+	 * Nodes are traversed depth-first and callback shall be applied post-order.
231
+	 *
232
+	 * @param callable $fn
233
+	 */
234
+	public function walkNodes(callable $fn)
235
+	{
236
+		foreach ($this->_children as $node) {
237
+			$node->walkNodes($fn);
238
+		}
239
+		$fn($this);
240
+	}
241 241
     
242
-    /**
243
-     * Get the total number of nodes in a tree.
244
-     *
245
-     * @return int
246
-     */
247
-    public function nodeCount()
248
-    {
249
-        $c = 1;
250
-        foreach ($this->_children as $child) {
251
-            $c += $child->nodeCount();
252
-        }
253
-        return $c;
254
-    }
242
+	/**
243
+	 * Get the total number of nodes in a tree.
244
+	 *
245
+	 * @return int
246
+	 */
247
+	public function nodeCount()
248
+	{
249
+		$c = 1;
250
+		foreach ($this->_children as $child) {
251
+			$c += $child->nodeCount();
252
+		}
253
+		return $c;
254
+	}
255 255
     
256
-    /**
257
-     * Get the number of child nodes.
258
-     *
259
-     * @see \Countable::count()
260
-     */
261
-    public function count()
262
-    {
263
-        return count($this->_children);
264
-    }
256
+	/**
257
+	 * Get the number of child nodes.
258
+	 *
259
+	 * @see \Countable::count()
260
+	 */
261
+	public function count()
262
+	{
263
+		return count($this->_children);
264
+	}
265 265
     
266
-    /**
267
-     * Get iterator for the child nodes.
268
-     *
269
-     * @see \IteratorAggregate::getIterator()
270
-     */
271
-    public function getIterator()
272
-    {
273
-        return new \ArrayIterator($this->_children);
274
-    }
266
+	/**
267
+	 * Get iterator for the child nodes.
268
+	 *
269
+	 * @see \IteratorAggregate::getIterator()
270
+	 */
271
+	public function getIterator()
272
+	{
273
+		return new \ArrayIterator($this->_children);
274
+	}
275 275
 }
Please login to merge, or discard this patch.
lib/X509/CertificationPath/Policy/PolicyTree.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -92,7 +92,7 @@  discard block
 block discarded – undo
92 92
         // is not in the user-initial-policy-set and is not anyPolicy,
93 93
         // delete this node and all its children.
94 94
         $valid_policy_node_set = array_filter($valid_policy_node_set,
95
-            function (PolicyNode $node) use ($policies) {
95
+            function(PolicyNode $node) use ($policies) {
96 96
                 if ($node->isAnyPolicy()) {
97 97
                     return true;
98 98
                 }
@@ -104,7 +104,7 @@  discard block
 block discarded – undo
104 104
             });
105 105
         // array of valid policy OIDs
106 106
         $valid_policy_set = array_map(
107
-            function (PolicyNode $node) {
107
+            function(PolicyNode $node) {
108 108
                 return $node->validPolicy();
109 109
             }, $valid_policy_node_set);
110 110
         // 3. If the valid_policy_tree includes a node of depth n with
@@ -384,7 +384,7 @@  discard block
 block discarded – undo
384 384
         }
385 385
         // for each node in a tree
386 386
         $this->_root->walkNodes(
387
-            function (PolicyNode $node) use (&$set) {
387
+            function(PolicyNode $node) use (&$set) {
388 388
                 $parents = $node->parents();
389 389
                 // node has parents
390 390
                 if (count($parents)) {
Please login to merge, or discard this patch.
Indentation   +393 added lines, -393 removed lines patch added patch discarded remove patch
@@ -8,411 +8,411 @@
 block discarded – undo
8 8
 
9 9
 class PolicyTree
10 10
 {
11
-    /**
12
-     * Root node at depth zero.
13
-     *
14
-     * @var PolicyNode|null
15
-     */
16
-    protected $_root;
11
+	/**
12
+	 * Root node at depth zero.
13
+	 *
14
+	 * @var PolicyNode|null
15
+	 */
16
+	protected $_root;
17 17
     
18
-    /**
19
-     * Constructor.
20
-     *
21
-     * @param PolicyNode $root Initial root node
22
-     */
23
-    public function __construct(PolicyNode $root)
24
-    {
25
-        $this->_root = $root;
26
-    }
18
+	/**
19
+	 * Constructor.
20
+	 *
21
+	 * @param PolicyNode $root Initial root node
22
+	 */
23
+	public function __construct(PolicyNode $root)
24
+	{
25
+		$this->_root = $root;
26
+	}
27 27
     
28
-    /**
29
-     * Process policy information from the certificate.
30
-     *
31
-     * Certificate policies extension must be present.
32
-     *
33
-     * @param ValidatorState $state
34
-     * @param Certificate $cert
35
-     * @return ValidatorState
36
-     */
37
-    public function processPolicies(ValidatorState $state, Certificate $cert)
38
-    {
39
-        $policies = $cert->tbsCertificate()
40
-            ->extensions()
41
-            ->certificatePolicies();
42
-        $tree = clone $this;
43
-        // (d.1) for each policy P not equal to anyPolicy
44
-        foreach ($policies as $policy) {
45
-            if ($policy->isAnyPolicy()) {
46
-                $tree->_processAnyPolicy($policy, $cert, $state);
47
-            } else {
48
-                $tree->_processPolicy($policy, $state);
49
-            }
50
-        }
51
-        // if whole tree is pruned
52
-        if (!$tree->_pruneTree($state->index() - 1)) {
53
-            return $state->withoutValidPolicyTree();
54
-        }
55
-        return $state->withValidPolicyTree($tree);
56
-    }
28
+	/**
29
+	 * Process policy information from the certificate.
30
+	 *
31
+	 * Certificate policies extension must be present.
32
+	 *
33
+	 * @param ValidatorState $state
34
+	 * @param Certificate $cert
35
+	 * @return ValidatorState
36
+	 */
37
+	public function processPolicies(ValidatorState $state, Certificate $cert)
38
+	{
39
+		$policies = $cert->tbsCertificate()
40
+			->extensions()
41
+			->certificatePolicies();
42
+		$tree = clone $this;
43
+		// (d.1) for each policy P not equal to anyPolicy
44
+		foreach ($policies as $policy) {
45
+			if ($policy->isAnyPolicy()) {
46
+				$tree->_processAnyPolicy($policy, $cert, $state);
47
+			} else {
48
+				$tree->_processPolicy($policy, $state);
49
+			}
50
+		}
51
+		// if whole tree is pruned
52
+		if (!$tree->_pruneTree($state->index() - 1)) {
53
+			return $state->withoutValidPolicyTree();
54
+		}
55
+		return $state->withValidPolicyTree($tree);
56
+	}
57 57
     
58
-    /**
59
-     * Process policy mappings from the certificate.
60
-     *
61
-     * @param ValidatorState $state
62
-     * @param Certificate $cert
63
-     * @return ValidatorState
64
-     */
65
-    public function processMappings(ValidatorState $state, Certificate $cert)
66
-    {
67
-        $tree = clone $this;
68
-        if ($state->policyMapping() > 0) {
69
-            $tree->_applyMappings($cert, $state);
70
-        } else if ($state->policyMapping() == 0) {
71
-            $tree->_deleteMappings($cert, $state);
72
-        }
73
-        // if whole tree is pruned
74
-        if (!$tree->_root) {
75
-            return $state->withoutValidPolicyTree();
76
-        }
77
-        return $state->withValidPolicyTree($tree);
78
-    }
58
+	/**
59
+	 * Process policy mappings from the certificate.
60
+	 *
61
+	 * @param ValidatorState $state
62
+	 * @param Certificate $cert
63
+	 * @return ValidatorState
64
+	 */
65
+	public function processMappings(ValidatorState $state, Certificate $cert)
66
+	{
67
+		$tree = clone $this;
68
+		if ($state->policyMapping() > 0) {
69
+			$tree->_applyMappings($cert, $state);
70
+		} else if ($state->policyMapping() == 0) {
71
+			$tree->_deleteMappings($cert, $state);
72
+		}
73
+		// if whole tree is pruned
74
+		if (!$tree->_root) {
75
+			return $state->withoutValidPolicyTree();
76
+		}
77
+		return $state->withValidPolicyTree($tree);
78
+	}
79 79
     
80
-    /**
81
-     * Calculate policy intersection as specified in Wrap-Up Procedure 6.1.5.g.
82
-     *
83
-     * @param ValidatorState $state
84
-     * @param array $policies
85
-     * @return ValidatorState
86
-     */
87
-    public function calculateIntersection(ValidatorState $state, array $policies)
88
-    {
89
-        $tree = clone $this;
90
-        $valid_policy_node_set = $tree->_validPolicyNodeSet();
91
-        // 2. If the valid_policy of any node in the valid_policy_node_set
92
-        // is not in the user-initial-policy-set and is not anyPolicy,
93
-        // delete this node and all its children.
94
-        $valid_policy_node_set = array_filter($valid_policy_node_set,
95
-            function (PolicyNode $node) use ($policies) {
96
-                if ($node->isAnyPolicy()) {
97
-                    return true;
98
-                }
99
-                if (in_array($node->validPolicy(), $policies)) {
100
-                    return true;
101
-                }
102
-                $node->remove();
103
-                return false;
104
-            });
105
-        // array of valid policy OIDs
106
-        $valid_policy_set = array_map(
107
-            function (PolicyNode $node) {
108
-                return $node->validPolicy();
109
-            }, $valid_policy_node_set);
110
-        // 3. If the valid_policy_tree includes a node of depth n with
111
-        // the valid_policy anyPolicy and the user-initial-policy-set 
112
-        // is not any-policy
113
-        foreach ($tree->_nodesAtDepth($state->index()) as $node) {
114
-            if ($node->hasParent() && $node->isAnyPolicy()) {
115
-                // a. Set P-Q to the qualifier_set in the node of depth n
116
-                // with valid_policy anyPolicy.
117
-                $pq = $node->qualifiers();
118
-                // b. For each P-OID in the user-initial-policy-set that is not
119
-                // the valid_policy of a node in the valid_policy_node_set,
120
-                // create a child node whose parent is the node of depth n-1
121
-                // with the valid_policy anyPolicy.
122
-                $poids = array_diff($policies, $valid_policy_set);
123
-                foreach ($tree->_nodesAtDepth($state->index() - 1) as $parent) {
124
-                    if ($parent->isAnyPolicy()) {
125
-                        // Set the values in the child node as follows: 
126
-                        // set the valid_policy to P-OID, set the qualifier_set
127
-                        // to P-Q, and set the expected_policy_set to {P-OID}.
128
-                        foreach ($poids as $poid) {
129
-                            $parent->addChild(
130
-                                new PolicyNode($poid, $pq, array($poid)));
131
-                        }
132
-                        break;
133
-                    }
134
-                }
135
-                // c. Delete the node of depth n with the
136
-                // valid_policy anyPolicy.
137
-                $node->remove();
138
-            }
139
-        }
140
-        // 4. If there is a node in the valid_policy_tree of depth n-1 or less
141
-        // without any child nodes, delete that node. Repeat this step until
142
-        // there are no nodes of depth n-1 or less without children.
143
-        if (!$tree->_pruneTree($state->index() - 1)) {
144
-            return $state->withoutValidPolicyTree();
145
-        }
146
-        return $state->withValidPolicyTree($tree);
147
-    }
80
+	/**
81
+	 * Calculate policy intersection as specified in Wrap-Up Procedure 6.1.5.g.
82
+	 *
83
+	 * @param ValidatorState $state
84
+	 * @param array $policies
85
+	 * @return ValidatorState
86
+	 */
87
+	public function calculateIntersection(ValidatorState $state, array $policies)
88
+	{
89
+		$tree = clone $this;
90
+		$valid_policy_node_set = $tree->_validPolicyNodeSet();
91
+		// 2. If the valid_policy of any node in the valid_policy_node_set
92
+		// is not in the user-initial-policy-set and is not anyPolicy,
93
+		// delete this node and all its children.
94
+		$valid_policy_node_set = array_filter($valid_policy_node_set,
95
+			function (PolicyNode $node) use ($policies) {
96
+				if ($node->isAnyPolicy()) {
97
+					return true;
98
+				}
99
+				if (in_array($node->validPolicy(), $policies)) {
100
+					return true;
101
+				}
102
+				$node->remove();
103
+				return false;
104
+			});
105
+		// array of valid policy OIDs
106
+		$valid_policy_set = array_map(
107
+			function (PolicyNode $node) {
108
+				return $node->validPolicy();
109
+			}, $valid_policy_node_set);
110
+		// 3. If the valid_policy_tree includes a node of depth n with
111
+		// the valid_policy anyPolicy and the user-initial-policy-set 
112
+		// is not any-policy
113
+		foreach ($tree->_nodesAtDepth($state->index()) as $node) {
114
+			if ($node->hasParent() && $node->isAnyPolicy()) {
115
+				// a. Set P-Q to the qualifier_set in the node of depth n
116
+				// with valid_policy anyPolicy.
117
+				$pq = $node->qualifiers();
118
+				// b. For each P-OID in the user-initial-policy-set that is not
119
+				// the valid_policy of a node in the valid_policy_node_set,
120
+				// create a child node whose parent is the node of depth n-1
121
+				// with the valid_policy anyPolicy.
122
+				$poids = array_diff($policies, $valid_policy_set);
123
+				foreach ($tree->_nodesAtDepth($state->index() - 1) as $parent) {
124
+					if ($parent->isAnyPolicy()) {
125
+						// Set the values in the child node as follows: 
126
+						// set the valid_policy to P-OID, set the qualifier_set
127
+						// to P-Q, and set the expected_policy_set to {P-OID}.
128
+						foreach ($poids as $poid) {
129
+							$parent->addChild(
130
+								new PolicyNode($poid, $pq, array($poid)));
131
+						}
132
+						break;
133
+					}
134
+				}
135
+				// c. Delete the node of depth n with the
136
+				// valid_policy anyPolicy.
137
+				$node->remove();
138
+			}
139
+		}
140
+		// 4. If there is a node in the valid_policy_tree of depth n-1 or less
141
+		// without any child nodes, delete that node. Repeat this step until
142
+		// there are no nodes of depth n-1 or less without children.
143
+		if (!$tree->_pruneTree($state->index() - 1)) {
144
+			return $state->withoutValidPolicyTree();
145
+		}
146
+		return $state->withValidPolicyTree($tree);
147
+	}
148 148
     
149
-    /**
150
-     * Get policies at given policy tree depth.
151
-     *
152
-     * @param int $i Depth in range 1..n
153
-     * @return PolicyInformation[]
154
-     */
155
-    public function policiesAtDepth($i)
156
-    {
157
-        $policies = array();
158
-        foreach ($this->_nodesAtDepth($i) as $node) {
159
-            $policies[] = new PolicyInformation($node->validPolicy(),
160
-                ...$node->qualifiers());
161
-        }
162
-        return $policies;
163
-    }
149
+	/**
150
+	 * Get policies at given policy tree depth.
151
+	 *
152
+	 * @param int $i Depth in range 1..n
153
+	 * @return PolicyInformation[]
154
+	 */
155
+	public function policiesAtDepth($i)
156
+	{
157
+		$policies = array();
158
+		foreach ($this->_nodesAtDepth($i) as $node) {
159
+			$policies[] = new PolicyInformation($node->validPolicy(),
160
+				...$node->qualifiers());
161
+		}
162
+		return $policies;
163
+	}
164 164
     
165
-    /**
166
-     * Process single policy information.
167
-     *
168
-     * @param PolicyInformation $policy
169
-     * @param ValidatorState $state
170
-     */
171
-    protected function _processPolicy(PolicyInformation $policy,
172
-        ValidatorState $state)
173
-    {
174
-        $p_oid = $policy->oid();
175
-        $i = $state->index();
176
-        $match_count = 0;
177
-        // (d.1.i) for each node of depth i-1 in the valid_policy_tree...
178
-        foreach ($this->_nodesAtDepth($i - 1) as $node) {
179
-            // ...where P-OID is in the expected_policy_set
180
-            if ($node->hasExpectedPolicy($p_oid)) {
181
-                $node->addChild(
182
-                    new PolicyNode($p_oid, $policy->qualifiers(), array($p_oid)));
183
-                ++$match_count;
184
-            }
185
-        }
186
-        // (d.1.ii) if there was no match in step (i)...
187
-        if (!$match_count) {
188
-            // ...and the valid_policy_tree includes a node of depth i-1 with
189
-            // the valid_policy anyPolicy
190
-            foreach ($this->_nodesAtDepth($i - 1) as $node) {
191
-                if ($node->isAnyPolicy()) {
192
-                    $node->addChild(
193
-                        new PolicyNode($p_oid, $policy->qualifiers(),
194
-                            array($p_oid)));
195
-                }
196
-            }
197
-        }
198
-    }
165
+	/**
166
+	 * Process single policy information.
167
+	 *
168
+	 * @param PolicyInformation $policy
169
+	 * @param ValidatorState $state
170
+	 */
171
+	protected function _processPolicy(PolicyInformation $policy,
172
+		ValidatorState $state)
173
+	{
174
+		$p_oid = $policy->oid();
175
+		$i = $state->index();
176
+		$match_count = 0;
177
+		// (d.1.i) for each node of depth i-1 in the valid_policy_tree...
178
+		foreach ($this->_nodesAtDepth($i - 1) as $node) {
179
+			// ...where P-OID is in the expected_policy_set
180
+			if ($node->hasExpectedPolicy($p_oid)) {
181
+				$node->addChild(
182
+					new PolicyNode($p_oid, $policy->qualifiers(), array($p_oid)));
183
+				++$match_count;
184
+			}
185
+		}
186
+		// (d.1.ii) if there was no match in step (i)...
187
+		if (!$match_count) {
188
+			// ...and the valid_policy_tree includes a node of depth i-1 with
189
+			// the valid_policy anyPolicy
190
+			foreach ($this->_nodesAtDepth($i - 1) as $node) {
191
+				if ($node->isAnyPolicy()) {
192
+					$node->addChild(
193
+						new PolicyNode($p_oid, $policy->qualifiers(),
194
+							array($p_oid)));
195
+				}
196
+			}
197
+		}
198
+	}
199 199
     
200
-    /**
201
-     * Process anyPolicy policy information.
202
-     *
203
-     * @param PolicyInformation $policy
204
-     * @param Certificate $cert
205
-     * @param ValidatorState $state
206
-     */
207
-    protected function _processAnyPolicy(PolicyInformation $policy,
208
-        Certificate $cert, ValidatorState $state)
209
-    {
210
-        $i = $state->index();
211
-        // if (a) inhibit_anyPolicy is greater than 0 or
212
-        // (b) i<n and the certificate is self-issued
213
-        if (!($state->inhibitAnyPolicy() > 0 ||
214
-             ($i < $state->pathLength() && $cert->isSelfIssued()))) {
215
-            return;
216
-        }
217
-        // for each node in the valid_policy_tree of depth i-1
218
-        foreach ($this->_nodesAtDepth($i - 1) as $node) {
219
-            // for each value in the expected_policy_set
220
-            foreach ($node->expectedPolicies() as $p_oid) {
221
-                // that does not appear in a child node
222
-                if (!$node->hasChildWithValidPolicy($p_oid)) {
223
-                    $node->addChild(
224
-                        new PolicyNode($p_oid, $policy->qualifiers(),
225
-                            array($p_oid)));
226
-                }
227
-            }
228
-        }
229
-    }
200
+	/**
201
+	 * Process anyPolicy policy information.
202
+	 *
203
+	 * @param PolicyInformation $policy
204
+	 * @param Certificate $cert
205
+	 * @param ValidatorState $state
206
+	 */
207
+	protected function _processAnyPolicy(PolicyInformation $policy,
208
+		Certificate $cert, ValidatorState $state)
209
+	{
210
+		$i = $state->index();
211
+		// if (a) inhibit_anyPolicy is greater than 0 or
212
+		// (b) i<n and the certificate is self-issued
213
+		if (!($state->inhibitAnyPolicy() > 0 ||
214
+			 ($i < $state->pathLength() && $cert->isSelfIssued()))) {
215
+			return;
216
+		}
217
+		// for each node in the valid_policy_tree of depth i-1
218
+		foreach ($this->_nodesAtDepth($i - 1) as $node) {
219
+			// for each value in the expected_policy_set
220
+			foreach ($node->expectedPolicies() as $p_oid) {
221
+				// that does not appear in a child node
222
+				if (!$node->hasChildWithValidPolicy($p_oid)) {
223
+					$node->addChild(
224
+						new PolicyNode($p_oid, $policy->qualifiers(),
225
+							array($p_oid)));
226
+				}
227
+			}
228
+		}
229
+	}
230 230
     
231
-    /**
232
-     * Apply policy mappings to the policy tree.
233
-     *
234
-     * @param Certificate $cert
235
-     * @param ValidatorState $state
236
-     */
237
-    protected function _applyMappings(Certificate $cert, ValidatorState $state)
238
-    {
239
-        $policy_mappings = $cert->tbsCertificate()
240
-            ->extensions()
241
-            ->policyMappings();
242
-        // (6.1.4. b.1.) for each node in the valid_policy_tree of depth i...
243
-        foreach ($policy_mappings->flattenedMappings() as $idp => $sdps) {
244
-            $match_count = 0;
245
-            foreach ($this->_nodesAtDepth($state->index()) as $node) {
246
-                // ...where ID-P is the valid_policy
247
-                if ($node->validPolicy() == $idp) {
248
-                    // set expected_policy_set to the set of subjectDomainPolicy
249
-                    // values that are specified as equivalent to ID-P by
250
-                    // the policy mappings extension
251
-                    $node->setExpectedPolicies(...$sdps);
252
-                    ++$match_count;
253
-                }
254
-            }
255
-            // if no node of depth i in the valid_policy_tree has
256
-            // a valid_policy of ID-P...
257
-            if (!$match_count) {
258
-                $this->_applyAnyPolicyMapping($cert, $state, $idp, $sdps);
259
-            }
260
-        }
261
-    }
231
+	/**
232
+	 * Apply policy mappings to the policy tree.
233
+	 *
234
+	 * @param Certificate $cert
235
+	 * @param ValidatorState $state
236
+	 */
237
+	protected function _applyMappings(Certificate $cert, ValidatorState $state)
238
+	{
239
+		$policy_mappings = $cert->tbsCertificate()
240
+			->extensions()
241
+			->policyMappings();
242
+		// (6.1.4. b.1.) for each node in the valid_policy_tree of depth i...
243
+		foreach ($policy_mappings->flattenedMappings() as $idp => $sdps) {
244
+			$match_count = 0;
245
+			foreach ($this->_nodesAtDepth($state->index()) as $node) {
246
+				// ...where ID-P is the valid_policy
247
+				if ($node->validPolicy() == $idp) {
248
+					// set expected_policy_set to the set of subjectDomainPolicy
249
+					// values that are specified as equivalent to ID-P by
250
+					// the policy mappings extension
251
+					$node->setExpectedPolicies(...$sdps);
252
+					++$match_count;
253
+				}
254
+			}
255
+			// if no node of depth i in the valid_policy_tree has
256
+			// a valid_policy of ID-P...
257
+			if (!$match_count) {
258
+				$this->_applyAnyPolicyMapping($cert, $state, $idp, $sdps);
259
+			}
260
+		}
261
+	}
262 262
     
263
-    /**
264
-     * Apply anyPolicy mapping to the policy tree as specified in 6.1.4 (b)(1).
265
-     *
266
-     * @param Certificate $cert
267
-     * @param ValidatorState $state
268
-     * @param string $idp OID of the issuer domain policy
269
-     * @param array $sdps Array of subject domain policy OIDs
270
-     */
271
-    protected function _applyAnyPolicyMapping(Certificate $cert,
272
-        ValidatorState $state, $idp, array $sdps)
273
-    {
274
-        // (6.1.4. b.1.) ...but there is a node of depth i with
275
-        // a valid_policy of anyPolicy
276
-        foreach ($this->_nodesAtDepth($state->index()) as $node) {
277
-            if ($node->isAnyPolicy()) {
278
-                // then generate a child node of the node of depth i-1
279
-                // that has a valid_policy of anyPolicy as follows...
280
-                foreach ($this->_nodesAtDepth($state->index() - 1) as $node) {
281
-                    if ($node->isAnyPolicy()) {
282
-                        // try to fetch qualifiers of anyPolicy certificate policy
283
-                        $qualifiers = array();
284
-                        try {
285
-                            $qualifiers = $cert->tbsCertificate()
286
-                                ->extensions()
287
-                                ->certificatePolicies()
288
-                                ->anyPolicy()
289
-                                ->qualifiers();
290
-                        } catch (\LogicException $e) {
291
-                            // if there's no policies or no qualifiers
292
-                        }
293
-                        $node->addChild(
294
-                            new PolicyNode($idp, $qualifiers, $sdps));
295
-                        // bail after first anyPolicy has been processed
296
-                        break;
297
-                    }
298
-                }
299
-                // bail after first anyPolicy has been processed
300
-                break;
301
-            }
302
-        }
303
-    }
263
+	/**
264
+	 * Apply anyPolicy mapping to the policy tree as specified in 6.1.4 (b)(1).
265
+	 *
266
+	 * @param Certificate $cert
267
+	 * @param ValidatorState $state
268
+	 * @param string $idp OID of the issuer domain policy
269
+	 * @param array $sdps Array of subject domain policy OIDs
270
+	 */
271
+	protected function _applyAnyPolicyMapping(Certificate $cert,
272
+		ValidatorState $state, $idp, array $sdps)
273
+	{
274
+		// (6.1.4. b.1.) ...but there is a node of depth i with
275
+		// a valid_policy of anyPolicy
276
+		foreach ($this->_nodesAtDepth($state->index()) as $node) {
277
+			if ($node->isAnyPolicy()) {
278
+				// then generate a child node of the node of depth i-1
279
+				// that has a valid_policy of anyPolicy as follows...
280
+				foreach ($this->_nodesAtDepth($state->index() - 1) as $node) {
281
+					if ($node->isAnyPolicy()) {
282
+						// try to fetch qualifiers of anyPolicy certificate policy
283
+						$qualifiers = array();
284
+						try {
285
+							$qualifiers = $cert->tbsCertificate()
286
+								->extensions()
287
+								->certificatePolicies()
288
+								->anyPolicy()
289
+								->qualifiers();
290
+						} catch (\LogicException $e) {
291
+							// if there's no policies or no qualifiers
292
+						}
293
+						$node->addChild(
294
+							new PolicyNode($idp, $qualifiers, $sdps));
295
+						// bail after first anyPolicy has been processed
296
+						break;
297
+					}
298
+				}
299
+				// bail after first anyPolicy has been processed
300
+				break;
301
+			}
302
+		}
303
+	}
304 304
     
305
-    /**
306
-     * Delete nodes as specified in 6.1.4 (b)(2).
307
-     *
308
-     * @param Certificate $cert
309
-     * @param ValidatorState $state
310
-     */
311
-    protected function _deleteMappings(Certificate $cert, ValidatorState $state)
312
-    {
313
-        $idps = $cert->tbsCertificate()
314
-            ->extensions()
315
-            ->policyMappings()
316
-            ->issuerDomainPolicies();
317
-        // delete each node of depth i in the valid_policy_tree
318
-        // where ID-P is the valid_policy
319
-        foreach ($this->_nodesAtDepth($state->index()) as $node) {
320
-            if (in_array($node->validPolicy(), $idps)) {
321
-                $node->remove();
322
-            }
323
-        }
324
-        $this->_pruneTree($state->index() - 1);
325
-    }
305
+	/**
306
+	 * Delete nodes as specified in 6.1.4 (b)(2).
307
+	 *
308
+	 * @param Certificate $cert
309
+	 * @param ValidatorState $state
310
+	 */
311
+	protected function _deleteMappings(Certificate $cert, ValidatorState $state)
312
+	{
313
+		$idps = $cert->tbsCertificate()
314
+			->extensions()
315
+			->policyMappings()
316
+			->issuerDomainPolicies();
317
+		// delete each node of depth i in the valid_policy_tree
318
+		// where ID-P is the valid_policy
319
+		foreach ($this->_nodesAtDepth($state->index()) as $node) {
320
+			if (in_array($node->validPolicy(), $idps)) {
321
+				$node->remove();
322
+			}
323
+		}
324
+		$this->_pruneTree($state->index() - 1);
325
+	}
326 326
     
327
-    /**
328
-     * Prune tree starting from given depth.
329
-     *
330
-     * @param int $depth
331
-     * @return int The number of nodes left in a tree
332
-     */
333
-    protected function _pruneTree($depth)
334
-    {
335
-        for ($i = $depth; $i > 0; --$i) {
336
-            foreach ($this->_nodesAtDepth($i) as $node) {
337
-                if (!count($node)) {
338
-                    $node->remove();
339
-                }
340
-            }
341
-        }
342
-        // if root has no children left
343
-        if (!count($this->_root)) {
344
-            $this->_root = null;
345
-            return 0;
346
-        }
347
-        return $this->_root->nodeCount();
348
-    }
327
+	/**
328
+	 * Prune tree starting from given depth.
329
+	 *
330
+	 * @param int $depth
331
+	 * @return int The number of nodes left in a tree
332
+	 */
333
+	protected function _pruneTree($depth)
334
+	{
335
+		for ($i = $depth; $i > 0; --$i) {
336
+			foreach ($this->_nodesAtDepth($i) as $node) {
337
+				if (!count($node)) {
338
+					$node->remove();
339
+				}
340
+			}
341
+		}
342
+		// if root has no children left
343
+		if (!count($this->_root)) {
344
+			$this->_root = null;
345
+			return 0;
346
+		}
347
+		return $this->_root->nodeCount();
348
+	}
349 349
     
350
-    /**
351
-     * Get all nodes at given depth.
352
-     *
353
-     * @param int $i
354
-     * @return PolicyNode[]
355
-     */
356
-    protected function _nodesAtDepth($i)
357
-    {
358
-        if (!$this->_root) {
359
-            return array();
360
-        }
361
-        $depth = 0;
362
-        $nodes = array($this->_root);
363
-        while ($depth < $i) {
364
-            $nodes = self::_gatherChildren(...$nodes);
365
-            if (!count($nodes)) {
366
-                break;
367
-            }
368
-            ++$depth;
369
-        }
370
-        return $nodes;
371
-    }
350
+	/**
351
+	 * Get all nodes at given depth.
352
+	 *
353
+	 * @param int $i
354
+	 * @return PolicyNode[]
355
+	 */
356
+	protected function _nodesAtDepth($i)
357
+	{
358
+		if (!$this->_root) {
359
+			return array();
360
+		}
361
+		$depth = 0;
362
+		$nodes = array($this->_root);
363
+		while ($depth < $i) {
364
+			$nodes = self::_gatherChildren(...$nodes);
365
+			if (!count($nodes)) {
366
+				break;
367
+			}
368
+			++$depth;
369
+		}
370
+		return $nodes;
371
+	}
372 372
     
373
-    /**
374
-     * Get the valid policy node set as specified in spec 6.1.5.(g)(iii)1.
375
-     *
376
-     * @return PolicyNode[]
377
-     */
378
-    protected function _validPolicyNodeSet()
379
-    {
380
-        // 1. Determine the set of policy nodes whose parent nodes have
381
-        // a valid_policy of anyPolicy. This is the valid_policy_node_set.
382
-        $set = array();
383
-        if (!$this->_root) {
384
-            return $set;
385
-        }
386
-        // for each node in a tree
387
-        $this->_root->walkNodes(
388
-            function (PolicyNode $node) use (&$set) {
389
-                $parents = $node->parents();
390
-                // node has parents
391
-                if (count($parents)) {
392
-                    // check that each ancestor is an anyPolicy node
393
-                    foreach ($parents as $ancestor) {
394
-                        if (!$ancestor->isAnyPolicy()) {
395
-                            return;
396
-                        }
397
-                    }
398
-                    $set[] = $node;
399
-                }
400
-            });
401
-        return $set;
402
-    }
373
+	/**
374
+	 * Get the valid policy node set as specified in spec 6.1.5.(g)(iii)1.
375
+	 *
376
+	 * @return PolicyNode[]
377
+	 */
378
+	protected function _validPolicyNodeSet()
379
+	{
380
+		// 1. Determine the set of policy nodes whose parent nodes have
381
+		// a valid_policy of anyPolicy. This is the valid_policy_node_set.
382
+		$set = array();
383
+		if (!$this->_root) {
384
+			return $set;
385
+		}
386
+		// for each node in a tree
387
+		$this->_root->walkNodes(
388
+			function (PolicyNode $node) use (&$set) {
389
+				$parents = $node->parents();
390
+				// node has parents
391
+				if (count($parents)) {
392
+					// check that each ancestor is an anyPolicy node
393
+					foreach ($parents as $ancestor) {
394
+						if (!$ancestor->isAnyPolicy()) {
395
+							return;
396
+						}
397
+					}
398
+					$set[] = $node;
399
+				}
400
+			});
401
+		return $set;
402
+	}
403 403
     
404
-    /**
405
-     * Gather all children of given nodes to a flattened array.
406
-     *
407
-     * @param PolicyNode ...$nodes
408
-     * @return PolicyNode[]
409
-     */
410
-    private static function _gatherChildren(PolicyNode ...$nodes)
411
-    {
412
-        $children = array();
413
-        foreach ($nodes as $node) {
414
-            $children = array_merge($children, $node->children());
415
-        }
416
-        return $children;
417
-    }
404
+	/**
405
+	 * Gather all children of given nodes to a flattened array.
406
+	 *
407
+	 * @param PolicyNode ...$nodes
408
+	 * @return PolicyNode[]
409
+	 */
410
+	private static function _gatherChildren(PolicyNode ...$nodes)
411
+	{
412
+		$children = array();
413
+		foreach ($nodes as $node) {
414
+			$children = array_merge($children, $node->children());
415
+		}
416
+		return $children;
417
+	}
418 418
 }
Please login to merge, or discard this patch.
lib/X509/CertificationPath/CertificationPath.php 1 patch
Indentation   +155 added lines, -155 removed lines patch added patch discarded remove patch
@@ -21,171 +21,171 @@
 block discarded – undo
21 21
  */
22 22
 class CertificationPath implements \Countable, \IteratorAggregate
23 23
 {
24
-    /**
25
-     * Certification path.
26
-     *
27
-     * @var Certificate[] $_certificates
28
-     */
29
-    protected $_certificates;
24
+	/**
25
+	 * Certification path.
26
+	 *
27
+	 * @var Certificate[] $_certificates
28
+	 */
29
+	protected $_certificates;
30 30
     
31
-    /**
32
-     * Constructor.
33
-     *
34
-     * @param Certificate ...$certificates Certificates from the trust anchor
35
-     *        to the target end-entity certificate
36
-     */
37
-    public function __construct(Certificate ...$certificates)
38
-    {
39
-        $this->_certificates = $certificates;
40
-    }
31
+	/**
32
+	 * Constructor.
33
+	 *
34
+	 * @param Certificate ...$certificates Certificates from the trust anchor
35
+	 *        to the target end-entity certificate
36
+	 */
37
+	public function __construct(Certificate ...$certificates)
38
+	{
39
+		$this->_certificates = $certificates;
40
+	}
41 41
     
42
-    /**
43
-     * Initialize from a certificate chain.
44
-     *
45
-     * @param CertificateChain $chain
46
-     * @return self
47
-     */
48
-    public static function fromCertificateChain(CertificateChain $chain)
49
-    {
50
-        return new self(...array_reverse($chain->certificates(), false));
51
-    }
42
+	/**
43
+	 * Initialize from a certificate chain.
44
+	 *
45
+	 * @param CertificateChain $chain
46
+	 * @return self
47
+	 */
48
+	public static function fromCertificateChain(CertificateChain $chain)
49
+	{
50
+		return new self(...array_reverse($chain->certificates(), false));
51
+	}
52 52
     
53
-    /**
54
-     * Build certification path to given target.
55
-     *
56
-     * @param Certificate $target Target end-entity certificate
57
-     * @param CertificateBundle $trust_anchors List of trust anchors
58
-     * @param CertificateBundle|null $intermediate Optional intermediate
59
-     *        certificates
60
-     * @return self
61
-     */
62
-    public static function toTarget(Certificate $target,
63
-        CertificateBundle $trust_anchors, CertificateBundle $intermediate = null)
64
-    {
65
-        $builder = new CertificationPathBuilder($trust_anchors);
66
-        return $builder->shortestPathToTarget($target, $intermediate);
67
-    }
53
+	/**
54
+	 * Build certification path to given target.
55
+	 *
56
+	 * @param Certificate $target Target end-entity certificate
57
+	 * @param CertificateBundle $trust_anchors List of trust anchors
58
+	 * @param CertificateBundle|null $intermediate Optional intermediate
59
+	 *        certificates
60
+	 * @return self
61
+	 */
62
+	public static function toTarget(Certificate $target,
63
+		CertificateBundle $trust_anchors, CertificateBundle $intermediate = null)
64
+	{
65
+		$builder = new CertificationPathBuilder($trust_anchors);
66
+		return $builder->shortestPathToTarget($target, $intermediate);
67
+	}
68 68
     
69
-    /**
70
-     * Build certification path from given trust anchor to target certificate,
71
-     * using intermediate certificates from given bundle.
72
-     *
73
-     * @param Certificate $trust_anchor Trust anchor certificate
74
-     * @param Certificate $target Target end-entity certificate
75
-     * @param CertificateBundle|null $intermediate Optional intermediate
76
-     *        certificates
77
-     * @return self
78
-     */
79
-    public static function fromTrustAnchorToTarget(Certificate $trust_anchor,
80
-        Certificate $target, CertificateBundle $intermediate = null)
81
-    {
82
-        return self::toTarget($target, new CertificateBundle($trust_anchor),
83
-            $intermediate);
84
-    }
69
+	/**
70
+	 * Build certification path from given trust anchor to target certificate,
71
+	 * using intermediate certificates from given bundle.
72
+	 *
73
+	 * @param Certificate $trust_anchor Trust anchor certificate
74
+	 * @param Certificate $target Target end-entity certificate
75
+	 * @param CertificateBundle|null $intermediate Optional intermediate
76
+	 *        certificates
77
+	 * @return self
78
+	 */
79
+	public static function fromTrustAnchorToTarget(Certificate $trust_anchor,
80
+		Certificate $target, CertificateBundle $intermediate = null)
81
+	{
82
+		return self::toTarget($target, new CertificateBundle($trust_anchor),
83
+			$intermediate);
84
+	}
85 85
     
86
-    /**
87
-     * Get certificates.
88
-     *
89
-     * @return Certificate[]
90
-     */
91
-    public function certificates()
92
-    {
93
-        return $this->_certificates;
94
-    }
86
+	/**
87
+	 * Get certificates.
88
+	 *
89
+	 * @return Certificate[]
90
+	 */
91
+	public function certificates()
92
+	{
93
+		return $this->_certificates;
94
+	}
95 95
     
96
-    /**
97
-     * Get the trust anchor certificate from the path.
98
-     *
99
-     * @throws \LogicException If path is empty
100
-     * @return Certificate
101
-     */
102
-    public function trustAnchorCertificate()
103
-    {
104
-        if (!count($this->_certificates)) {
105
-            throw new \LogicException("No certificates.");
106
-        }
107
-        return $this->_certificates[0];
108
-    }
96
+	/**
97
+	 * Get the trust anchor certificate from the path.
98
+	 *
99
+	 * @throws \LogicException If path is empty
100
+	 * @return Certificate
101
+	 */
102
+	public function trustAnchorCertificate()
103
+	{
104
+		if (!count($this->_certificates)) {
105
+			throw new \LogicException("No certificates.");
106
+		}
107
+		return $this->_certificates[0];
108
+	}
109 109
     
110
-    /**
111
-     * Get the end-entity certificate from the path.
112
-     *
113
-     * @throws \LogicException If path is empty
114
-     * @return Certificate
115
-     */
116
-    public function endEntityCertificate()
117
-    {
118
-        if (!count($this->_certificates)) {
119
-            throw new \LogicException("No certificates.");
120
-        }
121
-        return $this->_certificates[count($this->_certificates) - 1];
122
-    }
110
+	/**
111
+	 * Get the end-entity certificate from the path.
112
+	 *
113
+	 * @throws \LogicException If path is empty
114
+	 * @return Certificate
115
+	 */
116
+	public function endEntityCertificate()
117
+	{
118
+		if (!count($this->_certificates)) {
119
+			throw new \LogicException("No certificates.");
120
+		}
121
+		return $this->_certificates[count($this->_certificates) - 1];
122
+	}
123 123
     
124
-    /**
125
-     * Get certification path as a certificate chain.
126
-     *
127
-     * @return CertificateChain
128
-     */
129
-    public function certificateChain()
130
-    {
131
-        return new CertificateChain(
132
-            ...array_reverse($this->_certificates, false));
133
-    }
124
+	/**
125
+	 * Get certification path as a certificate chain.
126
+	 *
127
+	 * @return CertificateChain
128
+	 */
129
+	public function certificateChain()
130
+	{
131
+		return new CertificateChain(
132
+			...array_reverse($this->_certificates, false));
133
+	}
134 134
     
135
-    /**
136
-     * Check whether certification path starts with one ore more given
137
-     * certificates in parameter order.
138
-     *
139
-     * @param Certificate ...$certs Certificates
140
-     * @return true
141
-     */
142
-    public function startsWith(Certificate ...$certs)
143
-    {
144
-        $n = count($certs);
145
-        if ($n > count($this->_certificates)) {
146
-            return false;
147
-        }
148
-        for ($i = 0; $i < $n; ++$i) {
149
-            if (!$certs[$i]->equals($this->_certificates[$i])) {
150
-                return false;
151
-            }
152
-        }
153
-        return true;
154
-    }
135
+	/**
136
+	 * Check whether certification path starts with one ore more given
137
+	 * certificates in parameter order.
138
+	 *
139
+	 * @param Certificate ...$certs Certificates
140
+	 * @return true
141
+	 */
142
+	public function startsWith(Certificate ...$certs)
143
+	{
144
+		$n = count($certs);
145
+		if ($n > count($this->_certificates)) {
146
+			return false;
147
+		}
148
+		for ($i = 0; $i < $n; ++$i) {
149
+			if (!$certs[$i]->equals($this->_certificates[$i])) {
150
+				return false;
151
+			}
152
+		}
153
+		return true;
154
+	}
155 155
     
156
-    /**
157
-     * Validate certification path.
158
-     *
159
-     * @param PathValidationConfig $config
160
-     * @param Crypto|null $crypto Crypto engine, use default if not set
161
-     * @throws Exception\PathValidationException
162
-     * @return PathValidation\PathValidationResult
163
-     */
164
-    public function validate(PathValidationConfig $config, Crypto $crypto = null)
165
-    {
166
-        $crypto = $crypto ?: Crypto::getDefault();
167
-        $validator = new PathValidator($crypto, $config, ...$this->_certificates);
168
-        return $validator->validate();
169
-    }
156
+	/**
157
+	 * Validate certification path.
158
+	 *
159
+	 * @param PathValidationConfig $config
160
+	 * @param Crypto|null $crypto Crypto engine, use default if not set
161
+	 * @throws Exception\PathValidationException
162
+	 * @return PathValidation\PathValidationResult
163
+	 */
164
+	public function validate(PathValidationConfig $config, Crypto $crypto = null)
165
+	{
166
+		$crypto = $crypto ?: Crypto::getDefault();
167
+		$validator = new PathValidator($crypto, $config, ...$this->_certificates);
168
+		return $validator->validate();
169
+	}
170 170
     
171
-    /**
172
-     *
173
-     * @see \Countable::count()
174
-     * @return int
175
-     */
176
-    public function count()
177
-    {
178
-        return count($this->_certificates);
179
-    }
171
+	/**
172
+	 *
173
+	 * @see \Countable::count()
174
+	 * @return int
175
+	 */
176
+	public function count()
177
+	{
178
+		return count($this->_certificates);
179
+	}
180 180
     
181
-    /**
182
-     * Get iterator for certificates.
183
-     *
184
-     * @see \IteratorAggregate::getIterator()
185
-     * @return \ArrayIterator
186
-     */
187
-    public function getIterator()
188
-    {
189
-        return new \ArrayIterator($this->_certificates);
190
-    }
181
+	/**
182
+	 * Get iterator for certificates.
183
+	 *
184
+	 * @see \IteratorAggregate::getIterator()
185
+	 * @return \ArrayIterator
186
+	 */
187
+	public function getIterator()
188
+	{
189
+		return new \ArrayIterator($this->_certificates);
190
+	}
191 191
 }
Please login to merge, or discard this patch.
lib/X509/CertificationPath/PathValidation/ValidatorState.php 1 patch
Indentation   +480 added lines, -480 removed lines patch added patch discarded remove patch
@@ -18,484 +18,484 @@
 block discarded – undo
18 18
  */
19 19
 class ValidatorState
20 20
 {
21
-    /**
22
-     * Length of the certification path (n).
23
-     *
24
-     * @var int $_pathLength
25
-     */
26
-    protected $_pathLength;
27
-    
28
-    /**
29
-     * Current index in the certification path in the range of 1..n (i).
30
-     *
31
-     * @var int $_index
32
-     */
33
-    protected $_index;
34
-    
35
-    /**
36
-     * Valid policy tree (valid_policy_tree).
37
-     *
38
-     * A tree of certificate policies with their optional qualifiers.
39
-     * Each of the leaves of the tree represents a valid policy at this stage in
40
-     * the certification path validation.
41
-     * Once the tree is set to NULL, policy processing ceases.
42
-     *
43
-     * @var PolicyTree|null $_validPolicyTree
44
-     */
45
-    protected $_validPolicyTree;
46
-    
47
-    /**
48
-     * Permitted subtrees (permitted_subtrees).
49
-     *
50
-     * A set of root names for each name type defining a set of subtrees within
51
-     * which all subject names in subsequent certificates in the certification
52
-     * path must fall.
53
-     *
54
-     * @var mixed $_permittedSubtrees
55
-     */
56
-    protected $_permittedSubtrees;
57
-    
58
-    /**
59
-     * Excluded subtrees (excluded_subtrees).
60
-     *
61
-     * A set of root names for each name type defining a set of subtrees within
62
-     * which no subject name in subsequent certificates in the certification
63
-     * path may fall.
64
-     *
65
-     * @var mixed $_excludedSubtrees
66
-     */
67
-    protected $_excludedSubtrees;
68
-    
69
-    /**
70
-     * Explicit policy (explicit_policy).
71
-     *
72
-     * An integer that indicates if a non-NULL valid_policy_tree is required.
73
-     *
74
-     * @var int $_explicitPolicy
75
-     */
76
-    protected $_explicitPolicy;
77
-    
78
-    /**
79
-     * Inhibit anyPolicy (inhibit_anyPolicy).
80
-     *
81
-     * An integer that indicates whether the anyPolicy policy identifier is
82
-     * considered a match.
83
-     *
84
-     * @var int $_inhibitAnyPolicy
85
-     */
86
-    protected $_inhibitAnyPolicy;
87
-    
88
-    /**
89
-     * Policy mapping (policy_mapping).
90
-     *
91
-     * An integer that indicates if policy mapping is permitted.
92
-     *
93
-     * @var int $_policyMapping
94
-     */
95
-    protected $_policyMapping;
96
-    
97
-    /**
98
-     * Working public key algorithm (working_public_key_algorithm).
99
-     *
100
-     * The digital signature algorithm used to verify the signature of a
101
-     * certificate.
102
-     *
103
-     * @var AlgorithmIdentifierType $_workingPublicKeyAlgorithm
104
-     */
105
-    protected $_workingPublicKeyAlgorithm;
106
-    
107
-    /**
108
-     * Working public key (working_public_key).
109
-     *
110
-     * The public key used to verify the signature of a certificate.
111
-     *
112
-     * @var PublicKeyInfo $_workingPublicKey
113
-     */
114
-    protected $_workingPublicKey;
115
-    
116
-    /**
117
-     * Working public key parameters (working_public_key_parameters).
118
-     *
119
-     * Parameters associated with the current public key that may be required to
120
-     * verify a signature.
121
-     *
122
-     * @var Element|null $_workingPublicKeyParameters
123
-     */
124
-    protected $_workingPublicKeyParameters;
125
-    
126
-    /**
127
-     * Working issuer name (working_issuer_name).
128
-     *
129
-     * The issuer distinguished name expected in the next certificate in the
130
-     * chain.
131
-     *
132
-     * @var Name $_workingIssuerName
133
-     */
134
-    protected $_workingIssuerName;
135
-    
136
-    /**
137
-     * Maximum certification path length (max_path_length).
138
-     *
139
-     * @var int $_maxPathLength
140
-     */
141
-    protected $_maxPathLength;
142
-    
143
-    /**
144
-     * Constructor.
145
-     */
146
-    protected function __construct()
147
-    {
148
-    }
149
-    
150
-    /**
151
-     * Initialize variables according to RFC 5280 6.1.2.
152
-     *
153
-     * @link https://tools.ietf.org/html/rfc5280#section-6.1.2
154
-     * @param PathValidationConfig $config
155
-     * @param Certificate $trust_anchor Trust anchor certificate
156
-     * @param int $n Number of certificates in the certification path
157
-     * @return self
158
-     */
159
-    public static function initialize(PathValidationConfig $config,
160
-        Certificate $trust_anchor, $n)
161
-    {
162
-        $state = new self();
163
-        $state->_pathLength = $n;
164
-        $state->_index = 1;
165
-        $state->_validPolicyTree = new PolicyTree(PolicyNode::anyPolicyNode());
166
-        $state->_permittedSubtrees = null;
167
-        $state->_excludedSubtrees = null;
168
-        $state->_explicitPolicy = $config->explicitPolicy() ? 0 : $n + 1;
169
-        $state->_inhibitAnyPolicy = $config->anyPolicyInhibit() ? 0 : $n + 1;
170
-        $state->_policyMapping = $config->policyMappingInhibit() ? 0 : $n + 1;
171
-        $state->_workingPublicKeyAlgorithm = $trust_anchor->signatureAlgorithm();
172
-        $tbsCert = $trust_anchor->tbsCertificate();
173
-        $state->_workingPublicKey = $tbsCert->subjectPublicKeyInfo();
174
-        $state->_workingPublicKeyParameters = self::getAlgorithmParameters(
175
-            $state->_workingPublicKey->algorithmIdentifier());
176
-        $state->_workingIssuerName = $tbsCert->issuer();
177
-        $state->_maxPathLength = $config->maxLength();
178
-        return $state;
179
-    }
180
-    
181
-    /**
182
-     * Get self with current certification path index set.
183
-     *
184
-     * @param int $index
185
-     * @return self
186
-     */
187
-    public function withIndex($index)
188
-    {
189
-        $state = clone $this;
190
-        $state->_index = $index;
191
-        return $state;
192
-    }
193
-    
194
-    /**
195
-     * Get self with valid_policy_tree.
196
-     *
197
-     * @param PolicyTree $policy_tree
198
-     * @return self
199
-     */
200
-    public function withValidPolicyTree(PolicyTree $policy_tree)
201
-    {
202
-        $state = clone $this;
203
-        $state->_validPolicyTree = $policy_tree;
204
-        return $state;
205
-    }
206
-    
207
-    /**
208
-     * Get self with valid_policy_tree set to null.
209
-     *
210
-     * @return self
211
-     */
212
-    public function withoutValidPolicyTree()
213
-    {
214
-        $state = clone $this;
215
-        $state->_validPolicyTree = null;
216
-        return $state;
217
-    }
218
-    
219
-    /**
220
-     * Get self with explicit_policy.
221
-     *
222
-     * @param int $num
223
-     * @return self
224
-     */
225
-    public function withExplicitPolicy($num)
226
-    {
227
-        $state = clone $this;
228
-        $state->_explicitPolicy = $num;
229
-        return $state;
230
-    }
231
-    
232
-    /**
233
-     * Get self with inhibit_anyPolicy.
234
-     *
235
-     * @param int $num
236
-     * @return self
237
-     */
238
-    public function withInhibitAnyPolicy($num)
239
-    {
240
-        $state = clone $this;
241
-        $state->_inhibitAnyPolicy = $num;
242
-        return $state;
243
-    }
244
-    
245
-    /**
246
-     * Get self with policy_mapping.
247
-     *
248
-     * @param int $num
249
-     * @return self
250
-     */
251
-    public function withPolicyMapping($num)
252
-    {
253
-        $state = clone $this;
254
-        $state->_policyMapping = $num;
255
-        return $state;
256
-    }
257
-    
258
-    /**
259
-     * Get self with working_public_key_algorithm.
260
-     *
261
-     * @param AlgorithmIdentifierType $algo
262
-     * @return self
263
-     */
264
-    public function withWorkingPublicKeyAlgorithm(AlgorithmIdentifierType $algo)
265
-    {
266
-        $state = clone $this;
267
-        $state->_workingPublicKeyAlgorithm = $algo;
268
-        return $state;
269
-    }
270
-    
271
-    /**
272
-     * Get self with working_public_key.
273
-     *
274
-     * @param PublicKeyInfo $pubkey_info
275
-     * @return self
276
-     */
277
-    public function withWorkingPublicKey(PublicKeyInfo $pubkey_info)
278
-    {
279
-        $state = clone $this;
280
-        $state->_workingPublicKey = $pubkey_info;
281
-        return $state;
282
-    }
283
-    
284
-    /**
285
-     * Get self with working_public_key_parameters.
286
-     *
287
-     * @param Element|null $params
288
-     * @return self
289
-     */
290
-    public function withWorkingPublicKeyParameters(Element $params = null)
291
-    {
292
-        $state = clone $this;
293
-        $state->_workingPublicKeyParameters = $params;
294
-        return $state;
295
-    }
296
-    
297
-    /**
298
-     * Get self with working_issuer_name.
299
-     *
300
-     * @param Name $issuer
301
-     * @return self
302
-     */
303
-    public function withWorkingIssuerName(Name $issuer)
304
-    {
305
-        $state = clone $this;
306
-        $state->_workingIssuerName = $issuer;
307
-        return $state;
308
-    }
309
-    
310
-    /**
311
-     * Get self with max_path_length.
312
-     *
313
-     * @param int $length
314
-     * @return self
315
-     */
316
-    public function withMaxPathLength($length)
317
-    {
318
-        $state = clone $this;
319
-        $state->_maxPathLength = $length;
320
-        return $state;
321
-    }
322
-    
323
-    /**
324
-     * Get the certification path length (n).
325
-     *
326
-     * @return int
327
-     */
328
-    public function pathLength()
329
-    {
330
-        return $this->_pathLength;
331
-    }
332
-    
333
-    /**
334
-     * Get the current index in certification path in the range of 1..n.
335
-     *
336
-     * @return int
337
-     */
338
-    public function index()
339
-    {
340
-        return $this->_index;
341
-    }
342
-    
343
-    /**
344
-     * Check whether valid_policy_tree is present.
345
-     *
346
-     * @return bool
347
-     */
348
-    public function hasValidPolicyTree()
349
-    {
350
-        return isset($this->_validPolicyTree);
351
-    }
352
-    
353
-    /**
354
-     * Get valid_policy_tree.
355
-     *
356
-     * @throws \LogicException
357
-     * @return PolicyTree
358
-     */
359
-    public function validPolicyTree()
360
-    {
361
-        if (!$this->hasValidPolicyTree()) {
362
-            throw new \LogicException("valid_policy_tree not set.");
363
-        }
364
-        return $this->_validPolicyTree;
365
-    }
366
-    
367
-    /**
368
-     * Get permitted_subtrees.
369
-     *
370
-     * @return mixed
371
-     */
372
-    public function permittedSubtrees()
373
-    {
374
-        return $this->_permittedSubtrees;
375
-    }
376
-    
377
-    /**
378
-     * Get excluded_subtrees.
379
-     *
380
-     * @return mixed
381
-     */
382
-    public function excludedSubtrees()
383
-    {
384
-        return $this->_excludedSubtrees;
385
-    }
386
-    
387
-    /**
388
-     * Get explicit_policy.
389
-     *
390
-     * @return int
391
-     */
392
-    public function explicitPolicy()
393
-    {
394
-        return $this->_explicitPolicy;
395
-    }
396
-    
397
-    /**
398
-     * Get inhibit_anyPolicy.
399
-     *
400
-     * @return int
401
-     */
402
-    public function inhibitAnyPolicy()
403
-    {
404
-        return $this->_inhibitAnyPolicy;
405
-    }
406
-    
407
-    /**
408
-     * Get policy_mapping.
409
-     *
410
-     * @return int
411
-     */
412
-    public function policyMapping()
413
-    {
414
-        return $this->_policyMapping;
415
-    }
416
-    
417
-    /**
418
-     * Get working_public_key_algorithm.
419
-     *
420
-     * @return AlgorithmIdentifierType
421
-     */
422
-    public function workingPublicKeyAlgorithm()
423
-    {
424
-        return $this->_workingPublicKeyAlgorithm;
425
-    }
426
-    
427
-    /**
428
-     * Get working_public_key.
429
-     *
430
-     * @return PublicKeyInfo
431
-     */
432
-    public function workingPublicKey()
433
-    {
434
-        return $this->_workingPublicKey;
435
-    }
436
-    
437
-    /**
438
-     * Get working_public_key_parameters.
439
-     *
440
-     * @return Element|null
441
-     */
442
-    public function workingPublicKeyParameters()
443
-    {
444
-        return $this->_workingPublicKeyParameters;
445
-    }
446
-    
447
-    /**
448
-     * Get working_issuer_name.
449
-     *
450
-     * @return Name
451
-     */
452
-    public function workingIssuerName()
453
-    {
454
-        return $this->_workingIssuerName;
455
-    }
456
-    
457
-    /**
458
-     * Get maximum certification path length.
459
-     *
460
-     * @return int
461
-     */
462
-    public function maxPathLength()
463
-    {
464
-        return $this->_maxPathLength;
465
-    }
466
-    
467
-    /**
468
-     * Check whether processing the final certificate of the certification path.
469
-     *
470
-     * @return bool
471
-     */
472
-    public function isFinal()
473
-    {
474
-        return $this->_index == $this->_pathLength;
475
-    }
476
-    
477
-    /**
478
-     * Get the path validation result.
479
-     *
480
-     * @param Certificate[] $certificates Certificates in a certification path
481
-     * @return PathValidationResult
482
-     */
483
-    public function getResult(array $certificates)
484
-    {
485
-        return new PathValidationResult($certificates, $this->_validPolicyTree,
486
-            $this->_workingPublicKey, $this->_workingPublicKeyAlgorithm,
487
-            $this->_workingPublicKeyParameters);
488
-    }
489
-    
490
-    /**
491
-     * Get ASN.1 parameters from algorithm identifier.
492
-     *
493
-     * @param AlgorithmIdentifierType $algo
494
-     * @return Element|null ASN.1 element or null if parameters are omitted
495
-     */
496
-    public static function getAlgorithmParameters(AlgorithmIdentifierType $algo)
497
-    {
498
-        $seq = $algo->toASN1();
499
-        return $seq->has(1) ? $seq->at(1)->asElement() : null;
500
-    }
21
+	/**
22
+	 * Length of the certification path (n).
23
+	 *
24
+	 * @var int $_pathLength
25
+	 */
26
+	protected $_pathLength;
27
+    
28
+	/**
29
+	 * Current index in the certification path in the range of 1..n (i).
30
+	 *
31
+	 * @var int $_index
32
+	 */
33
+	protected $_index;
34
+    
35
+	/**
36
+	 * Valid policy tree (valid_policy_tree).
37
+	 *
38
+	 * A tree of certificate policies with their optional qualifiers.
39
+	 * Each of the leaves of the tree represents a valid policy at this stage in
40
+	 * the certification path validation.
41
+	 * Once the tree is set to NULL, policy processing ceases.
42
+	 *
43
+	 * @var PolicyTree|null $_validPolicyTree
44
+	 */
45
+	protected $_validPolicyTree;
46
+    
47
+	/**
48
+	 * Permitted subtrees (permitted_subtrees).
49
+	 *
50
+	 * A set of root names for each name type defining a set of subtrees within
51
+	 * which all subject names in subsequent certificates in the certification
52
+	 * path must fall.
53
+	 *
54
+	 * @var mixed $_permittedSubtrees
55
+	 */
56
+	protected $_permittedSubtrees;
57
+    
58
+	/**
59
+	 * Excluded subtrees (excluded_subtrees).
60
+	 *
61
+	 * A set of root names for each name type defining a set of subtrees within
62
+	 * which no subject name in subsequent certificates in the certification
63
+	 * path may fall.
64
+	 *
65
+	 * @var mixed $_excludedSubtrees
66
+	 */
67
+	protected $_excludedSubtrees;
68
+    
69
+	/**
70
+	 * Explicit policy (explicit_policy).
71
+	 *
72
+	 * An integer that indicates if a non-NULL valid_policy_tree is required.
73
+	 *
74
+	 * @var int $_explicitPolicy
75
+	 */
76
+	protected $_explicitPolicy;
77
+    
78
+	/**
79
+	 * Inhibit anyPolicy (inhibit_anyPolicy).
80
+	 *
81
+	 * An integer that indicates whether the anyPolicy policy identifier is
82
+	 * considered a match.
83
+	 *
84
+	 * @var int $_inhibitAnyPolicy
85
+	 */
86
+	protected $_inhibitAnyPolicy;
87
+    
88
+	/**
89
+	 * Policy mapping (policy_mapping).
90
+	 *
91
+	 * An integer that indicates if policy mapping is permitted.
92
+	 *
93
+	 * @var int $_policyMapping
94
+	 */
95
+	protected $_policyMapping;
96
+    
97
+	/**
98
+	 * Working public key algorithm (working_public_key_algorithm).
99
+	 *
100
+	 * The digital signature algorithm used to verify the signature of a
101
+	 * certificate.
102
+	 *
103
+	 * @var AlgorithmIdentifierType $_workingPublicKeyAlgorithm
104
+	 */
105
+	protected $_workingPublicKeyAlgorithm;
106
+    
107
+	/**
108
+	 * Working public key (working_public_key).
109
+	 *
110
+	 * The public key used to verify the signature of a certificate.
111
+	 *
112
+	 * @var PublicKeyInfo $_workingPublicKey
113
+	 */
114
+	protected $_workingPublicKey;
115
+    
116
+	/**
117
+	 * Working public key parameters (working_public_key_parameters).
118
+	 *
119
+	 * Parameters associated with the current public key that may be required to
120
+	 * verify a signature.
121
+	 *
122
+	 * @var Element|null $_workingPublicKeyParameters
123
+	 */
124
+	protected $_workingPublicKeyParameters;
125
+    
126
+	/**
127
+	 * Working issuer name (working_issuer_name).
128
+	 *
129
+	 * The issuer distinguished name expected in the next certificate in the
130
+	 * chain.
131
+	 *
132
+	 * @var Name $_workingIssuerName
133
+	 */
134
+	protected $_workingIssuerName;
135
+    
136
+	/**
137
+	 * Maximum certification path length (max_path_length).
138
+	 *
139
+	 * @var int $_maxPathLength
140
+	 */
141
+	protected $_maxPathLength;
142
+    
143
+	/**
144
+	 * Constructor.
145
+	 */
146
+	protected function __construct()
147
+	{
148
+	}
149
+    
150
+	/**
151
+	 * Initialize variables according to RFC 5280 6.1.2.
152
+	 *
153
+	 * @link https://tools.ietf.org/html/rfc5280#section-6.1.2
154
+	 * @param PathValidationConfig $config
155
+	 * @param Certificate $trust_anchor Trust anchor certificate
156
+	 * @param int $n Number of certificates in the certification path
157
+	 * @return self
158
+	 */
159
+	public static function initialize(PathValidationConfig $config,
160
+		Certificate $trust_anchor, $n)
161
+	{
162
+		$state = new self();
163
+		$state->_pathLength = $n;
164
+		$state->_index = 1;
165
+		$state->_validPolicyTree = new PolicyTree(PolicyNode::anyPolicyNode());
166
+		$state->_permittedSubtrees = null;
167
+		$state->_excludedSubtrees = null;
168
+		$state->_explicitPolicy = $config->explicitPolicy() ? 0 : $n + 1;
169
+		$state->_inhibitAnyPolicy = $config->anyPolicyInhibit() ? 0 : $n + 1;
170
+		$state->_policyMapping = $config->policyMappingInhibit() ? 0 : $n + 1;
171
+		$state->_workingPublicKeyAlgorithm = $trust_anchor->signatureAlgorithm();
172
+		$tbsCert = $trust_anchor->tbsCertificate();
173
+		$state->_workingPublicKey = $tbsCert->subjectPublicKeyInfo();
174
+		$state->_workingPublicKeyParameters = self::getAlgorithmParameters(
175
+			$state->_workingPublicKey->algorithmIdentifier());
176
+		$state->_workingIssuerName = $tbsCert->issuer();
177
+		$state->_maxPathLength = $config->maxLength();
178
+		return $state;
179
+	}
180
+    
181
+	/**
182
+	 * Get self with current certification path index set.
183
+	 *
184
+	 * @param int $index
185
+	 * @return self
186
+	 */
187
+	public function withIndex($index)
188
+	{
189
+		$state = clone $this;
190
+		$state->_index = $index;
191
+		return $state;
192
+	}
193
+    
194
+	/**
195
+	 * Get self with valid_policy_tree.
196
+	 *
197
+	 * @param PolicyTree $policy_tree
198
+	 * @return self
199
+	 */
200
+	public function withValidPolicyTree(PolicyTree $policy_tree)
201
+	{
202
+		$state = clone $this;
203
+		$state->_validPolicyTree = $policy_tree;
204
+		return $state;
205
+	}
206
+    
207
+	/**
208
+	 * Get self with valid_policy_tree set to null.
209
+	 *
210
+	 * @return self
211
+	 */
212
+	public function withoutValidPolicyTree()
213
+	{
214
+		$state = clone $this;
215
+		$state->_validPolicyTree = null;
216
+		return $state;
217
+	}
218
+    
219
+	/**
220
+	 * Get self with explicit_policy.
221
+	 *
222
+	 * @param int $num
223
+	 * @return self
224
+	 */
225
+	public function withExplicitPolicy($num)
226
+	{
227
+		$state = clone $this;
228
+		$state->_explicitPolicy = $num;
229
+		return $state;
230
+	}
231
+    
232
+	/**
233
+	 * Get self with inhibit_anyPolicy.
234
+	 *
235
+	 * @param int $num
236
+	 * @return self
237
+	 */
238
+	public function withInhibitAnyPolicy($num)
239
+	{
240
+		$state = clone $this;
241
+		$state->_inhibitAnyPolicy = $num;
242
+		return $state;
243
+	}
244
+    
245
+	/**
246
+	 * Get self with policy_mapping.
247
+	 *
248
+	 * @param int $num
249
+	 * @return self
250
+	 */
251
+	public function withPolicyMapping($num)
252
+	{
253
+		$state = clone $this;
254
+		$state->_policyMapping = $num;
255
+		return $state;
256
+	}
257
+    
258
+	/**
259
+	 * Get self with working_public_key_algorithm.
260
+	 *
261
+	 * @param AlgorithmIdentifierType $algo
262
+	 * @return self
263
+	 */
264
+	public function withWorkingPublicKeyAlgorithm(AlgorithmIdentifierType $algo)
265
+	{
266
+		$state = clone $this;
267
+		$state->_workingPublicKeyAlgorithm = $algo;
268
+		return $state;
269
+	}
270
+    
271
+	/**
272
+	 * Get self with working_public_key.
273
+	 *
274
+	 * @param PublicKeyInfo $pubkey_info
275
+	 * @return self
276
+	 */
277
+	public function withWorkingPublicKey(PublicKeyInfo $pubkey_info)
278
+	{
279
+		$state = clone $this;
280
+		$state->_workingPublicKey = $pubkey_info;
281
+		return $state;
282
+	}
283
+    
284
+	/**
285
+	 * Get self with working_public_key_parameters.
286
+	 *
287
+	 * @param Element|null $params
288
+	 * @return self
289
+	 */
290
+	public function withWorkingPublicKeyParameters(Element $params = null)
291
+	{
292
+		$state = clone $this;
293
+		$state->_workingPublicKeyParameters = $params;
294
+		return $state;
295
+	}
296
+    
297
+	/**
298
+	 * Get self with working_issuer_name.
299
+	 *
300
+	 * @param Name $issuer
301
+	 * @return self
302
+	 */
303
+	public function withWorkingIssuerName(Name $issuer)
304
+	{
305
+		$state = clone $this;
306
+		$state->_workingIssuerName = $issuer;
307
+		return $state;
308
+	}
309
+    
310
+	/**
311
+	 * Get self with max_path_length.
312
+	 *
313
+	 * @param int $length
314
+	 * @return self
315
+	 */
316
+	public function withMaxPathLength($length)
317
+	{
318
+		$state = clone $this;
319
+		$state->_maxPathLength = $length;
320
+		return $state;
321
+	}
322
+    
323
+	/**
324
+	 * Get the certification path length (n).
325
+	 *
326
+	 * @return int
327
+	 */
328
+	public function pathLength()
329
+	{
330
+		return $this->_pathLength;
331
+	}
332
+    
333
+	/**
334
+	 * Get the current index in certification path in the range of 1..n.
335
+	 *
336
+	 * @return int
337
+	 */
338
+	public function index()
339
+	{
340
+		return $this->_index;
341
+	}
342
+    
343
+	/**
344
+	 * Check whether valid_policy_tree is present.
345
+	 *
346
+	 * @return bool
347
+	 */
348
+	public function hasValidPolicyTree()
349
+	{
350
+		return isset($this->_validPolicyTree);
351
+	}
352
+    
353
+	/**
354
+	 * Get valid_policy_tree.
355
+	 *
356
+	 * @throws \LogicException
357
+	 * @return PolicyTree
358
+	 */
359
+	public function validPolicyTree()
360
+	{
361
+		if (!$this->hasValidPolicyTree()) {
362
+			throw new \LogicException("valid_policy_tree not set.");
363
+		}
364
+		return $this->_validPolicyTree;
365
+	}
366
+    
367
+	/**
368
+	 * Get permitted_subtrees.
369
+	 *
370
+	 * @return mixed
371
+	 */
372
+	public function permittedSubtrees()
373
+	{
374
+		return $this->_permittedSubtrees;
375
+	}
376
+    
377
+	/**
378
+	 * Get excluded_subtrees.
379
+	 *
380
+	 * @return mixed
381
+	 */
382
+	public function excludedSubtrees()
383
+	{
384
+		return $this->_excludedSubtrees;
385
+	}
386
+    
387
+	/**
388
+	 * Get explicit_policy.
389
+	 *
390
+	 * @return int
391
+	 */
392
+	public function explicitPolicy()
393
+	{
394
+		return $this->_explicitPolicy;
395
+	}
396
+    
397
+	/**
398
+	 * Get inhibit_anyPolicy.
399
+	 *
400
+	 * @return int
401
+	 */
402
+	public function inhibitAnyPolicy()
403
+	{
404
+		return $this->_inhibitAnyPolicy;
405
+	}
406
+    
407
+	/**
408
+	 * Get policy_mapping.
409
+	 *
410
+	 * @return int
411
+	 */
412
+	public function policyMapping()
413
+	{
414
+		return $this->_policyMapping;
415
+	}
416
+    
417
+	/**
418
+	 * Get working_public_key_algorithm.
419
+	 *
420
+	 * @return AlgorithmIdentifierType
421
+	 */
422
+	public function workingPublicKeyAlgorithm()
423
+	{
424
+		return $this->_workingPublicKeyAlgorithm;
425
+	}
426
+    
427
+	/**
428
+	 * Get working_public_key.
429
+	 *
430
+	 * @return PublicKeyInfo
431
+	 */
432
+	public function workingPublicKey()
433
+	{
434
+		return $this->_workingPublicKey;
435
+	}
436
+    
437
+	/**
438
+	 * Get working_public_key_parameters.
439
+	 *
440
+	 * @return Element|null
441
+	 */
442
+	public function workingPublicKeyParameters()
443
+	{
444
+		return $this->_workingPublicKeyParameters;
445
+	}
446
+    
447
+	/**
448
+	 * Get working_issuer_name.
449
+	 *
450
+	 * @return Name
451
+	 */
452
+	public function workingIssuerName()
453
+	{
454
+		return $this->_workingIssuerName;
455
+	}
456
+    
457
+	/**
458
+	 * Get maximum certification path length.
459
+	 *
460
+	 * @return int
461
+	 */
462
+	public function maxPathLength()
463
+	{
464
+		return $this->_maxPathLength;
465
+	}
466
+    
467
+	/**
468
+	 * Check whether processing the final certificate of the certification path.
469
+	 *
470
+	 * @return bool
471
+	 */
472
+	public function isFinal()
473
+	{
474
+		return $this->_index == $this->_pathLength;
475
+	}
476
+    
477
+	/**
478
+	 * Get the path validation result.
479
+	 *
480
+	 * @param Certificate[] $certificates Certificates in a certification path
481
+	 * @return PathValidationResult
482
+	 */
483
+	public function getResult(array $certificates)
484
+	{
485
+		return new PathValidationResult($certificates, $this->_validPolicyTree,
486
+			$this->_workingPublicKey, $this->_workingPublicKeyAlgorithm,
487
+			$this->_workingPublicKeyParameters);
488
+	}
489
+    
490
+	/**
491
+	 * Get ASN.1 parameters from algorithm identifier.
492
+	 *
493
+	 * @param AlgorithmIdentifierType $algo
494
+	 * @return Element|null ASN.1 element or null if parameters are omitted
495
+	 */
496
+	public static function getAlgorithmParameters(AlgorithmIdentifierType $algo)
497
+	{
498
+		$seq = $algo->toASN1();
499
+		return $seq->has(1) ? $seq->at(1)->asElement() : null;
500
+	}
501 501
 }
Please login to merge, or discard this patch.