|
7 | 7 | from .utils import ensure_bytes, ensure_unicode, key_path |
8 | 8 |
|
9 | 9 | try: |
10 | | - from jwt.algorithms import RSAAlgorithm, ECAlgorithm |
| 10 | + from jwt.algorithms import RSAAlgorithm, ECAlgorithm, RSAPSSAlgorithm |
11 | 11 |
|
12 | 12 | has_crypto = True |
13 | 13 | except ImportError: |
@@ -169,34 +169,92 @@ def test_ec_should_accept_unicode_key(self): |
169 | 169 | def test_ec_verify_should_return_false_if_signature_invalid(self): |
170 | 170 | algo = ECAlgorithm(ECAlgorithm.SHA256) |
171 | 171 |
|
172 | | - jwt_message = ensure_bytes('Hello World!') |
| 172 | + message = ensure_bytes('Hello World!') |
173 | 173 |
|
174 | 174 | # Mess up the signature by replacing a known byte |
175 | | - jwt_sig = base64.b64decode(ensure_bytes( |
| 175 | + sig = base64.b64decode(ensure_bytes( |
176 | 176 | 'MIGIAkIB9vYz+inBL8aOTA4auYz/zVuig7TT1bQgKROIQX9YpViHkFa4DT5' |
177 | 177 | '5FuFKn9XzVlk90p6ldEj42DC9YecXHbC2t+cCQgCicY+8f3f/KCNtWK7cif' |
178 | 178 | '6vdsVwm6Lrjs0Ag6ZqCf+olN11hVt1qKBC4lXppqB1gNWEmNQaiz1z2QRyc' |
179 | 179 | 'zJ8hSJmbw=='.replace('r', 's'))) |
180 | 180 |
|
181 | 181 | with open(key_path('testkey_ec.pub'), 'r') as keyfile: |
182 | | - jwt_pub_key = algo.prepare_key(keyfile.read()) |
| 182 | + pub_key = algo.prepare_key(keyfile.read()) |
183 | 183 |
|
184 | | - result = algo.verify(jwt_message, jwt_pub_key, jwt_sig) |
| 184 | + result = algo.verify(message, pub_key, sig) |
185 | 185 | self.assertFalse(result) |
186 | 186 |
|
187 | 187 | @unittest.skipIf(not has_crypto, 'Not supported without cryptography library') |
188 | 188 | def test_ec_verify_should_return_true_if_signature_valid(self): |
189 | 189 | algo = ECAlgorithm(ECAlgorithm.SHA256) |
190 | 190 |
|
191 | | - jwt_message = ensure_bytes('Hello World!') |
| 191 | + message = ensure_bytes('Hello World!') |
192 | 192 |
|
193 | | - jwt_sig = base64.b64decode(ensure_bytes( |
| 193 | + sig = base64.b64decode(ensure_bytes( |
194 | 194 | 'MIGIAkIB9vYz+inBL8aOTA4auYz/zVuig7TT1bQgKROIQX9YpViHkFa4DT5' |
195 | 195 | '5FuFKn9XzVlk90p6ldEj42DC9YecXHbC2t+cCQgCicY+8f3f/KCNtWK7cif' |
196 | 196 | '6vdsVwm6Lrjs0Ag6ZqCf+olN11hVt1qKBC4lXppqB1gNWEmNQaiz1z2QRyc' |
197 | 197 | 'zJ8hSJmbw==')) |
198 | 198 |
|
199 | 199 | with open(key_path('testkey_ec.pub'), 'r') as keyfile: |
| 200 | + pub_key = algo.prepare_key(keyfile.read()) |
| 201 | + |
| 202 | + result = algo.verify(message, pub_key, sig) |
| 203 | + self.assertTrue(result) |
| 204 | + |
| 205 | + @unittest.skipIf(not has_crypto, 'Not supported without cryptography library') |
| 206 | + def test_rsa_pss_sign_then_verify_should_return_true(self): |
| 207 | + algo = RSAPSSAlgorithm(RSAPSSAlgorithm.SHA256) |
| 208 | + |
| 209 | + message = ensure_bytes('Hello World!') |
| 210 | + |
| 211 | + with open(key_path('testkey_rsa'), 'r') as keyfile: |
| 212 | + priv_key = algo.prepare_key(keyfile.read()) |
| 213 | + sig = algo.sign(message, priv_key) |
| 214 | + |
| 215 | + with open(key_path('testkey_rsa.pub'), 'r') as keyfile: |
| 216 | + pub_key = algo.prepare_key(keyfile.read()) |
| 217 | + |
| 218 | + result = algo.verify(message, pub_key, sig) |
| 219 | + self.assertTrue(result) |
| 220 | + |
| 221 | + @unittest.skipIf(not has_crypto, 'Not supported without cryptography library') |
| 222 | + def test_rsa_pss_verify_should_return_false_if_signature_invalid(self): |
| 223 | + algo = RSAPSSAlgorithm(RSAPSSAlgorithm.SHA256) |
| 224 | + |
| 225 | + jwt_message = ensure_bytes('Hello World!') |
| 226 | + |
| 227 | + jwt_sig = base64.b64decode(ensure_bytes( |
| 228 | + 'ywKAUGRIDC//6X+tjvZA96yEtMqpOrSppCNfYI7NKyon3P7doud5v65oWNu' |
| 229 | + 'vQsz0fzPGfF7mQFGo9Cm9Vn0nljm4G6PtqZRbz5fXNQBH9k10gq34AtM02c' |
| 230 | + '/cveqACQ8gF3zxWh6qr9jVqIpeMEaEBIkvqG954E0HT9s9ybHShgHX9mlWk' |
| 231 | + '186/LopP4xe5c/hxOQjwhv6yDlTiwJFiqjNCvj0GyBKsc4iECLGIIO+4mC4' |
| 232 | + 'daOCWqbpZDuLb1imKpmm8Nsm56kAxijMLZnpCcnPgyb7CqG+B93W9GHglA5' |
| 233 | + 'drUeR1gRtO7vqbZMsCAQ4bpjXxwbYyjQlEVuMl73UL6sOWg==')) |
| 234 | + |
| 235 | + jwt_sig += ensure_bytes('123') # Signature is now invalid |
| 236 | + |
| 237 | + with open(key_path('testkey_rsa.pub'), 'r') as keyfile: |
| 238 | + jwt_pub_key = algo.prepare_key(keyfile.read()) |
| 239 | + |
| 240 | + result = algo.verify(jwt_message, jwt_pub_key, jwt_sig) |
| 241 | + self.assertFalse(result) |
| 242 | + |
| 243 | + @unittest.skipIf(not has_crypto, 'Not supported without cryptography library') |
| 244 | + def test_rsa_pss_verify_should_return_true_if_signature_valid(self): |
| 245 | + algo = RSAPSSAlgorithm(RSAPSSAlgorithm.SHA256) |
| 246 | + |
| 247 | + jwt_message = ensure_bytes('Hello World!') |
| 248 | + |
| 249 | + jwt_sig = base64.b64decode(ensure_bytes( |
| 250 | + 'ywKAUGRIDC//6X+tjvZA96yEtMqpOrSppCNfYI7NKyon3P7doud5v65oWNu' |
| 251 | + 'vQsz0fzPGfF7mQFGo9Cm9Vn0nljm4G6PtqZRbz5fXNQBH9k10gq34AtM02c' |
| 252 | + '/cveqACQ8gF3zxWh6qr9jVqIpeMEaEBIkvqG954E0HT9s9ybHShgHX9mlWk' |
| 253 | + '186/LopP4xe5c/hxOQjwhv6yDlTiwJFiqjNCvj0GyBKsc4iECLGIIO+4mC4' |
| 254 | + 'daOCWqbpZDuLb1imKpmm8Nsm56kAxijMLZnpCcnPgyb7CqG+B93W9GHglA5' |
| 255 | + 'drUeR1gRtO7vqbZMsCAQ4bpjXxwbYyjQlEVuMl73UL6sOWg==')) |
| 256 | + |
| 257 | + with open(key_path('testkey_rsa.pub'), 'r') as keyfile: |
200 | 258 | jwt_pub_key = algo.prepare_key(keyfile.read()) |
201 | 259 |
|
202 | 260 | result = algo.verify(jwt_message, jwt_pub_key, jwt_sig) |
|
0 commit comments