Skip to content

Commit 97da28c

Browse files
authored
Merge pull request #107 from mpdavis/cryptography-x509-certificate-support
Support X509 certificates with cryptography
2 parents e70b625 + d3e6f73 commit 97da28c

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

jose/backends/cryptography_backend.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from cryptography.hazmat.primitives import hashes, serialization
1313
from cryptography.hazmat.primitives.asymmetric import ec, rsa, padding
1414
from cryptography.hazmat.primitives.serialization import load_pem_private_key, load_pem_public_key
15+
from cryptography.x509 import load_pem_x509_certificate
1516

1617

1718
class CryptographyECKey(Key):
@@ -195,11 +196,14 @@ def __init__(self, key, algorithm, cryptography_backend=default_backend):
195196

196197
if isinstance(key, six.binary_type):
197198
try:
199+
if key.startswith(b'-----BEGIN CERTIFICATE-----'):
200+
self._process_cert(key)
201+
return
202+
198203
try:
199-
key = load_pem_public_key(key, self.cryptography_backend())
204+
self.prepared_key = load_pem_public_key(key, self.cryptography_backend())
200205
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())
203207
except Exception as e:
204208
raise JWKError(e)
205209
return
@@ -247,6 +251,10 @@ def _process_jwk(self, jwk_dict):
247251

248252
return private.private_key(self.cryptography_backend())
249253

254+
def _process_cert(self, key):
255+
key = load_pem_x509_certificate(key, self.cryptography_backend())
256+
self.prepared_key = key.public_key()
257+
250258
def sign(self, msg):
251259
try:
252260
signature = self.prepared_key.sign(

0 commit comments

Comments
 (0)