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.
Passed
Branch php72 (880eb0)
by Joni
05:58
created
lib/JWX/JWE/EncryptionAlgorithm/A256GCMAlgorithm.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -15,27 +15,27 @@
 block discarded – undo
15 15
  */
16 16
 class A256GCMAlgorithm extends AESGCMAlgorithm
17 17
 {
18
-    /**
19
-     * {@inheritdoc}
20
-     */
21
-    public function encryptionAlgorithmParamValue(): string
22
-    {
23
-        return JWA::ALGO_A256GCM;
24
-    }
18
+	/**
19
+	 * {@inheritdoc}
20
+	 */
21
+	public function encryptionAlgorithmParamValue(): string
22
+	{
23
+		return JWA::ALGO_A256GCM;
24
+	}
25 25
 
26
-    /**
27
-     * {@inheritdoc}
28
-     */
29
-    public function keySize(): int
30
-    {
31
-        return 32;
32
-    }
26
+	/**
27
+	 * {@inheritdoc}
28
+	 */
29
+	public function keySize(): int
30
+	{
31
+		return 32;
32
+	}
33 33
 
34
-    /**
35
-     * {@inheritdoc}
36
-     */
37
-    protected function _getGCMCipher(): Cipher
38
-    {
39
-        return new AES256Cipher();
40
-    }
34
+	/**
35
+	 * {@inheritdoc}
36
+	 */
37
+	protected function _getGCMCipher(): Cipher
38
+	{
39
+		return new AES256Cipher();
40
+	}
41 41
 }
Please login to merge, or discard this patch.
lib/JWX/JWE/EncryptionAlgorithm/A256CBCHS512Algorithm.php 1 patch
Indentation   +49 added lines, -49 removed lines patch added patch discarded remove patch
@@ -13,59 +13,59 @@
 block discarded – undo
13 13
  */
14 14
 class A256CBCHS512Algorithm extends AESCBCAlgorithm
15 15
 {
16
-    /**
17
-     * {@inheritdoc}
18
-     */
19
-    public function keySize(): int
20
-    {
21
-        return 64;
22
-    }
16
+	/**
17
+	 * {@inheritdoc}
18
+	 */
19
+	public function keySize(): int
20
+	{
21
+		return 64;
22
+	}
23 23
 
24
-    /**
25
-     * {@inheritdoc}
26
-     */
27
-    public function encryptionAlgorithmParamValue(): string
28
-    {
29
-        return JWA::ALGO_A256CBC_HS512;
30
-    }
24
+	/**
25
+	 * {@inheritdoc}
26
+	 */
27
+	public function encryptionAlgorithmParamValue(): string
28
+	{
29
+		return JWA::ALGO_A256CBC_HS512;
30
+	}
31 31
 
32
-    /**
33
-     * {@inheritdoc}
34
-     */
35
-    protected function _cipherMethod(): string
36
-    {
37
-        return 'aes-256-cbc';
38
-    }
32
+	/**
33
+	 * {@inheritdoc}
34
+	 */
35
+	protected function _cipherMethod(): string
36
+	{
37
+		return 'aes-256-cbc';
38
+	}
39 39
 
40
-    /**
41
-     * {@inheritdoc}
42
-     */
43
-    protected function _hashAlgo(): string
44
-    {
45
-        return 'sha512';
46
-    }
40
+	/**
41
+	 * {@inheritdoc}
42
+	 */
43
+	protected function _hashAlgo(): string
44
+	{
45
+		return 'sha512';
46
+	}
47 47
 
48
-    /**
49
-     * {@inheritdoc}
50
-     */
51
-    protected function _encKeyLen(): int
52
-    {
53
-        return 32;
54
-    }
48
+	/**
49
+	 * {@inheritdoc}
50
+	 */
51
+	protected function _encKeyLen(): int
52
+	{
53
+		return 32;
54
+	}
55 55
 
56
-    /**
57
-     * {@inheritdoc}
58
-     */
59
-    protected function _macKeyLen(): int
60
-    {
61
-        return 32;
62
-    }
56
+	/**
57
+	 * {@inheritdoc}
58
+	 */
59
+	protected function _macKeyLen(): int
60
+	{
61
+		return 32;
62
+	}
63 63
 
64
-    /**
65
-     * {@inheritdoc}
66
-     */
67
-    protected function _tagLen(): int
68
-    {
69
-        return 32;
70
-    }
64
+	/**
65
+	 * {@inheritdoc}
66
+	 */
67
+	protected function _tagLen(): int
68
+	{
69
+		return 32;
70
+	}
71 71
 }
Please login to merge, or discard this patch.
lib/JWX/JWE/EncryptionAlgorithm/A192CBCHS384Algorithm.php 1 patch
Indentation   +49 added lines, -49 removed lines patch added patch discarded remove patch
@@ -13,59 +13,59 @@
 block discarded – undo
13 13
  */
14 14
 class A192CBCHS384Algorithm extends AESCBCAlgorithm
15 15
 {
16
-    /**
17
-     * {@inheritdoc}
18
-     */
19
-    public function keySize(): int
20
-    {
21
-        return 48;
22
-    }
16
+	/**
17
+	 * {@inheritdoc}
18
+	 */
19
+	public function keySize(): int
20
+	{
21
+		return 48;
22
+	}
23 23
 
24
-    /**
25
-     * {@inheritdoc}
26
-     */
27
-    public function encryptionAlgorithmParamValue(): string
28
-    {
29
-        return JWA::ALGO_A192CBC_HS384;
30
-    }
24
+	/**
25
+	 * {@inheritdoc}
26
+	 */
27
+	public function encryptionAlgorithmParamValue(): string
28
+	{
29
+		return JWA::ALGO_A192CBC_HS384;
30
+	}
31 31
 
32
-    /**
33
-     * {@inheritdoc}
34
-     */
35
-    protected function _cipherMethod(): string
36
-    {
37
-        return 'aes-192-cbc';
38
-    }
32
+	/**
33
+	 * {@inheritdoc}
34
+	 */
35
+	protected function _cipherMethod(): string
36
+	{
37
+		return 'aes-192-cbc';
38
+	}
39 39
 
40
-    /**
41
-     * {@inheritdoc}
42
-     */
43
-    protected function _hashAlgo(): string
44
-    {
45
-        return 'sha384';
46
-    }
40
+	/**
41
+	 * {@inheritdoc}
42
+	 */
43
+	protected function _hashAlgo(): string
44
+	{
45
+		return 'sha384';
46
+	}
47 47
 
48
-    /**
49
-     * {@inheritdoc}
50
-     */
51
-    protected function _encKeyLen(): int
52
-    {
53
-        return 24;
54
-    }
48
+	/**
49
+	 * {@inheritdoc}
50
+	 */
51
+	protected function _encKeyLen(): int
52
+	{
53
+		return 24;
54
+	}
55 55
 
56
-    /**
57
-     * {@inheritdoc}
58
-     */
59
-    protected function _macKeyLen(): int
60
-    {
61
-        return 24;
62
-    }
56
+	/**
57
+	 * {@inheritdoc}
58
+	 */
59
+	protected function _macKeyLen(): int
60
+	{
61
+		return 24;
62
+	}
63 63
 
64
-    /**
65
-     * {@inheritdoc}
66
-     */
67
-    protected function _tagLen(): int
68
-    {
69
-        return 24;
70
-    }
64
+	/**
65
+	 * {@inheritdoc}
66
+	 */
67
+	protected function _tagLen(): int
68
+	{
69
+		return 24;
70
+	}
71 71
 }
Please login to merge, or discard this patch.
lib/JWX/JWE/EncryptionAlgorithm/EncryptionAlgorithmFactory.php 1 patch
Indentation   +52 added lines, -52 removed lines patch added patch discarded remove patch
@@ -13,58 +13,58 @@
 block discarded – undo
13 13
  */
14 14
 abstract class EncryptionAlgorithmFactory
15 15
 {
16
-    /**
17
-     * Mapping from algorithm name to class name.
18
-     *
19
-     * @internal
20
-     *
21
-     * @var array
22
-     */
23
-    const MAP_ALGO_TO_CLASS = [
24
-        JWA::ALGO_A128CBC_HS256 => A128CBCHS256Algorithm::class,
25
-        JWA::ALGO_A192CBC_HS384 => A192CBCHS384Algorithm::class,
26
-        JWA::ALGO_A256CBC_HS512 => A256CBCHS512Algorithm::class,
27
-        JWA::ALGO_A128GCM => A128GCMAlgorithm::class,
28
-        JWA::ALGO_A192GCM => A192GCMAlgorithm::class,
29
-        JWA::ALGO_A256GCM => A256GCMAlgorithm::class,
30
-    ];
16
+	/**
17
+	 * Mapping from algorithm name to class name.
18
+	 *
19
+	 * @internal
20
+	 *
21
+	 * @var array
22
+	 */
23
+	const MAP_ALGO_TO_CLASS = [
24
+		JWA::ALGO_A128CBC_HS256 => A128CBCHS256Algorithm::class,
25
+		JWA::ALGO_A192CBC_HS384 => A192CBCHS384Algorithm::class,
26
+		JWA::ALGO_A256CBC_HS512 => A256CBCHS512Algorithm::class,
27
+		JWA::ALGO_A128GCM => A128GCMAlgorithm::class,
28
+		JWA::ALGO_A192GCM => A192GCMAlgorithm::class,
29
+		JWA::ALGO_A256GCM => A256GCMAlgorithm::class,
30
+	];
31 31
 
32
-    /**
33
-     * Get the content encryption algorithm by algorithm name.
34
-     *
35
-     * @param string $name Algorithm name
36
-     *
37
-     * @throws \UnexpectedValueException if algorithm is not supported
38
-     *
39
-     * @return ContentEncryptionAlgorithm
40
-     */
41
-    public static function algoByName(string $name): ContentEncryptionAlgorithm
42
-    {
43
-        if (!array_key_exists($name, self::MAP_ALGO_TO_CLASS)) {
44
-            throw new \UnexpectedValueException(
45
-                "No content encryption algorithm '{$name}'.");
46
-        }
47
-        $cls = self::MAP_ALGO_TO_CLASS[$name];
48
-        return new $cls();
49
-    }
32
+	/**
33
+	 * Get the content encryption algorithm by algorithm name.
34
+	 *
35
+	 * @param string $name Algorithm name
36
+	 *
37
+	 * @throws \UnexpectedValueException if algorithm is not supported
38
+	 *
39
+	 * @return ContentEncryptionAlgorithm
40
+	 */
41
+	public static function algoByName(string $name): ContentEncryptionAlgorithm
42
+	{
43
+		if (!array_key_exists($name, self::MAP_ALGO_TO_CLASS)) {
44
+			throw new \UnexpectedValueException(
45
+				"No content encryption algorithm '{$name}'.");
46
+		}
47
+		$cls = self::MAP_ALGO_TO_CLASS[$name];
48
+		return new $cls();
49
+	}
50 50
 
51
-    /**
52
-     * Get the content encryption algorithm as specified in the given header.
53
-     *
54
-     * @param Header $header Header
55
-     *
56
-     * @throws \UnexpectedValueException If content encryption algorithm
57
-     *                                   parameter is not present or algorithm
58
-     *                                   is not supported
59
-     *
60
-     * @return ContentEncryptionAlgorithm
61
-     */
62
-    public static function algoByHeader(Header $header): ContentEncryptionAlgorithm
63
-    {
64
-        if (!$header->hasEncryptionAlgorithm()) {
65
-            throw new \UnexpectedValueException(
66
-                'No encryption algorithm parameter.');
67
-        }
68
-        return self::algoByName($header->encryptionAlgorithm()->value());
69
-    }
51
+	/**
52
+	 * Get the content encryption algorithm as specified in the given header.
53
+	 *
54
+	 * @param Header $header Header
55
+	 *
56
+	 * @throws \UnexpectedValueException If content encryption algorithm
57
+	 *                                   parameter is not present or algorithm
58
+	 *                                   is not supported
59
+	 *
60
+	 * @return ContentEncryptionAlgorithm
61
+	 */
62
+	public static function algoByHeader(Header $header): ContentEncryptionAlgorithm
63
+	{
64
+		if (!$header->hasEncryptionAlgorithm()) {
65
+			throw new \UnexpectedValueException(
66
+				'No encryption algorithm parameter.');
67
+		}
68
+		return self::algoByName($header->encryptionAlgorithm()->value());
69
+	}
70 70
 }
Please login to merge, or discard this patch.
lib/JWX/JWE/EncryptionAlgorithm/A192GCMAlgorithm.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -15,27 +15,27 @@
 block discarded – undo
15 15
  */
16 16
 class A192GCMAlgorithm extends AESGCMAlgorithm
17 17
 {
18
-    /**
19
-     * {@inheritdoc}
20
-     */
21
-    public function encryptionAlgorithmParamValue(): string
22
-    {
23
-        return JWA::ALGO_A192GCM;
24
-    }
18
+	/**
19
+	 * {@inheritdoc}
20
+	 */
21
+	public function encryptionAlgorithmParamValue(): string
22
+	{
23
+		return JWA::ALGO_A192GCM;
24
+	}
25 25
 
26
-    /**
27
-     * {@inheritdoc}
28
-     */
29
-    public function keySize(): int
30
-    {
31
-        return 24;
32
-    }
26
+	/**
27
+	 * {@inheritdoc}
28
+	 */
29
+	public function keySize(): int
30
+	{
31
+		return 24;
32
+	}
33 33
 
34
-    /**
35
-     * {@inheritdoc}
36
-     */
37
-    protected function _getGCMCipher(): Cipher
38
-    {
39
-        return new AES192Cipher();
40
-    }
34
+	/**
35
+	 * {@inheritdoc}
36
+	 */
37
+	protected function _getGCMCipher(): Cipher
38
+	{
39
+		return new AES192Cipher();
40
+	}
41 41
 }
Please login to merge, or discard this patch.
lib/JWX/JWE/EncryptionAlgorithm/AESCBCAlgorithm.php 1 patch
Indentation   +210 added lines, -210 removed lines patch added patch discarded remove patch
@@ -15,214 +15,214 @@
 block discarded – undo
15 15
  */
16 16
 abstract class AESCBCAlgorithm implements ContentEncryptionAlgorithm
17 17
 {
18
-    /**
19
-     * {@inheritdoc}
20
-     */
21
-    public function encrypt(string $plaintext, string $key, string $iv,
22
-        string $aad): array
23
-    {
24
-        $this->_validateKey($key);
25
-        $this->_validateIV($iv);
26
-        $ciphertext = openssl_encrypt($plaintext, $this->_getCipherMethod(),
27
-            $this->_encKey($key), OPENSSL_RAW_DATA, $iv);
28
-        if (false === $ciphertext) {
29
-            throw new \RuntimeException(
30
-                'openssl_encrypt() failed: ' . $this->_getLastOpenSSLError());
31
-        }
32
-        $auth_data = $aad . $iv . $ciphertext . $this->_aadLen($aad);
33
-        $auth_tag = $this->_computeAuthTag($auth_data, $key);
34
-        return [$ciphertext, $auth_tag];
35
-    }
36
-
37
-    /**
38
-     * {@inheritdoc}
39
-     */
40
-    public function decrypt(string $ciphertext, string $key, string $iv,
41
-        string $aad, string $auth_tag): string
42
-    {
43
-        $this->_validateKey($key);
44
-        $this->_validateIV($iv);
45
-        $auth_data = $aad . $iv . $ciphertext . $this->_aadLen($aad);
46
-        if ($this->_computeAuthTag($auth_data, $key) !== $auth_tag) {
47
-            throw new AuthenticationException('Message authentication failed.');
48
-        }
49
-        $plaintext = openssl_decrypt($ciphertext, $this->_getCipherMethod(),
50
-            $this->_encKey($key), OPENSSL_RAW_DATA, $iv);
51
-        if (false === $plaintext) {
52
-            throw new \RuntimeException(
53
-                'openssl_decrypt() failed: ' . $this->_getLastOpenSSLError());
54
-        }
55
-        return $plaintext;
56
-    }
57
-
58
-    /**
59
-     * {@inheritdoc}
60
-     */
61
-    public function ivSize(): int
62
-    {
63
-        return 16;
64
-    }
65
-
66
-    /**
67
-     * {@inheritdoc}
68
-     */
69
-    public function headerParameters(): array
70
-    {
71
-        return [EncryptionAlgorithmParameter::fromAlgorithm($this)];
72
-    }
73
-
74
-    /**
75
-     * Get cipher method name that is recognized by OpenSSL.
76
-     *
77
-     * @return string
78
-     */
79
-    abstract protected function _cipherMethod(): string;
80
-
81
-    /**
82
-     * Get algorithm name that is recognized by the Hash extension.
83
-     *
84
-     * @return string
85
-     */
86
-    abstract protected function _hashAlgo(): string;
87
-
88
-    /**
89
-     * Get length of the encryption key.
90
-     *
91
-     * @return int
92
-     */
93
-    abstract protected function _encKeyLen(): int;
94
-
95
-    /**
96
-     * Get length of the MAC key.
97
-     *
98
-     * @return int
99
-     */
100
-    abstract protected function _macKeyLen(): int;
101
-
102
-    /**
103
-     * Get length of the authentication tag.
104
-     *
105
-     * @return int
106
-     */
107
-    abstract protected function _tagLen(): int;
108
-
109
-    /**
110
-     * Get cipher method and verify that it's supported.
111
-     *
112
-     * @throws \RuntimeException
113
-     *
114
-     * @return string
115
-     */
116
-    final protected function _getCipherMethod(): string
117
-    {
118
-        static $supported_ciphers;
119
-        if (!isset($supported_ciphers)) {
120
-            $supported_ciphers = array_flip(
121
-                array_map('strtolower', openssl_get_cipher_methods(false)));
122
-        }
123
-        $method = $this->_cipherMethod();
124
-        if (!isset($supported_ciphers[$method])) {
125
-            throw new \RuntimeException(
126
-                "Cipher method {$method} is not" .
127
-                     ' supported by this version of OpenSSL.');
128
-        }
129
-        return $method;
130
-    }
131
-
132
-    /**
133
-     * Check that key is valid.
134
-     *
135
-     * @param string $key
136
-     *
137
-     * @throws \RuntimeException
138
-     */
139
-    final protected function _validateKey(string $key): void
140
-    {
141
-        if (strlen($key) !== $this->keySize()) {
142
-            throw new \RuntimeException('Invalid key size.');
143
-        }
144
-    }
145
-
146
-    /**
147
-     * Check that IV is valid.
148
-     *
149
-     * @param string $iv
150
-     *
151
-     * @throws \RuntimeException
152
-     */
153
-    final protected function _validateIV(string $iv): void
154
-    {
155
-        $len = openssl_cipher_iv_length($this->_getCipherMethod());
156
-        if ($len !== strlen($iv)) {
157
-            throw new \RuntimeException('Invalid IV length.');
158
-        }
159
-    }
160
-
161
-    /**
162
-     * Get MAC key from CEK.
163
-     *
164
-     * @param string $key
165
-     *
166
-     * @return string
167
-     */
168
-    final protected function _macKey(string $key): string
169
-    {
170
-        return substr($key, 0, $this->_macKeyLen());
171
-    }
172
-
173
-    /**
174
-     * Get encryption key from CEK.
175
-     *
176
-     * @param string $key
177
-     *
178
-     * @return string
179
-     */
180
-    final protected function _encKey(string $key): string
181
-    {
182
-        return substr($key, -$this->_encKeyLen());
183
-    }
184
-
185
-    /**
186
-     * Compute AL value.
187
-     *
188
-     * @param string $aad
189
-     *
190
-     * @return string 64 bits
191
-     */
192
-    final protected function _aadLen(string $aad): string
193
-    {
194
-        // truncate on 32 bit hosts
195
-        if (PHP_INT_SIZE < 8) {
196
-            return "\0\0\0\0" . pack('N', strlen($aad) * 8);
197
-        }
198
-        return pack('J', strlen($aad) * 8);
199
-    }
200
-
201
-    /**
202
-     * Compute authentication tag.
203
-     *
204
-     * @param string $data
205
-     * @param string $key  CEK
206
-     *
207
-     * @return string
208
-     */
209
-    final protected function _computeAuthTag(string $data, string $key): string
210
-    {
211
-        $tag = hash_hmac($this->_hashAlgo(), $data, $this->_macKey($key), true);
212
-        return substr($tag, 0, $this->_tagLen());
213
-    }
214
-
215
-    /**
216
-     * Get last OpenSSL error message.
217
-     *
218
-     * @return null|string
219
-     */
220
-    protected function _getLastOpenSSLError(): ?string
221
-    {
222
-        $msg = null;
223
-        while (false !== ($err = openssl_error_string())) {
224
-            $msg = $err;
225
-        }
226
-        return $msg;
227
-    }
18
+	/**
19
+	 * {@inheritdoc}
20
+	 */
21
+	public function encrypt(string $plaintext, string $key, string $iv,
22
+		string $aad): array
23
+	{
24
+		$this->_validateKey($key);
25
+		$this->_validateIV($iv);
26
+		$ciphertext = openssl_encrypt($plaintext, $this->_getCipherMethod(),
27
+			$this->_encKey($key), OPENSSL_RAW_DATA, $iv);
28
+		if (false === $ciphertext) {
29
+			throw new \RuntimeException(
30
+				'openssl_encrypt() failed: ' . $this->_getLastOpenSSLError());
31
+		}
32
+		$auth_data = $aad . $iv . $ciphertext . $this->_aadLen($aad);
33
+		$auth_tag = $this->_computeAuthTag($auth_data, $key);
34
+		return [$ciphertext, $auth_tag];
35
+	}
36
+
37
+	/**
38
+	 * {@inheritdoc}
39
+	 */
40
+	public function decrypt(string $ciphertext, string $key, string $iv,
41
+		string $aad, string $auth_tag): string
42
+	{
43
+		$this->_validateKey($key);
44
+		$this->_validateIV($iv);
45
+		$auth_data = $aad . $iv . $ciphertext . $this->_aadLen($aad);
46
+		if ($this->_computeAuthTag($auth_data, $key) !== $auth_tag) {
47
+			throw new AuthenticationException('Message authentication failed.');
48
+		}
49
+		$plaintext = openssl_decrypt($ciphertext, $this->_getCipherMethod(),
50
+			$this->_encKey($key), OPENSSL_RAW_DATA, $iv);
51
+		if (false === $plaintext) {
52
+			throw new \RuntimeException(
53
+				'openssl_decrypt() failed: ' . $this->_getLastOpenSSLError());
54
+		}
55
+		return $plaintext;
56
+	}
57
+
58
+	/**
59
+	 * {@inheritdoc}
60
+	 */
61
+	public function ivSize(): int
62
+	{
63
+		return 16;
64
+	}
65
+
66
+	/**
67
+	 * {@inheritdoc}
68
+	 */
69
+	public function headerParameters(): array
70
+	{
71
+		return [EncryptionAlgorithmParameter::fromAlgorithm($this)];
72
+	}
73
+
74
+	/**
75
+	 * Get cipher method name that is recognized by OpenSSL.
76
+	 *
77
+	 * @return string
78
+	 */
79
+	abstract protected function _cipherMethod(): string;
80
+
81
+	/**
82
+	 * Get algorithm name that is recognized by the Hash extension.
83
+	 *
84
+	 * @return string
85
+	 */
86
+	abstract protected function _hashAlgo(): string;
87
+
88
+	/**
89
+	 * Get length of the encryption key.
90
+	 *
91
+	 * @return int
92
+	 */
93
+	abstract protected function _encKeyLen(): int;
94
+
95
+	/**
96
+	 * Get length of the MAC key.
97
+	 *
98
+	 * @return int
99
+	 */
100
+	abstract protected function _macKeyLen(): int;
101
+
102
+	/**
103
+	 * Get length of the authentication tag.
104
+	 *
105
+	 * @return int
106
+	 */
107
+	abstract protected function _tagLen(): int;
108
+
109
+	/**
110
+	 * Get cipher method and verify that it's supported.
111
+	 *
112
+	 * @throws \RuntimeException
113
+	 *
114
+	 * @return string
115
+	 */
116
+	final protected function _getCipherMethod(): string
117
+	{
118
+		static $supported_ciphers;
119
+		if (!isset($supported_ciphers)) {
120
+			$supported_ciphers = array_flip(
121
+				array_map('strtolower', openssl_get_cipher_methods(false)));
122
+		}
123
+		$method = $this->_cipherMethod();
124
+		if (!isset($supported_ciphers[$method])) {
125
+			throw new \RuntimeException(
126
+				"Cipher method {$method} is not" .
127
+					 ' supported by this version of OpenSSL.');
128
+		}
129
+		return $method;
130
+	}
131
+
132
+	/**
133
+	 * Check that key is valid.
134
+	 *
135
+	 * @param string $key
136
+	 *
137
+	 * @throws \RuntimeException
138
+	 */
139
+	final protected function _validateKey(string $key): void
140
+	{
141
+		if (strlen($key) !== $this->keySize()) {
142
+			throw new \RuntimeException('Invalid key size.');
143
+		}
144
+	}
145
+
146
+	/**
147
+	 * Check that IV is valid.
148
+	 *
149
+	 * @param string $iv
150
+	 *
151
+	 * @throws \RuntimeException
152
+	 */
153
+	final protected function _validateIV(string $iv): void
154
+	{
155
+		$len = openssl_cipher_iv_length($this->_getCipherMethod());
156
+		if ($len !== strlen($iv)) {
157
+			throw new \RuntimeException('Invalid IV length.');
158
+		}
159
+	}
160
+
161
+	/**
162
+	 * Get MAC key from CEK.
163
+	 *
164
+	 * @param string $key
165
+	 *
166
+	 * @return string
167
+	 */
168
+	final protected function _macKey(string $key): string
169
+	{
170
+		return substr($key, 0, $this->_macKeyLen());
171
+	}
172
+
173
+	/**
174
+	 * Get encryption key from CEK.
175
+	 *
176
+	 * @param string $key
177
+	 *
178
+	 * @return string
179
+	 */
180
+	final protected function _encKey(string $key): string
181
+	{
182
+		return substr($key, -$this->_encKeyLen());
183
+	}
184
+
185
+	/**
186
+	 * Compute AL value.
187
+	 *
188
+	 * @param string $aad
189
+	 *
190
+	 * @return string 64 bits
191
+	 */
192
+	final protected function _aadLen(string $aad): string
193
+	{
194
+		// truncate on 32 bit hosts
195
+		if (PHP_INT_SIZE < 8) {
196
+			return "\0\0\0\0" . pack('N', strlen($aad) * 8);
197
+		}
198
+		return pack('J', strlen($aad) * 8);
199
+	}
200
+
201
+	/**
202
+	 * Compute authentication tag.
203
+	 *
204
+	 * @param string $data
205
+	 * @param string $key  CEK
206
+	 *
207
+	 * @return string
208
+	 */
209
+	final protected function _computeAuthTag(string $data, string $key): string
210
+	{
211
+		$tag = hash_hmac($this->_hashAlgo(), $data, $this->_macKey($key), true);
212
+		return substr($tag, 0, $this->_tagLen());
213
+	}
214
+
215
+	/**
216
+	 * Get last OpenSSL error message.
217
+	 *
218
+	 * @return null|string
219
+	 */
220
+	protected function _getLastOpenSSLError(): ?string
221
+	{
222
+		$msg = null;
223
+		while (false !== ($err = openssl_error_string())) {
224
+			$msg = $err;
225
+		}
226
+		return $msg;
227
+	}
228 228
 }
Please login to merge, or discard this patch.
lib/JWX/JWE/EncryptionAlgorithm/AESGCMAlgorithm.php 1 patch
Indentation   +83 added lines, -83 removed lines patch added patch discarded remove patch
@@ -18,94 +18,94 @@
 block discarded – undo
18 18
  */
19 19
 abstract class AESGCMAlgorithm implements ContentEncryptionAlgorithm
20 20
 {
21
-    /**
22
-     * {@inheritdoc}
23
-     */
24
-    public function encrypt(string $plaintext, string $key, string $iv,
25
-        string $aad): array
26
-    {
27
-        $this->_validateKey($key);
28
-        $this->_validateIV($iv);
29
-        [$ciphertext, $auth_tag] = $this->_getGCM()
30
-            ->encrypt($plaintext, $aad, $key, $iv);
31
-        return [$ciphertext, $auth_tag];
32
-    }
21
+	/**
22
+	 * {@inheritdoc}
23
+	 */
24
+	public function encrypt(string $plaintext, string $key, string $iv,
25
+		string $aad): array
26
+	{
27
+		$this->_validateKey($key);
28
+		$this->_validateIV($iv);
29
+		[$ciphertext, $auth_tag] = $this->_getGCM()
30
+			->encrypt($plaintext, $aad, $key, $iv);
31
+		return [$ciphertext, $auth_tag];
32
+	}
33 33
 
34
-    /**
35
-     * {@inheritdoc}
36
-     */
37
-    public function decrypt(string $ciphertext, string $key, string $iv,
38
-        string $aad, string $auth_tag): string
39
-    {
40
-        $this->_validateKey($key);
41
-        $this->_validateIV($iv);
42
-        try {
43
-            $plaintext = $this->_getGCM()
44
-                ->decrypt($ciphertext, $auth_tag, $aad, $key, $iv);
45
-        } catch (GCMAuthException $e) {
46
-            throw new AuthenticationException('Message authentication failed.');
47
-        }
48
-        return $plaintext;
49
-    }
34
+	/**
35
+	 * {@inheritdoc}
36
+	 */
37
+	public function decrypt(string $ciphertext, string $key, string $iv,
38
+		string $aad, string $auth_tag): string
39
+	{
40
+		$this->_validateKey($key);
41
+		$this->_validateIV($iv);
42
+		try {
43
+			$plaintext = $this->_getGCM()
44
+				->decrypt($ciphertext, $auth_tag, $aad, $key, $iv);
45
+		} catch (GCMAuthException $e) {
46
+			throw new AuthenticationException('Message authentication failed.');
47
+		}
48
+		return $plaintext;
49
+	}
50 50
 
51
-    /**
52
-     * {@inheritdoc}
53
-     */
54
-    public function ivSize(): int
55
-    {
56
-        return 12;
57
-    }
51
+	/**
52
+	 * {@inheritdoc}
53
+	 */
54
+	public function ivSize(): int
55
+	{
56
+		return 12;
57
+	}
58 58
 
59
-    /**
60
-     * {@inheritdoc}
61
-     */
62
-    public function headerParameters(): array
63
-    {
64
-        return [EncryptionAlgorithmParameter::fromAlgorithm($this)];
65
-    }
59
+	/**
60
+	 * {@inheritdoc}
61
+	 */
62
+	public function headerParameters(): array
63
+	{
64
+		return [EncryptionAlgorithmParameter::fromAlgorithm($this)];
65
+	}
66 66
 
67
-    /**
68
-     * Get GCM Cipher instance.
69
-     *
70
-     * @return Cipher
71
-     */
72
-    abstract protected function _getGCMCipher(): Cipher;
67
+	/**
68
+	 * Get GCM Cipher instance.
69
+	 *
70
+	 * @return Cipher
71
+	 */
72
+	abstract protected function _getGCMCipher(): Cipher;
73 73
 
74
-    /**
75
-     * Get GCM instance.
76
-     *
77
-     * @return GCM
78
-     */
79
-    final protected function _getGCM(): GCM
80
-    {
81
-        return new GCM($this->_getGCMCipher(), 16);
82
-    }
74
+	/**
75
+	 * Get GCM instance.
76
+	 *
77
+	 * @return GCM
78
+	 */
79
+	final protected function _getGCM(): GCM
80
+	{
81
+		return new GCM($this->_getGCMCipher(), 16);
82
+	}
83 83
 
84
-    /**
85
-     * Check that key is valid.
86
-     *
87
-     * @param string $key
88
-     *
89
-     * @throws \RuntimeException
90
-     */
91
-    final protected function _validateKey(string $key): void
92
-    {
93
-        if (strlen($key) !== $this->keySize()) {
94
-            throw new \RuntimeException('Invalid key size.');
95
-        }
96
-    }
84
+	/**
85
+	 * Check that key is valid.
86
+	 *
87
+	 * @param string $key
88
+	 *
89
+	 * @throws \RuntimeException
90
+	 */
91
+	final protected function _validateKey(string $key): void
92
+	{
93
+		if (strlen($key) !== $this->keySize()) {
94
+			throw new \RuntimeException('Invalid key size.');
95
+		}
96
+	}
97 97
 
98
-    /**
99
-     * Check that IV is valid.
100
-     *
101
-     * @param string $iv
102
-     *
103
-     * @throws \RuntimeException
104
-     */
105
-    final protected function _validateIV(string $iv): void
106
-    {
107
-        if (strlen($iv) !== $this->ivSize()) {
108
-            throw new \RuntimeException('Invalid IV length.');
109
-        }
110
-    }
98
+	/**
99
+	 * Check that IV is valid.
100
+	 *
101
+	 * @param string $iv
102
+	 *
103
+	 * @throws \RuntimeException
104
+	 */
105
+	final protected function _validateIV(string $iv): void
106
+	{
107
+		if (strlen($iv) !== $this->ivSize()) {
108
+			throw new \RuntimeException('Invalid IV length.');
109
+		}
110
+	}
111 111
 }
Please login to merge, or discard this patch.
lib/JWX/JWE/EncryptionAlgorithm/A128CBCHS256Algorithm.php 1 patch
Indentation   +49 added lines, -49 removed lines patch added patch discarded remove patch
@@ -13,59 +13,59 @@
 block discarded – undo
13 13
  */
14 14
 class A128CBCHS256Algorithm extends AESCBCAlgorithm
15 15
 {
16
-    /**
17
-     * {@inheritdoc}
18
-     */
19
-    public function keySize(): int
20
-    {
21
-        return 32;
22
-    }
16
+	/**
17
+	 * {@inheritdoc}
18
+	 */
19
+	public function keySize(): int
20
+	{
21
+		return 32;
22
+	}
23 23
 
24
-    /**
25
-     * {@inheritdoc}
26
-     */
27
-    public function encryptionAlgorithmParamValue(): string
28
-    {
29
-        return JWA::ALGO_A128CBC_HS256;
30
-    }
24
+	/**
25
+	 * {@inheritdoc}
26
+	 */
27
+	public function encryptionAlgorithmParamValue(): string
28
+	{
29
+		return JWA::ALGO_A128CBC_HS256;
30
+	}
31 31
 
32
-    /**
33
-     * {@inheritdoc}
34
-     */
35
-    protected function _cipherMethod(): string
36
-    {
37
-        return 'aes-128-cbc';
38
-    }
32
+	/**
33
+	 * {@inheritdoc}
34
+	 */
35
+	protected function _cipherMethod(): string
36
+	{
37
+		return 'aes-128-cbc';
38
+	}
39 39
 
40
-    /**
41
-     * {@inheritdoc}
42
-     */
43
-    protected function _hashAlgo(): string
44
-    {
45
-        return 'sha256';
46
-    }
40
+	/**
41
+	 * {@inheritdoc}
42
+	 */
43
+	protected function _hashAlgo(): string
44
+	{
45
+		return 'sha256';
46
+	}
47 47
 
48
-    /**
49
-     * {@inheritdoc}
50
-     */
51
-    protected function _encKeyLen(): int
52
-    {
53
-        return 16;
54
-    }
48
+	/**
49
+	 * {@inheritdoc}
50
+	 */
51
+	protected function _encKeyLen(): int
52
+	{
53
+		return 16;
54
+	}
55 55
 
56
-    /**
57
-     * {@inheritdoc}
58
-     */
59
-    protected function _macKeyLen(): int
60
-    {
61
-        return 16;
62
-    }
56
+	/**
57
+	 * {@inheritdoc}
58
+	 */
59
+	protected function _macKeyLen(): int
60
+	{
61
+		return 16;
62
+	}
63 63
 
64
-    /**
65
-     * {@inheritdoc}
66
-     */
67
-    protected function _tagLen(): int
68
-    {
69
-        return 16;
70
-    }
64
+	/**
65
+	 * {@inheritdoc}
66
+	 */
67
+	protected function _tagLen(): int
68
+	{
69
+		return 16;
70
+	}
71 71
 }
Please login to merge, or discard this patch.
lib/JWX/JWE/CompressionAlgorithm/DeflateAlgorithm.php 1 patch
Indentation   +62 added lines, -62 removed lines patch added patch discarded remove patch
@@ -16,71 +16,71 @@
 block discarded – undo
16 16
  */
17 17
 class DeflateAlgorithm implements CompressionAlgorithm
18 18
 {
19
-    /**
20
-     * Compression level.
21
-     *
22
-     * @var int
23
-     */
24
-    protected $_compressionLevel;
19
+	/**
20
+	 * Compression level.
21
+	 *
22
+	 * @var int
23
+	 */
24
+	protected $_compressionLevel;
25 25
 
26
-    /**
27
-     * Constructor.
28
-     *
29
-     * @param int $level Compression level 0..9
30
-     */
31
-    public function __construct(int $level = -1)
32
-    {
33
-        if ($level < -1 || $level > 9) {
34
-            throw new \DomainException('Compression level must be -1..9.');
35
-        }
36
-        $this->_compressionLevel = $level;
37
-    }
26
+	/**
27
+	 * Constructor.
28
+	 *
29
+	 * @param int $level Compression level 0..9
30
+	 */
31
+	public function __construct(int $level = -1)
32
+	{
33
+		if ($level < -1 || $level > 9) {
34
+			throw new \DomainException('Compression level must be -1..9.');
35
+		}
36
+		$this->_compressionLevel = $level;
37
+	}
38 38
 
39
-    /**
40
-     * {@inheritdoc}
41
-     *
42
-     * @throws \RuntimeException
43
-     */
44
-    public function compress(string $data): string
45
-    {
46
-        $ret = @gzdeflate($data, $this->_compressionLevel);
47
-        if (false === $ret) {
48
-            $err = error_get_last();
49
-            $msg = isset($err) && __FILE__ === $err['file'] ? $err['message'] : null;
50
-            throw new \RuntimeException($msg ?? 'gzdeflate() failed.');
51
-        }
52
-        return $ret;
53
-    }
39
+	/**
40
+	 * {@inheritdoc}
41
+	 *
42
+	 * @throws \RuntimeException
43
+	 */
44
+	public function compress(string $data): string
45
+	{
46
+		$ret = @gzdeflate($data, $this->_compressionLevel);
47
+		if (false === $ret) {
48
+			$err = error_get_last();
49
+			$msg = isset($err) && __FILE__ === $err['file'] ? $err['message'] : null;
50
+			throw new \RuntimeException($msg ?? 'gzdeflate() failed.');
51
+		}
52
+		return $ret;
53
+	}
54 54
 
55
-    /**
56
-     * {@inheritdoc}
57
-     *
58
-     * @throws \RuntimeException
59
-     */
60
-    public function decompress(string $data): string
61
-    {
62
-        $ret = @gzinflate($data);
63
-        if (false === $ret) {
64
-            $err = error_get_last();
65
-            $msg = isset($err) && __FILE__ === $err['file'] ? $err['message'] : null;
66
-            throw new \RuntimeException($msg ?? 'gzinflate() failed.');
67
-        }
68
-        return $ret;
69
-    }
55
+	/**
56
+	 * {@inheritdoc}
57
+	 *
58
+	 * @throws \RuntimeException
59
+	 */
60
+	public function decompress(string $data): string
61
+	{
62
+		$ret = @gzinflate($data);
63
+		if (false === $ret) {
64
+			$err = error_get_last();
65
+			$msg = isset($err) && __FILE__ === $err['file'] ? $err['message'] : null;
66
+			throw new \RuntimeException($msg ?? 'gzinflate() failed.');
67
+		}
68
+		return $ret;
69
+	}
70 70
 
71
-    /**
72
-     * {@inheritdoc}
73
-     */
74
-    public function compressionParamValue(): string
75
-    {
76
-        return JWA::ALGO_DEFLATE;
77
-    }
71
+	/**
72
+	 * {@inheritdoc}
73
+	 */
74
+	public function compressionParamValue(): string
75
+	{
76
+		return JWA::ALGO_DEFLATE;
77
+	}
78 78
 
79
-    /**
80
-     * {@inheritdoc}
81
-     */
82
-    public function headerParameters(): array
83
-    {
84
-        return [CompressionAlgorithmParameter::fromAlgorithm($this)];
85
-    }
79
+	/**
80
+	 * {@inheritdoc}
81
+	 */
82
+	public function headerParameters(): array
83
+	{
84
+		return [CompressionAlgorithmParameter::fromAlgorithm($this)];
85
+	}
86 86
 }
Please login to merge, or discard this patch.