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 ( 91afec...2569ae )
by Joni
05:59
created
lib/X509/AttributeCertificate/Validation/ACValidationConfig.php 1 patch
Indentation   +98 added lines, -98 removed lines patch added patch discarded remove patch
@@ -12,112 +12,112 @@
 block discarded – undo
12 12
  */
13 13
 class ACValidationConfig
14 14
 {
15
-    /**
16
-     * Certification path of the AC holder.
17
-     *
18
-     * @var CertificationPath
19
-     */
20
-    protected $_holderPath;
15
+	/**
16
+	 * Certification path of the AC holder.
17
+	 *
18
+	 * @var CertificationPath
19
+	 */
20
+	protected $_holderPath;
21 21
     
22
-    /**
23
-     * Certification path of the AC issuer.
24
-     *
25
-     * @var CertificationPath
26
-     */
27
-    protected $_issuerPath;
22
+	/**
23
+	 * Certification path of the AC issuer.
24
+	 *
25
+	 * @var CertificationPath
26
+	 */
27
+	protected $_issuerPath;
28 28
     
29
-    /**
30
-     * Evaluation reference time.
31
-     *
32
-     * @var \DateTimeImmutable
33
-     */
34
-    protected $_evalTime;
29
+	/**
30
+	 * Evaluation reference time.
31
+	 *
32
+	 * @var \DateTimeImmutable
33
+	 */
34
+	protected $_evalTime;
35 35
     
36
-    /**
37
-     * Permitted targets.
38
-     *
39
-     * @var Target[]
40
-     */
41
-    protected $_targets;
36
+	/**
37
+	 * Permitted targets.
38
+	 *
39
+	 * @var Target[]
40
+	 */
41
+	protected $_targets;
42 42
     
43
-    /**
44
-     * Constructor.
45
-     *
46
-     * @param CertificationPath $holder_path Certification path of the AC holder
47
-     * @param CertificationPath $issuer_path Certification path of the AC issuer
48
-     */
49
-    public function __construct(CertificationPath $holder_path,
50
-        CertificationPath $issuer_path)
51
-    {
52
-        $this->_holderPath = $holder_path;
53
-        $this->_issuerPath = $issuer_path;
54
-        $this->_evalTime = new \DateTimeImmutable();
55
-        $this->_targets = array();
56
-    }
43
+	/**
44
+	 * Constructor.
45
+	 *
46
+	 * @param CertificationPath $holder_path Certification path of the AC holder
47
+	 * @param CertificationPath $issuer_path Certification path of the AC issuer
48
+	 */
49
+	public function __construct(CertificationPath $holder_path,
50
+		CertificationPath $issuer_path)
51
+	{
52
+		$this->_holderPath = $holder_path;
53
+		$this->_issuerPath = $issuer_path;
54
+		$this->_evalTime = new \DateTimeImmutable();
55
+		$this->_targets = array();
56
+	}
57 57
     
58
-    /**
59
-     * Get certification path of the AC's holder.
60
-     *
61
-     * @return CertificationPath
62
-     */
63
-    public function holderPath(): CertificationPath
64
-    {
65
-        return $this->_holderPath;
66
-    }
58
+	/**
59
+	 * Get certification path of the AC's holder.
60
+	 *
61
+	 * @return CertificationPath
62
+	 */
63
+	public function holderPath(): CertificationPath
64
+	{
65
+		return $this->_holderPath;
66
+	}
67 67
     
68
-    /**
69
-     * Get certification path of the AC's issuer.
70
-     *
71
-     * @return CertificationPath
72
-     */
73
-    public function issuerPath(): CertificationPath
74
-    {
75
-        return $this->_issuerPath;
76
-    }
68
+	/**
69
+	 * Get certification path of the AC's issuer.
70
+	 *
71
+	 * @return CertificationPath
72
+	 */
73
+	public function issuerPath(): CertificationPath
74
+	{
75
+		return $this->_issuerPath;
76
+	}
77 77
     
78
-    /**
79
-     * Get self with given evaluation reference time.
80
-     *
81
-     * @param \DateTimeImmutable $dt
82
-     * @return self
83
-     */
84
-    public function withEvaluationTime(\DateTimeImmutable $dt): self
85
-    {
86
-        $obj = clone $this;
87
-        $obj->_evalTime = $dt;
88
-        return $obj;
89
-    }
78
+	/**
79
+	 * Get self with given evaluation reference time.
80
+	 *
81
+	 * @param \DateTimeImmutable $dt
82
+	 * @return self
83
+	 */
84
+	public function withEvaluationTime(\DateTimeImmutable $dt): self
85
+	{
86
+		$obj = clone $this;
87
+		$obj->_evalTime = $dt;
88
+		return $obj;
89
+	}
90 90
     
91
-    /**
92
-     * Get the evaluation reference time.
93
-     *
94
-     * @return \DateTimeImmutable
95
-     */
96
-    public function evaluationTime(): \DateTimeImmutable
97
-    {
98
-        return $this->_evalTime;
99
-    }
91
+	/**
92
+	 * Get the evaluation reference time.
93
+	 *
94
+	 * @return \DateTimeImmutable
95
+	 */
96
+	public function evaluationTime(): \DateTimeImmutable
97
+	{
98
+		return $this->_evalTime;
99
+	}
100 100
     
101
-    /**
102
-     * Get self with permitted targets.
103
-     *
104
-     * @param Target ...$targets
105
-     * @return self
106
-     */
107
-    public function withTargets(Target ...$targets): self
108
-    {
109
-        $obj = clone $this;
110
-        $obj->_targets = $targets;
111
-        return $obj;
112
-    }
101
+	/**
102
+	 * Get self with permitted targets.
103
+	 *
104
+	 * @param Target ...$targets
105
+	 * @return self
106
+	 */
107
+	public function withTargets(Target ...$targets): self
108
+	{
109
+		$obj = clone $this;
110
+		$obj->_targets = $targets;
111
+		return $obj;
112
+	}
113 113
     
114
-    /**
115
-     * Get array of permitted targets
116
-     *
117
-     * @return Target[]
118
-     */
119
-    public function targets(): array
120
-    {
121
-        return $this->_targets;
122
-    }
114
+	/**
115
+	 * Get array of permitted targets
116
+	 *
117
+	 * @return Target[]
118
+	 */
119
+	public function targets(): array
120
+	{
121
+		return $this->_targets;
122
+	}
123 123
 }
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/Validation/ACValidator.php 1 patch
Indentation   +164 added lines, -164 removed lines patch added patch discarded remove patch
@@ -21,178 +21,178 @@
 block discarded – undo
21 21
  */
22 22
 class ACValidator
23 23
 {
24
-    /**
25
-     * Attribute certificate.
26
-     *
27
-     * @var AttributeCertificate
28
-     */
29
-    protected $_ac;
24
+	/**
25
+	 * Attribute certificate.
26
+	 *
27
+	 * @var AttributeCertificate
28
+	 */
29
+	protected $_ac;
30 30
     
31
-    /**
32
-     * Validation configuration.
33
-     *
34
-     * @var ACValidationConfig
35
-     */
36
-    protected $_config;
31
+	/**
32
+	 * Validation configuration.
33
+	 *
34
+	 * @var ACValidationConfig
35
+	 */
36
+	protected $_config;
37 37
     
38
-    /**
39
-     * Crypto engine.
40
-     *
41
-     * @var Crypto
42
-     */
43
-    protected $_crypto;
38
+	/**
39
+	 * Crypto engine.
40
+	 *
41
+	 * @var Crypto
42
+	 */
43
+	protected $_crypto;
44 44
     
45
-    /**
46
-     * Constructor.
47
-     *
48
-     * @param AttributeCertificate $ac Attribute certificate to validate
49
-     * @param ACValidationConfig $config Validation configuration
50
-     * @param Crypto|null $crypto Crypto engine, use default if not set
51
-     */
52
-    public function __construct(AttributeCertificate $ac,
53
-        ACValidationConfig $config, Crypto $crypto = null)
54
-    {
55
-        $this->_ac = $ac;
56
-        $this->_config = $config;
57
-        $this->_crypto = $crypto ?: Crypto::getDefault();
58
-    }
45
+	/**
46
+	 * Constructor.
47
+	 *
48
+	 * @param AttributeCertificate $ac Attribute certificate to validate
49
+	 * @param ACValidationConfig $config Validation configuration
50
+	 * @param Crypto|null $crypto Crypto engine, use default if not set
51
+	 */
52
+	public function __construct(AttributeCertificate $ac,
53
+		ACValidationConfig $config, Crypto $crypto = null)
54
+	{
55
+		$this->_ac = $ac;
56
+		$this->_config = $config;
57
+		$this->_crypto = $crypto ?: Crypto::getDefault();
58
+	}
59 59
     
60
-    /**
61
-     * Validate attribute certificate.
62
-     *
63
-     * @throws ACValidationException If validation fails
64
-     * @return AttributeCertificate Validated AC
65
-     */
66
-    public function validate(): AttributeCertificate
67
-    {
68
-        $this->_validateHolder();
69
-        $issuer = $this->_verifyIssuer();
70
-        $this->_validateIssuerProfile($issuer);
71
-        $this->_validateTime();
72
-        $this->_validateTargeting();
73
-        return $this->_ac;
74
-    }
60
+	/**
61
+	 * Validate attribute certificate.
62
+	 *
63
+	 * @throws ACValidationException If validation fails
64
+	 * @return AttributeCertificate Validated AC
65
+	 */
66
+	public function validate(): AttributeCertificate
67
+	{
68
+		$this->_validateHolder();
69
+		$issuer = $this->_verifyIssuer();
70
+		$this->_validateIssuerProfile($issuer);
71
+		$this->_validateTime();
72
+		$this->_validateTargeting();
73
+		return $this->_ac;
74
+	}
75 75
     
76
-    /**
77
-     * Validate AC holder's certification.
78
-     *
79
-     * @throws ACValidationException
80
-     * @return Certificate Certificate of the AC's holder
81
-     */
82
-    private function _validateHolder(): Certificate
83
-    {
84
-        $path = $this->_config->holderPath();
85
-        $config = PathValidationConfig::defaultConfig()->withMaxLength(
86
-            count($path))->withDateTime($this->_config->evaluationTime());
87
-        try {
88
-            $holder = $path->validate($config, $this->_crypto)->certificate();
89
-        } catch (PathValidationException $e) {
90
-            throw new ACValidationException(
91
-                "Failed to validate holder PKC's certification path.", 0, $e);
92
-        }
93
-        if (!$this->_ac->isHeldBy($holder)) {
94
-            throw new ACValidationException("Name mismatch of AC's holder PKC.");
95
-        }
96
-        return $holder;
97
-    }
76
+	/**
77
+	 * Validate AC holder's certification.
78
+	 *
79
+	 * @throws ACValidationException
80
+	 * @return Certificate Certificate of the AC's holder
81
+	 */
82
+	private function _validateHolder(): Certificate
83
+	{
84
+		$path = $this->_config->holderPath();
85
+		$config = PathValidationConfig::defaultConfig()->withMaxLength(
86
+			count($path))->withDateTime($this->_config->evaluationTime());
87
+		try {
88
+			$holder = $path->validate($config, $this->_crypto)->certificate();
89
+		} catch (PathValidationException $e) {
90
+			throw new ACValidationException(
91
+				"Failed to validate holder PKC's certification path.", 0, $e);
92
+		}
93
+		if (!$this->_ac->isHeldBy($holder)) {
94
+			throw new ACValidationException("Name mismatch of AC's holder PKC.");
95
+		}
96
+		return $holder;
97
+	}
98 98
     
99
-    /**
100
-     * Verify AC's signature and issuer's certification.
101
-     *
102
-     * @throws ACValidationException
103
-     * @return Certificate Certificate of the AC's issuer
104
-     */
105
-    private function _verifyIssuer(): Certificate
106
-    {
107
-        $path = $this->_config->issuerPath();
108
-        $config = PathValidationConfig::defaultConfig()->withMaxLength(
109
-            count($path))->withDateTime($this->_config->evaluationTime());
110
-        try {
111
-            $issuer = $path->validate($config, $this->_crypto)->certificate();
112
-        } catch (PathValidationException $e) {
113
-            throw new ACValidationException(
114
-                "Failed to validate issuer PKC's certification path.", 0, $e);
115
-        }
116
-        if (!$this->_ac->isIssuedBy($issuer)) {
117
-            throw new ACValidationException("Name mismatch of AC's issuer PKC.");
118
-        }
119
-        $pubkey_info = $issuer->tbsCertificate()->subjectPublicKeyInfo();
120
-        if (!$this->_ac->verify($pubkey_info, $this->_crypto)) {
121
-            throw new ACValidationException("Failed to verify signature.");
122
-        }
123
-        return $issuer;
124
-    }
99
+	/**
100
+	 * Verify AC's signature and issuer's certification.
101
+	 *
102
+	 * @throws ACValidationException
103
+	 * @return Certificate Certificate of the AC's issuer
104
+	 */
105
+	private function _verifyIssuer(): Certificate
106
+	{
107
+		$path = $this->_config->issuerPath();
108
+		$config = PathValidationConfig::defaultConfig()->withMaxLength(
109
+			count($path))->withDateTime($this->_config->evaluationTime());
110
+		try {
111
+			$issuer = $path->validate($config, $this->_crypto)->certificate();
112
+		} catch (PathValidationException $e) {
113
+			throw new ACValidationException(
114
+				"Failed to validate issuer PKC's certification path.", 0, $e);
115
+		}
116
+		if (!$this->_ac->isIssuedBy($issuer)) {
117
+			throw new ACValidationException("Name mismatch of AC's issuer PKC.");
118
+		}
119
+		$pubkey_info = $issuer->tbsCertificate()->subjectPublicKeyInfo();
120
+		if (!$this->_ac->verify($pubkey_info, $this->_crypto)) {
121
+			throw new ACValidationException("Failed to verify signature.");
122
+		}
123
+		return $issuer;
124
+	}
125 125
     
126
-    /**
127
-     * Validate AC issuer's profile.
128
-     *
129
-     * @link https://tools.ietf.org/html/rfc5755#section-4.5
130
-     * @param Certificate $cert
131
-     * @throws ACValidationException
132
-     */
133
-    private function _validateIssuerProfile(Certificate $cert)
134
-    {
135
-        $exts = $cert->tbsCertificate()->extensions();
136
-        if ($exts->hasKeyUsage() && !$exts->keyUsage()->isDigitalSignature()) {
137
-            throw new ACValidationException(
138
-                "Issuer PKC's Key Usage extension doesn't permit" .
139
-                     " verification of digital signatures.");
140
-        }
141
-        if ($exts->hasBasicConstraints() && $exts->basicConstraints()->isCA()) {
142
-            throw new ACValidationException("Issuer PKC must not be a CA.");
143
-        }
144
-    }
126
+	/**
127
+	 * Validate AC issuer's profile.
128
+	 *
129
+	 * @link https://tools.ietf.org/html/rfc5755#section-4.5
130
+	 * @param Certificate $cert
131
+	 * @throws ACValidationException
132
+	 */
133
+	private function _validateIssuerProfile(Certificate $cert)
134
+	{
135
+		$exts = $cert->tbsCertificate()->extensions();
136
+		if ($exts->hasKeyUsage() && !$exts->keyUsage()->isDigitalSignature()) {
137
+			throw new ACValidationException(
138
+				"Issuer PKC's Key Usage extension doesn't permit" .
139
+					 " verification of digital signatures.");
140
+		}
141
+		if ($exts->hasBasicConstraints() && $exts->basicConstraints()->isCA()) {
142
+			throw new ACValidationException("Issuer PKC must not be a CA.");
143
+		}
144
+	}
145 145
     
146
-    /**
147
-     * Validate AC's validity period.
148
-     *
149
-     * @throws ACValidationException
150
-     */
151
-    private function _validateTime()
152
-    {
153
-        $t = $this->_config->evaluationTime();
154
-        $validity = $this->_ac->acinfo()->validityPeriod();
155
-        if ($validity->notBeforeTime()->diff($t)->invert) {
156
-            throw new ACValidationException("Validity period has not started.");
157
-        }
158
-        if ($t->diff($validity->notAfterTime())->invert) {
159
-            throw new ACValidationException("Attribute certificate has expired.");
160
-        }
161
-    }
146
+	/**
147
+	 * Validate AC's validity period.
148
+	 *
149
+	 * @throws ACValidationException
150
+	 */
151
+	private function _validateTime()
152
+	{
153
+		$t = $this->_config->evaluationTime();
154
+		$validity = $this->_ac->acinfo()->validityPeriod();
155
+		if ($validity->notBeforeTime()->diff($t)->invert) {
156
+			throw new ACValidationException("Validity period has not started.");
157
+		}
158
+		if ($t->diff($validity->notAfterTime())->invert) {
159
+			throw new ACValidationException("Attribute certificate has expired.");
160
+		}
161
+	}
162 162
     
163
-    /**
164
-     * Validate AC's target information.
165
-     *
166
-     * @throws ACValidationException
167
-     */
168
-    private function _validateTargeting()
169
-    {
170
-        $exts = $this->_ac->acinfo()->extensions();
171
-        // if target information extension is not present
172
-        if (!$exts->has(Extension::OID_TARGET_INFORMATION)) {
173
-            return;
174
-        }
175
-        $ext = $exts->get(Extension::OID_TARGET_INFORMATION);
176
-        if ($ext instanceof TargetInformationExtension &&
177
-             !$this->_hasMatchingTarget($ext->targets())) {
178
-            throw new ACValidationException(
179
-                "Attribute certificate doesn't have a matching target.");
180
-        }
181
-    }
163
+	/**
164
+	 * Validate AC's target information.
165
+	 *
166
+	 * @throws ACValidationException
167
+	 */
168
+	private function _validateTargeting()
169
+	{
170
+		$exts = $this->_ac->acinfo()->extensions();
171
+		// if target information extension is not present
172
+		if (!$exts->has(Extension::OID_TARGET_INFORMATION)) {
173
+			return;
174
+		}
175
+		$ext = $exts->get(Extension::OID_TARGET_INFORMATION);
176
+		if ($ext instanceof TargetInformationExtension &&
177
+			 !$this->_hasMatchingTarget($ext->targets())) {
178
+			throw new ACValidationException(
179
+				"Attribute certificate doesn't have a matching target.");
180
+		}
181
+	}
182 182
     
183
-    /**
184
-     * Check whether validation configuration has matching targets.
185
-     *
186
-     * @param Targets $targets Set of eligible targets
187
-     * @return boolean
188
-     */
189
-    private function _hasMatchingTarget(Targets $targets): bool
190
-    {
191
-        foreach ($this->_config->targets() as $target) {
192
-            if ($targets->hasTarget($target)) {
193
-                return true;
194
-            }
195
-        }
196
-        return false;
197
-    }
183
+	/**
184
+	 * Check whether validation configuration has matching targets.
185
+	 *
186
+	 * @param Targets $targets Set of eligible targets
187
+	 * @return boolean
188
+	 */
189
+	private function _hasMatchingTarget(Targets $targets): bool
190
+	{
191
+		foreach ($this->_config->targets() as $target) {
192
+			if ($targets->hasTarget($target)) {
193
+				return true;
194
+			}
195
+		}
196
+		return false;
197
+	}
198 198
 }
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/AttCertValidityPeriod.php 1 patch
Indentation   +82 added lines, -82 removed lines patch added patch discarded remove patch
@@ -15,94 +15,94 @@
 block discarded – undo
15 15
  */
16 16
 class AttCertValidityPeriod
17 17
 {
18
-    use DateTimeHelper;
18
+	use DateTimeHelper;
19 19
     
20
-    /**
21
-     * Not before time.
22
-     *
23
-     * @var \DateTimeImmutable
24
-     */
25
-    protected $_notBeforeTime;
20
+	/**
21
+	 * Not before time.
22
+	 *
23
+	 * @var \DateTimeImmutable
24
+	 */
25
+	protected $_notBeforeTime;
26 26
     
27
-    /**
28
-     * Not after time.
29
-     *
30
-     * @var \DateTimeImmutable
31
-     */
32
-    protected $_notAfterTime;
27
+	/**
28
+	 * Not after time.
29
+	 *
30
+	 * @var \DateTimeImmutable
31
+	 */
32
+	protected $_notAfterTime;
33 33
     
34
-    /**
35
-     * Constructor.
36
-     *
37
-     * @param \DateTimeImmutable $nb
38
-     * @param \DateTimeImmutable $na
39
-     */
40
-    public function __construct(\DateTimeImmutable $nb, \DateTimeImmutable $na)
41
-    {
42
-        $this->_notBeforeTime = $nb;
43
-        $this->_notAfterTime = $na;
44
-    }
34
+	/**
35
+	 * Constructor.
36
+	 *
37
+	 * @param \DateTimeImmutable $nb
38
+	 * @param \DateTimeImmutable $na
39
+	 */
40
+	public function __construct(\DateTimeImmutable $nb, \DateTimeImmutable $na)
41
+	{
42
+		$this->_notBeforeTime = $nb;
43
+		$this->_notAfterTime = $na;
44
+	}
45 45
     
46
-    /**
47
-     * Initialize from ASN.1.
48
-     *
49
-     * @param Sequence $seq
50
-     * @return self
51
-     */
52
-    public static function fromASN1(Sequence $seq): self
53
-    {
54
-        $nb = $seq->at(0)
55
-            ->asGeneralizedTime()
56
-            ->dateTime();
57
-        $na = $seq->at(1)
58
-            ->asGeneralizedTime()
59
-            ->dateTime();
60
-        return new self($nb, $na);
61
-    }
46
+	/**
47
+	 * Initialize from ASN.1.
48
+	 *
49
+	 * @param Sequence $seq
50
+	 * @return self
51
+	 */
52
+	public static function fromASN1(Sequence $seq): self
53
+	{
54
+		$nb = $seq->at(0)
55
+			->asGeneralizedTime()
56
+			->dateTime();
57
+		$na = $seq->at(1)
58
+			->asGeneralizedTime()
59
+			->dateTime();
60
+		return new self($nb, $na);
61
+	}
62 62
     
63
-    /**
64
-     * Initialize from date strings.
65
-     *
66
-     * @param string|null $nb_date Not before date
67
-     * @param string|null $na_date Not after date
68
-     * @param string|null $tz Timezone string
69
-     * @return self
70
-     */
71
-    public static function fromStrings($nb_date, $na_date, $tz = null): self
72
-    {
73
-        $nb = self::_createDateTime($nb_date, $tz);
74
-        $na = self::_createDateTime($na_date, $tz);
75
-        return new self($nb, $na);
76
-    }
63
+	/**
64
+	 * Initialize from date strings.
65
+	 *
66
+	 * @param string|null $nb_date Not before date
67
+	 * @param string|null $na_date Not after date
68
+	 * @param string|null $tz Timezone string
69
+	 * @return self
70
+	 */
71
+	public static function fromStrings($nb_date, $na_date, $tz = null): self
72
+	{
73
+		$nb = self::_createDateTime($nb_date, $tz);
74
+		$na = self::_createDateTime($na_date, $tz);
75
+		return new self($nb, $na);
76
+	}
77 77
     
78
-    /**
79
-     * Get not before time.
80
-     *
81
-     * @return \DateTimeImmutable
82
-     */
83
-    public function notBeforeTime(): \DateTimeImmutable
84
-    {
85
-        return $this->_notBeforeTime;
86
-    }
78
+	/**
79
+	 * Get not before time.
80
+	 *
81
+	 * @return \DateTimeImmutable
82
+	 */
83
+	public function notBeforeTime(): \DateTimeImmutable
84
+	{
85
+		return $this->_notBeforeTime;
86
+	}
87 87
     
88
-    /**
89
-     * Get not after time.
90
-     *
91
-     * @return \DateTimeImmutable
92
-     */
93
-    public function notAfterTime(): \DateTimeImmutable
94
-    {
95
-        return $this->_notAfterTime;
96
-    }
88
+	/**
89
+	 * Get not after time.
90
+	 *
91
+	 * @return \DateTimeImmutable
92
+	 */
93
+	public function notAfterTime(): \DateTimeImmutable
94
+	{
95
+		return $this->_notAfterTime;
96
+	}
97 97
     
98
-    /**
99
-     * Generate ASN.1 structure.
100
-     *
101
-     * @return Sequence
102
-     */
103
-    public function toASN1(): Sequence
104
-    {
105
-        return new Sequence(new GeneralizedTime($this->_notBeforeTime),
106
-            new GeneralizedTime($this->_notAfterTime));
107
-    }
98
+	/**
99
+	 * Generate ASN.1 structure.
100
+	 *
101
+	 * @return Sequence
102
+	 */
103
+	public function toASN1(): Sequence
104
+	{
105
+		return new Sequence(new GeneralizedTime($this->_notBeforeTime),
106
+			new GeneralizedTime($this->_notAfterTime));
107
+	}
108 108
 }
Please login to merge, or discard this patch.
lib/X509/Certificate/UniqueIdentifier.php 1 patch
Indentation   +62 added lines, -62 removed lines patch added patch discarded remove patch
@@ -13,72 +13,72 @@
 block discarded – undo
13 13
  */
14 14
 class UniqueIdentifier
15 15
 {
16
-    /**
17
-     * Identifier.
18
-     *
19
-     * @var BitString $_uid
20
-     */
21
-    protected $_uid;
16
+	/**
17
+	 * Identifier.
18
+	 *
19
+	 * @var BitString $_uid
20
+	 */
21
+	protected $_uid;
22 22
     
23
-    /**
24
-     * Constructor.
25
-     *
26
-     * @param BitString $bs
27
-     */
28
-    public function __construct(BitString $bs)
29
-    {
30
-        $this->_uid = $bs;
31
-    }
23
+	/**
24
+	 * Constructor.
25
+	 *
26
+	 * @param BitString $bs
27
+	 */
28
+	public function __construct(BitString $bs)
29
+	{
30
+		$this->_uid = $bs;
31
+	}
32 32
     
33
-    /**
34
-     * Initialize from ASN.1.
35
-     *
36
-     * @param BitString $bs
37
-     * @return self
38
-     */
39
-    public static function fromASN1(BitString $bs): UniqueIdentifier
40
-    {
41
-        return new self($bs);
42
-    }
33
+	/**
34
+	 * Initialize from ASN.1.
35
+	 *
36
+	 * @param BitString $bs
37
+	 * @return self
38
+	 */
39
+	public static function fromASN1(BitString $bs): UniqueIdentifier
40
+	{
41
+		return new self($bs);
42
+	}
43 43
     
44
-    /**
45
-     * Initialize from string.
46
-     *
47
-     * @param string $str
48
-     * @return self
49
-     */
50
-    public static function fromString(string $str): UniqueIdentifier
51
-    {
52
-        return new self(new BitString($str));
53
-    }
44
+	/**
45
+	 * Initialize from string.
46
+	 *
47
+	 * @param string $str
48
+	 * @return self
49
+	 */
50
+	public static function fromString(string $str): UniqueIdentifier
51
+	{
52
+		return new self(new BitString($str));
53
+	}
54 54
     
55
-    /**
56
-     * Get unique identifier as a string.
57
-     *
58
-     * @return string
59
-     */
60
-    public function string(): string
61
-    {
62
-        return $this->_uid->string();
63
-    }
55
+	/**
56
+	 * Get unique identifier as a string.
57
+	 *
58
+	 * @return string
59
+	 */
60
+	public function string(): string
61
+	{
62
+		return $this->_uid->string();
63
+	}
64 64
     
65
-    /**
66
-     * Get unique identifier as a bit string.
67
-     *
68
-     * @return BitString
69
-     */
70
-    public function bitString(): BitString
71
-    {
72
-        return $this->_uid;
73
-    }
65
+	/**
66
+	 * Get unique identifier as a bit string.
67
+	 *
68
+	 * @return BitString
69
+	 */
70
+	public function bitString(): BitString
71
+	{
72
+		return $this->_uid;
73
+	}
74 74
     
75
-    /**
76
-     * Get ASN.1 element.
77
-     *
78
-     * @return BitString
79
-     */
80
-    public function toASN1(): BitString
81
-    {
82
-        return $this->_uid;
83
-    }
75
+	/**
76
+	 * Get ASN.1 element.
77
+	 *
78
+	 * @return BitString
79
+	 */
80
+	public function toASN1(): BitString
81
+	{
82
+		return $this->_uid;
83
+	}
84 84
 }
Please login to merge, or discard this patch.
lib/X509/CertificationRequest/Attributes.php 2 patches
Indentation   +96 added lines, -96 removed lines patch added patch discarded remove patch
@@ -20,107 +20,107 @@
 block discarded – undo
20 20
  */
21 21
 class Attributes implements \Countable, \IteratorAggregate
22 22
 {
23
-    use AttributeContainer;
23
+	use AttributeContainer;
24 24
     
25
-    /**
26
-     * Mapping from OID to attribute value class name.
27
-     *
28
-     * @internal
29
-     *
30
-     * @var array
31
-     */
32
-    const MAP_OID_TO_CLASS = array(
33
-        /* @formatter:off */
34
-        ExtensionRequestValue::OID => ExtensionRequestValue::class
35
-        /* @formatter:on */
36
-    );
25
+	/**
26
+	 * Mapping from OID to attribute value class name.
27
+	 *
28
+	 * @internal
29
+	 *
30
+	 * @var array
31
+	 */
32
+	const MAP_OID_TO_CLASS = array(
33
+		/* @formatter:off */
34
+		ExtensionRequestValue::OID => ExtensionRequestValue::class
35
+		/* @formatter:on */
36
+	);
37 37
     
38
-    /**
39
-     * Constructor.
40
-     *
41
-     * @param Attribute ...$attribs Attribute objects
42
-     */
43
-    public function __construct(Attribute ...$attribs)
44
-    {
45
-        $this->_attributes = $attribs;
46
-    }
38
+	/**
39
+	 * Constructor.
40
+	 *
41
+	 * @param Attribute ...$attribs Attribute objects
42
+	 */
43
+	public function __construct(Attribute ...$attribs)
44
+	{
45
+		$this->_attributes = $attribs;
46
+	}
47 47
     
48
-    /**
49
-     * Initialize from attribute values.
50
-     *
51
-     * @param AttributeValue ...$values
52
-     * @return self
53
-     */
54
-    public static function fromAttributeValues(AttributeValue ...$values): Attributes
55
-    {
56
-        $attribs = array_map(
57
-            function (AttributeValue $value) {
58
-                return $value->toAttribute();
59
-            }, $values);
60
-        return new self(...$attribs);
61
-    }
48
+	/**
49
+	 * Initialize from attribute values.
50
+	 *
51
+	 * @param AttributeValue ...$values
52
+	 * @return self
53
+	 */
54
+	public static function fromAttributeValues(AttributeValue ...$values): Attributes
55
+	{
56
+		$attribs = array_map(
57
+			function (AttributeValue $value) {
58
+				return $value->toAttribute();
59
+			}, $values);
60
+		return new self(...$attribs);
61
+	}
62 62
     
63
-    /**
64
-     * Initialize from ASN.1.
65
-     *
66
-     * @param Set $set
67
-     * @return self
68
-     */
69
-    public static function fromASN1(Set $set): Attributes
70
-    {
71
-        $attribs = array_map(
72
-            function (UnspecifiedType $el) {
73
-                return Attribute::fromASN1($el->asSequence());
74
-            }, $set->elements());
75
-        // cast attributes
76
-        $attribs = array_map(
77
-            function (Attribute $attr) {
78
-                $oid = $attr->oid();
79
-                if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
80
-                    $cls = self::MAP_OID_TO_CLASS[$oid];
81
-                    return $attr->castValues($cls);
82
-                }
83
-                return $attr;
84
-            }, $attribs);
85
-        return new self(...$attribs);
86
-    }
63
+	/**
64
+	 * Initialize from ASN.1.
65
+	 *
66
+	 * @param Set $set
67
+	 * @return self
68
+	 */
69
+	public static function fromASN1(Set $set): Attributes
70
+	{
71
+		$attribs = array_map(
72
+			function (UnspecifiedType $el) {
73
+				return Attribute::fromASN1($el->asSequence());
74
+			}, $set->elements());
75
+		// cast attributes
76
+		$attribs = array_map(
77
+			function (Attribute $attr) {
78
+				$oid = $attr->oid();
79
+				if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
80
+					$cls = self::MAP_OID_TO_CLASS[$oid];
81
+					return $attr->castValues($cls);
82
+				}
83
+				return $attr;
84
+			}, $attribs);
85
+		return new self(...$attribs);
86
+	}
87 87
     
88
-    /**
89
-     * Check whether extension request attribute is present.
90
-     *
91
-     * @return bool
92
-     */
93
-    public function hasExtensionRequest(): bool
94
-    {
95
-        return $this->has(ExtensionRequestValue::OID);
96
-    }
88
+	/**
89
+	 * Check whether extension request attribute is present.
90
+	 *
91
+	 * @return bool
92
+	 */
93
+	public function hasExtensionRequest(): bool
94
+	{
95
+		return $this->has(ExtensionRequestValue::OID);
96
+	}
97 97
     
98
-    /**
99
-     * Get extension request attribute value.
100
-     *
101
-     * @throws \LogicException
102
-     * @return ExtensionRequestValue
103
-     */
104
-    public function extensionRequest(): ExtensionRequestValue
105
-    {
106
-        if (!$this->hasExtensionRequest()) {
107
-            throw new \LogicException("No extension request attribute.");
108
-        }
109
-        return $this->firstOf(ExtensionRequestValue::OID)->first();
110
-    }
98
+	/**
99
+	 * Get extension request attribute value.
100
+	 *
101
+	 * @throws \LogicException
102
+	 * @return ExtensionRequestValue
103
+	 */
104
+	public function extensionRequest(): ExtensionRequestValue
105
+	{
106
+		if (!$this->hasExtensionRequest()) {
107
+			throw new \LogicException("No extension request attribute.");
108
+		}
109
+		return $this->firstOf(ExtensionRequestValue::OID)->first();
110
+	}
111 111
     
112
-    /**
113
-     * Generate ASN.1 structure.
114
-     *
115
-     * @return Set
116
-     */
117
-    public function toASN1(): Set
118
-    {
119
-        $elements = array_map(
120
-            function (Attribute $attr) {
121
-                return $attr->toASN1();
122
-            }, array_values($this->_attributes));
123
-        $set = new Set(...$elements);
124
-        return $set->sortedSetOf();
125
-    }
112
+	/**
113
+	 * Generate ASN.1 structure.
114
+	 *
115
+	 * @return Set
116
+	 */
117
+	public function toASN1(): Set
118
+	{
119
+		$elements = array_map(
120
+			function (Attribute $attr) {
121
+				return $attr->toASN1();
122
+			}, array_values($this->_attributes));
123
+		$set = new Set(...$elements);
124
+		return $set->sortedSetOf();
125
+	}
126 126
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -54,7 +54,7 @@  discard block
 block discarded – undo
54 54
     public static function fromAttributeValues(AttributeValue ...$values): Attributes
55 55
     {
56 56
         $attribs = array_map(
57
-            function (AttributeValue $value) {
57
+            function(AttributeValue $value) {
58 58
                 return $value->toAttribute();
59 59
             }, $values);
60 60
         return new self(...$attribs);
@@ -69,12 +69,12 @@  discard block
 block discarded – undo
69 69
     public static function fromASN1(Set $set): Attributes
70 70
     {
71 71
         $attribs = array_map(
72
-            function (UnspecifiedType $el) {
72
+            function(UnspecifiedType $el) {
73 73
                 return Attribute::fromASN1($el->asSequence());
74 74
             }, $set->elements());
75 75
         // cast attributes
76 76
         $attribs = array_map(
77
-            function (Attribute $attr) {
77
+            function(Attribute $attr) {
78 78
                 $oid = $attr->oid();
79 79
                 if (array_key_exists($oid, self::MAP_OID_TO_CLASS)) {
80 80
                     $cls = self::MAP_OID_TO_CLASS[$oid];
@@ -117,7 +117,7 @@  discard block
 block discarded – undo
117 117
     public function toASN1(): Set
118 118
     {
119 119
         $elements = array_map(
120
-            function (Attribute $attr) {
120
+            function(Attribute $attr) {
121 121
                 return $attr->toASN1();
122 122
             }, array_values($this->_attributes));
123 123
         $set = new Set(...$elements);
Please login to merge, or discard this patch.
lib/X509/Certificate/Extensions.php 2 patches
Indentation   +410 added lines, -410 removed lines patch added patch discarded remove patch
@@ -18,414 +18,414 @@
 block discarded – undo
18 18
  */
19 19
 class Extensions implements \Countable, \IteratorAggregate
20 20
 {
21
-    /**
22
-     * Extensions.
23
-     *
24
-     * @var Extension\Extension[] $_extensions
25
-     */
26
-    protected $_extensions;
27
-    
28
-    /**
29
-     * Constructor.
30
-     *
31
-     * @param Ext\Extension ...$extensions Extension objects
32
-     */
33
-    public function __construct(Ext\Extension ...$extensions)
34
-    {
35
-        $this->_extensions = array();
36
-        foreach ($extensions as $ext) {
37
-            $this->_extensions[$ext->oid()] = $ext;
38
-        }
39
-    }
40
-    
41
-    /**
42
-     * Initialize from ASN.1.
43
-     *
44
-     * @param Sequence $seq
45
-     * @return self
46
-     */
47
-    public static function fromASN1(Sequence $seq): Extensions
48
-    {
49
-        $extensions = array_map(
50
-            function (UnspecifiedType $el) {
51
-                return Ext\Extension::fromASN1($el->asSequence());
52
-            }, $seq->elements());
53
-        return new self(...$extensions);
54
-    }
55
-    
56
-    /**
57
-     * Generate ASN.1 structure.
58
-     *
59
-     * @return Sequence
60
-     */
61
-    public function toASN1(): Sequence
62
-    {
63
-        $elements = array_values(
64
-            array_map(
65
-                function ($ext) {
66
-                    return $ext->toASN1();
67
-                }, $this->_extensions));
68
-        return new Sequence(...$elements);
69
-    }
70
-    
71
-    /**
72
-     * Get self with extensions added.
73
-     *
74
-     * @param Ext\Extension ...$exts One or more extensions to add
75
-     * @return self
76
-     */
77
-    public function withExtensions(Ext\Extension ...$exts): Extensions
78
-    {
79
-        $obj = clone $this;
80
-        foreach ($exts as $ext) {
81
-            $obj->_extensions[$ext->oid()] = $ext;
82
-        }
83
-        return $obj;
84
-    }
85
-    
86
-    /**
87
-     * Check whether extension is present.
88
-     *
89
-     * @param string $oid Extensions OID
90
-     * @return bool
91
-     */
92
-    public function has(string $oid): bool
93
-    {
94
-        return isset($this->_extensions[$oid]);
95
-    }
96
-    
97
-    /**
98
-     * Get extension by OID.
99
-     *
100
-     * @param string $oid
101
-     * @throws \LogicException If extension is not present
102
-     * @return Extension\Extension
103
-     */
104
-    public function get(string $oid): Ext\Extension
105
-    {
106
-        if (!$this->has($oid)) {
107
-            throw new \LogicException("No extension by OID $oid.");
108
-        }
109
-        return $this->_extensions[$oid];
110
-    }
111
-    
112
-    /**
113
-     * Check whether 'Authority Key Identifier' extension is present.
114
-     *
115
-     * @return bool
116
-     */
117
-    public function hasAuthorityKeyIdentifier(): bool
118
-    {
119
-        return $this->has(Ext\Extension::OID_AUTHORITY_KEY_IDENTIFIER);
120
-    }
121
-    
122
-    /**
123
-     * Get 'Authority Key Identifier' extension.
124
-     *
125
-     * @throws \LogicException If extension is not present
126
-     * @return \X509\Certificate\Extension\AuthorityKeyIdentifierExtension
127
-     */
128
-    public function authorityKeyIdentifier(): Ext\AuthorityKeyIdentifierExtension
129
-    {
130
-        /** @var Extension\AuthorityKeyIdentifierExtension $keyIdentifier */
131
-        $keyIdentifier = $this->get(Ext\Extension::OID_AUTHORITY_KEY_IDENTIFIER);
132
-        return $keyIdentifier;
133
-    }
134
-    
135
-    /**
136
-     * Check whether 'Subject Key Identifier' extension is present.
137
-     *
138
-     * @return bool
139
-     */
140
-    public function hasSubjectKeyIdentifier(): bool
141
-    {
142
-        return $this->has(Ext\Extension::OID_SUBJECT_KEY_IDENTIFIER);
143
-    }
144
-    
145
-    /**
146
-     * Get 'Subject Key Identifier' extension.
147
-     *
148
-     * @throws \LogicException If extension is not present
149
-     * @return \X509\Certificate\Extension\SubjectKeyIdentifierExtension
150
-     */
151
-    public function subjectKeyIdentifier(): Ext\SubjectKeyIdentifierExtension
152
-    {
153
-        /** @var Extension\SubjectKeyIdentifierExtension $subjectKeyIdentifier */
154
-        $subjectKeyIdentifier = $this->get(
155
-            Ext\Extension::OID_SUBJECT_KEY_IDENTIFIER);
156
-        return $subjectKeyIdentifier;
157
-    }
158
-    
159
-    /**
160
-     * Check whether 'Key Usage' extension is present.
161
-     *
162
-     * @return bool
163
-     */
164
-    public function hasKeyUsage(): bool
165
-    {
166
-        return $this->has(Ext\Extension::OID_KEY_USAGE);
167
-    }
168
-    
169
-    /**
170
-     * Get 'Key Usage' extension.
171
-     *
172
-     * @throws \LogicException If extension is not present
173
-     * @return \X509\Certificate\Extension\KeyUsageExtension
174
-     */
175
-    public function keyUsage(): Ext\KeyUsageExtension
176
-    {
177
-        /** @var Extension\KeyUsageExtension $keyUsage */
178
-        $keyUsage = $this->get(Ext\Extension::OID_KEY_USAGE);
179
-        return $keyUsage;
180
-    }
181
-    
182
-    /**
183
-     * Check whether 'Certificate Policies' extension is present.
184
-     *
185
-     * @return bool
186
-     */
187
-    public function hasCertificatePolicies(): bool
188
-    {
189
-        return $this->has(Ext\Extension::OID_CERTIFICATE_POLICIES);
190
-    }
191
-    
192
-    /**
193
-     * Get 'Certificate Policies' extension.
194
-     *
195
-     * @throws \LogicException If extension is not present
196
-     * @return \X509\Certificate\Extension\CertificatePoliciesExtension
197
-     */
198
-    public function certificatePolicies(): Ext\CertificatePoliciesExtension
199
-    {
200
-        /** @var Extension\CertificatePoliciesExtension $certPolicies */
201
-        $certPolicies = $this->get(Ext\Extension::OID_CERTIFICATE_POLICIES);
202
-        return $certPolicies;
203
-    }
204
-    
205
-    /**
206
-     * Check whether 'Policy Mappings' extension is present.
207
-     *
208
-     * @return bool
209
-     */
210
-    public function hasPolicyMappings(): bool
211
-    {
212
-        return $this->has(Ext\Extension::OID_POLICY_MAPPINGS);
213
-    }
214
-    
215
-    /**
216
-     * Get 'Policy Mappings' extension.
217
-     *
218
-     * @throws \LogicException If extension is not present
219
-     * @return \X509\Certificate\Extension\PolicyMappingsExtension
220
-     */
221
-    public function policyMappings(): Ext\PolicyMappingsExtension
222
-    {
223
-        /** @var Extension\PolicyMappingsExtension $policyMappings */
224
-        $policyMappings = $this->get(Ext\Extension::OID_POLICY_MAPPINGS);
225
-        return $policyMappings;
226
-    }
227
-    
228
-    /**
229
-     * Check whether 'Subject Alternative Name' extension is present.
230
-     *
231
-     * @return bool
232
-     */
233
-    public function hasSubjectAlternativeName(): bool
234
-    {
235
-        return $this->has(Ext\Extension::OID_SUBJECT_ALT_NAME);
236
-    }
237
-    
238
-    /**
239
-     * Get 'Subject Alternative Name' extension.
240
-     *
241
-     * @throws \LogicException If extension is not present
242
-     * @return \X509\Certificate\Extension\SubjectAlternativeNameExtension
243
-     */
244
-    public function subjectAlternativeName(): Ext\SubjectAlternativeNameExtension
245
-    {
246
-        /** @var Extension\SubjectAlternativeNameExtension $subjectAltName */
247
-        $subjectAltName = $this->get(Ext\Extension::OID_SUBJECT_ALT_NAME);
248
-        return $subjectAltName;
249
-    }
250
-    
251
-    /**
252
-     * Check whether 'Issuer Alternative Name' extension is present.
253
-     *
254
-     * @return bool
255
-     */
256
-    public function hasIssuerAlternativeName(): bool
257
-    {
258
-        return $this->has(Ext\Extension::OID_ISSUER_ALT_NAME);
259
-    }
260
-    
261
-    /**
262
-     * Get 'Issuer Alternative Name' extension.
263
-     *
264
-     * @return \X509\Certificate\Extension\IssuerAlternativeNameExtension
265
-     */
266
-    public function issuerAlternativeName(): Ext\IssuerAlternativeNameExtension
267
-    {
268
-        /** @var Extension\IssuerAlternativeNameExtension $issuerAltName */
269
-        $issuerAltName = $this->get(Ext\Extension::OID_ISSUER_ALT_NAME);
270
-        return $issuerAltName;
271
-    }
272
-    
273
-    /**
274
-     * Check whether 'Basic Constraints' extension is present.
275
-     *
276
-     * @return bool
277
-     */
278
-    public function hasBasicConstraints(): bool
279
-    {
280
-        return $this->has(Ext\Extension::OID_BASIC_CONSTRAINTS);
281
-    }
282
-    
283
-    /**
284
-     * Get 'Basic Constraints' extension.
285
-     *
286
-     * @throws \LogicException If extension is not present
287
-     * @return \X509\Certificate\Extension\BasicConstraintsExtension
288
-     */
289
-    public function basicConstraints(): Ext\BasicConstraintsExtension
290
-    {
291
-        /** @var Extension\BasicConstraintsExtension $basicConstraints */
292
-        $basicConstraints = $this->get(Ext\Extension::OID_BASIC_CONSTRAINTS);
293
-        return $basicConstraints;
294
-    }
295
-    
296
-    /**
297
-     * Check whether 'Name Constraints' extension is present.
298
-     *
299
-     * @return bool
300
-     */
301
-    public function hasNameConstraints(): bool
302
-    {
303
-        return $this->has(Ext\Extension::OID_NAME_CONSTRAINTS);
304
-    }
305
-    
306
-    /**
307
-     * Get 'Name Constraints' extension.
308
-     *
309
-     * @throws \LogicException If extension is not present
310
-     * @return \X509\Certificate\Extension\NameConstraintsExtension
311
-     */
312
-    public function nameConstraints(): Ext\NameConstraintsExtension
313
-    {
314
-        /** @var Extension\NameConstraintsExtension $nameConstraints */
315
-        $nameConstraints = $this->get(Ext\Extension::OID_NAME_CONSTRAINTS);
316
-        return $nameConstraints;
317
-    }
318
-    
319
-    /**
320
-     * Check whether 'Policy Constraints' extension is present.
321
-     *
322
-     * @return bool
323
-     */
324
-    public function hasPolicyConstraints(): bool
325
-    {
326
-        return $this->has(Ext\Extension::OID_POLICY_CONSTRAINTS);
327
-    }
328
-    
329
-    /**
330
-     * Get 'Policy Constraints' extension.
331
-     *
332
-     * @throws \LogicException If extension is not present
333
-     * @return \X509\Certificate\Extension\PolicyConstraintsExtension
334
-     */
335
-    public function policyConstraints(): Ext\PolicyConstraintsExtension
336
-    {
337
-        /** @var Extension\PolicyConstraintsExtension $policyConstraints */
338
-        $policyConstraints = $this->get(Ext\Extension::OID_POLICY_CONSTRAINTS);
339
-        return $policyConstraints;
340
-    }
341
-    
342
-    /**
343
-     * Check whether 'Extended Key Usage' extension is present.
344
-     *
345
-     * @return bool
346
-     */
347
-    public function hasExtendedKeyUsage(): bool
348
-    {
349
-        return $this->has(Ext\Extension::OID_EXT_KEY_USAGE);
350
-    }
351
-    
352
-    /**
353
-     * Get 'Extended Key Usage' extension.
354
-     *
355
-     * @throws \LogicException If extension is not present
356
-     * @return \X509\Certificate\Extension\ExtendedKeyUsageExtension
357
-     */
358
-    public function extendedKeyUsage(): Ext\ExtendedKeyUsageExtension
359
-    {
360
-        /** @var Extension\ExtendedKeyUsageExtension $keyUsage */
361
-        $keyUsage = $this->get(Ext\Extension::OID_EXT_KEY_USAGE);
362
-        return $keyUsage;
363
-    }
364
-    
365
-    /**
366
-     * Check whether 'CRL Distribution Points' extension is present.
367
-     *
368
-     * @return bool
369
-     */
370
-    public function hasCRLDistributionPoints(): bool
371
-    {
372
-        return $this->has(Ext\Extension::OID_CRL_DISTRIBUTION_POINTS);
373
-    }
374
-    
375
-    /**
376
-     * Get 'CRL Distribution Points' extension.
377
-     *
378
-     * @throws \LogicException If extension is not present
379
-     * @return \X509\Certificate\Extension\CRLDistributionPointsExtension
380
-     */
381
-    public function crlDistributionPoints(): Ext\CRLDistributionPointsExtension
382
-    {
383
-        /** @var Extension\CRLDistributionPointsExtension $crlDist */
384
-        $crlDist = $this->get(Ext\Extension::OID_CRL_DISTRIBUTION_POINTS);
385
-        return $crlDist;
386
-    }
387
-    
388
-    /**
389
-     * Check whether 'Inhibit anyPolicy' extension is present.
390
-     *
391
-     * @return bool
392
-     */
393
-    public function hasInhibitAnyPolicy(): bool
394
-    {
395
-        return $this->has(Ext\Extension::OID_INHIBIT_ANY_POLICY);
396
-    }
397
-    
398
-    /**
399
-     * Get 'Inhibit anyPolicy' extension.
400
-     *
401
-     * @throws \LogicException If extension is not present
402
-     * @return \X509\Certificate\Extension\InhibitAnyPolicyExtension
403
-     */
404
-    public function inhibitAnyPolicy(): Ext\InhibitAnyPolicyExtension
405
-    {
406
-        /** @var Extension\InhibitAnyPolicyExtension $inhibitAny */
407
-        $inhibitAny = $this->get(Ext\Extension::OID_INHIBIT_ANY_POLICY);
408
-        return $inhibitAny;
409
-    }
410
-    
411
-    /**
412
-     *
413
-     * @see \Countable::count()
414
-     * @return int
415
-     */
416
-    public function count(): int
417
-    {
418
-        return count($this->_extensions);
419
-    }
420
-    
421
-    /**
422
-     * Get iterator for extensions.
423
-     *
424
-     * @see \IteratorAggregate::getIterator()
425
-     * @return \Traversable
426
-     */
427
-    public function getIterator(): \Traversable
428
-    {
429
-        return new \ArrayIterator($this->_extensions);
430
-    }
21
+	/**
22
+	 * Extensions.
23
+	 *
24
+	 * @var Extension\Extension[] $_extensions
25
+	 */
26
+	protected $_extensions;
27
+    
28
+	/**
29
+	 * Constructor.
30
+	 *
31
+	 * @param Ext\Extension ...$extensions Extension objects
32
+	 */
33
+	public function __construct(Ext\Extension ...$extensions)
34
+	{
35
+		$this->_extensions = array();
36
+		foreach ($extensions as $ext) {
37
+			$this->_extensions[$ext->oid()] = $ext;
38
+		}
39
+	}
40
+    
41
+	/**
42
+	 * Initialize from ASN.1.
43
+	 *
44
+	 * @param Sequence $seq
45
+	 * @return self
46
+	 */
47
+	public static function fromASN1(Sequence $seq): Extensions
48
+	{
49
+		$extensions = array_map(
50
+			function (UnspecifiedType $el) {
51
+				return Ext\Extension::fromASN1($el->asSequence());
52
+			}, $seq->elements());
53
+		return new self(...$extensions);
54
+	}
55
+    
56
+	/**
57
+	 * Generate ASN.1 structure.
58
+	 *
59
+	 * @return Sequence
60
+	 */
61
+	public function toASN1(): Sequence
62
+	{
63
+		$elements = array_values(
64
+			array_map(
65
+				function ($ext) {
66
+					return $ext->toASN1();
67
+				}, $this->_extensions));
68
+		return new Sequence(...$elements);
69
+	}
70
+    
71
+	/**
72
+	 * Get self with extensions added.
73
+	 *
74
+	 * @param Ext\Extension ...$exts One or more extensions to add
75
+	 * @return self
76
+	 */
77
+	public function withExtensions(Ext\Extension ...$exts): Extensions
78
+	{
79
+		$obj = clone $this;
80
+		foreach ($exts as $ext) {
81
+			$obj->_extensions[$ext->oid()] = $ext;
82
+		}
83
+		return $obj;
84
+	}
85
+    
86
+	/**
87
+	 * Check whether extension is present.
88
+	 *
89
+	 * @param string $oid Extensions OID
90
+	 * @return bool
91
+	 */
92
+	public function has(string $oid): bool
93
+	{
94
+		return isset($this->_extensions[$oid]);
95
+	}
96
+    
97
+	/**
98
+	 * Get extension by OID.
99
+	 *
100
+	 * @param string $oid
101
+	 * @throws \LogicException If extension is not present
102
+	 * @return Extension\Extension
103
+	 */
104
+	public function get(string $oid): Ext\Extension
105
+	{
106
+		if (!$this->has($oid)) {
107
+			throw new \LogicException("No extension by OID $oid.");
108
+		}
109
+		return $this->_extensions[$oid];
110
+	}
111
+    
112
+	/**
113
+	 * Check whether 'Authority Key Identifier' extension is present.
114
+	 *
115
+	 * @return bool
116
+	 */
117
+	public function hasAuthorityKeyIdentifier(): bool
118
+	{
119
+		return $this->has(Ext\Extension::OID_AUTHORITY_KEY_IDENTIFIER);
120
+	}
121
+    
122
+	/**
123
+	 * Get 'Authority Key Identifier' extension.
124
+	 *
125
+	 * @throws \LogicException If extension is not present
126
+	 * @return \X509\Certificate\Extension\AuthorityKeyIdentifierExtension
127
+	 */
128
+	public function authorityKeyIdentifier(): Ext\AuthorityKeyIdentifierExtension
129
+	{
130
+		/** @var Extension\AuthorityKeyIdentifierExtension $keyIdentifier */
131
+		$keyIdentifier = $this->get(Ext\Extension::OID_AUTHORITY_KEY_IDENTIFIER);
132
+		return $keyIdentifier;
133
+	}
134
+    
135
+	/**
136
+	 * Check whether 'Subject Key Identifier' extension is present.
137
+	 *
138
+	 * @return bool
139
+	 */
140
+	public function hasSubjectKeyIdentifier(): bool
141
+	{
142
+		return $this->has(Ext\Extension::OID_SUBJECT_KEY_IDENTIFIER);
143
+	}
144
+    
145
+	/**
146
+	 * Get 'Subject Key Identifier' extension.
147
+	 *
148
+	 * @throws \LogicException If extension is not present
149
+	 * @return \X509\Certificate\Extension\SubjectKeyIdentifierExtension
150
+	 */
151
+	public function subjectKeyIdentifier(): Ext\SubjectKeyIdentifierExtension
152
+	{
153
+		/** @var Extension\SubjectKeyIdentifierExtension $subjectKeyIdentifier */
154
+		$subjectKeyIdentifier = $this->get(
155
+			Ext\Extension::OID_SUBJECT_KEY_IDENTIFIER);
156
+		return $subjectKeyIdentifier;
157
+	}
158
+    
159
+	/**
160
+	 * Check whether 'Key Usage' extension is present.
161
+	 *
162
+	 * @return bool
163
+	 */
164
+	public function hasKeyUsage(): bool
165
+	{
166
+		return $this->has(Ext\Extension::OID_KEY_USAGE);
167
+	}
168
+    
169
+	/**
170
+	 * Get 'Key Usage' extension.
171
+	 *
172
+	 * @throws \LogicException If extension is not present
173
+	 * @return \X509\Certificate\Extension\KeyUsageExtension
174
+	 */
175
+	public function keyUsage(): Ext\KeyUsageExtension
176
+	{
177
+		/** @var Extension\KeyUsageExtension $keyUsage */
178
+		$keyUsage = $this->get(Ext\Extension::OID_KEY_USAGE);
179
+		return $keyUsage;
180
+	}
181
+    
182
+	/**
183
+	 * Check whether 'Certificate Policies' extension is present.
184
+	 *
185
+	 * @return bool
186
+	 */
187
+	public function hasCertificatePolicies(): bool
188
+	{
189
+		return $this->has(Ext\Extension::OID_CERTIFICATE_POLICIES);
190
+	}
191
+    
192
+	/**
193
+	 * Get 'Certificate Policies' extension.
194
+	 *
195
+	 * @throws \LogicException If extension is not present
196
+	 * @return \X509\Certificate\Extension\CertificatePoliciesExtension
197
+	 */
198
+	public function certificatePolicies(): Ext\CertificatePoliciesExtension
199
+	{
200
+		/** @var Extension\CertificatePoliciesExtension $certPolicies */
201
+		$certPolicies = $this->get(Ext\Extension::OID_CERTIFICATE_POLICIES);
202
+		return $certPolicies;
203
+	}
204
+    
205
+	/**
206
+	 * Check whether 'Policy Mappings' extension is present.
207
+	 *
208
+	 * @return bool
209
+	 */
210
+	public function hasPolicyMappings(): bool
211
+	{
212
+		return $this->has(Ext\Extension::OID_POLICY_MAPPINGS);
213
+	}
214
+    
215
+	/**
216
+	 * Get 'Policy Mappings' extension.
217
+	 *
218
+	 * @throws \LogicException If extension is not present
219
+	 * @return \X509\Certificate\Extension\PolicyMappingsExtension
220
+	 */
221
+	public function policyMappings(): Ext\PolicyMappingsExtension
222
+	{
223
+		/** @var Extension\PolicyMappingsExtension $policyMappings */
224
+		$policyMappings = $this->get(Ext\Extension::OID_POLICY_MAPPINGS);
225
+		return $policyMappings;
226
+	}
227
+    
228
+	/**
229
+	 * Check whether 'Subject Alternative Name' extension is present.
230
+	 *
231
+	 * @return bool
232
+	 */
233
+	public function hasSubjectAlternativeName(): bool
234
+	{
235
+		return $this->has(Ext\Extension::OID_SUBJECT_ALT_NAME);
236
+	}
237
+    
238
+	/**
239
+	 * Get 'Subject Alternative Name' extension.
240
+	 *
241
+	 * @throws \LogicException If extension is not present
242
+	 * @return \X509\Certificate\Extension\SubjectAlternativeNameExtension
243
+	 */
244
+	public function subjectAlternativeName(): Ext\SubjectAlternativeNameExtension
245
+	{
246
+		/** @var Extension\SubjectAlternativeNameExtension $subjectAltName */
247
+		$subjectAltName = $this->get(Ext\Extension::OID_SUBJECT_ALT_NAME);
248
+		return $subjectAltName;
249
+	}
250
+    
251
+	/**
252
+	 * Check whether 'Issuer Alternative Name' extension is present.
253
+	 *
254
+	 * @return bool
255
+	 */
256
+	public function hasIssuerAlternativeName(): bool
257
+	{
258
+		return $this->has(Ext\Extension::OID_ISSUER_ALT_NAME);
259
+	}
260
+    
261
+	/**
262
+	 * Get 'Issuer Alternative Name' extension.
263
+	 *
264
+	 * @return \X509\Certificate\Extension\IssuerAlternativeNameExtension
265
+	 */
266
+	public function issuerAlternativeName(): Ext\IssuerAlternativeNameExtension
267
+	{
268
+		/** @var Extension\IssuerAlternativeNameExtension $issuerAltName */
269
+		$issuerAltName = $this->get(Ext\Extension::OID_ISSUER_ALT_NAME);
270
+		return $issuerAltName;
271
+	}
272
+    
273
+	/**
274
+	 * Check whether 'Basic Constraints' extension is present.
275
+	 *
276
+	 * @return bool
277
+	 */
278
+	public function hasBasicConstraints(): bool
279
+	{
280
+		return $this->has(Ext\Extension::OID_BASIC_CONSTRAINTS);
281
+	}
282
+    
283
+	/**
284
+	 * Get 'Basic Constraints' extension.
285
+	 *
286
+	 * @throws \LogicException If extension is not present
287
+	 * @return \X509\Certificate\Extension\BasicConstraintsExtension
288
+	 */
289
+	public function basicConstraints(): Ext\BasicConstraintsExtension
290
+	{
291
+		/** @var Extension\BasicConstraintsExtension $basicConstraints */
292
+		$basicConstraints = $this->get(Ext\Extension::OID_BASIC_CONSTRAINTS);
293
+		return $basicConstraints;
294
+	}
295
+    
296
+	/**
297
+	 * Check whether 'Name Constraints' extension is present.
298
+	 *
299
+	 * @return bool
300
+	 */
301
+	public function hasNameConstraints(): bool
302
+	{
303
+		return $this->has(Ext\Extension::OID_NAME_CONSTRAINTS);
304
+	}
305
+    
306
+	/**
307
+	 * Get 'Name Constraints' extension.
308
+	 *
309
+	 * @throws \LogicException If extension is not present
310
+	 * @return \X509\Certificate\Extension\NameConstraintsExtension
311
+	 */
312
+	public function nameConstraints(): Ext\NameConstraintsExtension
313
+	{
314
+		/** @var Extension\NameConstraintsExtension $nameConstraints */
315
+		$nameConstraints = $this->get(Ext\Extension::OID_NAME_CONSTRAINTS);
316
+		return $nameConstraints;
317
+	}
318
+    
319
+	/**
320
+	 * Check whether 'Policy Constraints' extension is present.
321
+	 *
322
+	 * @return bool
323
+	 */
324
+	public function hasPolicyConstraints(): bool
325
+	{
326
+		return $this->has(Ext\Extension::OID_POLICY_CONSTRAINTS);
327
+	}
328
+    
329
+	/**
330
+	 * Get 'Policy Constraints' extension.
331
+	 *
332
+	 * @throws \LogicException If extension is not present
333
+	 * @return \X509\Certificate\Extension\PolicyConstraintsExtension
334
+	 */
335
+	public function policyConstraints(): Ext\PolicyConstraintsExtension
336
+	{
337
+		/** @var Extension\PolicyConstraintsExtension $policyConstraints */
338
+		$policyConstraints = $this->get(Ext\Extension::OID_POLICY_CONSTRAINTS);
339
+		return $policyConstraints;
340
+	}
341
+    
342
+	/**
343
+	 * Check whether 'Extended Key Usage' extension is present.
344
+	 *
345
+	 * @return bool
346
+	 */
347
+	public function hasExtendedKeyUsage(): bool
348
+	{
349
+		return $this->has(Ext\Extension::OID_EXT_KEY_USAGE);
350
+	}
351
+    
352
+	/**
353
+	 * Get 'Extended Key Usage' extension.
354
+	 *
355
+	 * @throws \LogicException If extension is not present
356
+	 * @return \X509\Certificate\Extension\ExtendedKeyUsageExtension
357
+	 */
358
+	public function extendedKeyUsage(): Ext\ExtendedKeyUsageExtension
359
+	{
360
+		/** @var Extension\ExtendedKeyUsageExtension $keyUsage */
361
+		$keyUsage = $this->get(Ext\Extension::OID_EXT_KEY_USAGE);
362
+		return $keyUsage;
363
+	}
364
+    
365
+	/**
366
+	 * Check whether 'CRL Distribution Points' extension is present.
367
+	 *
368
+	 * @return bool
369
+	 */
370
+	public function hasCRLDistributionPoints(): bool
371
+	{
372
+		return $this->has(Ext\Extension::OID_CRL_DISTRIBUTION_POINTS);
373
+	}
374
+    
375
+	/**
376
+	 * Get 'CRL Distribution Points' extension.
377
+	 *
378
+	 * @throws \LogicException If extension is not present
379
+	 * @return \X509\Certificate\Extension\CRLDistributionPointsExtension
380
+	 */
381
+	public function crlDistributionPoints(): Ext\CRLDistributionPointsExtension
382
+	{
383
+		/** @var Extension\CRLDistributionPointsExtension $crlDist */
384
+		$crlDist = $this->get(Ext\Extension::OID_CRL_DISTRIBUTION_POINTS);
385
+		return $crlDist;
386
+	}
387
+    
388
+	/**
389
+	 * Check whether 'Inhibit anyPolicy' extension is present.
390
+	 *
391
+	 * @return bool
392
+	 */
393
+	public function hasInhibitAnyPolicy(): bool
394
+	{
395
+		return $this->has(Ext\Extension::OID_INHIBIT_ANY_POLICY);
396
+	}
397
+    
398
+	/**
399
+	 * Get 'Inhibit anyPolicy' extension.
400
+	 *
401
+	 * @throws \LogicException If extension is not present
402
+	 * @return \X509\Certificate\Extension\InhibitAnyPolicyExtension
403
+	 */
404
+	public function inhibitAnyPolicy(): Ext\InhibitAnyPolicyExtension
405
+	{
406
+		/** @var Extension\InhibitAnyPolicyExtension $inhibitAny */
407
+		$inhibitAny = $this->get(Ext\Extension::OID_INHIBIT_ANY_POLICY);
408
+		return $inhibitAny;
409
+	}
410
+    
411
+	/**
412
+	 *
413
+	 * @see \Countable::count()
414
+	 * @return int
415
+	 */
416
+	public function count(): int
417
+	{
418
+		return count($this->_extensions);
419
+	}
420
+    
421
+	/**
422
+	 * Get iterator for extensions.
423
+	 *
424
+	 * @see \IteratorAggregate::getIterator()
425
+	 * @return \Traversable
426
+	 */
427
+	public function getIterator(): \Traversable
428
+	{
429
+		return new \ArrayIterator($this->_extensions);
430
+	}
431 431
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -47,7 +47,7 @@  discard block
 block discarded – undo
47 47
     public static function fromASN1(Sequence $seq): Extensions
48 48
     {
49 49
         $extensions = array_map(
50
-            function (UnspecifiedType $el) {
50
+            function(UnspecifiedType $el) {
51 51
                 return Ext\Extension::fromASN1($el->asSequence());
52 52
             }, $seq->elements());
53 53
         return new self(...$extensions);
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
     {
63 63
         $elements = array_values(
64 64
             array_map(
65
-                function ($ext) {
65
+                function($ext) {
66 66
                     return $ext->toASN1();
67 67
                 }, $this->_extensions));
68 68
         return new Sequence(...$elements);
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/ObjectDigestInfo.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -20,92 +20,92 @@
 block discarded – undo
20 20
  */
21 21
 class ObjectDigestInfo
22 22
 {
23
-    const TYPE_PUBLIC_KEY = 0;
24
-    const TYPE_PUBLIC_KEY_CERT = 1;
25
-    const TYPE_OTHER_OBJECT_TYPES = 2;
23
+	const TYPE_PUBLIC_KEY = 0;
24
+	const TYPE_PUBLIC_KEY_CERT = 1;
25
+	const TYPE_OTHER_OBJECT_TYPES = 2;
26 26
     
27
-    /**
28
-     * Object type.
29
-     *
30
-     * @var int $_digestedObjectType
31
-     */
32
-    protected $_digestedObjectType;
27
+	/**
28
+	 * Object type.
29
+	 *
30
+	 * @var int $_digestedObjectType
31
+	 */
32
+	protected $_digestedObjectType;
33 33
     
34
-    /**
35
-     * OID of other object type.
36
-     *
37
-     * @var string|null $_otherObjectTypeID
38
-     */
39
-    protected $_otherObjectTypeID;
34
+	/**
35
+	 * OID of other object type.
36
+	 *
37
+	 * @var string|null $_otherObjectTypeID
38
+	 */
39
+	protected $_otherObjectTypeID;
40 40
     
41
-    /**
42
-     * Digest algorithm.
43
-     *
44
-     * @var AlgorithmIdentifierType $_digestAlgorithm
45
-     */
46
-    protected $_digestAlgorithm;
41
+	/**
42
+	 * Digest algorithm.
43
+	 *
44
+	 * @var AlgorithmIdentifierType $_digestAlgorithm
45
+	 */
46
+	protected $_digestAlgorithm;
47 47
     
48
-    /**
49
-     * Object digest.
50
-     *
51
-     * @var BitString $_objectDigest
52
-     */
53
-    protected $_objectDigest;
48
+	/**
49
+	 * Object digest.
50
+	 *
51
+	 * @var BitString $_objectDigest
52
+	 */
53
+	protected $_objectDigest;
54 54
     
55
-    /**
56
-     * Constructor.
57
-     *
58
-     * @param int $type
59
-     * @param AlgorithmIdentifierType $algo
60
-     * @param BitString $digest
61
-     */
62
-    public function __construct(int $type, AlgorithmIdentifierType $algo,
63
-        BitString $digest)
64
-    {
65
-        $this->_digestedObjectType = $type;
66
-        $this->_otherObjectTypeID = null;
67
-        $this->_digestAlgorithm = $algo;
68
-        $this->_objectDigest = $digest;
69
-    }
55
+	/**
56
+	 * Constructor.
57
+	 *
58
+	 * @param int $type
59
+	 * @param AlgorithmIdentifierType $algo
60
+	 * @param BitString $digest
61
+	 */
62
+	public function __construct(int $type, AlgorithmIdentifierType $algo,
63
+		BitString $digest)
64
+	{
65
+		$this->_digestedObjectType = $type;
66
+		$this->_otherObjectTypeID = null;
67
+		$this->_digestAlgorithm = $algo;
68
+		$this->_objectDigest = $digest;
69
+	}
70 70
     
71
-    /**
72
-     * Initialize from ASN.1.
73
-     *
74
-     * @param Sequence $seq
75
-     * @return self
76
-     */
77
-    public static function fromASN1(Sequence $seq): ObjectDigestInfo
78
-    {
79
-        $type = $seq->at(0)
80
-            ->asEnumerated()
81
-            ->intNumber();
82
-        $oid = null;
83
-        $idx = 1;
84
-        if ($seq->has($idx, Element::TYPE_OBJECT_IDENTIFIER)) {
85
-            $oid = $seq->at($idx++)
86
-                ->asObjectIdentifier()
87
-                ->oid();
88
-        }
89
-        $algo = AlgorithmIdentifier::fromASN1($seq->at($idx++)->asSequence());
90
-        $digest = $seq->at($idx)->asBitString();
91
-        $obj = new self($type, $algo, $digest);
92
-        $obj->_otherObjectTypeID = $oid;
93
-        return $obj;
94
-    }
71
+	/**
72
+	 * Initialize from ASN.1.
73
+	 *
74
+	 * @param Sequence $seq
75
+	 * @return self
76
+	 */
77
+	public static function fromASN1(Sequence $seq): ObjectDigestInfo
78
+	{
79
+		$type = $seq->at(0)
80
+			->asEnumerated()
81
+			->intNumber();
82
+		$oid = null;
83
+		$idx = 1;
84
+		if ($seq->has($idx, Element::TYPE_OBJECT_IDENTIFIER)) {
85
+			$oid = $seq->at($idx++)
86
+				->asObjectIdentifier()
87
+				->oid();
88
+		}
89
+		$algo = AlgorithmIdentifier::fromASN1($seq->at($idx++)->asSequence());
90
+		$digest = $seq->at($idx)->asBitString();
91
+		$obj = new self($type, $algo, $digest);
92
+		$obj->_otherObjectTypeID = $oid;
93
+		return $obj;
94
+	}
95 95
     
96
-    /**
97
-     * Generate ASN.1 structure.
98
-     *
99
-     * @return Sequence
100
-     */
101
-    public function toASN1(): Sequence
102
-    {
103
-        $elements = array(new Enumerated($this->_digestedObjectType));
104
-        if (isset($this->_otherObjectTypeID)) {
105
-            $elements[] = new ObjectIdentifier($this->_otherObjectTypeID);
106
-        }
107
-        $elements[] = $this->_digestAlgorithm->toASN1();
108
-        $elements[] = $this->_objectDigest;
109
-        return new Sequence(...$elements);
110
-    }
96
+	/**
97
+	 * Generate ASN.1 structure.
98
+	 *
99
+	 * @return Sequence
100
+	 */
101
+	public function toASN1(): Sequence
102
+	{
103
+		$elements = array(new Enumerated($this->_digestedObjectType));
104
+		if (isset($this->_otherObjectTypeID)) {
105
+			$elements[] = new ObjectIdentifier($this->_otherObjectTypeID);
106
+		}
107
+		$elements[] = $this->_digestAlgorithm->toASN1();
108
+		$elements[] = $this->_objectDigest;
109
+		return new Sequence(...$elements);
110
+	}
111 111
 }
Please login to merge, or discard this patch.
lib/X509/AttributeCertificate/IssuerSerial.php 1 patch
Indentation   +156 added lines, -156 removed lines patch added patch discarded remove patch
@@ -19,172 +19,172 @@
 block discarded – undo
19 19
  */
20 20
 class IssuerSerial
21 21
 {
22
-    /**
23
-     * Issuer name.
24
-     *
25
-     * @var GeneralNames $_issuer
26
-     */
27
-    protected $_issuer;
22
+	/**
23
+	 * Issuer name.
24
+	 *
25
+	 * @var GeneralNames $_issuer
26
+	 */
27
+	protected $_issuer;
28 28
     
29
-    /**
30
-     * Serial number.
31
-     *
32
-     * @var string $_serial
33
-     */
34
-    protected $_serial;
29
+	/**
30
+	 * Serial number.
31
+	 *
32
+	 * @var string $_serial
33
+	 */
34
+	protected $_serial;
35 35
     
36
-    /**
37
-     * Issuer unique ID.
38
-     *
39
-     * @var UniqueIdentifier|null $_issuerUID
40
-     */
41
-    protected $_issuerUID;
36
+	/**
37
+	 * Issuer unique ID.
38
+	 *
39
+	 * @var UniqueIdentifier|null $_issuerUID
40
+	 */
41
+	protected $_issuerUID;
42 42
     
43
-    /**
44
-     * Constructor.
45
-     *
46
-     * @param GeneralNames $issuer
47
-     * @param string|int $serial
48
-     * @param UniqueIdentifier|null $uid
49
-     */
50
-    public function __construct(GeneralNames $issuer, $serial,
51
-        UniqueIdentifier $uid = null)
52
-    {
53
-        $this->_issuer = $issuer;
54
-        $this->_serial = strval($serial);
55
-        $this->_issuerUID = $uid;
56
-    }
43
+	/**
44
+	 * Constructor.
45
+	 *
46
+	 * @param GeneralNames $issuer
47
+	 * @param string|int $serial
48
+	 * @param UniqueIdentifier|null $uid
49
+	 */
50
+	public function __construct(GeneralNames $issuer, $serial,
51
+		UniqueIdentifier $uid = null)
52
+	{
53
+		$this->_issuer = $issuer;
54
+		$this->_serial = strval($serial);
55
+		$this->_issuerUID = $uid;
56
+	}
57 57
     
58
-    /**
59
-     * Initialize from ASN.1.
60
-     *
61
-     * @param Sequence $seq
62
-     * @return self
63
-     */
64
-    public static function fromASN1(Sequence $seq): IssuerSerial
65
-    {
66
-        $issuer = GeneralNames::fromASN1($seq->at(0)->asSequence());
67
-        $serial = $seq->at(1)
68
-            ->asInteger()
69
-            ->number();
70
-        $uid = null;
71
-        if ($seq->has(2, Element::TYPE_BIT_STRING)) {
72
-            $uid = UniqueIdentifier::fromASN1($seq->at(2)->asBitString());
73
-        }
74
-        return new self($issuer, $serial, $uid);
75
-    }
58
+	/**
59
+	 * Initialize from ASN.1.
60
+	 *
61
+	 * @param Sequence $seq
62
+	 * @return self
63
+	 */
64
+	public static function fromASN1(Sequence $seq): IssuerSerial
65
+	{
66
+		$issuer = GeneralNames::fromASN1($seq->at(0)->asSequence());
67
+		$serial = $seq->at(1)
68
+			->asInteger()
69
+			->number();
70
+		$uid = null;
71
+		if ($seq->has(2, Element::TYPE_BIT_STRING)) {
72
+			$uid = UniqueIdentifier::fromASN1($seq->at(2)->asBitString());
73
+		}
74
+		return new self($issuer, $serial, $uid);
75
+	}
76 76
     
77
-    /**
78
-     * Initialize from a public key certificate.
79
-     *
80
-     * @param Certificate $cert
81
-     * @return self
82
-     */
83
-    public static function fromPKC(Certificate $cert): IssuerSerial
84
-    {
85
-        $tbsCert = $cert->tbsCertificate();
86
-        $issuer = new GeneralNames(new DirectoryName($tbsCert->issuer()));
87
-        $serial = $tbsCert->serialNumber();
88
-        $uid = $tbsCert->hasIssuerUniqueID() ? $tbsCert->issuerUniqueID() : null;
89
-        return new self($issuer, $serial, $uid);
90
-    }
77
+	/**
78
+	 * Initialize from a public key certificate.
79
+	 *
80
+	 * @param Certificate $cert
81
+	 * @return self
82
+	 */
83
+	public static function fromPKC(Certificate $cert): IssuerSerial
84
+	{
85
+		$tbsCert = $cert->tbsCertificate();
86
+		$issuer = new GeneralNames(new DirectoryName($tbsCert->issuer()));
87
+		$serial = $tbsCert->serialNumber();
88
+		$uid = $tbsCert->hasIssuerUniqueID() ? $tbsCert->issuerUniqueID() : null;
89
+		return new self($issuer, $serial, $uid);
90
+	}
91 91
     
92
-    /**
93
-     * Get issuer name.
94
-     *
95
-     * @return GeneralNames
96
-     */
97
-    public function issuer(): GeneralNames
98
-    {
99
-        return $this->_issuer;
100
-    }
92
+	/**
93
+	 * Get issuer name.
94
+	 *
95
+	 * @return GeneralNames
96
+	 */
97
+	public function issuer(): GeneralNames
98
+	{
99
+		return $this->_issuer;
100
+	}
101 101
     
102
-    /**
103
-     * Get serial number.
104
-     *
105
-     * @return string
106
-     */
107
-    public function serial(): string
108
-    {
109
-        return $this->_serial;
110
-    }
102
+	/**
103
+	 * Get serial number.
104
+	 *
105
+	 * @return string
106
+	 */
107
+	public function serial(): string
108
+	{
109
+		return $this->_serial;
110
+	}
111 111
     
112
-    /**
113
-     * Check whether issuer unique identifier is present.
114
-     *
115
-     * @return bool
116
-     */
117
-    public function hasIssuerUID(): bool
118
-    {
119
-        return isset($this->_issuerUID);
120
-    }
112
+	/**
113
+	 * Check whether issuer unique identifier is present.
114
+	 *
115
+	 * @return bool
116
+	 */
117
+	public function hasIssuerUID(): bool
118
+	{
119
+		return isset($this->_issuerUID);
120
+	}
121 121
     
122
-    /**
123
-     * Get issuer unique identifier.
124
-     *
125
-     * @throws \LogicException
126
-     * @return UniqueIdentifier
127
-     */
128
-    public function issuerUID(): UniqueIdentifier
129
-    {
130
-        if (!$this->hasIssuerUID()) {
131
-            throw new \LogicException("issuerUID not set.");
132
-        }
133
-        return $this->_issuerUID;
134
-    }
122
+	/**
123
+	 * Get issuer unique identifier.
124
+	 *
125
+	 * @throws \LogicException
126
+	 * @return UniqueIdentifier
127
+	 */
128
+	public function issuerUID(): UniqueIdentifier
129
+	{
130
+		if (!$this->hasIssuerUID()) {
131
+			throw new \LogicException("issuerUID not set.");
132
+		}
133
+		return $this->_issuerUID;
134
+	}
135 135
     
136
-    /**
137
-     * Generate ASN.1 structure.
138
-     *
139
-     * @return Sequence
140
-     */
141
-    public function toASN1(): Sequence
142
-    {
143
-        $elements = array($this->_issuer->toASN1(), new Integer($this->_serial));
144
-        if (isset($this->_issuerUID)) {
145
-            $elements[] = $this->_issuerUID->toASN1();
146
-        }
147
-        return new Sequence(...$elements);
148
-    }
136
+	/**
137
+	 * Generate ASN.1 structure.
138
+	 *
139
+	 * @return Sequence
140
+	 */
141
+	public function toASN1(): Sequence
142
+	{
143
+		$elements = array($this->_issuer->toASN1(), new Integer($this->_serial));
144
+		if (isset($this->_issuerUID)) {
145
+			$elements[] = $this->_issuerUID->toASN1();
146
+		}
147
+		return new Sequence(...$elements);
148
+	}
149 149
     
150
-    /**
151
-     * Check whether this IssuerSerial identifies given certificate.
152
-     *
153
-     * @param Certificate $cert
154
-     * @return boolean
155
-     */
156
-    public function identifiesPKC(Certificate $cert): bool
157
-    {
158
-        $tbs = $cert->tbsCertificate();
159
-        if (!$tbs->issuer()->equals($this->_issuer->firstDN())) {
160
-            return false;
161
-        }
162
-        if (strval($tbs->serialNumber()) != strval($this->_serial)) {
163
-            return false;
164
-        }
165
-        if ($this->_issuerUID && !$this->_checkUniqueID($cert)) {
166
-            return false;
167
-        }
168
-        return true;
169
-    }
150
+	/**
151
+	 * Check whether this IssuerSerial identifies given certificate.
152
+	 *
153
+	 * @param Certificate $cert
154
+	 * @return boolean
155
+	 */
156
+	public function identifiesPKC(Certificate $cert): bool
157
+	{
158
+		$tbs = $cert->tbsCertificate();
159
+		if (!$tbs->issuer()->equals($this->_issuer->firstDN())) {
160
+			return false;
161
+		}
162
+		if (strval($tbs->serialNumber()) != strval($this->_serial)) {
163
+			return false;
164
+		}
165
+		if ($this->_issuerUID && !$this->_checkUniqueID($cert)) {
166
+			return false;
167
+		}
168
+		return true;
169
+	}
170 170
     
171
-    /**
172
-     * Check whether issuerUID matches given certificate.
173
-     *
174
-     * @param Certificate $cert
175
-     * @return boolean
176
-     */
177
-    private function _checkUniqueID(Certificate $cert): bool
178
-    {
179
-        if (!$cert->tbsCertificate()->hasIssuerUniqueID()) {
180
-            return false;
181
-        }
182
-        $uid = $cert->tbsCertificate()
183
-            ->issuerUniqueID()
184
-            ->string();
185
-        if ($this->_issuerUID->string() != $uid) {
186
-            return false;
187
-        }
188
-        return true;
189
-    }
171
+	/**
172
+	 * Check whether issuerUID matches given certificate.
173
+	 *
174
+	 * @param Certificate $cert
175
+	 * @return boolean
176
+	 */
177
+	private function _checkUniqueID(Certificate $cert): bool
178
+	{
179
+		if (!$cert->tbsCertificate()->hasIssuerUniqueID()) {
180
+			return false;
181
+		}
182
+		$uid = $cert->tbsCertificate()
183
+			->issuerUniqueID()
184
+			->string();
185
+		if ($this->_issuerUID->string() != $uid) {
186
+			return false;
187
+		}
188
+		return true;
189
+	}
190 190
 }
Please login to merge, or discard this patch.
lib/X509/Certificate/Certificate.php 1 patch
Indentation   +231 added lines, -231 removed lines patch added patch discarded remove patch
@@ -20,235 +20,235 @@
 block discarded – undo
20 20
  */
21 21
 class Certificate
22 22
 {
23
-    /**
24
-     * "To be signed" certificate information.
25
-     *
26
-     * @var TBSCertificate $_tbsCertificate
27
-     */
28
-    protected $_tbsCertificate;
29
-    
30
-    /**
31
-     * Signature algorithm.
32
-     *
33
-     * @var SignatureAlgorithmIdentifier $_signatureAlgorithm
34
-     */
35
-    protected $_signatureAlgorithm;
36
-    
37
-    /**
38
-     * Signature value.
39
-     *
40
-     * @var Signature $_signatureValue
41
-     */
42
-    protected $_signatureValue;
43
-    
44
-    /**
45
-     * Constructor.
46
-     *
47
-     * @param TBSCertificate $tbsCert
48
-     * @param SignatureAlgorithmIdentifier $algo
49
-     * @param Signature $signature
50
-     */
51
-    public function __construct(TBSCertificate $tbsCert,
52
-        SignatureAlgorithmIdentifier $algo, Signature $signature)
53
-    {
54
-        $this->_tbsCertificate = $tbsCert;
55
-        $this->_signatureAlgorithm = $algo;
56
-        $this->_signatureValue = $signature;
57
-    }
58
-    
59
-    /**
60
-     * Initialize from ASN.1.
61
-     *
62
-     * @param Sequence $seq
63
-     * @return self
64
-     */
65
-    public static function fromASN1(Sequence $seq): self
66
-    {
67
-        $tbsCert = TBSCertificate::fromASN1($seq->at(0)->asSequence());
68
-        $algo = AlgorithmIdentifier::fromASN1($seq->at(1)->asSequence());
69
-        if (!$algo instanceof SignatureAlgorithmIdentifier) {
70
-            throw new \UnexpectedValueException(
71
-                "Unsupported signature algorithm " . $algo->oid() . ".");
72
-        }
73
-        $signature = Signature::fromSignatureData(
74
-            $seq->at(2)
75
-                ->asBitString()
76
-                ->string(), $algo);
77
-        return new self($tbsCert, $algo, $signature);
78
-    }
79
-    
80
-    /**
81
-     * Initialize from DER.
82
-     *
83
-     * @param string $data
84
-     * @return self
85
-     */
86
-    public static function fromDER(string $data): self
87
-    {
88
-        return self::fromASN1(UnspecifiedType::fromDER($data)->asSequence());
89
-    }
90
-    
91
-    /**
92
-     * Initialize from PEM.
93
-     *
94
-     * @param PEM $pem
95
-     * @throws \UnexpectedValueException
96
-     * @return self
97
-     */
98
-    public static function fromPEM(PEM $pem): self
99
-    {
100
-        if ($pem->type() != PEM::TYPE_CERTIFICATE) {
101
-            throw new \UnexpectedValueException("Invalid PEM type.");
102
-        }
103
-        return self::fromDER($pem->data());
104
-    }
105
-    
106
-    /**
107
-     * Get certificate information.
108
-     *
109
-     * @return TBSCertificate
110
-     */
111
-    public function tbsCertificate(): TBSCertificate
112
-    {
113
-        return $this->_tbsCertificate;
114
-    }
115
-    
116
-    /**
117
-     * Get signature algorithm.
118
-     *
119
-     * @return SignatureAlgorithmIdentifier
120
-     */
121
-    public function signatureAlgorithm(): SignatureAlgorithmIdentifier
122
-    {
123
-        return $this->_signatureAlgorithm;
124
-    }
125
-    
126
-    /**
127
-     * Get signature value.
128
-     *
129
-     * @return Signature
130
-     */
131
-    public function signatureValue(): Signature
132
-    {
133
-        return $this->_signatureValue;
134
-    }
135
-    
136
-    /**
137
-     * Check whether certificate is self-issued.
138
-     *
139
-     * @return bool
140
-     */
141
-    public function isSelfIssued(): bool
142
-    {
143
-        return $this->_tbsCertificate->subject()->equals(
144
-            $this->_tbsCertificate->issuer());
145
-    }
146
-    
147
-    /**
148
-     * Check whether certificate is semantically equal to another.
149
-     *
150
-     * @param Certificate $cert Certificate to compare to
151
-     * @return bool
152
-     */
153
-    public function equals(Certificate $cert): bool
154
-    {
155
-        return $this->_hasEqualSerialNumber($cert) &&
156
-             $this->_hasEqualPublicKey($cert) && $this->_hasEqualSubject($cert);
157
-    }
158
-    
159
-    /**
160
-     * Check whether certificate has serial number equal to another.
161
-     *
162
-     * @param Certificate $cert
163
-     * @return bool
164
-     */
165
-    private function _hasEqualSerialNumber(Certificate $cert): bool
166
-    {
167
-        $sn1 = $this->_tbsCertificate->serialNumber();
168
-        $sn2 = $cert->_tbsCertificate->serialNumber();
169
-        return $sn1 == $sn2;
170
-    }
171
-    
172
-    /**
173
-     * Check whether certificate has public key equal to another.
174
-     *
175
-     * @param Certificate $cert
176
-     * @return bool
177
-     */
178
-    private function _hasEqualPublicKey(Certificate $cert): bool
179
-    {
180
-        $kid1 = $this->_tbsCertificate->subjectPublicKeyInfo()->keyIdentifier();
181
-        $kid2 = $cert->_tbsCertificate->subjectPublicKeyInfo()->keyIdentifier();
182
-        return $kid1 == $kid2;
183
-    }
184
-    
185
-    /**
186
-     * Check whether certificate has subject equal to another.
187
-     *
188
-     * @param Certificate $cert
189
-     * @return bool
190
-     */
191
-    private function _hasEqualSubject(Certificate $cert): bool
192
-    {
193
-        $dn1 = $this->_tbsCertificate->subject();
194
-        $dn2 = $cert->_tbsCertificate->subject();
195
-        return $dn1->equals($dn2);
196
-    }
197
-    
198
-    /**
199
-     * Generate ASN.1 structure.
200
-     *
201
-     * @return Sequence
202
-     */
203
-    public function toASN1(): Sequence
204
-    {
205
-        return new Sequence($this->_tbsCertificate->toASN1(),
206
-            $this->_signatureAlgorithm->toASN1(),
207
-            $this->_signatureValue->bitString());
208
-    }
209
-    
210
-    /**
211
-     * Get certificate as a DER.
212
-     *
213
-     * @return string
214
-     */
215
-    public function toDER(): string
216
-    {
217
-        return $this->toASN1()->toDER();
218
-    }
219
-    
220
-    /**
221
-     * Get certificate as a PEM.
222
-     *
223
-     * @return PEM
224
-     */
225
-    public function toPEM(): PEM
226
-    {
227
-        return new PEM(PEM::TYPE_CERTIFICATE, $this->toDER());
228
-    }
229
-    
230
-    /**
231
-     * Verify certificate signature.
232
-     *
233
-     * @param PublicKeyInfo $pubkey_info Issuer's public key
234
-     * @param Crypto|null $crypto Crypto engine, use default if not set
235
-     * @return bool True if certificate signature is valid
236
-     */
237
-    public function verify(PublicKeyInfo $pubkey_info, Crypto $crypto = null): bool
238
-    {
239
-        $crypto = $crypto ?: Crypto::getDefault();
240
-        $data = $this->_tbsCertificate->toASN1()->toDER();
241
-        return $crypto->verify($data, $this->_signatureValue, $pubkey_info,
242
-            $this->_signatureAlgorithm);
243
-    }
244
-    
245
-    /**
246
-     * Get certificate as a PEM formatted string.
247
-     *
248
-     * @return string
249
-     */
250
-    public function __toString()
251
-    {
252
-        return $this->toPEM()->string();
253
-    }
23
+	/**
24
+	 * "To be signed" certificate information.
25
+	 *
26
+	 * @var TBSCertificate $_tbsCertificate
27
+	 */
28
+	protected $_tbsCertificate;
29
+    
30
+	/**
31
+	 * Signature algorithm.
32
+	 *
33
+	 * @var SignatureAlgorithmIdentifier $_signatureAlgorithm
34
+	 */
35
+	protected $_signatureAlgorithm;
36
+    
37
+	/**
38
+	 * Signature value.
39
+	 *
40
+	 * @var Signature $_signatureValue
41
+	 */
42
+	protected $_signatureValue;
43
+    
44
+	/**
45
+	 * Constructor.
46
+	 *
47
+	 * @param TBSCertificate $tbsCert
48
+	 * @param SignatureAlgorithmIdentifier $algo
49
+	 * @param Signature $signature
50
+	 */
51
+	public function __construct(TBSCertificate $tbsCert,
52
+		SignatureAlgorithmIdentifier $algo, Signature $signature)
53
+	{
54
+		$this->_tbsCertificate = $tbsCert;
55
+		$this->_signatureAlgorithm = $algo;
56
+		$this->_signatureValue = $signature;
57
+	}
58
+    
59
+	/**
60
+	 * Initialize from ASN.1.
61
+	 *
62
+	 * @param Sequence $seq
63
+	 * @return self
64
+	 */
65
+	public static function fromASN1(Sequence $seq): self
66
+	{
67
+		$tbsCert = TBSCertificate::fromASN1($seq->at(0)->asSequence());
68
+		$algo = AlgorithmIdentifier::fromASN1($seq->at(1)->asSequence());
69
+		if (!$algo instanceof SignatureAlgorithmIdentifier) {
70
+			throw new \UnexpectedValueException(
71
+				"Unsupported signature algorithm " . $algo->oid() . ".");
72
+		}
73
+		$signature = Signature::fromSignatureData(
74
+			$seq->at(2)
75
+				->asBitString()
76
+				->string(), $algo);
77
+		return new self($tbsCert, $algo, $signature);
78
+	}
79
+    
80
+	/**
81
+	 * Initialize from DER.
82
+	 *
83
+	 * @param string $data
84
+	 * @return self
85
+	 */
86
+	public static function fromDER(string $data): self
87
+	{
88
+		return self::fromASN1(UnspecifiedType::fromDER($data)->asSequence());
89
+	}
90
+    
91
+	/**
92
+	 * Initialize from PEM.
93
+	 *
94
+	 * @param PEM $pem
95
+	 * @throws \UnexpectedValueException
96
+	 * @return self
97
+	 */
98
+	public static function fromPEM(PEM $pem): self
99
+	{
100
+		if ($pem->type() != PEM::TYPE_CERTIFICATE) {
101
+			throw new \UnexpectedValueException("Invalid PEM type.");
102
+		}
103
+		return self::fromDER($pem->data());
104
+	}
105
+    
106
+	/**
107
+	 * Get certificate information.
108
+	 *
109
+	 * @return TBSCertificate
110
+	 */
111
+	public function tbsCertificate(): TBSCertificate
112
+	{
113
+		return $this->_tbsCertificate;
114
+	}
115
+    
116
+	/**
117
+	 * Get signature algorithm.
118
+	 *
119
+	 * @return SignatureAlgorithmIdentifier
120
+	 */
121
+	public function signatureAlgorithm(): SignatureAlgorithmIdentifier
122
+	{
123
+		return $this->_signatureAlgorithm;
124
+	}
125
+    
126
+	/**
127
+	 * Get signature value.
128
+	 *
129
+	 * @return Signature
130
+	 */
131
+	public function signatureValue(): Signature
132
+	{
133
+		return $this->_signatureValue;
134
+	}
135
+    
136
+	/**
137
+	 * Check whether certificate is self-issued.
138
+	 *
139
+	 * @return bool
140
+	 */
141
+	public function isSelfIssued(): bool
142
+	{
143
+		return $this->_tbsCertificate->subject()->equals(
144
+			$this->_tbsCertificate->issuer());
145
+	}
146
+    
147
+	/**
148
+	 * Check whether certificate is semantically equal to another.
149
+	 *
150
+	 * @param Certificate $cert Certificate to compare to
151
+	 * @return bool
152
+	 */
153
+	public function equals(Certificate $cert): bool
154
+	{
155
+		return $this->_hasEqualSerialNumber($cert) &&
156
+			 $this->_hasEqualPublicKey($cert) && $this->_hasEqualSubject($cert);
157
+	}
158
+    
159
+	/**
160
+	 * Check whether certificate has serial number equal to another.
161
+	 *
162
+	 * @param Certificate $cert
163
+	 * @return bool
164
+	 */
165
+	private function _hasEqualSerialNumber(Certificate $cert): bool
166
+	{
167
+		$sn1 = $this->_tbsCertificate->serialNumber();
168
+		$sn2 = $cert->_tbsCertificate->serialNumber();
169
+		return $sn1 == $sn2;
170
+	}
171
+    
172
+	/**
173
+	 * Check whether certificate has public key equal to another.
174
+	 *
175
+	 * @param Certificate $cert
176
+	 * @return bool
177
+	 */
178
+	private function _hasEqualPublicKey(Certificate $cert): bool
179
+	{
180
+		$kid1 = $this->_tbsCertificate->subjectPublicKeyInfo()->keyIdentifier();
181
+		$kid2 = $cert->_tbsCertificate->subjectPublicKeyInfo()->keyIdentifier();
182
+		return $kid1 == $kid2;
183
+	}
184
+    
185
+	/**
186
+	 * Check whether certificate has subject equal to another.
187
+	 *
188
+	 * @param Certificate $cert
189
+	 * @return bool
190
+	 */
191
+	private function _hasEqualSubject(Certificate $cert): bool
192
+	{
193
+		$dn1 = $this->_tbsCertificate->subject();
194
+		$dn2 = $cert->_tbsCertificate->subject();
195
+		return $dn1->equals($dn2);
196
+	}
197
+    
198
+	/**
199
+	 * Generate ASN.1 structure.
200
+	 *
201
+	 * @return Sequence
202
+	 */
203
+	public function toASN1(): Sequence
204
+	{
205
+		return new Sequence($this->_tbsCertificate->toASN1(),
206
+			$this->_signatureAlgorithm->toASN1(),
207
+			$this->_signatureValue->bitString());
208
+	}
209
+    
210
+	/**
211
+	 * Get certificate as a DER.
212
+	 *
213
+	 * @return string
214
+	 */
215
+	public function toDER(): string
216
+	{
217
+		return $this->toASN1()->toDER();
218
+	}
219
+    
220
+	/**
221
+	 * Get certificate as a PEM.
222
+	 *
223
+	 * @return PEM
224
+	 */
225
+	public function toPEM(): PEM
226
+	{
227
+		return new PEM(PEM::TYPE_CERTIFICATE, $this->toDER());
228
+	}
229
+    
230
+	/**
231
+	 * Verify certificate signature.
232
+	 *
233
+	 * @param PublicKeyInfo $pubkey_info Issuer's public key
234
+	 * @param Crypto|null $crypto Crypto engine, use default if not set
235
+	 * @return bool True if certificate signature is valid
236
+	 */
237
+	public function verify(PublicKeyInfo $pubkey_info, Crypto $crypto = null): bool
238
+	{
239
+		$crypto = $crypto ?: Crypto::getDefault();
240
+		$data = $this->_tbsCertificate->toASN1()->toDER();
241
+		return $crypto->verify($data, $this->_signatureValue, $pubkey_info,
242
+			$this->_signatureAlgorithm);
243
+	}
244
+    
245
+	/**
246
+	 * Get certificate as a PEM formatted string.
247
+	 *
248
+	 * @return string
249
+	 */
250
+	public function __toString()
251
+	{
252
+		return $this->toPEM()->string();
253
+	}
254 254
 }
Please login to merge, or discard this patch.