|
12 | 12 | from cryptography.hazmat.primitives import hashes, serialization |
13 | 13 | from cryptography.hazmat.primitives.asymmetric import ec, rsa, padding |
14 | 14 | from cryptography.hazmat.primitives.serialization import load_pem_private_key, load_pem_public_key |
| 15 | +from cryptography.x509 import load_pem_x509_certificate |
15 | 16 |
|
16 | 17 |
|
17 | 18 | class CryptographyECKey(Key): |
@@ -195,11 +196,14 @@ def __init__(self, key, algorithm, cryptography_backend=default_backend): |
195 | 196 |
|
196 | 197 | if isinstance(key, six.binary_type): |
197 | 198 | try: |
| 199 | + if key.startswith(b'-----BEGIN CERTIFICATE-----'): |
| 200 | + self._process_cert(key) |
| 201 | + return |
| 202 | + |
198 | 203 | try: |
199 | | - key = load_pem_public_key(key, self.cryptography_backend()) |
| 204 | + self.prepared_key = load_pem_public_key(key, self.cryptography_backend()) |
200 | 205 | except ValueError: |
201 | | - key = load_pem_private_key(key, password=None, backend=self.cryptography_backend()) |
202 | | - self.prepared_key = key |
| 206 | + self.prepared_key = load_pem_private_key(key, password=None, backend=self.cryptography_backend()) |
203 | 207 | except Exception as e: |
204 | 208 | raise JWKError(e) |
205 | 209 | return |
@@ -247,6 +251,10 @@ def _process_jwk(self, jwk_dict): |
247 | 251 |
|
248 | 252 | return private.private_key(self.cryptography_backend()) |
249 | 253 |
|
| 254 | + def _process_cert(self, key): |
| 255 | + key = load_pem_x509_certificate(key, self.cryptography_backend()) |
| 256 | + self.prepared_key = key.public_key() |
| 257 | + |
250 | 258 | def sign(self, msg): |
251 | 259 | try: |
252 | 260 | signature = self.prepared_key.sign( |
|
0 commit comments